diff --git a/backend/omr/dist/gauge-server.js b/backend/omr/dist/gauge-server.js index 7d0a2a5e9cdc8dd884d7289652c61c420e846f95..58b356b9ad1fbe638f7e46e385e4460fc0a9f111 100644 --- a/backend/omr/dist/gauge-server.js +++ b/backend/omr/dist/gauge-server.js @@ -1,2 +1,2 @@ -"use strict";var e=require("yargs"),t=require("msgpackr"),i=require("zeromq"),r=require("skia-canvas");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=n(require("gl"));globalThis.ImageData=r.ImageData;const o=e=>{const t=[];for(const i of e)for(const e of i)t.push(e);return t};class GLCanvas{constructor(e){this._width=256,this._height=192,this.ctx=e}get width(){return this._width}set width(e){this._width=e;this.ctx.getExtension("STACKGL_resize_drawingbuffer").resize(e,this.height)}get height(){return this._height}set height(e){this._height=e;this.ctx.getExtension("STACKGL_resize_drawingbuffer").resize(this.width,e)}addEventListener(e){}async toBuffer(){const e=new Uint8Array(this.width*this.height*4);this.ctx.readPixels(0,0,this.width,this.height,this.ctx.RGBA,this.ctx.UNSIGNED_BYTE,e);const t=new r.Canvas(this.width,this.height);return t.getContext("2d").putImageData(new r.ImageData(new Uint8ClampedArray(e),this.width,this.height),0,0),t.toBuffer("png")}}const s=a.default(512,192,{antialias:!0});const h=new class GaugeRenderer{constructor(e){this.width=256,this.height=192,this.source=e.source,this.gauge=e.gauge,this.canvas=new GLCanvas(s),s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.HIGH_FLOAT),s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.HIGH_FLOAT),s.getExtension("OES_element_index_uint"),this.program=s.createProgram();const t=s.createShader(s.VERTEX_SHADER);s.shaderSource(t,"//#version 300 es\n//#define attribute in\n//#define varying out\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define VERTEX_TEXTURES\n#define USE_MAP\n#define USE_UV\n#define BONE_TEXTURE\n#define DOUBLE_SIDED\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\n\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n\n#ifdef USE_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n\nvoid main() {\n#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif\n\n\tvec3 transformed = vec3( position );\n\n\tvec4 mvPosition = vec4( transformed, 1.0 );\n\tmvPosition = modelViewMatrix * mvPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n}\n"),s.compileShader(t);const i=s.getShaderInfoLog(t);i&&console.warn("vs log:",i);const r=s.createShader(s.FRAGMENT_SHADER);s.shaderSource(r,"//#version 300 es\n//#define varying in\n//out highp vec4 pc_fragColor;\n//#define gl_FragColor pc_fragColor\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define USE_MAP\n#define USE_UV\n#define DOUBLE_SIDED\nuniform vec3 cameraPosition;\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 mapTexelToLinear( vec4 value ) { return LinearToLinear( value ); }\n\nuniform vec3 diffuse;\nuniform float opacity;\n\n#if defined( USE_UV )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n\n\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n\n\tgl_FragColor = diffuseColor;\n}\n"),s.compileShader(r);const n=s.getShaderInfoLog(r);n&&console.warn("fs log:",n),s.attachShader(this.program,t),s.attachShader(this.program,r),s.linkProgram(this.program);const a=s.getProgramInfoLog(this.program);a&&console.warn("program log:",a),s.deleteShader(t),s.deleteShader(r);const{name:o}=s.getActiveUniform(this.program,0),h=s.getUniformLocation(this.program,o),{name:c}=s.getActiveUniform(this.program,1),g=s.getUniformLocation(this.program,c),{name:f}=s.getActiveUniform(this.program,2),d=s.getUniformLocation(this.program,f),{name:u}=s.getActiveUniform(this.program,3),l=s.getUniformLocation(this.program,u),{name:m}=s.getActiveUniform(this.program,4),E=s.getUniformLocation(this.program,m),{name:p}=s.getActiveUniform(this.program,5),v=s.getUniformLocation(this.program,p);s.useProgram(this.program),s.uniformMatrix4fv(g,!1,new Float32Array([.002739726100116968,0,0,0,0,.010416666977107525,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1])),s.uniformMatrix4fv(h,!1,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,-1,1])),s.uniformMatrix3fv(d,!1,new Float32Array([1,0,0,0,1,0,0,0,1])),s.uniform3f(l,1,1,1),s.uniform1f(E,1),s.uniform1i(v,0),this.texture=s.createTexture(),s.activeTexture(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,this.texture),s.pixelStorei(37440,!0),s.pixelStorei(37441,!1),s.pixelStorei(s.UNPACK_ALIGNMENT,4),s.pixelStorei(37443,0),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.disable(s.CULL_FACE),s.depthMask(!0),s.colorMask(!0,!0,!0,!0),s.disable(s.STENCIL_TEST),s.disable(s.POLYGON_OFFSET_FILL),s.disable(s.SAMPLE_ALPHA_TO_COVERAGE),this.pos=s.createBuffer(),this.uv=s.createBuffer(),this.ib=s.createBuffer();const A=s.getAttribLocation(this.program,"position"),_=s.getAttribLocation(this.program,"uv");s.enableVertexAttribArray(A),s.bindBuffer(s.ARRAY_BUFFER,this.pos),s.vertexAttribPointer(A,3,s.FLOAT,!1,0,0),s.enableVertexAttribArray(_),s.bindBuffer(s.ARRAY_BUFFER,this.uv),s.vertexAttribPointer(_,2,s.FLOAT,!1,0,0)}updateMaterial({width:e=null,sw:t=this.width,sh:i=this.height}={}){if(t!==this.width||i!==this.height){Number.isFinite(e)?this.width=e:this.width=Math.round(this.height*t/i),this.canvas.width=this.width,this.canvas.height=this.height,s.viewport(0,0,this.width,this.height);const r=s.getUniformLocation(this.program,"projectionMatrix");s.uniformMatrix4fv(r,!1,new Float32Array([2/this.width,0,0,0,0,2/this.height,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1]))}const n=new r.Canvas(this.source.width,this.source.height);n.getContext("2d").drawImage(this.source,0,0),s.bindTexture(s.TEXTURE_2D,this.texture),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,n),s.generateMipmap(s.TEXTURE_2D)}updateGeometry(e=null){const{width:t,height:i}=this.gauge,n=new r.Canvas(t,i).getContext("2d");n.drawImage(this.gauge,0,0);const{data:a}=n.getImageData(0,0,t,i),h=this.width/t;e=Math.round(Number.isFinite(e)?e:i/2),e=Math.max(0,Math.min(i-1,e));const c=Array(i).fill(null).map((e,r)=>Array(t).fill(null).map((e,n)=>({uv:[(n+.5)/t,1-(r+.5)/i],position:[(n-t/2)*h,(a[4*(r*t+n)]+a[4*(r*t+n)+2]/256-128)/h,0]})));for(let i=e;i>0;--i)for(let e=0;ee.uv)),f=o(o(c).map(e=>e.position)),d=Array(i-1).fill(null).map((e,i)=>Array(t-1).fill(null).map((e,r)=>[i*t+r,i*t+r+1,(i+1)*t+r,(i+1)*t+r,(i+1)*t+r+1,i*t+r+1])),u=o(o(d));s.bindBuffer(s.ARRAY_BUFFER,this.pos),s.bufferData(s.ARRAY_BUFFER,new Float32Array(f),s.STATIC_DRAW),s.bindBuffer(s.ARRAY_BUFFER,this.uv),s.bufferData(s.ARRAY_BUFFER,new Float32Array(g),s.STATIC_DRAW),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,this.ib),s.bufferData(s.ELEMENT_ARRAY_BUFFER,new Uint32Array(u),s.STATIC_DRAW),this.primitiveCount=u.length}render(){return s.clearColor(1,1,1,1),s.clear(s.COLOR_BUFFER_BIT),s.drawElements(s.TRIANGLES,this.primitiveCount,s.UNSIGNED_INT,0),this.canvas.toBuffer()}dispose(){s.deleteBuffer(this.pos),s.deleteBuffer(this.uv),s.deleteBuffer(this.ib),s.deleteProgram(this.program),s.deleteTexture(this.texture)}}({source:new r.Image,gauge:new r.Image});console.info("%cstarry-omr%c v1.0.0 2026-05-05T13:56:38.174Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;");const c=["bind","constructor","toString","toJSON"];class GaugeServer{async bind(e){this.socket=new i.Reply,await this.socket.bind(e),console.log(`gauge server listening at ${e}`);try{for await(const[e]of this.socket){const{method:i,args:r,kwargs:n}=t.unpack(e)??{};if(console.log(`request: ${i}`),!c.includes(i)&&this[i])try{const e=await(this[i]?.(r,n));console.log(`success: ${i}`),await this.socket.send(t.pack({code:0,msg:"success",data:e}))}catch(e){console.error(`fail: ${i}, error: ${e}`),await this.socket.send(t.pack({code:-1,msg:`Error: ${JSON.stringify(e)}`,data:null}))}else console.error(`fail: ${i}, error: no method`),await this.socket.send(t.pack({code:-1,msg:`no method: ${i}`,data:null}))}}catch(t){console.log("restarting gauge server..",t.stack),await this.socket.close(),await this.bind(e)}}async predict(e,t){let i,n,a;return e&&([i,n,a]=e),t&&({source:i,gauge:n,baseY:a}=t),(async(e,t,i)=>{const n=await r.loadImage(e),a=await r.loadImage(t);return h.source=n,h.gauge=a,h.updateMaterial({width:a.width,sw:n.width,sh:n.height}),h.updateGeometry(i),console.log(process.memoryUsage().heapUsed),{buffer:await h.render(),size:{width:h.width,height:h.height}}})(i,n,a)}}!async function(){const t=new GaugeServer;await t.bind(`tcp://*:${e.argv.port}`)}(); +"use strict";var e=require("yargs"),t=require("msgpackr"),i=require("zeromq"),r=require("skia-canvas");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=n(require("gl"));globalThis.ImageData=r.ImageData;const o=e=>{const t=[];for(const i of e)for(const e of i)t.push(e);return t};class GLCanvas{constructor(e){this._width=256,this._height=192,this.ctx=e}get width(){return this._width}set width(e){this._width=e;this.ctx.getExtension("STACKGL_resize_drawingbuffer").resize(e,this.height)}get height(){return this._height}set height(e){this._height=e;this.ctx.getExtension("STACKGL_resize_drawingbuffer").resize(this.width,e)}addEventListener(e){}async toBuffer(){const e=new Uint8Array(this.width*this.height*4);this.ctx.readPixels(0,0,this.width,this.height,this.ctx.RGBA,this.ctx.UNSIGNED_BYTE,e);const t=new r.Canvas(this.width,this.height);return t.getContext("2d").putImageData(new r.ImageData(new Uint8ClampedArray(e),this.width,this.height),0,0),t.toBuffer("png")}}const s=a.default(512,192,{antialias:!0});const h=new class GaugeRenderer{constructor(e){this.width=256,this.height=192,this.source=e.source,this.gauge=e.gauge,this.canvas=new GLCanvas(s),s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.HIGH_FLOAT),s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.HIGH_FLOAT),s.getExtension("OES_element_index_uint"),this.program=s.createProgram();const t=s.createShader(s.VERTEX_SHADER);s.shaderSource(t,"//#version 300 es\n//#define attribute in\n//#define varying out\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define VERTEX_TEXTURES\n#define USE_MAP\n#define USE_UV\n#define BONE_TEXTURE\n#define DOUBLE_SIDED\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\n\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n\n#ifdef USE_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n\nvoid main() {\n#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif\n\n\tvec3 transformed = vec3( position );\n\n\tvec4 mvPosition = vec4( transformed, 1.0 );\n\tmvPosition = modelViewMatrix * mvPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n}\n"),s.compileShader(t);const i=s.getShaderInfoLog(t);i&&console.warn("vs log:",i);const r=s.createShader(s.FRAGMENT_SHADER);s.shaderSource(r,"//#version 300 es\n//#define varying in\n//out highp vec4 pc_fragColor;\n//#define gl_FragColor pc_fragColor\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define USE_MAP\n#define USE_UV\n#define DOUBLE_SIDED\nuniform vec3 cameraPosition;\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 mapTexelToLinear( vec4 value ) { return LinearToLinear( value ); }\n\nuniform vec3 diffuse;\nuniform float opacity;\n\n#if defined( USE_UV )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n\n\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n\n\tgl_FragColor = diffuseColor;\n}\n"),s.compileShader(r);const n=s.getShaderInfoLog(r);n&&console.warn("fs log:",n),s.attachShader(this.program,t),s.attachShader(this.program,r),s.linkProgram(this.program);const a=s.getProgramInfoLog(this.program);a&&console.warn("program log:",a),s.deleteShader(t),s.deleteShader(r);const{name:o}=s.getActiveUniform(this.program,0),h=s.getUniformLocation(this.program,o),{name:c}=s.getActiveUniform(this.program,1),g=s.getUniformLocation(this.program,c),{name:f}=s.getActiveUniform(this.program,2),d=s.getUniformLocation(this.program,f),{name:u}=s.getActiveUniform(this.program,3),l=s.getUniformLocation(this.program,u),{name:m}=s.getActiveUniform(this.program,4),E=s.getUniformLocation(this.program,m),{name:p}=s.getActiveUniform(this.program,5),v=s.getUniformLocation(this.program,p);s.useProgram(this.program),s.uniformMatrix4fv(g,!1,new Float32Array([.002739726100116968,0,0,0,0,.010416666977107525,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1])),s.uniformMatrix4fv(h,!1,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,-1,1])),s.uniformMatrix3fv(d,!1,new Float32Array([1,0,0,0,1,0,0,0,1])),s.uniform3f(l,1,1,1),s.uniform1f(E,1),s.uniform1i(v,0),this.texture=s.createTexture(),s.activeTexture(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,this.texture),s.pixelStorei(37440,!0),s.pixelStorei(37441,!1),s.pixelStorei(s.UNPACK_ALIGNMENT,4),s.pixelStorei(37443,0),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.disable(s.CULL_FACE),s.depthMask(!0),s.colorMask(!0,!0,!0,!0),s.disable(s.STENCIL_TEST),s.disable(s.POLYGON_OFFSET_FILL),s.disable(s.SAMPLE_ALPHA_TO_COVERAGE),this.pos=s.createBuffer(),this.uv=s.createBuffer(),this.ib=s.createBuffer();const A=s.getAttribLocation(this.program,"position"),_=s.getAttribLocation(this.program,"uv");s.enableVertexAttribArray(A),s.bindBuffer(s.ARRAY_BUFFER,this.pos),s.vertexAttribPointer(A,3,s.FLOAT,!1,0,0),s.enableVertexAttribArray(_),s.bindBuffer(s.ARRAY_BUFFER,this.uv),s.vertexAttribPointer(_,2,s.FLOAT,!1,0,0)}updateMaterial({width:e=null,sw:t=this.width,sh:i=this.height}={}){if(t!==this.width||i!==this.height){Number.isFinite(e)?this.width=e:this.width=Math.round(this.height*t/i),this.canvas.width=this.width,this.canvas.height=this.height,s.viewport(0,0,this.width,this.height);const r=s.getUniformLocation(this.program,"projectionMatrix");s.uniformMatrix4fv(r,!1,new Float32Array([2/this.width,0,0,0,0,2/this.height,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1]))}const n=new r.Canvas(this.source.width,this.source.height);n.getContext("2d").drawImage(this.source,0,0),s.bindTexture(s.TEXTURE_2D,this.texture),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,n),s.generateMipmap(s.TEXTURE_2D)}updateGeometry(e=null){const{width:t,height:i}=this.gauge,n=new r.Canvas(t,i).getContext("2d");n.drawImage(this.gauge,0,0);const{data:a}=n.getImageData(0,0,t,i),h=this.width/t;e=Math.round(Number.isFinite(e)?e:i/2),e=Math.max(0,Math.min(i-1,e));const c=Array(i).fill(null).map((e,r)=>Array(t).fill(null).map((e,n)=>({uv:[(n+.5)/t,1-(r+.5)/i],position:[(n-t/2)*h,(a[4*(r*t+n)]+a[4*(r*t+n)+2]/256-128)/h,0]})));for(let i=e;i>0;--i)for(let e=0;ee.uv)),f=o(o(c).map(e=>e.position)),d=Array(i-1).fill(null).map((e,i)=>Array(t-1).fill(null).map((e,r)=>[i*t+r,i*t+r+1,(i+1)*t+r,(i+1)*t+r,(i+1)*t+r+1,i*t+r+1])),u=o(o(d));s.bindBuffer(s.ARRAY_BUFFER,this.pos),s.bufferData(s.ARRAY_BUFFER,new Float32Array(f),s.STATIC_DRAW),s.bindBuffer(s.ARRAY_BUFFER,this.uv),s.bufferData(s.ARRAY_BUFFER,new Float32Array(g),s.STATIC_DRAW),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,this.ib),s.bufferData(s.ELEMENT_ARRAY_BUFFER,new Uint32Array(u),s.STATIC_DRAW),this.primitiveCount=u.length}render(){return s.clearColor(1,1,1,1),s.clear(s.COLOR_BUFFER_BIT),s.drawElements(s.TRIANGLES,this.primitiveCount,s.UNSIGNED_INT,0),this.canvas.toBuffer()}dispose(){s.deleteBuffer(this.pos),s.deleteBuffer(this.uv),s.deleteBuffer(this.ib),s.deleteProgram(this.program),s.deleteTexture(this.texture)}}({source:new r.Image,gauge:new r.Image});console.info("%cstarry-omr%c v1.0.0 2026-05-05T14:46:55.823Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;");const c=["bind","constructor","toString","toJSON"];class GaugeServer{async bind(e){this.socket=new i.Reply,await this.socket.bind(e),console.log(`gauge server listening at ${e}`);try{for await(const[e]of this.socket){const{method:i,args:r,kwargs:n}=t.unpack(e)??{};if(console.log(`request: ${i}`),!c.includes(i)&&this[i])try{const e=await(this[i]?.(r,n));console.log(`success: ${i}`),await this.socket.send(t.pack({code:0,msg:"success",data:e}))}catch(e){console.error(`fail: ${i}, error: ${e}`),await this.socket.send(t.pack({code:-1,msg:`Error: ${JSON.stringify(e)}`,data:null}))}else console.error(`fail: ${i}, error: no method`),await this.socket.send(t.pack({code:-1,msg:`no method: ${i}`,data:null}))}}catch(t){console.log("restarting gauge server..",t.stack),await this.socket.close(),await this.bind(e)}}async predict(e,t){let i,n,a;return e&&([i,n,a]=e),t&&({source:i,gauge:n,baseY:a}=t),(async(e,t,i)=>{const n=await r.loadImage(e),a=await r.loadImage(t);return h.source=n,h.gauge=a,h.updateMaterial({width:a.width,sw:n.width,sh:n.height}),h.updateGeometry(i),console.log(process.memoryUsage().heapUsed),{buffer:await h.render(),size:{width:h.width,height:h.height}}})(i,n,a)}}!async function(){const t=new GaugeServer;await t.bind(`tcp://*:${e.argv.port}`)}(); //# sourceMappingURL=gauge-server.js.map diff --git a/backend/omr/dist/gauge-server.js.map b/backend/omr/dist/gauge-server.js.map index 3ba93508d6d95fd7788e8821556c9f9503e8a084..74baf896d068024a34852247ad1351f690e02631 100644 --- a/backend/omr/dist/gauge-server.js.map +++ b/backend/omr/dist/gauge-server.js.map @@ -1 +1 @@ -{"version":3,"file":"gauge-server.js","sources":["../../libs/gauge-renderer.ts","../../../src/pages/playground/scripts/shaders.ts","../src/gauge-server.ts"],"sourcesContent":["/* global cv */\nimport { Canvas, Image, loadImage, ImageData } from 'skia-canvas';\n// threejs内部使用了OffscreenCanvas\n//(globalThis as any).OffscreenCanvas = (globalThis as any).OffscreenCanvas || Canvas;\nglobalThis.ImageData = ImageData;\n\nimport createContext from 'gl';\n\nimport * as SHADER_SOURCE from '../../src/pages/playground/scripts/shaders';\n\n//const cc = (a: T[][]): T[] => a.flat(1);\t// This is slower!\nconst cc = (a: T[][]): T[] => {\n\tconst result: T[] = [];\n\tfor (const x of a) {\n\t\tfor (const e of x) result.push(e);\n\t}\n\n\treturn result;\n};\n\ntype RenderContext = ReturnType;\n\nclass GLCanvas {\n\tctx: RenderContext;\n\t_width: number = 256;\n\t_height: number = 192;\n\n\tresizeBuffer: number[];\n\n\tconstructor(context: RenderContext) {\n\t\tthis.ctx = context;\n\t}\n\n\tget width() {\n\t\treturn this._width;\n\t}\n\n\tset width(width: number) {\n\t\tthis._width = width;\n\t\tconst ext = this.ctx.getExtension('STACKGL_resize_drawingbuffer');\n\t\text.resize(width, this.height);\n\t}\n\n\tget height() {\n\t\treturn this._height;\n\t}\n\n\tset height(height: number) {\n\t\tthis._height = height;\n\t\tconst ext = this.ctx.getExtension('STACKGL_resize_drawingbuffer');\n\t\text.resize(this.width, height);\n\t}\n\n\t/*// @ts-ignore\n\tgetContext(type, options) {\n\t\tif (type === 'webgl') {\n\t\t\tthis.ctx = createContext(200, 300, options);\n\n\t\t\treturn this.ctx;\n\t\t}\n\n\t\treturn null as WebGLRenderingContext;\n\t}*/\n\n\taddEventListener(evt: 'webglcontextlost') {}\n\n\tasync toBuffer() {\n\t\tconst pixels = new Uint8Array(this.width * this.height * 4);\n\t\tthis.ctx.readPixels(0, 0, this.width, this.height, this.ctx.RGBA, this.ctx.UNSIGNED_BYTE, pixels);\n\n\t\tconst canvas = new Canvas(this.width, this.height);\n\t\tconst ctx = canvas.getContext('2d');\n\t\tctx.putImageData(new ImageData(new Uint8ClampedArray(pixels), this.width, this.height), 0, 0);\n\n\t\treturn canvas.toBuffer('png');\n\t}\n}\n\ninterface GaugeRendererInitOptions {\n\tsource: HTMLImageElement;\n\tgauge: HTMLImageElement;\n}\n\nconst gl = createContext(512, 192, { antialias: true });\n\nexport default class GaugeRenderer {\n\tsource: Image; // base64 string\n\tgauge: Image;\n\tcanvas: GLCanvas;\n\n\tprogram: WebGLProgram;\n\ttexture: WebGLTexture;\n\tpos: WebGLBuffer;\n\tuv: WebGLBuffer;\n\tib: WebGLBuffer;\n\tprimitiveCount: number;\n\n\twidth: number = 256;\n\theight: number = 192;\n\n\tconstructor(options: GaugeRendererInitOptions) {\n\t\tthis.source = options.source;\n\t\tthis.gauge = options.gauge;\n\t\tthis.canvas = new GLCanvas(gl);\n\n\t\tgl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);\n\t\tgl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);\n\n\t\tgl.getExtension('OES_element_index_uint');\n\n\t\t// initial program\n\t\tthis.program = gl.createProgram();\n\n\t\tconst vsShader = gl.createShader(gl.VERTEX_SHADER);\n\t\tgl.shaderSource(vsShader, SHADER_SOURCE.vs);\n\t\tgl.compileShader(vsShader);\n\t\tconst logVs = gl.getShaderInfoLog(vsShader);\n\t\tlogVs && console.warn('vs log:', logVs);\n\n\t\tconst fsShader = gl.createShader(gl.FRAGMENT_SHADER);\n\t\tgl.shaderSource(fsShader, SHADER_SOURCE.fs);\n\t\tgl.compileShader(fsShader);\n\t\tconst logFs = gl.getShaderInfoLog(fsShader);\n\t\tlogFs && console.warn('fs log:', logFs);\n\n\t\tgl.attachShader(this.program, vsShader);\n\t\tgl.attachShader(this.program, fsShader);\n\t\tgl.linkProgram(this.program);\n\n\t\tconst logProgram = gl.getProgramInfoLog(this.program);\n\t\tlogProgram && console.warn('program log:', logProgram);\n\n\t\tgl.deleteShader(vsShader);\n\t\tgl.deleteShader(fsShader);\n\n\t\tconst { name: nameModelView } = gl.getActiveUniform(this.program, 0);\n\t\tconst modelMat = gl.getUniformLocation(this.program, nameModelView);\n\t\tconst { name: nameProj } = gl.getActiveUniform(this.program, 1);\n\t\tconst projMat = gl.getUniformLocation(this.program, nameProj);\n\t\tconst { name: nameUV } = gl.getActiveUniform(this.program, 2);\n\t\tconst uvMat = gl.getUniformLocation(this.program, nameUV);\n\t\tconst { name: nameDiffuse } = gl.getActiveUniform(this.program, 3);\n\t\tconst diffuse = gl.getUniformLocation(this.program, nameDiffuse);\n\t\tconst { name: nameOpacity } = gl.getActiveUniform(this.program, 4);\n\t\tconst opacity = gl.getUniformLocation(this.program, nameOpacity);\n\t\tconst { name: nameMap } = gl.getActiveUniform(this.program, 5);\n\t\tconst map = gl.getUniformLocation(this.program, nameMap);\n\n\t\tgl.useProgram(this.program);\n\n\t\tgl.uniformMatrix4fv(\n\t\t\tprojMat,\n\t\t\tfalse,\n\t\t\t//new Float32Array([0.0026385225355625153, 0, 0, 0, 0, -0.010416666977107525, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t\tnew Float32Array([0.002739726100116968, 0, 0, 0, 0, 0.010416666977107525, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t);\n\t\tgl.uniformMatrix4fv(modelMat, false, new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, -1, 1]));\n\t\tgl.uniformMatrix3fv(uvMat, false, new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]));\n\t\tgl.uniform3f(diffuse, 1, 1, 1);\n\t\tgl.uniform1f(opacity, 1);\n\t\tgl.uniform1i(map, 0);\n\n\t\t// texture\n\t\tthis.texture = gl.createTexture();\n\t\tgl.activeTexture(gl.TEXTURE0);\n\t\tgl.bindTexture(gl.TEXTURE_2D, this.texture);\n\t\tgl.pixelStorei(37440, true);\n\t\tgl.pixelStorei(37441, false);\n\t\tgl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);\n\t\tgl.pixelStorei(37443, 0);\n\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n\n\t\tgl.disable(gl.CULL_FACE);\n\t\tgl.depthMask(true);\n\t\tgl.colorMask(true, true, true, true);\n\t\tgl.disable(gl.STENCIL_TEST);\n\t\tgl.disable(gl.POLYGON_OFFSET_FILL);\n\t\tgl.disable(gl.SAMPLE_ALPHA_TO_COVERAGE);\n\n\t\t// buffers\n\t\tthis.pos = gl.createBuffer();\n\t\tthis.uv = gl.createBuffer();\n\t\tthis.ib = gl.createBuffer();\n\n\t\tconst iPos = gl.getAttribLocation(this.program, 'position');\n\t\tconst iUV = gl.getAttribLocation(this.program, 'uv');\n\t\t//console.log('indices:', iPos, iUV);\n\n\t\tgl.enableVertexAttribArray(iPos);\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.pos);\n\t\tgl.vertexAttribPointer(iPos, 3, gl.FLOAT, false, 0, 0);\n\n\t\tgl.enableVertexAttribArray(iUV);\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.uv);\n\t\tgl.vertexAttribPointer(iUV, 2, gl.FLOAT, false, 0, 0);\n\t}\n\n\tupdateMaterial({ width = null, sw = this.width, sh = this.height } = {}) {\n\t\tif (sw !== this.width || sh !== this.height) {\n\t\t\tif (Number.isFinite(width)) {\n\t\t\t\tthis.width = width;\n\t\t\t} else {\n\t\t\t\tthis.width = Math.round((this.height * sw) / sh);\n\t\t\t}\n\n\t\t\tthis.canvas.width = this.width;\n\t\t\tthis.canvas.height = this.height;\n\n\t\t\tgl.viewport(0, 0, this.width, this.height);\n\n\t\t\tconst projMat = gl.getUniformLocation(this.program, 'projectionMatrix');\n\t\t\tgl.uniformMatrix4fv(\n\t\t\t\tprojMat,\n\t\t\t\tfalse,\n\t\t\t\tnew Float32Array([2 / this.width, 0, 0, 0, 0, 2 / this.height, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t\t);\n\t\t}\n\n\t\t// image to canvas\n\t\tconst sourceCanvas = new Canvas(this.source.width, this.source.height);\n\t\tsourceCanvas.getContext('2d').drawImage(this.source, 0, 0);\n\n\t\tgl.bindTexture(gl.TEXTURE_2D, this.texture);\n\t\tgl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, sourceCanvas as any);\n\t\tgl.generateMipmap(gl.TEXTURE_2D);\n\t}\n\n\tupdateGeometry(baseY = null) {\n\t\tconst { width, height } = this.gauge;\n\t\tconst canvas = new Canvas(width, height);\n\t\tconst ctx = canvas.getContext('2d');\n\t\tctx.drawImage(this.gauge, 0, 0);\n\t\tconst { data: buffer } = ctx.getImageData(0, 0, width, height);\n\n\t\tconst xFactor = this.width / width;\n\n\t\tbaseY = Math.round(Number.isFinite(baseY) ? baseY : height / 2);\n\t\tbaseY = Math.max(0, Math.min(height - 1, baseY));\n\n\t\tconst propertyArray = Array(height)\n\t\t\t.fill(null)\n\t\t\t.map((_, y) =>\n\t\t\t\tArray(width)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, x) => ({\n\t\t\t\t\t\tuv: [(x + 0.5) / width, 1 - (y + 0.5) / height],\n\t\t\t\t\t\tposition: [(x - width / 2) * xFactor, (buffer[(y * width + x) * 4] + buffer[(y * width + x) * 4 + 2] / 256 - 128) / xFactor, 0],\n\t\t\t\t\t}))\n\t\t\t);\n\n\t\t// integral X by K\n\t\tfor (let y = baseY; y > 0; --y) {\n\t\t\tfor (let x = 0; x < width; ++x)\n\t\t\t\tpropertyArray[y - 1][x].position[0] = propertyArray[y][x].position[0] - ((buffer[(y * width + x) * 4 + 1] - 128) * xFactor) / 127;\n\t\t}\n\t\tfor (let y = baseY + 1; y < height; ++y) {\n\t\t\tfor (let x = 0; x < width; ++x)\n\t\t\t\tpropertyArray[y][x].position[0] = propertyArray[y - 1][x].position[0] + ((buffer[((y - 1) * width + x) * 4 + 1] - 128) * xFactor) / 127;\n\t\t}\n\n\t\tconst uvs = cc(cc(propertyArray).map((p) => p.uv));\n\t\tconst positions = cc(cc(propertyArray).map((p) => p.position));\n\n\t\tconst faces = Array(height - 1)\n\t\t\t.fill(null)\n\t\t\t.map((_, y) =>\n\t\t\t\tArray(width - 1)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, x) => [y * width + x, y * width + x + 1, (y + 1) * width + x, (y + 1) * width + x, (y + 1) * width + x + 1, y * width + x + 1])\n\t\t\t);\n\t\tconst indices = cc(cc(faces));\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.pos);\n\t\tgl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.uv);\n\t\tgl.bufferData(gl.ARRAY_BUFFER, new Float32Array(uvs), gl.STATIC_DRAW);\n\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.ib);\n\t\tgl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint32Array(indices), gl.STATIC_DRAW);\n\n\t\tthis.primitiveCount = indices.length;\n\t}\n\n\trender() {\n\t\tgl.clearColor(1, 1, 1, 1);\n\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\n\t\t//gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.ib);\n\n\t\tgl.drawElements(gl.TRIANGLES, this.primitiveCount, gl.UNSIGNED_INT, 0);\n\n\t\treturn this.canvas.toBuffer();\n\t}\n\n\tdispose() {\n\t\tgl.deleteBuffer(this.pos);\n\t\tgl.deleteBuffer(this.uv);\n\t\tgl.deleteBuffer(this.ib);\n\n\t\tgl.deleteProgram(this.program);\n\t\tgl.deleteTexture(this.texture);\n\t}\n}\n\nconst gaugeRenderer = new GaugeRenderer({\n\tsource: new Image(),\n\tgauge: new Image(),\n});\n\nexport const renderGaugeImage = async (sourceURL: string | Buffer, gaugeURL: string | Buffer, baseY?: number) => {\n\tconst source = await loadImage(sourceURL);\n\tconst gauge = await loadImage(gaugeURL);\n\n\tgaugeRenderer.source = source;\n\tgaugeRenderer.gauge = gauge;\n\n\tgaugeRenderer.updateMaterial({\n\t\twidth: gauge.width,\n\t\tsw: source.width,\n\t\tsh: source.height,\n\t});\n\n\tgaugeRenderer.updateGeometry(baseY);\n\n\tconsole.log(process.memoryUsage().heapUsed);\n\n\treturn {\n\t\tbuffer: await gaugeRenderer.render(),\n\t\tsize: {\n\t\t\twidth: gaugeRenderer.width,\n\t\t\theight: gaugeRenderer.height,\n\t\t},\n\t};\n};\n\n// renderGaugeImage('./images/source.png', './images/gauge.png');\n","export const vs = `//#version 300 es\n//#define attribute in\n//#define varying out\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define VERTEX_TEXTURES\n#define USE_MAP\n#define USE_UV\n#define BONE_TEXTURE\n#define DOUBLE_SIDED\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\n\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n\n#ifdef USE_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n\nvoid main() {\n#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif\n\n\tvec3 transformed = vec3( position );\n\n\tvec4 mvPosition = vec4( transformed, 1.0 );\n\tmvPosition = modelViewMatrix * mvPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n}\n`;\n\nexport const fs = `//#version 300 es\n//#define varying in\n//out highp vec4 pc_fragColor;\n//#define gl_FragColor pc_fragColor\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define USE_MAP\n#define USE_UV\n#define DOUBLE_SIDED\nuniform vec3 cameraPosition;\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 mapTexelToLinear( vec4 value ) { return LinearToLinear( value ); }\n\nuniform vec3 diffuse;\nuniform float opacity;\n\n#if defined( USE_UV )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n\n\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n\n\tgl_FragColor = diffuseColor;\n}\n`;\n","console.info(`%cstarry-omr%c v1.0.0 2026-05-05T13:56:38.174Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport { argv } from 'yargs';\nimport { pack, unpack } from 'msgpackr';\nimport { Reply } from 'zeromq';\nimport { renderGaugeImage } from '../../libs/gauge-renderer';\n\ninterface Params {\n\tmethod: string;\n\targs: any[];\n\tkwargs: Record;\n}\n\nconst unsafeMethods = ['bind', 'constructor', 'toString', 'toJSON'];\n\nclass GaugeServer {\n\tprivate socket: Reply;\n\n\tasync bind(port?: string) {\n\t\tthis.socket = new Reply();\n\t\tawait this.socket.bind(port);\n\n\t\tconsole.log(`gauge server listening at ${port}`);\n\n\t\ttry {\n\t\t\tfor await (const [data] of this.socket) {\n\t\t\t\tconst { method, args, kwargs } = (unpack(data) as Params) ?? {};\n\n\t\t\t\tconsole.log(`request: ${method}`);\n\n\t\t\t\tif (!unsafeMethods.includes(method) && this[method]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst data = await this[method]?.(args, kwargs);\n\t\t\t\t\t\tconsole.log(`success: ${method}`);\n\n\t\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\t\tmsg: 'success',\n\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconsole.error(`fail: ${method}, error: ${err}`);\n\t\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\t\tmsg: `Error: ${JSON.stringify(err)}`,\n\t\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(`fail: ${method}, error: no method`);\n\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\tmsg: `no method: ${method}`,\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.log('restarting gauge server..', err.stack);\n\t\t\tawait this.socket.close();\n\t\t\tawait this.bind(port);\n\t\t}\n\t}\n\n\tasync predict(args?: any[], kwargs?: Record) {\n\t\tlet source, gauge, baseY;\n\n\t\tif (args) {\n\t\t\t[source, gauge, baseY] = args;\n\t\t}\n\n\t\tif (kwargs) {\n\t\t\t({ source, gauge, baseY } = kwargs);\n\t\t}\n\n\t\treturn renderGaugeImage(source, gauge, baseY);\n\t}\n}\n\nasync function main() {\n\tconst server = new GaugeServer();\n\n\tawait server.bind(`tcp://*:${argv.port}`);\n}\n\nmain();\n"],"names":["globalThis","ImageData","cc","a","result","x","e","push","GLCanvas","constructor","context","this","_width","_height","ctx","width","getExtension","resize","height","addEventListener","evt","toBuffer","pixels","Uint8Array","readPixels","RGBA","UNSIGNED_BYTE","canvas","Canvas","getContext","putImageData","Uint8ClampedArray","gl","createContext","antialias","gaugeRenderer","GaugeRenderer","options","source","gauge","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","program","createProgram","vsShader","createShader","shaderSource","compileShader","logVs","getShaderInfoLog","console","warn","fsShader","logFs","attachShader","linkProgram","logProgram","getProgramInfoLog","deleteShader","name","nameModelView","getActiveUniform","modelMat","getUniformLocation","nameProj","projMat","nameUV","uvMat","nameDiffuse","diffuse","nameOpacity","opacity","nameMap","map","useProgram","uniformMatrix4fv","Float32Array","uniformMatrix3fv","uniform3f","uniform1f","uniform1i","texture","createTexture","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","pixelStorei","UNPACK_ALIGNMENT","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","disable","CULL_FACE","depthMask","colorMask","STENCIL_TEST","POLYGON_OFFSET_FILL","SAMPLE_ALPHA_TO_COVERAGE","pos","createBuffer","uv","ib","iPos","getAttribLocation","iUV","enableVertexAttribArray","bindBuffer","ARRAY_BUFFER","vertexAttribPointer","FLOAT","updateMaterial","sw","sh","Number","isFinite","Math","round","viewport","sourceCanvas","drawImage","texImage2D","generateMipmap","updateGeometry","baseY","data","buffer","getImageData","xFactor","max","min","propertyArray","Array","fill","_","y","position","uvs","p","positions","faces","indices","bufferData","STATIC_DRAW","ELEMENT_ARRAY_BUFFER","Uint32Array","primitiveCount","length","render","clearColor","clear","COLOR_BUFFER_BIT","drawElements","TRIANGLES","UNSIGNED_INT","dispose","deleteBuffer","deleteProgram","deleteTexture","Image","info","unsafeMethods","GaugeServer","bind","port","socket","Reply","log","method","args","kwargs","unpack","includes","send","pack","code","msg","err","error","JSON","stringify","stack","close","predict","async","sourceURL","gaugeURL","loadImage","process","memoryUsage","heapUsed","size","renderGaugeImage","server","argv","main"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gauge-server.js","sources":["../../libs/gauge-renderer.ts","../../../src/pages/playground/scripts/shaders.ts","../src/gauge-server.ts"],"sourcesContent":["/* global cv */\nimport { Canvas, Image, loadImage, ImageData } from 'skia-canvas';\n// threejs内部使用了OffscreenCanvas\n//(globalThis as any).OffscreenCanvas = (globalThis as any).OffscreenCanvas || Canvas;\nglobalThis.ImageData = ImageData;\n\nimport createContext from 'gl';\n\nimport * as SHADER_SOURCE from '../../src/pages/playground/scripts/shaders';\n\n//const cc = (a: T[][]): T[] => a.flat(1);\t// This is slower!\nconst cc = (a: T[][]): T[] => {\n\tconst result: T[] = [];\n\tfor (const x of a) {\n\t\tfor (const e of x) result.push(e);\n\t}\n\n\treturn result;\n};\n\ntype RenderContext = ReturnType;\n\nclass GLCanvas {\n\tctx: RenderContext;\n\t_width: number = 256;\n\t_height: number = 192;\n\n\tresizeBuffer: number[];\n\n\tconstructor(context: RenderContext) {\n\t\tthis.ctx = context;\n\t}\n\n\tget width() {\n\t\treturn this._width;\n\t}\n\n\tset width(width: number) {\n\t\tthis._width = width;\n\t\tconst ext = this.ctx.getExtension('STACKGL_resize_drawingbuffer');\n\t\text.resize(width, this.height);\n\t}\n\n\tget height() {\n\t\treturn this._height;\n\t}\n\n\tset height(height: number) {\n\t\tthis._height = height;\n\t\tconst ext = this.ctx.getExtension('STACKGL_resize_drawingbuffer');\n\t\text.resize(this.width, height);\n\t}\n\n\t/*// @ts-ignore\n\tgetContext(type, options) {\n\t\tif (type === 'webgl') {\n\t\t\tthis.ctx = createContext(200, 300, options);\n\n\t\t\treturn this.ctx;\n\t\t}\n\n\t\treturn null as WebGLRenderingContext;\n\t}*/\n\n\taddEventListener(evt: 'webglcontextlost') {}\n\n\tasync toBuffer() {\n\t\tconst pixels = new Uint8Array(this.width * this.height * 4);\n\t\tthis.ctx.readPixels(0, 0, this.width, this.height, this.ctx.RGBA, this.ctx.UNSIGNED_BYTE, pixels);\n\n\t\tconst canvas = new Canvas(this.width, this.height);\n\t\tconst ctx = canvas.getContext('2d');\n\t\tctx.putImageData(new ImageData(new Uint8ClampedArray(pixels), this.width, this.height), 0, 0);\n\n\t\treturn canvas.toBuffer('png');\n\t}\n}\n\ninterface GaugeRendererInitOptions {\n\tsource: HTMLImageElement;\n\tgauge: HTMLImageElement;\n}\n\nconst gl = createContext(512, 192, { antialias: true });\n\nexport default class GaugeRenderer {\n\tsource: Image; // base64 string\n\tgauge: Image;\n\tcanvas: GLCanvas;\n\n\tprogram: WebGLProgram;\n\ttexture: WebGLTexture;\n\tpos: WebGLBuffer;\n\tuv: WebGLBuffer;\n\tib: WebGLBuffer;\n\tprimitiveCount: number;\n\n\twidth: number = 256;\n\theight: number = 192;\n\n\tconstructor(options: GaugeRendererInitOptions) {\n\t\tthis.source = options.source;\n\t\tthis.gauge = options.gauge;\n\t\tthis.canvas = new GLCanvas(gl);\n\n\t\tgl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);\n\t\tgl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);\n\n\t\tgl.getExtension('OES_element_index_uint');\n\n\t\t// initial program\n\t\tthis.program = gl.createProgram();\n\n\t\tconst vsShader = gl.createShader(gl.VERTEX_SHADER);\n\t\tgl.shaderSource(vsShader, SHADER_SOURCE.vs);\n\t\tgl.compileShader(vsShader);\n\t\tconst logVs = gl.getShaderInfoLog(vsShader);\n\t\tlogVs && console.warn('vs log:', logVs);\n\n\t\tconst fsShader = gl.createShader(gl.FRAGMENT_SHADER);\n\t\tgl.shaderSource(fsShader, SHADER_SOURCE.fs);\n\t\tgl.compileShader(fsShader);\n\t\tconst logFs = gl.getShaderInfoLog(fsShader);\n\t\tlogFs && console.warn('fs log:', logFs);\n\n\t\tgl.attachShader(this.program, vsShader);\n\t\tgl.attachShader(this.program, fsShader);\n\t\tgl.linkProgram(this.program);\n\n\t\tconst logProgram = gl.getProgramInfoLog(this.program);\n\t\tlogProgram && console.warn('program log:', logProgram);\n\n\t\tgl.deleteShader(vsShader);\n\t\tgl.deleteShader(fsShader);\n\n\t\tconst { name: nameModelView } = gl.getActiveUniform(this.program, 0);\n\t\tconst modelMat = gl.getUniformLocation(this.program, nameModelView);\n\t\tconst { name: nameProj } = gl.getActiveUniform(this.program, 1);\n\t\tconst projMat = gl.getUniformLocation(this.program, nameProj);\n\t\tconst { name: nameUV } = gl.getActiveUniform(this.program, 2);\n\t\tconst uvMat = gl.getUniformLocation(this.program, nameUV);\n\t\tconst { name: nameDiffuse } = gl.getActiveUniform(this.program, 3);\n\t\tconst diffuse = gl.getUniformLocation(this.program, nameDiffuse);\n\t\tconst { name: nameOpacity } = gl.getActiveUniform(this.program, 4);\n\t\tconst opacity = gl.getUniformLocation(this.program, nameOpacity);\n\t\tconst { name: nameMap } = gl.getActiveUniform(this.program, 5);\n\t\tconst map = gl.getUniformLocation(this.program, nameMap);\n\n\t\tgl.useProgram(this.program);\n\n\t\tgl.uniformMatrix4fv(\n\t\t\tprojMat,\n\t\t\tfalse,\n\t\t\t//new Float32Array([0.0026385225355625153, 0, 0, 0, 0, -0.010416666977107525, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t\tnew Float32Array([0.002739726100116968, 0, 0, 0, 0, 0.010416666977107525, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t);\n\t\tgl.uniformMatrix4fv(modelMat, false, new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, -1, 1]));\n\t\tgl.uniformMatrix3fv(uvMat, false, new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]));\n\t\tgl.uniform3f(diffuse, 1, 1, 1);\n\t\tgl.uniform1f(opacity, 1);\n\t\tgl.uniform1i(map, 0);\n\n\t\t// texture\n\t\tthis.texture = gl.createTexture();\n\t\tgl.activeTexture(gl.TEXTURE0);\n\t\tgl.bindTexture(gl.TEXTURE_2D, this.texture);\n\t\tgl.pixelStorei(37440, true);\n\t\tgl.pixelStorei(37441, false);\n\t\tgl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);\n\t\tgl.pixelStorei(37443, 0);\n\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n\n\t\tgl.disable(gl.CULL_FACE);\n\t\tgl.depthMask(true);\n\t\tgl.colorMask(true, true, true, true);\n\t\tgl.disable(gl.STENCIL_TEST);\n\t\tgl.disable(gl.POLYGON_OFFSET_FILL);\n\t\tgl.disable(gl.SAMPLE_ALPHA_TO_COVERAGE);\n\n\t\t// buffers\n\t\tthis.pos = gl.createBuffer();\n\t\tthis.uv = gl.createBuffer();\n\t\tthis.ib = gl.createBuffer();\n\n\t\tconst iPos = gl.getAttribLocation(this.program, 'position');\n\t\tconst iUV = gl.getAttribLocation(this.program, 'uv');\n\t\t//console.log('indices:', iPos, iUV);\n\n\t\tgl.enableVertexAttribArray(iPos);\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.pos);\n\t\tgl.vertexAttribPointer(iPos, 3, gl.FLOAT, false, 0, 0);\n\n\t\tgl.enableVertexAttribArray(iUV);\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.uv);\n\t\tgl.vertexAttribPointer(iUV, 2, gl.FLOAT, false, 0, 0);\n\t}\n\n\tupdateMaterial({ width = null, sw = this.width, sh = this.height } = {}) {\n\t\tif (sw !== this.width || sh !== this.height) {\n\t\t\tif (Number.isFinite(width)) {\n\t\t\t\tthis.width = width;\n\t\t\t} else {\n\t\t\t\tthis.width = Math.round((this.height * sw) / sh);\n\t\t\t}\n\n\t\t\tthis.canvas.width = this.width;\n\t\t\tthis.canvas.height = this.height;\n\n\t\t\tgl.viewport(0, 0, this.width, this.height);\n\n\t\t\tconst projMat = gl.getUniformLocation(this.program, 'projectionMatrix');\n\t\t\tgl.uniformMatrix4fv(\n\t\t\t\tprojMat,\n\t\t\t\tfalse,\n\t\t\t\tnew Float32Array([2 / this.width, 0, 0, 0, 0, 2 / this.height, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t\t);\n\t\t}\n\n\t\t// image to canvas\n\t\tconst sourceCanvas = new Canvas(this.source.width, this.source.height);\n\t\tsourceCanvas.getContext('2d').drawImage(this.source, 0, 0);\n\n\t\tgl.bindTexture(gl.TEXTURE_2D, this.texture);\n\t\tgl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, sourceCanvas as any);\n\t\tgl.generateMipmap(gl.TEXTURE_2D);\n\t}\n\n\tupdateGeometry(baseY = null) {\n\t\tconst { width, height } = this.gauge;\n\t\tconst canvas = new Canvas(width, height);\n\t\tconst ctx = canvas.getContext('2d');\n\t\tctx.drawImage(this.gauge, 0, 0);\n\t\tconst { data: buffer } = ctx.getImageData(0, 0, width, height);\n\n\t\tconst xFactor = this.width / width;\n\n\t\tbaseY = Math.round(Number.isFinite(baseY) ? baseY : height / 2);\n\t\tbaseY = Math.max(0, Math.min(height - 1, baseY));\n\n\t\tconst propertyArray = Array(height)\n\t\t\t.fill(null)\n\t\t\t.map((_, y) =>\n\t\t\t\tArray(width)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, x) => ({\n\t\t\t\t\t\tuv: [(x + 0.5) / width, 1 - (y + 0.5) / height],\n\t\t\t\t\t\tposition: [(x - width / 2) * xFactor, (buffer[(y * width + x) * 4] + buffer[(y * width + x) * 4 + 2] / 256 - 128) / xFactor, 0],\n\t\t\t\t\t}))\n\t\t\t);\n\n\t\t// integral X by K\n\t\tfor (let y = baseY; y > 0; --y) {\n\t\t\tfor (let x = 0; x < width; ++x)\n\t\t\t\tpropertyArray[y - 1][x].position[0] = propertyArray[y][x].position[0] - ((buffer[(y * width + x) * 4 + 1] - 128) * xFactor) / 127;\n\t\t}\n\t\tfor (let y = baseY + 1; y < height; ++y) {\n\t\t\tfor (let x = 0; x < width; ++x)\n\t\t\t\tpropertyArray[y][x].position[0] = propertyArray[y - 1][x].position[0] + ((buffer[((y - 1) * width + x) * 4 + 1] - 128) * xFactor) / 127;\n\t\t}\n\n\t\tconst uvs = cc(cc(propertyArray).map((p) => p.uv));\n\t\tconst positions = cc(cc(propertyArray).map((p) => p.position));\n\n\t\tconst faces = Array(height - 1)\n\t\t\t.fill(null)\n\t\t\t.map((_, y) =>\n\t\t\t\tArray(width - 1)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, x) => [y * width + x, y * width + x + 1, (y + 1) * width + x, (y + 1) * width + x, (y + 1) * width + x + 1, y * width + x + 1])\n\t\t\t);\n\t\tconst indices = cc(cc(faces));\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.pos);\n\t\tgl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.uv);\n\t\tgl.bufferData(gl.ARRAY_BUFFER, new Float32Array(uvs), gl.STATIC_DRAW);\n\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.ib);\n\t\tgl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint32Array(indices), gl.STATIC_DRAW);\n\n\t\tthis.primitiveCount = indices.length;\n\t}\n\n\trender() {\n\t\tgl.clearColor(1, 1, 1, 1);\n\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\n\t\t//gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.ib);\n\n\t\tgl.drawElements(gl.TRIANGLES, this.primitiveCount, gl.UNSIGNED_INT, 0);\n\n\t\treturn this.canvas.toBuffer();\n\t}\n\n\tdispose() {\n\t\tgl.deleteBuffer(this.pos);\n\t\tgl.deleteBuffer(this.uv);\n\t\tgl.deleteBuffer(this.ib);\n\n\t\tgl.deleteProgram(this.program);\n\t\tgl.deleteTexture(this.texture);\n\t}\n}\n\nconst gaugeRenderer = new GaugeRenderer({\n\tsource: new Image(),\n\tgauge: new Image(),\n});\n\nexport const renderGaugeImage = async (sourceURL: string | Buffer, gaugeURL: string | Buffer, baseY?: number) => {\n\tconst source = await loadImage(sourceURL);\n\tconst gauge = await loadImage(gaugeURL);\n\n\tgaugeRenderer.source = source;\n\tgaugeRenderer.gauge = gauge;\n\n\tgaugeRenderer.updateMaterial({\n\t\twidth: gauge.width,\n\t\tsw: source.width,\n\t\tsh: source.height,\n\t});\n\n\tgaugeRenderer.updateGeometry(baseY);\n\n\tconsole.log(process.memoryUsage().heapUsed);\n\n\treturn {\n\t\tbuffer: await gaugeRenderer.render(),\n\t\tsize: {\n\t\t\twidth: gaugeRenderer.width,\n\t\t\theight: gaugeRenderer.height,\n\t\t},\n\t};\n};\n\n// renderGaugeImage('./images/source.png', './images/gauge.png');\n","export const vs = `//#version 300 es\n//#define attribute in\n//#define varying out\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define VERTEX_TEXTURES\n#define USE_MAP\n#define USE_UV\n#define BONE_TEXTURE\n#define DOUBLE_SIDED\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\n\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n\n#ifdef USE_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n\nvoid main() {\n#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif\n\n\tvec3 transformed = vec3( position );\n\n\tvec4 mvPosition = vec4( transformed, 1.0 );\n\tmvPosition = modelViewMatrix * mvPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n}\n`;\n\nexport const fs = `//#version 300 es\n//#define varying in\n//out highp vec4 pc_fragColor;\n//#define gl_FragColor pc_fragColor\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define USE_MAP\n#define USE_UV\n#define DOUBLE_SIDED\nuniform vec3 cameraPosition;\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 mapTexelToLinear( vec4 value ) { return LinearToLinear( value ); }\n\nuniform vec3 diffuse;\nuniform float opacity;\n\n#if defined( USE_UV )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n\n\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n\n\tgl_FragColor = diffuseColor;\n}\n`;\n","console.info(`%cstarry-omr%c v1.0.0 2026-05-05T14:46:55.823Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport { argv } from 'yargs';\nimport { pack, unpack } from 'msgpackr';\nimport { Reply } from 'zeromq';\nimport { renderGaugeImage } from '../../libs/gauge-renderer';\n\ninterface Params {\n\tmethod: string;\n\targs: any[];\n\tkwargs: Record;\n}\n\nconst unsafeMethods = ['bind', 'constructor', 'toString', 'toJSON'];\n\nclass GaugeServer {\n\tprivate socket: Reply;\n\n\tasync bind(port?: string) {\n\t\tthis.socket = new Reply();\n\t\tawait this.socket.bind(port);\n\n\t\tconsole.log(`gauge server listening at ${port}`);\n\n\t\ttry {\n\t\t\tfor await (const [data] of this.socket) {\n\t\t\t\tconst { method, args, kwargs } = (unpack(data) as Params) ?? {};\n\n\t\t\t\tconsole.log(`request: ${method}`);\n\n\t\t\t\tif (!unsafeMethods.includes(method) && this[method]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst data = await this[method]?.(args, kwargs);\n\t\t\t\t\t\tconsole.log(`success: ${method}`);\n\n\t\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\t\tmsg: 'success',\n\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconsole.error(`fail: ${method}, error: ${err}`);\n\t\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\t\tmsg: `Error: ${JSON.stringify(err)}`,\n\t\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(`fail: ${method}, error: no method`);\n\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\tmsg: `no method: ${method}`,\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.log('restarting gauge server..', err.stack);\n\t\t\tawait this.socket.close();\n\t\t\tawait this.bind(port);\n\t\t}\n\t}\n\n\tasync predict(args?: any[], kwargs?: Record) {\n\t\tlet source, gauge, baseY;\n\n\t\tif (args) {\n\t\t\t[source, gauge, baseY] = args;\n\t\t}\n\n\t\tif (kwargs) {\n\t\t\t({ source, gauge, baseY } = kwargs);\n\t\t}\n\n\t\treturn renderGaugeImage(source, gauge, baseY);\n\t}\n}\n\nasync function main() {\n\tconst server = new GaugeServer();\n\n\tawait server.bind(`tcp://*:${argv.port}`);\n}\n\nmain();\n"],"names":["globalThis","ImageData","cc","a","result","x","e","push","GLCanvas","constructor","context","this","_width","_height","ctx","width","getExtension","resize","height","addEventListener","evt","toBuffer","pixels","Uint8Array","readPixels","RGBA","UNSIGNED_BYTE","canvas","Canvas","getContext","putImageData","Uint8ClampedArray","gl","createContext","antialias","gaugeRenderer","GaugeRenderer","options","source","gauge","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","program","createProgram","vsShader","createShader","shaderSource","compileShader","logVs","getShaderInfoLog","console","warn","fsShader","logFs","attachShader","linkProgram","logProgram","getProgramInfoLog","deleteShader","name","nameModelView","getActiveUniform","modelMat","getUniformLocation","nameProj","projMat","nameUV","uvMat","nameDiffuse","diffuse","nameOpacity","opacity","nameMap","map","useProgram","uniformMatrix4fv","Float32Array","uniformMatrix3fv","uniform3f","uniform1f","uniform1i","texture","createTexture","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","pixelStorei","UNPACK_ALIGNMENT","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","disable","CULL_FACE","depthMask","colorMask","STENCIL_TEST","POLYGON_OFFSET_FILL","SAMPLE_ALPHA_TO_COVERAGE","pos","createBuffer","uv","ib","iPos","getAttribLocation","iUV","enableVertexAttribArray","bindBuffer","ARRAY_BUFFER","vertexAttribPointer","FLOAT","updateMaterial","sw","sh","Number","isFinite","Math","round","viewport","sourceCanvas","drawImage","texImage2D","generateMipmap","updateGeometry","baseY","data","buffer","getImageData","xFactor","max","min","propertyArray","Array","fill","_","y","position","uvs","p","positions","faces","indices","bufferData","STATIC_DRAW","ELEMENT_ARRAY_BUFFER","Uint32Array","primitiveCount","length","render","clearColor","clear","COLOR_BUFFER_BIT","drawElements","TRIANGLES","UNSIGNED_INT","dispose","deleteBuffer","deleteProgram","deleteTexture","Image","info","unsafeMethods","GaugeServer","bind","port","socket","Reply","log","method","args","kwargs","unpack","includes","send","pack","code","msg","err","error","JSON","stringify","stack","close","predict","async","sourceURL","gaugeURL","loadImage","process","memoryUsage","heapUsed","size","renderGaugeImage","server","argv","main"],"mappings":"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"} \ No newline at end of file diff --git a/backend/omr/dist/index.js b/backend/omr/dist/index.js index cc900eb95541ceb79eb2afb3d68ba0210674b775..630a8ecb028b8eb1be850bec552b4b162974fc37 100644 --- a/backend/omr/dist/index.js +++ b/backend/omr/dist/index.js @@ -1,2 +1,2 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("lodash/pick"),t=require("js-sha1"),s=require("math-erf"),i=require("lodash"),r=require("msgpackr"),n=require("zeromq"),a=require("portfinder"),o=require("python-shell"),c=require("skia-canvas"),l=require("weak-lru-cache"),u=require("spark-md5"),h=require("sharp"),m=require("got");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=f(e),p=f(t),g=f(s),y=f(i),v=f(u),x=f(h),S=f(m);globalThis.btoa=e=>Buffer.from(e,"binary").toString("base64"),globalThis.atob=e=>Buffer.from(e,"base64").toString("binary");const b=(e,t)=>("object"==typeof e&&(e=JSON.stringify(e)),JSON.parse(e,(e,s)=>{if(s&&"object"==typeof s&&s.__prototype){const e=t[s.__prototype];if(e){const{__prototype:t,...i}=s;return new e(i)}}return s})),k=(e,t=null)=>{if((t=t||new Map).get(e))return t.get(e);if(Array.isArray(e)){const s=[];return t.set(e,s),e.forEach(e=>s.push(k(e,t))),s}if(e&&"object"==typeof e){const s={};return t.set(e,s),Object.entries(e).forEach(([e,i])=>s[e]=k(i,t)),Object.setPrototypeOf(s,e.__proto__),s}return e};class SimpleClass{assign(e){e&&Object.assign(this,e)}toJSON(){const e=this.constructor,t=e.serializedKeys||e.blackKeys&&Object.keys(this).filter(t=>!e.blackKeys.includes(t)),s=t?d.default(this,t):this;return{__prototype:e.className,...s}}deepCopy(){return k(this)}}var T={Matrix:function(){}};T.Matrix.create=function(e){return(new T.Matrix).setElements(e)},T.Matrix.I=function(e){for(var t,s=[],i=e;i--;)for(t=e,s[i]=[];t--;)s[i][t]=i===t?1:0;return T.Matrix.create(s)},T.Matrix.prototype={dup:function(){return T.Matrix.create(this.elements)},isSquare:function(){var e=0===this.elements.length?0:this.elements[0].length;return this.elements.length===e},toRightTriangular:function(){if(0===this.elements.length)return T.Matrix.create([]);var e,t,s,i,r=this.dup(),n=this.elements.length,a=this.elements[0].length;for(t=0;t=n&&l[a].push(r);for(o.elements[a]=s,e=a;e--;){for(s=[],t=0;t{const i=Math.round(10*s.x),r=Math.round(10*s.y),n=`${e}|${t}|${s.semantic}|${i}|${r}`,a=p.default.array(n).slice(12),o=globalThis.btoa(String.fromCharCode(...a)).substring(0,11);return s.id=o,o},B=(e,t)=>{const s=Math.round(t.x),i=Math.round(t.y),r=`p-${e}|${t.semantic}|${s}|${i}`,n=p.default.array(r).slice(12),a=globalThis.btoa(String.fromCharCode(...n)).substring(0,11);return t.id=a,a},A=(e,t,s=-1/0)=>Math.max(Math.round(e/t)*t,s),P=(e,t)=>{const s=e.x-t.x,i=e.y-t.y;return Math.sqrt(s*s+i*i)},R=(e,t)=>Number.isInteger(e)&&Number.isInteger(t)?0===t?e:R(t,e%t):(console.error("non-integer gcd:",e,t),1),D=(e,t)=>({numerator:e,denominator:t}),F=(e,t)=>{e=Math.round(e),t=Math.round(t);const s=0!==e?R(e,t):t;return D(e/s,t/s)},L=e=>`${e.numerator}/${e.denominator}`,$=(e,t)=>t?e*t.numerator/t.denominator:e,j=(e,t)=>{const s=[...e].sort((e,s)=>e[t]-s[t]);let i=null,r=null;return s.reduce((e,n,a)=>(r?n[t]-r[t]<.4?i.push(n):(i.length>1&&e.push(i),r=n,i=[n]):(r=n,i=[n]),i.length>1&&a===s.length-1&&e.push(i),e),[])},H=e=>{if(e.length<=1)return[];let t=e.slice(1);const s=C.find(t=>t.includes(e[0].semantic));if(!s)return H(t);const i=t.filter(e=>s.includes(e.semantic));return t=t.filter(e=>!s.includes(e.semantic)),[...i,...H(t)]},V=e=>{const t=new Set(e),s=j(e,"x"),i=[].concat(...s.map(e=>j(e,"y")));return i.forEach(e=>e.sort((e,t)=>t.confidence-e.confidence)),i.forEach(e=>{H(e).forEach(e=>t.delete(e))}),Array.from(t)},z=[0,2,4,5,7,9,11],q=({note:e,alter:t})=>{const s=Math.floor(e/7),i=(e=>{let t=e%7;for(;t<0;)t+=7;return t})(e);return 60+12*s+z[i]+t},G=e=>{const t=Math.max(...e);return e.indexOf(t)};class DummyLogger{debug(...e){}group(...e){}groupCollapsed(...e){}groupEnd(){}info(...e){}warn(...e){}assert(...e){}}const W=1921920,U=e=>1===e?null:(e=>{const t=Math.round(1920*e);return F(t,1920)})(e);var Y,X,K;!function(e){e[e.PLACE=0]="PLACE",e[e.VERTICAL=1]="VERTICAL",e[e.HORIZONTAL=2]="HORIZONTAL"}(Y||(Y={}));class Action{constructor(e){Object.assign(this,e)}static P(e){return new Action({type:Y.PLACE,e1:e})}static V(e,t,s=1){return new Action({type:Y.VERTICAL,e1:s>0?e:t,e2:s>0?t:e})}static H(e,t){return new Action({type:Y.HORIZONTAL,e1:e,e2:t})}get id(){switch(this.type){case Y.PLACE:return this.e1.toString();case Y.VERTICAL:return`${this.e1}|${this.e2}`;case Y.HORIZONTAL:return`${this.e1}-${this.e2>=0?this.e2:"."}`}}get events(){return[this.e1,this.e2].filter(Number.isFinite)}}class StageMatrix{static fromNode(e,t){const s=Array(e.stages.length).fill(null).map(()=>Array(e.stages.length).fill(null).map(()=>new Set));e.actions.filter(e=>e.type===Y.HORIZONTAL).forEach(t=>{const i=e.stages.findIndex(e=>e.events.includes(t.e1)),r=e.stages.findIndex(e=>e.events.includes(t.e2));console.assert(i>=0&&r>=0,"invalid stages for H action:",e.id,e.stages,t),s[i][r].add(t.e1)}),s[0][e.stages.length-1].add(0);const i=e.stagedEvents,r=t.matrixH[t.matrixH.length-1].filter((e,t)=>!i.has(t)),n=Math.max(0,Math.max(...r)-.01),a=e.actions.filter(e=>e.type===Y.HORIZONTAL),o=Object.keys(t.eventMap).map(Number).filter(e=>!a.find(t=>t.e2===e));return e.stages.forEach(i=>{i.events.forEach(r=>{if(r>0){!a.find(e=>e.e1===r)&&t.matrixH[t.matrixH.length-1][r]>=n&&(o.some(e=>t.matrixH[e][r]>0)||s[i.index][e.stages.length-1].add(r))}})}),new StageMatrix({matrix:s})}constructor(e){Object.assign(this,e)}pathOf(e,t,s,i=0){if(this.matrix[e][t].size){const r=[...this.matrix[e][t]][i];if(t===s)return[r];for(let e=t+1;e<=s;++e){const i=this.pathOf(t,e,s);if(i)return[r,...i]}}return null}findDoublePath(e,t){const s=[];for(let i=t;i>=e+1;--i)for(let r=0;rt.forEach(t=>e.forEach(e=>t.delete(e))))}toEquations(e){const t=[];for(let s=1;sn[e]=1),r.forEach(e=>n[e]=-1),t.push(n),this.reducePath(i.length>r.length?i:r)}}}return t}}class PathNode{constructor(e){Object.assign(this,e),console.assert(this.logger,"logger is null:",e)}get actions(){const e=this.parent?this.parent.actions:[];return this.action?[...e,this.action]:e}get id(){return this.actions.map(e=>e.id).sort().join(" ")}get stagedEvents(){const e=new Set;return this.stages&&this.stages.forEach(t=>t.events.forEach(t=>t>=0&&e.add(t))),e}like(e){return e.split(" ").sort().join(" ")===this.id}constructStages(e){this.stages=[{events:[-1]}];for(const t of this.actions)switch(t.type){case Y.PLACE:this.stages.unshift({events:[t.e1]});break;case Y.VERTICAL:{const e=this.stages.find(e=>e.events.includes(t.e1)),s=this.stages.find(e=>e.events.includes(t.e2));console.assert(e||s,"invalid V action:",this.stages,t),e&&s?(e.events.push(...s.events),s.events=null,this.stages=this.stages.filter(e=>e.events)):e?s||e.events.push(t.e2):s.events.unshift(t.e1)}break;case Y.HORIZONTAL:{const s=this.stages.find(e=>e.events.includes(t.e1)),i=this.stages.find(e=>e.events.includes(t.e2));console.assert(s||i,"invalid H action:",this.stages,t);const r=s=>{console.assert(e.eventMap[s],"invalid event id:",t.id,s,e.eventMap);const i=e.eventMap[s].x,r=this.stages.find(t=>t.events.some(t=>t>0&&e.eventMap[t].x<=i)&&t.events.some(t=>t>0&&e.eventMap[t].x>=i));if(r)r.events.push(s);else{const t={events:[s]},r=this.stages.findIndex(t=>-1===t.events[0]||e.eventMap[t.events[0]].x>=i);this.stages.splice(r,0,t)}};s||r(t.e1),i||r(t.e2)}}this.stages.forEach((e,t)=>e.index=t)}constructConstraints(e){const t=Object.keys(e.eventMap).length,s=StageMatrix.fromNode(this,e).toEquations(t),i=Array(t).fill(null).map((t,s)=>e.eventMap[s].duration);this.constraints=s.map(e=>e.map((e,t)=>e*i[t]))}inbalancesConstraints(e){console.assert(this.constraints,"constraints not constructed.");const t=Object.keys(e.eventMap).length,s=Array(t).fill(!0),i=Array(t).fill(!1),r=[];for(const e of this.constraints){const t=e.reduce((e,t)=>e+t,0);if(0!==t){const n=t<0?e.map(e=>-e):e;if(n[0]>0)continue;r.push(n),n.forEach((e,t)=>{i[t]=i[t]||e<0,e&&(s[t]=e<0||i[t])})}}return this.constraints.forEach(e=>{0!==e.reduce((e,t)=>e+t,0)||e[0]||e.some((e,t)=>e&&!s[t])&&(e.forEach((e,t)=>e&&(s[t]=!1)),r.push(e))}),{ones:s,inbalances:r}}solveEquations({ones:e,inbalances:t}){if(!t.length)return e.map(()=>1);const s=e.map((e,t)=>({fixed:e,i:t})).filter(({fixed:e})=>!e).map(({i:e})=>e).filter(e=>t.some(t=>0!==t[e]));if(!s.length)return e.map(()=>1);const i=s.map(e=>Math.abs(t.find(t=>0!==t[e])[e])),r=new Map;let n=!1;const a=t.map(e=>({line:e.filter((e,t)=>s.includes(t)),bias:-e.reduce((e,t,i)=>e+(s.includes(i)?0:t),0)})).filter(({line:e,bias:t})=>{if(e.every(e=>0===e))return!1;const s=e.join(",");return r.has(s)?(n=r.get(s)!==t,!1):(r.set(s,t),!0)});if(n)return null;const o=a.slice(0,s.length),c=a.slice(s.length);if(o.lengths===t?1:s===r?-1:0),bias:0,prior:(i[t]+i[r])/W};o.some(e=>e.line[t]&&e.line[r])&&(n.prior-=10),o.some(e=>1===e.line.filter(Number).length&&(e.line[t]||e.line[r]))&&(n.prior+=1),e.push(n)}e.sort((e,t)=>e.prior-t.prior),o.push(...e.slice(0,s.length-o.length))}const l=o.map(({line:e})=>e),u=o.map(({bias:e})=>e),h=function(e){const t=T.Matrix.create(e).inverse();return null!==t?t.elements:null}(l);if(!h)return this.logger.warn("null invert:",l),null;const m=h.map(e=>e.reduce((e,t,s)=>e+t*u[s],0));if(c.length&&c.some(e=>Math.abs(e.line.reduce((e,t,s)=>e+t*m[s],0))>.001))return null;const f=e.map(()=>1);return s.forEach((e,t)=>f[e]=m[t]),f}optimallySolve(e){const{ones:t,inbalances:s}=this.inbalancesConstraints(e),i=t.map((t,s)=>t?-1:A(e.eventMap[s].shrinkness,.01)).reduce((e,t,s)=>(t>=0&&(e[t]=e[t]||[],e[t].push(s)),e),{}),r=Object.entries(i).sort((e,t)=>Number(t[0])-Number(e[0])).map(e=>e[1]);for(let i=1;i!n.includes(t)),o=this.solveEquations({ones:a,inbalances:s});if(o&&o.every((t,s)=>t<=1&&t>e.eventMap[s].lowWarp))return o}return this.solveEquations({ones:t,inbalances:s})}isConflicted(e){const{ones:t,inbalances:s}=this.inbalancesConstraints(e);for(const i of s){if(i.reduce((s,i,r)=>s+i*(t[r]||i<=0?1:e.eventMap[r].lowWarp),0)>=0)return i.forEach((t,s)=>{t&&(e.eventTendencies[s]+=t>0?1:-1)}),!0}if(!s.length)return!1;const i=this.solveEquations({ones:t,inbalances:s});return!i||!i.every((t,s)=>t>e.eventMap[s].lowWarp&&t<=1)}getSolution(e){const t=t=>e.eventMap[t.e2]?e.eventMap[t.e2].x+.06*Math.abs(e.eventMap[t.e2].x-e.eventMap[t.e1].x):e.eventMap[t.e1].x+1e4,s=this.actions.filter(e=>e.type===Y.HORIZONTAL).sort((e,s)=>t(e)-t(s)),i=s.reduce((e,t)=>({...e,[t.e1]:t.e2}),{}),r=new Set([...Object.keys(i)].map(Number));s.forEach(e=>r.delete(e.e2)),this.stages[0].events.forEach(e=>e>0&&r.add(e));let n=[...r].map(e=>{const t=[e];let s=e;for(;i[s]&&(s=i[s],!(s<0||t.includes(s)));)t.push(s);return t});const a=Object.values(e.eventMap).filter(e=>e.id>0).map(e=>({id:e.id,tick:null,endTick:null,tickGroup:null,timeWarp:null})),o=a.filter(e=>n.some(t=>t.includes(e.id))||s.some(t=>[t.e1,t.e2].includes(e.id))).reduce((e,t)=>({...e,[t.id]:t}),{});this.stages.forEach((e,t)=>e.events.forEach(e=>o[e]&&(o[e].tickGroup=t))),this.stages[0].tick=0,this.stages[0].events.forEach(e=>o[e]&&(o[e].tick=0));const c=this.optimallySolve(e);a.forEach(e=>e.timeWarp=U(c[e.id]));const l=this.stages.slice(0,this.stages.length-1),u=()=>{if(l.every(e=>Number.isFinite(e.tick)))return!1;let t=!1;return s.forEach(s=>{const i=this.stages.find(e=>e.events.includes(s.e1)),r=this.stages.find(e=>e.events.includes(s.e2));Number.isFinite(i.tick)&&!Number.isFinite(r.tick)&&(r.tick=i.tick+$(e.eventMap[s.e1].duration,o[s.e1].timeWarp),r.events.forEach(e=>o[e]&&(o[e].tick=r.tick)),t=!0)}),[...s].reverse().forEach(s=>{const i=this.stages.find(e=>e.events.includes(s.e1)),r=this.stages.find(e=>e.events.includes(s.e2));!Number.isFinite(i.tick)&&Number.isFinite(r.tick)&&(i.tick=r.tick-$(e.eventMap[s.e1].duration,o[s.e1].timeWarp),i.events.forEach(e=>o[e]&&(o[e].tick=i.tick)),t=!0)}),t};for(;u(););console.assert(l.every(e=>Number.isFinite(e.tick)),"stage ticks not all solved:",this.stages,this.id),a.filter(e=>Number.isFinite(e.tick)).forEach(t=>t.endTick=t.tick+$(e.eventMap[t.id].duration,t.timeWarp));const h=e.eventMap[0].duration;n.forEach(e=>{const t=e.findIndex(e=>o[e].endTick>h);if(t>=0){e.splice(t,e.length-t).forEach(e=>{o[e].tick=null,o[e].endTick=null})}}),n=n.filter(e=>e.length);const m=Math.max(0,...a.map(e=>e.endTick).filter(Number.isFinite));return this.logger.debug(String.fromCodePoint(127822),this.id,c),{voices:n,events:a,duration:m,actions:this.actions.map(e=>e.id).join(" ")}}deduce(e,t){this.stages||this.constructStages(e);const s=e.actionAccessing.get(this.id)||{times:0};if(++s.times,e.actionAccessing.set(this.id,s),this.constructConstraints(e),this.isConflicted(e))return s.closed=!0,this.logger.info(this.action.id,"❌"),null;if(this.logger.group(this.action&&this.action.id),t.credits>0){if(--t.credits,this.children||this.expand(e),this.children=this.children.filter(t=>!e.actionAccessing.get(t.id)||!e.actionAccessing.get(t.id).closed),this.children.length){const s=t=>t.possibility/((e.actionAccessing.get(t.id)||{times:0}).times+1);this.children.sort((e,t)=>s(t)-s(e));for(const s of this.children){const i=s.deduce(e,t);if(i)return this.logger.groupEnd(),i;if(t.credits<=0)break}}}else this.logger.debug("quota exhausted.");return this.logger.groupEnd(),s.closed=!0,this.getSolution(e)}expand(e){this.constructStages(e);const{eventMap:t,matrixV:s,matrixH:i}=e,r=this.stagedEvents,n=[],a=e=>{if(!this.actions.some(t=>t.id===e.action.id)&&!n.some(t=>t.action.id===e.action.id)){const t=this.stages.find(t=>t.events.includes(e.action.e1)),i=this.stages.find(t=>t.events.includes(e.action.e2));if(t===i||t&&i&&t.index>=i.index)return;if(t&&i)if(e.action.type===Y.VERTICAL){if(i.index-t.index>1)return;if(this.actions.some(e=>t.events.includes(e.e1)&&i.events.includes(e.e2)))return}else if(e.action.type===Y.HORIZONTAL&&t.index>i.index)return;if(e.action.type===Y.HORIZONTAL&&this.actions.some(t=>t.type===Y.HORIZONTAL&&(t.e1===e.action.e1||t.e2===e.action.e2||t.e1===e.action.e2&&t.e2===e.action.e1)))return;if(e.action.type===Y.VERTICAL){if(t&&(e.possibility=Math.min(e.possibility,...t.events.map(t=>s[e.action.e2][t])),e.possibility<=0))return;if(i&&(e.possibility=Math.min(e.possibility,...i.events.map(t=>s[t][e.action.e1])),e.possibility<=0))return}n.push(e)}};for(const e of r)e<0||(s[e].forEach((t,s)=>{t>0&&e!==s&&a({action:Action.V(s,e),possibility:t})}),s.forEach((t,s)=>{const i=t[e];i>0&&a({action:Action.V(e,s),possibility:i})}),i[e].forEach((t,s)=>{t>0&&a({action:Action.H(s,e),possibility:t})}),i.forEach((s,i)=>{i=i>=Object.keys(t).length?-1:i;const r=s[e];r>0&&a({action:Action.H(e,i),possibility:r})}));n.some(e=>[Y.HORIZONTAL,Y.PLACE].includes(e.action.type)||!r.has(e.action.e1)||!r.has(e.action.e2))?this.children=n.map(e=>new PathNode({logger:this.logger,parent:this,...e})):this.children=[]}}class Solver{constructor(e,{quota:t=1e3,logger:s=new DummyLogger}={}){this.quota=t,this.logger=s;const i={id:0,x:0,confidence:1,shrinkness:e.measureShrinkness,duration:e.expectedDuration,lowWarp:0};this.events=[i,...e.events.map(e=>({id:e.id,x:e.x,confidence:e.confidence,shrinkness:e.shrinkness,staff:e.staff,duration:e.duration,lowWarp:.5}))],this.eventMap=this.events.reduce((e,t)=>({...e,[t.id]:t}),{}),this.matrixH=e.matrixH,this.matrixV=e.matrixV,this.xSpan=e.endX-Math.min(e.endX-1,...e.events.map(e=>e.x)),this.actionAccessing=new Map}solve(){this.pathRoot=new PathNode({logger:this.logger,action:null}),this.pathRoot.children=this.events.slice(1).map(e=>new PathNode({logger:this.logger,parent:this.pathRoot,action:Action.P(e.id),possibility:this.matrixV[e.id].reduce((e,t)=>e+t,0)}));let e=null;this.logger.groupCollapsed("solve");const t=Array(this.events.length).fill(0),s={credits:this.quota,times:0};for(;s.credits>0;){++s.times;const i={eventMap:this.eventMap,matrixH:this.matrixH,matrixV:this.matrixV,actionAccessing:this.actionAccessing,eventTendencies:t},r=this.pathRoot.deduce(i,s);if(r.credits=this.quota-s.credits,r.times=s.times,this.evaluateSolution(r),this.logger.debug("loss:",r.loss),e=!e||r.losse/s.times)),e}evaluateSolution(e){e.loss=0;const t=e.events.reduce((e,t)=>({...e,[t.id]:{...t,...this.eventMap[t.id]}}),{}),s=e.events.filter(e=>Number.isFinite(e.tick)).map(e=>t[e.id]),i=s.reduce((e,t)=>(e[t.staff]=e[t.staff]||[],e[t.staff].push(t),e),{});Object.values(i).forEach(t=>{t.sort((e,t)=>e.x-t.x).slice(0,t.length-1).forEach((s,i)=>{t[i+1].tick{if(Number.isFinite(s.tick)&&!e.voices.every(e=>!e.includes(s.id))||(e.loss+=100*t[s.id].confidence),s.timeWarp){const{numerator:e,denominator:i}=s.timeWarp,n=t[s.id].shrinkness;r.set(e,Math.max(r.get(e)||0,1-n)),r.set(i,Math.max(r.get(i)||0,1-n))}});const n=F(e.duration,this.eventMap[0].duration);r.set(n.numerator,Math.max(r.get(n.numerator)||0,1-this.eventMap[0].shrinkness)),r.set(n.denominator,Math.max(r.get(n.denominator)||0,1-this.eventMap[0].shrinkness));for(const[t,s]of r.entries())t>1&&(e.loss+=Math.log(t)*s);let a=0,o=0;e.voices.forEach(s=>{console.assert(t[s[0]],"invalid voice:",s,Object.keys(t));const i=Math.abs(t[s[0]].tick),r=t[s[s.length-1]].endTick;a+=Math.max(0,i+e.duration-r);let n=null;s.forEach(e=>{const s=t[e];s.staff!==n&&(null!==n&&++o,n=s.staff)})}),e.loss+=10*a/W,e.loss+=5**o-1;const c=[...s].sort((e,t)=>e.x-t.x),l=c.slice(1).map((t,s)=>{const i=c[s],r=t.x-i.x,n=t.tick-i.tick;if(!n)return r/this.xSpan;return(4*Math.atan2(n/e.duration,r/this.xSpan)/Math.PI-1)**2}),u=Math.max(...l,0);e.loss+=u**2,console.assert(e.loss>=0,"Invalid solution loss!!!",e.loss,r,a,o),e.loss<0&&(e.loss=1/0)}}!function(e){e[e.PAD=0]="PAD",e[e.BOS=1]="BOS",e[e.EOS=2]="EOS",e[e.CHORD=3]="CHORD",e[e.REST=4]="REST"}(X||(X={}));class EventCluster extends SimpleClass{constructor(e){super(),super.assign(e)}get regular(){return this.elements.some(e=>[X.CHORD,X.REST].includes(e.type)&&!e.fake)&&this.elements.every(e=>[e.x,e.y1,e.y2,e.tick].every(Number.isFinite))&&this.elements.slice(1).every((e,t)=>e.fake||this.elements[t].fake||e.grace||this.elements[t].grace||e.fullMeasure||this.elements[t].fullMeasure||e.tick<=this.elements[t].tick||e.x>this.elements[t].x)}get grant(){return this.annotation&&this.annotation.grant}get feature(){return{index:this.index,elements:this.elements}}get estimatedDuration(){const e=this.elements.find(e=>e.type===X.EOS),t=e?.predisposition?e.predisposition?.tick:e?.tick;return Number.isFinite(t)?t:this.duration}assignPrediction(e){console.assert(e.index===this.index,"index mismatch:",e.index,this.index),this.matrixH=e.matrixH,e.elements.forEach(e=>{const{index:t,...s}=e,i=this.elements.find(e=>e.index===t);console.assert(i,"element not found:",t),i&&(i.predisposition=s)})}}EventCluster.className="EventCluster",EventCluster.blackKeys=["id"];class EventClusterSet extends SimpleClass{constructor(e){super(),super.assign(e)}trimIrregular(){let e=0;return this.clusters=this.clusters.filter(t=>{const s=t.regular;return s||(console.debug("irregular cluster:",t),++e),s}),e?console.debug("Irregular clusters trimmed:",`${e}/${this.clusters.length+e}`):console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`),e}}EventClusterSet.className="EventClusterSet";class PatchMeasure extends SimpleClass{constructor(e){super(),Object.assign(this,e)}get staffN(){return Math.floor(Math.log2(this.staffMask))+1}get basics(){return Array(this.staffN).fill(this.basic)}get duration(){return Math.max(0,...(this.voices||[]).map(e=>e.map(e=>this.events.find(t=>t.id===e)).reduce((e,t)=>e+t.duration,0)))}}PatchMeasure.className="PatchMeasure",function(e){e.ClefG="clefs-G",e.ClefF="clefs-F",e.ClefC="clefs-C",e.TimesigC44="timesig-C44",e.TimesigC22="timesig-C22",e.TimesigZero="zero|timesig0",e.TimesigOne="one|timesig1",e.TimesigTwo="two|timesig2",e.TimesigThree="three|timesig3",e.TimesigFour="four|timesig4",e.TimesigFive="five|timesig5",e.TimesigSix="six|timesig6",e.TimesigSeven="seven|timesig7",e.TimesigEight="eight|timesig8",e.TimesigNine="nine|timesig9",e.OctaveShift8va="octave-a",e.OctaveShift8vb="octave-b",e.OctaveShift0="octave-0",e.Zero="zero|n0",e.One="one|n1",e.Two="two|n2",e.Three="three|n3",e.Four="four|n4",e.Five="five|n5",e.Six="six|n6",e.Seven="seven|n7",e.Eight="eight|n8",e.Nine="nine|n9",e.AccNatural="accidentals-natural",e.AccSharp="accidentals-sharp",e.AccDoublesharp="accidentals-doublesharp",e.AccFlat="accidentals-flat",e.AccFlatflat="accidentals-flatflat",e.KeyNatural="accidentals-natural|key-natural",e.KeySharp="accidentals-sharp|key-sharp",e.KeyFlat="accidentals-flat|key-flat",e.NoteheadS0="noteheads-s0",e.NoteheadS1="noteheads-s1",e.NoteheadS2="noteheads-s2",e.NoteheadS1stemU="noteheads-s1|noteheads-s1-u",e.NoteheadS1stemD="noteheads-s1|noteheads-s1-d",e.NoteheadS2stemU="noteheads-s2|noteheads-s2-u",e.NoteheadS2stemD="noteheads-s2|noteheads-s2-d",e.Rest0="rests-0o",e.Rest1="rests-1o",e.Rest2="rests-2",e.Rest3="rests-3",e.Rest4="rests-4",e.Rest5="rests-5",e.Rest6="rests-6",e.Rest0W="rests-0",e.RestM1="rests-M1",e.Flag3="flags-u3",e.Flag4="flags-u4",e.Flag5="flags-u5",e.Flag6="flags-u6",e.Flag7="flags-u7",e.Flag8="flags-u8",e.BeamLeft="|beam-left",e.BeamRight="|beam-right",e.BeamContinue="|beam-continue",e.TremoloLeft="|tremolo-left",e.TremoloRight="|tremolo-right",e.TremoloMiddle="|tremolo-middle",e.SlurBegin="|slur-begin",e.SlurEnd="|slur-end",e.TieBegin="|tie-begin",e.TieEnd="|tie-end",e.VoltaLeft="|volta-left",e.VoltaRight="|volta-right",e.VoltaAlternativeBegin="|volta-alter-begin",e.BarTerminal="|bar-terminal",e.BarSegment="|bar-segment",e.Dot="|dot",e.DotDot="|dotdot",e.f="f",e.p="p",e.m="m",e.r="r",e.s="s",e.z="z",e.WedgeCrescendo="|wedge-crescendo",e.WedgeDiminuendo="|wedge-diminuendo",e.WedgeClose="|wedge-close",e.CrescendoBegin="|wedge-crescendo",e.DecrescendoBegin="|wedge-diminuendo",e.CrescendoEnd="|wedge-close",e.DecrescendoEnd="|wedge-close",e.ScriptFermata="scripts-ufermata",e.ScriptShortFermata="scripts-ushortfermata",e.ScriptSforzato="scripts-sforzato",e.ScriptStaccato="scripts-staccato",e.ScriptStaccatissimo="scripts-ustaccatissimo",e.ScriptTurn="scripts-turn",e.ScriptTrill="scripts-trill",e.ScriptSegno="scripts-segno",e.ScriptCoda="scripts-coda",e.ScriptArpeggio="scripts-arpeggio",e.ScriptPrall="scripts-prall",e.ScriptMordent="scripts-mordent",e.ScriptMarcato="scripts-umarcato",e.ScriptTenuto="scripts-tenuto",e.ScriptPortato="scripts-uportato",e.PedalStar="pedal-star",e.PedalPed="pedal-Ped",e.Text="|text",e.GraceNotehead="|grace-notehead"}(K||(K={}));const Z=K,J=Object.values(K),Q=J.filter(e=>/clefs-/.test(e)),ee=J.filter(e=>/timesig/.test(e)),te=J.filter(e=>/timesig-/.test(e)),se=J.filter(e=>/timesig\d/.test(e)),ie=J.filter(e=>/octave-/.test(e)),re=J.filter(e=>/n\d/.test(e)),ne=J.filter(e=>/accidentals-/.test(e)),ae=J.filter(e=>/noteheads-/.test(e)),oe=[Z.NoteheadS0,Z.NoteheadS1,Z.NoteheadS2],ce=J.filter(e=>/noteheads-.+-[ud]/.test(e)),le=J.filter(e=>/rests-/.test(e)),ue=J.filter(e=>/flags-/.test(e)),he=J.filter(e=>/volta-/.test(e)),me=J.filter(e=>/^[a-z]$/.test(e)),fe=J.filter(e=>/scripts-/.test(e)),de=J.filter(e=>/pedal-/.test(e)),pe=[Z.Dot,Z.DotDot],ge=[Z.SlurBegin,Z.SlurEnd,Z.TieBegin,Z.TieEnd],ye=J.filter(e=>/beam-/.test(e)),ve=J.filter(e=>/wedge-/.test(e)),xe=[...re,...me,...ve,...de,...ge,Z.ScriptFermata,Z.ScriptShortFermata,Z.ScriptSforzato,Z.ScriptStaccato,Z.ScriptStaccatissimo,Z.ScriptTurn,Z.ScriptTrill,Z.ScriptPrall,Z.ScriptMordent,Z.ScriptMarcato,Z.ScriptTenuto,Z.ScriptPortato],Se=[...de],be=[...Q,...ee,...re,...ne,Z.NoteheadS0,Z.NoteheadS1,Z.NoteheadS2,...le,...me,...fe,...de,...pe],ke={};Q.forEach(e=>ke[e]=1),se.forEach(e=>ke[e]=1),ne.forEach(e=>ke[e]=.5),ae.forEach(e=>ke[e]=.5),le.forEach(e=>ke[e]=.5),pe.forEach(e=>ke[e]=.5);const Te={};te.forEach(e=>Te[e]=0),he.forEach(e=>Te[e]=0);class Token{constructor(e){Object.assign(this,e)}get typeId(){return this.type.split("|").reverse()[0]}get isPredicted(){return Number.isFinite(this.confidence)}get isNotehead(){return ce.includes(this.type)||this.type===K.NoteheadS0}get isContexted(){return Q.includes(this.type)||ee.includes(this.type)||ie.includes(this.type)||ne.includes(this.type)}get isAccessory(){return re.includes(this.type)||me.includes(this.type)||fe.includes(this.type)||de.includes(this.type)}get division(){switch(this.type){case Z.NoteheadS0:return 0;case Z.NoteheadS1stemU:case Z.NoteheadS1stemD:return 1;case Z.NoteheadS2stemU:case Z.NoteheadS2stemD:return 2;case Z.Flag3:return 3;case Z.Flag4:return 4;case Z.Flag5:return 5;case Z.Flag6:return 6;case Z.Flag7:return 7;case Z.Flag8:return 8;case Z.RestM1:return-1;case Z.Rest0:return 0;case Z.Rest1:return 1;case Z.Rest2:return 2;case Z.Rest3:return 3;case Z.Rest4:return 4;case Z.Rest5:return 5;case Z.Rest6:return 6}return null}get dots(){switch(this.type){case Z.Dot:return 1;case Z.DotDot:return 2}return null}get direction(){switch(this.type){case Z.NoteheadS1stemU:case Z.NoteheadS2stemU:return"u";case Z.NoteheadS1stemD:case Z.NoteheadS2stemD:return"d"}return null}get width(){switch(this.type){case Z.NoteheadS0:return M.NoteheadS0;case Z.NoteheadS1stemU:case Z.NoteheadS1stemD:return M.NoteheadS1;case Z.NoteheadS2stemU:case Z.NoteheadS2stemD:return M.NoteheadS2}}get left(){switch(this.type){case Z.NoteheadS0:return this.x-this.width/2;case Z.NoteheadS1stemU:case Z.NoteheadS2stemU:return this.x-this.width;case Z.NoteheadS1stemD:case Z.NoteheadS2stemD:return this.x}return this.x}get right(){switch(this.type){case Z.NoteheadS0:return this.x+this.width/2;case Z.NoteheadS1stemU:case Z.NoteheadS2stemU:return this.x;case Z.NoteheadS1stemD:case Z.NoteheadS2stemD:return this.x+this.width}return this.x}get voiceIndices(){return!this.voice||this.voice<0?[]:Array(Math.floor(Math.log2(this.voice))+1).fill(null).reduce((e,t,s)=>this.voice&1<"CDEFGAB"[(e.note+700)%7]).join("")}get zeroHolder(){return!!this.grace||this.tremoloCatcher}}var Oe;EventTerm.className="EventTerm",function(e){e[e.Clef=0]="Clef",e[e.KeyAcc=1]="KeyAcc",e[e.Acc=2]="Acc",e[e.OctaveShift=3]="OctaveShift",e[e.TimeSignatureC=4]="TimeSignatureC",e[e.TimeSignatureN=5]="TimeSignatureN"}(Oe||(Oe={}));class ContextedTerm extends Term{constructor(e){super(),Object.assign(this,e)}get type(){return Q.includes(this.tokenType)?Oe.Clef:/\|key-/.test(this.tokenType)?Oe.KeyAcc:/accidentals-/.test(this.tokenType)?Oe.Acc:ie.includes(this.tokenType)?Oe.OctaveShift:te.includes(this.tokenType)?Oe.TimeSignatureC:se.includes(this.tokenType)?Oe.TimeSignatureN:null}get staffLevel(){return[Oe.OctaveShift,Oe.Clef,Oe.KeyAcc].includes(this.type)}get prior(){return this.tick-.1}get clef(){switch(this.tokenType){case K.ClefG:return-this.y-2;case K.ClefF:return 2-this.y;case K.ClefC:return-this.y}return null}get alter(){switch(this.tokenType){case K.AccNatural:case K.KeyNatural:return 0;case K.AccSharp:case K.KeySharp:return 1;case K.AccFlat:case K.KeyFlat:return-1;case K.AccDoublesharp:return 2;case K.AccFlatflat:return-2}return null}get octaveShift(){switch(this.tokenType){case K.OctaveShift8va:return-1;case K.OctaveShift0:return 0;case K.OctaveShift8vb:return 1}return null}get number(){switch(this.tokenType){case K.TimesigZero:return 0;case K.TimesigOne:return 1;case K.TimesigTwo:return 2;case K.TimesigThree:return 3;case K.TimesigFour:return 4;case K.TimesigFive:return 5;case K.TimesigSix:return 6;case K.TimesigSeven:return 7;case K.TimesigEight:return 8;case K.TimesigNine:return 9}return null}}ContextedTerm.className="ContextedTerm";class MarkTerm extends Term{get prior(){return this.tick+.01}}MarkTerm.className="MarkTerm";const Be=Array(7).fill(0).map((e,t)=>String.fromCodePoint(119133+t));class TempoTerm extends MarkTerm{static fromNumeralText(e){if(/.+=.*\d+/.test(e)){const[t,s]=e.split("=");let i=Be.findIndex(e=>t.includes(e));i=i>=0?i:2;let r=(2**i).toString();return t.includes(".")&&(r+="."),new TempoTerm({tick:0,duration:r,beats:s})}return null}constructor(e){super(),Object.assign(this,e)}get prior(){return this.tick-.01}get durationMagnitude(){const[e,t,s]=this.duration.match(/^(\d+)(\.)?$/);return we/Number(t)*(s?1.5:1)}get bpm(){const[e]=this.beats.match(/\d+/)||[90];return Number(e)*this.durationMagnitude*4/we}isValid(e=[10,400]){const t=this.bpm;return Number.isFinite(this.bpm)&&t>=e[0]&&t{const t=(e=>{const t=new Map;return e.rows.forEach(e=>{if(1===e.events.length){const t=e.events[0];t.rest&&0===t.division&&(t.rest="R")}}),e.events.forEach(e=>{const s=Math.round(10*e.pivotX)/10;let i=0;i=e.fullMeasureRest?Math.min(s,...t.keys()):[...t.keys()].find(s=>{const i=t.get(s),r=Math.min(...i.map(e=>e.left)),n=Math.max(...i.map(e=>e.right));return Math.min(n,e.right)-Math.max(r,e.left)>.62*M.NoteheadS1})||s,e.roundX=i;const r=t.get(i)||[];t.set(i,r),r.push(e)}),t})(e);let s=0;const i=new Set([s]),r=[...t.entries()].sort(([e],[t])=>e-t);for(const[e,t]of r)t.forEach(e=>{e.predisposition&&(e.rest=e.rest&&e.predisposition.fullMeasure>.5?"R":e.rest,e.grace=e.predisposition.grace?Ee.Grace:null,e.division=G(e.predisposition.divisionVector),e.dots=G(e.predisposition.dotsVector),e.predisposition.timeWarped>.5&&(e.timeWarp=D(2,3))),e.fullMeasureRest?e.tick=0:(e.zeroHolder&&(s-=e.duration),!e.zeroHolder&&e.predisposition&&Number.isInteger(e.predisposition.tick)?e.tick=e.predisposition.tick:e.tick=s,i.add(e.tick+e.duration))}),i.delete(s),i.size&&(s=Math.min(...i));Number.isInteger(e.estimatedDuration)?e.duration=e.estimatedDuration:e.duration=Math.max(...i,0)},e.computeMeasureVoices=e=>{e.voices=[];for(const t of e.rows){const s=t.events.filter(e=>!(e.grace||e.tremoloCatcher||e.fullMeasureRest||e.predisposition&&e.predisposition.fake>.5)),i=new Set(s);for(;i.size;){let t=0;const r=[],n=e=>{r.push(e.id),e.zeroHolder||(t+=e.duration),i.delete(e)},a=s.find(e=>i.has(e));for(a.alignedTick>0&&(t=a.alignedTick),n(a);;){const e=s.find(e=>i.has(e)&&e.alignedTick===t);if(!e)break;n(e)}e.voices.push(r)}}}}(Ae||(Ae={}));var Pe,Re,De;!function(e){const t=1921920,s=.7071067811865475,i=[[null,null],[null,Ne.Open],[Ne.Open,Ne.Continue],[Ne.Open,Ne.Close],[Ne.Continue,Ne.Continue],[Ne.Continue,Ne.Close],[Ne.Close,null],[Ne.Close,Ne.Open]].map(e=>e.join("-")),r=(e,t)=>{if(!e.events.length)return{events:[],voices:[],duration:0};return new Solver(e,t).solve()};e.estiamteMeasure=e=>{const r=e.events.filter(e=>!e.zeroHolder).map(s=>({id:s.id,staff:s.staff,x:s.x,tickEstimated:s.predisposition&&Number.isFinite(s.predisposition.tick)?s.predisposition.tick:s.x,tipX:s.tipX,y:s.tipY+100*s.staff,duration:s.mainDuration*t/we,division:s.division,dots:s.dots,stemDirection:s.stemDirection,beam:s.beam,rest:s.rest,pR:"R"===s.rest?1:"r"===s.rest&&0===s.division?Math.tanh(s.x-e.eventStartX):0,fakeP:s.predisposition&&s.predisposition.fakeP||0,shrinkness:s.predisposition?s.predisposition.timeWarped:null}));let n=t*e.timeSignature.numerator/e.timeSignature.denominator;Number.isFinite(e.estimatedDuration)&&(n=Math.max(n,A(e.estimatedDuration,480480)));const a=e.staffGroups.reduce((e,t,s)=>(t.forEach(t=>e[t]=s),e),{}),o=[0,...r.map(e=>e.id)],c=r.map(t=>({...t,id:o.indexOf(t.id),x:t.x-e.startX,confidence:(1-t.pR)*(1-t.fakeP),shrinkness:Number.isFinite(t.shrinkness)?t.shrinkness:Math.tanh((t.division-.1*t.dots)/4),staffGroup:a[t.staff]})),l=Array(o.length+1).fill(null).map(()=>Array(o.length).fill(0)),u=Array(o.length).fill(null).map(()=>Array(o.length).fill(0)),h=e=>g.default(e/1.6)*g.default(1.6/e);for(const t of c){for(const e of c){if(u[t.id][e.id]=t!==e&&t.tickEstimated>=e.tickEstimated?1-g.default((t.tickEstimated-e.tickEstimated)*s/.6):0,t.staffGroup!==e.staffGroup)l[t.id][e.id]=0;else if(t.x<=e.x)l[t.id][e.id]=0;else{const s=Math.exp(2*-Math.abs(t.staff-e.staff)),i=t.staff===e.staff?Math.exp(-Math.abs(t.y-e.y)/16):1,r=t.x-e.x,n=t.tipX-e.tipX;l[t.id][e.id]=(s*i*Math.min(h(r),h(n)))**(1/3)}const r=(1-t.pR)*(1-e.pR);u[t.id][e.id]*=r,l[t.id][e.id]*=r,u[t.id][e.id]<.01&&(u[t.id][e.id]=0),t.stemDirection&&e.stemDirection&&t.stemDirection!==e.stemDirection&&(l[t.id][e.id]*=.9),t.rest||e.rest||i.includes([e.beam,t.beam].join("-"))||(l[t.id][e.id]*=.2)}l[o.length][t.id]=h(e.width-t.x)**(1/3)}return{ids:o,events:c,expectedDuration:n,measureShrinkness:0,endX:e.position.right,matrixH:l,matrixV:u}},e.regulateMeasure=async(s,{solver:i=null,...n})=>{const a=e.estiamteMeasure(s),{ids:o,matrixH:c,matrixV:l}=a;if(s.matrixH){console.assert(s.matrixH.length>o[o.length-1]&&s.matrixH[0].length>o[o.length-1],"matrix shape mismatch:",o.length,`${s.matrixH.length}x${s.matrixH[0].length}`,`${c.length}x${c[0].length}`);for(let e=0;ee.forEach((e,i)=>{const r=s.matrixV[o[t]][o[i]];Number.isFinite(r)&&(l[t][i]=r)})),Number.isFinite(s.estimatedDuration)&&(a.measureShrinkness=Math.tanh(-3*Math.log(Math.min(1,s.estimatedDuration/s.duration)))),n.logger&&n.logger.info("--- MEASURE",s.measureIndex,"---",a);const u=i?await i(a,n):r(a,n),h=u.events.map(e=>({...e,id:a.ids[e.id]}));h.forEach(e=>{const i=s.events.find(t=>t.id===e.id);i.tick=Number.isFinite(e.tick)?Math.round(e.tick*we/t):null,i.tickGroup=e.tickGroup,i.timeWarp=e.timeWarp}),s.duration=Math.round(u.duration*we/t),s.voices=u.voices.map(e=>e.map(e=>a.ids[e])),s.solutionStat={loss:u.loss,solverCredits:u.credits,solverTimes:u.times},s.events.forEach(e=>{const t=h.find(t=>t.id===e.id);t&&(Number.isFinite(t.tick)||"r"!==e.rest||0!==e.division?"R"===e.rest&&(e.tick=0,e.tickGroup=0,e.duration=s.duration,s.voices.push([e.id])):(e.tick=0,e.tickGroup=0,e.rest="R",e.duration=s.duration,s.voices.push([e.id])))})},e.regulateMeasureWithRectification=async(e,i,{solver:n=null,...a})=>{const o=e.events.filter(e=>!e.zeroHolder).map(s=>{const r=i.events.find(e=>e&&e.id===s.id),n=Number.isFinite(r?.division)?r.division:s.division,a=Number.isFinite(r?.dots)?r.dots:s.dots,o=t*2**-n*(2-2**-a);return{id:s.id,staff:s.staff,x:s.x,tickEstimated:s.predisposition?.tick,y:s.tipY+100*s.staff,duration:o,pR:"R"===s.rest?1:"r"===s.rest&&0===s.division?Math.tanh(s.x-e.eventStartX):0,fakeP:s.predisposition&&s.predisposition.fakeP||0,shrinkness:s.predisposition?.timeWarped||0}});let c=t*e.timeSignature.numerator/e.timeSignature.denominator;Number.isFinite(e.estimatedDuration)&&(c=Math.max(c,A(e.estimatedDuration,480480)));const l=e.staffGroups.reduce((e,t,s)=>(t.forEach(t=>e[t]=s),e),{}),u=[0,...o.map(e=>e.id)],h=o.map(t=>({...t,id:u.indexOf(t.id),x:t.x-e.startX,confidence:(1-t.pR)*(1-t.fakeP),shrinkness:t.shrinkness,staffGroup:l[t.staff]})),m=Array(u.length+1).fill(null).map(()=>Array(u.length).fill(0)),f=Array(u.length).fill(null).map(()=>Array(u.length).fill(0));for(const e of h)for(const t of h){f[e.id][t.id]=e!==t&&e.tickEstimated>=t.tickEstimated?1-g.default((e.tickEstimated-t.tickEstimated)*s/.6):0;const i=(1-e.pR)*(1-t.pR);f[e.id][t.id]*=i,f[e.id][t.id]<.01&&(f[e.id][t.id]=0)}console.assert(e.matrixH&&e.matrixH.length>u[u.length-1]&&e.matrixH[0].length>u[u.length-1],"matrix shape mismatch:",u.length,`${e.matrixH.length}x${e.matrixH[0].length}`,`${m.length}x${m[0].length}`);for(let t=0;t{const a=i.events.find(t=>t&&t.id===e),o=Number.isFinite(s)?Math.round(s*we/t):s;return{id:e,tick:o,tickGroup:r,timeWarp:n,division:a?.division,dots:a?.dots}}),S=Math.round(y.duration*we/t);return{events:x,voices:y.voices,duration:S,priority:v}}}(Pe||(Pe={}));class SpartitoMeasure extends SimpleClass{static reorderEvents(e,t){const s=[],i=e.map(e=>({id:e.id,staff:e.staff,x:e.x/.7,rx:0,ry:t[e.staff]+e.tipY,tipY:e.tipY,prior:0}));i.sort((e,t)=>e.x-t.x),i.slice(1).forEach((e,t)=>{const s=Math.min(Math.round(e.x-i[t].x),2);e.rx=i[t].rx+s}),i.forEach(e=>{e.prior=1e4*e.staff+e.rx+.01*e.tipY,s.includes(e.ry)||s.push(e.ry)}),i.sort((e,t)=>e.prior-t.prior),s.sort((e,t)=>e-t);let r=0;const n=s.map((e,t)=>(!t||s[t]-s[t-1]<.5||++r,r)),a=i.map(t=>new EventTerm({...e.find(e=>e.id===t.id),intX:t.rx,intY:n[s.indexOf(t.ry)]}));return a.forEach((e,t)=>e.id=t+1),a}constructor(e){super(),super.assign(e),this.originalRegulationHash||this.regulated||(this.originalRegulationHash=this.regulationHash),this.barTypes=this.barTypes||{},this.regulated&&this.position&&this.postRegulate()}get timeSignature(){return this.basics&&this.basics[0].timeSignature}get keySignature(){return this.basics&&this.basics[0].keySignature}get timeSignatureChanged(){return this.contexts.filter(Boolean)[0].some(e=>[Oe.TimeSignatureC,Oe.TimeSignatureN].includes(e.type))}get doubtfulTimesig(){return this.basics&&this.basics[0].doubtfulTimesig}get regulated(){return!!this.voices}get validRegulated(){return!!this.voices&&this.voices.flat(1).every(e=>Number.isFinite(this.events.find(t=>t.id===e)?.tick))}get rows(){return this.contexts.map((e,t)=>({events:this.events.filter(e=>e.staff===t),contexts:e}))}get eventStartX(){return this.events.length?Math.min(...this.events.map(e=>e.x)):this.startX}get startX(){return this.position.left}get width(){return this.position.right-this.position.left}get tickMap(){return this.events.concat([this.endEvent]).filter(Boolean).reduce((e,t)=>(Number.isFinite(t.tick)&&(e.has(t.tick)||e.set(t.tick,[]),e.get(t.tick).push(t)),e),new Map)}get tickToX(){return[...this.tickMap.entries()].reduce((e,[t,s])=>{if((s=s.filter(e=>!e.fullMeasureRest&&!e.grace)).length){const i=Math.min(...s.map(e=>e.x));e[t]=i}return e},{})}get tickRates(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest);return e.sort((e,t)=>e.x-t.x),e.slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)})}get tickRatesInStaves(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest&&!e.grace).reduce((e,t)=>(e[t.staff]=e[t.staff]||[],e[t.staff].push(t),e),{}),t=Object.values(e).map(e=>e.sort((e,t)=>e.x-t.x).slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)}));return[].concat(...t)}get tickRatesInGroups(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest).reduce((e,t)=>{const s=this.staffGroups.findIndex(e=>e.includes(t.staff));return e[s]=e[s]||[],e[s].push(t),e},{}),t=Object.values(e).map(e=>e.sort((e,t)=>e.x-t.x).slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)}));return[].concat(...t)}get tickTwist(){if(!this.duration||!this.staffGroups)return;const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest&&!e.grace&&!e.tremoloCatcher&&!(e.rest&&0===e.division)).reduce((e,t)=>{const s=this.staffGroups.findIndex(e=>e.includes(t.staff));return e[s]=e[s]||[],e[s].push(t),e},{}),t=Object.values(e).map(e=>{const t=[...e].sort((e,t)=>e.pivotX-t.pivotX),s=this.position.right-t[0].x,i=t.slice(1).map((e,i)=>{const r=t[i],n=e.pivotX-r.pivotX,a=e.tick-r.tick;if(!a)return n/s;return(4*Math.atan2(a/this.duration,n/s)/Math.PI-1)**2});return Math.max(0,...i)});return Math.max(0,...t)}get eventMap(){return this.events.reduce((e,t)=>(e[t.id]=t,e),{})}get empty(){return!this.events?.length||!this.voices?.length}get hasIllEvent(){const e=this.voices.flat(1),t=this.eventMap;return this.regulated&&e.some(e=>{const s=t[e];return!s.zeroHolder&&!Number.isFinite(s.tick)&&!s.fullMeasureRest})}get brief(){return[`${this.timeSignature.numerator}/${this.timeSignature.denominator}`,...this.events.map(e=>[e.staff,e.intX,Math.round(e.tip?e.tip.y:e.ys?.[0]??0),e.fullMeasureRest?0:e.division,e.fullMeasureRest?0:e.dots,e.rest?"r":"",e.grace||"",e.stemDirection,e.beam||""].join("|"))].join("\n")}get regulationHash(){return p.default(this.brief)}get regulationHash0(){return this.originalRegulationHash||this.regulationHash}get regulationHashes(){return Array.from(new Set([this.originalRegulationHash,this.regulationHash].filter(Boolean)))}get featureWords(){if(!this.regulated||!this.voices||!this.voices.length)return null;const e=this.tickRatesInStaves.some(e=>e<0),t=this.events.filter(e=>!e.zeroHolder&&!e.rest).map(e=>e.ys).flat(1).map(e=>"Y"+2*-e),s=Array.from(new Set(t));this.keySignature&&s.push(`K${this.keySignature}`);const i=this.voices.map(e=>e.map(e=>this.events.find(t=>t.id===e)).filter(e=>!e.zeroHolder&&!e.rest)).filter(e=>e.length),r=e?[]:i.map(e=>e.map(e=>e.scaleChord).join("-")),n=e?[]:i.map(e=>e.map(e=>e.division).join(""));return this.timeSignature&&n.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`),[s,r,n]}get barType(){if(this.voltaEnd)return"VoltaRight";const e=Object.entries(this.barTypes).sort((e,t)=>t[1]-e[1]);return e[0]&&e[0][1]>=1?e[0][0]:null}get partialDuration(){if(!Number.isFinite(this.duration))return!1;const e=$(we,this.timeSignature);return this.duration{const t=e.events.filter(e=>e.grace);if(!t.length)return;const s=[...e.tickMap.entries()].reduce((e,[t,s])=>(s.forEach(s=>{if(!s.grace){e[s.staff]=e[s.staff]||{};const i=e[s.staff][t];e[s.staff][t]=!i||i.x>s.x?s:i}}),e),{}),i=Object.entries(s).reduce((t,[s,i])=>{t[s]=Object.entries(i).map(([e,t])=>({event:t,tick:Number(e),preTick:-240,graces:[]})).sort((e,t)=>e.event.x-t.event.x),t[s].push({tick:e.duration,event:e.endEvent,preTick:0,graces:[]});let r=0;return t[s].forEach(e=>{e.tick>r&&(e.preTick=r,r=e.tick)}),t},{});t.forEach(e=>{const t=i[e.staff];if(t){const s=t.find(t=>t.event.x>e.x);s&&s.graces.push(e),e.roundX=e.x}}),Object.values(i).forEach(e=>e.forEach(e=>{if(e.graces.length){e.event.graceIds=e.graces.map(e=>e.id);const t=e.graces.reduce((e,t)=>e+t.duration,0),s=Math.min(t,e.tick-e.preTick)/t;let i=e.tick;[...e.graces].reverse().forEach(e=>{e.tick=Math.round(i-e.duration*s),i=e.tick})}}))})(this),(e=>{const t=e.events.filter(e=>e.tremoloCatcher&&!e.grace),s=e.events.filter(e=>e.tremoloLink===Ie.Pitcher&&!e.grace);t.forEach(t=>{let i=s.filter(e=>e.division===t.division&&e.xNumber.isFinite(e.tick)&&!e.grace&&!e.rest&&e.division===t.division&&e.dots===t.dots&&e.xt.x-e.x),i.length){const e=i[0];e.catcherId=t.id;const r=Math.max(e.tremolo||3,t.tremolo||3);e.tremolo=r,t.tremolo=r,t.tick||(t.tick=e.tick+e.duration/2);const n=s.indexOf(e);n>=0&&s.splice(n,1)}})})(this),this.updateContextTick()}updateRoundX(){const e=this.tickToX;e&&this.events.forEach(t=>{const s=e[t.tick];Number.isFinite(s)&&(t.roundX=s)})}updateContextTick(){if(!this.staffGroups)return;const e=this.contexts.flat(1);this.staffGroups.flat(1).forEach(t=>{const s=[...this.events.filter(e=>e.staff===t),...e.filter(e=>e.staff===t)];s.sort((e,t)=>t.x-e.x);let i=this.duration;s.forEach(e=>{e instanceof EventTerm?e.fullMeasureRest||e.zeroHolder||(i=e.tick):e instanceof ContextedTerm&&(e.tick=i)})})}asSolution(e=void 0){return this.regulated?{events:this.events.map(t=>{const s={id:t.id,tick:t.tick,tickGroup:t.tickGroup,timeWarp:t.timeWarp};if(e){const i=e.events.find(e=>e.id===t.id);i&&(t.division!==i.division&&(s.division=t.division),t.dots!==i.dots&&(s.dots=t.dots),t.grace!==i.grace&&(s.grace=!!t.grace),t.beam!==i.beam&&(s.beam=t.beam),t.fullMeasureRest!==i.fullMeasureRest&&(s.fullMeasure=t.fullMeasureRest))}return s}),voices:this.voices,duration:this.duration,priority:-this.solutionStat?.loss}:null}applySolution(e){e.timeSignature&&this.basics.forEach(t=>{t.timeSignature=e.timeSignature,t.doubtfulTimesig=!1}),this.voices=e.voices,this.duration=e.duration,this.events.forEach(t=>{t.timeWarp=null,t.tick=null,t.tickGroup=null;const s=e.events?.find(e=>e.id===t.id);s&&(t.tick=s.tick,t.timeWarp=s.timeWarp,t.tickGroup=s.tickGroup,Number.isFinite(s.division)&&(t.division=s.division),Number.isFinite(s.dots)&&(t.dots=s.dots),void 0!==s.beam&&(t.beam=s.beam),void 0!==s.grace&&(t.grace=s.grace?Ee.Grace:void 0),s.fullMeasure&&(t.rest="R"))}),Number.isFinite(e.priority)&&(this.solutionStat={loss:-e.priority}),this.postRegulate()}cleanupRegulation(){this.voices=null,this.duration=null,this.events.forEach(e=>{e.tick=null,e.tickGroup=null,e.timeWarp=null})}regulateTest(){this.duration=0,this.voices=this.rows.map(e=>e.events.map(e=>e.id)),this.voices.forEach(e=>{let t=0;e.map(e=>this.events.find(t=>t.id===e)).forEach((e,s)=>{e.tickGroup=s,e.tick=t,t+=e.duration}),this.duration=Math.max(this.duration,t)})}regulateSimple(){Ae.computeMeasureTicks(this),Ae.computeMeasureVoices(this)}async regulateEquations(e){await Pe.regulateMeasure(this,e)}async regulate({policy:e="advanced",...t}={}){switch(e){case"test":this.regulateTest();break;case"equations":case"advanced":await this.regulateEquations(t);break;default:this.regulateSimple()}this.postRegulate()}createPatch(){return new PatchMeasure({measureIndex:this.measureIndex,staffMask:this.staffMask,basic:this.basics[0],events:this.events,contexts:this.contexts,marks:this.marks,voices:this.voices})}createClusters(){const e=this.voices&&new Set(this.voices.flat(1));return this.staffGroups.filter(e=>e.length).map(t=>{const s=this.position.staffYs[0],i=e=>this.position.staffYs[t.indexOf(e)]-s,r=this.events.filter(e=>t.includes(e.staff));if(!r.length)return null;const n=r.map(s=>({index:s.id,voice:(this.voices||[]).findIndex(e=>e.includes(s.id)),type:s.rest?X.REST:X.CHORD,staff:t.indexOf(s.staff),x:s.tipX,pivotX:s.pivotX,y1:i(s.staff)+("u"===s.stemDirection?s.tipY:s.ys[s.ys.length-1]),y2:i(s.staff)+("u"===s.stemDirection?s.ys[0]:s.tipY),headY:"u"===s.stemDirection?s.ys[0]:s.ys[s.ys.length-1],feature:s.feature,division:s.division,dots:s.dots,beam:s.beam||null,stemDirection:s.stemDirection,grace:!!s.grace,tremoloCatcher:s.tremoloCatcher,timeWarped:!!s.timeWarp,fullMeasure:s.fullMeasureRest,tick:s.tick||0,fake:!s.fullMeasureRest&&!s.grace&&this.voices&&!e.has(s.id)}));if(!n.some(e=>!e.fake))return null;const a=$(we,this.timeSignature);n.unshift({index:0,type:X.BOS,staff:null,division:null,beam:null,dots:null,stemDirection:null,grace:!1,tremoloCatcher:!1,fullMeasure:!1,x:this.position.left,pivotX:this.position.left,y1:0,y2:0,headY:0,feature:null,timeWarped:this.durationn.map(()=>0)),this.voices.forEach(e=>{let t=0;e.forEach(e=>{const s=n.findIndex(t=>t.index===e);s>0&&t>=0&&(o[s][t]=1),t=s}),t>=0&&(o[n.length-1][t]=1)}));const c={...this.solutionStat,patched:this.patched},l=this.backgroundImages&&this.backgroundImages.map(({url:e,position:t})=>({url:e,position:{...t,y:t.y-s}}));return new EventCluster({index:this.measureIndex,duration:this.duration,signatureDuration:a,staffY0:s,elements:n,matrixH:o,annotation:c,backgroundImages:l})}).filter(Boolean)}applyClusters(e){const t=this.events.reduce((e,t)=>Math.max(e,t.id),0)+1;this.matrixH=Array(t+1).fill(null).map(()=>Array(t).fill(0)),e.forEach(e=>{const s=e.elements.map(e=>e.index);console.assert(e.matrixH.length===s.length-1,"unexpected matrixH size:",e.matrixH.length,s.length);for(let i=1;i{const t=this.events.find(t=>t.id===e.index);t&&(t.predisposition=e.predisposition,void 0!==t.predisposition.grace&&(t.grace=t.predisposition.grace?Ee.Grace:null))})}),this.estimatedDuration=e.reduce((e,t)=>e+t.estimatedDuration,0)/e.length}}SpartitoMeasure.className="SpartitoMeasure",SpartitoMeasure.blackKeys=["staffGroups","solutionStat","measureNumber","deposit"];class EditableEvent extends EventTerm{constructor(e){super(e)}get agent(){return new Proxy(this,{get(e,t){const s=e;switch(t){case"id":case"tick":case"duration":case"rest":case"division":case"dots":case"stemDirection":case"beam":case"tremolo":case"tremoloLink":case"arpeggioStyle":{const e=s[t];return void 0===e?null:e}case"tying":case"tied":case"glissando":{const e=s[t];return void 0!==e&&e}case"grace":return!!s.grace;case"timeWarp":return s.timeWarp?`${s.timeWarp.numerator}/${s.timeWarp.denominator}`:null;case"multiplier":return s.multiplier?`${s.multiplier.numerator}/${s.multiplier.denominator}`:null;case"pitches":return s.pitches}},set:(e,t,s)=>{const i=e;switch(t){case"tick":case"duration":case"rest":case"division":case"dots":case"stemDirection":case"tying":case"tied":case"beam":case"tremolo":case"tremoloLink":case"glissando":case"arpeggioStyle":return i[t]=s,!0;case"grace":return i.grace=s?Ee.Grace:null,!0;case"timeWarp":if(i.timeWarp=null,s&&"string"==typeof s){const e=s.match(/^(\d+)\/(\d+)/);e&&(i.timeWarp={numerator:parseInt(e[1]),denominator:parseInt(e[2])})}return!0;case"multiplier":if(i.multiplier=null,s&&"string"==typeof s){const e=s.match(/^(\d+)\/(\d+)/);e&&(i.multiplier={numerator:parseInt(e[1]),denominator:parseInt(e[2])})}return!0;case"id":case"pitches":return!0}return!1},ownKeys:()=>["id","duration","rest","division","dots","stemDirection","tying","tied","beam","timeWarp","multiplier","tremolo","tremoloLink","glissando","arpeggioStyle","tick","grace","pitches"],getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0})})}}class EditableMeasure extends SpartitoMeasure{constructor(e){super(e),this.events=null,this.events=e.events,this.events?.some(e=>!(e instanceof EditableEvent))&&(this.events=this.events.map(e=>new EditableEvent(e))),this.voices&&this.syncVoiceToEvents()}syncVoiceToEvents(){this.events.forEach(e=>e.voice=-1),this.voices.forEach((e,t)=>{e.forEach(e=>{const s=this.events.find(t=>t.id===e);s?s.voice=t:console.warn("no event with id:",e,this.events.length)})})}syncVoiceFromEvents(){const e=[];this.events.forEach(t=>{t?.voice>=0&&(e[t.voice]=e[t.voice]||[],e[t.voice].push(t))}),e.forEach(e=>e.sort((e,t)=>e.tick-t.tick)),this.voices=e.map(e=>e.map(e=>e.id))}get agent(){return new Proxy(this,{get:(e,t)=>{const s=e;switch(t){case"measureIndex":case"duration":return s[t];case"voices":return s.voices?.map(e=>e.join(","))||null;case"timeSignature":case"keySignature":case"doubtfulTimesig":return s.basics[0][t];case"toJSON":return()=>({measureIndex:s.measureIndex,voices:s.voices,duration:s.duration,timeSignature:s.basics[0].timeSignature,keySignature:s.basics[0].keySignature})}},set:(e,t,s)=>{const i=e;switch(t){case"timeSignature":case"keySignature":case"doubtfulTimesig":return i.basics[0][t]=s,i.basics=i.basics.map(()=>i.basics[0]),!0;case"duration":return i.duration=s,!0;case"measureIndex":case"voices":return!0}return!1},ownKeys:()=>["measureIndex","timeSignature","doubtfulTimesig","keySignature","duration","voices"],getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0})})}makeMIDI(e=120){if(!this.regulated)return null;const t=6e7/e,s=this.voices.map((e,s)=>{const i=e.map(e=>{const t=this.events.find(t=>t.id===e);if(t){const e=t.graceIds?t.graceIds.map(e=>this.events.find(t=>t.id===e)):[];return[...e,t]}return[]}).flat(1),r=i.filter(e=>!e.rest&&Number.isFinite(e.tick)&&e.tick>=0&&Number.isFinite(e.duration)).map(e=>e.pitches.map(t=>[{id:e.id,time:e.tick,type:"channel",subtype:"noteOn",channel:e.staff,noteNumber:q(t),velocity:96},{id:e.id,time:e.tick+e.duration,type:"channel",subtype:"noteOff",channel:e.staff,noteNumber:q(t)}])).flat(2);return r.sort(function(e,t){return e.time-t.time}),0===s&&r.unshift({time:0,type:"meta",subtype:"timeSignature",numerator:this.timeSignature.numerator,denominator:this.timeSignature.denominator,thirtyseconds:8},{time:0,type:"meta",subtype:"setTempo",microsecondsPerBeat:t}),r.forEach(e=>{e.ticks=Math.round(e.time-0)}),r.forEach((e,t)=>{e.deltaTime=e.ticks-(t>0?r[t-1].ticks:0)}),r.push({deltaTime:0,type:"meta",subtype:"endOfTrack"}),r});return{header:{formatType:0,ticksPerBeat:480},tracks:s}}}EditableMeasure.className="EditableMeasure",EditableMeasure.blackKeys=[],function(e){e.ByLines="ByLines",e.ByBlocks="ByBlocks"}(Re||(Re={})),function(e){e.Title="Title",e.Author="Author",e.TempoText="TempoText",e.TempoNumeral="TempoNumeral",e.TextualMark="TextualMark",e.Lyric="Lyric",e.Instrument="Instrument",e.MeasureNumber="MeasureNumber",e.Times="Times",e.Alternation1="Alternation1",e.Alternation2="Alternation2",e.Chord="Chord",e.PageMargin="PageMargin",e.Other="Other"}(De||(De={}));const Fe={[Ne.Open]:1,[Ne.Continue]:0,[Ne.Close]:-1},Le=e=>{if(!e.regulated)return;const t=e.eventMap,s=e.events.length,i=e.voices.flat(1).length,r=e.events.filter(e=>e.timeWarp).length,n=new Set(e.events.filter(e=>e.timeWarp&&!(e.rest&&0===e.division)).map(e=>`${e.timeWarp.numerator}/${e.timeWarp.denominator}`)),a=new Set(n);a.delete("2/3");const o=e.voices.some(e=>{const s=e.map(e=>t[e]);if(!s.some(e=>e.timeWarp))return!1;let i=0,r=0,n=0;return s.some((e,t)=>{const a=e.timeWarp?e.timeWarp.denominator:0;if(a!==i){if(i>0&&(r%i||n<2))return!0;r=0,n=0}return i=a,r+=e.duration,++n,!!(t===s.length-1&&i>0&&(r%i||n<2))})}),c=e.voices.some(e=>{const s=e.map(e=>t[e]);let i=0;return s.some(e=>!e.grace&&(e.ticke.timeWarp&&e.timeWarp.denominator>3).map(e=>e.duration)).size>1,u=$(we,e.timeSignature),h=e.doubtfulTimesig?e.duration:u,m=e.voices.flat(1).map(e=>t[e]),f=m.some(e=>!e||!Number.isFinite(e.tick)||!Number.isFinite(e.division)||e.division<0||!Number.isFinite(e.duration)||e.duration<=0),d=m.reduce((e,t)=>e||t.tick<0||t.tick+t.duration>h,!1),p=e.duration>u,g=m.some(e=>e.grace),y=e.events.filter(e=>e.grace).length,v=y>=m.length,x=m.some(e=>{let t=e.tick*2**(e.division+2);if(e.timeWarp&&(t*=e.timeWarp.denominator),!Number.isFinite(t))return!0;return R(Math.round(t),we)e.reduce(({status:e,broken:s},i,r)=>{const n=t[i];return n.beam?(0===r&&[Ne.Continue,Ne.Close].includes(n.beam)&&(e=1),e+=Fe[n.beam],s=s||!(e>=0&&e<=1)):n.rest||(s=s||0!==e),{status:e,broken:s}},{status:0,broken:!1})).some(({broken:e})=>e);let b=0,k=0;e.voices.forEach(s=>{const i=s.reduce((e,s)=>e+t[s].duration,0);b+=Math.max(0,e.duration-i),k+=Math.max(0,i-e.duration)}),b/=we;const T=e.events.filter(e=>!(e.grace||e.fullMeasureRest||e.tremoloCatcher||e.predisposition&&!(e.predisposition.fakeP<.1)||Number.isFinite(e.tick))).length,w=e.events.filter(e=>!(e.fullMeasureRest||e.grace||e.tremoloCatcher||m.includes(e))).length,{voiceRugged:M}=e.voices.flat(1).reduce((e,t)=>!e.voiceRugged&&e.es.has(t)?{voiceRugged:!0,es:e.es}:(e.es.add(t),e),{voiceRugged:!1,es:new Set}),E=e.tickTwist||0,N=f||E>=1||c||M||e.tickRatesInStaves.some(e=>e<0)||T>2||!e.timeSignature||d||e.duration>h||e.events.some(e=>e.timeWarp&&e.timeWarp.numerator/e.timeWarp.denominator<=.5),I=!N&&!p&&E<.2&&!o&&!a.size&&!x&&!b&&!k&&!!e.voices.length&&!S&&!g&&!v&&(e.duration===h||Number.isFinite(e.estimatedDuration)&&e.estimatedDuration<=.75*h),C=!(N||p||!(E<.3)||o||x||k||S||g);let _=Math.min(h,3840);Number.isFinite(e.estimatedDuration)&&(_=Math.max(0,Math.min(_,e.estimatedDuration)));const O=e.duration/_;let B=0;if(e.patched&&!f)B=1;else if(!N){const t=Math.tanh(1*Math.abs(b/Math.max(1,e.voices.length)));let s=Math.min(h,3840);Number.isFinite(e.estimatedDuration)&&(s=Math.max(0,Math.min(s,e.estimatedDuration)));B=(1-t)*(1-(s?Math.max(0,1-O)**2:0))*(1-Math.tanh(a.size))*(1-E**2)}return{events:s,validEvents:i,voiceRugged:M,nullEvents:T,fakeEvents:w,warpedEvents:r,complicatedTimewarp:l,spaceTime:b,surplusTime:k,durationRate:O,beamBroken:S,fractionalWarp:o,irregularWarpsN:a.size,irregularTick:x,tickTwist:E,tickOverlapped:c,graceInVoice:g,graceN:y,graceDominant:v,perfect:I,fine:C,error:N,qualityScore:B}};var $e;!function(e){e.Ordinary="ordinary",e.Full="full",e.Conservative="conservative",e.Once="once"}($e||($e={}));const je=(e,t=$e.Ordinary)=>[].concat(...e.map(e=>e.serialize(t))),He=(e,{withBrackets:t=!1}={})=>{let s="",i=!1;for(let t=0;t0&&!i&&(s+=", "),i=!1,s+=e[t].code)}return t?`[${s}]`:s};class SingleMLayout extends SimpleClass{static from(e){const t=new SingleMLayout;return t.measure=e,t}constructor(e=void 0){super(),this.assign(e)}serialize(){return[this.measure]}get seq(){return[this]}get code(){return this.measure.toString()}}SingleMLayout.className="SingleMLayout";class BlockMLayout extends SimpleClass{static trimSeq(e){const t=[];for(const s of e)if(s instanceof BlockMLayout)for(const e of s.seq)t.push(e);else t.push(s);const s=[];let i=null;for(const e of t)e instanceof SingleMLayout?e.measure>i&&(s.push(e),i=e.measure):s.push(e);return s}static fromSeq(e){const t=new BlockMLayout;return t.seq=BlockMLayout.trimSeq(e),t}constructor(e=void 0){super(),this.assign(e)}serialize(e){return je(this.seq,e)}get code(){return He(this.seq,{withBrackets:!0})}}BlockMLayout.className="BlockMLayout";class VoltaMLayout extends SimpleClass{constructor(e=void 0){super(),this.assign(e)}serialize(e){const t=je(this.body);if(this.alternates){const s=this.alternates.map(e=>je(e)),i=s[s.length-1];switch(e){case $e.Ordinary:return t.concat(...s);case $e.Conservative:case $e.Full:return[...[].concat(...Array(this.times-1).fill(null).map((e,i)=>[...t,...s[i%(this.times-1)]])),...t,...i];case $e.Once:return[...t,...i]}}else switch(e){case $e.Ordinary:case $e.Conservative:case $e.Once:return t;case $e.Full:return[].concat(...Array(this.times).fill(null).map(()=>t))}console.warn("the current case not handled:",e,this)}get seq(){const e=this.alternates?this.alternates[this.alternates.length-1]:[];return[...this.body,...e]}get code(){const e=He(this.body,{withBrackets:!0});let t=`${this.times}*${e}`;return this.alternates&&(t+="{"+this.alternates.map(e=>He(e,{withBrackets:e.length>1})).join(", ")+"}"),t}}VoltaMLayout.className="VoltaMLayout";class ABAMLayout extends SimpleClass{constructor(e=void 0){super(),this.assign(e)}serialize(e){const t=this.main.serialize(e),s=je(this.main.seq,$e.Once),i=je(this.rest,e);switch(e){case $e.Ordinary:return[...t,...i];case $e.Once:return[...i,...s];case $e.Conservative:case $e.Full:return[...t,...i,...s];default:console.warn("the current case not handled:",e,this)}}get seq(){return[this.main,...this.rest]}get code(){return"<"+this.main.code+", "+He(this.rest)+">"}}ABAMLayout.className="ABAMLayout";var Ve=Object.freeze({__proto__:null,get LayoutType(){return $e},SingleMLayout:SingleMLayout,BlockMLayout:BlockMLayout,VoltaMLayout:VoltaMLayout,ABAMLayout:ABAMLayout}),ze=function(){var e=function(e,t,s,i){for(s=s||{},i=e.length;i--;s[e[i]]=t);return s},t=[1,13],s=[1,16],i=[1,15],r=[1,26],n=[1,29],a=[1,28],o=[1,30],c=[5,13,22,27,29],l=[2,15],u=[1,32],h=[5,14,21,22,27,28,29],m={trace:function(){},yy:{},symbols_:{error:2,start_symbol:3,measure_layout:4,EOF:5,index_wise_measure_layout:6,"i:":7,"s:":8,segment_wise_measure_layout:9,iw_sequence:10,iw_item:11,range:12,",":13,UNSIGNED:14,"..":15,single:16,iw_block_item:17,iw_volta:18,iw_aba:19,iw_block:20,"[":21,"]":22,"*":23,iw_optional_alternates:24,iw_alternates:25,"{":26,"}":27,"<":28,">":29,sw_sequence:30,sw_item:31,segment:32,sw_block_item:33,sw_volta:34,sw_aba:35,sw_block:36,sw_optional_alternates:37,sw_alternates:38,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",7:"i:",8:"s:",13:",",14:"UNSIGNED",15:"..",21:"[",22:"]",23:"*",26:"{",27:"}",28:"<",29:">"},productions_:[0,[3,2],[4,1],[4,2],[4,2],[6,1],[10,1],[10,1],[10,3],[10,3],[12,3],[11,1],[11,1],[11,1],[11,1],[16,1],[17,1],[20,3],[18,4],[24,0],[24,1],[25,3],[19,5],[9,1],[30,1],[30,2],[31,1],[31,1],[31,1],[31,1],[32,1],[33,1],[36,3],[34,4],[37,0],[37,1],[38,3],[35,4]],performAction:function(e,t,s,i,r,n,a){var o=n.length-1;switch(r){case 1:return n[o-1];case 2:this.$=f(null,n[o]);break;case 3:this.$=f("index-wise",n[o]);break;case 4:this.$=f("segment-wise",b(n[o]));break;case 5:case 23:1===n[o].length&&"BlockMLayout"===n[o][0].__prototype?this.$=n[o][0]:this.$=p(n[o]);break;case 6:case 24:this.$=[n[o]];break;case 7:case 11:case 12:case 13:case 14:case 20:case 27:case 28:case 29:case 35:this.$=n[o];break;case 8:this.$=[...n[o-2],n[o]];break;case 9:this.$=[...n[o-2],...n[o]];break;case 10:this.$=S(n[o-2],n[o]);break;case 15:this.$=d(n[o]);break;case 16:case 31:this.$=p(n[o]);break;case 17:case 32:this.$=n[o-1];break;case 18:case 33:this.$=g(n[o-3],n[o-1],n[o]);break;case 19:case 34:this.$=null;break;case 21:case 36:this.$=x(n[o-1]);break;case 22:this.$=y(n[o-3],n[o-1]);break;case 25:this.$=[...n[o-1],n[o]];break;case 26:this.$=p([n[o]]);break;case 30:this.$=v(n[o]);break;case 37:this.$=y(n[o-2],n[o-1])}},table:[{3:1,4:2,6:3,7:[1,4],8:[1,5],10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[3]},{5:[1,17]},{5:[2,2]},{6:18,10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{9:19,14:r,21:n,28:a,30:20,31:21,32:22,33:23,34:24,35:25,36:27},{5:[2,5],13:o},e(c,[2,6]),e(c,[2,7]),e(c,[2,11]),e(c,[2,12]),e(c,[2,13]),e(c,[2,14]),e(c,l,{15:[1,31],23:u}),e(c,[2,16]),{11:33,14:[1,34],16:9,17:10,18:11,19:12,20:14,21:s,28:i},{10:35,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[2,1]},{5:[2,3]},{5:[2,4]},{5:[2,23],14:r,21:n,28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(h,[2,24]),e(h,[2,26]),e(h,[2,27]),e(h,[2,28]),e(h,[2,29]),e(h,[2,30],{23:[1,37]}),e(h,[2,31]),{14:r,21:n,28:a,31:38,32:22,33:23,34:24,35:25,36:27},{14:r,21:n,28:a,30:39,31:21,32:22,33:23,34:24,35:25,36:27},{11:40,12:41,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{14:[1,42]},{20:43,21:s},{13:[1,44]},{13:l,23:u},{13:o,22:[1,45]},e(h,[2,25]),{21:n,36:46},{14:r,21:n,28:a,30:47,31:21,32:22,33:23,34:24,35:25,36:27},{14:r,21:n,22:[1,48],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(c,[2,8]),e(c,[2,9]),e(c,[2,10]),e(c,[2,19],{24:49,25:50,26:[1,51]}),{10:52,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},e([5,13,22,26,27,29],[2,17]),e(h,[2,34],{37:53,38:54,26:[1,55]}),{14:r,21:n,28:a,29:[1,56],31:36,32:22,33:23,34:24,35:25,36:27},e([5,14,21,22,26,27,28,29],[2,32]),e(c,[2,18]),e(c,[2,20]),{10:57,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{13:o,29:[1,58]},e(h,[2,33]),e(h,[2,35]),{14:r,21:n,28:a,30:59,31:21,32:22,33:23,34:24,35:25,36:27},e(h,[2,37]),{13:o,27:[1,60]},e(c,[2,22]),{14:r,21:n,27:[1,61],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(c,[2,21]),e(h,[2,36])],defaultActions:{3:[2,2],17:[2,1],18:[2,3],19:[2,4]},parseError:function(e,t){if(!t.recoverable){var s=new Error(e);throw s.hash=t,s}this.trace(e)},parse:function(e){var t=this,s=[0],i=[null],r=[],n=this.table,a="",o=0,c=0,l=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(h.yy[m]=this.yy[m]);u.setInput(e,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;r.push(f);var d=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var p,g,y,v,x,S,b,k,T=function(){var e;return"number"!=typeof(e=u.lex()||1)&&(e=t.symbols_[e]||e),e},w={};;){if(g=s[s.length-1],this.defaultActions[g]?y=this.defaultActions[g]:(null==p&&(p=T()),y=n[g]&&n[g][p]),void 0===y||!y.length||!y[0]){var M="";for(x in k=[],n[g])this.terminals_[x]&&x>2&&k.push("'"+this.terminals_[x]+"'");M=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[p]||p)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(M,{text:u.match,token:this.terminals_[p]||p,line:u.yylineno,loc:f,expected:k})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+p);switch(y[0]){case 1:s.push(p),i.push(u.yytext),r.push(u.yylloc),s.push(y[1]),p=null,c=u.yyleng,a=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(S=this.productions_[y[1]][1],w.$=i[i.length-S],w._$={first_line:r[r.length-(S||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(S||1)].first_column,last_column:r[r.length-1].last_column},d&&(w._$.range=[r[r.length-(S||1)].range[0],r[r.length-1].range[1]]),void 0!==(v=this.performAction.apply(w,[a,c,o,h.yy,y[1],i,r].concat(l))))return v;S&&(s=s.slice(0,-1*S*2),i=i.slice(0,-1*S),r=r.slice(0,-1*S)),s.push(this.productions_[y[1]][0]),i.push(w.$),r.push(w._$),b=n[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}};const f=(e,t)=>({__prototype:"MesaureLayout",type:e,data:t}),d=e=>({__prototype:"SingleMLayout",measure:Number(e)}),p=e=>({__prototype:"BlockMLayout",seq:e}),g=(e,t,s)=>({__prototype:"VoltaMLayout",times:Number(e),body:t,alternates:s}),y=(e,t)=>({__prototype:"ABAMLayout",main:e,rest:t}),v=e=>({segment:!0,length:Number(e)}),x=e=>e.map(e=>"BlockMLayout"===e.__prototype?e.seq:[e]),S=(e,t)=>{if(e=Number(e),!((t=Number(t))>=e))throw new Error(`invalid measure range: ${e}..${t}`);return Array(t+1-e).fill(0).map((t,s)=>d(e+s))},b=(e,t={index:1})=>{const s=e=>[].concat(...e.map(e=>((e,t)=>{if(e.segment){const s=t.index;return t.index+=e.length,Array(e.length).fill(0).map((e,t)=>d(s+t))}return[b(e,t)]})(e,t)));switch(e.__prototype){case"BlockMLayout":e.seq=s(e.seq);break;case"VoltaMLayout":e.body=s(e.body),e.alternates=e.alternates&&e.alternates.map(s);break;case"ABAMLayout":e.main=b(e.main,t),e.rest=s(e.rest)}return e};var k={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,s=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var s,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],s=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in r)this[n]=r[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),n=0;nt[0].length)){if(t=s,i=n,this.options.backtrack_lexer){if(!1!==(e=this.test_match(s,r[n])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,r[i]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,s,i){switch(s){case 0:break;case 1:case 3:case 4:return t.yytext;case 2:return 14;case 5:return 5}},rules:[/^(?:\s+)/,/^(?:([*,\[\]<>{}]))/,/^(?:(([1-9])([0-9])*))/,/^(?:(([a-z])+):)/,/^(?:\.\.)/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function T(){this.yy={}}return m.lexer=k,T.prototype=m,m.Parser=T,new T}();ze.Parser;ze.Parser;var qe=function(){return ze.parse.apply(ze,arguments)};var Ge,We;!function(e){e[e.Default=0]="Default",e[e.Brace=1]="Brace",e[e.Bracket=2]="Bracket",e[e.Square=3]="Square"}(Ge||(Ge={})),function(e){e[e.Blank=0]="Blank",e[e.Dashed=1]="Dashed",e[e.Solid=2]="Solid"}(We||(We={}));const Ue=e=>({type:Ge.Default,staff:e}),Ye={"{":Ge.Brace,"}":Ge.Brace,"<":Ge.Bracket,">":Ge.Bracket,"[":Ge.Square,"]":Ge.Square},Xe={",":We.Blank,"-":We.Solid,".":We.Dashed},Ke=()=>btoa(Math.random().toString().substr(2)).replace(/=/g,"").split("").reverse().slice(0,6).join(""),Ze=(e,t)=>{let s=t;for(;s.length;){const t=s.shift(),i=Ye[t];if(i){if("}>]".includes(t)&&i===e.type)break;if("{<[".includes(t)){const t={type:i,level:Number.isFinite(e.level)?e.level+1:0};s=Ze(t,s),e.subs=e.subs||[],e.subs.push(t)}}else e.subs=e.subs||[],e.subs.push(Ue(t))}for(;e.type===Ge.Default&&e.subs&&1===e.subs.length;){const t=e.subs[0];e.type=t.type,e.subs=t.subs,e.staff=t.staff,e.level=t.level}for(;e.subs&&1===e.subs.length&&e.subs[0].type===Ge.Default;){const t=e.subs[0];e.subs=t.subs,e.staff=t.staff}return e.grand=e.type===Ge.Brace&&e.subs&&e.subs.every(e=>e.staff),s},Je=e=>e.staff?e.staff:e.subs?Je(e.subs[0]):void 0,Qe=e=>e.staff?e.staff:e.subs?Qe(e.subs[e.subs.length-1]):void 0,et=(e,t)=>{t[(e=>e.staff?e.staff:e.subs?`${Je(e)}-${Qe(e)}`:void 0)(e)]=e,e.subs&&e.subs.forEach(e=>et(e,t))};class StaffLayout{constructor(e){const t=new Set;e.forEach((e,s)=>{e.id=((e,t,s)=>{let i=s;for(i?e.has(i)&&(i+="_"+t.toString()):i=t.toString();e.has(i);)i+="_"+Ke();return i})(t,s+1,e.id),t.add(e.id)}),this.staffIds=e.map(e=>e.id),this.conjunctions=e.slice(0,e.length-1).map(e=>e.conjunction?Xe[e.conjunction]:We.Blank);const s=[].concat(...e.map(e=>[...e.leftBounds,e.id,...e.rightBounds]));this.group={type:Ge.Default},Ze(this.group,s);const i={};et(this.group,i),this.groups=Object.entries(i).map(([e,t])=>{let s=e.split("-");1===s.length&&(s=[s[0],s[0]]);return{group:t,range:s.map(e=>this.staffIds.indexOf(e)),key:e}}),this.maskCache=new Map}get stavesCount(){return this.staffIds?this.staffIds.length:null}get partGroups(){const e=this.groups.filter(e=>e.group.grand);return this.groups.filter(t=>{if(t.group.grand)return!0;if(t.range[0]===t.range[1]){const s=t.range[0];return!e.some(e=>e.range[0]<=s&&e.range[1]>=s)}return!1})}get standaloneGroups(){const e=[],t=s=>{s.grand?e.push(s.subs.map(e=>e.staff)):s.staff?e.push([s.staff]):s.subs&&s.subs.forEach(e=>t(e))};return t(this.group),e}conjunctionBetween(e,t){if(t<=e)return null;let s=We.Solid;for(let i=e;it&1<({ids:e.staffIds.slice(t.range[0],t.range[1]+1).filter(e=>s.includes(e)),...t})).filter(({ids:e})=>e.length).map(({ids:e,...t})=>({key:t.key,group:t.group,range:[s.indexOf(e[0]),s.indexOf(e[e.length-1])]})),r=s.slice(0,s.length-1).map((t,i)=>{const r=s[i+1];return e.conjunctionBetween(e.staffIds.indexOf(t),e.staffIds.indexOf(r))});return{staffIds:s,conjunctions:r,groups:i}}mask(e){return this.maskCache.get(e)||this.maskCache.set(e,StaffLayout.makeMaskLayout(this,e)),this.maskCache.get(e)}partialMaskCode(e,t=!1){const s=this.staffIds.map((t,s)=>s(e[this.staffIds[s]]=t,e),{}),i=e=>{if(e.staff)return[s[e.staff]?e.staff:null,null===s[e.staff]];const t=e.subs.map(e=>i(e)),r=t.map(e=>e[0]).filter(Boolean).join(","),n=t.some(([e,t])=>t),a=r?((e,t=!1)=>{if(e===Ge.Default)return e=>e;if(t)switch(e){case Ge.Brace:return e=>`{${e}`;case Ge.Bracket:return e=>`<${e}`;case Ge.Square:return e=>`[${e}`;default:return e=>e}switch(e){case Ge.Brace:return e=>`{${e}}`;case Ge.Bracket:return e=>`<${e}>`;case Ge.Square:return e=>`[${e}]`;default:return e=>e}})(e.type,n)(r):null;return[a,n]};let[r]=i(this.group);return r=r||"",t||(r=r.replace(/[_\w]+/g,"")),r}}var tt=function(){var e=function(e,t,s,i){for(s=s||{},i=e.length;i--;s[e[i]]=t);return s},t=[1,15],s=[1,16],i=[1,17],r=[1,11],n=[1,12],a=[1,13],o=[1,24],c=[1,25],l=[1,26],u=[5,11,12,13,15,16,17,21,22,23,24],h=[15,16,17,21,22,23,24],m=[11,12,13,15,16,17,21,22,23,24],f=[5,11,12,13,21,22,23,24],d={trace:function(){},yy:{},symbols_:{error:2,start_symbol:3,staff_layout:4,EOF:5,seq:6,seq_id:7,seq_br:8,seq_con:9,bound_left:10,"<":11,"[":12,"{":13,bound_right:14,">":15,"]":16,"}":17,bound_lefts:18,bound_rights:19,conjunction:20,"-":21,",":22,".":23,ID:24,seq_bl:25,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",11:"<",12:"[",13:"{",15:">",16:"]",17:"}",21:"-",22:",",23:".",24:"ID"},productions_:[0,[3,2],[4,1],[6,0],[6,1],[6,1],[6,1],[10,1],[10,1],[10,1],[14,1],[14,1],[14,1],[18,1],[18,2],[19,1],[19,2],[20,1],[20,1],[20,1],[7,1],[7,2],[7,2],[7,2],[7,2],[25,1],[25,2],[25,2],[25,2],[8,2],[8,2],[8,2],[9,1],[9,2],[9,2],[9,2],[9,2]],performAction:function(e,t,s,i,r,n,a){var o=n.length-1;switch(r){case 1:return n[o-1];case 2:n[o].next(),this.$=n[o].toJSON();break;case 3:this.$=new Seq;break;case 13:case 15:this.$=[n[o]];break;case 14:case 16:this.$=[...n[o-1],n[o]];break;case 20:this.$=new Seq,this.$.tip.i(n[o]);break;case 21:case 23:n[o-1].next(),n[o-1].tip.i(n[o]),this.$=n[o-1];break;case 22:case 24:n[o-1].tip.i(n[o]),this.$=n[o-1];break;case 25:this.$=new Seq,this.$.tip.bl(n[o]);break;case 26:case 27:n[o-1].next(),n[o-1].tip.bl(n[o]),this.$=n[o-1];break;case 28:n[o-1].tip.bl(n[o]),this.$=n[o-1];break;case 29:case 30:case 31:n[o-1].tip.br(n[o]),this.$=n[o-1];break;case 32:this.$=new Seq,this.$.tip.con(n[o]),this.$.next();break;case 33:case 34:case 35:case 36:n[o-1].tip.con(n[o]),n[o-1].next(),this.$=n[o-1]}},table:[{3:1,4:2,5:[2,3],6:3,7:4,8:5,9:6,10:14,11:t,12:s,13:i,18:10,20:9,21:r,22:n,23:a,24:[1,7],25:8},{1:[3]},{5:[1,18]},{5:[2,2]},{5:[2,4],10:14,11:t,12:s,13:i,14:23,15:o,16:c,17:l,18:22,19:20,20:21,21:r,22:n,23:a,24:[1,19]},{5:[2,5],10:14,11:t,12:s,13:i,18:29,20:28,21:r,22:n,23:a,24:[1,27]},{5:[2,6],10:14,11:t,12:s,13:i,14:23,15:o,16:c,17:l,18:33,19:31,20:32,21:r,22:n,23:a,24:[1,30]},e(u,[2,20]),{14:23,15:o,16:c,17:l,19:35,20:36,21:r,22:n,23:a,24:[1,34]},e(u,[2,32]),e(h,[2,25],{10:37,11:t,12:s,13:i}),e(u,[2,17]),e(u,[2,18]),e(u,[2,19]),e(m,[2,13]),e(m,[2,7]),e(m,[2,8]),e(m,[2,9]),{1:[2,1]},e(u,[2,21]),e(f,[2,29],{14:38,15:o,16:c,17:l}),e(u,[2,33]),e(h,[2,26],{10:37,11:t,12:s,13:i}),e(u,[2,15]),e(u,[2,10]),e(u,[2,11]),e(u,[2,12]),e(u,[2,23]),e(u,[2,35]),e(h,[2,27],{10:37,11:t,12:s,13:i}),e(u,[2,24]),e(f,[2,31],{14:38,15:o,16:c,17:l}),e(u,[2,36]),e(h,[2,28],{10:37,11:t,12:s,13:i}),e(u,[2,22]),e(f,[2,30],{14:38,15:o,16:c,17:l}),e(u,[2,34]),e(m,[2,14]),e(u,[2,16])],defaultActions:{3:[2,2],18:[2,1]},parseError:function(e,t){if(!t.recoverable){var s=new Error(e);throw s.hash=t,s}this.trace(e)},parse:function(e){var t=this,s=[0],i=[null],r=[],n=this.table,a="",o=0,c=0,l=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(h.yy[m]=this.yy[m]);u.setInput(e,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;r.push(f);var d=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var p,g,y,v,x,S,b,k,T=function(){var e;return"number"!=typeof(e=u.lex()||1)&&(e=t.symbols_[e]||e),e},w={};;){if(g=s[s.length-1],this.defaultActions[g]?y=this.defaultActions[g]:(null==p&&(p=T()),y=n[g]&&n[g][p]),void 0===y||!y.length||!y[0]){var M="";for(x in k=[],n[g])this.terminals_[x]&&x>2&&k.push("'"+this.terminals_[x]+"'");M=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[p]||p)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(M,{text:u.match,token:this.terminals_[p]||p,line:u.yylineno,loc:f,expected:k})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+p);switch(y[0]){case 1:s.push(p),i.push(u.yytext),r.push(u.yylloc),s.push(y[1]),p=null,c=u.yyleng,a=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(S=this.productions_[y[1]][1],w.$=i[i.length-S],w._$={first_line:r[r.length-(S||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(S||1)].first_column,last_column:r[r.length-1].last_column},d&&(w._$.range=[r[r.length-(S||1)].range[0],r[r.length-1].range[1]]),void 0!==(v=this.performAction.apply(w,[a,c,o,h.yy,y[1],i,r].concat(l))))return v;S&&(s=s.slice(0,-1*S*2),i=i.slice(0,-1*S),r=r.slice(0,-1*S)),s.push(this.productions_[y[1]][0]),i.push(w.$),r.push(w._$),b=n[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}};class Item{constructor(){this.id=null,this.leftBounds=[],this.rightBounds=[],this.conjunction=null}i(e){return this.id=e,this}bl(e){return this.leftBounds=e,this}br(e){return this.rightBounds=e,this}con(e){return this.conjunction=e,this}}class Seq{constructor(){this.body=[],this.tip=new Item}next(){return this.body.push(this.tip),this.tip=new Item,this}toJSON(){return this.body}}var p={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,s=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var s,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],s=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in r)this[n]=r[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),n=0;nt[0].length)){if(t=s,i=n,this.options.backtrack_lexer){if(!1!==(e=this.test_match(s,r[n])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,r[i]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,s,i){switch(s){case 0:break;case 1:return t.yytext;case 2:return 24;case 3:return 5}},rules:[/^(?:\s+)/,/^(?:([-,.\[\]<>{}]))/,/^(?:([a-zA-Z_0-9]+))/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3],inclusive:!0}}};function g(){this.yy={}}return d.lexer=p,g.prototype=d,d.Parser=g,new g}();tt.Parser;tt.Parser;var st=function(){return tt.parse.apply(tt,arguments)};const it=e=>{const t=st(e);return new StaffLayout(t)};class SemanticGraph extends SimpleClass{constructor(e){super(),super.assign(e)}static fromPoints(e=[]){const t=new SemanticGraph;return t.points=e,t}getLayer(e){return this.points.filter(t=>t.semantic===e)}getConfidentLayer(e,t){return this.points.filter(s=>s.semantic===e&&(!Number.isFinite(s.confidence)||s.confidence>=t))}getSystemPoints(){return this.points.filter(e=>N.includes(e.semantic))}getStaffPoints(){return this.points.filter(e=>!N.includes(e.semantic))}offset(e,t){this.points.forEach(s=>{s.x+=e,s.y+=t})}scale(e){this.points.forEach(t=>{t.x*=e,t.y*=e})}transform(e){this.points.forEach(t=>{let s=t.x*e[0][0]+t.y*e[1][0]+e[2][0];const i=t.x*e[0][1]+t.y*e[1][1]+e[2][1];if(t.extension){if(Number.isFinite(t.extension.y1)){const i=t.x*e[0][1]+t.extension.y1*e[1][1]+e[2][1],r=t.x*e[0][1]+t.extension.y2*e[1][1]+e[2][1];s=t.x*e[0][0]+.5*(t.extension.y1+t.extension.y2)*e[1][0]+e[2][0],t.extension.y1=i,t.extension.y2=r}if(Number.isFinite(t.extension.width)){const s=Math.sqrt(e[0][0]*e[1][1]-e[0][1]*e[1][0]);t.extension.width*=s,t.extension.height*=s}}t.x=s,t.y=i})}}SemanticGraph.className="SemanticGraph";const rt=[w.ClefG,w.ClefF,w.ClefC,w.TimesigC44,w.TimesigC22,w.TimesigZero,w.TimesigOne,w.TimesigTwo,w.TimesigThree,w.TimesigFour,w.TimesigFive,w.TimesigSix,w.TimesigSeven,w.TimesigEight,w.TimesigNine,w.OctaveShift8va,w.OctaveShift8vb,w.OctaveShift0,w.Zero,w.One,w.Two,w.Three,w.Four,w.Five,w.Six,w.Seven,w.Eight,w.Nine,w.AccNatural,w.AccSharp,w.AccDoublesharp,w.AccFlat,w.AccFlatflat,w.NoteheadS0,w.NoteheadS1,w.NoteheadS2,w.NoteheadS1stemU,w.NoteheadS1stemD,w.NoteheadS2stemU,w.NoteheadS2stemD,w.Rest0,w.Rest1,w.Rest2,w.Rest3,w.Rest4,w.Rest5,w.Rest6,w.Rest0W,w.RestM1,w.SlurBegin,w.SlurEnd,w.Dot,w.f,w.p,w.m,w.n,w.r,w.s,w.z,w.ScriptFermata,w.ScriptShortFermata,w.ScriptSforzato,w.ScriptStaccato,w.ScriptStaccatissimo,w.ScriptTurn,w.ScriptTrill,w.ScriptSegno,w.ScriptCoda,w.ScriptArpeggio,w.ScriptPrall,w.ScriptMordent,w.ScriptMarcato,w.ScriptTenuto,w.ScriptPortato,w.PedalStar,w.PedalPed,w.GraceNotehead,w.BeamLeft,w.BeamRight,w.BeamContinue,w.CrescendoBegin,w.CrescendoEnd,w.DecrescendoBegin,w.DecrescendoEnd,w.TremoloLeft,w.TremoloRight,w.TremoloMiddle],nt=[w.AccNatural,w.AccSharp,w.AccDoublesharp,w.AccFlat,w.AccFlatflat,w.NoteheadS0,w.NoteheadS1,w.NoteheadS2,w.NoteheadS1stemU,w.NoteheadS1stemD,w.NoteheadS2stemU,w.NoteheadS2stemD],at=[w.SignLined,w.SignInterval],ot=[w.NoteheadS1,w.NoteheadS2],ct={AccSharp:K.KeySharp,AccNatural:K.KeyNatural,AccFlat:K.KeyFlat},lt={[w.NoteheadS1]:{up:w.NoteheadS1stemU,down:w.NoteheadS1stemD},[w.NoteheadS2]:{up:w.NoteheadS2stemU,down:w.NoteheadS2stemD}},ut=[w.Rest0,w.Rest1,w.Rest2,w.Rest3,w.Rest4,w.Rest5,w.Rest6],ht={[K.BeamLeft]:"Open",[K.BeamRight]:"Close",[K.BeamContinue]:"Continue"},mt={Alter1:De.Alternation1,Alter2:De.Alternation2},ft=(e,t)=>{switch(e.length){case 0:return;case 1:return e[0];case 2:return"u"===t?Math.min(...e):Math.max(...e);default:{const s=e.reduce((e,t)=>e+t,0)/e.length;return e.sort((e,t)=>Math.abs(e-s)-Math.abs(t-s)),ft(e.slice(0,e.length-1),t)}}};class Measure extends SimpleClass{constructor(e){super(),super.assign(e),this.tokens=this.tokens||[],this.antiTokens=this.antiTokens||[],this.barTypes=this.barTypes||{}}get right(){return this.left+this.width}get noteheads(){return this.tokens.filter(e=>e.isNotehead).sort((e,t)=>e.x-t.x)}get chordRects(){const e=this.noteheads.filter(e=>[K.NoteheadS0,K.NoteheadS1stemU,K.NoteheadS2stemU,K.NoteheadS1stemD,K.NoteheadS2stemD].includes(e.type));let t=0;const s=e.reduce((e,s)=>{const i=s.tip?`${s.tip.x}|${s.tip.y}`:`nul${t}`;let r=`${s.type}|${i}`;return!s.tip&&e[r]&&(e[r].some(e=>Math.abs(e.x-s.x){const t=Math.min(...e.map(e=>e.x)),s=Math.max(...e.map(e=>e.x)),i=Math.min(...e.map(e=>e.y)),r=Math.max(...e.map(e=>e.y)),n=e[0],a=n&&n.tip?n.tip.x:t;let o=t,c=s-t,l=null;switch(n.type){case K.NoteheadS0:o-=M.NoteheadS0/2,c+=M.NoteheadS0;break;case K.NoteheadS1stemU:case K.NoteheadS2stemU:l="u",o-=M.NoteheadS1,c+=M.NoteheadS1;break;case K.NoteheadS1stemD:case K.NoteheadS2stemD:l="d",c+=M.NoteheadS1}return{x:o,width:c,stemX:a,stemDirection:l,top:i,bottom:r,tip:n.tip}})}get timeWarped(){return this.tokens&&this.tokens.some(e=>e.timeWarped)}get additionalLines(){const e=this.getChords();return[...e.filter(e=>e.ys.some(e=>e<=-3)).map(e=>({left:e.left,right:e.right,n:Math.ceil(Math.min(...e.ys))+2})),...e.filter(e=>e.ys.some(e=>e>=3)).map(e=>({left:e.left,right:e.right,n:Math.floor(Math.max(...e.ys))-2}))].map(e=>({left:e.left-.28,right:e.right+.28,n:e.n}))}getChords(){const e=this.tokens.filter(e=>ue.includes(e.type)),t=this.tokens.filter(e=>pe.includes(e.type)),s=this.tokens.filter(e=>ye.includes(e.type)),i=this.chordRects.map(e=>{const t=this.noteheads.filter(t=>t.direction===e.stemDirection&&t.left>=e.x&&t.right<=e.x+e.width+.2&&t.y>=e.top&&t.y<=e.bottom);t.sort((e,t)=>t.y-e.y);const s=t.map(e=>e.y),i=t.map(e=>e.id),r=t.reduce((e,t)=>Math.max(e,t.division),0);return{rect:e,left:e.x,right:e.x+e.width,pivotX:(n=t,ft(n.map(e=>Number.isFinite(e.pivotX)?e.pivotX:e.x),n[0].direction)),ys:s,tip:e.tip,noteIds:i,division:r,dots:null,rest:!1,stemDirection:e.stemDirection,beam:null};var n}).sort((e,t)=>t.left-e.left),r=new Set,n=i.map(({rect:i,...n})=>{if(n.division>=1){const t=[i.bottom,i.top];switch(i.stemDirection){case"u":t[0]=i.tip?i.tip.y-.2:i.top-6-.5;break;case"d":t[1]=i.tip?i.tip.y+.2:i.bottom+6+.5}const a=e.filter(e=>!r.has(e.id)&&e.x>i.stemX-.2&&e.xt[0]&&e.yMath.max(e,t.division),n.division),a.forEach(e=>r.add(e.id)),n.division>=3){const e=i.tip&&s.find(e=>Math.abs(i.tip.x-e.x)<.3&&Math.abs(i.tip.y-e.y)<.7);e&&(n.beam=ht[e.type])}}const a=t.filter(e=>!r.has(e.id)&&e.x>i.x+i.width-.2&&e.xi.top-1&&e.y<=i.bottom+.5);return n.dots=a.reduce((e,t)=>Math.max(e,t.dots),0),a.forEach(e=>r.add(e.id)),n});return n.reverse(),n}getRests(){const e=this.tokens.filter(e=>le.includes(e.type)),t=this.tokens.filter(e=>pe.includes(e.type));return e.map(e=>{const s=t.filter(t=>t.x>e.x+.5&&t.xe.y-1&&t.yMath.max(e,t.dots),0);return{left:e.x-.75,right:e.x+.75,pivotX:e.x,rest:!0,ys:[e.y],noteIds:[e.id],dots:s,division:e.division,stemDirection:null}})}getEvents(){return[...this.getChords(),...this.getRests()].sort((e,t)=>e.left-t.left)}getContexts(e={}){return this.tokens.filter(e=>e.isContexted).sort((e,t)=>e.x-t.x).map(t=>new ContextedTerm({x:t.x,y:t.y,tokenType:t.type,...e}))}assignAccessoriesOnEvents(e){e.forEach(e=>e.accessories=e.accessories||[]);this.tokens.filter(e=>xe.includes(e.type)).forEach(t=>{const s=e.filter(e=>t.x>e.left-1&&t.x0){let e=s[0];s.length>1&&(e=s.map(e=>({event:e,d:Math.min(...e.ys.map(e=>Math.abs(e-t.y)))})).sort(({d:e},{d:t})=>e-t).map(({event:e})=>e)[0]);let i=t.y>Math.max(...e.ys)?Me.Down:Me.Up;Se.includes(t.type)&&(i=null),e.accessories.push({type:t.type,id:t.id,direction:i,x:t.x-e.left})}});const t=[...e];t.sort((e,t)=>e.left-t.left);this.tokens.filter(e=>e.type===K.ScriptArpeggio).forEach(e=>{const s=t.find(t=>e.xtt>e.y));s&&s.accessories.push({type:K.ScriptArpeggio,id:e.id,x:e.x-s.left})});this.tokens.filter(e=>e.type===K.GraceNotehead).forEach(t=>{const s=e.find(e=>t.x>e.left&&t.xMath.abs(t.y-e)<.4));s&&(s.grace=Ee.Grace)});const s=this.tokens.filter(e=>e.type===K.TremoloLeft),i=this.tokens.filter(e=>e.type===K.TremoloRight),r=this.tokens.filter(e=>e.type===K.TremoloMiddle),n=e.filter(e=>!e.rest).map(e=>{const t=[...e.ys];e.tip?t.push(e.tip.y):(t.push(e.ys[0]+2),t.push(e.ys[e.ys.length-1]-2));const s=e.tip?e.tip.x:e.left,i=e.tip?e.tip.x:e.right;return{event:e,top:Math.min(...t),bottom:Math.max(...t),stemL:s,stemR:i}});r.forEach(e=>{const t=n.find(t=>!!t.event.tip&&(e.y>t.top&&e.y{const t=n.find(t=>e.y>t.top&&e.yt.stemR&&e.x{const t=n.find(t=>e.y>t.top&&e.yt.stemL-1.6);t&&(t.event.tremolo=t.event.tremolo||2,++t.event.tremolo,t.event.tremoloLink=Ie.Catcher)})}assignFeaturesOnEvents(e,t){const s=t.filter(e=>e.x>this.left&&e.xut.includes(e.semantic)),r=s.filter(e=>e.semantic===w.Flag3),n=s.filter(e=>e.semantic===w.Dot),a=s.filter(e=>e.semantic===w.BeamLeft),o=s.filter(e=>e.semantic===w.BeamContinue),c=s.filter(e=>e.semantic===w.BeamRight),l=s.filter(e=>e.semantic===w.GraceNotehead),u=s.filter(e=>e.semantic===w.TremoloRight),h=s.filter(e=>e.semantic===w.vline_Stem),m=s.filter(e=>e.semantic===w.NoteheadS0),f=s.filter(e=>e.semantic===w.NoteheadS1),d=s.filter(e=>e.semantic===w.NoteheadS2);e.forEach(e=>{const t=e.tip?e.tip.x:(e.left+e.right)/2,s=e.tip?Math.min(e.tip.y,e.ys[e.ys.length-1]):e.ys[e.ys.length-1],p=e.tip?Math.max(e.tip.y,e.ys[0]):e.ys[0],g=e.tip?e.tip.x:e.left,y=[0,0,0,0,0,0,0];if(e.rest){i.filter(s=>P(s,{x:t,y:e.ys[0]})<.5).forEach(e=>{const t=ut.indexOf(e.semantic);y[t]=Math.max(y[t],e.confidence)})}else{const i=[m,f,d].map(t=>t.filter(t=>t.x>e.left&&t.xs-.25&&t.yMath.max(0,...e.map(e=>e.confidence))),n=r.filter(e=>e.y>s-.2&&e.yt.confidence-e.confidence),y[0]=i[0],y[1]=i[1],y[2]=i[2],Array(y.length-3).fill(0).forEach((e,t)=>y[3+t]=n[t]?n[t].confidence:0)}const v=n.filter(s=>s.x>t&&s.xv.some(t=>e.x>t.x&&Math.abs(e.y-t.y)<.2)),S=[Math.max(0,...v.map(e=>e.confidence)),Math.max(0,...x.map(e=>e.confidence))],b=[a,o,c].map(e=>e.filter(e=>Math.abs(e.x-t)<.2&&e.y>s-.2&&e.yMath.max(0,...e.map(e=>e.confidence))),k=h.filter(s=>P({x:t,y:e.ys[0]},{x:s.x,y:s.extension.y2})<.5),T=h.filter(s=>P({x:t,y:e.ys[e.ys.length-1]},{x:s.x,y:s.extension.y1})<.5),w=[Math.max(0,...k.map(e=>e.confidence)),Math.max(0,...T.map(e=>e.confidence))],M=l.filter(s=>Math.abs(s.x-t)<.6&&e.ys.some(e=>Math.abs(s.y-e)<.4)),E=Math.max(0,...M.map(e=>e.confidence)),N=0===e.division?u.filter(t=>t.x>e.left-2&&t.xe.y>s-.04&&e.yg-2&&e.xe.confidence));e.feature={divisions:y,dots:S,beams:b,stemDirections:w,grace:E,tremoloCatcher:I}})}}Measure.className="Measure",Measure.blackKeys=["tokens","antiTokens"];class Staff extends SimpleClass{constructor({measureCount:e=null,measureBars:t=null,...s}={}){if(super(),super.assign(s),this.height=this.height||10,this.staffY=this.staffY||5,t){let e=0;this.measures=t.map(t=>{const s=new Measure({left:e,width:t-e,height:this.height});return e=t,s})}else this.measures=e?Array(e).fill(null).map(()=>new Measure):[]}get noteRange(){const e=[].concat(...this.measures.map(e=>e.noteheads)).map(e=>e.y);return{top:Math.min(-2,...e),bottom:Math.max(2,...e)}}get additionalLines(){return[].concat(...this.measures.map(e=>e.additionalLines))}rearrangeMeasures(e){if(!e.length)return void console.warn("rearrangeMeasures error, measureBars are empty.");const t=this.measures?.map(e=>e.tokens).flat(1)||[];let s=0;this.measures=e.map(e=>{const t=new Measure({left:s,width:e-s,height:this.height});return s=e,t}),this.reassignTokens(t)}reassignTokens(e=null){e||(e=[].concat(...this.measures.map(e=>e.tokens))),this.measures.forEach(e=>e.tokens=[]),e.forEach(e=>{for(const t of this.measures)if(e.xe.semantic===w.TempoNotehead).forEach(e=>{const t=i.findIndex(t=>/^Notehead/.test(t.semantic)&&P(e,t)<.3);t>=0&&i.splice(t,1)});const r=e=>t.displacementSemantics?.[e]?this.semantics.find(t=>t.id===e):null;i.filter(e=>rt.includes(e.semantic)).forEach(e=>this.appendPoint(e,{points:i}));const n=i.filter(e=>e.semantic===w.vline_Stem).filter(e=>e.extension.y2-e.extension.y1>1.5).map(e=>({x:e.x,y1:e.extension.y1,y2:e.extension.y2,direction:null})),a=i.filter(e=>ot.includes(e.semantic)&&e.y>this.semanticTop&&e.y{if((s?1:0)^(e.x{const t=a.filter(t=>Math.abs(t.x-e.x)-M[t.semantic]/2<.32&&Math.abs(t.x-e.x)-M[t.semantic]/2>-.44&&t.y>e.y1-.5&&t.ye.x&&t.y>e.y2)&&!(t.xe.y-t.y);const s=Math.min(...t.map(t=>t.y-e.y1)),n=Math.min(...t.map(t=>e.y2-t.y));if(Math.min(s,n)>.5)return;const a=s!o.has(e.id)).forEach(e=>{const a=n.filter(t=>Math.abs(t.x-e.x)<2&&e.y>t.y1&&e.yMath.abs(t.x-e.x)-Math.abs(s.x-e.x)),o=a[0];if(o){const t="d"===o.direction,s=t?lt[e.semantic].down:lt[e.semantic].up;this.appendPoint({id:e.id,semantic:s,x:o.x+c(e,o,t),y:e.y,pivotX:e.x,confidence:e.confidence},{tip:{x:o.x,y:t?o.y2:o.y1},antiPoint:r(e.id),points:i})}else s.debug("isolated notehead:",t.index,this.index,e)});const l=i.filter(e=>e.semantic===w.Flag3);l.sort((e,t)=>e.x-t.x),this.appendFlags(l,n);const u=i.filter(e=>e.semantic===w.Dot).map(e=>{const t=A(e.y,.5);return{x:e.x,y:t}}).reduce((e,t)=>(e[t.y]=e[t.y]||[],e[t.y].push(t),e),{});Object.entries(u).forEach(([e,t])=>{const s=Number(e);if(t.length>1){t.sort((e,t)=>e.x-t.x);for(let e=0;ee.x>n.x&&e.x-n.x<1.2)&&this.appendPoint({id:n.id,x:n.x,y:s,confidence:n.confidence},{type:K.DotDot,antiPoint:r(n.id),points:i})}}});const h=i.filter(e=>e.semantic===w.KeyAcc);i.filter(e=>ct[e.semantic]).forEach(e=>{h.some(t=>Math.abs(e.x-t.x)<.5&&Math.abs(e.y-t.y)<1)&&this.appendPoint({id:e.id,semantic:e.semantic,x:e.x,y:e.y,confidence:e.confidence},{type:ct[e.semantic],points:i})});i.filter(e=>e.semantic===w.OctaveShift8).forEach(e=>{const t=e.y<0?K.OctaveShift8va:K.OctaveShift8vb;this.appendPoint({id:e.id,x:e.x,y:e.y,confidence:e.confidence},{type:t,points:i})});const m=this.semantics.filter(e=>[w.VoltaLeft,w.VoltaRight].includes(e.semantic));m.sort((e,t)=>e.x-t.x);const f=m.reduce((e,t)=>{const s=e[t.semantic],i=Array.from(Object.keys(s)).map(Number).find(e=>t.x{if(s.length>1){const i=s.reduce((e,t)=>e+t.confidence,0);s[0].y*s[1].y<0&&i>=2*e&&this.appendPoint(s[0],{type:K[t]})}})}appendPoint(e,{type:t,points:s=null,antiPoint:i,...r}={}){const n=e.x,a=this.measures.find(e=>nat.includes(t.semantic)&&Math.abs(t.y-e.y)<.2&&Math.abs(t.x-e.x)<1.2);t.some(e=>e.semantic===w.SignLined)?o=!0:t.some(e=>e.semantic===w.SignInterval)&&(c=!0)}t=t||K[e.semantic];const l=Te[t];let u=ke[t];(o||c)&&(u=Math.max(u,1));let h=e.y;Number.isFinite(l)?h=l:u&&(h=c?A(h+.5,u)-.5:A(h,u));const m=a.tokens.find(e=>e.type===t&&Math.abs(e.x-n)<.1&&Math.abs(e.y-h)<.1);m?Number.isFinite(m.confidence)&&m.confidence3||(a.tokens.push(new Token({id:e.id,type:t,x:n,y:h,pivotX:e.pivotX,confidence:e.confidence,...r})),i&&a.antiTokens.push(new Token({id:i.id,type:t,x:n,y:i.y,confidence:i.confidence})))}appendFlags(e,t){t.map(t=>({...t,flags:e.filter(e=>Math.abs(e.x-t.x)<.3&&e.y>t.y1-.5&&e.ye.flags.length).forEach(e=>{const t=e.flags.reduce((e,t)=>e&&e.confidence>t.confidence?e:t,null),s="d"===e.direction,i=s?Math.min(e.y2,e.y1+6):Math.max(e.y1,e.y2-6),r=e.flags.map(e=>({tip:(i-e.y)*(s?1:-1),confidence:e.confidence})).filter(e=>e.tip<2||e.confidence>.7*t.confidence).length,n=ue[r-1];n&&this.appendPoint({id:e.flags[0].id,x:e.x,y:i,confidence:Math.min(...e.flags.map(e=>e.confidence))},{type:n})})}clearTokens(){this.measures.forEach(e=>e.tokens=[]),this.semantics=[]}clearPredictedTokens(){this.measures.forEach(e=>e.tokens=e.tokens.filter(e=>!e.isPredicted))}}Staff.className="Staff",Staff.blackKeys=["index","semanticTop","semanticBttom"];class System extends SimpleClass{constructor({stavesCount:e,...t}){if(super(),super.assign(t),!this.measureBars){const e=5,t=(this.width-e)/this.measureCount;this.measureBars=Array(this.measureCount).fill(0).map((s,i)=>e+t*(i+1))}!t.staves&&e&&(this.staves=Array(e).fill(null).map(()=>new Staff({measureBars:this.measureBars}))),this.arrangePosition(),this.measureCount=this.measureCount||this.measureBars.length,this.sidBlackList=this.sidBlackList||[],this.sidWhiteList=this.sidWhiteList||[]}get noteRange(){if(!this.staves.length)return null;const e=this.staves[0],t=this.staves[this.staves.length-1];return{top:e.top+e.staffY+e.noteRange.top,bottom:t.top+t.staffY+t.noteRange.bottom}}get staffPositions(){return this.staves.map(e=>({y:e.top+e.staffY,radius:2}))}get staffMask(){return this.staffMaskChanged?this.staffMaskChanged:this.prev&&this.staves.length===this.prev.staves.length?this.prev.staffMask:2**this.staves.length-1}get staffTop(){const e=this.staffPositions;return e.length?e[0].y-e[0].radius:0}get staffBottom(){const e=this.staffPositions;return e.length?e[e.length-1].y+e[e.length-1].radius:0}arrangePosition(){let e=0;for(const t of this.staves){if(Number.isFinite(t.top))break;t.top=e,e+=t.height}}tidyMeasureBars(){this.measureBars=this.measureBars.filter(e=>e>1),this.measureBars.sort((e,t)=>e-t);const e=this.width-this.measureBars[this.measureBars.length-1];e>12?this.measureBars.push(this.width):e<2&&(this.measureBars[this.measureBars.length-1]=this.width),this.measureBars=this.measureBars.filter((e,t)=>t<1||e-this.measureBars[t-1]>4)}rearrangeMeasures(){this.measureCount=this.measureBars.length,this.staves.forEach(e=>e.rearrangeMeasures(this.measureBars))}get height(){return this.staves.reduce((e,t)=>e+t.height,0)}get connectionLine(){const e=this.staves[0],t=this.staves[this.staves.length-1];return e&&{top:e.top+e.staffY-2,bottom:t.top+t.staffY+2}}get middleY(){if(!this.staves.length)return 0;return this.staves.reduce((e,t)=>e+t.top+t.staffY,0)/this.staves.length}get timeSignatureOnHead(){return this.staves.some(e=>e.measures[0]?.tokens.some(e=>ee.includes(e.type)))}getStaffArray(e){let t=0;return Array(e).fill(null).map((e,s)=>{const i=this.staffMask&1<0?this.measureBars[e-1]:0,s=this.measureBars[e];return[...(this.tokens??[]).filter(e=>e.x>=t&&e.xTempoTerm.fromNumeralText(e.text)).filter(Boolean)]}getEvents(e){if(console.assert(Number.isInteger(this.headMeasureIndex),"invalid headMeasureIndex:",this.headMeasureIndex),!this.measureBars?.length&&this.staves.every(e=>!e.measures?.length))return{staffMask:this.staffMask,columns:[]};const t=this.getStaffArray(e).map(e=>e?e.measures.map(t=>{const s=t.getEvents();return t.assignAccessoriesOnEvents(s),t.assignFeaturesOnEvents(s,e.semantics),{events:s.map(t=>new EventTerm({staff:e.index,system:this.index,...t,rest:t.rest?"r":null})),contexts:t.getContexts({staff:e.index}),voltaBegin:t.tokens.some(e=>e.type===K.VoltaLeft),voltaEnd:t.tokens.some(e=>e.type===K.VoltaRight),alternative:t.alternative,barTypes:t.barTypes}}):Array(this.measureCount).fill(null).map(()=>({events:[],contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}})));for(let e=0;et[e]?.contexts?.filter(e=>[Oe.TimeSignatureC,Oe.TimeSignatureN].includes(e.type))).find(e=>e?.length);s&&t.forEach(t=>{!t[e]||t[e].contexts.length||t[e].events.length||t[e].contexts.push(...s)})}const s=Array(this.measureCount).fill(null).map((e,s)=>({measureIndex:this.headMeasureIndex+s,rows:t.map(e=>e[s]),marks:this.getMarksInMeasure(s),duration:0,voltaBegin:t.some(e=>e[s]?.voltaBegin),voltaEnd:t.some(e=>e[s]?.voltaEnd),alternative:t.some(e=>e[s]?.alternative),barTypes:t.reduce((e,t)=>({...e,...t[s]?.barTypes}),{})}));s.forEach(e=>{[].concat(...e.rows.filter(Boolean).map(e=>e.events)).forEach((e,t)=>e.id=t+1)});const i=s[s.length-1];return i&&(i.break=!0),{staffMask:this.staffMask,columns:s}}getEventsFunctional(e,t,s=[],{useXMap:i=!1}={}){const r=this.getStaffArray(e).map((e,s)=>e?e.measures.map((e,i)=>{const r=t(s,i);return r&&{events:r.map(e=>new EventTerm({system:this.index,...e,rest:e.rest?"r":null})),contexts:e.getContexts({staff:s}),voltaBegin:e.tokens.some(e=>e.type===K.VoltaLeft),voltaEnd:e.tokens.some(e=>e.type===K.VoltaRight),alternative:e.alternative,barTypes:e.barTypes}}):Array(this.measureCount).fill(null).map(()=>({events:[],contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}}))),n=Array(this.measureCount).fill(null).map((e,t)=>{const s=r.map(e=>e[t]);if(s.some(e=>!e))return null;let n=null;if(i){const e=[].concat(...s.map(e=>e.events)).reduce((e,t)=>(Number.isFinite(t.tickGroup)&&(e[t.tickGroup]=e[t.tickGroup]||[]),e[t.tickGroup].push(t),e),{});n=Object.values(e).reduce((e,t)=>{const s=Math.min(...t.map(e=>(e.left+e.right)/2));return e.set(s,t),e},new Map)}return{measureIndex:this.headMeasureIndex+t,rows:s,marks:this.getMarksInMeasure(t),duration:0,xMap:n,voltaBegin:s.some(e=>e.voltaBegin),voltaEnd:s.some(e=>e.voltaEnd),alternative:s.some(e=>e.alternative),barTypes:s.reduce((e,t)=>({...e,...t.barTypes}),{})}});return s.forEach(e=>n.forEach(e)),{staffMask:this.staffMask,columns:n}}getContexts(e){const t=this.getStaffArray(e).map(e=>e?e.measures.map(e=>({events:null,contexts:e.getContexts(),voltaBegin:e.tokens.some(e=>e.type===K.VoltaLeft),voltaEnd:e.tokens.some(e=>e.type===K.VoltaRight),alternative:t.some(e=>e.alternative),barTypes:e.barTypes})):Array(this.measureCount).fill(null).map(()=>({events:null,contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}})));for(let e=0;et[e]?.contexts.filter(e=>[Oe.TimeSignatureC,Oe.TimeSignatureN].includes(e.type))).find(e=>e?.length);s&&t.forEach(t=>{t[e].contexts.length||t[e].contexts.push(...s)})}const s=Array(this.measureCount).fill(null).map((e,s)=>({measureIndex:this.headMeasureIndex+s,rows:t.map(e=>e[s]),marks:[],duration:0,voltaBegin:t.some(e=>e[s].voltaBegin),voltaEnd:t.some(e=>e[s].voltaEnd),alternative:t.some(e=>e.alternative),barTypes:t.reduce((e,t)=>({...e,...t[s].barTypes}),{})}));return{staffMask:this.staffMask,columns:s}}assignSemantics(e,t){const s=this.staves[e];console.assert(s,"staff is null:",e,this.staves);const i=s.top+s.staffY;t.getSystemPoints().forEach(e=>{const t={...e};t.y+=i,t.extension&&(t.extension={...t.extension},Number.isFinite(t.extension.y1)&&(t.extension.y1+=i,t.extension.y2+=i)),this.semantics.push(t)})}assemble(e,t=new DummyLogger){if(this.measureBars=[],!this.semantics)return;const s=SemanticGraph.fromPoints(this.semantics).getConfidentLayer(w.vline_BarMeasure,e);s.sort((e,t)=>e.x-t.x);const i=this.staffTop,r=this.staffBottom;let n=0;const a=s.reduce((e,t)=>{const s=Number.isFinite(t.confidence)?Math.tanh(t.confidence):1,a=t.x-n>.4?t.x:n;n=t.x;let o=e[a]||0;return o+=(Math.min(t.extension.y2,r)-Math.max(t.extension.y1,i))*s,t.x!==a&&delete e[a],e[t.x]=o,e},{}),o=Object.entries(a).filter(([e,t])=>t>3*this.staves.length).map(([e])=>Number(e));if(this.sidWhiteList.length)for(const e of s)this.sidWhiteList.includes(e.id)&&!o.some(t=>Math.abs(t-e.x)<=2)&&o.push(e.x);o.sort((e,t)=>e-t),o.forEach((e,t)=>{(t<=0||e-o[t-1]>2)&&this.measureBars.push(e)}),this.measureBars.length||this.measureBars.push(this.width),this.tidyMeasureBars(),this.rearrangeMeasures();this.semantics.filter(e=>[w.vline_BarTerminal,w.vline_BarSegment].includes(e.semantic)).forEach(e=>{const t=this.staves[0].measures.find(t=>e.x>t.right-2&&e.x{for(;!(l&1<O(this.index,i,e)),s.clearPredictedTokens(),s.assemble(e,this,t))})}qualifiedSemantics(e,t=1){return e.filter(e=>this.sidWhiteList.includes(e.id)||!this.sidBlackList.includes(e.id)&&(e.confidence>=t||!Number.isFinite(e.confidence))).map(e=>this.displacementSemantics&&this.displacementSemantics[e.id]?{...e,...this.displacementSemantics[e.id]}:e)}clearTokens(){this.staves.forEach(e=>e.clearTokens()),this.semantics=[]}newPoint(e,t,s=1){const i=this.staves[e];console.assert(i,"staff index out of bound:",e,this.staves.length);const{semantic:r,x:n,y:a,confidence:o=0,extension:c=null}=t,l={semantic:r,x:n,y:a,confidence:o,extension:c};return l.extension||delete l.extension,O(this.index,e,l),i.semantics.push(l),i.clearPredictedTokens(),i.assemble(s,this),l}appendToken(e){switch(this.tokens.push(e),e.textType){case De.TempoNumeral:{const t=this.staves[0];if(t){const s=t.top+t.staffY;t.measures.forEach(t=>{t.tokens=t.tokens.filter(t=>!ae.includes(t.type)||Math.abs(t.x-e.x)>e.width/2||Math.abs(s+t.y-e.y)>e.fontSize/2)})}}break;case De.Alternation1:case De.Alternation2:this.staves[0].measures.forEach(t=>{const s=Math.min(t.left+t.width,e.x+e.width/2)-Math.max(t.left,e.x-e.width/2);t.alternative=t.alternative||s/t.width>.5})}}}System.className="System",System.blackKeys=["index","pageIndex","prev","next","headMeasureIndex","tokens","indent"];class Page extends SimpleClass{constructor(e){super(),super.assign(e),this.systems=this.systems||[],this.source&&(this.source.matrix=this.source.matrix||[1,0,0,1,0,0])}get sidBlackList(){const e=[].concat(...this.systems.map(e=>e.sidBlackList));return new Set(e)}get sidWhiteList(){const e=[].concat(...this.systems.map(e=>e.sidWhiteList));return new Set(e)}clearTokens(){this.semantics=null,this.tokens=null,this.systems.forEach(e=>e.tokens=null)}assignTexts(e,[t,s]){const i=this.source&&this.source.interval?this.source.interval*(t/this.source.dimensions.height):t/this.height;this.semantics=e.map(e=>{const r={x:(e.cx-s/2)/i,y:(e.cy-t/2)/i},n=this.source&&this.source.matrix?(a=r,{x:(o=this.source.matrix)[0]*a.x+o[2]*a.y+o[4],y:o[1]*a.x+o[3]*a.y+o[5]}):r;var a,o;return{confidence:e.score,x:n.x+this.width/2,y:n.y+this.height/2,semantic:w.rect_Text,extension:{text:e.text,type:e.type,width:e.width/i,height:e.height/i,theta:e.theta,textFeature:e.feature_dict}}})}assemble({textAnnotations:e=null}={},t=new DummyLogger){if(this.tokens=[],this.systems.forEach(e=>e.tokens=[]),this.systems.length){const e=this.systems.map(e=>e.left),t=e[Math.floor((e.length-1)/2)];this.systems.forEach(e=>e.indent=e.left>t+2)}if(this.semantics){const t=this.source?this.source.name:this.index.toString();this.semantics.forEach(s=>{B(t,s);const i={id:s.id,type:K.Text,confidence:s.confidence,textType:mt[s.extension.type]||s.extension.type,text:e&&e[s.id]||s.extension.text,textFeasure:s.extension.textFeature,width:s.extension.width,fontSize:s.extension.height};if(s.semantic===w.rect_Text)switch(i.textType){case De.Title:case De.Author:case De.PageMargin:case De.Other:this.tokens.push(new TextToken({x:s.x,y:s.y,...i}));break;case De.TempoNumeral:case De.Chord:case De.MeasureNumber:case De.Instrument:case De.Alternation1:case De.Alternation2:{const e=this.systems.find(e=>e.top+e.staffTop>s.y);e&&e.appendToken(new TextToken({x:s.x-e.left,y:s.y-e.top,...i}))}break;case De.TextualMark:case De.Times:{const e=[...this.systems].reverse().find(e=>e.topt>=e.top&&tr>=e.left&&r[e,dt[`TimeD${e}`]])),gt=Object.fromEntries(Array(12).fill(null).map((e,t)=>t+1).map(e=>[e,dt[`TimeN${e}`]])),yt=dt,vt={[yt.BOS]:"BOS",[yt.NoteheadS0]:"noteheads-s0",[yt.NoteheadS1]:"noteheads-s1",[yt.NoteheadS2]:"noteheads-s2",[yt.NoteheadGrace]:"GraceNotehead",[yt.Flag3]:"flags-u3",[yt.BeamLeft]:"BeamLeft",[yt.BeamContinue]:"BeamContinue",[yt.BeamRight]:"BeamRight",[yt.Dot]:"dot",[yt.Rest0]:"rests-0o",[yt.Rest1]:"rests-1o",[yt.Rest2]:"rests-2",[yt.Rest3]:"rests-3",[yt.Rest4]:"rests-4",[yt.Rest5]:"rests-5",[yt.Rest6]:"rests-6"},xt={[yt.NoteheadS0]:0,[yt.NoteheadS1]:1,[yt.NoteheadS2]:2,[yt.NoteheadGrace]:2},St=[yt.NoteheadS0,yt.NoteheadS1,yt.NoteheadS2,yt.NoteheadGrace],bt=[yt.Rest0,yt.Rest1,yt.Rest2,yt.Rest3,yt.Rest4,yt.Rest5,yt.Rest6],kt=[yt.BeamLeft,yt.BeamContinue,yt.BeamRight],Tt=[...St,...bt],wt=[...St,...bt,yt.vline_Stem],Mt=[yt.BOS,yt.NoteheadS0,yt.vline_Stem,...bt],Et=[...Tt,yt.vline_Stem],Nt={[yt.BeamLeft]:"Open",[yt.BeamRight]:"Close"},It=e=>({type:e,staff:-1,x:0,y1:0,y2:0}),Ct=It(dt.BOS),_t=e=>[It(gt[e.numerator]),It(pt[e.denominator])],Ot=(e,t)=>{const s=e.filter((e,s)=>t[s]),i=Math.max(...s);return e.findIndex(e=>e===i)};class SemanticCluster extends SimpleClass{static elementToJSON(e){const t={type:e.type,staff:e.staff,x:e.x,y1:e.y1,y2:e.y2};return e.id&&(t.id=e.id),t}constructor(e){super(),super.assign(e)}get sourceMask(){return this.elements.map(e=>wt.includes(e.type))}get targetMask(){return this.elements.map(e=>Mt.includes(e.type))}get vMask(){return this.elements.map(e=>Et.includes(e.type))}get compactMatrixH(){if(!this.matrixH)return null;const e=this.sourceMask,t=this.targetMask;return this.matrixH.filter((t,s)=>e[s]).map(e=>e.filter((e,s)=>t[s]))}set compactMatrixH(e){this.matrixH=Bt([].concat(...e),[this.sourceMask,this.targetMask])}get compactMatrixV(){if(!this._matrixV)return null;const e=this.vMask,t=this._matrixV.filter((t,s)=>e[s]).map(t=>t.filter((t,s)=>e[s]));return[].concat(...t.map((e,t)=>e.slice(0,t)))}set compactMatrixV(e){this.matrixV=e&&At(e,this.vMask)}get matrixV(){return this.groupsV&&Pt(this.elements.length,this.groupsV)}set matrixV(e){if(!e)return this.groupsV=null,void(this._matrixV=e);const t=[],s=e.map((t,s)=>t.some(Number.isFinite)||e.some(e=>Number.isFinite(e[s])));e.forEach((e,i)=>{if(s[i]){let s=!1;for(let r=0;r=.5){const e=t.findIndex(e=>e.includes(r));t[e].push(i),s=!0;break}}s||t.push([i])}}),this.groupsV=t,this._matrixV=e}toJSON(){return{__prototype:"SemanticCluster",index:this.index,elements:this.elements.map(SemanticCluster.elementToJSON),compactMatrixH:this.compactMatrixH,compactMatrixV:this.compactMatrixV}}static mapMatrix(e,t,s){return t.reduce((t,s,i)=>(t[s]?t[s]=t[s].map((t,s)=>t+e[i][s]?1:0):t[s]=e[i],t),[]).map(e=>s.map(t=>e[t]))}mergeOverlapping(){const e=this.overlappedNoteheads();if(e.length){const t=this.elements.map((t,s)=>{const i=e.find(e=>s===e[1]),r=i?i[0]:s;return r-e.filter(e=>e[1]t.findIndex(e=>e===s));this.elements=s.map(e=>this.elements[e]),console.assert(this.elements.every(Boolean),"null element found:",this,t,s),this.matrixH=SemanticCluster.mapMatrix(this.matrixH,t,s),this.groupsV=this.groupsV.map(e=>Array.from(new Set(e.map(e=>t[e]))))}}overlappedNoteheads(){const e=[],t=this.elements.filter(e=>St.includes(e.type));for(let s=0;st),t=this.masks?this.masks[1]:e.map(e=>Mt.includes(this.elements[e].type)),s=e.map(e=>this.elements[e].type===yt.vline_Stem&&this.elements[e].y2-this.elements[e].y1>2),i=e.filter(e=>[yt.NoteheadS1,yt.NoteheadS2,yt.NoteheadGrace].includes(this.elements[e].type)),r=e.filter(e=>this.elements[e].type===yt.NoteheadS0),n=e.map(()=>!1),a={};i.forEach(t=>{const i=this.elements[t];e.filter(e=>s[e]).filter(e=>this.elements[e].y1-.5i.y1).sort((e,s)=>this.matrixH[t][s]-this.matrixH[t][e]).slice(0,2).filter((e,s)=>0===s||this.matrixH[t][e]>=.5).forEach(e=>{a[e]=a[e]||[],a[e].push(t)})}),r.forEach(e=>{const s=this.elements[e],i=Ot(this.matrixH[e],t),r=this.elements[i];r.type===yt.NoteheadS0&&Math.abs(s.x-r.x)<2.6?(n[e]=!0,a[i]=a[i]||[i],a[i].push(e)):a[e]=a[e]||[e]});const o={},c=e.filter(e=>a[e]||bt.includes(this.elements[e].type));c.sort((e,t)=>this.elements[e].x-this.elements[t].x);const l=e.map(e=>e===yt.BOS);c.forEach(e=>{const t=Ot(this.matrixH[e],l);o[e]=t,t&&!bt.includes(this.elements[t].type)&&(l[t]=!1),l[e]=!0});const u=this.elements.filter(e=>e.type===yt.Dot),h=this.elements.filter(e=>e.type===yt.Flag3),m=this.elements.filter(e=>kt.includes(e.type)),f=this.groupsV;return c.map(e=>{const t=this.elements[e],s=f?f.findIndex(t=>t.includes(e)):null;if(bt.includes(t.type)){const i=u.filter(e=>e.x>t.x+.5&&e.xt.y1-1&&e.y1this.elements[e]),r=Math.min(...i.map(e=>e.x-.7)),n=Math.max(...i.map(e=>e.x+.7));i.sort((e,t)=>t.y1-e.y1);const c=i.map(e=>e.y1),l=i.map(e=>e.id),f=c[0],d=c[c.length-1],p=u.filter(e=>e.x>n&&e.xf-1&&e.y1{const s=A(t.y1,.5);return e[s]=e[s]||[],e[s].push(t),e},{}),g=Math.max(...Object.values(p).map(e=>e.length),0);let y=xt[i[0].type],v=null,x=null,S=null;if(t.type===yt.vline_Stem){if(v=f-t.y1>t.y2-d?"u":"d",S={x:t.x,y:"u"===v?t.y1:t.y2},2===y){const e="u"===v?[t.y1-.4,t.y2-1]:[t.y1+1,t.y2+.4];y+=h.filter(s=>Math.abs(s.x-t.x)<.2&&s.y1>e[0]&&s.y1Math.abs(s.x-t.x)<.2&&s.y1>e[0]&&s.y1{const s=function*(){for(const t of e)yield t}(),[i,r]=t;return i.map(e=>r.map(t=>e&&t?s.next().value:null))},At=(e,t)=>{const s=function*(){for(const t of e)yield t}();return t.map((e,i)=>t.map((t,r)=>e&&t&&r{const s=Array(e).fill(null).map((e,s)=>t.findIndex(e=>e.includes(s)));return Array(e).fill(null).map((t,i)=>Array(e).fill(null).map((e,t)=>{if(t>=i)return null;const r=s[i],n=s[t];return r<0||n<0?null:r===n?1:0}))};var Rt;!function(e){e[e.None=0]="None",e.Mordent="mordent",e.Prall="prall",e.Turn="turn",e.Trill="trill",e.Tremolo="tremolo",e.Arpeggio="arpeggio"}(Rt||(Rt={}));const Dt=class Stream{constructor(e){this.array=new Uint8Array(e),this.position=0}eof(){return this.position>=this.array.length}read(e){const t=this.array.slice(this.position,this.position+e);return this.position+=e,t}readString(e){return Array.from(this.read(e)).map(e=>String.fromCharCode(e)).join("")}readInt32(){const e=(this.array[this.position]<<24)+(this.array[this.position+1]<<16)+(this.array[this.position+2]<<8)+this.array[this.position+3];return this.position+=4,e}readInt16(){const e=(this.array[this.position]<<8)+this.array[this.position+1];return this.position+=2,e}readInt8(e){let t=this.array[this.position];return e&&t>127&&(t-=256),this.position+=1,t}readVarInt(){let e=0;for(;;){const t=this.readInt8();if(!(128&t))return e+t;e+=127&t,e<<=7}}};const Ft=class OStream{constructor(){this.buffer=""}write(e){this.buffer+=e}writeInt32(e){this.buffer+=String.fromCharCode(e>>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(255&e)}writeInt16(e){this.buffer+=String.fromCharCode(e>>8&255)+String.fromCharCode(255&e)}writeInt8(e){this.buffer+=String.fromCharCode(255&e)}writeVarInt(e){if(e<0)throw new Error("OStream.writeVarInt minus number: "+e);const t=127&e;e>>=7;let s=String.fromCharCode(t);for(;e;){const t=127&e;e>>=7,s=String.fromCharCode(128|t)+s}this.buffer+=s}getBuffer(){return this.buffer}getArrayBuffer(){return Uint8Array.from(this.buffer.split("").map(e=>e.charCodeAt(0))).buffer}};var Lt={parseMidiData:function(e){function t(e){const t=e.readString(4),s=e.readInt32();return{id:t,length:s,data:e.read(s)}}let s;function i(e){const t={};t.deltaTime=e.readVarInt();let i=e.readInt8();if(240&~i){let r;128&i?(r=e.readInt8(),s=i):(r=i,i=s);const n=i>>4;switch(t.channel=15&i,t.type="channel",n){case 8:return t.subtype="noteOff",t.noteNumber=r,t.velocity=e.readInt8(),t;case 9:return t.noteNumber=r,t.velocity=e.readInt8(),0===t.velocity?t.subtype="noteOff":t.subtype="noteOn",t;case 10:return t.subtype="noteAftertouch",t.noteNumber=r,t.amount=e.readInt8(),t;case 11:return t.subtype="controller",t.controllerType=r,t.value=e.readInt8(),t;case 12:return t.subtype="programChange",t.programNumber=r,t;case 13:return t.subtype="channelAftertouch",t.amount=r,t;case 14:return t.subtype="pitchBend",t.value=r+(e.readInt8()<<7),t;default:throw new Error("Unrecognised MIDI event type: "+n)}}else{if(255!==i){if(240===i){t.type="sysEx";const s=e.readVarInt();return t.data=e.readString(s),t}if(247===i){t.type="dividedSysEx";const s=e.readVarInt();return t.data=e.readString(s),t}throw new Error("Unrecognised MIDI event type byte: "+i)}{t.type="meta";const s=e.readInt8(),i=e.readVarInt();switch(s){case 0:if(t.subtype="sequenceNumber",2!==i)throw new Error("Expected length for sequenceNumber event is 2, got "+i);return t.number=e.readInt16(),t;case 1:return t.subtype="text",t.text=e.readString(i),t;case 2:return t.subtype="copyrightNotice",t.text=e.readString(i),t;case 3:return t.subtype="trackName",t.text=e.readString(i),t;case 4:return t.subtype="instrumentName",t.text=e.readString(i),t;case 5:return t.subtype="lyrics",t.text=e.readString(i),t;case 6:return t.subtype="marker",t.text=e.readString(i),t;case 7:return t.subtype="cuePoint",t.text=e.readString(i),t;case 32:if(t.subtype="midiChannelPrefix",1!==i)throw new Error("Expected length for midiChannelPrefix event is 1, got "+i);return t.channel=e.readInt8(),t;case 47:if(t.subtype="endOfTrack",0!==i)throw new Error("Expected length for endOfTrack event is 0, got "+i);return t;case 81:if(t.subtype="setTempo",3!==i)throw new Error("Expected length for setTempo event is 3, got "+i);return t.microsecondsPerBeat=(e.readInt8()<<16)+(e.readInt8()<<8)+e.readInt8(),t;case 84:if(t.subtype="smpteOffset",5!==i)throw new Error("Expected length for smpteOffset event is 5, got "+i);const s=e.readInt8();return t.frameRate={0:24,32:25,64:29,96:30}[96&s],t.hour=31&s,t.min=e.readInt8(),t.sec=e.readInt8(),t.frame=e.readInt8(),t.subframe=e.readInt8(),t;case 88:if(t.subtype="timeSignature",4!==i)throw new Error("Expected length for timeSignature event is 4, got "+i);return t.numerator=e.readInt8(),t.denominator=Math.pow(2,e.readInt8()),t.metronome=e.readInt8(),t.thirtyseconds=e.readInt8(),t;case 89:if(t.subtype="keySignature",2!==i)throw new Error("Expected length for keySignature event is 2, got "+i);return t.key=e.readInt8(!0),t.scale=e.readInt8(),t;case 127:return t.subtype="sequencerSpecific",t.data=e.readString(i),t;default:return t.subtype="unknown",t.data=e.readString(i),t}}}}let r=e;"string"==typeof e&&(r=e.split("").map(e=>e.charCodeAt(0)));const n=new Dt(r),a=t(n);if("MThd"!==a.id||6!==a.length)throw new Error("Bad .mid file - header not found");const o=new Dt(a.data),c=o.readInt16(),l=o.readInt16(),u=o.readInt16();let h;if(32768&u)throw new Error("Expressing time division in SMTPE frames is not supported yet");h=u;const m={formatType:c,trackCount:l,ticksPerBeat:h},f=[];for(let e=0;e>16&255),e.writeInt8(t.microsecondsPerBeat>>8&255),e.writeInt8(255&t.microsecondsPerBeat);break;case"smpteOffset":e.writeInt8(84),e.writeVarInt(5);var s={24:0,25:32,29:64,30:96}[t.frameRate];e.writeInt8(t.hour|s),e.writeInt8(t.min),e.writeInt8(t.sec),e.writeInt8(t.frame),e.writeInt8(t.subframe);break;case"timeSignature":e.writeInt8(88),e.writeVarInt(4),e.writeInt8(t.numerator),e.writeInt8(Math.log2(t.denominator)),e.writeInt8(t.metronome),e.writeInt8(t.thirtyseconds);break;case"keySignature":e.writeInt8(89),e.writeVarInt(2),e.writeInt8(t.key),e.writeInt8(t.scale);break;case"sequencerSpecific":e.writeInt8(127),e.writeVarInt(t.data.length),e.write(t.data);break;default:throw new Error("unhandled event subtype:"+t.subtype)}break;case"sysEx":e.writeInt8(240),e.writeVarInt(t.data.length),e.write(t.data);break;case"dividedSysEx":e.writeInt8(247),e.writeVarInt(t.data.length),e.write(t.data);break;case"channel":switch(t.subtype){case"noteOn":e.writeInt8(144|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.velocity);break;case"noteOff":e.writeInt8(128|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.velocity?t.velocity:0);break;case"noteAftertouch":e.writeInt8(160|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.amount);break;case"controller":e.writeInt8(176|t.channel),e.writeInt8(t.controllerType),e.writeInt8(t.value);break;case"programChange":e.writeInt8(192|t.channel),e.writeInt8(t.programNumber);break;case"channelAftertouch":e.writeInt8(208|t.channel),e.writeInt8(t.amount);break;case"pitchBend":e.writeInt8(224|t.channel),e.writeInt8(255&t.value),e.writeInt8(t.value>>7&255);break;default:throw new Error("unhandled event subtype:"+t.subtype)}break;default:throw new Error("unhandled event type:"+t.type)}}const r=new Ft,n=new Ft;n.writeInt16(e.formatType),n.writeInt16(t.length),n.writeInt16(e.ticksPerBeat),s(r,"MThd",n.getBuffer());for(let e=0;e{const s=[];let i=120;const r=e.header.ticksPerBeat;for(let t=0;t0){e=a.ticksToEvent/r/(i/60)}"meta"==a.event.type&&"setTempo"==a.event.subtype&&(i=6e7/a.event.microsecondsPerBeat);const s=1e3*e*t||0;o.push([a,s]),a=n()}if(a=n())for(;a;)e()}(),o},trimSequence:e=>{const t=new Map;return e.filter(([{event:e,ticksToEvent:s}])=>{if(s>0&&t.clear(),"channel"!==e.type)return!0;const i=`${e.subtype}|${e.channel}|${e.noteNumber}`;return!t.get(i)&&(t.set(i,e),!0)})},fixOverlapNotes:e=>{const t=new Map,s=new Map,i=[];let r=-1;return e.forEach(([{event:e,ticksToEvent:n}],a)=>{if(n>0&&(r=a),"channel"!==e.type)return;const o=`${e.channel}|${e.noteNumber}`;switch(e.subtype){case"noteOn":t.get(o)?s.set(o,r):t.set(o,r);break;case"noteOff":s.get(o)?(i.push([s.get(o),a]),s.delete(o)):t.delete(o)}}),i.forEach((e,t)=>{for(let s=t-1;s>=0;--s){const t=i[s];if(t[1]t[0]&&++e[0]}}),i.forEach(([t,s])=>{if(s>=e.length-1||t<0)return;const i=e[s],r=e[s+1],n=e[t];if(!n[0].ticksToEvent)return void console.warn("invalid front index:",t,s,n);const a=n[1]/n[0].ticksToEvent;r[1]+=i[1],r[0].ticksToEvent+=i[0].ticksToEvent,i[0].ticksToEvent=n[0].ticksToEvent-1,n[0].ticksToEvent=1,i[1]=i[0].ticksToEvent*a,n[1]=n[0].ticksToEvent*a,e.splice(s,1),e.splice(t,0,i)}),e}};const jt=$t,Ht={64:"Sustain",65:"Portamento",66:"Sostenuto",67:"Soft"};class Notation$1{static parseMidi(e,{fixOverlap:t=!0}={}){const s=[],i={},r={},n=[],a=[];let o=0,c=5e3,l=0,u=4,h=0;const m={};let f,d=0,p=0;const g=[],y=e.header.ticksPerBeat;let v=jt.midiToSequence(e);t&&(v=jt.trimSequence(jt.fixOverlapNotes(v)));const x=v.map(e=>({data:e[0].event,track:e[0].track,deltaTime:e[1],deltaTicks:e[0].ticksToEvent}));let S=0;for(const e of x){if(d+=e.deltaTicks,p=Math.round(1*d),e.deltaTicks>0){const t=e.deltaTicks/y;for(let e=Math.ceil(l);es.channel==t.channel&&s.pitch==e);if(i>=0){const r=s.splice(i,1)[0];n[t.channel].push({channel:t.channel,startTick:r.startTick,endTick:p,pitch:e,start:r.start,duration:o-r.start,velocity:r.velocity,beats:r.beats,track:r.track,finger:r.finger})}else console.debug("unexpected noteOff: ",o,t);m.high=Math.max(m.high||e,e)}break;case"controller":switch(t.controllerType){case 64:case 65:case 66:case 67:const e=Ht[t.controllerType];i[t.channel]=i[t.channel]||{},r[t.channel]=r[t.channel]||[];const s=i[t.channel][e];s&&r[t.channel].push({type:e,start:s.start,duration:o-s.start,value:s.value}),i[t.channel][e]={start:o,value:t.value}}}break;case"meta":switch(t.subtype){case"setTempo":c=t.microsecondsPerBeat/1e3,g.push({tempo:t.microsecondsPerBeat,tick:p,time:o});break;case"timeSignature":u=t.numerator,h=0;break;case"text":if(!f&&/^find-corres:/.test(t.text)){const e=t.text.match(/:([\d\,-]+)/);f=(e&&e[1]||"").split(",").map(e=>Number(e))}else if(/fingering\(.*\)/.test(t.text)){const[e,i]=t.text.match(/\((.+)\)/),r=Number(i);if(!Number.isNaN(r)){const e=s[s.length-1];e&&(e.finger=r);const t=x.find(e=>e.index==S-1);t&&(t.data.finger=r)}}break;case"copyrightNotice":console.log("MIDI copyright:",t.text)}}}return s.forEach(e=>{console.debug("unclosed noteOn event at",e.startTick,e),n[e.channel].push({startTick:e.startTick,endTick:p,pitch:e.pitch,start:e.start,duration:o-e.start,velocity:e.velocity,beats:e.beats,track:e.track,finger:e.finger})}),new Notation$1({channels:n,keyRange:m,pedals:r,bars:a,endTime:o,endTick:p,correspondences:f,events:x,tempos:g,ticksPerBeat:y,meta:{}})}constructor(e){Object.assign(this,e),this.notes=[];for(const e of this.channels)if(e)for(const t of e)this.notes.push(t);this.notes.sort(function(e,t){return e.start-t.start});for(const e in this.notes)this.notes[e].index=Number(e);this.duration=this.notes.length>0?this.endTime-this.notes[0].start:0,this.pitchMap=[];for(const e in this.channels)for(const t in this.channels[e]){const s=this.channels[e][t].pitch;this.pitchMap[s]=this.pitchMap[s]||[],this.pitchMap[s].push(this.channels[e][t])}if(this.pitchMap.forEach(e=>e.sort((e,t)=>e.start-t.start)),this.meta.beatInfos)for(let e=0;e0){const s=this.meta.beatInfos[e-1];t.beatIndex=s.beatIndex+Math.ceil((t.tick-s.tick)/this.ticksPerBeat)}else t.beatIndex=0}{let e=0,t=0,s=5e5;for(const i of this.tempos){e+=s/1e3*(i.tick-t)/this.ticksPerBeat,t=i.tick,s=i.tempo,i.time=e}}}findChordBySoftindex(e,t=.8){return this.notes.filter(s=>Math.abs(s.softIndex-e)e.from,"range is invalid:",e);const t=t=>{const s=Math.max(e.from,this.tempos[t].tick),i=te+s.tempo*t(i),0)/(e.to-e.from))}ticksToTime(e){console.assert(Number.isFinite(e),"invalid tick value:",e),console.assert(this.tempos&&this.tempos.length,"no tempos.");const t=this.tempos.findIndex(t=>t.tick>e),s=t<0?this.tempos.length-1:Math.max(t-1,0),i=this.tempos[s];return i.time+(e-i.tick)*i.tempo*.001/this.ticksPerBeat}timeToTicks(e){console.assert(Number.isFinite(e),"invalid time value:",e),console.assert(this.tempos&&this.tempos.length,"no tempos.");const t=this.tempos.findIndex(t=>t.time>e),s=t<0?this.tempos.length-1:Math.max(t-1,0),i=this.tempos[s];return i.tick+(e-i.time)*this.ticksPerBeat/(.001*i.tempo)}tickRangeToTimeRange(e){return console.assert(e.to>=e.from,"invalid tick range:",e),{from:this.ticksToTime(e.from),to:this.ticksToTime(e.to)}}scaleTempo({factor:e,headTempo:t}){console.assert(this.tempos&&this.tempos.length,"[Notation.scaleTempo] tempos is empty."),t&&(e=t/this.tempos[0].tempo),console.assert(Number.isFinite(e)&&e>0,"[Notation.scaleTempo] invalid factor:",e),this.tempos.forEach(t=>{t.tempo*=e,t.time*=e}),this.events.forEach(t=>{t.deltaTime*=e,t.time*=e}),this.notes.forEach(t=>{t.start*=e,t.duration*=e}),this.endTime*=e}}var Vt={Notation:Notation$1};const{Notation:zt}=Vt,qt=()=>new Promise(e=>requestAnimationFrame(e));var Gt=class MidiPlayer$1{constructor(e,{cacheSpan:t=600,onMidi:s,onPlayFinish:i,onTurnCursor:r}={}){let n;this.cacheSpan=t,this.onMidi=s,this.onPlayFinish=i,this.onTurnCursor=r,n=e.notes&&Number.isFinite(e.endTime)?e:zt.parseMidi(e),this.notation=n,this.events=n.events,this.isPlaying=!1,this.progressTime=0,this.startTime=performance.now(),this.duration=n.endTime,this.cursorTurnDelta=0,console.assert(n.tempos&&n.tempos.length,"[MidiPlayer] invalid notation, tempos is empty.")}dispose(){this.isPlaying=!1,this.progressTime=0}get progressTicks(){return this.notation.timeToTicks(this.progressTime)}set progressTicks(e){this.progressTime=this.notation.ticksToTime(e),this.onTurnCursor&&this.onTurnCursor(this.progressTime)}async play({nextFrame:e=qt}={}){this.progressTime>=this.duration&&(this.progressTime=0);let t=performance.now();this.startTime=t-this.progressTime,this.isPlaying=!0;let s=this.events.findIndex(e=>e.time>=t-this.startTime);for(;this.isPlaying;){for(;sthis.progressTime+this.cacheSpan)break;"channel"===e.data.type&&this.startTime+e.time>=t&&this.onMidi&&this.onMidi(e.data,this.startTime+e.time)}if(await e(),!this.isPlaying)break;if(0!==this.cursorTurnDelta){const e=this.cursorTurnDelta<0;if(this.startTime-=this.cursorTurnDelta,this.cursorTurnDelta=0,e)for(;s>0;--s){const e=this.events[s].time;if(this.startTime+ethis.duration&&(this.isPlaying=!1,this.onPlayFinish&&this.onPlayFinish())}}pause(){this.isPlaying=!1}turnCursor(e){this.isPlaying?this.cursorTurnDelta+=e-this.progressTime:this.progressTime=e,this.onTurnCursor&&this.onTurnCursor(e)}},Wt={CostStepAttenuation:.6,SkipDeep:3,PriorDistanceSigmoidFactor:.1,PriorValueSigmoidFactor:.12,SkipCost:.5,LagOffsetCost:1,LeadOffsetCost:1.6,ZeroOffsetCost:.58,RelocationThreshold:6};const{pick:Ut}=y.default,Yt=Wt;class Node$2{constructor(e,t){this.s_note=e,this.c_note=t,console.assert(null!=this.s_note.softIndex,"s_note softIndex is null"),this.offset=this.s_note.softIndex-this.c_note.softIndex,this._prev=null,this._totalCost=0,this._value=0,this.cacheDirty=!0}get prev(){return this._prev}set prev(e){e!=this._prev&&(this._prev=e,this.cacheDirty=!0)}get si(){return this.s_note.index}get ci(){return this.c_note.index}get root(){return this.prev.root||this}get rootSi(){return this.prev.zero?this.si:this.prev.rootSi}get id(){return`${this.s_note.index},${this.c_note.index}`}static cost(e,t,s){return e*Yt.CostStepAttenuation+Math.tanh(t*Yt.SkipCost)+Math.tanh(.5*s)}updateCache(){this.cacheDirty&&(this._totalCost=Node$2.cost(this.prev.totalCost,this.si-this.prev.si-1,this.selfCost),this._value=this.prev.value+1-Math.tanh(.5*this.selfCost),this.cacheDirty=!1)}get totalCost(){return this.updateCache(),this._totalCost}get value(){return this.updateCache(),this._value}get deep(){return this.prev.deep+1}get path(){const e=[];for(let t=this;!t.zero;t=t.prev)e[t.si]=t.ci;for(let t=0;t=1,"node index error:",this,e);const s=Node$2.cost(e.totalCost,this.si-e.si-1,t);return(!this.prev||s0?Yt.LagOffsetCost:Yt.LeadOffsetCost))**2}return t}priorByOffset(e){const t=Math.abs(this.offset-e)/1;return Math.tanh(this.value*Yt.PriorValueSigmoidFactor)-Math.tanh(t*Yt.PriorDistanceSigmoidFactor)}static zero(){return{zero:!0,totalCost:0,value:0,si:-1,ci:-1,deep:0,offset:0}}}var Xt=Node$2;const Kt=Wt,Zt=Xt;var Jt=class Navigator$1{constructor(e,t,s={}){this.criterion=e,this.sample=t,this.getCursorOffset=s.getCursorOffset||(()=>null),this.outOfPage=s.outOfPage,this.bestNode=null,this.fineCursor=null,this.breakingSI=t.notes.length-1,this.zeroNode=Zt.zero(),this.zeroNode.offset=this.getCursorOffset()||0,this.relocationThreshold=s.relocationThreshold||Kt.RelocationThreshold}step(e){const t=this.sample.notes[e];if(t.matches.length>0){t.matches.forEach(t=>{t.evaluatePrev(this.zeroNode);for(let s=e-1;s>=Math.max(this.breakingSI+1,e-Kt.SkipDeep);--s){const i=this.sample.notes[s];console.assert(i,"prevNote is null:",s,e,this.sample.notes),i.matches.forEach(e=>{const s=t.offset-e.offset;s<2/Kt.LagOffsetCost&&s>-2/Kt.LeadOffsetCost&&t.evaluatePrev(e)})}if(t.prior=t.totalCost>1.99?-1:t.priorByOffset(this.zeroNode.offset),t.prior>0&&this.outOfPage){const e=this.criterion.notes[t.ci].startTick;this.outOfPage(e)&&(t.prior-=.7)}}),t.matches.sort((e,t)=>t.prior-e.prior),this.cursors=t.matches;let s=null;const i=this.nullSteps(e),r=this.cursors[0];r&&r.totalCost<1&&(r.prior>0||r.totalCost<.4&&Math.log(Math.max(i*r.value,.001))>this.relocationThreshold)&&(this.zeroNode.offset=r.offset,s=r,(!this.bestNode||r.value>this.bestNode.value)&&(this.bestNode=r)),s?this.fineCursor=s:this.resetCursor(e,{breaking:!1})||(this.zeroNode.offset+=t.deltaSi*Math.tanh(i),console.assert(!Number.isNaN(this.zeroNode.offset),"zeroNode.offset is NaN.",t.deltaSi,i))}else this.cursors=[]}path({fromIndex:e=0,toIndex:t=this.sample.notes.length-1}={}){const s=[];let i=null;for(let r=t;r>=e;){const e=this.sample.notes[r];if(!e.matches.length||e.matches[0].prior<-.01||e.matches[0].totalCost>=1){s[r]=-1,--r;continue}null!=i&&(e.matches.forEach(e=>e.backPrior=e.totalCost<1.99?e.priorByOffset(i):-1),e.matches.sort((e,t)=>t.backPrior-e.backPrior));const t=e.matches[0];t.path.forEach((e,t)=>s[t]=e),i=t.root.offset,r=t.rootSi-1}return console.assert(s.length==t+1,"path length error:",s,e,t+1,this.sample.notes.length,this.sample.notes.length?this.sample.notes[this.sample.notes.length-1].index:null),s}nullSteps(e){return e-(this.fineCursor?this.fineCursor.si:-1)-1}resetCursor(e,{breaking:t=!0}={}){t&&(this.breakingSI=e);const s=this.getCursorOffset();return null!=s&&(this.zeroNode.offset=s,this.zeroNode.si=e,this.fineCursor=null,console.assert(!Number.isNaN(this.zeroNode.offset),"zeroNode.offset is NaN.",s),!0)}get relocationTendency(){const e=this.cursors&&this.cursors[0];if(!e)return null;const t=this.nullSteps(e.si);return t<=0?0:Math.log(Math.max(t*e.value,.001))/this.relocationThreshold}};const Qt=Xt,es=Jt,ts=e=>Math.tanh(e/192),ss=function(e,t,{softIndexFactor:s=1}={}){const i=e[t=Number(t)];if(t>0){const r=e[t-1];console.assert(null!=i.start,"note.start is null",i),console.assert(null!=r.start,"lastNote.start is null",r),i.deltaSi=ts((i.start-r.start)*s),i.softIndex=r.softIndex+i.deltaSi,console.assert(!Number.isNaN(i.deltaSi),"note.deltaSi is NaN.",i.start,r.start)}else i.softIndex=0,i.deltaSi=0};var is={normalizeInterval:ts,makeNoteSoftIndex:ss,makeMatchNodes:function(e,t,s=Qt.zero()){e.matches=[];const i=t.pitchMap[e.pitch];if(i)for(const t of i){const i=new Qt(e,t);s&&i.evaluatePrev(s),e.matches.push(i)}},genNotationContext:function(e,{softIndexFactor:t=1}={}){for(let s=0;s"setTempo"==e.subtype)||(n.push({time:t,type:"meta",subtype:"timeSignature",numerator:4,denominator:4,thirtyseconds:8}),n.push({time:t,type:"meta",subtype:"setTempo",microsecondsPerBeat:e.microsecondsPerBeat}));let a=t||0;if(e.notes)for(const t of e.notes)n.push({time:t.start,type:"channel",subtype:"noteOn",channel:t.channel||0,noteNumber:t.pitch,velocity:t.velocity,finger:t.finger}),a=Math.max(a,t.start),Number.isFinite(s)&&(t.duration=t.duration||s),t.duration&&(n.push({time:t.start+t.duration,type:"channel",subtype:"noteOff",channel:t.channel||0,noteNumber:t.pitch,velocity:0}),a=Math.max(a,t.start+t.duration));if(e.events){const t=e.events.filter(e=>!ns.includes(e.data.subtype));for(const e of t)n.push({time:e.time,...e.data}),a=Math.max(a,e.time)}return n.push({time:a+100,type:"meta",subtype:"endOfTrack"}),n.sort(function(e,t){return e.time-t.time}),n.map((e,t)=>({event:e,index:t})).filter(({event:e})=>"noteOn"==e.subtype&&null!=e.finger).reverse().forEach(({event:e,index:t})=>n.splice(t+1,0,{time:e.time,type:"meta",subtype:"text",text:`fingering(${e.finger})`})),n.forEach(e=>e.ticks=Math.round((e.time-t)*i)),n.forEach((e,t)=>e.deltaTime=e.ticks-(t>0?n[t-1].ticks:0)),{header:r,tracks:[n]}}var os={sliceMidi:(e,t,s)=>({header:e.header,tracks:e.tracks.map(e=>((e,t,s)=>{(e=>{let t=0;e.forEach(e=>{t+=e.deltaTime,e.tick=t})})(e);const i=[],r={};return e.forEach(e=>{e.tick>=t&&e.tick<=s&&"endOfTrack"!==e.subtype?i.push({...e,tick:e.tick-t}):e.ticki.push({...e,tick:0})),i.push({tick:s-t,type:"meta",subtype:"endOfTrack"}),(e=>{let t=0;e.sort((e,t)=>e.tick-t.tick).forEach(e=>{e.deltaTime=e.tick-t,t=e.tick})})(i),i})(e,t,s))}),encodeToMIDIData:as,encodeToMIDI:function(e,t){const s=as(e,t);return rs.encodeMidiFile(s)}};var cs={MIDI:Lt,MusicNotation:Vt,MidiPlayer:Gt,Matcher:is,MidiUtils:os};const ls=["id","ids","pitch","velocity","track","channel","rest","tied","overlapped","implicitType","afterGrace","contextIndex","staffTrack","chordPosition","division"];class MetaNotation{static fromAbsoluteNotes(e,t,s){const i=new MetaNotation(s);return i.measures=Array(t.length).fill(null).map((s,i)=>{const r=t[i],n=t[i+1]?t[i+1]-r:0,a=e.filter(e=>e.measure===i+1).map(e=>({tick:e.startTick-r,duration:e.endTick-e.startTick,...d.default(e,ls),subNotes:[]}));return a.forEach(e=>["rest","tied","implicitType","afterGrace"].forEach(t=>{e[t]||delete e[t]})),{tick:r,duration:n,notes:a}}),i.idTrackMap=e.reduce((e,t)=>(t.id&&(e[t.id]=t.track),e),{}),i}static performAbsoluteNotes(e,{withRestTied:t=!1}={}){const s=e.filter(e=>(t||!e.rest&&!e.tied)&&!e.overlapped).map(e=>({measure:e.measure,channel:e.channel,track:e.track,start:e.start,startTick:e.startTick,endTick:e.endTick,pitch:e.pitch,duration:e.duration,velocity:e.velocity||127,id:e.id,ids:e.ids,staffTrack:e.staffTrack,contextIndex:e.contextIndex,implicitType:e.implicitType,chordPosition:e.chordPosition})).reduce((e,t)=>{const s=`${t.channel}|${t.start}|${t.pitch}`,i=e[s];return i?i.ids.push(...t.ids):e[s]=t,e},{});return Object.values(s)}constructor(e){this.ripe=!1,e&&Object.assign(this,e)}get trackTickBias(){const e=this.measures[0];return this.trackNames.reduce((t,s,i)=>{if(t[s]=0,e){const r=e.notes.find(e=>e.track===i);r&&(t[s]=Math.min(r.tick,0))}return t},{})}get idSet(){return this.measures.reduce((e,t)=>(t.notes.filter(e=>!e.rest).forEach(t=>t.ids.forEach(t=>e.add(t))),e),new Set)}toJSON(){return{__prototype:"LilyNotation",measures:this.measures,idTrackMap:this.idTrackMap,trackNames:this.trackNames,ripe:this.ripe}}toAbsoluteNotes(e){let t=0;const s=e.map(e=>{const s=this.measures[e-1];console.assert(!!s,"invalid measure index:",e,this.measures.length);const i=s.notes.map(s=>({startTick:t+s.tick,endTick:t+s.tick+s.duration,start:t+s.tick,duration:s.duration,measure:e,...d.default(s,ls)}));return t+=s.duration,i});return[].concat(...s)}toPerformingNotation(e,t={}){const s=this.toAbsoluteNotes(e),i=MetaNotation.performAbsoluteNotes(s,t),r=Math.max(...i.map(e=>e.start+e.duration)),n=e.reduce((e,t)=>e+this.measures[t-1].duration,0);return new cs.MusicNotation.Notation({ticksPerBeat:480,meta:{},tempos:[],channels:[i],endTime:r,endTick:n})}toPerformingMIDI(e,{trackList:t}={}){if(!e.length)return null;const s=-Math.min(0,...this.measures[0]?.events.map(e=>e.ticks)||[],...this.measures[0]?.notes.map(e=>e.tick)||[]);let i=s;const r=e.map(e=>{const t=this.measures[e-1];console.assert(!!t,"invalid measure index:",e,this.measures.length);const s=t.events.map(t=>({ticks:i+t.ticks,track:t.track,data:{...t.data,measure:e}}));return i+=t.duration,s}),n=e=>e.ticks+("noteOff"===e.subtype?-1e-8:0),a=[].concat(...r).reduce((e,t)=>(e[t.track]=e[t.track]||[],e[t.track].push({ticks:t.ticks,...t.data}),e),[]);a[0]=a[0]||[],i=s,e.map(e=>{const s=this.measures[e-1];console.assert(!!s,"invalid measure index:",e,this.measures.length),Number.isFinite(s.duration)&&(s.notes.forEach(s=>{if(t&&!t[s.track])return;if(s.rest)return;const r=i+s.tick,n=a[s.track]=a[s.track]||[];s.subNotes.forEach(t=>{n.push({ticks:r+t.startTick,measure:e,ids:s.ids,type:"channel",subtype:"noteOn",channel:s.channel,noteNumber:t.pitch,velocity:t.velocity,staffTrack:s.staffTrack,staff:s.staff}),n.push({ticks:r+t.endTick,measure:e,ids:s.ids,type:"channel",subtype:"noteOff",channel:s.channel,noteNumber:t.pitch,velocity:0,staffTrack:s.staffTrack,staff:s.staff})})}),i+=s.duration)});const o=i;for(let e=0;e{e.sort((e,t)=>n(e)-n(t));let t=0;e.forEach(e=>{e.deltaTime=e.ticks-t,Number.isFinite(e.deltaTime)?t=e.ticks:e.deltaTime=0}),e.push({deltaTime:Math.max(o-t,0),type:"meta",subtype:"endOfTrack"})}),{header:{formatType:0,ticksPerBeat:480},tracks:a,zeroTick:s}}toPerformingNotationWithEvents(e,t={}){if(!e.length)return null;const{zeroTick:s,...i}=this.toPerformingMIDI(e,t),r=cs.MusicNotation.Notation.parseMidi(i);us(r);let n=s;return r.measures=e.map(e=>{const t=n;return n+=this.measures[e-1].duration,{index:e,startTick:t,endTick:n}}),r}setTempo(e){let t=!1;for(const s of this.measures)for(const i of s.events)"setTempo"===i.data.subtype&&(i.data.microsecondsPerBeat=6e7/e,t=!0);return t}}const us=(e,t=["ids","measure","staffTrack"])=>{const s=(e,t,s)=>`${e}|${t}|${s}`,i=e.notes.reduce((e,t)=>(e[s(t.channel,t.pitch,t.startTick)]=t,e),{});e.events.forEach(e=>{if("noteOn"===e.data.subtype){const r=s(e.data.channel,e.data.noteNumber,e.ticks),n=i[r];console.assert(!!n,"cannot find note of",r),n&&Object.assign(n,d.default(e.data,t))}})};var hs,ms={exports:{}},fs={exports:{}};fs.exports=hs=hs||function(e,t){var s;if("undefined"!=typeof window&&window.crypto&&(s=window.crypto),"undefined"!=typeof self&&self.crypto&&(s=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(s=globalThis.crypto),!s&&"undefined"!=typeof window&&window.msCrypto&&(s=window.msCrypto),!s&&"undefined"!=typeof global&&global.crypto&&(s=global.crypto),!s)try{s=require("crypto")}catch(e){}var i=function(){if(s){if("function"==typeof s.getRandomValues)try{return s.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof s.randomBytes)try{return s.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},r=Object.create||function(){function e(){}return function(t){var s;return e.prototype=t,s=new e,e.prototype=null,s}}(),n={},a=n.lib={},o=a.Base={extend:function(e){var t=r(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},c=a.WordArray=o.extend({init:function(e,s){e=this.words=e||[],this.sigBytes=s!=t?s:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,s=e.words,i=this.sigBytes,r=e.sigBytes;if(this.clamp(),i%4)for(var n=0;n>>2]>>>24-n%4*8&255;t[i+n>>>2]|=a<<24-(i+n)%4*8}else for(var o=0;o>>2]=s[o>>>2];return this.sigBytes+=r,this},clamp:function(){var t=this.words,s=this.sigBytes;t[s>>>2]&=4294967295<<32-s%4*8,t.length=e.ceil(s/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],s=0;s>>2]>>>24-r%4*8&255;i.push((n>>>4).toString(16)),i.push((15&n).toString(16))}return i.join("")},parse:function(e){for(var t=e.length,s=[],i=0;i>>3]|=parseInt(e.substr(i,2),16)<<24-i%8*4;return new c.init(s,t/2)}},h=l.Latin1={stringify:function(e){for(var t=e.words,s=e.sigBytes,i=[],r=0;r>>2]>>>24-r%4*8&255;i.push(String.fromCharCode(n))}return i.join("")},parse:function(e){for(var t=e.length,s=[],i=0;i>>2]|=(255&e.charCodeAt(i))<<24-i%4*8;return new c.init(s,t)}},m=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(h.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return h.parse(unescape(encodeURIComponent(e)))}},f=a.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=m.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var s,i=this._data,r=i.words,n=i.sigBytes,a=this.blockSize,o=n/(4*a),l=(o=t?e.ceil(o):e.max((0|o)-this._minBufferSize,0))*a,u=e.min(4*l,n);if(l){for(var h=0;h>>7)^(d<<14|d>>>18)^d>>>3,g=l[f-2],y=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;l[f]=p+l[f-7]+y+l[f-16]}var v=i&r^i&n^r&n,x=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),S=m+((o<<26|o>>>6)^(o<<21|o>>>11)^(o<<7|o>>>25))+(o&u^~o&h)+c[f]+l[f];m=h,h=u,u=o,o=a+S|0,a=n,n=r,r=i,i=S+(x+v)|0}s[0]=s[0]+i|0,s[1]=s[1]+r|0,s[2]=s[2]+n|0,s[3]=s[3]+a|0,s[4]=s[4]+o|0,s[5]=s[5]+u|0,s[6]=s[6]+h|0,s[7]=s[7]+m|0},_doFinalize:function(){var e=this._data,s=e.words,i=8*this._nDataBytes,r=8*e.sigBytes;return s[r>>>5]|=128<<24-r%32,s[14+(r+64>>>9<<4)]=t.floor(i/4294967296),s[15+(r+64>>>9<<4)]=i,e.sigBytes=4*s.length,this._process(),this._hash},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e}});s.SHA256=n._createHelper(u),s.HmacSHA256=n._createHmacHelper(u)}(Math),e.SHA256}(fs.exports);var ds=ms.exports;class HashVector{static fromHash(e){const t=[];for(const s of e)for(let e=0;e<8;++e)t.push(s>>e&1?1:-1);return new HashVector(t)}static fromString(e){const t=(e=>{const{words:t,sigBytes:s}=ds(e),i=t.map(e=>e<0?e+4294967296:e),r=s/t.length;return new Uint8Array(s).map((e,t)=>i[Math.floor(t/r)]>>8*(3-t%r)&255)})(e);return HashVector.fromHash(t)}static fromWords(e){return e.map(e=>HashVector.fromString(e)).reduce((e,t)=>e.add(t),HashVector.zero)}static concat(...e){const t=e.map(e=>e.fields).flat(1);return new HashVector(t)}constructor(e=null){this.fields=e||Array(256).fill(0)}get length(){return this.fields.length}toHash(){return Uint8Array.from(Array(this.length/8).fill(0).map((e,t)=>this.fields.slice(8*t,8*(t+1)).reduce((e,t,s)=>e|(t>0?1:0)<this.fields[s]=t+e.fields[s]),this}scale(e){return this.fields=this.fields.map(t=>t*e),this}sub(e){const t=e>0?this.fields.slice(0,e):this.fields.slice(e);return new HashVector(t)}static get zero(){return new HashVector}}const ps=Array(256).fill(0).map((e,t)=>(e=>{let t=0;for(let s=e;s>0;s>>=1)s%2&&++t;return t})(t));ps.reduce((e,t,s)=>({...e,[("0"+s.toString(16)).slice(-2)]:t}),{});const gs=(e,t)=>{const s=8*e.length,i=((e,t)=>e.map((e,s)=>e^t[s]))(e,t);return(s-2*i.reduce((e,t)=>e+ps[t],0))/s},ys=e=>("0"+e.toString(16)).slice(-2),vs=(e,t=!1)=>({empty:!0,duration:e.duration,tickMap:{0:EventTerm.space({duration:e.duration,tick:0})},timeSignature:e.timeSignature,timeSigNumeric:e.timeSigNumeric,keySignature:e.keySignature,contextedTerms:e.terms.filter(e=>e instanceof ContextedTerm&&(!e.staffLevel||t)),marks:[]}),xs=e=>{const t=[].concat(...e.measures.map(e=>Object.values(e.tickMap).filter(e=>e instanceof EventTerm)));for(let e=1;ee.type===K.SlurBegin)&&i.accessories.some(e=>e.type===K.SlurEnd)){const e=s.pitches.filter(e=>i.pitches.some(t=>t.note===e.note&&t.alter===e.alter));e.length>0&&(s.tying=!0,i.tied=!0,e.forEach(e=>{e.tying=!0;i.pitches.find(t=>t.note===e.note&&t.alter===e.alter).tied=!0}),e.forEach(()=>{const e=s.accessories.findIndex(e=>e.type===K.SlurBegin);e>=0&&s.accessories.splice(e,1);const t=i.accessories.findIndex(e=>e.type===K.SlurEnd);t>=0&&i.accessories.splice(t,1)}))}}};class Spartito extends SimpleClass{constructor(e){super(),super.assign(e),this.measures.forEach(e=>e.staffGroups=this.staffGroups)}get regulated(){return this.measures.every(e=>e.regulated)}get solidMeasureCount(){return this.measures.filter(e=>!e.empty).length}get measureIndexMapping(){let e=0;return this.measures.map(t=>t.empty?null:e++)}get headBPM(){for(const e of this.measures)if(e.marks){const t=e.marks.find(e=>e instanceof TempoTerm&&e.isValid());if(t)return t.bpm}return null}get measureLayoutCode(){const e=this.measures.filter(e=>!e.empty).map((e,t)=>({index:t+1,vb:e.voltaBegin,ve:e.voltaEnd,alter:e.alternative,leftSign:"",rightSign:""}));return e.forEach((t,s)=>{if(t.vb){const i=e.slice(s+1).findIndex(e=>e.vb),r=i>=0?s+i:e.length;e.slice(s,r-1).some(e=>e.ve)&&(t.leftSign="2*[")}if(t.ve){const i=e.slice(0,s+1).reverse(),r=i.slice(1).findIndex(e=>e.ve);if(r>=0&&!i.slice(1,r+1).some(e=>e.vb))return;if(t.alter){const r=i.findIndex(e=>!e.alter);r>0&&(i[r].rightSign="]",i[r-1].leftSign="{[",t.rightSign="],",e[s+1]&&(e[s+1].rightSign="},"))}else t.rightSign="],";i.some(e=>e.vb)||(e[0].leftSign="2*[")}}),e.map(e=>e.leftSign+e.index.toString()+e.rightSign+(e.rightSign?"":",")).join(" ").replace(/,$/,"")}get qualityScore(){const e=this.measures.filter(e=>!e.empty),t=e.map(Le).map(e=>e.qualityScore).reduce((e,t)=>e+t,0);return e.length?t/e.length:null}dumpEvaluations(){const e=this.measures.filter(e=>!e.empty).map(e=>({measureIndex:e.measureIndex,...Le(e)})),t=e.map(e=>e.qualityScore).reduce((e,t)=>e+t,0);console.log("qualityScore:",t/e.length),console.table(e)}regulate(e={}){this.measures.forEach(t=>t.regulated||t.regulate(e))}cleanupRegulation(){this.measures.forEach(e=>e.voices=null)}rectifyTimeSignatures(e=new DummyLogger){const t=this.measures.map((e,t)=>({measure:e,index:t})).filter(({measure:e,index:t})=>!t||e.timeSignatureChanged).map(({index:e})=>e);t.map((e,s)=>this.measures.slice(e,se.filter(e=>e.estimatedDuration>0)).filter(e=>e.length>=3||e.some(e=>e.doubtfulTimesig)).forEach(t=>{if(t[0].patched){const s=t[0].timeSignature,i=t.slice(1).filter(e=>!e.patched&&L(e.timeSignature)!==L(s));if(i.length){const t=i[0].timeSignature;i.forEach(e=>e.basics.forEach(e=>e.timeSignature=s)),e.info("[rectifyTimeSignatures]\ttimesignator overwrote by patched head:",`${L(t)} -> ${L(s)}`,i.map(e=>e.measureIndex))}return}const s=t[0].timeSignature,i=Number.isInteger(Math.log2(s.denominator));let r=i?4:8;i&&(r=Math.max(r,t[0].timeSignature.denominator));const n=t.map(e=>Math.round(e.estimatedDuration*r/we)),a=Object.entries(n.reduce((e,t)=>(e[t]=(e[t]||0)+1,e),{})).sort((e,t)=>t[1]-e[1]),o=a[0][1],c=a.filter(([e,t])=>t>.6*o).reduce((e,t)=>Number(t[0])>Number(e[0])?t:e);if(c[1]>1){let n=Number(c[0]);if(!i||s.denominator*n!==s.numerator*r){if(i&&r!==s.denominator){const e=n*s.denominator/r;Number.isInteger(e)&&(n=e,r=s.denominator)}const a=t.filter(e=>!e.patched),o=D(n,r);a.forEach(e=>e.basics.forEach(e=>e.timeSignature=o)),e.info("[rectifyTimeSignatures]\ttimesignator overwrote by estimation:",`${L(s)} -> ${n}/${r}`,a.map(e=>e.measureIndex))}}})}makeVoiceStaves(){this.regulate();const e=Math.max(...this.measures.map(e=>e.voices.length));if(!e||!Number.isFinite(e))return null;this.measures.filter(e=>e.patched).forEach(e=>{e.events.forEach(e=>{e.tied&&e.pitches.forEach(e=>e.tied=!0)})});for(let e=0;et.staff===e)||[]).reduce((e,t)=>Math.max(e,t.x||0),-1/0);if(!Number.isFinite(r))continue;const n=[];t.contexts[e]=i.filter(e=>!(0===e.type&&e.x>r)||(n.push(e),!1)),n.length>0&&s.contexts[e]&&(n.forEach(e=>e.tick=0),s.contexts[e]=[...n,...s.contexts[e]])}}const t=this.measures.map(t=>{console.assert(t.validRegulated,"[makeVoiceStaves] measure is invalid:",t);const s={};t.events.forEach(e=>s[e.id]=e);const i=new Set(Array(t.contexts.length).fill(null).map((e,t)=>t));let r=null;if(t.barType)switch(t.barType){case"Segment":r="||";break;case"Terminal":r="|."}const n=t.voices.map(e=>{const n=e.map(e=>s[e]);n.sort((e,t)=>e.tick-t.tick);const a={};let o=0,c=null;for(const e of n)Number.isFinite(e?.tick)?(e.tick>o?a[o]=EventTerm.space({tick:o,duration:e.tick-o}):!e.grace&&e.tick{const s=t.eventMap[e];s&&(a[s.tick]=s)}))):console.warn("invalid event tick:",e);t.endEvent&&t.endEvent.graceIds&&t.endEvent.graceIds.forEach(e=>{const s=t.eventMap[e];!s||c&&s.staff!==c.staff||(a[s.tick]=s)}),ot.duration&&Number.isFinite(t.duration)&&(c.timeWarp=F(t.duration-c.tick,c.duration)),console.assert(!c||!c.timeWarp||Number.isInteger(c.timeWarp.numerator)&&Number.isInteger(c.timeWarp.denominator),"invalid time warp:",c);const l=n[0]?n[0].staff:0;i.delete(l);const u=t.basics[l],h=t.contexts[l],m=n[n.length-1],f=m?m.staff:0;return{tickMap:a,duration:t.duration,...u,contextedTerms:h,marks:[],break:t.break,pageBreak:t.pageBreak,headStaff:l,tailStaff:f,bar:r}});for(;n.lengtht.headStaff!==e),o=vs({terms:r,duration:t.duration,...s,break:t.break,pageBreak:t.pageBreak},a);o.headStaff=e,o.tailStaff=e,n.push(o)}return n});t.forEach(e=>e.forEach(e=>{const t=[];e.empty||(t.push(`s${e.headStaff}`),t.push(`s${e.tailStaff}`)),Object.values(e.tickMap).forEach(e=>{if(e instanceof EventTerm){if(t.push(`s${e.staff}`),e.stemDirection){const s=`st${e.staff}-${e.stemDirection}`;t.push(s,s)}e.grace?t.push(`gd${e.mainDuration}`):t.push(`d${e.mainDuration}`),e.rest?t.push("r-"+e.rest):e.pitches.forEach(e=>{t.push(`p1-${e.note}`),t.push(`p8-${Math.round(e.note/8)}`)})}}),e.trait=HashVector.fromWords(t)}));const s=this.staffGroups.flat(1).reduce((e,t)=>(e[t]=this.staffGroups.findIndex(e=>e.includes(t)),e),{}),i=Array(e).fill(null).map((e,t)=>({vector:HashVector.zero,index:t,weight:0,headStaff:null}));t.forEach((e,t)=>{i.sort((e,t)=>t.weight-e.weight);const r=new Set(e);i.forEach(e=>{const i=[...r];let n=i[0];if(t>0&&i.length>1){const t=i.map(t=>s[t.headStaff]===s[e.headStaff]?gs(e.vector.toHash(),t.trait.toHash()):-1);n=i[G(t)]}r.delete(n),n.voiceIndex=e.index,e.vector.scale(.4).add(n.trait),e.weight=Object.keys(n.tickMap).length,0===t&&(e.headStaff=n.headStaff)}),e.sort((e,t)=>e.voiceIndex-t.voiceIndex)});const r=Array(this.stavesCount).fill(null).map(()=>[]);i.forEach(e=>{r[e.headStaff].push(e.index)});const n=Array(this.stavesCount).fill(null).map((e,s)=>{if(!t[0])return{voices:[]};return{voices:r[s].map(e=>({mode:"relative",measures:t.map(t=>t[e])}))}});return(e=>{if(!e[0]||!e[0].voices[0])return void console.warn("empty voices:",e);const t=e[0].voices[0].measures.length;Array(t).fill(null).map((t,s)=>{for(const t of e)for(const e of t.voices)if(!e.measures[s].empty)return!1;return!0}).forEach((t,s)=>{t&&e.forEach(e=>e.voices.forEach(e=>{e.measures[s].tickMap={}}))})})(n),n.forEach(e=>e.voices.forEach(xs)),n}perform(){const e=this.makeVoiceStaves();if(!e)return null;const t=new Map,s=Array(this.stavesCount).fill(null).reduce((e,t,s)=>(e[s]=s,e),{}),i=[].concat(...e.map((e,t)=>e.voices.map(()=>s[t])));let r=!1,n=0,a=null;const o=this.measures.filter(e=>!e.empty).map(s=>{const{systemIndex:o,right:c}=s.position,l=s.measureIndex,u=[].concat(...e.map(e=>e.voices.map(e=>e.measures[l]))),h=u[0],m=n;n+=h.duration;const f=[].concat(...u.map((e,s)=>{const r=i[s],n=Object.values(e.tickMap).filter(e=>e instanceof EventTerm&&!e.rest).map(e=>{const s=Math.round(1*e.duration);console.assert(Number.isFinite(e.tick),"invalid event term tick:",e),console.assert(Number.isFinite(s),"invalid event term duration:",e),e.tick>=0&&e.noteIds.forEach(s=>{t.set(s,{system:o,measure:l,x:e.roundX,endX:c})});const i=this.staffGroups.findIndex(t=>t.includes(e.staff));return{tick:Math.round(1*e.tick),duration:s,pitches:e.pitches,noteIds:e.noteIds,part:i,staff:e.staff}});return[].concat(...n.map(e=>{const t=e.pitches.reduce((e,t)=>(e[q(t)]=t,e),{});return Object.values(t).sort((e,t)=>e.note-t.note).filter(e=>!e.tied).map((t,s)=>{const i=q(t),n=e.noteIds&&e.noteIds[s];return{tick:e.tick,pitch:i,duration:e.duration,chordPosition:{index:s,count:e.pitches.length},tied:t.tied,id:n,ids:[n],track:e.part,staff:e.staff,channel:r,subNotes:[{startTick:0,endTick:e.duration,pitch:i,velocity:127}]}})}))})),d=[];a=a||d,s.marks&&s.marks.forEach(e=>{if(e instanceof TempoTerm){const t=e.bpm;if(e.isValid()){const s=r?d:a,i=r?e.tick:0;s.push({track:0,ticks:i,data:{type:"meta",subtype:"setTempo",microsecondsPerBeat:Math.round(6e7/t)}}),r=!0}}});const p=s.basics[0];return{tick:m,duration:s.duration,notes:f,events:d,timeSignature:p&&p.timeSignature,keySignature:p&&p.keySignature}});r||o[0].events.push({track:0,ticks:0,data:{type:"meta",subtype:"setTempo",microsecondsPerBeat:5e5}});return{notation:new MetaNotation({measures:o}),tokenMap:t}}performByEstimation(){const e=new Map;let t=0;const s=this.measures.filter(e=>e.events.some(e=>e.predisposition)).map(s=>{const i=t,r=Math.round(s.estimatedDuration||$(we,s.timeSignature)),n=s.basics[0];t+=r;const{systemIndex:a,right:o}=s.position,c=s.measureIndex;return{tick:i,duration:r,notes:s.events.filter(e=>e.predisposition&&e.predisposition.fake<.5&&!e.rest).map(t=>{const s=Math.round(t.predisposition.tick);return t.noteIds.forEach(s=>{e.set(s,{system:a,measure:c,x:t.roundX,endX:o})}),t.pitches.map((e,i)=>{const r=q(e),n=t.noteIds&&t.noteIds[i],a=this.staffGroups.findIndex(e=>e.includes(t.staff));return{tick:s,pitch:r,duration:t.duration,chordPosition:{index:i,count:t.pitches.length},tied:e.tied,id:n,ids:[n],track:a,staff:t.staff,channel:0,subNotes:[{startTick:0,endTick:t.duration,pitch:r,velocity:127}]}})}).flat(1),events:[],timeSignature:n&&n.timeSignature,keySignature:n&&n.keySignature}});return{notation:new MetaNotation({measures:s}),tokenMap:e}}featureHash(){const e=this.measures.slice(0,16).map(e=>e.featureWords),t=[1,4,16].map(t=>{const s=e.slice(0,t).filter(Boolean),i=s.map(e=>e[0]).flat(1),r=s.map(e=>e[1]).flat(1),n=s.map(e=>e[2]).flat(1),[a,o,c]=[i,r,n].map(HashVector.fromWords);return HashVector.concat(a,o.sub(128),c.sub(128))});return HashVector.concat(...t).toHash()}featureHashHex(){return e=this.featureHash(),Array.from(e).map(ys).join("");var e}featureHashBigInt(){return e=this.featureHash(),Array.from(e).reduce((e,t)=>0x100n*e+BigInt(t),0n);var e}assignMeasureNumbers(){let e=null;for(const t of this.measures)(t.discard||t.events.length)&&(t.indent&&(e=null),Number.isFinite(e)||(e=t.partialDuration?0:1),t.measureNumber=e++)}}Spartito.className="Spartito";const Ss=[0,2,4,5,7,9,11],bs=e=>{let t=e%7;for(;t<0;)t+=7;return t},ks=e=>{let t=e%12;for(;t<0;)t+=12;return t},Ts={[-2]:"♭♭",[-1]:"♭",0:"♮",1:"♯",2:"𝄪"};class StaffContext{constructor(){this.logger=new DummyLogger,this.clef=-3,this.keyAlters=[],this.octaveShift=0,this.alters=[],this.timeSignature={numerator:4,denominator:4},this.timeSigNumeric=!1,this.timeSigNumSet=!1,this.timeSigDenSet=!1,this.doubtingTimesig=!0}change(e){switch(e.type){case Oe.Clef:this.clef=e.clef;break;case Oe.KeyAcc:this.keyAlters[bs(this.yToNote(e.y))]=e.alter;break;case Oe.Acc:this.alters[this.yToNote(e.y)]=e.alter;break;case Oe.OctaveShift:this.octaveShift=e.octaveShift;break;case Oe.TimeSignatureC:switch(this.timeSigNumeric=!1,e.tokenType){case"timesig-C44":this.timeSignature.numerator=4,this.timeSignature.denominator=4;break;case"timesig-C22":this.timeSignature.numerator=2,this.timeSignature.denominator=2}this.doubtingTimesig=this.partialTimeSignature;break;case Oe.TimeSignatureN:switch(this.timeSigNumeric=!0,e.y){case 1:this.timeSigDenSet?this.timeSignature.denominator=10*this.timeSignature.denominator+e.number:this.timeSignature.denominator=e.number,this.timeSigDenSet=!0;break;case-1:this.timeSigNumSet?this.timeSignature.numerator=10*this.timeSignature.numerator+e.number:this.timeSignature.numerator=e.number,this.timeSigNumSet=!0;break;default:this.logger.warn("unexpected time signature Y:",e.y)}this.doubtingTimesig=this.partialTimeSignature}}resetMeasure(){this.alters=[],this.timeSigNumSet=!1,this.timeSigDenSet=!1}resetSystem(){this.keyAlters=[]}get keySignature(){return this.keyAlters.filter(e=>Number.isInteger(e)).reduce((e,t)=>e+t,0)}get partialTimeSignature(){return!this.timeSigNumSet!=!this.timeSigDenSet}noteToY(e){return-e/2-this.clef-3.5*this.octaveShift}pitchToNote(e,{preferredAlter:t=null}={}){t||(t=this.keySignature<0?-1:1);const s=Math.floor((e-60)/12),i=ks(e),r=Ss.includes(i)?i:ks(i-t),n=Ss.indexOf(r);this.logger.assert(n>=0,"invalid preferredAlter:",e,t,r);const a=7*s+n,o=i-r,c=this.keyAlters[n]||0;return{note:a,alter:Number.isInteger(this.alters[a])?o:o===c?null:o}}pitchToY(e,{preferredAlter:t=null}={}){const{note:s,alter:i}=this.pitchToNote(e,{preferredAlter:t});return{y:this.noteToY(s),alter:i}}yToNote(e){return this.logger.assert(Number.isInteger(2*e),"invalid y:",e),2*(-e-3.5*this.octaveShift-this.clef)}alterOnNote(e){if(Number.isInteger(this.alters[e]))return this.alters[e];const t=bs(e);return Number.isInteger(this.keyAlters[t])?this.keyAlters[t]:0}noteToPitch(e){const t=Math.floor(e/7),s=bs(e),i=60+12*t+Ss[s]+this.alterOnNote(e);return Number.isFinite(i)?i:(this.logger.warn("invalid pitch value:",i,e,t,s),-1)}yToPitch(e){return this.noteToPitch(this.yToNote(e))}yToPitchName(e){const t=this.yToNote(e),s=Math.floor(t/7),i=bs(t);let r=this.alterOnNote(t);return r||Number.isInteger(this.alters[t])||(r=null),`${Ts[r]?Ts[r]:""}${"CDEFGAB"[i]}${s+4}`}}const ws=e=>e.reduce((e,t,s)=>t?e|1<{if(e.version<3){const{version:t,stavesCount:s,layoutTemplate:i,...r}=e;let n=s>1?Array(s-1).fill(",").join(""):"";2===s&&(n="{-}"),e={version:3,staffLayoutCode:n,...r}}return e.version<8&&(e.pages.forEach(e=>{e.systems.forEach(e=>{if(e.semantics){const t=e.semantics.filter(e=>e.semantic===w.vline_BarMeasure);e.semantics=[].concat(...e.staves.map(e=>{const s=e.top+e.staffY;return t.map(e=>({...e,y:e.y+s,extension:{...e.extension,y1:e.extension.y1+s,y2:e.extension.y2+s}}))}))}})}),e.version=8),e.version<9&&(e.spartito=null,e.version=9),e})(e)),this.pages=this.pages||[],this.headers=this.headers||{},this.instrumentDict=this.instrumentDict||{},this.pageSize=this.pageSize||{width:794,height:1122},this.unitSize=this.unitSize||null,this.staffLayoutCode=this.staffLayoutCode||(2===this.maxStavesCount?"{-}":Array(this.maxStavesCount).fill("").join(","))}get systems(){return[].concat(...this.pages.map(e=>e.systems))}get measureCount(){return this.systems.reduce((e,t)=>e+(t.measureCount||0),0)}get imageKeys(){return[...this.pages.map(e=>e.source?.url),...this.systems.map(e=>e.backgroundImage),...[].concat(...this.systems.map(e=>[...e.staves.map(e=>e.backgroundImage),...e.staves.map(e=>e.maskImage)].filter(Boolean)))].filter(Boolean)}get breakSystemIndices(){const e=[];let t=0;return this.pages.forEach((s,i)=>{ie.staves.length),0)}get sidBlackList(){const e=[].concat(...this.systems.map(e=>e.sidBlackList));return new Set(e)}get sidWhiteList(){const e=[].concat(...this.systems.map(e=>e.sidWhiteList));return new Set(e)}get semanticHash(){const e=[].concat(...this.systems.map(e=>[].concat(...e.staves.map(t=>t.semantics?e.qualifiedSemantics(t.semantics).map(e=>e.id):[]))));return p.default(e.join(""))}eventSystemsToTermStaves(e,t=new DummyLogger){const s=Array(this.maxStavesCount).fill(null).map((t,s)=>({rows:e.map((e,t)=>e.columns.map((i,r)=>{const n=i.rows[s];console.assert(n,"[eventSystemsToTermStaves] measure is null:",s,i.rows);const a=n.contexts;0===r&&(a.some(e=>e.type===Oe.OctaveShift)||a.unshift(new ContextedTerm({staff:s,x:0,y:0,tokenType:K.OctaveShift0,tick:0})));const o=[...n.events||[],...a].sort((e,t)=>e.x-t.x),c=0===s&&r===e.columns.length-1&&this.breakSystemIndices.includes(t);return{terms:o,duration:i.duration,pageBreak:c}}))}));return s.forEach(e=>((e,t=new DummyLogger)=>{const s=new StaffContext;s.logger=t;for(const t of e.rows){for(const e of t){const t=e.terms.find(e=>e instanceof EventTerm);let i=t?Math.min(t.tick,0):0;e.terms.forEach(e=>{if(e instanceof ContextedTerm)e.tick=i,s.change(e);else if(e instanceof EventTerm){const t=e.tick+(e.duration||0);t>i&&(i=t),e.ys&&(e.pitches=e.ys.map(e=>{const t=s.yToNote(e);return{note:t,alter:s.alterOnNote(t),octaveShift:s.octaveShift}}))}}),e.timeSignature={...s.timeSignature},e.timeSigNumeric=s.timeSigNumeric,e.doubtfulTimesig=s.doubtingTimesig||!Number.isInteger(Math.log2(e.timeSignature.denominator))||e.timeSignature.numerator<=e.timeSignature.denominator/4,e.keySignature=s.keySignature,0===e.duration&&(e.duration=we*e.timeSignature.numerator/e.timeSignature.denominator),s.resetMeasure()}s.resetSystem()}})(e,t)),s}resetPageLayout(e){const{unitSize:t=this.unitSize,pageSize:s=this.pageSize}=e,i=.5*s.width/t,r=.5*s.height/t;this.pages.forEach(e=>{const n=i-e.width/2,a=r-e.height/2;e.systems.forEach(e=>{e.left+=n,e.top+=a}),e.semantics&&e.semantics.forEach(e=>{e.x+=n,e.y+=a}),e.width=s.width/t,e.height=s.height/t,e.assemble({textAnnotations:this.textAnnotations})}),this.unitSize=t,this.pageSize=s}getMeasure(e){let t=e;for(const s of this.systems){if(te&&e.measures[t]);return{measureIndex:e,system:s,localIndex:t,left:r.left,right:r.right,measures:n}}t-=s.measureCount}return null}getRawCluster(e,t,{timeSignature:s}={}){const i=this.getMeasure(e);if(!i)return null;const{system:r,left:n,right:a}=i,o=[Ct];s&&o.push(..._t(s));const c=r.staves[0].top+r.staves[0].staffY-2;return r.staves.forEach(e=>{let s=r.qualifiedSemantics(e.semantics,t).filter(e=>e.x>n&&e.xe.semantic===w.TempoNotehead).forEach(e=>{const t=s.findIndex(t=>/^Notehead/.test(t.semantic)&&P(e,t)<.3);t>=0&&s.splice(t,1)});const i=e.top+e.staffY-c;s.forEach(t=>{const s=dt[t.semantic];if(s){let r=t.y,a=t.y;s===dt.vline_Stem&&(r=t.extension.y1,a=t.extension.y2),o.push({id:t.id,type:s,staff:e.index,x:t.x-n,y1:r+i,y2:a+i})}})}),new SemanticCluster({index:e,elements:o})}getRawClusters(e=1){return Array(this.measureCount).fill(null).map((t,s)=>this.getRawCluster(s,e))}makeSpartito(e=new DummyLogger){let t=this.systems.map(e=>e.getEvents(this.maxStavesCount));const s=this.eventSystemsToTermStaves(t,e);t.forEach((e,t)=>{e.columns.forEach((e,i)=>{e.basics=s.map(e=>{const{timeSignature:s,timeSigNumeric:r,keySignature:n,doubtfulTimesig:a}=e.rows[t][i];return{timeSignature:s,timeSigNumeric:r,keySignature:n,doubtfulTimesig:a}})})});const i=[].concat(...t.map(e=>e.columns.map(t=>{const s=t.measureIndex,{system:i,localIndex:r,left:n,right:a}=this.getMeasure(s),o=[];i.staves.forEach(e=>o[e.index]=e.top+e.staffY);const c=this.patches&&this.patches.find(e=>e.measureIndex===s),l=c?c.events:SpartitoMeasure.reorderEvents([].concat(...t.rows.map(e=>e.events)),o),u=Object.fromEntries(Object.entries(t.barTypes).map(([e,t])=>[e,t/i.staves.length])),h=0===r&&i.indent;return new SpartitoMeasure({measureIndex:s,staffMask:e.staffMask,position:{systemIndex:i.index,localIndex:r,left:n,right:a,staffYs:i.staves.map(e=>e.top+e.staffY),staffYsFull:o},duration:c?c.duration:t.duration,events:l,contexts:t.rows.map(e=>e.contexts),marks:t.marks,break:t.break,pageBreak:t.pageBreak,voltaBegin:t.voltaBegin,voltaEnd:t.voltaEnd,alternative:t.alternative,barTypes:u,indent:h,basics:c?c.basics:t.basics,matrixH:null,matrixV:null,voices:c?c.voices:null,patched:!!c})}))),r=this.staffLayout,n=r.standaloneGroups.map(e=>e.map(e=>r.staffIds.indexOf(e)));return this.spartito=new Spartito({stavesCount:this.maxStavesCount,staffGroups:n,measures:i}),this.spartito}makeMusicSheet(){const e=this.spartito||this.makeSpartito();e.regulated||console.warn("[makeMusicSheet]\tspartito not regulated.");const t=e.makeVoiceStaves(),{title:s,pageSize:i,unitSize:r,staffLayout:n,paperOptions:a,headers:o,instrumentDict:c}=this;return{title:s,pageSize:i,unitSize:r,measureLayout:this.getMeasureLayout(),staffLayout:n,paperOptions:a,headers:o,voiceStaves:t,instrumentDict:c}}findPoint(e){for(const t of this.systems)for(let s=0;st.id===e);if(i){return{point:i,pageIndex:this.pages.findIndex(e=>e.systems.includes(t)),systemIndex:t.index,staffIndex:s}}}return null}getMeasureSemantics(e,t){const s=this.systems[e];if(!s)return null;const i=t?s.measureBars[t-1]:0,r=s.measureBars[t]||s.width;return s.staves.map((e,t)=>{const s=e.top+e.staffY;return e.semantics.filter(e=>e.x>=i&&e.x{const[i,r]=Number.isFinite(e.extension?.y1)?[e.extension.y1,e.extension.y2]:[e.y,e.y];return{...e,staff:t,sy1:i+s,sy2:r+s}})}).flat(1)}makeTimewiseGraph({store:e=!1}={}){if(!this.spartito)return null;return{measures:this.spartito.measures.filter(e=>e.events.length>0).map(t=>{const s=this.getMeasureSemantics(t.position.systemIndex,t.position.localIndex),i={measureIndex:t.measureIndex,left:t.position.left,right:t.position.right,points:s};return e&&(t.graph=i),i})}}getTokenMap(){const e=new Map;return this.systems.forEach(t=>t.staves.forEach(t=>t.measures.forEach(t=>t.tokens.forEach(t=>e.set(t.id,t))))),e}assemble(e=1,t=new DummyLogger){const s=new Map;this.pages.forEach((e,t)=>e.index=t);let i=0;this.systems.forEach((r,n)=>{r.index=n,r.headMeasureIndex=i,r.prev=this.systems[n-1]||null,r.next=this.systems[n+1]||null,r.semantics&&r.semantics.length&&r.semantics.forEach(e=>((e,i,r)=>{const n=O(e,i,r);t.assert(!s.has(n),"semantic point hash conflicted:",n,r,s.get(n)),s.set(n,r)})(n,null,e)),r.assemble(e,t),i+=r.measureCount}),this.pages.forEach((e,s)=>{e.systems.forEach(e=>e.pageIndex=s),e.assemble({textAnnotations:this.textAnnotations},t)})}assembleSystem(e,t=1){this.systems.forEach((e,t)=>e.index=t);const s=e.index;e.semantics&&e.semantics.length&&(e.semantics.forEach(e=>O(s,null,e)),e.assemble(t))}markVoices(e){const t=this.getTokenMap();for(const e of t.values())e.voice=0;const s=[].concat(...e.map((e,t)=>(e.voices||[]).map((e,s)=>[t,s]))).sort(([e,t],[s,i])=>t-i||e-s).map(([e,t])=>`${e}|${t}`);e.forEach((e,i)=>(e.voices||[]).forEach((e,r)=>e.measures.forEach(e=>{const n=s.indexOf(`${i}|${r}`);Object.values(e.tickMap).filter(e=>e instanceof EventTerm).forEach(e=>{const s=e.noteIds?e.noteIds.map(e=>t.get(e)).filter(Boolean):[],i=e.accessories?e.accessories.map(e=>t.get(e.id)).filter(Boolean):[];[...s,...i].forEach(e=>e.voice|=1<e.timeWarped=!0)})})))}async replaceImageKeys(e){await Promise.all([...this.pages.map(async t=>{t.source&&(t.source.url=await e(t.source.url))}),...this.systems.map(t=>Promise.all([e(t.backgroundImage).then(e=>t.backgroundImage=e),...t.staves.map(async t=>{t.backgroundImage=await e(t.backgroundImage),t.maskImage=await e(t.maskImage)})]))])}inferenceStaffLayout(){const e=Math.max(...this.systems.map(e=>e.staves.length),0);this.staffLayoutCode=Array(e).fill("").join(",");const t=this.systems.filter(t=>t.staves.length===e&&t.bracketsAppearance);if(!t.length)return;const s=t.map(e=>{try{return it(e.bracketsAppearance).staffIds.length!==e.staves.length?null:e.bracketsAppearance}catch(e){return null}}).filter(Boolean);if(!s.length)return;const i=s.reduce((e,t)=>{const s=e[t]||0;return e[t]=s+1,e},{}),r=Math.max(...Object.values(i)),n=Object.entries(i).find(([e,t])=>t===r)[0].replace(/\{,*\}/g,e=>e.replace(/,/g,"-")),a=it(n);this.staffLayoutCode=n;let o=null;for(const t of this.systems)if(o&&t.staves.length===o.staves.length&&t.bracketsAppearance===o.bracketsAppearance)t.staffMaskChanged=null;else{if(t.staves.length{if(s.length>a.staffIds.length)return null;if(s.reduce((e,t)=>e+t,0)===t.staves.length)return ws(s);for(const i of[1,0]){const r=[...s,i],n=a.partialMaskCode(r);if(n===t.bracketsAppearance)return ws(r);if(t.bracketsAppearance.startsWith(n)){const t=e(r);if(t)return t}}return null},s=e([]);t.staffMaskChanged=o&&s===o.staffMask?null:s}o=t}}assignBackgroundForMeasure(e){e.backgroundImages=[];const t=this.systems[e.position.systemIndex];t.backgroundImage&&e.backgroundImages.push({url:t.backgroundImage,position:t.imagePosition,original:!0}),t.staves.forEach(s=>{!t.backgroundImage&&s.backgroundImage&&e.backgroundImages.push({url:s.backgroundImage.toString(),position:{...s.imagePosition,y:s.imagePosition.y+s.top},original:!0}),s.maskImage&&e.backgroundImages.push({url:s.maskImage.toString(),position:{...s.imagePosition,y:s.imagePosition.y+s.top}})})}blackoutFakeNotes(e="patched"){if(!this.spartito)return;let t=e=>!0;switch(e){case"patched":t=e=>e.patched;break;case"perfect":t=e=>e.patched||e.regulated&&Le(e).perfect}const s=this.spartito.measures.filter(t).reduce((e,t)=>{if(!t.regulated)return;const s=t.voices.flat(1);return t.events.filter(e=>!e.rest&&!e.grace&&!s.includes(e.id)).forEach(t=>t.noteIds&&e.push(...t.noteIds)),e},[]),i=new Set(s);return this.systems.forEach(e=>e.staves.forEach(t=>{const s=t.semantics.filter(e=>i.has(e.id)).map(e=>e.id);e.sidBlackList.push(...s)})),s}getMeasureLayout(){const e=this.spartito&&this.spartito.measureLayoutCode;if(e)try{return(e=>{const t=qe(e);return t?.data?b(t.data,Ve):null})(e)}catch(e){console.debug("invalid measure layout code:",e)}return null}*splitToSingleScoresGen(){this.assemble();const e=this.systems.filter(e=>e.index>0&&e.indent&&e.timeSignatureOnHead).map(e=>e.index);if(!e.length)return void(yield this.deepCopy());const t=new Score({...this,pages:[],topology:void 0,spartito:void 0,patches:void 0});this.pages.forEach(e=>{delete e.tokens,e.systems.forEach(e=>{delete e.tokens,e.staves.forEach(e=>{e.measures=[]})})});let s=0;for(const i of[...e,this.systems.length]){const e=e=>e.index>=s&&e.indext.systems.some(e)).map(t=>{const{systems:s,...i}=t;return new Page({...i,systems:s.filter(e).map(e=>new System({...e}))})}),n=t.deepCopy();n.headers.SubScoreSystem=`${s}-${i-1}`,n.headers.SubScorePage=`${r[0].index}-${r[r.length-1].index}`,n.pages=r,n.assemble(),n.inferenceStaffLayout(),s=i,yield n}}splitToSingleScores(){return[...this.splitToSingleScoresGen()]}}var Ms;Score.className="Score",function(e){e.Pass="i",e.Division="d",e.Dots="o"}(Ms||(Ms={}));const Es=["whole","half","quarter","eighth","sixteenth","thirtysecond","sixtyfourth","128th","256th"],Ns=.4/we,Is=1e-12,Cs=[void 0,"u","d"],_s=[void 0,Ne.Open,Ne.Continue,Ne.Close],Os=e=>({elements:e.elements.map(e=>({tick:e.tick,division:e.division,dots:e.dots,beam:e.beam,stemDirection:e.stemDirection,grace:e.grace,timeWarped:e.timeWarped,fullMeasure:e.fullMeasure,fake:e.fake,order:e.order,predisposition:e.predisposition}))});class BeadNode{constructor(e){Object.assign(this,e),this.children={},this.accessCount=0}nextBranch(){const e=this.possibilities.map((e,t)=>e/(this.children[t]?this.children[t].accessCount+1:1));return e.every(e=>!e)?(this.accessCount=1/0,null):G(e)}get currentElem(){return this.cluster.elements[this.elemIndex]}branchID(e){switch(this.type){case Ms.Pass:return`i_${e}`;case Ms.Division:return Es[e];case Ms.Dots:return"o"+".".repeat(e)}return""}async deduce({picker:e,logger:t,ptFactor:s},i=0){++this.accessCount;const r=this.nextBranch();if(t.debug(String.fromCodePoint(127817)+" ".repeat(i),this.branchID(r),this.accessCount>1?`[${this.accessCount}]`:""),!Number.isInteger(r)||r<0)return this.accessCount=1/0,As(this.cluster,this.currentElem.order+1,this.pretentiousness);var n;if(this.pretentiousness+=(n=this.possibilities[r],Math.min(100,-Math.log(n))),this.pretentiousness>100*s)return this.accessCount=1/0,As(this.cluster,this.currentElem.order+1,this.pretentiousness);let a=null;switch(this.type){case Ms.Pass:{const t=this.currentElem.order+1,s=this.cluster.elements[r];if(console.assert(s,"null element:",r,this.cluster.elements.length),s.type===X.EOS){if(a=As(this.cluster,t,this.pretentiousness),!a.residue||a.fatalError)return this.accessCount=1/0,a;if(this.cluster.elements[0].order=t,!this.children[r]){if(!e.quota)return a;const s=(await e.predictCluster(this.cluster,t+1)).map((e,s)=>this.cluster.elements[s].orderMath.max(Is,e));this.children[r]=new BeadNode({cluster:this.cluster,elemIndex:r,type:Ms.Division,possibilities:e,pretentiousness:this.pretentiousness})}}break;case Ms.Division:if(this.currentElem.division=r,!this.children[r]){const e=this.currentElem.predisposition.dotsVector.map(e=>Math.max(Is,e));this.children[r]=new BeadNode({cluster:this.cluster,elemIndex:this.elemIndex,type:Ms.Dots,possibilities:e,pretentiousness:this.pretentiousness})}break;case Ms.Dots:if(this.currentElem.dots=r,a=As(this.cluster,this.currentElem.order+1,this.pretentiousness),!a.residue||a.fatalError)return this.accessCount=1/0,a;if(!this.children[r]){if(!e.quota)return a;const t=this.currentElem.order+1,s=(await e.predictCluster(this.cluster,t)).map((e,s)=>this.cluster.elements[s].order{t.order>e&&(t.order=void 0)}),this.cluster.elements.forEach(e=>e.order=e.order>this.currentElem.order?void 0:e.order),this.cluster.elements[this.cluster.elements.length-1].tick=a.endTick,a}return o}}const Bs=e=>we*2**-e.division*(2-2**-e.dots),As=(e,t,s)=>{const i=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isInteger(e.order)&&e.ordere.order-t.order);const r=e.elements[e.elements.length-1];let n=0,a=0,o=0,c=1;const l=[[r.x,e.signatureDuration,e.signatureDuration]];let u=0;i.forEach(e=>{e.order>a+1&&(n=0,++c);const t=l.find(e=>e[1]>=n);if(t&&e.x>t[0]+3){const t=l.reduce((t,s)=>Math.abs(e.predisposition.tick-s[2])t[0]>e.x));l.splice(s,0,[e.x,e.tick,e.predisposition.tick]);let i=Bs(e);e.predisposition.timeWarped>.5&&(i=2*i/3),n+=i,u+=i,o=Math.max(o,n),a=e.order}),o>0&&(e.elements[e.elements.length-1].tick=o);const h=e.elements[e.elements.length-1].pivotX-e.elements[1].pivotX,m=Math.max(...i.map(e=>e.tick),o),f=[...i].sort((e,t)=>e.pivotX-t.pivotX),d=f.slice(1).map((e,t)=>{const s=f[t],i=e.pivotX-s.pivotX,r=e.tick-s.tick;if(!r)return i/h;return(4*Math.atan2(r/m,i/h)/Math.PI-1)**2}),p=Math.max(...d,0),g=i.map(e=>(e.tick-e.predisposition.tick)**2),y=g.length?Math.sqrt(g.reduce((e,t)=>e+t,0)/g.length):0,v=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&!(Number.isInteger(e.order)&&e.order.5)).length,x=p>=1||o>e.signatureDuration,S=Math.max(0,e.signatureDuration-u/c);return{tickErr:y,twist:p,residue:v,endTick:o,fatalError:x,voiceN:c,spaceDuration:S,pretentiousness:s,loss:y/we+p+.2*v+.002*c+S*Ns+.02*s}},Ps=async(e,t,s,i=200,r=0,n=1)=>{e.elements.forEach((e,t)=>e.order=t?void 0:0);const a=await t.predictCluster(e,1),o=new BeadNode({cluster:e,elemIndex:0,pretentiousness:0,type:Ms.Pass,possibilities:a});let c=null,l=null;for(t.quota=i;t.quota;){e.elements.forEach((e,t)=>e.order=t?void 0:0);const i=await o.deduce({picker:t,logger:s,ptFactor:n});if(s.debug("loss:",i),(!c||i.loss{e.elements.forEach((e,s)=>Object.assign(e,t.elements[s]))})(e,l);const u=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isInteger(e.order)),h=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&!Number.isInteger(e.order));u.length&&h.forEach(e=>{if(e.tick=void 0,e.predisposition.fakeP<.5){const t=Bs(e),s=u.filter(e=>e.tick+t<=c.endTick);if(s.length){const t=s.reduce((t,s)=>Math.abs(s.x-e.x)e.order-t.order),[...u,...h].forEach(e=>{e.grace=!Number.isFinite(e.tick)&&e.predisposition.grace,e.timeWarped=e.predisposition.timeWarped>.5,e.fullMeasure=e.predisposition.fullMeasure>.5,e.stemDirection=Cs[G(e.predisposition.stemDirectionVector)],e.beam=_s[G(e.predisposition.beamVector)]});const m=e.elements.map(e=>e.index),f=e=>m.indexOf(e);return e.matrixH=e.elements.map(()=>Array(e.elements.length).fill(0)),u.forEach((t,s)=>{const i=u[s-1];!i||i.order{const{stopLoss:s=.09,quotaMax:i=1e3,quotaFactor:r=5,ptFactor:n=1,logger:a=new DummyLogger}=t;let o=0;const c=e.createClusters();for(const l of c){const c=Math.min(i,Math.ceil(l.elements.length*r));a.info(`[measure-${e.measureIndex}]`,c);const{loss:u}=await Ps(l,t.picker,a,c,s,n);o=Math.max(o,u)}const l=[],u=[],h=[];c.forEach(t=>{const s=t.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isInteger(e.order));if(s.sort((e,t)=>e.order-t.order),!s.length)return;let i=[];l.push(i);let r=0;s.forEach(e=>{e.fullMeasure||e.grace||e.tremoloCatcher||(e.order>r+1?(i=[e.index],l.push(i)):i.push(e.index),r=e.order)});let n=s[s.length-1];const a=t.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isFinite(e.tick)&&!Number.isInteger(e.order));for(;a.length;){const e=a.findIndex(e=>e.tick>=n.tick+Bs(n));e>=0?i.push(a.splice(e,1)[0].index):(n=a.splice(0,1)[0],i=[n.index],l.push(i))}if(s.some(e=>!e.fullMeasure&&Number.isInteger(e.order))){const e=t.elements.find(e=>e.type===X.EOS);u.push(e.tick)}const o=e.eventMap,c=t.elements.reduce((e,t)=>(Number.isFinite(t.tick)&&e.add(t.tick),e),new Set),m=Array.from(c).sort((e,t)=>e-t);s.forEach(e=>{const t=o[e.index];t&&h.push({id:t.id,tick:e.tick,tickGroup:m.indexOf(e.tick),division:e.division!==t.division?e.division:void 0,dots:e.dots!==t.dots?e.dots:void 0,timeWarp:e.timeWarped?D(2,3):void 0,beam:e.beam!==t.beam?e.beam:void 0,grace:e.grace!==!!t.grace?e.grace:void 0,fullMeasure:e.fullMeasure||void 0})})});const m=Math.max(...c.map(e=>e.estimatedDuration));return{voices:l.filter(e=>e.length),duration:Math.max(...u),events:h,priority:-o,estimatedDuration:m}},Ds=async(e,{picker:t,resetSignatureForDoubtfulOnly:s})=>{const i=e.createClusters(),r=e.eventMap;for(const n of i)s&&!e.doubtfulTimesig||(n.signatureDuration=0),n.elements.forEach((e,t)=>e.order=t?void 0:0),await t.predictCluster(n,1),n.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)).forEach(e=>{r[e.index].predisposition=e.predisposition});e.estimatedDuration=Math.max(...i.map(e=>e.estimatedDuration))},Fs=async(e,t)=>Ds(e,{picker:t,resetSignatureForDoubtfulOnly:!0});var Ls=Object.freeze({__proto__:null,solveCluster:Ps,solveMeasure:Rs,estimateMeasure:Fs,glimpseMeasure:Ds}),$s=Object.freeze({__proto__:null,beadSolver:Ls,recoverJSON:b,SimpleClass:SimpleClass,EditableEvent:EditableEvent,EditableMeasure:EditableMeasure,get EventElementType(){return X},EventCluster:EventCluster,EventClusterSet:EventClusterSet,get PageLayoutMethod(){return Re},get TextType(){return De},evaluateMeasure:Le,PatchMeasure:PatchMeasure,VERSION:14,Score:Score,Page:Page,System:System,Staff:Staff,Measure:Measure,SemanticGraph:SemanticGraph,get SemanticType(){return w},glyphSemanticMapping:{"rests.1":"Rest1","rests.0o":"Rest0","rests.1o":"Rest1","rests.M1":"RestM1","rests.2":"Rest2","rests.3":"Rest3","rests.4":"Rest4","rests.5":"Rest5","rests.6":"Rest6","accidentals.sharp":"AccSharp","accidentals.doublesharp":"AccDoublesharp","accidentals.natural":"AccNatural","accidentals.flat":"AccFlat","accidentals.flatflat":"AccFlatflat","dots.dot":"Dot","scripts.ufermata":"ScriptFermata","scripts.dfermata":"ScriptFermata","scripts.ushortfermata":"ScriptShortFermata","scripts.dshortfermata":"ScriptShortFermata","scripts.staccato":"ScriptStaccato","scripts.ustaccatissimo":"ScriptStaccatissimo","scripts.dstaccatissimo":"ScriptStaccatissimo","scripts.turn":"ScriptTurn","scripts.trill":"ScriptTrill","scripts.segno":"ScriptSegno","scripts.coda":"ScriptCoda","scripts.arpeggio":"ScriptArpeggio","scripts.prall":"ScriptPrall","scripts.mordent":"ScriptMordent","scripts.umarcato":"ScriptMarcato","scripts.dmarcato":"ScriptMarcato","scripts.uportato":"ScriptPortato","scripts.dportato":"ScriptPortato","scripts.tenuto":"ScriptTenuto","scripts.sforzato":"ScriptSforzato","clefs.C":"ClefC","clefs.F":"ClefF","clefs.G":"ClefG","clefs.F_change":"ClefF","clefs.G_change":"ClefG","timesig.C44":"TimesigC44","timesig.C22":"TimesigC22","pedal.*":"PedalStar","pedal.Ped":"PedalPed","noteheads.s0":"NoteheadS0","noteheads.s1":"NoteheadS1","noteheads.s2":"NoteheadS2",f:"f",m:"m",p:"p",r:"r",s:"s",z:"z"},semanticPriorities:{ClefG:0,ClefF:0,TimesigFour:0,TimesigThree:0,TimesigTwo:0,NoteheadS0:0,NoteheadS1:0,NoteheadS2:0,Dot:0,vline_BarMeasure:0,vline_Stem:0,Flag3:0,TimesigC44:1,TimesigC22:1,TimesigEight:1,TimesigSix:1,AccNatural:1,AccSharp:1,AccFlat:1,KeyAcc:1,Rest0:1,Rest1:1,Rest2:1,Rest3:1,Rest4:1,OctaveShift8:1,OctaveShift0:1,AccDoublesharp:2,AccFlatflat:2,TimesigOne:2,TimesigNine:2,Rest5:2,Rest6:2,SlurBegin:2,SlurEnd:2,VoltaLeft:2,VoltaRight:2,vline_BarTerminal:2,vline_BarSegment:2,TempoNotehead:2,GraceNotehead:2,SignLined:2,SignInterval:2,BeamLeft:2,BeamRight:2,BeamContinue:2,TremoloLeft:2,TremoloRight:2,TremoloMiddle:2,StemTip:2,StemHead:2,f:3,p:3,m:3,ScriptFermata:3,ScriptSforzato:3,ScriptStaccato:3,ScriptStaccatissimo:3,ScriptTurn:3,ScriptTrill:3,ScriptSegno:3,ScriptCoda:3,ScriptArpeggio:3,ScriptPrall:3,ScriptMordent:3,ScriptTenuto:3,PedalStar:3,PedalPed:3,TimesigFive:3,TimesigSeven:3,TimesigZero:3,One:3,Two:3,Three:3,Four:3,Five:3,rect_Text:3,rect_Lyric:3,CrescendoBegin:3,CrescendoEnd:3,DecrescendoBegin:3,DecrescendoEnd:3,RestM1:4,ClefC:4,ScriptShortFermata:4,ScriptMarcato:4,ScriptPortato:4,s:4,r:4,z:4,Zero:4,Six:4,Seven:4,Eight:4,Nine:4},NOTEHEAD_WIDTHS:M,glyphCenters:E,ONE_D_SEMANTICS:["OctaveShift8va","OctaveShift8vb","OctaveShift8","OctaveShift0","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","vline_BarMeasure","vline_BarTerminal","vline_BarSegment"],SYSTEM_SEMANTIC_TYPES:N,CONFLICTION_GROUPS:C,STAMP_SEMANTICS:_,STAMP_RECTS:{ClefG:[-.0625,-1.125,3.6,8.6],ClefF:[.25,.5625,3.6,3.8],ClefC:[.25,0,3.25,4.5],NoteheadS0:[.0625,0,2.55,1.4],NoteheadS1:[.0625,0,1.8,1.4],NoteheadS2:[.0625,-.0625,1.65,1.35],Dot:[.25,0,.6,.6],Rest0:[0,-.75,3.25,.9],Rest1:[0,-.25,3.25,.9],Rest2:[-.0625,-.1875,1.6,3.375],Rest3:[0,.0625,1.2,2.25],Rest4:[.0625,.5625,1.65,3.375],Rest5:[.0625,.0625,1.95,4.375],Rest6:[.0625,.5625,1.95,5.375],RestM1:[-.4375,-1.5,.75,1.2],AccNatural:[0,0,.9,3.5],AccSharp:[0,0,1.5,3.5],AccDoublesharp:[0,0,1.5,1.5],AccFlat:[0,-.5625,1.2,3.125],AccFlatflat:[.1875,-.5625,1.95,3.125],TimesigC44:[-.0625,0,2.25,2.3],TimesigC22:[-.0625,0,2.25,3.2],TimesigZero:[0,0,1.8,2.2],TimesigOne:[-.125,0,1.5,2.2],TimesigTwo:[0,0,2.2,2.2],TimesigThree:[-.0625,0,1.9,2.4],TimesigFour:[.0625,0,1.95,2.2],TimesigFive:[0,0,1.8,2.3],TimesigSix:[0,0,2,2.4],TimesigSeven:[0,0,1.8,2.2],TimesigEight:[0,0,1.9,2.2],TimesigNine:[0,0,1.9,2.2],One:[-.0625,0,.75,1.6],Two:[0,0,1.2,1.6],Three:[0,0,1.2,1.6],Four:[0,0,1.2,1.6],Five:[0,0,1.2,1.6],OctaveShift8:[2.125,-.1875,4.75,3.6],OctaveShift0:[-.4,0,1.8,4.2],f:[.0625,-.125,2.55,3],p:[-.0625,.25,2.55,2.1],m:[-.125,-.0625,2.4,1.35],n:[-.3125,-.0625,1.95,1.35],r:[0,-.125,1.5,1.5],s:[0,-.0625,1.2,1.35],z:[.0625,0,1.35,1.5],ScriptFermata:[0,0,3.25,3.9],ScriptShortFermata:[0,0,2.4,4.95],ScriptSforzato:[-.0625,0,2.5,1.2],ScriptStaccato:[0,-.0625,.6,.45],ScriptStaccatissimo:[0,0,1.2,2.6],ScriptTurn:[0,0,2.7,1.5],ScriptTrill:[-.125,-.5,3,2.7],ScriptSegno:[0,0,2.4,3.5],ScriptCoda:[0,0,2.7,3.25],ScriptArpeggio:[-.0625,0,1.05,1.8],ScriptPrall:[0,0,2.4,1.2],ScriptMordent:[0,0,2.4,1.5],ScriptMarcato:[0,0,1.2,2.475],ScriptTenuto:[0,-.0625,1.5,.15],ScriptPortato:[0,0,1.5,1.65],PedalStar:[0,0,3.2,3.2],PedalPed:[0,-.25,4.7,2.4]},hashSemanticPoint:O,hashPageSemanticPoint:B,get SemanticElementType(){return dt},SemanticCluster:SemanticCluster,SemanticClusterSet:class SemanticClusterSet{constructor(e){if(e&&(this.clusters=e.clusters,e.vocab)){const t=e.vocab.map((e,t)=>[t,dt[e]]).filter(([e,t])=>e!==t).reduce((e,[t,s])=>(e[t]=s,e),{});this.clusters.forEach(e=>e.elements.forEach(e=>{Number.isFinite(t[e.type])&&(e.type=t[e.type])}))}}toJSON(){return{__prototype:"SemanticClusterSet",vocab:Object.entries(dt).filter(e=>Number.isFinite(e[1])).map(e=>e[0]),clusters:this.clusters.map(e=>e.toJSON())}}},ELEMENT_TOKEN_NAMES:vt,NOTEHEAD_ELEMENT_TYPES:St,NOTE_ELEMENT_TYPES:Tt,BOS_ELEMENT:Ct,fractionToElems:_t,expandMatrixByMasks:Bt,expandMatrixByMaskTriu:At,matrixFromGroups:Pt,emptyVoiceFromStaffMeasure:vs,SpartitoMeasure:SpartitoMeasure,Spartito:Spartito,mod7:bs,Term:Term,EventTerm:EventTerm,ContextedTerm:ContextedTerm,MarkTerm:MarkTerm,TempoTerm:TempoTerm,GlyphTerm:GlyphTerm,TextTerm:TextTerm,LyricTerm:LyricTerm,CommandTerm:CommandTerm,ChordmodeTerm:ChordmodeTerm,get ContextType(){return Oe},get GraceType(){return Ee},get GlissandoStyle(){return Ce},get ArpeggioStyle(){return _e},get AccessoryDirection(){return Me},WHOLE_DURATION:we,get StemBeam(){return Ne},get TremoloLink(){return Ie},TokenTypes:J,TokenClefs:Q,TokenTimesigs:ee,TokenTimesigsC:te,TokenTimesigsN:se,TokenOctshifts:ie,TokenNumbers:re,TokenAccidentals:ne,TokenNoteheads:ae,TokenBareNoteheads:oe,TokenDirectionalNoteheads:ce,TokenRests:le,TokenFlags:ue,TokenVolta:he,TokenDynamics:me,TokenScripts:fe,TokenPedals:de,TokenDots:pe,TokenArcs:ge,TokenBeams:ye,TokenWedges:ve,TokenAccessories:xe,TokenDirectionless:Se,TokenGlyphs:be,get TokenType(){return K},Token:Token,TextToken:TextToken,TOKEN_Y_ROUND:ke,TOKEN_Y_FIXED:Te});const js=[K.ClefG,K.ClefF,K.ClefC],Hs=e=>{let t=null;switch(e.tokenType){case K.ClefG:t="Treble";break;case K.ClefF:t="Bass";break;case K.ClefC:t=-1===e.y?"Tenor":"Alto"}return t};var Vs,zs={exports:{}},qs="object"==typeof Reflect?Reflect:null,Gs=qs&&"function"==typeof qs.apply?qs.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)};Vs=qs&&"function"==typeof qs.ownKeys?qs.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var Ws=Number.isNaN||function(e){return e!=e};function Us(){Us.init.call(this)}zs.exports=Us,zs.exports.once=function(e,t){return new Promise(function(s,i){function r(s){e.removeListener(t,n),i(s)}function n(){"function"==typeof e.removeListener&&e.removeListener("error",r),s([].slice.call(arguments))}ii(e,t,n,{once:!0}),"error"!==t&&function(e,t,s){"function"==typeof e.on&&ii(e,"error",t,s)}(e,r,{once:!0})})},Us.EventEmitter=Us,Us.prototype._events=void 0,Us.prototype._eventsCount=0,Us.prototype._maxListeners=void 0;var Ys=10;function Xs(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function Ks(e){return void 0===e._maxListeners?Us.defaultMaxListeners:e._maxListeners}function Zs(e,t,s,i){var r,n,a,o;if(Xs(s),void 0===(n=e._events)?(n=e._events=Object.create(null),e._eventsCount=0):(void 0!==n.newListener&&(e.emit("newListener",t,s.listener?s.listener:s),n=e._events),a=n[t]),void 0===a)a=n[t]=s,++e._eventsCount;else if("function"==typeof a?a=n[t]=i?[s,a]:[a,s]:i?a.unshift(s):a.push(s),(r=Ks(e))>0&&a.length>r&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,o=c,console&&console.warn&&console.warn(o)}return e}function Js(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Qs(e,t,s){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:s},r=Js.bind(i);return r.listener=s,i.wrapFn=r,r}function ei(e,t,s){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"==typeof r?s?[r.listener||r]:[r]:s?function(e){for(var t=new Array(e.length),s=0;s{s=e,i=r,t>=0&&setTimeout(i,t,"timeout")}),s,i]}Object.defineProperty(Us,"defaultMaxListeners",{enumerable:!0,get:function(){return Ys},set:function(e){if("number"!=typeof e||e<0||Ws(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");Ys=e}}),Us.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},Us.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||Ws(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},Us.prototype.getMaxListeners=function(){return Ks(this)},Us.prototype.emit=function(e){for(var t=[],s=1;s0&&(n=t[0]),n instanceof Error)throw n;var a=new Error("Unhandled error."+(n?" ("+n.message+")":""));throw a.context=n,a}var o=r[e];if(void 0===o)return!1;if("function"==typeof o)Gs(o,this,t);else{var c=o.length,l=si(o,c);for(s=0;s=0;n--)if(s[n]===t||s[n].listener===t){a=s[n].listener,r=n;break}if(r<0)return this;0===r?s.shift():function(e,t){for(;t+1=0;i--)this.removeListener(e,t[i]);return this},Us.prototype.listeners=function(e){return ei(this,e,!0)},Us.prototype.rawListeners=function(e){return ei(this,e,!1)},Us.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):ti.call(e,t)},Us.prototype.listenerCount=ti,Us.prototype.eventNames=function(){return this._eventsCount>0?Vs(this._events):[]};class AsyncQueue extends zs.exports.EventEmitter{constructor(){super(),this.working=!1,this.working=!1,this.tasks=[],process.nextTick(()=>{this.emit("idle")})}async _digest(e){this.working=!0;const[t,s,i,r]=e;await t(s).then(i,r),this.tasks.length>0?await this._digest(this.tasks.shift()):(this.working=!1,this.emit("idle"))}addTask(e,{timeout:t=6e5}={}){const[s,i,r]=ri({timeout:t});return this.working?this.tasks.push([...e,i,r]):this._digest([...e,i,r]),s}}class ZeroClient{constructor(e=console){this.queue=new AsyncQueue,this.logger=e}bind(e){e&&(this.url=e),this.socket=new n.Request({sendTimeout:15e3,receiveTimeout:3e5}),this.socket.connect(this.url)}__request(e){let t=0;const s=async e=>{try{return this.socket.closed&&this.bind(),await this.socket.send(r.pack(e)).then(()=>this.socket.receive())}catch(i){if(t<2)return t++,console.log(`请求失败,${i.stack}`),console.error(`3s后重试第${t}次`),this.socket.close(),await new Promise(e=>setTimeout(e,3e3)),s(e);throw i}};return s(e)}async request(e,t=null,s=null){const[i,n]=Array.isArray(t)?[t,s]:[void 0,t],a={method:e};return i&&(a.args=i),n&&(a.kwargs=n),this.queue.addTask([async e=>{const[t]=await this.__request(e),s=r.unpack(t);return 0===s.code?s.data:Promise.reject(s.msg)},a])}}class PyProcessor extends ZeroClient{constructor(e,t={},s=console){super(s),this.retryCount=0,this.retryDelay=3e3,this.scriptPath=e,this.options=t}async bind(e){const t=e||await a.getPortPromise({port:12022,stopPort:12122}),s=i.defaultsDeep({args:[...this.options.args||[],"-p",`${t}`]},this.options);this.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`),this.pyShell=new o.PythonShell(this.scriptPath,s),this.pyShell.stdout.on("data",e=>this.logger.info(e)),this.pyShell.on("pythonError",e=>this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`,e)),this.pyShell.on("stderr",e=>this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`,e)),this.pyShell.on("error",e=>this.logger.error(`[python-shell]: ${this.scriptPath} error:`,e)),this.pyShell.on("close",()=>{this.retryCount<5&&(this.retryCount++,this.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`),setTimeout(()=>{this.bind()},this.retryDelay))}),super.bind(`tcp://127.0.0.1:${t}`)}}var ni={},ai=function(e){return e instanceof Buffer},oi={exports:{}},ci={exports:{}};"function"==typeof Object.create?ci.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:ci.exports=function(e,t){e.super_=t;var s=function(){};s.prototype=t.prototype,e.prototype=new s,e.prototype.constructor=e};try{var li=require("util");if("function"!=typeof li.inherits)throw"";oi.exports=li.inherits}catch(e){oi.exports=ci.exports}!function(e){var t=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),s={},i=0;i=a)return e;switch(e){case"%s":return String(r[i++]);case"%d":return Number(r[i++]);case"%j":try{return JSON.stringify(r[i++])}catch(e){return"[Circular]"}default:return e}}),c=r[i];i=3&&(i.depth=arguments[2]),arguments.length>=4&&(i.colors=arguments[3]),m(s)?i.showHidden=s:s&&e._extend(i,s),g(i.showHidden)&&(i.showHidden=!1),g(i.depth)&&(i.depth=2),g(i.colors)&&(i.colors=!1),g(i.customInspect)&&(i.customInspect=!0),i.colors&&(i.stylize=a),c(i,t,i.depth)}function a(e,t){var s=n.styles[t];return s?"["+n.colors[s][0]+"m"+e+"["+n.colors[s][1]+"m":e}function o(e,t){return e}function c(t,s,i){if(t.customInspect&&s&&b(s.inspect)&&s.inspect!==e.inspect&&(!s.constructor||s.constructor.prototype!==s)){var r=s.inspect(i,t);return p(r)||(r=c(t,r,i)),r}var n=function(e,t){if(g(t))return e.stylize("undefined","undefined");if(p(t)){var s="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(s,"string")}if(d(t))return e.stylize(""+t,"number");if(m(t))return e.stylize(""+t,"boolean");if(f(t))return e.stylize("null","null")}(t,s);if(n)return n;var a=Object.keys(s),o=function(e){var t={};return e.forEach(function(e,s){t[e]=!0}),t}(a);if(t.showHidden&&(a=Object.getOwnPropertyNames(s)),S(s)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return l(s);if(0===a.length){if(b(s)){var v=s.name?": "+s.name:"";return t.stylize("[Function"+v+"]","special")}if(y(s))return t.stylize(RegExp.prototype.toString.call(s),"regexp");if(x(s))return t.stylize(Date.prototype.toString.call(s),"date");if(S(s))return l(s)}var k,T="",w=!1,E=["{","}"];(h(s)&&(w=!0,E=["[","]"]),b(s))&&(T=" [Function"+(s.name?": "+s.name:"")+"]");return y(s)&&(T=" "+RegExp.prototype.toString.call(s)),x(s)&&(T=" "+Date.prototype.toUTCString.call(s)),S(s)&&(T=" "+l(s)),0!==a.length||w&&0!=s.length?i<0?y(s)?t.stylize(RegExp.prototype.toString.call(s),"regexp"):t.stylize("[Object]","special"):(t.seen.push(s),k=w?function(e,t,s,i,r){for(var n=[],a=0,o=t.length;a60)return s[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+s[1];return s[0]+t+" "+e.join(", ")+" "+s[1]}(k,T,E)):E[0]+T+E[1]}function l(e){return"["+Error.prototype.toString.call(e)+"]"}function u(e,t,s,i,r,n){var a,o,l;if((l=Object.getOwnPropertyDescriptor(t,r)||{value:t[r]}).get?o=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(o=e.stylize("[Setter]","special")),M(i,r)||(a="["+r+"]"),o||(e.seen.indexOf(l.value)<0?(o=f(s)?c(e,l.value,null):c(e,l.value,s-1)).indexOf("\n")>-1&&(o=n?o.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+o.split("\n").map(function(e){return" "+e}).join("\n")):o=e.stylize("[Circular]","special")),g(a)){if(n&&r.match(/^\d+$/))return o;(a=JSON.stringify(""+r)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+o}function h(e){return Array.isArray(e)}function m(e){return"boolean"==typeof e}function f(e){return null===e}function d(e){return"number"==typeof e}function p(e){return"string"==typeof e}function g(e){return void 0===e}function y(e){return v(e)&&"[object RegExp]"===k(e)}function v(e){return"object"==typeof e&&null!==e}function x(e){return v(e)&&"[object Date]"===k(e)}function S(e){return v(e)&&("[object Error]"===k(e)||e instanceof Error)}function b(e){return"function"==typeof e}function k(e){return Object.prototype.toString.call(e)}function T(e){return e<10?"0"+e.toString(10):e.toString(10)}e.debuglog=function(t){if(g(i)&&(i=process.env.NODE_DEBUG||""),t=t.toUpperCase(),!r[t])if(new RegExp("\\b"+t+"\\b","i").test(i)){var s=process.pid;r[t]=function(){var i=e.format.apply(e,arguments);console.error("%s %d: %s",t,s,i)}}else r[t]=function(){};return r[t]},e.inspect=n,n.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},n.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.isArray=h,e.isBoolean=m,e.isNull=f,e.isNullOrUndefined=function(e){return null==e},e.isNumber=d,e.isString=p,e.isSymbol=function(e){return"symbol"==typeof e},e.isUndefined=g,e.isRegExp=y,e.isObject=v,e.isDate=x,e.isError=S,e.isFunction=b,e.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},e.isBuffer=ai;var w=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function M(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.log=function(){var t,s;console.log("%s - %s",(t=new Date,s=[T(t.getHours()),T(t.getMinutes()),T(t.getSeconds())].join(":"),[t.getDate(),w[t.getMonth()],s].join(" ")),e.format.apply(e,arguments))},e.inherits=oi.exports,e._extend=function(e,t){if(!t||!v(t))return e;for(var s=Object.keys(t),i=s.length;i--;)e[s[i]]=t[s[i]];return e};var E="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function N(e,t){if(!e){var s=new Error("Promise was rejected with a falsy value");s.reason=e,e=s}return t(e)}e.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(E&&e[E]){var s;if("function"!=typeof(s=e[E]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(s,E,{value:s,enumerable:!1,writable:!1,configurable:!0}),s}function s(){for(var t,s,i=new Promise(function(e,i){t=e,s=i}),r=[],n=0;n>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&mi.rotl(e,8)|4278255360&mi.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],s=0,i=0;s>>5]|=e[s]<<24-i%32;return t},wordsToBytes:function(e){for(var t=[],s=0;s<32*e.length;s+=8)t.push(e[s>>>5]>>>24-s%32&255);return t},bytesToHex:function(e){for(var t=[],s=0;s>>4).toString(16)),t.push((15&e[s]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],s=0;s>>6*(3-r)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],s=0,i=0;s>>6-2*i);return t}},di.exports=mi;var pi={utf8:{stringToBytes:function(e){return pi.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(pi.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],s=0;s>5]|=128<<24-r%32,i[15+(r+64>>>9<<4)]=r;for(var h=0;h>>31}var x=(a<<5|a>>>27)+u+(n[y]>>>0)+(y<20?1518500249+(o&c|~o&l):y<40?1859775393+(o^c^l):y<60?(o&c|o&l|c&l)-1894007588:(o^c^l)-899497514);u=l,l=c,c=o<<30|o>>>2,o=a,a=x}a+=m,o+=f,c+=d,l+=p,u+=g}return[a,o,c,l,u]}(i));return r&&r.asBytes?n:r&&r.asString?s.bytesToString(n):e.bytesToHex(n)};i._blocksize=16,i._digestsize=20,fi.exports=i}();var yi=fi.exports;const vi=({page:e,backgroundImage:t,detection:s,imageSize:i,position:r})=>{const n=(s.phi2-s.phi1)/s.interval,a=i.height/s.interval,o=e.systems[e.systems.length-1],c=r?r.y:(o?o.top+o.height:0)+4,l=r?r.x:4,u=[0,...Array(s.middleRhos.length-1).fill(0).map((e,t)=>(s.middleRhos[t]+s.middleRhos[t+1])/2/s.interval)],h=[n],m=u.map((e,t)=>new Staff({top:e,height:(u[t+1]||a)-e,staffY:s.middleRhos[t]/s.interval-e,measureBars:h})),f={x:-s.phi1/s.interval,y:0,width:i.width/s.interval,height:i.height/s.interval};return new System({staves:m,left:l,top:c,width:n,backgroundImage:t,imagePosition:f,measureBars:h})};async function xi(e,{format:t="webp",maxHeight:s=1080,quality:i=80}={}){let r=await(async e=>"string"==typeof e?/^https?:\/\//.test(e)?(await S.default(e,{responseType:"buffer",decompress:!0,https:{rejectUnauthorized:!1}})).body:/^data:image\//.test(e)?Buffer.from(e.split(",")[1],"base64"):Buffer.from(e):e)(e);const n=await new Promise(e=>{x.default(r).resize({width:s,height:s,fit:"inside",withoutEnlargement:!0}).toFormat(t,{quality:i}).toBuffer((t,s)=>{e(s)})});return{buffer:n,filename:`${v.default.ArrayBuffer.hash(n)}.${t}`}}globalThis.OffscreenCanvas=globalThis.OffscreenCanvas||c.Canvas,globalThis.Image=globalThis.Image||c.Image,globalThis.btoa=globalThis.btoa||(e=>Buffer.from(e,"binary").toString("base64"));const Si=32,bi={viewportHeight:256,viewportUnit:8},ki=192,Ti=8,wi={viewportHeight:192,viewportUnit:8};const Mi=e=>Promise.all(e.map(e=>e())),Ei=async(e,t,{paddingLeft:s=0,scaling:i=1,spec:r})=>{if(!e||!e.backgroundImage)return null;const n=e.staves[t];if(!n)return null;const a=r.viewportHeight/r.viewportUnit/2,o=e.imagePosition.width*r.viewportUnit,l=e.imagePosition.height*r.viewportUnit,u=e.imagePosition.x*r.viewportUnit+s,h=(e.imagePosition.y-(n.top+n.staffY-a))*r.viewportUnit,m=new c.Canvas(Math.round(o+u)*i,r.viewportHeight*i),f=m.getContext("2d");return f.fillStyle="white",f.fillRect(0,0,m.width,m.height),f.drawImage(await c.loadImage(e.backgroundImage),u*i,h*i,o*i,l*i),m};async function Ni({system:e,staff:t,staffIndex:s}){const i=await Ei(e,s,{paddingLeft:Si,spec:wi});t.backgroundImage=i.toBufferSync("png"),t.imagePosition={x:-32/wi.viewportUnit,y:t.staffY-wi.viewportHeight/2/wi.viewportUnit,width:i.width/wi.viewportUnit,height:i.height/wi.viewportUnit}}async function Ii({system:e,staff:t,staffIndex:s,gaugeImage:i,pyClients:r}){const n=(await Ei(e,s,{paddingLeft:Si,spec:bi,scaling:2})).toBufferSync("png"),a=(e.middleY-(t.top+t.staffY))*bi.viewportUnit+bi.viewportHeight/2,{buffer:o,size:c}=await r.predictScoreImages("gaugeRenderer",[n,i,a]);t.backgroundImage=o,t.imagePosition={x:-32/bi.viewportUnit,y:t.staffY-c.height/2/bi.viewportUnit,width:c.width/bi.viewportUnit,height:c.height/bi.viewportUnit},t.maskImage=null}async function Ci({staff:e,staffIndex:t,maskImage:s}){const i=await c.loadImage(s);e.maskImage=s,e.imagePosition={x:-32/Ti,y:e.staffY-ki/2/Ti,width:i.width/Ti,height:i.height/Ti}}async function _i({score:e,staffIndex:t,system:s,staff:i,graph:r}){r.offset(-32/wi.viewportUnit,0),s.assignSemantics(t,r),i.assignSemantics(r),i.clearPredictedTokens(),e.assembleSystem(s,e.settings?.semanticConfidenceThreshold||1)}function Oi(e,t){[[e.source,"url"],...e.systems.map(e=>[[e,"backgroundImage"],...e.staves.map(e=>[[e,"backgroundImage"],[e,"maskImage"]]).flat()]).flat()].map(([e,s])=>{e[s]=t(e[s])})}class OMRProgress{constructor(e){this.state={},this.onChange=e}setTotal(e,t){this.state[e]=this.state[e]||{total:t,finished:0}}increase(e,t=1){(this.state[e]||{finished:0}).finished+=t,this.onChange(this.state)}}const Bi=new l.WeakLRUCache,Ai={get:async e=>Bi.getValue(e),async set(e,t){Bi.setValue(e,t)}},Pi=async e=>{if(e instanceof Buffer||"string"==typeof e&&(/^https?:\/\//.test(e)||/^data:image\//.test(e))){return`data:image/webp;base64,${(await xi(e)).buffer.toString("base64")}`}return e},Ri=e=>{const t=Math.random();let s=0;for(let i=0;it)return i;return e.length-1},Di=(e,t=.9)=>{const s=e.map(e=>Math.log(e)*t).map(Math.exp),i=s.reduce((e,t)=>e+t,0);return s.map(e=>e/i)},Fi=e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return e;const t=e.predisposition?.divisionVector?Di(e.predisposition.divisionVector):null,s=e.predisposition?.dotsVector?Di(e.predisposition.dotsVector):null;return new EventTerm({...e,predisposition:{...e.predisposition,divisionVector:t,dotsVector:s}})};class MeasureRectification{constructor(e){Object.assign(this,e)}toString(){return this.events.map(e=>{if(!e)return"";const{division:t="",dots:s=""}=e;return`${t}|${s}`}).join(",")}static default(e){return new MeasureRectification({events:e.map(e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return null;const t=e.predisposition.divisionVector?e.division:void 0,s=e.predisposition.dotsVector?e.dots:void 0;return{id:e.id,division:t,dots:s}})})}static roll(e){return new MeasureRectification({events:e.map(e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return null;let t,s;return e.predisposition.divisionVector&&(t=Ri(e.predisposition.divisionVector)),e.predisposition.dotsVector&&(s=Ri(e.predisposition.dotsVector)),{id:e.id,division:t,dots:s}})})}}const Li=new l.WeakLRUCache,$i={get:async e=>Li.getValue(e),async set(e,t){Li.setValue(e,t)},batchGet:async e=>e.map(e=>Li.getValue(e))};var ji;!function(e){e[e.ErrorOnly=0]="ErrorOnly",e[e.NotFine=1]="NotFine",e[e.Imperfect=2]="Imperfect"}(ji||(ji={}));const Hi=async(e,t,s,i,r=ji.NotFine,n=0,a)=>{const o=e.filter(({evaluation:e})=>!e||((e,t)=>{switch(t){case ji.ErrorOnly:return e.error;case ji.Imperfect:return!e.perfect}return!e.fine})(e,r));s?.write(".".repeat(o.length)),s?.write("\b".repeat(o.length));const c=o.length;let l=0;for(const e of o){const s=e.current.deepCopy();s.staffGroups=e.current.staffGroups;const r=await Rs(s,{picker:e.picker,...i});s.applySolution(r);const o=Le(s),u=!e.evaluation||o.fine>e.evaluation.fine||o.qualityScore>e.evaluation.qualityScore&&o.fine===e.evaluation.fine;u&&(e.evaluation=o,Object.assign(e.current,s)),t(e.current,o,u),l++,a?.(e.current,o,u,{pass:n,remaining:c-l,total:c})}return o.length&&s?.write("\n"),o.length};globalThis.btoa=globalThis.btoa||(e=>Buffer.from(e,"binary").toString("base64"));const Vi=parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS||"30"),zi=parseInt(process.env.BASE_QUOTA_FACTOR||"40"),qi=parseInt(process.env.RECTIFICATION_QUOTA_FACTOR||"80"),Gi=(e,t,s)=>Math.min(Math.ceil((e+1)*t*Math.log(e+2)),Math.ceil(s*Math.min(1,(24/(e+1))**2)));async function Wi(e,{solver:t,quotaMax:s=1e3,quotaFactor:i=zi,solutionStore:r=$i,ignoreCache:n=!1,logger:a}={}){let o=0,c=0;return a?.info(`[solveMeasures] begin, measure total: ${e.length}.`),await Promise.all(e.map(async l=>{if(!n){const e=await r.get(l.regulationHash);if(e)return l.applySolution(e),void++o}const u=Gi(l.events.length,i,s);await l.regulate({policy:"equations",quota:u,solver:t});const h=Le(l);h.error||r.set(l.regulationHash0,{...l.asSolution(),priority:-l?.solutionStat?.loss}),h.perfect&&++c,a?.info(`[solveMeasures] measure[${l.measureIndex}/${e.length}] regulated: ${h.perfect?"solved":h.error?"error":"issue"}, ${l.regulationHash}`)})),a?.info(`[solveMeasures] ${o}/${e.length} cache hit, ${c} solved.`),{cached:o,computed:e.length-o,solved:c}}const Ui=async(e,{solver:t,quotaMax:s=4e3})=>{let i=Le(e),r=e.asSolution();const n=Gi(e.events.length,qi,s);let a=0;for(const s of function*(e){const t=new Set,s=MeasureRectification.default(e.events);t.add(s.toString()),yield s;let i=0,r=e.events;for(;i<100;){i&&i%10==0&&(r=r.map(Fi));const e=MeasureRectification.roll(r),s=e.toString();t.has(s)?++i:(i=0,t.add(s),yield e)}}(e)){const o=await Pe.regulateMeasureWithRectification(e,s,{solver:t,quota:n}),c=e.deepCopy();c.applySolution(o);const l=Le(c);if((l.perfect>i.perfect||l.error=i.perfect&&o.priority>r.priority)&&(i=l,r=o),l.perfect)break;if(++a,a>Vi)break}return r};const Yi=async(e,{solver:t,solutionStore:s=$i,logger:i,quotaMax:r=240,quotaFactor:n=16})=>{e.assemble();const a=e.spartito||e.makeSpartito(),o=a.measures.filter(e=>!e.regulated);await Wi(o,{solver:t,quotaMax:r,quotaFactor:n,solutionStore:s,logger:i}),console.assert(e.spartito?.regulated,"doSimpleRegulate: regulation incomplete:",a.measures.filter(e=>!e.regulated).length)};console.info("%cstarry-omr%c v1.0.0 2026-05-05T13:56:21.434Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;"),exports.DefaultSolutionStore=$i,exports.PyClients=class PyClients{constructor(e,t=console){this.options=e,this.logger=t,this.clients=new Map}async getClient(e){if(this.clients.has(e))return this.clients.get(e);const[t,s,i]=ri(),r=this.options[e];if(!r)throw new Error(`no config for client \`${e}\` found`);try{if("string"==typeof r){const e=new ZeroClient;e.bind(r),s(e)}else{const{scriptPath:e,...t}=r,i=new PyProcessor(e,t,this.logger);await i.bind(`${await ui()}`),s(i)}this.logger.info(`PyClients: ${e} started`)}catch(t){this.logger.error(`PyClients: ${e} start fail: ${JSON.stringify(t)}`),i(t)}return this.clients.set(e,t),t}async checkHost(e){return(await this.getClient(e)).request("checkHost")}async warmup(){const e=Object.keys(this.options);await Promise.all(e.map(e=>this.getClient(e)))}async predictScoreImages(e,...t){const s=e.split("$")[0],i=await this.getClient(s);let r=null;this.logger.info(`[predictor]: ${e} py start..`);const n=Date.now();switch(e){case"layout":r=await i.request("predictDetection",t);break;case"layout$reinforce":r=await i.request("predictReinforce",t);break;case"gauge":case"mask":r=await i.request("predict",t,{by_buffer:!0});break;case"semantic":case"textLoc":r=await i.request("predict",t);break;case"textOcr":case"brackets":case"topo":case"gaugeRenderer":case"jianpu":r=await i.request("predict",...t);break;default:this.logger.error(`[predictor]: no predictor ${e}`)}return this.logger.info(`[predictor]: ${e} py duration: ${Date.now()-n}ms`),r}},exports.abstractOMRStats=e=>{const{costTotal:t,pagesCostTotal:s,pagesTotal:i}=e.reduce((e,t)=>({costTotal:e.costTotal+t.cost,pagesCostTotal:e.pagesCostTotal+t.pagesCost,pagesTotal:e.pagesTotal+t.pages}),{costTotal:0,pagesCostTotal:0,pagesTotal:0});return{costTotal:t,costPerPage:i?t/i:null,pagesTotal:i,scoreN:e.length}},exports.abstractRegulationBeadStats=e=>{const{totalCost:t,pickerCost:s,measureN:i,timeN:r}=e.reduce((e,t)=>({totalCost:e.totalCost+t.totalCost,pickerCost:e.pickerCost+t.pickerCost,measureN:e.measureN+t.measures.computed,timeN:e.timeN+t.measures.tryTimes}),{totalCost:0,pickerCost:0,measureN:0,timeN:0}),n=i>0?t/i:null,a=r>0?t/r:null,{cached:o,simple:c,computed:l,tryTimes:u,solved:h,issue:m,fatal:f}=e.reduce((e,t)=>({cached:e.cached+t.measures.cached,simple:e.simple+t.measures.simple,computed:e.computed+t.measures.computed,tryTimes:e.tryTimes+t.measures.tryTimes,solved:e.solved+t.measures.solved,issue:e.issue+t.measures.issue,fatal:e.fatal+t.measures.fatal}),{cached:0,simple:0,computed:0,tryTimes:0,solved:0,issue:0,fatal:0});return{scoreN:e.length,totalCost:t,pickerCost:s,costPerMeasure:n,costPerTime:a,cached:o,simple:c,computed:l,tryTimes:u,solved:h,issue:m,fatal:f}},exports.abstractRegulationStats=e=>{const{baseCostTotal:t,topoCostTotal:s,baseMeasures:i,topoMeasures:r}=e.reduce((e,t)=>({baseCostTotal:e.baseCostTotal+t.baseCost,topoCostTotal:e.topoCostTotal+t.topoCost,baseMeasures:e.baseMeasures+t.baseMeasures.computed,topoMeasures:e.topoMeasures+(t.topoMeasures.solved+t.topoMeasures.issue+t.topoMeasures.fatal)}),{baseCostTotal:0,topoCostTotal:0,baseMeasures:0,topoMeasures:0}),n=i>0?t/i:null,a=r>0?s/r:null,{cached:o,baseComputed:c,baseSolved:l,topoSolved:u,topoIssue:h,topoFatal:m}=e.reduce((e,t)=>({cached:e.cached+t.baseMeasures.cached,baseComputed:e.baseComputed+t.baseMeasures.computed,baseSolved:e.baseSolved+t.baseMeasures.solved,topoSolved:e.topoSolved+t.topoMeasures.solved,topoIssue:e.topoIssue+t.topoMeasures.issue,topoFatal:e.topoFatal+t.topoMeasures.fatal}),{cached:0,baseComputed:0,baseSolved:0,topoSolved:0,topoIssue:0,topoFatal:0});return{scoreN:e.length,baseCostTotal:t,topoCostTotal:s,baseCostPerMeasure:n,topoCostPerMeasure:a,cached:o,baseComputed:c,baseSolved:l,topoSolved:u,topoIssue:h,topoFatal:m}},exports.constructSystem=vi,exports.convertImage=xi,exports.doRegulate=async(e,{pyClients:t,solver:s,solutionStore:i=$i,onSaveIssueMeasure:r})=>{t?.logger?.info(`[doRegulate] score: ${e.title}`),e.spartito=void 0,e.assemble();const n=e.makeSpartito();n.measures.forEach(t=>e.assignBackgroundForMeasure(t));const a=Date.now(),o=await Wi(n.measures,{solver:s,quotaMax:1e3,solutionStore:i,logger:t?.logger}),c=Date.now(),l=t?await async function(e,{pyClients:t,solver:s,solutionStore:i=$i,onSaveIssueMeasure:r}){t.logger.info(`[RegulateWithTopo] regulate score: ${e.title}, measures: ${e.spartito.measures.length}`);const n=e.spartito.measures.filter(e=>!Le(e).perfect);if(t.logger.info(`[RegulateWithTopo] basic issues: ${n.length}`),0===n.length)return{solved:0,issue:0,fatal:0};const a=[].concat(...n.map(e=>e.createClusters())),o=await t.predictScoreImages("topo",{clusters:a});console.assert(o.length===a.length,"prediction number mismatch:",a.length,o.length),a.forEach((e,t)=>{const s=o[t];console.assert(s,"no result for cluster:",e.index),e.assignPrediction(s)}),n.forEach(e=>{const t=a.filter(t=>t.index===e.measureIndex);e.applyClusters(t);const{matrixH:s}=Pe.estiamteMeasure(e);s.forEach((t,s)=>t.forEach((t,i)=>{e.matrixH[s][i]=.9*e.matrixH[s][i]+t*(1-.9)}))});const c=[],l=[];await Promise.all(n.map(async e=>{const n=e.regulationHash0,a=await Ui(e,{solver:s});a&&(e.applySolution(a),i.set(n,a),i.set(e.regulationHash,e.asSolution()),t.logger.info(`[RegulateWithTopo] solutionStore set: ${e.measureIndex}, ${n}, ${e.regulationHash}`));const o=Le(e);r?.({measureIndex:e.measureIndex,measure:new EditableMeasure(e),status:o.error?2:1}),o.perfect?c.push(e.measureIndex):o.error&&l.push(e.measureIndex)}));const u=n.length-c.length-l.length;return t.logger.info(`[RegulateWithTopo] score: ${e.title}, solved/issue/fatal: ${c.length}/${u}/${l.length}`),c.length&&t.logger.info(`[RegulateWithTopo] solved measures: ${c.join(", ")}`),l.length&&t.logger.info(`[RegulateWithTopo] error measures: ${l.join(", ")}`),{solved:c.length,issue:u,fatal:l.length}}(e,{pyClients:t,solver:s,solutionStore:i,onSaveIssueMeasure:r}):void 0;return{baseCost:c-a,topoCost:Date.now()-c,baseMeasures:o,topoMeasures:l,qualityScore:n.qualityScore}},exports.doSimpleRegulate=Yi,exports.encodeFindResource=function(e){const t=e.spartito.perform(),s=e.systems.map(e=>e.staves.map(e=>e?.maskImage)).flat(),i=s.filter(Boolean).length>s.length/2,r={},n=new Map,a=new Map,o=new Map;r.unitSize=e.unitSize,r.title={title:e.title};const c=e.pages[0].tokens;if(Array.isArray(c)&&c.length>0){const[t,...s]=c.filter(e=>e.type===K.Text&&"Title"===e.textType).sort((e,t)=>t.fontSize-e.fontSize);t&&(r.title.title=t.text,r.title.t={size:t.fontSize}),s?.length>0&&(s.sort((e,t)=>e.y-t.y),r.title.subtitle=s.map(e=>e.text).join("\n"),r.title.s={size:s.reduce((e,t)=>e+t.fontSize,0)/s.length});const i=c.filter(t=>t.type===K.Text&&"Author"===t.textType&&t.x>e.pages[0].width/2);i.length>0&&(r.title.composer=i.map(e=>e.text).join("\n"),r.title.c={size:i.reduce((e,t)=>e+t.fontSize,0)/i.length})}if(r.page={w:e.pages[0].width,h:e.pages[0].height},r.pages=e.pages.map(t=>{const s=t.source.dimensions.width/t.source.interval,i=t.source.dimensions.height/t.source.interval,[r,n,a,o]=t.source.matrix;return{src:t.source.url,w:s,h:i,x:0,y:0,l1:e.systems.indexOf(t.systems[0]),ls:t.systems.length,matrix:[r,n,a,o,-.5*r*s+-.5*i*a+.5*t.width||0,-.5*n*s+-.5*i*o+.5*t.height||0]}}),r.parts=[],r.lines=[],i){const t=e.staffLayout.partGroups.map(e=>e.range[0]===e.range[1]?[e.range[0]]:e.range),s=e.getTokenMap(),i=[];for(const[c,l]of t.entries()){const u=t.slice(0,c).flat().length,h={measures:[]};e.systems.forEach((r,m)=>{const f=r.staves.slice(),d=t.flat().map(e=>1<m+1&&(p[m+1]=p[m]);continue}const g=[];for(const e of l){const t=d[e];t&&g.push(...t.measures[m].getChords().map(t=>({chord:t,staffIndexInPart:e-u})))}let y=0;const v=p[m],x=[];g.forEach(({staffIndexInPart:l,chord:u})=>{const h=[];let d=u.tip?u.tip.x:u.right-u.left/2;u.noteIds.forEach((e,i)=>{const r=s.get(e),m=`n_${t.length>1?c+"_":""}${f}_${y}`;y++,n.set(r.id,m),a.set(r.id,(r.left+r.right)/2-v),o.set(r.id,l+1),h.push({line:2*-u.ys[i],id:m,staff:l+1,x:(r.left+r.right)/2-d})}),i[f]=i[f]||[],i[f].push(d-v);const p=e.spartito.measures[r.headMeasureIndex+m].events.filter(e=>e.noteIds.some(e=>u.noteIds.includes(e)));x.push({elems:h,x:d-v,type:2**u.division,...p.some(e=>e.grace)?{grace:{}}:{}})}),h.measures[f]={w:p[m+1]-p[m],staves:l.length,notes:x}}});let m=null;e.spartito.measures.forEach((s,i)=>{const r=e.spartito.measureIndexMapping[i],n=s.contexts.flat().filter(e=>js.includes(e.tokenType)&&l.includes(e.staff)).map(e=>{const s=t.find(t=>t.includes(e.staff));return{x:e.x,clef:Hs(e),staff:s.indexOf(e.staff)+1,tick:e.tick}});n.length>0&&h.measures[r]&&(h.measures[r].clefs=n);const a=s.basics.filter((e,t)=>1<0&&(r.parts[c]=h)}e.systems.forEach((s,i)=>{const n=[],a=s.staves[0],o=s.staves[s.staves.length-1],c=a.top+a.staffY-2,l=o.top+o.staffY-2,u=s.staves.slice(),h=t.flat().map(e=>!(1<h.find(t=>t?.index===e)||null),a=t.map((e,t)=>[t,!e]).filter(e=>e[1]);let o=null;a.length>0&&(o=Object.fromEntries(a.map(e=>[e[0]+1,{hide:e[1]}])));let l=0,u=0;const f=t.filter(e=>!!e);if(f.length>0){const e=f[0],t=f[f.length-1],s=e.top+e.staffY-2,i=t.top+t.staffY-2;l=s-c,u=i-s+4}const{list:d,last:p}=t.reduce((e,t,s)=>(null===e.last||null===t?0===s&&l>0?e.list.push(l-4):e.list.push(0):e.list.push(t.top+t.staffY-(e.last.top+e.last.staffY)-4),e.last=t||e.last,e),{last:m,list:[]});m=p;const g=t.map(e=>{if(e?.maskImage){const t=e.imagePosition;return{src:e.maskImage,x:t.x,y:s.top+e.top+t.y-(s.top+e.top+e.staffY-2),w:t.width,h:t.height}}return null}),y=e.spartito.measures[s.headMeasureIndex];n.push({distances:d,imgs:g,y:l,staves:r.length,parti:i,height:u,...o?{details:o}:{},clef:Object.fromEntries(e.spartito.measures[s.headMeasureIndex]?.contexts.flat().filter(e=>js.includes(e.tokenType)&&r.includes(e.staff)).map(e=>[e.staff,Hs(e)])),fifths:y.basics.filter((e,t)=>1<e.spartito.measureIndexMapping[s.headMeasureIndex+i]).filter(e=>Number.isFinite(e));r.lines[i]={m1:f[0],m2:f.length>0?f[f.length-1]+1:void 0,x:s.left,y:s.top+c,w:s.measureBars[s.measureBars.length-1],h:l-c+4,lineStaves:n}});const c={0:"default",1:"brace",2:"bracket",3:"square"},l=it(e.staffLayoutCode),u=l.partGroups.map(e=>({sort:e.range[0],part:e})).sort((e,t)=>e.sort-t.sort).map(e=>e.part);r.groups=l.groups.filter(e=>0!==e.group.type).map((e,t)=>({type:c[e.group.type],p1:u.findIndex(t=>t.range.includes(e.range[0])),p2:u.findIndex(t=>t.range.includes(e.range[e.range.length-1]))})).filter(e=>"default"!==e.type)}let l;if(t&&(r.measInfo=t.notation.measures.map((e,t)=>{const s=new Map;return e.notes.forEach(e=>{s.set(e.tick,[...s.get(e.tick)||[],a.get(e.id)])}),Array.from(s.entries()).sort((e,t)=>+e[0]-t[0]).reduce((e,t,s)=>{const i=t[1].find(t=>t>e.last)||t[1][0];return e.list.push(i),e.last=i,e},{last:null,list:[]}).list.filter(Number.isFinite)})),t){l={};const s=new Map;let i,r;t.notation.measures.forEach((e,t)=>{const{numerator:s,denominator:n}=e.timeSignature;l.beats||l.beatsUnit||(l.beats=s,l.beatsUnit=n,i=s,r=n),l.beatInfos=l.beatInfos||[],i===s&&r===n||(i=s,r=n,l.beatInfos.push({tick:e.tick,beats:s,beatsUnit:n})),l.tempos=l.tempos||[],e.events.forEach(t=>{"meta"===t.data.type&&"setTempo"===t.data.subtype&&l.tempos.push({tick:e.tick,tempo:t.data.microsecondsPerBeat})})}),l.measures=t.notation.measures.reduce((e,t,i)=>{const r=Array.from(new Set(t.notes.map(e=>e.tick))).sort((e,t)=>e-t);return t.notes.forEach(e=>{s.set(e.id,r.indexOf(e.tick))}),e[t.tick]={measure:i,duration:t.duration,note_ticks:r},e},{}),l.measureInfos=t.notation.measures.map((e,t)=>({number:String(t+1),fifths:e.keySignature,beats:e.timeSignature.numerator,beatUnit:e.timeSignature.denominator}));const a=t.notation.toPerformingMIDI(t.notation.measures.map((e,t)=>t+1)).tracks,{partGroups:c}=e.staffLayout;let u=a.map((t,s)=>{const i=c[s].key;let r;switch(i){case"vi":case"vi1":case"vi2":r=40;break;case"viola":r=42;break;case"vo":r=55;break;case"basso":r=71;break;default:r=0}return{program:r,channel:s,name:e.instrumentDict[i]??"Piano",track:t}});if(c.some(e=>e.group.grand)){const t=/l\.?h\.?|左手|left hand/i,s=/r\.?h\.?|右手|right hand/i,i=Object.entries(e.instrumentDict).filter(([e,i])=>t.test(i)||s.test(i)).map(([e,s])=>({key:e,hand:t.test(s)?"left":"right"}));let r,n=null;if(2===i.length&&i[0].hand!==i[1].hand){const t=i.find(e=>"left"===e.hand),s=i.find(e=>"right"===e.hand);n=[e.staffLayout.staffIds.findIndex(e=>e===s?.key),e.staffLayout.staffIds.findIndex(e=>e===t?.key)],r=c.findIndex(e=>e.range[0]<=Math.min(...n)&&e.range[1]>=Math.max(...n))}if(Number.isFinite(r)&&r>-1){const e=u[r],t=[];e.track.forEach(e=>{Number.isFinite(e.staff)&&(t[e.staff]||(t[e.staff]=[]),t[e.staff].push(e)),"meta"===e.type&&t.forEach(t=>{t.push(e)})}),u.splice(r,1,t.filter(Boolean).map(t=>({...e,track:t}))),u=u.flat(),l.rightHandTrack=n[0],l.leftHandTrack=n[1]}else u.sort((e,t)=>e===u[r]?-1:0)}l.tracks=u.map(({program:e,channel:t,name:s})=>({program:e,channel:t,name:s}));const h=u.map(({track:e})=>{const t=new Map;return e.map(e=>{if("noteOn"===e.subtype&&t.set(e.noteNumber,e),"noteOff"===e.subtype){const s=t.get(e.noteNumber);s?.noteNumber===e.noteNumber&&(s.duration=e.ticks-s.ticks)}return e})}),m=new Map(Object.entries(l.measures).map(([e,t])=>[t.measure,+e]));l.events=h.map((e,t)=>e.filter(e=>"channel"===e.type).map(e=>{e?.ids?.[0]&&(e.numId=n.get(e.ids[0]));let i=[0,0,0];switch(e.subtype){case"noteOn":i=[144|e.channel,e.noteNumber,e.velocity];break;case"noteOff":i=[128|e.channel,e.noteNumber,e.velocity?e.velocity:0];break;case"noteAftertouch":i=[160|e.channel,e.noteNumber,e.amount];break;case"controller":i=[176|e.channel,e.controllerType,e.value];break;case"programChange":i=[192|e.channel,e.programNumber,0];break;case"channelAftertouch":i=[208|e.channel,e.amount,0];break;case"pitchBend":i=[224|e.channel,255&e.value,e.value>>7&255];break;default:throw new Error("unhandled event subtype:"+e.subtype)}return{..."noteOn"===e.subtype?{id:n.get(e?.ids?.[0])}:{},tick:e.ticks,channel:e.channel,duration:e.duration,track:t,event:i,elem_ids:e?.ids.map(e=>n.get(e)),measure:e.measure-1,meas_start_tick:m.get(e.measure-1),staff:o.get(e.ids[0]),note:s.get(e.ids[0])}})).flat(1).sort((e,t)=>{for(const s of["tick","measure","track"])if(e[s]!==t[s])return e[s]-t[s];return 0})}return{scoreJson:r,midiJson:l}},exports.evaluateScoreQuality=async(e,t)=>(e.spartito?.regulated||await Yi(e,t),e.spartito.regulated?e.spartito.qualityScore:null),exports.getScoreJsonImages=e=>[...e.pages.map(e=>e?.src),...e.lines.map(e=>e.lineStaves.map(e=>e.imgs)).flat(2).map(e=>e?.src).filter(Boolean)],exports.predictPages=async(e,t,s={outputWidth:1200,pageStore:Ai,onReplaceImage:Pi})=>{const i=e.logger;s.outputWidth=s.outputWidth||1200,s.pageStore=s.pageStore||Ai,s.onReplaceImage=s.onReplaceImage||Pi,s.processes=Array.isArray(s.processes)&&s.processes.length>0?s.processes:["layout","text","gauge","mask","semantic","brackets"];const r=new OMRProgress(s.onProgress),n=Date.now();t.forEach(e=>{e.layout?.detection?e.layout.detection.areas=e.layout.detection?.areas?.filter(e=>e?.staves?.middleRhos?.length>0):delete e.layout});const a=new Score({title:s?.title,stavesCount:2,paperOptions:{raggedLast:!0,raggedLastBottom:!0},headers:{},instrumentDict:{},settings:{enabledGauge:s.processes.includes("gauge"),semanticConfidenceThreshold:1}});i.info(`[predictor]: download_source_images-${t.length}`);const o=await Promise.all(t.map(e=>c.loadImage(e.url)));i.info(`[predictor]: source_images_downloaded-${t.length}`);const l=o.map((e,s)=>function(e,t){let s=e.height/e.width*t;const i=new c.Canvas(t,s);return i.getContext("2d").drawImage(e,0,0,t,t*e.height/e.width),i}(e,t[s].layout?.sourceSize?.width??e.width));r.setTotal("layout",o.length),r.setTotal("text",o.length);const u=await Promise.all(l.map(async(s,i)=>t[i].layout?!t[i].enableGauge&&t[i]?.layout?.detection?.areas?.length?(await e.predictScoreImages("layout$reinforce",[s.toBufferSync("png")],[t[i].layout]))?.[0]:t[i].layout:(await e.predictScoreImages("layout",[s.toBufferSync("png")]))?.[0]));u.forEach(e=>{e.detection.areas=e.detection?.areas?.filter(e=>e?.staves?.middleRhos?.length>0)});const h=new Map,m=async e=>{const t=await s.onReplaceImage(e);h.set(e,t)};async function f(e,i){const{url:n,key:o,layout:u,enableGauge:h}=t[i],m=yi(JSON.stringify({key:o||n,layout:u,enableGauge:h})),f=await s.pageStore.get(m),d=!s.renew&&(f&&!t[i].renew||!e.detection.areas?.length),p=a.pages[i]=d&&f?b(f,$s):new Page({source:{name:o||("string"==typeof n&&/https?:\/\//.test(n)?n:null),size:0,url:n,crop:{unit:"%",x:0,y:0,width:100,height:100},dimensions:e.sourceSize,matrix:[Math.cos(e.theta),-Math.sin(e.theta),Math.sin(e.theta),Math.cos(e.theta),0,0],interval:e.interval,needGauge:t[i].enableGauge},layout:e.detection}),g=d?null:await async function({page:e,score:t,pageCanvas:s}){if(!e?.layout?.areas?.length)return null;e.width=t.pageSize.width/t.unitSize,e.height=t.pageSize.height/t.unitSize;const i=new c.Canvas(s.width,s.height),r=i.getContext("2d");r.save();const{width:n,height:a}=i,[o,l,u,h]=e.source.matrix;r.setTransform(o,l,u,h,-.5*n+.5*o*n+.5*l*a,-.5*a+.5*u*n+.5*h*a),r.drawImage(s,0,0),r.restore();const m=e.source.interval;return e.layout.areas.map((t,i)=>{console.assert(t.staves?.middleRhos?.length,"[shootImageByDetection] empty area:",t);const n=r.getImageData(t.x,t.y,t.width,t.height),a=new c.Canvas(t.width,t.height);a.getContext("2d").putImageData(n,0,0);const o=t.staves,l={width:t.width,height:t.height},u=s.width/2/m,h=s.height/2/m,f={x:(t.x+t.staves.phi1)/m-u+e.width/2,y:t.y/m-h+e.height/2};e.systems[i]=vi({page:e,backgroundImage:a.toBufferSync("png"),detection:o,imageSize:l,position:f})}),i}({score:a,page:p,pageCanvas:l[i]});return r.increase("layout"),{page:p,omit:d,hash:m,correctCanvas:g}}!function(e,t,s){const i=t.filter(e=>e&&e.detection&&e.detection.areas?.length).map((e,t)=>{const s=Math.min(...e.detection.areas.filter(e=>e.staves?.middleRhos?.length).map(e=>e.staves.interval)),i=e.sourceSize;return{...e,index:t,vw:i.width/s,hwr:i.height/i.width}});if(!i.length)throw new Error("empty result");const r=i.sort((e,t)=>t.vw-e.vw)[0],n=Math.max(...i.map(e=>e.hwr));e.unitSize=s/r.vw,e.pageSize={width:s,height:s*n}}(a,u,s.outputWidth);const d=u.reduce((e,t)=>e+(t.detection.areas?.length??0),0),p=u.reduce((e,t)=>e+(t.detection.areas?.reduce?.((e,t)=>e+(t.staves?.middleRhos?.length??0),0)??0),0);r.setTotal("gauge",p),r.setTotal("mask",p),r.setTotal("semantic",p),r.setTotal("brackets",d);const g=[],y=[],v=Date.now();let x=0;for(const n of u.keys()){const o=[],{page:l,correctCanvas:d,omit:p,hash:v}=await f(u[n],n);if(o.push(m(l.source.url)),o.push(...l.systems.map(e=>m(e.backgroundImage))),i.info(`[predictor]: check_cache_pageIndex-${n} omit: ${p}`),p)y.push(n);else{const u=l.systems.map((e,t)=>e.staves.map((s,i)=>({pageIndex:n,systemIndex:t,staffIndex:i,page:l,system:e,staff:s}))).flat(1);await Mi([async()=>{if(!s.processes.includes("brackets"))return;const t=l.layout,a=l.source.interval,o=Date.now(),u=l.systems.map((e,s)=>{const{x:i,y:r,staves:{middleRhos:n,phi1:o}}=t.areas[s],l=n[0],u=n[n.length-1],h={x:i+o-4*a,y:r+l-4*a,width:8*a,height:u-l+8*a},m=new c.Canvas(64,h.height/a*8);return m.getContext("2d").drawImage(d,h.x,h.y,h.width,h.height,0,0,m.width,m.height),{system:e,buffer:m.toBufferSync("png")}});i.info(`[predictor]: brackets js [pageIndex-${n}] duration: ${Date.now()-o}`);const h=await e.predictScoreImages("brackets",{buffers:u.map(e=>e.buffer)});r.increase("brackets",u.length),u.forEach(({system:e},t)=>{h[t]&&(e.bracketsAppearance=h[t])})},async()=>{if(s.processes.includes("text"))try{const t=Date.now(),o=d.toBufferSync("png"),c=(await e.predictScoreImages("textLoc",[o]))[0].filter(e=>e.score>0);if(c.length>0){const[t]=await e.predictScoreImages("textOcr",{buffers:[o],location:c});l.assignTexts(t.areas,t.imageSize),l.assemble()}if(i.info(`[predictor]: text js [pageIndex-${n}] duration: ${Date.now()-t}`),r.increase("text"),!s.title){const e=a.pages[0].tokens;if(Array.isArray(e)&&e.length>0){const[t]=e.filter(e=>e.type===K.Text&&"Title"===e.textType).sort((e,t)=>t.fontSize-e.fontSize);t&&(a.title=t.text)}}}catch(e){i.error(`[predictor]: text js [pageIndex-${n}] ${JSON.stringify(e)}`)}},async()=>{var c;await(c=async()=>{if(s.processes.includes("gauge")&&!1!==t[n].enableGauge){const t=await e.predictScoreImages("gauge",await Promise.all(u.map(async({staffIndex:e,system:t})=>{const s=Date.now(),r=await Ei(t,e,{paddingLeft:Si,spec:bi});return i.info(`[predictor]: gauge js shoot [page-${n}, staff-${e}] duration: ${Date.now()-s}`),r.toBufferSync("png")})));for(const[s,{system:n,staff:a,pageIndex:c,staffIndex:l}]of u.entries()){const u=Date.now();i.info(`[predictor]: gauge js [page-${c}, staff-${l}] start..`),await Ii({pyClients:e,system:n,staff:a,staffIndex:l,gaugeImage:t[s].image}),i.info(`[predictor]: gauge js [page-${c}, staff-${l}] duration: ${Date.now()-u}`),r.increase("gauge"),o.push(m(a.backgroundImage))}}else for(const[e,{system:t,staff:s,staffIndex:i}]of u.entries())await Ni({system:t,staff:s,staffIndex:i}),o.push(m(s.backgroundImage))},c()),await Mi([async()=>{if(!s.processes.includes("mask"))return;const t=await e.predictScoreImages("mask",u.map(({staff:e})=>e.backgroundImage));for(const[e,{staff:s,staffIndex:a}]of u.entries()){const c=Date.now();await Ci({staff:s,staffIndex:a,maskImage:t[e].image}),i.info(`[predictor]: mask js [page-${n}, ${e}, staff-${a}] duration: ${Date.now()-c}`),r.increase("mask"),o.push(m(s.maskImage))}},async()=>{if(!s.processes.includes("semantic"))return;const t=b(await e.predictScoreImages("semantic",u.map(({staff:e})=>e.backgroundImage)),$s);u.forEach(({system:e})=>e.clearTokens());for(const[e,{staffIndex:s,system:o,staff:c}]of u.entries()){const l=Date.now();await _i({score:a,system:o,staff:c,staffIndex:s,graph:t[e]}),i.info(`[predictor]: semantic js [page-${n}, system-${o.index}, staff-${c.index}] duration: ${Date.now()-l}`),r.increase("semantic")}}])}]),++x}g.push(Promise.all(o).then(()=>(Oi(l,e=>h.get(e)),i.info(`[predictor]: pageStore set: [${n}]`),s.pageStore.set(v,JSON.stringify(l)))))}const S=Date.now();await Promise.all(g),i.info(`[predictor]: inferenceStaffLayout: ${a.title}, [${a.systems.length}]`),a.inferenceStaffLayout(),i.info(`[predictor]: done: ${a.title}`),a.assemble();const k=Date.now();return{score:a,omitPages:y,stat:{cost:k-n,pagesCost:S-v,pages:x}}},exports.regulateWithBeadSolver=async(e,{logger:t,pickers:s,solutionStore:i=$i,ignoreCache:r,freshOnly:n,onSaveIssueMeasure:a,onProgress:o,onPassStart:c})=>{e.spartito=void 0,e.assemble();const l=e.makeSpartito();l.measures.forEach(t=>e.assignBackgroundForMeasure(t));const u=Date.now();t?.info(`[regulateWithBeadSolver] begin, measure total: ${l.measures.length}.`,r?"ignoreCache":"",n?"freshOnly":"");const h=l.measures.filter(e=>e.events?.length&&!e.patched).map(e=>({origin:e.deepCopy(),current:e,evaluation:void 0,baseQuality:0}));for(const e of l.measures.filter(e=>e.events?.length)){const t=s.find(t=>t.n_seq>e.events.length+1);t&&await Fs(e,t)}l.rectifyTimeSignatures(t),s.forEach(e=>e.cost=0);const m={cached:0,simple:0,computed:0,tryTimes:0,solved:0,issue:0,fatal:0};if(t?.info("[regulateWithBeadSolver] measures estimation finished."),i&&!r)for(const e of h){const t=await i.get(e.origin.regulationHash0);t&&(e.current.applySolution(t),++m.cached,e.evaluation=Le(e.current),e.baseQuality=e.evaluation.qualityScore)}t?.info("[regulateWithBeadSolver]",`${m.cached}/${h.length}`,"solutions loaded.");const f=t?null:process.stdout;m.cached&&f?.write(`${m.cached}c`),h.forEach(e=>{const i=s.find(t=>t.n_seq>e.current.events.length+1);i?e.picker=i:t?.info(`[regulateWithBeadSolver] measure[${e.current.measureIndex}] size out of range:`,e.current.events.length)});const d=h.filter(e=>e.picker&&(!e.evaluation||!e.evaluation.fine&&!n));d.forEach(e=>{const s=e.current.deepCopy();s.staffGroups=e.current.staffGroups,s.regulate({policy:"simple"});const i=Le(s);(!e.evaluation||i.qualityScore>e.evaluation.qualityScore)&&(e.evaluation=i,Object.assign(e.current,s),i.perfect&&(t?.info(`[regulateWithBeadSolver] measure[${e.current.measureIndex}] regulated by simple policy.`),++m.simple))}),m.computed=d.length-m.simple,m.simple&&f?.write(`${m.simple}s`);const p=(e,s,i)=>{t?.info(`[regulateWithBeadSolver] measure[${e.measureIndex}/${l.measures.length}] regulated${i?"+":"-"}: ${s.qualityScore.toFixed(3)}, ${s.fine?"solved":s.error?"error":"issue"}, ${e.regulationHash}`),f?.write(`[${s.fine?"32":s.error?"31":"33"}m${i?"+":"-"}`)},g=l.measures.length,y=()=>d.filter(e=>!e.evaluation?.fine).length,v=o?(e,t,s,i)=>{o(e,t,s,{pass:i.pass,remaining:y(),total:g})}:void 0;c?.(1,"Imperfect",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.05,quotaMax:200,quotaFactor:3,ptFactor:1},ji.Imperfect,1,v),c?.(2,"NotFine",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.08,quotaMax:1e3,quotaFactor:20,ptFactor:1.6},ji.NotFine,2,v),c?.(3,"ErrorOnly",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.08,quotaMax:1e3,quotaFactor:40,ptFactor:3},ji.ErrorOnly,3,v),d.forEach(({evaluation:e,baseQuality:t,current:s,origin:r})=>{e.fine?++m.solved:e.error?++m.fatal:++m.issue,(e.qualityScore>t||!t)&&(i.set(r.regulationHash0,{...s.asSolution(r),priority:-s?.solutionStat?.loss}),s.regulationHash!==r.regulationHash0&&i.set(s.regulationHash,{...s.asSolution(),priority:-s?.solutionStat?.loss})),e.fine||a?.({measureIndex:s.measureIndex,measure:new EditableMeasure(s),status:e.error?2:1})});const x=Date.now(),S=s.reduce((e,t)=>e+t.cost,0),b=l.qualityScore,k=x-u;return t?.info("[regulateWithBeadSolver] done in ",k,"ms, qualityScore:",b),n&&(m.cached=0),{totalCost:x-u,pickerCost:S,measures:m,qualityScore:b}},exports.replaceScoreJsonImages=(e,t=e=>e)=>{const s=JSON.parse(JSON.stringify(e));return s.pages.forEach(e=>{e?.src&&(e.src=t(e?.src))}),s.lines.forEach(e=>{e.lineStaves.forEach(e=>{e.imgs.forEach(e=>{e?.src&&(e.src=t(e.src))})})}),s},exports.saveEditableMeasures=async(e,t,s,{status:i=2,solutionStore:r}={})=>{e.assemble();const n=e.spartito||e.makeSpartito(),a=t.map(e=>n.measures.find(t=>t.measureIndex===e)).filter(Boolean);if(r){const e=await r.batchGet(a.map(e=>e.regulationHash0));a.forEach((t,s)=>{const i=e[s];i&&t.applySolution(i)})}a.forEach(e=>{s({measureIndex:e.measureIndex,measure:new EditableMeasure(e),status:i})})},exports.starry=$s,exports.updateScorePatches=(e,t,s={})=>{if(console.assert(t.every(e=>e.validRegulated),"[updateScorePatches] some measures not valid regulated:",t.filter(e=>!e.validRegulated)),e.patches=t.map(e=>e.createPatch()),s?.solutionStore){e.assemble();const i=e.makeSpartito();t.forEach(e=>{if(s.solutionStore.set(e.regulationHash,{...e.asSolution(),priority:1}),e.regulationHash0!==e.regulationHash){const t=i.measures.find(t=>t.measureIndex===e.measureIndex);s.solutionStore.set(e.regulationHash0,{...e.asSolution(t),priority:1})}})}}; +"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("lodash/pick"),t=require("js-sha1"),s=require("math-erf"),i=require("lodash"),r=require("msgpackr"),n=require("zeromq"),a=require("portfinder"),o=require("python-shell"),c=require("skia-canvas"),l=require("weak-lru-cache"),u=require("spark-md5"),h=require("sharp"),m=require("got");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=f(e),p=f(t),g=f(s),y=f(i),v=f(u),x=f(h),S=f(m);globalThis.btoa=e=>Buffer.from(e,"binary").toString("base64"),globalThis.atob=e=>Buffer.from(e,"base64").toString("binary");const b=(e,t)=>("object"==typeof e&&(e=JSON.stringify(e)),JSON.parse(e,(e,s)=>{if(s&&"object"==typeof s&&s.__prototype){const e=t[s.__prototype];if(e){const{__prototype:t,...i}=s;return new e(i)}}return s})),k=(e,t=null)=>{if((t=t||new Map).get(e))return t.get(e);if(Array.isArray(e)){const s=[];return t.set(e,s),e.forEach(e=>s.push(k(e,t))),s}if(e&&"object"==typeof e){const s={};return t.set(e,s),Object.entries(e).forEach(([e,i])=>s[e]=k(i,t)),Object.setPrototypeOf(s,e.__proto__),s}return e};class SimpleClass{assign(e){e&&Object.assign(this,e)}toJSON(){const e=this.constructor,t=e.serializedKeys||e.blackKeys&&Object.keys(this).filter(t=>!e.blackKeys.includes(t)),s=t?d.default(this,t):this;return{__prototype:e.className,...s}}deepCopy(){return k(this)}}var T={Matrix:function(){}};T.Matrix.create=function(e){return(new T.Matrix).setElements(e)},T.Matrix.I=function(e){for(var t,s=[],i=e;i--;)for(t=e,s[i]=[];t--;)s[i][t]=i===t?1:0;return T.Matrix.create(s)},T.Matrix.prototype={dup:function(){return T.Matrix.create(this.elements)},isSquare:function(){var e=0===this.elements.length?0:this.elements[0].length;return this.elements.length===e},toRightTriangular:function(){if(0===this.elements.length)return T.Matrix.create([]);var e,t,s,i,r=this.dup(),n=this.elements.length,a=this.elements[0].length;for(t=0;t=n&&l[a].push(r);for(o.elements[a]=s,e=a;e--;){for(s=[],t=0;t{const i=Math.round(10*s.x),r=Math.round(10*s.y),n=`${e}|${t}|${s.semantic}|${i}|${r}`,a=p.default.array(n).slice(12),o=globalThis.btoa(String.fromCharCode(...a)).substring(0,11);return s.id=o,o},B=(e,t)=>{const s=Math.round(t.x),i=Math.round(t.y),r=`p-${e}|${t.semantic}|${s}|${i}`,n=p.default.array(r).slice(12),a=globalThis.btoa(String.fromCharCode(...n)).substring(0,11);return t.id=a,a},A=(e,t,s=-1/0)=>Math.max(Math.round(e/t)*t,s),P=(e,t)=>{const s=e.x-t.x,i=e.y-t.y;return Math.sqrt(s*s+i*i)},R=(e,t)=>Number.isInteger(e)&&Number.isInteger(t)?0===t?e:R(t,e%t):(console.error("non-integer gcd:",e,t),1),D=(e,t)=>({numerator:e,denominator:t}),F=(e,t)=>{e=Math.round(e),t=Math.round(t);const s=0!==e?R(e,t):t;return D(e/s,t/s)},L=e=>`${e.numerator}/${e.denominator}`,$=(e,t)=>t?e*t.numerator/t.denominator:e,j=(e,t)=>{const s=[...e].sort((e,s)=>e[t]-s[t]);let i=null,r=null;return s.reduce((e,n,a)=>(r?n[t]-r[t]<.4?i.push(n):(i.length>1&&e.push(i),r=n,i=[n]):(r=n,i=[n]),i.length>1&&a===s.length-1&&e.push(i),e),[])},H=e=>{if(e.length<=1)return[];let t=e.slice(1);const s=C.find(t=>t.includes(e[0].semantic));if(!s)return H(t);const i=t.filter(e=>s.includes(e.semantic));return t=t.filter(e=>!s.includes(e.semantic)),[...i,...H(t)]},V=e=>{const t=new Set(e),s=j(e,"x"),i=[].concat(...s.map(e=>j(e,"y")));return i.forEach(e=>e.sort((e,t)=>t.confidence-e.confidence)),i.forEach(e=>{H(e).forEach(e=>t.delete(e))}),Array.from(t)},z=[0,2,4,5,7,9,11],q=({note:e,alter:t})=>{const s=Math.floor(e/7),i=(e=>{let t=e%7;for(;t<0;)t+=7;return t})(e);return 60+12*s+z[i]+t},G=e=>{const t=Math.max(...e);return e.indexOf(t)};class DummyLogger{debug(...e){}group(...e){}groupCollapsed(...e){}groupEnd(){}info(...e){}warn(...e){}assert(...e){}}const W=1921920,U=e=>1===e?null:(e=>{const t=Math.round(1920*e);return F(t,1920)})(e);var Y,X,K;!function(e){e[e.PLACE=0]="PLACE",e[e.VERTICAL=1]="VERTICAL",e[e.HORIZONTAL=2]="HORIZONTAL"}(Y||(Y={}));class Action{constructor(e){Object.assign(this,e)}static P(e){return new Action({type:Y.PLACE,e1:e})}static V(e,t,s=1){return new Action({type:Y.VERTICAL,e1:s>0?e:t,e2:s>0?t:e})}static H(e,t){return new Action({type:Y.HORIZONTAL,e1:e,e2:t})}get id(){switch(this.type){case Y.PLACE:return this.e1.toString();case Y.VERTICAL:return`${this.e1}|${this.e2}`;case Y.HORIZONTAL:return`${this.e1}-${this.e2>=0?this.e2:"."}`}}get events(){return[this.e1,this.e2].filter(Number.isFinite)}}class StageMatrix{static fromNode(e,t){const s=Array(e.stages.length).fill(null).map(()=>Array(e.stages.length).fill(null).map(()=>new Set));e.actions.filter(e=>e.type===Y.HORIZONTAL).forEach(t=>{const i=e.stages.findIndex(e=>e.events.includes(t.e1)),r=e.stages.findIndex(e=>e.events.includes(t.e2));console.assert(i>=0&&r>=0,"invalid stages for H action:",e.id,e.stages,t),s[i][r].add(t.e1)}),s[0][e.stages.length-1].add(0);const i=e.stagedEvents,r=t.matrixH[t.matrixH.length-1].filter((e,t)=>!i.has(t)),n=Math.max(0,Math.max(...r)-.01),a=e.actions.filter(e=>e.type===Y.HORIZONTAL),o=Object.keys(t.eventMap).map(Number).filter(e=>!a.find(t=>t.e2===e));return e.stages.forEach(i=>{i.events.forEach(r=>{if(r>0){!a.find(e=>e.e1===r)&&t.matrixH[t.matrixH.length-1][r]>=n&&(o.some(e=>t.matrixH[e][r]>0)||s[i.index][e.stages.length-1].add(r))}})}),new StageMatrix({matrix:s})}constructor(e){Object.assign(this,e)}pathOf(e,t,s,i=0){if(this.matrix[e][t].size){const r=[...this.matrix[e][t]][i];if(t===s)return[r];for(let e=t+1;e<=s;++e){const i=this.pathOf(t,e,s);if(i)return[r,...i]}}return null}findDoublePath(e,t){const s=[];for(let i=t;i>=e+1;--i)for(let r=0;rt.forEach(t=>e.forEach(e=>t.delete(e))))}toEquations(e){const t=[];for(let s=1;sn[e]=1),r.forEach(e=>n[e]=-1),t.push(n),this.reducePath(i.length>r.length?i:r)}}}return t}}class PathNode{constructor(e){Object.assign(this,e),console.assert(this.logger,"logger is null:",e)}get actions(){const e=this.parent?this.parent.actions:[];return this.action?[...e,this.action]:e}get id(){return this.actions.map(e=>e.id).sort().join(" ")}get stagedEvents(){const e=new Set;return this.stages&&this.stages.forEach(t=>t.events.forEach(t=>t>=0&&e.add(t))),e}like(e){return e.split(" ").sort().join(" ")===this.id}constructStages(e){this.stages=[{events:[-1]}];for(const t of this.actions)switch(t.type){case Y.PLACE:this.stages.unshift({events:[t.e1]});break;case Y.VERTICAL:{const e=this.stages.find(e=>e.events.includes(t.e1)),s=this.stages.find(e=>e.events.includes(t.e2));console.assert(e||s,"invalid V action:",this.stages,t),e&&s?(e.events.push(...s.events),s.events=null,this.stages=this.stages.filter(e=>e.events)):e?s||e.events.push(t.e2):s.events.unshift(t.e1)}break;case Y.HORIZONTAL:{const s=this.stages.find(e=>e.events.includes(t.e1)),i=this.stages.find(e=>e.events.includes(t.e2));console.assert(s||i,"invalid H action:",this.stages,t);const r=s=>{console.assert(e.eventMap[s],"invalid event id:",t.id,s,e.eventMap);const i=e.eventMap[s].x,r=this.stages.find(t=>t.events.some(t=>t>0&&e.eventMap[t].x<=i)&&t.events.some(t=>t>0&&e.eventMap[t].x>=i));if(r)r.events.push(s);else{const t={events:[s]},r=this.stages.findIndex(t=>-1===t.events[0]||e.eventMap[t.events[0]].x>=i);this.stages.splice(r,0,t)}};s||r(t.e1),i||r(t.e2)}}this.stages.forEach((e,t)=>e.index=t)}constructConstraints(e){const t=Object.keys(e.eventMap).length,s=StageMatrix.fromNode(this,e).toEquations(t),i=Array(t).fill(null).map((t,s)=>e.eventMap[s].duration);this.constraints=s.map(e=>e.map((e,t)=>e*i[t]))}inbalancesConstraints(e){console.assert(this.constraints,"constraints not constructed.");const t=Object.keys(e.eventMap).length,s=Array(t).fill(!0),i=Array(t).fill(!1),r=[];for(const e of this.constraints){const t=e.reduce((e,t)=>e+t,0);if(0!==t){const n=t<0?e.map(e=>-e):e;if(n[0]>0)continue;r.push(n),n.forEach((e,t)=>{i[t]=i[t]||e<0,e&&(s[t]=e<0||i[t])})}}return this.constraints.forEach(e=>{0!==e.reduce((e,t)=>e+t,0)||e[0]||e.some((e,t)=>e&&!s[t])&&(e.forEach((e,t)=>e&&(s[t]=!1)),r.push(e))}),{ones:s,inbalances:r}}solveEquations({ones:e,inbalances:t}){if(!t.length)return e.map(()=>1);const s=e.map((e,t)=>({fixed:e,i:t})).filter(({fixed:e})=>!e).map(({i:e})=>e).filter(e=>t.some(t=>0!==t[e]));if(!s.length)return e.map(()=>1);const i=s.map(e=>Math.abs(t.find(t=>0!==t[e])[e])),r=new Map;let n=!1;const a=t.map(e=>({line:e.filter((e,t)=>s.includes(t)),bias:-e.reduce((e,t,i)=>e+(s.includes(i)?0:t),0)})).filter(({line:e,bias:t})=>{if(e.every(e=>0===e))return!1;const s=e.join(",");return r.has(s)?(n=r.get(s)!==t,!1):(r.set(s,t),!0)});if(n)return null;const o=a.slice(0,s.length),c=a.slice(s.length);if(o.lengths===t?1:s===r?-1:0),bias:0,prior:(i[t]+i[r])/W};o.some(e=>e.line[t]&&e.line[r])&&(n.prior-=10),o.some(e=>1===e.line.filter(Number).length&&(e.line[t]||e.line[r]))&&(n.prior+=1),e.push(n)}e.sort((e,t)=>e.prior-t.prior),o.push(...e.slice(0,s.length-o.length))}const l=o.map(({line:e})=>e),u=o.map(({bias:e})=>e),h=function(e){const t=T.Matrix.create(e).inverse();return null!==t?t.elements:null}(l);if(!h)return this.logger.warn("null invert:",l),null;const m=h.map(e=>e.reduce((e,t,s)=>e+t*u[s],0));if(c.length&&c.some(e=>Math.abs(e.line.reduce((e,t,s)=>e+t*m[s],0))>.001))return null;const f=e.map(()=>1);return s.forEach((e,t)=>f[e]=m[t]),f}optimallySolve(e){const{ones:t,inbalances:s}=this.inbalancesConstraints(e),i=t.map((t,s)=>t?-1:A(e.eventMap[s].shrinkness,.01)).reduce((e,t,s)=>(t>=0&&(e[t]=e[t]||[],e[t].push(s)),e),{}),r=Object.entries(i).sort((e,t)=>Number(t[0])-Number(e[0])).map(e=>e[1]);for(let i=1;i!n.includes(t)),o=this.solveEquations({ones:a,inbalances:s});if(o&&o.every((t,s)=>t<=1&&t>e.eventMap[s].lowWarp))return o}return this.solveEquations({ones:t,inbalances:s})}isConflicted(e){const{ones:t,inbalances:s}=this.inbalancesConstraints(e);for(const i of s){if(i.reduce((s,i,r)=>s+i*(t[r]||i<=0?1:e.eventMap[r].lowWarp),0)>=0)return i.forEach((t,s)=>{t&&(e.eventTendencies[s]+=t>0?1:-1)}),!0}if(!s.length)return!1;const i=this.solveEquations({ones:t,inbalances:s});return!i||!i.every((t,s)=>t>e.eventMap[s].lowWarp&&t<=1)}getSolution(e){const t=t=>e.eventMap[t.e2]?e.eventMap[t.e2].x+.06*Math.abs(e.eventMap[t.e2].x-e.eventMap[t.e1].x):e.eventMap[t.e1].x+1e4,s=this.actions.filter(e=>e.type===Y.HORIZONTAL).sort((e,s)=>t(e)-t(s)),i=s.reduce((e,t)=>({...e,[t.e1]:t.e2}),{}),r=new Set([...Object.keys(i)].map(Number));s.forEach(e=>r.delete(e.e2)),this.stages[0].events.forEach(e=>e>0&&r.add(e));let n=[...r].map(e=>{const t=[e];let s=e;for(;i[s]&&(s=i[s],!(s<0||t.includes(s)));)t.push(s);return t});const a=Object.values(e.eventMap).filter(e=>e.id>0).map(e=>({id:e.id,tick:null,endTick:null,tickGroup:null,timeWarp:null})),o=a.filter(e=>n.some(t=>t.includes(e.id))||s.some(t=>[t.e1,t.e2].includes(e.id))).reduce((e,t)=>({...e,[t.id]:t}),{});this.stages.forEach((e,t)=>e.events.forEach(e=>o[e]&&(o[e].tickGroup=t))),this.stages[0].tick=0,this.stages[0].events.forEach(e=>o[e]&&(o[e].tick=0));const c=this.optimallySolve(e);a.forEach(e=>e.timeWarp=U(c[e.id]));const l=this.stages.slice(0,this.stages.length-1),u=()=>{if(l.every(e=>Number.isFinite(e.tick)))return!1;let t=!1;return s.forEach(s=>{const i=this.stages.find(e=>e.events.includes(s.e1)),r=this.stages.find(e=>e.events.includes(s.e2));Number.isFinite(i.tick)&&!Number.isFinite(r.tick)&&(r.tick=i.tick+$(e.eventMap[s.e1].duration,o[s.e1].timeWarp),r.events.forEach(e=>o[e]&&(o[e].tick=r.tick)),t=!0)}),[...s].reverse().forEach(s=>{const i=this.stages.find(e=>e.events.includes(s.e1)),r=this.stages.find(e=>e.events.includes(s.e2));!Number.isFinite(i.tick)&&Number.isFinite(r.tick)&&(i.tick=r.tick-$(e.eventMap[s.e1].duration,o[s.e1].timeWarp),i.events.forEach(e=>o[e]&&(o[e].tick=i.tick)),t=!0)}),t};for(;u(););console.assert(l.every(e=>Number.isFinite(e.tick)),"stage ticks not all solved:",this.stages,this.id),a.filter(e=>Number.isFinite(e.tick)).forEach(t=>t.endTick=t.tick+$(e.eventMap[t.id].duration,t.timeWarp));const h=e.eventMap[0].duration;n.forEach(e=>{const t=e.findIndex(e=>o[e].endTick>h);if(t>=0){e.splice(t,e.length-t).forEach(e=>{o[e].tick=null,o[e].endTick=null})}}),n=n.filter(e=>e.length);const m=Math.max(0,...a.map(e=>e.endTick).filter(Number.isFinite));return this.logger.debug(String.fromCodePoint(127822),this.id,c),{voices:n,events:a,duration:m,actions:this.actions.map(e=>e.id).join(" ")}}deduce(e,t){this.stages||this.constructStages(e);const s=e.actionAccessing.get(this.id)||{times:0};if(++s.times,e.actionAccessing.set(this.id,s),this.constructConstraints(e),this.isConflicted(e))return s.closed=!0,this.logger.info(this.action.id,"❌"),null;if(this.logger.group(this.action&&this.action.id),t.credits>0){if(--t.credits,this.children||this.expand(e),this.children=this.children.filter(t=>!e.actionAccessing.get(t.id)||!e.actionAccessing.get(t.id).closed),this.children.length){const s=t=>t.possibility/((e.actionAccessing.get(t.id)||{times:0}).times+1);this.children.sort((e,t)=>s(t)-s(e));for(const s of this.children){const i=s.deduce(e,t);if(i)return this.logger.groupEnd(),i;if(t.credits<=0)break}}}else this.logger.debug("quota exhausted.");return this.logger.groupEnd(),s.closed=!0,this.getSolution(e)}expand(e){this.constructStages(e);const{eventMap:t,matrixV:s,matrixH:i}=e,r=this.stagedEvents,n=[],a=e=>{if(!this.actions.some(t=>t.id===e.action.id)&&!n.some(t=>t.action.id===e.action.id)){const t=this.stages.find(t=>t.events.includes(e.action.e1)),i=this.stages.find(t=>t.events.includes(e.action.e2));if(t===i||t&&i&&t.index>=i.index)return;if(t&&i)if(e.action.type===Y.VERTICAL){if(i.index-t.index>1)return;if(this.actions.some(e=>t.events.includes(e.e1)&&i.events.includes(e.e2)))return}else if(e.action.type===Y.HORIZONTAL&&t.index>i.index)return;if(e.action.type===Y.HORIZONTAL&&this.actions.some(t=>t.type===Y.HORIZONTAL&&(t.e1===e.action.e1||t.e2===e.action.e2||t.e1===e.action.e2&&t.e2===e.action.e1)))return;if(e.action.type===Y.VERTICAL){if(t&&(e.possibility=Math.min(e.possibility,...t.events.map(t=>s[e.action.e2][t])),e.possibility<=0))return;if(i&&(e.possibility=Math.min(e.possibility,...i.events.map(t=>s[t][e.action.e1])),e.possibility<=0))return}n.push(e)}};for(const e of r)e<0||(s[e].forEach((t,s)=>{t>0&&e!==s&&a({action:Action.V(s,e),possibility:t})}),s.forEach((t,s)=>{const i=t[e];i>0&&a({action:Action.V(e,s),possibility:i})}),i[e].forEach((t,s)=>{t>0&&a({action:Action.H(s,e),possibility:t})}),i.forEach((s,i)=>{i=i>=Object.keys(t).length?-1:i;const r=s[e];r>0&&a({action:Action.H(e,i),possibility:r})}));n.some(e=>[Y.HORIZONTAL,Y.PLACE].includes(e.action.type)||!r.has(e.action.e1)||!r.has(e.action.e2))?this.children=n.map(e=>new PathNode({logger:this.logger,parent:this,...e})):this.children=[]}}class Solver{constructor(e,{quota:t=1e3,logger:s=new DummyLogger}={}){this.quota=t,this.logger=s;const i={id:0,x:0,confidence:1,shrinkness:e.measureShrinkness,duration:e.expectedDuration,lowWarp:0};this.events=[i,...e.events.map(e=>({id:e.id,x:e.x,confidence:e.confidence,shrinkness:e.shrinkness,staff:e.staff,duration:e.duration,lowWarp:.5}))],this.eventMap=this.events.reduce((e,t)=>({...e,[t.id]:t}),{}),this.matrixH=e.matrixH,this.matrixV=e.matrixV,this.xSpan=e.endX-Math.min(e.endX-1,...e.events.map(e=>e.x)),this.actionAccessing=new Map}solve(){this.pathRoot=new PathNode({logger:this.logger,action:null}),this.pathRoot.children=this.events.slice(1).map(e=>new PathNode({logger:this.logger,parent:this.pathRoot,action:Action.P(e.id),possibility:this.matrixV[e.id].reduce((e,t)=>e+t,0)}));let e=null;this.logger.groupCollapsed("solve");const t=Array(this.events.length).fill(0),s={credits:this.quota,times:0};for(;s.credits>0;){++s.times;const i={eventMap:this.eventMap,matrixH:this.matrixH,matrixV:this.matrixV,actionAccessing:this.actionAccessing,eventTendencies:t},r=this.pathRoot.deduce(i,s);if(r.credits=this.quota-s.credits,r.times=s.times,this.evaluateSolution(r),this.logger.debug("loss:",r.loss),e=!e||r.losse/s.times)),e}evaluateSolution(e){e.loss=0;const t=e.events.reduce((e,t)=>({...e,[t.id]:{...t,...this.eventMap[t.id]}}),{}),s=e.events.filter(e=>Number.isFinite(e.tick)).map(e=>t[e.id]),i=s.reduce((e,t)=>(e[t.staff]=e[t.staff]||[],e[t.staff].push(t),e),{});Object.values(i).forEach(t=>{t.sort((e,t)=>e.x-t.x).slice(0,t.length-1).forEach((s,i)=>{t[i+1].tick{if(Number.isFinite(s.tick)&&!e.voices.every(e=>!e.includes(s.id))||(e.loss+=100*t[s.id].confidence),s.timeWarp){const{numerator:e,denominator:i}=s.timeWarp,n=t[s.id].shrinkness;r.set(e,Math.max(r.get(e)||0,1-n)),r.set(i,Math.max(r.get(i)||0,1-n))}});const n=F(e.duration,this.eventMap[0].duration);r.set(n.numerator,Math.max(r.get(n.numerator)||0,1-this.eventMap[0].shrinkness)),r.set(n.denominator,Math.max(r.get(n.denominator)||0,1-this.eventMap[0].shrinkness));for(const[t,s]of r.entries())t>1&&(e.loss+=Math.log(t)*s);let a=0,o=0;e.voices.forEach(s=>{console.assert(t[s[0]],"invalid voice:",s,Object.keys(t));const i=Math.abs(t[s[0]].tick),r=t[s[s.length-1]].endTick;a+=Math.max(0,i+e.duration-r);let n=null;s.forEach(e=>{const s=t[e];s.staff!==n&&(null!==n&&++o,n=s.staff)})}),e.loss+=10*a/W,e.loss+=5**o-1;const c=[...s].sort((e,t)=>e.x-t.x),l=c.slice(1).map((t,s)=>{const i=c[s],r=t.x-i.x,n=t.tick-i.tick;if(!n)return r/this.xSpan;return(4*Math.atan2(n/e.duration,r/this.xSpan)/Math.PI-1)**2}),u=Math.max(...l,0);e.loss+=u**2,console.assert(e.loss>=0,"Invalid solution loss!!!",e.loss,r,a,o),e.loss<0&&(e.loss=1/0)}}!function(e){e[e.PAD=0]="PAD",e[e.BOS=1]="BOS",e[e.EOS=2]="EOS",e[e.CHORD=3]="CHORD",e[e.REST=4]="REST"}(X||(X={}));class EventCluster extends SimpleClass{constructor(e){super(),super.assign(e)}get regular(){return this.elements.some(e=>[X.CHORD,X.REST].includes(e.type)&&!e.fake)&&this.elements.every(e=>[e.x,e.y1,e.y2,e.tick].every(Number.isFinite))&&this.elements.slice(1).every((e,t)=>e.fake||this.elements[t].fake||e.grace||this.elements[t].grace||e.fullMeasure||this.elements[t].fullMeasure||e.tick<=this.elements[t].tick||e.x>this.elements[t].x)}get grant(){return this.annotation&&this.annotation.grant}get feature(){return{index:this.index,elements:this.elements}}get estimatedDuration(){const e=this.elements.find(e=>e.type===X.EOS),t=e?.predisposition?e.predisposition?.tick:e?.tick;return Number.isFinite(t)?t:this.duration}assignPrediction(e){console.assert(e.index===this.index,"index mismatch:",e.index,this.index),this.matrixH=e.matrixH,e.elements.forEach(e=>{const{index:t,...s}=e,i=this.elements.find(e=>e.index===t);console.assert(i,"element not found:",t),i&&(i.predisposition=s)})}}EventCluster.className="EventCluster",EventCluster.blackKeys=["id"];class EventClusterSet extends SimpleClass{constructor(e){super(),super.assign(e)}trimIrregular(){let e=0;return this.clusters=this.clusters.filter(t=>{const s=t.regular;return s||(console.debug("irregular cluster:",t),++e),s}),e?console.debug("Irregular clusters trimmed:",`${e}/${this.clusters.length+e}`):console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`),e}}EventClusterSet.className="EventClusterSet";class PatchMeasure extends SimpleClass{constructor(e){super(),Object.assign(this,e)}get staffN(){return Math.floor(Math.log2(this.staffMask))+1}get basics(){return Array(this.staffN).fill(this.basic)}get duration(){return Math.max(0,...(this.voices||[]).map(e=>e.map(e=>this.events.find(t=>t.id===e)).reduce((e,t)=>e+t.duration,0)))}}PatchMeasure.className="PatchMeasure",function(e){e.ClefG="clefs-G",e.ClefF="clefs-F",e.ClefC="clefs-C",e.TimesigC44="timesig-C44",e.TimesigC22="timesig-C22",e.TimesigZero="zero|timesig0",e.TimesigOne="one|timesig1",e.TimesigTwo="two|timesig2",e.TimesigThree="three|timesig3",e.TimesigFour="four|timesig4",e.TimesigFive="five|timesig5",e.TimesigSix="six|timesig6",e.TimesigSeven="seven|timesig7",e.TimesigEight="eight|timesig8",e.TimesigNine="nine|timesig9",e.OctaveShift8va="octave-a",e.OctaveShift8vb="octave-b",e.OctaveShift0="octave-0",e.Zero="zero|n0",e.One="one|n1",e.Two="two|n2",e.Three="three|n3",e.Four="four|n4",e.Five="five|n5",e.Six="six|n6",e.Seven="seven|n7",e.Eight="eight|n8",e.Nine="nine|n9",e.AccNatural="accidentals-natural",e.AccSharp="accidentals-sharp",e.AccDoublesharp="accidentals-doublesharp",e.AccFlat="accidentals-flat",e.AccFlatflat="accidentals-flatflat",e.KeyNatural="accidentals-natural|key-natural",e.KeySharp="accidentals-sharp|key-sharp",e.KeyFlat="accidentals-flat|key-flat",e.NoteheadS0="noteheads-s0",e.NoteheadS1="noteheads-s1",e.NoteheadS2="noteheads-s2",e.NoteheadS1stemU="noteheads-s1|noteheads-s1-u",e.NoteheadS1stemD="noteheads-s1|noteheads-s1-d",e.NoteheadS2stemU="noteheads-s2|noteheads-s2-u",e.NoteheadS2stemD="noteheads-s2|noteheads-s2-d",e.Rest0="rests-0o",e.Rest1="rests-1o",e.Rest2="rests-2",e.Rest3="rests-3",e.Rest4="rests-4",e.Rest5="rests-5",e.Rest6="rests-6",e.Rest0W="rests-0",e.RestM1="rests-M1",e.Flag3="flags-u3",e.Flag4="flags-u4",e.Flag5="flags-u5",e.Flag6="flags-u6",e.Flag7="flags-u7",e.Flag8="flags-u8",e.BeamLeft="|beam-left",e.BeamRight="|beam-right",e.BeamContinue="|beam-continue",e.TremoloLeft="|tremolo-left",e.TremoloRight="|tremolo-right",e.TremoloMiddle="|tremolo-middle",e.SlurBegin="|slur-begin",e.SlurEnd="|slur-end",e.TieBegin="|tie-begin",e.TieEnd="|tie-end",e.VoltaLeft="|volta-left",e.VoltaRight="|volta-right",e.VoltaAlternativeBegin="|volta-alter-begin",e.BarTerminal="|bar-terminal",e.BarSegment="|bar-segment",e.Dot="|dot",e.DotDot="|dotdot",e.f="f",e.p="p",e.m="m",e.r="r",e.s="s",e.z="z",e.WedgeCrescendo="|wedge-crescendo",e.WedgeDiminuendo="|wedge-diminuendo",e.WedgeClose="|wedge-close",e.CrescendoBegin="|wedge-crescendo",e.DecrescendoBegin="|wedge-diminuendo",e.CrescendoEnd="|wedge-close",e.DecrescendoEnd="|wedge-close",e.ScriptFermata="scripts-ufermata",e.ScriptShortFermata="scripts-ushortfermata",e.ScriptSforzato="scripts-sforzato",e.ScriptStaccato="scripts-staccato",e.ScriptStaccatissimo="scripts-ustaccatissimo",e.ScriptTurn="scripts-turn",e.ScriptTrill="scripts-trill",e.ScriptSegno="scripts-segno",e.ScriptCoda="scripts-coda",e.ScriptArpeggio="scripts-arpeggio",e.ScriptPrall="scripts-prall",e.ScriptMordent="scripts-mordent",e.ScriptMarcato="scripts-umarcato",e.ScriptTenuto="scripts-tenuto",e.ScriptPortato="scripts-uportato",e.PedalStar="pedal-star",e.PedalPed="pedal-Ped",e.Text="|text",e.GraceNotehead="|grace-notehead"}(K||(K={}));const Z=K,J=Object.values(K),Q=J.filter(e=>/clefs-/.test(e)),ee=J.filter(e=>/timesig/.test(e)),te=J.filter(e=>/timesig-/.test(e)),se=J.filter(e=>/timesig\d/.test(e)),ie=J.filter(e=>/octave-/.test(e)),re=J.filter(e=>/n\d/.test(e)),ne=J.filter(e=>/accidentals-/.test(e)),ae=J.filter(e=>/noteheads-/.test(e)),oe=[Z.NoteheadS0,Z.NoteheadS1,Z.NoteheadS2],ce=J.filter(e=>/noteheads-.+-[ud]/.test(e)),le=J.filter(e=>/rests-/.test(e)),ue=J.filter(e=>/flags-/.test(e)),he=J.filter(e=>/volta-/.test(e)),me=J.filter(e=>/^[a-z]$/.test(e)),fe=J.filter(e=>/scripts-/.test(e)),de=J.filter(e=>/pedal-/.test(e)),pe=[Z.Dot,Z.DotDot],ge=[Z.SlurBegin,Z.SlurEnd,Z.TieBegin,Z.TieEnd],ye=J.filter(e=>/beam-/.test(e)),ve=J.filter(e=>/wedge-/.test(e)),xe=[...re,...me,...ve,...de,...ge,Z.ScriptFermata,Z.ScriptShortFermata,Z.ScriptSforzato,Z.ScriptStaccato,Z.ScriptStaccatissimo,Z.ScriptTurn,Z.ScriptTrill,Z.ScriptPrall,Z.ScriptMordent,Z.ScriptMarcato,Z.ScriptTenuto,Z.ScriptPortato],Se=[...de],be=[...Q,...ee,...re,...ne,Z.NoteheadS0,Z.NoteheadS1,Z.NoteheadS2,...le,...me,...fe,...de,...pe],ke={};Q.forEach(e=>ke[e]=1),se.forEach(e=>ke[e]=1),ne.forEach(e=>ke[e]=.5),ae.forEach(e=>ke[e]=.5),le.forEach(e=>ke[e]=.5),pe.forEach(e=>ke[e]=.5);const Te={};te.forEach(e=>Te[e]=0),he.forEach(e=>Te[e]=0);class Token{constructor(e){Object.assign(this,e)}get typeId(){return this.type.split("|").reverse()[0]}get isPredicted(){return Number.isFinite(this.confidence)}get isNotehead(){return ce.includes(this.type)||this.type===K.NoteheadS0}get isContexted(){return Q.includes(this.type)||ee.includes(this.type)||ie.includes(this.type)||ne.includes(this.type)}get isAccessory(){return re.includes(this.type)||me.includes(this.type)||fe.includes(this.type)||de.includes(this.type)}get division(){switch(this.type){case Z.NoteheadS0:return 0;case Z.NoteheadS1stemU:case Z.NoteheadS1stemD:return 1;case Z.NoteheadS2stemU:case Z.NoteheadS2stemD:return 2;case Z.Flag3:return 3;case Z.Flag4:return 4;case Z.Flag5:return 5;case Z.Flag6:return 6;case Z.Flag7:return 7;case Z.Flag8:return 8;case Z.RestM1:return-1;case Z.Rest0:return 0;case Z.Rest1:return 1;case Z.Rest2:return 2;case Z.Rest3:return 3;case Z.Rest4:return 4;case Z.Rest5:return 5;case Z.Rest6:return 6}return null}get dots(){switch(this.type){case Z.Dot:return 1;case Z.DotDot:return 2}return null}get direction(){switch(this.type){case Z.NoteheadS1stemU:case Z.NoteheadS2stemU:return"u";case Z.NoteheadS1stemD:case Z.NoteheadS2stemD:return"d"}return null}get width(){switch(this.type){case Z.NoteheadS0:return M.NoteheadS0;case Z.NoteheadS1stemU:case Z.NoteheadS1stemD:return M.NoteheadS1;case Z.NoteheadS2stemU:case Z.NoteheadS2stemD:return M.NoteheadS2}}get left(){switch(this.type){case Z.NoteheadS0:return this.x-this.width/2;case Z.NoteheadS1stemU:case Z.NoteheadS2stemU:return this.x-this.width;case Z.NoteheadS1stemD:case Z.NoteheadS2stemD:return this.x}return this.x}get right(){switch(this.type){case Z.NoteheadS0:return this.x+this.width/2;case Z.NoteheadS1stemU:case Z.NoteheadS2stemU:return this.x;case Z.NoteheadS1stemD:case Z.NoteheadS2stemD:return this.x+this.width}return this.x}get voiceIndices(){return!this.voice||this.voice<0?[]:Array(Math.floor(Math.log2(this.voice))+1).fill(null).reduce((e,t,s)=>this.voice&1<"CDEFGAB"[(e.note+700)%7]).join("")}get zeroHolder(){return!!this.grace||this.tremoloCatcher}}var Oe;EventTerm.className="EventTerm",function(e){e[e.Clef=0]="Clef",e[e.KeyAcc=1]="KeyAcc",e[e.Acc=2]="Acc",e[e.OctaveShift=3]="OctaveShift",e[e.TimeSignatureC=4]="TimeSignatureC",e[e.TimeSignatureN=5]="TimeSignatureN"}(Oe||(Oe={}));class ContextedTerm extends Term{constructor(e){super(),Object.assign(this,e)}get type(){return Q.includes(this.tokenType)?Oe.Clef:/\|key-/.test(this.tokenType)?Oe.KeyAcc:/accidentals-/.test(this.tokenType)?Oe.Acc:ie.includes(this.tokenType)?Oe.OctaveShift:te.includes(this.tokenType)?Oe.TimeSignatureC:se.includes(this.tokenType)?Oe.TimeSignatureN:null}get staffLevel(){return[Oe.OctaveShift,Oe.Clef,Oe.KeyAcc].includes(this.type)}get prior(){return this.tick-.1}get clef(){switch(this.tokenType){case K.ClefG:return-this.y-2;case K.ClefF:return 2-this.y;case K.ClefC:return-this.y}return null}get alter(){switch(this.tokenType){case K.AccNatural:case K.KeyNatural:return 0;case K.AccSharp:case K.KeySharp:return 1;case K.AccFlat:case K.KeyFlat:return-1;case K.AccDoublesharp:return 2;case K.AccFlatflat:return-2}return null}get octaveShift(){switch(this.tokenType){case K.OctaveShift8va:return-1;case K.OctaveShift0:return 0;case K.OctaveShift8vb:return 1}return null}get number(){switch(this.tokenType){case K.TimesigZero:return 0;case K.TimesigOne:return 1;case K.TimesigTwo:return 2;case K.TimesigThree:return 3;case K.TimesigFour:return 4;case K.TimesigFive:return 5;case K.TimesigSix:return 6;case K.TimesigSeven:return 7;case K.TimesigEight:return 8;case K.TimesigNine:return 9}return null}}ContextedTerm.className="ContextedTerm";class MarkTerm extends Term{get prior(){return this.tick+.01}}MarkTerm.className="MarkTerm";const Be=Array(7).fill(0).map((e,t)=>String.fromCodePoint(119133+t));class TempoTerm extends MarkTerm{static fromNumeralText(e){if(/.+=.*\d+/.test(e)){const[t,s]=e.split("=");let i=Be.findIndex(e=>t.includes(e));i=i>=0?i:2;let r=(2**i).toString();return t.includes(".")&&(r+="."),new TempoTerm({tick:0,duration:r,beats:s})}return null}constructor(e){super(),Object.assign(this,e)}get prior(){return this.tick-.01}get durationMagnitude(){const[e,t,s]=this.duration.match(/^(\d+)(\.)?$/);return we/Number(t)*(s?1.5:1)}get bpm(){const[e]=this.beats.match(/\d+/)||[90];return Number(e)*this.durationMagnitude*4/we}isValid(e=[10,400]){const t=this.bpm;return Number.isFinite(this.bpm)&&t>=e[0]&&t{const t=(e=>{const t=new Map;return e.rows.forEach(e=>{if(1===e.events.length){const t=e.events[0];t.rest&&0===t.division&&(t.rest="R")}}),e.events.forEach(e=>{const s=Math.round(10*e.pivotX)/10;let i=0;i=e.fullMeasureRest?Math.min(s,...t.keys()):[...t.keys()].find(s=>{const i=t.get(s),r=Math.min(...i.map(e=>e.left)),n=Math.max(...i.map(e=>e.right));return Math.min(n,e.right)-Math.max(r,e.left)>.62*M.NoteheadS1})||s,e.roundX=i;const r=t.get(i)||[];t.set(i,r),r.push(e)}),t})(e);let s=0;const i=new Set([s]),r=[...t.entries()].sort(([e],[t])=>e-t);for(const[e,t]of r)t.forEach(e=>{e.predisposition&&(e.rest=e.rest&&e.predisposition.fullMeasure>.5?"R":e.rest,e.grace=e.predisposition.grace?Ee.Grace:null,e.division=G(e.predisposition.divisionVector),e.dots=G(e.predisposition.dotsVector),e.predisposition.timeWarped>.5&&(e.timeWarp=D(2,3))),e.fullMeasureRest?e.tick=0:(e.zeroHolder&&(s-=e.duration),!e.zeroHolder&&e.predisposition&&Number.isInteger(e.predisposition.tick)?e.tick=e.predisposition.tick:e.tick=s,i.add(e.tick+e.duration))}),i.delete(s),i.size&&(s=Math.min(...i));Number.isInteger(e.estimatedDuration)?e.duration=e.estimatedDuration:e.duration=Math.max(...i,0)},e.computeMeasureVoices=e=>{e.voices=[];for(const t of e.rows){const s=t.events.filter(e=>!(e.grace||e.tremoloCatcher||e.fullMeasureRest||e.predisposition&&e.predisposition.fake>.5)),i=new Set(s);for(;i.size;){let t=0;const r=[],n=e=>{r.push(e.id),e.zeroHolder||(t+=e.duration),i.delete(e)},a=s.find(e=>i.has(e));for(a.alignedTick>0&&(t=a.alignedTick),n(a);;){const e=s.find(e=>i.has(e)&&e.alignedTick===t);if(!e)break;n(e)}e.voices.push(r)}}}}(Ae||(Ae={}));var Pe,Re,De;!function(e){const t=1921920,s=.7071067811865475,i=[[null,null],[null,Ne.Open],[Ne.Open,Ne.Continue],[Ne.Open,Ne.Close],[Ne.Continue,Ne.Continue],[Ne.Continue,Ne.Close],[Ne.Close,null],[Ne.Close,Ne.Open]].map(e=>e.join("-")),r=(e,t)=>{if(!e.events.length)return{events:[],voices:[],duration:0};return new Solver(e,t).solve()};e.estiamteMeasure=e=>{const r=e.events.filter(e=>!e.zeroHolder).map(s=>({id:s.id,staff:s.staff,x:s.x,tickEstimated:s.predisposition&&Number.isFinite(s.predisposition.tick)?s.predisposition.tick:s.x,tipX:s.tipX,y:s.tipY+100*s.staff,duration:s.mainDuration*t/we,division:s.division,dots:s.dots,stemDirection:s.stemDirection,beam:s.beam,rest:s.rest,pR:"R"===s.rest?1:"r"===s.rest&&0===s.division?Math.tanh(s.x-e.eventStartX):0,fakeP:s.predisposition&&s.predisposition.fakeP||0,shrinkness:s.predisposition?s.predisposition.timeWarped:null}));let n=t*e.timeSignature.numerator/e.timeSignature.denominator;Number.isFinite(e.estimatedDuration)&&(n=Math.max(n,A(e.estimatedDuration,480480)));const a=e.staffGroups.reduce((e,t,s)=>(t.forEach(t=>e[t]=s),e),{}),o=[0,...r.map(e=>e.id)],c=r.map(t=>({...t,id:o.indexOf(t.id),x:t.x-e.startX,confidence:(1-t.pR)*(1-t.fakeP),shrinkness:Number.isFinite(t.shrinkness)?t.shrinkness:Math.tanh((t.division-.1*t.dots)/4),staffGroup:a[t.staff]})),l=Array(o.length+1).fill(null).map(()=>Array(o.length).fill(0)),u=Array(o.length).fill(null).map(()=>Array(o.length).fill(0)),h=e=>g.default(e/1.6)*g.default(1.6/e);for(const t of c){for(const e of c){if(u[t.id][e.id]=t!==e&&t.tickEstimated>=e.tickEstimated?1-g.default((t.tickEstimated-e.tickEstimated)*s/.6):0,t.staffGroup!==e.staffGroup)l[t.id][e.id]=0;else if(t.x<=e.x)l[t.id][e.id]=0;else{const s=Math.exp(2*-Math.abs(t.staff-e.staff)),i=t.staff===e.staff?Math.exp(-Math.abs(t.y-e.y)/16):1,r=t.x-e.x,n=t.tipX-e.tipX;l[t.id][e.id]=(s*i*Math.min(h(r),h(n)))**(1/3)}const r=(1-t.pR)*(1-e.pR);u[t.id][e.id]*=r,l[t.id][e.id]*=r,u[t.id][e.id]<.01&&(u[t.id][e.id]=0),t.stemDirection&&e.stemDirection&&t.stemDirection!==e.stemDirection&&(l[t.id][e.id]*=.9),t.rest||e.rest||i.includes([e.beam,t.beam].join("-"))||(l[t.id][e.id]*=.2)}l[o.length][t.id]=h(e.width-t.x)**(1/3)}return{ids:o,events:c,expectedDuration:n,measureShrinkness:0,endX:e.position.right,matrixH:l,matrixV:u}},e.regulateMeasure=async(s,{solver:i=null,...n})=>{const a=e.estiamteMeasure(s),{ids:o,matrixH:c,matrixV:l}=a;if(s.matrixH){console.assert(s.matrixH.length>o[o.length-1]&&s.matrixH[0].length>o[o.length-1],"matrix shape mismatch:",o.length,`${s.matrixH.length}x${s.matrixH[0].length}`,`${c.length}x${c[0].length}`);for(let e=0;ee.forEach((e,i)=>{const r=s.matrixV[o[t]][o[i]];Number.isFinite(r)&&(l[t][i]=r)})),Number.isFinite(s.estimatedDuration)&&(a.measureShrinkness=Math.tanh(-3*Math.log(Math.min(1,s.estimatedDuration/s.duration)))),n.logger&&n.logger.info("--- MEASURE",s.measureIndex,"---",a);const u=i?await i(a,n):r(a,n),h=u.events.map(e=>({...e,id:a.ids[e.id]}));h.forEach(e=>{const i=s.events.find(t=>t.id===e.id);i.tick=Number.isFinite(e.tick)?Math.round(e.tick*we/t):null,i.tickGroup=e.tickGroup,i.timeWarp=e.timeWarp}),s.duration=Math.round(u.duration*we/t),s.voices=u.voices.map(e=>e.map(e=>a.ids[e])),s.solutionStat={loss:u.loss,solverCredits:u.credits,solverTimes:u.times},s.events.forEach(e=>{const t=h.find(t=>t.id===e.id);t&&(Number.isFinite(t.tick)||"r"!==e.rest||0!==e.division?"R"===e.rest&&(e.tick=0,e.tickGroup=0,e.duration=s.duration,s.voices.push([e.id])):(e.tick=0,e.tickGroup=0,e.rest="R",e.duration=s.duration,s.voices.push([e.id])))})},e.regulateMeasureWithRectification=async(e,i,{solver:n=null,...a})=>{const o=e.events.filter(e=>!e.zeroHolder).map(s=>{const r=i.events.find(e=>e&&e.id===s.id),n=Number.isFinite(r?.division)?r.division:s.division,a=Number.isFinite(r?.dots)?r.dots:s.dots,o=t*2**-n*(2-2**-a);return{id:s.id,staff:s.staff,x:s.x,tickEstimated:s.predisposition?.tick,y:s.tipY+100*s.staff,duration:o,pR:"R"===s.rest?1:"r"===s.rest&&0===s.division?Math.tanh(s.x-e.eventStartX):0,fakeP:s.predisposition&&s.predisposition.fakeP||0,shrinkness:s.predisposition?.timeWarped||0}});let c=t*e.timeSignature.numerator/e.timeSignature.denominator;Number.isFinite(e.estimatedDuration)&&(c=Math.max(c,A(e.estimatedDuration,480480)));const l=e.staffGroups.reduce((e,t,s)=>(t.forEach(t=>e[t]=s),e),{}),u=[0,...o.map(e=>e.id)],h=o.map(t=>({...t,id:u.indexOf(t.id),x:t.x-e.startX,confidence:(1-t.pR)*(1-t.fakeP),shrinkness:t.shrinkness,staffGroup:l[t.staff]})),m=Array(u.length+1).fill(null).map(()=>Array(u.length).fill(0)),f=Array(u.length).fill(null).map(()=>Array(u.length).fill(0));for(const e of h)for(const t of h){f[e.id][t.id]=e!==t&&e.tickEstimated>=t.tickEstimated?1-g.default((e.tickEstimated-t.tickEstimated)*s/.6):0;const i=(1-e.pR)*(1-t.pR);f[e.id][t.id]*=i,f[e.id][t.id]<.01&&(f[e.id][t.id]=0)}console.assert(e.matrixH&&e.matrixH.length>u[u.length-1]&&e.matrixH[0].length>u[u.length-1],"matrix shape mismatch:",u.length,`${e.matrixH.length}x${e.matrixH[0].length}`,`${m.length}x${m[0].length}`);for(let t=0;t{const a=i.events.find(t=>t&&t.id===e),o=Number.isFinite(s)?Math.round(s*we/t):s;return{id:e,tick:o,tickGroup:r,timeWarp:n,division:a?.division,dots:a?.dots}}),S=Math.round(y.duration*we/t);return{events:x,voices:y.voices,duration:S,priority:v}}}(Pe||(Pe={}));class SpartitoMeasure extends SimpleClass{static reorderEvents(e,t){const s=[],i=e.map(e=>({id:e.id,staff:e.staff,x:e.x/.7,rx:0,ry:t[e.staff]+e.tipY,tipY:e.tipY,prior:0}));i.sort((e,t)=>e.x-t.x),i.slice(1).forEach((e,t)=>{const s=Math.min(Math.round(e.x-i[t].x),2);e.rx=i[t].rx+s}),i.forEach(e=>{e.prior=1e4*e.staff+e.rx+.01*e.tipY,s.includes(e.ry)||s.push(e.ry)}),i.sort((e,t)=>e.prior-t.prior),s.sort((e,t)=>e-t);let r=0;const n=s.map((e,t)=>(!t||s[t]-s[t-1]<.5||++r,r)),a=i.map(t=>new EventTerm({...e.find(e=>e.id===t.id),intX:t.rx,intY:n[s.indexOf(t.ry)]}));return a.forEach((e,t)=>e.id=t+1),a}constructor(e){super(),super.assign(e),this.originalRegulationHash||this.regulated||(this.originalRegulationHash=this.regulationHash),this.barTypes=this.barTypes||{},this.regulated&&this.position&&this.postRegulate()}get timeSignature(){return this.basics&&this.basics[0].timeSignature}get keySignature(){return this.basics&&this.basics[0].keySignature}get timeSignatureChanged(){return this.contexts.filter(Boolean)[0].some(e=>[Oe.TimeSignatureC,Oe.TimeSignatureN].includes(e.type))}get doubtfulTimesig(){return this.basics&&this.basics[0].doubtfulTimesig}get regulated(){return!!this.voices}get validRegulated(){return!!this.voices&&this.voices.flat(1).every(e=>Number.isFinite(this.events.find(t=>t.id===e)?.tick))}get rows(){return this.contexts.map((e,t)=>({events:this.events.filter(e=>e.staff===t),contexts:e}))}get eventStartX(){return this.events.length?Math.min(...this.events.map(e=>e.x)):this.startX}get startX(){return this.position.left}get width(){return this.position.right-this.position.left}get tickMap(){return this.events.concat([this.endEvent]).filter(Boolean).reduce((e,t)=>(Number.isFinite(t.tick)&&(e.has(t.tick)||e.set(t.tick,[]),e.get(t.tick).push(t)),e),new Map)}get tickToX(){return[...this.tickMap.entries()].reduce((e,[t,s])=>{if((s=s.filter(e=>!e.fullMeasureRest&&!e.grace)).length){const i=Math.min(...s.map(e=>e.x));e[t]=i}return e},{})}get tickRates(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest);return e.sort((e,t)=>e.x-t.x),e.slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)})}get tickRatesInStaves(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest&&!e.grace).reduce((e,t)=>(e[t.staff]=e[t.staff]||[],e[t.staff].push(t),e),{}),t=Object.values(e).map(e=>e.sort((e,t)=>e.x-t.x).slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)}));return[].concat(...t)}get tickRatesInGroups(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest).reduce((e,t)=>{const s=this.staffGroups.findIndex(e=>e.includes(t.staff));return e[s]=e[s]||[],e[s].push(t),e},{}),t=Object.values(e).map(e=>e.sort((e,t)=>e.x-t.x).slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)}));return[].concat(...t)}get tickTwist(){if(!this.duration||!this.staffGroups)return;const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest&&!e.grace&&!e.tremoloCatcher&&!(e.rest&&0===e.division)).reduce((e,t)=>{const s=this.staffGroups.findIndex(e=>e.includes(t.staff));return e[s]=e[s]||[],e[s].push(t),e},{}),t=Object.values(e).map(e=>{const t=[...e].sort((e,t)=>e.pivotX-t.pivotX),s=this.position.right-t[0].x,i=t.slice(1).map((e,i)=>{const r=t[i],n=e.pivotX-r.pivotX,a=e.tick-r.tick;if(!a)return n/s;return(4*Math.atan2(a/this.duration,n/s)/Math.PI-1)**2});return Math.max(0,...i)});return Math.max(0,...t)}get eventMap(){return this.events.reduce((e,t)=>(e[t.id]=t,e),{})}get empty(){return!this.events?.length||!this.voices?.length}get hasIllEvent(){const e=this.voices.flat(1),t=this.eventMap;return this.regulated&&e.some(e=>{const s=t[e];return!s.zeroHolder&&!Number.isFinite(s.tick)&&!s.fullMeasureRest})}get brief(){return[`${this.timeSignature.numerator}/${this.timeSignature.denominator}`,...this.events.map(e=>[e.staff,e.intX,Math.round(e.tip?e.tip.y:e.ys?.[0]??0),e.fullMeasureRest?0:e.division,e.fullMeasureRest?0:e.dots,e.rest?"r":"",e.grace||"",e.stemDirection,e.beam||""].join("|"))].join("\n")}get regulationHash(){return p.default(this.brief)}get regulationHash0(){return this.originalRegulationHash||this.regulationHash}get regulationHashes(){return Array.from(new Set([this.originalRegulationHash,this.regulationHash].filter(Boolean)))}get featureWords(){if(!this.regulated||!this.voices||!this.voices.length)return null;const e=this.tickRatesInStaves.some(e=>e<0),t=this.events.filter(e=>!e.zeroHolder&&!e.rest).map(e=>e.ys).flat(1).map(e=>"Y"+2*-e),s=Array.from(new Set(t));this.keySignature&&s.push(`K${this.keySignature}`);const i=this.voices.map(e=>e.map(e=>this.events.find(t=>t.id===e)).filter(e=>!e.zeroHolder&&!e.rest)).filter(e=>e.length),r=e?[]:i.map(e=>e.map(e=>e.scaleChord).join("-")),n=e?[]:i.map(e=>e.map(e=>e.division).join(""));return this.timeSignature&&n.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`),[s,r,n]}get barType(){if(this.voltaEnd)return"VoltaRight";const e=Object.entries(this.barTypes).sort((e,t)=>t[1]-e[1]);return e[0]&&e[0][1]>=1?e[0][0]:null}get partialDuration(){if(!Number.isFinite(this.duration))return!1;const e=$(we,this.timeSignature);return this.duration{const t=e.events.filter(e=>e.grace);if(!t.length)return;const s=[...e.tickMap.entries()].reduce((e,[t,s])=>(s.forEach(s=>{if(!s.grace){e[s.staff]=e[s.staff]||{};const i=e[s.staff][t];e[s.staff][t]=!i||i.x>s.x?s:i}}),e),{}),i=Object.entries(s).reduce((t,[s,i])=>{t[s]=Object.entries(i).map(([e,t])=>({event:t,tick:Number(e),preTick:-240,graces:[]})).sort((e,t)=>e.event.x-t.event.x),t[s].push({tick:e.duration,event:e.endEvent,preTick:0,graces:[]});let r=0;return t[s].forEach(e=>{e.tick>r&&(e.preTick=r,r=e.tick)}),t},{});t.forEach(e=>{const t=i[e.staff];if(t){const s=t.find(t=>t.event.x>e.x);s&&s.graces.push(e),e.roundX=e.x}}),Object.values(i).forEach(e=>e.forEach(e=>{if(e.graces.length){e.event.graceIds=e.graces.map(e=>e.id);const t=e.graces.reduce((e,t)=>e+t.duration,0),s=Math.min(t,e.tick-e.preTick)/t;let i=e.tick;[...e.graces].reverse().forEach(e=>{e.tick=Math.round(i-e.duration*s),i=e.tick})}}))})(this),(e=>{const t=e.events.filter(e=>e.tremoloCatcher&&!e.grace),s=e.events.filter(e=>e.tremoloLink===Ie.Pitcher&&!e.grace);t.forEach(t=>{let i=s.filter(e=>e.division===t.division&&e.xNumber.isFinite(e.tick)&&!e.grace&&!e.rest&&e.division===t.division&&e.dots===t.dots&&e.xt.x-e.x),i.length){const e=i[0];e.catcherId=t.id;const r=Math.max(e.tremolo||3,t.tremolo||3);e.tremolo=r,t.tremolo=r,t.tick||(t.tick=e.tick+e.duration/2);const n=s.indexOf(e);n>=0&&s.splice(n,1)}})})(this),this.updateContextTick()}updateRoundX(){const e=this.tickToX;e&&this.events.forEach(t=>{const s=e[t.tick];Number.isFinite(s)&&(t.roundX=s)})}updateContextTick(){if(!this.staffGroups)return;const e=this.contexts.flat(1);this.staffGroups.flat(1).forEach(t=>{const s=[...this.events.filter(e=>e.staff===t),...e.filter(e=>e.staff===t)];s.sort((e,t)=>t.x-e.x);let i=this.duration;s.forEach(e=>{e instanceof EventTerm?e.fullMeasureRest||e.zeroHolder||(i=e.tick):e instanceof ContextedTerm&&(e.tick=i)})})}asSolution(e=void 0){return this.regulated?{events:this.events.map(t=>{const s={id:t.id,tick:t.tick,tickGroup:t.tickGroup,timeWarp:t.timeWarp};if(e){const i=e.events.find(e=>e.id===t.id);i&&(t.division!==i.division&&(s.division=t.division),t.dots!==i.dots&&(s.dots=t.dots),t.grace!==i.grace&&(s.grace=!!t.grace),t.beam!==i.beam&&(s.beam=t.beam),t.fullMeasureRest!==i.fullMeasureRest&&(s.fullMeasure=t.fullMeasureRest))}return s}),voices:this.voices,duration:this.duration,priority:-this.solutionStat?.loss}:null}applySolution(e){e.timeSignature&&this.basics.forEach(t=>{t.timeSignature=e.timeSignature,t.doubtfulTimesig=!1}),this.voices=e.voices,this.duration=e.duration,this.events.forEach(t=>{t.timeWarp=null,t.tick=null,t.tickGroup=null;const s=e.events?.find(e=>e.id===t.id);s&&(t.tick=s.tick,t.timeWarp=s.timeWarp,t.tickGroup=s.tickGroup,Number.isFinite(s.division)&&(t.division=s.division),Number.isFinite(s.dots)&&(t.dots=s.dots),void 0!==s.beam&&(t.beam=s.beam),void 0!==s.grace&&(t.grace=s.grace?Ee.Grace:void 0),s.fullMeasure&&(t.rest="R"))}),Number.isFinite(e.priority)&&(this.solutionStat={loss:-e.priority}),this.postRegulate()}cleanupRegulation(){this.voices=null,this.duration=null,this.events.forEach(e=>{e.tick=null,e.tickGroup=null,e.timeWarp=null})}regulateTest(){this.duration=0,this.voices=this.rows.map(e=>e.events.map(e=>e.id)),this.voices.forEach(e=>{let t=0;e.map(e=>this.events.find(t=>t.id===e)).forEach((e,s)=>{e.tickGroup=s,e.tick=t,t+=e.duration}),this.duration=Math.max(this.duration,t)})}regulateSimple(){Ae.computeMeasureTicks(this),Ae.computeMeasureVoices(this)}async regulateEquations(e){await Pe.regulateMeasure(this,e)}async regulate({policy:e="advanced",...t}={}){switch(e){case"test":this.regulateTest();break;case"equations":case"advanced":await this.regulateEquations(t);break;default:this.regulateSimple()}this.postRegulate()}createPatch(){return new PatchMeasure({measureIndex:this.measureIndex,staffMask:this.staffMask,basic:this.basics[0],events:this.events,contexts:this.contexts,marks:this.marks,voices:this.voices})}createClusters(){const e=this.voices&&new Set(this.voices.flat(1));return this.staffGroups.filter(e=>e.length).map(t=>{const s=this.position.staffYs[0],i=e=>this.position.staffYs[t.indexOf(e)]-s,r=this.events.filter(e=>t.includes(e.staff));if(!r.length)return null;const n=r.map(s=>({index:s.id,voice:(this.voices||[]).findIndex(e=>e.includes(s.id)),type:s.rest?X.REST:X.CHORD,staff:t.indexOf(s.staff),x:s.tipX,pivotX:s.pivotX,y1:i(s.staff)+("u"===s.stemDirection?s.tipY:s.ys[s.ys.length-1]),y2:i(s.staff)+("u"===s.stemDirection?s.ys[0]:s.tipY),headY:"u"===s.stemDirection?s.ys[0]:s.ys[s.ys.length-1],feature:s.feature,division:s.division,dots:s.dots,beam:s.beam||null,stemDirection:s.stemDirection,grace:!!s.grace,tremoloCatcher:s.tremoloCatcher,timeWarped:!!s.timeWarp,fullMeasure:s.fullMeasureRest,tick:s.tick||0,fake:!s.fullMeasureRest&&!s.grace&&this.voices&&!e.has(s.id)}));if(!n.some(e=>!e.fake))return null;const a=$(we,this.timeSignature);n.unshift({index:0,type:X.BOS,staff:null,division:null,beam:null,dots:null,stemDirection:null,grace:!1,tremoloCatcher:!1,fullMeasure:!1,x:this.position.left,pivotX:this.position.left,y1:0,y2:0,headY:0,feature:null,timeWarped:this.durationn.map(()=>0)),this.voices.forEach(e=>{let t=0;e.forEach(e=>{const s=n.findIndex(t=>t.index===e);s>0&&t>=0&&(o[s][t]=1),t=s}),t>=0&&(o[n.length-1][t]=1)}));const c={...this.solutionStat,patched:this.patched},l=this.backgroundImages&&this.backgroundImages.map(({url:e,position:t})=>({url:e,position:{...t,y:t.y-s}}));return new EventCluster({index:this.measureIndex,duration:this.duration,signatureDuration:a,staffY0:s,elements:n,matrixH:o,annotation:c,backgroundImages:l})}).filter(Boolean)}applyClusters(e){const t=this.events.reduce((e,t)=>Math.max(e,t.id),0)+1;this.matrixH=Array(t+1).fill(null).map(()=>Array(t).fill(0)),e.forEach(e=>{const s=e.elements.map(e=>e.index);console.assert(e.matrixH.length===s.length-1,"unexpected matrixH size:",e.matrixH.length,s.length);for(let i=1;i{const t=this.events.find(t=>t.id===e.index);t&&(t.predisposition=e.predisposition,void 0!==t.predisposition.grace&&(t.grace=t.predisposition.grace?Ee.Grace:null))})}),this.estimatedDuration=e.reduce((e,t)=>e+t.estimatedDuration,0)/e.length}}SpartitoMeasure.className="SpartitoMeasure",SpartitoMeasure.blackKeys=["staffGroups","solutionStat","measureNumber","deposit"];class EditableEvent extends EventTerm{constructor(e){super(e)}get agent(){return new Proxy(this,{get(e,t){const s=e;switch(t){case"id":case"tick":case"duration":case"rest":case"division":case"dots":case"stemDirection":case"beam":case"tremolo":case"tremoloLink":case"arpeggioStyle":{const e=s[t];return void 0===e?null:e}case"tying":case"tied":case"glissando":{const e=s[t];return void 0!==e&&e}case"grace":return!!s.grace;case"timeWarp":return s.timeWarp?`${s.timeWarp.numerator}/${s.timeWarp.denominator}`:null;case"multiplier":return s.multiplier?`${s.multiplier.numerator}/${s.multiplier.denominator}`:null;case"pitches":return s.pitches}},set:(e,t,s)=>{const i=e;switch(t){case"tick":case"duration":case"rest":case"division":case"dots":case"stemDirection":case"tying":case"tied":case"beam":case"tremolo":case"tremoloLink":case"glissando":case"arpeggioStyle":return i[t]=s,!0;case"grace":return i.grace=s?Ee.Grace:null,!0;case"timeWarp":if(i.timeWarp=null,s&&"string"==typeof s){const e=s.match(/^(\d+)\/(\d+)/);e&&(i.timeWarp={numerator:parseInt(e[1]),denominator:parseInt(e[2])})}return!0;case"multiplier":if(i.multiplier=null,s&&"string"==typeof s){const e=s.match(/^(\d+)\/(\d+)/);e&&(i.multiplier={numerator:parseInt(e[1]),denominator:parseInt(e[2])})}return!0;case"id":case"pitches":return!0}return!1},ownKeys:()=>["id","duration","rest","division","dots","stemDirection","tying","tied","beam","timeWarp","multiplier","tremolo","tremoloLink","glissando","arpeggioStyle","tick","grace","pitches"],getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0})})}}class EditableMeasure extends SpartitoMeasure{constructor(e){super(e),this.events=null,this.events=e.events,this.events?.some(e=>!(e instanceof EditableEvent))&&(this.events=this.events.map(e=>new EditableEvent(e))),this.voices&&this.syncVoiceToEvents()}syncVoiceToEvents(){this.events.forEach(e=>e.voice=-1),this.voices.forEach((e,t)=>{e.forEach(e=>{const s=this.events.find(t=>t.id===e);s?s.voice=t:console.warn("no event with id:",e,this.events.length)})})}syncVoiceFromEvents(){const e=[];this.events.forEach(t=>{t?.voice>=0&&(e[t.voice]=e[t.voice]||[],e[t.voice].push(t))}),e.forEach(e=>e.sort((e,t)=>e.tick-t.tick)),this.voices=e.map(e=>e.map(e=>e.id))}get agent(){return new Proxy(this,{get:(e,t)=>{const s=e;switch(t){case"measureIndex":case"duration":return s[t];case"voices":return s.voices?.map(e=>e.join(","))||null;case"timeSignature":case"keySignature":case"doubtfulTimesig":return s.basics[0][t];case"toJSON":return()=>({measureIndex:s.measureIndex,voices:s.voices,duration:s.duration,timeSignature:s.basics[0].timeSignature,keySignature:s.basics[0].keySignature})}},set:(e,t,s)=>{const i=e;switch(t){case"timeSignature":case"keySignature":case"doubtfulTimesig":return i.basics[0][t]=s,i.basics=i.basics.map(()=>i.basics[0]),!0;case"duration":return i.duration=s,!0;case"measureIndex":case"voices":return!0}return!1},ownKeys:()=>["measureIndex","timeSignature","doubtfulTimesig","keySignature","duration","voices"],getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0})})}makeMIDI(e=120){if(!this.regulated)return null;const t=6e7/e,s=this.voices.map((e,s)=>{const i=e.map(e=>{const t=this.events.find(t=>t.id===e);if(t){const e=t.graceIds?t.graceIds.map(e=>this.events.find(t=>t.id===e)):[];return[...e,t]}return[]}).flat(1),r=i.filter(e=>!e.rest&&Number.isFinite(e.tick)&&e.tick>=0&&Number.isFinite(e.duration)).map(e=>e.pitches.map(t=>[{id:e.id,time:e.tick,type:"channel",subtype:"noteOn",channel:e.staff,noteNumber:q(t),velocity:96},{id:e.id,time:e.tick+e.duration,type:"channel",subtype:"noteOff",channel:e.staff,noteNumber:q(t)}])).flat(2);return r.sort(function(e,t){return e.time-t.time}),0===s&&r.unshift({time:0,type:"meta",subtype:"timeSignature",numerator:this.timeSignature.numerator,denominator:this.timeSignature.denominator,thirtyseconds:8},{time:0,type:"meta",subtype:"setTempo",microsecondsPerBeat:t}),r.forEach(e=>{e.ticks=Math.round(e.time-0)}),r.forEach((e,t)=>{e.deltaTime=e.ticks-(t>0?r[t-1].ticks:0)}),r.push({deltaTime:0,type:"meta",subtype:"endOfTrack"}),r});return{header:{formatType:0,ticksPerBeat:480},tracks:s}}}EditableMeasure.className="EditableMeasure",EditableMeasure.blackKeys=[],function(e){e.ByLines="ByLines",e.ByBlocks="ByBlocks"}(Re||(Re={})),function(e){e.Title="Title",e.Author="Author",e.TempoText="TempoText",e.TempoNumeral="TempoNumeral",e.TextualMark="TextualMark",e.Lyric="Lyric",e.Instrument="Instrument",e.MeasureNumber="MeasureNumber",e.Times="Times",e.Alternation1="Alternation1",e.Alternation2="Alternation2",e.Chord="Chord",e.PageMargin="PageMargin",e.Other="Other"}(De||(De={}));const Fe={[Ne.Open]:1,[Ne.Continue]:0,[Ne.Close]:-1},Le=e=>{if(!e.regulated)return;const t=e.eventMap,s=e.events.length,i=e.voices.flat(1).length,r=e.events.filter(e=>e.timeWarp).length,n=new Set(e.events.filter(e=>e.timeWarp&&!(e.rest&&0===e.division)).map(e=>`${e.timeWarp.numerator}/${e.timeWarp.denominator}`)),a=new Set(n);a.delete("2/3");const o=e.voices.some(e=>{const s=e.map(e=>t[e]);if(!s.some(e=>e.timeWarp))return!1;let i=0,r=0,n=0;return s.some((e,t)=>{const a=e.timeWarp?e.timeWarp.denominator:0;if(a!==i){if(i>0&&(r%i||n<2))return!0;r=0,n=0}return i=a,r+=e.duration,++n,!!(t===s.length-1&&i>0&&(r%i||n<2))})}),c=e.voices.some(e=>{const s=e.map(e=>t[e]);let i=0;return s.some(e=>!e.grace&&(e.ticke.timeWarp&&e.timeWarp.denominator>3).map(e=>e.duration)).size>1,u=$(we,e.timeSignature),h=e.doubtfulTimesig?e.duration:u,m=e.voices.flat(1).map(e=>t[e]),f=m.some(e=>!e||!Number.isFinite(e.tick)||!Number.isFinite(e.division)||e.division<0||!Number.isFinite(e.duration)||e.duration<=0),d=m.reduce((e,t)=>e||t.tick<0||t.tick+t.duration>h,!1),p=e.duration>u,g=m.some(e=>e.grace),y=e.events.filter(e=>e.grace).length,v=y>=m.length,x=m.some(e=>{let t=e.tick*2**(e.division+2);if(e.timeWarp&&(t*=e.timeWarp.denominator),!Number.isFinite(t))return!0;return R(Math.round(t),we)e.reduce(({status:e,broken:s},i,r)=>{const n=t[i];return n.beam?(0===r&&[Ne.Continue,Ne.Close].includes(n.beam)&&(e=1),e+=Fe[n.beam],s=s||!(e>=0&&e<=1)):n.rest||(s=s||0!==e),{status:e,broken:s}},{status:0,broken:!1})).some(({broken:e})=>e);let b=0,k=0;e.voices.forEach(s=>{const i=s.reduce((e,s)=>e+t[s].duration,0);b+=Math.max(0,e.duration-i),k+=Math.max(0,i-e.duration)}),b/=we;const T=e.events.filter(e=>!(e.grace||e.fullMeasureRest||e.tremoloCatcher||e.predisposition&&!(e.predisposition.fakeP<.1)||Number.isFinite(e.tick))).length,w=e.events.filter(e=>!(e.fullMeasureRest||e.grace||e.tremoloCatcher||m.includes(e))).length,{voiceRugged:M}=e.voices.flat(1).reduce((e,t)=>!e.voiceRugged&&e.es.has(t)?{voiceRugged:!0,es:e.es}:(e.es.add(t),e),{voiceRugged:!1,es:new Set}),E=e.tickTwist||0,N=f||E>=1||c||M||e.tickRatesInStaves.some(e=>e<0)||T>2||!e.timeSignature||d||e.duration>h||e.events.some(e=>e.timeWarp&&e.timeWarp.numerator/e.timeWarp.denominator<=.5),I=!N&&!p&&E<.2&&!o&&!a.size&&!x&&!b&&!k&&!!e.voices.length&&!S&&!g&&!v&&(e.duration===h||Number.isFinite(e.estimatedDuration)&&e.estimatedDuration<=.75*h),C=!(N||p||!(E<.3)||o||x||k||S||g);let _=Math.min(h,3840);Number.isFinite(e.estimatedDuration)&&(_=Math.max(0,Math.min(_,e.estimatedDuration)));const O=e.duration/_;let B=0;if(e.patched&&!f)B=1;else if(!N){const t=Math.tanh(1*Math.abs(b/Math.max(1,e.voices.length)));let s=Math.min(h,3840);Number.isFinite(e.estimatedDuration)&&(s=Math.max(0,Math.min(s,e.estimatedDuration)));B=(1-t)*(1-(s?Math.max(0,1-O)**2:0))*(1-Math.tanh(a.size))*(1-E**2)}return{events:s,validEvents:i,voiceRugged:M,nullEvents:T,fakeEvents:w,warpedEvents:r,complicatedTimewarp:l,spaceTime:b,surplusTime:k,durationRate:O,beamBroken:S,fractionalWarp:o,irregularWarpsN:a.size,irregularTick:x,tickTwist:E,tickOverlapped:c,graceInVoice:g,graceN:y,graceDominant:v,perfect:I,fine:C,error:N,qualityScore:B}};var $e;!function(e){e.Ordinary="ordinary",e.Full="full",e.Conservative="conservative",e.Once="once"}($e||($e={}));const je=(e,t=$e.Ordinary)=>[].concat(...e.map(e=>e.serialize(t))),He=(e,{withBrackets:t=!1}={})=>{let s="",i=!1;for(let t=0;t0&&!i&&(s+=", "),i=!1,s+=e[t].code)}return t?`[${s}]`:s};class SingleMLayout extends SimpleClass{static from(e){const t=new SingleMLayout;return t.measure=e,t}constructor(e=void 0){super(),this.assign(e)}serialize(){return[this.measure]}get seq(){return[this]}get code(){return this.measure.toString()}}SingleMLayout.className="SingleMLayout";class BlockMLayout extends SimpleClass{static trimSeq(e){const t=[];for(const s of e)if(s instanceof BlockMLayout)for(const e of s.seq)t.push(e);else t.push(s);const s=[];let i=null;for(const e of t)e instanceof SingleMLayout?e.measure>i&&(s.push(e),i=e.measure):s.push(e);return s}static fromSeq(e){const t=new BlockMLayout;return t.seq=BlockMLayout.trimSeq(e),t}constructor(e=void 0){super(),this.assign(e)}serialize(e){return je(this.seq,e)}get code(){return He(this.seq,{withBrackets:!0})}}BlockMLayout.className="BlockMLayout";class VoltaMLayout extends SimpleClass{constructor(e=void 0){super(),this.assign(e)}serialize(e){const t=je(this.body);if(this.alternates){const s=this.alternates.map(e=>je(e)),i=s[s.length-1];switch(e){case $e.Ordinary:return t.concat(...s);case $e.Conservative:case $e.Full:return[...[].concat(...Array(this.times-1).fill(null).map((e,i)=>[...t,...s[i%(this.times-1)]])),...t,...i];case $e.Once:return[...t,...i]}}else switch(e){case $e.Ordinary:case $e.Conservative:case $e.Once:return t;case $e.Full:return[].concat(...Array(this.times).fill(null).map(()=>t))}console.warn("the current case not handled:",e,this)}get seq(){const e=this.alternates?this.alternates[this.alternates.length-1]:[];return[...this.body,...e]}get code(){const e=He(this.body,{withBrackets:!0});let t=`${this.times}*${e}`;return this.alternates&&(t+="{"+this.alternates.map(e=>He(e,{withBrackets:e.length>1})).join(", ")+"}"),t}}VoltaMLayout.className="VoltaMLayout";class ABAMLayout extends SimpleClass{constructor(e=void 0){super(),this.assign(e)}serialize(e){const t=this.main.serialize(e),s=je(this.main.seq,$e.Once),i=je(this.rest,e);switch(e){case $e.Ordinary:return[...t,...i];case $e.Once:return[...i,...s];case $e.Conservative:case $e.Full:return[...t,...i,...s];default:console.warn("the current case not handled:",e,this)}}get seq(){return[this.main,...this.rest]}get code(){return"<"+this.main.code+", "+He(this.rest)+">"}}ABAMLayout.className="ABAMLayout";var Ve=Object.freeze({__proto__:null,get LayoutType(){return $e},SingleMLayout:SingleMLayout,BlockMLayout:BlockMLayout,VoltaMLayout:VoltaMLayout,ABAMLayout:ABAMLayout}),ze=function(){var e=function(e,t,s,i){for(s=s||{},i=e.length;i--;s[e[i]]=t);return s},t=[1,13],s=[1,16],i=[1,15],r=[1,26],n=[1,29],a=[1,28],o=[1,30],c=[5,13,22,27,29],l=[2,15],u=[1,32],h=[5,14,21,22,27,28,29],m={trace:function(){},yy:{},symbols_:{error:2,start_symbol:3,measure_layout:4,EOF:5,index_wise_measure_layout:6,"i:":7,"s:":8,segment_wise_measure_layout:9,iw_sequence:10,iw_item:11,range:12,",":13,UNSIGNED:14,"..":15,single:16,iw_block_item:17,iw_volta:18,iw_aba:19,iw_block:20,"[":21,"]":22,"*":23,iw_optional_alternates:24,iw_alternates:25,"{":26,"}":27,"<":28,">":29,sw_sequence:30,sw_item:31,segment:32,sw_block_item:33,sw_volta:34,sw_aba:35,sw_block:36,sw_optional_alternates:37,sw_alternates:38,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",7:"i:",8:"s:",13:",",14:"UNSIGNED",15:"..",21:"[",22:"]",23:"*",26:"{",27:"}",28:"<",29:">"},productions_:[0,[3,2],[4,1],[4,2],[4,2],[6,1],[10,1],[10,1],[10,3],[10,3],[12,3],[11,1],[11,1],[11,1],[11,1],[16,1],[17,1],[20,3],[18,4],[24,0],[24,1],[25,3],[19,5],[9,1],[30,1],[30,2],[31,1],[31,1],[31,1],[31,1],[32,1],[33,1],[36,3],[34,4],[37,0],[37,1],[38,3],[35,4]],performAction:function(e,t,s,i,r,n,a){var o=n.length-1;switch(r){case 1:return n[o-1];case 2:this.$=f(null,n[o]);break;case 3:this.$=f("index-wise",n[o]);break;case 4:this.$=f("segment-wise",b(n[o]));break;case 5:case 23:1===n[o].length&&"BlockMLayout"===n[o][0].__prototype?this.$=n[o][0]:this.$=p(n[o]);break;case 6:case 24:this.$=[n[o]];break;case 7:case 11:case 12:case 13:case 14:case 20:case 27:case 28:case 29:case 35:this.$=n[o];break;case 8:this.$=[...n[o-2],n[o]];break;case 9:this.$=[...n[o-2],...n[o]];break;case 10:this.$=S(n[o-2],n[o]);break;case 15:this.$=d(n[o]);break;case 16:case 31:this.$=p(n[o]);break;case 17:case 32:this.$=n[o-1];break;case 18:case 33:this.$=g(n[o-3],n[o-1],n[o]);break;case 19:case 34:this.$=null;break;case 21:case 36:this.$=x(n[o-1]);break;case 22:this.$=y(n[o-3],n[o-1]);break;case 25:this.$=[...n[o-1],n[o]];break;case 26:this.$=p([n[o]]);break;case 30:this.$=v(n[o]);break;case 37:this.$=y(n[o-2],n[o-1])}},table:[{3:1,4:2,6:3,7:[1,4],8:[1,5],10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[3]},{5:[1,17]},{5:[2,2]},{6:18,10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{9:19,14:r,21:n,28:a,30:20,31:21,32:22,33:23,34:24,35:25,36:27},{5:[2,5],13:o},e(c,[2,6]),e(c,[2,7]),e(c,[2,11]),e(c,[2,12]),e(c,[2,13]),e(c,[2,14]),e(c,l,{15:[1,31],23:u}),e(c,[2,16]),{11:33,14:[1,34],16:9,17:10,18:11,19:12,20:14,21:s,28:i},{10:35,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[2,1]},{5:[2,3]},{5:[2,4]},{5:[2,23],14:r,21:n,28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(h,[2,24]),e(h,[2,26]),e(h,[2,27]),e(h,[2,28]),e(h,[2,29]),e(h,[2,30],{23:[1,37]}),e(h,[2,31]),{14:r,21:n,28:a,31:38,32:22,33:23,34:24,35:25,36:27},{14:r,21:n,28:a,30:39,31:21,32:22,33:23,34:24,35:25,36:27},{11:40,12:41,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{14:[1,42]},{20:43,21:s},{13:[1,44]},{13:l,23:u},{13:o,22:[1,45]},e(h,[2,25]),{21:n,36:46},{14:r,21:n,28:a,30:47,31:21,32:22,33:23,34:24,35:25,36:27},{14:r,21:n,22:[1,48],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(c,[2,8]),e(c,[2,9]),e(c,[2,10]),e(c,[2,19],{24:49,25:50,26:[1,51]}),{10:52,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},e([5,13,22,26,27,29],[2,17]),e(h,[2,34],{37:53,38:54,26:[1,55]}),{14:r,21:n,28:a,29:[1,56],31:36,32:22,33:23,34:24,35:25,36:27},e([5,14,21,22,26,27,28,29],[2,32]),e(c,[2,18]),e(c,[2,20]),{10:57,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{13:o,29:[1,58]},e(h,[2,33]),e(h,[2,35]),{14:r,21:n,28:a,30:59,31:21,32:22,33:23,34:24,35:25,36:27},e(h,[2,37]),{13:o,27:[1,60]},e(c,[2,22]),{14:r,21:n,27:[1,61],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(c,[2,21]),e(h,[2,36])],defaultActions:{3:[2,2],17:[2,1],18:[2,3],19:[2,4]},parseError:function(e,t){if(!t.recoverable){var s=new Error(e);throw s.hash=t,s}this.trace(e)},parse:function(e){var t=this,s=[0],i=[null],r=[],n=this.table,a="",o=0,c=0,l=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(h.yy[m]=this.yy[m]);u.setInput(e,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;r.push(f);var d=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var p,g,y,v,x,S,b,k,T=function(){var e;return"number"!=typeof(e=u.lex()||1)&&(e=t.symbols_[e]||e),e},w={};;){if(g=s[s.length-1],this.defaultActions[g]?y=this.defaultActions[g]:(null==p&&(p=T()),y=n[g]&&n[g][p]),void 0===y||!y.length||!y[0]){var M="";for(x in k=[],n[g])this.terminals_[x]&&x>2&&k.push("'"+this.terminals_[x]+"'");M=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[p]||p)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(M,{text:u.match,token:this.terminals_[p]||p,line:u.yylineno,loc:f,expected:k})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+p);switch(y[0]){case 1:s.push(p),i.push(u.yytext),r.push(u.yylloc),s.push(y[1]),p=null,c=u.yyleng,a=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(S=this.productions_[y[1]][1],w.$=i[i.length-S],w._$={first_line:r[r.length-(S||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(S||1)].first_column,last_column:r[r.length-1].last_column},d&&(w._$.range=[r[r.length-(S||1)].range[0],r[r.length-1].range[1]]),void 0!==(v=this.performAction.apply(w,[a,c,o,h.yy,y[1],i,r].concat(l))))return v;S&&(s=s.slice(0,-1*S*2),i=i.slice(0,-1*S),r=r.slice(0,-1*S)),s.push(this.productions_[y[1]][0]),i.push(w.$),r.push(w._$),b=n[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}};const f=(e,t)=>({__prototype:"MesaureLayout",type:e,data:t}),d=e=>({__prototype:"SingleMLayout",measure:Number(e)}),p=e=>({__prototype:"BlockMLayout",seq:e}),g=(e,t,s)=>({__prototype:"VoltaMLayout",times:Number(e),body:t,alternates:s}),y=(e,t)=>({__prototype:"ABAMLayout",main:e,rest:t}),v=e=>({segment:!0,length:Number(e)}),x=e=>e.map(e=>"BlockMLayout"===e.__prototype?e.seq:[e]),S=(e,t)=>{if(e=Number(e),!((t=Number(t))>=e))throw new Error(`invalid measure range: ${e}..${t}`);return Array(t+1-e).fill(0).map((t,s)=>d(e+s))},b=(e,t={index:1})=>{const s=e=>[].concat(...e.map(e=>((e,t)=>{if(e.segment){const s=t.index;return t.index+=e.length,Array(e.length).fill(0).map((e,t)=>d(s+t))}return[b(e,t)]})(e,t)));switch(e.__prototype){case"BlockMLayout":e.seq=s(e.seq);break;case"VoltaMLayout":e.body=s(e.body),e.alternates=e.alternates&&e.alternates.map(s);break;case"ABAMLayout":e.main=b(e.main,t),e.rest=s(e.rest)}return e};var k={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,s=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var s,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],s=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in r)this[n]=r[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),n=0;nt[0].length)){if(t=s,i=n,this.options.backtrack_lexer){if(!1!==(e=this.test_match(s,r[n])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,r[i]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,s,i){switch(s){case 0:break;case 1:case 3:case 4:return t.yytext;case 2:return 14;case 5:return 5}},rules:[/^(?:\s+)/,/^(?:([*,\[\]<>{}]))/,/^(?:(([1-9])([0-9])*))/,/^(?:(([a-z])+):)/,/^(?:\.\.)/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function T(){this.yy={}}return m.lexer=k,T.prototype=m,m.Parser=T,new T}();ze.Parser;ze.Parser;var qe=function(){return ze.parse.apply(ze,arguments)};var Ge,We;!function(e){e[e.Default=0]="Default",e[e.Brace=1]="Brace",e[e.Bracket=2]="Bracket",e[e.Square=3]="Square"}(Ge||(Ge={})),function(e){e[e.Blank=0]="Blank",e[e.Dashed=1]="Dashed",e[e.Solid=2]="Solid"}(We||(We={}));const Ue=e=>({type:Ge.Default,staff:e}),Ye={"{":Ge.Brace,"}":Ge.Brace,"<":Ge.Bracket,">":Ge.Bracket,"[":Ge.Square,"]":Ge.Square},Xe={",":We.Blank,"-":We.Solid,".":We.Dashed},Ke=()=>btoa(Math.random().toString().substr(2)).replace(/=/g,"").split("").reverse().slice(0,6).join(""),Ze=(e,t)=>{let s=t;for(;s.length;){const t=s.shift(),i=Ye[t];if(i){if("}>]".includes(t)&&i===e.type)break;if("{<[".includes(t)){const t={type:i,level:Number.isFinite(e.level)?e.level+1:0};s=Ze(t,s),e.subs=e.subs||[],e.subs.push(t)}}else e.subs=e.subs||[],e.subs.push(Ue(t))}for(;e.type===Ge.Default&&e.subs&&1===e.subs.length;){const t=e.subs[0];e.type=t.type,e.subs=t.subs,e.staff=t.staff,e.level=t.level}for(;e.subs&&1===e.subs.length&&e.subs[0].type===Ge.Default;){const t=e.subs[0];e.subs=t.subs,e.staff=t.staff}return e.grand=e.type===Ge.Brace&&e.subs&&e.subs.every(e=>e.staff),s},Je=e=>e.staff?e.staff:e.subs?Je(e.subs[0]):void 0,Qe=e=>e.staff?e.staff:e.subs?Qe(e.subs[e.subs.length-1]):void 0,et=(e,t)=>{t[(e=>e.staff?e.staff:e.subs?`${Je(e)}-${Qe(e)}`:void 0)(e)]=e,e.subs&&e.subs.forEach(e=>et(e,t))};class StaffLayout{constructor(e){const t=new Set;e.forEach((e,s)=>{e.id=((e,t,s)=>{let i=s;for(i?e.has(i)&&(i+="_"+t.toString()):i=t.toString();e.has(i);)i+="_"+Ke();return i})(t,s+1,e.id),t.add(e.id)}),this.staffIds=e.map(e=>e.id),this.conjunctions=e.slice(0,e.length-1).map(e=>e.conjunction?Xe[e.conjunction]:We.Blank);const s=[].concat(...e.map(e=>[...e.leftBounds,e.id,...e.rightBounds]));this.group={type:Ge.Default},Ze(this.group,s);const i={};et(this.group,i),this.groups=Object.entries(i).map(([e,t])=>{let s=e.split("-");1===s.length&&(s=[s[0],s[0]]);return{group:t,range:s.map(e=>this.staffIds.indexOf(e)),key:e}}),this.maskCache=new Map}get stavesCount(){return this.staffIds?this.staffIds.length:null}get partGroups(){const e=this.groups.filter(e=>e.group.grand);return this.groups.filter(t=>{if(t.group.grand)return!0;if(t.range[0]===t.range[1]){const s=t.range[0];return!e.some(e=>e.range[0]<=s&&e.range[1]>=s)}return!1})}get standaloneGroups(){const e=[],t=s=>{s.grand?e.push(s.subs.map(e=>e.staff)):s.staff?e.push([s.staff]):s.subs&&s.subs.forEach(e=>t(e))};return t(this.group),e}conjunctionBetween(e,t){if(t<=e)return null;let s=We.Solid;for(let i=e;it&1<({ids:e.staffIds.slice(t.range[0],t.range[1]+1).filter(e=>s.includes(e)),...t})).filter(({ids:e})=>e.length).map(({ids:e,...t})=>({key:t.key,group:t.group,range:[s.indexOf(e[0]),s.indexOf(e[e.length-1])]})),r=s.slice(0,s.length-1).map((t,i)=>{const r=s[i+1];return e.conjunctionBetween(e.staffIds.indexOf(t),e.staffIds.indexOf(r))});return{staffIds:s,conjunctions:r,groups:i}}mask(e){return this.maskCache.get(e)||this.maskCache.set(e,StaffLayout.makeMaskLayout(this,e)),this.maskCache.get(e)}partialMaskCode(e,t=!1){const s=this.staffIds.map((t,s)=>s(e[this.staffIds[s]]=t,e),{}),i=e=>{if(e.staff)return[s[e.staff]?e.staff:null,null===s[e.staff]];const t=e.subs.map(e=>i(e)),r=t.map(e=>e[0]).filter(Boolean).join(","),n=t.some(([e,t])=>t),a=r?((e,t=!1)=>{if(e===Ge.Default)return e=>e;if(t)switch(e){case Ge.Brace:return e=>`{${e}`;case Ge.Bracket:return e=>`<${e}`;case Ge.Square:return e=>`[${e}`;default:return e=>e}switch(e){case Ge.Brace:return e=>`{${e}}`;case Ge.Bracket:return e=>`<${e}>`;case Ge.Square:return e=>`[${e}]`;default:return e=>e}})(e.type,n)(r):null;return[a,n]};let[r]=i(this.group);return r=r||"",t||(r=r.replace(/[_\w]+/g,"")),r}}var tt=function(){var e=function(e,t,s,i){for(s=s||{},i=e.length;i--;s[e[i]]=t);return s},t=[1,15],s=[1,16],i=[1,17],r=[1,11],n=[1,12],a=[1,13],o=[1,24],c=[1,25],l=[1,26],u=[5,11,12,13,15,16,17,21,22,23,24],h=[15,16,17,21,22,23,24],m=[11,12,13,15,16,17,21,22,23,24],f=[5,11,12,13,21,22,23,24],d={trace:function(){},yy:{},symbols_:{error:2,start_symbol:3,staff_layout:4,EOF:5,seq:6,seq_id:7,seq_br:8,seq_con:9,bound_left:10,"<":11,"[":12,"{":13,bound_right:14,">":15,"]":16,"}":17,bound_lefts:18,bound_rights:19,conjunction:20,"-":21,",":22,".":23,ID:24,seq_bl:25,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",11:"<",12:"[",13:"{",15:">",16:"]",17:"}",21:"-",22:",",23:".",24:"ID"},productions_:[0,[3,2],[4,1],[6,0],[6,1],[6,1],[6,1],[10,1],[10,1],[10,1],[14,1],[14,1],[14,1],[18,1],[18,2],[19,1],[19,2],[20,1],[20,1],[20,1],[7,1],[7,2],[7,2],[7,2],[7,2],[25,1],[25,2],[25,2],[25,2],[8,2],[8,2],[8,2],[9,1],[9,2],[9,2],[9,2],[9,2]],performAction:function(e,t,s,i,r,n,a){var o=n.length-1;switch(r){case 1:return n[o-1];case 2:n[o].next(),this.$=n[o].toJSON();break;case 3:this.$=new Seq;break;case 13:case 15:this.$=[n[o]];break;case 14:case 16:this.$=[...n[o-1],n[o]];break;case 20:this.$=new Seq,this.$.tip.i(n[o]);break;case 21:case 23:n[o-1].next(),n[o-1].tip.i(n[o]),this.$=n[o-1];break;case 22:case 24:n[o-1].tip.i(n[o]),this.$=n[o-1];break;case 25:this.$=new Seq,this.$.tip.bl(n[o]);break;case 26:case 27:n[o-1].next(),n[o-1].tip.bl(n[o]),this.$=n[o-1];break;case 28:n[o-1].tip.bl(n[o]),this.$=n[o-1];break;case 29:case 30:case 31:n[o-1].tip.br(n[o]),this.$=n[o-1];break;case 32:this.$=new Seq,this.$.tip.con(n[o]),this.$.next();break;case 33:case 34:case 35:case 36:n[o-1].tip.con(n[o]),n[o-1].next(),this.$=n[o-1]}},table:[{3:1,4:2,5:[2,3],6:3,7:4,8:5,9:6,10:14,11:t,12:s,13:i,18:10,20:9,21:r,22:n,23:a,24:[1,7],25:8},{1:[3]},{5:[1,18]},{5:[2,2]},{5:[2,4],10:14,11:t,12:s,13:i,14:23,15:o,16:c,17:l,18:22,19:20,20:21,21:r,22:n,23:a,24:[1,19]},{5:[2,5],10:14,11:t,12:s,13:i,18:29,20:28,21:r,22:n,23:a,24:[1,27]},{5:[2,6],10:14,11:t,12:s,13:i,14:23,15:o,16:c,17:l,18:33,19:31,20:32,21:r,22:n,23:a,24:[1,30]},e(u,[2,20]),{14:23,15:o,16:c,17:l,19:35,20:36,21:r,22:n,23:a,24:[1,34]},e(u,[2,32]),e(h,[2,25],{10:37,11:t,12:s,13:i}),e(u,[2,17]),e(u,[2,18]),e(u,[2,19]),e(m,[2,13]),e(m,[2,7]),e(m,[2,8]),e(m,[2,9]),{1:[2,1]},e(u,[2,21]),e(f,[2,29],{14:38,15:o,16:c,17:l}),e(u,[2,33]),e(h,[2,26],{10:37,11:t,12:s,13:i}),e(u,[2,15]),e(u,[2,10]),e(u,[2,11]),e(u,[2,12]),e(u,[2,23]),e(u,[2,35]),e(h,[2,27],{10:37,11:t,12:s,13:i}),e(u,[2,24]),e(f,[2,31],{14:38,15:o,16:c,17:l}),e(u,[2,36]),e(h,[2,28],{10:37,11:t,12:s,13:i}),e(u,[2,22]),e(f,[2,30],{14:38,15:o,16:c,17:l}),e(u,[2,34]),e(m,[2,14]),e(u,[2,16])],defaultActions:{3:[2,2],18:[2,1]},parseError:function(e,t){if(!t.recoverable){var s=new Error(e);throw s.hash=t,s}this.trace(e)},parse:function(e){var t=this,s=[0],i=[null],r=[],n=this.table,a="",o=0,c=0,l=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(h.yy[m]=this.yy[m]);u.setInput(e,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;r.push(f);var d=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var p,g,y,v,x,S,b,k,T=function(){var e;return"number"!=typeof(e=u.lex()||1)&&(e=t.symbols_[e]||e),e},w={};;){if(g=s[s.length-1],this.defaultActions[g]?y=this.defaultActions[g]:(null==p&&(p=T()),y=n[g]&&n[g][p]),void 0===y||!y.length||!y[0]){var M="";for(x in k=[],n[g])this.terminals_[x]&&x>2&&k.push("'"+this.terminals_[x]+"'");M=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[p]||p)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(M,{text:u.match,token:this.terminals_[p]||p,line:u.yylineno,loc:f,expected:k})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+p);switch(y[0]){case 1:s.push(p),i.push(u.yytext),r.push(u.yylloc),s.push(y[1]),p=null,c=u.yyleng,a=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(S=this.productions_[y[1]][1],w.$=i[i.length-S],w._$={first_line:r[r.length-(S||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(S||1)].first_column,last_column:r[r.length-1].last_column},d&&(w._$.range=[r[r.length-(S||1)].range[0],r[r.length-1].range[1]]),void 0!==(v=this.performAction.apply(w,[a,c,o,h.yy,y[1],i,r].concat(l))))return v;S&&(s=s.slice(0,-1*S*2),i=i.slice(0,-1*S),r=r.slice(0,-1*S)),s.push(this.productions_[y[1]][0]),i.push(w.$),r.push(w._$),b=n[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}};class Item{constructor(){this.id=null,this.leftBounds=[],this.rightBounds=[],this.conjunction=null}i(e){return this.id=e,this}bl(e){return this.leftBounds=e,this}br(e){return this.rightBounds=e,this}con(e){return this.conjunction=e,this}}class Seq{constructor(){this.body=[],this.tip=new Item}next(){return this.body.push(this.tip),this.tip=new Item,this}toJSON(){return this.body}}var p={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,s=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var s,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],s=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in r)this[n]=r[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),n=0;nt[0].length)){if(t=s,i=n,this.options.backtrack_lexer){if(!1!==(e=this.test_match(s,r[n])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,r[i]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,s,i){switch(s){case 0:break;case 1:return t.yytext;case 2:return 24;case 3:return 5}},rules:[/^(?:\s+)/,/^(?:([-,.\[\]<>{}]))/,/^(?:([a-zA-Z_0-9]+))/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3],inclusive:!0}}};function g(){this.yy={}}return d.lexer=p,g.prototype=d,d.Parser=g,new g}();tt.Parser;tt.Parser;var st=function(){return tt.parse.apply(tt,arguments)};const it=e=>{const t=st(e);return new StaffLayout(t)};class SemanticGraph extends SimpleClass{constructor(e){super(),super.assign(e)}static fromPoints(e=[]){const t=new SemanticGraph;return t.points=e,t}getLayer(e){return this.points.filter(t=>t.semantic===e)}getConfidentLayer(e,t){return this.points.filter(s=>s.semantic===e&&(!Number.isFinite(s.confidence)||s.confidence>=t))}getSystemPoints(){return this.points.filter(e=>N.includes(e.semantic))}getStaffPoints(){return this.points.filter(e=>!N.includes(e.semantic))}offset(e,t){this.points.forEach(s=>{s.x+=e,s.y+=t})}scale(e){this.points.forEach(t=>{t.x*=e,t.y*=e})}transform(e){this.points.forEach(t=>{let s=t.x*e[0][0]+t.y*e[1][0]+e[2][0];const i=t.x*e[0][1]+t.y*e[1][1]+e[2][1];if(t.extension){if(Number.isFinite(t.extension.y1)){const i=t.x*e[0][1]+t.extension.y1*e[1][1]+e[2][1],r=t.x*e[0][1]+t.extension.y2*e[1][1]+e[2][1];s=t.x*e[0][0]+.5*(t.extension.y1+t.extension.y2)*e[1][0]+e[2][0],t.extension.y1=i,t.extension.y2=r}if(Number.isFinite(t.extension.width)){const s=Math.sqrt(e[0][0]*e[1][1]-e[0][1]*e[1][0]);t.extension.width*=s,t.extension.height*=s}}t.x=s,t.y=i})}}SemanticGraph.className="SemanticGraph";const rt=[w.ClefG,w.ClefF,w.ClefC,w.TimesigC44,w.TimesigC22,w.TimesigZero,w.TimesigOne,w.TimesigTwo,w.TimesigThree,w.TimesigFour,w.TimesigFive,w.TimesigSix,w.TimesigSeven,w.TimesigEight,w.TimesigNine,w.OctaveShift8va,w.OctaveShift8vb,w.OctaveShift0,w.Zero,w.One,w.Two,w.Three,w.Four,w.Five,w.Six,w.Seven,w.Eight,w.Nine,w.AccNatural,w.AccSharp,w.AccDoublesharp,w.AccFlat,w.AccFlatflat,w.NoteheadS0,w.NoteheadS1,w.NoteheadS2,w.NoteheadS1stemU,w.NoteheadS1stemD,w.NoteheadS2stemU,w.NoteheadS2stemD,w.Rest0,w.Rest1,w.Rest2,w.Rest3,w.Rest4,w.Rest5,w.Rest6,w.Rest0W,w.RestM1,w.SlurBegin,w.SlurEnd,w.Dot,w.f,w.p,w.m,w.n,w.r,w.s,w.z,w.ScriptFermata,w.ScriptShortFermata,w.ScriptSforzato,w.ScriptStaccato,w.ScriptStaccatissimo,w.ScriptTurn,w.ScriptTrill,w.ScriptSegno,w.ScriptCoda,w.ScriptArpeggio,w.ScriptPrall,w.ScriptMordent,w.ScriptMarcato,w.ScriptTenuto,w.ScriptPortato,w.PedalStar,w.PedalPed,w.GraceNotehead,w.BeamLeft,w.BeamRight,w.BeamContinue,w.CrescendoBegin,w.CrescendoEnd,w.DecrescendoBegin,w.DecrescendoEnd,w.TremoloLeft,w.TremoloRight,w.TremoloMiddle],nt=[w.AccNatural,w.AccSharp,w.AccDoublesharp,w.AccFlat,w.AccFlatflat,w.NoteheadS0,w.NoteheadS1,w.NoteheadS2,w.NoteheadS1stemU,w.NoteheadS1stemD,w.NoteheadS2stemU,w.NoteheadS2stemD],at=[w.SignLined,w.SignInterval],ot=[w.NoteheadS1,w.NoteheadS2],ct={AccSharp:K.KeySharp,AccNatural:K.KeyNatural,AccFlat:K.KeyFlat},lt={[w.NoteheadS1]:{up:w.NoteheadS1stemU,down:w.NoteheadS1stemD},[w.NoteheadS2]:{up:w.NoteheadS2stemU,down:w.NoteheadS2stemD}},ut=[w.Rest0,w.Rest1,w.Rest2,w.Rest3,w.Rest4,w.Rest5,w.Rest6],ht={[K.BeamLeft]:"Open",[K.BeamRight]:"Close",[K.BeamContinue]:"Continue"},mt={Alter1:De.Alternation1,Alter2:De.Alternation2},ft=(e,t)=>{switch(e.length){case 0:return;case 1:return e[0];case 2:return"u"===t?Math.min(...e):Math.max(...e);default:{const s=e.reduce((e,t)=>e+t,0)/e.length;return e.sort((e,t)=>Math.abs(e-s)-Math.abs(t-s)),ft(e.slice(0,e.length-1),t)}}};class Measure extends SimpleClass{constructor(e){super(),super.assign(e),this.tokens=this.tokens||[],this.antiTokens=this.antiTokens||[],this.barTypes=this.barTypes||{}}get right(){return this.left+this.width}get noteheads(){return this.tokens.filter(e=>e.isNotehead).sort((e,t)=>e.x-t.x)}get chordRects(){const e=this.noteheads.filter(e=>[K.NoteheadS0,K.NoteheadS1stemU,K.NoteheadS2stemU,K.NoteheadS1stemD,K.NoteheadS2stemD].includes(e.type));let t=0;const s=e.reduce((e,s)=>{const i=s.tip?`${s.tip.x}|${s.tip.y}`:`nul${t}`;let r=`${s.type}|${i}`;return!s.tip&&e[r]&&(e[r].some(e=>Math.abs(e.x-s.x){const t=Math.min(...e.map(e=>e.x)),s=Math.max(...e.map(e=>e.x)),i=Math.min(...e.map(e=>e.y)),r=Math.max(...e.map(e=>e.y)),n=e[0],a=n&&n.tip?n.tip.x:t;let o=t,c=s-t,l=null;switch(n.type){case K.NoteheadS0:o-=M.NoteheadS0/2,c+=M.NoteheadS0;break;case K.NoteheadS1stemU:case K.NoteheadS2stemU:l="u",o-=M.NoteheadS1,c+=M.NoteheadS1;break;case K.NoteheadS1stemD:case K.NoteheadS2stemD:l="d",c+=M.NoteheadS1}return{x:o,width:c,stemX:a,stemDirection:l,top:i,bottom:r,tip:n.tip}})}get timeWarped(){return this.tokens&&this.tokens.some(e=>e.timeWarped)}get additionalLines(){const e=this.getChords();return[...e.filter(e=>e.ys.some(e=>e<=-3)).map(e=>({left:e.left,right:e.right,n:Math.ceil(Math.min(...e.ys))+2})),...e.filter(e=>e.ys.some(e=>e>=3)).map(e=>({left:e.left,right:e.right,n:Math.floor(Math.max(...e.ys))-2}))].map(e=>({left:e.left-.28,right:e.right+.28,n:e.n}))}getChords(){const e=this.tokens.filter(e=>ue.includes(e.type)),t=this.tokens.filter(e=>pe.includes(e.type)),s=this.tokens.filter(e=>ye.includes(e.type)),i=this.chordRects.map(e=>{const t=this.noteheads.filter(t=>t.direction===e.stemDirection&&t.left>=e.x&&t.right<=e.x+e.width+.2&&t.y>=e.top&&t.y<=e.bottom);t.sort((e,t)=>t.y-e.y);const s=t.map(e=>e.y),i=t.map(e=>e.id),r=t.reduce((e,t)=>Math.max(e,t.division),0);return{rect:e,left:e.x,right:e.x+e.width,pivotX:(n=t,ft(n.map(e=>Number.isFinite(e.pivotX)?e.pivotX:e.x),n[0].direction)),ys:s,tip:e.tip,noteIds:i,division:r,dots:null,rest:!1,stemDirection:e.stemDirection,beam:null};var n}).sort((e,t)=>t.left-e.left),r=new Set,n=i.map(({rect:i,...n})=>{if(n.division>=1){const t=[i.bottom,i.top];switch(i.stemDirection){case"u":t[0]=i.tip?i.tip.y-.2:i.top-6-.5;break;case"d":t[1]=i.tip?i.tip.y+.2:i.bottom+6+.5}const a=e.filter(e=>!r.has(e.id)&&e.x>i.stemX-.2&&e.xt[0]&&e.yMath.max(e,t.division),n.division),a.forEach(e=>r.add(e.id)),n.division>=3){const e=i.tip&&s.find(e=>Math.abs(i.tip.x-e.x)<.3&&Math.abs(i.tip.y-e.y)<.7);e&&(n.beam=ht[e.type])}}const a=t.filter(e=>!r.has(e.id)&&e.x>i.x+i.width-.2&&e.xi.top-1&&e.y<=i.bottom+.5);return n.dots=a.reduce((e,t)=>Math.max(e,t.dots),0),a.forEach(e=>r.add(e.id)),n});return n.reverse(),n}getRests(){const e=this.tokens.filter(e=>le.includes(e.type)),t=this.tokens.filter(e=>pe.includes(e.type));return e.map(e=>{const s=t.filter(t=>t.x>e.x+.5&&t.xe.y-1&&t.yMath.max(e,t.dots),0);return{left:e.x-.75,right:e.x+.75,pivotX:e.x,rest:!0,ys:[e.y],noteIds:[e.id],dots:s,division:e.division,stemDirection:null}})}getEvents(){return[...this.getChords(),...this.getRests()].sort((e,t)=>e.left-t.left)}getContexts(e={}){return this.tokens.filter(e=>e.isContexted).sort((e,t)=>e.x-t.x).map(t=>new ContextedTerm({x:t.x,y:t.y,tokenType:t.type,...e}))}assignAccessoriesOnEvents(e){e.forEach(e=>e.accessories=e.accessories||[]);this.tokens.filter(e=>xe.includes(e.type)).forEach(t=>{const s=e.filter(e=>t.x>e.left-1&&t.x0){let e=s[0];s.length>1&&(e=s.map(e=>({event:e,d:Math.min(...e.ys.map(e=>Math.abs(e-t.y)))})).sort(({d:e},{d:t})=>e-t).map(({event:e})=>e)[0]);let i=t.y>Math.max(...e.ys)?Me.Down:Me.Up;Se.includes(t.type)&&(i=null),e.accessories.push({type:t.type,id:t.id,direction:i,x:t.x-e.left})}});const t=[...e];t.sort((e,t)=>e.left-t.left);this.tokens.filter(e=>e.type===K.ScriptArpeggio).forEach(e=>{const s=t.find(t=>e.xtt>e.y));s&&s.accessories.push({type:K.ScriptArpeggio,id:e.id,x:e.x-s.left})});this.tokens.filter(e=>e.type===K.GraceNotehead).forEach(t=>{const s=e.find(e=>t.x>e.left&&t.xMath.abs(t.y-e)<.4));s&&(s.grace=Ee.Grace)});const s=this.tokens.filter(e=>e.type===K.TremoloLeft),i=this.tokens.filter(e=>e.type===K.TremoloRight),r=this.tokens.filter(e=>e.type===K.TremoloMiddle),n=e.filter(e=>!e.rest).map(e=>{const t=[...e.ys];e.tip?t.push(e.tip.y):(t.push(e.ys[0]+2),t.push(e.ys[e.ys.length-1]-2));const s=e.tip?e.tip.x:e.left,i=e.tip?e.tip.x:e.right;return{event:e,top:Math.min(...t),bottom:Math.max(...t),stemL:s,stemR:i}});r.forEach(e=>{const t=n.find(t=>!!t.event.tip&&(e.y>t.top&&e.y{const t=n.find(t=>e.y>t.top&&e.yt.stemR&&e.x{const t=n.find(t=>e.y>t.top&&e.yt.stemL-1.6);t&&(t.event.tremolo=t.event.tremolo||2,++t.event.tremolo,t.event.tremoloLink=Ie.Catcher)})}assignFeaturesOnEvents(e,t){const s=t.filter(e=>e.x>this.left&&e.xut.includes(e.semantic)),r=s.filter(e=>e.semantic===w.Flag3),n=s.filter(e=>e.semantic===w.Dot),a=s.filter(e=>e.semantic===w.BeamLeft),o=s.filter(e=>e.semantic===w.BeamContinue),c=s.filter(e=>e.semantic===w.BeamRight),l=s.filter(e=>e.semantic===w.GraceNotehead),u=s.filter(e=>e.semantic===w.TremoloRight),h=s.filter(e=>e.semantic===w.vline_Stem),m=s.filter(e=>e.semantic===w.NoteheadS0),f=s.filter(e=>e.semantic===w.NoteheadS1),d=s.filter(e=>e.semantic===w.NoteheadS2);e.forEach(e=>{const t=e.tip?e.tip.x:(e.left+e.right)/2,s=e.tip?Math.min(e.tip.y,e.ys[e.ys.length-1]):e.ys[e.ys.length-1],p=e.tip?Math.max(e.tip.y,e.ys[0]):e.ys[0],g=e.tip?e.tip.x:e.left,y=[0,0,0,0,0,0,0];if(e.rest){i.filter(s=>P(s,{x:t,y:e.ys[0]})<.5).forEach(e=>{const t=ut.indexOf(e.semantic);y[t]=Math.max(y[t],e.confidence)})}else{const i=[m,f,d].map(t=>t.filter(t=>t.x>e.left&&t.xs-.25&&t.yMath.max(0,...e.map(e=>e.confidence))),n=r.filter(e=>e.y>s-.2&&e.yt.confidence-e.confidence),y[0]=i[0],y[1]=i[1],y[2]=i[2],Array(y.length-3).fill(0).forEach((e,t)=>y[3+t]=n[t]?n[t].confidence:0)}const v=n.filter(s=>s.x>t&&s.xv.some(t=>e.x>t.x&&Math.abs(e.y-t.y)<.2)),S=[Math.max(0,...v.map(e=>e.confidence)),Math.max(0,...x.map(e=>e.confidence))],b=[a,o,c].map(e=>e.filter(e=>Math.abs(e.x-t)<.2&&e.y>s-.2&&e.yMath.max(0,...e.map(e=>e.confidence))),k=h.filter(s=>P({x:t,y:e.ys[0]},{x:s.x,y:s.extension.y2})<.5),T=h.filter(s=>P({x:t,y:e.ys[e.ys.length-1]},{x:s.x,y:s.extension.y1})<.5),w=[Math.max(0,...k.map(e=>e.confidence)),Math.max(0,...T.map(e=>e.confidence))],M=l.filter(s=>Math.abs(s.x-t)<.6&&e.ys.some(e=>Math.abs(s.y-e)<.4)),E=Math.max(0,...M.map(e=>e.confidence)),N=0===e.division?u.filter(t=>t.x>e.left-2&&t.xe.y>s-.04&&e.yg-2&&e.xe.confidence));e.feature={divisions:y,dots:S,beams:b,stemDirections:w,grace:E,tremoloCatcher:I}})}}Measure.className="Measure",Measure.blackKeys=["tokens","antiTokens"];class Staff extends SimpleClass{constructor({measureCount:e=null,measureBars:t=null,...s}={}){if(super(),super.assign(s),this.height=this.height||10,this.staffY=this.staffY||5,t){let e=0;this.measures=t.map(t=>{const s=new Measure({left:e,width:t-e,height:this.height});return e=t,s})}else this.measures=e?Array(e).fill(null).map(()=>new Measure):[]}get noteRange(){const e=[].concat(...this.measures.map(e=>e.noteheads)).map(e=>e.y);return{top:Math.min(-2,...e),bottom:Math.max(2,...e)}}get additionalLines(){return[].concat(...this.measures.map(e=>e.additionalLines))}rearrangeMeasures(e){if(!e.length)return void console.warn("rearrangeMeasures error, measureBars are empty.");const t=this.measures?.map(e=>e.tokens).flat(1)||[];let s=0;this.measures=e.map(e=>{const t=new Measure({left:s,width:e-s,height:this.height});return s=e,t}),this.reassignTokens(t)}reassignTokens(e=null){e||(e=[].concat(...this.measures.map(e=>e.tokens))),this.measures.forEach(e=>e.tokens=[]),e.forEach(e=>{for(const t of this.measures)if(e.xe.semantic===w.TempoNotehead).forEach(e=>{const t=i.findIndex(t=>/^Notehead/.test(t.semantic)&&P(e,t)<.3);t>=0&&i.splice(t,1)});const r=e=>t.displacementSemantics?.[e]?this.semantics.find(t=>t.id===e):null;i.filter(e=>rt.includes(e.semantic)).forEach(e=>this.appendPoint(e,{points:i}));const n=i.filter(e=>e.semantic===w.vline_Stem).filter(e=>e.extension.y2-e.extension.y1>1.5).map(e=>({x:e.x,y1:e.extension.y1,y2:e.extension.y2,direction:null})),a=i.filter(e=>ot.includes(e.semantic)&&e.y>this.semanticTop&&e.y{if((s?1:0)^(e.x{const t=a.filter(t=>Math.abs(t.x-e.x)-M[t.semantic]/2<.32&&Math.abs(t.x-e.x)-M[t.semantic]/2>-.44&&t.y>e.y1-.5&&t.ye.x&&t.y>e.y2)&&!(t.xe.y-t.y);const s=Math.min(...t.map(t=>t.y-e.y1)),n=Math.min(...t.map(t=>e.y2-t.y));if(Math.min(s,n)>.5)return;const a=s!o.has(e.id)).forEach(e=>{const a=n.filter(t=>Math.abs(t.x-e.x)<2&&e.y>t.y1&&e.yMath.abs(t.x-e.x)-Math.abs(s.x-e.x)),o=a[0];if(o){const t="d"===o.direction,s=t?lt[e.semantic].down:lt[e.semantic].up;this.appendPoint({id:e.id,semantic:s,x:o.x+c(e,o,t),y:e.y,pivotX:e.x,confidence:e.confidence},{tip:{x:o.x,y:t?o.y2:o.y1},antiPoint:r(e.id),points:i})}else s.debug("isolated notehead:",t.index,this.index,e)});const l=i.filter(e=>e.semantic===w.Flag3);l.sort((e,t)=>e.x-t.x),this.appendFlags(l,n);const u=i.filter(e=>e.semantic===w.Dot).map(e=>{const t=A(e.y,.5);return{x:e.x,y:t}}).reduce((e,t)=>(e[t.y]=e[t.y]||[],e[t.y].push(t),e),{});Object.entries(u).forEach(([e,t])=>{const s=Number(e);if(t.length>1){t.sort((e,t)=>e.x-t.x);for(let e=0;ee.x>n.x&&e.x-n.x<1.2)&&this.appendPoint({id:n.id,x:n.x,y:s,confidence:n.confidence},{type:K.DotDot,antiPoint:r(n.id),points:i})}}});const h=i.filter(e=>e.semantic===w.KeyAcc);i.filter(e=>ct[e.semantic]).forEach(e=>{h.some(t=>Math.abs(e.x-t.x)<.5&&Math.abs(e.y-t.y)<1)&&this.appendPoint({id:e.id,semantic:e.semantic,x:e.x,y:e.y,confidence:e.confidence},{type:ct[e.semantic],points:i})});i.filter(e=>e.semantic===w.OctaveShift8).forEach(e=>{const t=e.y<0?K.OctaveShift8va:K.OctaveShift8vb;this.appendPoint({id:e.id,x:e.x,y:e.y,confidence:e.confidence},{type:t,points:i})});const m=this.semantics.filter(e=>[w.VoltaLeft,w.VoltaRight].includes(e.semantic));m.sort((e,t)=>e.x-t.x);const f=m.reduce((e,t)=>{const s=e[t.semantic],i=Array.from(Object.keys(s)).map(Number).find(e=>t.x{if(s.length>1){const i=s.reduce((e,t)=>e+t.confidence,0);s[0].y*s[1].y<0&&i>=2*e&&this.appendPoint(s[0],{type:K[t]})}})}appendPoint(e,{type:t,points:s=null,antiPoint:i,...r}={}){const n=e.x,a=this.measures.find(e=>nat.includes(t.semantic)&&Math.abs(t.y-e.y)<.2&&Math.abs(t.x-e.x)<1.2);t.some(e=>e.semantic===w.SignLined)?o=!0:t.some(e=>e.semantic===w.SignInterval)&&(c=!0)}t=t||K[e.semantic];const l=Te[t];let u=ke[t];(o||c)&&(u=Math.max(u,1));let h=e.y;Number.isFinite(l)?h=l:u&&(h=c?A(h+.5,u)-.5:A(h,u));const m=a.tokens.find(e=>e.type===t&&Math.abs(e.x-n)<.1&&Math.abs(e.y-h)<.1);m?Number.isFinite(m.confidence)&&m.confidence3||(a.tokens.push(new Token({id:e.id,type:t,x:n,y:h,pivotX:e.pivotX,confidence:e.confidence,...r})),i&&a.antiTokens.push(new Token({id:i.id,type:t,x:n,y:i.y,confidence:i.confidence})))}appendFlags(e,t){t.map(t=>({...t,flags:e.filter(e=>Math.abs(e.x-t.x)<.3&&e.y>t.y1-.5&&e.ye.flags.length).forEach(e=>{const t=e.flags.reduce((e,t)=>e&&e.confidence>t.confidence?e:t,null),s="d"===e.direction,i=s?Math.min(e.y2,e.y1+6):Math.max(e.y1,e.y2-6),r=e.flags.map(e=>({tip:(i-e.y)*(s?1:-1),confidence:e.confidence})).filter(e=>e.tip<2||e.confidence>.7*t.confidence).length,n=ue[r-1];n&&this.appendPoint({id:e.flags[0].id,x:e.x,y:i,confidence:Math.min(...e.flags.map(e=>e.confidence))},{type:n})})}clearTokens(){this.measures.forEach(e=>e.tokens=[]),this.semantics=[]}clearPredictedTokens(){this.measures.forEach(e=>e.tokens=e.tokens.filter(e=>!e.isPredicted))}}Staff.className="Staff",Staff.blackKeys=["index","semanticTop","semanticBttom"];class System extends SimpleClass{constructor({stavesCount:e,...t}){if(super(),super.assign(t),!this.measureBars){const e=5,t=(this.width-e)/this.measureCount;this.measureBars=Array(this.measureCount).fill(0).map((s,i)=>e+t*(i+1))}!t.staves&&e&&(this.staves=Array(e).fill(null).map(()=>new Staff({measureBars:this.measureBars}))),this.arrangePosition(),this.measureCount=this.measureCount||this.measureBars.length,this.sidBlackList=this.sidBlackList||[],this.sidWhiteList=this.sidWhiteList||[]}get noteRange(){if(!this.staves.length)return null;const e=this.staves[0],t=this.staves[this.staves.length-1];return{top:e.top+e.staffY+e.noteRange.top,bottom:t.top+t.staffY+t.noteRange.bottom}}get staffPositions(){return this.staves.map(e=>({y:e.top+e.staffY,radius:2}))}get staffMask(){return this.staffMaskChanged?this.staffMaskChanged:this.prev&&this.staves.length===this.prev.staves.length?this.prev.staffMask:2**this.staves.length-1}get staffTop(){const e=this.staffPositions;return e.length?e[0].y-e[0].radius:0}get staffBottom(){const e=this.staffPositions;return e.length?e[e.length-1].y+e[e.length-1].radius:0}arrangePosition(){let e=0;for(const t of this.staves){if(Number.isFinite(t.top))break;t.top=e,e+=t.height}}tidyMeasureBars(){this.measureBars=this.measureBars.filter(e=>e>1),this.measureBars.sort((e,t)=>e-t);const e=this.width-this.measureBars[this.measureBars.length-1];e>12?this.measureBars.push(this.width):e<2&&(this.measureBars[this.measureBars.length-1]=this.width),this.measureBars=this.measureBars.filter((e,t)=>t<1||e-this.measureBars[t-1]>4)}rearrangeMeasures(){this.measureCount=this.measureBars.length,this.staves.forEach(e=>e.rearrangeMeasures(this.measureBars))}get height(){return this.staves.reduce((e,t)=>e+t.height,0)}get connectionLine(){const e=this.staves[0],t=this.staves[this.staves.length-1];return e&&{top:e.top+e.staffY-2,bottom:t.top+t.staffY+2}}get middleY(){if(!this.staves.length)return 0;return this.staves.reduce((e,t)=>e+t.top+t.staffY,0)/this.staves.length}get timeSignatureOnHead(){return this.staves.some(e=>e.measures[0]?.tokens.some(e=>ee.includes(e.type)))}getStaffArray(e){let t=0;return Array(e).fill(null).map((e,s)=>{const i=this.staffMask&1<0?this.measureBars[e-1]:0,s=this.measureBars[e];return[...(this.tokens??[]).filter(e=>e.x>=t&&e.xTempoTerm.fromNumeralText(e.text)).filter(Boolean)]}getEvents(e){if(console.assert(Number.isInteger(this.headMeasureIndex),"invalid headMeasureIndex:",this.headMeasureIndex),!this.measureBars?.length&&this.staves.every(e=>!e.measures?.length))return{staffMask:this.staffMask,columns:[]};const t=this.getStaffArray(e).map(e=>e?e.measures.map(t=>{const s=t.getEvents();return t.assignAccessoriesOnEvents(s),t.assignFeaturesOnEvents(s,e.semantics),{events:s.map(t=>new EventTerm({staff:e.index,system:this.index,...t,rest:t.rest?"r":null})),contexts:t.getContexts({staff:e.index}),voltaBegin:t.tokens.some(e=>e.type===K.VoltaLeft),voltaEnd:t.tokens.some(e=>e.type===K.VoltaRight),alternative:t.alternative,barTypes:t.barTypes}}):Array(this.measureCount).fill(null).map(()=>({events:[],contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}})));for(let e=0;et[e]?.contexts?.filter(e=>[Oe.TimeSignatureC,Oe.TimeSignatureN].includes(e.type))).find(e=>e?.length);s&&t.forEach(t=>{!t[e]||t[e].contexts.length||t[e].events.length||t[e].contexts.push(...s)})}const s=Array(this.measureCount).fill(null).map((e,s)=>({measureIndex:this.headMeasureIndex+s,rows:t.map(e=>e[s]),marks:this.getMarksInMeasure(s),duration:0,voltaBegin:t.some(e=>e[s]?.voltaBegin),voltaEnd:t.some(e=>e[s]?.voltaEnd),alternative:t.some(e=>e[s]?.alternative),barTypes:t.reduce((e,t)=>({...e,...t[s]?.barTypes}),{})}));s.forEach(e=>{[].concat(...e.rows.filter(Boolean).map(e=>e.events)).forEach((e,t)=>e.id=t+1)});const i=s[s.length-1];return i&&(i.break=!0),{staffMask:this.staffMask,columns:s}}getEventsFunctional(e,t,s=[],{useXMap:i=!1}={}){const r=this.getStaffArray(e).map((e,s)=>e?e.measures.map((e,i)=>{const r=t(s,i);return r&&{events:r.map(e=>new EventTerm({system:this.index,...e,rest:e.rest?"r":null})),contexts:e.getContexts({staff:s}),voltaBegin:e.tokens.some(e=>e.type===K.VoltaLeft),voltaEnd:e.tokens.some(e=>e.type===K.VoltaRight),alternative:e.alternative,barTypes:e.barTypes}}):Array(this.measureCount).fill(null).map(()=>({events:[],contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}}))),n=Array(this.measureCount).fill(null).map((e,t)=>{const s=r.map(e=>e[t]);if(s.some(e=>!e))return null;let n=null;if(i){const e=[].concat(...s.map(e=>e.events)).reduce((e,t)=>(Number.isFinite(t.tickGroup)&&(e[t.tickGroup]=e[t.tickGroup]||[]),e[t.tickGroup].push(t),e),{});n=Object.values(e).reduce((e,t)=>{const s=Math.min(...t.map(e=>(e.left+e.right)/2));return e.set(s,t),e},new Map)}return{measureIndex:this.headMeasureIndex+t,rows:s,marks:this.getMarksInMeasure(t),duration:0,xMap:n,voltaBegin:s.some(e=>e.voltaBegin),voltaEnd:s.some(e=>e.voltaEnd),alternative:s.some(e=>e.alternative),barTypes:s.reduce((e,t)=>({...e,...t.barTypes}),{})}});return s.forEach(e=>n.forEach(e)),{staffMask:this.staffMask,columns:n}}getContexts(e){const t=this.getStaffArray(e).map(e=>e?e.measures.map(e=>({events:null,contexts:e.getContexts(),voltaBegin:e.tokens.some(e=>e.type===K.VoltaLeft),voltaEnd:e.tokens.some(e=>e.type===K.VoltaRight),alternative:t.some(e=>e.alternative),barTypes:e.barTypes})):Array(this.measureCount).fill(null).map(()=>({events:null,contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}})));for(let e=0;et[e]?.contexts.filter(e=>[Oe.TimeSignatureC,Oe.TimeSignatureN].includes(e.type))).find(e=>e?.length);s&&t.forEach(t=>{t[e].contexts.length||t[e].contexts.push(...s)})}const s=Array(this.measureCount).fill(null).map((e,s)=>({measureIndex:this.headMeasureIndex+s,rows:t.map(e=>e[s]),marks:[],duration:0,voltaBegin:t.some(e=>e[s].voltaBegin),voltaEnd:t.some(e=>e[s].voltaEnd),alternative:t.some(e=>e.alternative),barTypes:t.reduce((e,t)=>({...e,...t[s].barTypes}),{})}));return{staffMask:this.staffMask,columns:s}}assignSemantics(e,t){const s=this.staves[e];console.assert(s,"staff is null:",e,this.staves);const i=s.top+s.staffY;t.getSystemPoints().forEach(e=>{const t={...e};t.y+=i,t.extension&&(t.extension={...t.extension},Number.isFinite(t.extension.y1)&&(t.extension.y1+=i,t.extension.y2+=i)),this.semantics.push(t)})}assemble(e,t=new DummyLogger){if(this.measureBars=[],!this.semantics)return;const s=SemanticGraph.fromPoints(this.semantics).getConfidentLayer(w.vline_BarMeasure,e);s.sort((e,t)=>e.x-t.x);const i=this.staffTop,r=this.staffBottom;let n=0;const a=s.reduce((e,t)=>{const s=Number.isFinite(t.confidence)?Math.tanh(t.confidence):1,a=t.x-n>.4?t.x:n;n=t.x;let o=e[a]||0;return o+=(Math.min(t.extension.y2,r)-Math.max(t.extension.y1,i))*s,t.x!==a&&delete e[a],e[t.x]=o,e},{}),o=Object.entries(a).filter(([e,t])=>t>3*this.staves.length).map(([e])=>Number(e));if(this.sidWhiteList.length)for(const e of s)this.sidWhiteList.includes(e.id)&&!o.some(t=>Math.abs(t-e.x)<=2)&&o.push(e.x);o.sort((e,t)=>e-t),o.forEach((e,t)=>{(t<=0||e-o[t-1]>2)&&this.measureBars.push(e)}),this.measureBars.length||this.measureBars.push(this.width),this.tidyMeasureBars(),this.rearrangeMeasures();this.semantics.filter(e=>[w.vline_BarTerminal,w.vline_BarSegment].includes(e.semantic)).forEach(e=>{const t=this.staves[0].measures.find(t=>e.x>t.right-2&&e.x{for(;!(l&1<O(this.index,i,e)),s.clearPredictedTokens(),s.assemble(e,this,t))})}qualifiedSemantics(e,t=1){return e.filter(e=>this.sidWhiteList.includes(e.id)||!this.sidBlackList.includes(e.id)&&(e.confidence>=t||!Number.isFinite(e.confidence))).map(e=>this.displacementSemantics&&this.displacementSemantics[e.id]?{...e,...this.displacementSemantics[e.id]}:e)}clearTokens(){this.staves.forEach(e=>e.clearTokens()),this.semantics=[]}newPoint(e,t,s=1){const i=this.staves[e];console.assert(i,"staff index out of bound:",e,this.staves.length);const{semantic:r,x:n,y:a,confidence:o=0,extension:c=null}=t,l={semantic:r,x:n,y:a,confidence:o,extension:c};return l.extension||delete l.extension,O(this.index,e,l),i.semantics.push(l),i.clearPredictedTokens(),i.assemble(s,this),l}appendToken(e){switch(this.tokens.push(e),e.textType){case De.TempoNumeral:{const t=this.staves[0];if(t){const s=t.top+t.staffY;t.measures.forEach(t=>{t.tokens=t.tokens.filter(t=>!ae.includes(t.type)||Math.abs(t.x-e.x)>e.width/2||Math.abs(s+t.y-e.y)>e.fontSize/2)})}}break;case De.Alternation1:case De.Alternation2:this.staves[0].measures.forEach(t=>{const s=Math.min(t.left+t.width,e.x+e.width/2)-Math.max(t.left,e.x-e.width/2);t.alternative=t.alternative||s/t.width>.5})}}}System.className="System",System.blackKeys=["index","pageIndex","prev","next","headMeasureIndex","tokens","indent"];class Page extends SimpleClass{constructor(e){super(),super.assign(e),this.systems=this.systems||[],this.source&&(this.source.matrix=this.source.matrix||[1,0,0,1,0,0])}get sidBlackList(){const e=[].concat(...this.systems.map(e=>e.sidBlackList));return new Set(e)}get sidWhiteList(){const e=[].concat(...this.systems.map(e=>e.sidWhiteList));return new Set(e)}clearTokens(){this.semantics=null,this.tokens=null,this.systems.forEach(e=>e.tokens=null)}assignTexts(e,[t,s]){const i=this.source&&this.source.interval?this.source.interval*(t/this.source.dimensions.height):t/this.height;this.semantics=e.map(e=>{const r={x:(e.cx-s/2)/i,y:(e.cy-t/2)/i},n=this.source&&this.source.matrix?(a=r,{x:(o=this.source.matrix)[0]*a.x+o[2]*a.y+o[4],y:o[1]*a.x+o[3]*a.y+o[5]}):r;var a,o;return{confidence:e.score,x:n.x+this.width/2,y:n.y+this.height/2,semantic:w.rect_Text,extension:{text:e.text,type:e.type,width:e.width/i,height:e.height/i,theta:e.theta,textFeature:e.feature_dict}}})}assemble({textAnnotations:e=null}={},t=new DummyLogger){if(this.tokens=[],this.systems.forEach(e=>e.tokens=[]),this.systems.length){const e=this.systems.map(e=>e.left),t=e[Math.floor((e.length-1)/2)];this.systems.forEach(e=>e.indent=e.left>t+2)}if(this.semantics){const t=this.source?this.source.name:this.index.toString();this.semantics.forEach(s=>{B(t,s);const i={id:s.id,type:K.Text,confidence:s.confidence,textType:mt[s.extension.type]||s.extension.type,text:e&&e[s.id]||s.extension.text,textFeasure:s.extension.textFeature,width:s.extension.width,fontSize:s.extension.height};if(s.semantic===w.rect_Text)switch(i.textType){case De.Title:case De.Author:case De.PageMargin:case De.Other:this.tokens.push(new TextToken({x:s.x,y:s.y,...i}));break;case De.TempoNumeral:case De.Chord:case De.MeasureNumber:case De.Instrument:case De.Alternation1:case De.Alternation2:{const e=this.systems.find(e=>e.top+e.staffTop>s.y);e&&e.appendToken(new TextToken({x:s.x-e.left,y:s.y-e.top,...i}))}break;case De.TextualMark:case De.Times:{const e=[...this.systems].reverse().find(e=>e.topt>=e.top&&tr>=e.left&&r[e,dt[`TimeD${e}`]])),gt=Object.fromEntries(Array(12).fill(null).map((e,t)=>t+1).map(e=>[e,dt[`TimeN${e}`]])),yt=dt,vt={[yt.BOS]:"BOS",[yt.NoteheadS0]:"noteheads-s0",[yt.NoteheadS1]:"noteheads-s1",[yt.NoteheadS2]:"noteheads-s2",[yt.NoteheadGrace]:"GraceNotehead",[yt.Flag3]:"flags-u3",[yt.BeamLeft]:"BeamLeft",[yt.BeamContinue]:"BeamContinue",[yt.BeamRight]:"BeamRight",[yt.Dot]:"dot",[yt.Rest0]:"rests-0o",[yt.Rest1]:"rests-1o",[yt.Rest2]:"rests-2",[yt.Rest3]:"rests-3",[yt.Rest4]:"rests-4",[yt.Rest5]:"rests-5",[yt.Rest6]:"rests-6"},xt={[yt.NoteheadS0]:0,[yt.NoteheadS1]:1,[yt.NoteheadS2]:2,[yt.NoteheadGrace]:2},St=[yt.NoteheadS0,yt.NoteheadS1,yt.NoteheadS2,yt.NoteheadGrace],bt=[yt.Rest0,yt.Rest1,yt.Rest2,yt.Rest3,yt.Rest4,yt.Rest5,yt.Rest6],kt=[yt.BeamLeft,yt.BeamContinue,yt.BeamRight],Tt=[...St,...bt],wt=[...St,...bt,yt.vline_Stem],Mt=[yt.BOS,yt.NoteheadS0,yt.vline_Stem,...bt],Et=[...Tt,yt.vline_Stem],Nt={[yt.BeamLeft]:"Open",[yt.BeamRight]:"Close"},It=e=>({type:e,staff:-1,x:0,y1:0,y2:0}),Ct=It(dt.BOS),_t=e=>[It(gt[e.numerator]),It(pt[e.denominator])],Ot=(e,t)=>{const s=e.filter((e,s)=>t[s]),i=Math.max(...s);return e.findIndex(e=>e===i)};class SemanticCluster extends SimpleClass{static elementToJSON(e){const t={type:e.type,staff:e.staff,x:e.x,y1:e.y1,y2:e.y2};return e.id&&(t.id=e.id),t}constructor(e){super(),super.assign(e)}get sourceMask(){return this.elements.map(e=>wt.includes(e.type))}get targetMask(){return this.elements.map(e=>Mt.includes(e.type))}get vMask(){return this.elements.map(e=>Et.includes(e.type))}get compactMatrixH(){if(!this.matrixH)return null;const e=this.sourceMask,t=this.targetMask;return this.matrixH.filter((t,s)=>e[s]).map(e=>e.filter((e,s)=>t[s]))}set compactMatrixH(e){this.matrixH=Bt([].concat(...e),[this.sourceMask,this.targetMask])}get compactMatrixV(){if(!this._matrixV)return null;const e=this.vMask,t=this._matrixV.filter((t,s)=>e[s]).map(t=>t.filter((t,s)=>e[s]));return[].concat(...t.map((e,t)=>e.slice(0,t)))}set compactMatrixV(e){this.matrixV=e&&At(e,this.vMask)}get matrixV(){return this.groupsV&&Pt(this.elements.length,this.groupsV)}set matrixV(e){if(!e)return this.groupsV=null,void(this._matrixV=e);const t=[],s=e.map((t,s)=>t.some(Number.isFinite)||e.some(e=>Number.isFinite(e[s])));e.forEach((e,i)=>{if(s[i]){let s=!1;for(let r=0;r=.5){const e=t.findIndex(e=>e.includes(r));t[e].push(i),s=!0;break}}s||t.push([i])}}),this.groupsV=t,this._matrixV=e}toJSON(){return{__prototype:"SemanticCluster",index:this.index,elements:this.elements.map(SemanticCluster.elementToJSON),compactMatrixH:this.compactMatrixH,compactMatrixV:this.compactMatrixV}}static mapMatrix(e,t,s){return t.reduce((t,s,i)=>(t[s]?t[s]=t[s].map((t,s)=>t+e[i][s]?1:0):t[s]=e[i],t),[]).map(e=>s.map(t=>e[t]))}mergeOverlapping(){const e=this.overlappedNoteheads();if(e.length){const t=this.elements.map((t,s)=>{const i=e.find(e=>s===e[1]),r=i?i[0]:s;return r-e.filter(e=>e[1]t.findIndex(e=>e===s));this.elements=s.map(e=>this.elements[e]),console.assert(this.elements.every(Boolean),"null element found:",this,t,s),this.matrixH=SemanticCluster.mapMatrix(this.matrixH,t,s),this.groupsV=this.groupsV.map(e=>Array.from(new Set(e.map(e=>t[e]))))}}overlappedNoteheads(){const e=[],t=this.elements.filter(e=>St.includes(e.type));for(let s=0;st),t=this.masks?this.masks[1]:e.map(e=>Mt.includes(this.elements[e].type)),s=e.map(e=>this.elements[e].type===yt.vline_Stem&&this.elements[e].y2-this.elements[e].y1>2),i=e.filter(e=>[yt.NoteheadS1,yt.NoteheadS2,yt.NoteheadGrace].includes(this.elements[e].type)),r=e.filter(e=>this.elements[e].type===yt.NoteheadS0),n=e.map(()=>!1),a={};i.forEach(t=>{const i=this.elements[t];e.filter(e=>s[e]).filter(e=>this.elements[e].y1-.5i.y1).sort((e,s)=>this.matrixH[t][s]-this.matrixH[t][e]).slice(0,2).filter((e,s)=>0===s||this.matrixH[t][e]>=.5).forEach(e=>{a[e]=a[e]||[],a[e].push(t)})}),r.forEach(e=>{const s=this.elements[e],i=Ot(this.matrixH[e],t),r=this.elements[i];r.type===yt.NoteheadS0&&Math.abs(s.x-r.x)<2.6?(n[e]=!0,a[i]=a[i]||[i],a[i].push(e)):a[e]=a[e]||[e]});const o={},c=e.filter(e=>a[e]||bt.includes(this.elements[e].type));c.sort((e,t)=>this.elements[e].x-this.elements[t].x);const l=e.map(e=>e===yt.BOS);c.forEach(e=>{const t=Ot(this.matrixH[e],l);o[e]=t,t&&!bt.includes(this.elements[t].type)&&(l[t]=!1),l[e]=!0});const u=this.elements.filter(e=>e.type===yt.Dot),h=this.elements.filter(e=>e.type===yt.Flag3),m=this.elements.filter(e=>kt.includes(e.type)),f=this.groupsV;return c.map(e=>{const t=this.elements[e],s=f?f.findIndex(t=>t.includes(e)):null;if(bt.includes(t.type)){const i=u.filter(e=>e.x>t.x+.5&&e.xt.y1-1&&e.y1this.elements[e]),r=Math.min(...i.map(e=>e.x-.7)),n=Math.max(...i.map(e=>e.x+.7));i.sort((e,t)=>t.y1-e.y1);const c=i.map(e=>e.y1),l=i.map(e=>e.id),f=c[0],d=c[c.length-1],p=u.filter(e=>e.x>n&&e.xf-1&&e.y1{const s=A(t.y1,.5);return e[s]=e[s]||[],e[s].push(t),e},{}),g=Math.max(...Object.values(p).map(e=>e.length),0);let y=xt[i[0].type],v=null,x=null,S=null;if(t.type===yt.vline_Stem){if(v=f-t.y1>t.y2-d?"u":"d",S={x:t.x,y:"u"===v?t.y1:t.y2},2===y){const e="u"===v?[t.y1-.4,t.y2-1]:[t.y1+1,t.y2+.4];y+=h.filter(s=>Math.abs(s.x-t.x)<.2&&s.y1>e[0]&&s.y1Math.abs(s.x-t.x)<.2&&s.y1>e[0]&&s.y1{const s=function*(){for(const t of e)yield t}(),[i,r]=t;return i.map(e=>r.map(t=>e&&t?s.next().value:null))},At=(e,t)=>{const s=function*(){for(const t of e)yield t}();return t.map((e,i)=>t.map((t,r)=>e&&t&&r{const s=Array(e).fill(null).map((e,s)=>t.findIndex(e=>e.includes(s)));return Array(e).fill(null).map((t,i)=>Array(e).fill(null).map((e,t)=>{if(t>=i)return null;const r=s[i],n=s[t];return r<0||n<0?null:r===n?1:0}))};var Rt;!function(e){e[e.None=0]="None",e.Mordent="mordent",e.Prall="prall",e.Turn="turn",e.Trill="trill",e.Tremolo="tremolo",e.Arpeggio="arpeggio"}(Rt||(Rt={}));const Dt=class Stream{constructor(e){this.array=new Uint8Array(e),this.position=0}eof(){return this.position>=this.array.length}read(e){const t=this.array.slice(this.position,this.position+e);return this.position+=e,t}readString(e){return Array.from(this.read(e)).map(e=>String.fromCharCode(e)).join("")}readInt32(){const e=(this.array[this.position]<<24)+(this.array[this.position+1]<<16)+(this.array[this.position+2]<<8)+this.array[this.position+3];return this.position+=4,e}readInt16(){const e=(this.array[this.position]<<8)+this.array[this.position+1];return this.position+=2,e}readInt8(e){let t=this.array[this.position];return e&&t>127&&(t-=256),this.position+=1,t}readVarInt(){let e=0;for(;;){const t=this.readInt8();if(!(128&t))return e+t;e+=127&t,e<<=7}}};const Ft=class OStream{constructor(){this.buffer=""}write(e){this.buffer+=e}writeInt32(e){this.buffer+=String.fromCharCode(e>>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(255&e)}writeInt16(e){this.buffer+=String.fromCharCode(e>>8&255)+String.fromCharCode(255&e)}writeInt8(e){this.buffer+=String.fromCharCode(255&e)}writeVarInt(e){if(e<0)throw new Error("OStream.writeVarInt minus number: "+e);const t=127&e;e>>=7;let s=String.fromCharCode(t);for(;e;){const t=127&e;e>>=7,s=String.fromCharCode(128|t)+s}this.buffer+=s}getBuffer(){return this.buffer}getArrayBuffer(){return Uint8Array.from(this.buffer.split("").map(e=>e.charCodeAt(0))).buffer}};var Lt={parseMidiData:function(e){function t(e){const t=e.readString(4),s=e.readInt32();return{id:t,length:s,data:e.read(s)}}let s;function i(e){const t={};t.deltaTime=e.readVarInt();let i=e.readInt8();if(240&~i){let r;128&i?(r=e.readInt8(),s=i):(r=i,i=s);const n=i>>4;switch(t.channel=15&i,t.type="channel",n){case 8:return t.subtype="noteOff",t.noteNumber=r,t.velocity=e.readInt8(),t;case 9:return t.noteNumber=r,t.velocity=e.readInt8(),0===t.velocity?t.subtype="noteOff":t.subtype="noteOn",t;case 10:return t.subtype="noteAftertouch",t.noteNumber=r,t.amount=e.readInt8(),t;case 11:return t.subtype="controller",t.controllerType=r,t.value=e.readInt8(),t;case 12:return t.subtype="programChange",t.programNumber=r,t;case 13:return t.subtype="channelAftertouch",t.amount=r,t;case 14:return t.subtype="pitchBend",t.value=r+(e.readInt8()<<7),t;default:throw new Error("Unrecognised MIDI event type: "+n)}}else{if(255!==i){if(240===i){t.type="sysEx";const s=e.readVarInt();return t.data=e.readString(s),t}if(247===i){t.type="dividedSysEx";const s=e.readVarInt();return t.data=e.readString(s),t}throw new Error("Unrecognised MIDI event type byte: "+i)}{t.type="meta";const s=e.readInt8(),i=e.readVarInt();switch(s){case 0:if(t.subtype="sequenceNumber",2!==i)throw new Error("Expected length for sequenceNumber event is 2, got "+i);return t.number=e.readInt16(),t;case 1:return t.subtype="text",t.text=e.readString(i),t;case 2:return t.subtype="copyrightNotice",t.text=e.readString(i),t;case 3:return t.subtype="trackName",t.text=e.readString(i),t;case 4:return t.subtype="instrumentName",t.text=e.readString(i),t;case 5:return t.subtype="lyrics",t.text=e.readString(i),t;case 6:return t.subtype="marker",t.text=e.readString(i),t;case 7:return t.subtype="cuePoint",t.text=e.readString(i),t;case 32:if(t.subtype="midiChannelPrefix",1!==i)throw new Error("Expected length for midiChannelPrefix event is 1, got "+i);return t.channel=e.readInt8(),t;case 47:if(t.subtype="endOfTrack",0!==i)throw new Error("Expected length for endOfTrack event is 0, got "+i);return t;case 81:if(t.subtype="setTempo",3!==i)throw new Error("Expected length for setTempo event is 3, got "+i);return t.microsecondsPerBeat=(e.readInt8()<<16)+(e.readInt8()<<8)+e.readInt8(),t;case 84:if(t.subtype="smpteOffset",5!==i)throw new Error("Expected length for smpteOffset event is 5, got "+i);const s=e.readInt8();return t.frameRate={0:24,32:25,64:29,96:30}[96&s],t.hour=31&s,t.min=e.readInt8(),t.sec=e.readInt8(),t.frame=e.readInt8(),t.subframe=e.readInt8(),t;case 88:if(t.subtype="timeSignature",4!==i)throw new Error("Expected length for timeSignature event is 4, got "+i);return t.numerator=e.readInt8(),t.denominator=Math.pow(2,e.readInt8()),t.metronome=e.readInt8(),t.thirtyseconds=e.readInt8(),t;case 89:if(t.subtype="keySignature",2!==i)throw new Error("Expected length for keySignature event is 2, got "+i);return t.key=e.readInt8(!0),t.scale=e.readInt8(),t;case 127:return t.subtype="sequencerSpecific",t.data=e.readString(i),t;default:return t.subtype="unknown",t.data=e.readString(i),t}}}}let r=e;"string"==typeof e&&(r=e.split("").map(e=>e.charCodeAt(0)));const n=new Dt(r),a=t(n);if("MThd"!==a.id||6!==a.length)throw new Error("Bad .mid file - header not found");const o=new Dt(a.data),c=o.readInt16(),l=o.readInt16(),u=o.readInt16();let h;if(32768&u)throw new Error("Expressing time division in SMTPE frames is not supported yet");h=u;const m={formatType:c,trackCount:l,ticksPerBeat:h},f=[];for(let e=0;e>16&255),e.writeInt8(t.microsecondsPerBeat>>8&255),e.writeInt8(255&t.microsecondsPerBeat);break;case"smpteOffset":e.writeInt8(84),e.writeVarInt(5);var s={24:0,25:32,29:64,30:96}[t.frameRate];e.writeInt8(t.hour|s),e.writeInt8(t.min),e.writeInt8(t.sec),e.writeInt8(t.frame),e.writeInt8(t.subframe);break;case"timeSignature":e.writeInt8(88),e.writeVarInt(4),e.writeInt8(t.numerator),e.writeInt8(Math.log2(t.denominator)),e.writeInt8(t.metronome),e.writeInt8(t.thirtyseconds);break;case"keySignature":e.writeInt8(89),e.writeVarInt(2),e.writeInt8(t.key),e.writeInt8(t.scale);break;case"sequencerSpecific":e.writeInt8(127),e.writeVarInt(t.data.length),e.write(t.data);break;default:throw new Error("unhandled event subtype:"+t.subtype)}break;case"sysEx":e.writeInt8(240),e.writeVarInt(t.data.length),e.write(t.data);break;case"dividedSysEx":e.writeInt8(247),e.writeVarInt(t.data.length),e.write(t.data);break;case"channel":switch(t.subtype){case"noteOn":e.writeInt8(144|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.velocity);break;case"noteOff":e.writeInt8(128|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.velocity?t.velocity:0);break;case"noteAftertouch":e.writeInt8(160|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.amount);break;case"controller":e.writeInt8(176|t.channel),e.writeInt8(t.controllerType),e.writeInt8(t.value);break;case"programChange":e.writeInt8(192|t.channel),e.writeInt8(t.programNumber);break;case"channelAftertouch":e.writeInt8(208|t.channel),e.writeInt8(t.amount);break;case"pitchBend":e.writeInt8(224|t.channel),e.writeInt8(255&t.value),e.writeInt8(t.value>>7&255);break;default:throw new Error("unhandled event subtype:"+t.subtype)}break;default:throw new Error("unhandled event type:"+t.type)}}const r=new Ft,n=new Ft;n.writeInt16(e.formatType),n.writeInt16(t.length),n.writeInt16(e.ticksPerBeat),s(r,"MThd",n.getBuffer());for(let e=0;e{const s=[];let i=120;const r=e.header.ticksPerBeat;for(let t=0;t0){e=a.ticksToEvent/r/(i/60)}"meta"==a.event.type&&"setTempo"==a.event.subtype&&(i=6e7/a.event.microsecondsPerBeat);const s=1e3*e*t||0;o.push([a,s]),a=n()}if(a=n())for(;a;)e()}(),o},trimSequence:e=>{const t=new Map;return e.filter(([{event:e,ticksToEvent:s}])=>{if(s>0&&t.clear(),"channel"!==e.type)return!0;const i=`${e.subtype}|${e.channel}|${e.noteNumber}`;return!t.get(i)&&(t.set(i,e),!0)})},fixOverlapNotes:e=>{const t=new Map,s=new Map,i=[];let r=-1;return e.forEach(([{event:e,ticksToEvent:n}],a)=>{if(n>0&&(r=a),"channel"!==e.type)return;const o=`${e.channel}|${e.noteNumber}`;switch(e.subtype){case"noteOn":t.get(o)?s.set(o,r):t.set(o,r);break;case"noteOff":s.get(o)?(i.push([s.get(o),a]),s.delete(o)):t.delete(o)}}),i.forEach((e,t)=>{for(let s=t-1;s>=0;--s){const t=i[s];if(t[1]t[0]&&++e[0]}}),i.forEach(([t,s])=>{if(s>=e.length-1||t<0)return;const i=e[s],r=e[s+1],n=e[t];if(!n[0].ticksToEvent)return void console.warn("invalid front index:",t,s,n);const a=n[1]/n[0].ticksToEvent;r[1]+=i[1],r[0].ticksToEvent+=i[0].ticksToEvent,i[0].ticksToEvent=n[0].ticksToEvent-1,n[0].ticksToEvent=1,i[1]=i[0].ticksToEvent*a,n[1]=n[0].ticksToEvent*a,e.splice(s,1),e.splice(t,0,i)}),e}};const jt=$t,Ht={64:"Sustain",65:"Portamento",66:"Sostenuto",67:"Soft"};class Notation$1{static parseMidi(e,{fixOverlap:t=!0}={}){const s=[],i={},r={},n=[],a=[];let o=0,c=5e3,l=0,u=4,h=0;const m={};let f,d=0,p=0;const g=[],y=e.header.ticksPerBeat;let v=jt.midiToSequence(e);t&&(v=jt.trimSequence(jt.fixOverlapNotes(v)));const x=v.map(e=>({data:e[0].event,track:e[0].track,deltaTime:e[1],deltaTicks:e[0].ticksToEvent}));let S=0;for(const e of x){if(d+=e.deltaTicks,p=Math.round(1*d),e.deltaTicks>0){const t=e.deltaTicks/y;for(let e=Math.ceil(l);es.channel==t.channel&&s.pitch==e);if(i>=0){const r=s.splice(i,1)[0];n[t.channel].push({channel:t.channel,startTick:r.startTick,endTick:p,pitch:e,start:r.start,duration:o-r.start,velocity:r.velocity,beats:r.beats,track:r.track,finger:r.finger})}else console.debug("unexpected noteOff: ",o,t);m.high=Math.max(m.high||e,e)}break;case"controller":switch(t.controllerType){case 64:case 65:case 66:case 67:const e=Ht[t.controllerType];i[t.channel]=i[t.channel]||{},r[t.channel]=r[t.channel]||[];const s=i[t.channel][e];s&&r[t.channel].push({type:e,start:s.start,duration:o-s.start,value:s.value}),i[t.channel][e]={start:o,value:t.value}}}break;case"meta":switch(t.subtype){case"setTempo":c=t.microsecondsPerBeat/1e3,g.push({tempo:t.microsecondsPerBeat,tick:p,time:o});break;case"timeSignature":u=t.numerator,h=0;break;case"text":if(!f&&/^find-corres:/.test(t.text)){const e=t.text.match(/:([\d\,-]+)/);f=(e&&e[1]||"").split(",").map(e=>Number(e))}else if(/fingering\(.*\)/.test(t.text)){const[e,i]=t.text.match(/\((.+)\)/),r=Number(i);if(!Number.isNaN(r)){const e=s[s.length-1];e&&(e.finger=r);const t=x.find(e=>e.index==S-1);t&&(t.data.finger=r)}}break;case"copyrightNotice":console.log("MIDI copyright:",t.text)}}}return s.forEach(e=>{console.debug("unclosed noteOn event at",e.startTick,e),n[e.channel].push({startTick:e.startTick,endTick:p,pitch:e.pitch,start:e.start,duration:o-e.start,velocity:e.velocity,beats:e.beats,track:e.track,finger:e.finger})}),new Notation$1({channels:n,keyRange:m,pedals:r,bars:a,endTime:o,endTick:p,correspondences:f,events:x,tempos:g,ticksPerBeat:y,meta:{}})}constructor(e){Object.assign(this,e),this.notes=[];for(const e of this.channels)if(e)for(const t of e)this.notes.push(t);this.notes.sort(function(e,t){return e.start-t.start});for(const e in this.notes)this.notes[e].index=Number(e);this.duration=this.notes.length>0?this.endTime-this.notes[0].start:0,this.pitchMap=[];for(const e in this.channels)for(const t in this.channels[e]){const s=this.channels[e][t].pitch;this.pitchMap[s]=this.pitchMap[s]||[],this.pitchMap[s].push(this.channels[e][t])}if(this.pitchMap.forEach(e=>e.sort((e,t)=>e.start-t.start)),this.meta.beatInfos)for(let e=0;e0){const s=this.meta.beatInfos[e-1];t.beatIndex=s.beatIndex+Math.ceil((t.tick-s.tick)/this.ticksPerBeat)}else t.beatIndex=0}{let e=0,t=0,s=5e5;for(const i of this.tempos){e+=s/1e3*(i.tick-t)/this.ticksPerBeat,t=i.tick,s=i.tempo,i.time=e}}}findChordBySoftindex(e,t=.8){return this.notes.filter(s=>Math.abs(s.softIndex-e)e.from,"range is invalid:",e);const t=t=>{const s=Math.max(e.from,this.tempos[t].tick),i=te+s.tempo*t(i),0)/(e.to-e.from))}ticksToTime(e){console.assert(Number.isFinite(e),"invalid tick value:",e),console.assert(this.tempos&&this.tempos.length,"no tempos.");const t=this.tempos.findIndex(t=>t.tick>e),s=t<0?this.tempos.length-1:Math.max(t-1,0),i=this.tempos[s];return i.time+(e-i.tick)*i.tempo*.001/this.ticksPerBeat}timeToTicks(e){console.assert(Number.isFinite(e),"invalid time value:",e),console.assert(this.tempos&&this.tempos.length,"no tempos.");const t=this.tempos.findIndex(t=>t.time>e),s=t<0?this.tempos.length-1:Math.max(t-1,0),i=this.tempos[s];return i.tick+(e-i.time)*this.ticksPerBeat/(.001*i.tempo)}tickRangeToTimeRange(e){return console.assert(e.to>=e.from,"invalid tick range:",e),{from:this.ticksToTime(e.from),to:this.ticksToTime(e.to)}}scaleTempo({factor:e,headTempo:t}){console.assert(this.tempos&&this.tempos.length,"[Notation.scaleTempo] tempos is empty."),t&&(e=t/this.tempos[0].tempo),console.assert(Number.isFinite(e)&&e>0,"[Notation.scaleTempo] invalid factor:",e),this.tempos.forEach(t=>{t.tempo*=e,t.time*=e}),this.events.forEach(t=>{t.deltaTime*=e,t.time*=e}),this.notes.forEach(t=>{t.start*=e,t.duration*=e}),this.endTime*=e}}var Vt={Notation:Notation$1};const{Notation:zt}=Vt,qt=()=>new Promise(e=>requestAnimationFrame(e));var Gt=class MidiPlayer$1{constructor(e,{cacheSpan:t=600,onMidi:s,onPlayFinish:i,onTurnCursor:r}={}){let n;this.cacheSpan=t,this.onMidi=s,this.onPlayFinish=i,this.onTurnCursor=r,n=e.notes&&Number.isFinite(e.endTime)?e:zt.parseMidi(e),this.notation=n,this.events=n.events,this.isPlaying=!1,this.progressTime=0,this.startTime=performance.now(),this.duration=n.endTime,this.cursorTurnDelta=0,console.assert(n.tempos&&n.tempos.length,"[MidiPlayer] invalid notation, tempos is empty.")}dispose(){this.isPlaying=!1,this.progressTime=0}get progressTicks(){return this.notation.timeToTicks(this.progressTime)}set progressTicks(e){this.progressTime=this.notation.ticksToTime(e),this.onTurnCursor&&this.onTurnCursor(this.progressTime)}async play({nextFrame:e=qt}={}){this.progressTime>=this.duration&&(this.progressTime=0);let t=performance.now();this.startTime=t-this.progressTime,this.isPlaying=!0;let s=this.events.findIndex(e=>e.time>=t-this.startTime);for(;this.isPlaying;){for(;sthis.progressTime+this.cacheSpan)break;"channel"===e.data.type&&this.startTime+e.time>=t&&this.onMidi&&this.onMidi(e.data,this.startTime+e.time)}if(await e(),!this.isPlaying)break;if(0!==this.cursorTurnDelta){const e=this.cursorTurnDelta<0;if(this.startTime-=this.cursorTurnDelta,this.cursorTurnDelta=0,e)for(;s>0;--s){const e=this.events[s].time;if(this.startTime+ethis.duration&&(this.isPlaying=!1,this.onPlayFinish&&this.onPlayFinish())}}pause(){this.isPlaying=!1}turnCursor(e){this.isPlaying?this.cursorTurnDelta+=e-this.progressTime:this.progressTime=e,this.onTurnCursor&&this.onTurnCursor(e)}},Wt={CostStepAttenuation:.6,SkipDeep:3,PriorDistanceSigmoidFactor:.1,PriorValueSigmoidFactor:.12,SkipCost:.5,LagOffsetCost:1,LeadOffsetCost:1.6,ZeroOffsetCost:.58,RelocationThreshold:6};const{pick:Ut}=y.default,Yt=Wt;class Node$2{constructor(e,t){this.s_note=e,this.c_note=t,console.assert(null!=this.s_note.softIndex,"s_note softIndex is null"),this.offset=this.s_note.softIndex-this.c_note.softIndex,this._prev=null,this._totalCost=0,this._value=0,this.cacheDirty=!0}get prev(){return this._prev}set prev(e){e!=this._prev&&(this._prev=e,this.cacheDirty=!0)}get si(){return this.s_note.index}get ci(){return this.c_note.index}get root(){return this.prev.root||this}get rootSi(){return this.prev.zero?this.si:this.prev.rootSi}get id(){return`${this.s_note.index},${this.c_note.index}`}static cost(e,t,s){return e*Yt.CostStepAttenuation+Math.tanh(t*Yt.SkipCost)+Math.tanh(.5*s)}updateCache(){this.cacheDirty&&(this._totalCost=Node$2.cost(this.prev.totalCost,this.si-this.prev.si-1,this.selfCost),this._value=this.prev.value+1-Math.tanh(.5*this.selfCost),this.cacheDirty=!1)}get totalCost(){return this.updateCache(),this._totalCost}get value(){return this.updateCache(),this._value}get deep(){return this.prev.deep+1}get path(){const e=[];for(let t=this;!t.zero;t=t.prev)e[t.si]=t.ci;for(let t=0;t=1,"node index error:",this,e);const s=Node$2.cost(e.totalCost,this.si-e.si-1,t);return(!this.prev||s0?Yt.LagOffsetCost:Yt.LeadOffsetCost))**2}return t}priorByOffset(e){const t=Math.abs(this.offset-e)/1;return Math.tanh(this.value*Yt.PriorValueSigmoidFactor)-Math.tanh(t*Yt.PriorDistanceSigmoidFactor)}static zero(){return{zero:!0,totalCost:0,value:0,si:-1,ci:-1,deep:0,offset:0}}}var Xt=Node$2;const Kt=Wt,Zt=Xt;var Jt=class Navigator$1{constructor(e,t,s={}){this.criterion=e,this.sample=t,this.getCursorOffset=s.getCursorOffset||(()=>null),this.outOfPage=s.outOfPage,this.bestNode=null,this.fineCursor=null,this.breakingSI=t.notes.length-1,this.zeroNode=Zt.zero(),this.zeroNode.offset=this.getCursorOffset()||0,this.relocationThreshold=s.relocationThreshold||Kt.RelocationThreshold}step(e){const t=this.sample.notes[e];if(t.matches.length>0){t.matches.forEach(t=>{t.evaluatePrev(this.zeroNode);for(let s=e-1;s>=Math.max(this.breakingSI+1,e-Kt.SkipDeep);--s){const i=this.sample.notes[s];console.assert(i,"prevNote is null:",s,e,this.sample.notes),i.matches.forEach(e=>{const s=t.offset-e.offset;s<2/Kt.LagOffsetCost&&s>-2/Kt.LeadOffsetCost&&t.evaluatePrev(e)})}if(t.prior=t.totalCost>1.99?-1:t.priorByOffset(this.zeroNode.offset),t.prior>0&&this.outOfPage){const e=this.criterion.notes[t.ci].startTick;this.outOfPage(e)&&(t.prior-=.7)}}),t.matches.sort((e,t)=>t.prior-e.prior),this.cursors=t.matches;let s=null;const i=this.nullSteps(e),r=this.cursors[0];r&&r.totalCost<1&&(r.prior>0||r.totalCost<.4&&Math.log(Math.max(i*r.value,.001))>this.relocationThreshold)&&(this.zeroNode.offset=r.offset,s=r,(!this.bestNode||r.value>this.bestNode.value)&&(this.bestNode=r)),s?this.fineCursor=s:this.resetCursor(e,{breaking:!1})||(this.zeroNode.offset+=t.deltaSi*Math.tanh(i),console.assert(!Number.isNaN(this.zeroNode.offset),"zeroNode.offset is NaN.",t.deltaSi,i))}else this.cursors=[]}path({fromIndex:e=0,toIndex:t=this.sample.notes.length-1}={}){const s=[];let i=null;for(let r=t;r>=e;){const e=this.sample.notes[r];if(!e.matches.length||e.matches[0].prior<-.01||e.matches[0].totalCost>=1){s[r]=-1,--r;continue}null!=i&&(e.matches.forEach(e=>e.backPrior=e.totalCost<1.99?e.priorByOffset(i):-1),e.matches.sort((e,t)=>t.backPrior-e.backPrior));const t=e.matches[0];t.path.forEach((e,t)=>s[t]=e),i=t.root.offset,r=t.rootSi-1}return console.assert(s.length==t+1,"path length error:",s,e,t+1,this.sample.notes.length,this.sample.notes.length?this.sample.notes[this.sample.notes.length-1].index:null),s}nullSteps(e){return e-(this.fineCursor?this.fineCursor.si:-1)-1}resetCursor(e,{breaking:t=!0}={}){t&&(this.breakingSI=e);const s=this.getCursorOffset();return null!=s&&(this.zeroNode.offset=s,this.zeroNode.si=e,this.fineCursor=null,console.assert(!Number.isNaN(this.zeroNode.offset),"zeroNode.offset is NaN.",s),!0)}get relocationTendency(){const e=this.cursors&&this.cursors[0];if(!e)return null;const t=this.nullSteps(e.si);return t<=0?0:Math.log(Math.max(t*e.value,.001))/this.relocationThreshold}};const Qt=Xt,es=Jt,ts=e=>Math.tanh(e/192),ss=function(e,t,{softIndexFactor:s=1}={}){const i=e[t=Number(t)];if(t>0){const r=e[t-1];console.assert(null!=i.start,"note.start is null",i),console.assert(null!=r.start,"lastNote.start is null",r),i.deltaSi=ts((i.start-r.start)*s),i.softIndex=r.softIndex+i.deltaSi,console.assert(!Number.isNaN(i.deltaSi),"note.deltaSi is NaN.",i.start,r.start)}else i.softIndex=0,i.deltaSi=0};var is={normalizeInterval:ts,makeNoteSoftIndex:ss,makeMatchNodes:function(e,t,s=Qt.zero()){e.matches=[];const i=t.pitchMap[e.pitch];if(i)for(const t of i){const i=new Qt(e,t);s&&i.evaluatePrev(s),e.matches.push(i)}},genNotationContext:function(e,{softIndexFactor:t=1}={}){for(let s=0;s"setTempo"==e.subtype)||(n.push({time:t,type:"meta",subtype:"timeSignature",numerator:4,denominator:4,thirtyseconds:8}),n.push({time:t,type:"meta",subtype:"setTempo",microsecondsPerBeat:e.microsecondsPerBeat}));let a=t||0;if(e.notes)for(const t of e.notes)n.push({time:t.start,type:"channel",subtype:"noteOn",channel:t.channel||0,noteNumber:t.pitch,velocity:t.velocity,finger:t.finger}),a=Math.max(a,t.start),Number.isFinite(s)&&(t.duration=t.duration||s),t.duration&&(n.push({time:t.start+t.duration,type:"channel",subtype:"noteOff",channel:t.channel||0,noteNumber:t.pitch,velocity:0}),a=Math.max(a,t.start+t.duration));if(e.events){const t=e.events.filter(e=>!ns.includes(e.data.subtype));for(const e of t)n.push({time:e.time,...e.data}),a=Math.max(a,e.time)}return n.push({time:a+100,type:"meta",subtype:"endOfTrack"}),n.sort(function(e,t){return e.time-t.time}),n.map((e,t)=>({event:e,index:t})).filter(({event:e})=>"noteOn"==e.subtype&&null!=e.finger).reverse().forEach(({event:e,index:t})=>n.splice(t+1,0,{time:e.time,type:"meta",subtype:"text",text:`fingering(${e.finger})`})),n.forEach(e=>e.ticks=Math.round((e.time-t)*i)),n.forEach((e,t)=>e.deltaTime=e.ticks-(t>0?n[t-1].ticks:0)),{header:r,tracks:[n]}}var os={sliceMidi:(e,t,s)=>({header:e.header,tracks:e.tracks.map(e=>((e,t,s)=>{(e=>{let t=0;e.forEach(e=>{t+=e.deltaTime,e.tick=t})})(e);const i=[],r={};return e.forEach(e=>{e.tick>=t&&e.tick<=s&&"endOfTrack"!==e.subtype?i.push({...e,tick:e.tick-t}):e.ticki.push({...e,tick:0})),i.push({tick:s-t,type:"meta",subtype:"endOfTrack"}),(e=>{let t=0;e.sort((e,t)=>e.tick-t.tick).forEach(e=>{e.deltaTime=e.tick-t,t=e.tick})})(i),i})(e,t,s))}),encodeToMIDIData:as,encodeToMIDI:function(e,t){const s=as(e,t);return rs.encodeMidiFile(s)}};var cs={MIDI:Lt,MusicNotation:Vt,MidiPlayer:Gt,Matcher:is,MidiUtils:os};const ls=["id","ids","pitch","velocity","track","channel","rest","tied","overlapped","implicitType","afterGrace","contextIndex","staffTrack","chordPosition","division"];class MetaNotation{static fromAbsoluteNotes(e,t,s){const i=new MetaNotation(s);return i.measures=Array(t.length).fill(null).map((s,i)=>{const r=t[i],n=t[i+1]?t[i+1]-r:0,a=e.filter(e=>e.measure===i+1).map(e=>({tick:e.startTick-r,duration:e.endTick-e.startTick,...d.default(e,ls),subNotes:[]}));return a.forEach(e=>["rest","tied","implicitType","afterGrace"].forEach(t=>{e[t]||delete e[t]})),{tick:r,duration:n,notes:a}}),i.idTrackMap=e.reduce((e,t)=>(t.id&&(e[t.id]=t.track),e),{}),i}static performAbsoluteNotes(e,{withRestTied:t=!1}={}){const s=e.filter(e=>(t||!e.rest&&!e.tied)&&!e.overlapped).map(e=>({measure:e.measure,channel:e.channel,track:e.track,start:e.start,startTick:e.startTick,endTick:e.endTick,pitch:e.pitch,duration:e.duration,velocity:e.velocity||127,id:e.id,ids:e.ids,staffTrack:e.staffTrack,contextIndex:e.contextIndex,implicitType:e.implicitType,chordPosition:e.chordPosition})).reduce((e,t)=>{const s=`${t.channel}|${t.start}|${t.pitch}`,i=e[s];return i?i.ids.push(...t.ids):e[s]=t,e},{});return Object.values(s)}constructor(e){this.ripe=!1,e&&Object.assign(this,e)}get trackTickBias(){const e=this.measures[0];return this.trackNames.reduce((t,s,i)=>{if(t[s]=0,e){const r=e.notes.find(e=>e.track===i);r&&(t[s]=Math.min(r.tick,0))}return t},{})}get idSet(){return this.measures.reduce((e,t)=>(t.notes.filter(e=>!e.rest).forEach(t=>t.ids.forEach(t=>e.add(t))),e),new Set)}toJSON(){return{__prototype:"LilyNotation",measures:this.measures,idTrackMap:this.idTrackMap,trackNames:this.trackNames,ripe:this.ripe}}toAbsoluteNotes(e){let t=0;const s=e.map(e=>{const s=this.measures[e-1];console.assert(!!s,"invalid measure index:",e,this.measures.length);const i=s.notes.map(s=>({startTick:t+s.tick,endTick:t+s.tick+s.duration,start:t+s.tick,duration:s.duration,measure:e,...d.default(s,ls)}));return t+=s.duration,i});return[].concat(...s)}toPerformingNotation(e,t={}){const s=this.toAbsoluteNotes(e),i=MetaNotation.performAbsoluteNotes(s,t),r=Math.max(...i.map(e=>e.start+e.duration)),n=e.reduce((e,t)=>e+this.measures[t-1].duration,0);return new cs.MusicNotation.Notation({ticksPerBeat:480,meta:{},tempos:[],channels:[i],endTime:r,endTick:n})}toPerformingMIDI(e,{trackList:t}={}){if(!e.length)return null;const s=-Math.min(0,...this.measures[0]?.events.map(e=>e.ticks)||[],...this.measures[0]?.notes.map(e=>e.tick)||[]);let i=s;const r=e.map(e=>{const t=this.measures[e-1];console.assert(!!t,"invalid measure index:",e,this.measures.length);const s=t.events.map(t=>({ticks:i+t.ticks,track:t.track,data:{...t.data,measure:e}}));return i+=t.duration,s}),n=e=>e.ticks+("noteOff"===e.subtype?-1e-8:0),a=[].concat(...r).reduce((e,t)=>(e[t.track]=e[t.track]||[],e[t.track].push({ticks:t.ticks,...t.data}),e),[]);a[0]=a[0]||[],i=s,e.map(e=>{const s=this.measures[e-1];console.assert(!!s,"invalid measure index:",e,this.measures.length),Number.isFinite(s.duration)&&(s.notes.forEach(s=>{if(t&&!t[s.track])return;if(s.rest)return;const r=i+s.tick,n=a[s.track]=a[s.track]||[];s.subNotes.forEach(t=>{n.push({ticks:r+t.startTick,measure:e,ids:s.ids,type:"channel",subtype:"noteOn",channel:s.channel,noteNumber:t.pitch,velocity:t.velocity,staffTrack:s.staffTrack,staff:s.staff}),n.push({ticks:r+t.endTick,measure:e,ids:s.ids,type:"channel",subtype:"noteOff",channel:s.channel,noteNumber:t.pitch,velocity:0,staffTrack:s.staffTrack,staff:s.staff})})}),i+=s.duration)});const o=i;for(let e=0;e{e.sort((e,t)=>n(e)-n(t));let t=0;e.forEach(e=>{e.deltaTime=e.ticks-t,Number.isFinite(e.deltaTime)?t=e.ticks:e.deltaTime=0}),e.push({deltaTime:Math.max(o-t,0),type:"meta",subtype:"endOfTrack"})}),{header:{formatType:0,ticksPerBeat:480},tracks:a,zeroTick:s}}toPerformingNotationWithEvents(e,t={}){if(!e.length)return null;const{zeroTick:s,...i}=this.toPerformingMIDI(e,t),r=cs.MusicNotation.Notation.parseMidi(i);us(r);let n=s;return r.measures=e.map(e=>{const t=n;return n+=this.measures[e-1].duration,{index:e,startTick:t,endTick:n}}),r}setTempo(e){let t=!1;for(const s of this.measures)for(const i of s.events)"setTempo"===i.data.subtype&&(i.data.microsecondsPerBeat=6e7/e,t=!0);return t}}const us=(e,t=["ids","measure","staffTrack"])=>{const s=(e,t,s)=>`${e}|${t}|${s}`,i=e.notes.reduce((e,t)=>(e[s(t.channel,t.pitch,t.startTick)]=t,e),{});e.events.forEach(e=>{if("noteOn"===e.data.subtype){const r=s(e.data.channel,e.data.noteNumber,e.ticks),n=i[r];console.assert(!!n,"cannot find note of",r),n&&Object.assign(n,d.default(e.data,t))}})};var hs,ms={exports:{}},fs={exports:{}};fs.exports=hs=hs||function(e,t){var s;if("undefined"!=typeof window&&window.crypto&&(s=window.crypto),"undefined"!=typeof self&&self.crypto&&(s=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(s=globalThis.crypto),!s&&"undefined"!=typeof window&&window.msCrypto&&(s=window.msCrypto),!s&&"undefined"!=typeof global&&global.crypto&&(s=global.crypto),!s)try{s=require("crypto")}catch(e){}var i=function(){if(s){if("function"==typeof s.getRandomValues)try{return s.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof s.randomBytes)try{return s.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},r=Object.create||function(){function e(){}return function(t){var s;return e.prototype=t,s=new e,e.prototype=null,s}}(),n={},a=n.lib={},o=a.Base={extend:function(e){var t=r(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},c=a.WordArray=o.extend({init:function(e,s){e=this.words=e||[],this.sigBytes=s!=t?s:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,s=e.words,i=this.sigBytes,r=e.sigBytes;if(this.clamp(),i%4)for(var n=0;n>>2]>>>24-n%4*8&255;t[i+n>>>2]|=a<<24-(i+n)%4*8}else for(var o=0;o>>2]=s[o>>>2];return this.sigBytes+=r,this},clamp:function(){var t=this.words,s=this.sigBytes;t[s>>>2]&=4294967295<<32-s%4*8,t.length=e.ceil(s/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],s=0;s>>2]>>>24-r%4*8&255;i.push((n>>>4).toString(16)),i.push((15&n).toString(16))}return i.join("")},parse:function(e){for(var t=e.length,s=[],i=0;i>>3]|=parseInt(e.substr(i,2),16)<<24-i%8*4;return new c.init(s,t/2)}},h=l.Latin1={stringify:function(e){for(var t=e.words,s=e.sigBytes,i=[],r=0;r>>2]>>>24-r%4*8&255;i.push(String.fromCharCode(n))}return i.join("")},parse:function(e){for(var t=e.length,s=[],i=0;i>>2]|=(255&e.charCodeAt(i))<<24-i%4*8;return new c.init(s,t)}},m=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(h.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return h.parse(unescape(encodeURIComponent(e)))}},f=a.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=m.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var s,i=this._data,r=i.words,n=i.sigBytes,a=this.blockSize,o=n/(4*a),l=(o=t?e.ceil(o):e.max((0|o)-this._minBufferSize,0))*a,u=e.min(4*l,n);if(l){for(var h=0;h>>7)^(d<<14|d>>>18)^d>>>3,g=l[f-2],y=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;l[f]=p+l[f-7]+y+l[f-16]}var v=i&r^i&n^r&n,x=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),S=m+((o<<26|o>>>6)^(o<<21|o>>>11)^(o<<7|o>>>25))+(o&u^~o&h)+c[f]+l[f];m=h,h=u,u=o,o=a+S|0,a=n,n=r,r=i,i=S+(x+v)|0}s[0]=s[0]+i|0,s[1]=s[1]+r|0,s[2]=s[2]+n|0,s[3]=s[3]+a|0,s[4]=s[4]+o|0,s[5]=s[5]+u|0,s[6]=s[6]+h|0,s[7]=s[7]+m|0},_doFinalize:function(){var e=this._data,s=e.words,i=8*this._nDataBytes,r=8*e.sigBytes;return s[r>>>5]|=128<<24-r%32,s[14+(r+64>>>9<<4)]=t.floor(i/4294967296),s[15+(r+64>>>9<<4)]=i,e.sigBytes=4*s.length,this._process(),this._hash},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e}});s.SHA256=n._createHelper(u),s.HmacSHA256=n._createHmacHelper(u)}(Math),e.SHA256}(fs.exports);var ds=ms.exports;class HashVector{static fromHash(e){const t=[];for(const s of e)for(let e=0;e<8;++e)t.push(s>>e&1?1:-1);return new HashVector(t)}static fromString(e){const t=(e=>{const{words:t,sigBytes:s}=ds(e),i=t.map(e=>e<0?e+4294967296:e),r=s/t.length;return new Uint8Array(s).map((e,t)=>i[Math.floor(t/r)]>>8*(3-t%r)&255)})(e);return HashVector.fromHash(t)}static fromWords(e){return e.map(e=>HashVector.fromString(e)).reduce((e,t)=>e.add(t),HashVector.zero)}static concat(...e){const t=e.map(e=>e.fields).flat(1);return new HashVector(t)}constructor(e=null){this.fields=e||Array(256).fill(0)}get length(){return this.fields.length}toHash(){return Uint8Array.from(Array(this.length/8).fill(0).map((e,t)=>this.fields.slice(8*t,8*(t+1)).reduce((e,t,s)=>e|(t>0?1:0)<this.fields[s]=t+e.fields[s]),this}scale(e){return this.fields=this.fields.map(t=>t*e),this}sub(e){const t=e>0?this.fields.slice(0,e):this.fields.slice(e);return new HashVector(t)}static get zero(){return new HashVector}}const ps=Array(256).fill(0).map((e,t)=>(e=>{let t=0;for(let s=e;s>0;s>>=1)s%2&&++t;return t})(t));ps.reduce((e,t,s)=>({...e,[("0"+s.toString(16)).slice(-2)]:t}),{});const gs=(e,t)=>{const s=8*e.length,i=((e,t)=>e.map((e,s)=>e^t[s]))(e,t);return(s-2*i.reduce((e,t)=>e+ps[t],0))/s},ys=e=>("0"+e.toString(16)).slice(-2),vs=(e,t=!1)=>({empty:!0,duration:e.duration,tickMap:{0:EventTerm.space({duration:e.duration,tick:0})},timeSignature:e.timeSignature,timeSigNumeric:e.timeSigNumeric,keySignature:e.keySignature,contextedTerms:e.terms.filter(e=>e instanceof ContextedTerm&&(!e.staffLevel||t)),marks:[]}),xs=e=>{const t=[].concat(...e.measures.map(e=>Object.values(e.tickMap).filter(e=>e instanceof EventTerm)));for(let e=1;ee.type===K.SlurBegin)&&i.accessories.some(e=>e.type===K.SlurEnd)){const e=s.pitches.filter(e=>i.pitches.some(t=>t.note===e.note&&t.alter===e.alter));e.length>0&&(s.tying=!0,i.tied=!0,e.forEach(e=>{e.tying=!0;i.pitches.find(t=>t.note===e.note&&t.alter===e.alter).tied=!0}),e.forEach(()=>{const e=s.accessories.findIndex(e=>e.type===K.SlurBegin);e>=0&&s.accessories.splice(e,1);const t=i.accessories.findIndex(e=>e.type===K.SlurEnd);t>=0&&i.accessories.splice(t,1)}))}}};class Spartito extends SimpleClass{constructor(e){super(),super.assign(e),this.measures.forEach(e=>e.staffGroups=this.staffGroups)}get regulated(){return this.measures.every(e=>e.regulated)}get solidMeasureCount(){return this.measures.filter(e=>!e.empty).length}get measureIndexMapping(){let e=0;return this.measures.map(t=>t.empty?null:e++)}get headBPM(){for(const e of this.measures)if(e.marks){const t=e.marks.find(e=>e instanceof TempoTerm&&e.isValid());if(t)return t.bpm}return null}get measureLayoutCode(){const e=this.measures.filter(e=>!e.empty).map((e,t)=>({index:t+1,vb:e.voltaBegin,ve:e.voltaEnd,alter:e.alternative,leftSign:"",rightSign:""}));return e.forEach((t,s)=>{if(t.vb){const i=e.slice(s+1).findIndex(e=>e.vb),r=i>=0?s+i:e.length;e.slice(s,r-1).some(e=>e.ve)&&(t.leftSign="2*[")}if(t.ve){const i=e.slice(0,s+1).reverse(),r=i.slice(1).findIndex(e=>e.ve);if(r>=0&&!i.slice(1,r+1).some(e=>e.vb))return;if(t.alter){const r=i.findIndex(e=>!e.alter);r>0&&(i[r].rightSign="]",i[r-1].leftSign="{[",t.rightSign="],",e[s+1]&&(e[s+1].rightSign="},"))}else t.rightSign="],";i.some(e=>e.vb)||(e[0].leftSign="2*[")}}),e.map(e=>e.leftSign+e.index.toString()+e.rightSign+(e.rightSign?"":",")).join(" ").replace(/,$/,"")}get qualityScore(){const e=this.measures.filter(e=>!e.empty),t=e.map(Le).map(e=>e.qualityScore).reduce((e,t)=>e+t,0);return e.length?t/e.length:null}dumpEvaluations(){const e=this.measures.filter(e=>!e.empty).map(e=>({measureIndex:e.measureIndex,...Le(e)})),t=e.map(e=>e.qualityScore).reduce((e,t)=>e+t,0);console.log("qualityScore:",t/e.length),console.table(e)}regulate(e={}){this.measures.forEach(t=>t.regulated||t.regulate(e))}cleanupRegulation(){this.measures.forEach(e=>e.voices=null)}rectifyTimeSignatures(e=new DummyLogger){const t=this.measures.map((e,t)=>({measure:e,index:t})).filter(({measure:e,index:t})=>!t||e.timeSignatureChanged).map(({index:e})=>e);t.map((e,s)=>this.measures.slice(e,se.filter(e=>e.estimatedDuration>0)).filter(e=>e.length>=3||e.some(e=>e.doubtfulTimesig)).forEach(t=>{if(t[0].patched){const s=t[0].timeSignature,i=t.slice(1).filter(e=>!e.patched&&L(e.timeSignature)!==L(s));if(i.length){const t=i[0].timeSignature;i.forEach(e=>e.basics.forEach(e=>e.timeSignature=s)),e.info("[rectifyTimeSignatures]\ttimesignator overwrote by patched head:",`${L(t)} -> ${L(s)}`,i.map(e=>e.measureIndex))}return}const s=t[0].timeSignature,i=Number.isInteger(Math.log2(s.denominator));let r=i?4:8;i&&(r=Math.max(r,t[0].timeSignature.denominator));const n=t.map(e=>Math.round(e.estimatedDuration*r/we)),a=Object.entries(n.reduce((e,t)=>(e[t]=(e[t]||0)+1,e),{})).sort((e,t)=>t[1]-e[1]),o=a[0][1],c=a.filter(([e,t])=>t>.6*o).reduce((e,t)=>Number(t[0])>Number(e[0])?t:e);if(c[1]>1){let n=Number(c[0]);if(!i||s.denominator*n!==s.numerator*r){if(i&&r!==s.denominator){const e=n*s.denominator/r;Number.isInteger(e)&&(n=e,r=s.denominator)}const a=t.filter(e=>!e.patched),o=D(n,r);a.forEach(e=>e.basics.forEach(e=>e.timeSignature=o)),e.info("[rectifyTimeSignatures]\ttimesignator overwrote by estimation:",`${L(s)} -> ${n}/${r}`,a.map(e=>e.measureIndex))}}})}makeVoiceStaves(){this.regulate();const e=Math.max(...this.measures.map(e=>e.voices.length));if(!e||!Number.isFinite(e))return null;this.measures.filter(e=>e.patched).forEach(e=>{e.events.forEach(e=>{e.tied&&e.pitches.forEach(e=>e.tied=!0)})});for(let e=0;et.staff===e)||[]).reduce((e,t)=>Math.max(e,t.x||0),-1/0);if(!Number.isFinite(r))continue;const n=[];t.contexts[e]=i.filter(e=>!(0===e.type&&e.x>r)||(n.push(e),!1)),n.length>0&&s.contexts[e]&&(n.forEach(e=>e.tick=0),s.contexts[e]=[...n,...s.contexts[e]])}}const t=this.measures.map(t=>{console.assert(t.validRegulated,"[makeVoiceStaves] measure is invalid:",t);const s={};t.events.forEach(e=>s[e.id]=e);const i=new Set(Array(t.contexts.length).fill(null).map((e,t)=>t));let r=null;if(t.barType)switch(t.barType){case"Segment":r="||";break;case"Terminal":r="|."}const n=t.voices.map(e=>{const n=e.map(e=>s[e]);n.sort((e,t)=>e.tick-t.tick);const a={};let o=0,c=null;for(const e of n)Number.isFinite(e?.tick)?(e.tick>o?a[o]=EventTerm.space({tick:o,duration:e.tick-o}):!e.grace&&e.tick{const s=t.eventMap[e];s&&(a[s.tick]=s)}))):console.warn("invalid event tick:",e);t.endEvent&&t.endEvent.graceIds&&t.endEvent.graceIds.forEach(e=>{const s=t.eventMap[e];!s||c&&s.staff!==c.staff||(a[s.tick]=s)}),ot.duration&&Number.isFinite(t.duration)&&(c.timeWarp=F(t.duration-c.tick,c.duration)),console.assert(!c||!c.timeWarp||Number.isInteger(c.timeWarp.numerator)&&Number.isInteger(c.timeWarp.denominator),"invalid time warp:",c);const l=n[0]?n[0].staff:0;i.delete(l);const u=t.basics[l],h=t.contexts[l],m=n[n.length-1],f=m?m.staff:0;return{tickMap:a,duration:t.duration,...u,contextedTerms:h,marks:[],break:t.break,pageBreak:t.pageBreak,headStaff:l,tailStaff:f,bar:r}});for(;n.lengtht.headStaff!==e),o=vs({terms:r,duration:t.duration,...s,break:t.break,pageBreak:t.pageBreak},a);o.headStaff=e,o.tailStaff=e,n.push(o)}return n});t.forEach(e=>e.forEach(e=>{const t=[];e.empty||(t.push(`s${e.headStaff}`),t.push(`s${e.tailStaff}`)),Object.values(e.tickMap).forEach(e=>{if(e instanceof EventTerm){if(t.push(`s${e.staff}`),e.stemDirection){const s=`st${e.staff}-${e.stemDirection}`;t.push(s,s)}e.grace?t.push(`gd${e.mainDuration}`):t.push(`d${e.mainDuration}`),e.rest?t.push("r-"+e.rest):e.pitches.forEach(e=>{t.push(`p1-${e.note}`),t.push(`p8-${Math.round(e.note/8)}`)})}}),e.trait=HashVector.fromWords(t)}));const s=this.staffGroups.flat(1).reduce((e,t)=>(e[t]=this.staffGroups.findIndex(e=>e.includes(t)),e),{}),i=Array(e).fill(null).map((e,t)=>({vector:HashVector.zero,index:t,weight:0,headStaff:null}));t.forEach((e,t)=>{i.sort((e,t)=>t.weight-e.weight);const r=new Set(e);i.forEach(e=>{const i=[...r];let n=i[0];if(t>0&&i.length>1){const t=i.map(t=>s[t.headStaff]===s[e.headStaff]?gs(e.vector.toHash(),t.trait.toHash()):-1);n=i[G(t)]}r.delete(n),n.voiceIndex=e.index,e.vector.scale(.4).add(n.trait),e.weight=Object.keys(n.tickMap).length,0===t&&(e.headStaff=n.headStaff)}),e.sort((e,t)=>e.voiceIndex-t.voiceIndex)});const r=Array(this.stavesCount).fill(null).map(()=>[]);i.forEach(e=>{r[e.headStaff].push(e.index)});const n=Array(this.stavesCount).fill(null).map((e,s)=>{if(!t[0])return{voices:[]};return{voices:r[s].map(e=>({mode:"relative",measures:t.map(t=>t[e])}))}});return(e=>{if(!e[0]||!e[0].voices[0])return void console.warn("empty voices:",e);const t=e[0].voices[0].measures.length;Array(t).fill(null).map((t,s)=>{for(const t of e)for(const e of t.voices)if(!e.measures[s].empty)return!1;return!0}).forEach((t,s)=>{t&&e.forEach(e=>e.voices.forEach(e=>{e.measures[s].tickMap={}}))})})(n),n.forEach(e=>e.voices.forEach(xs)),n}perform(){const e=this.makeVoiceStaves();if(!e)return null;const t=new Map,s=Array(this.stavesCount).fill(null).reduce((e,t,s)=>(e[s]=s,e),{}),i=[].concat(...e.map((e,t)=>e.voices.map(()=>s[t])));let r=!1,n=0,a=null;const o=this.measures.filter(e=>!e.empty).map(s=>{const{systemIndex:o,right:c}=s.position,l=s.measureIndex,u=[].concat(...e.map(e=>e.voices.map(e=>e.measures[l]))),h=u[0],m=n;n+=h.duration;const f=[].concat(...u.map((e,s)=>{const r=i[s],n=Object.values(e.tickMap).filter(e=>e instanceof EventTerm&&!e.rest).map(e=>{const s=Math.round(1*e.duration);console.assert(Number.isFinite(e.tick),"invalid event term tick:",e),console.assert(Number.isFinite(s),"invalid event term duration:",e),e.tick>=0&&e.noteIds.forEach(s=>{t.set(s,{system:o,measure:l,x:e.roundX,endX:c})});const i=this.staffGroups.findIndex(t=>t.includes(e.staff));return{tick:Math.round(1*e.tick),duration:s,pitches:e.pitches,noteIds:e.noteIds,part:i,staff:e.staff}});return[].concat(...n.map(e=>{const t=e.pitches.reduce((e,t)=>(e[q(t)]=t,e),{});return Object.values(t).sort((e,t)=>e.note-t.note).filter(e=>!e.tied).map((t,s)=>{const i=q(t),n=e.noteIds&&e.noteIds[s];return{tick:e.tick,pitch:i,duration:e.duration,chordPosition:{index:s,count:e.pitches.length},tied:t.tied,id:n,ids:[n],track:e.part,staff:e.staff,channel:r,subNotes:[{startTick:0,endTick:e.duration,pitch:i,velocity:127}]}})}))})),d=[];a=a||d,s.marks&&s.marks.forEach(e=>{if(e instanceof TempoTerm){const t=e.bpm;if(e.isValid()){const s=r?d:a,i=r?e.tick:0;s.push({track:0,ticks:i,data:{type:"meta",subtype:"setTempo",microsecondsPerBeat:Math.round(6e7/t)}}),r=!0}}});const p=s.basics[0];return{tick:m,duration:s.duration,notes:f,events:d,timeSignature:p&&p.timeSignature,keySignature:p&&p.keySignature}});r||o[0].events.push({track:0,ticks:0,data:{type:"meta",subtype:"setTempo",microsecondsPerBeat:5e5}});return{notation:new MetaNotation({measures:o}),tokenMap:t}}performByEstimation(){const e=new Map;let t=0;const s=this.measures.filter(e=>e.events.some(e=>e.predisposition)).map(s=>{const i=t,r=Math.round(s.estimatedDuration||$(we,s.timeSignature)),n=s.basics[0];t+=r;const{systemIndex:a,right:o}=s.position,c=s.measureIndex;return{tick:i,duration:r,notes:s.events.filter(e=>e.predisposition&&e.predisposition.fake<.5&&!e.rest).map(t=>{const s=Math.round(t.predisposition.tick);return t.noteIds.forEach(s=>{e.set(s,{system:a,measure:c,x:t.roundX,endX:o})}),t.pitches.map((e,i)=>{const r=q(e),n=t.noteIds&&t.noteIds[i],a=this.staffGroups.findIndex(e=>e.includes(t.staff));return{tick:s,pitch:r,duration:t.duration,chordPosition:{index:i,count:t.pitches.length},tied:e.tied,id:n,ids:[n],track:a,staff:t.staff,channel:0,subNotes:[{startTick:0,endTick:t.duration,pitch:r,velocity:127}]}})}).flat(1),events:[],timeSignature:n&&n.timeSignature,keySignature:n&&n.keySignature}});return{notation:new MetaNotation({measures:s}),tokenMap:e}}featureHash(){const e=this.measures.slice(0,16).map(e=>e.featureWords),t=[1,4,16].map(t=>{const s=e.slice(0,t).filter(Boolean),i=s.map(e=>e[0]).flat(1),r=s.map(e=>e[1]).flat(1),n=s.map(e=>e[2]).flat(1),[a,o,c]=[i,r,n].map(HashVector.fromWords);return HashVector.concat(a,o.sub(128),c.sub(128))});return HashVector.concat(...t).toHash()}featureHashHex(){return e=this.featureHash(),Array.from(e).map(ys).join("");var e}featureHashBigInt(){return e=this.featureHash(),Array.from(e).reduce((e,t)=>0x100n*e+BigInt(t),0n);var e}assignMeasureNumbers(){let e=null;for(const t of this.measures)(t.discard||t.events.length)&&(t.indent&&(e=null),Number.isFinite(e)||(e=t.partialDuration?0:1),t.measureNumber=e++)}}Spartito.className="Spartito";const Ss=[0,2,4,5,7,9,11],bs=e=>{let t=e%7;for(;t<0;)t+=7;return t},ks=e=>{let t=e%12;for(;t<0;)t+=12;return t},Ts={[-2]:"♭♭",[-1]:"♭",0:"♮",1:"♯",2:"𝄪"};class StaffContext{constructor(){this.logger=new DummyLogger,this.clef=-3,this.keyAlters=[],this.octaveShift=0,this.alters=[],this.timeSignature={numerator:4,denominator:4},this.timeSigNumeric=!1,this.timeSigNumSet=!1,this.timeSigDenSet=!1,this.doubtingTimesig=!0}change(e){switch(e.type){case Oe.Clef:this.clef=e.clef;break;case Oe.KeyAcc:this.keyAlters[bs(this.yToNote(e.y))]=e.alter;break;case Oe.Acc:this.alters[this.yToNote(e.y)]=e.alter;break;case Oe.OctaveShift:this.octaveShift=e.octaveShift;break;case Oe.TimeSignatureC:switch(this.timeSigNumeric=!1,e.tokenType){case"timesig-C44":this.timeSignature.numerator=4,this.timeSignature.denominator=4;break;case"timesig-C22":this.timeSignature.numerator=2,this.timeSignature.denominator=2}this.doubtingTimesig=this.partialTimeSignature;break;case Oe.TimeSignatureN:switch(this.timeSigNumeric=!0,e.y){case 1:this.timeSigDenSet?this.timeSignature.denominator=10*this.timeSignature.denominator+e.number:this.timeSignature.denominator=e.number,this.timeSigDenSet=!0;break;case-1:this.timeSigNumSet?this.timeSignature.numerator=10*this.timeSignature.numerator+e.number:this.timeSignature.numerator=e.number,this.timeSigNumSet=!0;break;default:this.logger.warn("unexpected time signature Y:",e.y)}this.doubtingTimesig=this.partialTimeSignature}}resetMeasure(){this.alters=[],this.timeSigNumSet=!1,this.timeSigDenSet=!1}resetSystem(){this.keyAlters=[]}get keySignature(){return this.keyAlters.filter(e=>Number.isInteger(e)).reduce((e,t)=>e+t,0)}get partialTimeSignature(){return!this.timeSigNumSet!=!this.timeSigDenSet}noteToY(e){return-e/2-this.clef-3.5*this.octaveShift}pitchToNote(e,{preferredAlter:t=null}={}){t||(t=this.keySignature<0?-1:1);const s=Math.floor((e-60)/12),i=ks(e),r=Ss.includes(i)?i:ks(i-t),n=Ss.indexOf(r);this.logger.assert(n>=0,"invalid preferredAlter:",e,t,r);const a=7*s+n,o=i-r,c=this.keyAlters[n]||0;return{note:a,alter:Number.isInteger(this.alters[a])?o:o===c?null:o}}pitchToY(e,{preferredAlter:t=null}={}){const{note:s,alter:i}=this.pitchToNote(e,{preferredAlter:t});return{y:this.noteToY(s),alter:i}}yToNote(e){return this.logger.assert(Number.isInteger(2*e),"invalid y:",e),2*(-e-3.5*this.octaveShift-this.clef)}alterOnNote(e){if(Number.isInteger(this.alters[e]))return this.alters[e];const t=bs(e);return Number.isInteger(this.keyAlters[t])?this.keyAlters[t]:0}noteToPitch(e){const t=Math.floor(e/7),s=bs(e),i=60+12*t+Ss[s]+this.alterOnNote(e);return Number.isFinite(i)?i:(this.logger.warn("invalid pitch value:",i,e,t,s),-1)}yToPitch(e){return this.noteToPitch(this.yToNote(e))}yToPitchName(e){const t=this.yToNote(e),s=Math.floor(t/7),i=bs(t);let r=this.alterOnNote(t);return r||Number.isInteger(this.alters[t])||(r=null),`${Ts[r]?Ts[r]:""}${"CDEFGAB"[i]}${s+4}`}}const ws=e=>e.reduce((e,t,s)=>t?e|1<{if(e.version<3){const{version:t,stavesCount:s,layoutTemplate:i,...r}=e;let n=s>1?Array(s-1).fill(",").join(""):"";2===s&&(n="{-}"),e={version:3,staffLayoutCode:n,...r}}return e.version<8&&(e.pages.forEach(e=>{e.systems.forEach(e=>{if(e.semantics){const t=e.semantics.filter(e=>e.semantic===w.vline_BarMeasure);e.semantics=[].concat(...e.staves.map(e=>{const s=e.top+e.staffY;return t.map(e=>({...e,y:e.y+s,extension:{...e.extension,y1:e.extension.y1+s,y2:e.extension.y2+s}}))}))}})}),e.version=8),e.version<9&&(e.spartito=null,e.version=9),e})(e)),this.pages=this.pages||[],this.headers=this.headers||{},this.instrumentDict=this.instrumentDict||{},this.pageSize=this.pageSize||{width:794,height:1122},this.unitSize=this.unitSize||null,this.staffLayoutCode=this.staffLayoutCode||(2===this.maxStavesCount?"{-}":Array(this.maxStavesCount).fill("").join(","))}get systems(){return[].concat(...this.pages.map(e=>e.systems))}get measureCount(){return this.systems.reduce((e,t)=>e+(t.measureCount||0),0)}get imageKeys(){return[...this.pages.map(e=>e.source?.url),...this.systems.map(e=>e.backgroundImage),...[].concat(...this.systems.map(e=>[...e.staves.map(e=>e.backgroundImage),...e.staves.map(e=>e.maskImage)].filter(Boolean)))].filter(Boolean)}get breakSystemIndices(){const e=[];let t=0;return this.pages.forEach((s,i)=>{ie.staves.length),0)}get sidBlackList(){const e=[].concat(...this.systems.map(e=>e.sidBlackList));return new Set(e)}get sidWhiteList(){const e=[].concat(...this.systems.map(e=>e.sidWhiteList));return new Set(e)}get semanticHash(){const e=[].concat(...this.systems.map(e=>[].concat(...e.staves.map(t=>t.semantics?e.qualifiedSemantics(t.semantics).map(e=>e.id):[]))));return p.default(e.join(""))}eventSystemsToTermStaves(e,t=new DummyLogger){const s=Array(this.maxStavesCount).fill(null).map((t,s)=>({rows:e.map((e,t)=>e.columns.map((i,r)=>{const n=i.rows[s];console.assert(n,"[eventSystemsToTermStaves] measure is null:",s,i.rows);const a=n.contexts;0===r&&(a.some(e=>e.type===Oe.OctaveShift)||a.unshift(new ContextedTerm({staff:s,x:0,y:0,tokenType:K.OctaveShift0,tick:0})));const o=[...n.events||[],...a].sort((e,t)=>e.x-t.x),c=0===s&&r===e.columns.length-1&&this.breakSystemIndices.includes(t);return{terms:o,duration:i.duration,pageBreak:c}}))}));return s.forEach(e=>((e,t=new DummyLogger)=>{const s=new StaffContext;s.logger=t;for(const t of e.rows){for(const e of t){const t=e.terms.find(e=>e instanceof EventTerm);let i=t?Math.min(t.tick,0):0;e.terms.forEach(e=>{if(e instanceof ContextedTerm)e.tick=i,s.change(e);else if(e instanceof EventTerm){const t=e.tick+(e.duration||0);t>i&&(i=t),e.ys&&(e.pitches=e.ys.map(e=>{const t=s.yToNote(e);return{note:t,alter:s.alterOnNote(t),octaveShift:s.octaveShift}}))}}),e.timeSignature={...s.timeSignature},e.timeSigNumeric=s.timeSigNumeric,e.doubtfulTimesig=s.doubtingTimesig||!Number.isInteger(Math.log2(e.timeSignature.denominator))||e.timeSignature.numerator<=e.timeSignature.denominator/4,e.keySignature=s.keySignature,0===e.duration&&(e.duration=we*e.timeSignature.numerator/e.timeSignature.denominator),s.resetMeasure()}s.resetSystem()}})(e,t)),s}resetPageLayout(e){const{unitSize:t=this.unitSize,pageSize:s=this.pageSize}=e,i=.5*s.width/t,r=.5*s.height/t;this.pages.forEach(e=>{const n=i-e.width/2,a=r-e.height/2;e.systems.forEach(e=>{e.left+=n,e.top+=a}),e.semantics&&e.semantics.forEach(e=>{e.x+=n,e.y+=a}),e.width=s.width/t,e.height=s.height/t,e.assemble({textAnnotations:this.textAnnotations})}),this.unitSize=t,this.pageSize=s}getMeasure(e){let t=e;for(const s of this.systems){if(te&&e.measures[t]);return{measureIndex:e,system:s,localIndex:t,left:r.left,right:r.right,measures:n}}t-=s.measureCount}return null}getRawCluster(e,t,{timeSignature:s}={}){const i=this.getMeasure(e);if(!i)return null;const{system:r,left:n,right:a}=i,o=[Ct];s&&o.push(..._t(s));const c=r.staves[0].top+r.staves[0].staffY-2;return r.staves.forEach(e=>{let s=r.qualifiedSemantics(e.semantics,t).filter(e=>e.x>n&&e.xe.semantic===w.TempoNotehead).forEach(e=>{const t=s.findIndex(t=>/^Notehead/.test(t.semantic)&&P(e,t)<.3);t>=0&&s.splice(t,1)});const i=e.top+e.staffY-c;s.forEach(t=>{const s=dt[t.semantic];if(s){let r=t.y,a=t.y;s===dt.vline_Stem&&(r=t.extension.y1,a=t.extension.y2),o.push({id:t.id,type:s,staff:e.index,x:t.x-n,y1:r+i,y2:a+i})}})}),new SemanticCluster({index:e,elements:o})}getRawClusters(e=1){return Array(this.measureCount).fill(null).map((t,s)=>this.getRawCluster(s,e))}makeSpartito(e=new DummyLogger){let t=this.systems.map(e=>e.getEvents(this.maxStavesCount));const s=this.eventSystemsToTermStaves(t,e);t.forEach((e,t)=>{e.columns.forEach((e,i)=>{e.basics=s.map(e=>{const{timeSignature:s,timeSigNumeric:r,keySignature:n,doubtfulTimesig:a}=e.rows[t][i];return{timeSignature:s,timeSigNumeric:r,keySignature:n,doubtfulTimesig:a}})})});const i=[].concat(...t.map(e=>e.columns.map(t=>{const s=t.measureIndex,{system:i,localIndex:r,left:n,right:a}=this.getMeasure(s),o=[];i.staves.forEach(e=>o[e.index]=e.top+e.staffY);const c=this.patches&&this.patches.find(e=>e.measureIndex===s),l=c?c.events:SpartitoMeasure.reorderEvents([].concat(...t.rows.map(e=>e.events)),o),u=Object.fromEntries(Object.entries(t.barTypes).map(([e,t])=>[e,t/i.staves.length])),h=0===r&&i.indent;return new SpartitoMeasure({measureIndex:s,staffMask:e.staffMask,position:{systemIndex:i.index,localIndex:r,left:n,right:a,staffYs:i.staves.map(e=>e.top+e.staffY),staffYsFull:o},duration:c?c.duration:t.duration,events:l,contexts:t.rows.map(e=>e.contexts),marks:t.marks,break:t.break,pageBreak:t.pageBreak,voltaBegin:t.voltaBegin,voltaEnd:t.voltaEnd,alternative:t.alternative,barTypes:u,indent:h,basics:c?c.basics:t.basics,matrixH:null,matrixV:null,voices:c?c.voices:null,patched:!!c})}))),r=this.staffLayout,n=r.standaloneGroups.map(e=>e.map(e=>r.staffIds.indexOf(e)));return this.spartito=new Spartito({stavesCount:this.maxStavesCount,staffGroups:n,measures:i}),this.spartito}makeMusicSheet(){const e=this.spartito||this.makeSpartito();e.regulated||console.warn("[makeMusicSheet]\tspartito not regulated.");const t=e.makeVoiceStaves(),{title:s,pageSize:i,unitSize:r,staffLayout:n,paperOptions:a,headers:o,instrumentDict:c}=this;return{title:s,pageSize:i,unitSize:r,measureLayout:this.getMeasureLayout(),staffLayout:n,paperOptions:a,headers:o,voiceStaves:t,instrumentDict:c}}findPoint(e){for(const t of this.systems)for(let s=0;st.id===e);if(i){return{point:i,pageIndex:this.pages.findIndex(e=>e.systems.includes(t)),systemIndex:t.index,staffIndex:s}}}return null}getMeasureSemantics(e,t){const s=this.systems[e];if(!s)return null;const i=t?s.measureBars[t-1]:0,r=s.measureBars[t]||s.width;return s.staves.map((e,t)=>{const s=e.top+e.staffY;return e.semantics.filter(e=>e.x>=i&&e.x{const[i,r]=Number.isFinite(e.extension?.y1)?[e.extension.y1,e.extension.y2]:[e.y,e.y];return{...e,staff:t,sy1:i+s,sy2:r+s}})}).flat(1)}makeTimewiseGraph({store:e=!1}={}){if(!this.spartito)return null;return{measures:this.spartito.measures.filter(e=>e.events.length>0).map(t=>{const s=this.getMeasureSemantics(t.position.systemIndex,t.position.localIndex),i={measureIndex:t.measureIndex,left:t.position.left,right:t.position.right,points:s};return e&&(t.graph=i),i})}}getTokenMap(){const e=new Map;return this.systems.forEach(t=>t.staves.forEach(t=>t.measures.forEach(t=>t.tokens.forEach(t=>e.set(t.id,t))))),e}assemble(e=1,t=new DummyLogger){const s=new Map;this.pages.forEach((e,t)=>e.index=t);let i=0;this.systems.forEach((r,n)=>{r.index=n,r.headMeasureIndex=i,r.prev=this.systems[n-1]||null,r.next=this.systems[n+1]||null,r.semantics&&r.semantics.length&&r.semantics.forEach(e=>((e,i,r)=>{const n=O(e,i,r);t.assert(!s.has(n),"semantic point hash conflicted:",n,r,s.get(n)),s.set(n,r)})(n,null,e)),r.assemble(e,t),i+=r.measureCount}),this.pages.forEach((e,s)=>{e.systems.forEach(e=>e.pageIndex=s),e.assemble({textAnnotations:this.textAnnotations},t)})}assembleSystem(e,t=1){this.systems.forEach((e,t)=>e.index=t);const s=e.index;e.semantics&&e.semantics.length&&(e.semantics.forEach(e=>O(s,null,e)),e.assemble(t))}markVoices(e){const t=this.getTokenMap();for(const e of t.values())e.voice=0;const s=[].concat(...e.map((e,t)=>(e.voices||[]).map((e,s)=>[t,s]))).sort(([e,t],[s,i])=>t-i||e-s).map(([e,t])=>`${e}|${t}`);e.forEach((e,i)=>(e.voices||[]).forEach((e,r)=>e.measures.forEach(e=>{const n=s.indexOf(`${i}|${r}`);Object.values(e.tickMap).filter(e=>e instanceof EventTerm).forEach(e=>{const s=e.noteIds?e.noteIds.map(e=>t.get(e)).filter(Boolean):[],i=e.accessories?e.accessories.map(e=>t.get(e.id)).filter(Boolean):[];[...s,...i].forEach(e=>e.voice|=1<e.timeWarped=!0)})})))}async replaceImageKeys(e){await Promise.all([...this.pages.map(async t=>{t.source&&(t.source.url=await e(t.source.url))}),...this.systems.map(t=>Promise.all([e(t.backgroundImage).then(e=>t.backgroundImage=e),...t.staves.map(async t=>{t.backgroundImage=await e(t.backgroundImage),t.maskImage=await e(t.maskImage)})]))])}inferenceStaffLayout(){const e=Math.max(...this.systems.map(e=>e.staves.length),0);this.staffLayoutCode=Array(e).fill("").join(",");const t=this.systems.filter(t=>t.staves.length===e&&t.bracketsAppearance);if(!t.length)return;const s=t.map(e=>{try{return it(e.bracketsAppearance).staffIds.length!==e.staves.length?null:e.bracketsAppearance}catch(e){return null}}).filter(Boolean);if(!s.length)return;const i=s.reduce((e,t)=>{const s=e[t]||0;return e[t]=s+1,e},{}),r=Math.max(...Object.values(i)),n=Object.entries(i).find(([e,t])=>t===r)[0].replace(/\{,*\}/g,e=>e.replace(/,/g,"-")),a=it(n);this.staffLayoutCode=n;let o=null;for(const t of this.systems)if(o&&t.staves.length===o.staves.length&&t.bracketsAppearance===o.bracketsAppearance)t.staffMaskChanged=null;else{if(t.staves.length{if(s.length>a.staffIds.length)return null;if(s.reduce((e,t)=>e+t,0)===t.staves.length)return ws(s);for(const i of[1,0]){const r=[...s,i],n=a.partialMaskCode(r);if(n===t.bracketsAppearance)return ws(r);if(t.bracketsAppearance.startsWith(n)){const t=e(r);if(t)return t}}return null},s=e([]);t.staffMaskChanged=o&&s===o.staffMask?null:s}o=t}}assignBackgroundForMeasure(e){e.backgroundImages=[];const t=this.systems[e.position.systemIndex];t.backgroundImage&&e.backgroundImages.push({url:t.backgroundImage,position:t.imagePosition,original:!0}),t.staves.forEach(s=>{!t.backgroundImage&&s.backgroundImage&&e.backgroundImages.push({url:s.backgroundImage.toString(),position:{...s.imagePosition,y:s.imagePosition.y+s.top},original:!0}),s.maskImage&&e.backgroundImages.push({url:s.maskImage.toString(),position:{...s.imagePosition,y:s.imagePosition.y+s.top}})})}blackoutFakeNotes(e="patched"){if(!this.spartito)return;let t=e=>!0;switch(e){case"patched":t=e=>e.patched;break;case"perfect":t=e=>e.patched||e.regulated&&Le(e).perfect}const s=this.spartito.measures.filter(t).reduce((e,t)=>{if(!t.regulated)return;const s=t.voices.flat(1);return t.events.filter(e=>!e.rest&&!e.grace&&!s.includes(e.id)).forEach(t=>t.noteIds&&e.push(...t.noteIds)),e},[]),i=new Set(s);return this.systems.forEach(e=>e.staves.forEach(t=>{const s=t.semantics.filter(e=>i.has(e.id)).map(e=>e.id);e.sidBlackList.push(...s)})),s}getMeasureLayout(){const e=this.spartito&&this.spartito.measureLayoutCode;if(e)try{return(e=>{const t=qe(e);return t?.data?b(t.data,Ve):null})(e)}catch(e){console.debug("invalid measure layout code:",e)}return null}*splitToSingleScoresGen(){this.assemble();const e=this.systems.filter(e=>e.index>0&&e.indent&&e.timeSignatureOnHead).map(e=>e.index);if(!e.length)return void(yield this.deepCopy());const t=new Score({...this,pages:[],topology:void 0,spartito:void 0,patches:void 0});this.pages.forEach(e=>{delete e.tokens,e.systems.forEach(e=>{delete e.tokens,e.staves.forEach(e=>{e.measures=[]})})});let s=0;for(const i of[...e,this.systems.length]){const e=e=>e.index>=s&&e.indext.systems.some(e)).map(t=>{const{systems:s,...i}=t;return new Page({...i,systems:s.filter(e).map(e=>new System({...e}))})}),n=t.deepCopy();n.headers.SubScoreSystem=`${s}-${i-1}`,n.headers.SubScorePage=`${r[0].index}-${r[r.length-1].index}`,n.pages=r,n.assemble(),n.inferenceStaffLayout(),s=i,yield n}}splitToSingleScores(){return[...this.splitToSingleScoresGen()]}}var Ms;Score.className="Score",function(e){e.Pass="i",e.Division="d",e.Dots="o"}(Ms||(Ms={}));const Es=["whole","half","quarter","eighth","sixteenth","thirtysecond","sixtyfourth","128th","256th"],Ns=.4/we,Is=1e-12,Cs=[void 0,"u","d"],_s=[void 0,Ne.Open,Ne.Continue,Ne.Close],Os=e=>({elements:e.elements.map(e=>({tick:e.tick,division:e.division,dots:e.dots,beam:e.beam,stemDirection:e.stemDirection,grace:e.grace,timeWarped:e.timeWarped,fullMeasure:e.fullMeasure,fake:e.fake,order:e.order,predisposition:e.predisposition}))});class BeadNode{constructor(e){Object.assign(this,e),this.children={},this.accessCount=0}nextBranch(){const e=this.possibilities.map((e,t)=>e/(this.children[t]?this.children[t].accessCount+1:1));return e.every(e=>!e)?(this.accessCount=1/0,null):G(e)}get currentElem(){return this.cluster.elements[this.elemIndex]}branchID(e){switch(this.type){case Ms.Pass:return`i_${e}`;case Ms.Division:return Es[e];case Ms.Dots:return"o"+".".repeat(e)}return""}async deduce({picker:e,logger:t,ptFactor:s},i=0){++this.accessCount;const r=this.nextBranch();if(t.debug(String.fromCodePoint(127817)+" ".repeat(i),this.branchID(r),this.accessCount>1?`[${this.accessCount}]`:""),!Number.isInteger(r)||r<0)return this.accessCount=1/0,As(this.cluster,this.currentElem.order+1,this.pretentiousness);var n;if(this.pretentiousness+=(n=this.possibilities[r],Math.min(100,-Math.log(n))),this.pretentiousness>100*s)return this.accessCount=1/0,As(this.cluster,this.currentElem.order+1,this.pretentiousness);let a=null;switch(this.type){case Ms.Pass:{const t=this.currentElem.order+1,s=this.cluster.elements[r];if(console.assert(s,"null element:",r,this.cluster.elements.length),s.type===X.EOS){if(a=As(this.cluster,t,this.pretentiousness),!a.residue||a.fatalError)return this.accessCount=1/0,a;if(this.cluster.elements[0].order=t,!this.children[r]){if(!e.quota)return a;const s=(await e.predictCluster(this.cluster,t+1)).map((e,s)=>this.cluster.elements[s].orderMath.max(Is,e));this.children[r]=new BeadNode({cluster:this.cluster,elemIndex:r,type:Ms.Division,possibilities:e,pretentiousness:this.pretentiousness})}}break;case Ms.Division:if(this.currentElem.division=r,!this.children[r]){const e=this.currentElem.predisposition.dotsVector.map(e=>Math.max(Is,e));this.children[r]=new BeadNode({cluster:this.cluster,elemIndex:this.elemIndex,type:Ms.Dots,possibilities:e,pretentiousness:this.pretentiousness})}break;case Ms.Dots:if(this.currentElem.dots=r,a=As(this.cluster,this.currentElem.order+1,this.pretentiousness),!a.residue||a.fatalError)return this.accessCount=1/0,a;if(!this.children[r]){if(!e.quota)return a;const t=this.currentElem.order+1,s=(await e.predictCluster(this.cluster,t)).map((e,s)=>this.cluster.elements[s].order{t.order>e&&(t.order=void 0)}),this.cluster.elements.forEach(e=>e.order=e.order>this.currentElem.order?void 0:e.order),this.cluster.elements[this.cluster.elements.length-1].tick=a.endTick,a}return o}}const Bs=e=>we*2**-e.division*(2-2**-e.dots),As=(e,t,s)=>{const i=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isInteger(e.order)&&e.ordere.order-t.order);const r=e.elements[e.elements.length-1];let n=0,a=0,o=0,c=1;const l=[[r.x,e.signatureDuration,e.signatureDuration]];let u=0;i.forEach(e=>{e.order>a+1&&(n=0,++c);const t=l.find(e=>e[1]>=n);if(t&&e.x>t[0]+3){const t=l.reduce((t,s)=>Math.abs(e.predisposition.tick-s[2])t[0]>e.x));l.splice(s,0,[e.x,e.tick,e.predisposition.tick]);let i=Bs(e);e.predisposition.timeWarped>.5&&(i=2*i/3),n+=i,u+=i,o=Math.max(o,n),a=e.order}),o>0&&(e.elements[e.elements.length-1].tick=o);const h=e.elements[e.elements.length-1].pivotX-e.elements[1].pivotX,m=Math.max(...i.map(e=>e.tick),o),f=[...i].sort((e,t)=>e.pivotX-t.pivotX),d=f.slice(1).map((e,t)=>{const s=f[t],i=e.pivotX-s.pivotX,r=e.tick-s.tick;if(!r)return i/h;return(4*Math.atan2(r/m,i/h)/Math.PI-1)**2}),p=Math.max(...d,0),g=i.map(e=>(e.tick-e.predisposition.tick)**2),y=g.length?Math.sqrt(g.reduce((e,t)=>e+t,0)/g.length):0,v=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&!(Number.isInteger(e.order)&&e.order.5)).length,x=p>=1||o>e.signatureDuration,S=Math.max(0,e.signatureDuration-u/c);return{tickErr:y,twist:p,residue:v,endTick:o,fatalError:x,voiceN:c,spaceDuration:S,pretentiousness:s,loss:y/we+p+.2*v+.002*c+S*Ns+.02*s}},Ps=async(e,t,s,i=200,r=0,n=1)=>{e.elements.forEach((e,t)=>e.order=t?void 0:0);const a=await t.predictCluster(e,1),o=new BeadNode({cluster:e,elemIndex:0,pretentiousness:0,type:Ms.Pass,possibilities:a});let c=null,l=null;for(t.quota=i;t.quota;){e.elements.forEach((e,t)=>e.order=t?void 0:0);const i=await o.deduce({picker:t,logger:s,ptFactor:n});if(s.debug("loss:",i),(!c||i.loss{e.elements.forEach((e,s)=>Object.assign(e,t.elements[s]))})(e,l);const u=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isInteger(e.order)),h=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&!Number.isInteger(e.order));u.length&&h.forEach(e=>{if(e.tick=void 0,e.predisposition.fakeP<.5){const t=Bs(e),s=u.filter(e=>e.tick+t<=c.endTick);if(s.length){const t=s.reduce((t,s)=>Math.abs(s.x-e.x)e.order-t.order),[...u,...h].forEach(e=>{e.grace=!Number.isFinite(e.tick)&&e.predisposition.grace,e.timeWarped=e.predisposition.timeWarped>.5,e.fullMeasure=e.predisposition.fullMeasure>.5,e.stemDirection=Cs[G(e.predisposition.stemDirectionVector)],e.beam=_s[G(e.predisposition.beamVector)]});const m=e.elements.map(e=>e.index),f=e=>m.indexOf(e);return e.matrixH=e.elements.map(()=>Array(e.elements.length).fill(0)),u.forEach((t,s)=>{const i=u[s-1];!i||i.order{const{stopLoss:s=.09,quotaMax:i=1e3,quotaFactor:r=5,ptFactor:n=1,logger:a=new DummyLogger}=t;let o=0;const c=e.createClusters();for(const l of c){const c=Math.min(i,Math.ceil(l.elements.length*r));a.info(`[measure-${e.measureIndex}]`,c);const{loss:u}=await Ps(l,t.picker,a,c,s,n);o=Math.max(o,u)}const l=[],u=[],h=[];c.forEach(t=>{const s=t.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isInteger(e.order));if(s.sort((e,t)=>e.order-t.order),!s.length)return;let i=[];l.push(i);let r=0;s.forEach(e=>{e.fullMeasure||e.grace||e.tremoloCatcher||(e.order>r+1?(i=[e.index],l.push(i)):i.push(e.index),r=e.order)});let n=s[s.length-1];const a=t.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isFinite(e.tick)&&!Number.isInteger(e.order));for(;a.length;){const e=a.findIndex(e=>e.tick>=n.tick+Bs(n));e>=0?i.push(a.splice(e,1)[0].index):(n=a.splice(0,1)[0],i=[n.index],l.push(i))}if(s.some(e=>!e.fullMeasure&&Number.isInteger(e.order))){const e=t.elements.find(e=>e.type===X.EOS);u.push(e.tick)}const o=e.eventMap,c=t.elements.reduce((e,t)=>(Number.isFinite(t.tick)&&e.add(t.tick),e),new Set),m=Array.from(c).sort((e,t)=>e-t);s.forEach(e=>{const t=o[e.index];t&&h.push({id:t.id,tick:e.tick,tickGroup:m.indexOf(e.tick),division:e.division!==t.division?e.division:void 0,dots:e.dots!==t.dots?e.dots:void 0,timeWarp:e.timeWarped?D(2,3):void 0,beam:e.beam!==t.beam?e.beam:void 0,grace:e.grace!==!!t.grace?e.grace:void 0,fullMeasure:e.fullMeasure||void 0})})});const m=Math.max(...c.map(e=>e.estimatedDuration));return{voices:l.filter(e=>e.length),duration:Math.max(...u),events:h,priority:-o,estimatedDuration:m}},Ds=async(e,{picker:t,resetSignatureForDoubtfulOnly:s})=>{const i=e.createClusters(),r=e.eventMap;for(const n of i)s&&!e.doubtfulTimesig||(n.signatureDuration=0),n.elements.forEach((e,t)=>e.order=t?void 0:0),await t.predictCluster(n,1),n.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)).forEach(e=>{r[e.index].predisposition=e.predisposition});e.estimatedDuration=Math.max(...i.map(e=>e.estimatedDuration))},Fs=async(e,t)=>Ds(e,{picker:t,resetSignatureForDoubtfulOnly:!0});var Ls=Object.freeze({__proto__:null,solveCluster:Ps,solveMeasure:Rs,estimateMeasure:Fs,glimpseMeasure:Ds}),$s=Object.freeze({__proto__:null,beadSolver:Ls,recoverJSON:b,SimpleClass:SimpleClass,EditableEvent:EditableEvent,EditableMeasure:EditableMeasure,get EventElementType(){return X},EventCluster:EventCluster,EventClusterSet:EventClusterSet,get PageLayoutMethod(){return Re},get TextType(){return De},evaluateMeasure:Le,PatchMeasure:PatchMeasure,VERSION:14,Score:Score,Page:Page,System:System,Staff:Staff,Measure:Measure,SemanticGraph:SemanticGraph,get SemanticType(){return w},glyphSemanticMapping:{"rests.1":"Rest1","rests.0o":"Rest0","rests.1o":"Rest1","rests.M1":"RestM1","rests.2":"Rest2","rests.3":"Rest3","rests.4":"Rest4","rests.5":"Rest5","rests.6":"Rest6","accidentals.sharp":"AccSharp","accidentals.doublesharp":"AccDoublesharp","accidentals.natural":"AccNatural","accidentals.flat":"AccFlat","accidentals.flatflat":"AccFlatflat","dots.dot":"Dot","scripts.ufermata":"ScriptFermata","scripts.dfermata":"ScriptFermata","scripts.ushortfermata":"ScriptShortFermata","scripts.dshortfermata":"ScriptShortFermata","scripts.staccato":"ScriptStaccato","scripts.ustaccatissimo":"ScriptStaccatissimo","scripts.dstaccatissimo":"ScriptStaccatissimo","scripts.turn":"ScriptTurn","scripts.trill":"ScriptTrill","scripts.segno":"ScriptSegno","scripts.coda":"ScriptCoda","scripts.arpeggio":"ScriptArpeggio","scripts.prall":"ScriptPrall","scripts.mordent":"ScriptMordent","scripts.umarcato":"ScriptMarcato","scripts.dmarcato":"ScriptMarcato","scripts.uportato":"ScriptPortato","scripts.dportato":"ScriptPortato","scripts.tenuto":"ScriptTenuto","scripts.sforzato":"ScriptSforzato","clefs.C":"ClefC","clefs.F":"ClefF","clefs.G":"ClefG","clefs.F_change":"ClefF","clefs.G_change":"ClefG","timesig.C44":"TimesigC44","timesig.C22":"TimesigC22","pedal.*":"PedalStar","pedal.Ped":"PedalPed","noteheads.s0":"NoteheadS0","noteheads.s1":"NoteheadS1","noteheads.s2":"NoteheadS2",f:"f",m:"m",p:"p",r:"r",s:"s",z:"z"},semanticPriorities:{ClefG:0,ClefF:0,TimesigFour:0,TimesigThree:0,TimesigTwo:0,NoteheadS0:0,NoteheadS1:0,NoteheadS2:0,Dot:0,vline_BarMeasure:0,vline_Stem:0,Flag3:0,TimesigC44:1,TimesigC22:1,TimesigEight:1,TimesigSix:1,AccNatural:1,AccSharp:1,AccFlat:1,KeyAcc:1,Rest0:1,Rest1:1,Rest2:1,Rest3:1,Rest4:1,OctaveShift8:1,OctaveShift0:1,AccDoublesharp:2,AccFlatflat:2,TimesigOne:2,TimesigNine:2,Rest5:2,Rest6:2,SlurBegin:2,SlurEnd:2,VoltaLeft:2,VoltaRight:2,vline_BarTerminal:2,vline_BarSegment:2,TempoNotehead:2,GraceNotehead:2,SignLined:2,SignInterval:2,BeamLeft:2,BeamRight:2,BeamContinue:2,TremoloLeft:2,TremoloRight:2,TremoloMiddle:2,StemTip:2,StemHead:2,f:3,p:3,m:3,ScriptFermata:3,ScriptSforzato:3,ScriptStaccato:3,ScriptStaccatissimo:3,ScriptTurn:3,ScriptTrill:3,ScriptSegno:3,ScriptCoda:3,ScriptArpeggio:3,ScriptPrall:3,ScriptMordent:3,ScriptTenuto:3,PedalStar:3,PedalPed:3,TimesigFive:3,TimesigSeven:3,TimesigZero:3,One:3,Two:3,Three:3,Four:3,Five:3,rect_Text:3,rect_Lyric:3,CrescendoBegin:3,CrescendoEnd:3,DecrescendoBegin:3,DecrescendoEnd:3,RestM1:4,ClefC:4,ScriptShortFermata:4,ScriptMarcato:4,ScriptPortato:4,s:4,r:4,z:4,Zero:4,Six:4,Seven:4,Eight:4,Nine:4},NOTEHEAD_WIDTHS:M,glyphCenters:E,ONE_D_SEMANTICS:["OctaveShift8va","OctaveShift8vb","OctaveShift8","OctaveShift0","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","vline_BarMeasure","vline_BarTerminal","vline_BarSegment"],SYSTEM_SEMANTIC_TYPES:N,CONFLICTION_GROUPS:C,STAMP_SEMANTICS:_,STAMP_RECTS:{ClefG:[-.0625,-1.125,3.6,8.6],ClefF:[.25,.5625,3.6,3.8],ClefC:[.25,0,3.25,4.5],NoteheadS0:[.0625,0,2.55,1.4],NoteheadS1:[.0625,0,1.8,1.4],NoteheadS2:[.0625,-.0625,1.65,1.35],Dot:[.25,0,.6,.6],Rest0:[0,-.75,3.25,.9],Rest1:[0,-.25,3.25,.9],Rest2:[-.0625,-.1875,1.6,3.375],Rest3:[0,.0625,1.2,2.25],Rest4:[.0625,.5625,1.65,3.375],Rest5:[.0625,.0625,1.95,4.375],Rest6:[.0625,.5625,1.95,5.375],RestM1:[-.4375,-1.5,.75,1.2],AccNatural:[0,0,.9,3.5],AccSharp:[0,0,1.5,3.5],AccDoublesharp:[0,0,1.5,1.5],AccFlat:[0,-.5625,1.2,3.125],AccFlatflat:[.1875,-.5625,1.95,3.125],TimesigC44:[-.0625,0,2.25,2.3],TimesigC22:[-.0625,0,2.25,3.2],TimesigZero:[0,0,1.8,2.2],TimesigOne:[-.125,0,1.5,2.2],TimesigTwo:[0,0,2.2,2.2],TimesigThree:[-.0625,0,1.9,2.4],TimesigFour:[.0625,0,1.95,2.2],TimesigFive:[0,0,1.8,2.3],TimesigSix:[0,0,2,2.4],TimesigSeven:[0,0,1.8,2.2],TimesigEight:[0,0,1.9,2.2],TimesigNine:[0,0,1.9,2.2],One:[-.0625,0,.75,1.6],Two:[0,0,1.2,1.6],Three:[0,0,1.2,1.6],Four:[0,0,1.2,1.6],Five:[0,0,1.2,1.6],OctaveShift8:[2.125,-.1875,4.75,3.6],OctaveShift0:[-.4,0,1.8,4.2],f:[.0625,-.125,2.55,3],p:[-.0625,.25,2.55,2.1],m:[-.125,-.0625,2.4,1.35],n:[-.3125,-.0625,1.95,1.35],r:[0,-.125,1.5,1.5],s:[0,-.0625,1.2,1.35],z:[.0625,0,1.35,1.5],ScriptFermata:[0,0,3.25,3.9],ScriptShortFermata:[0,0,2.4,4.95],ScriptSforzato:[-.0625,0,2.5,1.2],ScriptStaccato:[0,-.0625,.6,.45],ScriptStaccatissimo:[0,0,1.2,2.6],ScriptTurn:[0,0,2.7,1.5],ScriptTrill:[-.125,-.5,3,2.7],ScriptSegno:[0,0,2.4,3.5],ScriptCoda:[0,0,2.7,3.25],ScriptArpeggio:[-.0625,0,1.05,1.8],ScriptPrall:[0,0,2.4,1.2],ScriptMordent:[0,0,2.4,1.5],ScriptMarcato:[0,0,1.2,2.475],ScriptTenuto:[0,-.0625,1.5,.15],ScriptPortato:[0,0,1.5,1.65],PedalStar:[0,0,3.2,3.2],PedalPed:[0,-.25,4.7,2.4]},hashSemanticPoint:O,hashPageSemanticPoint:B,get SemanticElementType(){return dt},SemanticCluster:SemanticCluster,SemanticClusterSet:class SemanticClusterSet{constructor(e){if(e&&(this.clusters=e.clusters,e.vocab)){const t=e.vocab.map((e,t)=>[t,dt[e]]).filter(([e,t])=>e!==t).reduce((e,[t,s])=>(e[t]=s,e),{});this.clusters.forEach(e=>e.elements.forEach(e=>{Number.isFinite(t[e.type])&&(e.type=t[e.type])}))}}toJSON(){return{__prototype:"SemanticClusterSet",vocab:Object.entries(dt).filter(e=>Number.isFinite(e[1])).map(e=>e[0]),clusters:this.clusters.map(e=>e.toJSON())}}},ELEMENT_TOKEN_NAMES:vt,NOTEHEAD_ELEMENT_TYPES:St,NOTE_ELEMENT_TYPES:Tt,BOS_ELEMENT:Ct,fractionToElems:_t,expandMatrixByMasks:Bt,expandMatrixByMaskTriu:At,matrixFromGroups:Pt,emptyVoiceFromStaffMeasure:vs,SpartitoMeasure:SpartitoMeasure,Spartito:Spartito,mod7:bs,Term:Term,EventTerm:EventTerm,ContextedTerm:ContextedTerm,MarkTerm:MarkTerm,TempoTerm:TempoTerm,GlyphTerm:GlyphTerm,TextTerm:TextTerm,LyricTerm:LyricTerm,CommandTerm:CommandTerm,ChordmodeTerm:ChordmodeTerm,get ContextType(){return Oe},get GraceType(){return Ee},get GlissandoStyle(){return Ce},get ArpeggioStyle(){return _e},get AccessoryDirection(){return Me},WHOLE_DURATION:we,get StemBeam(){return Ne},get TremoloLink(){return Ie},TokenTypes:J,TokenClefs:Q,TokenTimesigs:ee,TokenTimesigsC:te,TokenTimesigsN:se,TokenOctshifts:ie,TokenNumbers:re,TokenAccidentals:ne,TokenNoteheads:ae,TokenBareNoteheads:oe,TokenDirectionalNoteheads:ce,TokenRests:le,TokenFlags:ue,TokenVolta:he,TokenDynamics:me,TokenScripts:fe,TokenPedals:de,TokenDots:pe,TokenArcs:ge,TokenBeams:ye,TokenWedges:ve,TokenAccessories:xe,TokenDirectionless:Se,TokenGlyphs:be,get TokenType(){return K},Token:Token,TextToken:TextToken,TOKEN_Y_ROUND:ke,TOKEN_Y_FIXED:Te});const js=[K.ClefG,K.ClefF,K.ClefC],Hs=e=>{let t=null;switch(e.tokenType){case K.ClefG:t="Treble";break;case K.ClefF:t="Bass";break;case K.ClefC:t=-1===e.y?"Tenor":"Alto"}return t};var Vs,zs={exports:{}},qs="object"==typeof Reflect?Reflect:null,Gs=qs&&"function"==typeof qs.apply?qs.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)};Vs=qs&&"function"==typeof qs.ownKeys?qs.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var Ws=Number.isNaN||function(e){return e!=e};function Us(){Us.init.call(this)}zs.exports=Us,zs.exports.once=function(e,t){return new Promise(function(s,i){function r(s){e.removeListener(t,n),i(s)}function n(){"function"==typeof e.removeListener&&e.removeListener("error",r),s([].slice.call(arguments))}ii(e,t,n,{once:!0}),"error"!==t&&function(e,t,s){"function"==typeof e.on&&ii(e,"error",t,s)}(e,r,{once:!0})})},Us.EventEmitter=Us,Us.prototype._events=void 0,Us.prototype._eventsCount=0,Us.prototype._maxListeners=void 0;var Ys=10;function Xs(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function Ks(e){return void 0===e._maxListeners?Us.defaultMaxListeners:e._maxListeners}function Zs(e,t,s,i){var r,n,a,o;if(Xs(s),void 0===(n=e._events)?(n=e._events=Object.create(null),e._eventsCount=0):(void 0!==n.newListener&&(e.emit("newListener",t,s.listener?s.listener:s),n=e._events),a=n[t]),void 0===a)a=n[t]=s,++e._eventsCount;else if("function"==typeof a?a=n[t]=i?[s,a]:[a,s]:i?a.unshift(s):a.push(s),(r=Ks(e))>0&&a.length>r&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,o=c,console&&console.warn&&console.warn(o)}return e}function Js(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Qs(e,t,s){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:s},r=Js.bind(i);return r.listener=s,i.wrapFn=r,r}function ei(e,t,s){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"==typeof r?s?[r.listener||r]:[r]:s?function(e){for(var t=new Array(e.length),s=0;s{s=e,i=r,t>=0&&setTimeout(i,t,"timeout")}),s,i]}Object.defineProperty(Us,"defaultMaxListeners",{enumerable:!0,get:function(){return Ys},set:function(e){if("number"!=typeof e||e<0||Ws(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");Ys=e}}),Us.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},Us.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||Ws(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},Us.prototype.getMaxListeners=function(){return Ks(this)},Us.prototype.emit=function(e){for(var t=[],s=1;s0&&(n=t[0]),n instanceof Error)throw n;var a=new Error("Unhandled error."+(n?" ("+n.message+")":""));throw a.context=n,a}var o=r[e];if(void 0===o)return!1;if("function"==typeof o)Gs(o,this,t);else{var c=o.length,l=si(o,c);for(s=0;s=0;n--)if(s[n]===t||s[n].listener===t){a=s[n].listener,r=n;break}if(r<0)return this;0===r?s.shift():function(e,t){for(;t+1=0;i--)this.removeListener(e,t[i]);return this},Us.prototype.listeners=function(e){return ei(this,e,!0)},Us.prototype.rawListeners=function(e){return ei(this,e,!1)},Us.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):ti.call(e,t)},Us.prototype.listenerCount=ti,Us.prototype.eventNames=function(){return this._eventsCount>0?Vs(this._events):[]};class AsyncQueue extends zs.exports.EventEmitter{constructor(){super(),this.working=!1,this.working=!1,this.tasks=[],process.nextTick(()=>{this.emit("idle")})}async _digest(e){this.working=!0;const[t,s,i,r]=e;await t(s).then(i,r),this.tasks.length>0?await this._digest(this.tasks.shift()):(this.working=!1,this.emit("idle"))}addTask(e,{timeout:t=6e5}={}){const[s,i,r]=ri({timeout:t});return this.working?this.tasks.push([...e,i,r]):this._digest([...e,i,r]),s}}class ZeroClient{constructor(e=console){this.queue=new AsyncQueue,this.logger=e}bind(e){e&&(this.url=e),this.socket=new n.Request({sendTimeout:15e3,receiveTimeout:3e5}),this.socket.connect(this.url)}__request(e){let t=0;const s=async e=>{try{return this.socket.closed&&this.bind(),await this.socket.send(r.pack(e)).then(()=>this.socket.receive())}catch(i){if(t<2)return t++,console.log(`请求失败,${i.stack}`),console.error(`3s后重试第${t}次`),this.socket.close(),await new Promise(e=>setTimeout(e,3e3)),s(e);throw i}};return s(e)}async request(e,t=null,s=null){const[i,n]=Array.isArray(t)?[t,s]:[void 0,t],a={method:e};return i&&(a.args=i),n&&(a.kwargs=n),this.queue.addTask([async e=>{const[t]=await this.__request(e),s=r.unpack(t);return 0===s.code?s.data:Promise.reject(s.msg)},a])}}class PyProcessor extends ZeroClient{constructor(e,t={},s=console){super(s),this.retryCount=0,this.retryDelay=3e3,this.scriptPath=e,this.options=t}async bind(e){const t=e||await a.getPortPromise({port:12022,stopPort:12122}),s=i.defaultsDeep({args:[...this.options.args||[],"-p",`${t}`]},this.options);this.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`),this.pyShell=new o.PythonShell(this.scriptPath,s),this.pyShell.stdout.on("data",e=>this.logger.info(e)),this.pyShell.on("pythonError",e=>this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`,e)),this.pyShell.on("stderr",e=>this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`,e)),this.pyShell.on("error",e=>this.logger.error(`[python-shell]: ${this.scriptPath} error:`,e)),this.pyShell.on("close",()=>{this.retryCount<5&&(this.retryCount++,this.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`),setTimeout(()=>{this.bind()},this.retryDelay))}),super.bind(`tcp://127.0.0.1:${t}`)}}var ni={},ai=function(e){return e instanceof Buffer},oi={exports:{}},ci={exports:{}};"function"==typeof Object.create?ci.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:ci.exports=function(e,t){e.super_=t;var s=function(){};s.prototype=t.prototype,e.prototype=new s,e.prototype.constructor=e};try{var li=require("util");if("function"!=typeof li.inherits)throw"";oi.exports=li.inherits}catch(e){oi.exports=ci.exports}!function(e){var t=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),s={},i=0;i=a)return e;switch(e){case"%s":return String(r[i++]);case"%d":return Number(r[i++]);case"%j":try{return JSON.stringify(r[i++])}catch(e){return"[Circular]"}default:return e}}),c=r[i];i=3&&(i.depth=arguments[2]),arguments.length>=4&&(i.colors=arguments[3]),m(s)?i.showHidden=s:s&&e._extend(i,s),g(i.showHidden)&&(i.showHidden=!1),g(i.depth)&&(i.depth=2),g(i.colors)&&(i.colors=!1),g(i.customInspect)&&(i.customInspect=!0),i.colors&&(i.stylize=a),c(i,t,i.depth)}function a(e,t){var s=n.styles[t];return s?"["+n.colors[s][0]+"m"+e+"["+n.colors[s][1]+"m":e}function o(e,t){return e}function c(t,s,i){if(t.customInspect&&s&&b(s.inspect)&&s.inspect!==e.inspect&&(!s.constructor||s.constructor.prototype!==s)){var r=s.inspect(i,t);return p(r)||(r=c(t,r,i)),r}var n=function(e,t){if(g(t))return e.stylize("undefined","undefined");if(p(t)){var s="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(s,"string")}if(d(t))return e.stylize(""+t,"number");if(m(t))return e.stylize(""+t,"boolean");if(f(t))return e.stylize("null","null")}(t,s);if(n)return n;var a=Object.keys(s),o=function(e){var t={};return e.forEach(function(e,s){t[e]=!0}),t}(a);if(t.showHidden&&(a=Object.getOwnPropertyNames(s)),S(s)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return l(s);if(0===a.length){if(b(s)){var v=s.name?": "+s.name:"";return t.stylize("[Function"+v+"]","special")}if(y(s))return t.stylize(RegExp.prototype.toString.call(s),"regexp");if(x(s))return t.stylize(Date.prototype.toString.call(s),"date");if(S(s))return l(s)}var k,T="",w=!1,E=["{","}"];(h(s)&&(w=!0,E=["[","]"]),b(s))&&(T=" [Function"+(s.name?": "+s.name:"")+"]");return y(s)&&(T=" "+RegExp.prototype.toString.call(s)),x(s)&&(T=" "+Date.prototype.toUTCString.call(s)),S(s)&&(T=" "+l(s)),0!==a.length||w&&0!=s.length?i<0?y(s)?t.stylize(RegExp.prototype.toString.call(s),"regexp"):t.stylize("[Object]","special"):(t.seen.push(s),k=w?function(e,t,s,i,r){for(var n=[],a=0,o=t.length;a60)return s[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+s[1];return s[0]+t+" "+e.join(", ")+" "+s[1]}(k,T,E)):E[0]+T+E[1]}function l(e){return"["+Error.prototype.toString.call(e)+"]"}function u(e,t,s,i,r,n){var a,o,l;if((l=Object.getOwnPropertyDescriptor(t,r)||{value:t[r]}).get?o=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(o=e.stylize("[Setter]","special")),M(i,r)||(a="["+r+"]"),o||(e.seen.indexOf(l.value)<0?(o=f(s)?c(e,l.value,null):c(e,l.value,s-1)).indexOf("\n")>-1&&(o=n?o.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+o.split("\n").map(function(e){return" "+e}).join("\n")):o=e.stylize("[Circular]","special")),g(a)){if(n&&r.match(/^\d+$/))return o;(a=JSON.stringify(""+r)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+o}function h(e){return Array.isArray(e)}function m(e){return"boolean"==typeof e}function f(e){return null===e}function d(e){return"number"==typeof e}function p(e){return"string"==typeof e}function g(e){return void 0===e}function y(e){return v(e)&&"[object RegExp]"===k(e)}function v(e){return"object"==typeof e&&null!==e}function x(e){return v(e)&&"[object Date]"===k(e)}function S(e){return v(e)&&("[object Error]"===k(e)||e instanceof Error)}function b(e){return"function"==typeof e}function k(e){return Object.prototype.toString.call(e)}function T(e){return e<10?"0"+e.toString(10):e.toString(10)}e.debuglog=function(t){if(g(i)&&(i=process.env.NODE_DEBUG||""),t=t.toUpperCase(),!r[t])if(new RegExp("\\b"+t+"\\b","i").test(i)){var s=process.pid;r[t]=function(){var i=e.format.apply(e,arguments);console.error("%s %d: %s",t,s,i)}}else r[t]=function(){};return r[t]},e.inspect=n,n.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},n.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.isArray=h,e.isBoolean=m,e.isNull=f,e.isNullOrUndefined=function(e){return null==e},e.isNumber=d,e.isString=p,e.isSymbol=function(e){return"symbol"==typeof e},e.isUndefined=g,e.isRegExp=y,e.isObject=v,e.isDate=x,e.isError=S,e.isFunction=b,e.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},e.isBuffer=ai;var w=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function M(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.log=function(){var t,s;console.log("%s - %s",(t=new Date,s=[T(t.getHours()),T(t.getMinutes()),T(t.getSeconds())].join(":"),[t.getDate(),w[t.getMonth()],s].join(" ")),e.format.apply(e,arguments))},e.inherits=oi.exports,e._extend=function(e,t){if(!t||!v(t))return e;for(var s=Object.keys(t),i=s.length;i--;)e[s[i]]=t[s[i]];return e};var E="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function N(e,t){if(!e){var s=new Error("Promise was rejected with a falsy value");s.reason=e,e=s}return t(e)}e.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(E&&e[E]){var s;if("function"!=typeof(s=e[E]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(s,E,{value:s,enumerable:!1,writable:!1,configurable:!0}),s}function s(){for(var t,s,i=new Promise(function(e,i){t=e,s=i}),r=[],n=0;n>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&mi.rotl(e,8)|4278255360&mi.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],s=0,i=0;s>>5]|=e[s]<<24-i%32;return t},wordsToBytes:function(e){for(var t=[],s=0;s<32*e.length;s+=8)t.push(e[s>>>5]>>>24-s%32&255);return t},bytesToHex:function(e){for(var t=[],s=0;s>>4).toString(16)),t.push((15&e[s]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],s=0;s>>6*(3-r)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],s=0,i=0;s>>6-2*i);return t}},di.exports=mi;var pi={utf8:{stringToBytes:function(e){return pi.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(pi.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],s=0;s>5]|=128<<24-r%32,i[15+(r+64>>>9<<4)]=r;for(var h=0;h>>31}var x=(a<<5|a>>>27)+u+(n[y]>>>0)+(y<20?1518500249+(o&c|~o&l):y<40?1859775393+(o^c^l):y<60?(o&c|o&l|c&l)-1894007588:(o^c^l)-899497514);u=l,l=c,c=o<<30|o>>>2,o=a,a=x}a+=m,o+=f,c+=d,l+=p,u+=g}return[a,o,c,l,u]}(i));return r&&r.asBytes?n:r&&r.asString?s.bytesToString(n):e.bytesToHex(n)};i._blocksize=16,i._digestsize=20,fi.exports=i}();var yi=fi.exports;const vi=({page:e,backgroundImage:t,detection:s,imageSize:i,position:r})=>{const n=(s.phi2-s.phi1)/s.interval,a=i.height/s.interval,o=e.systems[e.systems.length-1],c=r?r.y:(o?o.top+o.height:0)+4,l=r?r.x:4,u=[0,...Array(s.middleRhos.length-1).fill(0).map((e,t)=>(s.middleRhos[t]+s.middleRhos[t+1])/2/s.interval)],h=[n],m=u.map((e,t)=>new Staff({top:e,height:(u[t+1]||a)-e,staffY:s.middleRhos[t]/s.interval-e,measureBars:h})),f={x:-s.phi1/s.interval,y:0,width:i.width/s.interval,height:i.height/s.interval};return new System({staves:m,left:l,top:c,width:n,backgroundImage:t,imagePosition:f,measureBars:h})};async function xi(e,{format:t="webp",maxHeight:s=1080,quality:i=80}={}){let r=await(async e=>"string"==typeof e?/^https?:\/\//.test(e)?(await S.default(e,{responseType:"buffer",decompress:!0,https:{rejectUnauthorized:!1}})).body:/^data:image\//.test(e)?Buffer.from(e.split(",")[1],"base64"):Buffer.from(e):e)(e);const n=await new Promise(e=>{x.default(r).resize({width:s,height:s,fit:"inside",withoutEnlargement:!0}).toFormat(t,{quality:i}).toBuffer((t,s)=>{e(s)})});return{buffer:n,filename:`${v.default.ArrayBuffer.hash(n)}.${t}`}}globalThis.OffscreenCanvas=globalThis.OffscreenCanvas||c.Canvas,globalThis.Image=globalThis.Image||c.Image,globalThis.btoa=globalThis.btoa||(e=>Buffer.from(e,"binary").toString("base64"));const Si=32,bi={viewportHeight:256,viewportUnit:8},ki=192,Ti=8,wi={viewportHeight:192,viewportUnit:8};const Mi=e=>Promise.all(e.map(e=>e())),Ei=async(e,t,{paddingLeft:s=0,scaling:i=1,spec:r})=>{if(!e||!e.backgroundImage)return null;const n=e.staves[t];if(!n)return null;const a=r.viewportHeight/r.viewportUnit/2,o=e.imagePosition.width*r.viewportUnit,l=e.imagePosition.height*r.viewportUnit,u=e.imagePosition.x*r.viewportUnit+s,h=(e.imagePosition.y-(n.top+n.staffY-a))*r.viewportUnit,m=new c.Canvas(Math.round(o+u)*i,r.viewportHeight*i),f=m.getContext("2d");return f.fillStyle="white",f.fillRect(0,0,m.width,m.height),f.drawImage(await c.loadImage(e.backgroundImage),u*i,h*i,o*i,l*i),m};async function Ni({system:e,staff:t,staffIndex:s}){const i=await Ei(e,s,{paddingLeft:Si,spec:wi});t.backgroundImage=i.toBufferSync("png"),t.imagePosition={x:-32/wi.viewportUnit,y:t.staffY-wi.viewportHeight/2/wi.viewportUnit,width:i.width/wi.viewportUnit,height:i.height/wi.viewportUnit}}async function Ii({system:e,staff:t,staffIndex:s,gaugeImage:i,pyClients:r}){const n=(await Ei(e,s,{paddingLeft:Si,spec:bi,scaling:2})).toBufferSync("png"),a=(e.middleY-(t.top+t.staffY))*bi.viewportUnit+bi.viewportHeight/2,{buffer:o,size:c}=await r.predictScoreImages("gaugeRenderer",[n,i,a]);t.backgroundImage=o,t.imagePosition={x:-32/bi.viewportUnit,y:t.staffY-c.height/2/bi.viewportUnit,width:c.width/bi.viewportUnit,height:c.height/bi.viewportUnit},t.maskImage=null}async function Ci({staff:e,staffIndex:t,maskImage:s}){const i=await c.loadImage(s);e.maskImage=s,e.imagePosition={x:-32/Ti,y:e.staffY-ki/2/Ti,width:i.width/Ti,height:i.height/Ti}}async function _i({score:e,staffIndex:t,system:s,staff:i,graph:r}){r.offset(-32/wi.viewportUnit,0),s.assignSemantics(t,r),i.assignSemantics(r),i.clearPredictedTokens(),e.assembleSystem(s,e.settings?.semanticConfidenceThreshold||1)}function Oi(e,t){[[e.source,"url"],...e.systems.map(e=>[[e,"backgroundImage"],...e.staves.map(e=>[[e,"backgroundImage"],[e,"maskImage"]]).flat()]).flat()].map(([e,s])=>{e[s]=t(e[s])})}class OMRProgress{constructor(e){this.state={},this.onChange=e}setTotal(e,t){this.state[e]=this.state[e]||{total:t,finished:0}}increase(e,t=1){(this.state[e]||{finished:0}).finished+=t,this.onChange(this.state)}}const Bi=new l.WeakLRUCache,Ai={get:async e=>Bi.getValue(e),async set(e,t){Bi.setValue(e,t)}},Pi=async e=>{if(e instanceof Buffer||"string"==typeof e&&(/^https?:\/\//.test(e)||/^data:image\//.test(e))){return`data:image/webp;base64,${(await xi(e)).buffer.toString("base64")}`}return e},Ri=e=>{const t=Math.random();let s=0;for(let i=0;it)return i;return e.length-1},Di=(e,t=.9)=>{const s=e.map(e=>Math.log(e)*t).map(Math.exp),i=s.reduce((e,t)=>e+t,0);return s.map(e=>e/i)},Fi=e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return e;const t=e.predisposition?.divisionVector?Di(e.predisposition.divisionVector):null,s=e.predisposition?.dotsVector?Di(e.predisposition.dotsVector):null;return new EventTerm({...e,predisposition:{...e.predisposition,divisionVector:t,dotsVector:s}})};class MeasureRectification{constructor(e){Object.assign(this,e)}toString(){return this.events.map(e=>{if(!e)return"";const{division:t="",dots:s=""}=e;return`${t}|${s}`}).join(",")}static default(e){return new MeasureRectification({events:e.map(e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return null;const t=e.predisposition.divisionVector?e.division:void 0,s=e.predisposition.dotsVector?e.dots:void 0;return{id:e.id,division:t,dots:s}})})}static roll(e){return new MeasureRectification({events:e.map(e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return null;let t,s;return e.predisposition.divisionVector&&(t=Ri(e.predisposition.divisionVector)),e.predisposition.dotsVector&&(s=Ri(e.predisposition.dotsVector)),{id:e.id,division:t,dots:s}})})}}const Li=new l.WeakLRUCache,$i={get:async e=>Li.getValue(e),async set(e,t){Li.setValue(e,t)},batchGet:async e=>e.map(e=>Li.getValue(e))};var ji;!function(e){e[e.ErrorOnly=0]="ErrorOnly",e[e.NotFine=1]="NotFine",e[e.Imperfect=2]="Imperfect"}(ji||(ji={}));const Hi=async(e,t,s,i,r=ji.NotFine,n=0,a)=>{const o=e.filter(({evaluation:e})=>!e||((e,t)=>{switch(t){case ji.ErrorOnly:return e.error;case ji.Imperfect:return!e.perfect}return!e.fine})(e,r));s?.write(".".repeat(o.length)),s?.write("\b".repeat(o.length));const c=o.length;let l=0;for(const e of o){const s=e.current.deepCopy();s.staffGroups=e.current.staffGroups;const r=await Rs(s,{picker:e.picker,...i});s.applySolution(r);const o=Le(s),u=!e.evaluation||o.fine>e.evaluation.fine||o.qualityScore>e.evaluation.qualityScore&&o.fine===e.evaluation.fine;u&&(e.evaluation=o,Object.assign(e.current,s)),t(e.current,o,u),l++,a?.(e.current,o,u,{pass:n,remaining:c-l,total:c})}return o.length&&s?.write("\n"),o.length};globalThis.btoa=globalThis.btoa||(e=>Buffer.from(e,"binary").toString("base64"));const Vi=parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS||"30"),zi=parseInt(process.env.BASE_QUOTA_FACTOR||"40"),qi=parseInt(process.env.RECTIFICATION_QUOTA_FACTOR||"80"),Gi=(e,t,s)=>Math.min(Math.ceil((e+1)*t*Math.log(e+2)),Math.ceil(s*Math.min(1,(24/(e+1))**2)));async function Wi(e,{solver:t,quotaMax:s=1e3,quotaFactor:i=zi,solutionStore:r=$i,ignoreCache:n=!1,logger:a}={}){let o=0,c=0;return a?.info(`[solveMeasures] begin, measure total: ${e.length}.`),await Promise.all(e.map(async l=>{if(!n){const e=await r.get(l.regulationHash);if(e)return l.applySolution(e),void++o}const u=Gi(l.events.length,i,s);await l.regulate({policy:"equations",quota:u,solver:t});const h=Le(l);h.error||r.set(l.regulationHash0,{...l.asSolution(),priority:-l?.solutionStat?.loss}),h.perfect&&++c,a?.info(`[solveMeasures] measure[${l.measureIndex}/${e.length}] regulated: ${h.perfect?"solved":h.error?"error":"issue"}, ${l.regulationHash}`)})),a?.info(`[solveMeasures] ${o}/${e.length} cache hit, ${c} solved.`),{cached:o,computed:e.length-o,solved:c}}const Ui=async(e,{solver:t,quotaMax:s=4e3})=>{let i=Le(e),r=e.asSolution();const n=Gi(e.events.length,qi,s);let a=0;for(const s of function*(e){const t=new Set,s=MeasureRectification.default(e.events);t.add(s.toString()),yield s;let i=0,r=e.events;for(;i<100;){i&&i%10==0&&(r=r.map(Fi));const e=MeasureRectification.roll(r),s=e.toString();t.has(s)?++i:(i=0,t.add(s),yield e)}}(e)){const o=await Pe.regulateMeasureWithRectification(e,s,{solver:t,quota:n}),c=e.deepCopy();c.applySolution(o);const l=Le(c);if((l.perfect>i.perfect||l.error=i.perfect&&o.priority>r.priority)&&(i=l,r=o),l.perfect)break;if(++a,a>Vi)break}return r};const Yi=async(e,{solver:t,solutionStore:s=$i,logger:i,quotaMax:r=240,quotaFactor:n=16})=>{e.assemble();const a=e.spartito||e.makeSpartito(),o=a.measures.filter(e=>!e.regulated);await Wi(o,{solver:t,quotaMax:r,quotaFactor:n,solutionStore:s,logger:i}),console.assert(e.spartito?.regulated,"doSimpleRegulate: regulation incomplete:",a.measures.filter(e=>!e.regulated).length)};console.info("%cstarry-omr%c v1.0.0 2026-05-05T14:46:38.729Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;"),exports.DefaultSolutionStore=$i,exports.PyClients=class PyClients{constructor(e,t=console){this.options=e,this.logger=t,this.clients=new Map}async getClient(e){if(this.clients.has(e))return this.clients.get(e);const[t,s,i]=ri(),r=this.options[e];if(!r)throw new Error(`no config for client \`${e}\` found`);try{if("string"==typeof r){const e=new ZeroClient;e.bind(r),s(e)}else{const{scriptPath:e,...t}=r,i=new PyProcessor(e,t,this.logger);await i.bind(`${await ui()}`),s(i)}this.logger.info(`PyClients: ${e} started`)}catch(t){this.logger.error(`PyClients: ${e} start fail: ${JSON.stringify(t)}`),i(t)}return this.clients.set(e,t),t}async checkHost(e){return(await this.getClient(e)).request("checkHost")}async warmup(){const e=Object.keys(this.options);await Promise.all(e.map(e=>this.getClient(e)))}async predictScoreImages(e,...t){const s=e.split("$")[0],i=await this.getClient(s);let r=null;this.logger.info(`[predictor]: ${e} py start..`);const n=Date.now();switch(e){case"layout":r=await i.request("predictDetection",t);break;case"layout$reinforce":r=await i.request("predictReinforce",t);break;case"gauge":case"mask":r=await i.request("predict",t,{by_buffer:!0});break;case"semantic":case"textLoc":r=await i.request("predict",t);break;case"textOcr":case"brackets":case"topo":case"gaugeRenderer":case"jianpu":r=await i.request("predict",...t);break;default:this.logger.error(`[predictor]: no predictor ${e}`)}return this.logger.info(`[predictor]: ${e} py duration: ${Date.now()-n}ms`),r}},exports.abstractOMRStats=e=>{const{costTotal:t,pagesCostTotal:s,pagesTotal:i}=e.reduce((e,t)=>({costTotal:e.costTotal+t.cost,pagesCostTotal:e.pagesCostTotal+t.pagesCost,pagesTotal:e.pagesTotal+t.pages}),{costTotal:0,pagesCostTotal:0,pagesTotal:0});return{costTotal:t,costPerPage:i?t/i:null,pagesTotal:i,scoreN:e.length}},exports.abstractRegulationBeadStats=e=>{const{totalCost:t,pickerCost:s,measureN:i,timeN:r}=e.reduce((e,t)=>({totalCost:e.totalCost+t.totalCost,pickerCost:e.pickerCost+t.pickerCost,measureN:e.measureN+t.measures.computed,timeN:e.timeN+t.measures.tryTimes}),{totalCost:0,pickerCost:0,measureN:0,timeN:0}),n=i>0?t/i:null,a=r>0?t/r:null,{cached:o,simple:c,computed:l,tryTimes:u,solved:h,issue:m,fatal:f}=e.reduce((e,t)=>({cached:e.cached+t.measures.cached,simple:e.simple+t.measures.simple,computed:e.computed+t.measures.computed,tryTimes:e.tryTimes+t.measures.tryTimes,solved:e.solved+t.measures.solved,issue:e.issue+t.measures.issue,fatal:e.fatal+t.measures.fatal}),{cached:0,simple:0,computed:0,tryTimes:0,solved:0,issue:0,fatal:0});return{scoreN:e.length,totalCost:t,pickerCost:s,costPerMeasure:n,costPerTime:a,cached:o,simple:c,computed:l,tryTimes:u,solved:h,issue:m,fatal:f}},exports.abstractRegulationStats=e=>{const{baseCostTotal:t,topoCostTotal:s,baseMeasures:i,topoMeasures:r}=e.reduce((e,t)=>({baseCostTotal:e.baseCostTotal+t.baseCost,topoCostTotal:e.topoCostTotal+t.topoCost,baseMeasures:e.baseMeasures+t.baseMeasures.computed,topoMeasures:e.topoMeasures+(t.topoMeasures.solved+t.topoMeasures.issue+t.topoMeasures.fatal)}),{baseCostTotal:0,topoCostTotal:0,baseMeasures:0,topoMeasures:0}),n=i>0?t/i:null,a=r>0?s/r:null,{cached:o,baseComputed:c,baseSolved:l,topoSolved:u,topoIssue:h,topoFatal:m}=e.reduce((e,t)=>({cached:e.cached+t.baseMeasures.cached,baseComputed:e.baseComputed+t.baseMeasures.computed,baseSolved:e.baseSolved+t.baseMeasures.solved,topoSolved:e.topoSolved+t.topoMeasures.solved,topoIssue:e.topoIssue+t.topoMeasures.issue,topoFatal:e.topoFatal+t.topoMeasures.fatal}),{cached:0,baseComputed:0,baseSolved:0,topoSolved:0,topoIssue:0,topoFatal:0});return{scoreN:e.length,baseCostTotal:t,topoCostTotal:s,baseCostPerMeasure:n,topoCostPerMeasure:a,cached:o,baseComputed:c,baseSolved:l,topoSolved:u,topoIssue:h,topoFatal:m}},exports.constructSystem=vi,exports.convertImage=xi,exports.doRegulate=async(e,{pyClients:t,solver:s,solutionStore:i=$i,onSaveIssueMeasure:r})=>{t?.logger?.info(`[doRegulate] score: ${e.title}`),e.spartito=void 0,e.assemble();const n=e.makeSpartito();n.measures.forEach(t=>e.assignBackgroundForMeasure(t));const a=Date.now(),o=await Wi(n.measures,{solver:s,quotaMax:1e3,solutionStore:i,logger:t?.logger}),c=Date.now(),l=t?await async function(e,{pyClients:t,solver:s,solutionStore:i=$i,onSaveIssueMeasure:r}){t.logger.info(`[RegulateWithTopo] regulate score: ${e.title}, measures: ${e.spartito.measures.length}`);const n=e.spartito.measures.filter(e=>!Le(e).perfect);if(t.logger.info(`[RegulateWithTopo] basic issues: ${n.length}`),0===n.length)return{solved:0,issue:0,fatal:0};const a=[].concat(...n.map(e=>e.createClusters())),o=await t.predictScoreImages("topo",{clusters:a});console.assert(o.length===a.length,"prediction number mismatch:",a.length,o.length),a.forEach((e,t)=>{const s=o[t];console.assert(s,"no result for cluster:",e.index),e.assignPrediction(s)}),n.forEach(e=>{const t=a.filter(t=>t.index===e.measureIndex);e.applyClusters(t);const{matrixH:s}=Pe.estiamteMeasure(e);s.forEach((t,s)=>t.forEach((t,i)=>{e.matrixH[s][i]=.9*e.matrixH[s][i]+t*(1-.9)}))});const c=[],l=[];await Promise.all(n.map(async e=>{const n=e.regulationHash0,a=await Ui(e,{solver:s});a&&(e.applySolution(a),i.set(n,a),i.set(e.regulationHash,e.asSolution()),t.logger.info(`[RegulateWithTopo] solutionStore set: ${e.measureIndex}, ${n}, ${e.regulationHash}`));const o=Le(e);r?.({measureIndex:e.measureIndex,measure:new EditableMeasure(e),status:o.error?2:1}),o.perfect?c.push(e.measureIndex):o.error&&l.push(e.measureIndex)}));const u=n.length-c.length-l.length;return t.logger.info(`[RegulateWithTopo] score: ${e.title}, solved/issue/fatal: ${c.length}/${u}/${l.length}`),c.length&&t.logger.info(`[RegulateWithTopo] solved measures: ${c.join(", ")}`),l.length&&t.logger.info(`[RegulateWithTopo] error measures: ${l.join(", ")}`),{solved:c.length,issue:u,fatal:l.length}}(e,{pyClients:t,solver:s,solutionStore:i,onSaveIssueMeasure:r}):void 0;return{baseCost:c-a,topoCost:Date.now()-c,baseMeasures:o,topoMeasures:l,qualityScore:n.qualityScore}},exports.doSimpleRegulate=Yi,exports.encodeFindResource=function(e){const t=e.spartito.perform(),s=e.systems.map(e=>e.staves.map(e=>e?.maskImage)).flat(),i=s.filter(Boolean).length>s.length/2,r={},n=new Map,a=new Map,o=new Map;r.unitSize=e.unitSize,r.title={title:e.title};const c=e.pages[0].tokens;if(Array.isArray(c)&&c.length>0){const[t,...s]=c.filter(e=>e.type===K.Text&&"Title"===e.textType).sort((e,t)=>t.fontSize-e.fontSize);t&&(r.title.title=t.text,r.title.t={size:t.fontSize}),s?.length>0&&(s.sort((e,t)=>e.y-t.y),r.title.subtitle=s.map(e=>e.text).join("\n"),r.title.s={size:s.reduce((e,t)=>e+t.fontSize,0)/s.length});const i=c.filter(t=>t.type===K.Text&&"Author"===t.textType&&t.x>e.pages[0].width/2);i.length>0&&(r.title.composer=i.map(e=>e.text).join("\n"),r.title.c={size:i.reduce((e,t)=>e+t.fontSize,0)/i.length})}if(r.page={w:e.pages[0].width,h:e.pages[0].height},r.pages=e.pages.map(t=>{const s=t.source.dimensions.width/t.source.interval,i=t.source.dimensions.height/t.source.interval,[r,n,a,o]=t.source.matrix;return{src:t.source.url,w:s,h:i,x:0,y:0,l1:e.systems.indexOf(t.systems[0]),ls:t.systems.length,matrix:[r,n,a,o,-.5*r*s+-.5*i*a+.5*t.width||0,-.5*n*s+-.5*i*o+.5*t.height||0]}}),r.parts=[],r.lines=[],i){const t=e.staffLayout.partGroups.map(e=>e.range[0]===e.range[1]?[e.range[0]]:e.range),s=e.getTokenMap(),i=[];for(const[c,l]of t.entries()){const u=t.slice(0,c).flat().length,h={measures:[]};e.systems.forEach((r,m)=>{const f=r.staves.slice(),d=t.flat().map(e=>1<m+1&&(p[m+1]=p[m]);continue}const g=[];for(const e of l){const t=d[e];t&&g.push(...t.measures[m].getChords().map(t=>({chord:t,staffIndexInPart:e-u})))}let y=0;const v=p[m],x=[];g.forEach(({staffIndexInPart:l,chord:u})=>{const h=[];let d=u.tip?u.tip.x:u.right-u.left/2;u.noteIds.forEach((e,i)=>{const r=s.get(e),m=`n_${t.length>1?c+"_":""}${f}_${y}`;y++,n.set(r.id,m),a.set(r.id,(r.left+r.right)/2-v),o.set(r.id,l+1),h.push({line:2*-u.ys[i],id:m,staff:l+1,x:(r.left+r.right)/2-d})}),i[f]=i[f]||[],i[f].push(d-v);const p=e.spartito.measures[r.headMeasureIndex+m].events.filter(e=>e.noteIds.some(e=>u.noteIds.includes(e)));x.push({elems:h,x:d-v,type:2**u.division,...p.some(e=>e.grace)?{grace:{}}:{}})}),h.measures[f]={w:p[m+1]-p[m],staves:l.length,notes:x}}});let m=null;e.spartito.measures.forEach((s,i)=>{const r=e.spartito.measureIndexMapping[i],n=s.contexts.flat().filter(e=>js.includes(e.tokenType)&&l.includes(e.staff)).map(e=>{const s=t.find(t=>t.includes(e.staff));return{x:e.x,clef:Hs(e),staff:s.indexOf(e.staff)+1,tick:e.tick}});n.length>0&&h.measures[r]&&(h.measures[r].clefs=n);const a=s.basics.filter((e,t)=>1<0&&(r.parts[c]=h)}e.systems.forEach((s,i)=>{const n=[],a=s.staves[0],o=s.staves[s.staves.length-1],c=a.top+a.staffY-2,l=o.top+o.staffY-2,u=s.staves.slice(),h=t.flat().map(e=>!(1<h.find(t=>t?.index===e)||null),a=t.map((e,t)=>[t,!e]).filter(e=>e[1]);let o=null;a.length>0&&(o=Object.fromEntries(a.map(e=>[e[0]+1,{hide:e[1]}])));let l=0,u=0;const f=t.filter(e=>!!e);if(f.length>0){const e=f[0],t=f[f.length-1],s=e.top+e.staffY-2,i=t.top+t.staffY-2;l=s-c,u=i-s+4}const{list:d,last:p}=t.reduce((e,t,s)=>(null===e.last||null===t?0===s&&l>0?e.list.push(l-4):e.list.push(0):e.list.push(t.top+t.staffY-(e.last.top+e.last.staffY)-4),e.last=t||e.last,e),{last:m,list:[]});m=p;const g=t.map(e=>{if(e?.maskImage){const t=e.imagePosition;return{src:e.maskImage,x:t.x,y:s.top+e.top+t.y-(s.top+e.top+e.staffY-2),w:t.width,h:t.height}}return null}),y=e.spartito.measures[s.headMeasureIndex];n.push({distances:d,imgs:g,y:l,staves:r.length,parti:i,height:u,...o?{details:o}:{},clef:Object.fromEntries(e.spartito.measures[s.headMeasureIndex]?.contexts.flat().filter(e=>js.includes(e.tokenType)&&r.includes(e.staff)).map(e=>[e.staff,Hs(e)])),fifths:y.basics.filter((e,t)=>1<e.spartito.measureIndexMapping[s.headMeasureIndex+i]).filter(e=>Number.isFinite(e));r.lines[i]={m1:f[0],m2:f.length>0?f[f.length-1]+1:void 0,x:s.left,y:s.top+c,w:s.measureBars[s.measureBars.length-1],h:l-c+4,lineStaves:n}});const c={0:"default",1:"brace",2:"bracket",3:"square"},l=it(e.staffLayoutCode),u=l.partGroups.map(e=>({sort:e.range[0],part:e})).sort((e,t)=>e.sort-t.sort).map(e=>e.part);r.groups=l.groups.filter(e=>0!==e.group.type).map((e,t)=>({type:c[e.group.type],p1:u.findIndex(t=>t.range.includes(e.range[0])),p2:u.findIndex(t=>t.range.includes(e.range[e.range.length-1]))})).filter(e=>"default"!==e.type)}let l;if(t&&(r.measInfo=t.notation.measures.map((e,t)=>{const s=new Map;return e.notes.forEach(e=>{s.set(e.tick,[...s.get(e.tick)||[],a.get(e.id)])}),Array.from(s.entries()).sort((e,t)=>+e[0]-t[0]).reduce((e,t,s)=>{const i=t[1].find(t=>t>e.last)||t[1][0];return e.list.push(i),e.last=i,e},{last:null,list:[]}).list.filter(Number.isFinite)})),t){l={};const s=new Map;let i,r;t.notation.measures.forEach((e,t)=>{const{numerator:s,denominator:n}=e.timeSignature;l.beats||l.beatsUnit||(l.beats=s,l.beatsUnit=n,i=s,r=n),l.beatInfos=l.beatInfos||[],i===s&&r===n||(i=s,r=n,l.beatInfos.push({tick:e.tick,beats:s,beatsUnit:n})),l.tempos=l.tempos||[],e.events.forEach(t=>{"meta"===t.data.type&&"setTempo"===t.data.subtype&&l.tempos.push({tick:e.tick,tempo:t.data.microsecondsPerBeat})})}),l.measures=t.notation.measures.reduce((e,t,i)=>{const r=Array.from(new Set(t.notes.map(e=>e.tick))).sort((e,t)=>e-t);return t.notes.forEach(e=>{s.set(e.id,r.indexOf(e.tick))}),e[t.tick]={measure:i,duration:t.duration,note_ticks:r},e},{}),l.measureInfos=t.notation.measures.map((e,t)=>({number:String(t+1),fifths:e.keySignature,beats:e.timeSignature.numerator,beatUnit:e.timeSignature.denominator}));const a=t.notation.toPerformingMIDI(t.notation.measures.map((e,t)=>t+1)).tracks,{partGroups:c}=e.staffLayout;let u=a.map((t,s)=>{const i=c[s].key;let r;switch(i){case"vi":case"vi1":case"vi2":r=40;break;case"viola":r=42;break;case"vo":r=55;break;case"basso":r=71;break;default:r=0}return{program:r,channel:s,name:e.instrumentDict[i]??"Piano",track:t}});if(c.some(e=>e.group.grand)){const t=/l\.?h\.?|左手|left hand/i,s=/r\.?h\.?|右手|right hand/i,i=Object.entries(e.instrumentDict).filter(([e,i])=>t.test(i)||s.test(i)).map(([e,s])=>({key:e,hand:t.test(s)?"left":"right"}));let r,n=null;if(2===i.length&&i[0].hand!==i[1].hand){const t=i.find(e=>"left"===e.hand),s=i.find(e=>"right"===e.hand);n=[e.staffLayout.staffIds.findIndex(e=>e===s?.key),e.staffLayout.staffIds.findIndex(e=>e===t?.key)],r=c.findIndex(e=>e.range[0]<=Math.min(...n)&&e.range[1]>=Math.max(...n))}if(Number.isFinite(r)&&r>-1){const e=u[r],t=[];e.track.forEach(e=>{Number.isFinite(e.staff)&&(t[e.staff]||(t[e.staff]=[]),t[e.staff].push(e)),"meta"===e.type&&t.forEach(t=>{t.push(e)})}),u.splice(r,1,t.filter(Boolean).map(t=>({...e,track:t}))),u=u.flat(),l.rightHandTrack=n[0],l.leftHandTrack=n[1]}else u.sort((e,t)=>e===u[r]?-1:0)}l.tracks=u.map(({program:e,channel:t,name:s})=>({program:e,channel:t,name:s}));const h=u.map(({track:e})=>{const t=new Map;return e.map(e=>{if("noteOn"===e.subtype&&t.set(e.noteNumber,e),"noteOff"===e.subtype){const s=t.get(e.noteNumber);s?.noteNumber===e.noteNumber&&(s.duration=e.ticks-s.ticks)}return e})}),m=new Map(Object.entries(l.measures).map(([e,t])=>[t.measure,+e]));l.events=h.map((e,t)=>e.filter(e=>"channel"===e.type).map(e=>{e?.ids?.[0]&&(e.numId=n.get(e.ids[0]));let i=[0,0,0];switch(e.subtype){case"noteOn":i=[144|e.channel,e.noteNumber,e.velocity];break;case"noteOff":i=[128|e.channel,e.noteNumber,e.velocity?e.velocity:0];break;case"noteAftertouch":i=[160|e.channel,e.noteNumber,e.amount];break;case"controller":i=[176|e.channel,e.controllerType,e.value];break;case"programChange":i=[192|e.channel,e.programNumber,0];break;case"channelAftertouch":i=[208|e.channel,e.amount,0];break;case"pitchBend":i=[224|e.channel,255&e.value,e.value>>7&255];break;default:throw new Error("unhandled event subtype:"+e.subtype)}return{..."noteOn"===e.subtype?{id:n.get(e?.ids?.[0])}:{},tick:e.ticks,channel:e.channel,duration:e.duration,track:t,event:i,elem_ids:e?.ids.map(e=>n.get(e)),measure:e.measure-1,meas_start_tick:m.get(e.measure-1),staff:o.get(e.ids[0]),note:s.get(e.ids[0])}})).flat(1).sort((e,t)=>{for(const s of["tick","measure","track"])if(e[s]!==t[s])return e[s]-t[s];return 0})}return{scoreJson:r,midiJson:l}},exports.evaluateScoreQuality=async(e,t)=>(e.spartito?.regulated||await Yi(e,t),e.spartito.regulated?e.spartito.qualityScore:null),exports.getScoreJsonImages=e=>[...e.pages.map(e=>e?.src),...e.lines.map(e=>e.lineStaves.map(e=>e.imgs)).flat(2).map(e=>e?.src).filter(Boolean)],exports.predictPages=async(e,t,s={outputWidth:1200,pageStore:Ai,onReplaceImage:Pi})=>{const i=e.logger;s.outputWidth=s.outputWidth||1200,s.pageStore=s.pageStore||Ai,s.onReplaceImage=s.onReplaceImage||Pi,s.processes=Array.isArray(s.processes)&&s.processes.length>0?s.processes:["layout","text","gauge","mask","semantic","brackets"];const r=new OMRProgress(s.onProgress),n=Date.now();t.forEach(e=>{e.layout?.detection?e.layout.detection.areas=e.layout.detection?.areas?.filter(e=>e?.staves?.middleRhos?.length>0):delete e.layout});const a=new Score({title:s?.title,stavesCount:2,paperOptions:{raggedLast:!0,raggedLastBottom:!0},headers:{},instrumentDict:{},settings:{enabledGauge:s.processes.includes("gauge"),semanticConfidenceThreshold:1}});i.info(`[predictor]: download_source_images-${t.length}`);const o=await Promise.all(t.map(e=>c.loadImage(e.url)));i.info(`[predictor]: source_images_downloaded-${t.length}`);const l=o.map((e,s)=>function(e,t){let s=e.height/e.width*t;const i=new c.Canvas(t,s);return i.getContext("2d").drawImage(e,0,0,t,t*e.height/e.width),i}(e,t[s].layout?.sourceSize?.width??e.width));r.setTotal("layout",o.length),r.setTotal("text",o.length);const u=await Promise.all(l.map(async(s,i)=>t[i].layout?!t[i].enableGauge&&t[i]?.layout?.detection?.areas?.length?(await e.predictScoreImages("layout$reinforce",[s.toBufferSync("png")],[t[i].layout]))?.[0]:t[i].layout:(await e.predictScoreImages("layout",[s.toBufferSync("png")]))?.[0]));u.forEach(e=>{e.detection.areas=e.detection?.areas?.filter(e=>e?.staves?.middleRhos?.length>0)});const h=new Map,m=async e=>{const t=await s.onReplaceImage(e);h.set(e,t)};async function f(e,i){const{url:n,key:o,layout:u,enableGauge:h}=t[i],m=yi(JSON.stringify({key:o||n,layout:u,enableGauge:h})),f=await s.pageStore.get(m),d=!s.renew&&(f&&!t[i].renew||!e.detection.areas?.length),p=a.pages[i]=d&&f?b(f,$s):new Page({source:{name:o||("string"==typeof n&&/https?:\/\//.test(n)?n:null),size:0,url:n,crop:{unit:"%",x:0,y:0,width:100,height:100},dimensions:e.sourceSize,matrix:[Math.cos(e.theta),-Math.sin(e.theta),Math.sin(e.theta),Math.cos(e.theta),0,0],interval:e.interval,needGauge:t[i].enableGauge},layout:e.detection}),g=d?null:await async function({page:e,score:t,pageCanvas:s}){if(!e?.layout?.areas?.length)return null;e.width=t.pageSize.width/t.unitSize,e.height=t.pageSize.height/t.unitSize;const i=new c.Canvas(s.width,s.height),r=i.getContext("2d");r.save();const{width:n,height:a}=i,[o,l,u,h]=e.source.matrix;r.setTransform(o,l,u,h,-.5*n+.5*o*n+.5*l*a,-.5*a+.5*u*n+.5*h*a),r.drawImage(s,0,0),r.restore();const m=e.source.interval;return e.layout.areas.map((t,i)=>{console.assert(t.staves?.middleRhos?.length,"[shootImageByDetection] empty area:",t);const n=r.getImageData(t.x,t.y,t.width,t.height),a=new c.Canvas(t.width,t.height);a.getContext("2d").putImageData(n,0,0);const o=t.staves,l={width:t.width,height:t.height},u=s.width/2/m,h=s.height/2/m,f={x:(t.x+t.staves.phi1)/m-u+e.width/2,y:t.y/m-h+e.height/2};e.systems[i]=vi({page:e,backgroundImage:a.toBufferSync("png"),detection:o,imageSize:l,position:f})}),i}({score:a,page:p,pageCanvas:l[i]});return r.increase("layout"),{page:p,omit:d,hash:m,correctCanvas:g}}!function(e,t,s){const i=t.filter(e=>e&&e.detection&&e.detection.areas?.length).map((e,t)=>{const s=Math.min(...e.detection.areas.filter(e=>e.staves?.middleRhos?.length).map(e=>e.staves.interval)),i=e.sourceSize;return{...e,index:t,vw:i.width/s,hwr:i.height/i.width}});if(!i.length)throw new Error("empty result");const r=i.sort((e,t)=>t.vw-e.vw)[0],n=Math.max(...i.map(e=>e.hwr));e.unitSize=s/r.vw,e.pageSize={width:s,height:s*n}}(a,u,s.outputWidth);const d=u.reduce((e,t)=>e+(t.detection.areas?.length??0),0),p=u.reduce((e,t)=>e+(t.detection.areas?.reduce?.((e,t)=>e+(t.staves?.middleRhos?.length??0),0)??0),0);r.setTotal("gauge",p),r.setTotal("mask",p),r.setTotal("semantic",p),r.setTotal("brackets",d);const g=[],y=[],v=Date.now();let x=0;for(const n of u.keys()){const o=[],{page:l,correctCanvas:d,omit:p,hash:v}=await f(u[n],n);if(o.push(m(l.source.url)),o.push(...l.systems.map(e=>m(e.backgroundImage))),i.info(`[predictor]: check_cache_pageIndex-${n} omit: ${p}`),p)y.push(n);else{const u=l.systems.map((e,t)=>e.staves.map((s,i)=>({pageIndex:n,systemIndex:t,staffIndex:i,page:l,system:e,staff:s}))).flat(1);await Mi([async()=>{if(!s.processes.includes("brackets"))return;const t=l.layout,a=l.source.interval,o=Date.now(),u=l.systems.map((e,s)=>{const{x:i,y:r,staves:{middleRhos:n,phi1:o}}=t.areas[s],l=n[0],u=n[n.length-1],h={x:i+o-4*a,y:r+l-4*a,width:8*a,height:u-l+8*a},m=new c.Canvas(64,h.height/a*8);return m.getContext("2d").drawImage(d,h.x,h.y,h.width,h.height,0,0,m.width,m.height),{system:e,buffer:m.toBufferSync("png")}});i.info(`[predictor]: brackets js [pageIndex-${n}] duration: ${Date.now()-o}`);const h=await e.predictScoreImages("brackets",{buffers:u.map(e=>e.buffer)});r.increase("brackets",u.length),u.forEach(({system:e},t)=>{h[t]&&(e.bracketsAppearance=h[t])})},async()=>{if(s.processes.includes("text"))try{const t=Date.now(),o=d.toBufferSync("png"),c=(await e.predictScoreImages("textLoc",[o]))[0].filter(e=>e.score>0);if(c.length>0){const[t]=await e.predictScoreImages("textOcr",{buffers:[o],location:c});l.assignTexts(t.areas,t.imageSize),l.assemble()}if(i.info(`[predictor]: text js [pageIndex-${n}] duration: ${Date.now()-t}`),r.increase("text"),!s.title){const e=a.pages[0].tokens;if(Array.isArray(e)&&e.length>0){const[t]=e.filter(e=>e.type===K.Text&&"Title"===e.textType).sort((e,t)=>t.fontSize-e.fontSize);t&&(a.title=t.text)}}}catch(e){i.error(`[predictor]: text js [pageIndex-${n}] ${JSON.stringify(e)}`)}},async()=>{var c;await(c=async()=>{if(s.processes.includes("gauge")&&!1!==t[n].enableGauge){const t=await e.predictScoreImages("gauge",await Promise.all(u.map(async({staffIndex:e,system:t})=>{const s=Date.now(),r=await Ei(t,e,{paddingLeft:Si,spec:bi});return i.info(`[predictor]: gauge js shoot [page-${n}, staff-${e}] duration: ${Date.now()-s}`),r.toBufferSync("png")})));for(const[s,{system:n,staff:a,pageIndex:c,staffIndex:l}]of u.entries()){const u=Date.now();i.info(`[predictor]: gauge js [page-${c}, staff-${l}] start..`),await Ii({pyClients:e,system:n,staff:a,staffIndex:l,gaugeImage:t[s].image}),i.info(`[predictor]: gauge js [page-${c}, staff-${l}] duration: ${Date.now()-u}`),r.increase("gauge"),o.push(m(a.backgroundImage))}}else for(const[e,{system:t,staff:s,staffIndex:i}]of u.entries())await Ni({system:t,staff:s,staffIndex:i}),o.push(m(s.backgroundImage))},c()),await Mi([async()=>{if(!s.processes.includes("mask"))return;const t=await e.predictScoreImages("mask",u.map(({staff:e})=>e.backgroundImage));for(const[e,{staff:s,staffIndex:a}]of u.entries()){const c=Date.now();await Ci({staff:s,staffIndex:a,maskImage:t[e].image}),i.info(`[predictor]: mask js [page-${n}, ${e}, staff-${a}] duration: ${Date.now()-c}`),r.increase("mask"),o.push(m(s.maskImage))}},async()=>{if(!s.processes.includes("semantic"))return;const t=b(await e.predictScoreImages("semantic",u.map(({staff:e})=>e.backgroundImage)),$s);u.forEach(({system:e})=>e.clearTokens());for(const[e,{staffIndex:s,system:o,staff:c}]of u.entries()){const l=Date.now();await _i({score:a,system:o,staff:c,staffIndex:s,graph:t[e]}),i.info(`[predictor]: semantic js [page-${n}, system-${o.index}, staff-${c.index}] duration: ${Date.now()-l}`),r.increase("semantic")}}])}]),++x}g.push(Promise.all(o).then(()=>(Oi(l,e=>h.get(e)),i.info(`[predictor]: pageStore set: [${n}]`),s.pageStore.set(v,JSON.stringify(l)))))}const S=Date.now();await Promise.all(g),i.info(`[predictor]: inferenceStaffLayout: ${a.title}, [${a.systems.length}]`),a.inferenceStaffLayout(),i.info(`[predictor]: done: ${a.title}`),a.assemble();const k=Date.now();return{score:a,omitPages:y,stat:{cost:k-n,pagesCost:S-v,pages:x}}},exports.regulateWithBeadSolver=async(e,{logger:t,pickers:s,solutionStore:i=$i,ignoreCache:r,freshOnly:n,onSaveIssueMeasure:a,onProgress:o,onPassStart:c})=>{e.spartito=void 0,e.assemble();const l=e.makeSpartito();l.measures.forEach(t=>e.assignBackgroundForMeasure(t));const u=Date.now();t?.info(`[regulateWithBeadSolver] begin, measure total: ${l.measures.length}.`,r?"ignoreCache":"",n?"freshOnly":"");const h=l.measures.filter(e=>e.events?.length&&!e.patched).map(e=>({origin:e.deepCopy(),current:e,evaluation:void 0,baseQuality:0}));for(const e of l.measures.filter(e=>e.events?.length)){const t=s.find(t=>t.n_seq>e.events.length+1);t&&await Fs(e,t)}l.rectifyTimeSignatures(t),s.forEach(e=>e.cost=0);const m={cached:0,simple:0,computed:0,tryTimes:0,solved:0,issue:0,fatal:0};if(t?.info("[regulateWithBeadSolver] measures estimation finished."),i&&!r)for(const e of h){const t=await i.get(e.origin.regulationHash0);t&&(e.current.applySolution(t),++m.cached,e.evaluation=Le(e.current),e.baseQuality=e.evaluation.qualityScore)}t?.info("[regulateWithBeadSolver]",`${m.cached}/${h.length}`,"solutions loaded.");const f=t?null:process.stdout;m.cached&&f?.write(`${m.cached}c`),h.forEach(e=>{const i=s.find(t=>t.n_seq>e.current.events.length+1);i?e.picker=i:t?.info(`[regulateWithBeadSolver] measure[${e.current.measureIndex}] size out of range:`,e.current.events.length)});const d=h.filter(e=>e.picker&&(!e.evaluation||!e.evaluation.fine&&!n));d.forEach(e=>{const s=e.current.deepCopy();s.staffGroups=e.current.staffGroups,s.regulate({policy:"simple"});const i=Le(s);(!e.evaluation||i.qualityScore>e.evaluation.qualityScore)&&(e.evaluation=i,Object.assign(e.current,s),i.perfect&&(t?.info(`[regulateWithBeadSolver] measure[${e.current.measureIndex}] regulated by simple policy.`),++m.simple))}),m.computed=d.length-m.simple,m.simple&&f?.write(`${m.simple}s`);const p=(e,s,i)=>{t?.info(`[regulateWithBeadSolver] measure[${e.measureIndex}/${l.measures.length}] regulated${i?"+":"-"}: ${s.qualityScore.toFixed(3)}, ${s.fine?"solved":s.error?"error":"issue"}, ${e.regulationHash}`),f?.write(`[${s.fine?"32":s.error?"31":"33"}m${i?"+":"-"}`)},g=l.measures.length,y=()=>d.filter(e=>!e.evaluation?.fine).length,v=o?(e,t,s,i)=>{o(e,t,s,{pass:i.pass,remaining:y(),total:g})}:void 0;c?.(1,"Imperfect",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.05,quotaMax:200,quotaFactor:3,ptFactor:1},ji.Imperfect,1,v),c?.(2,"NotFine",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.08,quotaMax:1e3,quotaFactor:20,ptFactor:1.6},ji.NotFine,2,v),c?.(3,"ErrorOnly",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.08,quotaMax:1e3,quotaFactor:40,ptFactor:3},ji.ErrorOnly,3,v),d.forEach(({evaluation:e,baseQuality:t,current:s,origin:r})=>{e.fine?++m.solved:e.error?++m.fatal:++m.issue,(e.qualityScore>t||!t)&&(i.set(r.regulationHash0,{...s.asSolution(r),priority:-s?.solutionStat?.loss}),s.regulationHash!==r.regulationHash0&&i.set(s.regulationHash,{...s.asSolution(),priority:-s?.solutionStat?.loss})),e.fine||a?.({measureIndex:s.measureIndex,measure:new EditableMeasure(s),status:e.error?2:1})});const x=Date.now(),S=s.reduce((e,t)=>e+t.cost,0),b=l.qualityScore,k=x-u;return t?.info("[regulateWithBeadSolver] done in ",k,"ms, qualityScore:",b),n&&(m.cached=0),{totalCost:x-u,pickerCost:S,measures:m,qualityScore:b}},exports.replaceScoreJsonImages=(e,t=e=>e)=>{const s=JSON.parse(JSON.stringify(e));return s.pages.forEach(e=>{e?.src&&(e.src=t(e?.src))}),s.lines.forEach(e=>{e.lineStaves.forEach(e=>{e.imgs.forEach(e=>{e?.src&&(e.src=t(e.src))})})}),s},exports.saveEditableMeasures=async(e,t,s,{status:i=2,solutionStore:r}={})=>{e.assemble();const n=e.spartito||e.makeSpartito(),a=t.map(e=>n.measures.find(t=>t.measureIndex===e)).filter(Boolean);if(r){const e=await r.batchGet(a.map(e=>e.regulationHash0));a.forEach((t,s)=>{const i=e[s];i&&t.applySolution(i)})}a.forEach(e=>{s({measureIndex:e.measureIndex,measure:new EditableMeasure(e),status:i})})},exports.starry=$s,exports.updateScorePatches=(e,t,s={})=>{if(console.assert(t.every(e=>e.validRegulated),"[updateScorePatches] some measures not valid regulated:",t.filter(e=>!e.validRegulated)),e.patches=t.map(e=>e.createPatch()),s?.solutionStore){e.assemble();const i=e.makeSpartito();t.forEach(e=>{if(s.solutionStore.set(e.regulationHash,{...e.asSolution(),priority:1}),e.regulationHash0!==e.regulationHash){const t=i.measures.find(t=>t.measureIndex===e.measureIndex);s.solutionStore.set(e.regulationHash0,{...e.asSolution(t),priority:1})}})}}; //# sourceMappingURL=index.js.map diff --git a/backend/omr/dist/index.js.map b/backend/omr/dist/index.js.map index 6899a47c984705b527d69e0a0bfc3e78fccbe13b..11407b64ba07ef8f111cfeedc34c53ab40574bbc 100644 --- a/backend/omr/dist/index.js.map +++ b/backend/omr/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["../../libs/browserComponents.ts","../../../src/starry/aux_/typedJSON.ts","../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/semanticPoint.ts","../../../src/starry/utils.ts","../../../src/starry/logger.ts","../../../src/starry/equationSolver.ts","../../../src/starry/eventTopology.ts","../../../src/starry/token.ts","../../../src/starry/patch.ts","../../../src/starry/term.ts","../../../src/starry/spartitoMeasure.ts","../../../src/starry/interfaces.ts","../../../src/starry/editableMeasure.ts","../../../src/starry/measureEvaluator.ts","../../../src/measureLayout/measureLayout.ts","../../../src/measureLayout/grammar.jison.js","../../../src/staffLayout/staffLayout.ts","../../../src/staffLayout/grammar.jison.js","../../../src/staffLayout/parser.ts","../../../src/starry/semanticGraph.ts","../../../src/starry/scoreComponents.ts","../../../src/starry/semanticTopology.ts","../../../src/performer/types.ts","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifile.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/stream.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifileEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/streamEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiSequence.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MusicNotation.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiPlayer.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/config.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/node.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/navigator.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiUtils.js","../../../node_modules/@k-l-lambda/music-widgets/index.js","../../../src/performer/notation.ts","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/sha256.js","../../../src/starry/hashVector.ts","../../../src/starry/spartito.ts","../../../src/starry/staffContext.ts","../../../src/starry/score.ts","../../../src/measureLayout/parser.ts","../../../src/starry/beadSolver.ts","../../../src/isomorphic/converter.ts","../../../node_modules/events/events.js","../../libs/async-queue.ts","../../libs/ZeroClient.ts","../../libs/PyProcessor.ts","../../../node_modules/util/support/isBuffer.js","../../../node_modules/util/node_modules/inherits/inherits_browser.js","../../../node_modules/util/node_modules/inherits/inherits.js","../../../node_modules/util/util.js","../../libs/predictors.ts","../../../node_modules/crypt/crypt.js","../../../node_modules/charenc/charenc.js","../../../node_modules/sha1/sha1.js","../../libs/util.ts","../../libs/predictPages.ts","../../../src/starry/measureRectification.ts","../../libs/store.ts","../../libs/regulationBead.ts","../../libs/regulation.ts","../src/index.ts"],"sourcesContent":["globalThis.btoa = (str) => Buffer.from(str, 'binary').toString('base64');\nglobalThis.atob = (str) => Buffer.from(str, 'base64').toString('binary');\n","import pick from 'lodash/pick';\n\nconst recoverJSON = (json: string | object, classDict): T => {\n\tif (typeof json === 'object') json = JSON.stringify(json);\n\n\treturn JSON.parse(json, (_, value) => {\n\t\tif (value && typeof value === 'object' && value.__prototype) {\n\t\t\tconst Class = classDict[value.__prototype];\n\t\t\tif (Class) {\n\t\t\t\tconst { __prototype, ...fields } = value;\n\t\t\t\treturn new Class(fields);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t});\n};\n\nconst deepCopy = (o: any, dict: Map = null): any => {\n\tdict = dict || new Map();\n\tif (dict.get(o)) return dict.get(o);\n\n\tif (Array.isArray(o)) {\n\t\tconst result = [];\n\t\tdict.set(o, result);\n\n\t\to.forEach((e) => result.push(deepCopy(e, dict)));\n\n\t\treturn result;\n\t} else if (o && typeof o === 'object') {\n\t\tconst result = {};\n\t\tdict.set(o, result);\n\n\t\tObject.entries(o).forEach(([key, value]) => (result[key] = deepCopy(value, dict)));\n\t\tObject.setPrototypeOf(result, o.__proto__);\n\n\t\treturn result;\n\t}\n\n\treturn o;\n};\n\nclass SimpleClass {\n\tassign(data?: object) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\ttoJSON() {\n\t\tconst cls = this.constructor as any;\n\n\t\tconst serializedKeys = cls.serializedKeys || (cls.blackKeys && Object.keys(this).filter((key) => !cls.blackKeys.includes(key)));\n\t\tconst fields = serializedKeys ? pick(this, serializedKeys) : this;\n\n\t\treturn {\n\t\t\t__prototype: cls.className,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tdeepCopy(): this {\n\t\treturn deepCopy(this);\n\t}\n}\n\nexport { recoverJSON, SimpleClass };\n","var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import { EventFeature, BackgroundImage, EventPredisposition } from './interfaces';\nimport { StemBeam } from './term';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum EventElementType {\n\tPAD,\n\tBOS,\n\tEOS,\n\n\tCHORD,\n\tREST,\n}\n\ninterface EventElement {\n\thref?: string;\n\tdisposed?: boolean;\n\tindex?: number;\n\tvoice?: number;\n\n\ttype: EventElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\tfeature: EventFeature;\n\tpivotX?: number;\n\theadY?: number;\n\n\t// targets\n\ttick?: number;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: StemBeam;\n\tstemDirection?: string;\n\tgrace?: boolean;\n\ttremoloCatcher?: boolean;\n\ttimeWarped?: boolean;\n\tfullMeasure?: boolean; // full measure rest\n\tfake?: boolean;\n\n\torder?: number;\n\n\tpredisposition?: EventPredisposition;\n}\n\ntype Matrix = number[][];\n\ninterface Annotation {\n\tloss: number;\n\tgrant: boolean;\n\tpatched: boolean; // from manually solved measure\n}\n\nclass EventCluster extends SimpleClass {\n\tstatic className = 'EventCluster';\n\tstatic blackKeys = ['id'];\n\n\tid?: string; // for db access\n\tindex?: number;\n\tduration?: number;\n\tstaffY0?: number; // the first staff top + staffY\n\n\tsignatureDuration: number;\n\telements: EventElement[];\n\tmatrixH?: Matrix; // matrix N x N, [next][prev]\n\n\tbackgroundImages?: BackgroundImage[];\n\n\tannotation?: Annotation;\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget regular(): boolean {\n\t\treturn (\n\t\t\tthis.elements.some((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !elem.fake) &&\n\t\t\tthis.elements.every((elem) => [elem.x, elem.y1, elem.y2, elem.tick].every(Number.isFinite)) &&\n\t\t\tthis.elements\n\t\t\t\t.slice(1)\n\t\t\t\t.every(\n\t\t\t\t\t(elem, ei) =>\n\t\t\t\t\t\telem.fake ||\n\t\t\t\t\t\tthis.elements[ei].fake ||\n\t\t\t\t\t\telem.grace ||\n\t\t\t\t\t\tthis.elements[ei].grace ||\n\t\t\t\t\t\telem.fullMeasure ||\n\t\t\t\t\t\tthis.elements[ei].fullMeasure ||\n\t\t\t\t\t\telem.tick <= this.elements[ei].tick ||\n\t\t\t\t\t\telem.x > this.elements[ei].x\n\t\t\t\t)\n\t\t);\n\t}\n\n\tget grant(): boolean {\n\t\treturn this.annotation && this.annotation.grant;\n\t}\n\n\tget feature(): Partial {\n\t\treturn {\n\t\t\tindex: this.index,\n\t\t\telements: this.elements,\n\t\t};\n\t}\n\n\tget estimatedDuration(): number {\n\t\tconst endElem = this.elements.find((elem) => elem.type === EventElementType.EOS);\n\n\t\tconst tick = endElem?.predisposition ? endElem.predisposition?.tick : endElem?.tick;\n\n\t\treturn Number.isFinite(tick) ? tick : this.duration;\n\t}\n\n\tassignPrediction(prediction: any): void {\n\t\tconsole.assert(prediction.index === this.index, 'index mismatch:', prediction.index, this.index);\n\n\t\tthis.matrixH = prediction.matrixH;\n\t\tprediction.elements.forEach((pe) => {\n\t\t\tconst { index, ...predisposition } = pe;\n\t\t\tconst elem = this.elements.find((elem) => elem.index === index);\n\t\t\tconsole.assert(elem, 'element not found:', index);\n\n\t\t\tif (elem) elem.predisposition = predisposition;\n\t\t});\n\t}\n}\n\nclass EventClusterSet extends SimpleClass {\n\tstatic className = 'EventClusterSet';\n\n\tname?: string;\n\n\tclusters: EventCluster[];\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\ttrimIrregular(): number {\n\t\tlet ir = 0;\n\n\t\tthis.clusters = this.clusters.filter((cluster) => {\n\t\t\tconst regular = cluster.regular;\n\t\t\tif (!regular) {\n\t\t\t\tconsole.debug('irregular cluster:', cluster);\n\t\t\t\t++ir;\n\t\t\t}\n\n\t\t\treturn regular;\n\t\t});\n\n\t\tif (ir) console.debug('Irregular clusters trimmed:', `${ir}/${this.clusters.length + ir}`);\n\t\telse console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`);\n\n\t\treturn ir;\n\t}\n}\n\nexport { EventElementType, EventElement, EventCluster, EventClusterSet };\n","import { TextType } from './interfaces';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\n\nenum TokenType {\n\t// clefs\n\tClefG = 'clefs-G', // clefs.G_change\n\tClefF = 'clefs-F', // clefs.F_change\n\tClefC = 'clefs-C', // clefs.C_change\n\n\t// time signature\n\tTimesigC44 = 'timesig-C44',\n\tTimesigC22 = 'timesig-C22',\n\tTimesigZero = 'zero|timesig0',\n\tTimesigOne = 'one|timesig1',\n\tTimesigTwo = 'two|timesig2',\n\tTimesigThree = 'three|timesig3',\n\tTimesigFour = 'four|timesig4',\n\tTimesigFive = 'five|timesig5',\n\tTimesigSix = 'six|timesig6',\n\tTimesigSeven = 'seven|timesig7',\n\tTimesigEight = 'eight|timesig8',\n\tTimesigNine = 'nine|timesig9',\n\n\t// octave shifts\n\tOctaveShift8va = 'octave-a',\n\tOctaveShift8vb = 'octave-b',\n\tOctaveShift0 = 'octave-0',\n\n\t// numbers\n\tZero = 'zero|n0',\n\tOne = 'one|n1',\n\tTwo = 'two|n2',\n\tThree = 'three|n3',\n\tFour = 'four|n4',\n\tFive = 'five|n5',\n\tSix = 'six|n6',\n\tSeven = 'seven|n7',\n\tEight = 'eight|n8',\n\tNine = 'nine|n9',\n\n\t// accidentals\n\tAccNatural = 'accidentals-natural',\n\tAccSharp = 'accidentals-sharp',\n\tAccDoublesharp = 'accidentals-doublesharp',\n\tAccFlat = 'accidentals-flat',\n\tAccFlatflat = 'accidentals-flatflat',\n\tKeyNatural = 'accidentals-natural|key-natural',\n\tKeySharp = 'accidentals-sharp|key-sharp',\n\tKeyFlat = 'accidentals-flat|key-flat',\n\n\t// noteheads\n\tNoteheadS0 = 'noteheads-s0',\n\tNoteheadS1 = 'noteheads-s1',\n\tNoteheadS2 = 'noteheads-s2',\n\tNoteheadS1stemU = 'noteheads-s1|noteheads-s1-u',\n\tNoteheadS1stemD = 'noteheads-s1|noteheads-s1-d',\n\tNoteheadS2stemU = 'noteheads-s2|noteheads-s2-u',\n\tNoteheadS2stemD = 'noteheads-s2|noteheads-s2-d',\n\n\t// rests\n\tRest0 = 'rests-0o',\n\tRest1 = 'rests-1o',\n\tRest2 = 'rests-2',\n\tRest3 = 'rests-3',\n\tRest4 = 'rests-4',\n\tRest5 = 'rests-5',\n\tRest6 = 'rests-6',\n\tRest0W = 'rests-0',\n\tRestM1 = 'rests-M1',\n\n\t// flags\n\tFlag3 = 'flags-u3', // flags.d3\n\tFlag4 = 'flags-u4', // flags.d4\n\tFlag5 = 'flags-u5', // flags.d5\n\tFlag6 = 'flags-u6', // flags.d6\n\tFlag7 = 'flags-u7', // flags.d7\n\tFlag8 = 'flags-u8', // flags.d8\n\n\t// beams\n\tBeamLeft = '|beam-left',\n\tBeamRight = '|beam-right',\n\tBeamContinue = '|beam-continue',\n\n\t// tremolos\n\tTremoloLeft = '|tremolo-left',\n\tTremoloRight = '|tremolo-right',\n\tTremoloMiddle = '|tremolo-middle',\n\n\t// slur & tie\n\tSlurBegin = '|slur-begin',\n\tSlurEnd = '|slur-end',\n\tTieBegin = '|tie-begin',\n\tTieEnd = '|tie-end',\n\n\t// volta\n\tVoltaLeft = '|volta-left',\n\tVoltaRight = '|volta-right',\n\n\tVoltaAlternativeBegin = '|volta-alter-begin',\n\t//VoltaAlternativeEnd = \"|volta-alter-end\",\n\n\t// vertical bars\n\t//BarMeasure = \"|bar-measure\",\n\tBarTerminal = '|bar-terminal',\n\tBarSegment = '|bar-segment',\n\n\t// dots (duration)\n\tDot = '|dot',\n\tDotDot = '|dotdot',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\t//\n\tWedgeCrescendo = '|wedge-crescendo',\n\tWedgeDiminuendo = '|wedge-diminuendo',\n\tWedgeClose = '|wedge-close',\n\n\tCrescendoBegin = '|wedge-crescendo',\n\tDecrescendoBegin = '|wedge-diminuendo',\n\tCrescendoEnd = '|wedge-close',\n\tDecrescendoEnd = '|wedge-close',\n\n\t// scripts\n\tScriptFermata = 'scripts-ufermata', // scripts.dfermata\n\tScriptShortFermata = 'scripts-ushortfermata', // scripts.dshortfermata\n\tScriptSforzato = 'scripts-sforzato',\n\tScriptStaccato = 'scripts-staccato',\n\tScriptStaccatissimo = 'scripts-ustaccatissimo', // scripts.dstaccatissimo\n\tScriptTurn = 'scripts-turn',\n\tScriptTrill = 'scripts-trill',\n\tScriptSegno = 'scripts-segno',\n\tScriptCoda = 'scripts-coda',\n\tScriptArpeggio = 'scripts-arpeggio',\n\tScriptPrall = 'scripts-prall',\n\tScriptMordent = 'scripts-mordent',\n\tScriptMarcato = 'scripts-umarcato', // scripts.dmarcato\n\tScriptTenuto = 'scripts-tenuto',\n\tScriptPortato = 'scripts-uportato', // scripts.dportato\n\n\t// pedal\n\tPedalStar = 'pedal-star',\n\tPedalPed = 'pedal-Ped',\n\n\tText = '|text',\n\tGraceNotehead = '|grace-notehead',\n}\n\n// alias\nconst tt = TokenType;\n\nexport const TokenTypes = Object.values(TokenType);\nexport const TokenClefs = TokenTypes.filter((t) => /clefs-/.test(t));\nexport const TokenTimesigs = TokenTypes.filter((t) => /timesig/.test(t));\nexport const TokenTimesigsC = TokenTypes.filter((t) => /timesig-/.test(t));\nexport const TokenTimesigsN = TokenTypes.filter((t) => /timesig\\d/.test(t));\nexport const TokenOctshifts = TokenTypes.filter((t) => /octave-/.test(t));\nexport const TokenNumbers = TokenTypes.filter((t) => /n\\d/.test(t));\nexport const TokenAccidentals = TokenTypes.filter((t) => /accidentals-/.test(t));\nexport const TokenNoteheads = TokenTypes.filter((t) => /noteheads-/.test(t));\nexport const TokenBareNoteheads = [tt.NoteheadS0, tt.NoteheadS1, tt.NoteheadS2];\nexport const TokenDirectionalNoteheads = TokenTypes.filter((t) => /noteheads-.+-[ud]/.test(t));\nexport const TokenRests = TokenTypes.filter((t) => /rests-/.test(t));\nexport const TokenFlags = TokenTypes.filter((t) => /flags-/.test(t));\nexport const TokenVolta = TokenTypes.filter((t) => /volta-/.test(t));\nexport const TokenDynamics = TokenTypes.filter((t) => /^[a-z]$/.test(t));\nexport const TokenScripts = TokenTypes.filter((t) => /scripts-/.test(t));\nexport const TokenPedals = TokenTypes.filter((t) => /pedal-/.test(t));\nexport const TokenDots = [tt.Dot, tt.DotDot];\nexport const TokenArcs = [tt.SlurBegin, tt.SlurEnd, tt.TieBegin, tt.TieEnd];\nexport const TokenBeams = TokenTypes.filter((t) => /beam-/.test(t));\nexport const TokenWedges = TokenTypes.filter((t) => /wedge-/.test(t));\n\nexport const TokenAccessories = [\n\t...TokenNumbers,\n\t...TokenDynamics,\n\t...TokenWedges,\n\t...TokenPedals,\n\t...TokenArcs,\n\n\ttt.ScriptFermata,\n\ttt.ScriptShortFermata,\n\ttt.ScriptSforzato,\n\ttt.ScriptStaccato,\n\ttt.ScriptStaccatissimo,\n\ttt.ScriptTurn,\n\ttt.ScriptTrill,\n\ttt.ScriptPrall,\n\ttt.ScriptMordent,\n\ttt.ScriptMarcato,\n\ttt.ScriptTenuto,\n\ttt.ScriptPortato,\n];\n\nexport const TokenDirectionless = [...TokenPedals];\n\nexport const TokenGlyphs = [\n\t...TokenClefs,\n\t...TokenTimesigs,\n\t...TokenNumbers,\n\t...TokenAccidentals,\n\ttt.NoteheadS0,\n\ttt.NoteheadS1,\n\ttt.NoteheadS2,\n\t...TokenRests,\n\t...TokenDynamics,\n\t...TokenScripts,\n\t...TokenPedals,\n\t...TokenDots,\n];\n\nconst TOKEN_Y_ROUND = {} as Record;\nTokenClefs.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenTimesigsN.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenAccidentals.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenNoteheads.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenRests.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenDots.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\n\nconst TOKEN_Y_FIXED = {} as Record;\nTokenTimesigsC.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\nTokenVolta.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\n\nclass Token {\n\tstatic className = 'Token';\n\n\tid: string;\n\ttype: TokenType;\n\tx: number;\n\ty: number;\n\tpivotX?: number;\n\n\tconfidence: number;\n\n\ttip?: { x: number; y: number };\n\n\tvoice?: number; // integer, every bit stand for a voice\n\ttimeWarped?: boolean;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tget typeId(): string {\n\t\treturn this.type.split('|').reverse()[0];\n\t}\n\n\tget isPredicted(): boolean {\n\t\treturn Number.isFinite(this.confidence);\n\t}\n\n\tget isNotehead(): boolean {\n\t\treturn TokenDirectionalNoteheads.includes(this.type) || this.type === TokenType.NoteheadS0;\n\t}\n\n\tget isContexted(): boolean {\n\t\treturn (\n\t\t\tTokenClefs.includes(this.type) || TokenTimesigs.includes(this.type) || TokenOctshifts.includes(this.type) || TokenAccidentals.includes(this.type)\n\t\t);\n\t}\n\n\tget isAccessory(): boolean {\n\t\treturn TokenNumbers.includes(this.type) || TokenDynamics.includes(this.type) || TokenScripts.includes(this.type) || TokenPedals.includes(this.type);\n\t}\n\n\tget division(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Flag3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Flag4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Flag5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Flag6:\n\t\t\t\treturn 6;\n\n\t\t\tcase tt.Flag7:\n\t\t\t\treturn 7;\n\n\t\t\tcase tt.Flag8:\n\t\t\t\treturn 8;\n\n\t\t\tcase tt.RestM1:\n\t\t\t\treturn -1;\n\n\t\t\tcase tt.Rest0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.Rest1:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.Rest2:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Rest3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Rest4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Rest5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Rest6:\n\t\t\t\treturn 6;\n\n\t\t\t// TODO:\n\t\t\t//case tt.Rest0W:\n\t\t\t//\treturn 0;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget dots(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.Dot:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.DotDot:\n\t\t\t\treturn 2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget direction(): 'u' | 'd' | null {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn 'u';\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 'd';\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget width(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS2;\n\t\t}\n\t}\n\n\tget left(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x - this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x - this.width;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget right(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x + this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x + this.width;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget voiceIndices(): number[] {\n\t\tif (!this.voice || this.voice < 0) return [];\n\n\t\treturn Array(Math.floor(Math.log2(this.voice)) + 1)\n\t\t\t.fill(null)\n\t\t\t.reduce((indices, _, i) => (this.voice & (1 << i) ? [i + 1, ...indices] : indices), []);\n\t}\n}\n\nclass TextToken extends Token {\n\ttextType: TextType;\n\ttext: string;\n\ttextFeature?: Record;\n\twidth_: number;\n\tfontSize: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t\tObject.assign(this, data);\n\t}\n\n\tget width(): number {\n\t\treturn this.width_;\n\t}\n\n\tset width(value: number) {\n\t\tthis.width_ = value;\n\t}\n}\n\nexport { TokenType, Token, TextToken, TOKEN_Y_ROUND, TOKEN_Y_FIXED };\n","import { SimpleClass } from './aux_/typedJSON';\nimport { StaffBasic } from './interfaces';\nimport { ContextedTerm, EventTerm, MarkTerm } from './term';\n\nclass PatchMeasure extends SimpleClass {\n\tstatic className = 'PatchMeasure';\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tbasic: StaffBasic;\n\n\t//points: SemanticPoint[];\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tvoices: number[][]; // [voice, id]\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tObject.assign(this, data);\n\t}\n\n\tget staffN(): number {\n\t\treturn Math.floor(Math.log2(this.staffMask)) + 1;\n\t}\n\n\tget basics(): StaffBasic[] {\n\t\treturn Array(this.staffN).fill(this.basic);\n\t}\n\n\tget duration(): number {\n\t\treturn Math.max(\n\t\t\t0,\n\t\t\t...(this.voices || []).map((ids) => {\n\t\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\n\t\t\t\treturn events.reduce((duration, event) => duration + event.duration, 0);\n\t\t\t})\n\t\t);\n\t}\n}\n\nexport { PatchMeasure };\n","import { Fraction, Pitch, EventFeature, EventPredisposition } from './interfaces';\nimport { gcd, reducedFraction } from './utils';\nimport { TokenType } from './token';\nimport * as Token from './token';\nimport { SimpleClass } from './aux_/typedJSON';\n\nconst WHOLE_DURATION = 128 * 3 * 5;\nconst WHOLE_EXP2 = WHOLE_DURATION / 15;\n\nenum AccessoryDirection {\n\tUp = '^',\n\tDown = '_',\n\tMiddle = '-',\n}\n\nenum GraceType {\n\tGrace = 'grace',\n\tAfterGrace = 'afterGrace',\n\tAcciaccatura = 'acciaccatura',\n\tAppoggiatura = 'appoggiatura',\n\tSlashedGrace = 'slashedGrace',\n}\n\nenum StemBeam {\n\tOpen = 'Open',\n\tClose = 'Close',\n\tContinue = 'Continue',\n}\n\nenum TremoloLink {\n\tPitcher = 'Pitcher',\n\tCatcher = 'Catcher',\n\tPierced = 'Pierced',\n}\n\nenum GlissandoStyle {\n\tNormal = 'normal',\n\tDashedLine = 'dashed-line',\n\tDottedLine = 'dotted-line',\n\tZigzag = 'zigzag',\n\tTrill = 'trill',\n}\n\nenum ArpeggioStyle {\n\tNormal = 'Normal',\n\tBracket = 'Bracket',\n\tParenthesis = 'Parenthesis',\n\tParenthesisDashed = 'ParenthesisDashed',\n\tArrowDown = 'ArrowDown',\n}\n\ninterface Accessory {\n\tdirection?: AccessoryDirection;\n\tparenthesized?: boolean;\n\ttype: TokenType;\n\tid?: string;\n\tx: number;\n}\n\ninterface TermPitch extends Pitch {\n\ttying?: boolean;\n\ttied?: boolean;\n\tparenthesized?: boolean;\n\toctaveShift?: number;\n}\n\nclass Term extends SimpleClass {\n\tx: number;\n\tstaff?: number;\n}\n\ntype RestType = 'r' | 'R' | 's' | null;\n\ninterface DurationalTerm {\n\tdivision: number;\n\tdots: number;\n\tmultiplier?: Fraction;\n}\n\nconst SCALE_NAMES = 'CDEFGAB';\n\nclass EventTerm extends Term implements DurationalTerm {\n\tstatic className = 'EventTerm';\n\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\n\tsystem: number;\n\troundX: number; // for tick map, scheduler\n\tintX: number; // for measure hash\n\tintY: number;\n\tys: number[]; // order by ascending pitch, low (greater Y) to high (less Y)\n\tpitches?: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\taccessories: Accessory[];\n\tmultiplier: Fraction;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\trepetitionChord: boolean;\n\tgrace?: GraceType;\n\tbeam?: StemBeam;\n\ttimeWarp?: Fraction;\n\tparenthesized?: boolean;\n\ttremolo?: number; // like division, 'number of beams' + 2\n\ttremoloLink?: TremoloLink;\n\tglissando?: boolean;\n\tglissandoStyle?: GlissandoStyle;\n\tarpeggioStyle?: ArpeggioStyle;\n\ttip?: { x: number; y: number };\n\n\ttick: number;\n\n\t// for topology\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature: EventFeature;\n\tpredisposition: EventPredisposition;\n\n\tgraceIds?: number[];\n\tcatcherId?: number; // tremolo catcher event ID for tremolo pitcher event\n\n\tnoteIds?: string[]; // order by upwards\n\n\tstatic space({ tick, duration }: { tick: number; duration: number }): EventTerm {\n\t\tconst term = new EventTerm({\n\t\t\trest: 's',\n\t\t\ttick,\n\t\t\taccessories: [],\n\t\t});\n\t\tterm.duration = Math.round(duration);\n\n\t\treturn term;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tObject.assign(this, data);\n\n\t\tif (Number.isFinite(data.left) && Number.isFinite(data.right)) this.x = (this.left + this.right) / 2;\n\t\tif (!Number.isFinite(this.pivotX)) this.pivotX = this.x;\n\t\t//console.assert(Number.isFinite(this.x), \"EventTerm: invalid x,\", data);\n\t}\n\n\tget alignedTick(): number {\n\t\treturn this.grace ? this.tick + this.duration : this.tick;\n\t}\n\n\tget mainDuration(): number {\n\t\treturn WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t}\n\n\tget duration(): number {\n\t\tlet value = this.mainDuration;\n\t\tif (this.multiplier) value *= this.multiplier.numerator / this.multiplier.denominator;\n\t\tif (this.timeWarp) value *= this.timeWarp.numerator / this.timeWarp.denominator;\n\n\t\treturn this.grace ? value / 8 : value;\n\t}\n\n\tset duration(value: number) {\n\t\tconsole.assert(Number.isFinite(value), 'invalid duration value:', value);\n\n\t\tconst divider = gcd(value, WHOLE_EXP2);\n\t\tconst division = Math.log2(WHOLE_EXP2 / divider);\n\t\tconst multiplier = reducedFraction(value * 2 ** division, WHOLE_DURATION);\n\n\t\tthis.division = division;\n\t\tthis.dots = 0;\n\n\t\tif (multiplier.numerator !== multiplier.denominator) this.multiplier = multiplier;\n\t\telse this.multiplier = undefined;\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget times(): string {\n\t\tif (!this.timeWarp) return null;\n\n\t\treturn `${this.timeWarp.numerator}/${this.timeWarp.denominator}`;\n\t}\n\n\tget fullMeasureRest(): boolean {\n\t\treturn this.rest === 'R';\n\t}\n\n\tget tipX(): number {\n\t\treturn this.tip ? this.tip.x : this.x;\n\t}\n\n\tget tipY(): number {\n\t\treturn this.tip ? this.tip.y : this.ys ? this.ys[0] : 0;\n\t}\n\n\tget tremoloCatcher(): boolean {\n\t\treturn this.tremoloLink === TremoloLink.Catcher;\n\t}\n\n\tget scaleChord(): string {\n\t\treturn this.pitches.map((pitch) => SCALE_NAMES[(pitch.note + 700) % 7]).join('');\n\t}\n\n\tget zeroHolder(): boolean {\n\t\treturn !!this.grace || this.tremoloCatcher;\n\t}\n}\n\nenum ContextType {\n\tClef,\n\tKeyAcc,\n\tAcc,\n\tOctaveShift,\n\tTimeSignatureC,\n\tTimeSignatureN,\n}\n\nclass ContextedTerm extends Term {\n\tstatic className = 'ContextedTerm';\n\n\ty: number;\n\ttokenType: TokenType;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget type(): ContextType {\n\t\tif (Token.TokenClefs.includes(this.tokenType)) return ContextType.Clef;\n\t\tif (/\\|key-/.test(this.tokenType)) return ContextType.KeyAcc;\n\t\tif (/accidentals-/.test(this.tokenType)) return ContextType.Acc;\n\t\tif (Token.TokenOctshifts.includes(this.tokenType)) return ContextType.OctaveShift;\n\t\tif (Token.TokenTimesigsC.includes(this.tokenType)) return ContextType.TimeSignatureC;\n\t\tif (Token.TokenTimesigsN.includes(this.tokenType)) return ContextType.TimeSignatureN;\n\n\t\treturn null;\n\t}\n\n\tget staffLevel(): boolean {\n\t\treturn [ContextType.OctaveShift, ContextType.Clef, ContextType.KeyAcc].includes(this.type);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.1;\n\t}\n\n\tget clef(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.ClefG:\n\t\t\t\treturn -this.y - 2;\n\n\t\t\tcase TokenType.ClefF:\n\t\t\t\treturn -this.y + 2;\n\n\t\t\tcase TokenType.ClefC:\n\t\t\t\treturn -this.y;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget alter() {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.AccNatural:\n\t\t\tcase TokenType.KeyNatural:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.AccSharp:\n\t\t\tcase TokenType.KeySharp:\n\t\t\t\treturn 1;\n\n\t\t\tcase TokenType.AccFlat:\n\t\t\tcase TokenType.KeyFlat:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.AccDoublesharp:\n\t\t\t\treturn 2;\n\n\t\t\tcase TokenType.AccFlatflat:\n\t\t\t\treturn -2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget octaveShift(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.OctaveShift8va:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.OctaveShift0:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.OctaveShift8vb:\n\t\t\t\treturn 1;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget number(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.TimesigZero:\n\t\t\t\treturn 0;\n\t\t\tcase TokenType.TimesigOne:\n\t\t\t\treturn 1;\n\t\t\tcase TokenType.TimesigTwo:\n\t\t\t\treturn 2;\n\t\t\tcase TokenType.TimesigThree:\n\t\t\t\treturn 3;\n\t\t\tcase TokenType.TimesigFour:\n\t\t\t\treturn 4;\n\t\t\tcase TokenType.TimesigFive:\n\t\t\t\treturn 5;\n\t\t\tcase TokenType.TimesigSix:\n\t\t\t\treturn 6;\n\t\t\tcase TokenType.TimesigSeven:\n\t\t\t\treturn 7;\n\t\t\tcase TokenType.TimesigEight:\n\t\t\t\treturn 8;\n\t\t\tcase TokenType.TimesigNine:\n\t\t\t\treturn 9;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\n//class BreakTerm extends Term {\n//};\n\nclass MarkTerm extends Term {\n\tstatic className = 'MarkTerm';\n\n\ttick: number;\n\n\tget prior(): number {\n\t\treturn this.tick + 0.01;\n\t}\n}\n\nconst MUSIC_NOTES = Array(7)\n\t.fill(0)\n\t.map((_, i) => String.fromCodePoint(0x1d15d + i));\n\nclass TempoTerm extends MarkTerm {\n\tstatic className = 'TempoTerm';\n\n\tduration: string;\n\tbeats: string;\n\n\tstatic fromNumeralText(text: string): TempoTerm {\n\t\tif (/.+=.*\\d+/.test(text)) {\n\t\t\tconst [symbol, value] = text.split('=');\n\t\t\tlet division = MUSIC_NOTES.findIndex((n) => symbol.includes(n));\n\t\t\tdivision = division >= 0 ? division : 2;\n\t\t\tlet duration = (2 ** division).toString();\n\t\t\tif (symbol.includes('.')) duration += '.';\n\n\t\t\treturn new TempoTerm({ tick: 0, duration, beats: value });\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.01;\n\t}\n\n\t// a whole note equal to 1920\n\tget durationMagnitude(): number {\n\t\tconst [_, den, dot] = this.duration.match(/^(\\d+)(\\.)?$/);\n\t\tconst magnitude = (WHOLE_DURATION / Number(den)) * (dot ? 1.5 : 1);\n\n\t\treturn magnitude;\n\t}\n\n\t// beats per minute, suppose 1 beat = 480 ticks\n\tget bpm(): number {\n\t\tconst [number] = this.beats.match(/\\d+/) || [90];\n\t\tconst beats = Number(number);\n\n\t\treturn (beats * this.durationMagnitude * 4) / WHOLE_DURATION;\n\t}\n\n\tisValid(range = [10, 400]): boolean {\n\t\tconst bpm = this.bpm;\n\n\t\treturn Number.isFinite(this.bpm) && bpm >= range[0] && bpm < range[1];\n\t}\n}\n\nclass GlyphTerm extends MarkTerm {\n\tstatic className = 'GlyphTerm';\n\n\tglyph: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass TextTerm extends MarkTerm {\n\tstatic className = 'TextTerm';\n\n\tdirection?: AccessoryDirection;\n\ttext: string;\n\tbold: boolean;\n\titalic: boolean;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass LyricTerm extends MarkTerm {\n\tstatic className = 'LyricTerm';\n\n\ttext: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass CommandTerm extends MarkTerm {\n\tstatic className = 'CommandTerm';\n\n\tcommand: string;\n\tparameters: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass ChordmodeTerm extends Term implements DurationalTerm {\n\tstatic className = 'ChordmodeTerm';\n\n\tpitch: Pitch;\n\tbasePitch?: Pitch;\n\tmodifier?: string;\n\n\tdivision: number;\n\tdots: number;\n\tmultiplier: Fraction;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget duration(): number {\n\t\tconst value = WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t\tif (this.multiplier) return (value * this.multiplier.numerator) / this.multiplier.denominator;\n\n\t\treturn value;\n\t}\n}\n\nexport {\n\tTerm,\n\tEventTerm,\n\tContextedTerm,\n\t//BreakTerm,\n\tMarkTerm,\n\tTempoTerm,\n\tGlyphTerm,\n\tTextTerm,\n\tLyricTerm,\n\tCommandTerm,\n\tChordmodeTerm,\n\tDurationalTerm,\n\tContextType,\n\tGraceType,\n\tTermPitch,\n\tRestType,\n\tGlissandoStyle,\n\tArpeggioStyle,\n\tAccessory,\n\tAccessoryDirection,\n\tWHOLE_DURATION,\n\tStemBeam,\n\tTremoloLink,\n};\n","import sha1 from 'js-sha1';\nimport erf from 'math-erf';\n\nimport { SimpleClass } from './aux_/typedJSON';\nimport * as EquationSolver from './equationSolver';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport {\n\tBackgroundImage,\n\tEventMeasure,\n\tFraction,\n\tMeasureBarType,\n\tRegulationOptions,\n\tRegulationSolution,\n\tRegulationSolutionEvent,\n\tStaffBasic,\n} from './interfaces';\nimport type { MeasureRectification } from './measureRectification';\nimport { PatchMeasure } from './patch';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\nimport { ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, StemBeam, TremoloLink, WHOLE_DURATION } from './term';\nimport type { GraphMeasure } from './timewiseGraph';\nimport { argmax, frac, fractionMul, roundNumber } from './utils';\n\nnamespace SimplePolicy {\n\tconst constructXMap = (measure: SpartitoMeasure): Map => {\n\t\tconst xMap = new Map();\n\n\t\t// mark full measure rests\n\t\tmeasure.rows.forEach((row) => {\n\t\t\tif (row.events.length === 1) {\n\t\t\t\tconst event = row.events[0];\n\t\t\t\tif (event.rest && event.division === 0) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst x = Math.round(event.pivotX * 10) / 10;\n\t\t\tlet key = 0;\n\t\t\tif (event.fullMeasureRest) key = Math.min(x, ...xMap.keys());\n\t\t\telse {\n\t\t\t\tkey =\n\t\t\t\t\t[...xMap.keys()].find((k) => {\n\t\t\t\t\t\t// check if the event is aligned with the current chord\n\t\t\t\t\t\tconst es = xMap.get(k);\n\t\t\t\t\t\tconst left = Math.min(...es.map((e) => e.left));\n\t\t\t\t\t\tconst right = Math.max(...es.map((e) => e.right));\n\n\t\t\t\t\t\tconst overlaySize = Math.min(right, event.right) - Math.max(left, event.left);\n\n\t\t\t\t\t\treturn overlaySize > NOTEHEAD_WIDTHS.NoteheadS1 * 0.62;\n\t\t\t\t\t}) || x;\n\t\t\t}\n\t\t\tevent.roundX = key;\n\n\t\t\tconst es = xMap.get(key) || [];\n\t\t\txMap.set(key, es);\n\n\t\t\tes.push(event);\n\t\t});\n\n\t\treturn xMap;\n\t};\n\n\texport const computeMeasureTicks = (measure: SpartitoMeasure): void => {\n\t\tconst xMap = constructXMap(measure);\n\n\t\tlet tick = 0;\n\t\tconst ts = new Set([tick]);\n\t\tconst eventGroups = [...xMap.entries()].sort(([x1], [x2]) => x1 - x2); //.map(entry => entry[1]);\n\t\tfor (const [x, events] of eventGroups) {\n\t\t\tvoid x;\n\n\t\t\tevents.forEach((event: EventTerm) => {\n\t\t\t\tif (event.predisposition) {\n\t\t\t\t\tevent.rest = event.rest && event.predisposition.fullMeasure > 0.5 ? 'R' : event.rest;\n\t\t\t\t\tevent.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t\tevent.division = argmax(event.predisposition.divisionVector);\n\t\t\t\t\tevent.dots = argmax(event.predisposition.dotsVector);\n\t\t\t\t\tif (event.predisposition.timeWarped > 0.5) event.timeWarp = frac(2, 3);\n\t\t\t\t}\n\n\t\t\t\tif (event.fullMeasureRest) event.tick = 0;\n\t\t\t\telse {\n\t\t\t\t\tif (event.zeroHolder) tick -= event.duration;\n\n\t\t\t\t\tif (!event.zeroHolder && event.predisposition && Number.isInteger(event.predisposition.tick)) event.tick = event.predisposition.tick;\n\t\t\t\t\telse event.tick = tick;\n\t\t\t\t\tts.add(event.tick + event.duration);\n\t\t\t\t}\n\t\t\t\t//console.log(\"append tick:\", event.tick + event.duration, event);\n\t\t\t});\n\t\t\tts.delete(tick);\n\n\t\t\t//column.xToTick[x] = tick;\n\n\t\t\tif (ts.size) tick = Math.min(...ts);\n\t\t}\n\n\t\tif (Number.isInteger(measure.estimatedDuration)) measure.duration = measure.estimatedDuration;\n\t\telse measure.duration = Math.max(...ts, 0);\n\t};\n\n\texport const computeMeasureVoices = (measure: SpartitoMeasure): void => {\n\t\tmeasure.voices = [];\n\t\tfor (const row of measure.rows) {\n\t\t\tconst events = row.events.filter(\n\t\t\t\t(event) => !event.grace && !event.tremoloCatcher && !event.fullMeasureRest && !(event.predisposition && event.predisposition.fake > 0.5)\n\t\t\t);\n\t\t\tconst eventSet = new Set(events);\n\n\t\t\twhile (eventSet.size) {\n\t\t\t\tlet tick = 0;\n\n\t\t\t\tconst voice = [];\n\t\t\t\tconst pushEvent = (e: EventTerm) => {\n\t\t\t\t\tvoice.push(e.id);\n\t\t\t\t\tif (!e.zeroHolder) tick += e.duration;\n\t\t\t\t\teventSet.delete(e);\n\t\t\t\t};\n\n\t\t\t\tconst e0 = events.find((e) => eventSet.has(e));\n\t\t\t\tif (e0.alignedTick > 0) {\n\t\t\t\t\t//voice.tickMap[tick] = EventTerm.space({ tick, duration: e0.alignedTick });\n\t\t\t\t\ttick = e0.alignedTick;\n\t\t\t\t}\n\t\t\t\tpushEvent(e0);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// TODO: consider slur pair\n\t\t\t\t\tconst e = events.find((e) => eventSet.has(e) && e.alignedTick === tick);\n\t\t\t\t\tif (!e) break;\n\n\t\t\t\t\tpushEvent(e);\n\t\t\t\t}\n\n\t\t\t\t//if (tick < measure.duration)\n\t\t\t\t//\tvoice.tickMap[tick] = EventTerm.space({ tick, duration: staff.duration - tick });\n\n\t\t\t\tmeasure.voices.push(voice);\n\t\t\t}\n\t\t}\n\t};\n}\n\nconst solveGraceEvents = (measure: SpartitoMeasure): void => {\n\tconst graceEvents = measure.events.filter((event) => event.grace /*&& !Number.isFinite(event.tick)*/);\n\tif (!graceEvents.length) return;\n\n\tconst tickMap = measure.tickMap;\n\tconst staffMap = [...tickMap.entries()].reduce((smap, [tick, events]) => {\n\t\tevents.forEach((event) => {\n\t\t\tif (!event.grace) {\n\t\t\t\tsmap[event.staff] = smap[event.staff] || {};\n\n\t\t\t\tconst oldEvent = smap[event.staff][tick];\n\t\t\t\tsmap[event.staff][tick] = !oldEvent || oldEvent.x > event.x ? event : oldEvent;\n\t\t\t}\n\t\t});\n\n\t\treturn smap;\n\t}, {} as { [staff: number]: { [tick: number]: EventTerm } });\n\n\ttype Position = { tick: number; preTick: number; graces: EventTerm[]; event: EventTerm };\n\tconst staffPositions = Object.entries(staffMap).reduce((map, [staff, emap]) => {\n\t\tmap[staff] = Object.entries(emap)\n\t\t\t.map(([t, event]) => ({ event, tick: Number(t), preTick: -240, graces: [] }))\n\t\t\t.sort((p1, p2) => p1.event.x - p2.event.x);\n\t\tmap[staff].push({ tick: measure.duration, event: measure.endEvent, preTick: 0, graces: [] }); // terminal bar\n\n\t\tlet tick = 0;\n\t\tmap[staff].forEach((position) => {\n\t\t\tif (position.tick > tick) {\n\t\t\t\tposition.preTick = tick;\n\t\t\t\ttick = position.tick;\n\t\t\t}\n\t\t});\n\n\t\treturn map;\n\t}, {} as { [staff: number]: Position[] });\n\n\t// append grace events into positions\n\tgraceEvents.forEach((event) => {\n\t\tconst staff = staffPositions[event.staff];\n\t\tif (staff) {\n\t\t\tconst position = staff.find((p) => p.event.x > event.x);\n\t\t\tif (position) position.graces.push(event);\n\t\t\tevent.roundX = event.x;\n\t\t\t//if (position.tick >= measure.duration)\n\t\t\t//\tevent.grace = GraceType.AfterGrace;\n\t\t}\n\t});\n\n\tObject.values(staffPositions).forEach((staff) =>\n\t\tstaff.forEach((position) => {\n\t\t\tif (position.graces.length) {\n\t\t\t\tposition.event.graceIds = position.graces.map((e) => e.id);\n\n\t\t\t\tconst totalDuration = position.graces.reduce((t, e) => t + e.duration, 0);\n\t\t\t\tconst duration = Math.min(totalDuration, position.tick - position.preTick);\n\t\t\t\tconst warp = duration / totalDuration;\n\n\t\t\t\tlet tick = position.tick;\n\t\t\t\t[...position.graces].reverse().forEach((event) => {\n\t\t\t\t\tevent.tick = Math.round(tick - event.duration * warp);\n\t\t\t\t\ttick = event.tick;\n\t\t\t\t});\n\t\t\t}\n\t\t})\n\t);\n};\n\nconst solveTremoloPairs = (measure: SpartitoMeasure): void => {\n\tconst catchers = measure.events.filter((event) => event.tremoloCatcher && !event.grace);\n\tconst pitchers = measure.events.filter((event) => event.tremoloLink === TremoloLink.Pitcher && !event.grace);\n\n\tcatchers.forEach((catcher) => {\n\t\tlet candidates = pitchers.filter((event) => event.division === catcher.division && event.x < catcher.x);\n\t\tif (!candidates.length)\n\t\t\tcandidates = measure.events.filter(\n\t\t\t\t(event) =>\n\t\t\t\t\tNumber.isFinite(event.tick) &&\n\t\t\t\t\t!event.grace &&\n\t\t\t\t\t!event.rest &&\n\t\t\t\t\tevent.division === catcher.division &&\n\t\t\t\t\tevent.dots === catcher.dots &&\n\t\t\t\t\tevent.x < catcher.x\n\t\t\t);\n\t\tcandidates.sort((c1, c2) => c2.x - c1.x);\n\t\tif (candidates.length) {\n\t\t\tconst pitcher = candidates[0];\n\t\t\tpitcher.catcherId = catcher.id;\n\t\t\tconst tremolo = Math.max(pitcher.tremolo || 3, catcher.tremolo || 3);\n\t\t\tpitcher.tremolo = tremolo;\n\t\t\tcatcher.tremolo = tremolo;\n\n\t\t\tif (!catcher.tick) catcher.tick = pitcher.tick + pitcher.duration / 2;\n\n\t\t\tconst pi = pitchers.indexOf(pitcher);\n\t\t\tif (pi >= 0) pitchers.splice(pi, 1);\n\t\t}\n\t});\n};\n\nnamespace EquationPolicy {\n\ttype EventID = number;\n\ttype Time = number;\n\n\tconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\n\tconst CHORDS_SEAM_SIGMA = 0.6;\n\tconst NEIGHBOR_CHORDS_SIGMA = 1.6;\n\tconst Y_DECAY_SIGMA = 16;\n\tconst STAFF_DECAY_FACTOR = 2;\n\tconst STEM_DIRECTION_DECAY = 0.9;\n\tconst ILL_BEAMS_PENALTY = 0.2;\n\n\tconst INVERT_SQRT2 = 0.7071067811865475;\n\n\tconst MATRIX_H_WEIGHT = 3;\n\n\tconst FINE_BEAMS = [\n\t\t[null, null],\n\t\t[null, StemBeam.Open],\n\t\t[StemBeam.Open, StemBeam.Continue],\n\t\t[StemBeam.Open, StemBeam.Close],\n\t\t[StemBeam.Continue, StemBeam.Continue],\n\t\t[StemBeam.Continue, StemBeam.Close],\n\t\t[StemBeam.Close, null],\n\t\t[StemBeam.Close, StemBeam.Open],\n\t].map((bb) => bb.join('-'));\n\n\tinterface Event {\n\t\tid: EventID;\n\t\tstaff: number;\n\t\tx: number;\n\t\ty: number;\n\t\tduration: Time;\n\t\tconfidence: number;\n\t\tshrinkness: number;\n\t}\n\n\texport interface StaffGroup {\n\t\tevents: Event[];\n\t\texpectedDuration: Time;\n\t\tmeasureShrinkness: number;\n\t\tendX: number;\n\t\tmatrixH: Matrix;\n\t\tmatrixV: Matrix;\n\n\t\tids?: EventID[];\n\t}\n\n\tinterface EventResult {\n\t\tid: EventID;\n\t\ttick: Time;\n\t\tendTick: Time;\n\t\ttickGroup: number;\n\t\ttimeWarp?: Fraction;\n\t}\n\n\texport interface StaffGroupSolution {\n\t\tevents: EventResult[];\n\t\tvoices: EventID[][];\n\t\tduration: number;\n\n\t\tloss?: number;\n\t\tcredits?: number;\n\t\ttimes?: number;\n\t}\n\n\texport interface RegulatorOptions extends EquationSolver.SolverOptions {\n\t\tsolver?: (staffGroup: StaffGroup, options: EquationSolver.SolverOptions) => Promise;\n\t}\n\n\tconst solveStaffGroup = (staffGroup: StaffGroup, options: EquationSolver.SolverOptions): StaffGroupSolution => {\n\t\tif (!staffGroup.events.length) {\n\t\t\treturn {\n\t\t\t\tevents: [],\n\t\t\t\tvoices: [],\n\t\t\t\tduration: 0,\n\t\t\t};\n\t\t}\n\n\t\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\t\treturn solver.solve();\n\t};\n\n\texport const estiamteMeasure = (measure: SpartitoMeasure): StaffGroup => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => ({\n\t\t\t\tid: event.id,\n\t\t\t\tstaff: event.staff,\n\t\t\t\tx: event.x,\n\t\t\t\ttickEstimated: event.predisposition && Number.isFinite(event.predisposition.tick) ? event.predisposition.tick : event.x,\n\t\t\t\ttipX: event.tipX,\n\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\tduration: (event.mainDuration * DURATION_MULTIPLIER) / WHOLE_DURATION,\n\t\t\t\tdivision: event.division,\n\t\t\t\tdots: event.dots,\n\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\tbeam: event.beam,\n\t\t\t\trest: event.rest,\n\t\t\t\t// the possibility of full measure rest\n\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\tshrinkness: event.predisposition ? event.predisposition.timeWarped : null,\n\t\t\t}));\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: Number.isFinite(e.shrinkness) ? e.shrinkness : Math.tanh((e.division - e.dots * 0.1) / 4),\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\t//const hp = (dx: number): number => 1 - erf(((dx / NEIGHBOR_CHORDS_SIGMA) ** 0.6) * INVERT_SQRT2);\n\t\tconst hp = (dx: number): number => erf(dx / NEIGHBOR_CHORDS_SIGMA) * erf(NEIGHBOR_CHORDS_SIGMA / dx);\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\tif (e1.staffGroup !== e2.staffGroup) matrixH[e1.id][e2.id] = 0;\n\t\t\t\t// prohibit voice crossing staff groups\n\t\t\t\telse if (e1.x <= e2.x) matrixH[e1.id][e2.id] = 0;\n\t\t\t\telse {\n\t\t\t\t\tconst staffDecay = Math.exp(-Math.abs(e1.staff - e2.staff) * STAFF_DECAY_FACTOR);\n\t\t\t\t\tconst yDecay = e1.staff === e2.staff ? Math.exp(-Math.abs(e1.y - e2.y) / Y_DECAY_SIGMA) : 1;\n\t\t\t\t\tconst dx = e1.x - e2.x;\n\t\t\t\t\tconst dtx = e1.tipX - e2.tipX;\n\t\t\t\t\tmatrixH[e1.id][e2.id] = (staffDecay * yDecay * Math.min(hp(dx), hp(dtx))) ** (1 / MATRIX_H_WEIGHT);\n\t\t\t\t}\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\t\t\t\tmatrixH[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\n\t\t\t\t// weaken inconsistent stem directions\n\t\t\t\tif (e1.stemDirection && e2.stemDirection && e1.stemDirection !== e2.stemDirection) matrixH[e1.id][e2.id] *= STEM_DIRECTION_DECAY;\n\n\t\t\t\t// ill beams penalty\n\t\t\t\tif (!e1.rest && !e2.rest && !FINE_BEAMS.includes([e2.beam, e1.beam].join('-'))) matrixH[e1.id][e2.id] *= ILL_BEAMS_PENALTY;\n\t\t\t}\n\n\t\t\t// H possibility of e1 and end of measure\n\t\t\tmatrixH[ids.length][e1.id] = hp(measure.width - e1.x) ** (1 / MATRIX_H_WEIGHT);\n\t\t}\n\n\t\treturn {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness: 0,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t};\n\n\texport const regulateMeasure = async (measure: SpartitoMeasure, { solver = null, ...options }: RegulatorOptions): Promise => {\n\t\tconst env = estiamteMeasure(measure);\n\t\tconst { ids, matrixH, matrixV } = env;\n\n\t\t// copy matrices values from measure topology data\n\t\tif (measure.matrixH) {\n\t\t\tconsole.assert(\n\t\t\t\tmeasure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t\t'matrix shape mismatch:',\n\t\t\t\tids.length,\n\t\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t\t);\n\t\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t\t}\n\t\t}\n\t\tif (measure.matrixV) {\n\t\t\tmatrixV.forEach((row, i) =>\n\t\t\t\trow.forEach((_, j) => {\n\t\t\t\t\tconst mp = measure.matrixV[ids[i]][ids[j]];\n\t\t\t\t\tif (Number.isFinite(mp)) matrixV[i][j] = mp;\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\tenv.measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tif (options.logger) options.logger.info('--- MEASURE', measure.measureIndex, '---', env);\n\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\t\tconst resultEvents = solution.events.map((e) => ({\n\t\t\t...e,\n\t\t\tid: env.ids[e.id], // decode compact ids\n\t\t}));\n\t\tresultEvents.forEach((e) => {\n\t\t\tconst event = measure.events.find((e0) => e0.id === e.id);\n\t\t\tevent.tick = Number.isFinite(e.tick) ? Math.round((e.tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : null;\n\t\t\tevent.tickGroup = e.tickGroup;\n\t\t\tevent.timeWarp = e.timeWarp;\n\t\t});\n\n\t\tmeasure.duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\t\tmeasure.voices = solution.voices.map((voice) => voice.map((id) => env.ids[id]));\n\n\t\tmeasure.solutionStat = {\n\t\t\tloss: solution.loss,\n\t\t\tsolverCredits: solution.credits,\n\t\t\tsolverTimes: solution.times,\n\t\t};\n\n\t\t// full measure rests\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst result = resultEvents.find((e) => e.id === event.id);\n\t\t\tif (!result) return;\n\t\t\telse if (!Number.isFinite(result.tick) && event.rest === 'r' && event.division === 0) {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.rest = 'R';\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t} else if (event.rest === 'R') {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t}\n\t\t});\n\t};\n\n\texport const regulateMeasureWithRectification = async (\n\t\tmeasure: SpartitoMeasure,\n\t\trectification: MeasureRectification,\n\t\t{ solver = null, ...options }: RegulatorOptions\n\t): Promise => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => {\n\t\t\t\tconst re = rectification.events.find((e) => e && e.id === event.id);\n\t\t\t\tconst division = Number.isFinite(re?.division) ? re.division : event.division;\n\t\t\t\tconst dots = Number.isFinite(re?.dots) ? re.dots : event.dots;\n\t\t\t\tconst duration = DURATION_MULTIPLIER * 2 ** -division * (2 - 2 ** -dots);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: event.id,\n\t\t\t\t\tstaff: event.staff,\n\t\t\t\t\tx: event.x,\n\t\t\t\t\ttickEstimated: event.predisposition?.tick,\n\t\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\t\tduration,\n\t\t\t\t\t// the possibility of full measure rest\n\t\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\t\tshrinkness: event.predisposition?.timeWarped || 0,\n\t\t\t\t};\n\t\t\t});\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: e.shrinkness,\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\t\t\t}\n\t\t}\n\n\t\t// copy matrices values from measure topology data\n\t\tconsole.assert(\n\t\t\tmeasure.matrixH && measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t'matrix shape mismatch:',\n\t\t\tids.length,\n\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t);\n\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t}\n\n\t\tlet measureShrinkness = 0;\n\t\tif (Number.isFinite(measure.estimatedDuration)) measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tconst env = {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\n\t\tconst priority = -solution.loss;\n\n\t\tconst events = solution.events.map(({ id, tick, tickGroup, timeWarp }) => {\n\t\t\tconst re = rectification.events.find((e) => e && e.id === id);\n\t\t\tconst tickN = Number.isFinite(tick) ? Math.round((tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : tick;\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttick: tickN,\n\t\t\t\ttickGroup,\n\t\t\t\ttimeWarp,\n\t\t\t\tdivision: re?.division,\n\t\t\t\tdots: re?.dots,\n\t\t\t};\n\t\t});\n\n\t\tconst duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\n\t\treturn {\n\t\t\tevents,\n\t\t\tvoices: solution.voices,\n\t\t\tduration,\n\t\t\tpriority,\n\t\t};\n\t};\n}\n\ntype Matrix = number[][];\n\ntype TickMap = Map;\n\ninterface SolutionStatistics {\n\tloss?: number;\n\tsolverCredits?: number;\n\tsolverTimes?: number;\n}\n\nclass SpartitoMeasure extends SimpleClass {\n\tstatic className = 'SpartitoMeasure';\n\tstatic blackKeys = ['staffGroups', 'solutionStat', 'measureNumber', 'deposit'];\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tstaffGroups: number[][];\n\toriginalRegulationHash?: string;\n\tmeasureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures\n\n\tpatched: boolean;\n\tdiscard: boolean;\n\n\tposition: {\n\t\tsystemIndex: number;\n\t\tlocalIndex: number; // the measure local index in its system\n\t\tleft: number;\n\t\tright: number;\n\t\tstaffYs?: number[];\n\t\tstaffYsFull?: number[];\n\t};\n\n\tbackgroundImages: BackgroundImage[];\n\n\tevents: EventTerm[];\n\tendEvent: Partial; // the placeholder for end tick\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n\tindent: boolean;\n\n\tsolutionStat?: SolutionStatistics;\n\n\tmatrixH: Matrix; // matrix N x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n\testimatedDuration: number;\n\n\tgraph: GraphMeasure;\n\n\tdeposit: Record;\n\n\tstatic reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[] {\n\t\tconst HALF_NOTEHEAD = 0.7;\n\n\t\tconst ys = [];\n\n\t\tconst es = events.map((e) => ({\n\t\t\tid: e.id,\n\t\t\tstaff: e.staff,\n\t\t\tx: e.x / HALF_NOTEHEAD,\n\t\t\trx: 0,\n\t\t\try: staffYsFull[e.staff] + e.tipY,\n\t\t\ttipY: e.tipY,\n\t\t\tprior: 0,\n\t\t}));\n\t\tes.sort((e1, e2) => e1.x - e2.x);\n\t\tes.slice(1).forEach((e, i) => {\n\t\t\tconst dx = Math.min(Math.round(e.x - es[i].x), 2);\n\t\t\te.rx = es[i].rx + dx;\n\t\t});\n\t\tes.forEach((e) => {\n\t\t\te.prior = e.staff * 1e4 + e.rx + e.tipY * 0.01;\n\n\t\t\tif (!ys.includes(e.ry)) ys.push(e.ry);\n\t\t});\n\t\tes.sort((e1, e2) => e1.prior - e2.prior);\n\t\tys.sort((y1, y2) => y1 - y2);\n\n\t\tlet yi = 0;\n\t\tconst yis = ys.map((y, i) => {\n\t\t\tif (!i || ys[i] - ys[i - 1] < 0.5) return yi;\n\n\t\t\t++yi;\n\t\t\treturn yi;\n\t\t});\n\n\t\tconst result = es.map((e) => new EventTerm({ ...events.find((ev) => ev.id === e.id), intX: e.rx, intY: yis[ys.indexOf(e.ry)] }));\n\t\tresult.forEach((e, i) => (e.id = i + 1));\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tif (!this.originalRegulationHash && !this.regulated) this.originalRegulationHash = this.regulationHash;\n\n\t\tthis.barTypes = this.barTypes || {};\n\n\t\t// Ensure postRegulate runs for measures deserialized with voices (e.g. from patches/JSON)\n\t\t// to set endEvent and roundX needed for playback cursor positioning.\n\t\tif (this.regulated && this.position) this.postRegulate();\n\t}\n\n\tget timeSignature(): Fraction {\n\t\treturn this.basics && this.basics[0].timeSignature;\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.basics && this.basics[0].keySignature;\n\t}\n\n\tget timeSignatureChanged(): boolean {\n\t\treturn this.contexts.filter(Boolean)[0].some((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type));\n\t}\n\n\tget doubtfulTimesig(): boolean {\n\t\treturn this.basics && this.basics[0].doubtfulTimesig;\n\t}\n\n\tget regulated(): boolean {\n\t\treturn !!this.voices;\n\t}\n\n\tget validRegulated(): boolean {\n\t\tif (!this.voices) return false;\n\n\t\treturn this.voices.flat(1).every((id) => Number.isFinite(this.events.find((e) => e.id === id)?.tick));\n\t}\n\n\tget rows(): EventMeasure[] {\n\t\treturn this.contexts.map((contexts, si) => {\n\t\t\tconst events = this.events.filter((e) => e.staff === si);\n\n\t\t\treturn {\n\t\t\t\tevents,\n\t\t\t\tcontexts,\n\t\t\t};\n\t\t});\n\t}\n\n\tget eventStartX(): number {\n\t\treturn this.events.length ? Math.min(...this.events.map((e) => e.x)) : this.startX;\n\t}\n\n\tget startX(): number {\n\t\treturn this.position.left;\n\t}\n\n\tget width(): number {\n\t\treturn this.position.right - this.position.left;\n\t}\n\n\tget tickMap(): TickMap {\n\t\treturn this.events\n\t\t\t.concat([this.endEvent as EventTerm])\n\t\t\t.filter(Boolean)\n\t\t\t.reduce((map, event) => {\n\t\t\t\tif (Number.isFinite(event.tick)) {\n\t\t\t\t\tif (!map.has(event.tick)) map.set(event.tick, []);\n\n\t\t\t\t\tmap.get(event.tick).push(event);\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}, new Map());\n\t}\n\n\tget tickToX(): { [tick: number]: number } {\n\t\treturn [...this.tickMap.entries()].reduce((map, [tick, events]) => {\n\t\t\tevents = events.filter((e) => !e.fullMeasureRest && !e.grace);\n\t\t\tif (events.length) {\n\t\t\t\tconst x = Math.min(...events.map((e) => e.x));\n\t\t\t\tmap[tick] = x;\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget tickRates(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tevents.sort((e1, e2) => e1.x - e2.x);\n\n\t\treturn events.slice(0, events.length - 1).map((e1, i) => {\n\t\t\tconst e2 = events[i + 1];\n\n\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t});\n\t}\n\n\tget tickRatesInStaves(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(sevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickRatesInGroups(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(gevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickTwist(): number {\n\t\tif (!this.duration || !this.staffGroups) return undefined;\n\n\t\tconst events = this.events.filter(\n\t\t\t(event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !(event.rest && event.division === 0)\n\t\t); // ignore rest0\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst twists = Object.values(gevents).map((es) => {\n\t\t\tconst eventsXOrder = [...es].sort((e1, e2) => e1.pivotX - e2.pivotX);\n\t\t\tconst xSpan = this.position.right - eventsXOrder[0].x;\n\t\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\t\tconst e1 = eventsXOrder[i];\n\t\t\t\tconst dx = e2.pivotX - e1.pivotX;\n\t\t\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\t\t\tif (!dt) return dx / xSpan;\n\n\t\t\t\tconst rate = Math.atan2(dt / this.duration, dx / xSpan);\n\n\t\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t\t});\n\n\t\t\treturn Math.max(0, ...tickTwists);\n\t\t});\n\n\t\treturn Math.max(0, ...twists);\n\t}\n\n\tget eventMap(): Record {\n\t\treturn this.events.reduce((map, event) => {\n\t\t\tmap[event.id] = event;\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget empty(): boolean {\n\t\treturn !this.events?.length || !this.voices?.length;\n\t}\n\n\tget hasIllEvent(): boolean {\n\t\tconst voicedEventIds = this.voices.flat(1);\n\t\tconst eventMap = this.eventMap;\n\t\treturn (\n\t\t\tthis.regulated &&\n\t\t\tvoicedEventIds.some((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\treturn !event.zeroHolder && !Number.isFinite(event.tick) && !event.fullMeasureRest;\n\t\t\t})\n\t\t);\n\t}\n\n\tget brief(): string {\n\t\tconst timesig = `${this.timeSignature.numerator}/${this.timeSignature.denominator}`;\n\t\tconst eventBrieves = this.events.map((e) =>\n\t\t\t[\n\t\t\t\te.staff,\n\t\t\t\te.intX,\n\t\t\t\tMath.round(e.tip ? e.tip.y : e.ys?.[0] ?? 0),\n\t\t\t\te.fullMeasureRest ? 0 : e.division,\n\t\t\t\te.fullMeasureRest ? 0 : e.dots,\n\t\t\t\te.rest ? 'r' : '',\n\t\t\t\te.grace || '',\n\t\t\t\te.stemDirection,\n\t\t\t\te.beam || '',\n\t\t\t].join('|')\n\t\t);\n\n\t\treturn [timesig, ...eventBrieves].join('\\n');\n\t}\n\n\tget regulationHash(): string {\n\t\treturn sha1(this.brief);\n\t}\n\n\t// prefer use originalRegulationHash\n\tget regulationHash0(): string {\n\t\treturn this.originalRegulationHash || this.regulationHash;\n\t}\n\n\tget regulationHashes(): string[] {\n\t\treturn Array.from(new Set([this.originalRegulationHash, this.regulationHash].filter(Boolean)));\n\t}\n\n\tget featureWords(): string[][] | null {\n\t\tif (!this.regulated || !this.voices || !this.voices.length) return null;\n\n\t\tconst invalid = this.tickRatesInStaves.some((rate) => rate < 0);\n\n\t\tconst mainEvents = this.events.filter((event) => !event.zeroHolder && !event.rest);\n\n\t\tconst ys = mainEvents\n\t\t\t.map((event) => event.ys)\n\t\t\t.flat(1)\n\t\t\t.map((y) => `Y${-y * 2}`);\n\t\tconst uys = Array.from(new Set(ys));\n\t\tif (this.keySignature) uys.push(`K${this.keySignature}`);\n\n\t\tconst voices = this.voices\n\t\t\t.map((ids) => ids.map((id) => this.events.find((e) => e.id === id)).filter((event) => !event.zeroHolder && !event.rest))\n\t\t\t.filter((voice) => voice.length);\n\n\t\tconst melodies = invalid ? [] : voices.map((es) => es.map((e) => e.scaleChord).join('-'));\n\n\t\tconst rhythm = invalid ? [] : voices.map((es) => es.map((e) => e.division).join(''));\n\t\tif (this.timeSignature) rhythm.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`);\n\n\t\treturn [uys, melodies, rhythm];\n\t}\n\n\tget barType(): MeasureBarType {\n\t\tif (this.voltaEnd) return 'VoltaRight';\n\n\t\tconst typeEntris = Object.entries(this.barTypes).sort((e1, e2) => e2[1] - e1[1]);\n\t\tif (typeEntris[0] && typeEntris[0][1] >= 1) return typeEntris[0][0] as MeasureBarType;\n\n\t\treturn null;\n\t}\n\n\tget partialDuration(): boolean {\n\t\tif (!Number.isFinite(this.duration)) return false;\n\n\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\treturn this.duration < signatureDuration;\n\t}\n\n\tpostRegulate(): void {\n\t\tthis.endEvent = new EventTerm({ tick: this.duration, x: this.position.right });\n\n\t\tthis.updateRoundX();\n\t\tsolveGraceEvents(this);\n\t\tsolveTremoloPairs(this);\n\t\tthis.updateContextTick();\n\t}\n\n\tupdateRoundX(): void {\n\t\tconst tickToX = this.tickToX;\n\t\tif (tickToX)\n\t\t\tthis.events.forEach((event) => {\n\t\t\t\tconst x = tickToX[event.tick];\n\t\t\t\tif (Number.isFinite(x)) event.roundX = x;\n\t\t\t});\n\t}\n\n\tupdateContextTick(): void {\n\t\tif (!this.staffGroups) return;\n\t\tconst contexts = this.contexts.flat(1);\n\t\tthis.staffGroups.flat(1).forEach((staffIndex) => {\n\t\t\tconst terms = [...this.events.filter((e) => e.staff === staffIndex), ...contexts.filter((c) => c.staff === staffIndex)];\n\t\t\tterms.sort((t1, t2) => t2.x - t1.x); // order by x from right to left\n\n\t\t\tlet tick = this.duration;\n\t\t\tterms.forEach((term) => {\n\t\t\t\tif (term instanceof EventTerm) {\n\t\t\t\t\tif (!term.fullMeasureRest && !term.zeroHolder) tick = term.tick;\n\t\t\t\t} else if (term instanceof ContextedTerm) term.tick = tick;\n\t\t\t});\n\t\t});\n\t}\n\n\tasSolution(ref: SpartitoMeasure = undefined): RegulationSolution {\n\t\tif (!this.regulated) return null;\n\n\t\t//let timeSignature = undefined;\n\t\t//if (ref && printFraction(ref.timeSignature) !== printFraction(this.timeSignature)) timeSignature = this.timeSignature;\n\n\t\treturn {\n\t\t\t//timeSignature,\n\t\t\tevents: this.events.map((e) => {\n\t\t\t\tconst se = {\n\t\t\t\t\tid: e.id,\n\t\t\t\t\ttick: e.tick,\n\t\t\t\t\ttickGroup: e.tickGroup,\n\t\t\t\t\ttimeWarp: e.timeWarp,\n\t\t\t\t} as RegulationSolutionEvent;\n\n\t\t\t\tif (ref) {\n\t\t\t\t\tconst refEvent = ref.events.find((re) => re.id === e.id);\n\t\t\t\t\tif (refEvent) {\n\t\t\t\t\t\tif (e.division !== refEvent.division) se.division = e.division;\n\t\t\t\t\t\tif (e.dots !== refEvent.dots) se.dots = e.dots;\n\t\t\t\t\t\tif (e.grace !== refEvent.grace) se.grace = !!e.grace;\n\t\t\t\t\t\tif (e.beam !== refEvent.beam) se.beam = e.beam;\n\t\t\t\t\t\tif (e.fullMeasureRest !== refEvent.fullMeasureRest) se.fullMeasure = e.fullMeasureRest;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn se;\n\t\t\t}),\n\t\t\tvoices: this.voices,\n\t\t\tduration: this.duration,\n\t\t\tpriority: -this.solutionStat?.loss,\n\t\t};\n\t}\n\n\tapplySolution(solution: RegulationSolution): void {\n\t\tif (solution.timeSignature) {\n\t\t\tthis.basics.forEach((basic) => {\n\t\t\t\tbasic.timeSignature = solution.timeSignature;\n\t\t\t\tbasic.doubtfulTimesig = false;\n\t\t\t});\n\t\t}\n\n\t\tthis.voices = solution.voices;\n\t\tthis.duration = solution.duration;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.timeWarp = null;\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\n\t\t\tconst se = solution.events?.find((e) => e.id === event.id);\n\t\t\tif (se) {\n\t\t\t\tevent.tick = se.tick;\n\t\t\t\tevent.timeWarp = se.timeWarp;\n\t\t\t\tevent.tickGroup = se.tickGroup;\n\n\t\t\t\tif (Number.isFinite(se.division)) event.division = se.division;\n\t\t\t\tif (Number.isFinite(se.dots)) event.dots = se.dots;\n\t\t\t\tif (se.beam !== undefined) event.beam = se.beam as StemBeam;\n\t\t\t\tif (se.grace !== undefined) event.grace = se.grace ? GraceType.Grace : undefined;\n\t\t\t\tif (se.fullMeasure) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tif (Number.isFinite(solution.priority)) this.solutionStat = { loss: -solution.priority };\n\n\t\tthis.postRegulate();\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.voices = null;\n\t\tthis.duration = null;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\t\t\tevent.timeWarp = null;\n\t\t});\n\t}\n\n\tregulateTest(): void {\n\t\tthis.duration = 0;\n\t\tthis.voices = this.rows.map((row) => row.events.map((e) => e.id));\n\t\tthis.voices.forEach((ids) => {\n\t\t\tlet tick = 0;\n\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\t\t\tevents.forEach((e, index) => {\n\t\t\t\te.tickGroup = index;\n\t\t\t\te.tick = tick;\n\n\t\t\t\ttick += e.duration;\n\t\t\t});\n\n\t\t\tthis.duration = Math.max(this.duration, tick);\n\t\t});\n\t}\n\n\tregulateSimple(): void {\n\t\tSimplePolicy.computeMeasureTicks(this);\n\t\tSimplePolicy.computeMeasureVoices(this);\n\t}\n\n\tasync regulateEquations(options: EquationPolicy.RegulatorOptions): Promise {\n\t\tawait EquationPolicy.regulateMeasure(this, options);\n\t}\n\n\t// compute event.tick, event.tickGroup, event.timeWarp, voices, duration\n\tasync regulate({ policy = 'advanced', ...options }: RegulationOptions = {}): Promise {\n\t\tswitch (policy) {\n\t\t\tcase 'test':\n\t\t\t\tthis.regulateTest();\n\n\t\t\t\tbreak;\n\t\t\tcase 'equations':\n\t\t\tcase 'advanced':\n\t\t\t\tawait this.regulateEquations(options);\n\n\t\t\t\tbreak;\n\t\t\tcase 'simple':\n\t\t\tdefault:\n\t\t\t\tthis.regulateSimple();\n\t\t}\n\n\t\tthis.postRegulate();\n\t}\n\n\tcreatePatch(): PatchMeasure {\n\t\treturn new PatchMeasure({\n\t\t\tmeasureIndex: this.measureIndex,\n\t\t\tstaffMask: this.staffMask,\n\t\t\tbasic: this.basics[0],\n\t\t\t//points: [],\n\t\t\tevents: this.events,\n\t\t\tcontexts: this.contexts,\n\t\t\tmarks: this.marks,\n\t\t\tvoices: this.voices,\n\t\t});\n\t}\n\n\tcreateClusters(): EventCluster[] {\n\t\tconst trueEventIds = this.voices && new Set(this.voices.flat(1));\n\n\t\treturn this.staffGroups\n\t\t\t.filter((idx) => idx.length)\n\t\t\t.map((staffIndices) => {\n\t\t\t\tconst staffY0 = this.position.staffYs[0];\n\t\t\t\tconst staffYn = (n) => this.position.staffYs[staffIndices.indexOf(n)] - staffY0;\n\n\t\t\t\tconst events = this.events.filter((event) => staffIndices.includes(event.staff));\n\t\t\t\tif (!events.length) return null;\n\n\t\t\t\tconst elements: EventElement[] = events.map((event) => ({\n\t\t\t\t\tindex: event.id,\n\t\t\t\t\tvoice: (this.voices || []).findIndex((voice) => voice.includes(event.id)),\n\t\t\t\t\ttype: event.rest ? EventElementType.REST : EventElementType.CHORD,\n\t\t\t\t\tstaff: staffIndices.indexOf(event.staff),\n\t\t\t\t\tx: event.tipX,\n\t\t\t\t\tpivotX: event.pivotX,\n\t\t\t\t\ty1: staffYn(event.staff) + (event.stemDirection === 'u' ? event.tipY : event.ys[event.ys.length - 1]),\n\t\t\t\t\ty2: staffYn(event.staff) + (event.stemDirection === 'u' ? event.ys[0] : event.tipY),\n\t\t\t\t\theadY: event.stemDirection === 'u' ? event.ys[0] : event.ys[event.ys.length - 1],\n\t\t\t\t\tfeature: event.feature,\n\t\t\t\t\tdivision: event.division,\n\t\t\t\t\tdots: event.dots,\n\t\t\t\t\tbeam: event.beam || null,\n\t\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\t\tgrace: !!event.grace,\n\t\t\t\t\ttremoloCatcher: event.tremoloCatcher,\n\t\t\t\t\ttimeWarped: !!event.timeWarp,\n\t\t\t\t\tfullMeasure: event.fullMeasureRest,\n\t\t\t\t\ttick: event.tick || 0,\n\t\t\t\t\tfake: !event.fullMeasureRest && !event.grace && this.voices && !trueEventIds.has(event.id), // tremoloCatcher deemed as fake\n\t\t\t\t}));\n\t\t\t\tif (!elements.some((elem) => !elem.fake)) return null;\n\n\t\t\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\t\t\t// BOS & EOS\n\t\t\t\telements.unshift({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\ttype: EventElementType.BOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.left,\n\t\t\t\t\tpivotX: this.position.left,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: this.duration < signatureDuration,\n\t\t\t\t\ttick: 0,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\t\t\t\telements.push({\n\t\t\t\t\tindex: -1,\n\t\t\t\t\ttype: EventElementType.EOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.right,\n\t\t\t\t\tpivotX: this.position.right,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: false,\n\t\t\t\t\ttick: this.duration,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\n\t\t\t\tlet matrixH = null;\n\t\t\t\tif (this.voices) {\n\t\t\t\t\tmatrixH = elements.map(() => elements.map(() => 0));\n\n\t\t\t\t\tthis.voices.forEach((voice) => {\n\t\t\t\t\t\tlet tar = 0;\n\t\t\t\t\t\tvoice.forEach((id) => {\n\t\t\t\t\t\t\tconst src = elements.findIndex((e) => e.index === id);\n\t\t\t\t\t\t\tif (src > 0 && tar >= 0) matrixH[src][tar] = 1;\n\t\t\t\t\t\t\ttar = src;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (tar >= 0) matrixH[elements.length - 1][tar] = 1;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst annotation = { ...this.solutionStat, patched: this.patched };\n\n\t\t\t\tconst backgroundImages =\n\t\t\t\t\tthis.backgroundImages &&\n\t\t\t\t\tthis.backgroundImages.map(({ url, position }) => ({\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t...position,\n\t\t\t\t\t\t\ty: position.y - staffY0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\n\t\t\t\treturn new EventCluster({\n\t\t\t\t\tindex: this.measureIndex,\n\t\t\t\t\tduration: this.duration,\n\t\t\t\t\tsignatureDuration,\n\t\t\t\t\tstaffY0,\n\t\t\t\t\telements,\n\t\t\t\t\tmatrixH,\n\t\t\t\t\tannotation,\n\t\t\t\t\tbackgroundImages,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n\n\tapplyClusters(clusters: EventCluster[]): void {\n\t\tconst id_max = this.events.reduce((max, event) => Math.max(max, event.id), 0) + 1;\n\t\tthis.matrixH = Array(id_max + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(id_max).fill(0));\n\n\t\tclusters.forEach((cluster) => {\n\t\t\tconst ids = cluster.elements.map((e) => e.index);\n\t\t\tconsole.assert(cluster.matrixH.length === ids.length - 1, 'unexpected matrixH size:', cluster.matrixH.length, ids.length);\n\n\t\t\tfor (let is = 1; is < ids.length; ++is) {\n\t\t\t\tfor (let it = 0; it < ids.length - 1; ++it) {\n\t\t\t\t\tconst srcId = ids[is] < 0 ? id_max : ids[is];\n\t\t\t\t\tconst tarId = ids[it];\n\n\t\t\t\t\tthis.matrixH[srcId][tarId] = cluster.matrixH[is - 1][it];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// event predisposition\n\t\t\tcluster.elements.forEach((elem) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === elem.index);\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.predisposition = elem.predisposition;\n\t\t\t\t\tif (event.predisposition.grace !== undefined) event.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// estimated measure duration\n\t\tthis.estimatedDuration = clusters.reduce((sum, cluster) => sum + cluster.estimatedDuration, 0) / clusters.length;\n\t}\n}\n\nexport { SpartitoMeasure, EquationPolicy };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { Term, EventTerm, ContextedTerm, ChordmodeTerm, MarkTerm, Accessory, GraceType, TremoloLink } from './term';\nimport { HashVector } from './hashVector';\nimport { StaffLayout } from '../staffLayout';\nimport * as measureLayout from '../measureLayout';\n\ninterface Rect {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n}\n\ninterface ChordRect {\n\tx: number;\n\tstemX: number;\n\twidth: number;\n\ttop: number;\n\tbottom: number;\n\tstemDirection: string;\n\ttip?: { x: number; y: number };\n}\n\ninterface VLine {\n\tx: number;\n\ty1: number;\n\ty2: number;\n}\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ntype DivisionVecotor = [number, number, number, number, number, number, number, number, number]; // [0, 1, 2, 3, 4, 5, 6, 7, 8]\n\ntype MeasureBarType = null | 'Terminal' | 'Segment' | 'VoltaRight';\n\ninterface EventFeature {\n\tdivisions: DivisionVecotor;\n\tdots: [number, number]; // [1, 2]\n\tbeams: [number, number, number]; // ['Open', 'Continue', 'Close']\n\tstemDirections: [number, number]; // ['u', 'd']\n\tgrace: number;\n\ttremoloCatcher: number;\n}\n\ninterface EventPredisposition {\n\tgrace: boolean;\n\ttimeWarped: number;\n\tfullMeasure: number;\n\tfake: number;\n\tfakeP: number;\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tdivisionVector: DivisionVecotor;\n\tdotsVector: [number, number, number]; // [0, 1, 2]\n\tbeamVector: [number, number, number, number]; // [null, open, continue, close]\n\tstemDirectionVector: [number, number, number]; // [null, up, down]\n}\n\ninterface ChordColumn {\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\tys: number[];\n\tnoteIds: string[]; // order by upwards\n\tdivision: number;\n\tdots: number;\n\trest: boolean;\n\tstemDirection: string;\n\taccessories?: Accessory[];\n\tgrace?: GraceType;\n\ttremolo?: number;\n\ttremoloLink?: TremoloLink;\n\tbeam?: string;\n\ttip?: { x: number; y: number };\n\n\t//stemTipY?: number;\n\n\t// for topology\n\tstaff?: number;\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature?: EventFeature;\n}\n\ninterface EventMeasure {\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[];\n}\n\ninterface StaffBasic {\n\ttimeSignature: Fraction;\n\ttimeSigNumeric: boolean;\n\tkeySignature: number;\n\tdoubtfulTimesig: boolean;\n}\n\ninterface EventMeasureColumn {\n\tmeasureIndex: number;\n\t//startX: number;\n\t//width: number;\n\n\trows: EventMeasure[]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\txMap?: Map;\n\tregularLoss?: number;\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n}\n\ninterface EventSystem {\n\tstaffMask: number;\n\tcolumns: EventMeasureColumn[]; // [measure]\n}\n\ninterface TermMeasure extends Partial {\n\tterms: Term[];\n\tduration: number;\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n}\n\ntype TermRow = TermMeasure[];\n\ninterface TermStaff {\n\trows: TermRow[]; // [system]\n}\n\ninterface Pitch {\n\tnote: number;\n\talter: number;\n}\n\nenum PageLayoutMethod {\n\tByLines = 'ByLines',\n\tByBlocks = 'ByBlocks',\n}\n\ninterface RecognitionSettings {\n\tenabledGauge: boolean; // staves straighten\n\tpageLayoutMethod: PageLayoutMethod;\n\tsemanticConfidenceThreshold: number;\n}\n\ninterface Crop {\n\taspect?: number | undefined;\n\tx?: number | undefined;\n\ty?: number | undefined;\n\twidth?: number | undefined;\n\theight?: number | undefined;\n\tunit?: 'px' | '%' | undefined;\n}\n\n//\t0 2 4\t\t\tr r tx\n//\t1 3 5\t\t\tr r ty\ntype Matrix2x3 = [number, number, number, number, number, number];\n\ninterface SourceImageFile {\n\tname: string;\n\tsize: number;\n\turl: string;\n\tcrop?: Crop;\n\tmatrix: Matrix2x3;\n\tdimensions: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tinterval: number;\n\tneedGauge?: boolean;\n}\n\ninterface Area extends Rect {\n\tstaves: {\n\t\tinterval: number;\n\t\tmiddleRhos: number[];\n\t\tphi1: number;\n\t\tphi2: number;\n\t};\n}\n\ninterface PageLayout {\n\tareas: Area[];\n}\n\ninterface MeasureBrief {\n\ttimeSignature: Fraction;\n}\n\ninterface VoiceMeasure {\n\ttickMap: { [key: number]: EventTerm | ChordmodeTerm };\n\tduration: number;\n\n\ttimeSignature?: Fraction;\n\ttimeSigNumeric?: boolean;\n\tkeySignature?: number;\n\n\tcontextedTerms: ContextedTerm[];\n\tmarks: MarkTerm[];\n\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbar?: string;\n\n\tempty?: boolean;\n\n\theadStaff?: number;\n\ttailStaff?: number;\n\n\ttrait?: HashVector;\n\tvoiceIndex?: number;\n}\n\ninterface TermVoice {\n\tmode: string;\n\tmeasures: VoiceMeasure[];\n}\n\ninterface VoicesStaff {\n\tcontext?: string;\n\tname?: string;\n\tvoices: TermVoice[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n\tslashSystemSeparator: boolean;\n}\n\ninterface MusicHeaders {\n\ttitle: string;\n\tsubtitle: string;\n\tsubsubtitle: string;\n\tcomposer: string;\n\tpoet: string;\n\tarranger: string;\n\topus: string;\n\tcopyright: string;\n\tinstrument: string;\n\tdedication: string;\n\ttagline: string;\n}\n\ninterface MusicSheet {\n\ttitle: string;\n\tpageSize: {\n\t\t// in pixels\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tunitSize: number;\n\tmeasureLayout?: measureLayout.MeasureLayout;\n\tstaffLayout: StaffLayout;\n\tpaperOptions?: Partial;\n\theaders: Partial;\n\n\tvoiceStaves: VoicesStaff[];\n\tinstrumentDict: { [key: string]: string };\n}\n\ninterface Performing {\n\tnotation: MetaNotation;\n\ttokenMap: Map;\n}\n\ntype RegulationPolicy = 'test' | 'simple' | 'equations' | 'advanced';\n\ninterface RegulationOptions {\n\tpolicy?: RegulationPolicy;\n\tquota?: number;\n\t[key: string]: any;\n}\n\ninterface ScoreData {\n\tversion?: number;\n\t[key: string]: any;\n}\n\ninterface AdditionalLineStack {\n\tleft: number;\n\tright: number;\n\tn: number;\n}\n\ninterface RegulationSolutionEvent {\n\tid: number;\n\ttick: number;\n\ttickGroup: number;\n\ttimeWarp: Fraction;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: string;\n\tgrace?: boolean;\n\tfullMeasure?: boolean;\n}\n\ninterface RegulationSolution {\n\tevents: RegulationSolutionEvent[];\n\tvoices: number[][];\n\tduration: number;\n\tpriority?: number;\n\testimatedDuration?: number;\n\ttimeSignature?: Fraction;\n}\n\ninterface BackgroundImage {\n\turl: string;\n\tposition: Rect;\n\toriginal?: boolean;\n}\n\nenum TextType { //\tLEVEL\t\t\tCHARSET\n\tTitle = 'Title', // page\t\t\t\tgeneral\n\tAuthor = 'Author', // page\t\t\t\tgeneral\n\tTempoText = 'TempoText', // measure\t\t\tspecific vocabulary\n\tTempoNumeral = 'TempoNumeral', // measure\t\t\tsymbolic and numeric\n\tTextualMark = 'TextualMark', // term\t\t\t\tspecific vocabulary\n\tLyric = 'Lyric', // term\t\t\t\tgeneral\n\tInstrument = 'Instrument', // system\t\t\tspecific vocabulary\n\tMeasureNumber = 'MeasureNumber', // system\t\t\tnumeric\n\tTimes = 'Times', // staff\t\t\tnumeric\n\tAlternation1 = 'Alternation1', // measure\t\t\tnumeric\n\tAlternation2 = 'Alternation2', // measure\t\t\tnumeric\n\tChord = 'Chord', // measure\t\t\tspecific domian\n\tPageMargin = 'PageMargin', // page\t\t\t\tgeneral\n\tOther = 'Other', // page\t\t\t\tgeneral\n}\n\nexport {\n\tRect,\n\tChordRect,\n\tVLine,\n\tFraction,\n\tMeasureBarType,\n\tEventFeature,\n\tEventPredisposition,\n\tChordColumn,\n\tEventMeasure,\n\tEventMeasureColumn,\n\tEventSystem,\n\tTermMeasure,\n\tTermRow,\n\tTermStaff,\n\tPitch,\n\tPageLayoutMethod,\n\tRecognitionSettings,\n\tSourceImageFile,\n\tPageLayout,\n\tStaffBasic,\n\tVoiceMeasure,\n\tVoicesStaff,\n\tTermVoice,\n\tMeasureBrief,\n\tAdditionalLineStack,\n\tTextType,\n\tMusicSheet,\n\tPerforming,\n\tRegulationOptions,\n\tScoreData,\n\tMusicHeaders,\n\tMatrix2x3,\n\tRegulationSolutionEvent,\n\tRegulationSolution,\n\tBackgroundImage,\n};\n","import { MIDI } from '@k-l-lambda/music-widgets';\n\nimport { Fraction } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ArpeggioStyle, EventTerm, GraceType, RestType, StemBeam, TermPitch, TremoloLink } from './term';\nimport { noteToPitch } from './utils';\n\n// NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI\n\ninterface EventUIAgent {\n\treadonly id: number;\n\treadonly duration: number;\n\n\t//ys: number[];\n\tpitches: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\tgrace: boolean; //\n\tbeam: StemBeam;\n\ttimeWarp: string; //\n\ttremolo: number;\n\ttremoloLink: TremoloLink;\n\tglissando: boolean;\n\tarpeggioStyle: ArpeggioStyle;\n\ttick: number;\n}\n\ninterface MeasureUIAgent {\n\treadonly measureIndex: number;\n\ttimeSignature: Fraction;\n\tdoubtfulTimesig: boolean;\n\tkeySignature: number;\n\t//readonly events: EventUIAgent[];\n\tduration: number;\n\treadonly voices: number[][];\n}\n\nclass EditableEvent extends EventTerm {\n\tvoice: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t}\n\n\tget agent(): EventUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget(target, key): any {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'arpeggioStyle': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? null : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'glissando': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? false : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\treturn !!self.grace;\n\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\treturn self.timeWarp ? `${self.timeWarp.numerator}/${self.timeWarp.denominator}` : null;\n\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\treturn self.multiplier ? `${self.multiplier.numerator}/${self.multiplier.denominator}` : null;\n\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn self.pitches;\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'glissando':\n\t\t\t\t\tcase 'arpeggioStyle':\n\t\t\t\t\t\t(self as any)[key] = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\tself.grace = value ? GraceType.Grace : null;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\tself.timeWarp = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.timeWarp = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\tself.multiplier = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.multiplier = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => [\n\t\t\t\t'id',\n\t\t\t\t'duration',\n\t\t\t\t'rest',\n\t\t\t\t'division',\n\t\t\t\t'dots',\n\t\t\t\t'stemDirection',\n\t\t\t\t'tying',\n\t\t\t\t'tied',\n\t\t\t\t'beam',\n\t\t\t\t'timeWarp',\n\t\t\t\t'multiplier',\n\t\t\t\t'tremolo',\n\t\t\t\t'tremoloLink',\n\t\t\t\t'glissando',\n\t\t\t\t'arpeggioStyle',\n\t\t\t\t'tick',\n\t\t\t\t'grace',\n\t\t\t\t'pitches',\n\t\t\t],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n}\n\nclass EditableMeasure extends SpartitoMeasure {\n\tstatic className = 'EditableMeasure';\n\tstatic blackKeys = [];\n\n\tevents: EditableEvent[] = null;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\n\t\tthis.events = data.events;\n\t\tif (this.events?.some((event) => !(event instanceof EditableEvent))) this.events = this.events.map((event) => new EditableEvent(event));\n\n\t\tif (this.voices) this.syncVoiceToEvents();\n\t}\n\n\tsyncVoiceToEvents(): void {\n\t\tthis.events.forEach((event) => (event.voice = -1));\n\t\tthis.voices.forEach((voice, voiceIndex) => {\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\tif (event) event.voice = voiceIndex;\n\t\t\t\telse console.warn('no event with id:', id, this.events.length);\n\t\t\t});\n\t\t});\n\t}\n\n\tsyncVoiceFromEvents(): void {\n\t\tconst voices: EditableEvent[][] = [];\n\t\tthis.events.forEach((event) => {\n\t\t\tif (event?.voice >= 0) {\n\t\t\t\tvoices[event.voice] = voices[event.voice] || [];\n\t\t\t\tvoices[event.voice].push(event);\n\t\t\t}\n\t\t});\n\n\t\tvoices.forEach((voice) => voice.sort((e1, e2) => e1.tick - e2.tick));\n\n\t\tthis.voices = voices.map((voice) => voice.map((event) => event.id));\n\t}\n\n\tget agent(): MeasureUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget: (target, key): any => {\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\treturn self[key];\n\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn self.voices?.map((voice) => voice.join(',')) || null;\n\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\treturn self.basics[0][key];\n\t\t\t\t\t//case 'events':\n\t\t\t\t\t//\treturn self.events.map(eventUIAgent);\n\t\t\t\t\tcase 'toJSON':\n\t\t\t\t\t\treturn () => ({\n\t\t\t\t\t\t\tmeasureIndex: self.measureIndex,\n\t\t\t\t\t\t\tvoices: self.voices,\n\t\t\t\t\t\t\tduration: self.duration,\n\t\t\t\t\t\t\ttimeSignature: self.basics[0].timeSignature,\n\t\t\t\t\t\t\tkeySignature: self.basics[0].keySignature,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\t//console.log('set:', key, value);\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\t(self.basics[0][key] as any) = value;\n\t\t\t\t\t\tself.basics = self.basics.map(() => self.basics[0]);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\tself.duration = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => ['measureIndex', 'timeSignature', 'doubtfulTimesig', 'keySignature', 'duration', 'voices'],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n\n\tmakeMIDI(bpm: number = 120): MIDI.MidiData {\n\t\tif (!this.regulated) return null;\n\n\t\tconst microsecondsPerBeat = 60e6 / bpm;\n\n\t\tconst header = { formatType: 0, ticksPerBeat: 480 };\n\t\tconst tracks = this.voices.map((ids, vi) => {\n\t\t\tconst events = ids\n\t\t\t\t.map((id) => {\n\t\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\t\tif (event) {\n\t\t\t\t\t\tconst subEvents = event.graceIds ? event.graceIds.map((id) => this.events.find((event) => event.id === id)) : [];\n\n\t\t\t\t\t\treturn [...subEvents, event];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [];\n\t\t\t\t})\n\t\t\t\t.flat(1);\n\n\t\t\tconst startTime = 0;\n\n\t\t\ttype Event = MIDI.MidiEvent & { [key: string]: any };\n\t\t\tconst midiEvents: Event[] = events\n\t\t\t\t.filter((event) => !event.rest && Number.isFinite(event.tick) && event.tick >= 0 && Number.isFinite(event.duration))\n\t\t\t\t.map((event) =>\n\t\t\t\t\tevent.pitches.map((pitch) => [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t\tvelocity: 96,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick + event.duration,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t)\n\t\t\t\t.flat(2);\n\n\t\t\tmidiEvents.sort(function (e1, e2) {\n\t\t\t\treturn e1.time - e2.time;\n\t\t\t});\n\n\t\t\tif (vi === 0) {\n\t\t\t\tmidiEvents.unshift(\n\t\t\t\t\t{\n\t\t\t\t\t\ttime: startTime,\n\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\tsubtype: 'timeSignature',\n\t\t\t\t\t\tnumerator: this.timeSignature.numerator,\n\t\t\t\t\t\tdenominator: this.timeSignature.denominator,\n\t\t\t\t\t\tthirtyseconds: 8,\n\t\t\t\t\t},\n\t\t\t\t\t{ time: startTime, type: 'meta', subtype: 'setTempo', microsecondsPerBeat }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tmidiEvents.forEach((event) => {\n\t\t\t\tevent.ticks = Math.round(event.time - startTime);\n\t\t\t});\n\t\t\tmidiEvents.forEach((event, i) => {\n\t\t\t\tevent.deltaTime = event.ticks - (i > 0 ? midiEvents[i - 1].ticks : 0);\n\t\t\t});\n\n\t\t\tmidiEvents.push({ deltaTime: 0, type: 'meta', subtype: 'endOfTrack' });\n\n\t\t\treturn midiEvents;\n\t\t});\n\n\t\treturn {\n\t\t\theader,\n\t\t\ttracks,\n\t\t};\n\t}\n}\n\nexport { EditableEvent, EditableMeasure };\n","import { SpartitoMeasure } from './spartitoMeasure';\nimport { StemBeam, WHOLE_DURATION } from './term';\nimport { fractionMul, gcd } from './utils';\n\nexport interface MeasureEvaluation {\n\tevents: number;\n\tvalidEvents: number;\n\tvoiceRugged: boolean;\n\tnullEvents: number;\n\tfakeEvents: number;\n\twarpedEvents: number;\n\tcomplicatedTimewarp: boolean;\n\tspaceTime: number;\n\tsurplusTime: number;\n\tdurationRate: number;\n\tbeamBroken: boolean;\n\tfractionalWarp: boolean;\n\tirregularWarpsN: number;\n\tirregularTick: boolean;\n\ttickTwist: number;\n\ttickOverlapped: boolean;\n\tgraceInVoice: boolean;\n\tgraceN: number;\n\tgraceDominant: boolean;\n\tperfect: boolean;\n\tfine: boolean;\n\terror: boolean;\n\tqualityScore: number;\n}\n\nconst BEAM_STATUS = {\n\t[StemBeam.Open]: 1,\n\t[StemBeam.Continue]: 0,\n\t[StemBeam.Close]: -1,\n};\n\nexport const evaluateMeasure = (measure: SpartitoMeasure): MeasureEvaluation => {\n\tif (!measure.regulated) return undefined;\n\n\tconst eventMap = measure.eventMap;\n\n\tconst events = measure.events.length;\n\tconst validEvents = measure.voices.flat(1).length;\n\tconst warpedEvents = measure.events.filter((e) => e.timeWarp).length;\n\tconst warps = new Set(\n\t\tmeasure.events.filter((e) => e.timeWarp && !(e.rest && e.division === 0)).map((e) => `${e.timeWarp!.numerator}/${e.timeWarp!.denominator}`)\n\t);\n\tconst irregularWarps = new Set(warps);\n\tirregularWarps.delete('2/3');\n\n\tconst fractionalWarp = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tif (!events.some((e) => e.timeWarp)) return false;\n\n\t\tlet denominator = 0;\n\t\tlet tickSum = 0;\n\t\tlet eventN = 0;\n\t\treturn events.some((event, i) => {\n\t\t\tconst d = event.timeWarp ? event.timeWarp.denominator : 0;\n\t\t\tif (d !== denominator) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\n\t\t\t\ttickSum = 0;\n\t\t\t\teventN = 0;\n\t\t\t}\n\n\t\t\tdenominator = d;\n\t\t\ttickSum += event.duration;\n\t\t\t++eventN;\n\n\t\t\tif (i === events.length - 1) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst tickOverlapped = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tlet tick = 0;\n\t\treturn events.some((event) => {\n\t\t\tif (event.grace) return false;\n\n\t\t\tif (event.tick < tick) return true;\n\t\t\ttick = event.tick + event.duration;\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst fractionalTimes = new Set(measure.events.filter((e) => e.timeWarp && e.timeWarp.denominator > 3).map((e) => e.duration));\n\tconst complicatedTimewarp = fractionalTimes.size > 1;\n\n\tconst literalDuration = fractionMul(WHOLE_DURATION, measure.timeSignature);\n\tconst sigDuration = measure.doubtfulTimesig ? measure.duration : literalDuration;\n\n\tconst inVoiceEvents = measure.voices.flat(1).map((id) => eventMap[id]);\n\n\t// Guard: detect corrupted event data in voices (e.g. missing division, NaN tick)\n\tconst corruptedVoiceEvent = inVoiceEvents.some(\n\t\t(event) =>\n\t\t\t!event ||\n\t\t\t!Number.isFinite(event.tick) ||\n\t\t\t!Number.isFinite(event.division) ||\n\t\t\tevent.division < 0 ||\n\t\t\t!Number.isFinite(event.duration) ||\n\t\t\tevent.duration <= 0\n\t);\n\n\tconst overranged = inVoiceEvents.reduce((over, event) => over || event.tick < 0 || event.tick + event.duration > sigDuration, false);\n\tconst overDuration = measure.duration > literalDuration;\n\tconst graceInVoice = inVoiceEvents.some((event) => event.grace);\n\tconst graceN = measure.events.filter((e) => e.grace).length;\n\tconst graceDominant = graceN >= inVoiceEvents.length;\n\n\tconst irregularTick = inVoiceEvents.some((event) => {\n\t\tlet t = event.tick * 2 ** (event.division + 2);\n\t\tif (event.timeWarp) t *= event.timeWarp.denominator;\n\n\t\tif (!Number.isFinite(t)) return true;\n\n\t\tconst fragment = gcd(Math.round(t), WHOLE_DURATION);\n\t\t//if (fragment < WHOLE_DURATION)\n\t\t//\tconsole.log(\"irregularTick:\", event.tick, fragment);\n\t\treturn fragment < WHOLE_DURATION;\n\t});\n\n\tconst beamStatus = measure.voices!.map((voice) =>\n\t\tvoice.reduce(\n\t\t\t({ status, broken }, ei, evi) => {\n\t\t\t\tconst event = eventMap[ei];\n\t\t\t\tif (event.beam) {\n\t\t\t\t\t// allow an open beam at beginning of a voice\n\t\t\t\t\tif (evi === 0 && [StemBeam.Continue, StemBeam.Close].includes(event.beam)) status = 1;\n\n\t\t\t\t\tstatus += BEAM_STATUS[event.beam];\n\t\t\t\t\tbroken = broken || !(status >= 0 && status <= 1);\n\t\t\t\t} else if (!event.rest) broken = broken || status !== 0;\n\n\t\t\t\treturn { status, broken };\n\t\t\t},\n\t\t\t{ status: 0, broken: false }\n\t\t)\n\t);\n\tconst beamBroken = beamStatus.some(({ broken }) => broken); // allow an open beam at the end of a voice (status == 1)\n\tlet spaceTime = 0;\n\tlet surplusTime = 0;\n\tmeasure.voices!.forEach((voice) => {\n\t\tconst eventDuration = voice.reduce((sum, ei) => sum + eventMap[ei].duration, 0);\n\t\tspaceTime += Math.max(0, measure.duration - eventDuration);\n\t\tsurplusTime += Math.max(0, eventDuration - measure.duration);\n\t});\n\tspaceTime /= WHOLE_DURATION;\n\tconst nullEvents = measure.events.filter(\n\t\t(e) => !e.grace && !e.fullMeasureRest && !e.tremoloCatcher && (!e.predisposition || e.predisposition.fakeP < 0.1) && !Number.isFinite(e.tick)\n\t).length;\n\n\tconst fakeEvents = measure.events.filter(\n\t\t(event) => !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !inVoiceEvents.includes(event)\n\t).length;\n\n\tconst { voiceRugged } = measure.voices!.flat(1).reduce(\n\t\t(result, ei) => {\n\t\t\tif (!result.voiceRugged) {\n\t\t\t\tif (result.es.has(ei)) return { voiceRugged: true, es: result.es };\n\t\t\t}\n\n\t\t\tresult.es.add(ei);\n\n\t\t\treturn result;\n\t\t},\n\t\t{ voiceRugged: false, es: new Set() }\n\t);\n\n\tconst tickTwist = measure.tickTwist || 0;\n\n\tconst error =\n\t\tcorruptedVoiceEvent ||\n\t\ttickTwist >= 1 ||\n\t\ttickOverlapped ||\n\t\tvoiceRugged ||\n\t\tmeasure.tickRatesInStaves.some((rate) => rate < 0) ||\n\t\tnullEvents > 2 ||\n\t\t!measure.timeSignature ||\n\t\toverranged ||\n\t\tmeasure.duration > sigDuration ||\n\t\tmeasure.events.some((event) => event.timeWarp && event.timeWarp.numerator / event.timeWarp.denominator <= 0.5);\n\tconst perfect =\n\t\t!error &&\n\t\t!overDuration &&\n\t\ttickTwist < 0.2 &&\n\t\t!fractionalWarp &&\n\t\t!irregularWarps.size &&\n\t\t!irregularTick &&\n\t\t!spaceTime &&\n\t\t!surplusTime &&\n\t\t!!measure.voices!.length &&\n\t\t!beamBroken &&\n\t\t!graceInVoice &&\n\t\t!graceDominant &&\n\t\t(measure.duration === sigDuration || (Number.isFinite(measure.estimatedDuration) && measure.estimatedDuration <= sigDuration * 0.75));\n\tconst fine = !error && !overDuration && tickTwist < 0.3 && !fractionalWarp && !irregularTick && !surplusTime && !beamBroken && !graceInVoice;\n\n\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\tconst durationRate = measure.duration / expectDuration;\n\n\tlet qualityScore = 0;\n\tif (measure.patched && !corruptedVoiceEvent) qualityScore = 1;\n\telse if (!error) {\n\t\tconst spaceLoss = Math.tanh(Math.abs(spaceTime / Math.max(1, measure.voices.length)) * 1);\n\n\t\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\t\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\t\tconst durationLoss = expectDuration ? Math.max(0, 1 - durationRate) ** 2 : 0;\n\t\tconst warpsLoss = Math.tanh(irregularWarps.size);\n\n\t\tqualityScore = (1 - spaceLoss) * (1 - durationLoss) * (1 - warpsLoss) * (1 - tickTwist ** 2);\n\t}\n\n\treturn {\n\t\tevents,\n\t\tvalidEvents,\n\t\tvoiceRugged,\n\t\tnullEvents,\n\t\tfakeEvents,\n\t\twarpedEvents,\n\t\tcomplicatedTimewarp,\n\t\tspaceTime,\n\t\tsurplusTime,\n\t\tdurationRate,\n\t\tbeamBroken,\n\t\tfractionalWarp,\n\t\tirregularWarpsN: irregularWarps.size,\n\t\tirregularTick,\n\t\ttickTwist,\n\t\ttickOverlapped,\n\t\tgraceInVoice,\n\t\tgraceN,\n\t\tgraceDominant,\n\t\tperfect,\n\t\tfine,\n\t\terror,\n\t\tqualityScore,\n\t};\n};\n","import { SimpleClass } from '../starry/aux_/typedJSON';\n\nenum LayoutType {\n\tOrdinary = 'ordinary',\n\tFull = 'full',\n\tConservative = 'conservative',\n\tOnce = 'once',\n}\n\ninterface MeasureLayout {\n\tserialize(type: LayoutType): number[];\n\n\tseq: MeasureSeq;\n\tcode: string;\n}\n\nexport type MeasureSeq = MeasureLayout[];\n\nconst spreadMeasureSeq = (seq: MeasureSeq, type: LayoutType = LayoutType.Ordinary): number[] => [].concat(...seq.map((layout) => layout.serialize(type)));\n\nconst seqToCode = (seq: MeasureSeq, { withBrackets = false }: { withBrackets?: boolean } = {}): string => {\n\t//const code = seq.map(layout => layout.code).join(\", \");\n\tlet code = '';\n\tlet inRange = false;\n\n\tfor (let i = 0; i < seq.length; ++i) {\n\t\tconst middle = seq[i - 1] instanceof SingleMLayout && seq[i] instanceof SingleMLayout && seq[i + 1] instanceof SingleMLayout;\n\t\tif (middle) {\n\t\t\tif (!inRange) {\n\t\t\t\tcode += '..';\n\t\t\t\tinRange = true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (i > 0 && !inRange) code += ', ';\n\n\t\t\tinRange = false;\n\n\t\t\tcode += seq[i].code;\n\t\t}\n\t}\n\n\treturn withBrackets ? `[${code}]` : code;\n};\n\nclass SingleMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'SingleMLayout';\n\n\tmeasure: number;\n\n\tstatic from(measure: number) {\n\t\tconst layout = new SingleMLayout();\n\t\tlayout.measure = measure;\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(): number[] {\n\t\treturn [this.measure];\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this];\n\t}\n\n\tget code(): string {\n\t\treturn this.measure.toString();\n\t}\n}\n\nclass BlockMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'BlockMLayout';\n\n\tseq: MeasureSeq;\n\n\tstatic trimSeq(seq: MeasureSeq): MeasureSeq {\n\t\tconst seq2 = [];\n\t\tfor (const layout of seq) {\n\t\t\tif (layout instanceof BlockMLayout) {\n\t\t\t\tfor (const sub of layout.seq) seq2.push(sub);\n\t\t\t} else seq2.push(layout);\n\t\t}\n\n\t\t// reduce duplicated or backwards single measures\n\t\tconst seq3 = [];\n\t\tlet measure = null;\n\t\tfor (const layout of seq2) {\n\t\t\tif (layout instanceof SingleMLayout) {\n\t\t\t\tif (layout.measure > measure) {\n\t\t\t\t\tseq3.push(layout);\n\t\t\t\t\tmeasure = layout.measure;\n\t\t\t\t}\n\t\t\t} else seq3.push(layout);\n\t\t}\n\n\t\treturn seq3;\n\t}\n\n\tstatic fromSeq(seq: MeasureSeq): BlockMLayout {\n\t\tconst layout = new BlockMLayout();\n\t\tlayout.seq = BlockMLayout.trimSeq(seq);\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\treturn spreadMeasureSeq(this.seq, type);\n\t}\n\n\tget code(): string {\n\t\treturn seqToCode(this.seq, { withBrackets: true });\n\t}\n}\n\nclass VoltaMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'VoltaMLayout';\n\n\ttimes: number;\n\tbody: MeasureSeq;\n\talternates: MeasureSeq[];\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst bodySeq = spreadMeasureSeq(this.body);\n\n\t\tif (this.alternates) {\n\t\t\tconst alternateSeqs = this.alternates.map((seq) => spreadMeasureSeq(seq));\n\t\t\tconst lastAlternateSeq = alternateSeqs[alternateSeqs.length - 1];\n\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\t\treturn bodySeq.concat(...alternateSeqs);\n\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Full: {\n\t\t\t\t\tconst priorSeq = [].concat(\n\t\t\t\t\t\t...Array(this.times - 1)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map((_, i) => [...bodySeq, ...alternateSeqs[i % (this.times - 1)]])\n\t\t\t\t\t);\n\n\t\t\t\t\treturn [...priorSeq, ...bodySeq, ...lastAlternateSeq];\n\t\t\t\t}\n\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn [...bodySeq, ...lastAlternateSeq];\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn bodySeq;\n\n\t\t\t\tcase LayoutType.Full:\n\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t...Array(this.times)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map(() => bodySeq)\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn('the current case not handled:', type, this);\n\t}\n\n\tget seq(): MeasureSeq {\n\t\tconst alternates = this.alternates ? this.alternates[this.alternates.length - 1] : [];\n\n\t\treturn [...this.body, ...alternates];\n\t}\n\n\tget code(): string {\n\t\tconst body = seqToCode(this.body, { withBrackets: true });\n\n\t\tlet code = `${this.times}*${body}`;\n\t\tif (this.alternates) code += '{' + this.alternates.map((seq) => seqToCode(seq, { withBrackets: seq.length > 1 })).join(', ') + '}';\n\n\t\treturn code;\n\t}\n}\n\nclass ABAMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'ABAMLayout';\n\n\tmain: MeasureLayout;\n\trest: MeasureSeq;\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst seqA = this.main.serialize(type);\n\t\tconst seqA_ = spreadMeasureSeq(this.main.seq, LayoutType.Once);\n\t\tconst seqB = spreadMeasureSeq(this.rest, type);\n\n\t\tswitch (type) {\n\t\t\tcase LayoutType.Ordinary: // A B\n\t\t\t\treturn [...seqA, ...seqB];\n\n\t\t\tcase LayoutType.Once: // B A'\n\t\t\t\treturn [...seqB, ...seqA_];\n\n\t\t\tcase LayoutType.Conservative: // A B A'\n\t\t\tcase LayoutType.Full: // A B A'\n\t\t\t\treturn [...seqA, ...seqB, ...seqA_];\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn('the current case not handled:', type, this);\n\t\t}\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this.main, ...this.rest];\n\t}\n\n\tget code(): string {\n\t\treturn '<' + this.main.code + ', ' + seqToCode(this.rest) + '>';\n\t}\n}\n\nexport { LayoutType, MeasureLayout, SingleMLayout, BlockMLayout, VoltaMLayout, ABAMLayout };\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 13],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 15],\n\t\t$V3 = [1, 26],\n\t\t$V4 = [1, 29],\n\t\t$V5 = [1, 28],\n\t\t$V6 = [1, 30],\n\t\t$V7 = [5, 13, 22, 27, 29],\n\t\t$V8 = [2, 15],\n\t\t$V9 = [1, 32],\n\t\t$Va = [5, 14, 21, 22, 27, 28, 29];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tmeasure_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tindex_wise_measure_layout: 6,\n\t\t\t'i:': 7,\n\t\t\t's:': 8,\n\t\t\tsegment_wise_measure_layout: 9,\n\t\t\tiw_sequence: 10,\n\t\t\tiw_item: 11,\n\t\t\trange: 12,\n\t\t\t',': 13,\n\t\t\tUNSIGNED: 14,\n\t\t\t'..': 15,\n\t\t\tsingle: 16,\n\t\t\tiw_block_item: 17,\n\t\t\tiw_volta: 18,\n\t\t\tiw_aba: 19,\n\t\t\tiw_block: 20,\n\t\t\t'[': 21,\n\t\t\t']': 22,\n\t\t\t'*': 23,\n\t\t\tiw_optional_alternates: 24,\n\t\t\tiw_alternates: 25,\n\t\t\t'{': 26,\n\t\t\t'}': 27,\n\t\t\t'<': 28,\n\t\t\t'>': 29,\n\t\t\tsw_sequence: 30,\n\t\t\tsw_item: 31,\n\t\t\tsegment: 32,\n\t\t\tsw_block_item: 33,\n\t\t\tsw_volta: 34,\n\t\t\tsw_aba: 35,\n\t\t\tsw_block: 36,\n\t\t\tsw_optional_alternates: 37,\n\t\t\tsw_alternates: 38,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: {\n\t\t\t2: 'error',\n\t\t\t5: 'EOF',\n\t\t\t7: 'i:',\n\t\t\t8: 's:',\n\t\t\t13: ',',\n\t\t\t14: 'UNSIGNED',\n\t\t\t15: '..',\n\t\t\t21: '[',\n\t\t\t22: ']',\n\t\t\t23: '*',\n\t\t\t26: '{',\n\t\t\t27: '}',\n\t\t\t28: '<',\n\t\t\t29: '>',\n\t\t},\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[4, 2],\n\t\t\t[4, 2],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 3],\n\t\t\t[10, 3],\n\t\t\t[12, 3],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[16, 1],\n\t\t\t[17, 1],\n\t\t\t[20, 3],\n\t\t\t[18, 4],\n\t\t\t[24, 0],\n\t\t\t[24, 1],\n\t\t\t[25, 3],\n\t\t\t[19, 5],\n\t\t\t[9, 1],\n\t\t\t[30, 1],\n\t\t\t[30, 2],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[32, 1],\n\t\t\t[33, 1],\n\t\t\t[36, 3],\n\t\t\t[34, 4],\n\t\t\t[37, 0],\n\t\t\t[37, 1],\n\t\t\t[38, 3],\n\t\t\t[35, 4],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.$ = root(null, $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = root('index-wise', $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tthis.$ = root('segment-wise', serialize($$[$0]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\tcase 23:\n\t\t\t\t\tif ($$[$0].length === 1 && $$[$0][0].__prototype === 'BlockMLayout') this.$ = $$[$0][0];\n\t\t\t\t\telse this.$ = blockLayout($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\tcase 24:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 7:\n\t\t\t\tcase 11:\n\t\t\t\tcase 12:\n\t\t\t\tcase 13:\n\t\t\t\tcase 14:\n\t\t\t\tcase 20:\n\t\t\t\tcase 27:\n\t\t\t\tcase 28:\n\t\t\t\tcase 29:\n\t\t\t\tcase 35:\n\t\t\t\t\tthis.$ = $$[$0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], ...$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 10:\n\t\t\t\t\tthis.$ = range($$[$0 - 2], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = singleLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 16:\n\t\t\t\tcase 31:\n\t\t\t\t\tthis.$ = blockLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 17:\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 18:\n\t\t\t\tcase 33:\n\t\t\t\t\tthis.$ = voltaBlock($$[$0 - 3], $$[$0 - 1], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 19:\n\t\t\t\tcase 34:\n\t\t\t\t\tthis.$ = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 36:\n\t\t\t\t\tthis.$ = alternates($$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 3], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\t\tthis.$ = blockLayout([$$[$0]]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 30:\n\t\t\t\t\tthis.$ = segment($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 2], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 6: 3, 7: [1, 4], 8: [1, 5], 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 17] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 6: 18, 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 9: 19, 14: $V3, 21: $V4, 28: $V5, 30: 20, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 5: [2, 5], 13: $V6 },\n\t\t\to($V7, [2, 6]),\n\t\t\to($V7, [2, 7]),\n\t\t\to($V7, [2, 11]),\n\t\t\to($V7, [2, 12]),\n\t\t\to($V7, [2, 13]),\n\t\t\to($V7, [2, 14]),\n\t\t\to($V7, $V8, { 15: [1, 31], 23: $V9 }),\n\t\t\to($V7, [2, 16]),\n\t\t\t{ 11: 33, 14: [1, 34], 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 10: 35, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [2, 1] },\n\t\t\t{ 5: [2, 3] },\n\t\t\t{ 5: [2, 4] },\n\t\t\t{ 5: [2, 23], 14: $V3, 21: $V4, 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 24]),\n\t\t\to($Va, [2, 26]),\n\t\t\to($Va, [2, 27]),\n\t\t\to($Va, [2, 28]),\n\t\t\to($Va, [2, 29]),\n\t\t\to($Va, [2, 30], { 23: [1, 37] }),\n\t\t\to($Va, [2, 31]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 31: 38, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 39, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 11: 40, 12: 41, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 14: [1, 42] },\n\t\t\t{ 20: 43, 21: $V1 },\n\t\t\t{ 13: [1, 44] },\n\t\t\t{ 13: $V8, 23: $V9 },\n\t\t\t{ 13: $V6, 22: [1, 45] },\n\t\t\to($Va, [2, 25]),\n\t\t\t{ 21: $V4, 36: 46 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 47, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 22: [1, 48], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 8]),\n\t\t\to($V7, [2, 9]),\n\t\t\to($V7, [2, 10]),\n\t\t\to($V7, [2, 19], { 24: 49, 25: 50, 26: [1, 51] }),\n\t\t\t{ 10: 52, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\to([5, 13, 22, 26, 27, 29], [2, 17]),\n\t\t\to($Va, [2, 34], { 37: 53, 38: 54, 26: [1, 55] }),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 29: [1, 56], 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to([5, 14, 21, 22, 26, 27, 28, 29], [2, 32]),\n\t\t\to($V7, [2, 18]),\n\t\t\to($V7, [2, 20]),\n\t\t\t{ 10: 57, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 13: $V6, 29: [1, 58] },\n\t\t\to($Va, [2, 33]),\n\t\t\to($Va, [2, 35]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 59, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 37]),\n\t\t\t{ 13: $V6, 27: [1, 60] },\n\t\t\to($V7, [2, 22]),\n\t\t\t{ 14: $V3, 21: $V4, 27: [1, 61], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 21]),\n\t\t\to($Va, [2, 36]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 17: [2, 1], 18: [2, 3], 19: [2, 4] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tconst root = (type, data) => ({ __prototype: 'MesaureLayout', type, data });\n\n\tconst singleLayout = (n) => ({ __prototype: 'SingleMLayout', measure: Number(n) });\n\tconst blockLayout = (seq) => ({ __prototype: 'BlockMLayout', seq });\n\tconst voltaBlock = (times, body, alternates) => ({ __prototype: 'VoltaMLayout', times: Number(times), body, alternates });\n\tconst abaBlock = (main, rest) => ({ __prototype: 'ABAMLayout', main, rest });\n\n\tconst segment = (n) => ({ segment: true, length: Number(n) });\n\n\tconst alternates = (items) =>\n\t\titems.map((item) => {\n\t\t\tif (item.__prototype === 'BlockMLayout') return item.seq;\n\n\t\t\treturn [item];\n\t\t});\n\n\tconst range = (start, end) => {\n\t\tstart = Number(start);\n\t\tend = Number(end);\n\n\t\tif (!(end >= start)) throw new Error(`invalid measure range: ${start}..${end}`);\n\n\t\treturn Array(end + 1 - start)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => singleLayout(start + i));\n\t};\n\n\tconst serializeSeq = (item, options) => {\n\t\tif (item.segment) {\n\t\t\tconst index = options.index;\n\t\t\toptions.index += item.length;\n\n\t\t\treturn Array(item.length)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => singleLayout(index + i));\n\t\t}\n\n\t\treturn [serialize(item, options)];\n\t};\n\n\tconst serialize = (item, options = { index: 1 }) => {\n\t\tconst speard = (seq) => [].concat(...seq.map((it) => serializeSeq(it, options)));\n\n\t\tswitch (item.__prototype) {\n\t\t\tcase 'BlockMLayout':\n\t\t\t\titem.seq = speard(item.seq);\n\n\t\t\t\tbreak;\n\t\t\tcase 'VoltaMLayout':\n\t\t\t\titem.body = speard(item.body);\n\t\t\t\titem.alternates = item.alternates && item.alternates.map(speard);\n\n\t\t\t\tbreak;\n\t\t\tcase 'ABAMLayout':\n\t\t\t\titem.main = serialize(item.main, options);\n\t\t\t\titem.rest = speard(item.rest);\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn item;\n\t};\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 14;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([*,\\[\\]<>{}]))/, /^(?:(([1-9])([0-9])*))/, /^(?:(([a-z])+):)/, /^(?:\\.\\.)/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3, 4, 5], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","export interface RawItem {\n\tid: string;\n\tleftBounds: string[];\n\trightBounds: string[];\n\tconjunction: string;\n}\n\nexport enum StaffGroupType {\n\tDefault,\n\tBrace, // {}\n\tBracket, // <>\n\tSquare, // []\n}\n\nexport enum StaffConjunctionType {\n\tBlank,\n\tDashed,\n\tSolid,\n}\n\ntype StaffID = string;\n\nexport interface StaffGroup {\n\ttype: StaffGroupType;\n\tsubs?: StaffGroup[];\n\tstaff?: StaffID;\n\tlevel?: number;\n\tgrand?: boolean;\n}\n\ninterface StaffGroupTrait {\n\tgroup: StaffGroup;\n\trange: [number, number];\n\tkey: string;\n}\n\nconst singleGroup = (id: string) => ({ type: StaffGroupType.Default, staff: id });\n\nconst BOUNDS_TO_GROUPTYPE: { [bound: string]: StaffGroupType } = {\n\t'{': StaffGroupType.Brace,\n\t'}': StaffGroupType.Brace,\n\t'<': StaffGroupType.Bracket,\n\t'>': StaffGroupType.Bracket,\n\t'[': StaffGroupType.Square,\n\t']': StaffGroupType.Square,\n};\n\nconst OPEN_BOUNDS = '{<[';\nconst CLOSE_BOUNDS = '}>]';\n\nconst CONJUNCTIONS_MAP: { [conj: string]: StaffConjunctionType } = {\n\t',': StaffConjunctionType.Blank,\n\t'-': StaffConjunctionType.Solid,\n\t'.': StaffConjunctionType.Dashed,\n};\n\nconst bracketCode = (type: StaffGroupType, partial: boolean = false): ((inner: string) => string) => {\n\tif (type === StaffGroupType.Default) return (inner) => inner;\n\n\tif (partial) {\n\t\tswitch (type) {\n\t\t\tcase StaffGroupType.Brace:\n\t\t\t\treturn (inner) => `{${inner}`;\n\t\t\tcase StaffGroupType.Bracket:\n\t\t\t\treturn (inner) => `<${inner}`;\n\t\t\tcase StaffGroupType.Square:\n\t\t\t\treturn (inner) => `[${inner}`;\n\t\t\tdefault:\n\t\t\t\treturn (inner) => inner;\n\t\t}\n\t}\n\n\tswitch (type) {\n\t\tcase StaffGroupType.Brace:\n\t\t\treturn (inner) => `{${inner}}`;\n\t\tcase StaffGroupType.Bracket:\n\t\t\treturn (inner) => `<${inner}>`;\n\t\tcase StaffGroupType.Square:\n\t\t\treturn (inner) => `[${inner}]`;\n\t\tdefault:\n\t\t\treturn (inner) => inner;\n\t}\n};\n\nconst randomB64 = (): string => {\n\tconst code = btoa(Math.random().toString().substr(2)).replace(/=/g, '');\n\n\treturn code.split('').reverse().slice(0, 6).join('');\n};\n\nconst makeUniqueName = (set: Set, index: number, prefix?: string): string => {\n\tlet name = prefix;\n\tif (!name) name = index.toString();\n\telse if (set.has(name)) name += '_' + index.toString();\n\n\twhile (set.has(name)) name += '_' + randomB64();\n\n\treturn name;\n};\n\nconst makeGroupsFromRaw = (parent: StaffGroup, seq: string[]): string[] => {\n\tlet remains = seq;\n\twhile (remains.length) {\n\t\tconst word = remains.shift();\n\t\tconst bound = BOUNDS_TO_GROUPTYPE[word];\n\t\tif (bound) {\n\t\t\tif (CLOSE_BOUNDS.includes(word) && bound === parent.type) break;\n\n\t\t\tif (OPEN_BOUNDS.includes(word)) {\n\t\t\t\tconst group = { type: bound, level: Number.isFinite(parent.level) ? parent.level + 1 : 0 };\n\t\t\t\tremains = makeGroupsFromRaw(group, remains);\n\n\t\t\t\tparent.subs = parent.subs || [];\n\t\t\t\tparent.subs.push(group);\n\t\t\t}\n\t\t} else {\n\t\t\tparent.subs = parent.subs || [];\n\t\t\tparent.subs.push(singleGroup(word));\n\t\t}\n\t}\n\n\twhile (parent.type === StaffGroupType.Default && parent.subs && parent.subs.length === 1) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.type = sub.type;\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t\tparent.level = sub.level;\n\t}\n\n\twhile (parent.subs && parent.subs.length === 1 && parent.subs[0].type === StaffGroupType.Default) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t}\n\n\tparent.grand = parent.type === StaffGroupType.Brace && parent.subs && parent.subs.every((sub) => sub.staff);\n\n\treturn remains;\n};\n\nconst groupHead = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupHead(group.subs[0]);\n};\n\nconst groupTail = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupTail(group.subs[group.subs.length - 1]);\n};\n\nexport const groupKey = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return `${groupHead(group)}-${groupTail(group)}`;\n};\n\nconst groupDict = (group: StaffGroup, dict: { [key: string]: StaffGroup }): void => {\n\tdict[groupKey(group)] = group;\n\n\tif (group.subs) group.subs.forEach((sub) => groupDict(sub, dict));\n};\n\nexport interface MaskedStaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroups: StaffGroupTrait[];\n}\n\nclass StaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroup: StaffGroup;\n\tgroups: StaffGroupTrait[];\n\n\tmaskCache: Map;\n\n\tconstructor(raw: RawItem[]) {\n\t\t// make unique ids\n\t\tconst ids = new Set();\n\t\traw.forEach((item, i) => {\n\t\t\titem.id = makeUniqueName(ids, i + 1, item.id);\n\t\t\tids.add(item.id);\n\t\t});\n\t\tthis.staffIds = raw.map((item) => item.id);\n\t\tthis.conjunctions = raw.slice(0, raw.length - 1).map((item) => (item.conjunction ? CONJUNCTIONS_MAP[item.conjunction] : StaffConjunctionType.Blank));\n\n\t\t// make groups\n\t\tconst seq = [].concat(...raw.map((item) => [...item.leftBounds, item.id, ...item.rightBounds]));\n\t\tthis.group = { type: StaffGroupType.Default };\n\t\tmakeGroupsFromRaw(this.group, seq);\n\n\t\tconst dict = {};\n\t\tgroupDict(this.group, dict);\n\t\tthis.groups = Object.entries(dict).map(([key, group]) => {\n\t\t\tlet ids = key.split('-');\n\t\t\tif (ids.length === 1) ids = [ids[0], ids[0]];\n\t\t\tconst range = ids.map((id) => this.staffIds.indexOf(id));\n\n\t\t\treturn {\n\t\t\t\tgroup,\n\t\t\t\trange,\n\t\t\t\tkey,\n\t\t\t} as StaffGroupTrait;\n\t\t});\n\n\t\tthis.maskCache = new Map();\n\t}\n\n\tget stavesCount(): number {\n\t\tif (!this.staffIds) return null;\n\n\t\treturn this.staffIds.length;\n\t}\n\n\tget partGroups(): StaffGroupTrait[] {\n\t\tconst grands = this.groups.filter((g) => g.group.grand);\n\t\tconst parts = this.groups.filter((g) => {\n\t\t\tif (g.group.grand) return true;\n\n\t\t\tif (g.range[0] === g.range[1]) {\n\t\t\t\tconst index = g.range[0];\n\t\t\t\treturn !grands.some((g) => g.range[0] <= index && g.range[1] >= index);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn parts;\n\t}\n\n\tget standaloneGroups(): string[][] {\n\t\tconst groups: string[][] = [];\n\t\tconst collect = (group: StaffGroup): void => {\n\t\t\tif (group.grand) groups.push(group.subs.map((sub) => sub.staff));\n\t\t\telse if (group.staff) groups.push([group.staff]);\n\t\t\telse if (group.subs) group.subs.forEach((sub) => collect(sub));\n\t\t};\n\t\tcollect(this.group);\n\n\t\treturn groups;\n\t}\n\n\tconjunctionBetween(upStaff: number, downStaff: number): StaffConjunctionType {\n\t\tif (downStaff <= upStaff) return null;\n\n\t\tlet con = StaffConjunctionType.Solid;\n\t\tfor (let i = upStaff; i < downStaff; i++) con = Math.min(con, this.conjunctions[i]);\n\n\t\treturn con;\n\t}\n\n\tstatic makeMaskLayout(layout: StaffLayout, mask: number): MaskedStaffLayout {\n\t\tconst staffIds = layout.staffIds.filter((_, i) => mask & (1 << i));\n\t\tif (staffIds.length === layout.staffIds.length) {\n\t\t\treturn {\n\t\t\t\tstaffIds: layout.staffIds,\n\t\t\t\tconjunctions: layout.conjunctions,\n\t\t\t\tgroups: layout.groups,\n\t\t\t};\n\t\t}\n\n\t\tconst groups = layout.groups\n\t\t\t.map((g) => ({ ids: layout.staffIds.slice(g.range[0], g.range[1] + 1).filter((id) => staffIds.includes(id)), ...g }))\n\t\t\t.filter(({ ids }) => ids.length)\n\t\t\t.map(\n\t\t\t\t({ ids, ...g }) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tkey: g.key,\n\t\t\t\t\t\tgroup: g.group,\n\t\t\t\t\t\trange: [staffIds.indexOf(ids[0]), staffIds.indexOf(ids[ids.length - 1])],\n\t\t\t\t\t} as StaffGroupTrait)\n\t\t\t);\n\n\t\tconst conjunctions = staffIds.slice(0, staffIds.length - 1).map((id, i) => {\n\t\t\tconst nextId = staffIds[i + 1];\n\t\t\treturn layout.conjunctionBetween(layout.staffIds.indexOf(id), layout.staffIds.indexOf(nextId));\n\t\t});\n\n\t\treturn {\n\t\t\tstaffIds,\n\t\t\tconjunctions,\n\t\t\tgroups,\n\t\t};\n\t}\n\n\tmask(mask: number): MaskedStaffLayout {\n\t\tif (!this.maskCache.get(mask)) this.maskCache.set(mask, StaffLayout.makeMaskLayout(this, mask));\n\n\t\treturn this.maskCache.get(mask);\n\t}\n\n\t// {,}\t*\t1,1\t\t=> {,}\n\t// {,}\t*\t1,x\t\t=> {\n\t// {,}\t*\t0,x\t\t=>\n\t// {,}\t*\t0,1\t\t=> {}\n\tpartialMaskCode(bits: (1 | 0)[], withIds = false): string {\n\t\ttype Attendance = 0 | 1 | null;\n\t\tconst staffStatus = this.staffIds\n\t\t\t.map((_, i) => (i < bits.length ? bits[i] : null))\n\t\t\t.reduce((status, x, i) => {\n\t\t\t\tstatus[this.staffIds[i]] = x;\n\t\t\t\treturn status;\n\t\t\t}, {} as { [id: string]: Attendance });\n\n\t\tconst joinGroup = (group: StaffGroup): [string, boolean] => {\n\t\t\tif (group.staff) return [staffStatus[group.staff] ? group.staff : null, staffStatus[group.staff] === null];\n\n\t\t\tconst subs = group.subs.map((sub) => joinGroup(sub));\n\t\t\tconst subStr = subs\n\t\t\t\t.map((pair) => pair[0])\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(',');\n\t\t\tconst partial = subs.some(([_, partial]) => partial);\n\n\t\t\tconst code = subStr ? bracketCode(group.type, partial)(subStr) : null;\n\n\t\t\treturn [code, partial];\n\t\t};\n\n\t\tlet [code] = joinGroup(this.group);\n\t\tcode = code || '';\n\t\tif (!withIds) code = code.replace(/[_\\w]+/g, '');\n\n\t\treturn code;\n\t}\n}\n\nexport default StaffLayout;\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 15],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 17],\n\t\t$V3 = [1, 11],\n\t\t$V4 = [1, 12],\n\t\t$V5 = [1, 13],\n\t\t$V6 = [1, 24],\n\t\t$V7 = [1, 25],\n\t\t$V8 = [1, 26],\n\t\t$V9 = [5, 11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Va = [15, 16, 17, 21, 22, 23, 24],\n\t\t$Vb = [11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Vc = [5, 11, 12, 13, 21, 22, 23, 24];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tstaff_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tseq: 6,\n\t\t\tseq_id: 7,\n\t\t\tseq_br: 8,\n\t\t\tseq_con: 9,\n\t\t\tbound_left: 10,\n\t\t\t'<': 11,\n\t\t\t'[': 12,\n\t\t\t'{': 13,\n\t\t\tbound_right: 14,\n\t\t\t'>': 15,\n\t\t\t']': 16,\n\t\t\t'}': 17,\n\t\t\tbound_lefts: 18,\n\t\t\tbound_rights: 19,\n\t\t\tconjunction: 20,\n\t\t\t'-': 21,\n\t\t\t',': 22,\n\t\t\t'.': 23,\n\t\t\tID: 24,\n\t\t\tseq_bl: 25,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: { 2: 'error', 5: 'EOF', 11: '<', 12: '[', 13: '{', 15: '>', 16: ']', 17: '}', 21: '-', 22: ',', 23: '.', 24: 'ID' },\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[6, 0],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[18, 1],\n\t\t\t[18, 2],\n\t\t\t[19, 1],\n\t\t\t[19, 2],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[7, 1],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[25, 1],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[9, 1],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t$$[$0].next();\n\n\t\t\t\t\tthis.$ = $$[$0].toJSON();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = new Seq();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13:\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 14:\n\t\t\t\tcase 16:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 20:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.i($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 23:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\tcase 24:\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.bl($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\tcase 27:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 28:\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 29:\n\t\t\t\tcase 30:\n\t\t\t\tcase 31:\n\t\t\t\t\t$$[$0 - 1].tip.br($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.con($$[$0]);\n\t\t\t\t\tthis.$.next();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 33:\n\t\t\t\tcase 34:\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\t$$[$0 - 1].tip.con($$[$0]);\n\t\t\t\t\t$$[$0 - 1].next();\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 5: [2, 3], 6: 3, 7: 4, 8: 5, 9: 6, 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 10, 20: 9, 21: $V3, 22: $V4, 23: $V5, 24: [1, 7], 25: 8 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 18] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 5: [2, 4], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 22, 19: 20, 20: 21, 21: $V3, 22: $V4, 23: $V5, 24: [1, 19] },\n\t\t\t{ 5: [2, 5], 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 29, 20: 28, 21: $V3, 22: $V4, 23: $V5, 24: [1, 27] },\n\t\t\t{ 5: [2, 6], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 33, 19: 31, 20: 32, 21: $V3, 22: $V4, 23: $V5, 24: [1, 30] },\n\t\t\to($V9, [2, 20]),\n\t\t\t{ 14: 23, 15: $V6, 16: $V7, 17: $V8, 19: 35, 20: 36, 21: $V3, 22: $V4, 23: $V5, 24: [1, 34] },\n\t\t\to($V9, [2, 32]),\n\t\t\to($Va, [2, 25], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 17]),\n\t\t\to($V9, [2, 18]),\n\t\t\to($V9, [2, 19]),\n\t\t\to($Vb, [2, 13]),\n\t\t\to($Vb, [2, 7]),\n\t\t\to($Vb, [2, 8]),\n\t\t\to($Vb, [2, 9]),\n\t\t\t{ 1: [2, 1] },\n\t\t\to($V9, [2, 21]),\n\t\t\to($Vc, [2, 29], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 33]),\n\t\t\to($Va, [2, 26], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 15]),\n\t\t\to($V9, [2, 10]),\n\t\t\to($V9, [2, 11]),\n\t\t\to($V9, [2, 12]),\n\t\t\to($V9, [2, 23]),\n\t\t\to($V9, [2, 35]),\n\t\t\to($Va, [2, 27], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 24]),\n\t\t\to($Vc, [2, 31], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 36]),\n\t\t\to($Va, [2, 28], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 22]),\n\t\t\to($Vc, [2, 30], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 34]),\n\t\t\to($Vb, [2, 14]),\n\t\t\to($V9, [2, 16]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 18: [2, 1] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tclass Item {\n\t\tconstructor() {\n\t\t\tthis.id = null;\n\t\t\tthis.leftBounds = [];\n\t\t\tthis.rightBounds = [];\n\t\t\tthis.conjunction = null;\n\t\t}\n\n\t\ti(id) {\n\t\t\tthis.id = id;\n\t\t\treturn this;\n\t\t}\n\n\t\tbl(leftBounds) {\n\t\t\tthis.leftBounds = leftBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tbr(rightBounds) {\n\t\t\tthis.rightBounds = rightBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tcon(conjunction) {\n\t\t\tthis.conjunction = conjunction;\n\t\t\treturn this;\n\t\t}\n\t}\n\n\tclass Seq {\n\t\tconstructor() {\n\t\t\tthis.body = [];\n\t\t\tthis.tip = new Item();\n\t\t}\n\n\t\tnext() {\n\t\t\tthis.body.push(this.tip);\n\t\t\tthis.tip = new Item();\n\t\t\treturn this;\n\t\t}\n\n\t\ttoJSON() {\n\t\t\treturn this.body;\n\t\t}\n\t}\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 24;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([-,.\\[\\]<>{}]))/, /^(?:([a-zA-Z_0-9]+))/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\n// if (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import StaffLayout from './staffLayout';\nimport grammar from './grammar.jison';\n\nconst parseCode = (code: string): StaffLayout => {\n\tconst raw = grammar.parse(code);\n\n\treturn new StaffLayout(raw);\n};\n\nexport { parseCode };\n","//import { staffSvg } from \"@kelvinnxu/lotus\";\n\nimport { SemanticType, SemanticPoint, /*glyphSemanticMapping, glyphCenters,*/ SYSTEM_SEMANTIC_TYPES, Point } from './semanticPoint';\nimport { SimpleClass } from './aux_/typedJSON';\n\nclass SemanticGraph extends SimpleClass {\n\tstatic className = 'SemanticGraph';\n\n\tpoints: SemanticPoint[];\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\t/*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph {\n\t\tconst tokens = [].concat(...staff.measures.map(measure => measure.tokens));\n\n\t\tconst voltaRightXs = [];\n\n\t\tconst points = [];\n\t\ttokens.forEach(token => {\n\t\t\tconst def = hashTable[token.hash];\n\n\t\t\tif (token.glyph) {\n\t\t\t\tconst glyph = token.glyph as string;\n\t\t\t\tlet semantic = null;\n\n\t\t\t\tconst isKey = /^\\\\key/.test(token.source) || token.is(\"KEY\");\n\t\t\t\tlet { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 };\n\t\t\t\tif (token.scale2) {\n\t\t\t\t\tcx *= token.scale2.x;\n\t\t\t\t\tcy *= token.scale2.y;\n\t\t\t\t}\n\n\t\t\t\tlet x = token.x + cx;\n\t\t\t\tconst y = token.y + cy;\n\n\t\t\t\tswitch (glyph) {\n\t\t\t\tcase \"rests.0\":\n\t\t\t\t\tif (/^R/.test(token.source))\n\t\t\t\t\t\tsemantic = \"Rest0W\";\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Rest0\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.flat\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.natural\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.sharp\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dots.dot\":\n\t\t\t\t\tif (token.is(\"VOLTA\")) {\n\t\t\t\t\t\tx += 0.24;\t// dot glyph center X offset\n\t\t\t\t\t\tif (token.is(\"LEFT\"))\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaLeft;\n\t\t\t\t\t\telse if (token.is(\"RIGHT\")) {\n\t\t\t\t\t\t\tvoltaRightXs.push(x);\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaRight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Dot\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"zero\":\n\t\t\t\tcase \"one\":\n\t\t\t\tcase \"two\":\n\t\t\t\tcase \"three\":\n\t\t\t\tcase \"four\":\n\t\t\t\tcase \"five\":\n\t\t\t\tcase \"six\":\n\t\t\t\tcase \"seven\":\n\t\t\t\tcase \"eight\":\n\t\t\t\tcase \"nine\": {\n\t\t\t\t\tconst upper = glyph[0].toUpperCase() + glyph.substr(1);\n\t\t\t\t\tsemantic = token.is(\"TIME_SIG\") ? \"Timesig\" + upper : upper;\n\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t}\n\n\t\t\t\tif (semantic) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (token.is(\"TEMPO_NOTEHEAD\")) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.TempoNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// grace noteheads\n\t\t\t\tif (token.is(\"NOTEHEAD\") && Number.isFinite(token.scale) && token.scale < 0.75) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.GraceNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// semantic from token symbol\n\t\t\tlet semantic = null;\n\t\t\tconst cx = 0;\n\t\t\tlet cy = 0;\n\t\t\tif (token.is(\"OCTAVE\")) {\n\t\t\t\tif (token.is(\"_8\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift8;\n\t\t\t\t\tcy = token.is(\"B\") ? -0.7512 : -0.7256;\n\t\t\t\t}\n\t\t\t\telse if (token.is(\"CLOSE\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift0;\n\t\t\t\t\tcy = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (/^flags/.test(token.glyph)) {\n\t\t\t\tlet direction = 0;\n\t\t\t\tif (/\\.u\\d/.test(token.glyph))\n\t\t\t\t\tdirection = 1;\n\t\t\t\tif (/\\.d\\d/.test(token.glyph))\n\t\t\t\t\tdirection = -1;\n\t\t\t\tif (direction) {\n\t\t\t\t\tconst [n] = token.glyph.match(/\\d+/);\n\t\t\t\t\tconst flagCount = Number(n) - 2;\n\t\t\t\t\t//console.log(\"flags:\", token.glyph, flagCount);\n\t\t\t\t\tfor (let i = 0; i < flagCount; ++i) {\n\t\t\t\t\t\tconst y = token.y + (i + 0.5) * direction;\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//console.log(\"flags.1:\", token.x, y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"SLUR\")) {\n\t\t\t\tconst d = def && def.d;\n\t\t\t\tif (d) {\n\t\t\t\t\tconst numbers = d.match(/-?[\\d.]+/g).map(Number);\n\t\t\t\t\t//console.log(\"slur:\", numbers);\n\t\t\t\t\tconst x1 = token.x + numbers[0];\n\t\t\t\t\tconst y1 = token.y + numbers[1];\n\t\t\t\t\tconst x2 = token.x + numbers[6];\n\t\t\t\t\tconst y2 = token.y + numbers[7];\n\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurBegin,\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1,\n\t\t\t\t\t});\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurEnd,\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"NOTE_STEM\")) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.vline_Stem,\n\t\t\t\t\tx: token.x + def.width / 2,\n\t\t\t\t\ty: token.y,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: token.y,\n\t\t\t\t\t\ty2: token.y + token.height,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (token.is(\"TEXT\") || token.is(\"CHORD_TEXT\")) {\n\t\t\t\tif (/\\S/.test(token.text)) {\n\t\t\t\t\t// NOTE: text rect computation is delayed to sheet rendering\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\tindex: token.index,\n\t\t\t\t\t\t\ttext: token.text,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx: token.x + cx,\n\t\t\t\t\ty: token.y + cy,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// beams\n\t\tconst stems = tokens.filter(token => token.is(\"NOTE_STEM\")).map(stem => ({\n\t\t\tx: stem.x + stem.width / 2,\n\t\t\ty1: stem.y,\n\t\t\ty2: stem.y + stem.height,\n\t\t}));\n\t\tconst beams = tokens.filter(token => token.is(\"NOTETAIL\") && token.is(\"JOINT\"))\n\t\t\t.map(beam => {\n\t\t\t\tconst def = hashTable[beam.hash];\n\t\t\t\tconst points = def && def.points;\n\t\t\t\tif (points) {\n\t\t\t\t\tconst floats = points.split(\" \").map(Number);\n\t\t\t\t\tconst x1 = beam.x + floats[4];\n\t\t\t\t\tconst x2 = beam.x + floats[0];\n\t\t\t\t\tconst y1 = beam.y + (floats[5] + floats[7]) / 2;\n\t\t\t\t\tconst y2 = beam.y + (floats[1] + floats[3]) / 2;\n\t\t\t\t\tconst k = (y2 - y1) / (x2 - x1);\n\n\t\t\t\t\treturn { x1, x2, y1, y2, k, capital: beam.is(\"CAPITAL_BEAM\") };\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}).filter(Boolean);\n\t\t//console.log(\"beams:\", beams);\n\t\tbeams.forEach(beam => {\n\t\t\tconst innerStems = stems.filter(stem => stem.x > beam.x1 - 0.2 && stem.x < beam.x2 + 0.2);\n\t\t\t//console.log(\"innerStems:\", beam, innerStems);\n\n\t\t\tlet lines = 0;\n\t\t\tinnerStems.forEach(stem => {\n\t\t\t\tconst beamY = beam.y1 + (stem.x - beam.x1) * beam.k;\n\t\t\t\t//console.log(\"beamY:\", beamY, Math.min(Math.abs(beamY - beam.y1), Math.abs(beamY - beam.y2)));\n\t\t\t\tif (beamY >= stem.y1 - 0.1 && beamY <= stem.y2 + 0.1) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t});\n\n\t\t\t\t\t++lines;\n\n\t\t\t\t\t// beam semantics\n\t\t\t\t\tif (beam.capital) {\n\t\t\t\t\t\tlet semantic = SemanticType.BeamContinue;\n\t\t\t\t\t\tif (Math.abs(stem.x - beam.x1) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamLeft;\n\t\t\t\t\t\telse if (Math.abs(stem.x - beam.x2) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamRight;\n\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!lines)\n\t\t\t\tconsole.warn(\"empty beam:\", beam, innerStems, stems);\n\t\t\t//else if (lines < 2)\n\t\t\t//\tconsole.debug(\"single beam:\", beam, innerStems, stems);\n\t\t});\n\n\t\t// wedges (crescendo & decrescendo)\n\t\tconst crescendos = tokens.filter(token => token.is(\"WEDGE CRESCENDO TOP\"));\n\t\tconst crescendoBottoms = tokens.filter(token => token.is(\"WEDGE CRESCENDO BOTTOM\"));\n\t\tconst decrescendos = tokens.filter(token => token.is(\"WEDGE DECRESCENDO TOP\"));\n\t\tconst decrescendoBottoms = tokens.filter(token => token.is(\"WEDGE DECRESCENDO BOTTOM\"));\n\t\tcrescendos.forEach(line => {\n\t\t\tconst partner = crescendoBottoms.find(b => b.x === line.x && Math.abs(b.y - line.y) < 0.06);\n\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.CrescendoBegin,\n\t\t\t\t\tx: line.x,\n\t\t\t\t\ty: line.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired crescendo:\", line, crescendoBottoms);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.CrescendoEnd,\n\t\t\t\tx: line.x + line.target.x,\n\t\t\t\ty: line.y + line.target.y,\n\t\t\t});\n\t\t});\n\t\tdecrescendos.forEach(line => {\n\t\t\tconst partner = decrescendoBottoms.find(b => b.x + b.target.x === line.x + line.target.x && Math.abs(b.y + b.target.y - (line.y + line.target.y)) < 0.06);\n\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.DecrescendoBegin,\n\t\t\t\tx: line.x,\n\t\t\t\ty: line.y,\n\t\t\t});\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.DecrescendoEnd,\n\t\t\t\t\tx: line.x + line.target.x,\n\t\t\t\t\ty: line.y + line.target.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired decrescendo:\", line, decrescendoBottoms);\n\t\t});\n\n\t\t// TODO: volta alternative\n\n\t\t// measure bars\n\t\tconst measureSeparators = staff.tokens.filter(token => token.is(\"MEASURE_SEPARATOR\"));\n\t\tconst singleBars = [];\n\t\tconst groupBars = [];\n\n\t\tfor (let i = 0; i < measureSeparators.length; ++i) {\n\t\t\tconst bar = measureSeparators[i];\n\t\t\tconst nextBar = measureSeparators[i + 1];\n\t\t\tconst inteval = nextBar ? nextBar.x - bar.x : Infinity;\n\n\t\t\tif (inteval < 1) {\n\t\t\t\tgroupBars.push([bar, nextBar]);\n\t\t\t\t++i;\n\t\t\t}\n\t\t\telse\n\t\t\t\tsingleBars.push(bar);\n\t\t};\n\t\t//console.log(\"bars:\", singleBars, groupBars);\n\n\t\tsingleBars.forEach(bar => {\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx: bar.x + bar.sw / 2,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tgroupBars.forEach(group => {\n\t\t\tlet x = (group[0].x + group[1].x) / 2;\n\t\t\tconst bold0 = group[0].is(\"BOLD\");\n\t\t\tconst bold1 = group[1].is(\"BOLD\");\n\n\t\t\tlet semantic = null;\n\t\t\tif (!bold0 && bold1) {\n\t\t\t\tx = group[0].x;\n\n\t\t\t\tif (!voltaRightXs.some(vx => x - vx < 2))\n\t\t\t\t\tsemantic = SemanticType.vline_BarTerminal;\n\t\t\t}\n\t\t\telse if (bold0 && !bold1)\n\t\t\t\tx = group[1].x;\n\t\t\telse if (!bold0 && !bold1)\n\t\t\t\tsemantic = SemanticType.vline_BarSegment;\n\n\t\t\t//console.log(\"group:\", group[0].x, group[1].x, x);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx,\n\t\t\t\t\ty: 0,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: -2,\n\t\t\t\t\t\ty2: 2,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}*/\n\n\tstatic fromPoints(points: SemanticPoint[] = []): SemanticGraph {\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}\n\n\tgetLayer(semantic: SemanticType): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic);\n\t}\n\n\tgetConfidentLayer(semantic: SemanticType, threshold: number): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic && (!Number.isFinite(p.confidence) || p.confidence >= threshold));\n\t}\n\n\tgetSystemPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\tgetStaffPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => !SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\toffset(x: number, y: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x += x;\n\t\t\tpoint.y += y;\n\t\t});\n\t}\n\n\tscale(factor: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x *= factor;\n\t\t\tpoint.y *= factor;\n\t\t});\n\t}\n\n\t// multipy 3x2 matrix\n\ttransform(matrix: [number, number][]): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tlet x = point.x * matrix[0][0] + point.y * matrix[1][0] + matrix[2][0];\n\t\t\tconst y = point.x * matrix[0][1] + point.y * matrix[1][1] + matrix[2][1];\n\n\t\t\tif (point.extension) {\n\t\t\t\tif (Number.isFinite(point.extension.y1)) {\n\t\t\t\t\tconst y1 = point.x * matrix[0][1] + point.extension.y1 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tconst y2 = point.x * matrix[0][1] + point.extension.y2 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tx = point.x * matrix[0][0] + (point.extension.y1 + point.extension.y2) * 0.5 * matrix[1][0] + matrix[2][0];\n\n\t\t\t\t\tpoint.extension.y1 = y1;\n\t\t\t\t\tpoint.extension.y2 = y2;\n\t\t\t\t}\n\n\t\t\t\tif (Number.isFinite(point.extension.width)) {\n\t\t\t\t\tconst scaling = Math.sqrt(matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);\n\t\t\t\t\tpoint.extension.width *= scaling;\n\t\t\t\t\tpoint.extension.height *= scaling;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpoint.x = x;\n\t\t\tpoint.y = y;\n\t\t});\n\t}\n}\n\nexport { SemanticGraph };\n","import { SimpleClass } from './aux_/typedJSON';\nimport {\n\tAdditionalLineStack,\n\tChordColumn,\n\tChordRect,\n\tEventFeature,\n\tEventMeasureColumn,\n\tEventSystem,\n\tPageLayout,\n\tRect,\n\tSourceImageFile,\n\tTextType,\n\tVLine,\n} from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { SemanticGraph } from './semanticGraph';\nimport { hashPageSemanticPoint, hashSemanticPoint, NOTEHEAD_WIDTHS, SemanticPoint, SemanticType } from './semanticPoint';\nimport { AccessoryDirection, ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, TempoTerm, TremoloLink } from './term';\nimport {\n\tTextToken,\n\tToken,\n\tTokenAccessories,\n\tTokenBeams,\n\tTokenClefs,\n\tTokenDirectionless,\n\tTokenDots,\n\tTokenFlags,\n\tTokenNoteheads,\n\tTokenRests,\n\tTokenTimesigs,\n\tTokenType,\n\tTOKEN_Y_FIXED,\n\tTOKEN_Y_ROUND,\n} from './token';\nimport { distance2D, roundNumber, solveOverlapping, trans23 } from './utils';\n\ntype ChordsFeeder = (si: number, mi: number) => ChordColumn[];\ntype ColumnProcessor = (column: EventMeasureColumn) => EventMeasureColumn;\n\nconst CHORD_X_TOLERANCE = 0.2;\n//const EVENT_X_TOLERANCE = 0.8;\n\nconst STEM_LENGTH_MAX = 6;\n\nconst INDENT_THRESHOLD = 2;\n\nconst MEASURE_SEMANTICS = [\n\tSemanticType.ClefG,\n\tSemanticType.ClefF,\n\tSemanticType.ClefC,\n\tSemanticType.TimesigC44,\n\tSemanticType.TimesigC22,\n\tSemanticType.TimesigZero,\n\tSemanticType.TimesigOne,\n\tSemanticType.TimesigTwo,\n\tSemanticType.TimesigThree,\n\tSemanticType.TimesigFour,\n\tSemanticType.TimesigFive,\n\tSemanticType.TimesigSix,\n\tSemanticType.TimesigSeven,\n\tSemanticType.TimesigEight,\n\tSemanticType.TimesigNine,\n\tSemanticType.OctaveShift8va,\n\tSemanticType.OctaveShift8vb,\n\tSemanticType.OctaveShift0,\n\tSemanticType.Zero,\n\tSemanticType.One,\n\tSemanticType.Two,\n\tSemanticType.Three,\n\tSemanticType.Four,\n\tSemanticType.Five,\n\tSemanticType.Six,\n\tSemanticType.Seven,\n\tSemanticType.Eight,\n\tSemanticType.Nine,\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n\tSemanticType.Rest0W,\n\tSemanticType.RestM1,\n\tSemanticType.SlurBegin,\n\tSemanticType.SlurEnd,\n\tSemanticType.Dot,\n\tSemanticType.f,\n\tSemanticType.p,\n\tSemanticType.m,\n\tSemanticType.n,\n\tSemanticType.r,\n\tSemanticType.s,\n\tSemanticType.z,\n\tSemanticType.ScriptFermata,\n\tSemanticType.ScriptShortFermata,\n\tSemanticType.ScriptSforzato,\n\tSemanticType.ScriptStaccato,\n\tSemanticType.ScriptStaccatissimo,\n\tSemanticType.ScriptTurn,\n\tSemanticType.ScriptTrill,\n\tSemanticType.ScriptSegno,\n\tSemanticType.ScriptCoda,\n\tSemanticType.ScriptArpeggio,\n\tSemanticType.ScriptPrall,\n\tSemanticType.ScriptMordent,\n\tSemanticType.ScriptMarcato,\n\tSemanticType.ScriptTenuto,\n\tSemanticType.ScriptPortato,\n\tSemanticType.PedalStar,\n\tSemanticType.PedalPed,\n\tSemanticType.GraceNotehead,\n\tSemanticType.BeamLeft,\n\tSemanticType.BeamRight,\n\tSemanticType.BeamContinue,\n\tSemanticType.CrescendoBegin,\n\tSemanticType.CrescendoEnd,\n\tSemanticType.DecrescendoBegin,\n\tSemanticType.DecrescendoEnd,\n\tSemanticType.TremoloLeft,\n\tSemanticType.TremoloRight,\n\tSemanticType.TremoloMiddle,\n];\n\nconst STAFF_LINED_SEMANTICS = [\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n];\n\nconst LINED_INTERVAL_SEMANTICS = [SemanticType.SignLined, SemanticType.SignInterval];\n\nconst NOTEHEAD_FOR_STEM_SEMANTICS = [SemanticType.NoteheadS1, SemanticType.NoteheadS2];\n\nconst KEYACC_CANDIDATE_SEMANTICS = {\n\tAccSharp: TokenType.KeySharp,\n\tAccNatural: TokenType.KeyNatural,\n\tAccFlat: TokenType.KeyFlat,\n};\n\nconst NOTEHEAD_TABLE: { [key: string]: { [key: string]: SemanticType } } = {\n\t[SemanticType.NoteheadS1]: {\n\t\tup: SemanticType.NoteheadS1stemU,\n\t\tdown: SemanticType.NoteheadS1stemD,\n\t},\n\t[SemanticType.NoteheadS2]: {\n\t\tup: SemanticType.NoteheadS2stemU,\n\t\tdown: SemanticType.NoteheadS2stemD,\n\t},\n};\n\nconst REST_SEMANTICS = [\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n];\n\nconst TOKEN_TO_STEMBEAM = {\n\t[TokenType.BeamLeft]: 'Open',\n\t[TokenType.BeamRight]: 'Close',\n\t[TokenType.BeamContinue]: 'Continue',\n};\n\nconst TEXT_TYPE_ALIAS = {\n\tAlter1: TextType.Alternation1,\n\tAlter2: TextType.Alternation2,\n};\n\ninterface StaffPosition {\n\ty: number;\n\tradius: number;\n}\n\ninterface TextArea {\n\tscore: number;\n\tcx: number;\n\tcy: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\ttype: string;\n\ttheta: number;\n\tfeature_dict: Record;\n}\n\ntype Stem = VLine & { direction: 'u' | 'd' };\n\nconst noteheadsXPivot = (xs: number[], direction: 'u' | 'd' | null): number => {\n\tswitch (xs.length) {\n\t\tcase 0:\n\t\t\treturn undefined;\n\n\t\tcase 1:\n\t\t\treturn xs[0];\n\n\t\tcase 2:\n\t\t\treturn direction === 'u' ? Math.min(...xs) : Math.max(...xs);\n\n\t\tdefault: {\n\t\t\tconst mean = xs.reduce((sum, x) => sum + x, 0) / xs.length;\n\t\t\txs.sort((x1, x2) => Math.abs(x1 - mean) - Math.abs(x2 - mean));\n\n\t\t\treturn noteheadsXPivot(xs.slice(0, xs.length - 1), direction);\n\t\t}\n\t}\n};\n\nconst noteheadsPivot = (nhs: Token[]): number =>\n\tnoteheadsXPivot(\n\t\tnhs.map((nh) => (Number.isFinite(nh.pivotX) ? nh.pivotX : nh.x)),\n\t\tnhs[0].direction\n\t);\n\nclass Measure extends SimpleClass {\n\tstatic className = 'Measure';\n\tstatic blackKeys = ['tokens', 'antiTokens'];\n\n\tleft: number;\n\twidth: number;\n\theight: number;\n\n\talternative: boolean;\n\n\ttokens: Token[];\n\tantiTokens: Token[];\n\n\tbarTypes: Record;\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.tokens = this.tokens || [];\n\t\tthis.antiTokens = this.antiTokens || [];\n\t\tthis.barTypes = this.barTypes || {};\n\t}\n\n\tget right(): number {\n\t\treturn this.left + this.width;\n\t}\n\n\tget noteheads(): Token[] {\n\t\treturn this.tokens.filter((t) => t.isNotehead).sort((n1, n2) => n1.x - n2.x);\n\t}\n\n\tget chordRects(): ChordRect[] {\n\t\tconst noteheads = this.noteheads.filter((nh) =>\n\t\t\t[TokenType.NoteheadS0, TokenType.NoteheadS1stemU, TokenType.NoteheadS2stemU, TokenType.NoteheadS1stemD, TokenType.NoteheadS2stemD].includes(nh.type)\n\t\t);\n\n\t\tlet nulN = 0;\n\n\t\tconst nhmap: Record = noteheads.reduce((map, nh) => {\n\t\t\tconst tip = nh.tip ? `${nh.tip.x}|${nh.tip.y}` : `nul${nulN}`;\n\t\t\tlet key = `${nh.type}|${tip}`;\n\n\t\t\tif (!nh.tip && map[key]) {\n\t\t\t\tif (!map[key].some((hh) => Math.abs(hh.x - nh.x) < NOTEHEAD_WIDTHS.NoteheadS0)) {\n\t\t\t\t\t++nulN;\n\t\t\t\t\tkey = `${nh.type}|nul${nulN}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmap[key] = map[key] || [];\n\t\t\tmap[key].push(nh);\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(nhmap).map((nhs) => {\n\t\t\tconst left = Math.min(...nhs.map((nh) => nh.x));\n\t\t\tconst right = Math.max(...nhs.map((nh) => nh.x));\n\t\t\tconst top = Math.min(...nhs.map((nh) => nh.y));\n\t\t\tconst bottom = Math.max(...nhs.map((nh) => nh.y));\n\n\t\t\tconst nh0 = nhs[0];\n\n\t\t\tconst stemX = nh0 && nh0.tip ? nh0.tip.x : left;\n\n\t\t\tlet x = left;\n\t\t\tlet width = right - left;\n\t\t\tlet stemDirection = null;\n\n\t\t\tswitch (nh0.type) {\n\t\t\t\tcase TokenType.NoteheadS0:\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS0 / 2;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemU:\n\t\t\t\tcase TokenType.NoteheadS2stemU:\n\t\t\t\t\tstemDirection = 'u';\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS1;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemD:\n\t\t\t\tcase TokenType.NoteheadS2stemD:\n\t\t\t\t\tstemDirection = 'd';\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx,\n\t\t\t\twidth,\n\t\t\t\tstemX,\n\t\t\t\tstemDirection,\n\t\t\t\ttop,\n\t\t\t\tbottom,\n\t\t\t\ttip: nh0.tip,\n\t\t\t};\n\t\t});\n\t}\n\n\tget timeWarped(): boolean {\n\t\treturn this.tokens && this.tokens.some((token) => token.timeWarped);\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\tconst chords = this.getChords();\n\t\tconst up = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y <= -3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.ceil(Math.min(...chord.ys)) + 2,\n\t\t\t}));\n\t\tconst down = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y >= 3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.floor(Math.max(...chord.ys)) - 2,\n\t\t\t}));\n\n\t\treturn [...up, ...down].map((stack) => ({\n\t\t\tleft: stack.left - 0.28,\n\t\t\tright: stack.right + 0.28,\n\t\t\tn: stack.n,\n\t\t}));\n\t}\n\n\tgetChords(): ChordColumn[] {\n\t\tconst flags = this.tokens.filter((t) => TokenFlags.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\t\tconst beams = this.tokens.filter((t) => TokenBeams.includes(t.type));\n\n\t\tconst chordRcs = this.chordRects\n\t\t\t.map((rect) => {\n\t\t\t\tconst noteheads = this.noteheads.filter(\n\t\t\t\t\t(nh) =>\n\t\t\t\t\t\tnh.direction === rect.stemDirection &&\n\t\t\t\t\t\tnh.left >= rect.x &&\n\t\t\t\t\t\tnh.right <= rect.x + rect.width + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tnh.y >= rect.top &&\n\t\t\t\t\t\tnh.y <= rect.bottom\n\t\t\t\t);\n\t\t\t\tnoteheads.sort((n1, n2) => n2.y - n1.y);\n\t\t\t\tconst ys = noteheads.map((nh) => nh.y);\n\t\t\t\tconst noteIds = noteheads.map((nh) => nh.id);\n\n\t\t\t\tconst division = noteheads.reduce((d, nh) => Math.max(d, nh.division), 0);\n\n\t\t\t\treturn {\n\t\t\t\t\trect,\n\t\t\t\t\tleft: rect.x,\n\t\t\t\t\tright: rect.x + rect.width,\n\t\t\t\t\tpivotX: noteheadsPivot(noteheads),\n\t\t\t\t\tys,\n\t\t\t\t\ttip: rect.tip,\n\t\t\t\t\tnoteIds,\n\t\t\t\t\tdivision,\n\t\t\t\t\tdots: null,\n\t\t\t\t\trest: false,\n\t\t\t\t\tstemDirection: rect.stemDirection,\n\t\t\t\t\tbeam: null,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((c1, c2) => c2.left - c1.left);\n\n\t\tconst accs = new Set();\n\n\t\tconst chords = chordRcs.map(({ rect, ...chord }) => {\n\t\t\tif (chord.division >= 1) {\n\t\t\t\t// NOTE: notehead-s1 may have flags too\n\t\t\t\tconst flagRange = [rect.bottom, rect.top];\n\t\t\t\tswitch (rect.stemDirection) {\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\tflagRange[0] = rect.tip ? rect.tip.y - 0.2 : rect.top - STEM_LENGTH_MAX - 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tflagRange[1] = rect.tip ? rect.tip.y + 0.2 : rect.bottom + STEM_LENGTH_MAX + 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nearbyFlags = flags.filter(\n\t\t\t\t\t(flag) =>\n\t\t\t\t\t\t!accs.has(flag.id) &&\n\t\t\t\t\t\tflag.x > rect.stemX - CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.x < rect.stemX + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.y > flagRange[0] &&\n\t\t\t\t\t\tflag.y < flagRange[1]\n\t\t\t\t);\n\t\t\t\tchord.division = nearbyFlags.reduce((d, flag) => Math.max(d, flag.division), chord.division);\n\n\t\t\t\tnearbyFlags.forEach((flag) => accs.add(flag.id));\n\n\t\t\t\tif (chord.division >= 3) {\n\t\t\t\t\tconst beamToken = rect.tip && beams.find((t) => Math.abs(rect.tip.x - t.x) < 0.3 && Math.abs(rect.tip.y - t.y) < 0.7);\n\t\t\t\t\tif (beamToken) chord.beam = TOKEN_TO_STEMBEAM[beamToken.type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst nearbyDots = dots.filter(\n\t\t\t\t(dot) =>\n\t\t\t\t\t!accs.has(dot.id) &&\n\t\t\t\t\tdot.x > rect.x + rect.width - 0.2 &&\n\t\t\t\t\tdot.x < rect.x + rect.width + 1.2 &&\n\t\t\t\t\tdot.y > rect.top - 1 &&\n\t\t\t\t\tdot.y <= rect.bottom + 0.5\n\t\t\t);\n\t\t\tchord.dots = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\tnearbyDots.forEach((dot) => accs.add(dot.id));\n\n\t\t\treturn chord;\n\t\t});\n\n\t\tchords.reverse();\n\n\t\treturn chords;\n\t}\n\n\tgetRests(): ChordColumn[] {\n\t\tconst rests = this.tokens.filter((t) => TokenRests.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\n\t\treturn rests.map((rest) => {\n\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > rest.x + 0.5 && dot.x < rest.x + 2 && dot.y > rest.y - 1 && dot.y < rest.y + 0.5);\n\t\t\tconst dotValue = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\treturn {\n\t\t\t\tleft: rest.x - 0.75,\n\t\t\t\tright: rest.x + 0.75,\n\t\t\t\tpivotX: rest.x,\n\t\t\t\trest: true,\n\t\t\t\tys: [rest.y],\n\t\t\t\tnoteIds: [rest.id],\n\t\t\t\tdots: dotValue,\n\t\t\t\tdivision: rest.division,\n\t\t\t\tstemDirection: null,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\treturn [...this.getChords(), ...this.getRests()].sort((e1, e2) => e1.left - e2.left);\n\t}\n\n\tgetContexts(fields = {}): ContextedTerm[] {\n\t\treturn this.tokens\n\t\t\t.filter((t) => t.isContexted)\n\t\t\t.sort((n1, n2) => n1.x - n2.x)\n\t\t\t.map(\n\t\t\t\t(token) =>\n\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\ttokenType: token.type,\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t})\n\t\t\t);\n\t}\n\n\tassignAccessoriesOnEvents(events: ChordColumn[]): void {\n\t\tevents.forEach((event) => (event.accessories = event.accessories || []));\n\n\t\tconst accessories = this.tokens.filter((token) => TokenAccessories.includes(token.type));\n\t\t//console.log(\"accessories:\", accessories);\n\t\taccessories.forEach((accessory) => {\n\t\t\tconst relatedEvents = events.filter((event) => accessory.x > event.left - 1 && accessory.x < event.right + 1);\n\n\t\t\tif (relatedEvents.length > 0) {\n\t\t\t\tlet owner = relatedEvents[0];\n\t\t\t\tif (relatedEvents.length > 1) {\n\t\t\t\t\towner = relatedEvents\n\t\t\t\t\t\t.map((event) => ({ event, d: Math.min(...event.ys.map((y) => Math.abs(y - accessory.y))) }))\n\t\t\t\t\t\t.sort(({ d: d1 }, { d: d2 }) => d1 - d2)\n\t\t\t\t\t\t.map(({ event }) => event)[0];\n\t\t\t\t}\n\t\t\t\t//console.log(\"relatedEvents:\", accessory, owner);\n\n\t\t\t\tlet direction = accessory.y > Math.max(...owner.ys) ? AccessoryDirection.Down : AccessoryDirection.Up;\n\t\t\t\tif (TokenDirectionless.includes(accessory.type)) direction = null;\n\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: accessory.type,\n\t\t\t\t\tid: accessory.id,\n\t\t\t\t\tdirection,\n\t\t\t\t\tx: accessory.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone accessory:\", accessory.type);\n\t\t});\n\n\t\t// arpeggio\n\t\tconst sortEvents = [...events];\n\t\tsortEvents.sort((e1, e2) => e1.left - e2.left);\n\n\t\tconst arpeggios = this.tokens.filter((token) => token.type === TokenType.ScriptArpeggio);\n\t\tarpeggios.forEach((arpeggio) => {\n\t\t\tconst owner = sortEvents.find(\n\t\t\t\t(event) => arpeggio.x < event.left && event.ys.some((y) => y < arpeggio.y + 0.25) && event.ys.some((y) => y > arpeggio.y)\n\t\t\t);\n\t\t\t//const owner = sortEvents.find(event => event.left - leftMost.left < 2 && event.ys.some(y => Math.abs(y - arpeggio.y + 0.25) < 0.5));\n\t\t\tif (owner) {\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: TokenType.ScriptArpeggio,\n\t\t\t\t\tid: arpeggio.id,\n\t\t\t\t\tx: arpeggio.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone arpeggio:\", arpeggio);\n\t\t});\n\n\t\t// grace noteheads\n\t\tconst graceNhs = this.tokens.filter((token) => token.type === TokenType.GraceNotehead);\n\t\tgraceNhs.forEach((grace) => {\n\t\t\tconst event = events.find((event) => grace.x > event.left && grace.x < event.right && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tif (event) event.grace = GraceType.Grace;\n\t\t});\n\n\t\t// tremolos\n\t\tconst tremolsLs = this.tokens.filter((token) => token.type === TokenType.TremoloLeft);\n\t\tconst tremolsRs = this.tokens.filter((token) => token.type === TokenType.TremoloRight);\n\t\tconst tremolsMs = this.tokens.filter((token) => token.type === TokenType.TremoloMiddle);\n\n\t\tconst tevents = events\n\t\t\t.filter((event) => !event.rest)\n\t\t\t.map((event) => {\n\t\t\t\tconst ys = [...event.ys];\n\t\t\t\tif (event.tip) ys.push(event.tip.y);\n\t\t\t\telse {\n\t\t\t\t\tys.push(event.ys[0] + 2);\n\t\t\t\t\tys.push(event.ys[event.ys.length - 1] - 2);\n\t\t\t\t}\n\n\t\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\t\t\t\tconst stemR = event.tip ? event.tip.x : event.right;\n\n\t\t\t\treturn {\n\t\t\t\t\tevent,\n\t\t\t\t\ttop: Math.min(...ys),\n\t\t\t\t\tbottom: Math.max(...ys),\n\t\t\t\t\tstemL,\n\t\t\t\t\tstemR,\n\t\t\t\t};\n\t\t\t});\n\n\t\ttremolsMs.forEach((tm) => {\n\t\t\tconst te = tevents.find((te) => {\n\t\t\t\tif (te.event.tip) return tm.y > te.top && tm.y < te.bottom && Math.abs(tm.x - te.event.tip.x) < 0.3;\n\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t}\n\t\t});\n\t\ttremolsLs.forEach((tl) => {\n\t\t\tconst te = tevents.find((te) => tl.y > te.top && tl.y < te.bottom && tl.x > te.stemR && tl.x < te.stemR + 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Pitcher;\n\t\t\t}\n\t\t});\n\t\ttremolsRs.forEach((tr) => {\n\t\t\tconst te = tevents.find((te) => tr.y > te.top && tr.y < te.bottom && tr.x < te.stemL && tr.x > te.stemL - 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Catcher;\n\t\t\t}\n\t\t});\n\t}\n\n\tassignFeaturesOnEvents(events: ChordColumn[], semantics: SemanticPoint[]): void {\n\t\tconst points = semantics.filter((point) => point.x > this.left && point.x < this.right);\n\t\tconst rests = points.filter((point) => REST_SEMANTICS.includes(point.semantic));\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tconst dotPs = points.filter((point) => point.semantic === SemanticType.Dot);\n\t\tconst beamLs = points.filter((points) => points.semantic === SemanticType.BeamLeft);\n\t\tconst beamMs = points.filter((points) => points.semantic === SemanticType.BeamContinue);\n\t\tconst beamRs = points.filter((points) => points.semantic === SemanticType.BeamRight);\n\t\tconst gracePs = points.filter((point) => point.semantic === SemanticType.GraceNotehead);\n\t\tconst tremoloRs = points.filter((point) => point.semantic === SemanticType.TremoloRight);\n\t\tconst stems = points.filter((point) => point.semantic === SemanticType.vline_Stem);\n\t\tconst s0 = points.filter((point) => point.semantic === SemanticType.NoteheadS0);\n\t\tconst s1 = points.filter((point) => point.semantic === SemanticType.NoteheadS1);\n\t\tconst s2 = points.filter((point) => point.semantic === SemanticType.NoteheadS2);\n\n\t\tevents.forEach((event) => {\n\t\t\tconst cx = event.tip ? event.tip.x : (event.left + event.right) / 2;\n\t\t\tconst top = event.tip ? Math.min(event.tip.y, event.ys[event.ys.length - 1]) : event.ys[event.ys.length - 1];\n\t\t\tconst bottom = event.tip ? Math.max(event.tip.y, event.ys[0]) : event.ys[0];\n\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\n\t\t\tconst divisions = [0, 0, 0, 0, 0, 0, 0];\n\t\t\tif (event.rest) {\n\t\t\t\tconst i_rests = rests.filter((point) => distance2D(point, { x: cx, y: event.ys[0] }) < 0.5);\n\t\t\t\ti_rests.forEach((r) => {\n\t\t\t\t\tconst d = REST_SEMANTICS.indexOf(r.semantic);\n\t\t\t\t\tdivisions[d] = Math.max(divisions[d], r.confidence);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst nhs = [s0, s1, s2]\n\t\t\t\t\t.map((ss) => ss.filter((nh) => nh.x > event.left && nh.x < event.right && nh.y > top - 0.25 && nh.y < bottom + 0.25))\n\t\t\t\t\t.map((ss) => Math.max(0, ...ss.map((nh) => nh.confidence)));\n\n\t\t\t\tconst i_flags = flags.filter((flag) => flag.y > top - 0.2 && flag.y < bottom + 0.2 && Math.abs(flag.x - cx) < 0.2);\n\t\t\t\ti_flags.sort((f1, f2) => f2.confidence - f1.confidence);\n\n\t\t\t\tdivisions[0] = nhs[0];\n\t\t\t\tdivisions[1] = nhs[1];\n\t\t\t\tdivisions[2] = nhs[2];\n\t\t\t\tArray(divisions.length - 3)\n\t\t\t\t\t.fill(0)\n\t\t\t\t\t.forEach((_, i) => (divisions[3 + i] = i_flags[i] ? i_flags[i].confidence : 0));\n\t\t\t}\n\n\t\t\tconst i_dots = dotPs.filter((dot) => dot.x > cx && dot.x < event.right + 2.6);\n\t\t\tconst dots2 = i_dots.filter((dot) => i_dots.some((d) => dot.x > d.x && Math.abs(dot.y - d.y) < 0.2));\n\t\t\tconst dots = [Math.max(0, ...i_dots.map((dot) => dot.confidence)), Math.max(0, ...dots2.map((dot) => dot.confidence))];\n\n\t\t\tconst beams = [beamLs, beamMs, beamRs]\n\t\t\t\t.map((bs) => bs.filter((b) => Math.abs(b.x - cx) < 0.2 && b.y > top - 0.2 && b.y < bottom + 0.2))\n\t\t\t\t.map((bs) => Math.max(0, ...bs.map((b) => b.confidence)));\n\n\t\t\tconst u_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[0] }, { x: stem.x, y: stem.extension.y2 }) < 0.5);\n\t\t\tconst d_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[event.ys.length - 1] }, { x: stem.x, y: stem.extension.y1 }) < 0.5);\n\t\t\tconst stemDirections = [Math.max(0, ...u_stems.map((stem) => stem.confidence)), Math.max(0, ...d_stems.map((stem) => stem.confidence))];\n\n\t\t\tconst graces = gracePs.filter((grace) => Math.abs(grace.x - cx) < 0.6 && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tconst grace = Math.max(0, ...graces.map((grace) => grace.confidence));\n\n\t\t\tconst tremolos =\n\t\t\t\tevent.division === 0\n\t\t\t\t\t? tremoloRs.filter((tremolo) => tremolo.x > event.left - 2 && tremolo.x < event.right)\n\t\t\t\t\t: tremoloRs.filter((tremolo) => tremolo.y > top - 0.04 && tremolo.y < bottom + 0.04 && tremolo.x > stemL - 2 && tremolo.x < stemL);\n\t\t\tconst tremoloCatcher = Math.max(0, ...tremolos.map((tremolo) => tremolo.confidence));\n\n\t\t\tevent.feature = {\n\t\t\t\tdivisions,\n\t\t\t\tdots,\n\t\t\t\tbeams,\n\t\t\t\tstemDirections,\n\t\t\t\tgrace,\n\t\t\t\ttremoloCatcher,\n\t\t\t} as EventFeature;\n\t\t});\n\t}\n}\n\nclass Staff extends SimpleClass {\n\tstatic className = 'Staff';\n\tstatic blackKeys = ['index', 'semanticTop', 'semanticBttom'];\n\n\tindex?: number; // staff index in full staff layout\n\n\t// in units\n\ttop: number;\n\theight: number;\n\tstaffY: number;\n\n\tsemanticTop: number;\n\tsemanticBottom: number;\n\n\tbackgroundImage: string | Buffer;\n\tmaskImage: string | Buffer;\n\timagePosition: Rect;\n\n\tmeasures: Measure[];\n\n\tsemantics: SemanticPoint[];\n\n\tconstructor({ measureCount = null, measureBars = null, ...data }: Record = {}) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.height = this.height || 10;\n\t\tthis.staffY = this.staffY || 5;\n\n\t\tif (measureBars) {\n\t\t\tlet left = 0;\n\t\t\tthis.measures = measureBars.map((endX) => {\n\t\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\t\tleft = endX;\n\n\t\t\t\treturn measure;\n\t\t\t});\n\t\t} else if (measureCount)\n\t\t\tthis.measures = Array(measureCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Measure());\n\t\telse this.measures = [];\n\t}\n\n\t// relative to staffY\n\tget noteRange(): { top: number; bottom: number } {\n\t\tconst noteheads: Token[] = [].concat(...this.measures.map((measure) => measure.noteheads));\n\t\tconst ys = noteheads.map((note) => note.y);\n\t\tconst top = Math.min(-2, ...ys);\n\t\tconst bottom = Math.max(2, ...ys);\n\n\t\treturn { top, bottom };\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\treturn [].concat(...this.measures.map((measure) => measure.additionalLines));\n\t}\n\n\trearrangeMeasures(measureBars: number[]): void {\n\t\tif (!measureBars.length) {\n\t\t\tconsole.warn('rearrangeMeasures error, measureBars are empty.');\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokens = this.measures?.map((measure) => measure.tokens).flat(1) || [];\n\n\t\tlet left = 0;\n\t\tthis.measures = measureBars.map((endX) => {\n\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\tleft = endX;\n\n\t\t\treturn measure;\n\t\t});\n\n\t\tthis.reassignTokens(tokens);\n\t}\n\n\treassignTokens(tokens: Token[] = null): void {\n\t\tif (!tokens) tokens = [].concat(...this.measures.map((measure) => measure.tokens));\n\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\n\t\ttokens.forEach((token) => {\n\t\t\tfor (const measure of this.measures) {\n\t\t\t\tif (token.x < measure.right) {\n\t\t\t\t\tmeasure.tokens.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tassignSemantics(graph: SemanticGraph): void {\n\t\tthis.semantics = graph.getStaffPoints();\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, system: System, logger: Logger = new DummyLogger()): void {\n\t\tif (!this.semantics) return;\n\n\t\tlet points = system.qualifiedSemantics(this.semantics, threshold);\n\t\tpoints = solveOverlapping(points);\n\n\t\t// tempo noteheads\n\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t//console.log(\"temponh:\", tempoNh, index, points[index]);\n\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t// TODO: construct tempo term\n\t\t});\n\n\t\tconst antiP = (id: string): SemanticPoint | null => {\n\t\t\tif (system.displacementSemantics?.[id]) return this.semantics.find((p) => p.id === id);\n\n\t\t\treturn null;\n\t\t};\n\n\t\tpoints.filter((point) => MEASURE_SEMANTICS.includes(point.semantic)).forEach((point) => this.appendPoint(point, { points }));\n\n\t\t// noteheads with stem from noteheads & stems\n\t\tconst stems: Stem[] = points\n\t\t\t.filter((point) => point.semantic === SemanticType.vline_Stem)\n\t\t\t.filter((stem) => stem.extension.y2 - stem.extension.y1 > 1.5) // exclude too short stems\n\t\t\t.map((p) => ({\n\t\t\t\tx: p.x,\n\t\t\t\ty1: p.extension.y1,\n\t\t\t\ty2: p.extension.y2,\n\t\t\t\tdirection: null,\n\t\t\t}));\n\t\tconst noteheads = points.filter(\n\t\t\t(point) => NOTEHEAD_FOR_STEM_SEMANTICS.includes(point.semantic) && point.y > this.semanticTop && point.y < this.semanticBottom\n\t\t);\n\t\tconst rootNhs = new Set();\n\n\t\t// for 2nd degree chord notes\n\t\tconst nhOffsetX = (nh: SemanticPoint, stem: Stem, down: boolean): number => {\n\t\t\tif ((down ? 1 : 0) ^ (nh.x < stem.x ? 1 : 0)) return 0;\n\n\t\t\tconst offset = NOTEHEAD_WIDTHS[nh.semantic];\n\n\t\t\treturn down ? -offset : offset;\n\t\t};\n\n\t\t// find root noteheads on stem\n\t\tstems.forEach((stem) => {\n\t\t\tconst attachedHeads = noteheads.filter(\n\t\t\t\t(nh) =>\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 < 0.32 &&\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 > -0.44 && // for grace noteheads, more close to their stem\n\t\t\t\t\tnh.y > stem.y1 - 0.5 &&\n\t\t\t\t\tnh.y < stem.y2 + 0.5 &&\n\t\t\t\t\t!(nh.x > stem.x && nh.y > stem.y2) &&\n\t\t\t\t\t!(nh.x < stem.x && nh.y < stem.y1)\n\t\t\t);\n\t\t\t//if (stem.x===102.0625 && stem.y2===1.875)\n\t\t\t//\tdebugger;\n\t\t\tif (attachedHeads.length) {\n\t\t\t\tattachedHeads.sort((n1, n2) => n1.y - n2.y);\n\n\t\t\t\tconst topDist = Math.min(...attachedHeads.map((nh) => nh.y - stem.y1));\n\t\t\t\tconst bottomDist = Math.min(...attachedHeads.map((nh) => stem.y2 - nh.y));\n\t\t\t\tif (Math.min(topDist, bottomDist) > 0.5) return; // no root notehead on this stem\n\n\t\t\t\tconst down = topDist < bottomDist;\n\t\t\t\tstem.direction = down ? 'd' : 'u';\n\n\t\t\t\tif (!down) attachedHeads.reverse();\n\t\t\t\tconst root = attachedHeads[0];\n\n\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[root.semantic].down : NOTEHEAD_TABLE[root.semantic].up;\n\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: root.id,\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx: stem.x + nhOffsetX(root, stem, down),\n\t\t\t\t\t\ty: root.y,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tconfidence: root.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\tantiPoint: antiP(root.id),\n\t\t\t\t\t\tpoints,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\trootNhs.add(root.id);\n\t\t\t}\n\t\t});\n\n\t\t// non-root noteheads\n\t\tnoteheads\n\t\t\t.filter((nh) => !rootNhs.has(nh.id))\n\t\t\t.forEach((nh) => {\n\t\t\t\tconst nearStems = stems\n\t\t\t\t\t.filter((stem) => Math.abs(stem.x - nh.x) < 2 && nh.y > stem.y1 && nh.y < stem.y2)\n\t\t\t\t\t.sort((s1, s2) => Math.abs(s1.x - nh.x) - Math.abs(s2.x - nh.x));\n\t\t\t\tconst stem = nearStems[0];\n\t\t\t\tif (stem) {\n\t\t\t\t\tconst down = stem.direction === 'd';\n\t\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[nh.semantic].down : NOTEHEAD_TABLE[nh.semantic].up;\n\n\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: nh.id,\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x + nhOffsetX(nh, stem, down),\n\t\t\t\t\t\t\ty: nh.y,\n\t\t\t\t\t\t\tpivotX: nh.x,\n\t\t\t\t\t\t\tconfidence: nh.confidence,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\t\tantiPoint: antiP(nh.id),\n\t\t\t\t\t\t\tpoints,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else logger.debug('isolated notehead:', system.index, this.index, nh);\n\t\t\t});\n\n\t\t// group flags\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tflags.sort((f1, f2) => f1.x - f2.x);\n\t\tthis.appendFlags(flags, stems);\n\n\t\t// group dots\n\t\tconst dots = points\n\t\t\t.filter((point) => point.semantic === SemanticType.Dot)\n\t\t\t.map((dot) => {\n\t\t\t\tconst y = roundNumber(dot.y, 0.5);\n\t\t\t\treturn { x: dot.x, y };\n\t\t\t});\n\t\tconst dotLines: { [key: number]: SemanticPoint[] } = dots.reduce((table, dot) => {\n\t\t\ttable[dot.y] = table[dot.y] || [];\n\t\t\ttable[dot.y].push(dot);\n\t\t\treturn table;\n\t\t}, {});\n\t\tObject.entries(dotLines).forEach(([sy, line]) => {\n\t\t\tconst y = Number(sy);\n\t\t\tif (line.length > 1) {\n\t\t\t\tline.sort((d1, d2) => d1.x - d2.x);\n\t\t\t\tfor (let i = 0; i < line.length - 1; i++) {\n\t\t\t\t\tconst dot = line[i];\n\t\t\t\t\tif (line.find((d) => d.x > dot.x && d.x - dot.x < 1.2)) {\n\t\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: dot.id,\n\t\t\t\t\t\t\t\tx: dot.x,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tconfidence: dot.confidence,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: TokenType.DotDot, antiPoint: antiP(dot.id), points }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// pair key accidentals\n\t\tconst keyaccs = points.filter((point) => point.semantic === SemanticType.KeyAcc);\n\t\tconst accs = points.filter((point) => KEYACC_CANDIDATE_SEMANTICS[point.semantic]);\n\t\taccs.forEach((acc) => {\n\t\t\tif (keyaccs.some((key) => Math.abs(acc.x - key.x) < 0.5 && Math.abs(acc.y - key.y) < 1)) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: acc.id,\n\t\t\t\t\t\tsemantic: acc.semantic,\n\t\t\t\t\t\tx: acc.x,\n\t\t\t\t\t\ty: acc.y,\n\t\t\t\t\t\tconfidence: acc.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{ type: KEYACC_CANDIDATE_SEMANTICS[acc.semantic], points }\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// octave shift heads\n\t\tconst octs = points.filter((point) => point.semantic === SemanticType.OctaveShift8);\n\t\tocts.forEach((oct) => {\n\t\t\tconst type = oct.y < 0 ? TokenType.OctaveShift8va : TokenType.OctaveShift8vb;\n\t\t\tthis.appendPoint(\n\t\t\t\t{\n\t\t\t\t\tid: oct.id,\n\t\t\t\t\tx: oct.x,\n\t\t\t\t\ty: oct.y,\n\t\t\t\t\tconfidence: oct.confidence,\n\t\t\t\t},\n\t\t\t\t{ type, points }\n\t\t\t);\n\t\t});\n\n\t\t// group volta dots\n\t\tconst voltaDots = this.semantics.filter((point) => [SemanticType.VoltaLeft, SemanticType.VoltaRight].includes(point.semantic));\n\t\tvoltaDots.sort((d1, d2) => d1.x - d2.x);\n\t\tconst voltaGroups: Record> = voltaDots.reduce(\n\t\t\t(groups, dot) => {\n\t\t\t\tconst group = groups[dot.semantic];\n\t\t\t\tconst xs = Array.from(Object.keys(group)).map(Number);\n\t\t\t\tconst x = xs.find((x) => dot.x < x + 0.2) || dot.x;\n\n\t\t\t\tgroup[x] = groups[dot.semantic][x] || [];\n\t\t\t\tgroup[x].push(dot);\n\n\t\t\t\treturn groups;\n\t\t\t},\n\t\t\t{ [SemanticType.VoltaLeft]: {}, [SemanticType.VoltaRight]: {} }\n\t\t);\n\t\tfor (const [type, group] of Object.entries(voltaGroups)) {\n\t\t\tObject.values(group).forEach((dots) => {\n\t\t\t\tif (dots.length > 1) {\n\t\t\t\t\tconst confidence = dots.reduce((sum, dot) => sum + dot.confidence, 0);\n\t\t\t\t\tif (dots[0].y * dots[1].y < 0 && confidence >= threshold * 2) this.appendPoint(dots[0], { type: TokenType[type] });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tappendPoint(\n\t\tpoint: Partial,\n\t\t{ type, points = null, antiPoint, ...fields }: { type?: TokenType; antiPoint?: SemanticPoint; [key: string]: any } = {}\n\t): void {\n\t\t//console.log(\"appendPoint.0:\", point, point.x, point.y);\n\t\tconst x = point.x;\n\t\tconst measure = this.measures.find((measure) => x < measure.left + measure.width);\n\t\tif (!measure)\n\t\t\t// drop tokens out of measures range\n\t\t\treturn;\n\n\t\t// lined or interval\n\t\tlet lined = false;\n\t\tlet interval = false;\n\t\tif (STAFF_LINED_SEMANTICS.includes(point.semantic)) {\n\t\t\tconsole.assert(points, 'argument of points for this semantic is required:', point.semantic);\n\t\t\tconst signs = points.filter((p) => LINED_INTERVAL_SEMANTICS.includes(p.semantic) && Math.abs(p.y - point.y) < 0.2 && Math.abs(p.x - point.x) < 1.2);\n\t\t\tif (signs.some((s) => s.semantic === SemanticType.SignLined)) lined = true;\n\t\t\telse if (signs.some((s) => s.semantic === SemanticType.SignInterval)) interval = true;\n\t\t}\n\n\t\ttype = type || TokenType[point.semantic];\n\t\tconst fixedY = TOKEN_Y_FIXED[type];\n\t\tlet roundY = TOKEN_Y_ROUND[type];\n\n\t\tif (lined || interval) roundY = Math.max(roundY, 1);\n\n\t\tlet y = point.y;\n\t\tif (Number.isFinite(fixedY)) y = fixedY;\n\t\telse if (roundY) {\n\t\t\tif (interval) y = roundNumber(y + 0.5, roundY) - 0.5;\n\t\t\telse y = roundNumber(y, roundY);\n\t\t}\n\t\t//if (lined || interval)\n\t\t//\tconsole.log(\"round sign:\", point.semantic, y, lined, interval);\n\n\t\tconst holder = measure.tokens.find((token) => token.type === type && Math.abs(token.x - x) < 0.1 && Math.abs(token.y - y) < 0.1);\n\t\tif (holder) {\n\t\t\tif (Number.isFinite(holder.confidence) && holder.confidence < point.confidence) {\n\t\t\t\tholder.x = x;\n\t\t\t\tholder.y = y;\n\t\t\t\tholder.confidence = point.confidence;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// exlude clef out of pitch range\n\t\tif (TokenClefs.includes(type)) {\n\t\t\tif (Math.abs(y) > 3) return;\n\t\t}\n\n\t\t// TODO: exclude overlapped pair by a token prior table\n\n\t\tmeasure.tokens.push(\n\t\t\tnew Token({\n\t\t\t\tid: point.id,\n\t\t\t\ttype,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tpivotX: point.pivotX,\n\t\t\t\tconfidence: point.confidence,\n\t\t\t\t...fields,\n\t\t\t})\n\t\t);\n\n\t\tif (antiPoint) {\n\t\t\tmeasure.antiTokens.push(\n\t\t\t\tnew Token({\n\t\t\t\t\tid: antiPoint.id,\n\t\t\t\t\ttype,\n\t\t\t\t\tx,\n\t\t\t\t\ty: antiPoint.y,\n\t\t\t\t\tconfidence: antiPoint.confidence,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}\n\n\tappendFlags(flags: SemanticPoint[], stems: Stem[]): void {\n\t\t//console.log(\"flags:\", flags);\n\t\tconst stemGroups = stems\n\t\t\t.map((stem) => ({\n\t\t\t\t...stem,\n\t\t\t\tflags: flags.filter((flag) => Math.abs(flag.x - stem.x) < 0.3 && flag.y > stem.y1 - 0.5 && flag.y < stem.y2 + 0.5),\n\t\t\t}))\n\t\t\t.filter((group) => group.flags.length);\n\n\t\tstemGroups.forEach((group) => {\n\t\t\tconst mainFlag = group.flags.reduce((main, flag) => (main && main.confidence > flag.confidence ? main : flag), null);\n\n\t\t\t//const upDistance = mainFlag.y - group.y1;\n\t\t\t//const downDistance = group.y2 - mainFlag.y;\n\t\t\t//const downward = downDistance < upDistance;\n\t\t\tconst downward = group.direction === 'd';\n\n\t\t\tconst tailY = downward ? Math.min(group.y2, group.y1 + STEM_LENGTH_MAX) : Math.max(group.y1, group.y2 - STEM_LENGTH_MAX);\n\n\t\t\tconst flagTips = group.flags.map((flag) => ({\n\t\t\t\ttip: (tailY - flag.y) * (downward ? 1 : -1),\n\t\t\t\tconfidence: flag.confidence,\n\t\t\t}));\n\t\t\tconst count = flagTips.filter((f) => f.tip < 2 || f.confidence > mainFlag.confidence * 0.7).length;\n\n\t\t\tconst type = TokenFlags[count - 1];\n\t\t\tif (type) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: group.flags[0].id,\n\t\t\t\t\t\tx: group.x,\n\t\t\t\t\t\ty: tailY,\n\t\t\t\t\t\tconfidence: Math.min(...group.flags.map((flag) => flag.confidence)),\n\t\t\t\t\t},\n\t\t\t\t\t{ type }\n\t\t\t\t);\n\t\t\t\t//console.log(\"flag:\", type);\n\t\t\t}\n\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\t\tthis.semantics = [];\n\t}\n\n\tclearPredictedTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = measure.tokens.filter((token) => !token.isPredicted)));\n\t}\n}\n\nclass System extends SimpleClass {\n\tstatic className = 'System';\n\tstatic blackKeys = ['index', 'pageIndex', 'prev', 'next', 'headMeasureIndex', 'tokens', 'indent'];\n\n\tindex?: number;\n\tpageIndex?: number;\n\tprev?: System;\n\tnext?: System;\n\theadMeasureIndex?: number; // zero based\n\n\t// in units\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\tindent: boolean;\n\n\tmeasureCount: number;\n\tstaves: Staff[];\n\n\tmeasureBars: number[];\n\n\tbackgroundImage: string;\n\timagePosition: Rect;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tsidBlackList: string[];\n\tsidWhiteList: string[];\n\n\tdisplacementSemantics?: { [id: string]: Partial };\n\n\tstaffMaskChanged: number;\n\tbracketsAppearance: string; // the staff layout code by prediction\n\n\tconstructor({ stavesCount, ...fields }: any) {\n\t\tsuper();\n\t\tsuper.assign(fields);\n\n\t\tif (!this.measureBars) {\n\t\t\tconst HEAD_WIDTH = 5;\n\t\t\tconst segmentLength = (this.width - HEAD_WIDTH) / this.measureCount;\n\t\t\tthis.measureBars = Array(this.measureCount)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => HEAD_WIDTH + segmentLength * (i + 1));\n\t\t}\n\n\t\tif (!fields.staves && stavesCount)\n\t\t\tthis.staves = Array(stavesCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Staff({ measureBars: this.measureBars }));\n\n\t\tthis.arrangePosition();\n\n\t\tthis.measureCount = this.measureCount || this.measureBars.length;\n\n\t\tthis.sidBlackList = this.sidBlackList || [];\n\t\tthis.sidWhiteList = this.sidWhiteList || [];\n\t}\n\n\tget noteRange(): { top: number; bottom: number } {\n\t\tif (!this.staves.length) return null;\n\n\t\tconst staffTop = this.staves[0];\n\t\tconst staffBottom = this.staves[this.staves.length - 1];\n\n\t\treturn {\n\t\t\ttop: staffTop.top + staffTop.staffY + staffTop.noteRange.top,\n\t\t\tbottom: staffBottom.top + staffBottom.staffY + staffBottom.noteRange.bottom,\n\t\t};\n\t}\n\n\tget staffPositions(): StaffPosition[] {\n\t\treturn this.staves.map((staff) => ({\n\t\t\ty: staff.top + staff.staffY,\n\t\t\tradius: 2,\n\t\t}));\n\t}\n\n\tget staffMask(): number {\n\t\tif (this.staffMaskChanged) return this.staffMaskChanged;\n\n\t\tif (this.prev && this.staves.length === this.prev.staves.length) return this.prev.staffMask;\n\n\t\treturn 2 ** this.staves.length - 1;\n\t}\n\n\tget staffTop(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[0].y - positions[0].radius : 0;\n\t}\n\n\tget staffBottom(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[positions.length - 1].y + positions[positions.length - 1].radius : 0;\n\t}\n\n\tarrangePosition(): void {\n\t\tlet y = 0;\n\t\tfor (const staff of this.staves) {\n\t\t\tif (Number.isFinite(staff.top)) break;\n\n\t\t\tstaff.top = y;\n\t\t\ty += staff.height;\n\t\t}\n\t}\n\n\ttidyMeasureBars(): void {\n\t\tthis.measureBars = this.measureBars.filter((x) => x > 1);\n\t\tthis.measureBars.sort((b1, b2) => b1 - b2);\n\n\t\tconst restWidth = this.width - this.measureBars[this.measureBars.length - 1];\n\t\tif (restWidth > 12) this.measureBars.push(this.width);\n\t\telse if (restWidth < 2) this.measureBars[this.measureBars.length - 1] = this.width;\n\n\t\tthis.measureBars = this.measureBars.filter((x, i) => i < 1 || x - this.measureBars[i - 1] > 4);\n\t}\n\n\trearrangeMeasures(): void {\n\t\tthis.measureCount = this.measureBars.length;\n\t\tthis.staves.forEach((staff) => staff.rearrangeMeasures(this.measureBars));\n\t}\n\n\tget height(): number {\n\t\treturn this.staves.reduce((height, staff) => height + staff.height, 0);\n\t}\n\n\tget connectionLine(): { top: number; bottom: number } {\n\t\tconst staffHead = this.staves[0];\n\t\tconst staffTail = this.staves[this.staves.length - 1];\n\n\t\treturn (\n\t\t\tstaffHead && {\n\t\t\t\ttop: staffHead.top + staffHead.staffY - 2,\n\t\t\t\tbottom: staffTail.top + staffTail.staffY + 2,\n\t\t\t}\n\t\t);\n\t}\n\n\tget middleY(): number {\n\t\tif (!this.staves.length) return 0;\n\n\t\tconst sum = this.staves.reduce((sum, staff) => sum + staff.top + staff.staffY, 0);\n\n\t\treturn sum / this.staves.length;\n\t}\n\n\tget timeSignatureOnHead(): boolean {\n\t\treturn this.staves.some((staff) => staff.measures[0]?.tokens.some((token) => TokenTimesigs.includes(token.type)));\n\t}\n\n\t// an array staff or null on every position of full staff layout\n\tgetStaffArray(stavesCount: number): Staff[] {\n\t\tlet si = 0;\n\n\t\treturn Array(stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, i) => {\n\t\t\t\tconst on = this.staffMask & (1 << i);\n\t\t\t\tconst staff = on ? this.staves[si++] : null;\n\t\t\t\tconsole.assert(!on || staff, 'system staves count is less than staff mask declared:', this.staves.length, this.staffMask.toString(2));\n\n\t\t\t\treturn staff;\n\t\t\t});\n\t}\n\n\t// measureIndex: the local measure index\n\tgetMarksInMeasure(measureIndex: number): MarkTerm[] {\n\t\tconsole.assert(measureIndex < this.measureBars.length, 'measure index out of range:', measureIndex, this.measureBars.length);\n\n\t\tconst left = measureIndex > 0 ? this.measureBars[measureIndex - 1] : 0;\n\t\tconst right = this.measureBars[measureIndex];\n\n\t\tconst tempoTokens = (this.tokens ?? []).filter(\n\t\t\t(token) => token.x >= left && token.x < right && token instanceof TextToken && token.textType === TextType.TempoNumeral\n\t\t) as TextToken[];\n\n\t\treturn [...tempoTokens.map((token) => TempoTerm.fromNumeralText(token.text)).filter(Boolean)];\n\t}\n\n\tgetEvents(stavesCount: number): EventSystem {\n\t\tconsole.assert(Number.isInteger(this.headMeasureIndex), 'invalid headMeasureIndex:', this.headMeasureIndex);\n\n\t\t// Empty system (no measureBars / no staves with measures): return empty result\n\t\tif (!this.measureBars?.length && this.staves.every((s) => !s.measures?.length)) {\n\t\t\treturn { staffMask: this.staffMask, columns: [] };\n\t\t}\n\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => {\n\t\t\t\tconst events = measure.getEvents();\n\t\t\t\tmeasure.assignAccessoriesOnEvents(events);\n\t\t\t\tmeasure.assignFeaturesOnEvents(events, staff.semantics);\n\n\t\t\t\treturn {\n\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t\tcontexts: measure.getContexts({ staff: staff.index }),\n\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts?.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (row[mi] && !row[mi].contexts.length && !row[mi].events.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//onst measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: this.getMarksInMeasure(i),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i]?.voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i]?.voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row[i]?.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i]?.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\t\t//columns.forEach(computeMeasureTicks);\n\n\t\t// assign id on column events\n\t\tcolumns.forEach((column) => {\n\t\t\tconst events = [].concat(...column.rows.filter(Boolean).map((row) => row.events));\n\t\t\tevents.forEach((event, i) => (event.id = i + 1));\n\t\t});\n\n\t\tconst lastColumn = columns[columns.length - 1];\n\t\tif (lastColumn) lastColumn.break = true;\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tgetEventsFunctional(stavesCount: number, ev: ChordsFeeder, processors: ColumnProcessor[] = [], { useXMap = false } = {}): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff, si) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure, mi) => {\n\t\t\t\tconst events = ev(si, mi);\n\n\t\t\t\treturn (\n\t\t\t\t\tevents && {\n\t\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcontexts: measure.getContexts({ staff: si }),\n\t\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\t// [measure, staff]\n\t\tconst columns: EventMeasureColumn[] = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => {\n\t\t\t\tconst localRows = rows.map((row) => row[mi]);\n\t\t\t\tif (localRows.some((row) => !row)) return null;\n\n\t\t\t\tlet xMap: Map = null;\n\t\t\t\tif (useXMap) {\n\t\t\t\t\tconst events: EventTerm[] = [].concat(...localRows.map((row) => row.events));\n\t\t\t\t\tconst groupMap: { [group: number]: EventTerm[] } = events.reduce((map, event) => {\n\t\t\t\t\t\tif (Number.isFinite(event.tickGroup)) map[event.tickGroup] = map[event.tickGroup] || [];\n\t\t\t\t\t\tmap[event.tickGroup].push(event);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, {});\n\n\t\t\t\t\txMap = Object.values(groupMap).reduce((map, events) => {\n\t\t\t\t\t\tconst x = Math.min(...events.map((event) => (event.left + event.right) / 2));\n\t\t\t\t\t\tmap.set(x, events);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, new Map());\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + mi,\n\t\t\t\t\t//startX: measureStartXs[mi],\n\t\t\t\t\t//width: measureWidths[mi],\n\t\t\t\t\trows: localRows, // [staff]\n\t\t\t\t\tmarks: this.getMarksInMeasure(mi),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\txMap,\n\t\t\t\t\tvoltaBegin: localRows.some((row) => row.voltaBegin),\n\t\t\t\t\tvoltaEnd: localRows.some((row) => row.voltaEnd),\n\t\t\t\t\talternative: localRows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: localRows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\tprocessors.forEach((proc) => columns.forEach(proc));\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\t// get EventSystem contains only contexted terms\n\tgetContexts(stavesCount: number): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: null,\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => ({\n\t\t\t\tevents: null,\n\t\t\t\tcontexts: measure.getContexts(),\n\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t}));\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (!row[mi].contexts.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: [],\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i].voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i].voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i].barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tassignSemantics(staffIndex: number, graph: SemanticGraph): void {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff is null:', staffIndex, this.staves);\n\t\tconst oy = staff.top + staff.staffY;\n\n\t\tgraph.getSystemPoints().forEach((point) => {\n\t\t\tconst p = { ...point };\n\t\t\tp.y += oy;\n\n\t\t\tif (p.extension) {\n\t\t\t\tp.extension = { ...p.extension };\n\t\t\t\tif (Number.isFinite(p.extension.y1)) {\n\t\t\t\t\tp.extension.y1 += oy;\n\t\t\t\t\tp.extension.y2 += oy;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.semantics.push(p);\n\t\t});\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, logger: Logger = new DummyLogger()): void {\n\t\t//console.log(\"System.assignSemantics:\", graph);\n\t\tthis.measureBars = [];\n\n\t\tif (!this.semantics) return;\n\n\t\tconst graph = SemanticGraph.fromPoints(this.semantics);\n\n\t\tconst bars = graph.getConfidentLayer(SemanticType.vline_BarMeasure, threshold);\n\t\tbars.sort((b1, b2) => b1.x - b2.x);\n\n\t\tconst staffTop = this.staffTop;\n\t\tconst staffBottom = this.staffBottom;\n\n\t\tconst MERGE_WINDOW = 0.4;\n\t\tlet lastX = 0;\n\t\tconst barColumns: { [key: number]: number } = bars.reduce((columns, bar) => {\n\t\t\tconst confidence = Number.isFinite(bar.confidence) ? Math.tanh(bar.confidence) : 1;\n\n\t\t\tconst x = bar.x - lastX > MERGE_WINDOW ? bar.x : lastX;\n\t\t\tlastX = bar.x;\n\t\t\tlet intensity = columns[x] || 0;\n\t\t\tintensity += (Math.min(bar.extension.y2, staffBottom) - Math.max(bar.extension.y1, staffTop)) * confidence;\n\n\t\t\tif (bar.x !== x) delete columns[x];\n\t\t\tcolumns[bar.x] = intensity;\n\n\t\t\treturn columns;\n\t\t}, {});\n\t\tconst barXs: number[] = Object.entries(barColumns)\n\t\t\t.filter(([x, intensity]) => (void x, intensity > 3 * this.staves.length))\n\t\t\t.map(([x]) => Number(x));\n\t\t// Include bar positions from whitelisted semantic points\n\t\tif (this.sidWhiteList.length) {\n\t\t\tfor (const bar of bars) {\n\t\t\t\tif (this.sidWhiteList.includes((bar as SemanticPoint).id) && !barXs.some((x) => Math.abs(x - bar.x) <= 2)) {\n\t\t\t\t\tbarXs.push(bar.x);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbarXs.sort((x1, x2) => x1 - x2);\n\t\tbarXs.forEach((x, i) => {\n\t\t\tif (i <= 0 || x - barXs[i - 1] > 2) this.measureBars.push(x);\n\t\t});\n\n\t\tif (!this.measureBars.length) this.measureBars.push(this.width);\n\n\t\tthis.tidyMeasureBars();\n\t\tthis.rearrangeMeasures();\n\n\t\t// measure bar type\n\t\tconst typeBars = this.semantics.filter((point) => [SemanticType.vline_BarTerminal, SemanticType.vline_BarSegment].includes(point.semantic));\n\t\ttypeBars.forEach((bar) => {\n\t\t\tconst measure = this.staves[0].measures.find((measure) => bar.x > measure.right - 2 && bar.x < measure.right + 1);\n\t\t\tif (measure) {\n\t\t\t\tconst type = bar.semantic.replace(/^vline_Bar/, '');\n\t\t\t\tmeasure.barTypes[type] = measure.barTypes[type] || 0;\n\t\t\t\tmeasure.barTypes[type] += bar.confidence;\n\t\t\t}\n\t\t});\n\n\t\tlet staffIndex = 0;\n\t\tconst staffMask = this.staffMask;\n\t\tthis.staves.forEach((staff, si) => {\n\t\t\t// staff index\n\t\t\twhile (!(staffMask & (1 << staffIndex))) ++staffIndex;\n\t\t\tstaff.index = staffIndex++;\n\n\t\t\t// assign semantic boundaries\n\t\t\tif (si === 0) staff.semanticTop = -staff.staffY;\n\t\t\telse {\n\t\t\t\tconst prevStaff = this.staves[si - 1];\n\t\t\t\tstaff.semanticTop = prevStaff.top + prevStaff.staffY + 3 - (staff.top + staff.staffY);\n\t\t\t}\n\n\t\t\tif (si < this.staves.length - 1) {\n\t\t\t\tconst nextStaff = this.staves[si + 1];\n\t\t\t\tstaff.semanticBottom = nextStaff.top + nextStaff.staffY - 3 - (staff.top + staff.staffY);\n\t\t\t} else staff.semanticBottom = this.height - (staff.top + staff.staffY);\n\n\t\t\tif (staff.semantics && staff.semantics.length) {\n\t\t\t\tstaff.semantics.forEach((point) => hashSemanticPoint(this.index, si, point));\n\n\t\t\t\tstaff.clearPredictedTokens();\n\t\t\t\tstaff.assemble(threshold, this, logger);\n\t\t\t}\n\t\t});\n\t}\n\n\tqualifiedSemantics(semantics: SemanticPoint[], threshold: number = 1): SemanticPoint[] {\n\t\treturn semantics\n\t\t\t.filter(\n\t\t\t\t(p) => this.sidWhiteList.includes(p.id) || (!this.sidBlackList.includes(p.id) && (p.confidence >= threshold || !Number.isFinite(p.confidence)))\n\t\t\t)\n\t\t\t.map((point) => {\n\t\t\t\t// displace semantic point\n\t\t\t\tif (this.displacementSemantics && this.displacementSemantics[point.id]) return { ...point, ...this.displacementSemantics[point.id] };\n\n\t\t\t\treturn point;\n\t\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.staves.forEach((staff) => staff.clearTokens());\n\t\tthis.semantics = [];\n\t}\n\n\tnewPoint(staffIndex: number, data: SemanticPoint, threshold: number = 1): SemanticPoint {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff index out of bound:', staffIndex, this.staves.length);\n\n\t\tconst { semantic, x, y, confidence = 0, extension = null } = data;\n\t\tconst point = { semantic, x, y, confidence, extension };\n\t\tif (!point.extension) delete point.extension;\n\n\t\thashSemanticPoint(this.index, staffIndex, point);\n\t\tstaff.semantics.push(point);\n\t\tstaff.clearPredictedTokens();\n\t\tstaff.assemble(threshold, this);\n\n\t\treturn point;\n\t}\n\n\tappendToken(token: TextToken): void {\n\t\tthis.tokens.push(token);\n\n\t\tswitch (token.textType) {\n\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t{\n\t\t\t\t\t// remove noteheads in text area\n\t\t\t\t\tconst staff = this.staves[0];\n\t\t\t\t\tif (staff) {\n\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\t\t\t\t\t\tstaff.measures.forEach((measure) => {\n\t\t\t\t\t\t\tmeasure.tokens = measure.tokens.filter(\n\t\t\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t\t\t!TokenNoteheads.includes(t.type) ||\n\t\t\t\t\t\t\t\t\tMath.abs(t.x - token.x) > token.width / 2 ||\n\t\t\t\t\t\t\t\t\tMath.abs(oy + t.y - token.y) > token.fontSize / 2\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase TextType.Alternation1:\n\t\t\tcase TextType.Alternation2:\n\t\t\t\t//console.log(\"appendToken:\", token, this.staves[0].measures);\n\t\t\t\tthis.staves[0].measures.forEach((measure) => {\n\t\t\t\t\tconst overlap = Math.min(measure.left + measure.width, token.x + token.width / 2) - Math.max(measure.left, token.x - token.width / 2);\n\t\t\t\t\tmeasure.alternative = measure.alternative || overlap / measure.width > 0.5;\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nclass Page extends SimpleClass {\n\tstatic className = 'Page';\n\tstatic blackKeys = ['index', 'tokens'];\n\n\tindex?: number;\n\n\t// in units\n\twidth: number;\n\theight: number;\n\n\tsystems: System[];\n\n\tsource: SourceImageFile;\n\tlayout?: PageLayout;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.systems = this.systems || [];\n\n\t\tif (this.source) {\n\t\t\tthis.source.matrix = this.source.matrix || [1, 0, 0, 1, 0, 0];\n\t\t}\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tclearTokens(): void {\n\t\tthis.semantics = null;\n\t\tthis.tokens = null;\n\n\t\tthis.systems.forEach((system) => (system.tokens = null));\n\t}\n\n\tassignTexts(areas: TextArea[], [imageHeight, imageWidth]: [number, number]): void {\n\t\tconst interval = this.source && this.source.interval ? this.source.interval * (imageHeight / this.source.dimensions.height) : imageHeight / this.height;\n\n\t\tthis.semantics = areas.map((area) => {\n\t\t\tconst p = {\n\t\t\t\tx: (area.cx - imageWidth / 2) / interval,\n\t\t\t\ty: (area.cy - imageHeight / 2) / interval,\n\t\t\t};\n\t\t\tconst rp = this.source && this.source.matrix ? trans23(p, this.source.matrix) : p;\n\n\t\t\treturn {\n\t\t\t\tconfidence: area.score,\n\t\t\t\tx: rp.x + this.width / 2,\n\t\t\t\ty: rp.y + this.height / 2,\n\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\textension: {\n\t\t\t\t\ttext: area.text,\n\t\t\t\t\ttype: area.type,\n\t\t\t\t\twidth: area.width / interval,\n\t\t\t\t\theight: area.height / interval,\n\t\t\t\t\ttheta: area.theta,\n\t\t\t\t\ttextFeature: area.feature_dict,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tassemble({ textAnnotations = null }: { textAnnotations?: { [id: string]: string } } = {}, logger: Logger = new DummyLogger()): void {\n\t\tthis.tokens = [];\n\t\tthis.systems.forEach((system) => (system.tokens = []));\n\n\t\t// compute system indent\n\t\tif (this.systems.length) {\n\t\t\tconst sysXs = this.systems.map((system) => system.left);\n\t\t\tconst middleX = sysXs[Math.floor((sysXs.length - 1) / 2)];\n\t\t\tthis.systems.forEach((system) => (system.indent = system.left > middleX + INDENT_THRESHOLD));\n\t\t}\n\n\t\tif (this.semantics) {\n\t\t\tconst pageName = this.source ? this.source.name : this.index.toString();\n\n\t\t\tthis.semantics.forEach((point) => {\n\t\t\t\thashPageSemanticPoint(pageName, point);\n\n\t\t\t\tconst fields = {\n\t\t\t\t\tid: point.id,\n\t\t\t\t\ttype: TokenType.Text,\n\t\t\t\t\tconfidence: point.confidence,\n\t\t\t\t\ttextType: TEXT_TYPE_ALIAS[point.extension.type] || point.extension.type,\n\t\t\t\t\ttext: (textAnnotations && textAnnotations[point.id]) || point.extension.text,\n\t\t\t\t\ttextFeasure: point.extension.textFeature,\n\t\t\t\t\twidth: point.extension.width,\n\t\t\t\t\tfontSize: point.extension.height,\n\t\t\t\t};\n\n\t\t\t\tswitch (point.semantic) {\n\t\t\t\t\tcase SemanticType.rect_Text:\n\t\t\t\t\t\tswitch (fields.textType) {\n\t\t\t\t\t\t\t// page tokens\n\t\t\t\t\t\t\tcase TextType.Title:\n\t\t\t\t\t\t\tcase TextType.Author:\n\t\t\t\t\t\t\tcase TextType.PageMargin:\n\t\t\t\t\t\t\tcase TextType.Other:\n\t\t\t\t\t\t\t\tthis.tokens.push(\n\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\tx: point.x,\n\t\t\t\t\t\t\t\t\t\ty: point.y,\n\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens on the top of system\n\t\t\t\t\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t\t\t\tcase TextType.Chord:\n\t\t\t\t\t\t\tcase TextType.MeasureNumber:\n\t\t\t\t\t\t\tcase TextType.Instrument:\n\t\t\t\t\t\t\tcase TextType.Alternation1:\n\t\t\t\t\t\t\tcase TextType.Alternation2:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = this.systems.find((system) => system.top + system.staffTop > point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tsystem.appendToken(\n\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\tx: point.x - system.left,\n\t\t\t\t\t\t\t\t\t\t\t\ty: point.y - system.top,\n\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens in staff\n\t\t\t\t\t\t\tcase TextType.TextualMark:\n\t\t\t\t\t\t\tcase TextType.Times:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = [...this.systems].reverse().find((system) => system.top < point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tconst sy = point.y - (system.top + system.staffTop);\n\t\t\t\t\t\t\t\t\t\tconst sx = point.x - system.left;\n\t\t\t\t\t\t\t\t\t\tconst staff = system.staves.find((staff) => sy >= staff.top && sy < staff.top + staff.height);\n\t\t\t\t\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\t\t\t\t\tconst measure = staff.measures.find((measure) => sx >= measure.left && sx < measure.left + measure.width);\n\t\t\t\t\t\t\t\t\t\t\tif (measure) {\n\t\t\t\t\t\t\t\t\t\t\t\tmeasure.tokens.push(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx: sx,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty: sy,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport { Measure, Staff, System, Page };\n","import { ChordColumn, Fraction } from './interfaces';\nimport { GraceType } from './term';\nimport { roundNumber } from './utils';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum SemanticElementType {\n\tBOS,\n\tPAD,\n\n\tNoteheadS0,\n\tNoteheadS1,\n\tNoteheadS2,\n\tNoteheadGrace,\n\tvline_Stem,\n\tFlag3,\n\tBeamLeft,\n\tBeamContinue,\n\tBeamRight,\n\tDot,\n\tRest0,\n\tRest1,\n\tRest2,\n\tRest3,\n\tRest4,\n\tRest5,\n\tRest6,\n\n\t// measure time signature denominators & numerators\n\tTimeD2,\n\tTimeD4,\n\tTimeD8,\n\tTimeN1,\n\tTimeN2,\n\tTimeN3,\n\tTimeN4,\n\tTimeN5,\n\tTimeN6,\n\tTimeN7,\n\tTimeN8,\n\tTimeN9,\n\tTimeN10,\n\tTimeN11,\n\tTimeN12,\n}\n\nconst TIME_SIG_DENOMINATORS = Object.fromEntries([2, 4, 8].map((n) => [n, SemanticElementType[`TimeD${n}`]]));\nconst TIME_SIG_NUMERATORS = Object.fromEntries(\n\tArray(12)\n\t\t.fill(null)\n\t\t.map((_, i) => i + 1)\n\t\t.map((n) => [n, SemanticElementType[`TimeN${n}`]])\n);\n\nconst et = SemanticElementType;\n\nconst ELEMENT_TOKEN_NAMES = {\n\t[et.BOS]: 'BOS',\n\t[et.NoteheadS0]: 'noteheads-s0',\n\t[et.NoteheadS1]: 'noteheads-s1',\n\t[et.NoteheadS2]: 'noteheads-s2',\n\t[et.NoteheadGrace]: 'GraceNotehead',\n\t[et.Flag3]: 'flags-u3',\n\t[et.BeamLeft]: 'BeamLeft',\n\t[et.BeamContinue]: 'BeamContinue',\n\t[et.BeamRight]: 'BeamRight',\n\t[et.Dot]: 'dot',\n\t[et.Rest0]: 'rests-0o',\n\t[et.Rest1]: 'rests-1o',\n\t[et.Rest2]: 'rests-2',\n\t[et.Rest3]: 'rests-3',\n\t[et.Rest4]: 'rests-4',\n\t[et.Rest5]: 'rests-5',\n\t[et.Rest6]: 'rests-6',\n};\n\nconst NOTEHEAD_BASE_DIVISION = {\n\t[et.NoteheadS0]: 0,\n\t[et.NoteheadS1]: 1,\n\t[et.NoteheadS2]: 2,\n\t[et.NoteheadGrace]: 2,\n};\n\nconst NOTEHEAD_ELEMENT_TYPES = [et.NoteheadS0, et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace];\n\nconst REST_ELEMENT_TYPES = [et.Rest0, et.Rest1, et.Rest2, et.Rest3, et.Rest4, et.Rest5, et.Rest6];\n\nconst BEAM_ELEMENT_TYPES = [et.BeamLeft, et.BeamContinue, et.BeamRight];\n\nconst NOTE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES];\n\nconst SOURCE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES, et.vline_Stem];\n\nconst TARGET_ELEMENT_TYPES = [et.BOS, et.NoteheadS0, et.vline_Stem, ...REST_ELEMENT_TYPES];\n\nconst ROOT_NOTE_ELEMENT_TYPES = [...NOTE_ELEMENT_TYPES, et.vline_Stem];\n\nconst ELEMENT_TO_STEMBEAM = {\n\t[et.BeamLeft]: 'Open',\n\t[et.BeamRight]: 'Close',\n};\n\ninterface SemanticElement {\n\ttype: SemanticElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\n\tindex?: number;\n\ttick?: number;\n\tid?: string;\n}\n\ntype Matrix = number[][];\n\nconst metaElem = (type: SemanticElementType): SemanticElement => ({\n\ttype,\n\tstaff: -1,\n\tx: 0,\n\ty1: 0,\n\ty2: 0,\n});\n\nconst BOS_ELEMENT = metaElem(SemanticElementType.BOS);\n\nconst fractionToElems = (fraction: Fraction): SemanticElement[] => [\n\tmetaElem(TIME_SIG_NUMERATORS[fraction.numerator]),\n\tmetaElem(TIME_SIG_DENOMINATORS[fraction.denominator]),\n];\n\nconst argmax = (data: number[], mask: boolean[]): number => {\n\tconst values = data.filter((_, i) => mask[i]);\n\tconst max = Math.max(...values);\n\n\treturn data.findIndex((x) => x === max);\n};\n\nclass SemanticCluster extends SimpleClass {\n\tindex?: number;\n\n\telements: SemanticElement[];\n\tmatrixH?: Matrix; // matrix N x N\n\t_matrixV?: Matrix; // matrix N x N\n\tgroupsV?: number[][]; // ids array\n\tmasks?: [boolean[], boolean[], boolean[]]; // the masks for: [jointer source, jointer target, V]\n\n\tstatic elementToJSON(elem: SemanticElement): object {\n\t\tconst result: any = {\n\t\t\ttype: elem.type,\n\t\t\tstaff: elem.staff,\n\t\t\tx: elem.x,\n\t\t\ty1: elem.y1,\n\t\t\ty2: elem.y2,\n\t\t};\n\n\t\tif (elem.id) result.id = elem.id;\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget sourceMask(): boolean[] {\n\t\treturn this.elements.map((elem) => SOURCE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget targetMask(): boolean[] {\n\t\treturn this.elements.map((elem) => TARGET_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget vMask(): boolean[] {\n\t\treturn this.elements.map((elem) => ROOT_NOTE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget compactMatrixH(): Matrix {\n\t\tif (!this.matrixH) return null;\n\n\t\tconst sourceMask = this.sourceMask;\n\t\tconst targetMask = this.targetMask;\n\n\t\treturn this.matrixH.filter((_, i) => sourceMask[i]).map((row) => row.filter((_, j) => targetMask[j]));\n\t}\n\n\tset compactMatrixH(value: Matrix) {\n\t\tthis.matrixH = expandMatrixByMasks([].concat(...value), [this.sourceMask, this.targetMask]);\n\t}\n\n\tget compactMatrixV(): number[] {\n\t\tif (!this._matrixV) return null;\n\n\t\tconst vMask = this.vMask;\n\n\t\tconst matrix = this._matrixV.filter((_, i) => vMask[i]).map((row) => row.filter((_, j) => vMask[j]));\n\n\t\treturn [].concat(...matrix.map((row, i) => row.slice(0, i)));\n\t}\n\n\tset compactMatrixV(value: number[]) {\n\t\tthis.matrixV = value && expandMatrixByMaskTriu(value, this.vMask);\n\t}\n\n\tget matrixV(): Matrix {\n\t\treturn this.groupsV && matrixFromGroups(this.elements.length, this.groupsV);\n\t}\n\n\tset matrixV(value: Matrix) {\n\t\tif (!value) {\n\t\t\tthis.groupsV = null;\n\t\t\tthis._matrixV = value;\n\t\t\treturn;\n\t\t}\n\n\t\tconst THRESHOLD = 0.5;\n\n\t\tconst groups: number[][] = [];\n\t\tconst vMask = value.map((row, i) => row.some(Number.isFinite) || value.some((row) => Number.isFinite(row[i])));\n\n\t\tvalue.forEach((row, i) => {\n\t\t\tif (vMask[i]) {\n\t\t\t\tlet found = false;\n\n\t\t\t\tfor (let j = 0; j < i; ++j) {\n\t\t\t\t\tconst cell = row[j];\n\t\t\t\t\tif (cell >= THRESHOLD) {\n\t\t\t\t\t\tconst g = groups.findIndex((group) => group.includes(j));\n\t\t\t\t\t\tgroups[g].push(i);\n\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!found) groups.push([i]);\n\t\t\t}\n\t\t});\n\n\t\tthis.groupsV = groups;\n\t\tthis._matrixV = value;\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\t__prototype: 'SemanticCluster',\n\t\t\tindex: this.index,\n\t\t\telements: this.elements.map(SemanticCluster.elementToJSON),\n\t\t\tcompactMatrixH: this.compactMatrixH,\n\t\t\tcompactMatrixV: this.compactMatrixV,\n\t\t\t//groupsV: this.groupsV,\n\t\t};\n\t}\n\n\tstatic mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][] {\n\t\tconst rows = x2i.reduce((rows, i, x) => {\n\t\t\tif (rows[i]) rows[i] = rows[i].map((v, xi) => (v + matrix[x][xi] ? 1 : 0));\n\t\t\telse rows[i] = matrix[x];\n\n\t\t\treturn rows;\n\t\t}, [] as number[][]);\n\n\t\treturn rows.map((row) => i2x.map((x) => row[x]));\n\t}\n\n\tmergeOverlapping() {\n\t\tconst overlaps = this.overlappedNoteheads();\n\t\tif (overlaps.length) {\n\t\t\tconst x2i = this.elements.map((_, index) => {\n\t\t\t\tconst pair = overlaps.find((ij) => index === ij[1]);\n\t\t\t\tconst i = pair ? pair[0] : index;\n\n\t\t\t\treturn i - overlaps.filter((ij) => ij[1] < i).length;\n\t\t\t});\n\t\t\tconst i2x = Array(this.elements.length - overlaps.length)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, i) => x2i.findIndex((ii) => ii === i));\n\n\t\t\tthis.elements = i2x.map((x) => this.elements[x]);\n\t\t\tconsole.assert(this.elements.every(Boolean), 'null element found:', this, x2i, i2x);\n\n\t\t\tthis.matrixH = SemanticCluster.mapMatrix(this.matrixH, x2i, i2x);\n\t\t\tthis.groupsV = this.groupsV.map((group) => Array.from(new Set(group.map((x) => x2i[x]))));\n\t\t}\n\t}\n\n\toverlappedNoteheads(): [number, number][] {\n\t\tconst indices = [];\n\n\t\tconst noteheads = this.elements.filter((elem) => NOTEHEAD_ELEMENT_TYPES.includes(elem.type));\n\t\tfor (let i = 0; i < noteheads.length; ++i) {\n\t\t\tconst nh1 = noteheads[i];\n\t\t\tfor (let j = i + 1; j < noteheads.length; ++j) {\n\t\t\t\tconst nh2 = noteheads[j];\n\t\t\t\tif ((nh1.x - nh2.x) * (nh1.x - nh2.x) + (nh1.y1 - nh2.y1) * (nh1.y1 - nh2.y1) < 0.2 ** 2) indices.push([nh1.index, nh2.index]);\n\t\t\t}\n\t\t}\n\n\t\treturn indices;\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\tconsole.assert(this.matrixH, '[SemanticCluster.getEvents]\tmatrixH is null.');\n\n\t\tconst NOTE_STEM_CONFIDENCE = 0.5;\n\n\t\tconst ids = Array(this.elements.length)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => index);\n\n\t\tconst targetMask = this.masks ? this.masks[1] : ids.map((id) => TARGET_ELEMENT_TYPES.includes(this.elements[id].type));\n\n\t\t//const stems = ids.filter(i => this.elements[i].type === et.vline_Stem);\n\t\tconst stemMasks = ids.map((id) => this.elements[id].type === et.vline_Stem && this.elements[id].y2 - this.elements[id].y1 > 2); // TODO: sift out too short stems by rectification model\n\t\tconst stemNotes = ids.filter((i) => [et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace].includes(this.elements[i].type));\n\t\tconst s0s = ids.filter((i) => this.elements[i].type === et.NoteheadS0);\n\t\tconst subS0Masks = ids.map(() => false);\n\n\t\t// root elements: top NoteheadS0, Rests, stem with noteheads\n\t\tconst stemMap: { [stem: number]: number[] } = {};\n\t\tstemNotes.forEach((id) => {\n\t\t\tconst note = this.elements[id];\n\t\t\tconst stems = ids\n\t\t\t\t.filter((i) => stemMasks[i])\n\t\t\t\t.filter((stemId) => this.elements[stemId].y1 - 0.5 < note.y1 && this.elements[stemId].y2 + 0.5 > note.y1) // filter by stem Y range\n\t\t\t\t.sort((i1, i2) => this.matrixH[id][i2] - this.matrixH[id][i1]) // sort by confidence\n\t\t\t\t.slice(0, 2)\n\t\t\t\t.filter((i, ii) => ii === 0 || this.matrixH[id][i] >= NOTE_STEM_CONFIDENCE);\n\t\t\tstems.forEach((stem) => {\n\t\t\t\tstemMap[stem] = stemMap[stem] || [];\n\t\t\t\tstemMap[stem].push(id);\n\t\t\t});\n\t\t});\n\n\t\ts0s.forEach((id) => {\n\t\t\tconst s0 = this.elements[id];\n\t\t\tconst prevId = argmax(this.matrixH[id], targetMask);\n\t\t\tconst prev = this.elements[prevId];\n\t\t\tif (prev.type === et.NoteheadS0 && Math.abs(s0.x - prev.x) < 2.6) {\n\t\t\t\tsubS0Masks[id] = true;\n\t\t\t\tstemMap[prevId] = stemMap[prevId] || [prevId];\n\t\t\t\tstemMap[prevId].push(id);\n\t\t\t} else stemMap[id] = stemMap[id] || [id];\n\t\t});\n\n\t\t// setup linkings\n\t\tconst linkings: { [key: number]: number } = {};\n\n\t\tconst roots = ids.filter((id) => stemMap[id] || REST_ELEMENT_TYPES.includes(this.elements[id].type));\n\t\troots.sort((i1, i2) => this.elements[i1].x - this.elements[i2].x); // traverse roots from left to right later\n\n\t\tconst parentMasks = ids.map((id) => id === et.BOS);\n\t\troots.forEach((id) => {\n\t\t\tconst parentId = argmax(this.matrixH[id], parentMasks);\n\t\t\tlinkings[id] = parentId;\n\n\t\t\tif (parentId && !REST_ELEMENT_TYPES.includes(this.elements[parentId].type)) parentMasks[parentId] = false;\n\n\t\t\tparentMasks[id] = true;\n\t\t});\n\t\t//console.log(\"topology:\", stemMap, linkings);\n\n\t\tconst dots = this.elements.filter((elem) => elem.type === et.Dot);\n\t\tconst flags = this.elements.filter((elem) => elem.type === et.Flag3);\n\t\tconst beams = this.elements.filter((elem) => BEAM_ELEMENT_TYPES.includes(elem.type));\n\n\t\tconst groupsV = this.groupsV;\n\n\t\treturn roots\n\t\t\t.map((rootId): ChordColumn => {\n\t\t\t\tconst root = this.elements[rootId];\n\n\t\t\t\tconst tickGroup = groupsV ? groupsV.findIndex((group) => group.includes(rootId)) : null;\n\n\t\t\t\tif (REST_ELEMENT_TYPES.includes(root.type)) {\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > root.x + 0.5 && dot.x < root.x + 0.75 + 1.2 && dot.y1 > root.y1 - 1 && dot.y1 < root.y1);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft: root.x - 0.75,\n\t\t\t\t\t\tright: root.x + 0.75,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\trest: true,\n\t\t\t\t\t\tys: [root.y1],\n\t\t\t\t\t\tnoteIds: [root.id],\n\t\t\t\t\t\tdots: nearbyDots.length,\n\t\t\t\t\t\tdivision: root.type - et.Rest0,\n\t\t\t\t\t\tstemDirection: null,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: root.staff,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t} else if (stemMap[rootId]) {\n\t\t\t\t\tconst subNotes = stemMap[rootId].map((id) => this.elements[id]);\n\t\t\t\t\tconst left = Math.min(...subNotes.map((n) => n.x - 0.7));\n\t\t\t\t\tconst right = Math.max(...subNotes.map((n) => n.x + 0.7));\n\t\t\t\t\tsubNotes.sort((n1, n2) => n2.y1 - n1.y1);\n\n\t\t\t\t\tconst ys = subNotes.map((note) => note.y1);\n\n\t\t\t\t\tconst noteIds = subNotes.map((note) => note.id);\n\n\t\t\t\t\tconst top = ys[0];\n\t\t\t\t\tconst bottom = ys[ys.length - 1];\n\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > right && dot.x < right + 1.2 && dot.y1 > top - 1 && dot.y1 < bottom + 0.5);\n\t\t\t\t\tconst dotGroups: { [key: number]: SemanticElement[] } = nearbyDots.reduce((groups, dot) => {\n\t\t\t\t\t\tconst y = roundNumber(dot.y1, 0.5);\n\t\t\t\t\t\tgroups[y] = groups[y] || [];\n\t\t\t\t\t\tgroups[y].push(dot);\n\n\t\t\t\t\t\treturn groups;\n\t\t\t\t\t}, {});\n\t\t\t\t\tconst dotValue = Math.max(...Object.values(dotGroups).map((group) => group.length), 0);\n\n\t\t\t\t\tlet division = NOTEHEAD_BASE_DIVISION[subNotes[0].type];\n\n\t\t\t\t\tlet stemDirection = null;\n\t\t\t\t\tlet beam: string = null;\n\t\t\t\t\tlet tip = null;\n\t\t\t\t\tif (root.type === et.vline_Stem) {\n\t\t\t\t\t\tconst topTip = top - root.y1;\n\t\t\t\t\t\tconst bottomTip = root.y2 - bottom;\n\t\t\t\t\t\tstemDirection = topTip > bottomTip ? 'u' : 'd';\n\n\t\t\t\t\t\ttip = { x: root.x, y: stemDirection === 'u' ? root.y1 : root.y2 };\n\n\t\t\t\t\t\tif (division === 2) {\n\t\t\t\t\t\t\tconst flagRange = stemDirection === 'u' ? [root.y1 - 0.4, root.y2 - 1] : [root.y1 + 1, root.y2 + 0.4];\n\t\t\t\t\t\t\tconst nearbyFlags = flags.filter((flag) => Math.abs(flag.x - root.x) < 0.2 && flag.y1 > flagRange[0] && flag.y1 < flagRange[1]);\n\t\t\t\t\t\t\tdivision += nearbyFlags.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//const tipY = stemDirection === \"u\" ? root.y1 : root.y2;\n\t\t\t\t\t\tconst tipRange = stemDirection === 'u' ? [root.y1 - 0.2, root.y1 + 0.9] : [root.y2 - 0.9, root.y2 + 0.2];\n\t\t\t\t\t\tconst beamElem = beams.find((beam) => Math.abs(beam.x - root.x) < 0.2 && beam.y1 > tipRange[0] && beam.y1 < tipRange[1]);\n\t\t\t\t\t\tbeam = beamElem ? ELEMENT_TO_STEMBEAM[beamElem.type] : null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst grace = subNotes[0].type === SemanticElementType.NoteheadGrace ? GraceType.Grace : null;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tright,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tys,\n\t\t\t\t\t\ttip,\n\t\t\t\t\t\tnoteIds,\n\t\t\t\t\t\tdivision,\n\t\t\t\t\t\tdots: dotValue,\n\t\t\t\t\t\trest: false,\n\t\t\t\t\t\tstemDirection,\n\t\t\t\t\t\tbeam,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: subNotes[0].staff,\n\t\t\t\t\t\tgrace,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n}\n\ninterface SemanticClusterSetData {\n\tvocab?: string[];\n\tclusters: SemanticCluster[];\n}\n\nclass SemanticClusterSet {\n\tclusters: SemanticCluster[];\n\n\tconstructor(data?: SemanticClusterSetData) {\n\t\tif (data) {\n\t\t\tthis.clusters = data.clusters;\n\n\t\t\t// upgrade vocab\n\t\t\tif (data.vocab) {\n\t\t\t\tconst converts = data.vocab\n\t\t\t\t\t.map((name, i) => [i, SemanticElementType[name]])\n\t\t\t\t\t.filter(([x, y]) => x !== y)\n\t\t\t\t\t.reduce((table, [x, y]) => ((table[x] = y), table), {});\n\t\t\t\tthis.clusters.forEach((connection) =>\n\t\t\t\t\tconnection.elements.forEach((elem) => {\n\t\t\t\t\t\tif (Number.isFinite(converts[elem.type])) elem.type = converts[elem.type];\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoJSON() {\n\t\tconst vocab = Object.entries(SemanticElementType)\n\t\t\t.filter((entry) => Number.isFinite(entry[1]))\n\t\t\t.map((entry) => entry[0]);\n\n\t\treturn {\n\t\t\t__prototype: 'SemanticClusterSet',\n\t\t\tvocab,\n\t\t\tclusters: this.clusters.map((c) => c.toJSON()),\n\t\t};\n\t}\n}\n\nconst expandMatrixByMasks = (matrix: number[], masks: [boolean[], boolean[]]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\tconst [maskSrc, maskTar] = masks;\n\n\treturn maskSrc.map((src) => maskTar.map((tar) => (src && tar ? iter.next().value : null)));\n};\n\nconst expandMatrixByMaskTriu = (matrix: number[], mask: boolean[]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\treturn mask.map((row, i) => mask.map((column, j) => (row && column && j < i ? iter.next().value : null)));\n};\n\nconst matrixFromGroups = (len: number, groups: number[][]): Matrix => {\n\tconst groupIds = Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) => groups.findIndex((group) => group.includes(i)));\n\n\treturn Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) =>\n\t\t\tArray(len)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tif (j >= i) return null;\n\n\t\t\t\t\tconst id1 = groupIds[i];\n\t\t\t\t\tconst id2 = groupIds[j];\n\n\t\t\t\t\tif (id1 < 0 || id2 < 0) return null;\n\n\t\t\t\t\treturn id1 === id2 ? 1 : 0;\n\t\t\t\t})\n\t\t);\n};\n\nexport {\n\tSemanticElementType,\n\tSemanticElement,\n\tSemanticCluster,\n\tSemanticClusterSet,\n\tELEMENT_TOKEN_NAMES,\n\tNOTEHEAD_ELEMENT_TYPES,\n\tNOTE_ELEMENT_TYPES,\n\tBOS_ELEMENT,\n\tfractionToElems,\n\texpandMatrixByMasks,\n\texpandMatrixByMaskTriu,\n\tmatrixFromGroups,\n};\n","import { MusicNotation } from '@k-l-lambda/music-widgets';\n\n// implicit note (from expressive marks) types\nenum ImplicitType {\n\tNone = 0,\n\n\tMordent = 'mordent',\n\tPrall = 'prall',\n\tTurn = 'turn',\n\tTrill = 'trill',\n\tTremolo = 'tremolo',\n\tArpeggio = 'arpeggio',\n}\n\ninterface ChordPosition {\n\tindex: number;\n\tcount: number;\n}\n\nclass TokenPosition {\n\tsystem?: number;\n\tmeasure?: number;\n\tx: number;\n\tendX?: number;\n}\n\ninterface Note extends MusicNotation.Note {\n\tchordPosition?: ChordPosition;\n\tmeasure?: number;\n}\n\ninterface Notation {\n\tnotes: Note[];\n\tendTick: number;\n}\n\ninterface SheetPosition {\n\tsystem: number;\n\tx: number;\n}\n\nexport { ChordPosition, ImplicitType, TokenPosition, Note, Notation, SheetPosition };\n","/*\nclass to parse the .mid file format\n(depends on stream.js)\n*/\n\nconst Stream = require(\"./stream.js\");\n\n\n\nmodule.exports = function MidiFile (data) {\n\tfunction readChunk (stream) {\n\t\tconst id = stream.readString(4);\n\t\tconst length = stream.readInt32();\n\n\t\treturn {\n\t\t\tid,\n\t\t\tlength,\n\t\t\tdata: stream.read(length),\n\t\t};\n\t}\n\n\tlet lastEventTypeByte;\n\n\tfunction readEvent (stream) {\n\t\tconst event = {};\n\t\tevent.deltaTime = stream.readVarInt();\n\t\tlet eventTypeByte = stream.readInt8();\n\t\tif ((eventTypeByte & 0xf0) === 0xf0) {\n\t\t\t// system / meta event\n\t\t\tif (eventTypeByte === 0xff) {\n\t\t\t\t// meta event\n\t\t\t\tevent.type = \"meta\";\n\t\t\t\tconst subtypeByte = stream.readInt8();\n\t\t\t\tconst length = stream.readVarInt();\n\n\t\t\t\tswitch (subtypeByte) {\n\t\t\t\tcase 0x00:\n\t\t\t\t\tevent.subtype = \"sequenceNumber\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for sequenceNumber event is 2, got \" + length);\n\t\t\t\t\tevent.number = stream.readInt16();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x01:\n\t\t\t\t\tevent.subtype = \"text\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x02:\n\t\t\t\t\tevent.subtype = \"copyrightNotice\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tevent.subtype = \"trackName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x04:\n\t\t\t\t\tevent.subtype = \"instrumentName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x05:\n\t\t\t\t\tevent.subtype = \"lyrics\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x06:\n\t\t\t\t\tevent.subtype = \"marker\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x07:\n\t\t\t\t\tevent.subtype = \"cuePoint\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x20:\n\t\t\t\t\tevent.subtype = \"midiChannelPrefix\";\n\t\t\t\t\tif (length !== 1)\n\t\t\t\t\t\tthrow new Error(\"Expected length for midiChannelPrefix event is 1, got \" + length);\n\t\t\t\t\tevent.channel = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x2f:\n\t\t\t\t\tevent.subtype = \"endOfTrack\";\n\t\t\t\t\tif (length !== 0)\n\t\t\t\t\t\tthrow new Error(\"Expected length for endOfTrack event is 0, got \" + length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x51:\n\t\t\t\t\tevent.subtype = \"setTempo\";\n\t\t\t\t\tif (length !== 3)\n\t\t\t\t\t\tthrow new Error(\"Expected length for setTempo event is 3, got \" + length);\n\t\t\t\t\tevent.microsecondsPerBeat = (\n\t\t\t\t\t\t(stream.readInt8() << 16) +\n\t\t\t\t\t\t\t(stream.readInt8() << 8) +\n\t\t\t\t\t\t\tstream.readInt8()\n\t\t\t\t\t);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x54:\n\t\t\t\t\tevent.subtype = \"smpteOffset\";\n\t\t\t\t\tif (length !== 5)\n\t\t\t\t\t\tthrow new Error(\"Expected length for smpteOffset event is 5, got \" + length);\n\t\t\t\t\tconst hourByte = stream.readInt8();\n\t\t\t\t\tevent.frameRate = {\n\t\t\t\t\t\t0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30,\n\t\t\t\t\t}[hourByte & 0x60];\n\t\t\t\t\tevent.hour = hourByte & 0x1f;\n\t\t\t\t\tevent.min = stream.readInt8();\n\t\t\t\t\tevent.sec = stream.readInt8();\n\t\t\t\t\tevent.frame = stream.readInt8();\n\t\t\t\t\tevent.subframe = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x58:\n\t\t\t\t\tevent.subtype = \"timeSignature\";\n\t\t\t\t\tif (length !== 4)\n\t\t\t\t\t\tthrow new Error(\"Expected length for timeSignature event is 4, got \" + length);\n\t\t\t\t\tevent.numerator = stream.readInt8();\n\t\t\t\t\tevent.denominator = Math.pow(2, stream.readInt8());\n\t\t\t\t\tevent.metronome = stream.readInt8();\n\t\t\t\t\tevent.thirtyseconds = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x59:\n\t\t\t\t\tevent.subtype = \"keySignature\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for keySignature event is 2, got \" + length);\n\t\t\t\t\tevent.key = stream.readInt8(true);\n\t\t\t\t\tevent.scale = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x7f:\n\t\t\t\t\tevent.subtype = \"sequencerSpecific\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tdefault:\n\t\t\t\t\t// console.log(\"Unrecognised meta event subtype: \" + subtypeByte);\n\t\t\t\t\tevent.subtype = \"unknown\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\n\t\t\t\t//event.data = stream.readString(length);\n\t\t\t\t//return event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf0) {\n\t\t\t\tevent.type = \"sysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf7) {\n\t\t\t\tevent.type = \"dividedSysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type byte: \" + eventTypeByte);\n\t\t}\n\t\telse {\n\t\t\t/* channel event */\n\t\t\tlet param1;\n\t\t\tif ((eventTypeByte & 0x80) === 0) {\n\t\t\t\t/* running status - reuse lastEventTypeByte as the event type.\n\t\t\t\t\teventTypeByte is actually the first parameter\n\t\t\t\t*/\n\t\t\t\tparam1 = eventTypeByte;\n\t\t\t\teventTypeByte = lastEventTypeByte;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparam1 = stream.readInt8();\n\t\t\t\tlastEventTypeByte = eventTypeByte;\n\t\t\t}\n\n\t\t\tconst eventType = eventTypeByte >> 4;\n\t\t\tevent.channel = eventTypeByte & 0x0f;\n\t\t\tevent.type = \"channel\";\n\n\t\t\tswitch (eventType) {\n\t\t\tcase 0x08:\n\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x09:\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\t\t\t\tif (event.velocity === 0)\n\t\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\telse\n\t\t\t\t\tevent.subtype = \"noteOn\";\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0a:\n\t\t\t\tevent.subtype = \"noteAftertouch\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.amount = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0b:\n\t\t\t\tevent.subtype = \"controller\";\n\t\t\t\tevent.controllerType = param1;\n\t\t\t\tevent.value = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0c:\n\t\t\t\tevent.subtype = \"programChange\";\n\t\t\t\tevent.programNumber = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0d:\n\t\t\t\tevent.subtype = \"channelAftertouch\";\n\t\t\t\tevent.amount = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0e:\n\t\t\t\tevent.subtype = \"pitchBend\";\n\t\t\t\tevent.value = param1 + (stream.readInt8() << 7);\n\n\t\t\t\treturn event;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type: \" + eventType);\n\n\t\t\t\t/*\n\t\t\t\tconsole.log(\"Unrecognised MIDI event type: \" + eventType);\n\t\t\t\tstream.readInt8();\n\t\t\t\tevent.subtype = 'unknown';\n\t\t\t\treturn event;\n\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n\n\n\tlet source = data;\n\tif (typeof data === \"string\")\n\t\tsource = data.split(\"\").map(c => c.charCodeAt(0));\n\n\tconst stream = new Stream(source);\n\tconst headerChunk = readChunk(stream);\n\tif (headerChunk.id !== \"MThd\" || headerChunk.length !== 6)\n\t\tthrow new Error(\"Bad .mid file - header not found\");\n\n\tconst headerStream = new Stream(headerChunk.data);\n\tconst formatType = headerStream.readInt16();\n\tconst trackCount = headerStream.readInt16();\n\tconst timeDivision = headerStream.readInt16();\n\n\tlet ticksPerBeat;\n\tif (timeDivision & 0x8000)\n\t\tthrow new Error(\"Expressing time division in SMTPE frames is not supported yet\");\n\telse\n\t\tticksPerBeat = timeDivision;\n\n\n\tconst header = {\n\t\tformatType,\n\t\ttrackCount,\n\t\tticksPerBeat,\n\t};\n\tconst tracks = [];\n\tfor (let i = 0; i < header.trackCount; i++) {\n\t\ttracks[i] = [];\n\t\tconst trackChunk = readChunk(stream);\n\t\tif (trackChunk.id !== \"MTrk\")\n\t\t\tthrow new Error(\"Unexpected chunk - expected MTrk, got \" + trackChunk.id);\n\n\t\tconst trackStream = new Stream(trackChunk.data);\n\t\twhile (!trackStream.eof()) {\n\t\t\tconst event = readEvent(trackStream);\n\t\t\ttracks[i].push(event);\n\t\t}\n\t}\n\n\treturn {\n\t\theader,\n\t\ttracks,\n\t};\n};\n","\n/* Wrapper for accessing buffer through sequential reads */\n\n\n\nmodule.exports = class Stream {\n\tconstructor (buffer) {\n\t\tthis.array = new Uint8Array(buffer);\n\t\tthis.position = 0;\n\t}\n\n\n\teof () {\n\t\treturn this.position >= this.array.length;\n\t}\n\n\n\tread (length) {\n\t\tconst result = this.array.slice(this.position, this.position + length);\n\t\tthis.position += length;\n\n\t\treturn result;\n\t}\n\n\n\treadString (length) {\n\t\tconst data = Array.from(this.read(length));\n\n\t\treturn data.map(c => String.fromCharCode(c)).join(\"\");\n\t}\n\n\n\t// read a big-endian 32-bit integer\n\treadInt32 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 24) +\n\t\t\t(this.array[this.position + 1] << 16) +\n\t\t\t(this.array[this.position + 2] << 8) +\n\t\t\tthis.array[this.position + 3]);\n\t\tthis.position += 4;\n\n\t\treturn result;\n\t}\n\n\n\t// read a big-endian 16-bit integer\n\treadInt16 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 8) +\n\t\t\tthis.array[this.position + 1]);\n\t\tthis.position += 2;\n\n\t\treturn result;\n\t}\n\n\n\t// read an 8-bit integer\n\treadInt8 (signed) {\n\t\tlet result = this.array[this.position];\n\t\tif (signed && result > 127)\n\t\t\tresult -= 256;\n\t\tthis.position += 1;\n\n\t\treturn result;\n\t}\n\n\n\t/* read a MIDI-style variable-length integer\n\t\t(big-endian value in groups of 7 bits,\n\t\twith top bit set to signify that another byte follows)\n\t*/\n\treadVarInt () {\n\t\tlet result = 0;\n\t\twhile (true) {\n\t\t\tconst b = this.readInt8();\n\t\t\tif (b & 0x80) {\n\t\t\t\tresult += (b & 0x7f);\n\t\t\t\tresult <<= 7;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// b is the last byte\n\t\t\t\treturn result + b;\n\t\t\t}\n\t\t}\n\t}\n};\n","/*\r\nclass to encode the .mid file format\r\n(depends on streamEx.js)\r\n*/\r\n\r\nconst OStream = require(\"./streamEx.js\");\r\n\r\n\r\n\r\nmodule.exports = function OMidiFile ({ header, tracks }) {\r\n\tfunction writeChunk (stream, id, data) {\r\n\t\tconsole.assert(id.length === 4, \"chunk id must be 4 byte\");\r\n\r\n\t\tstream.write(id);\r\n\t\tstream.writeInt32(data.length);\r\n\t\tstream.write(data);\r\n\t}\r\n\r\n\tfunction writeEvent (stream, event) {\r\n\t\tif (event.subtype === \"unknown\")\r\n\t\t\treturn;\r\n\r\n\t\tstream.writeVarInt(event.deltaTime);\r\n\r\n\t\tswitch (event.type) {\r\n\t\tcase \"meta\":\r\n\t\t\tstream.writeInt8(0xff);\r\n\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"sequenceNumber\":\r\n\t\t\t\tstream.writeInt8(0x00);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt16(event.number);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"text\":\r\n\t\t\t\tstream.writeInt8(0x01);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"copyrightNotice\":\r\n\t\t\t\tstream.writeInt8(0x02);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"trackName\":\r\n\t\t\t\tstream.writeInt8(0x03);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"instrumentName\":\r\n\t\t\t\tstream.writeInt8(0x04);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"lyrics\":\r\n\t\t\t\tstream.writeInt8(0x05);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"marker\":\r\n\t\t\t\tstream.writeInt8(0x06);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"cuePoint\":\r\n\t\t\t\tstream.writeInt8(0x07);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"midiChannelPrefix\":\r\n\t\t\t\tstream.writeInt8(0x20);\r\n\t\t\t\tstream.writeVarInt(1);\r\n\r\n\t\t\t\tstream.writeInt8(event.channel);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"endOfTrack\":\r\n\t\t\t\tstream.writeInt8(0x2f);\r\n\t\t\t\tstream.writeVarInt(0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"setTempo\":\r\n\t\t\t\tstream.writeInt8(0x51);\r\n\t\t\t\tstream.writeVarInt(3);\r\n\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 16) & 0xff);\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 8) & 0xff);\r\n\t\t\t\tstream.writeInt8(event.microsecondsPerBeat & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"smpteOffset\":\r\n\t\t\t\tstream.writeInt8(0x54);\r\n\t\t\t\tstream.writeVarInt(5);\r\n\r\n\t\t\t\tvar frameByte = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 }[event.frameRate];\r\n\t\t\t\tstream.writeInt8(event.hour | frameByte);\r\n\t\t\t\tstream.writeInt8(event.min);\r\n\t\t\t\tstream.writeInt8(event.sec);\r\n\t\t\t\tstream.writeInt8(event.frame);\r\n\t\t\t\tstream.writeInt8(event.subframe);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"timeSignature\":\r\n\t\t\t\tstream.writeInt8(0x58);\r\n\t\t\t\tstream.writeVarInt(4);\r\n\r\n\t\t\t\tstream.writeInt8(event.numerator);\r\n\t\t\t\tstream.writeInt8(Math.log2(event.denominator));\r\n\t\t\t\tstream.writeInt8(event.metronome);\r\n\t\t\t\tstream.writeInt8(event.thirtyseconds);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"keySignature\":\r\n\t\t\t\tstream.writeInt8(0x59);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt8(event.key);\r\n\t\t\t\tstream.writeInt8(event.scale);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sequencerSpecific\":\r\n\t\t\t\tstream.writeInt8(0x7f);\r\n\t\t\t\tstream.writeVarInt(event.data.length);\r\n\r\n\t\t\t\tstream.write(event.data);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"sysEx\":\r\n\t\t\tstream.writeInt8(0xf0);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"dividedSysEx\":\r\n\t\t\tstream.writeInt8(0xf7);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"channel\":\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"noteOn\":\r\n\t\t\t\tstream.writeInt8(0x90 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteOff\":\r\n\t\t\t\tstream.writeInt8(0x80 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity ? event.velocity : 0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xa0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"controller\":\r\n\t\t\t\tstream.writeInt8(0xb0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.controllerType);\r\n\t\t\t\tstream.writeInt8(event.value);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"programChange\":\r\n\t\t\t\tstream.writeInt8(0xc0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.programNumber);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"channelAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xd0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pitchBend\":\r\n\t\t\t\tstream.writeInt8(0xe0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.value & 0xff);\r\n\t\t\t\tstream.writeInt8((event.value >> 7) & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow new Error(\"unhandled event type:\" + event.type);\r\n\t\t}\r\n\t}\r\n\r\n\tconst stream = new OStream();\r\n\r\n\tconst headerChunk = new OStream();\r\n\theaderChunk.writeInt16(header.formatType);\r\n\theaderChunk.writeInt16(tracks.length);\r\n\theaderChunk.writeInt16(header.ticksPerBeat);\r\n\r\n\twriteChunk(stream, \"MThd\", headerChunk.getBuffer());\r\n\r\n\tfor (let i = 0; i < tracks.length; ++i) {\r\n\t\tconst trackChunk = new OStream();\r\n\r\n\t\tfor (let ei = 0; ei < tracks[i].length; ++ei)\r\n\t\t\twriteEvent(trackChunk, tracks[i][ei]);\r\n\r\n\t\twriteChunk(stream, \"MTrk\", trackChunk.getBuffer());\r\n\t}\r\n\r\n\treturn stream.getArrayBuffer();\r\n};\r\n","\r\n/* Wrapper for accessing strings through sequential writes */\r\n\r\n\r\n\r\nmodule.exports = class OStream {\r\n\tconstructor () {\r\n\t\tthis.buffer = \"\";\r\n\t}\r\n\r\n\twrite (str) {\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\t/* write a big-endian 32-bit integer */\r\n\twriteInt32 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 24) & 0xff) + String.fromCharCode((i >> 16) & 0xff) +\r\n\t\t\tString.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a big-endian 16-bit integer */\r\n\twriteInt16 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write an 8-bit integer */\r\n\twriteInt8 (i) {\r\n\t\tthis.buffer += String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a MIDI-style variable-length integer\r\n\t\t(big-endian value in groups of 7 bits,\r\n\t\twith top bit set to signify that another byte follows)\r\n\t*/\r\n\twriteVarInt (i) {\r\n\t\tif (i < 0)\r\n\t\t\tthrow new Error(\"OStream.writeVarInt minus number: \" + i);\r\n\r\n\t\tconst b = i & 0x7f;\r\n\t\ti >>= 7;\r\n\t\tlet str = String.fromCharCode(b);\r\n\r\n\t\twhile (i) {\r\n\t\t\tconst b = i & 0x7f;\r\n\t\t\ti >>= 7;\r\n\t\t\tstr = String.fromCharCode(b | 0x80) + str;\r\n\t\t}\r\n\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\tgetBuffer () {\r\n\t\treturn this.buffer;\r\n\t}\r\n\r\n\tgetArrayBuffer () {\r\n\t\treturn Uint8Array.from(this.buffer.split(\"\").map(c => c.charCodeAt(0))).buffer;\r\n\t}\r\n};\r\n","\nmodule.exports = {\n\tparseMidiData: require(\"./midifile.js\"),\n\tencodeMidiFile: require(\"./midifileEx.js\"),\n};\n","\nconst midiToSequence = (midiFile, {timeWarp = 1} = {}) => {\n\tconst trackStates = [];\n\tlet beatsPerMinute = 120;\n\tconst ticksPerBeat = midiFile.header.ticksPerBeat;\n\n\tfor (let i = 0; i < midiFile.tracks.length; i++) {\n\t\ttrackStates[i] = {\n\t\t\tnextEventIndex: 0,\n\t\t\tticksToNextEvent: (\n\t\t\t\tmidiFile.tracks[i].length ?\n\t\t\t\t\tmidiFile.tracks[i][0].deltaTime :\n\t\t\t\t\tnull\n\t\t\t),\n\t\t};\n\t}\n\n\tfunction getNextEvent () {\n\t\tlet ticksToNextEvent = null;\n\t\tlet nextEventTrack = null;\n\t\tlet nextEventIndex = null;\n\n\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\tif (\n\t\t\t\ttrackStates[i].ticksToNextEvent != null\n\t\t\t\t&& (ticksToNextEvent == null || trackStates[i].ticksToNextEvent < ticksToNextEvent)\n\t\t\t) {\n\t\t\t\tticksToNextEvent = trackStates[i].ticksToNextEvent;\n\t\t\t\tnextEventTrack = i;\n\t\t\t\tnextEventIndex = trackStates[i].nextEventIndex;\n\t\t\t}\n\t\t}\n\t\tif (nextEventTrack != null) {\n\t\t\t/* consume event from that track */\n\t\t\tconst nextEvent = midiFile.tracks[nextEventTrack][nextEventIndex];\n\t\t\tif (midiFile.tracks[nextEventTrack][nextEventIndex + 1]) \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent += midiFile.tracks[nextEventTrack][nextEventIndex + 1].deltaTime;\n\t\t\telse \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent = null;\n\n\t\t\ttrackStates[nextEventTrack].nextEventIndex += 1;\n\t\t\t/* advance timings on all tracks by ticksToNextEvent */\n\t\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\t\tif (trackStates[i].ticksToNextEvent != null) \n\t\t\t\t\ttrackStates[i].ticksToNextEvent -= ticksToNextEvent;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tticksToEvent: ticksToNextEvent,\n\t\t\t\tevent: nextEvent,\n\t\t\t\ttrack: nextEventTrack,\n\t\t\t};\n\t\t}\n\t\telse \n\t\t\treturn null;\n\t\t\n\t};\n\t//\n\tlet midiEvent;\n\tconst events = [];\n\t//\n\tfunction processEvents () {\n\t\tfunction processNext () {\n\t\t\tlet secondsToGenerate = 0;\n\t\t\tif (midiEvent.ticksToEvent > 0) {\n\t\t\t\tconst beatsToGenerate = midiEvent.ticksToEvent / ticksPerBeat;\n\t\t\t\tsecondsToGenerate = beatsToGenerate / (beatsPerMinute / 60);\n\t\t\t}\n\n\t\t\t// beatsPerMinute must be changed after secondsToGenerate calculation\n\t\t\tif ( midiEvent.event.type == \"meta\" && midiEvent.event.subtype == \"setTempo\" ) {\n\t\t\t\t// tempo change events can occur anywhere in the middle and affect events that follow\n\t\t\t\tbeatsPerMinute = 60e+6 / midiEvent.event.microsecondsPerBeat;\n\t\t\t}\n\n\t\t\tconst time = (secondsToGenerate * 1000 * timeWarp) || 0;\n\t\t\tevents.push([ midiEvent, time ]);\n\t\t\tmidiEvent = getNextEvent();\n\t\t};\n\t\t//\n\t\tif (midiEvent = getNextEvent()) {\n\t\t\twhile (midiEvent)\n\t\t\t\tprocessNext();\n\t\t}\n\t};\n\n\tprocessEvents();\n\n\treturn events;\n};\n\n\nconst trimSequence = seq => {\n\tconst status = new Map();\n\n\treturn seq.filter(([{event, ticksToEvent}]) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tstatus.clear();\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn true;\n\n\t\tconst key = `${event.subtype}|${event.channel}|${event.noteNumber}`;\n\n\t\tif (status.get(key)) {\n\t\t\t//console.debug(\"event trimmed:\", event, ticksToEvent);\n\t\t\treturn false;\n\t\t}\n\n\t\tstatus.set(key, event);\n\n\t\treturn true;\n\t});\n};\n\n\nconst fixOverlapNotes = seq => {\n\tconst noteMap = new Map();\n\tconst overlapMap = new Map();\n\tconst swaps = [];\n\n\tlet leapIndex = -1;\n\n\tseq.forEach(([{event, ticksToEvent}], index) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tleapIndex = index;\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn;\n\n\t\tconst key = `${event.channel}|${event.noteNumber}`;\n\n\t\tswitch (event.subtype) {\n\t\tcase \"noteOn\":\n\t\t\tif (noteMap.get(key))\n\t\t\t\toverlapMap.set(key, leapIndex);\n\t\t\telse\n\t\t\t\tnoteMap.set(key, leapIndex);\n\n\t\t\tbreak;\n\t\tcase \"noteOff\":\n\t\t\tif (overlapMap.get(key)) {\n\t\t\t\tswaps.push([overlapMap.get(key), index]);\n\t\t\t\toverlapMap.delete(key);\n\t\t\t}\n\t\t\telse\n\t\t\t\tnoteMap.delete(key);\n\n\t\t\tbreak;\n\t\t}\n\t});\n\n\t// shift overlapped swaps\n\tswaps.forEach((swap, i) => {\n\t\tfor (let ii = i - 1; ii >= 0; --ii) {\n\t\t\tconst pre = swaps[ii];\n\t\t\tif (pre[1] < swap[0])\n\t\t\t\tbreak;\n\n\t\t\tif (swap[0] > pre[0])\n\t\t\t\t++swap[0];\n\t\t}\n\t});\n\n\t//console.debug(\"swaps:\", swaps);\n\tswaps.forEach(([front, back]) => {\n\t\tif (back >= seq.length - 1 || front < 0)\n\t\t\treturn;\n\n\t\tconst offEvent = seq[back];\n\t\tconst nextEvent = seq[back + 1];\n\t\tconst leapEvent = seq[front];\n\n\t\tif (!leapEvent[0].ticksToEvent) {\n\t\t\tconsole.warn(\"invalid front index:\", front, back, leapEvent);\n\t\t\treturn;\n\t\t}\n\n\t\t// ms per tick\n\t\tconst tempo = leapEvent[1] / leapEvent[0].ticksToEvent;\n\n\t\tnextEvent[1] += offEvent[1];\n\t\tnextEvent[0].ticksToEvent += offEvent[0].ticksToEvent;\n\n\t\toffEvent[0].ticksToEvent = leapEvent[0].ticksToEvent - 1;\n\t\tleapEvent[0].ticksToEvent = 1;\n\n\t\toffEvent[1] = offEvent[0].ticksToEvent * tempo;\n\t\tleapEvent[1] = leapEvent[0].ticksToEvent * tempo;\n\t\t//console.debug(\"swap:\", [front, back], offEvent, nextEvent, leapEvent);\n\n\t\tseq.splice(back, 1);\n\t\tseq.splice(front, 0, offEvent);\n\t});\n\n\treturn seq;\n};\n\n\n\nmodule.exports = {\n\tmidiToSequence,\n\ttrimSequence,\n\tfixOverlapNotes,\n};\n","\nconst MidiSequence = require(\"./MidiSequence.js\");\n\n\n\nconst PedalControllerTypes = {\n\t64: \"Sustain\",\n\t65: \"Portamento\",\n\t66: \"Sostenuto\",\n\t67: \"Soft\",\n};\n\n\n\nclass Notation {\n\tstatic parseMidi (data, {fixOverlap = true} = {}) {\n\t\tconst channelStatus = [];\n\t\tconst pedalStatus = {};\n\t\tconst pedals = {};\n\t\tconst channels = [];\n\t\tconst bars = [];\n\t\tlet time = 0;\n\t\tlet millisecondsPerBeat = 600000 / 120;\n\t\tlet beats = 0;\n\t\tlet numerator = 4;\n\t\tlet barIndex = 0;\n\t\tconst keyRange = {};\n\t\tlet rawTicks = 0;\n\t\tlet ticks = 0;\n\t\tlet correspondences;\n\t\tconst tempos = [];\n\n\t\tconst ticksPerBeat = data.header.ticksPerBeat;\n\n\t\tlet rawEvents = MidiSequence.midiToSequence(data);\n\n\t\tif (fixOverlap)\n\t\t\trawEvents = MidiSequence.trimSequence(MidiSequence.fixOverlapNotes(rawEvents));\n\n\t\tconst events = rawEvents.map(d => ({\n\t\t\tdata: d[0].event,\n\t\t\ttrack: d[0].track,\n\t\t\tdeltaTime: d[1],\n\t\t\tdeltaTicks: d[0].ticksToEvent,\n\t\t}));\n\n\t\tlet index = 0;\n\n\t\tconst ticksNormal = 1;\n\n\t\tfor (const ev of events) {\n\t\t\trawTicks += ev.deltaTicks;\n\t\t\tticks = Math.round(rawTicks * ticksNormal);\n\n\t\t\tif (ev.deltaTicks > 0) {\n\t\t\t\t// append bars\n\t\t\t\tconst deltaBeats = ev.deltaTicks / ticksPerBeat;\n\t\t\t\tfor (let b = Math.ceil(beats); b < beats + deltaBeats; ++b) {\n\t\t\t\t\tconst t = time + (b - beats) * millisecondsPerBeat;\n\t\t\t\t\tbars.push({time: t, index: barIndex % numerator});\n\n\t\t\t\t\t++barIndex;\n\t\t\t\t}\n\n\t\t\t\tbeats += deltaBeats;\n\t\t\t}\n\n\t\t\ttime += ev.deltaTime;\n\n\t\t\t//const ticksTime = beats * millisecondsPerBeat;\n\t\t\t//console.log(\"time:\", time, ticksTime, ticksTime - time);\n\n\t\t\tev.time = time;\n\t\t\tev.ticks = ticks;\n\n\t\t\tconst event = ev.data;\n\t\t\tswitch (event.type) {\n\t\t\tcase \"channel\":\n\t\t\t\t//channelStatus[event.channel] = channelStatus[event.channel] || [];\n\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"noteOn\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\t\t\t\t\t\t//channelStatus[event.channel][pitch] = {\n\t\t\t\t\t\tchannelStatus.push({\n\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\tstartTick: ticks,\n\t\t\t\t\t\t\tstart: time,\n\t\t\t\t\t\t\tvelocity: event.velocity,\n\t\t\t\t\t\t\tbeats: beats,\n\t\t\t\t\t\t\ttrack: ev.track,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tkeyRange.low = Math.min(keyRange.low || pitch, pitch);\n\n\t\t\t\t\t\tev.index = index;\n\t\t\t\t\t\t++index;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"noteOff\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\n\t\t\t\t\t\tchannels[event.channel] = channels[event.channel] || [];\n\n\t\t\t\t\t\tconst statusIndex = channelStatus.findIndex(status => status.channel == event.channel && status.pitch == pitch);\n\t\t\t\t\t\tif (statusIndex >= 0) {\n\t\t\t\t\t\t\tconst status = channelStatus.splice(statusIndex, 1)[0];\n\n\t\t\t\t\t\t\tchannels[event.channel].push({\n\t\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\t\tstartTick: status.startTick,\n\t\t\t\t\t\t\t\tendTick: ticks,\n\t\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\t\tstart: status.start,\n\t\t\t\t\t\t\t\tduration: time - status.start,\n\t\t\t\t\t\t\t\tvelocity: status.velocity,\n\t\t\t\t\t\t\t\tbeats: status.beats,\n\t\t\t\t\t\t\t\ttrack: status.track,\n\t\t\t\t\t\t\t\tfinger: status.finger,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tconsole.debug(\"unexpected noteOff: \", time, event);\n\n\t\t\t\t\t\tkeyRange.high = Math.max(keyRange.high || pitch, pitch);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"controller\":\n\t\t\t\t\tswitch (event.controllerType) {\n\t\t\t\t\t// pedal controllers\n\t\t\t\t\tcase 64:\n\t\t\t\t\tcase 65:\n\t\t\t\t\tcase 66:\n\t\t\t\t\tcase 67:\n\t\t\t\t\t\tconst pedalType = PedalControllerTypes[event.controllerType];\n\n\t\t\t\t\t\tpedalStatus[event.channel] = pedalStatus[event.channel] || {};\n\t\t\t\t\t\tpedals[event.channel] = pedals[event.channel] || [];\n\n\t\t\t\t\t\tconst status = pedalStatus[event.channel][pedalType];\n\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tpedals[event.channel].push({type: pedalType, start: status.start, duration: time - status.start, value: status.value});\n\t\t\t\t\t\tpedalStatus[event.channel][pedalType] = {start: time, value: event.value};\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase \"meta\":\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"setTempo\":\n\t\t\t\t\tmillisecondsPerBeat = event.microsecondsPerBeat / 1000;\n\t\t\t\t\t//beats = Math.round(beats);\n\t\t\t\t\t//console.assert(Number.isFinite(time), \"invalid time:\", time);\n\t\t\t\t\ttempos.push({tempo: event.microsecondsPerBeat, tick: ticks, time});\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"timeSignature\":\n\t\t\t\t\tnumerator = event.numerator;\n\t\t\t\t\tbarIndex = 0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tif (!correspondences && /^find-corres:/.test(event.text)) {\n\t\t\t\t\t\tconst captures = event.text.match(/:([\\d\\,-]+)/);\n\t\t\t\t\t\tconst str = captures && captures[1] || \"\";\n\t\t\t\t\t\tcorrespondences = str.split(\",\").map(s => Number(s));\n\t\t\t\t\t}\n\t\t\t\t\telse if (/fingering\\(.*\\)/.test(event.text)) {\n\t\t\t\t\t\tconst [_, fingers] = event.text.match(/\\((.+)\\)/);\n\t\t\t\t\t\tconst finger = Number(fingers);\n\t\t\t\t\t\tif (!Number.isNaN(finger)) {\n\t\t\t\t\t\t\tconst status = channelStatus[channelStatus.length - 1];\n\t\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\t\tstatus.finger = finger;\n\n\t\t\t\t\t\t\tconst event = events.find(e => e.index == index - 1);\n\t\t\t\t\t\t\tif (event)\n\t\t\t\t\t\t\t\tevent.data.finger = finger;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"copyrightNotice\":\n\t\t\t\t\tconsole.log(\"MIDI copyright:\", event.text);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tchannelStatus.forEach(status => {\n\t\t\tconsole.debug(\"unclosed noteOn event at\", status.startTick, status);\n\n\t\t\tchannels[status.channel].push({\n\t\t\t\tstartTick: status.startTick,\n\t\t\t\tendTick: ticks,\n\t\t\t\tpitch: status.pitch,\n\t\t\t\tstart: status.start,\n\t\t\t\tduration: time - status.start,\n\t\t\t\tvelocity: status.velocity,\n\t\t\t\tbeats: status.beats,\n\t\t\t\ttrack: status.track,\n\t\t\t\tfinger: status.finger,\n\t\t\t});\n\t\t});\n\n\t\treturn new Notation({\n\t\t\tchannels,\n\t\t\tkeyRange,\n\t\t\tpedals,\n\t\t\tbars,\n\t\t\tendTime: time,\n\t\t\tendTick: ticks,\n\t\t\tcorrespondences,\n\t\t\tevents,\n\t\t\ttempos,\n\t\t\tticksPerBeat,\n\t\t\tmeta: {},\n\t\t});\n\t}\n\n\n\tconstructor (fields) {\n\t\tObject.assign(this, fields);\n\n\t\t// channels to notes\n\t\tthis.notes = [];\n\t\tfor (const channel of this.channels) {\n\t\t\tif (channel) {\n\t\t\t\tfor (const note of channel)\n\t\t\t\t\tthis.notes.push(note);\n\t\t\t}\n\t\t}\n\t\tthis.notes.sort(function (n1, n2) {\n\t\t\treturn n1.start - n2.start;\n\t\t});\n\n\t\tfor (const i in this.notes)\n\t\t\tthis.notes[i].index = Number(i);\n\n\n\t\t// duration\n\t\tthis.duration = this.notes.length > 0 ? (this.endTime - this.notes[0].start) : 0,\n\n\t\t//this.endSoftIndex = this.notes.length ? this.notes[this.notes.length - 1].softIndex : 0;\n\n\n\t\t// pitch map\n\t\tthis.pitchMap = [];\n\t\tfor (const c in this.channels) {\n\t\t\tfor (const n in this.channels[c]) {\n\t\t\t\tconst pitch = this.channels[c][n].pitch;\n\t\t\t\tthis.pitchMap[pitch] = this.pitchMap[pitch] || [];\n\n\t\t\t\tthis.pitchMap[pitch].push(this.channels[c][n]);\n\t\t\t}\n\t\t}\n\n\t\tthis.pitchMap.forEach(notes => notes.sort((n1, n2) => n1.start - n2.start));\n\n\n\t\t/*// setup measure notes index\n\t\tif (this.measures) {\n\t\t\tconst measure_list = [];\n\n\t\t\tlet last_measure = null;\n\t\t\tconst measure_entries = Object.entries(this.measures).sort((e1, e2) => Number(e1[0]) - Number(e2[0]));\n\t\t\tfor (const [t, measure] of measure_entries) {\n\t\t\t\t//console.log(\"measure time:\", Number(t));\n\t\t\t\tmeasure.startTick = Number(t);\n\t\t\t\tmeasure.notes = [];\n\n\t\t\t\tif (last_measure)\n\t\t\t\t\tlast_measure.endTick = measure.startTick;\n\n\t\t\t\tconst m = measure.measure;\n\t\t\t\tmeasure_list[m] = measure_list[m] || [];\n\t\t\t\tmeasure_list[m].push(measure);\n\n\t\t\t\tlast_measure = measure;\n\t\t\t}\n\t\t\tif (last_measure)\n\t\t\t\tlast_measure.endTick = this.notes[this.notes.length - 1].endTick;\n\t\t\tfor (const i in this.notes) {\n\t\t\t\tconst note = this.notes[i];\n\t\t\t\tfor (const t in this.measures) {\n\t\t\t\t\tconst measure = this.measures[t];\n\t\t\t\t\tif (note.startTick >= measure.startTick && note.startTick < measure.endTick || note.endTick > measure.startTick && note.endTick <= measure.endTick)\n\t\t\t\t\t\tmeasure.notes.push(note);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.measure_list = measure_list;\n\t\t}*/\n\n\n\t\t// prepare beats info\n\t\tif (this.meta.beatInfos) {\n\t\t\tfor (let i = 0; i < this.meta.beatInfos.length; ++i) {\n\t\t\t\tconst info = this.meta.beatInfos[i];\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tconst lastInfo = this.meta.beatInfos[i - 1];\n\t\t\t\t\tinfo.beatIndex = lastInfo.beatIndex + Math.ceil((info.tick - lastInfo.tick) / this.ticksPerBeat);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tinfo.beatIndex = 0;\n\t\t\t}\n\t\t}\n\n\n\t\t// compute tempos tick -> time\n\t\t{\n\t\t\tlet time = 0;\n\t\t\tlet ticks = 0;\n\t\t\tlet tempo = 500000;\n\t\t\tfor (const entry of this.tempos) {\n\t\t\t\tconst deltaTicks = entry.tick - ticks;\n\t\t\t\ttime += (tempo / 1000) * deltaTicks / this.ticksPerBeat;\n\n\t\t\t\tticks = entry.tick;\n\t\t\t\ttempo = entry.tempo;\n\n\t\t\t\tentry.time = time;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfindChordBySoftindex (softIndex, radius = 0.8) {\n\t\treturn this.notes.filter(note => Math.abs(note.softIndex - softIndex) < radius);\n\t}\n\n\n\taverageTempo (tickRange) {\n\t\ttickRange = tickRange || {from: 0, to: this.endtick};\n\n\t\tconsole.assert(this.tempos, \"no tempos.\");\n\t\tconsole.assert(tickRange.to > tickRange.from, \"range is invalid:\", tickRange);\n\n\t\tconst span = index => {\n\t\t\tconst from = Math.max(tickRange.from, this.tempos[index].tick);\n\t\t\tconst to = (index < this.tempos.length - 1) ? Math.min(this.tempos[index + 1].tick, tickRange.to) : tickRange.to;\n\n\t\t\treturn Math.max(0, to - from);\n\t\t};\n\n\t\tconst tempo_sum = this.tempos.reduce((sum, tempo, index) => sum + tempo.tempo * span(index), 0);\n\n\t\tconst average = tempo_sum / (tickRange.to - tickRange.from);\n\n\t\t// convert microseconds per beat to beats per minute\n\t\treturn 60e+6 / average;\n\t}\n\n\n\tticksToTime (tick) {\n\t\tconsole.assert(Number.isFinite(tick), \"invalid tick value:\", tick);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.tick > tick);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.time + (tick - tempo.tick) * tempo.tempo * 1e-3 / this.ticksPerBeat;\n\t}\n\n\n\ttimeToTicks (time) {\n\t\tconsole.assert(Number.isFinite(time), \"invalid time value:\", time);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.time > time);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.tick + (time - tempo.time) * this.ticksPerBeat / (tempo.tempo * 1e-3);\n\t}\n\n\n\ttickRangeToTimeRange (tickRange) {\n\t\tconsole.assert(tickRange.to >= tickRange.from, \"invalid tick range:\", tickRange);\n\n\t\treturn {\n\t\t\tfrom: this.ticksToTime(tickRange.from),\n\t\t\tto: this.ticksToTime(tickRange.to),\n\t\t};\n\t}\n\n\n\t/*getMeasureRange (measureRange) {\n\t\tconsole.assert(Number.isInteger(measureRange.start) && Number.isInteger(measureRange.end), \"invalid measure range:\", measureRange);\n\t\tconsole.assert(this.measure_list && this.measure_list[measureRange.start] && this.measure_list[measureRange.end], \"no measure data for specific index:\", this.measure_list, measureRange);\n\n\t\tconst startMeasure = this.measure_list[measureRange.start][0];\n\t\tlet endMeasure = null;\n\t\tfor (const measure of this.measure_list[measureRange.end]) {\n\t\t\tif (measure.endTick > startMeasure.startTick) {\n\t\t\t\tendMeasure = measure;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// there no path between start measure and end measure.\n\t\tif (!endMeasure)\n\t\t\treturn null;\n\n\t\tconst tickRange = {from: startMeasure.startTick, to: endMeasure.endTick, duration: endMeasure.endTick - startMeasure.startTick};\n\t\tconst timeRange = this.tickRangeToTimeRange(tickRange);\n\t\ttimeRange.duration = timeRange.to - timeRange.from;\n\n\t\treturn {\n\t\t\ttickRange,\n\t\t\ttimeRange,\n\t\t};\n\t}*/\n\n\n\tscaleTempo ({factor, headTempo}) {\n\t\tconsole.assert(this.tempos && this.tempos.length, \"[Notation.scaleTempo] tempos is empty.\");\n\n\t\tif (headTempo)\n\t\t\tfactor = headTempo / this.tempos[0].tempo;\n\n\t\tconsole.assert(Number.isFinite(factor) && factor > 0, \"[Notation.scaleTempo] invalid factor:\", factor);\n\n\t\tthis.tempos.forEach(tempo => {\n\t\t\ttempo.tempo *= factor;\n\t\t\ttempo.time *= factor;\n\t\t});\n\t\tthis.events.forEach(event => {\n\t\t\tevent.deltaTime *= factor;\n\t\t\tevent.time *= factor;\n\t\t});\n\t\tthis.notes.forEach(note => {\n\t\t\tnote.start *= factor;\n\t\t\tnote.duration *= factor;\n\t\t});\n\n\t\tthis.endTime *= factor;\n\t}\n};\n\n\n\nmodule.exports = {\n\tNotation,\n};\n","\nconst { Notation } = require(\"./MusicNotation.js\");\n\n\n\n//const msDelay = ms => new Promise(resolve => setTimeout(resolve, ms));\nconst animationDelay = () => new Promise(resolve => requestAnimationFrame(resolve));\n\n\nclass MidiPlayer {\n\tconstructor (midiData, {cacheSpan = 600, onMidi, onPlayFinish, onTurnCursor} = {}) {\n\t\tthis.cacheSpan = cacheSpan;\n\t\tthis.onMidi = onMidi;\n\t\tthis.onPlayFinish = onPlayFinish;\n\t\tthis.onTurnCursor = onTurnCursor;\n\n\t\tlet notation;\n\t\tif (midiData.notes && Number.isFinite(midiData.endTime))\n\t\t\tnotation = midiData;\n\t\telse\n\t\t\tnotation = Notation.parseMidi(midiData);\n\n\t\tthis.notation = notation;\n\t\tthis.events = notation.events;\n\t\t//console.log(\"events:\", this.events);\n\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t\tthis.startTime = performance.now();\n\t\tthis.duration = notation.endTime;\n\t\tthis.cursorTurnDelta = 0;\n\n\t\tconsole.assert(notation.tempos && notation.tempos.length, \"[MidiPlayer] invalid notation, tempos is empty.\");\n\t}\n\n\n\tdispose () {\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t}\n\n\n\tget progressTicks () {\n\t\treturn this.notation.timeToTicks(this.progressTime);\n\t}\n\n\n\tset progressTicks (value) {\n\t\tthis.progressTime = this.notation.ticksToTime(value);\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(this.progressTime);\n\t}\n\n\n\tasync play ({nextFrame = animationDelay} = {}) {\n\t\tif (this.progressTime >= this.duration)\n\t\t\tthis.progressTime = 0;\n\n\t\tlet now = performance.now();\n\t\tthis.startTime = now - this.progressTime;\n\n\t\tthis.isPlaying = true;\n\n\t\tlet currentEventIndex = this.events.findIndex(event => event.time >= now - this.startTime);\n\n\t\twhile (this.isPlaying) {\n\t\t\tfor (; currentEventIndex < this.events.length; ++currentEventIndex) {\n\t\t\t\tconst event = this.events[currentEventIndex];\n\t\t\t\t//console.log(\"play event:\", currentEventIndex, event.time, this.progressTime + this.cacheSpan);\n\t\t\t\tif (!event || event.time > this.progressTime + this.cacheSpan)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (event.data.type === \"channel\" && this.startTime + event.time >= now)\n\t\t\t\t\tif (this.onMidi)\n\t\t\t\t\t\tthis.onMidi(event.data, this.startTime + event.time);\n\t\t\t}\n\n\t\t\tawait nextFrame();\n\n\t\t\tif (!this.isPlaying)\n\t\t\t\tbreak;\n\n\t\t\tif (this.cursorTurnDelta !== 0) {\n\t\t\t\tconst backturn = this.cursorTurnDelta < 0;\n\n\t\t\t\tthis.startTime -= this.cursorTurnDelta;\n\t\t\t\tthis.cursorTurnDelta = 0;\n\n\t\t\t\tif (backturn) {\n\t\t\t\t\tfor (; currentEventIndex > 0; --currentEventIndex) {\n\t\t\t\t\t\tconst eventTime = this.events[currentEventIndex].time;\n\t\t\t\t\t\tif (this.startTime + eventTime < now)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnow = performance.now();\n\n\t\t\tthis.progressTime = now - this.startTime;\n\n\t\t\tif (this.progressTime > this.duration) {\n\t\t\t\tthis.isPlaying = false;\n\n\t\t\t\tif (this.onPlayFinish)\n\t\t\t\t\tthis.onPlayFinish();\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpause () {\n\t\tthis.isPlaying = false;\n\t}\n\n\n\tturnCursor (time) {\n\t\t//console.log(\"onTurnCursor:\", time, oldTime);\n\t\tif (this.isPlaying)\n\t\t\tthis.cursorTurnDelta += time - this.progressTime;\n\t\telse\n\t\t\tthis.progressTime = time;\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(time);\n\t}\n};\n\n\n\nmodule.exports = MidiPlayer;\n","\nmodule.exports = {\n\tCostStepAttenuation: 0.6,\n\tSkipDeep: 3,\n\tPriorDistanceSigmoidFactor: 0.1,\n\tPriorValueSigmoidFactor: 0.12,\n\n\tSkipCost: 0.5,\n\tLagOffsetCost: 1,\n\tLeadOffsetCost: 1.6,\n\tZeroOffsetCost: 0.58,\n\n\tRelocationThreshold: 6,\n};\n","\nconst {pick} = require(\"lodash\");\n\nconst Config = require(\"./config.js\");\n\n\n\nclass Node {\n\tconstructor (s_note, c_note) {\n\t\tthis.s_note = s_note;\n\t\tthis.c_note = c_note;\n\n\t\tconsole.assert(this.s_note.softIndex != null, \"s_note softIndex is null\");\n\t\tthis.offset = this.s_note.softIndex - this.c_note.softIndex;\n\n\t\tthis._prev = null;\n\t\tthis._totalCost = 0;\n\t\tthis._value = 0;\n\t\tthis.cacheDirty = true;\n\n\t\t//this.evaluatePrev(Node.Zero);\n\t}\n\n\n\tget prev () {\n\t\treturn this._prev;\n\t}\n\n\n\tset prev (value) {\n\t\tif (value != this._prev) {\n\t\t\tthis._prev = value;\n\t\t\tthis.cacheDirty = true;\n\t\t}\n\t}\n\n\n\tget si () {\n\t\treturn this.s_note.index;\n\t}\n\n\n\tget ci () {\n\t\treturn this.c_note.index;\n\t}\n\n\n\tget root () {\n\t\treturn this.prev.root || this;\n\t}\n\n\n\tget rootSi () {\n\t\treturn !this.prev.zero ? this.prev.rootSi : this.si;\n\t}\n\n\n\tget id () {\n\t\treturn `${this.s_note.index},${this.c_note.index}`;\n\t}\n\n\n\tstatic cost (prev, skip, self) {\n\t\treturn prev * Config.CostStepAttenuation + Math.tanh(skip * Config.SkipCost) + Math.tanh(self * 0.5);\n\t}\n\n\n\tupdateCache () {\n\t\tif (this.cacheDirty) {\n\t\t\tthis._totalCost = Node.cost(this.prev.totalCost, this.si - this.prev.si - 1, this.selfCost);\n\t\t\tthis._value = this.prev.value + 1 - Math.tanh(this.selfCost * 0.5);\n\n\t\t\tthis.cacheDirty = false;\n\t\t}\n\t}\n\n\n\tget totalCost () {\n\t\tthis.updateCache();\n\n\t\treturn this._totalCost;\n\t}\n\n\n\tget value () {\n\t\tthis.updateCache();\n\n\t\treturn this._value;\n\t}\n\n\n\tget deep () {\n\t\treturn this.prev.deep + 1;\n\t}\n\n\n\tget path () {\n\t\tconst path = [];\n\t\tfor (let node = this; !node.zero; node = node.prev) {\n\t\t\tpath[node.si] = node.ci;\n\t\t}\n\n\t\tfor (let i = 0; i < path.length; ++i)\n\t\t\tif (typeof path[i] != \"number\")\n\t\t\t\tpath[i] = -1;\n\n\t\treturn path;\n\t}\n\n\n\tdump () {\n\t\treturn pick(this, [\"id\", \"si\", \"ci\", \"rootSi\", \"value\", \"deep\", \"rootSi\", \"offset\", \"prior\", \"selfCost\", \"totalCost\"]);\n\t}\n\n\n\tevaluatePrev (node) {\n\t\tconst cost = this.evaluatePrevCost(node);\n\n\t\tconsole.assert(this.si - node.si >= 1, \"node index error:\", this, node/*, {get [Symbol.toStringTag]() {debugger}}*/);\n\t\t//if (this.si - node.si < 1)\n\t\t//\tdebugger;\n\n\t\tconst totalCost = Node.cost(node.totalCost, this.si - node.si - 1, cost);\n\n\t\tif (!this.prev || totalCost < this.totalCost) {\n\t\t\tthis.prev = node;\n\t\t\tthis.selfCost = cost;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tevaluatePrevCost (node) {\n\t\tlet cost = 0;\n\n\t\tif (node.offset != null) {\n\t\t\tconst bias = this.offset - node.offset;\n\t\t\tconst costCoeff = node.zero ? Config.ZeroOffsetCost : (bias > 0 ? Config.LagOffsetCost : Config.LeadOffsetCost);\n\t\t\tcost += (bias * costCoeff) ** 2;\n\t\t}\n\n\t\treturn cost;\n\t}\n\n\n\tpriorByOffset (offset) {\n\t\tconst distance = Math.abs(this.offset - offset) / 1;//(this.s_note.deltaSi + 0.04);\n\n\t\treturn Math.tanh(this.value * Config.PriorValueSigmoidFactor) - Math.tanh(distance * Config.PriorDistanceSigmoidFactor);\n\t\t//return Math.log(this.value) * Math.tanh(4 / distance);\n\t\t//return this.value - distance;\n\t}\n\n\n\tstatic zero () {\n\t\treturn {\n\t\t\tzero: true,\n\t\t\ttotalCost: 0,\n\t\t\tvalue: 0,\n\t\t\tsi: -1,\n\t\t\tci: -1,\n\t\t\tdeep: 0,\n\t\t\toffset: 0,\n\t\t};\n\t}\n};\n\n\n\nmodule.exports = Node;\n","\nconst Config = require(\"./config.js\");\nconst Node = require(\"./node.js\");\n\n\n\nclass Navigator {\n\tconstructor (criterion, sample, options = {}) {\n\t\tthis.criterion = criterion;\n\t\tthis.sample = sample;\n\n\t\tthis.getCursorOffset = options.getCursorOffset || (() => null);\n\t\tthis.outOfPage = options.outOfPage;\n\n\t\tthis.bestNode = null;\n\t\tthis.fineCursor = null;\n\n\t\tthis.breakingSI = sample.notes.length - 1;\n\n\t\tthis.zeroNode = Node.zero();\n\t\tthis.zeroNode.offset = this.getCursorOffset() || 0;\n\n\t\tthis.relocationThreshold = options.relocationThreshold || Config.RelocationThreshold;\n\t}\n\n\n\tstep (index) {\n\t\t//console.log(\"step:\", this.zeroNode.offset);\n\t\tconst note = this.sample.notes[index];\n\n\t\tif (note.matches.length > 0) {\n\t\t\t//console.log(\"zeroNode.offset:\", index, this.zeroNode.offset);\n\t\t\tnote.matches.forEach(node => {\n\t\t\t\tnode.evaluatePrev(this.zeroNode);\n\t\t\t\t//console.log(\"node:\", node, node.evaluatePrevCost(this.zeroNode), node.offset, this.zeroNode.offset);\n\n\t\t\t\tfor (let si = index - 1; si >= Math.max(this.breakingSI + 1, index - Config.SkipDeep); --si) {\n\t\t\t\t\t//const skipCost = Config.SkipCost * (index - 1 - si);\n\n\t\t\t\t\tconst prevNote = this.sample.notes[si];\n\t\t\t\t\tconsole.assert(prevNote, \"prevNote is null:\", si, index, this.sample.notes);\n\t\t\t\t\tprevNote.matches.forEach(prevNode => {\n\t\t\t\t\t\tconst bias = node.offset - prevNode.offset;\n\t\t\t\t\t\tif (/*prevNode.totalCost + skipCost < node.totalCost\n\t\t\t\t\t\t\t&&*/ (bias < 2 / Config.LagOffsetCost && bias > -2 / Config.LeadOffsetCost))\n\t\t\t\t\t\t\tnode.evaluatePrev(prevNode);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tnode.prior = node.totalCost > 1.99 ? -1 : node.priorByOffset(this.zeroNode.offset);\n\n\t\t\t\tif (node.prior > 0 && this.outOfPage) {\n\t\t\t\t\tconst tick = this.criterion.notes[node.ci].startTick;\n\t\t\t\t\tif (this.outOfPage(tick))\n\t\t\t\t\t\tnode.prior -= 0.7;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tnote.matches.sort((c1, c2) => c2.prior - c1.prior);\n\t\t\tthis.cursors = note.matches;\n\t\t\t//console.log(\"navigator cursors:\", this.cursors);\n\n\t\t\tlet fineCursor = null;\n\t\t\tconst nullLength = this.nullSteps(index);\n\n\t\t\tconst cursor = this.cursors[0];\n\t\t\tif (cursor && cursor.totalCost < 1) {\n\t\t\t\t//console.log(\"nullLength:\", nullLength, nullLength * Math.log(cursor.value / 4));\n\t\t\t\tif (cursor.prior > 0 || (cursor.totalCost < 0.4 && Math.log(Math.max(nullLength * cursor.value, 1e-3)) > this.relocationThreshold)) {\n\t\t\t\t\tthis.zeroNode.offset = cursor.offset;\n\n\t\t\t\t\tfineCursor = cursor;\n\n\t\t\t\t\tif (!this.bestNode || cursor.value > this.bestNode.value)\n\t\t\t\t\t\tthis.bestNode = cursor;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fineCursor)\n\t\t\t\tthis.fineCursor = fineCursor;\n\t\t\telse {\n\t\t\t\tif (!this.resetCursor(index, {breaking: false/*nullLength > Config.SkipDeep*/})) {\n\t\t\t\t\tthis.zeroNode.offset += note.deltaSi * Math.tanh(nullLength);\n\t\t\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", note.deltaSi, nullLength);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthis.cursors = [];\n\t}\n\n\n\tpath ({fromIndex = 0, toIndex = this.sample.notes.length - 1} = {}) {\n\t\tconst path = [];\n\n\t\tlet offset = null;\n\n\t\tfor (let si = toIndex; si >= fromIndex;) {\n\t\t\tconst note = this.sample.notes[si];\n\n\t\t\tif (!note.matches.length || note.matches[0].prior < -0.01 || note.matches[0].totalCost >= 1) {\n\t\t\t\t//if (note.matches.length)\n\t\t\t\t//\tconsole.log(\"path -1:\", si, note.matches[0].prior, note.matches[0].totalCost);\n\t\t\t\tpath[si] = -1;\n\t\t\t\t--si;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// sort nodes by backwards heuristic offset\n\t\t\tif (offset != null) {\n\t\t\t\tnote.matches.forEach(node => node.backPrior = (node.totalCost < 1.99 ? node.priorByOffset(offset) : -1));\n\t\t\t\tnote.matches.sort((n1, n2) => n2.backPrior - n1.backPrior);\n\t\t\t}\n\n\t\t\tconst node = note.matches[0];\n\t\t\tnode.path.forEach((ci, si) => path[si] = ci);\n\t\t\t//console.log(\"node path:\", si, node.path);\n\n\t\t\toffset = node.root.offset;\n\n\t\t\tsi = node.rootSi - 1;\n\t\t}\n\n\t\tconsole.assert(path.length == toIndex + 1, \"path length error:\", path, fromIndex, toIndex + 1,\n\t\t\tthis.sample.notes.length, this.sample.notes.length ? this.sample.notes[this.sample.notes.length - 1].index : null);\n\n\t\treturn path;\n\t}\n\n\n\tnullSteps (index) {\n\t\treturn index - (this.fineCursor ? this.fineCursor.si : -1) - 1;\n\t}\n\n\n\tresetCursor (index, {breaking = true} = {}) {\n\t\tif (breaking)\n\t\t\tthis.breakingSI = index;\n\n\t\tconst cursorOffset = this.getCursorOffset();\n\t\tif (cursorOffset != null) {\n\t\t\t//console.log(\"cursorOffset:\", cursorOffset);\n\n\t\t\tthis.zeroNode.offset = cursorOffset;\n\t\t\t//this.breaking = this.nullSteps(index) > Config.SkipDeep;\n\t\t\t//if (this.breaking)\t// trivial zero node si resets result in focus path interruption\n\t\t\tthis.zeroNode.si = index;\n\t\t\tthis.fineCursor = null;\n\n\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", cursorOffset);\n\t\t\t//console.log(\"cursor offset reset:\", cursorOffset);\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tget relocationTendency () {\n\t\tconst cursor = this.cursors && this.cursors[0];\n\t\tif (!cursor)\n\t\t\treturn null;\n\n\t\tconst nullLength = this.nullSteps(cursor.si);\n\t\tif (nullLength <= 0)\n\t\t\treturn 0;\n\n\t\treturn Math.log(Math.max(nullLength * cursor.value, 1e-3)) / this.relocationThreshold;\n\t}\n};\n\n\n\nmodule.exports = Navigator;\n","\nconst Node = require(\"./node.js\");\nconst Navigator = require(\"./navigator.js\");\n\n\n\nconst HEART_BEAT = 800;\t// in ms\nconst SIMULTANEOUS_INTERVAL = HEART_BEAT * 0.24;\n\n\nconst normalizeInterval = interval => Math.tanh(interval / SIMULTANEOUS_INTERVAL);\n\n\n// greater softIndexFactor make 'harder' soft index\nconst makeNoteSoftIndex = function (notes, index, {softIndexFactor = 1} = {}) {\n\tindex = Number(index);\n\n\tconst note = notes[index];\n\n\t// make soft index\n\tif (index > 0) {\n\t\tconst lastNote = notes[index - 1];\n\n\t\tconsole.assert(note.start != null, \"note.start is null\", note);\n\t\tconsole.assert(lastNote.start != null, \"lastNote.start is null\", lastNote);\n\n\t\tnote.deltaSi = normalizeInterval((note.start - lastNote.start) * softIndexFactor);\n\t\tnote.softIndex = lastNote.softIndex + note.deltaSi;\n\n\t\tconsole.assert(!Number.isNaN(note.deltaSi), \"note.deltaSi is NaN.\", note.start, lastNote.start);\n\t}\n\telse {\n\t\tnote.softIndex = 0;\n\t\tnote.deltaSi = 0;\n\t}\n};\n\n\nconst makeMatchNodes = function (note, criterion, zeroNode = Node.zero()) {\n\tnote.matches = [];\n\n\tconst targetList = criterion.pitchMap[note.pitch];\n\tif (targetList) {\n\t\tfor (const targetNote of targetList) {\n\t\t\tconst node = new Node(note, targetNote);\n\t\t\tif (zeroNode)\n\t\t\t\tnode.evaluatePrev(zeroNode);\n\n\t\t\tnote.matches.push(node);\n\t\t}\n\t}\n};\n\n\nconst genNotationContext = function (notation, {softIndexFactor = 1} = {}) {\n\tfor (let i = 0; i < notation.notes.length; ++i)\n\t\tmakeNoteSoftIndex(notation.notes, i, {softIndexFactor});\n};\n\n\nconst runNavigation = async function(criterion, sample, onStep) {\n\tconst navigator = new Navigator(criterion, sample);\n\tnavigator.resetCursor(-1);\n\n\tfor (let i = 0; i < sample.notes.length; ++i) {\n\t\tnavigator.step(i);\n\n\t\tconst next = await (onStep && onStep(i, navigator));\n\t\tif (next === Symbol.for(\"end\")) {\n\t\t\tconsole.log(\"Navigation interrupted.\");\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t//console.log(\"Navigation accomplished.\");\n\n\treturn navigator;\n};\n\n\n\nmodule.exports = {\n\tnormalizeInterval,\n\tmakeNoteSoftIndex,\n\tmakeMatchNodes,\n\tgenNotationContext,\n\trunNavigation,\n\tNavigator,\n\tNode,\n};\n","\nconst MIDI = require(\"./MIDI\");\n\n\n\nconst trackDeltaToAbs = events => {\n\tlet tick = 0;\n\n\tevents.forEach(event => {\n\t\ttick += event.deltaTime;\n\t\tevent.tick = tick;\n\t});\n};\n\n\nconst trackAbsToDelta = events => {\n\tlet lastTick = 0;\n\n\tevents.sort((e1, e2) => e1.tick - e2.tick).forEach(event => {\n\t\tevent.deltaTime = event.tick - lastTick;\n\t\tlastTick = event.tick;\n\t});\n};\n\n\nconst sliceTrack = (track, startTick, endTick) => {\n\ttrackDeltaToAbs(track);\n\n\tconst events = [];\n\tconst status = {};\n\n\ttrack.forEach(event => {\n\t\tif (event.tick >= startTick && event.tick <= endTick && event.subtype !== \"endOfTrack\")\n\t\t\tevents.push({\n\t\t\t\t...event,\n\t\t\t\ttick: event.tick - startTick,\n\t\t\t});\n\t\telse if (event.tick < startTick) {\n\t\t\tswitch (event.type) {\n\t\t\tcase \"meta\":\n\t\t\t\tstatus[event.subtype] = event;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\tObject.values(status).forEach(event => events.push({\n\t\t...event,\n\t\ttick: 0,\n\t}));\n\n\tevents.push({\n\t\ttick: endTick - startTick,\n\t\ttype: \"meta\",\n\t\tsubtype: \"endOfTrack\",\n\t});\n\n\ttrackAbsToDelta(events);\n\n\treturn events;\n};\n\n\nconst sliceMidi = (midi, startTick, endTick) => ({\n\theader: midi.header,\n\ttracks: midi.tracks.map(track => sliceTrack(track, startTick, endTick)),\n});\n\n\nconst TICKS_PER_BEATS = 480;\n\nconst EXCLUDE_MIDI_EVENT_SUBTYPES = [\n\t\"endOfTrack\", \"trackName\",\n\t\"noteOn\", \"noteOff\",\n];\n\n\nfunction encodeToMIDIData(notation, {startTime, unclosedNoteDuration = 30e+3} = {}) {\n\tnotation.microsecondsPerBeat = notation.microsecondsPerBeat || 500000;\n\n\tconst ticksPerBeat = TICKS_PER_BEATS;\n\tconst msToTicks = ticksPerBeat * 1000 / notation.microsecondsPerBeat;\n\n\tconst header = { formatType: 0, ticksPerBeat };\n\tconst track = [];\n\n\tif (!Number.isFinite(startTime)) {\n\t\tif (!notation.notes || !notation.notes[0])\n\t\t\tthrow new Error(\"encodeToMidiData: no start time specificed\");\n\n\t\tstartTime = notation.notes[0].start;\n\t}\n\n\ttrack.push({ time: startTime, type: \"meta\", subtype: \"copyrightNotice\", text: `Composed by MusicWdigets. BUILT on ${new Date(Number(process.env.VUE_APP_BUILD_TIME)).toDateString()}` });\n\n\tconst containsTempo = notation.events && notation.events.find(event => event.subtype == \"setTempo\");\n\tif (!containsTempo) {\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"timeSignature\", numerator: 4, denominator: 4, thirtyseconds: 8 });\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"setTempo\", microsecondsPerBeat: notation.microsecondsPerBeat });\n\t}\n\n\t//if (notation.correspondences)\n\t//\ttrack.push({ time: startTime, type: \"meta\", subtype: \"text\", text: \"find-corres:\" + notation.correspondences.join(\",\") });\n\n\tlet endTime = startTime || 0;\n\n\tif (notation.notes) {\n\t\tfor (const note of notation.notes) {\n\t\t\ttrack.push({\n\t\t\t\ttime: note.start,\n\t\t\t\ttype: \"channel\",\n\t\t\t\tsubtype: \"noteOn\",\n\t\t\t\tchannel: note.channel || 0,\n\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\tvelocity: note.velocity,\n\t\t\t\tfinger: note.finger,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, note.start);\n\n\t\t\tif (Number.isFinite(unclosedNoteDuration))\n\t\t\t\tnote.duration = note.duration || unclosedNoteDuration;\n\t\t\tif (note.duration) {\n\t\t\t\ttrack.push({\n\t\t\t\t\ttime: note.start + note.duration,\n\t\t\t\t\ttype: \"channel\",\n\t\t\t\t\tsubtype: \"noteOff\",\n\t\t\t\t\tchannel: note.channel || 0,\n\t\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\t\tvelocity: 0,\n\t\t\t\t});\n\n\t\t\t\tendTime = Math.max(endTime, note.start + note.duration);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (notation.events) {\n\t\tconst events = notation.events.filter(event => !EXCLUDE_MIDI_EVENT_SUBTYPES.includes(event.data.subtype));\n\t\tfor (const event of events) {\n\t\t\ttrack.push({\n\t\t\t\ttime: event.time,\n\t\t\t\t...event.data,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, event.time);\n\t\t}\n\t}\n\n\ttrack.push({ time: endTime + 100, type: \"meta\", subtype: \"endOfTrack\" });\n\n\ttrack.sort(function (e1, e2) { return e1.time - e2.time; });\n\n\t// append finger event after every noteOn event\n\ttrack.map((event, index) => ({event, index}))\n\t\t.filter(({event}) => event.subtype == \"noteOn\" && event.finger != null)\n\t\t.reverse()\n\t\t.forEach(({event, index}) => track.splice(index + 1, 0, {\n\t\t\ttime: event.time,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `fingering(${event.finger})`,\n\t\t}));\n\n\ttrack.forEach(event => event.ticks = Math.round((event.time - startTime) * msToTicks));\n\ttrack.forEach((event, i) => event.deltaTime = (event.ticks - (i > 0 ? track[i - 1].ticks : 0)));\n\n\treturn {header, tracks: [track]};\n};\n\n\nfunction encodeToMIDI(notation, options) {\n\tconst data = encodeToMIDIData(notation, options);\n\treturn MIDI.encodeMidiFile(data);\n};\n\n\n\nmodule.exports = {\n\tsliceMidi,\n\tencodeToMIDIData,\n\tencodeToMIDI,\n};\n","\nconst MIDI = require(\"./source/inc/MIDI\");\nconst MusicNotation = require(\"./source/inc/MusicNotation\");\nconst MidiPlayer = require(\"./source/inc/MidiPlayer.js\");\nconst Matcher = require(\"./source/inc/Matcher\");\nconst MidiUtils = require(\"./source/inc/MidiUtils.js\");\n\n\n\nmodule.exports = {\n\tMIDI,\n\tMusicNotation,\n\tMidiPlayer,\n\tMatcher,\n\tMidiUtils,\n};\n","import pick from 'lodash/pick';\n\nimport { MusicNotation, MIDI } from '@k-l-lambda/music-widgets';\n\n//import {MeasureLayout, LayoutType} from\nimport { ImplicitType, ChordPosition } from './types';\n\nconst WHOLE_DURATION_MAGNITUDE = 1920;\nconst TICKS_PER_BEAT = WHOLE_DURATION_MAGNITUDE / 4;\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ninterface StaffNoteProperties {\n\trest: boolean;\n\ttied: boolean;\n\toverlapped: boolean;\n\timplicitType: ImplicitType;\n\tafterGrace: boolean;\n\tchordPosition: ChordPosition;\n\tdivision: number;\n\n\tcontextIndex: number;\n\tstaffTrack: number;\n}\n\ninterface MetaNote extends MusicNotation.Note, Partial {\n\tid: string;\n\tmeasure: number;\n\tendTick: number;\n}\n\ninterface SubNote {\n\tstartTick: number;\n\tendTick: number;\n\tpitch: number;\n\tvelocity?: number;\n}\n\ninterface MeasureNote extends Partial {\n\ttick: number;\n\tpitch: number;\n\tduration: number;\n\tchordPosition: ChordPosition;\n\tstaff: number;\n\n\ttrack: number;\n\tchannel: number;\n\tid: string;\n\tids: string[];\n\n\tsubNotes: SubNote[];\n}\n\ninterface MeasureEvent {\n\tdata: any;\n\ttrack: number;\n\tticks?: number;\n}\n\ninterface Measure {\n\ttick: number;\n\tduration: number;\n\n\tnotes: MeasureNote[];\n\tevents?: MeasureEvent[];\n\ttimeSignature?: Fraction;\n\tkeySignature?: number;\n}\n\ninterface PerformOptions {\n\twithRestTied?: boolean;\n}\n\ninterface MidiEvent extends MIDI.MidiEvent {\n\tticks?: number;\n\tmeasure?: number;\n\tids?: string[];\n\tstaffTrack?: number;\n\tstaff?: number;\n}\ntype MidiTrack = MidiEvent[];\n\nconst EXTRA_NOTE_FIELDS = ['rest', 'tied', 'overlapped', 'implicitType', 'afterGrace', 'contextIndex', 'staffTrack', 'chordPosition', 'division'];\nconst COMMON_NOTE_FIELDS = ['id', 'ids', 'pitch', 'velocity', 'track', 'channel', ...EXTRA_NOTE_FIELDS];\n\nclass MetaNotation {\n\t//pitchContextGroup: PitchContextTable[];\n\t//measureLayout: MeasureLayout;\n\tmeasures: Measure[];\n\n\ttrackNames: string[];\n\tidTrackMap: { [key: string]: number };\n\n\tripe: boolean = false;\n\n\tstatic fromAbsoluteNotes(notes: MetaNote[], measureHeads: number[], data?: Partial): MetaNotation {\n\t\tconst notation = new MetaNotation(data);\n\n\t\tnotation.measures = Array(measureHeads.length)\n\t\t\t.fill(null)\n\t\t\t.map((__, i) => {\n\t\t\t\tconst tick = measureHeads[i];\n\t\t\t\tconst duration = measureHeads[i + 1] ? measureHeads[i + 1] - tick : 0;\n\n\t\t\t\tconst mnotes = notes\n\t\t\t\t\t.filter((note) => note.measure === i + 1)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(note) =>\n\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\ttick: note.startTick - tick,\n\t\t\t\t\t\t\t\tduration: note.endTick - note.startTick,\n\t\t\t\t\t\t\t\t...pick(note, COMMON_NOTE_FIELDS),\n\t\t\t\t\t\t\t\tsubNotes: [],\n\t\t\t\t\t\t\t} as MeasureNote)\n\t\t\t\t\t);\n\n\t\t\t\t// reduce note data size\n\t\t\t\tmnotes.forEach((mn) =>\n\t\t\t\t\t['rest', 'tied', 'implicitType', 'afterGrace'].forEach((field) => {\n\t\t\t\t\t\tif (!mn[field]) delete mn[field];\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes: mnotes,\n\t\t\t\t};\n\t\t\t});\n\n\t\tnotation.idTrackMap = notes.reduce((map, note) => {\n\t\t\tif (note.id) map[note.id] = note.track;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn notation;\n\t}\n\n\tstatic performAbsoluteNotes(abNotes: MetaNote[], { withRestTied = false }: PerformOptions = {}): MusicNotation.Note[] {\n\t\tconst notes = abNotes\n\t\t\t.filter((note) => (withRestTied || (!note.rest && !note.tied)) && !note.overlapped)\n\t\t\t.map((note) => ({\n\t\t\t\tmeasure: note.measure,\n\t\t\t\tchannel: note.channel,\n\t\t\t\ttrack: note.track,\n\t\t\t\tstart: note.start,\n\t\t\t\tstartTick: note.startTick,\n\t\t\t\tendTick: note.endTick,\n\t\t\t\tpitch: note.pitch,\n\t\t\t\tduration: note.duration,\n\t\t\t\tvelocity: note.velocity || 127,\n\t\t\t\tid: note.id,\n\t\t\t\tids: note.ids,\n\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\tcontextIndex: note.contextIndex,\n\t\t\t\timplicitType: note.implicitType,\n\t\t\t\tchordPosition: note.chordPosition,\n\t\t\t}));\n\n\t\tconst noteMap = notes.reduce((map, note) => {\n\t\t\tconst key = `${note.channel}|${note.start}|${note.pitch}`;\n\t\t\tconst priorNote = map[key];\n\t\t\tif (priorNote) priorNote.ids.push(...note.ids);\n\t\t\telse map[key] = note;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(noteMap);\n\t}\n\n\tconstructor(data?: Partial) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\t/*get ordinaryMeasureIndices (): number[] {\n\t\tif (this.measureLayout)\n\t\t\treturn this.measureLayout.serialize(LayoutType.Ordinary);\n\n\t\treturn Array(this.measures.length).fill(null).map((_, i) => i + 1);\n\t}*/\n\n\t// In Lilypond 2.20.0, minus tick value at the head of a track result in MIDI event time bias,\n\t//\tSo store the bias values to correct MIDI time from lilyond.\n\tget trackTickBias(): { [key: string]: number } {\n\t\tconst headMeasure = this.measures[0];\n\t\treturn this.trackNames.reduce((map, name, track) => {\n\t\t\tmap[name] = 0;\n\t\t\tif (headMeasure) {\n\t\t\t\tconst note = headMeasure.notes.find((note) => note.track === track);\n\t\t\t\tif (note) map[name] = Math.min(note.tick, 0);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget idSet(): Set {\n\t\treturn this.measures.reduce(\n\t\t\t(set, measure) => (measure.notes.filter((note) => !note.rest).forEach((note) => note.ids.forEach((id) => set.add(id))), set),\n\t\t\tnew Set()\n\t\t);\n\t}\n\n\ttoJSON() {\n\t\treturn {\n\t\t\t__prototype: 'LilyNotation',\n\t\t\t//pitchContextGroup: this.pitchContextGroup,\n\t\t\t//measureLayout: this.measureLayout,\n\t\t\tmeasures: this.measures,\n\t\t\tidTrackMap: this.idTrackMap,\n\t\t\ttrackNames: this.trackNames,\n\t\t\tripe: this.ripe,\n\t\t};\n\t}\n\n\ttoAbsoluteNotes(measureIndices: number[] /*= this.ordinaryMeasureIndices*/): MetaNote[] {\n\t\tlet measureTick = 0;\n\t\tconst measureNotes: MetaNote[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst notes = measure.notes.map((mnote) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartTick: measureTick + mnote.tick,\n\t\t\t\t\tendTick: measureTick + mnote.tick + mnote.duration,\n\t\t\t\t\tstart: measureTick + mnote.tick,\n\t\t\t\t\tduration: mnote.duration,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t\t...pick(mnote, COMMON_NOTE_FIELDS),\n\t\t\t\t} as MetaNote;\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn notes;\n\t\t});\n\n\t\treturn [].concat(...measureNotes);\n\t}\n\n\t/*getMeasureIndices (type: LayoutType) {\n\t\treturn this.measureLayout.serialize(type);\n\t}*/\n\n\ttoPerformingNotation(measureIndices: number[] /*= this.ordinaryMeasureIndices*/, options: PerformOptions = {}): MusicNotation.Notation {\n\t\t//console.debug(\"toPerformingNotation:\", this, measureIndices);\n\t\tconst abNotes = this.toAbsoluteNotes(measureIndices);\n\t\tconst notes = MetaNotation.performAbsoluteNotes(abNotes, options);\n\n\t\t//const lastNote = notes[notes.length - 1];\n\t\tconst endTime = Math.max(...notes.map((note) => note.start + note.duration));\n\n\t\tconst endTick = measureIndices.reduce((tick, index) => tick + this.measures[index - 1].duration, 0);\n\n\t\tconst notation = new MusicNotation.Notation({\n\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\tmeta: {},\n\t\t\ttempos: [], // TODO\n\t\t\tchannels: [notes],\n\t\t\tendTime,\n\t\t\tendTick,\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\ttoPerformingMIDI(measureIndices: number[], { trackList }: { trackList?: boolean[] } = {}): MIDI.MidiData & { zeroTick: number } {\n\t\tif (!measureIndices.length) return null;\n\n\t\t// to avoid begin minus tick\n\t\tconst zeroTick = -Math.min(0, ...(this.measures[0]?.events.map((e) => e.ticks) || []), ...(this.measures[0]?.notes.map((note) => note.tick) || []));\n\n\t\tlet measureTick = zeroTick;\n\t\tconst measureEvents: MeasureEvent[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst events = measure.events.map((mevent) => ({\n\t\t\t\tticks: measureTick + mevent.ticks,\n\t\t\t\ttrack: mevent.track,\n\t\t\t\tdata: {\n\t\t\t\t\t...mevent.data,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn events;\n\t\t});\n\n\t\tconst eventPriority = (event: MidiEvent): number => event.ticks + (event.subtype === 'noteOff' ? -1e-8 : 0);\n\n\t\tconst tracks: MidiTrack[] = [].concat(...measureEvents).reduce((tracks, mevent) => {\n\t\t\ttracks[mevent.track] = tracks[mevent.track] || [];\n\t\t\ttracks[mevent.track].push({\n\t\t\t\tticks: mevent.ticks,\n\t\t\t\t...mevent.data,\n\t\t\t});\n\n\t\t\treturn tracks;\n\t\t}, []);\n\n\t\ttracks[0] = tracks[0] || [];\n\t\t/*tracks[0].push({\n\t\t\tticks: 0,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `${npmPackage.name} ${npmPackage.version}`,\n\t\t});*/\n\n\t\t// append note events\n\t\tmeasureTick = zeroTick;\n\t\tmeasureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\t\t\tif (!Number.isFinite(measure.duration)) return;\n\n\t\t\tmeasure.notes.forEach((note) => {\n\t\t\t\tif (trackList && !trackList[note.track]) return;\n\n\t\t\t\tif (note.rest) return;\n\n\t\t\t\tconst tick = measureTick + note.tick;\n\n\t\t\t\tconst track = (tracks[note.track] = tracks[note.track] || []);\n\n\t\t\t\tnote.subNotes.forEach((subnote) => {\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.startTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: subnote.velocity,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.endTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: 0,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\t\t});\n\n\t\tconst finalTick = measureTick;\n\n\t\t// ensure no empty track\n\t\tfor (let t = 0; t < tracks.length; ++t) tracks[t] = tracks[t] || [];\n\n\t\t// sort & make deltaTime\n\t\ttracks.forEach((events) => {\n\t\t\tevents.sort((e1, e2) => eventPriority(e1) - eventPriority(e2));\n\n\t\t\tlet ticks = 0;\n\t\t\tevents.forEach((event) => {\n\t\t\t\tevent.deltaTime = event.ticks - ticks;\n\t\t\t\tif (!Number.isFinite(event.deltaTime)) event.deltaTime = 0;\n\t\t\t\telse ticks = event.ticks;\n\t\t\t});\n\n\t\t\tevents.push({ deltaTime: Math.max(finalTick - ticks, 0), type: 'meta', subtype: 'endOfTrack' });\n\t\t});\n\n\t\treturn {\n\t\t\theader: {\n\t\t\t\tformatType: 0,\n\t\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\t},\n\t\t\ttracks,\n\t\t\tzeroTick,\n\t\t};\n\t}\n\n\ttoPerformingNotationWithEvents(measureIndices: number[], options: { trackList?: boolean[] } = {}): MusicNotation.Notation {\n\t\tif (!measureIndices.length) return null;\n\n\t\tconst { zeroTick, ...midi } = this.toPerformingMIDI(measureIndices, options);\n\t\tconst notation = MusicNotation.Notation.parseMidi(midi);\n\n\t\tassignNotationNoteDataFromEvents(notation);\n\n\t\tlet tick = zeroTick;\n\n\t\tnotation.measures = measureIndices.map((index) => {\n\t\t\tconst startTick = tick;\n\t\t\ttick += this.measures[index - 1].duration;\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\tstartTick,\n\t\t\t\tendTick: tick,\n\t\t\t};\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\t// find the MIDI event of setTempo in measures data, and change the value of microsecondsPerBeat\n\tsetTempo(bpm: number): boolean {\n\t\tlet found = false;\n\t\tfor (const measure of this.measures) {\n\t\t\tfor (const event of measure.events) {\n\t\t\t\tif (event.data.subtype === 'setTempo') {\n\t\t\t\t\tevent.data.microsecondsPerBeat = 60e6 / bpm;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn found;\n\t}\n}\n\nconst assignNotationNoteDataFromEvents = (midiNotation: MusicNotation.NotationData, fields = ['ids', 'measure', 'staffTrack']) => {\n\tconst noteId = (channel: number, pitch: number, tick: number): string => `${channel}|${pitch}|${tick}`;\n\n\tconst noteMap = midiNotation.notes.reduce((map, note) => {\n\t\tmap[noteId(note.channel, note.pitch, note.startTick)] = note;\n\n\t\treturn map;\n\t}, {});\n\n\tmidiNotation.events.forEach((event) => {\n\t\tif (event.data.subtype === 'noteOn') {\n\t\t\tconst id = noteId(event.data.channel, event.data.noteNumber, event.ticks);\n\t\t\tconst note = noteMap[id];\n\t\t\tconsole.assert(!!note, 'cannot find note of', id);\n\n\t\t\tif (note) Object.assign(note, pick(event.data, fields));\n\t\t}\n\t});\n};\n\nexport { MetaNote, MetaNotation, MidiEvent };\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","import _SHA256 from 'crypto-js/sha256';\n\nconst SHA256 = (source: string): Uint8Array => {\n\tconst { words, sigBytes } = _SHA256(source);\n\tconst uwords = words.map((x) => (x < 0 ? x + 0x100000000 : x));\n\tconst word_len = sigBytes / words.length;\n\n\treturn new Uint8Array(sigBytes).map((_, i) => (uwords[Math.floor(i / word_len)] >> ((3 - (i % word_len)) * 8)) & 0xff);\n};\n\ntype Hash = Uint8Array;\nconst HASH_LEN = 256;\n\nclass HashVector {\n\tfields: number[];\n\n\tstatic fromHash(hash: Hash): HashVector {\n\t\tconst fields = [];\n\t\tfor (const byte of hash) {\n\t\t\tfor (let b = 0; b < 8; ++b) fields.push((byte >> b) & 1 ? 1 : -1);\n\t\t}\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic fromString(source: string): HashVector {\n\t\tconst hash = SHA256(source);\n\t\treturn HashVector.fromHash(hash);\n\t}\n\n\tstatic fromWords(words: string[]): HashVector {\n\t\tconst vs = words.map((word) => HashVector.fromString(word));\n\t\treturn vs.reduce((sum, v) => sum.add(v), HashVector.zero);\n\t}\n\n\tstatic concat(...vectors: HashVector[]): HashVector {\n\t\tconst fields = vectors.map((v) => v.fields).flat(1);\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tconstructor(fields: number[] | null = null) {\n\t\tthis.fields = fields || Array(HASH_LEN).fill(0);\n\t}\n\n\tget length(): number {\n\t\treturn this.fields.length;\n\t}\n\n\ttoHash(): Hash {\n\t\treturn Uint8Array.from(\n\t\t\tArray(this.length / 8)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => {\n\t\t\t\t\tconst bits = this.fields.slice(i * 8, (i + 1) * 8);\n\n\t\t\t\t\treturn bits.reduce((byte, bit, b) => byte | ((bit > 0 ? 1 : 0) << b), 0);\n\t\t\t\t})\n\t\t) as Hash;\n\t}\n\n\tadd(vec: HashVector): this {\n\t\tthis.fields.forEach((value, i) => (this.fields[i] = value + vec.fields[i]));\n\n\t\treturn this;\n\t}\n\n\tscale(factor: number): this {\n\t\tthis.fields = this.fields.map((value) => value * factor);\n\n\t\treturn this;\n\t}\n\n\tsub(crop: number): HashVector {\n\t\tconst fields = crop > 0 ? this.fields.slice(0, crop) : this.fields.slice(crop);\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic get zero(): HashVector {\n\t\treturn new HashVector();\n\t}\n}\n\nconst odds = (byte: number): number => {\n\tlet result = 0;\n\tfor (let b = byte; b > 0; b >>= 1) {\n\t\tif (b % 2) ++result;\n\t}\n\n\treturn result;\n};\nconst ODDS = Array(2 ** 8)\n\t.fill(0)\n\t.map((_, i) => odds(i));\nconst ODDS_HEX = ODDS.reduce((table, odd, i) => ({ ...table, [('0' + i.toString(16)).slice(-2)]: odd }), {});\n\nconst countOnes = (hash: Hash): number => hash.reduce((sum, byte) => sum + ODDS[byte], 0);\n\nconst xorHashes = (hash1: Hash, hash2: Hash): Hash => hash1.map((byte, i) => byte ^ hash2[i]) as Hash;\n\nconst cosHashes = (hash1: Hash, hash2: Hash): number => {\n\tconst len = hash1.length * 8;\n\n\tconst xor = xorHashes(hash1, hash2);\n\tconst ones = countOnes(xor);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst cosBigInts = (hash1: bigint, hash2: bigint, len: number = HASH_LEN): number => {\n\tconst xor = hash1 ^ hash2;\n\tconst xor_hex = '0'.repeat(len / 4) + xor.toString(16);\n\n\tconst ones = Array(len / 8)\n\t\t.fill(0)\n\t\t.reduce((ones, _, i) => ones + ODDS_HEX[xor_hex.slice((i + 1) * -2, i ? i * -2 : undefined)], 0);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst i2hex = (i) => ('0' + i.toString(16)).slice(-2);\nconst hashToHex = (hash: Hash): string => Array.from(hash).map(i2hex).join('');\n\nconst hexToHash = (hex: string): Hash =>\n\tUint8Array.from(\n\t\tArray(hex.length / 2)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => hex.substring(i * 2, (i + 1) * 2))\n\t\t\t.map((x) => parseInt(x, 16))\n\t);\n\nconst hashToBigInt = (hash: Hash): bigint => {\n\t// __NOT_FOR_BROWSER_\n\treturn Array.from(hash).reduce((r, x) => r * 0x100n + BigInt(x), 0n);\n\t/*\n\t// _NOT_FOR_BROWSER__\n\tthrow new Error('BigInt not supported');\n\t//*/\n};\n\nconst hashFromWords = (words: string[]): Hash => HashVector.fromWords(words).toHash();\n\nexport { Hash, HashVector, cosHashes, cosBigInts, hashToHex, hexToHash, hashToBigInt, hashFromWords };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { cosHashes, Hash, hashToBigInt, hashToHex, HashVector } from './hashVector';\nimport { Performing, RegulationOptions, TermMeasure, TermVoice, VoiceMeasure, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ContextedTerm, EventTerm, TempoTerm, TermPitch, WHOLE_DURATION } from './term';\nimport { TokenType } from './token';\nimport { argmax, frac, fractionMul, noteToPitch, printFraction, reducedFraction } from './utils';\n\nexport const emptyVoiceFromStaffMeasure = (staff: TermMeasure, chiefVoice: boolean = false): VoiceMeasure => {\n\treturn {\n\t\tempty: true,\n\t\tduration: staff.duration,\n\t\ttickMap: {\n\t\t\t[0]: EventTerm.space({ duration: staff.duration, tick: 0 }),\n\t\t},\n\t\ttimeSignature: staff.timeSignature,\n\t\ttimeSigNumeric: staff.timeSigNumeric,\n\t\tkeySignature: staff.keySignature,\n\t\tcontextedTerms: staff.terms.filter((term) => term instanceof ContextedTerm && (!term.staffLevel || chiefVoice)) as ContextedTerm[],\n\t\tmarks: [],\n\t};\n};\n\nconst removeEmptyMeasuresInVoicesStaves = (staves: VoicesStaff[]): void => {\n\t//console.assert(staves[0] && staves[0].voices[0], 'voices is empty:', staves);\n\tif (!(staves[0] && staves[0].voices[0])) {\n\t\tconsole.warn('empty voices:', staves);\n\t\treturn;\n\t}\n\n\tconst measureCount = staves[0].voices[0].measures.length;\n\tconst measureEmpties = Array(measureCount)\n\t\t.fill(null)\n\t\t.map((_, m) => {\n\t\t\tfor (const staff of staves) {\n\t\t\t\tfor (const voice of staff.voices) {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tif (!measure.empty) return false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\tmeasureEmpties.forEach((empty, m) => {\n\t\tif (empty) {\n\t\t\tstaves.forEach((staff) =>\n\t\t\t\tstaff.voices.forEach((voice) => {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tmeasure.tickMap = {};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t});\n};\n\nconst markingTiesInVoice = (voice: TermVoice) => {\n\tconst events = [].concat(...voice.measures.map((m) => Object.values(m.tickMap).filter((event) => event instanceof EventTerm)));\n\t//console.log(\"events:\", events);\n\n\tfor (let i = 1; i < events.length; ++i) {\n\t\tconst event0 = events[i - 1];\n\t\tconst event1 = events[i];\n\t\tif (!event0.rest && !event1.rest) {\n\t\t\tif (event0.accessories.some((acc) => acc.type === TokenType.SlurBegin) && event1.accessories.some((acc) => acc.type === TokenType.SlurEnd)) {\n\t\t\t\tconst pitches = event0.pitches.filter((p0) => event1.pitches.some((p1) => p1.note === p0.note && p1.alter === p0.alter));\n\t\t\t\tif (pitches.length > 0) {\n\t\t\t\t\tevent0.tying = true;\n\t\t\t\t\tevent1.tied = true;\n\n\t\t\t\t\tpitches.forEach((p0) => {\n\t\t\t\t\t\tp0.tying = true;\n\t\t\t\t\t\tconst p1 = event1.pitches.find((p1) => p1.note === p0.note && p1.alter === p0.alter);\n\t\t\t\t\t\tp1.tied = true;\n\t\t\t\t\t});\n\n\t\t\t\t\t// remove slurs from accessories\n\t\t\t\t\tpitches.forEach(() => {\n\t\t\t\t\t\tconst si0 = event0.accessories.findIndex((acc) => acc.type === TokenType.SlurBegin);\n\t\t\t\t\t\tif (si0 >= 0) event0.accessories.splice(si0, 1);\n\n\t\t\t\t\t\tconst si1 = event1.accessories.findIndex((acc) => acc.type === TokenType.SlurEnd);\n\t\t\t\t\t\tif (si1 >= 0) event1.accessories.splice(si1, 1);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nclass Spartito extends SimpleClass {\n\tstatic className = 'Spartito';\n\n\tstavesCount: number;\n\tstaffGroups: number[][];\n\tmeasures: SpartitoMeasure[];\n\n\ttags: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.measures.forEach((measure) => (measure.staffGroups = this.staffGroups));\n\t}\n\n\tget regulated(): boolean {\n\t\treturn this.measures.every((m) => m.regulated);\n\t}\n\n\tget solidMeasureCount(): number {\n\t\treturn this.measures.filter((measure) => !measure.empty).length;\n\t}\n\n\tget measureIndexMapping(): number[] {\n\t\tlet n = 0;\n\t\treturn this.measures.map((measure) => {\n\t\t\treturn !measure.empty ? n++ : null;\n\t\t});\n\t}\n\n\tget headBPM(): number {\n\t\tfor (const measure of this.measures) {\n\t\t\tif (measure.marks) {\n\t\t\t\tconst tempoMark = measure.marks.find((mark) => mark instanceof TempoTerm && mark.isValid()) as TempoTerm;\n\t\t\t\tif (tempoMark) return tempoMark.bpm;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget measureLayoutCode(): string {\n\t\tconst ms = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure, i) => ({\n\t\t\t\tindex: i + 1,\n\t\t\t\tvb: measure.voltaBegin,\n\t\t\t\tve: measure.voltaEnd,\n\t\t\t\talter: measure.alternative,\n\t\t\t\tleftSign: '',\n\t\t\t\trightSign: '',\n\t\t\t}));\n\t\tms.forEach((m, i) => {\n\t\t\tif (m.vb) {\n\t\t\t\tconst nextI = ms.slice(i + 1).findIndex((mm) => mm.vb);\n\t\t\t\tconst nextVBI = nextI >= 0 ? i + nextI : ms.length;\n\t\t\t\tif (ms.slice(i, nextVBI - 1).some((mm) => mm.ve))\n\t\t\t\t\t// check if volta range closed\n\t\t\t\t\tm.leftSign = '2*[';\n\t\t\t}\n\n\t\t\tif (m.ve) {\n\t\t\t\tconst pms = ms.slice(0, i + 1).reverse();\n\t\t\t\tconst lastVEI = pms.slice(1).findIndex((mm) => mm.ve);\n\t\t\t\tif (lastVEI >= 0) {\n\t\t\t\t\tif (!pms.slice(1, lastVEI + 1).some((mm) => mm.vb))\n\t\t\t\t\t\t// ignore unclosed right volta\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m.alter) {\n\t\t\t\t\tconst lastMI = pms.findIndex((m) => !m.alter);\n\t\t\t\t\tif (lastMI > 0) {\n\t\t\t\t\t\tpms[lastMI].rightSign = ']';\n\t\t\t\t\t\tpms[lastMI - 1].leftSign = '{[';\n\n\t\t\t\t\t\tm.rightSign = '],';\n\n\t\t\t\t\t\tif (ms[i + 1]) ms[i + 1].rightSign = '},';\n\t\t\t\t\t}\n\t\t\t\t} else m.rightSign = '],';\n\n\t\t\t\tif (!pms.some((m) => m.vb)) ms[0].leftSign = '2*[';\n\t\t\t}\n\t\t});\n\n\t\treturn ms\n\t\t\t.map((m) => m.leftSign + m.index.toString() + m.rightSign + (m.rightSign ? '' : ','))\n\t\t\t.join(' ')\n\t\t\t.replace(/,$/, '');\n\t}\n\n\tget qualityScore(): number {\n\t\tconst measures = this.measures.filter((measure) => !measure.empty);\n\t\tconst qss = measures.map(evaluateMeasure).map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\t//console.log('qss:', qss);\n\n\t\treturn measures.length ? sum / measures.length : null;\n\t}\n\n\tdumpEvaluations(): void {\n\t\tconst es = this.measures.filter((measure) => !measure.empty).map((m) => ({ measureIndex: m.measureIndex, ...evaluateMeasure(m) }));\n\t\tconst qss = es.map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\tconsole.log('qualityScore:', sum / es.length);\n\n\t\tconsole.table(es);\n\t}\n\n\tregulate(options: RegulationOptions = {}): void {\n\t\tthis.measures.forEach((m) => m.regulated || m.regulate(options));\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.measures.forEach((m) => (m.voices = null));\n\t}\n\n\t// measures' estimatedDuration should be valid\n\trectifyTimeSignatures(logger: Logger = new DummyLogger()): void {\n\t\tconst mis = this.measures\n\t\t\t.map((measure, index) => ({ measure, index }))\n\t\t\t.filter(({ measure, index }) => !index || measure.timeSignatureChanged)\n\t\t\t.map(({ index }) => index);\n\t\tconst segments = mis\n\t\t\t.map((index, si) => this.measures.slice(index, si < mis.length - 1 ? mis[si + 1] : this.measures.length))\n\t\t\t.map((ms) => ms.filter((m) => m.estimatedDuration > 0))\n\t\t\t.filter((seg) => seg.length >= 3 || seg.some((measure) => measure.doubtfulTimesig));\n\t\t//console.log(\"segments:\", segments.map(ms => ms.map(m => m.measureIndex)));\n\n\t\tsegments.forEach((measures) => {\n\t\t\tif (measures[0].patched) {\n\t\t\t\t// rectify according to patched head measure\n\t\t\t\tconst newTimeSignature = measures[0].timeSignature;\n\t\t\t\tconst measuresToFix = measures\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t.filter((measure) => !measure.patched && printFraction(measure.timeSignature) !== printFraction(newTimeSignature));\n\t\t\t\tif (measuresToFix.length) {\n\t\t\t\t\tconst originTimeSignature = measuresToFix[0].timeSignature;\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by patched head:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${printFraction(newTimeSignature)}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst originTimeSignature = measures[0].timeSignature;\n\t\t\tconst regularD = Number.isInteger(Math.log2(originTimeSignature.denominator));\n\n\t\t\tlet denominator = regularD ? 4 : 8;\n\t\t\tif (regularD) denominator = Math.max(denominator, measures[0].timeSignature.denominator);\n\n\t\t\tconst numerators = measures.map((measure) => Math.round((measure.estimatedDuration * denominator) / WHOLE_DURATION));\n\t\t\tconst countings = Object.entries(numerators.reduce((c, n) => ((c[n] = (c[n] || 0) + 1), c), {} as Record)).sort(\n\t\t\t\t(p1, p2) => p2[1] - p1[1]\n\t\t\t);\n\t\t\tconst peakCount = countings[0][1];\n\t\t\tconst candidateNumerators = countings.filter(([_, c]) => c > peakCount * 0.6);\n\t\t\tconst bestCounting = candidateNumerators.reduce((best, c) => (Number(c[0]) > Number(best[0]) ? c : best));\n\t\t\tif (bestCounting[1] > 1) {\n\t\t\t\t//console.log(\"countings:\", countings, bestCounting[0]);\n\t\t\t\tlet numerator = Number(bestCounting[0]);\n\t\t\t\tif (!regularD || originTimeSignature.denominator * numerator !== originTimeSignature.numerator * denominator) {\n\t\t\t\t\tif (regularD && denominator !== originTimeSignature.denominator) {\n\t\t\t\t\t\tconst reducedN = (numerator * originTimeSignature.denominator) / denominator;\n\t\t\t\t\t\tif (Number.isInteger(reducedN)) {\n\t\t\t\t\t\t\tnumerator = reducedN;\n\t\t\t\t\t\t\tdenominator = originTimeSignature.denominator;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst measuresToFix = measures.filter((measure) => !measure.patched);\n\n\t\t\t\t\tconst newTimeSignature = frac(numerator, denominator);\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by estimation:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${numerator}/${denominator}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tmakeVoiceStaves(): VoicesStaff[] {\n\t\tthis.regulate();\n\n\t\tconst voiceCount = Math.max(...this.measures.map((measure) => measure.voices.length));\n\t\tif (!voiceCount || !Number.isFinite(voiceCount)) return null;\n\n\t\t// mark tied pitches for patched measues\n\t\tthis.measures\n\t\t\t.filter((measure) => measure.patched)\n\t\t\t.forEach((measure) => {\n\t\t\t\tmeasure.events.forEach((event) => {\n\t\t\t\t\tif (event.tied) event.pitches.forEach((pitch) => (pitch.tied = true));\n\t\t\t\t});\n\t\t\t});\n\n\t\t// Move courtesy clefs to the next measure.\n\t\t// A courtesy clef that appears after all events on its staff announces the\n\t\t// clef change for the next measure rather than applying to the current one.\n\t\tfor (let mi = 0; mi < this.measures.length - 1; mi++) {\n\t\t\tconst measure = this.measures[mi];\n\t\t\tconst nextMeasure = this.measures[mi + 1];\n\t\t\tif (!measure.contexts || !nextMeasure?.contexts) continue;\n\n\t\t\tfor (let si = 0; si < measure.contexts.length; si++) {\n\t\t\t\tconst ctxList = measure.contexts[si];\n\t\t\t\tif (!ctxList) continue;\n\n\t\t\t\tconst staffEvents = measure.events?.filter((e: any) => e.staff === si) || [];\n\t\t\t\tconst maxEventX = staffEvents.reduce((max: number, e: any) => Math.max(max, e.x || 0), -Infinity);\n\t\t\t\tif (!Number.isFinite(maxEventX)) continue;\n\n\t\t\t\tconst deferred: ContextedTerm[] = [];\n\t\t\t\tmeasure.contexts[si] = ctxList.filter((term) => {\n\t\t\t\t\tif (term.type === 0 /* ContextType.Clef */ && term.x > maxEventX) {\n\t\t\t\t\t\tdeferred.push(term);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\n\t\t\t\tif (deferred.length > 0 && nextMeasure.contexts[si]) {\n\t\t\t\t\tdeferred.forEach((term) => (term.tick = 0));\n\t\t\t\t\tnextMeasure.contexts[si] = [...deferred, ...nextMeasure.contexts[si]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// [measure, voice]\n\t\tconst measures: VoiceMeasure[][] = this.measures.map((measure /*, mi*/) => {\n\t\t\tconsole.assert(measure.validRegulated, '[makeVoiceStaves] measure is invalid:', measure);\n\n\t\t\tconst eventMap: { [key: number]: EventTerm } = {};\n\t\t\tmeasure.events.forEach((event) => (eventMap[event.id] = event));\n\n\t\t\tconst leftStaves = new Set(\n\t\t\t\tArray(measure.contexts.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, i) => i)\n\t\t\t);\n\n\t\t\tlet bar = null;\n\t\t\tif (measure.barType) {\n\t\t\t\tswitch (measure.barType) {\n\t\t\t\t\tcase 'Segment':\n\t\t\t\t\t\tbar = '||';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Terminal':\n\t\t\t\t\t\tbar = '|.';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst voices: VoiceMeasure[] = measure.voices.map((ids /*, vi*/) => {\n\t\t\t\tconst events = ids.map((id) => eventMap[id]);\n\t\t\t\tevents.sort((e1, e2) => e1.tick - e2.tick);\n\n\t\t\t\tconst tickMap = {};\n\t\t\t\tlet tick = 0;\n\t\t\t\tlet lastEvent = null;\n\t\t\t\tfor (const event of events) {\n\t\t\t\t\tif (!Number.isFinite(event?.tick)) {\n\t\t\t\t\t\tconsole.warn('invalid event tick:', event);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (event.tick > tick) tickMap[tick] = EventTerm.space({ tick, duration: event.tick - tick });\n\t\t\t\t\telse if (!event.grace && event.tick < tick && lastEvent)\n\t\t\t\t\t\tlastEvent.timeWarp = reducedFraction(event.tick - lastEvent.tick, lastEvent.duration);\n\t\t\t\t\t//console.log(\"timewarp:\", event.tick - lastEvent.tick, lastEvent.duration, lastEvent.timeWarp);\n\n\t\t\t\t\ttickMap[event.tick] = event;\n\n\t\t\t\t\tif (!event.zeroHolder) {\n\t\t\t\t\t\ttick = Math.round(event.tick + event.duration);\n\t\t\t\t\t\tlastEvent = event;\n\n\t\t\t\t\t\t// sub grace events\n\t\t\t\t\t\tif (event.graceIds) {\n\t\t\t\t\t\t\tevent.graceIds.forEach((id) => {\n\t\t\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\t\t\tif (grace) tickMap[grace.tick] = grace;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (measure.endEvent && measure.endEvent.graceIds) {\n\t\t\t\t\tmeasure.endEvent.graceIds.forEach((id) => {\n\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\tif (grace && (!lastEvent || grace.staff === lastEvent.staff)) tickMap[grace.tick] = grace;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (tick < measure.duration) tickMap[tick] = EventTerm.space({ tick, duration: measure.duration - tick });\n\t\t\t\telse if (tick > measure.duration && Number.isFinite(measure.duration))\n\t\t\t\t\t//console.warn(\"duration out of range:\", tick, column.duration, mi, vi);\n\t\t\t\t\tlastEvent.timeWarp = reducedFraction(measure.duration - lastEvent.tick, lastEvent.duration);\n\n\t\t\t\tconsole.assert(\n\t\t\t\t\t!lastEvent || !lastEvent.timeWarp || (Number.isInteger(lastEvent.timeWarp.numerator) && Number.isInteger(lastEvent.timeWarp.denominator)),\n\t\t\t\t\t'invalid time warp:',\n\t\t\t\t\tlastEvent\n\t\t\t\t);\n\n\t\t\t\tconst staffIndex = events[0] ? events[0].staff : 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\n\t\t\t\t//const row = measure.rows[staffIndex];\n\t\t\t\tconst contextedTerms = measure.contexts[staffIndex];\n\n\t\t\t\tconst tailEvent = events[events.length - 1];\n\t\t\t\tconst tailStaff = tailEvent ? tailEvent.staff : 0;\n\n\t\t\t\t// TODO: modify full measure rests duration\n\n\t\t\t\treturn {\n\t\t\t\t\ttickMap,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t...basic,\n\t\t\t\t\t// TODO: consider staff altered voice\n\t\t\t\t\tcontextedTerms,\n\t\t\t\t\tmarks: [],\n\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\theadStaff: staffIndex,\n\t\t\t\t\ttailStaff,\n\t\t\t\t\tbar,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\twhile (voices.length < voiceCount) {\n\t\t\t\tconst staffIndex = leftStaves.values().next().value || 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\t\t\t\tconst terms = measure.contexts[staffIndex];\n\n\t\t\t\tconst chiefVoice = voices.every((voice) => voice.headStaff !== staffIndex);\n\n\t\t\t\tconst voice = emptyVoiceFromStaffMeasure(\n\t\t\t\t\t{\n\t\t\t\t\t\tterms,\n\t\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t\t...basic,\n\t\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\t},\n\t\t\t\t\tchiefVoice\n\t\t\t\t);\n\t\t\t\tvoice.headStaff = staffIndex;\n\t\t\t\tvoice.tailStaff = staffIndex;\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\n\t\t\treturn voices;\n\t\t});\n\n\t\t// compute traits for voice-measures\n\t\tmeasures.forEach((voices) =>\n\t\t\tvoices.forEach((measure) => {\n\t\t\t\tconst words = [];\n\n\t\t\t\tif (!measure.empty) {\n\t\t\t\t\twords.push(`s${measure.headStaff}`);\n\t\t\t\t\twords.push(`s${measure.tailStaff}`);\n\t\t\t\t}\n\n\t\t\t\tObject.values(measure.tickMap).forEach((event) => {\n\t\t\t\t\tif (event instanceof EventTerm) {\n\t\t\t\t\t\twords.push(`s${event.staff}`);\n\n\t\t\t\t\t\tif (event.stemDirection) {\n\t\t\t\t\t\t\tconst sd = `st${event.staff}-${event.stemDirection}`;\n\t\t\t\t\t\t\twords.push(sd, sd);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.grace) words.push(`gd${event.mainDuration}`);\n\t\t\t\t\t\telse words.push(`d${event.mainDuration}`);\n\n\t\t\t\t\t\tif (event.rest) words.push('r-' + event.rest);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tevent.pitches.forEach((pitch) => {\n\t\t\t\t\t\t\t\twords.push(`p1-${pitch.note}`);\n\t\t\t\t\t\t\t\twords.push(`p8-${Math.round(pitch.note / 8)}`);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmeasure.trait = HashVector.fromWords(words);\n\t\t\t})\n\t\t);\n\t\t//console.log(\"measure traits:\");\n\t\t//console.table(measures.map(voices => voices.map(measure => hashToHex(measure.trait.toHash()))));\n\n\t\tconst staffToGroup: Record = this.staffGroups\n\t\t\t.flat(1)\n\t\t\t.reduce((map, si) => ((map[si] = this.staffGroups.findIndex((group) => group.includes(si))), map), {});\n\n\t\t// sort voices to connect voices between neighhoring measures\n\t\tconst voiceTraits = Array(voiceCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => ({ vector: HashVector.zero, index, weight: 0, headStaff: null }));\n\t\tmeasures.forEach((voices, mi) => {\n\t\t\tvoiceTraits.sort((v1, v2) => v2.weight - v1.weight);\n\n\t\t\tconst leftVoices = new Set(voices);\n\t\t\tvoiceTraits.forEach((voiceTrait) => {\n\t\t\t\tconst vs = [...leftVoices];\n\t\t\t\tlet measure = vs[0];\n\t\t\t\tif (mi > 0 && vs.length > 1) {\n\t\t\t\t\tconst consistencies = vs.map((measure) =>\n\t\t\t\t\t\tstaffToGroup[measure.headStaff] === staffToGroup[voiceTrait.headStaff]\n\t\t\t\t\t\t\t? cosHashes(voiceTrait.vector.toHash(), measure.trait.toHash())\n\t\t\t\t\t\t\t: -1\n\t\t\t\t\t);\n\t\t\t\t\tmeasure = vs[argmax(consistencies)];\n\t\t\t\t}\n\t\t\t\tleftVoices.delete(measure);\n\n\t\t\t\tmeasure.voiceIndex = voiceTrait.index;\n\t\t\t\tvoiceTrait.vector.scale(0.4).add(measure.trait);\n\n\t\t\t\tvoiceTrait.weight = Object.keys(measure.tickMap).length;\n\n\t\t\t\tif (mi === 0) voiceTrait.headStaff = measure.headStaff;\n\t\t\t});\n\n\t\t\tvoices.sort((m1, m2) => m1.voiceIndex - m2.voiceIndex);\n\t\t});\n\n\t\t//const staffTraits = Array(this.stavesCount).fill(null).map((_, si) => HashVector.fromString(`s${si}`).toHash());\n\t\tconst staffVoiceIndices = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map(() => []);\n\t\tvoiceTraits.forEach((trait) => {\n\t\t\t//const consistencies = staffTraits.map(staff => cosHashes(trait.vector.toHash(), staff));\n\t\t\t//staffVoiceIndices[argmax(consistencies)].push(trait.index);\n\t\t\tstaffVoiceIndices[trait.headStaff].push(trait.index);\n\t\t});\n\n\t\tconst staves = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, si) => {\n\t\t\t\tif (!measures[0]) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvoices: [],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t//const voiceIndicies = measures[0].map((voice, vi) => ({ voice, vi })).filter(({ voice }) => voice.headStaff === si).map(({ vi }) => vi);\n\t\t\t\tconst voiceIndicies = staffVoiceIndices[si];\n\n\t\t\t\tconst voices = voiceIndicies.map((vi): TermVoice => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmode: 'relative',\n\t\t\t\t\t\tmeasures: measures.map((m) => m[vi]),\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\treturn { voices };\n\t\t\t});\n\n\t\tremoveEmptyMeasuresInVoicesStaves(staves);\n\t\tstaves.forEach((staff) => staff.voices.forEach(markingTiesInVoice));\n\n\t\treturn staves;\n\t}\n\n\tperform(): Performing {\n\t\tconst staves = this.makeVoiceStaves();\n\t\tif (!staves) return null;\n\n\t\tconst tokenMap = new Map();\n\n\t\t// TODO: store staff channels in score\n\t\tconst staffToChannel = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.reduce((map, _, i) => {\n\t\t\t\tmap[i] = i;\n\t\t\t\treturn map;\n\t\t\t}, {});\n\n\t\tconst voiceChannels = [].concat(...staves.map((staff, si) => staff.voices.map(() => staffToChannel[si])));\n\n\t\tlet hasTempo = false;\n\n\t\tlet nextTick = 0;\n\t\tlet events0 = null;\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure) => {\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst voices: VoiceMeasure[] = [].concat(...staves.map((staff) => staff.voices.map((voice) => voice.measures[measureIndex])));\n\t\t\t\tconst voice0 = voices[0];\n\t\t\t\tconst tick = nextTick;\n\n\t\t\t\t//const signatureDuration = (WHOLE_DURATION * voice0.timeSignature.numerator) / voice0.timeSignature.denominator;\n\n\t\t\t\tnextTick += voice0.duration;\n\n\t\t\t\tconst notes = [].concat(\n\t\t\t\t\t...voices.map((measure, vi) => {\n\t\t\t\t\t\tconst tickFactor = 1; //measure.duration ? signatureDuration / measure.duration : 1;\n\n\t\t\t\t\t\tconst channel = voiceChannels[vi];\n\n\t\t\t\t\t\tconst chords = Object.values(measure.tickMap)\n\t\t\t\t\t\t\t.filter((term) => term instanceof EventTerm && !term.rest)\n\t\t\t\t\t\t\t.map((term: EventTerm) => {\n\t\t\t\t\t\t\t\tconst duration = Math.round(term.duration * tickFactor);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(term.tick), 'invalid event term tick:', term);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(duration), 'invalid event term duration:', term);\n\n\t\t\t\t\t\t\t\tif (term.tick >= 0) {\n\t\t\t\t\t\t\t\t\t// exclude minus tick tokens\n\t\t\t\t\t\t\t\t\tterm.noteIds.forEach((id) => {\n\t\t\t\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: term.roundX,\n\t\t\t\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(term.staff));\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttick: Math.round(term.tick * tickFactor),\n\t\t\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\t\t\tpitches: term.pitches,\n\t\t\t\t\t\t\t\t\tnoteIds: term.noteIds,\n\t\t\t\t\t\t\t\t\tpart,\n\t\t\t\t\t\t\t\t\tstaff: term.staff,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t\t...chords.map((chord) => {\n\t\t\t\t\t\t\t\t// exclude repeated pitches\n\t\t\t\t\t\t\t\tconst pitchMap: { [pitch: number]: TermPitch } = chord.pitches.reduce((map, pitch) => {\n\t\t\t\t\t\t\t\t\tmap[noteToPitch(pitch)] = pitch;\n\t\t\t\t\t\t\t\t\treturn map;\n\t\t\t\t\t\t\t\t}, {});\n\t\t\t\t\t\t\t\tconst pitches = Object.values(pitchMap).sort((p1, p2) => p1.note - p2.note);\n\n\t\t\t\t\t\t\t\treturn pitches\n\t\t\t\t\t\t\t\t\t.filter((pitch) => !pitch.tied)\n\t\t\t\t\t\t\t\t\t.map((pitch, i) => {\n\t\t\t\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\ttick: chord.tick,\n\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\t\t\t\ttrack: chord.part,\n\t\t\t\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tconst events = [];\n\t\t\t\tevents0 = events0 || events;\n\n\t\t\t\tif (measure.marks)\n\t\t\t\t\tmeasure.marks.forEach((mark) => {\n\t\t\t\t\t\tif (mark instanceof TempoTerm) {\n\t\t\t\t\t\t\tconst bpm = mark.bpm;\n\t\t\t\t\t\t\tif (mark.isValid()) {\n\t\t\t\t\t\t\t\tconst es = hasTempo ? events : events0; // set the first tempo to the beginning of the track\n\t\t\t\t\t\t\t\tconst tick = hasTempo ? mark.tick : 0;\n\t\t\t\t\t\t\t\tes.push({\n\t\t\t\t\t\t\t\t\ttrack: 0,\n\t\t\t\t\t\t\t\t\tticks: tick,\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\t\t\t\t\t\tmicrosecondsPerBeat: Math.round(60e6 / bpm),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\thasTempo = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents,\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tif (!hasTempo) {\n\t\t\tmeasures[0].events.push({\n\t\t\t\ttrack: 0,\n\t\t\t\tticks: 0,\n\t\t\t\tdata: {\n\t\t\t\t\ttype: 'meta',\n\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\tmicrosecondsPerBeat: 0.5e6, // TODO\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tperformByEstimation(): Performing {\n\t\tconst tokenMap = new Map();\n\t\tlet nextTick = 0;\n\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => measure.events.some((event) => event.predisposition))\n\t\t\t.map((measure) => {\n\t\t\t\tconst tick = nextTick;\n\t\t\t\tconst duration = Math.round(measure.estimatedDuration || fractionMul(WHOLE_DURATION, measure.timeSignature));\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\tnextTick += duration;\n\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst chords = measure.events.filter((event) => event.predisposition && event.predisposition.fake < 0.5 && !event.rest);\n\t\t\t\tconst notes = chords\n\t\t\t\t\t.map((chord) => {\n\t\t\t\t\t\tconst noteTick = Math.round(chord.predisposition.tick);\n\n\t\t\t\t\t\tchord.noteIds.forEach((id) => {\n\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\tx: chord.roundX,\n\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn chord.pitches.map((pitch, i) => {\n\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(chord.staff));\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttick: noteTick,\n\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\ttrack: part,\n\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\tchannel: 0,\n\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.flat(1);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents: [],\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tfeatureHash(): Hash {\n\t\tconst headMeasures = this.measures.slice(0, 16);\n\t\tconst measureWords = headMeasures.map((measure) => measure.featureWords);\n\n\t\tconst levels = [1, 4, 16].map((len) => {\n\t\t\tconst meaures = measureWords.slice(0, len).filter(Boolean);\n\t\t\tconst ys = meaures.map((words) => words[0]).flat(1);\n\t\t\tconst melodies = meaures.map((words) => words[1]).flat(1);\n\t\t\tconst rhythm = meaures.map((words) => words[2]).flat(1);\n\n\t\t\tconst [vecY, vecMelody, vecRhythm] = [ys, melodies, rhythm].map(HashVector.fromWords);\n\n\t\t\treturn HashVector.concat(vecY, vecMelody.sub(128), vecRhythm.sub(128));\n\t\t});\n\n\t\treturn HashVector.concat(...levels).toHash();\n\t}\n\n\tfeatureHashHex(): string {\n\t\treturn hashToHex(this.featureHash());\n\t}\n\n\tfeatureHashBigInt(): bigint {\n\t\treturn hashToBigInt(this.featureHash());\n\t}\n\n\tassignMeasureNumbers(): void {\n\t\tlet n = null as any;\n\t\tfor (const measure of this.measures) {\n\t\t\tif (!measure.discard && !measure.events.length) continue;\n\n\t\t\tif (measure.indent) n = null;\n\n\t\t\tif (!Number.isFinite(n)) n = measure.partialDuration ? 0 : 1;\n\n\t\t\tmeasure.measureNumber = n++;\n\t\t}\n\t}\n}\n\nexport { SpartitoMeasure, Spartito };\n","import { Fraction } from './interfaces';\nimport { ContextedTerm, ContextType } from './term';\nimport { Logger, DummyLogger } from './logger';\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nexport const mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst PHONETS = 'CDEFGAB';\n\nconst ALTER_NAMES = {\n\t[-2]: '\\u266D\\u266D',\n\t[-1]: '\\u266D',\n\t[0]: '\\u266E',\n\t[1]: '\\u266F',\n\t[2]: '\\uD834\\uDD2A',\n};\n\n/*\n\tCoordinates:\n\n\t\tnote:\n\t\t\tzero: the middle C line (maybe altered)\n\t\t\tpositive: high (right on piano keyboard)\n\t\t\tunit: a step in scales of the current staff key\n\n\t\tstaff Y:\n\t\t\tzero: the third (middle) line among 5 staff lines\n\t\t\tpositive: down\n\t\t\tunit: a interval between 2 neighbor staff lines\n*/\n\nexport default class StaffContext {\n\tlogger: Logger = new DummyLogger();\n\n\tclef: number = -3;\n\tkeyAlters: number[] = [];\n\toctaveShift: number = 0;\n\talters: number[] = [];\n\n\ttimeSignature: Fraction = {\n\t\tnumerator: 4,\n\t\tdenominator: 4,\n\t};\n\ttimeSigNumeric: boolean = false;\n\ttimeSigNumSet: boolean = false;\n\ttimeSigDenSet: boolean = false;\n\tdoubtingTimesig: boolean = true;\n\n\tchange(term: ContextedTerm) {\n\t\tswitch (term.type) {\n\t\t\tcase ContextType.Clef:\n\t\t\t\tthis.clef = term.clef;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.KeyAcc:\n\t\t\t\tthis.keyAlters[mod7(this.yToNote(term.y))] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.Acc:\n\t\t\t\tthis.alters[this.yToNote(term.y)] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.OctaveShift:\n\t\t\t\tthis.octaveShift = term.octaveShift;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureC:\n\t\t\t\tthis.timeSigNumeric = false;\n\t\t\t\tswitch (term.tokenType) {\n\t\t\t\t\tcase 'timesig-C44':\n\t\t\t\t\t\tthis.timeSignature.numerator = 4;\n\t\t\t\t\t\tthis.timeSignature.denominator = 4;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'timesig-C22':\n\t\t\t\t\t\tthis.timeSignature.numerator = 2;\n\t\t\t\t\t\tthis.timeSignature.denominator = 2;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureN:\n\t\t\t\tthis.timeSigNumeric = true;\n\t\t\t\tswitch (term.y) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (this.timeSigDenSet) this.timeSignature.denominator = this.timeSignature.denominator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.denominator = term.number;\n\n\t\t\t\t\t\tthis.timeSigDenSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase -1:\n\t\t\t\t\t\tif (this.timeSigNumSet) this.timeSignature.numerator = this.timeSignature.numerator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.numerator = term.number;\n\n\t\t\t\t\t\tthis.timeSigNumSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.logger.warn('unexpected time signature Y:', term.y);\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tresetMeasure() {\n\t\tthis.alters = [];\n\n\t\tthis.timeSigNumSet = false;\n\t\tthis.timeSigDenSet = false;\n\t}\n\n\tresetSystem() {\n\t\tthis.keyAlters = [];\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.keyAlters.filter((a) => Number.isInteger(a)).reduce((sum, a) => sum + a, 0);\n\t}\n\n\tget partialTimeSignature(): boolean {\n\t\treturn !this.timeSigNumSet !== !this.timeSigDenSet;\n\t}\n\n\tnoteToY(note: number): number {\n\t\treturn -note / 2 - this.clef - this.octaveShift * 3.5;\n\t}\n\n\tpitchToNote(pitch: number, { preferredAlter = null } = {}): { note: number; alter: number } {\n\t\tif (!preferredAlter) preferredAlter = this.keySignature < 0 ? -1 : 1;\n\n\t\tconst group = Math.floor((pitch - MIDDLE_C) / 12);\n\t\tconst gp = mod12(pitch);\n\t\tconst alteredGp = GROUP_N_TO_PITCH.includes(gp) ? gp : mod12(gp - preferredAlter);\n\t\tconst gn = GROUP_N_TO_PITCH.indexOf(alteredGp);\n\t\tthis.logger.assert(gn >= 0, 'invalid preferredAlter:', pitch, preferredAlter, alteredGp);\n\n\t\tconst naturalNote = group * 7 + gn;\n\n\t\tconst alterValue = gp - alteredGp;\n\t\tconst keyAlterValue = this.keyAlters[gn] || 0;\n\t\tconst onAcc = Number.isInteger(this.alters[naturalNote]);\n\n\t\tconst alter = onAcc ? alterValue : alterValue === keyAlterValue ? null : alterValue;\n\n\t\treturn { note: naturalNote, alter };\n\t}\n\n\tpitchToY(pitch: number, { preferredAlter = null } = {}): { y: number; alter: number } {\n\t\tconst { note, alter } = this.pitchToNote(pitch, { preferredAlter });\n\t\tconst y = this.noteToY(note);\n\n\t\treturn { y, alter };\n\t}\n\n\tyToNote(y: number): number {\n\t\tthis.logger.assert(Number.isInteger(y * 2), 'invalid y:', y);\n\n\t\treturn (-y - this.octaveShift * 3.5 - this.clef) * 2;\n\t}\n\n\talterOnNote(note: number): number {\n\t\tif (Number.isInteger(this.alters[note])) return this.alters[note];\n\n\t\tconst gn = mod7(note);\n\t\tif (Number.isInteger(this.keyAlters[gn])) return this.keyAlters[gn];\n\n\t\treturn 0;\n\t}\n\n\tnoteToPitch(note: number): number {\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tconst pitch = MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + this.alterOnNote(note);\n\t\tif (!Number.isFinite(pitch)) {\n\t\t\tthis.logger.warn('invalid pitch value:', pitch, note, group, gn);\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn pitch;\n\t}\n\n\tyToPitch(y: number): number {\n\t\treturn this.noteToPitch(this.yToNote(y));\n\t}\n\n\tyToPitchName(y: number): string {\n\t\tconst note = this.yToNote(y);\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tlet alter = this.alterOnNote(note);\n\t\tif (!alter && !Number.isInteger(this.alters[note])) alter = null;\n\n\t\treturn `${ALTER_NAMES[alter] ? ALTER_NAMES[alter] : ''}${PHONETS[gn]}${group + 4}`;\n\t}\n}\n","import sha1 from 'js-sha1';\n\nimport * as measureLayout from '../measureLayout';\nimport * as staffLayout from '../staffLayout';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { EventSystem, MeasureBrief, MusicSheet, RecognitionSettings, ScoreData, TermMeasure, TermStaff, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { PatchMeasure } from './patch';\nimport { Measure, Page, Staff, System } from './scoreComponents';\nimport { hashSemanticPoint, SemanticPoint, SemanticType } from './semanticPoint';\nimport { BOS_ELEMENT, fractionToElems, SemanticCluster, SemanticElement, SemanticElementType } from './semanticTopology';\nimport { Spartito, SpartitoMeasure } from './spartito';\nimport StaffContext from './staffContext';\nimport { ContextedTerm, ContextType, EventTerm, WHOLE_DURATION } from './term';\nimport type { SemanticPointInMeasure } from './timewiseGraph';\nimport { TimewiseGraph } from './timewiseGraph';\nimport { Token, TokenType } from './token';\nimport { distance2D, solveOverlapping } from './utils';\n\nexport const VERSION = 14;\n\ninterface Topology {\n\tclusters: SemanticCluster[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n}\n\nconst GRAND_STAFF_LAYOUT = '{-}';\n\nconst processStaffContext = (staff: TermStaff, logger: Logger = new DummyLogger()): void => {\n\tconst context = new StaffContext();\n\tcontext.logger = logger;\n\n\tfor (const row of staff.rows) {\n\t\tfor (const measure of row) {\n\t\t\tconst startEvent = measure.terms.find((term) => term instanceof EventTerm) as EventTerm;\n\t\t\tlet tick = startEvent ? Math.min(startEvent.tick, 0) : 0;\n\n\t\t\tmeasure.terms.forEach((term) => {\n\t\t\t\tif (term instanceof ContextedTerm) {\n\t\t\t\t\tterm.tick = tick; // TODO: not working here because measure not regulated yet\n\t\t\t\t\tcontext.change(term);\n\t\t\t\t} else if (term instanceof EventTerm) {\n\t\t\t\t\tconst endTick = term.tick + (term.duration || 0);\n\t\t\t\t\tif (endTick > tick) tick = endTick;\n\n\t\t\t\t\tif (term.ys) {\n\t\t\t\t\t\tterm.pitches = term.ys.map((y) => {\n\t\t\t\t\t\t\tconst note = context.yToNote(y);\n\t\t\t\t\t\t\tconst alter = context.alterOnNote(note);\n\n\t\t\t\t\t\t\treturn { note, alter, octaveShift: context.octaveShift };\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmeasure.timeSignature = { ...context.timeSignature };\n\t\t\tmeasure.timeSigNumeric = context.timeSigNumeric;\n\t\t\tmeasure.doubtfulTimesig =\n\t\t\t\tcontext.doubtingTimesig ||\n\t\t\t\t!Number.isInteger(Math.log2(measure.timeSignature.denominator)) ||\n\t\t\t\tmeasure.timeSignature.numerator <= measure.timeSignature.denominator / 4;\n\n\t\t\tmeasure.keySignature = context.keySignature;\n\n\t\t\t// fill empty measure duration\n\t\t\tif (measure.duration === 0) measure.duration = (WHOLE_DURATION * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\n\t\t\tcontext.resetMeasure();\n\t\t}\n\n\t\tcontext.resetSystem();\n\t}\n};\n\nconst upgradeScoreData = (data: ScoreData): ScoreData => {\n\tif (data.version < 3) {\n\t\tconst { version, stavesCount, layoutTemplate, ...fields } = data;\n\t\tvoid version;\n\t\tvoid layoutTemplate;\n\n\t\tlet staffLayoutCode =\n\t\t\tstavesCount > 1\n\t\t\t\t? Array(stavesCount - 1)\n\t\t\t\t\t\t.fill(',')\n\t\t\t\t\t\t.join('')\n\t\t\t\t: '';\n\n\t\t// use graph staff by default for 2 staves score\n\t\tif (stavesCount === 2) staffLayoutCode = '{-}';\n\n\t\tdata = {\n\t\t\tversion: 3,\n\t\t\tstaffLayoutCode,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tif (data.version < 8) {\n\t\t// upgrade system measure bar semantics\n\t\tdata.pages.forEach((page) => {\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tif (system.semantics) {\n\t\t\t\t\tconst bars = system.semantics.filter((point) => point.semantic === SemanticType.vline_BarMeasure);\n\n\t\t\t\t\tsystem.semantics = [].concat(\n\t\t\t\t\t\t...system.staves.map((staff) => {\n\t\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\n\t\t\t\t\t\t\treturn bars.map((point) => ({\n\t\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\t\ty: point.y + oy,\n\t\t\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\t\t\t...point.extension,\n\t\t\t\t\t\t\t\t\ty1: point.extension.y1 + oy,\n\t\t\t\t\t\t\t\t\ty2: point.extension.y2 + oy,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tdata.version = 8;\n\t}\n\n\tif (data.version < 9) {\n\t\t// remove old format spartito\n\t\tdata.spartito = null;\n\n\t\tdata.version = 9;\n\t}\n\n\treturn data;\n};\n\nconst bitsToMask = (bits: number[]): number => bits.reduce((mask, bit, i) => (bit ? mask | (1 << i) : mask), 0);\n\ninterface PointPosition {\n\tpoint: SemanticPoint;\n\tpageIndex: number;\n\tsystemIndex: number;\n\tstaffIndex: number;\n}\n\ninterface MeasureValidation {\n\ttickMap: { [tick: number]: number };\n}\n\ninterface Size {\n\twidth: number;\n\theight: number;\n}\n\nclass Score extends SimpleClass {\n\tstatic className = 'Score';\n\n\tversion = VERSION;\n\n\ttitle: string;\n\t// in pixels\n\tpageSize: Size;\n\tunitSize: number;\n\tstaffLayoutCode: string;\n\n\tpaperOptions?: Partial;\n\n\theaders: { [key: string]: string };\n\n\ttextAnnotations: { [id: string]: string };\n\n\ttags?: string[];\n\n\tinstrumentDict: { [key: string]: string };\n\n\tpages: Page[];\n\ttopology: Topology;\n\tspartito?: Spartito;\n\n\tpatches?: PatchMeasure[];\n\n\tsettings: RecognitionSettings;\n\n\tconstructor(data: ScoreData) {\n\t\tsuper();\n\t\tsuper.assign(upgradeScoreData(data));\n\n\t\tthis.pages = this.pages || [];\n\t\tthis.headers = this.headers || {};\n\t\tthis.instrumentDict = this.instrumentDict || {};\n\n\t\tthis.pageSize = this.pageSize || {\n\t\t\t// A4 paper\n\t\t\twidth: 794,\n\t\t\theight: 1122,\n\t\t};\n\n\t\tthis.unitSize = this.unitSize || null;\n\n\t\tthis.staffLayoutCode = this.staffLayoutCode || (this.maxStavesCount === 2 ? GRAND_STAFF_LAYOUT : Array(this.maxStavesCount).fill('').join(','));\n\t}\n\n\tget systems(): System[] {\n\t\treturn [].concat(...this.pages.map((page) => page.systems));\n\t}\n\n\tget measureCount(): number {\n\t\treturn this.systems.reduce((sum, system) => sum + (system.measureCount || 0), 0);\n\t}\n\n\tget imageKeys(): string[] {\n\t\treturn [\n\t\t\t...this.pages.map((page) => page.source?.url),\n\t\t\t...this.systems.map((system) => system.backgroundImage),\n\t\t\t...[].concat(\n\t\t\t\t...this.systems.map((system) =>\n\t\t\t\t\t[...system.staves.map((staff) => staff.backgroundImage), ...system.staves.map((staff) => staff.maskImage)].filter(Boolean)\n\t\t\t\t)\n\t\t\t),\n\t\t].filter(Boolean);\n\t}\n\n\tget breakSystemIndices(): number[] {\n\t\tconst indices = [];\n\t\tlet systemCount = 0;\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tif (i < this.pages.length - 1) {\n\t\t\t\tsystemCount += page.systems.length;\n\t\t\t\tindices.push(systemCount - 1);\n\t\t\t}\n\t\t});\n\n\t\treturn indices;\n\t}\n\n\tget staffLayout(): staffLayout.StaffLayout {\n\t\treturn staffLayout.parseCode(this.staffLayoutCode);\n\t}\n\n\tget measureLayoutCode(): string {\n\t\treturn this.spartito?.measureLayoutCode;\n\t}\n\n\tget maxStavesCount(): number {\n\t\treturn Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget semanticHash(): string {\n\t\tconst ids = [].concat(\n\t\t\t...this.systems.map((system) =>\n\t\t\t\t[].concat(...system.staves.map((staff) => (staff.semantics ? system.qualifiedSemantics(staff.semantics).map((s) => s.id) : [])))\n\t\t\t)\n\t\t);\n\t\treturn sha1(ids.join(''));\n\t}\n\n\teventSystemsToTermStaves(eventSystems: EventSystem[], logger: Logger = new DummyLogger()): TermStaff[] {\n\t\t// [staff]\n\t\tconst termStaves: TermStaff[] = Array(this.maxStavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, staffIndex): TermStaff => {\n\t\t\t\treturn {\n\t\t\t\t\t// [system, measure]\n\t\t\t\t\trows: eventSystems.map((sys, i) =>\n\t\t\t\t\t\tsys.columns.map((column, ii): TermMeasure => {\n\t\t\t\t\t\t\tconst measure = column.rows[staffIndex];\n\t\t\t\t\t\t\tconsole.assert(measure, '[eventSystemsToTermStaves] measure is null:', staffIndex, column.rows);\n\n\t\t\t\t\t\t\tconst contexts = measure.contexts;\n\n\t\t\t\t\t\t\t// prepend octave shift 0 at begin of every system\n\t\t\t\t\t\t\tif (ii === 0) {\n\t\t\t\t\t\t\t\tif (!contexts.some((term) => term.type === ContextType.OctaveShift)) {\n\t\t\t\t\t\t\t\t\tcontexts.unshift(\n\t\t\t\t\t\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\t\t\t\t\t\tstaff: staffIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\t\t\t\ttokenType: TokenType.OctaveShift0,\n\t\t\t\t\t\t\t\t\t\t\ttick: 0,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst terms = [...(measure.events || []), ...contexts].sort((t1, t2) => t1.x - t2.x);\n\n\t\t\t\t\t\t\tconst pageBreak = staffIndex === 0 && ii === sys.columns.length - 1 && this.breakSystemIndices.includes(i);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tterms,\n\t\t\t\t\t\t\t\t//xToTick: column.xToTick,\n\t\t\t\t\t\t\t\tduration: column.duration,\n\t\t\t\t\t\t\t\tpageBreak,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\ttermStaves.forEach((staff) => processStaffContext(staff, logger));\n\n\t\treturn termStaves;\n\t}\n\n\tresetPageLayout(parameters: { unitSize?: number; pageSize?: Size }) {\n\t\tconst { unitSize = this.unitSize, pageSize = this.pageSize } = parameters;\n\n\t\tconst newCenter = {\n\t\t\tx: (pageSize.width * 0.5) / unitSize,\n\t\t\ty: (pageSize.height * 0.5) / unitSize,\n\t\t};\n\n\t\tthis.pages.forEach((page) => {\n\t\t\tconst offsetX = newCenter.x - page.width / 2;\n\t\t\tconst offsetY = newCenter.y - page.height / 2;\n\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tsystem.left += offsetX;\n\t\t\t\tsystem.top += offsetY;\n\t\t\t});\n\n\t\t\tif (page.semantics) {\n\t\t\t\tpage.semantics.forEach((point) => {\n\t\t\t\t\tpoint.x += offsetX;\n\t\t\t\t\tpoint.y += offsetY;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tpage.width = pageSize.width / unitSize;\n\t\t\tpage.height = pageSize.height / unitSize;\n\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations });\n\t\t});\n\n\t\tthis.unitSize = unitSize;\n\t\tthis.pageSize = pageSize;\n\t}\n\n\tgetMeasure(measureIndex: number): {\n\t\tmeasureIndex: number;\n\t\tsystem: System;\n\t\tlocalIndex: number;\n\t\tleft: number;\n\t\tright: number;\n\t\tmeasures: Measure[];\n\t} {\n\t\tlet index = measureIndex;\n\t\tfor (const system of this.systems) {\n\t\t\tif (index < system.measureCount) {\n\t\t\t\tconst staff = system.staves[0];\n\t\t\t\tconst measure = staff.measures[index];\n\t\t\t\tconsole.assert(measure, 'measure is null:', system.measureCount, index, staff.measures);\n\t\t\t\tconst measures = system.getStaffArray(this.maxStavesCount).map((staff) => staff && staff.measures[index]);\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex,\n\t\t\t\t\tsystem,\n\t\t\t\t\tlocalIndex: index,\n\t\t\t\t\tleft: measure.left,\n\t\t\t\t\tright: measure.right,\n\t\t\t\t\tmeasures,\n\t\t\t\t};\n\t\t\t}\n\t\t\tindex -= system.measureCount;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetRawCluster(measureIndex: number, threshold: number, { timeSignature }: Partial = {}): SemanticCluster {\n\t\tconst position = this.getMeasure(measureIndex);\n\t\tif (!position) return null;\n\n\t\tconst { system, left, right } = position;\n\t\t//console.log(\"measure:\", system, left, right);\n\n\t\tconst elements: SemanticElement[] = [BOS_ELEMENT];\n\n\t\tif (timeSignature) elements.push(...fractionToElems(timeSignature));\n\n\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tlet points = system.qualifiedSemantics(staff.semantics, threshold).filter((point) => point.x > left && point.x < right);\n\t\t\tpoints = solveOverlapping(points);\n\n\t\t\t// exlude tempo noteheads\n\t\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t});\n\n\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\n\t\t\tpoints.forEach((point) => {\n\t\t\t\tconst type = SemanticElementType[point.semantic];\n\t\t\t\tif (type) {\n\t\t\t\t\tlet y1 = point.y;\n\t\t\t\t\tlet y2 = point.y;\n\t\t\t\t\tif (type === SemanticElementType.vline_Stem) {\n\t\t\t\t\t\ty1 = point.extension.y1;\n\t\t\t\t\t\ty2 = point.extension.y2;\n\t\t\t\t\t}\n\n\t\t\t\t\telements.push({\n\t\t\t\t\t\tid: point.id,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\tx: point.x - left,\n\t\t\t\t\t\ty1: y1 + y0,\n\t\t\t\t\t\ty2: y2 + y0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new SemanticCluster({\n\t\t\tindex: measureIndex,\n\t\t\telements,\n\t\t});\n\t}\n\n\tgetRawClusters(threshold: number = 1): SemanticCluster[] {\n\t\t//const times = this.getMeasuresTime();\n\n\t\treturn Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => this.getRawCluster(mi, threshold /*, times[mi]*/));\n\t}\n\n\tmakeSpartito(logger: Logger = new DummyLogger()): Spartito {\n\t\tlet eventSystems: EventSystem[] = this.systems.map((system) => system.getEvents(this.maxStavesCount));\n\n\t\t/*if (this.topology) {\n\t\t\tconst clusters = this.topology.clusters;\n\n\t\t\t// [measure, staff, event]\n\t\t\tconst eventsColumns: ChordColumn[][][] = clusters\n\t\t\t\t.filter((cluster) => cluster.index < this.measureCount)\n\t\t\t\t.reduce((columns, cluster) => {\n\t\t\t\t\tconst { system, measures } = this.getMeasure(cluster.index);\n\t\t\t\t\tconst events = cluster.getEvents();\n\n\t\t\t\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\t\t\t\t\tconst x0 = measures.filter(Boolean)[0].left;\n\n\t\t\t\t\tconst staves = system.getStaffArray(this.maxStavesCount);\n\n\t\t\t\t\t// translate by staff & measure relative offset\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst staff = staves[event.staff];\n\t\t\t\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\t\t\t\t\t\tevent.ys = event.ys.map((y) => roundNumber(y - y0, 0.5));\n\n\t\t\t\t\t\tevent.left += x0;\n\t\t\t\t\t\tevent.right += x0;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst column = measures.map((measure, staffIndex) => {\n\t\t\t\t\t\tif (!measure) return [];\n\n\t\t\t\t\t\t//console.log(\"m:\", mi, \"s:\", staffIndex);\n\t\t\t\t\t\tconst localEvents = events.filter((event) => event.staff === staffIndex);\n\t\t\t\t\t\t//measure.assignModifiersOnEvents(localEvents);\n\t\t\t\t\t\tmeasure.assignAccessoriesOnEvents(localEvents);\n\n\t\t\t\t\t\treturn localEvents;\n\t\t\t\t\t});\n\n\t\t\t\t\tcolumns[cluster.index] = column;\n\n\t\t\t\t\treturn columns;\n\t\t\t\t}, []);\n\n\t\t\tconst breakSystemIndices = this.breakSystemIndices;\n\n\t\t\tconst basicEventSystems = eventSystems;\n\t\t\teventSystems = [];\n\n\t\t\tlet measures = 0;\n\t\t\tfor (const system of this.systems) {\n\t\t\t\tconst esys = system.getEventsFunctional(this.maxStavesCount, (si, mi) => eventsColumns[measures + mi] && eventsColumns[measures + mi][si], [], {\n\t\t\t\t\tuseXMap: false,\n\t\t\t\t});\n\n\t\t\t\tconst basicSys = basicEventSystems[system.index];\n\t\t\t\t//onst nullN = esys.columns.filter(c => !c).length;\n\t\t\t\t//if (nullN)\n\t\t\t\t//\tconsole.log(\"null:\", nullN, esys.columns.length);\n\t\t\t\tesys.columns = esys.columns.map((column, i) => (column ? column : basicSys.columns[i]));\n\n\t\t\t\tconst sysIndex = this.systems.indexOf(system);\n\t\t\t\tconst pageBreak = breakSystemIndices.includes(sysIndex);\n\t\t\t\tconst lastColumn = esys.columns[esys.columns.length - 1];\n\t\t\t\tif (lastColumn) {\n\t\t\t\t\tlastColumn.break = true;\n\t\t\t\t\tlastColumn.pageBreak = pageBreak;\n\t\t\t\t}\n\n\t\t\t\teventSystems.push(esys);\n\t\t\t\tmeasures += system.measureCount;\n\t\t\t}\n\t\t}*/\n\n\t\tconst staves = this.eventSystemsToTermStaves(eventSystems, logger);\n\n\t\t// assign staff basics for columns\n\t\teventSystems.forEach((sys, ri) => {\n\t\t\tsys.columns.forEach((column, mi) => {\n\t\t\t\tcolumn.basics = staves.map((staff) => {\n\t\t\t\t\tconst { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig } = staff.rows[ri][mi];\n\n\t\t\t\t\treturn { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig };\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tconst clusters = null; //this.topology && this.topology.clusters;\n\n\t\tconst measures = [].concat(\n\t\t\t...eventSystems.map((esys) =>\n\t\t\t\tesys.columns.map((column) => {\n\t\t\t\t\tconst measureIndex = column.measureIndex;\n\t\t\t\t\tconst { system, localIndex, left, right } = this.getMeasure(measureIndex);\n\n\t\t\t\t\tconst cluster = clusters && clusters.find((cluster) => cluster.index === measureIndex);\n\n\t\t\t\t\tconst staffYsFull = [];\n\t\t\t\t\tsystem.staves.forEach((staff) => (staffYsFull[staff.index] = staff.top + staff.staffY));\n\n\t\t\t\t\tconst patch = this.patches && this.patches.find((patch) => patch.measureIndex === measureIndex);\n\t\t\t\t\tconst events = patch ? patch.events : SpartitoMeasure.reorderEvents([].concat(...column.rows.map((row) => row.events)), staffYsFull);\n\n\t\t\t\t\tconst barTypes = Object.fromEntries(Object.entries(column.barTypes).map(([k, v]) => [k, v / system.staves.length]));\n\t\t\t\t\tconst indent = localIndex === 0 && system.indent;\n\n\t\t\t\t\treturn new SpartitoMeasure({\n\t\t\t\t\t\tmeasureIndex,\n\t\t\t\t\t\tstaffMask: esys.staffMask,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\t\tlocalIndex,\n\t\t\t\t\t\t\tleft,\n\t\t\t\t\t\t\tright,\n\t\t\t\t\t\t\tstaffYs: system.staves.map((staff) => staff.top + staff.staffY),\n\t\t\t\t\t\t\tstaffYsFull,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t//startX: column.startX,\n\t\t\t\t\t\t//width: column.width,\n\t\t\t\t\t\tduration: patch ? patch.duration : column.duration,\n\t\t\t\t\t\tevents,\n\t\t\t\t\t\tcontexts: column.rows.map((row) => row.contexts),\n\t\t\t\t\t\tmarks: column.marks,\n\t\t\t\t\t\tbreak: column.break,\n\t\t\t\t\t\tpageBreak: column.pageBreak,\n\t\t\t\t\t\tvoltaBegin: column.voltaBegin,\n\t\t\t\t\t\tvoltaEnd: column.voltaEnd,\n\t\t\t\t\t\talternative: column.alternative,\n\t\t\t\t\t\tbarTypes,\n\t\t\t\t\t\tindent,\n\t\t\t\t\t\tbasics: patch ? patch.basics : column.basics,\n\t\t\t\t\t\tmatrixH: cluster && cluster.matrixH,\n\t\t\t\t\t\tmatrixV: cluster && cluster.matrixV,\n\t\t\t\t\t\tvoices: patch ? patch.voices : null,\n\t\t\t\t\t\tpatched: !!patch,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tconst staffLayout = this.staffLayout;\n\t\tconst staffGroups = staffLayout.standaloneGroups.map((ids) => ids.map((id) => staffLayout.staffIds.indexOf(id)));\n\n\t\tthis.spartito = new Spartito({\n\t\t\tstavesCount: this.maxStavesCount,\n\t\t\tstaffGroups,\n\t\t\tmeasures,\n\t\t});\n\n\t\treturn this.spartito;\n\t}\n\n\tmakeMusicSheet(): MusicSheet {\n\t\tconst spartito = this.spartito || this.makeSpartito();\n\n\t\tif (!spartito.regulated) console.warn('[makeMusicSheet]\tspartito not regulated.');\n\n\t\tconst voiceStaves = spartito.makeVoiceStaves();\n\n\t\tconst { title, pageSize, unitSize, staffLayout, paperOptions, headers, instrumentDict } = this;\n\t\tconst measureLayout = this.getMeasureLayout();\n\n\t\treturn {\n\t\t\ttitle,\n\t\t\tpageSize,\n\t\t\tunitSize,\n\t\t\tmeasureLayout,\n\t\t\tstaffLayout,\n\t\t\tpaperOptions,\n\t\t\theaders,\n\t\t\tvoiceStaves,\n\t\t\tinstrumentDict,\n\t\t};\n\t}\n\n\tfindPoint(sid: string): PointPosition {\n\t\tfor (const system of this.systems) {\n\t\t\tfor (let si = 0; si < system.staves.length; ++si) {\n\t\t\t\tconst point = system.staves[si].semantics.find((point) => point.id === sid);\n\t\t\t\tif (point) {\n\t\t\t\t\tconst pageIndex = this.pages.findIndex((page) => page.systems.includes(system));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpoint,\n\t\t\t\t\t\tpageIndex,\n\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\tstaffIndex: si,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetMeasureSemantics(systemIndex: number, localIndex: number): SemanticPointInMeasure[] {\n\t\tconst system = this.systems[systemIndex];\n\t\tif (!system) return null;\n\n\t\tconst left = localIndex ? system.measureBars[localIndex - 1] : 0;\n\t\tconst right = system.measureBars[localIndex] || system.width;\n\n\t\treturn system.staves\n\t\t\t.map((staff, si) => {\n\t\t\t\tconst staffY = staff.top + staff.staffY;\n\t\t\t\treturn staff.semantics\n\t\t\t\t\t.filter((point) => point.x >= left && point.x < right)\n\t\t\t\t\t.map((point) => {\n\t\t\t\t\t\tconst [y1, y2] = Number.isFinite(point.extension?.y1) ? [point.extension.y1, point.extension.y2] : [point.y, point.y];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\tstaff: si,\n\t\t\t\t\t\t\tsy1: y1 + staffY,\n\t\t\t\t\t\t\tsy2: y2 + staffY,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1);\n\t}\n\n\tmakeTimewiseGraph({ store = false }: { store?: boolean } = {}): TimewiseGraph {\n\t\tif (!this.spartito) return null;\n\n\t\tconst measures = this.spartito.measures\n\t\t\t.filter((measure) => measure.events.length > 0)\n\t\t\t.map((measure) => {\n\t\t\t\tconst points = this.getMeasureSemantics(measure.position.systemIndex, measure.position.localIndex);\n\n\t\t\t\tconst graph = {\n\t\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\t\tleft: measure.position.left,\n\t\t\t\t\tright: measure.position.right,\n\t\t\t\t\tpoints,\n\t\t\t\t};\n\n\t\t\t\tif (store) measure.graph = graph;\n\n\t\t\t\treturn graph;\n\t\t\t});\n\n\t\treturn { measures };\n\t}\n\n\tgetTokenMap(): Map {\n\t\tconst map = new Map();\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => staff.measures.forEach((measure) => measure.tokens.forEach((token) => map.set(token.id, token))))\n\t\t);\n\n\t\treturn map;\n\t}\n\n\tassemble(confidenceThreshold: number = 1, logger: Logger = new DummyLogger()) {\n\t\tconst ids = new Map();\n\n\t\tconst append = (systemIndex, staffIndex, point) => {\n\t\t\tconst id = hashSemanticPoint(systemIndex, staffIndex, point);\n\t\t\tlogger.assert(!ids.has(id), 'semantic point hash conflicted:', id, point, ids.get(id));\n\n\t\t\tids.set(id, point);\n\t\t};\n\n\t\tthis.pages.forEach((page, index) => (page.index = index));\n\n\t\tlet measureIndex = 0;\n\t\tthis.systems.forEach((system, systemIndex) => {\n\t\t\tsystem.index = systemIndex;\n\t\t\tsystem.headMeasureIndex = measureIndex;\n\t\t\tsystem.prev = this.systems[systemIndex - 1] || null;\n\t\t\tsystem.next = this.systems[systemIndex + 1] || null;\n\n\t\t\tif (system.semantics && system.semantics.length) system.semantics.forEach((point) => append(systemIndex, null, point));\n\n\t\t\tsystem.assemble(confidenceThreshold, logger);\n\t\t\tmeasureIndex += system.measureCount;\n\t\t});\n\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tpage.systems.forEach((system) => (system.pageIndex = i));\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations }, logger);\n\t\t});\n\t}\n\n\tassembleSystem(system: System, confidenceThreshold: number = 1) {\n\t\tthis.systems.forEach((system, si) => (system.index = si));\n\t\tconst systemIndex = system.index;\n\n\t\tif (system.semantics && system.semantics.length) {\n\t\t\tsystem.semantics.forEach((point) => hashSemanticPoint(systemIndex, null, point));\n\t\t\tsystem.assemble(confidenceThreshold);\n\t\t}\n\t}\n\n\tmarkVoices(staves: VoicesStaff[]): void {\n\t\tconst tokenMap = this.getTokenMap();\n\t\tfor (const token of tokenMap.values()) token.voice = 0;\n\n\t\tconst vis = []\n\t\t\t.concat(...staves.map((staff, s) => (staff.voices || []).map((_, v) => [s, v])))\n\t\t\t.sort(([s1, v1], [s2, v2]) => v1 - v2 || s1 - s2)\n\t\t\t.map(([s, v]) => `${s}|${v}`);\n\n\t\tstaves.forEach((staff, si) =>\n\t\t\t(staff.voices || []).forEach((voice, vi) =>\n\t\t\t\tvoice.measures.forEach((measure) => {\n\t\t\t\t\tconst voiceIndex = vis.indexOf(`${si}|${vi}`);\n\n\t\t\t\t\tconst events = Object.values(measure.tickMap).filter((event) => event instanceof EventTerm) as EventTerm[];\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst notes = event.noteIds ? event.noteIds.map((id) => tokenMap.get(id)).filter(Boolean) : [];\n\t\t\t\t\t\tconst accessories = event.accessories ? event.accessories.map((acc) => tokenMap.get(acc.id)).filter(Boolean) : [];\n\t\t\t\t\t\t//console.log(\"notes:\", si, vi, mi, event.noteIds, notes, accessories);\n\n\t\t\t\t\t\t[...notes, ...accessories].forEach((token) => (token.voice |= 1 << voiceIndex));\n\n\t\t\t\t\t\tif (event.timeWarp) notes.forEach((note) => (note.timeWarped = true));\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t}\n\n\tasync replaceImageKeys(proc: (x: string | Buffer) => Promise): Promise {\n\t\tawait Promise.all([\n\t\t\t...(this.pages.map(async (page) => {\n\t\t\t\tif (page.source) page.source.url = await proc(page.source.url);\n\t\t\t}) as Promise[]),\n\t\t\t...this.systems.map((system) =>\n\t\t\t\tPromise.all([\n\t\t\t\t\tproc(system.backgroundImage).then((key) => (system.backgroundImage = key)),\n\t\t\t\t\t...(system.staves.map(async (staff) => {\n\t\t\t\t\t\tstaff.backgroundImage = await proc(staff.backgroundImage);\n\t\t\t\t\t\tstaff.maskImage = await proc(staff.maskImage);\n\t\t\t\t\t}) as Promise[]),\n\t\t\t\t])\n\t\t\t),\n\t\t]);\n\t}\n\n\tinferenceStaffLayout(): void {\n\t\t// inference the complete layout\n\t\tconst staffTotal = Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t\tthis.staffLayoutCode = Array(staffTotal).fill('').join(',');\n\n\t\tconst completeSystems = this.systems.filter((system) => system.staves.length === staffTotal && system.bracketsAppearance);\n\t\tif (!completeSystems.length) return; // no enough evidence\n\n\t\tconst candidateCodes = completeSystems\n\t\t\t.map((system) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst layout = staffLayout.parseCode(system.bracketsAppearance);\n\t\t\t\t\tif (layout.staffIds.length !== system.staves.length) return null;\n\n\t\t\t\t\treturn system.bracketsAppearance;\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t\tif (!candidateCodes.length) return; // no valid layout\n\n\t\tconst codeCounting = candidateCodes.reduce((acc, code) => {\n\t\t\tconst count = acc[code] || 0;\n\t\t\tacc[code] = count + 1;\n\t\t\treturn acc;\n\t\t}, {} as { [code: string]: number });\n\t\tconst maxCount = Math.max(...Object.values(codeCounting));\n\t\tconst code = Object.entries(codeCounting).find(([_, count]) => count === maxCount)[0];\n\n\t\t// added connection lines between braces {-}\n\t\tconst connectedCode = code.replace(/\\{,*\\}/g, (match) => match.replace(/,/g, '-'));\n\t\tconst layout = staffLayout.parseCode(connectedCode);\n\n\t\tthis.staffLayoutCode = connectedCode;\n\t\t//console.log(\"complete code:\", code);\n\n\t\t// inference systems' mask\n\t\tlet lastSys: System = null;\n\t\tfor (const system of this.systems) {\n\t\t\tif (lastSys && system.staves.length === lastSys.staves.length && system.bracketsAppearance === lastSys.bracketsAppearance) {\n\t\t\t\tsystem.staffMaskChanged = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (system.staves.length < staffTotal && system.bracketsAppearance) {\n\t\t\t\t// validate the system brackets code\n\t\t\t\ttry {\n\t\t\t\t\tif (!staffLayout.parseCode(system.bracketsAppearance)) continue;\n\t\t\t\t} catch (_) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst search = (bits: (0 | 1)[]): number => {\n\t\t\t\t\tif (bits.length > layout.staffIds.length) return null;\n\n\t\t\t\t\tif (bits.reduce((sum, bit) => sum + bit, 0) === system.staves.length) return bitsToMask(bits);\n\n\t\t\t\t\tfor (const bit of [1, 0]) {\n\t\t\t\t\t\tconst bb = [...bits, bit] as (0 | 1)[];\n\t\t\t\t\t\tconst code1 = layout.partialMaskCode(bb);\n\t\t\t\t\t\tif (code1 === system.bracketsAppearance) return bitsToMask(bb);\n\t\t\t\t\t\telse if (system.bracketsAppearance.startsWith(code1)) {\n\t\t\t\t\t\t\tconst result = search(bb);\n\t\t\t\t\t\t\tif (result) return result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t\tconst mask = search([]);\n\t\t\t\t//console.log(\"mask:\", system.bracketsAppearance, mask.toString(2));\n\n\t\t\t\tsystem.staffMaskChanged = !lastSys || mask !== lastSys.staffMask ? mask : null;\n\t\t\t}\n\n\t\t\tlastSys = system;\n\t\t}\n\t}\n\n\tassignBackgroundForMeasure(measure: SpartitoMeasure): void {\n\t\tmeasure.backgroundImages = [];\n\n\t\tconst system = this.systems[measure.position.systemIndex];\n\t\tif (system.backgroundImage) {\n\t\t\tmeasure.backgroundImages.push({\n\t\t\t\turl: system.backgroundImage,\n\t\t\t\tposition: system.imagePosition,\n\t\t\t\toriginal: true,\n\t\t\t});\n\t\t}\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tif (!system.backgroundImage && staff.backgroundImage)\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.backgroundImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t\toriginal: true,\n\t\t\t\t});\n\n\t\t\tif (staff.maskImage) {\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.maskImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tblackoutFakeNotes(scope: 'patched' | 'perfect' | 'all' = 'patched'): string[] {\n\t\tif (!this.spartito) return;\n\n\t\tlet inScope = (_) => true;\n\t\tswitch (scope) {\n\t\t\tcase 'patched':\n\t\t\t\tinScope = (measure) => measure.patched;\n\t\t\t\tbreak;\n\t\t\tcase 'perfect':\n\t\t\t\tinScope = (measure) => measure.patched || (measure.regulated && evaluateMeasure(measure).perfect);\n\t\t\t\tbreak;\n\t\t}\n\t\tconst measures = this.spartito.measures.filter(inScope);\n\n\t\tconst fakeIds = measures.reduce((ids, measure) => {\n\t\t\tif (!measure.regulated) return;\n\n\t\t\tconst voicedIds = measure.voices.flat(1);\n\t\t\tconst fakeChords = measure.events.filter((event) => !event.rest && !event.grace && !voicedIds.includes(event.id));\n\n\t\t\tfakeChords.forEach((event) => event.noteIds && ids.push(...event.noteIds));\n\n\t\t\treturn ids;\n\t\t}, [] as string[]);\n\t\tconst fakeIdSet = new Set(fakeIds);\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\tconst blackIds = staff.semantics.filter((point) => fakeIdSet.has(point.id)).map((point) => point.id);\n\t\t\t\tsystem.sidBlackList.push(...blackIds);\n\t\t\t})\n\t\t);\n\n\t\treturn fakeIds;\n\t}\n\n\tgetMeasureLayout(): measureLayout.MeasureLayout {\n\t\tconst code = this.spartito && this.spartito.measureLayoutCode;\n\t\tif (code) {\n\t\t\ttry {\n\t\t\t\treturn measureLayout.parseCode(code);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.debug('invalid measure layout code:', err);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t*splitToSingleScoresGen(): Generator {\n\t\tthis.assemble();\n\t\tconst startSysIndices = this.systems.filter((system) => system.index > 0 && system.indent && system.timeSignatureOnHead).map((system) => system.index);\n\n\t\tif (!startSysIndices.length) {\n\t\t\tyield this.deepCopy();\n\t\t\treturn;\n\t\t}\n\n\t\tconst templateScore = new Score({ ...this, pages: [], topology: undefined, spartito: undefined, patches: undefined });\n\n\t\t// clear temporary objects before deep dopy\n\t\tthis.pages.forEach((page) => {\n\t\t\tdelete page.tokens;\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tdelete system.tokens;\n\t\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\t\tstaff.measures = [];\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tlet startSysIndex = 0;\n\t\tfor (const endSysIndex of [...startSysIndices, this.systems.length]) {\n\t\t\tconst sysInRange = (system) => system.index >= startSysIndex && system.index < endSysIndex;\n\t\t\tconst pages = this.pages\n\t\t\t\t.filter((page) => page.systems.some(sysInRange))\n\t\t\t\t.map((page) => {\n\t\t\t\t\tconst { systems, ...fields } = page;\n\t\t\t\t\treturn new Page({ ...fields, systems: systems.filter(sysInRange).map((system) => new System({ ...system })) });\n\t\t\t\t});\n\n\t\t\tconst newScore = templateScore.deepCopy();\n\t\t\tnewScore.headers.SubScoreSystem = `${startSysIndex}-${endSysIndex - 1}`;\n\t\t\tnewScore.headers.SubScorePage = `${pages[0].index}-${pages[pages.length - 1].index}`;\n\n\t\t\t//newScore.pages = pages.map((page) => page.deepCopy());\n\t\t\tnewScore.pages = pages;\n\t\t\tnewScore.assemble();\n\t\t\tnewScore.inferenceStaffLayout();\n\n\t\t\tstartSysIndex = endSysIndex;\n\n\t\t\tyield newScore;\n\t\t}\n\t}\n\n\tsplitToSingleScores(): Score[] {\n\t\treturn [...this.splitToSingleScoresGen()];\n\t}\n}\n\nexport { PaperOptions, Score, Page, System, Staff, Measure, MeasureValidation };\nexport type { SemanticPointInMeasure };\n","import type { MeasureLayout } from './measureLayout';\nimport * as measureLayout from './measureLayout';\nimport grammar from './grammar.jison';\nimport { recoverJSON } from '../starry/aux_/typedJSON';\n\nconst parseCode = (code: string): MeasureLayout => {\n\tconst raw = grammar.parse(code);\n\n\tif (raw?.data) return recoverJSON(raw.data, measureLayout);\n\n\treturn null;\n};\n\nexport { parseCode };\n","import { RegulationSolution, RegulationSolutionEvent, EventPredisposition } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport { argmax, frac } from './utils';\nimport { WHOLE_DURATION, StemBeam } from './term';\nimport { Logger, DummyLogger } from './logger';\n\ninterface BeadPicker {\n\tn_seq: number;\n\tquota: number;\n\tcost: number; // duration in milliseconds\n\n\tpredictCluster(cluster: EventCluster, tip: number): Promise;\n}\n\nenum BeadType {\n\tPass = 'i',\n\tDivision = 'd',\n\tDots = 'o',\n}\n\nconst DIVISION_NAMES = ['whole', 'half', 'quarter', 'eighth', 'sixteenth', 'thirtysecond', 'sixtyfourth', '128th', '256th'];\n\ninterface BeadNodeInitData {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n}\n\nconst RESIDUE_LOSS_WEIGHT = 0.2;\nconst VOICEN_LOSS_WEIGHT = 0.002;\nconst SPACE_LOSS_WEIGHT = 0.4 / WHOLE_DURATION;\nconst PRETENTIOUSNESS_LOSS_WEIGHT = 0.02;\n\nconst POSSIBILITY_LOW_BOUNDARY = 1e-12;\n\nconst PRETENTIOUSNESS_CLIP = 100;\n\ninterface ClusterEvaluation {\n\ttickErr: number;\n\ttwist: number;\n\tresidue: number;\n\tendTick: number;\n\tfatalError: boolean;\n\tvoiceN: number;\n\tspaceDuration: number;\n\tpretentiousness: number;\n\tloss: number;\n}\n\ninterface ElementState {\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tbeam: StemBeam;\n\tstemDirection: string;\n\tgrace: boolean;\n\ttimeWarped: boolean;\n\tfullMeasure: boolean; // full measure rest\n\tfake: boolean;\n\torder: number;\n\tpredisposition: EventPredisposition;\n}\n\ninterface ClusterState {\n\telements: ElementState[];\n}\n\nconst STEM_DIRECTION_OPTIONS = [undefined, 'u', 'd'];\n\nconst BEAM_OPTIONS = [undefined, StemBeam.Open, StemBeam.Continue, StemBeam.Close];\n\nconst saveClusterState = (cluster: EventCluster): ClusterState => ({\n\telements: cluster.elements.map((elem) => ({\n\t\ttick: elem.tick!,\n\t\tdivision: elem.division!,\n\t\tdots: elem.dots!,\n\t\tbeam: elem.beam!,\n\t\tstemDirection: elem.stemDirection!,\n\t\tgrace: elem.grace!,\n\t\ttimeWarped: elem.timeWarped!,\n\t\tfullMeasure: elem.fullMeasure!,\n\t\tfake: elem.fake!,\n\t\torder: elem.order!,\n\t\tpredisposition: elem.predisposition!,\n\t})),\n});\n\nconst restoreClusterState = (cluster: EventCluster, state: ClusterState): void => cluster.elements.forEach((elem, i) => Object.assign(elem, state.elements[i]));\n\nconst measurePretentious = (p) => Math.min(PRETENTIOUSNESS_CLIP, -Math.log(p));\n\ninterface BeadDeductionContext {\n\tpicker: BeadPicker;\n\tlogger: Logger;\n\tptFactor: number; // pretentiousness tolerance factor\n}\n\nclass BeadNode {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n\n\tchildren: Record;\n\taccessCount: number;\n\n\tconstructor(data: BeadNodeInitData) {\n\t\tObject.assign(this, data);\n\n\t\t//this.possibilities = this.possibilities.map((x, i) => (this.type === BeadType.Pass && !i) ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\n\t\tthis.children = {};\n\t\tthis.accessCount = 0;\n\t}\n\n\tnextBranch(): number | null {\n\t\tconst ps = this.possibilities.map((p, i) => p / (this.children[i] ? this.children[i].accessCount + 1 : 1));\n\t\t//const ps = this.possibilities.map((p, i) => p * (this.children[i] ? (2 ** -this.children[i].accessCount) : 1));\n\n\t\tif (ps.every((p) => !p)) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn argmax(ps);\n\t}\n\n\tget currentElem(): EventElement {\n\t\treturn this.cluster.elements[this.elemIndex];\n\t}\n\n\tbranchID(ni: number): string {\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\treturn `i_${ni}`;\n\t\t\tcase BeadType.Division:\n\t\t\t\treturn DIVISION_NAMES[ni];\n\t\t\tcase BeadType.Dots:\n\t\t\t\treturn 'o' + '.'.repeat(ni);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tasync deduce({ picker, logger, ptFactor }: BeadDeductionContext, deep: number = 0): Promise {\n\t\t++this.accessCount;\n\n\t\tconst ni = this.nextBranch()!;\n\t\tlogger.debug(String.fromCodePoint(0x1f349) + ' '.repeat(deep), this.branchID(ni), this.accessCount > 1 ? `[${this.accessCount}]` : '');\n\n\t\tif (!Number.isInteger(ni) || ni < 0) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tthis.pretentiousness += measurePretentious(this.possibilities[ni]);\n\t\tif (this.pretentiousness > PRETENTIOUSNESS_CLIP * ptFactor) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tlet selfEval: null | ClusterEvaluation = null;\n\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\t{\n\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\tconst element = this.cluster.elements[ni];\n\t\t\t\t\tconsole.assert(element, 'null element:', ni, this.cluster.elements.length);\n\t\t\t\t\tif (element.type === EventElementType.EOS) {\n\t\t\t\t\t\tselfEval = evaluateCluster(this.cluster, tip, this.pretentiousness);\n\t\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.cluster.elements[0].order = tip;\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip + 1)).map((x, i) =>\n\t\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 || i === this.cluster.elements.length - 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: 0,\n\t\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.order = tip;\n\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tconsole.assert(element.predisposition, 'no predisposition:', ni, this.possibilities);\n\t\t\t\t\t\t\tconst possibilities = element.predisposition!.divisionVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: ni,\n\t\t\t\t\t\t\t\ttype: BeadType.Division,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Division:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.division = ni;\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tconst possibilities = this.currentElem.predisposition!.dotsVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Dots,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Dots:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.dots = ni;\n\n\t\t\t\t\tselfEval = evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip)).map((x, i) =>\n\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst evaluation = await this.children[ni].deduce({ picker, logger, ptFactor }, deep + 1);\n\t\tif (selfEval && evaluation.fatalError) {\n\t\t\tconst tip = this.currentElem.order!;\n\t\t\tthis.cluster.elements.forEach((elem) => {\n\t\t\t\tif (elem.order! > tip) elem.order = undefined;\n\t\t\t});\n\n\t\t\t// clear children data\n\t\t\tthis.cluster.elements.forEach((elem) => (elem.order = elem.order! > this.currentElem.order! ? undefined : elem.order));\n\t\t\tthis.cluster.elements[this.cluster.elements.length - 1].tick = selfEval.endTick;\n\n\t\t\treturn selfEval;\n\t\t}\n\n\t\treturn evaluation;\n\t}\n}\n\nconst estimateElementDuration = (elem: EventElement) => WHOLE_DURATION * 2 ** -elem.division! * (2 - 2 ** -elem.dots!);\n\nconst evaluateCluster = (cluster: EventCluster, tip: number, pretentiousness: number): ClusterEvaluation => {\n\tconst events = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order) && elem.order! < tip\n\t);\n\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\tconst eos = cluster.elements[cluster.elements.length - 1];\n\n\tlet tick = 0;\n\tlet lastOrder = 0;\n\tlet endTick = 0;\n\tlet voiceN = 1;\n\n\t// [x, tick, estimated tick]\n\tconst scales: [number, number, number][] = [[eos.x, cluster.signatureDuration, cluster.signatureDuration]];\n\n\tlet totalDuration = 0;\n\n\t// assign tick for events\n\tevents.forEach((event) => {\n\t\tif (event.order! > lastOrder + 1) {\n\t\t\ttick = 0;\n\t\t\t++voiceN;\n\t\t}\n\n\t\tconst referenceScale = scales.find((s) => s[1] >= tick);\n\t\tif (referenceScale && event.x > referenceScale[0] + 3) {\n\t\t\tconst nearScale = scales.reduce((n, s) => (Math.abs(event.predisposition!.tick - s[2]) < Math.abs(event.predisposition!.tick - n[2]) ? s : n));\n\t\t\tif (Math.abs(nearScale[0] - event.x) < 2) tick = Math.max(tick, nearScale[1]);\n\t\t}\n\n\t\tevent.tick = tick;\n\n\t\tconst si = Math.max(\n\t\t\t0,\n\t\t\tscales.findIndex((s) => s[0] > event.x)\n\t\t);\n\t\tscales.splice(si, 0, [event.x, event.tick, event.predisposition!.tick]);\n\n\t\t//let duration = WHOLE_DURATION * (2 ** -event.division!) * (2 - 2 ** -event.dots!);\n\t\tlet duration = estimateElementDuration(event);\n\t\tif (event.predisposition!.timeWarped > 0.5) duration = (duration * 2) / 3;\n\n\t\ttick += duration;\n\t\ttotalDuration += duration;\n\t\tendTick = Math.max(endTick, tick);\n\t\tlastOrder = event.order!;\n\t});\n\n\t/*const pretentiousness = events.reduce((p, event) => p +\n\t\tmeasurePretentious(event.predisposition!.divisionVector![event.division!]) +\n\t\tmeasurePretentious(event.predisposition!.dotsVector![event.dots!]), 0);*/\n\n\tif (endTick > 0) cluster.elements[cluster.elements.length - 1].tick = endTick;\n\n\tconst xSpan = cluster.elements[cluster.elements.length - 1].pivotX! - cluster.elements[1].pivotX!;\n\tconst tickSpan = Math.max(...events.map((e) => e.tick!), endTick);\n\n\t// tick twist loss\n\tconst eventsXOrder = [...events].sort((e1, e2) => e1.pivotX! - e2.pivotX!);\n\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\tconst e1 = eventsXOrder[i];\n\t\tconst dx = e2.pivotX! - e1.pivotX!;\n\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\tif (!dt) return dx / xSpan;\n\n\t\tconst rate = Math.atan2(dt / tickSpan, dx / xSpan);\n\n\t\t//if (dt < 0)\n\t\t//\tconsole.log(\"minus dt:\", dt, dx, rate);\n\n\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t});\n\t//console.debug(\"tickTwists:\", tickTwists, eventsXOrder);\n\n\tconst twist = Math.max(...tickTwists, 0);\n\n\tconst tickMSE = events.map((event) => (event.tick! - event.predisposition!.tick) ** 2);\n\t//console.debug(\"tickMSE:\", tickMSE.map(Math.sqrt));\n\tconst tickErr = tickMSE.length ? Math.sqrt(tickMSE.reduce((sum, mse) => sum + mse, 0) / tickMSE.length) : 0;\n\t//console.debug(\"tick/twist:\", tickErr / WHOLE_DURATION, twist);\n\n\tconst residueElements = cluster.elements.filter(\n\t\t(elem) =>\n\t\t\t[EventElementType.CHORD, EventElementType.REST].includes(elem.type) &&\n\t\t\t!(Number.isInteger(elem.order) && elem.order! < tip) &&\n\t\t\t!(elem.predisposition && elem.predisposition.fakeP > 0.5)\n\t);\n\tconst residue = residueElements.length;\n\n\tconst fatalError = twist >= 1 || endTick > cluster.signatureDuration;\n\n\t//const spaceDuration = Math.max(0, cluster.signatureDuration - endTick);\n\tconst spaceDuration = Math.max(0, cluster.signatureDuration - totalDuration / voiceN);\n\n\tconst loss =\n\t\ttickErr / WHOLE_DURATION +\n\t\ttwist +\n\t\tresidue * RESIDUE_LOSS_WEIGHT +\n\t\tvoiceN * VOICEN_LOSS_WEIGHT +\n\t\tspaceDuration * SPACE_LOSS_WEIGHT +\n\t\tpretentiousness * PRETENTIOUSNESS_LOSS_WEIGHT;\n\n\treturn {\n\t\ttickErr,\n\t\ttwist,\n\t\tresidue,\n\t\tendTick,\n\t\tfatalError,\n\t\tvoiceN,\n\t\tspaceDuration,\n\t\tpretentiousness,\n\t\tloss,\n\t};\n};\n\nconst solveCluster = async (\n\tcluster: EventCluster,\n\tpicker: BeadPicker,\n\tlogger: Logger,\n\tquota: number = 200,\n\tstopLoss: number = 0,\n\tptFactor: number = 1\n): Promise => {\n\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\tconst suc0 = await picker.predictCluster(cluster, 1);\n\n\tconst root = new BeadNode({ cluster, elemIndex: 0, pretentiousness: 0, type: BeadType.Pass, possibilities: suc0 });\n\n\tlet bestEvaluation: ClusterEvaluation | null = null;\n\tlet bestState: ClusterState | null = null;\n\n\tpicker.quota = quota;\n\twhile (picker.quota) {\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\n\t\tconst evaluation = await root.deduce({ picker, logger, ptFactor });\n\n\t\tlogger.debug('loss:', evaluation);\n\n\t\tif (!bestEvaluation || evaluation.loss < bestEvaluation.loss) {\n\t\t\tbestEvaluation = evaluation;\n\n\t\t\tcluster.duration = bestEvaluation.endTick;\n\t\t\tbestState = saveClusterState(cluster);\n\n\t\t\tif (Number.isFinite(stopLoss) && bestEvaluation.loss <= stopLoss!) break;\n\t\t}\n\n\t\tif (!Number.isFinite(root.accessCount)) break;\n\t}\n\tlogger.debug('bestEvaluation:', bestEvaluation);\n\n\trestoreClusterState(cluster, bestState!);\n\n\t// solve residue elements\n\tconst fixedEvents = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\tconst pendingEvents = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !Number.isInteger(elem.order)\n\t);\n\tif (fixedEvents.length) {\n\t\tpendingEvents.forEach((event) => {\n\t\t\t// exclude fake events (includes grace, fullMeasure) from voices\n\t\t\tevent.tick = undefined;\n\n\t\t\tif (event.predisposition!.fakeP < 0.5) {\n\t\t\t\t//const near = fixedEvents.reduce((n, e) => Math.abs(e.predisposition!.tick - event.predisposition!.tick) < Math.abs(n.predisposition!.tick - event.predisposition!.tick) ? e : n);\n\t\t\t\tconst duration = estimateElementDuration(event);\n\t\t\t\tconst candidates = fixedEvents.filter((e) => e.tick! + duration <= bestEvaluation!.endTick);\n\t\t\t\tif (candidates.length) {\n\t\t\t\t\tconst near = candidates.reduce((n, e) => (Math.abs(e.x - event.x) < Math.abs(n.x - event.x) ? e : n));\n\t\t\t\t\tevent.tick = near.tick;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfixedEvents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t// properties\n\t[...fixedEvents, ...pendingEvents].forEach((event) => {\n\t\tevent.grace = !Number.isFinite(event.tick) && event.predisposition!.grace;\n\t\tevent.timeWarped = event.predisposition!.timeWarped > 0.5;\n\t\tevent.fullMeasure = event.predisposition!.fullMeasure > 0.5;\n\t\tevent.stemDirection = STEM_DIRECTION_OPTIONS[argmax(event.predisposition!.stemDirectionVector)];\n\t\tevent.beam = BEAM_OPTIONS[argmax(event.predisposition!.beamVector)];\n\t});\n\n\t// construct matrixH\n\tconst ids = cluster.elements.map((e) => e.index);\n\tconst idx = (id: number): number => ids.indexOf(id);\n\tcluster.matrixH = cluster.elements.map(() => Array(cluster.elements.length).fill(0));\n\tfixedEvents.forEach((event, i) => {\n\t\tconst lastEvent = fixedEvents[i - 1];\n\t\tif (!lastEvent || lastEvent.order! < event.order! - 1) {\n\t\t\tcluster.matrixH![idx(event.index!)][0] = 1;\n\t\t\tif (lastEvent) cluster.matrixH![cluster.elements.length - 1][idx(lastEvent.index!)] = 1;\n\t\t} else {\n\t\t\tconsole.assert(\n\t\t\t\tcluster.matrixH![idx(event.index!)] && Number.isFinite(cluster.matrixH![idx(event.index!)][idx(lastEvent.index!)]),\n\t\t\t\t'matrixH out of range:',\n\t\t\t\tevent.index,\n\t\t\t\tlastEvent.index,\n\t\t\t\tcluster.matrixH!.length\n\t\t\t);\n\n\t\t\tcluster.matrixH![idx(event.index!)][idx(lastEvent.index!)] = 1;\n\t\t}\n\t});\n\tif (!pendingEvents.length && fixedEvents.length) cluster.matrixH![cluster.elements.length - 1][idx(fixedEvents[fixedEvents.length - 1].index!)] = 1;\n\n\treturn bestEvaluation!;\n};\n\ninterface BeadSolverOptions {\n\tpicker: BeadPicker;\n\tstopLoss?: number;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tptFactor?: number;\n\tlogger?: Logger;\n}\n\nconst solveMeasure = async (measure: SpartitoMeasure, options: BeadSolverOptions): Promise => {\n\tconst { stopLoss = 0.09, quotaMax = 1000, quotaFactor = 5, ptFactor = 1, logger = new DummyLogger() } = options;\n\n\tlet worstLoss = 0;\n\n\tconst clusters = measure.createClusters();\n\tfor (const cluster of clusters) {\n\t\tconst quota = Math.min(quotaMax, Math.ceil(cluster.elements.length * quotaFactor));\n\t\tlogger.info(`[measure-${measure.measureIndex}]`, quota);\n\t\tconst { loss } = await solveCluster(cluster, options.picker, logger, quota, stopLoss, ptFactor);\n\t\tworstLoss = Math.max(worstLoss, loss);\n\t}\n\n\tconst voices = [] as number[][];\n\n\tconst durations = [] as number[];\n\n\tconst solutionEvents = [] as RegulationSolutionEvent[];\n\n\tclusters.forEach((cluster) => {\n\t\tconst events = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\t\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t\tif (!events.length) return;\n\n\t\tlet voice = [] as number[];\n\t\tvoices.push(voice);\n\t\tlet lastOrder = 0;\n\t\tevents.forEach((event) => {\n\t\t\tif (event.fullMeasure || event.grace || event.tremoloCatcher) return;\n\n\t\t\tif (event.order! > lastOrder + 1) {\n\t\t\t\tvoice = [event.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t} else voice.push(event.index!);\n\n\t\t\tlastOrder = event.order!;\n\t\t});\n\n\t\tlet tipElem = events[events.length - 1];\n\n\t\t// complete voices from pending events\n\t\tconst pendingEvents = cluster.elements.filter(\n\t\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isFinite(elem.tick) && !Number.isInteger(elem.order)\n\t\t);\n\t\twhile (pendingEvents.length) {\n\t\t\tconst ei = pendingEvents.findIndex((e) => e.tick! >= tipElem.tick! + estimateElementDuration(tipElem));\n\t\t\tif (ei >= 0) voice.push(pendingEvents.splice(ei, 1)[0].index!);\n\t\t\telse {\n\t\t\t\ttipElem = pendingEvents.splice(0, 1)[0];\n\t\t\t\tvoice = [tipElem.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\t\t}\n\n\t\tif (events.some((elem) => !elem.fullMeasure && Number.isInteger(elem.order))) {\n\t\t\tconst eos = cluster.elements.find((elem) => elem.type === EventElementType.EOS);\n\t\t\tdurations.push(eos!.tick!);\n\t\t}\n\n\t\tconst eventMap = measure.eventMap;\n\n\t\tconst tickSet = cluster.elements.reduce((set, elem) => {\n\t\t\tif (Number.isFinite(elem.tick)) set.add(elem.tick!);\n\t\t\treturn set;\n\t\t}, new Set());\n\t\tconst ticks = Array.from(tickSet).sort((t1, t2) => t1 - t2);\n\n\t\t// fill solutionEvents\n\t\tevents.forEach((elem) => {\n\t\t\tconst event = eventMap[elem.index!];\n\t\t\tif (event) {\n\t\t\t\tsolutionEvents.push({\n\t\t\t\t\tid: event.id!,\n\t\t\t\t\ttick: elem.tick!,\n\t\t\t\t\ttickGroup: ticks.indexOf(elem.tick!),\n\t\t\t\t\tdivision: elem.division !== event.division ? elem.division : undefined,\n\t\t\t\t\tdots: elem.dots !== event.dots ? elem.dots : undefined,\n\t\t\t\t\ttimeWarp: elem.timeWarped ? frac(2, 3) : undefined, // TODO:\n\t\t\t\t\tbeam: elem.beam !== event.beam ? elem.beam : undefined,\n\t\t\t\t\tgrace: elem.grace !== !!event.grace ? elem.grace : undefined,\n\t\t\t\t\tfullMeasure: elem.fullMeasure || undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\tconst estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n\n\treturn {\n\t\tvoices: voices.filter((voice) => voice.length),\n\t\tduration: Math.max(...durations),\n\t\tevents: solutionEvents,\n\t\tpriority: -worstLoss,\n\t\testimatedDuration,\n\t};\n};\n\ninterface GlimpseMeasureOptions {\n\tpicker: BeadPicker;\n\tresetSignatureForDoubtfulOnly?: boolean;\n}\n\nconst glimpseMeasure = async (measure: SpartitoMeasure, { picker, resetSignatureForDoubtfulOnly }: GlimpseMeasureOptions): Promise => {\n\tconst clusters = measure.createClusters();\n\tconst eventMap = measure.eventMap;\n\n\tfor (const cluster of clusters) {\n\t\tif (!resetSignatureForDoubtfulOnly || measure.doubtfulTimesig) cluster.signatureDuration = 0; // re-estimate measure duration\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\t\tawait picker.predictCluster(cluster, 1);\n\n\t\tcluster.elements\n\t\t\t.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type))\n\t\t\t.forEach((elem) => {\n\t\t\t\tconst event = eventMap[elem.index!];\n\t\t\t\tevent.predisposition = elem.predisposition!;\n\t\t\t});\n\t}\n\n\tmeasure.estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n};\n\nconst estimateMeasure = async (measure: SpartitoMeasure, picker: BeadPicker): Promise =>\n\tglimpseMeasure(measure, { picker, resetSignatureForDoubtfulOnly: true });\n\nexport { BeadPicker, solveCluster, solveMeasure, estimateMeasure, glimpseMeasure };\n","import * as starry from '../starry';\nimport { MidiJson, ScoreJSON } from './types';\nimport { ChordColumn, Staff } from '../starry';\nimport { parseCode } from '../staffLayout';\nimport { MidiEvent } from '../performer';\n\nexport interface FindScoreResource {\n\tscoreJson: ScoreJSON;\n\tmidiJson: MidiJson;\n}\n\nconst SUPPORT_CLEF_TYPES = [starry.TokenType.ClefG, starry.TokenType.ClefF, starry.TokenType.ClefC];\n\nconst tokenToText = (token: starry.ContextedTerm) => {\n\tlet text = null;\n\tswitch (token.tokenType) {\n\t\tcase starry.TokenType.ClefG:\n\t\t\ttext = 'Treble';\n\t\t\tbreak;\n\t\tcase starry.TokenType.ClefF:\n\t\t\ttext = 'Bass';\n\t\t\tbreak;\n\t\tcase starry.TokenType.ClefC:\n\t\t\tif (token.y === -1) {\n\t\t\t\ttext = 'Tenor';\n\t\t\t} else {\n\t\t\t\ttext = 'Alto';\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\treturn text;\n};\n\nexport function encodeFindResource(score: starry.Score): FindScoreResource {\n\tconst perform = score.spartito.perform();\n\tconst maskImages = score.systems.map((sy) => sy.staves.map((st) => st?.maskImage)).flat();\n\tconst hasMaskImage = maskImages.filter(Boolean).length > maskImages.length / 2;\n\n\tconst scoreJson: ScoreJSON = {} as ScoreJSON;\n\n\tconst idsMap = new Map(); // starry内部ID到find播放器id的映射\n\tconst idsXMap = new Map(); // 内部ID和元素X坐标的映射\n\tconst idStaffIndexMap = new Map(); // 内部ID和元素所属part的内部staff索引\n\n\tscoreJson.unitSize = score.unitSize;\n\n\tscoreJson.title = {\n\t\ttitle: score.title,\n\t} as any;\n\n\tconst coverTexts: {\n\t\tconfidence: number;\n\t\tfontSize: number;\n\t\tid: string;\n\t\ttext: string;\n\t\ttextType: 'Title' | 'Author';\n\t\ttype: starry.TokenType;\n\t\twidth_: number;\n\t\tx: number;\n\t\ty: number;\n\t}[] = score.pages[0].tokens as any;\n\n\tif (Array.isArray(coverTexts) && coverTexts.length > 0) {\n\t\tconst [title, ...subtitles] = coverTexts\n\t\t\t.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Title')\n\t\t\t.sort((a, b) => b.fontSize - a.fontSize);\n\n\t\tif (title) {\n\t\t\tscoreJson.title.title = title.text;\n\t\t\tscoreJson.title.t = { size: title.fontSize };\n\t\t}\n\n\t\tif (subtitles?.length > 0) {\n\t\t\tsubtitles.sort((a, b) => a.y - b.y);\n\t\t\tscoreJson.title.subtitle = subtitles.map((x) => x.text).join('\\n');\n\t\t\tscoreJson.title.s = { size: subtitles.reduce((a, n) => a + n.fontSize, 0) / subtitles.length };\n\t\t}\n\n\t\tconst authors = coverTexts.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Author' && x.x > score.pages[0].width / 2);\n\n\t\tif (authors.length > 0) {\n\t\t\tscoreJson.title.composer = authors.map((x) => x.text).join('\\n');\n\t\t\tscoreJson.title.c = { size: authors.reduce((a, n) => a + n.fontSize, 0) / authors.length };\n\t\t}\n\t}\n\n\tscoreJson.page = {\n\t\tw: score.pages[0].width,\n\t\th: score.pages[0].height,\n\t};\n\n\tscoreJson.pages = score.pages.map((page) => {\n\t\tconst bgWidth = page.source.dimensions.width / page.source.interval;\n\t\tconst bgHeight = page.source.dimensions.height / page.source.interval;\n\n\t\tconst [a, b, c, d] = page.source.matrix;\n\n\t\treturn {\n\t\t\tsrc: page.source.url, // 本页本地图片URL\n\t\t\tw: bgWidth, // 背景图\n\t\t\th: bgHeight, // 背景图\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tl1: score.systems.indexOf(page.systems[0]), // 本页起始system编号\n\t\t\tls: page.systems.length, // 本页system数量\n\t\t\tmatrix: [\n\t\t\t\ta,\n\t\t\t\tb,\n\t\t\t\tc,\n\t\t\t\td,\n\t\t\t\t(-1 / 2) * a * bgWidth + (-1 / 2) * bgHeight * c + (1 / 2) * page.width || 0,\n\t\t\t\t(-1 / 2) * b * bgWidth + (-1 / 2) * bgHeight * d + (1 / 2) * page.height || 0,\n\t\t\t],\n\t\t};\n\t});\n\n\tscoreJson.parts = [];\n\tscoreJson.lines = [];\n\n\t// 没有降噪图就不需要这些字段\n\tif (hasMaskImage) {\n\t\tconst partTemplates = score.staffLayout.partGroups.map((p) => (p.range[0] === p.range[1] ? [p.range[0]] : p.range));\n\t\tconst tokenMap = score.getTokenMap();\n\t\tconst measureXs: number[][] = [];\n\n\t\t// partIndex: part索引,template: 当前part所包含的staff的全局索引\n\t\tfor (const [partIndex, template] of partTemplates.entries()) {\n\t\t\tconst staffIndexBase = partTemplates.slice(0, partIndex).flat().length;\n\n\t\t\tconst part: ScoreJSON['parts'][0] = {\n\t\t\t\tmeasures: [],\n\t\t\t};\n\n\t\t\tscore.systems.forEach((system, systemIndex) => {\n\t\t\t\tconst staves = system.staves.slice();\n\n\t\t\t\t// 不可见staff用null填充的staff列表\n\t\t\t\tconst paddedStaves = partTemplates.flat().map((staffIndex) => (!((1 << staffIndex) & system.staffMask) ? null : staves.shift()));\n\t\t\t\tconst bars = [0, ...system.measureBars];\n\n\t\t\t\t// 便历当前system下的小节\n\t\t\t\tfor (let mi = 0; mi < system.measureCount; mi++) {\n\t\t\t\t\tconst measureIndex = score.spartito.measureIndexMapping[system.headMeasureIndex + mi];\n\n\t\t\t\t\t// 如果小节被过滤\n\t\t\t\t\tif (!Number.isFinite(measureIndex)) {\n\t\t\t\t\t\tif (bars.length > mi + 1) bars[mi + 1] = bars[mi];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst chordColumns: { chord: ChordColumn; staffIndexInPart: number }[] = [];\n\n\t\t\t\t\tfor (const staffIndex of template) {\n\t\t\t\t\t\tconst staff = paddedStaves[staffIndex];\n\n\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\tchordColumns.push(...staff.measures[mi].getChords().map((chord) => ({ chord, staffIndexInPart: staffIndex - staffIndexBase })));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet noteIndex = 0;\n\n\t\t\t\t\tconst measureStartX = bars[mi]; // 小节开头相对system的x偏移\n\n\t\t\t\t\tconst measureNotes = [];\n\n\t\t\t\t\tchordColumns.forEach(({ staffIndexInPart, chord }) => {\n\t\t\t\t\t\tconst elems = [];\n\n\t\t\t\t\t\tlet firstX = chord.tip ? chord.tip.x : chord.right - chord.left / 2;\n\n\t\t\t\t\t\tchord.noteIds.forEach((noteId, key) => {\n\t\t\t\t\t\t\tconst token = tokenMap.get(noteId);\n\n\t\t\t\t\t\t\tconst innerId = `n_${partTemplates.length > 1 ? partIndex + '_' : ''}${measureIndex}_${noteIndex}`;\n\t\t\t\t\t\t\tnoteIndex++;\n\t\t\t\t\t\t\tidsMap.set(token.id, innerId);\n\t\t\t\t\t\t\tidsXMap.set(token.id, (token.left + token.right) / 2 - measureStartX);\n\t\t\t\t\t\t\tidStaffIndexMap.set(token.id, staffIndexInPart + 1);\n\n\t\t\t\t\t\t\telems.push({\n\t\t\t\t\t\t\t\tline: -chord.ys[key] * 2, // 五线中线为0,往上为正/向下为负,每半格子1个单位\n\t\t\t\t\t\t\t\tid: innerId, // n_小节号_第几个音符\n\t\t\t\t\t\t\t\t// acc: {\n\t\t\t\t\t\t\t\t// \tacc: AccType.Flat,\n\t\t\t\t\t\t\t\t// \tx: -1\n\t\t\t\t\t\t\t\t// }, // 临时升降记号及其偏移量\n\t\t\t\t\t\t\t\tstaff: staffIndexInPart + 1,\n\t\t\t\t\t\t\t\tx: (token.left + token.right) / 2 - firstX, // 当前符头相对第一个符头的偏移量\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tmeasureXs[measureIndex] = measureXs[measureIndex] || [];\n\t\t\t\t\t\tmeasureXs[measureIndex].push(firstX - measureStartX);\n\n\t\t\t\t\t\tconst events = score.spartito.measures[system.headMeasureIndex + mi].events.filter((x) =>\n\t\t\t\t\t\t\tx.noteIds.some((y) => chord.noteIds.includes(y))\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tmeasureNotes.push({\n\t\t\t\t\t\t\telems,\n\t\t\t\t\t\t\tx: firstX - measureStartX, // 本音符相对于小节开头的x偏移量\n\t\t\t\t\t\t\ttype: 2 ** chord.division, // n分音符,1为全音符\n\t\t\t\t\t\t\t...(events.some((x) => x.grace) ? { grace: {} } : {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tpart.measures[measureIndex] = {\n\t\t\t\t\t\tw: bars[mi + 1] - bars[mi], // 本小节宽度\n\t\t\t\t\t\tstaves: template.length, // 本part的staff个数\n\t\t\t\t\t\tnotes: measureNotes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// 提取谱号、调号\n\t\t\tlet lastFifths = null;\n\t\t\tscore.spartito.measures.forEach((measure, i) => {\n\t\t\t\tconst measureIndex = score.spartito.measureIndexMapping[i];\n\n\t\t\t\tconst clefTokens = measure.contexts.flat().filter((x) => SUPPORT_CLEF_TYPES.includes(x.tokenType) && template.includes(x.staff));\n\t\t\t\tconst clefs = clefTokens.map((token) => {\n\t\t\t\t\tconst pt = partTemplates.find((p) => p.includes(token.staff));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\tclef: tokenToText(token),\n\t\t\t\t\t\tstaff: pt.indexOf(token.staff) + 1, // staff索引从1开始\n\t\t\t\t\t\ttick: token.tick,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\tif (clefs.length > 0) {\n\t\t\t\t\tpart.measures[measureIndex] && (part.measures[measureIndex].clefs = clefs);\n\t\t\t\t}\n\n\t\t\t\tconst fifths = measure.basics.filter((x, i) => (1 << i) & measure.staffMask)[0].keySignature;\n\n\t\t\t\tif (fifths !== lastFifths) {\n\t\t\t\t\tpart.measures[measureIndex] && (part.measures[measureIndex].fifths = { fifths });\n\t\t\t\t\tlastFifths = fifths;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (part.measures.length > 0) {\n\t\t\t\tscoreJson.parts[partIndex] = part;\n\t\t\t}\n\t\t}\n\n\t\tscore.systems.forEach((system, systemIndex) => {\n\t\t\tconst lineStaves = [];\n\n\t\t\tconst systemTopStaff = system.staves[0];\n\t\t\tconst systemBottomStaff = system.staves[system.staves.length - 1];\n\n\t\t\tconst systemTopStaffY = systemTopStaff.top + systemTopStaff.staffY - 2;\n\t\t\tconst systemBottomStaffY = systemBottomStaff.top + systemBottomStaff.staffY - 2;\n\n\t\t\tconst staves = system.staves.slice();\n\n\t\t\tconst paddedStaves = partTemplates.flat().map((staffIndex) => {\n\t\t\t\tconst isEmpty = !((1 << staffIndex) & system.staffMask);\n\t\t\t\tif (isEmpty) {\n\t\t\t\t\treturn null;\n\t\t\t\t} else {\n\t\t\t\t\treturn staves.shift();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet lastPartLastStaff = null;\n\n\t\t\tfor (const [partIndex, template] of partTemplates.entries()) {\n\t\t\t\tconst partStaves: Staff[] = template.map((staffIndex) => paddedStaves.find((s) => s?.index === staffIndex) || null);\n\n\t\t\t\tconst staffs = partStaves.map((staff, index) => [index, !staff] as [number, boolean]).filter((s) => s[1]);\n\n\t\t\t\tlet details = null;\n\t\t\t\tif (staffs.length > 0) {\n\t\t\t\t\tdetails = Object.fromEntries(staffs.map((d) => [d[0] + 1, { hide: d[1] }]));\n\t\t\t\t}\n\n\t\t\t\tlet y = 0;\n\t\t\t\tlet height = 0;\n\n\t\t\t\tconst visibleStaves = partStaves.filter((s) => !!s);\n\n\t\t\t\tif (visibleStaves.length > 0) {\n\t\t\t\t\tconst partTopStaff = visibleStaves[0];\n\t\t\t\t\tconst partBottomStaff = visibleStaves[visibleStaves.length - 1];\n\t\t\t\t\tconst partTopStaffY = partTopStaff.top + partTopStaff.staffY - 2;\n\t\t\t\t\tconst partBottomStaffY = partBottomStaff.top + partBottomStaff.staffY - 2;\n\n\t\t\t\t\ty = partTopStaffY - systemTopStaffY;\n\t\t\t\t\theight = partBottomStaffY - partTopStaffY + 4;\n\t\t\t\t}\n\n\t\t\t\tconst { list: distances, last } = partStaves.reduce(\n\t\t\t\t\t(acc, next, index) => {\n\t\t\t\t\t\tif (acc.last === null || next === null) {\n\t\t\t\t\t\t\tif (index === 0 && y > 0) {\n\t\t\t\t\t\t\t\tacc.list.push(y - 4);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tacc.list.push(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tacc.list.push(next.top + next.staffY - (acc.last.top + acc.last.staffY) - 4);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tacc.last = next || acc.last;\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{ last: lastPartLastStaff, list: [] } as { last: Staff; list: number[] }\n\t\t\t\t);\n\n\t\t\t\tlastPartLastStaff = last;\n\n\t\t\t\tconst imgs = partStaves.map((staff) => {\n\t\t\t\t\tif (staff?.maskImage) {\n\t\t\t\t\t\tconst rect = staff.imagePosition;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsrc: staff.maskImage,\n\t\t\t\t\t\t\tx: rect.x,\n\t\t\t\t\t\t\ty: system.top + staff.top + rect.y - (system.top + staff.top + staff.staffY - 2),\n\t\t\t\t\t\t\tw: rect.width,\n\t\t\t\t\t\t\th: rect.height,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t});\n\n\t\t\t\tconst spartitoMeasure = score.spartito.measures[system.headMeasureIndex];\n\t\t\t\tlineStaves.push({\n\t\t\t\t\t// parts\n\t\t\t\t\tdistances, // 两个staff间距\n\t\t\t\t\timgs,\n\t\t\t\t\ty, // 本staff相对于当前system第一线的起始y坐标\n\t\t\t\t\tstaves: template.length, // 本staff数量\n\t\t\t\t\tparti: partIndex, // 本staff所属part编号\n\t\t\t\t\theight, // 本staff高度\n\t\t\t\t\t...(details ? { details } : {}),\n\t\t\t\t\tclef: Object.fromEntries(\n\t\t\t\t\t\tscore.spartito.measures[system.headMeasureIndex]?.contexts\n\t\t\t\t\t\t\t.flat()\n\t\t\t\t\t\t\t.filter((x) => SUPPORT_CLEF_TYPES.includes(x.tokenType) && template.includes(x.staff))\n\t\t\t\t\t\t\t.map((token) => [token.staff, tokenToText(token)])\n\t\t\t\t\t),\n\t\t\t\t\tfifths: spartitoMeasure.basics.filter((x, i) => (1 << i) & spartitoMeasure.staffMask)[0].keySignature,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst mIndices = system.measureBars\n\t\t\t\t.map((_, i) => score.spartito.measureIndexMapping[system.headMeasureIndex + i])\n\t\t\t\t.filter((x) => Number.isFinite(x));\n\n\t\t\tscoreJson.lines[systemIndex] = {\n\t\t\t\tm1: mIndices[0], // 本system起始小节编号\n\t\t\t\tm2: mIndices.length > 0 ? mIndices[mIndices.length - 1] + 1 : undefined, // 本system结尾小节编号+1\n\t\t\t\tx: system.left, // 本system左侧小节线x坐标\n\t\t\t\ty: system.top + systemTopStaffY, // 本system左侧小节线y坐标\n\t\t\t\tw: system.measureBars[system.measureBars.length - 1], // 本system宽度\n\t\t\t\th: systemBottomStaffY - systemTopStaffY + 4, // 本system高度\n\t\t\t\tlineStaves,\n\t\t\t};\n\t\t});\n\n\t\tconst map = { 0: 'default', 1: 'brace', 2: 'bracket', 3: 'square' };\n\n\t\tconst staffLayout = parseCode(score.staffLayoutCode);\n\t\tconst sortedParts = staffLayout.partGroups\n\t\t\t.map((x) => {\n\t\t\t\treturn {\n\t\t\t\t\tsort: x.range[0],\n\t\t\t\t\tpart: x,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((a, b) => a.sort - b.sort)\n\t\t\t.map((x) => x.part);\n\n\t\tscoreJson.groups = staffLayout.groups\n\t\t\t.filter((x) => x.group.type !== 0)\n\t\t\t.map((part, key) => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: map[part.group.type] as any,\n\t\t\t\t\tp1: sortedParts.findIndex((x) => x.range.includes(part.range[0])),\n\t\t\t\t\tp2: sortedParts.findIndex((x) => x.range.includes(part.range[part.range.length - 1])),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.filter((x) => x.type !== 'default');\n\t}\n\n\tif (perform) {\n\t\tscoreJson.measInfo = perform.notation.measures.map((measure, measureIndex) => {\n\t\t\tconst map = new Map();\n\t\t\tmeasure.notes.forEach((n) => {\n\t\t\t\tmap.set(n.tick, [...(map.get(n.tick) || []), idsXMap.get(n.id)]);\n\t\t\t});\n\n\t\t\t// 找出每个tick对应的第一个音符的中心点的x\n\t\t\treturn Array.from(map.entries())\n\t\t\t\t.sort((a, b) => +a[0] - b[0])\n\t\t\t\t.reduce(\n\t\t\t\t\t(acc, ent, key) => {\n\t\t\t\t\t\tconst val = ent[1].find((x) => x > acc.last) || ent[1][0];\n\t\t\t\t\t\tacc.list.push(val);\n\t\t\t\t\t\tacc.last = val;\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{ last: null, list: [] }\n\t\t\t\t)\n\t\t\t\t.list.filter(Number.isFinite);\n\t\t});\n\t}\n\n\t/******************************* 生成 midiJson *************************************/\n\n\tlet midiJson: MidiJson;\n\n\tif (perform) {\n\t\tmidiJson = {} as MidiJson;\n\n\t\tconst idNoteMap = new Map();\n\n\t\tlet beatsCurrent;\n\t\tlet beatsUnitCurrent;\n\t\tperform.notation.measures.forEach((measure, mIndex) => {\n\t\t\tconst { numerator: beats, denominator: beatsUnit } = measure.timeSignature;\n\n\t\t\tif (!midiJson.beats && !midiJson.beatsUnit) {\n\t\t\t\tmidiJson.beats = beats;\n\t\t\t\tmidiJson.beatsUnit = beatsUnit;\n\t\t\t\tbeatsCurrent = beats;\n\t\t\t\tbeatsUnitCurrent = beatsUnit;\n\t\t\t}\n\n\t\t\tmidiJson.beatInfos = midiJson.beatInfos || [];\n\n\t\t\tif (beatsCurrent !== beats || beatsUnitCurrent !== beatsUnit) {\n\t\t\t\tbeatsCurrent = beats;\n\t\t\t\tbeatsUnitCurrent = beatsUnit;\n\n\t\t\t\tmidiJson.beatInfos.push({\n\t\t\t\t\ttick: measure.tick,\n\t\t\t\t\tbeats,\n\t\t\t\t\tbeatsUnit,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tmidiJson.tempos = midiJson.tempos || [];\n\n\t\t\tmeasure.events.forEach((evt) => {\n\t\t\t\tif (evt.data.type === 'meta' && evt.data.subtype === 'setTempo') {\n\t\t\t\t\tmidiJson.tempos.push({\n\t\t\t\t\t\ttick: measure.tick,\n\t\t\t\t\t\ttempo: evt.data.microsecondsPerBeat,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tmidiJson.measures = perform.notation.measures.reduce((acc, measure, index) => {\n\t\t\tconst note_ticks = Array.from(new Set(measure.notes.map((x) => x.tick))).sort((a, b) => a - b);\n\n\t\t\tmeasure.notes.forEach((x) => {\n\t\t\t\tidNoteMap.set(x.id, note_ticks.indexOf(x.tick));\n\t\t\t});\n\n\t\t\tacc[measure.tick] = {\n\t\t\t\tmeasure: index, // 小节编号\n\t\t\t\tduration: measure.duration, // 小节时值\n\t\t\t\tnote_ticks, // 本小节每列的tick\n\t\t\t};\n\n\t\t\treturn acc;\n\t\t}, {});\n\n\t\tmidiJson.measureInfos = perform.notation.measures.map((measure, key) => ({\n\t\t\tnumber: String(key + 1), // 小节编号\n\t\t\tfifths: measure.keySignature, // 调号 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7\n\t\t\tbeats: measure.timeSignature.numerator, // 拍号分子\n\t\t\tbeatUnit: measure.timeSignature.denominator, // 拍号分母\n\t\t}));\n\n\t\tconst midi = perform.notation.toPerformingMIDI(perform.notation.measures.map((_, key) => key + 1));\n\n\t\tconst tracks = midi.tracks as unknown as (MidiEvent & { duration: number })[][];\n\n\t\tconst { partGroups } = score.staffLayout;\n\n\t\tlet mergedTracks = tracks.map((track, trackIndex) => {\n\t\t\tconst key = partGroups[trackIndex].key;\n\n\t\t\tlet program: number;\n\n\t\t\tswitch (key) {\n\t\t\t\tcase 'vi':\n\t\t\t\tcase 'vi1':\n\t\t\t\tcase 'vi2':\n\t\t\t\t\tprogram = 40; // 小提琴\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'viola':\n\t\t\t\t\tprogram = 42; // 中提琴\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'vo':\n\t\t\t\t\tprogram = 55; // 合成人声\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'basso':\n\t\t\t\t\tprogram = 71; // 大管乐器\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: // 大钢琴\n\t\t\t\t\tprogram = 0;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tprogram, // 音色:0-127\n\t\t\t\tchannel: trackIndex, // 通道:0-15\n\t\t\t\tname: score.instrumentDict[key] ?? 'Piano', // 轨道名称\n\t\t\t\ttrack,\n\t\t\t};\n\t\t});\n\n\t\t// 找出大谱表所在track(声部),根据分手条件拆分为左右手\n\t\tif (partGroups.some((g) => g.group.grand)) {\n\t\t\tconst lhPattern = /l\\.?h\\.?|左手|left hand/i;\n\t\t\tconst rhPattern = /r\\.?h\\.?|右手|right hand/i;\n\t\t\tconst instrus = Object.entries(score.instrumentDict)\n\t\t\t\t.filter(([key, value]) => lhPattern.test(value) || rhPattern.test(value))\n\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\thand: lhPattern.test(value) ? 'left' : 'right',\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\tlet handStaves: number[] = null;\n\t\t\tlet partIndex;\n\n\t\t\t// 标记了左右手\n\t\t\tif (instrus.length === 2 && instrus[0].hand !== instrus[1].hand) {\n\t\t\t\tconst left = instrus.find((x) => x.hand === 'left');\n\t\t\t\tconst right = instrus.find((x) => x.hand === 'right');\n\t\t\t\thandStaves = [score.staffLayout.staffIds.findIndex((x) => x === right?.key), score.staffLayout.staffIds.findIndex((x) => x === left?.key)];\n\n\t\t\t\tpartIndex = partGroups.findIndex((g) => g.range[0] <= Math.min(...handStaves) && g.range[1] >= Math.max(...handStaves));\n\t\t\t}\n\n\t\t\tif (Number.isFinite(partIndex) && partIndex > -1) {\n\t\t\t\tconst trackToSplit = mergedTracks[partIndex];\n\t\t\t\tconst newTracks: any[][] = []; // Array.from(new Set(firstTrack.track.map(x => x.channel))).sort((a, b) => a - b)\n\n\t\t\t\ttrackToSplit.track.forEach((evt) => {\n\t\t\t\t\tif (Number.isFinite(evt.staff)) {\n\t\t\t\t\t\tif (!newTracks[evt.staff]) {\n\t\t\t\t\t\t\tnewTracks[evt.staff] = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnewTracks[evt.staff].push(evt);\n\t\t\t\t\t}\n\t\t\t\t\tif (evt.type === 'meta') {\n\t\t\t\t\t\tnewTracks.forEach((stave) => {\n\t\t\t\t\t\t\tstave.push(evt);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmergedTracks.splice(partIndex, 1, newTracks.filter(Boolean).map((track) => ({ ...trackToSplit, track })) as any);\n\n\t\t\t\tmergedTracks = mergedTracks.flat();\n\n\t\t\t\t// 指定左右手track\n\t\t\t\tmidiJson.rightHandTrack = handStaves[0];\n\t\t\t\tmidiJson.leftHandTrack = handStaves[1];\n\t\t\t} else {\n\t\t\t\tmergedTracks.sort((a, b) => (a === mergedTracks[partIndex] ? -1 : 0));\n\t\t\t}\n\t\t}\n\n\t\tmidiJson.tracks = mergedTracks.map(({ program, channel, name }) => ({ program, channel, name }));\n\n\t\tconst transformedTracks = mergedTracks.map(({ track }) => {\n\t\t\tconst pitchMap: Map = new Map();\n\n\t\t\treturn track.map((evt) => {\n\t\t\t\tif (evt.subtype === 'noteOn') {\n\t\t\t\t\tpitchMap.set(evt.noteNumber, evt);\n\t\t\t\t}\n\n\t\t\t\tif (evt.subtype === 'noteOff') {\n\t\t\t\t\tconst onEvent = pitchMap.get(evt.noteNumber);\n\t\t\t\t\tif (onEvent?.noteNumber === evt.noteNumber) {\n\t\t\t\t\t\tonEvent.duration = evt.ticks - onEvent.ticks;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn evt;\n\t\t\t});\n\t\t});\n\n\t\tconst measureTickMap = new Map(Object.entries(midiJson.measures).map(([tick, m]) => [m.measure, +tick]));\n\n\t\tmidiJson.events = (transformedTracks as (MidiEvent & { duration: number; numId?: string; ticks: number })[][])\n\t\t\t.map((track, trackIndex) => {\n\t\t\t\treturn track\n\t\t\t\t\t.filter((x) => x.type === 'channel')\n\t\t\t\t\t.map((evt) => {\n\t\t\t\t\t\tif (evt?.ids?.[0]) {\n\t\t\t\t\t\t\tevt.numId = idsMap.get(evt.ids[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet newEvent: [number, number, number] = [0, 0, 0];\n\n\t\t\t\t\t\tswitch (evt.subtype) {\n\t\t\t\t\t\t\tcase 'noteOn':\n\t\t\t\t\t\t\t\tnewEvent = [0x90 | evt.channel, evt.noteNumber, evt.velocity];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'noteOff':\n\t\t\t\t\t\t\t\tnewEvent = [0x80 | evt.channel, evt.noteNumber, evt.velocity ? evt.velocity : 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'noteAftertouch':\n\t\t\t\t\t\t\t\tnewEvent = [0xa0 | evt.channel, evt.noteNumber, evt.amount];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'controller':\n\t\t\t\t\t\t\t\tnewEvent = [0xb0 | evt.channel, evt.controllerType, evt.value];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'programChange':\n\t\t\t\t\t\t\t\tnewEvent = [0xc0 | evt.channel, evt.programNumber, 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'channelAftertouch':\n\t\t\t\t\t\t\t\tnewEvent = [0xd0 | evt.channel, evt.amount, 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'pitchBend':\n\t\t\t\t\t\t\t\tnewEvent = [0xe0 | evt.channel, evt.value & 0xff, (evt.value >> 7) & 0xff];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tthrow new Error('unhandled event subtype:' + evt.subtype);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...(evt.subtype === 'noteOn' ? { id: idsMap.get(evt?.ids?.[0]) } : {}), // 对应符头的id\n\t\t\t\t\t\t\ttick: evt.ticks,\n\t\t\t\t\t\t\tchannel: evt.channel,\n\t\t\t\t\t\t\tduration: evt.duration, // 只有note on事件有时值\n\t\t\t\t\t\t\ttrack: trackIndex, // evt.staffTrack, // 所属track\n\t\t\t\t\t\t\tevent: newEvent, // [event, note, velocity]\n\t\t\t\t\t\t\telem_ids: evt?.ids.map((id) => idsMap.get(id)),\n\t\t\t\t\t\t\tmeasure: evt.measure - 1, // 所属小节编号\n\t\t\t\t\t\t\tmeas_start_tick: measureTickMap.get(evt.measure - 1), // 所属小节起始tick\n\t\t\t\t\t\t\tstaff: idStaffIndexMap.get(evt.ids[0]),\n\t\t\t\t\t\t\tnote: idNoteMap.get(evt.ids[0]),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1)\n\t\t\t.sort((a, b) => {\n\t\t\t\tfor (const field of ['tick', 'measure', 'track']) {\n\t\t\t\t\tif (a[field] !== b[field]) {\n\t\t\t\t\t\treturn a[field] - b[field];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn 0;\n\t\t\t});\n\t}\n\n\treturn {\n\t\tscoreJson,\n\t\tmidiJson,\n\t};\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { EventEmitter } from 'events';\n\ninterface DSPromiseOption {\n\ttimeout?: number;\n}\n\nexport function destructPromise(\n\toptions: DSPromiseOption = {}\n): [promise: Promise, resolve: (value: T | PromiseLike) => void, reject: (reason?: any) => void] {\n\tconst { timeout } = options;\n\tlet rs: (value: T | PromiseLike) => void;\n\tlet rj: (reason: any) => void;\n\n\treturn [\n\t\tnew Promise((resolve, reject) => {\n\t\t\trs = resolve;\n\t\t\trj = reject;\n\n\t\t\tif (timeout >= 0) setTimeout(rj, timeout, 'timeout');\n\t\t}),\n\t\trs,\n\t\trj,\n\t];\n}\n\ntype AsyncTask = [fn: (data: any) => Promise, payload: any, resolve: (data: any) => void, reject: (reason: any) => void];\n\nexport class AsyncQueue extends EventEmitter {\n\tprivate working = false;\n\n\ttasks: AsyncTask[];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.working = false;\n\t\tthis.tasks = [];\n\t\tprocess.nextTick(() => {\n\t\t\tthis.emit('idle');\n\t\t});\n\t}\n\n\tprivate async _digest(item: AsyncTask) {\n\t\tthis.working = true;\n\n\t\tconst [taskFn, payload, resolve, reject] = item;\n\t\tawait taskFn(payload).then(resolve, reject);\n\n\t\tif (this.tasks.length > 0) {\n\t\t\tawait this._digest(this.tasks.shift());\n\t\t} else {\n\t\t\tthis.working = false;\n\t\t\tthis.emit('idle');\n\t\t}\n\t}\n\n\t/**\n\t * 添加队列任务\n\t * @param task\n\t * @param options\n\t */\n\taddTask(task: [AsyncTask[0], AsyncTask[1]], { timeout = 600000 }: { timeout?: number } = {}): Promise {\n\t\tconst [promise, resolve, reject] = destructPromise({ timeout });\n\n\t\tif (this.working) {\n\t\t\tthis.tasks.push([...task, resolve, reject]);\n\t\t} else {\n\t\t\tthis._digest([...task, resolve, reject]);\n\t\t}\n\n\t\treturn promise;\n\t}\n}\n","import { pack, unpack } from 'msgpackr';\nimport { Request } from 'zeromq';\nimport { AsyncQueue } from './async-queue';\n\ninterface Response {\n\tcode: number;\n\tmsg: string;\n\tdata?: any;\n}\n\nexport interface Logger {\n\tinfo: (...data: any[]) => void;\n\terror: (...data: any[]) => void;\n}\n\ntype PyArgs = any[];\ntype PyKwargs = Record;\n\nexport default class ZeroClient {\n\tlogger: Logger;\n\tprivate socket: Request;\n\tprivate queue: AsyncQueue = new AsyncQueue();\n\n\tprivate url: string;\n\n\tconstructor(logger: Logger = console) {\n\t\tthis.logger = logger;\n\t}\n\n\tbind(url?: string) {\n\t\turl && (this.url = url);\n\t\tthis.socket = new Request({\n\t\t\tsendTimeout: 15e3,\n\t\t\treceiveTimeout: 300e3,\n\t\t});\n\n\t\tthis.socket.connect(this.url);\n\t}\n\n\tprivate __request(payload) {\n\t\tlet retryTimes = 0;\n\n\t\tconst req = async (data) => {\n\t\t\ttry {\n\t\t\t\tif (this.socket.closed) this.bind();\n\t\t\t\treturn await this.socket.send(pack(data)).then(() => this.socket.receive());\n\t\t\t} catch (err) {\n\t\t\t\tif (retryTimes < 2) {\n\t\t\t\t\tretryTimes++;\n\t\t\t\t\tconsole.log(`请求失败,${err.stack}`);\n\t\t\t\t\tconsole.error(`3s后重试第${retryTimes}次`);\n\t\t\t\t\tthis.socket.close();\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 3000));\n\t\t\t\t\treturn req(data);\n\t\t\t\t} else {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn req(payload);\n\t}\n\n\tasync request(method: string, args: PyArgs | PyKwargs = null, kwargs: PyKwargs = null): Promise {\n\t\tconst [args_, kwargs_] = Array.isArray(args) ? [args, kwargs] : [undefined, args];\n\t\tconst msg: any = { method };\n\t\tif (args_) msg.args = args_;\n\t\tif (kwargs_) msg.kwargs = kwargs_;\n\n\t\treturn this.queue.addTask([\n\t\t\tasync (opt) => {\n\t\t\t\tconst [result] = await this.__request(opt);\n\n\t\t\t\tconst obj = unpack(result) as Response;\n\n\t\t\t\tif (obj.code === 0) {\n\t\t\t\t\treturn obj.data;\n\t\t\t\t} else {\n\t\t\t\t\treturn Promise.reject(obj.msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmsg,\n\t\t]);\n\t}\n}\n","import { getPortPromise } from 'portfinder';\nimport { Options, PythonShell } from 'python-shell';\nimport { defaultsDeep } from 'lodash';\nimport ZeroClient, { Logger } from './ZeroClient';\n\nexport default class PyProcessor extends ZeroClient {\n\tprivate readonly scriptPath: string;\n\tprivate readonly options: Options;\n\tprivate pyShell: PythonShell;\n\n\tprivate retryCount: number = 0;\n\tprivate retryDelay: number = 3000;\n\n\tconstructor(scriptPath: string, options: Options = {}, logger: Logger = console) {\n\t\tsuper(logger);\n\t\tthis.scriptPath = scriptPath;\n\t\tthis.options = options;\n\t}\n\n\tasync bind(port?: string | number) {\n\t\tconst freePort =\n\t\t\tport ||\n\t\t\t(await getPortPromise({\n\t\t\t\tport: 12022,\n\t\t\t\tstopPort: 12122,\n\t\t\t}));\n\n\t\t// \"./streamPredictor.py\", \"--inspect\"\n\t\tconst options = defaultsDeep(\n\t\t\t{\n\t\t\t\targs: [...(this.options.args || []), '-p', `${freePort}`],\n\t\t\t},\n\t\t\tthis.options\n\t\t);\n\n\t\tthis.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`);\n\n\t\tthis.pyShell = new PythonShell(this.scriptPath, options);\n\n\t\tthis.pyShell.stdout.on('data', (data) => this.logger.info(data));\n\n\t\tthis.pyShell.on('pythonError', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`, err));\n\t\tthis.pyShell.on('stderr', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`, err));\n\t\tthis.pyShell.on('error', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} error:`, err));\n\t\tthis.pyShell.on('close', () => {\n\t\t\t// python子进程关闭事件\n\t\t\tif (this.retryCount < 5) {\n\t\t\t\tthis.retryCount++;\n\t\t\t\tthis.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.bind();\n\t\t\t\t}, this.retryDelay);\n\t\t\t}\n\t\t});\n\n\t\tsuper.bind(`tcp://127.0.0.1:${freePort}`);\n\t}\n}\n","module.exports = function isBuffer(arg) {\n return arg instanceof Buffer;\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","try {\n var util = require('util');\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n module.exports = require('./inherits_browser.js');\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","import ZeroClient, { Logger } from './ZeroClient';\nimport * as starry from '../../src/starry';\nimport PyProcessor from './PyProcessor';\nimport { destructPromise } from './async-queue';\nimport { getPort } from 'portfinder';\nimport util from 'util';\nimport { Options } from 'python-shell';\n\nconst getPortPromise = util.promisify(getPort);\n\nexport interface LayoutResult {\n\tdetection: starry.PageLayout;\n\ttheta: number;\n\tinterval: number;\n\tsourceSize?: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n}\n\nexport interface PredictorInterface {\n\tlayout: (streams: Buffer[]) => LayoutResult[];\n\tlayout$reinforce: (streams: Buffer[], baseLayouts: LayoutResult[]) => LayoutResult[];\n\tgauge: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tmask: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tsemantic: (streams: Buffer[]) => any[];\n\ttextLoc: (streams: Buffer[]) => any[];\n\ttextOcr: (params: { buffers: Buffer[]; location: any[] }) => any[];\n\tbrackets: (params: { buffers: Buffer[] }) => any[];\n\ttopo: (params: { clusters: starry.EventCluster[] }) => any[];\n\tgaugeRenderer: (params: [Buffer, Buffer, number]) => { buffer: Buffer; size: { width: number; height: number } };\n\tjianpu: (params: { buffers: Buffer[] }) => any[];\n\t// [source: Buffer, gauge: Buffer, baseY: number]\n}\n\ntype PredictorType = keyof PredictorInterface;\n\nexport type PyClientsConstructOptions = Partial>;\n\nexport class PyClients {\n\tclients = new Map>();\n\n\tconstructor(public readonly options: PyClientsConstructOptions, public readonly logger: Logger = console) {}\n\n\tasync getClient(type: PredictorType) {\n\t\tif (this.clients.has(type)) {\n\t\t\treturn this.clients.get(type);\n\t\t}\n\n\t\tconst [promise, resolve, reject] = destructPromise();\n\n\t\tconst opt = this.options[type];\n\n\t\tif (!opt) {\n\t\t\tthrow new Error(`no config for client \\`${type}\\` found`);\n\t\t}\n\n\t\ttry {\n\t\t\tif (typeof opt === 'string') {\n\t\t\t\tconst client = new ZeroClient();\n\t\t\t\tclient.bind(opt);\n\t\t\t\tresolve(client);\n\t\t\t} else {\n\t\t\t\tconst { scriptPath, ...option } = opt;\n\t\t\t\tconst client = new PyProcessor(scriptPath, option, this.logger);\n\t\t\t\tawait client.bind(`${await getPortPromise()}`);\n\t\t\t\tresolve(client);\n\t\t\t}\n\n\t\t\tthis.logger.info(`PyClients: ${type} started`);\n\t\t} catch (err) {\n\t\t\tthis.logger.error(`PyClients: ${type} start fail: ${JSON.stringify(err)}`);\n\t\t\treject(err);\n\t\t}\n\n\t\tthis.clients.set(type, promise);\n\n\t\treturn promise;\n\t}\n\n\tasync checkHost(type: PredictorType): Promise {\n\t\tconst client = await this.getClient(type);\n\n\t\treturn client.request('checkHost');\n\t}\n\n\tasync warmup() {\n\t\tconst opts = Object.keys(this.options) as PredictorType[];\n\t\tawait Promise.all(opts.map((type) => this.getClient(type)));\n\t}\n\n\t/**\n\t * 模型预测\n\t * @param type layout | mask | gauge | semantic\n\t * @param args\n\t */\n\tasync predictScoreImages(type: T, ...args: Parameters): Promise> {\n\t\tconst clientType = type.split('$')[0] as PredictorType;\n\t\tconst client = await this.getClient(clientType);\n\t\tlet res = null;\n\n\t\tthis.logger.info(`[predictor]: ${type} py start..`);\n\t\tconst start = Date.now();\n\n\t\tswitch (type) {\n\t\t\tcase 'layout':\n\t\t\t\tres = await client.request('predictDetection', args);\n\t\t\t\tbreak;\n\t\t\tcase 'layout$reinforce':\n\t\t\t\tres = await client.request('predictReinforce', args);\n\t\t\t\tbreak;\n\t\t\tcase 'gauge':\n\t\t\tcase 'mask':\n\t\t\t\tres = await client.request('predict', args, { by_buffer: true });\n\t\t\t\tbreak;\n\t\t\tcase 'semantic':\n\t\t\tcase 'textLoc':\n\t\t\t\tres = await client.request('predict', args);\n\t\t\t\tbreak;\n\t\t\tcase 'textOcr':\n\t\t\tcase 'brackets':\n\t\t\tcase 'topo':\n\t\t\tcase 'gaugeRenderer':\n\t\t\tcase 'jianpu':\n\t\t\t\tres = await client.request('predict', ...args);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.logger.error(`[predictor]: no predictor ${type}`);\n\t\t}\n\n\t\tthis.logger.info(`[predictor]: ${type} py duration: ${Date.now() - start}ms`);\n\n\t\treturn res;\n\t}\n}\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","(function() {\n var crypt = require('crypt'),\n utf8 = require('charenc').utf8,\n bin = require('charenc').bin,\n\n // The core\n sha1 = function (message) {\n // Convert to byte array\n if (message.constructor == String)\n message = utf8.stringToBytes(message);\n else if (typeof Buffer !== 'undefined' && typeof Buffer.isBuffer == 'function' && Buffer.isBuffer(message))\n message = Array.prototype.slice.call(message, 0);\n else if (!Array.isArray(message))\n message = message.toString();\n\n // otherwise assume byte array\n\n var m = crypt.bytesToWords(message),\n l = message.length * 8,\n w = [],\n H0 = 1732584193,\n H1 = -271733879,\n H2 = -1732584194,\n H3 = 271733878,\n H4 = -1009589776;\n\n // Padding\n m[l >> 5] |= 0x80 << (24 - l % 32);\n m[((l + 64 >>> 9) << 4) + 15] = l;\n\n for (var i = 0; i < m.length; i += 16) {\n var a = H0,\n b = H1,\n c = H2,\n d = H3,\n e = H4;\n\n for (var j = 0; j < 80; j++) {\n\n if (j < 16)\n w[j] = m[i + j];\n else {\n var n = w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16];\n w[j] = (n << 1) | (n >>> 31);\n }\n\n var t = ((H0 << 5) | (H0 >>> 27)) + H4 + (w[j] >>> 0) + (\n j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 :\n j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 :\n j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 :\n (H1 ^ H2 ^ H3) - 899497514);\n\n H4 = H3;\n H3 = H2;\n H2 = (H1 << 30) | (H1 >>> 2);\n H1 = H0;\n H0 = t;\n }\n\n H0 += a;\n H1 += b;\n H2 += c;\n H3 += d;\n H4 += e;\n }\n\n return [H0, H1, H2, H3, H4];\n },\n\n // Public API\n api = function (message, options) {\n var digestbytes = crypt.wordsToBytes(sha1(message));\n return options && options.asBytes ? digestbytes :\n options && options.asString ? bin.bytesToString(digestbytes) :\n crypt.bytesToHex(digestbytes);\n };\n\n api._blocksize = 16;\n api._digestsize = 20;\n\n module.exports = api;\n})();\n","import SparkMD5 from 'spark-md5';\n//import JSZip from 'jszip';\nimport * as starry from '../../src/starry';\n//import { encodeFindResource } from '../../src/isomorphic/converter';\nimport sharp, { FormatEnum } from 'sharp';\nimport got from 'got';\n//import { Logger } from './ZeroClient';\nimport type { SolutionStore, SaveIssueMeasure } from './store';\nimport { ScoreJSON } from '../../src/isomorphic/types';\n\nconst SYSTEM_MARGIN = 4;\n\nexport const constructSystem = ({ page, backgroundImage, detection, imageSize, position }) => {\n\tconst systemWidth = (detection.phi2 - detection.phi1) / detection.interval;\n\tconst systemHeight = imageSize.height / detection.interval;\n\n\tconst lastSystem = page.systems[page.systems.length - 1];\n\tconst top = position ? position.y : (lastSystem ? lastSystem.top + lastSystem.height : 0) + SYSTEM_MARGIN;\n\tconst left = position ? position.x : SYSTEM_MARGIN;\n\n\tconst stavesTops = [\n\t\t0,\n\t\t...Array(detection.middleRhos.length - 1)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => (detection.middleRhos[i] + detection.middleRhos[i + 1]) / 2 / detection.interval),\n\t];\n\n\tconst measureBars = [systemWidth];\n\n\tconst staves = stavesTops.map(\n\t\t(top, i) =>\n\t\t\tnew starry.Staff({\n\t\t\t\ttop,\n\t\t\t\theight: (stavesTops[i + 1] || systemHeight) - top,\n\t\t\t\tstaffY: detection.middleRhos[i] / detection.interval - top,\n\t\t\t\tmeasureBars,\n\t\t\t})\n\t);\n\n\t//console.log(\"detection:\", detection, options, stavesTops);\n\n\tconst imagePosition = {\n\t\tx: -detection.phi1 / detection.interval,\n\t\ty: 0,\n\t\twidth: imageSize.width / detection.interval,\n\t\theight: imageSize.height / detection.interval,\n\t};\n\n\treturn new starry.System({\n\t\tstaves,\n\t\tleft,\n\t\ttop,\n\t\twidth: systemWidth,\n\t\tbackgroundImage,\n\t\timagePosition,\n\t\tmeasureBars,\n\t});\n};\n\nexport interface ConvertOption {\n\tformat?: keyof FormatEnum;\n\tquality?: number;\n\tmaxHeight?: number;\n}\n\nconst toBuffer = async (url: string | Buffer): Promise => {\n\tif (typeof url === 'string') {\n\t\tif (/^https?:\\/\\//.test(url)) {\n\t\t\treturn (await got(url, { responseType: 'buffer', decompress: true, https: { rejectUnauthorized: false } })).body;\n\t\t}\n\n\t\tif (/^data:image\\//.test(url)) {\n\t\t\treturn Buffer.from(url.split(',')[1], 'base64');\n\t\t}\n\n\t\treturn Buffer.from(url);\n\t}\n\n\treturn url;\n};\n\n/**\n * 转换图片格式,默认webp、最大高度1080,高度小于1080自动不做尺寸变换\n * @param url\n * @param format\n * @param maxHeight\n * @param quality\n */\nexport async function convertImage(url: string | Buffer, { format = 'webp', maxHeight = 1080, quality = 80 }: ConvertOption = {}) {\n\tlet buf = await toBuffer(url);\n\n\tconst webpBuffer = await new Promise((resolve) => {\n\t\tsharp(buf)\n\t\t\t.resize({\n\t\t\t\twidth: maxHeight,\n\t\t\t\theight: maxHeight,\n\t\t\t\tfit: 'inside',\n\t\t\t\twithoutEnlargement: true,\n\t\t\t})\n\t\t\t.toFormat(format, { quality })\n\t\t\t.toBuffer((err, buf) => {\n\t\t\t\tresolve(buf);\n\t\t\t});\n\t});\n\n\tconst md5 = SparkMD5.ArrayBuffer.hash(webpBuffer);\n\n\treturn {\n\t\tbuffer: webpBuffer,\n\t\tfilename: `${md5}.${format}`,\n\t};\n}\n\n/**\n * 替换scoreJson图片地址\n * @param scoreJson\n * @param onReplaceImage\n */\nexport const replaceScoreJsonImages = (scoreJson: ScoreJSON, onReplaceImage: (src: string) => string = (src) => src) => {\n\tconst json = JSON.parse(JSON.stringify(scoreJson));\n\n\tjson.pages.forEach((page) => {\n\t\tpage?.src && (page.src = onReplaceImage(page?.src));\n\t});\n\n\tjson.lines.forEach((system) => {\n\t\tsystem.lineStaves.forEach((line) => {\n\t\t\tline.imgs.forEach((staff) => {\n\t\t\t\tstaff?.src && (staff.src = onReplaceImage(staff.src));\n\t\t\t});\n\t\t});\n\t});\n\n\treturn json;\n};\n\n/**\n * 获取scoreJson图片资源列表\n * @param scoreJson\n */\nexport const getScoreJsonImages = (scoreJson: ScoreJSON) => {\n\treturn [\n\t\t...scoreJson.pages.map((page) => page?.src),\n\t\t...scoreJson.lines\n\t\t\t.map((system) => system.lineStaves.map((staff) => staff.imgs))\n\t\t\t.flat(2)\n\t\t\t.map((staff) => staff?.src)\n\t\t\t.filter(Boolean),\n\t];\n};\n\ninterface ScorePatchesUpdateOptions {\n\tsolutionStore?: SolutionStore;\n}\n\nexport const updateScorePatches = (score: starry.Score, measures: starry.SpartitoMeasure[], options: ScorePatchesUpdateOptions = {}): void => {\n\tconsole.assert(\n\t\tmeasures.every((measure) => measure.validRegulated),\n\t\t'[updateScorePatches] some measures not valid regulated:',\n\t\tmeasures.filter((measure) => !measure.validRegulated)\n\t);\n\n\tscore.patches = measures.map((measure) => measure.createPatch());\n\n\tif (options?.solutionStore) {\n\t\tscore.assemble();\n\t\tconst spartito = score.makeSpartito();\n\n\t\tmeasures.forEach((measure) => {\n\t\t\toptions.solutionStore!.set(measure.regulationHash, { ...measure.asSolution(), priority: 1 });\n\t\t\tif (measure.regulationHash0 !== measure.regulationHash) {\n\t\t\t\tconst originMeasure = spartito.measures.find((m) => m.measureIndex === measure.measureIndex);\n\t\t\t\toptions.solutionStore!.set(measure.regulationHash0, { ...measure.asSolution(originMeasure), priority: 1 });\n\t\t\t}\n\t\t});\n\t}\n};\n\ninterface EditableMeasuresSaveOptions {\n\tstatus?: number;\n\tsolutionStore?: SolutionStore;\n}\n\nexport const saveEditableMeasures = async (\n\tscore: starry.Score,\n\tmeasureIndices: number[],\n\tsaveMeasure: SaveIssueMeasure,\n\t{ status = 2, solutionStore }: EditableMeasuresSaveOptions = {}\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\n\tconst measures = measureIndices\n\t\t.map((index) => spartito.measures.find((measure) => measure.measureIndex === index))\n\t\t.filter(Boolean) as starry.SpartitoMeasure[];\n\n\tif (solutionStore) {\n\t\tconst solutions = await solutionStore.batchGet(measures.map((measure) => measure.regulationHash0));\n\t\tmeasures.forEach((measure, i) => {\n\t\t\tconst solution = solutions[i];\n\t\t\tif (solution) measure.applySolution(solution);\n\t\t});\n\t}\n\n\tmeasures.forEach((measure) => {\n\t\tsaveMeasure({\n\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\tmeasure: new starry.EditableMeasure(measure),\n\t\t\tstatus,\n\t\t});\n\t});\n};\n","import sha1 from 'sha1';\nimport { Canvas, Image, loadImage } from 'skia-canvas';\nimport { WeakLRUCache } from 'weak-lru-cache';\nimport * as starry from '../../src/starry';\nimport { SemanticGraph } from '../../src/starry';\nimport { LayoutResult, PyClients } from './predictors';\nimport { constructSystem, convertImage } from './util';\n\nglobalThis.OffscreenCanvas = (globalThis as any).OffscreenCanvas || Canvas;\n(globalThis as any).Image = (globalThis as any).Image || Image;\nglobalThis.btoa = globalThis.btoa || ((str: string) => Buffer.from(str, 'binary').toString('base64'));\n\nconst STAFF_PADDING_LEFT = 32;\n\nconst MAX_PAGE_WIDTH = 1200;\n\nconst GAUGE_VISION_SPEC = {\n\tviewportHeight: 256,\n\tviewportUnit: 8,\n};\n\nconst MASK_VISION_SPEC = {\n\tviewportHeight: 192,\n\tviewportUnit: 8,\n};\n\nconst SEMANTIC_VISION_SPEC = {\n\tviewportHeight: 192,\n\tviewportUnit: 8,\n};\n\ninterface OMRStat {\n\tcost: number; // in milliseconds\n\tpagesCost: number; // in milliseconds\n\tpages: number;\n}\n\ninterface OMRSummary {\n\tcostTotal: number; // in milliseconds\n\tcostPerPage: number; // in milliseconds\n\tpagesTotal: number;\n\tscoreN: number;\n}\n\n/**\n * 为布局识别的图片标准化处理\n * @param image\n * @param width\n */\nfunction scaleForLayout(image: Image, width: number): Canvas {\n\tlet height = (image.height / image.width) * width;\n\n\tconst canvas = new Canvas(width, height);\n\tconst ctx = canvas.getContext('2d');\n\n\tctx.drawImage(image, 0, 0, width, (width * image.height) / image.width);\n\n\treturn canvas;\n}\n\n/**\n * 根据所有图像的检测结果设置合适的全局页面尺寸\n * @param score\n * @param detections\n * @param outputWidth\n */\nfunction setGlobalPageSize(score: starry.Score, detections: LayoutResult[], outputWidth: number) {\n\tconst sizeRatios = detections\n\t\t.filter((s) => s && s.detection && s.detection.areas?.length)\n\t\t.map((v, k) => {\n\t\t\tconst staffInterval = Math.min(...v.detection.areas.filter((area) => area.staves?.middleRhos?.length).map((x) => x.staves.interval));\n\n\t\t\tconst sourceSize = v.sourceSize;\n\t\t\treturn {\n\t\t\t\t...v,\n\t\t\t\tindex: k,\n\t\t\t\tvw: sourceSize.width / staffInterval, // 页面宽度(逻辑单位)\n\t\t\t\thwr: sourceSize.height / sourceSize.width, // 页面高宽比\n\t\t\t};\n\t\t});\n\n\tif (!sizeRatios.length) {\n\t\tthrow new Error('empty result');\n\t}\n\n\tconst maxVW = sizeRatios.sort((a, b) => b.vw - a.vw)[0];\n\tconst maxAspect = Math.max(...sizeRatios.map((r) => r.hwr));\n\n\tscore.unitSize = outputWidth / maxVW.vw;\n\n\t// 页面显示尺寸\n\tscore.pageSize = {\n\t\twidth: outputWidth,\n\t\theight: outputWidth * maxAspect,\n\t};\n}\n\nconst batchTask = (fn: () => Promise) => fn();\nconst concurrencyTask = (fns: (() => Promise)[]) => Promise.all(fns.map((fn) => fn()));\n\nconst shootStaffImage = async (\n\tsystem: starry.System,\n\tstaffIndex: number,\n\t{ paddingLeft = 0, scaling = 1, spec }: { paddingLeft?: number; scaling?: number; spec: { viewportHeight: number; viewportUnit: number } }\n): Promise => {\n\tif (!system || !system.backgroundImage) return null;\n\n\tconst staff = system.staves[staffIndex];\n\tif (!staff) return null;\n\n\tconst middleUnits = spec.viewportHeight / spec.viewportUnit / 2;\n\n\tconst width = system.imagePosition.width * spec.viewportUnit;\n\tconst height = system.imagePosition.height * spec.viewportUnit;\n\tconst x = system.imagePosition.x * spec.viewportUnit + paddingLeft;\n\tconst y = (system.imagePosition.y - (staff.top + staff.staffY - middleUnits)) * spec.viewportUnit;\n\n\tconst canvas = new Canvas(Math.round(width + x) * scaling, spec.viewportHeight * scaling);\n\tconst context = canvas.getContext('2d');\n\tcontext.fillStyle = 'white';\n\tcontext.fillRect(0, 0, canvas.width, canvas.height);\n\tcontext.drawImage(await loadImage(system.backgroundImage), x * scaling, y * scaling, width * scaling, height * scaling);\n\n\treturn canvas;\n\t// .substr(22);\t// remove the prefix of 'data:image/png;base64,'\n};\n\n/**\n * 根据布局检测结果进行截图\n * @param score\n * @param pageCanvas\n * @param page\n * @param detection\n */\nasync function shootImageByDetection({\n\tpage,\n\tscore,\n\tpageCanvas,\n}: {\n\tscore: starry.Score;\n\tpage: starry.Page;\n\tpageCanvas: Canvas; // 原始图片绘制好的canvas\n}) {\n\tif (!page?.layout?.areas?.length) {\n\t\treturn null;\n\t}\n\n\tpage.width = score.pageSize.width / score.unitSize;\n\tpage.height = score.pageSize.height / score.unitSize;\n\n\tconst correctCanvas = new Canvas(pageCanvas.width, pageCanvas.height);\n\tconst ctx = correctCanvas.getContext('2d');\n\n\tctx.save();\n\n\tconst { width, height } = correctCanvas;\n\tconst [a, b, c, d] = page.source.matrix;\n\n\tctx.setTransform(a, b, c, d, (-1 / 2) * width + (1 / 2) * a * width + (1 / 2) * b * height, (-1 / 2) * height + (1 / 2) * c * width + (1 / 2) * d * height);\n\n\tctx.drawImage(pageCanvas, 0, 0);\n\n\tctx.restore();\n\n\tconst interval = page.source.interval;\n\n\tpage.layout.areas.map((area, systemIndex) => {\n\t\tconsole.assert(area.staves?.middleRhos?.length, '[shootImageByDetection] empty area:', area);\n\n\t\tconst data = ctx.getImageData(area.x, area.y, area.width, area.height);\n\n\t\tconst canvas = new Canvas(area.width, area.height);\n\n\t\tconst context = canvas.getContext('2d');\n\t\t// context.rotate(-area.staves.theta);\n\t\tcontext.putImageData(data, 0, 0);\n\n\t\tconst detection = area.staves;\n\t\tconst size = { width: area.width, height: area.height };\n\n\t\tconst sourceCenter = {\n\t\t\tx: pageCanvas.width / 2 / interval,\n\t\t\ty: pageCanvas.height / 2 / interval,\n\t\t};\n\n\t\tconst position = {\n\t\t\tx: (area.x + area.staves.phi1) / interval - sourceCenter.x + page.width / 2,\n\t\t\ty: area.y / interval - sourceCenter.y + page.height / 2,\n\t\t};\n\n\t\tpage.systems[systemIndex] = constructSystem({\n\t\t\tpage,\n\t\t\tbackgroundImage: canvas.toBufferSync('png'),\n\t\t\tdetection,\n\t\t\timageSize: size,\n\t\t\tposition,\n\t\t});\n\t});\n\n\treturn correctCanvas;\n}\n\nasync function shootStaffBackgroundImage({ system, staff, staffIndex }: { system: starry.System; staff: starry.Staff; staffIndex: number }) {\n\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\tspec: SEMANTIC_VISION_SPEC,\n\t});\n\n\tstaff.backgroundImage = sourceCanvas.toBufferSync('png');\n\n\t// No phi1 offset here: shootStaffImage bakes the system's barline offset\n\t// into the canvas coordinate space, so -paddingLeft is already correct.\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - SEMANTIC_VISION_SPEC.viewportHeight / 2 / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\twidth: sourceCanvas.width / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\theight: sourceCanvas.height / SEMANTIC_VISION_SPEC.viewportUnit,\n\t};\n}\n\n/**\n * 单个staff的变形矫正\n * @param system\n * @param staff\n * @param staffIndex\n * @param gaugeImage\n * @param pyClients\n */\nasync function gaugeStaff({\n\tsystem,\n\tstaff,\n\tstaffIndex,\n\tgaugeImage,\n\tpyClients,\n}: {\n\tsystem: starry.System;\n\tstaff: starry.Staff;\n\tstaffIndex: number;\n\tgaugeImage: Buffer;\n\tpyClients: PyClients;\n}) {\n\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\tspec: GAUGE_VISION_SPEC,\n\t\tscaling: 2,\n\t});\n\n\tconst sourceBuffer = sourceCanvas.toBufferSync('png');\n\n\tconst baseY = (system.middleY - (staff.top + staff.staffY)) * GAUGE_VISION_SPEC.viewportUnit + GAUGE_VISION_SPEC.viewportHeight / 2;\n\n\tconst { buffer, size } = await pyClients.predictScoreImages('gaugeRenderer', [sourceBuffer, gaugeImage, baseY]);\n\n\tstaff.backgroundImage = buffer;\n\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / GAUGE_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - size.height / 2 / GAUGE_VISION_SPEC.viewportUnit,\n\t\twidth: size.width / GAUGE_VISION_SPEC.viewportUnit,\n\t\theight: size.height / GAUGE_VISION_SPEC.viewportUnit,\n\t};\n\n\tstaff.maskImage = null;\n}\n\n/**\n * 单个staff的降噪\n * @param staff\n * @param staffIndex\n * @param maskImage\n */\nasync function maskStaff({ staff, staffIndex, maskImage }: { staff: starry.Staff; staffIndex: number; maskImage: Buffer }) {\n\tconst img = await loadImage(maskImage);\n\n\tstaff.maskImage = maskImage;\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / MASK_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - MASK_VISION_SPEC.viewportHeight / 2 / MASK_VISION_SPEC.viewportUnit,\n\t\twidth: img.width / MASK_VISION_SPEC.viewportUnit,\n\t\theight: img.height / MASK_VISION_SPEC.viewportUnit,\n\t};\n}\n\n/**\n * 单个staff的语义识别\n * @param score\n * @param staffIndex\n * @param system\n * @param staff\n * @param graph\n */\nasync function semanticStaff({\n\tscore,\n\tstaffIndex,\n\tsystem,\n\tstaff,\n\tgraph,\n}: {\n\tscore: starry.Score;\n\tstaffIndex: number;\n\tsystem: starry.System;\n\tstaff: starry.Staff;\n\tgraph: SemanticGraph;\n}) {\n\tgraph.offset(-STAFF_PADDING_LEFT / SEMANTIC_VISION_SPEC.viewportUnit, 0);\n\n\tsystem.assignSemantics(staffIndex, graph);\n\n\tstaff.assignSemantics(graph);\n\tstaff.clearPredictedTokens();\n\n\tscore.assembleSystem(system, score.settings?.semanticConfidenceThreshold || 1);\n}\n\nfunction replacePageImages(page: starry.Page, onReplaceImageKey: (src: string) => any) {\n\tconst tasks = [\n\t\t[page.source, 'url'],\n\t\t...page.systems\n\t\t\t.map((system) => {\n\t\t\t\treturn [\n\t\t\t\t\t[system, 'backgroundImage'],\n\t\t\t\t\t...system.staves\n\t\t\t\t\t\t.map((staff) => [\n\t\t\t\t\t\t\t[staff, 'backgroundImage'],\n\t\t\t\t\t\t\t[staff, 'maskImage'],\n\t\t\t\t\t\t])\n\t\t\t\t\t\t.flat(),\n\t\t\t\t];\n\t\t\t})\n\t\t\t.flat(),\n\t];\n\n\ttasks.map(([target, key]: [any, string]) => {\n\t\ttarget[key] = onReplaceImageKey(target[key]);\n\t});\n}\n\nexport type TaskProgress = { total?: number; finished?: number };\n\nexport interface OMRPage {\n\turl: string | Buffer;\n\tkey?: string;\n\tlayout?: LayoutResult;\n\trenew?: boolean;\n\tenableGauge?: boolean;\n}\n\nexport interface ProgressState {\n\tlayout?: TaskProgress;\n\ttext?: TaskProgress;\n\tgauge?: TaskProgress;\n\tmask?: TaskProgress;\n\tsemantic?: TaskProgress;\n\tregulate?: TaskProgress;\n\tbrackets?: TaskProgress;\n}\n\nclass OMRProgress {\n\tstate: ProgressState = {};\n\n\tonChange: (evt: ProgressState) => void;\n\n\tconstructor(onChange: (evt: ProgressState) => void) {\n\t\tthis.onChange = onChange;\n\t}\n\n\tsetTotal(stage: keyof ProgressState, total: number) {\n\t\tthis.state[stage] = this.state[stage] || {\n\t\t\ttotal,\n\t\t\tfinished: 0,\n\t\t};\n\t}\n\n\tincrease(stage: keyof ProgressState, step = 1) {\n\t\tconst info: TaskProgress = this.state[stage] || {\n\t\t\tfinished: 0,\n\t\t};\n\t\tinfo.finished += step;\n\n\t\tthis.onChange(this.state);\n\t}\n}\n\ntype SourceImage = string | Buffer;\n\nexport interface OMROption {\n\toutputWidth?: number;\n\ttitle?: string; // 曲谱标题\n\tpageStore?: {\n\t\thas?: (key: string) => Promise;\n\t\tget: (key: string) => Promise;\n\t\tset: (key: string, val: string) => Promise;\n\t};\n\trenew?: boolean;\n\tprocesses?: (keyof ProgressState)[]; // 选择流程\n\tonProgress?: (progress: ProgressState) => void;\n\tonReplaceImage?: (src: SourceImage) => Promise; // 替换所有图片地址,用于上传或者格式转换\n}\n\nconst lruCache = new WeakLRUCache();\n\n// 默认store\nconst pageStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as string;\n\t},\n\tasync set(key: string, val: string) {\n\t\tlruCache.setValue(key, val);\n\t},\n};\n\n/**\n * 默认将图片转换为webp格式的base64字符串\n * @param src\n */\nconst onReplaceImage = async (src: SourceImage) => {\n\tif (src instanceof Buffer || (typeof src === 'string' && (/^https?:\\/\\//.test(src) || /^data:image\\//.test(src)))) {\n\t\tconst webpBuffer = (await convertImage(src)).buffer;\n\t\treturn `data:image/webp;base64,${webpBuffer.toString('base64')}`;\n\t}\n\n\treturn src;\n};\n\n/**\n * 识别所有图片\n * @param pyClients\n * @param images\n * @param option\n */\nexport const predictPages = async (\n\tpyClients: PyClients,\n\timages: OMRPage[],\n\toption: OMROption = { outputWidth: 1200, pageStore, onReplaceImage }\n): Promise<{ score: starry.Score; omitPages: number[]; stat: OMRStat }> => {\n\tconst logger = pyClients.logger;\n\n\toption.outputWidth = option.outputWidth || 1200;\n\toption.pageStore = option.pageStore || pageStore;\n\toption.onReplaceImage = option.onReplaceImage || onReplaceImage;\n\n\toption.processes =\n\t\tArray.isArray(option.processes) && option.processes.length > 0 ? option.processes : ['layout', 'text', 'gauge', 'mask', 'semantic', 'brackets'];\n\tconst progress: OMRProgress = new OMRProgress(option.onProgress);\n\n\tconst t0 = Date.now();\n\n\t// 预处理删除不合法区域\n\timages.forEach((image) => {\n\t\tif (image.layout?.detection) {\n\t\t\timage.layout.detection.areas = image.layout.detection?.areas?.filter((a) => a?.staves?.middleRhos?.length > 0);\n\t\t} else {\n\t\t\tdelete image.layout;\n\t\t}\n\t});\n\n\tconst score = new starry.Score({\n\t\ttitle: option?.title,\n\t\tstavesCount: 2,\n\t\tpaperOptions: {\n\t\t\traggedLast: true,\n\t\t\traggedLastBottom: true,\n\t\t},\n\t\theaders: {},\n\t\tinstrumentDict: {},\n\t\tsettings: {\n\t\t\tenabledGauge: option.processes.includes('gauge'),\n\t\t\tsemanticConfidenceThreshold: 1,\n\t\t},\n\t});\n\n\tlogger.info(`[predictor]: download_source_images-${images.length}`);\n\n\t// 原始拍摄图\n\tconst originalImages: Image[] = await Promise.all(images.map((img) => loadImage(img.url as any)));\n\n\tlogger.info(`[predictor]: source_images_downloaded-${images.length}`);\n\n\t//const INPUT_IMAGE_WIDTH = images.filter((x) => x?.layout?.interval)?.[0]?.layout?.sourceSize?.width;\n\n\t/******************************* 布局识别 start *************************/\n\t// 输入给布局检测的图\n\tconst pageCanvasList: Canvas[] = originalImages.map((img, index) => scaleForLayout(img, images[index]!.layout?.sourceSize?.width ?? img.width));\n\n\tprogress.setTotal('layout', originalImages.length);\n\tprogress.setTotal('text', originalImages.length);\n\n\tconst detections = await Promise.all(\n\t\tpageCanvasList.map(async (cvs, key) => {\n\t\t\tif (!images[key].layout) return (await pyClients.predictScoreImages('layout', [cvs.toBufferSync('png')]))?.[0];\n\n\t\t\t// reinforce layout from front-end if no gauge\n\t\t\tif (!images[key].enableGauge && images[key]?.layout?.detection?.areas?.length)\n\t\t\t\treturn (await pyClients.predictScoreImages('layout$reinforce', [cvs.toBufferSync('png')], [images[key].layout]))?.[0];\n\n\t\t\treturn images[key].layout;\n\t\t})\n\t);\n\n\tdetections.forEach((page) => {\n\t\tpage.detection.areas = page.detection?.areas?.filter((a) => a?.staves?.middleRhos?.length > 0);\n\t});\n\n\tconst imageURLMap = new Map();\n\tconst collectImage = async (source: SourceImage): Promise => {\n\t\tconst url = await option.onReplaceImage(source);\n\t\timageURLMap.set(source, url);\n\t};\n\n\t// 根据所有页面的宽高比决定全局显示尺寸\n\tsetGlobalPageSize(score, detections, option.outputWidth);\n\n\tasync function createPage(detect, pageIndex) {\n\t\tconst { url, key, layout, enableGauge } = images[pageIndex];\n\n\t\tconst pageKey = sha1(JSON.stringify({ key: key || url, layout, enableGauge }));\n\n\t\tconst cachedPageJson = await option.pageStore.get(pageKey);\n\n\t\tconst omit = !option.renew && ((cachedPageJson && !images[pageIndex].renew) || !detect.detection.areas?.length);\n\n\t\tconst page = (score.pages[pageIndex] =\n\t\t\tomit && cachedPageJson\n\t\t\t\t? starry.recoverJSON(cachedPageJson, starry)\n\t\t\t\t: new starry.Page({\n\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\tname: key || (typeof url === 'string' && /https?:\\/\\//.test(url) ? url : null),\n\t\t\t\t\t\t\tsize: 0,\n\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\tcrop: {\n\t\t\t\t\t\t\t\tunit: '%',\n\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\t\t\theight: 100,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdimensions: detect.sourceSize,\n\t\t\t\t\t\t\tmatrix: [Math.cos(detect.theta), -Math.sin(detect.theta), Math.sin(detect.theta), Math.cos(detect.theta), 0, 0],\n\t\t\t\t\t\t\tinterval: detect.interval,\n\t\t\t\t\t\t\tneedGauge: images[pageIndex].enableGauge,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlayout: detect.detection,\n\t\t\t\t }));\n\n\t\tconst correctCanvas = omit\n\t\t\t? null\n\t\t\t: await shootImageByDetection({\n\t\t\t\t\tscore,\n\t\t\t\t\tpage,\n\t\t\t\t\tpageCanvas: pageCanvasList[pageIndex],\n\t\t\t });\n\n\t\tprogress.increase('layout');\n\n\t\treturn {\n\t\t\tpage,\n\t\t\tomit,\n\t\t\thash: pageKey,\n\t\t\tcorrectCanvas,\n\t\t};\n\t}\n\n\tconst systemsCount = detections.reduce((acc, x) => acc + (x.detection.areas?.length ?? 0), 0);\n\tconst stavesCount = detections.reduce((acc, x) => acc + (x.detection.areas?.reduce?.((a, y) => a + (y.staves?.middleRhos?.length ?? 0), 0) ?? 0), 0);\n\n\tprogress.setTotal('gauge', stavesCount);\n\tprogress.setTotal('mask', stavesCount);\n\tprogress.setTotal('semantic', stavesCount);\n\tprogress.setTotal('brackets', systemsCount);\n\n\tconst allTasks = [];\n\n\tconst omitPages = [];\n\n\tconst t1 = Date.now();\n\n\tlet n_page = 0;\n\n\tfor (const pageIndex of detections.keys()) {\n\t\tconst pageTasks = [];\n\n\t\tconst { page, correctCanvas, omit, hash } = await createPage(detections[pageIndex], pageIndex);\n\n\t\tpageTasks.push(collectImage(page.source.url));\n\t\tpageTasks.push(...page.systems.map((system) => collectImage(system.backgroundImage)));\n\n\t\tlogger.info(`[predictor]: check_cache_pageIndex-${pageIndex} omit: ${omit}`);\n\t\tif (omit) {\n\t\t\tomitPages.push(pageIndex);\n\t\t} else {\n\t\t\tconst staves = page.systems\n\t\t\t\t.map((system, systemIndex) => system.staves.map((staff, staffIndex) => ({ pageIndex, systemIndex, staffIndex, page, system, staff })))\n\t\t\t\t.flat(1);\n\n\t\t\tawait concurrencyTask([\n\t\t\t\t/******************************* 括号检测 start *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\tif (!option.processes.includes('brackets')) return;\n\n\t\t\t\t\tconst detection = page.layout;\n\t\t\t\t\tconst interval = page.source.interval;\n\n\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\tconst bracketImages = page.systems.map((system, systemIndex) => {\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tstaves: { middleRhos, phi1 },\n\t\t\t\t\t\t} = detection.areas[systemIndex];\n\n\t\t\t\t\t\tconst topMid = middleRhos[0];\n\t\t\t\t\t\tconst bottomMid = middleRhos[middleRhos.length - 1];\n\n\t\t\t\t\t\tconst sourceRect = {\n\t\t\t\t\t\t\tx: x + phi1 - 4 * interval,\n\t\t\t\t\t\t\ty: y + topMid - 4 * interval,\n\t\t\t\t\t\t\twidth: 8 * interval,\n\t\t\t\t\t\t\theight: bottomMid - topMid + 8 * interval,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst OUTPUT_INTERVAL = 8;\n\n\t\t\t\t\t\tconst canvas = new Canvas(OUTPUT_INTERVAL * 8, (sourceRect.height / interval) * OUTPUT_INTERVAL);\n\n\t\t\t\t\t\tconst context = canvas.getContext('2d');\n\t\t\t\t\t\tcontext.drawImage(correctCanvas, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height, 0, 0, canvas.width, canvas.height);\n\n\t\t\t\t\t\t// console.log(pageIndex, systemIndex, JSON.stringify(sourceRect), correctCanvas.width, correctCanvas.height)\n\t\t\t\t\t\t// const pctx = canvas.getContext('2d')\n\t\t\t\t\t\t// pctx.strokeStyle = 'red'\n\t\t\t\t\t\t// pctx.fillStyle = 'rgba(255, 0, 0, 0.2)'\n\t\t\t\t\t\t// pctx.fillRect(sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height)\n\t\t\t\t\t\t// const area = detections[pageIndex].detection.areas[systemIndex]\n\t\t\t\t\t\t// pctx.strokeStyle = 'green'\n\t\t\t\t\t\t// pctx.fillStyle = 'rgba(0, 255, 0, 0.1)'\n\t\t\t\t\t\t// pctx.fillRect(area.x, area.y, area.width, area.height)\n\t\t\t\t\t\t// pctx.fillRect(area.x, area.y, area.width, area.height)\n\t\t\t\t\t\t// require('fs').writeFile(`test--system-${systemIndex}.png`, canvas.toBufferSync('png'), () => {})\n\t\t\t\t\t\t// require('fs-extra').writeFile(`test--brackets-${pageIndex}-${systemIndex}.png`, canvas.toBufferSync('png'))\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\tbuffer: canvas.toBufferSync('png'),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\t\tlogger.info(`[predictor]: brackets js [pageIndex-${pageIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\tconst bracketsRes = await pyClients.predictScoreImages('brackets', { buffers: bracketImages.map((x) => x.buffer) });\n\t\t\t\t\tprogress.increase('brackets', bracketImages.length);\n\n\t\t\t\t\tbracketImages.forEach(({ system }, index) => {\n\t\t\t\t\t\tif (bracketsRes[index]) {\n\t\t\t\t\t\t\tsystem.bracketsAppearance = bracketsRes[index];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t/******************************* 括号检测 end *************************/\n\n\t\t\t\t/******************************* 文本识别 start *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\tif (!option.processes.includes('text')) return;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t// await require('fs-extra').writeFile(`test--text-location-${pageIndex}.png`, correctCanvas.toBufferSync('png'))\n\t\t\t\t\t\tconst bufferForText = correctCanvas.toBufferSync('png');\n\n\t\t\t\t\t\tconst resultLoc = await pyClients.predictScoreImages('textLoc', [bufferForText]);\n\n\t\t\t\t\t\tconst location = resultLoc[0].filter((box) => box.score > 0);\n\n\t\t\t\t\t\tif (location.length > 0) {\n\t\t\t\t\t\t\tconst [resultOCR] = await pyClients.predictScoreImages('textOcr', {\n\t\t\t\t\t\t\t\tbuffers: [bufferForText],\n\t\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tpage.assignTexts(resultOCR.areas, resultOCR.imageSize);\n\t\t\t\t\t\t\tpage.assemble();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlogger.info(`[predictor]: text js [pageIndex-${pageIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\tprogress.increase('text');\n\n\t\t\t\t\t\tif (!option.title) {\n\t\t\t\t\t\t\tconst coverTexts: {\n\t\t\t\t\t\t\t\tconfidence: number;\n\t\t\t\t\t\t\t\tfontSize: number;\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\ttext: string;\n\t\t\t\t\t\t\t\ttextType: 'Title' | 'Author';\n\t\t\t\t\t\t\t\ttype: starry.TokenType;\n\t\t\t\t\t\t\t\twidth_: number;\n\t\t\t\t\t\t\t\tx: number;\n\t\t\t\t\t\t\t\ty: number;\n\t\t\t\t\t\t\t}[] = score.pages[0].tokens as any;\n\n\t\t\t\t\t\t\tif (Array.isArray(coverTexts) && coverTexts.length > 0) {\n\t\t\t\t\t\t\t\tconst [titleToken] = coverTexts\n\t\t\t\t\t\t\t\t\t.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Title')\n\t\t\t\t\t\t\t\t\t.sort((a, b) => b.fontSize - a.fontSize);\n\n\t\t\t\t\t\t\t\tif (titleToken) {\n\t\t\t\t\t\t\t\t\tscore.title = titleToken.text;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tlogger.error(`[predictor]: text js [pageIndex-${pageIndex}] ${JSON.stringify(err)}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t/******************************* 文本识别 end *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\t/******************************* 变形矫正 start *************************/\n\t\t\t\t\tawait batchTask(async () => {\n\t\t\t\t\t\tconst disableGauge = !option.processes.includes('gauge') || images[pageIndex].enableGauge === false;\n\n\t\t\t\t\t\tif (!disableGauge) {\n\t\t\t\t\t\t\tconst gaugeRes = await pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t'gauge',\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tstaves.map(async ({ staffIndex, system }) => {\n\t\t\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\t\t\t\t\t\t\t\t\t\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\t\t\t\t\t\t\t\t\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\t\t\t\t\t\t\t\t\t\tspec: GAUGE_VISION_SPEC,\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js shoot [page-${pageIndex}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\t\t\t\t\treturn sourceCanvas.toBufferSync('png');\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tfor (const [index, { system, staff, pageIndex, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js [page-${pageIndex}, staff-${staffIndex}] start..`);\n\t\t\t\t\t\t\t\tawait gaugeStaff({\n\t\t\t\t\t\t\t\t\tpyClients,\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tgaugeImage: gaugeRes[index].image,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js [page-${pageIndex}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\t\t\tprogress.increase('gauge');\n\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.backgroundImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (const [_, { system, staff, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tawait shootStaffBackgroundImage({\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.backgroundImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t/******************************* 变形矫正 end *************************/\n\n\t\t\t\t\tawait concurrencyTask([\n\t\t\t\t\t\t/******************************* 降噪 start *************************/\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tif (!option.processes.includes('mask')) return;\n\n\t\t\t\t\t\t\tconst maskRes = await pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t'mask',\n\t\t\t\t\t\t\t\tstaves.map(({ staff }) => staff.backgroundImage as Buffer)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tfor (const [index, { staff, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tawait maskStaff({\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tmaskImage: maskRes[index].image,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: mask js [page-${pageIndex}, ${index}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\t\t\t\t\t\t\t\tprogress.increase('mask');\n\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.maskImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/******************************* 降噪 end *************************/\n\n\t\t\t\t\t\t/******************************* 语义识别 start *************************/\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tif (!option.processes.includes('semantic')) return;\n\n\t\t\t\t\t\t\tconst semanticRes = starry.recoverJSON(\n\t\t\t\t\t\t\t\tawait pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t\t'semantic',\n\t\t\t\t\t\t\t\t\tstaves.map(({ staff }) => staff.backgroundImage as Buffer)\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tstarry\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tstaves.forEach(({ system }) => system.clearTokens());\n\n\t\t\t\t\t\t\tfor (const [index, { staffIndex, system, staff }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tawait semanticStaff({\n\t\t\t\t\t\t\t\t\tscore,\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tgraph: semanticRes[index],\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t\t\t`[predictor]: semantic js [page-${pageIndex}, system-${system.index}, staff-${staff.index}] duration: ${\n\t\t\t\t\t\t\t\t\t\tDate.now() - startTime\n\t\t\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tprogress.increase('semantic');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/******************************* 语义识别 end *************************/\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\t++n_page;\n\t\t}\n\n\t\tallTasks.push(\n\t\t\tPromise.all(pageTasks).then(() => {\n\t\t\t\treplacePageImages(page, (src) => imageURLMap.get(src));\n\t\t\t\tlogger.info(`[predictor]: pageStore set: [${pageIndex}]`);\n\t\t\t\treturn option.pageStore.set(hash, JSON.stringify(page));\n\t\t\t})\n\t\t);\n\t}\n\n\tconst t2 = Date.now();\n\n\tawait Promise.all(allTasks);\n\n\tlogger.info(`[predictor]: inferenceStaffLayout: ${score.title}, [${score.systems.length}]`);\n\n\tscore.inferenceStaffLayout();\n\n\tlogger.info(`[predictor]: done: ${score.title}`);\n\n\t// correct semantic ids\n\tscore.assemble();\n\n\tconst t3 = Date.now();\n\n\treturn {\n\t\tscore,\n\t\tomitPages,\n\t\tstat: {\n\t\t\tcost: t3 - t0,\n\t\t\tpagesCost: t2 - t1,\n\t\t\tpages: n_page,\n\t\t},\n\t};\n};\n\nexport const abstractOMRStats = (stats: OMRStat[]): OMRSummary => {\n\tconst { costTotal, pagesCostTotal, pagesTotal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcostTotal: sum.costTotal + stat.cost,\n\t\t\tpagesCostTotal: sum.pagesCostTotal + stat.pagesCost,\n\t\t\tpagesTotal: sum.pagesTotal + stat.pages,\n\t\t}),\n\t\t{ costTotal: 0, pagesCostTotal: 0, pagesTotal: 0 }\n\t);\n\n\treturn {\n\t\tcostTotal,\n\t\tcostPerPage: pagesTotal ? costTotal / pagesTotal : null,\n\t\tpagesTotal,\n\t\tscoreN: stats.length,\n\t};\n};\n","import { EventTerm } from './term';\nimport type { SpartitoMeasure } from './spartitoMeasure';\n\ninterface EventRectification {\n\tid: number;\n\tdivision?: number;\n\tdots?: number;\n}\n\n// Here suppose sum of pvals equal to 1.\nconst multinomial_1 = (pvals: number[]): number => {\n\tconst n = Math.random();\n\n\tlet s = 0;\n\tfor (let i = 0; i < pvals.length; ++i) {\n\t\ts += pvals[i];\n\t\tif (s > n) return i;\n\t}\n\n\treturn pvals.length - 1;\n};\n\nconst looseVector = (ns: number[], factor = 0.9): number[] => {\n\tconst logits = ns.map((n) => Math.log(n) * factor);\n\tconst n2 = logits.map(Math.exp);\n\n\tconst sum = n2.reduce((sum, x) => sum + x, 0);\n\n\treturn n2.map((x) => x / sum);\n};\n\nconst looseEvent = (event: EventTerm): EventTerm => {\n\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return event;\n\n\tconst divisionVector = event.predisposition?.divisionVector ? looseVector(event.predisposition.divisionVector) : null;\n\tconst dotsVector = event.predisposition?.dotsVector ? looseVector(event.predisposition.dotsVector) : null;\n\n\treturn new EventTerm({\n\t\t...event,\n\t\tpredisposition: {\n\t\t\t...event.predisposition,\n\t\t\tdivisionVector,\n\t\t\tdotsVector,\n\t\t},\n\t});\n};\n\nclass MeasureRectification {\n\tevents: EventRectification[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\ttoString(): string {\n\t\treturn this.events\n\t\t\t.map((event) => {\n\t\t\t\tif (!event) return '';\n\n\t\t\t\tconst { division = '', dots = '' } = event;\n\t\t\t\treturn `${division}|${dots}`;\n\t\t\t})\n\t\t\t.join(',');\n\t}\n\n\tstatic default(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tconst division = event.predisposition.divisionVector ? event.division : undefined;\n\t\t\t\tconst dots = event.predisposition.dotsVector ? event.dots : undefined;\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n\n\tstatic roll(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tlet division = undefined;\n\t\t\t\tlet dots = undefined;\n\n\t\t\t\tif (event.predisposition.divisionVector) division = multinomial_1(event.predisposition.divisionVector);\n\n\t\t\t\tif (event.predisposition.dotsVector) dots = multinomial_1(event.predisposition.dotsVector);\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n}\n\nconst genMeasureRectifications = function* (measure: SpartitoMeasure): Generator {\n\tconst keys = new Set();\n\n\tconst origin = MeasureRectification.default(measure.events);\n\tkeys.add(origin.toString());\n\n\tyield origin;\n\n\tlet stale = 0;\n\tlet events = measure.events;\n\n\twhile (stale < 100) {\n\t\tif (stale && stale % 10 === 0) events = events.map(looseEvent);\n\n\t\tconst rectification = MeasureRectification.roll(events);\n\t\tconst key = rectification.toString();\n\n\t\tif (keys.has(key)) {\n\t\t\t++stale;\n\t\t\tcontinue;\n\t\t}\n\n\t\tstale = 0;\n\n\t\tkeys.add(key);\n\t\tyield rectification;\n\t}\n};\n\nexport { MeasureRectification, genMeasureRectifications };\n","import { WeakLRUCache } from 'weak-lru-cache';\n\nimport { RegulationSolution, SpartitoMeasure } from '../../src/starry';\n\nconst lruCache = new WeakLRUCache();\n\ninterface SolutionStore {\n\tget: (key: string) => Promise;\n\tset: (key: string, val: RegulationSolution) => Promise;\n\tbatchGet: (keys: string[]) => Promise;\n}\n\n// 默认store\nconst DefaultSolutionStore: SolutionStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as RegulationSolution;\n\t},\n\tasync set(key: string, val: RegulationSolution) {\n\t\tlruCache.setValue(key, val);\n\t},\n\tasync batchGet(keys: string[]) {\n\t\treturn keys.map((key) => lruCache.getValue(key) as RegulationSolution);\n\t},\n};\n\nconst enum MeasureStatus {\n\tDiscard = -1,\n\tSolved = 0,\n\tIssue = 1,\n\tFatal = 2,\n}\n\ninterface IssueMeasure {\n\tscoreId: string;\n\tmeasureIndex: number;\n\tmeasure: SpartitoMeasure;\n\tstatus: MeasureStatus;\n}\n\ntype SaveIssueMeasure = (data: Omit) => void;\n\nexport { SolutionStore, DefaultSolutionStore, MeasureStatus, IssueMeasure, SaveIssueMeasure };\n","import * as starry from '../../src/starry';\nimport { Logger } from './ZeroClient';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure, MeasureStatus } from './store';\n\ninterface BeadRegulationCounting {\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface RegulationBeadStat {\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tmeasures: BeadRegulationCounting;\n\tqualityScore: number;\n}\n\ninterface RegulationBeadSummary {\n\tscoreN: number;\n\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tcostPerMeasure: number | null; // in milliseconds\n\tcostPerTime: number | null; // in milliseconds\n\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface ProgressInfo {\n\tpass: number;\n\tremaining: number;\n\ttotal: number;\n}\n\ninterface RegulateBeadOption {\n\tlogger?: Logger;\n\tpickers: starry.BeadPicker[];\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tfreshOnly?: boolean;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n\tonProgress?: (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => void;\n\tonPassStart?: (pass: number, conditionName: string, pendingCount: number) => void;\n}\n\ninterface MeasureReord {\n\torigin: starry.SpartitoMeasure;\n\tcurrent: starry.SpartitoMeasure;\n\tevaluation?: starry.MeasureEvaluation;\n\tbaseQuality: number;\n\tpicker: starry.BeadPicker;\n}\n\ninterface BeadSolverOptions {\n\tstopLoss: number;\n\tquotaMax: number;\n\tquotaFactor: number;\n\tptFactor: number;\n}\n\nenum PendingCondition {\n\tErrorOnly,\n\tNotFine,\n\tImperfect,\n}\n\nconst isPending = (evaluation: starry.MeasureEvaluation, condition: PendingCondition) => {\n\tswitch (condition) {\n\t\tcase PendingCondition.ErrorOnly:\n\t\t\treturn evaluation.error;\n\n\t\tcase PendingCondition.Imperfect:\n\t\t\treturn !evaluation.perfect;\n\t}\n\n\treturn !evaluation.fine;\n};\n\ntype OnUpdate = (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean) => void;\n\nconst solveMeasureRecords = async (\n\trecords: MeasureReord[],\n\tonUpdate: OnUpdate,\n\tstdout: NodeJS.WritableStream | null,\n\toptions: Partial,\n\tpendingCondition: PendingCondition = PendingCondition.NotFine,\n\tpass: number = 0,\n\tonProgress?: RegulateBeadOption['onProgress']\n): Promise => {\n\tconst pendingRecords = records.filter(({ evaluation }) => !evaluation || isPending(evaluation, pendingCondition));\n\tstdout?.write('.'.repeat(pendingRecords.length));\n\tstdout?.write('\\b'.repeat(pendingRecords.length));\n\n\tconst total = pendingRecords.length;\n\tlet done = 0;\n\n\tfor (const record of pendingRecords) {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tconst solution = await starry.beadSolver.solveMeasure(measure, { picker: record.picker, ...options });\n\t\tmeasure.applySolution(solution);\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better =\n\t\t\t!record.evaluation ||\n\t\t\tevaluation.fine > record.evaluation.fine ||\n\t\t\t(evaluation.qualityScore > record.evaluation.qualityScore && evaluation.fine === record.evaluation.fine);\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\t\t}\n\n\t\tonUpdate(record.current, evaluation, better);\n\n\t\tdone++;\n\t\tonProgress?.(record.current, evaluation, better, { pass, remaining: total - done, total });\n\t}\n\n\tif (pendingRecords.length) stdout?.write('\\n');\n\n\treturn pendingRecords.length;\n};\n\nconst regulateWithBeadSolver = async (\n\tscore: starry.Score,\n\t{ logger, pickers, solutionStore = DefaultSolutionStore, ignoreCache, freshOnly, onSaveIssueMeasure, onProgress, onPassStart }: RegulateBeadOption\n): Promise => {\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\tlogger?.info(`[regulateWithBeadSolver] begin, measure total: ${spartito.measures.length}.`, ignoreCache ? 'ignoreCache' : '', freshOnly ? 'freshOnly' : '');\n\n\tconst records = spartito.measures\n\t\t.filter((measure) => measure.events?.length && !measure.patched)\n\t\t.map(\n\t\t\t(measure) =>\n\t\t\t\t({\n\t\t\t\t\torigin: measure.deepCopy(),\n\t\t\t\t\tcurrent: measure,\n\t\t\t\t\tevaluation: undefined,\n\t\t\t\t\tbaseQuality: 0,\n\t\t\t\t} as MeasureReord)\n\t\t);\n\n\t// rectify time signature\n\tfor (const measure of spartito.measures.filter((measure) => measure.events?.length)) {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > measure.events.length + 1);\n\t\tif (picker) await starry.beadSolver.estimateMeasure(measure, picker);\n\t}\n\tspartito.rectifyTimeSignatures(logger as any);\n\n\t// zero pickers' cost\n\tpickers.forEach((picker) => (picker.cost = 0));\n\n\tconst counting = {\n\t\tcached: 0,\n\t\tsimple: 0,\n\t\tcomputed: 0,\n\t\ttryTimes: 0,\n\t\tsolved: 0,\n\t\tissue: 0,\n\t\tfatal: 0,\n\t};\n\n\tlogger?.info(`[regulateWithBeadSolver] measures estimation finished.`);\n\n\t// apply solutions\n\tif (solutionStore && !ignoreCache)\n\t\tfor (const record of records) {\n\t\t\tconst solution = await solutionStore.get(record.origin.regulationHash0);\n\t\t\tif (solution) {\n\t\t\t\trecord.current.applySolution(solution);\n\t\t\t\t++counting.cached;\n\n\t\t\t\trecord.evaluation = starry.evaluateMeasure(record.current);\n\t\t\t\trecord.baseQuality = record.evaluation.qualityScore;\n\t\t\t}\n\t\t}\n\n\tlogger?.info('[regulateWithBeadSolver]', `${counting.cached}/${records.length}`, 'solutions loaded.');\n\n\tconst stdout = logger ? null : process.stdout;\n\tif (counting.cached) stdout?.write(`${counting.cached}c`);\n\n\trecords.forEach((record) => {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > record.current.events.length + 1);\n\t\tif (!picker) {\n\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] size out of range:`, record.current.events.length);\n\t\t} else record.picker = picker;\n\t});\n\n\tconst pendingRecords = records.filter((record) => record.picker && (!record.evaluation || (!record.evaluation.fine && !freshOnly))) as (MeasureReord & {\n\t\tevaluation: starry.MeasureEvaluation;\n\t})[];\n\n\t// solve by simple policy\n\tpendingRecords.forEach((record) => {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tmeasure.regulate({ policy: 'simple' });\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better = !record.evaluation || evaluation.qualityScore > record.evaluation.qualityScore;\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\n\t\t\tif (evaluation.perfect) {\n\t\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] regulated by simple policy.`);\n\t\t\t\t++counting.simple;\n\t\t\t}\n\t\t}\n\t});\n\tcounting.computed = pendingRecords.length - counting.simple;\n\n\tif (counting.simple) stdout?.write(`${counting.simple}s`);\n\n\tconst onUpdate = (measure, evaluation, better) => {\n\t\tlogger?.info(\n\t\t\t`[regulateWithBeadSolver] measure[${measure.measureIndex}/${spartito.measures.length}] regulated${\n\t\t\t\tbetter ? '+' : '-'\n\t\t\t}: ${evaluation.qualityScore.toFixed(3)}, ${evaluation.fine ? 'solved' : evaluation.error ? 'error' : 'issue'}, ${measure.regulationHash}`\n\t\t);\n\n\t\tstdout?.write(`\\x1b[${evaluation.fine ? '32' : evaluation.error ? '31' : '33'}m${better ? '+' : '-'}\\x1b[0m`);\n\t};\n\n\t// Global progress: total = all measures, remaining = non-fine measures across all passes\n\tconst totalMeasures = spartito.measures.length;\n\tconst computeRemaining = () => pendingRecords.filter((r) => !r.evaluation?.fine).length;\n\tconst wrappedOnProgress = onProgress\n\t\t? (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => {\n\t\t\t\tonProgress(measure, evaluation, better, { pass: progress.pass, remaining: computeRemaining(), total: totalMeasures });\n\t\t }\n\t\t: undefined;\n\n\tonPassStart?.(1, 'Imperfect', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.05, quotaMax: 200, quotaFactor: 3, ptFactor: 1 },\n\t\tPendingCondition.Imperfect,\n\t\t1,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(2, 'NotFine', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 20, ptFactor: 1.6 },\n\t\tPendingCondition.NotFine,\n\t\t2,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(3, 'ErrorOnly', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 40, ptFactor: 3 },\n\t\tPendingCondition.ErrorOnly,\n\t\t3,\n\t\twrappedOnProgress\n\t);\n\n\tpendingRecords.forEach(({ evaluation, baseQuality, current, origin }) => {\n\t\tif (evaluation.fine) ++counting.solved;\n\t\telse if (evaluation.error) ++counting.fatal;\n\t\telse ++counting.issue;\n\n\t\tif (evaluation.qualityScore > baseQuality || !baseQuality) {\n\t\t\tsolutionStore.set(origin.regulationHash0, { ...current.asSolution(origin), priority: -current?.solutionStat?.loss! });\n\t\t\tif (current.regulationHash !== origin.regulationHash0)\n\t\t\t\tsolutionStore.set(current.regulationHash, { ...current.asSolution(), priority: -current?.solutionStat?.loss! });\n\t\t\t//console.log('better:', current.measureIndex, evaluation.qualityScore, baseQuality);\n\t\t}\n\n\t\tif (!evaluation.fine) {\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: current.measureIndex,\n\t\t\t\tmeasure: new starry.EditableMeasure(current),\n\t\t\t\tstatus: evaluation.error ? MeasureStatus.Fatal : MeasureStatus.Issue,\n\t\t\t});\n\t\t}\n\t});\n\n\tconst t1 = Date.now();\n\tconst pickerCost = pickers.reduce((cost, picker) => cost + picker.cost, 0);\n\n\tconst qualityScore = spartito.qualityScore;\n\tconst totalCost = t1 - t0;\n\n\tlogger?.info('[regulateWithBeadSolver] done in ', totalCost, 'ms, qualityScore:', qualityScore);\n\n\t// zero 'cached' statistics for freshOnly mode\n\tif (freshOnly) counting.cached = 0;\n\n\treturn {\n\t\ttotalCost: t1 - t0,\n\t\tpickerCost,\n\t\tmeasures: counting,\n\t\tqualityScore,\n\t};\n};\n\nconst abstractRegulationBeadStats = (stats: RegulationBeadStat[]): RegulationBeadSummary => {\n\tconst { totalCost, pickerCost, measureN, timeN } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\ttotalCost: sum.totalCost + stat.totalCost,\n\t\t\tpickerCost: sum.pickerCost + stat.pickerCost,\n\t\t\tmeasureN: sum.measureN + stat.measures.computed,\n\t\t\ttimeN: sum.timeN + stat.measures.tryTimes,\n\t\t}),\n\t\t{\n\t\t\ttotalCost: 0,\n\t\t\tpickerCost: 0,\n\t\t\tmeasureN: 0,\n\t\t\ttimeN: 0,\n\t\t}\n\t);\n\n\tconst costPerMeasure = measureN > 0 ? totalCost / measureN : null;\n\tconst costPerTime = timeN > 0 ? totalCost / timeN : null;\n\n\tconst { cached, simple, computed, tryTimes, solved, issue, fatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.measures.cached,\n\t\t\tsimple: sum.simple + stat.measures.simple,\n\t\t\tcomputed: sum.computed + stat.measures.computed,\n\t\t\ttryTimes: sum.tryTimes + stat.measures.tryTimes,\n\t\t\tsolved: sum.solved + stat.measures.solved,\n\t\t\tissue: sum.issue + stat.measures.issue,\n\t\t\tfatal: sum.fatal + stat.measures.fatal,\n\t\t}),\n\t\t{ cached: 0, simple: 0, computed: 0, tryTimes: 0, solved: 0, issue: 0, fatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\ttotalCost,\n\t\tpickerCost,\n\t\tcostPerMeasure,\n\t\tcostPerTime,\n\t\tcached,\n\t\tsimple,\n\t\tcomputed,\n\t\ttryTimes,\n\t\tsolved,\n\t\tissue,\n\t\tfatal,\n\t};\n};\n\nexport { regulateWithBeadSolver, abstractRegulationBeadStats, RegulationBeadStat, ProgressInfo };\n","import * as starry from '../../src/starry';\nimport { PyClients } from './predictors';\nimport { Logger } from './ZeroClient';\nimport { SpartitoMeasure, EditableMeasure, evaluateMeasure } from '../../src/starry';\nimport { EquationPolicy } from '../../src/starry/spartitoMeasure';\nimport { genMeasureRectifications } from '../../src/starry/measureRectification';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure } from './store';\nexport * from './regulationBead';\n\nglobalThis.btoa = globalThis.btoa || ((str) => Buffer.from(str, 'binary').toString('base64'));\n\nconst RECTIFICATION_SEARCH_ITERATIONS = parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS || '30');\nconst BASE_QUOTA_FACTOR = parseInt(process.env.BASE_QUOTA_FACTOR || '40');\nconst RECTIFICATION_QUOTA_FACTOR = parseInt(process.env.RECTIFICATION_QUOTA_FACTOR || '80');\n\nconst MATRIXH_INTERPOLATION_K = 0.9;\n\ninterface SolveMeasureOptions {\n\tsolver?: (...args: any[]) => any;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tlogger?: Logger;\n}\n\nconst computeQuota = (n: number, factor: number, limit: number) =>\n\tMath.min(Math.ceil((n + 1) * factor * Math.log(n + 2)), Math.ceil(limit * Math.min(1, (24 / (n + 1)) ** 2)));\n\ninterface BaseRegulationStat {\n\tcached: number;\n\tcomputed: number;\n\tsolved: number;\n}\n\nasync function solveMeasures(\n\tmeasures: SpartitoMeasure[],\n\t{ solver, quotaMax = 1000, quotaFactor = BASE_QUOTA_FACTOR, solutionStore = DefaultSolutionStore, ignoreCache = false, logger }: SolveMeasureOptions = {}\n): Promise {\n\tlet cached = 0;\n\tlet solved = 0;\n\n\tlogger?.info(`[solveMeasures] begin, measure total: ${measures.length}.`);\n\n\tawait Promise.all(\n\t\tmeasures.map(async (measure) => {\n\t\t\tif (!ignoreCache) {\n\t\t\t\tconst solution = await solutionStore.get(measure.regulationHash);\n\t\t\t\tif (solution) {\n\t\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\t\t++cached;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst quota = computeQuota(measure.events.length, quotaFactor, quotaMax);\n\n\t\t\tawait measure.regulate({\n\t\t\t\tpolicy: 'equations',\n\t\t\t\tquota,\n\t\t\t\tsolver,\n\t\t\t});\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tif (!stat.error) solutionStore.set(measure.regulationHash0, { ...measure.asSolution(), priority: -measure?.solutionStat?.loss! });\n\t\t\tif (stat.perfect) ++solved;\n\n\t\t\tlogger?.info(\n\t\t\t\t`[solveMeasures] measure[${measure.measureIndex}/${measures.length}] regulated: ${stat.perfect ? 'solved' : stat.error ? 'error' : 'issue'}, ${\n\t\t\t\t\tmeasure.regulationHash\n\t\t\t\t}`\n\t\t\t);\n\t\t})\n\t);\n\n\tlogger?.info(`[solveMeasures] ${cached}/${measures.length} cache hit, ${solved} solved.`);\n\n\treturn {\n\t\tcached,\n\t\tcomputed: measures.length - cached,\n\t\tsolved,\n\t};\n}\n\nconst solveMeasuresWithRectifications = async (\n\tmeasure: SpartitoMeasure,\n\t{ solver, quotaMax = 4000 }: SolveMeasureOptions\n): Promise => {\n\tlet best = evaluateMeasure(measure);\n\tlet bestSolution: starry.RegulationSolution = measure.asSolution();\n\tconst quota = computeQuota(measure.events.length, RECTIFICATION_QUOTA_FACTOR, quotaMax);\n\tlet n_rec = 0;\n\n\t// @ts-ignore\n\tfor (const rec of genMeasureRectifications(measure)) {\n\t\tconst solution = await EquationPolicy.regulateMeasureWithRectification(measure, rec, { solver, quota });\n\n\t\tconst testMeasure = measure.deepCopy() as SpartitoMeasure;\n\t\ttestMeasure.applySolution(solution);\n\t\tconst result = evaluateMeasure(testMeasure);\n\n\t\tif (\n\t\t\tresult.perfect > best.perfect ||\n\t\t\tresult.error < best.error ||\n\t\t\t(!result.error && result.perfect >= best.perfect && solution.priority! > bestSolution.priority!)\n\t\t) {\n\t\t\tbest = result;\n\t\t\tbestSolution = solution;\n\t\t}\n\n\t\tif (result.perfect) break;\n\n\t\t++n_rec;\n\t\tif (n_rec > RECTIFICATION_SEARCH_ITERATIONS) break;\n\t}\n\n\treturn bestSolution;\n};\n\ninterface RegulateWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateMaybeWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients?: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateSimpleOption {\n\tsolutionStore: SolutionStore;\n\tsolver: (...args: any[]) => any;\n\tlogger?: Logger;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n}\n\ninterface TopoRegulationStat {\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\nasync function doRegulateWithTopo(\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateWithTopoOption\n): Promise {\n\tpyClients.logger.info(`[RegulateWithTopo] regulate score: ${score.title}, measures: ${score.spartito!.measures.length}`);\n\n\tconst issueMeasures = score.spartito!.measures.filter((measure) => {\n\t\tconst stat = evaluateMeasure(measure);\n\t\treturn !stat.perfect;\n\t});\n\tpyClients.logger.info(`[RegulateWithTopo] basic issues: ${issueMeasures.length}`);\n\n\tif (issueMeasures.length === 0) {\n\t\treturn {\n\t\t\tsolved: 0,\n\t\t\tissue: 0,\n\t\t\tfatal: 0,\n\t\t};\n\t}\n\n\tconst clusters = ([] as starry.EventCluster[]).concat(...issueMeasures.map((measure) => measure.createClusters()));\n\tconst results = await pyClients.predictScoreImages('topo', { clusters });\n\tconsole.assert(results.length === clusters.length, 'prediction number mismatch:', clusters.length, results.length);\n\n\tclusters.forEach((cluster, index) => {\n\t\tconst result = results[index];\n\t\tconsole.assert(result, 'no result for cluster:', cluster.index);\n\n\t\tcluster.assignPrediction(result);\n\t});\n\n\tissueMeasures.forEach((measure) => {\n\t\tconst cs = clusters.filter((c) => c.index === measure.measureIndex);\n\t\tmeasure.applyClusters(cs);\n\n\t\t// intepolate matrixH\n\t\tconst { matrixH } = EquationPolicy.estiamteMeasure(measure);\n\t\tmatrixH.forEach((row, i) =>\n\t\t\trow.forEach((v, j) => {\n\t\t\t\tmeasure.matrixH[i][j] = measure.matrixH[i][j] * MATRIXH_INTERPOLATION_K + v * (1 - MATRIXH_INTERPOLATION_K);\n\t\t\t})\n\t\t);\n\t});\n\n\tconst solvedIndices: number[] = [];\n\tconst errorIndices: number[] = [];\n\n\t// rectification search\n\tawait Promise.all(\n\t\tissueMeasures.map(async (measure) => {\n\t\t\tconst hash = measure.regulationHash0;\n\t\t\tconst solution = await solveMeasuresWithRectifications(measure, { solver });\n\t\t\tif (solution) {\n\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\tsolutionStore.set(hash, solution);\n\t\t\t\tsolutionStore.set(measure.regulationHash, measure.asSolution());\n\t\t\t\tpyClients.logger.info(`[RegulateWithTopo] solutionStore set: ${measure.measureIndex}, ${hash}, ${measure.regulationHash}`);\n\t\t\t}\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\tmeasure: new EditableMeasure(measure),\n\t\t\t\tstatus: stat.error ? 2 : 1,\n\t\t\t});\n\t\t\tif (stat.perfect) solvedIndices.push(measure.measureIndex);\n\t\t\telse if (stat.error) errorIndices.push(measure.measureIndex);\n\t\t})\n\t);\n\n\tconst n_issues = issueMeasures.length - solvedIndices.length - errorIndices.length;\n\tpyClients.logger.info(`[RegulateWithTopo] score: ${score.title}, solved/issue/fatal: ${solvedIndices.length}/${n_issues}/${errorIndices.length}`);\n\tif (solvedIndices.length) pyClients.logger.info(`[RegulateWithTopo] solved measures: ${solvedIndices.join(', ')}`);\n\tif (errorIndices.length) pyClients.logger.info(`[RegulateWithTopo] error measures: ${errorIndices.join(', ')}`);\n\n\treturn {\n\t\tsolved: solvedIndices.length,\n\t\tissue: n_issues,\n\t\tfatal: errorIndices.length,\n\t};\n}\n\ninterface RegulationStat {\n\tbaseCost: number; // in milliseconds\n\ttopoCost: number; // in milliseconds\n\tbaseMeasures: BaseRegulationStat;\n\ttopoMeasures?: TopoRegulationStat;\n\tqualityScore: number;\n}\n\nconst doRegulate = async (\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateMaybeWithTopoOption\n): Promise => {\n\tpyClients?.logger?.info(`[doRegulate] score: ${score.title}`);\n\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\n\tconst baseMeasures = await solveMeasures(spartito.measures, { solver, quotaMax: 1000, solutionStore, logger: pyClients?.logger });\n\n\tconst t1 = Date.now();\n\n\tconst topoMeasures = pyClients ? await doRegulateWithTopo(score, { pyClients, solver, solutionStore, onSaveIssueMeasure }) : undefined;\n\n\tconst t2 = Date.now();\n\n\treturn {\n\t\tbaseCost: t1 - t0,\n\t\ttopoCost: t2 - t1,\n\t\tbaseMeasures,\n\t\ttopoMeasures,\n\t\tqualityScore: spartito.qualityScore,\n\t};\n};\n\nconst doSimpleRegulate = async (\n\tscore: starry.Score,\n\t{ solver, solutionStore = DefaultSolutionStore, logger, quotaMax = 240, quotaFactor = 16 }: RegulateSimpleOption\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\tconst measures = spartito.measures.filter((measure) => !measure.regulated);\n\n\tawait solveMeasures(measures, { solver, quotaMax, quotaFactor, solutionStore, logger });\n\n\tconsole.assert(score.spartito?.regulated, 'doSimpleRegulate: regulation incomplete:', spartito.measures.filter((measure) => !measure.regulated).length);\n};\n\nconst evaluateScoreQuality = async (score: starry.Score, options: RegulateSimpleOption): Promise => {\n\tif (!score.spartito?.regulated) await doSimpleRegulate(score, options);\n\n\treturn score.spartito!.regulated ? score.spartito!.qualityScore : null;\n};\n\ninterface RegulationSummary {\n\tscoreN: number;\n\n\tbaseCostTotal: number; // in milliseconds\n\ttopoCostTotal: number; // in milliseconds\n\tbaseCostPerMeasure: number | null; // in milliseconds\n\ttopoCostPerMeasure: number | null; // in milliseconds\n\n\tcached: number;\n\tbaseComputed: number;\n\tbaseSolved: number;\n\ttopoSolved: number;\n\ttopoIssue: number;\n\ttopoFatal: number;\n}\n\nconst abstractRegulationStats = (stats: RegulationStat[]): RegulationSummary => {\n\tconst { baseCostTotal, topoCostTotal, baseMeasures, topoMeasures } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tbaseCostTotal: sum.baseCostTotal + stat.baseCost,\n\t\t\ttopoCostTotal: sum.topoCostTotal + stat.topoCost,\n\t\t\tbaseMeasures: sum.baseMeasures + stat.baseMeasures.computed,\n\t\t\ttopoMeasures: sum.topoMeasures + (stat.topoMeasures!.solved + stat.topoMeasures!.issue + stat.topoMeasures!.fatal),\n\t\t}),\n\t\t{\n\t\t\tbaseCostTotal: 0,\n\t\t\ttopoCostTotal: 0,\n\t\t\tbaseMeasures: 0,\n\t\t\ttopoMeasures: 0,\n\t\t}\n\t);\n\n\tconst baseCostPerMeasure = baseMeasures > 0 ? baseCostTotal / baseMeasures : null;\n\tconst topoCostPerMeasure = topoMeasures > 0 ? topoCostTotal / topoMeasures : null;\n\n\tconst { cached, baseComputed, baseSolved, topoSolved, topoIssue, topoFatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.baseMeasures.cached,\n\t\t\tbaseComputed: sum.baseComputed + stat.baseMeasures.computed,\n\t\t\tbaseSolved: sum.baseSolved + stat.baseMeasures.solved,\n\t\t\ttopoSolved: sum.topoSolved + stat.topoMeasures!.solved,\n\t\t\ttopoIssue: sum.topoIssue + stat.topoMeasures!.issue,\n\t\t\ttopoFatal: sum.topoFatal + stat.topoMeasures!.fatal,\n\t\t}),\n\t\t{ cached: 0, baseComputed: 0, baseSolved: 0, topoSolved: 0, topoIssue: 0, topoFatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\tbaseCostTotal,\n\t\ttopoCostTotal,\n\t\tbaseCostPerMeasure,\n\t\ttopoCostPerMeasure,\n\t\tcached,\n\t\tbaseComputed,\n\t\tbaseSolved,\n\t\ttopoSolved,\n\t\ttopoIssue,\n\t\ttopoFatal,\n\t};\n};\n\nexport { doRegulate, doSimpleRegulate, evaluateScoreQuality, abstractRegulationStats };\n","console.info(`%cstarry-omr%c v1.0.0 2026-05-05T13:56:21.434Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../libs/browserComponents';\n\nexport * from '../../../src/isomorphic/converter';\nexport * as starry from '../../../src/starry';\nexport * from '../../libs/predictors';\nexport * from '../../libs/predictPages';\nexport * from '../../libs/regulation';\nexport * from '../../libs/store';\nexport * from '../../libs/util';\n"],"names":["globalThis","btoa","str","Buffer","from","toString","atob","recoverJSON","json","classDict","JSON","stringify","parse","_","value","__prototype","Class","fields","deepCopy","o","dict","Map","get","Array","isArray","result","set","forEach","e","push","Object","entries","key","setPrototypeOf","__proto__","SimpleClass","assign","data","this","toJSON","cls","constructor","serializedKeys","blackKeys","keys","filter","includes","pick","className","Sylvester","Matrix","create","elements","setElements","I","n","j","els","i","prototype","dup","isSquare","cols","length","toRightTriangular","p","M","np","multiplier","determinant","det","isSingular","augment","matrix","T","nj","inverse","divisor","new_element","inverse_elements","SemanticType","NOTEHEAD_WIDTHS","NoteheadS0","NoteheadS1","NoteheadS2","glyphCenters","x","zero","y","one","two","three","four","five","six","seven","eight","nine","f","m","r","s","z","SYSTEM_SEMANTIC_TYPES","BarMeasure","vline_BarMeasure","vline_BarTerminal","vline_BarSegment","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","st","CONFLICTION_GROUPS","Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","ScriptStaccatissimo","TimesigZero","TimesigOne","TimesigTwo","TimesigThree","TimesigFour","TimesigFive","TimesigSix","TimesigSeven","TimesigEight","TimesigNine","Rest0","Rest1","Rest2","Rest3","Rest4","Rest5","Rest6","Rest0W","RestM1","SignInterval","SignLined","BeamLeft","BeamContinue","BeamRight","STAMP_SEMANTICS","ClefG","ClefF","ClefC","Dot","AccNatural","AccSharp","AccDoublesharp","AccFlat","AccFlatflat","TimesigC44","TimesigC22","OctaveShift8","OctaveShift0","ScriptFermata","ScriptShortFermata","ScriptSforzato","ScriptStaccato","ScriptTurn","ScriptTrill","ScriptSegno","ScriptCoda","ScriptArpeggio","ScriptPrall","ScriptMordent","ScriptMarcato","ScriptTenuto","ScriptPortato","PedalStar","PedalPed","hashSemanticPoint","systemIndex","staffIndex","point","Math","round","source","semantic","hash","sha1","array","slice","id","String","fromCharCode","substring","hashPageSemanticPoint","pageName","roundNumber","precision","min","Infinity","max","distance2D","p1","p2","dx","dy","sqrt","gcd","a","b","Number","isInteger","console","error","frac","numerator","denominator","reducedFraction","d","g","printFraction","fractionMul","fraction","segmentPoints","points","axis","sorted","sort","seg","lastP","reduce","segments","filterWeekPoints","rests","group","find","weeks","solveOverlapping","pset","Set","xClusters","clusters","concat","map","c","ps","confidence","delete","GROUP_N_TO_PITCH","noteToPitch","note","alter","floor","gn","mod7","argmax","indexOf","DummyLogger","debug","groupCollapsed","groupEnd","info","warn","assert","DURATION_MULTIPLIER","floatToTimeWarp","floatToFrac","ActionType","EventElementType","TokenType","Action","P","type","PLACE","e1","V","e2","order","VERTICAL","H","HORIZONTAL","events","isFinite","StageMatrix","fromNode","node","status","stages","fill","actions","action","stage1","findIndex","stage","stage2","add","stagedEvents","endHs","matrixH","has","endHP","hActions","pendingHeads","eventMap","eid","some","index","pathOf","target","ei","size","yy","sub","findDoublePath","s1","s2","paths","t","path","reducePath","column","toEquations","eventCount","equations","path1","path2","equation","PathNode","logger","last","parent","join","like","ids","split","constructStages","unshift","newStage","si","splice","constructConstraints","factors","duration","constraints","it","inbalancesConstraints","ones","fixed","inbalances","constraint","sum","solveEquations","xis","items","abs","equationMap","conflicted","lines","line","bias","every","squareLines","restLines","candidateLines","i1","i2","prior","sl","c1","c2","invert","mat","matrixInverse","solution","row","xi","optimallySolve","shrinkMap","shrinkness","groups","pair","released","releasedIds","warps","lowWarp","isConflicted","eventTendencies","timeWarps","getSolution","actionKey","hacts","a1","a2","hmap","act","startEs","voices","se","voice","values","tick","endTick","tickGroup","timeWarp","estages","solveStages","changed","reverse","event","measureDuration","outEI","fromCodePoint","deduce","quota","access","actionAccessing","times","closed","credits","children","expand","possibility","n1","n2","child","matrixV","branches","appendBranch","branch","Solver","env","event0","measureShrinkness","expectedDuration","staff","xSpan","endX","solve","pathRoot","bestSolution","evaluateSolution","loss","sevents","es","partialFrac","weight","log","spaceTime","staffAlters","start","end","eventsXOrder","tickTwists","dt","atan2","PI","tickTwist","EventCluster","super","regular","elem","CHORD","REST","fake","y1","y2","grace","fullMeasure","grant","annotation","feature","estimatedDuration","endElem","EOS","predisposition","assignPrediction","prediction","pe","EventClusterSet","trimIrregular","ir","cluster","PatchMeasure","staffN","log2","staffMask","basics","basic","tt","TokenTypes","TokenClefs","test","TokenTimesigs","TokenTimesigsC","TokenTimesigsN","TokenOctshifts","TokenNumbers","TokenAccidentals","TokenNoteheads","TokenBareNoteheads","TokenDirectionalNoteheads","TokenRests","TokenFlags","TokenVolta","TokenDynamics","TokenScripts","TokenPedals","TokenDots","DotDot","TokenArcs","SlurBegin","SlurEnd","TieBegin","TieEnd","TokenBeams","TokenWedges","TokenAccessories","TokenDirectionless","TokenGlyphs","TOKEN_Y_ROUND","TOKEN_Y_FIXED","Token","typeId","isPredicted","isNotehead","isContexted","isAccessory","division","NoteheadS1stemU","NoteheadS1stemD","NoteheadS2stemU","NoteheadS2stemD","Flag3","Flag4","Flag5","Flag6","Flag7","Flag8","dots","direction","width","left","right","voiceIndices","indices","TextToken","width_","WHOLE_DURATION","AccessoryDirection","GraceType","StemBeam","TremoloLink","GlissandoStyle","ArpeggioStyle","Term","EventTerm","space","term","rest","accessories","pivotX","alignedTick","mainDuration","divider","undefined","fullMeasureRest","tipX","tip","tipY","ys","tremoloCatcher","tremoloLink","Catcher","scaleChord","pitches","pitch","zeroHolder","ContextType","ContextedTerm","Token.TokenClefs","tokenType","Clef","KeyAcc","Acc","Token.TokenOctshifts","OctaveShift","Token.TokenTimesigsC","TimeSignatureC","Token.TokenTimesigsN","TimeSignatureN","staffLevel","clef","KeyNatural","KeySharp","KeyFlat","octaveShift","OctaveShift8va","OctaveShift8vb","number","MarkTerm","MUSIC_NOTES","TempoTerm","fromNumeralText","text","symbol","beats","durationMagnitude","den","dot","match","bpm","isValid","range","GlyphTerm","TextTerm","LyricTerm","CommandTerm","ChordmodeTerm","SimplePolicy","computeMeasureTicks","measure","xMap","rows","k","roundX","constructXMap","ts","eventGroups","x1","x2","Grace","divisionVector","dotsVector","timeWarped","computeMeasureVoices","eventSet","pushEvent","e0","EquationPolicy","PageLayoutMethod","TextType","INVERT_SQRT2","FINE_BEAMS","Open","Continue","Close","bb","solveStaffGroup","staffGroup","options","EquationSolver.Solver","estiamteMeasure","allEvents","tickEstimated","stemDirection","beam","pR","tanh","eventStartX","fakeP","timeSignature","staffGroupMap","staffGroups","staves","ievents","startX","hp","erf","staffDecay","exp","yDecay","dtx","nR","position","regulateMeasure","async","solver","ii","mp","measureIndex","resultEvents","solutionStat","solverCredits","solverTimes","regulateMeasureWithRectification","rectification","re","priority","tickN","SpartitoMeasure","reorderEvents","staffYsFull","rx","ry","yi","yis","ev","intX","intY","originalRegulationHash","regulated","regulationHash","barTypes","postRegulate","keySignature","timeSignatureChanged","contexts","Boolean","doubtfulTimesig","validRegulated","flat","tickMap","endEvent","tickToX","tickRates","tickRatesInStaves","rates","tickRatesInGroups","gevents","groupIndex","twists","empty","hasIllEvent","voicedEventIds","brief","regulationHash0","regulationHashes","featureWords","invalid","rate","uys","melodies","rhythm","barType","voltaEnd","typeEntris","partialDuration","signatureDuration","updateRoundX","graceEvents","staffMap","smap","oldEvent","staffPositions","emap","preTick","graces","graceIds","totalDuration","warp","solveGraceEvents","catchers","pitchers","Pitcher","catcher","candidates","pitcher","catcherId","tremolo","pi","solveTremoloPairs","updateContextTick","terms","t1","t2","asSolution","ref","refEvent","applySolution","cleanupRegulation","regulateTest","regulateSimple","regulateEquations","regulate","policy","createPatch","marks","createClusters","trueEventIds","idx","staffIndices","staffY0","staffYs","staffYn","headY","BOS","tar","src","patched","backgroundImages","url","applyClusters","id_max","is","srcId","tarId","EditableEvent","agent","Proxy","self","captures","parseInt","ownKeys","getOwnPropertyDescriptor","enumerable","configurable","EditableMeasure","syncVoiceToEvents","voiceIndex","syncVoiceFromEvents","makeMIDI","microsecondsPerBeat","tracks","vi","subEvents","midiEvents","time","subtype","channel","noteNumber","velocity","thirtyseconds","ticks","deltaTime","header","formatType","ticksPerBeat","BEAM_STATUS","evaluateMeasure","validEvents","warpedEvents","irregularWarps","fractionalWarp","tickSum","eventN","tickOverlapped","complicatedTimewarp","literalDuration","sigDuration","inVoiceEvents","corruptedVoiceEvent","overranged","over","overDuration","graceInVoice","graceN","graceDominant","irregularTick","beamBroken","broken","evi","surplusTime","eventDuration","nullEvents","fakeEvents","voiceRugged","perfect","fine","expectDuration","durationRate","qualityScore","spaceLoss","irregularWarpsN","LayoutType","spreadMeasureSeq","seq","Ordinary","layout","serialize","seqToCode","withBrackets","code","inRange","SingleMLayout","BlockMLayout","trimSeq","seq2","seq3","fromSeq","VoltaMLayout","bodySeq","body","alternates","alternateSeqs","lastAlternateSeq","Conservative","Full","Once","ABAMLayout","seqA","main","seqA_","seqB","parser","v","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","trace","symbols_","start_symbol","measure_layout","EOF","index_wise_measure_layout","segment_wise_measure_layout","iw_sequence","iw_item","UNSIGNED","single","iw_block_item","iw_volta","iw_aba","iw_block","iw_optional_alternates","iw_alternates","sw_sequence","sw_item","segment","sw_block_item","sw_volta","sw_aba","sw_block","sw_optional_alternates","sw_alternates","$accept","$end","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","root","blockLayout","singleLayout","voltaBlock","abaBlock","table","defaultActions","parseError","recoverable","Error","input","stack","vstack","lstack","args","call","arguments","lexer","sharedState","hasOwnProperty","setInput","yylloc","yyloc","ranges","getPrototypeOf","state","len","newState","expected","lex","token","yyval","errStr","showPosition","loc","first_line","last_line","first_column","last_column","apply","item","speard","serializeSeq","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","unput","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","test_match","indexed_rule","backup","matches","tempMatch","rules","_currentRules","flex","begin","condition","popState","pop","conditions","topState","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","INITIAL","inclusive","Parser","grammar$1","StaffGroupType","StaffConjunctionType","singleGroup","Default","BOUNDS_TO_GROUPTYPE","Brace","Bracket","Square","CONJUNCTIONS_MAP","Blank","Solid","Dashed","randomB64","random","makeGroupsFromRaw","remains","word","shift","bound","level","subs","grand","groupHead","groupTail","groupDict","groupKey","StaffLayout","raw","prefix","name","makeUniqueName","staffIds","conjunctions","conjunction","leftBounds","rightBounds","maskCache","stavesCount","partGroups","grands","standaloneGroups","collect","conjunctionBetween","upStaff","downStaff","con","makeMaskLayout","mask","nextId","partialMaskCode","bits","withIds","staffStatus","joinGroup","subStr","partial","inner","bracketCode","$Vb","$Vc","staff_layout","seq_id","seq_br","seq_con","bound_left","bound_right","bound_lefts","bound_rights","ID","seq_bl","Seq","bl","br","Item","grammar","parseCode","SemanticGraph","fromPoints","graph","getLayer","getConfidentLayer","threshold","getSystemPoints","getStaffPoints","scale","factor","transform","extension","scaling","height","MEASURE_SEMANTICS","GraceNotehead","CrescendoBegin","CrescendoEnd","DecrescendoBegin","DecrescendoEnd","TremoloLeft","TremoloRight","TremoloMiddle","STAFF_LINED_SEMANTICS","LINED_INTERVAL_SEMANTICS","NOTEHEAD_FOR_STEM_SEMANTICS","KEYACC_CANDIDATE_SEMANTICS","NOTEHEAD_TABLE","up","down","REST_SEMANTICS","TOKEN_TO_STEMBEAM","TEXT_TYPE_ALIAS","Alter1","Alternation1","Alter2","Alternation2","noteheadsXPivot","xs","mean","Measure","tokens","antiTokens","noteheads","chordRects","nh","nulN","nhmap","hh","nhs","top","bottom","nh0","stemX","additionalLines","chords","getChords","chord","ceil","flags","beams","chordRcs","rect","noteIds","accs","flagRange","nearbyFlags","flag","beamToken","nearbyDots","getRests","dotValue","getEvents","getContexts","assignAccessoriesOnEvents","accessory","relatedEvents","owner","d1","d2","Down","Up","sortEvents","arpeggio","tremolsLs","tremolsRs","tremolsMs","tevents","stemL","stemR","tm","te","tl","tr","assignFeaturesOnEvents","semantics","dotPs","beamLs","beamMs","beamRs","gracePs","tremoloRs","stems","vline_Stem","s0","cx","divisions","ss","i_flags","f1","f2","i_dots","dots2","bs","u_stems","stem","d_stems","stemDirections","tremolos","Staff","measureCount","measureBars","staffY","measures","noteRange","rearrangeMeasures","reassignTokens","assignSemantics","assemble","system","qualifiedSemantics","TempoNotehead","tempoNh","antiP","displacementSemantics","appendPoint","semanticTop","semanticBottom","rootNhs","nhOffsetX","attachedHeads","topDist","bottomDist","antiPoint","nearStems","appendFlags","dotLines","sy","keyaccs","acc","oct","voltaDots","VoltaLeft","VoltaRight","voltaGroups","lined","interval","signs","fixedY","roundY","holder","mainFlag","downward","tailY","count","clearTokens","clearPredictedTokens","System","HEAD_WIDTH","segmentLength","arrangePosition","sidBlackList","sidWhiteList","staffTop","staffBottom","radius","staffMaskChanged","prev","positions","tidyMeasureBars","b1","b2","restWidth","connectionLine","staffHead","staffTail","middleY","timeSignatureOnHead","getStaffArray","on","getMarksInMeasure","textType","TempoNumeral","headMeasureIndex","columns","voltaBegin","alternative","mi","timeSigs","lastColumn","break","getEventsFunctional","processors","useXMap","localRows","groupMap","proc","oy","bars","lastX","barColumns","bar","intensity","barXs","prevStaff","nextStaff","newPoint","appendToken","fontSize","overlap","Page","systems","assignTexts","areas","imageHeight","imageWidth","dimensions","area","cy","rp","score","rect_Text","theta","textFeature","feature_dict","textAnnotations","sysXs","middleX","indent","Text","textFeasure","Title","Author","PageMargin","Other","Chord","MeasureNumber","Instrument","TextualMark","Times","sx","SemanticElementType","TIME_SIG_DENOMINATORS","fromEntries","TIME_SIG_NUMERATORS","et","ELEMENT_TOKEN_NAMES","NoteheadGrace","NOTEHEAD_BASE_DIVISION","NOTEHEAD_ELEMENT_TYPES","REST_ELEMENT_TYPES","BEAM_ELEMENT_TYPES","NOTE_ELEMENT_TYPES","SOURCE_ELEMENT_TYPES","TARGET_ELEMENT_TYPES","ROOT_NOTE_ELEMENT_TYPES","ELEMENT_TO_STEMBEAM","metaElem","BOS_ELEMENT","fractionToElems","SemanticCluster","elementToJSON","sourceMask","targetMask","vMask","compactMatrixH","expandMatrixByMasks","compactMatrixV","_matrixV","expandMatrixByMaskTriu","groupsV","matrixFromGroups","found","mapMatrix","x2i","i2x","mergeOverlapping","overlaps","overlappedNoteheads","ij","nh1","nh2","masks","stemMasks","stemNotes","s0s","subS0Masks","stemMap","stemId","prevId","linkings","roots","parentMasks","parentId","rootId","subNotes","dotGroups","tipRange","beamElem","iter","gen","maskSrc","maskTar","groupIds","id1","id2","ImplicitType","Stream","buffer","Uint8Array","eof","read","readString","readInt32","readInt16","readInt8","signed","readVarInt","OStream","write","writeInt32","writeInt16","writeInt8","writeVarInt","getBuffer","getArrayBuffer","charCodeAt","MIDI","parseMidiData","readChunk","stream","lastEventTypeByte","readEvent","eventTypeByte","param1","eventType","amount","controllerType","programNumber","subtypeByte","hourByte","frameRate","hour","sec","frame","subframe","pow","metronome","headerChunk","headerStream","trackCount","timeDivision","trackChunk","trackStream","encodeMidiFile","writeChunk","writeEvent","frameByte","MidiSequence","midiToSequence","midiFile","trackStates","beatsPerMinute","nextEventIndex","ticksToNextEvent","getNextEvent","nextEventTrack","nextEvent","ticksToEvent","track","midiEvent","processNext","secondsToGenerate","processEvents","trimSequence","clear","fixOverlapNotes","noteMap","overlapMap","swaps","leapIndex","swap","front","back","offEvent","leapEvent","tempo","require$$0","PedalControllerTypes","Notation","parseMidi","fixOverlap","channelStatus","pedalStatus","pedals","channels","millisecondsPerBeat","barIndex","keyRange","correspondences","rawTicks","tempos","rawEvents","deltaTicks","deltaBeats","startTick","low","statusIndex","finger","high","pedalType","fingers","isNaN","endTime","meta","notes","pitchMap","beatInfos","lastInfo","beatIndex","entry","findChordBySoftindex","softIndex","averageTempo","tickRange","to","endtick","span","ticksToTime","next_tempo_index","tempo_index","timeToTicks","tickRangeToTimeRange","scaleTempo","headTempo","MusicNotation","animationDelay","Promise","resolve","requestAnimationFrame","MidiPlayer_1","MidiPlayer","midiData","cacheSpan","onMidi","onPlayFinish","onTurnCursor","notation","isPlaying","progressTime","startTime","performance","now","cursorTurnDelta","dispose","progressTicks","play","nextFrame","currentEventIndex","backturn","eventTime","pause","turnCursor","config","CostStepAttenuation","SkipDeep","PriorDistanceSigmoidFactor","PriorValueSigmoidFactor","SkipCost","LagOffsetCost","LeadOffsetCost","ZeroOffsetCost","RelocationThreshold","Config","require$$1","Node","s_note","c_note","_prev","_totalCost","_value","cacheDirty","ci","rootSi","cost","skip","updateCache","totalCost","selfCost","deep","dump","evaluatePrev","evaluatePrevCost","priorByOffset","distance","navigator","Navigator","criterion","sample","getCursorOffset","outOfPage","bestNode","fineCursor","breakingSI","zeroNode","relocationThreshold","step","prevNote","prevNode","cursors","nullLength","nullSteps","cursor","resetCursor","breaking","deltaSi","fromIndex","toIndex","backPrior","cursorOffset","relocationTendency","normalizeInterval","HEART_BEAT","makeNoteSoftIndex","softIndexFactor","lastNote","Matcher","makeMatchNodes","targetList","targetNote","genNotationContext","runNavigation","onStep","Symbol","for","EXCLUDE_MIDI_EVENT_SUBTYPES","encodeToMIDIData","unclosedNoteDuration","msToTicks","Date","process","VUE_APP_BUILD_TIME","toDateString","MidiUtils","sliceMidi","midi","trackDeltaToAbs","lastTick","trackAbsToDelta","sliceTrack","encodeToMIDI","musicWidgets","require$$2","require$$3","require$$4","COMMON_NOTE_FIELDS","MetaNotation","fromAbsoluteNotes","measureHeads","__","mnotes","mn","field","idTrackMap","performAbsoluteNotes","abNotes","withRestTied","tied","overlapped","staffTrack","contextIndex","implicitType","chordPosition","priorNote","ripe","trackTickBias","headMeasure","trackNames","idSet","toAbsoluteNotes","measureIndices","measureTick","measureNotes","mnote","toPerformingNotation","WHOLE_DURATION_MAGNITUDE","toPerformingMIDI","trackList","zeroTick","measureEvents","mevent","eventPriority","subnote","finalTick","toPerformingNotationWithEvents","assignNotationNoteDataFromEvents","setTempo","midiNotation","noteId","CryptoJS","exports","crypto","window","msCrypto","global","require","err","cryptoSecureRandomInt","getRandomValues","Uint32Array","randomBytes","readInt32LE","F","obj","C","C_lib","lib","Base","extend","overrides","mixIn","init","$super","instance","properties","propertyName","clone","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","nBytes","C_enc","enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","decodeURIComponent","escape","utf8Str","unescape","encodeURIComponent","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","_process","doFlush","processedWords","dataWords","dataSigBytes","blockSize","nBlocksReady","nWordsReady","_minBufferSize","nBytesReady","_doProcessBlock","Hasher","cfg","_doReset","update","messageUpdate","finalize","_doFinalize","_createHelper","hasher","message","_createHmacHelper","C_algo","HMAC","algo","K","isPrime","sqrtN","getFractionalBits","nPrime","W","SHA256","_hash","h","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","nBitsTotal","nBitsLeft","HmacSHA256","factory","HashVector","fromHash","byte","fromString","_SHA256","uwords","word_len","fromWords","vectors","toHash","bit","vec","crop","ODDS","odds","odd","cosHashes","hash1","hash2","xor","xorHashes","i2hex","emptyVoiceFromStaffMeasure","chiefVoice","timeSigNumeric","contextedTerms","markingTiesInVoice","event1","p0","tying","si0","si1","Spartito","solidMeasureCount","measureIndexMapping","headBPM","tempoMark","mark","measureLayoutCode","ms","vb","ve","leftSign","rightSign","nextI","mm","nextVBI","pms","lastVEI","lastMI","dumpEvaluations","rectifyTimeSignatures","mis","newTimeSignature","measuresToFix","originTimeSignature","regularD","numerators","countings","peakCount","bestCounting","best","reducedN","makeVoiceStaves","voiceCount","nextMeasure","ctxList","maxEventX","deferred","leftStaves","lastEvent","tailEvent","tailStaff","pageBreak","headStaff","sd","trait","staffToGroup","voiceTraits","vector","v1","v2","leftVoices","voiceTrait","vs","consistencies","m1","m2","staffVoiceIndices","mode","removeEmptyMeasuresInVoicesStaves","perform","tokenMap","staffToChannel","voiceChannels","hasTempo","nextTick","events0","voice0","part","pitchValue","performByEstimation","noteTick","featureHash","measureWords","levels","meaures","vecY","vecMelody","vecRhythm","featureHashHex","featureHashBigInt","BigInt","assignMeasureNumbers","discard","measureNumber","mod12","ALTER_NAMES","StaffContext","keyAlters","alters","timeSigNumSet","timeSigDenSet","doubtingTimesig","change","yToNote","partialTimeSignature","resetMeasure","resetSystem","noteToY","pitchToNote","preferredAlter","gp","alteredGp","naturalNote","alterValue","keyAlterValue","pitchToY","alterOnNote","yToPitch","yToPitchName","bitsToMask","Score","version","layoutTemplate","staffLayoutCode","pages","page","spartito","upgradeScoreData","headers","instrumentDict","pageSize","unitSize","maxStavesCount","imageKeys","backgroundImage","maskImage","breakSystemIndices","systemCount","staffLayout","staffLayout.parseCode","semanticHash","eventSystemsToTermStaves","eventSystems","termStaves","sys","context","startEvent","processStaffContext","resetPageLayout","parameters","newCenter","offsetX","offsetY","getMeasure","localIndex","getRawCluster","systemY0","y0","getRawClusters","makeSpartito","ri","esys","patch","patches","makeMusicSheet","voiceStaves","title","paperOptions","measureLayout","getMeasureLayout","findPoint","sid","pageIndex","getMeasureSemantics","sy1","sy2","makeTimewiseGraph","store","getTokenMap","confidenceThreshold","append","assembleSystem","markVoices","vis","replaceImageKeys","all","then","inferenceStaffLayout","staffTotal","completeSystems","bracketsAppearance","candidateCodes","codeCounting","maxCount","connectedCode","lastSys","search","code1","startsWith","assignBackgroundForMeasure","imagePosition","original","blackoutFakeNotes","scope","inScope","fakeIds","voicedIds","fakeIdSet","blackIds","measureLayout.parseCode","splitToSingleScoresGen","startSysIndices","templateScore","topology","startSysIndex","endSysIndex","sysInRange","newScore","SubScoreSystem","SubScorePage","splitToSingleScores","BeadType","DIVISION_NAMES","SPACE_LOSS_WEIGHT","POSSIBILITY_LOW_BOUNDARY","STEM_DIRECTION_OPTIONS","BEAM_OPTIONS","saveClusterState","BeadNode","accessCount","nextBranch","possibilities","currentElem","elemIndex","branchID","ni","Pass","Division","Dots","repeat","picker","ptFactor","evaluateCluster","pretentiousness","selfEval","element","residue","fatalError","predictCluster","evaluation","estimateElementDuration","eos","lastOrder","voiceN","scales","referenceScale","nearScale","tickSpan","twist","tickMSE","tickErr","mse","spaceDuration","solveCluster","stopLoss","suc0","bestEvaluation","bestState","restoreClusterState","fixedEvents","pendingEvents","near","stemDirectionVector","beamVector","solveMeasure","quotaMax","quotaFactor","worstLoss","durations","solutionEvents","tipElem","tickSet","glimpseMeasure","resetSignatureForDoubtfulOnly","estimateMeasure","StemTip","StemHead","rect_Lyric","SemanticClusterSet","vocab","converts","connection","SUPPORT_CLEF_TYPES","starry.TokenType","tokenToText","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","Function","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","EventEmitter","eventsModule","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","existing","warning","newListener","emit","warned","w","onceWrapper","fired","wrapFn","_onceWrap","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","copy","addEventListener","wrapListener","arg","removeEventListener","destructPromise","timeout","rs","rj","setTimeout","defineProperty","RangeError","setMaxListeners","getMaxListeners","doError","er","listeners","addListener","prependListener","prependOnceListener","list","originalListener","spliceOne","off","removeAllListeners","rawListeners","eventNames","AsyncQueue","working","tasks","_digest","taskFn","payload","addTask","task","promise","ZeroClient","queue","socket","Request","sendTimeout","receiveTimeout","connect","__request","retryTimes","req","send","pack","receive","close","request","method","kwargs","args_","kwargs_","msg","opt","unpack","PyProcessor","scriptPath","retryCount","retryDelay","port","freePort","getPortPromise","stopPort","defaultsDeep","pyShell","PythonShell","stdout","isBuffer","inherits_browserModule","ctor","superCtor","super_","writable","TempCtor","util","inherits","inheritsModule","getOwnPropertyDescriptors","descriptors","formatRegExp","format","isString","objects","inspect","isNull","isObject","deprecate","fn","noDeprecation","throwDeprecation","traceDeprecation","debugEnviron","debugs","opts","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","isFunction","primitive","simple","isNumber","formatPrimitive","visibleKeys","val","arrayToHash","isError","formatError","isRegExp","RegExp","isDate","output","base","braces","toUTCString","formatProperty","formatArray","cur","reduceToSingleString","desc","ar","objectToString","pad","debuglog","NODE_DEBUG","toUpperCase","pid","bold","italic","underline","white","grey","black","blue","cyan","green","magenta","red","yellow","special","boolean","null","string","date","regexp","isNullOrUndefined","isSymbol","isPrimitive","months","prop","getHours","getMinutes","getSeconds","getDate","getMonth","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","cb","newReason","promisify","promiseResolve","promiseReject","defineProperties","custom","callbackify","callbackified","maybeCb","rej","getPort","base64map","crypt","rotl","rotr","endian","bytes","bytesToWords","wordsToBytes","bytesToHex","hex","hexToBytes","bytesToBase64","base64","triplet","charAt","base64ToBytes","imod4","cryptModule","charenc","utf8","stringToBytes","bin","bytesToString","charenc_1","api","digestbytes","H0","H1","H2","H3","H4","asBytes","asString","_blocksize","_digestsize","sha1Module","constructSystem","detection","imageSize","systemWidth","phi2","phi1","systemHeight","lastSystem","stavesTops","middleRhos","starry.Staff","starry.System","convertImage","maxHeight","quality","buf","got","responseType","decompress","https","rejectUnauthorized","toBuffer","webpBuffer","sharp","resize","fit","withoutEnlargement","toFormat","filename","SparkMD5","ArrayBuffer","OffscreenCanvas","Canvas","Image","STAFF_PADDING_LEFT","GAUGE_VISION_SPEC","viewportHeight","viewportUnit","MASK_VISION_SPEC","SEMANTIC_VISION_SPEC","concurrencyTask","fns","shootStaffImage","paddingLeft","spec","middleUnits","canvas","getContext","fillStyle","fillRect","drawImage","loadImage","shootStaffBackgroundImage","sourceCanvas","toBufferSync","gaugeStaff","gaugeImage","pyClients","sourceBuffer","baseY","predictScoreImages","maskStaff","img","semanticStaff","settings","semanticConfidenceThreshold","replacePageImages","onReplaceImageKey","OMRProgress","onChange","setTotal","total","finished","increase","lruCache","WeakLRUCache","pageStore","getValue","setValue","onReplaceImage","multinomial_1","pvals","looseVector","ns","looseEvent","MeasureRectification","roll","DefaultSolutionStore","PendingCondition","solveMeasureRecords","records","onUpdate","pendingCondition","NotFine","pass","onProgress","pendingRecords","ErrorOnly","Imperfect","isPending","record","current","starry.beadSolver.solveMeasure","starry.evaluateMeasure","better","remaining","RECTIFICATION_SEARCH_ITERATIONS","BASE_QUOTA_FACTOR","RECTIFICATION_QUOTA_FACTOR","computeQuota","limit","solveMeasures","solutionStore","ignoreCache","cached","solved","stat","computed","solveMeasuresWithRectifications","n_rec","rec","default","stale","genMeasureRectifications","testMeasure","doSimpleRegulate","PyClients","clients","getClient","client","option","checkHost","warmup","clientType","res","by_buffer","stats","costTotal","pagesCostTotal","pagesTotal","pagesCost","costPerPage","scoreN","pickerCost","measureN","timeN","tryTimes","costPerMeasure","costPerTime","issue","fatal","baseCostTotal","topoCostTotal","baseMeasures","topoMeasures","baseCost","topoCost","baseCostPerMeasure","topoCostPerMeasure","baseComputed","baseSolved","topoSolved","topoIssue","topoFatal","onSaveIssueMeasure","t0","issueMeasures","results","cs","solvedIndices","errorIndices","n_issues","doRegulateWithTopo","maskImages","hasMaskImage","scoreJson","idsMap","idsXMap","idStaffIndexMap","coverTexts","subtitles","subtitle","authors","composer","bgWidth","bgHeight","l1","ls","parts","partTemplates","measureXs","partIndex","template","staffIndexBase","paddedStaves","chordColumns","staffIndexInPart","noteIndex","measureStartX","elems","firstX","innerId","lastFifths","clefs","pt","fifths","lineStaves","systemTopStaff","systemBottomStaff","systemTopStaffY","systemBottomStaffY","lastPartLastStaff","partStaves","staffs","details","hide","visibleStaves","partTopStaff","partBottomStaff","partTopStaffY","partBottomStaffY","distances","imgs","spartitoMeasure","parti","mIndices","sortedParts","midiJson","measInfo","ent","idNoteMap","beatsCurrent","beatsUnitCurrent","mIndex","beatsUnit","evt","note_ticks","measureInfos","beatUnit","mergedTracks","trackIndex","program","lhPattern","rhPattern","instrus","hand","handStaves","trackToSplit","newTracks","stave","rightHandTrack","leftHandTrack","transformedTracks","onEvent","measureTickMap","numId","newEvent","elem_ids","meas_start_tick","images","outputWidth","processes","progress","image","starry.Score","raggedLast","raggedLastBottom","enabledGauge","originalImages","pageCanvasList","scaleForLayout","sourceSize","detections","cvs","enableGauge","imageURLMap","collectImage","createPage","detect","pageKey","cachedPageJson","omit","renew","starry.recoverJSON","starry","starry.Page","unit","cos","sin","needGauge","correctCanvas","pageCanvas","save","setTransform","restore","getImageData","putImageData","sourceCenter","shootImageByDetection","sizeRatios","staffInterval","vw","hwr","maxVW","maxAspect","setGlobalPageSize","systemsCount","allTasks","omitPages","n_page","pageTasks","bracketImages","topMid","bottomMid","sourceRect","OUTPUT_INTERVAL","bracketsRes","buffers","bufferForText","location","box","resultOCR","titleToken","gaugeRes","maskRes","semanticRes","t3","pickers","freshOnly","onPassStart","baseQuality","n_seq","starry.beadSolver.estimateMeasure","counting","toFixed","totalMeasures","computeRemaining","wrappedOnProgress","starry.EditableMeasure","saveMeasure","solutions","batchGet","originMeasure"],"mappings":"yeAAAA,WAAWC,KAAQC,GAAQC,OAAOC,KAAKF,EAAK,UAAUG,SAAS,UAC/DL,WAAWM,KAAQJ,GAAQC,OAAOC,KAAKF,EAAK,UAAUG,SAAS,UCC/D,MAAME,EAAc,CAAIC,EAAuBC,KAC1B,iBAATD,IAAmBA,EAAOE,KAAKC,UAAUH,IAE7CE,KAAKE,MAAMJ,EAAM,CAACK,EAAGC,KAC3B,GAAIA,GAA0B,iBAAVA,GAAsBA,EAAMC,YAAa,CAC5D,MAAMC,EAAQP,EAAUK,EAAMC,aAC9B,GAAIC,EAAO,CACV,MAAMD,YAAEA,KAAgBE,GAAWH,EACnC,OAAO,IAAIE,EAAMC,EACjB,CACD,CAED,OAAOH,KAIHI,EAAW,CAACC,EAAQC,EAAsB,QAE/C,IADAA,EAAOA,GAAQ,IAAIC,KACVC,IAAIH,GAAI,OAAOC,EAAKE,IAAIH,GAEjC,GAAII,MAAMC,QAAQL,GAAI,CACrB,MAAMM,EAAS,GAKf,OAJAL,EAAKM,IAAIP,EAAGM,GAEZN,EAAEQ,QAASC,GAAMH,EAAOI,KAAKX,EAASU,EAAGR,KAElCK,CACP,CAAM,GAAIN,GAAkB,iBAANA,EAAgB,CACtC,MAAMM,EAAS,CAAA,EAMf,OALAL,EAAKM,IAAIP,EAAGM,GAEZK,OAAOC,QAAQZ,GAAGQ,QAAQ,EAAEK,EAAKlB,KAAYW,EAAOO,GAAOd,EAASJ,EAAOM,IAC3EU,OAAOG,eAAeR,EAAQN,EAAEe,WAEzBT,CACP,CAED,OAAON,GAGR,MAAMgB,YACL,MAAAC,CAAOC,GACFA,GAAMP,OAAOM,OAAOE,KAAMD,EAC9B,CAED,MAAAE,GACC,MAAMC,EAAMF,KAAKG,YAEXC,EAAiBF,EAAIE,gBAAmBF,EAAIG,WAAab,OAAOc,KAAKN,MAAMO,OAAQb,IAASQ,EAAIG,UAAUG,SAASd,IACnHf,EAASyB,EAAiBK,EAAAA,QAAKT,KAAMI,GAAkBJ,KAE7D,MAAO,CACNvB,YAAayB,EAAIQ,aACd/B,EAEJ,CAED,QAAAC,GACC,OAAOA,EAASoB,KAChB,EC7DF,IAAIW,EAAY,CAEhBA,OAAmB,WAAc,GAEjCA,EAAUC,OAAOC,OAAS,SAAUC,GAElC,OADQ,IAAIH,EAAUC,QACbG,YAAYD,EACvB,EAEAH,EAAUC,OAAOI,EAAI,SAAUC,GAI7B,IAHA,IAEEC,EAFEC,EAAM,GACRC,EAAIH,EAECG,KAGL,IAFAF,EAAID,EACJE,EAAIC,GAAK,GACFF,KACLC,EAAIC,GAAGF,GAAKE,IAAMF,EAAI,EAAI,EAG9B,OAAOP,EAAUC,OAAOC,OAAOM,EACjC,EAEAR,EAAUC,OAAOS,UAAY,CAC3BC,IAAK,WACH,OAAOX,EAAUC,OAAOC,OAAOb,KAAKc,SACrC,EAEDS,SAAU,WACR,IAAIC,EAAgC,IAAzBxB,KAAKc,SAASW,OAAe,EAAIzB,KAAKc,SAAS,GAAGW,OAC7D,OAAOzB,KAAKc,SAASW,SAAWD,CACjC,EAEDE,kBAAmB,WACjB,GAA6B,IAAzB1B,KAAKc,SAASW,OAAc,OAAOd,EAAUC,OAAOC,OAAO,IAC/D,IACEM,EAEAC,EACAF,EAEAS,EANEC,EAAI5B,KAAKsB,MAETL,EAAIjB,KAAKc,SAASW,OAGpBI,EAAK7B,KAAKc,SAAS,GAAGW,OAExB,IAAKL,EAAI,EAAGA,EAAIH,EAAGG,IAAK,CACtB,GAAyB,IAArBQ,EAAEd,SAASM,GAAGA,GAChB,IAAKF,EAAIE,EAAI,EAAGF,EAAID,EAAGC,IACrB,GAAyB,IAArBU,EAAEd,SAASI,GAAGE,GAAU,CAE1B,IADAD,EAAM,GACDQ,EAAI,EAAGA,EAAIE,EAAIF,IAClBR,EAAI5B,KAAKqC,EAAEd,SAASM,GAAGO,GAAKC,EAAEd,SAASI,GAAGS,IAE5CC,EAAEd,SAASM,GAAKD,EAChB,KACD,CAGL,GAAyB,IAArBS,EAAEd,SAASM,GAAGA,GAChB,IAAKF,EAAIE,EAAI,EAAGF,EAAID,EAAGC,IAAK,CAC1B,IAAIY,EAAaF,EAAEd,SAASI,GAAGE,GAAKQ,EAAEd,SAASM,GAAGA,GAElD,IADAD,EAAM,GACDQ,EAAI,EAAGA,EAAIE,EAAIF,IAKlBR,EAAI5B,KACFoC,GAAKP,EAAI,EAAIQ,EAAEd,SAASI,GAAGS,GAAKC,EAAEd,SAASM,GAAGO,GAAKG,GAGvDF,EAAEd,SAASI,GAAKC,CACjB,CAEJ,CACD,OAAOS,CACR,EAEDG,YAAa,WACX,GAA6B,IAAzB/B,KAAKc,SAASW,OAChB,OAAO,EAET,IAAKzB,KAAKuB,WACR,OAAO,KAKT,IAHA,IAAIK,EAAI5B,KAAK0B,oBACTM,EAAMJ,EAAEd,SAAS,GAAG,GACtBG,EAAIW,EAAEd,SAASW,OACRL,EAAI,EAAGA,EAAIH,EAAGG,IACrBY,GAAYJ,EAAEd,SAASM,GAAGA,GAE5B,OAAOY,CACR,EAEDC,WAAY,WACV,OAAOjC,KAAKuB,YAAqC,IAAvBvB,KAAK+B,aAChC,EAEDG,QAAS,SAAUC,GACjB,GAA6B,IAAzBnC,KAAKc,SAASW,OAChB,OAAOzB,KAAKsB,MAEd,IAAIM,EAAIO,EAAOrB,UAAYqB,OACJ,IAAZP,EAAE,GAAG,KACdA,EAAIjB,EAAUC,OAAOC,OAAOe,GAAGd,UAEjC,IAIEI,EAJEkB,EAAIpC,KAAKsB,MACXE,EAAOY,EAAEtB,SAAS,GAAGW,OACnBL,EAAIgB,EAAEtB,SAASW,OACjBY,EAAKT,EAAE,GAAGH,OAEZ,GAAIL,IAAMQ,EAAEH,OACV,OAAO,KAET,KAAOL,KAEL,IADAF,EAAImB,EACGnB,KACLkB,EAAEtB,SAASM,GAAGI,EAAON,GAAKU,EAAER,GAAGF,GAGnC,OAAOkB,CACR,EAEDE,QAAS,WACP,GAA6B,IAAzBtC,KAAKc,SAASW,OAChB,OAAO,KAET,IAAKzB,KAAKuB,YAAcvB,KAAKiC,aAC3B,OAAO,KAcT,IAZA,IAEEf,EAGAS,EACAR,EACAoB,EAEAC,EATEvB,EAAIjB,KAAKc,SAASW,OACpBL,EAAIH,EAEFW,EAAI5B,KAAKkC,QAAQvB,EAAUC,OAAOI,EAAEC,IAAIS,oBACxCG,EAAKD,EAAEd,SAAS,GAAGW,OAInBgB,EAAmB,GAIhBrB,KAAK,CAKV,IAHAD,EAAM,GACNsB,EAAiBrB,GAAK,GACtBmB,EAAUX,EAAEd,SAASM,GAAGA,GACnBO,EAAI,EAAGA,EAAIE,EAAIF,IAClBa,EAAcZ,EAAEd,SAASM,GAAGO,GAAKY,EACjCpB,EAAI5B,KAAKiD,GAGLb,GAAKV,GACPwB,EAAiBrB,GAAG7B,KAAKiD,GAO7B,IAJAZ,EAAEd,SAASM,GAAKD,EAGhBD,EAAIE,EACGF,KAAK,CAEV,IADAC,EAAM,GACDQ,EAAI,EAAGA,EAAIE,EAAIF,IAClBR,EAAI5B,KAAKqC,EAAEd,SAASI,GAAGS,GAAKC,EAAEd,SAASM,GAAGO,GAAKC,EAAEd,SAASI,GAAGE,IAE/DQ,EAAEd,SAASI,GAAKC,CACjB,CACF,CACD,OAAOR,EAAUC,OAAOC,OAAO4B,EAChC,EAED1B,YAAa,SAAUI,GACrB,IAAIC,EACFF,EACAJ,EAAWK,EAAIL,UAAYK,EAC7B,GAAIL,EAAS,SAAgC,IAAnBA,EAAS,GAAG,GAAoB,CAGxD,IAFAM,EAAIN,EAASW,OACbzB,KAAKc,SAAW,GACTM,KAGL,IAFAF,EAAIJ,EAASM,GAAGK,OAChBzB,KAAKc,SAASM,GAAK,GACZF,KACLlB,KAAKc,SAASM,GAAGF,GAAKJ,EAASM,GAAGF,GAGtC,OAAOlB,IACR,CACD,IAAIiB,EAAIH,EAASW,OAEjB,IADAzB,KAAKc,SAAW,GACXM,EAAI,EAAGA,EAAIH,EAAGG,IACjBpB,KAAKc,SAASvB,KAAK,CAACuB,EAASM,KAE/B,OAAOpB,IACR,OC5LE0C,GAAL,SAAKA,GAEJA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QAGAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBAEAA,EAAA,WAAA,aAGAA,EAAA,MAAA,QAGAA,EAAA,SAAA,WACAA,EAAA,aAAA,eACAA,EAAA,UAAA,YAGAA,EAAA,YAAA,cACAA,EAAA,aAAA,eACAA,EAAA,cAAA,gBAGAA,EAAA,IAAA,MAGAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,OAAA,SACAA,EAAA,OAAA,SAGAA,EAAA,WAAA,aACAA,EAAA,SAAA,WACAA,EAAA,eAAA,iBACAA,EAAA,QAAA,UACAA,EAAA,YAAA,cAGAA,EAAA,gBAAA,kBACAA,EAAA,iBAAA,mBACAA,EAAA,UAAA,YACAA,EAAA,WAAA,aAEAA,EAAA,sBAAA,wBAIAA,EAAA,WAAA,aACAA,EAAA,iBAAA,mBACAA,EAAA,kBAAA,oBACAA,EAAA,iBAAA,mBAGAA,EAAA,UAAA,YACAA,EAAA,QAAA,UAGAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,YAAA,cACAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,aAAA,eACAA,EAAA,YAAA,cACAA,EAAA,YAAA,cACAA,EAAA,WAAA,aACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eACAA,EAAA,YAAA,cAGAA,EAAA,eAAA,iBACAA,EAAA,eAAA,iBACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eAGAA,EAAA,KAAA,OACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,MAAA,QACAA,EAAA,KAAA,OACAA,EAAA,KAAA,OACAA,EAAA,IAAA,MACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,KAAA,OAGAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IAEAA,EAAA,eAAA,iBACAA,EAAA,aAAA,eACAA,EAAA,iBAAA,mBACAA,EAAA,eAAA,iBAGAA,EAAA,cAAA,gBACAA,EAAA,mBAAA,qBACAA,EAAA,eAAA,iBACAA,EAAA,eAAA,iBACAA,EAAA,oBAAA,sBACAA,EAAA,WAAA,aACAA,EAAA,YAAA,cACAA,EAAA,YAAA,cACAA,EAAA,WAAA,aACAA,EAAA,eAAA,iBACAA,EAAA,YAAA,cACAA,EAAA,cAAA,gBACAA,EAAA,cAAA,gBACAA,EAAA,aAAA,eACAA,EAAA,cAAA,gBAGAA,EAAA,UAAA,YACAA,EAAA,SAAA,WAGAA,EAAA,OAAA,SACAA,EAAA,cAAA,gBACAA,EAAA,cAAA,gBACAA,EAAA,UAAA,YACAA,EAAA,aAAA,eAEAA,EAAA,UAAA,YACAA,EAAA,WAAA,YACA,CAlJD,CAAKA,IAAAA,EAkJJ,CAAA,IAED,MAqKMC,EAAkB,CACvBC,WAAY,MACZC,WAAY,MACZC,WAAY,OAGPC,EAA4C,CAEjD,UAAW,CAAEC,EAAG,MAChB,UAAW,CAAEA,EAAG,KAChB,iBAAkB,CAAEA,EAAG,KACvB,iBAAkB,CAAEA,EAAG,MACvB,cAAe,CAAEA,EAAG,IACpB,cAAe,CAAEA,EAAG,IACpBC,KAAM,CAAED,EAAG,GAAKE,GAAI,GACpBC,IAAK,CAAEH,EAAG,GAAKE,GAAI,GACnBE,IAAK,CAAEJ,EAAG,GAAKE,GAAI,GACnBG,MAAO,CAAEL,EAAG,GAAKE,GAAI,GACrBI,KAAM,CAAEN,EAAG,GAAKE,GAAI,GACpBK,KAAM,CAAEP,EAAG,GAAKE,GAAI,GACpBM,IAAK,CAAER,EAAG,GAAKE,GAAI,GACnBO,MAAO,CAAET,EAAG,GAAKE,GAAI,GACrBQ,MAAO,CAAEV,EAAG,GAAKE,GAAI,GACrBS,KAAM,CAAEX,EAAG,GAAKE,GAAI,GACpB,oBAAqB,CAAEF,EAAG,KAC1B,0BAA2B,CAAEA,EAAG,IAChC,sBAAuB,CAAEA,EAAG,IAC5B,mBAAoB,CAAEA,EAAG,IACzB,uBAAwB,CAAEA,EAAG,IAC7B,eAAgB,CAAEA,EAAGL,EAAgBC,WAAa,GAClD,eAAgB,CAAEI,EAAGL,EAAgBE,WAAa,GAClD,eAAgB,CAAEG,EAAGL,EAAgBG,WAAa,GAClD,UAAW,CAAEE,EAAG,IAAME,EAAG,GACzB,UAAW,CAAEF,EAAG,KAChB,WAAY,CAAEA,EAAG,IAAME,EAAG,GAC1B,WAAY,CAAEF,EAAG,KACjB,WAAY,CAAEA,EAAG,IAAME,EAAG,GAC1B,UAAW,CAAEF,EAAG,IAChB,UAAW,CAAEA,EAAG,IAChB,UAAW,CAAEA,EAAG,IAChB,UAAW,CAAEA,EAAG,IAChB,UAAW,CAAEA,EAAG,IAChBY,EAAG,CAAEZ,EAAG,GAAKE,GAAI,IACjBW,EAAG,CAAEb,EAAG,GAAKE,GAAI,IACjBvB,EAAG,CAAEqB,EAAG,GAAKE,GAAI,IACjBY,EAAG,CAAEd,EAAG,GAAKE,GAAI,IACjBa,EAAG,CAAEf,EAAG,GAAKE,GAAI,IACjBc,EAAG,CAAEhB,EAAG,GAAKE,GAAI,IACjB,gBAAiB,CAAEA,GAAI,IACvB,gBAAiB,CAAEF,EAAG,EAAGE,EAAG,GAC5B,eAAgB,CAAEF,EAAG,EAAGE,EAAG,GAC3B,mBAAoB,CAAEF,EAAG,GAAKE,GAAI,IAClC,UAAW,CAAEF,EAAG,IAAME,GAAI,KAC1B,YAAa,CAAEF,EAAG,IAAKE,GAAI,KAkDtBe,EAAwB,CAC7BvB,EAAawB,WACbxB,EAAayB,iBACbzB,EAAa0B,kBACb1B,EAAa2B,iBACb3B,EAAa4B,gBACb5B,EAAa6B,iBACb7B,EAAa8B,uBAGRC,EAAK/B,EACLgC,EAAqB,CAC1B,CAACD,EAAG7B,WAAY6B,EAAG5B,WAAY4B,EAAG3B,YAClC,CAAC2B,EAAGE,KAAMF,EAAGG,IAAKH,EAAGI,IAAKJ,EAAGK,MAAOL,EAAGM,KAAMN,EAAGO,KAAMP,EAAGQ,IAAKR,EAAGS,MAAOT,EAAGU,MAAOV,EAAGW,KAAMX,EAAGY,qBAC9F,CACCZ,EAAGa,YACHb,EAAGc,WACHd,EAAGe,WACHf,EAAGgB,aACHhB,EAAGiB,YACHjB,EAAGkB,YACHlB,EAAGmB,WACHnB,EAAGoB,aACHpB,EAAGqB,aACHrB,EAAGsB,aAEJ,CAACtB,EAAGuB,MAAOvB,EAAGwB,MAAOxB,EAAGyB,MAAOzB,EAAG0B,MAAO1B,EAAG2B,MAAO3B,EAAG4B,MAAO5B,EAAG6B,MAAO7B,EAAG8B,OAAQ9B,EAAG+B,QACrF,CAAC/B,EAAGgC,aAAchC,EAAGiC,WACrB,CAACjC,EAAGkC,SAAUlC,EAAGmC,aAAcnC,EAAGoC,YAG7BC,EAAkB,CACvBrC,EAAGsC,MACHtC,EAAGuC,MACHvC,EAAGwC,MACHxC,EAAG7B,WACH6B,EAAG5B,WACH4B,EAAG3B,WACH2B,EAAGyC,IACHzC,EAAGuB,MACHvB,EAAGwB,MACHxB,EAAGyB,MACHzB,EAAG0B,MACH1B,EAAG2B,MACH3B,EAAG4B,MACH5B,EAAG6B,MACH7B,EAAG+B,OACH/B,EAAG0C,WACH1C,EAAG2C,SACH3C,EAAG4C,eACH5C,EAAG6C,QACH7C,EAAG8C,YACH9C,EAAG+C,WACH/C,EAAGgD,WACHhD,EAAGa,YACHb,EAAGc,WACHd,EAAGe,WACHf,EAAGgB,aACHhB,EAAGiB,YACHjB,EAAGkB,YACHlB,EAAGmB,WACHnB,EAAGoB,aACHpB,EAAGqB,aACHrB,EAAGsB,YACHtB,EAAGG,IACHH,EAAGI,IACHJ,EAAGK,MACHL,EAAGM,KACHN,EAAGO,KACHP,EAAGiD,aAEHjD,EAAGkD,aACHlD,EAAGb,EACHa,EAAG9C,EACH8C,EAAGZ,EACHY,EAAGxD,EACHwD,EAAGX,EACHW,EAAGV,EACHU,EAAGT,EACHS,EAAGmD,cACHnD,EAAGoD,mBACHpD,EAAGqD,eACHrD,EAAGsD,eACHtD,EAAGY,oBACHZ,EAAGuD,WACHvD,EAAGwD,YACHxD,EAAGyD,YACHzD,EAAG0D,WACH1D,EAAG2D,eACH3D,EAAG4D,YACH5D,EAAG6D,cACH7D,EAAG8D,cACH9D,EAAG+D,aACH/D,EAAGgE,cACHhE,EAAGiE,UACHjE,EAAGkE,UAsEEC,EAAoB,CAACC,EAAqBC,EAAoBC,KACnE,MAAM/F,EAAIgG,KAAKC,MAAgB,GAAVF,EAAM/F,GACrBE,EAAI8F,KAAKC,MAAgB,GAAVF,EAAM7F,GACrBgG,EAAS,GAAGL,KAAeC,KAAcC,EAAMI,YAAYnG,KAAKE,IAChEkG,EAAQC,EAAAA,QAAaC,MAAMJ,GAAQK,MAAM,IACzCC,EAAM9L,WAAmBC,KAAK8L,OAAOC,gBAAgBN,IAAOO,UAAU,EAAG,IAG/E,OAFAZ,EAAMS,GAAKA,EAEJA,GAGFI,EAAwB,CAACC,EAAkBd,KAChD,MAAM/F,EAAIgG,KAAKC,MAAMF,EAAM/F,GACrBE,EAAI8F,KAAKC,MAAMF,EAAM7F,GACrBgG,EAAS,KAAKW,KAAYd,EAAMI,YAAYnG,KAAKE,IACjDkG,EAAQC,EAAAA,QAAaC,MAAMJ,GAAQK,MAAM,IACzCC,EAAM9L,WAAmBC,KAAK8L,OAAOC,gBAAgBN,IAAOO,UAAU,EAAG,IAG/E,OAFAZ,EAAMS,GAAKA,EAEJA,GCllBFM,EAAc,CAAC9G,EAAW+G,EAAmBC,GAAOC,MAAqBjB,KAAKkB,IAAIlB,KAAKC,MAAMjG,EAAI+G,GAAaA,EAAWC,GAEzHG,EAAa,CAACC,EAAaC,KAChC,MAAMC,EAAKF,EAAGpH,EAAIqH,EAAGrH,EACfuH,EAAKH,EAAGlH,EAAImH,EAAGnH,EAErB,OAAO8F,KAAKwB,KAAKF,EAAKA,EAAKC,EAAKA,IAQ3BE,EAAM,CAACC,EAAWC,IACjBC,OAAOC,UAAUH,IAAME,OAAOC,UAAUF,GAKjC,IAANA,EAAUD,EAAID,EAAIE,EAAGD,EAAIC,IAJ/BG,QAAQC,MAAM,mBAAoBL,EAAGC,GAC9B,GAMHK,EAAO,CAACC,EAAmBC,KAAmC,CAAED,YAAWC,gBAE3EC,EAAkB,CAAClK,EAAWmK,KACnCnK,EAAI+H,KAAKC,MAAMhI,GACfmK,EAAIpC,KAAKC,MAAMmC,GAEf,MAAMC,EAAU,IAANpK,EAAUwJ,EAAIxJ,EAAGmK,GAAKA,EAEhC,OAAOJ,EAAK/J,EAAIoK,EAAGD,EAAIC,IAGlBC,EAAiB1H,GAAwB,GAAGA,EAAEqH,aAAarH,EAAEsH,cAE7DK,EAAc,CAAC/M,EAAegN,IAAgCA,EAAYhN,EAAQgN,EAASP,UAAaO,EAASN,YAAc1M,EAE/HiN,EAAgB,CAACC,EAAmBC,KACzC,MAAMC,EAAS,IAAIF,GAAQG,KAAK,CAACzB,EAAIC,IAAOD,EAAGuB,GAAQtB,EAAGsB,IAE1D,IAAIG,EAAiB,KACjBC,EAAQ,KAEZ,OAAOH,EAAOI,OAAO,CAACC,EAAUtK,EAAGP,KAC7B2K,EAIApK,EAAEgK,GAAQI,EAAMJ,GAnDY,GAmDwBG,EAAIvM,KAAKoC,IAE5DmK,EAAIrK,OAAS,GAAGwK,EAAS1M,KAAKuM,GAClCC,EAAQpK,EACRmK,EAAM,CAACnK,KAPRoK,EAAQpK,EACRmK,EAAM,CAACnK,IAUJmK,EAAIrK,OAAS,GAAKL,IAAMwK,EAAOnK,OAAS,GAAGwK,EAAS1M,KAAKuM,GAEtDG,GACL,KAGEC,EAAoBR,IAIzB,GAAIA,EAAOjK,QAAU,EAAG,MAAO,GAE/B,IAAI0K,EAAQT,EAAOnC,MAAM,GACzB,MAAM6C,EAAQ1H,EAAmB2H,KAAMD,GAAUA,EAAM5L,SAASkL,EAAO,GAAGvC,WAC1E,IAAKiD,EAAO,OAAOF,EAAiBC,GAEpC,MAAMG,EAAQH,EAAM5L,OAAQoB,GAAMyK,EAAM5L,SAASmB,EAAEwH,WAGnD,OAFAgD,EAAQA,EAAM5L,OAAQoB,IAAOyK,EAAM5L,SAASmB,EAAEwH,WAEvC,IAAImD,KAAUJ,EAAiBC,KAGjCI,EAAoBb,IACzB,MAAMc,EAAO,IAAIC,IAAIf,GAEfgB,EAAYjB,EAAcC,EAAQ,KAClCiB,EAA8B,GAAGC,UAAUF,EAAUG,IAAKC,GAAMrB,EAAcqB,EAAG,OAOvF,OANAH,EAAStN,QAAS0N,GAAOA,EAAGlB,KAAK,CAACzB,EAAIC,IAAOA,EAAG2C,WAAa5C,EAAG4C,aAEhEL,EAAStN,QAAS0N,IACjBb,EAAiBa,GAAI1N,QAASsC,GAAM6K,EAAKS,OAAOtL,MAG1C1C,MAAMnB,KAAK0O,IAGbU,EAAmB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAiBtCC,EAAc,EAAGC,OAAMC,YAC5B,MAAMjB,EAAQpD,KAAKsE,MAAMF,EAAO,GAC1BG,EAhBM,CAACvK,IACb,IAAIE,EAAIF,EAAI,EACZ,KAAOE,EAAI,GAAGA,GAAK,EAEnB,OAAOA,GAYIsK,CAAKJ,GAEhB,OApBgB,GAoBU,GAARhB,EAAac,EAAiBK,GAAMF,GAGjDI,EAAU1N,IACf,MAAMmK,EAAMlB,KAAKkB,OAAOnK,GAExB,OAAOA,EAAK2N,QAAQxD,ICtHrB,MAAMyD,YACL,KAAAC,IAASrP,GAAkB,CAC3B,KAAA6N,IAAS7N,GAAkB,CAC3B,cAAAsP,IAAkBtP,GAAkB,CACpC,QAAAuP,GAAmB,CACnB,IAAAC,IAAQxP,GAAkB,CAC1B,IAAAyP,IAAQzP,GAAkB,CAC1B,MAAA0P,IAAU1P,GAAkB,ECL7B,MAKM2P,EAAsB,QAQtBC,EAAmBnL,GACd,IAANA,EAAgB,KAPD,CAACA,IACpB,MAAM/B,EAAI+H,KAAKC,MALK,KAKCjG,GAErB,OAAOmI,EAAgBlK,EAPH,OAabmN,CAAYpL,GASpB,IAAKqL,ECjCAC,ECDAC,GFkCL,SAAKF,GACJA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,SAAA,GAAA,WACAA,EAAAA,EAAA,WAAA,GAAA,YACA,CAJD,CAAKA,IAAAA,EAIJ,CAAA,IAED,MAAMG,OAKL,WAAArO,CAAYJ,GACXP,OAAOM,OAAOE,KAAMD,EACpB,CAED,QAAO0O,CAAEnP,GACR,OAAO,IAAIkP,OAAO,CACjBE,KAAML,EAAWM,MACjBC,GAAItP,GAEL,CAED,QAAOuP,CAAED,EAAaE,EAAaC,EAAgB,GAClD,OAAO,IAAIP,OAAO,CACjBE,KAAML,EAAWW,SACjBJ,GAAIG,EAAQ,EAAIH,EAAKE,EACrBA,GAAIC,EAAQ,EAAID,EAAKF,GAEtB,CAED,QAAOK,CAAEL,EAAaE,GACrB,OAAO,IAAIN,OAAO,CACjBE,KAAML,EAAWa,WACjBN,KACAE,MAED,CAED,MAAItF,GACH,OAAQxJ,KAAK0O,MACZ,KAAKL,EAAWM,MACf,OAAO3O,KAAK4O,GAAG7Q,WAEhB,KAAKsQ,EAAWW,SACf,MAAO,GAAGhP,KAAK4O,MAAM5O,KAAK8O,KAE3B,KAAKT,EAAWa,WACf,MAAO,GAAGlP,KAAK4O,MAAM5O,KAAK8O,IAAM,EAAI9O,KAAK8O,GAAK,MAEhD,CAED,UAAIK,GACH,MAAO,CAACnP,KAAK4O,GAAI5O,KAAK8O,IAAIvO,OAAOqK,OAAOwE,SACxC,EAyEF,MAAMC,YAGL,eAAOC,CAASC,EAAgBC,GAC/B,MAAMrN,EAASlD,MAAMsQ,EAAKE,OAAOhO,QAC/BiO,KAAK,MACL7C,IAAI,IACJ5N,MAAMsQ,EAAKE,OAAOhO,QAChBiO,KAAK,MACL7C,IAAI,IAAM,IAAIJ,MAGlB8C,EAAKI,QACHpP,OAAQqP,GAAWA,EAAOlB,OAASL,EAAWa,YAC9C7P,QAASuQ,IACT,MAAMC,EAASN,EAAKE,OAAOK,UAAWC,GAAUA,EAAMZ,OAAO3O,SAASoP,EAAOhB,KACvEoB,EAAST,EAAKE,OAAOK,UAAWC,GAAUA,EAAMZ,OAAO3O,SAASoP,EAAOd,KAC7EhE,QAAQmD,OAAO4B,GAAU,GAAKG,GAAU,EAAG,+BAAgCT,EAAK/F,GAAI+F,EAAKE,OAAQG,GAEjGzN,EAAO0N,GAAQG,GAAQC,IAAIL,EAAOhB,MAEpCzM,EAAO,GAAGoN,EAAKE,OAAOhO,OAAS,GAAGwO,IAAI,GAEtC,MAAMC,EAAeX,EAAKW,aACpBC,EAAQX,EAAOY,QAAQZ,EAAOY,QAAQ3O,OAAS,GAAGlB,OAAO,CAAChC,EAAG6C,KAAO8O,EAAaG,IAAIjP,IACrFkP,EAAQtH,KAAKkB,IAAI,EAAGlB,KAAKkB,OAAOiG,GAAS,KAEzCI,EAAWhB,EAAKI,QAAQpP,OAAQqP,GAAWA,EAAOlB,OAASL,EAAWa,YAEtEsB,EAAehR,OAAOc,KAAKkP,EAAOiB,UACtC5D,IAAIjC,QACJrK,OAAQmQ,IAASH,EAASlE,KAAMuD,GAAWA,EAAOd,KAAO4B,IAc3D,OAXAnB,EAAKE,OAAOpQ,QAAS0Q,IACpBA,EAAMZ,OAAO9P,QAASqR,IACrB,GAAIA,EAAM,EAAG,EACAH,EAASlE,KAAMuD,GAAWA,EAAOhB,KAAO8B,IACxClB,EAAOY,QAAQZ,EAAOY,QAAQ3O,OAAS,GAAGiP,IAAQJ,IACxDE,EAAaG,KAAMnH,GAAOgG,EAAOY,QAAQ5G,GAAIkH,GAAO,IAAIvO,EAAO4N,EAAMa,OAAOrB,EAAKE,OAAOhO,OAAS,GAAGwO,IAAIS,GAE9G,MAII,IAAIrB,YAAY,CAAElN,UACzB,CAED,WAAAhC,CAAYJ,GACXP,OAAOM,OAAOE,KAAMD,EACpB,CAED,MAAA8Q,CAAO7N,EAAWE,EAAW4N,EAAgBC,EAAa,GACzD,GAAI/Q,KAAKmC,OAAOa,GAAGE,GAAG8N,KAAM,CAC3B,MAAMN,EAAM,IAAI1Q,KAAKmC,OAAOa,GAAGE,IAAI6N,GACnC,GAAI7N,IAAM4N,EAAQ,MAAO,CAACJ,GAE1B,IAAK,IAAIO,EAAK/N,EAAI,EAAG+N,GAAMH,IAAUG,EAAI,CACxC,MAAMC,EAAMlR,KAAK6Q,OAAO3N,EAAG+N,EAAIH,GAC/B,GAAII,EAAK,MAAO,CAACR,KAAQQ,EACzB,CACD,CAED,OAAO,IACP,CAED,cAAAC,CAAeC,EAAYC,GAC1B,MAAMC,EAAQ,GACd,IAAK,IAAIC,EAAIF,EAAIE,GAAKH,EAAK,IAAKG,EAC/B,IAAK,IAAIR,EAAK,EAAGA,EAAK/Q,KAAKmC,OAAOiP,GAAIG,GAAGP,OAAQD,EAAI,CACpD,MAAMS,EAAOxR,KAAK6Q,OAAOO,EAAIG,EAAGF,EAAIN,GACpC,GAAIS,IACHF,EAAM/R,KAAKiS,GACU,IAAjBF,EAAM7P,QAAc,MAAO,CAAC6P,EAAM,GAAIA,EAAM,GAEjD,CAGF,OAAO,IACP,CAED,UAAAG,CAAWD,GACVxR,KAAKmC,OAAO9C,QAASqS,GAAWA,EAAOrS,QAASD,GAAQoS,EAAKnS,QAASmK,GAAOpK,EAAI6N,OAAOzD,KACxF,CAED,WAAAmI,CAAYC,GACX,MAAMC,EAAwB,GAE9B,IAAK,IAAIzG,EAAI,EAAGA,EAAIpL,KAAKmC,OAAOV,OAAQ2J,IACvC,IAAK,IAAIgG,EAAK,EAAGA,EAAKpR,KAAKmC,OAAOV,OAAS2J,EAAGgG,IAAM,CACnD,MAAMC,EAAKD,EAAKhG,EAEhB,OAAa,CAEZ,MAAMkG,EAAQtR,KAAKmR,eAAeC,EAAIC,GACtC,IAAIC,EAQG,MARI,CACV,MAAOQ,EAAOC,GAAST,EACjBU,EAAW/S,MAAM2S,GAAYlC,KAAK,GACxCoC,EAAMzS,QAASqR,GAASsB,EAAStB,GAAO,GACxCqB,EAAM1S,QAASqR,GAASsB,EAAStB,IAAQ,GACzCmB,EAAUtS,KAAKyS,GAEfhS,KAAKyR,WAAWK,EAAMrQ,OAASsQ,EAAMtQ,OAASqQ,EAAQC,EACtD,CACD,CACD,CAGF,OAAOF,CACP,EAGF,MAAMI,SAYL,WAAA9R,CAAYJ,GACXP,OAAOM,OAAOE,KAAMD,GAEpB+K,QAAQmD,OAAOjO,KAAKkS,OAAQ,kBAAmBnS,EAC/C,CAED,WAAI4P,GACH,MAAMwC,EAAOnS,KAAKoS,OAASpS,KAAKoS,OAAOzC,QAAU,GACjD,OAAO3P,KAAK4P,OAAS,IAAIuC,EAAMnS,KAAK4P,QAAUuC,CAC9C,CAED,MAAI3I,GAEH,OADkBxJ,KAAK2P,QAAQ9C,IAAK+C,GAAWA,EAAOpG,IAAIqC,OACzCwG,KAAK,IACtB,CAED,gBAAInC,GACH,MAAM9Q,EAAM,IAAIqN,IAGhB,OAFIzM,KAAKyP,QAAQzP,KAAKyP,OAAOpQ,QAAS0Q,GAAUA,EAAMZ,OAAO9P,QAASqR,GAAQA,GAAO,GAAKtR,EAAI6Q,IAAIS,KAE3FtR,CACP,CAED,IAAAkT,CAAKC,GAEJ,OADkBA,EAAIC,MAAM,KAAK3G,OAChBwG,KAAK,OAASrS,KAAKwJ,EACpC,CAED,eAAAiJ,CAAgBjD,GACfxP,KAAKyP,OAAS,CAAC,CAAEN,OAAQ,EAhTf,KAkTV,IAAK,MAAMS,KAAU5P,KAAK2P,QACzB,OAAQC,EAAOlB,MACd,KAAKL,EAAWM,MACf3O,KAAKyP,OAAOiD,QAAQ,CAAEvD,OAAQ,CAACS,EAAOhB,MAEtC,MACD,KAAKP,EAAWW,SACf,CACC,MAAMa,EAAS7P,KAAKyP,OAAOpD,KAAM0D,GAAUA,EAAMZ,OAAO3O,SAASoP,EAAOhB,KAClEoB,EAAShQ,KAAKyP,OAAOpD,KAAM0D,GAAUA,EAAMZ,OAAO3O,SAASoP,EAAOd,KACxEhE,QAAQmD,OAAO4B,GAAUG,EAAQ,oBAAqBhQ,KAAKyP,OAAQG,GAE/DC,GAAUG,GACbH,EAAOV,OAAO5P,QAAQyQ,EAAOb,QAC7Ba,EAAOb,OAAS,KAChBnP,KAAKyP,OAASzP,KAAKyP,OAAOlP,OAAQwP,GAAUA,EAAMZ,SACvCU,EACFG,GAAQH,EAAOV,OAAO5P,KAAKqQ,EAAOd,IADxBkB,EAAOb,OAAOuD,QAAQ9C,EAAOhB,GAEjD,CAED,MACD,KAAKP,EAAWa,WACf,CACC,MAAMW,EAAS7P,KAAKyP,OAAOpD,KAAM0D,GAAUA,EAAMZ,OAAO3O,SAASoP,EAAOhB,KAClEoB,EAAShQ,KAAKyP,OAAOpD,KAAM0D,GAAUA,EAAMZ,OAAO3O,SAASoP,EAAOd,KACxEhE,QAAQmD,OAAO4B,GAAUG,EAAQ,oBAAqBhQ,KAAKyP,OAAQG,GAEnE,MAAM+C,EAAYjC,IACjB5F,QAAQmD,OAAOuB,EAAOiB,SAASC,GAAM,oBAAqBd,EAAOpG,GAAIkH,EAAKlB,EAAOiB,UACjF,MAAMzN,EAAIwM,EAAOiB,SAASC,GAAK1N,EAEzB+M,EAAQ/P,KAAKyP,OAAOpD,KACxBtI,GAAMA,EAAEoL,OAAOwB,KAAMrR,GAAMA,EAAI,GAAKkQ,EAAOiB,SAASnR,GAAG0D,GAAKA,IAAMe,EAAEoL,OAAOwB,KAAMrR,GAAMA,EAAI,GAAKkQ,EAAOiB,SAASnR,GAAG0D,GAAKA,IAE1H,GAAI+M,EAAOA,EAAMZ,OAAO5P,KAAKmR,OACxB,CACJ,MAAMiC,EAAW,CAAExD,OAAQ,CAACuB,IACtBkC,EAAK5S,KAAKyP,OAAOK,UAAW/L,IAvV9B,IAuVoCA,EAAEoL,OAAO,IAAcK,EAAOiB,SAAS1M,EAAEoL,OAAO,IAAInM,GAAKA,GACjGhD,KAAKyP,OAAOoD,OAAOD,EAAI,EAAGD,EAC1B,GAEG9C,GAAQ8C,EAAS/C,EAAOhB,IACxBoB,GAAQ2C,EAAS/C,EAAOd,GAK7B,EAMJ9O,KAAKyP,OAAOpQ,QAAQ,CAAC0Q,EAAO3O,IAAO2O,EAAMa,MAAQxP,EACjD,CAED,oBAAA0R,CAAqBtD,GACpB,MAAMoC,EAAapS,OAAOc,KAAKkP,EAAOiB,UAAUhP,OAE1CoQ,EADcxC,YAAYC,SAAStP,KAAMwP,GACjBmC,YAAYC,GAEpCmB,EAAU9T,MAAM2S,GACpBlC,KAAK,MACL7C,IAAI,CAACtO,EAAGiL,IAAOgG,EAAOiB,SAASjH,GAAIwJ,UACrChT,KAAKiT,YAAcpB,EAAUhF,IAAKmF,GAAaA,EAASnF,IAAI,CAACqG,EAAI9R,IAAM8R,EAAKH,EAAQ3R,IACpF,CAED,qBAAA+R,CAAsB3D,GACrB1E,QAAQmD,OAAOjO,KAAKiT,YAAa,gCAEjC,MAAMrB,EAAapS,OAAOc,KAAKkP,EAAOiB,UAAUhP,OAC1C2R,EAAOnU,MAAM2S,GAAYlC,MAAK,GAC9B2D,EAAQpU,MAAM2S,GAAYlC,MAAK,GAE/B4D,EAAyB,GAE/B,IAAK,MAAMC,KAAcvT,KAAKiT,YAAa,CAC1C,MAAMO,EAAMD,EAAWvH,OAAO,CAACwH,EAAKN,IAAOM,EAAMN,EAAI,GACrD,GAAY,IAARM,EAAW,CACd,MAAM1G,EAAI0G,EAAM,EAAID,EAAW1G,IAAKqG,IAAQA,GAAMK,EAClD,GAAIzG,EAAE,GAAK,EAAG,SAEdwG,EAAW/T,KAAKuN,GAGhBA,EAAEzN,QAAQ,CAAC6T,EAAI9R,KACdiS,EAAMjS,GAAKiS,EAAMjS,IAAM8R,EAAK,EACxBA,IAAIE,EAAKhS,GAAK8R,EAAK,GAAKG,EAAMjS,KAEnC,CACD,CAaD,OAVApB,KAAKiT,YAAY5T,QAASkU,IAEb,IADAA,EAAWvH,OAAO,CAACwH,EAAKN,IAAOM,EAAMN,EAAI,IACnCK,EAAW,IACxBA,EAAW5C,KAAK,CAACuC,EAAI9R,IAAM8R,IAAOE,EAAKhS,MAC1CmS,EAAWlU,QAAQ,CAAC6T,EAAI9R,IAAM8R,IAAOE,EAAKhS,IAAK,IAC/CkS,EAAW/T,KAAKgU,MAKZ,CAAEH,OAAME,aACf,CAED,cAAAG,EAAeL,KAAEA,EAAIE,WAAEA,IACtB,IAAKA,EAAW7R,OAAQ,OAAO2R,EAAKvG,IAAI,IAAM,GAE9C,MAAM6G,EAAMN,EACVvG,IAAI,CAACwG,EAAOjS,KAAO,CAAEiS,QAAOjS,OAC5Bb,OAAO,EAAG8S,YAAaA,GACvBxG,IAAI,EAAGzL,OAAQA,GACfb,OAAQa,GAAMkS,EAAW3C,KAAMgD,GAAuB,IAAbA,EAAMvS,KACjD,IAAKsS,EAAIjS,OAAQ,OAAO2R,EAAKvG,IAAI,IAAM,GAEvC,MAAMkG,EAAUW,EAAI7G,IAAKzL,GAAM4H,KAAK4K,IAAIN,EAAWjH,KAAMsH,GAAuB,IAAbA,EAAMvS,IAAUA,KAI7EyS,EAAc,IAAI9U,IACxB,IAAI+U,GAAa,EAEjB,MAAMC,EAAgBT,EACpBzG,IAAK8G,IAIE,CAAEK,KAHIL,EAAMpT,OAAO,CAAChC,EAAG6C,IAAMsS,EAAIlT,SAASY,IAGlC6S,MAFDN,EAAM3H,OAAO,CAACwH,EAAKN,EAAI9R,IAAMoS,GAAOE,EAAIlT,SAASY,GAAK,EAAI8R,GAAK,MAK7E3S,OAAO,EAAGyT,OAAMC,WAChB,GAAID,EAAKE,MAAOhB,GAAc,IAAPA,GAAW,OAAO,EAEzC,MAAM1J,EAAKwK,EAAK3B,KAAK,KACrB,OAAIwB,EAAYxD,IAAI7G,IACnBsK,EAAaD,EAAY7U,IAAIwK,KAAQyK,GAC9B,IAERJ,EAAYzU,IAAIoK,EAAIyK,IAEb,KAGT,GAAIH,EAAY,OAAO,KAEvB,MAAMK,EAAcJ,EAAMxK,MAAM,EAAGmK,EAAIjS,QACjC2S,EAAYL,EAAMxK,MAAMmK,EAAIjS,QAClC,GAAI0S,EAAY1S,OAASiS,EAAIjS,OAAQ,CACpC,MAAM4S,EAAiB,GACvB,IAAK,IAAIC,EAAK,EAAGA,EAAKZ,EAAIjS,OAAS,IAAK6S,EAAI,CAC3C,MAAMC,EAAKD,EAAK,EACVN,EAAO,CACZA,KAAMN,EAAI7G,IAAI,CAACtO,EAAG6C,IAAOA,IAAMkT,EAAK,EAAIlT,IAAMmT,GAAM,EAAI,GACxDN,KAAM,EACNO,OAAQzB,EAAQuB,GAAMvB,EAAQwB,IAAOrG,GAElCiG,EAAYxD,KAAM8D,GAAOA,EAAGT,KAAKM,IAAOG,EAAGT,KAAKO,MAAMP,EAAKQ,OAAS,IACpEL,EAAYxD,KAAM8D,GAAyC,IAAlCA,EAAGT,KAAKzT,OAAOqK,QAAQnJ,SAAiBgT,EAAGT,KAAKM,IAAOG,EAAGT,KAAKO,OAAOP,EAAKQ,OAAS,GACjHH,EAAe9U,KAAKyU,EACpB,CACDK,EAAexI,KAAK,CAAC6I,EAAIC,IAAOD,EAAGF,MAAQG,EAAGH,OAE9CL,EAAY5U,QAAQ8U,EAAe9K,MAAM,EAAGmK,EAAIjS,OAAS0S,EAAY1S,QACrE,CAGD,MAAMU,EAASgS,EAAYtH,IAAI,EAAGmH,UAAWA,GACvCC,EAAOE,EAAYtH,IAAI,EAAGoH,UAAWA,GAErCW,EJvSS,SAAU9T,GACzB,MAAM+T,EAAMlU,EAAUC,OAAOC,OAAOC,GAAUwB,UAC9C,OAAY,OAARuS,EACKA,EAAI/T,SAEJ,IAEX,CIgSiBgU,CAAc3S,GAC7B,IAAKyS,EAGJ,OAFA5U,KAAKkS,OAAOlE,KAAK,eAAgB7L,GAE1B,KAER,MAAM4S,EAAWH,EAAO/H,IAAKmI,GAAQA,EAAIhJ,OAAO,CAACwH,EAAKN,EAAI9R,IAAMoS,EAAMN,EAAKe,EAAK7S,GAAI,IAGpF,GAAIgT,EAAU3S,QACT2S,EAAUzD,KAAMqD,GAAShL,KAAK4K,IAAII,EAAKA,KAAKhI,OAAO,CAACwH,EAAKN,EAAI9R,IAAMoS,EAAMN,EAAK6B,EAAS3T,GAAI,IAAM,MAEpG,OAAO,KAIT,MAAMjC,EAASiU,EAAKvG,IAAI,IAAM,GAG9B,OAFA6G,EAAIrU,QAAQ,CAAC4V,EAAI7T,IAAOjC,EAAO8V,GAAMF,EAAS3T,IAEvCjC,CACP,CAED,cAAA+V,CAAe1F,GACd,MAAM4D,KAAEA,EAAIE,WAAEA,GAAetT,KAAKmT,sBAAsB3D,GAMlD2F,EADe/B,EAAKvG,IAAI,CAACwG,EAAO7J,IAAQ6J,GAAS,EAAIvJ,EAAY0F,EAAOiB,SAASjH,GAAI4L,WAAY,MACxEpJ,OAAO,CAACa,EAAKuI,EAAY5L,KACnD4L,GAAc,IACjBvI,EAAIuI,GAAcvI,EAAIuI,IAAe,GACrCvI,EAAIuI,GAAY7V,KAAKiK,IAGfqD,GACL,CAAE,GACCwI,EAAS7V,OAAOC,QAAQ0V,GAC5BtJ,KAAK,CAACzB,EAAIC,IAAOO,OAAOP,EAAG,IAAMO,OAAOR,EAAG,KAC3CyC,IAAKyI,GAASA,EAAK,IAGrB,IAAK,IAAIC,EAAW,EAAGA,EAAWF,EAAO5T,SAAU8T,EAAU,CAC5D,MAAMC,EAAc,GAAG5I,UAAUyI,EAAO9L,MAAM,EAAGgM,IAC3ClC,EAAQD,EAAKvG,IAAI,CAACtO,EAAGiL,KAAQgM,EAAYhV,SAASgJ,IAClDiM,EAAQzV,KAAKyT,eAAe,CAAEL,KAAMC,EAAOC,eAEjD,GAAImC,GAASA,EAAMvB,MAAM,CAAChB,EAAI9R,IAAM8R,GAAM,GAAKA,EAAK1D,EAAOiB,SAASrP,GAAGsU,SAAU,OAAOD,CACxF,CAED,OAAOzV,KAAKyT,eAAe,CAAEL,OAAME,cACnC,CAED,YAAAqC,CAAanG,GACZ,MAAM4D,KAAEA,EAAIE,WAAEA,GAAetT,KAAKmT,sBAAsB3D,GAKxD,IAAK,MAAM1C,KAAKwG,EAAY,CAI3B,GAFexG,EAAEd,OAAO,CAACwH,EAAKN,EAAI9R,IAAMoS,EAAMN,GAAME,EAAKhS,IAAM8R,GAAM,EAAI,EAAI1D,EAAOiB,SAASrP,GAAGsU,SAAU,IAE5F,EAMb,OAJA5I,EAAEzN,QAAQ,CAAC6T,EAAI9R,KACV8R,IAAI1D,EAAOoG,gBAAgBxU,IAAM8R,EAAK,EAAI,GAAK,MAG7C,CAER,CAED,IAAKI,EAAW7R,OAAQ,OAAO,EAE/B,MAAMoU,EAAY7V,KAAKyT,eAAe,CAAEL,OAAME,eAC9C,OAAKuC,IAEGA,EAAU3B,MAAM,CAAChB,EAAI9R,IAAM8R,EAAK1D,EAAOiB,SAASrP,GAAGsU,SAAWxC,GAAM,EAC5E,CAED,WAAA4C,CAAYtG,GACX,MAAMuG,EAAanG,GAClBJ,EAAOiB,SAASb,EAAOd,IACpBU,EAAOiB,SAASb,EAAOd,IAAI9L,EAA4E,IAAxEgG,KAAK4K,IAAIpE,EAAOiB,SAASb,EAAOd,IAAI9L,EAAIwM,EAAOiB,SAASb,EAAOhB,IAAI5L,GAClGwM,EAAOiB,SAASb,EAAOhB,IAAI5L,EAAI,IAC7BgT,EAAQhW,KAAK2P,QAAQpP,OAAQqP,GAAWA,EAAOlB,OAASL,EAAWa,YAAYrD,KAAK,CAACoK,EAAIC,IAAOH,EAAUE,GAAMF,EAAUG,IAC1HC,EAAOH,EAAMhK,OAAO,CAACa,EAAKuJ,KAAG,IAAWvJ,EAAK,CAACuJ,EAAIxH,IAAKwH,EAAItH,KAAO,CAAA,GAClEuH,EAAU,IAAI5J,IAAa,IAAIjN,OAAOc,KAAK6V,IAAOtJ,IAAIjC,SAC5DoL,EAAM3W,QAAS+W,GAAQC,EAAQpJ,OAAOmJ,EAAItH,KAC1C9O,KAAKyP,OAAO,GAAGN,OAAO9P,QAASqR,GAAQA,EAAM,GAAK2F,EAAQpG,IAAIS,IAE9D,IAAI4F,EAAS,IAAID,GAASxJ,IAAK0J,IAC9B,MAAMC,EAAQ,CAACD,GAEf,IAAIvT,EAAIuT,EACR,KAAOJ,EAAKnT,KACXA,EAAImT,EAAKnT,KACLA,EAAI,GAAKwT,EAAMhW,SAASwC,MAE5BwT,EAAMjX,KAAKyD,GAGZ,OAAOwT,IAGR,MAAMrH,EAAwB3P,OAAOiX,OAAOjH,EAAOiB,UACjDlQ,OAAQjB,GAAMA,EAAEkK,GAAK,GACrBqD,IAAKvN,IAAO,CACZkK,GAAIlK,EAAEkK,GACNkN,KAAM,KACNC,QAAS,KACTC,UAAW,KACXC,SAAU,QAENpG,EAA0CtB,EAC9C5O,OAAQjB,GAAMgX,EAAO3F,KAAM6F,GAAUA,EAAMhW,SAASlB,EAAEkK,MAAQwM,EAAMrF,KAAMyF,GAAQ,CAACA,EAAIxH,GAAIwH,EAAItH,IAAItO,SAASlB,EAAEkK,MAC9GwC,OAAO,CAACa,EAAKvN,KAAC,IAAWuN,EAAK,CAACvN,EAAEkK,IAAKlK,IAAM,CAAE,GAEhDU,KAAKyP,OAAOpQ,QAAQ,CAAC0Q,EAAO6C,IAAO7C,EAAMZ,OAAO9P,QAASqR,GAAQD,EAASC,KAASD,EAASC,GAAKkG,UAAYhE,KAE7G5S,KAAKyP,OAAO,GAAGiH,KAAO,EACtB1W,KAAKyP,OAAO,GAAGN,OAAO9P,QAASqR,GAAQD,EAASC,KAASD,EAASC,GAAKgG,KAAO,IAG9E,MAAMb,EAAY7V,KAAKkV,eAAe1F,GACtCL,EAAO9P,QAASC,GAAOA,EAAEuX,SAAW1I,EAAgB0H,EAAUvW,EAAEkK,MAMhE,MAAMsN,EAAU9W,KAAKyP,OAAOlG,MAAM,EAAGvJ,KAAKyP,OAAOhO,OAAS,GACpDsV,EAAc,KACnB,GAAID,EAAQ5C,MAAOnE,GAAUnF,OAAOwE,SAASW,EAAM2G,OAAQ,OAAO,EAElE,IAAIM,GAAU,EA0Bd,OAvBAhB,EAAM3W,QAAS+W,IACd,MAAMvG,EAAS7P,KAAKyP,OAAOpD,KAAM0D,GAAUA,EAAMZ,OAAO3O,SAAS4V,EAAIxH,KAC/DoB,EAAShQ,KAAKyP,OAAOpD,KAAM0D,GAAUA,EAAMZ,OAAO3O,SAAS4V,EAAItH,KACjElE,OAAOwE,SAASS,EAAO6G,QAAU9L,OAAOwE,SAASY,EAAO0G,QAC3D1G,EAAO0G,KAAO7G,EAAO6G,KAAOnL,EAAYiE,EAAOiB,SAAS2F,EAAIxH,IAAIoE,SAAUvC,EAAS2F,EAAIxH,IAAIiI,UAC3F7G,EAAOb,OAAO9P,QAASqR,GAAQD,EAASC,KAASD,EAASC,GAAKgG,KAAO1G,EAAO0G,OAE7EM,GAAU,KAKZ,IAAIhB,GAAOiB,UAAU5X,QAAS+W,IAC7B,MAAMvG,EAAS7P,KAAKyP,OAAOpD,KAAM0D,GAAUA,EAAMZ,OAAO3O,SAAS4V,EAAIxH,KAC/DoB,EAAShQ,KAAKyP,OAAOpD,KAAM0D,GAAUA,EAAMZ,OAAO3O,SAAS4V,EAAItH,MAChElE,OAAOwE,SAASS,EAAO6G,OAAS9L,OAAOwE,SAASY,EAAO0G,QAC3D7G,EAAO6G,KAAO1G,EAAO0G,KAAOnL,EAAYiE,EAAOiB,SAAS2F,EAAIxH,IAAIoE,SAAUvC,EAAS2F,EAAIxH,IAAIiI,UAC3FhH,EAAOV,OAAO9P,QAASqR,GAAQD,EAASC,KAASD,EAASC,GAAKgG,KAAO7G,EAAO6G,OAE7EM,GAAU,KAILA,GAER,KAAOD,MAEPjM,QAAQmD,OACP6I,EAAQ5C,MAAOnE,GAAUnF,OAAOwE,SAASW,EAAM2G,OAC/C,8BACA1W,KAAKyP,OACLzP,KAAKwJ,IAEN2F,EACE5O,OAAQ2W,GAAUtM,OAAOwE,SAAS8H,EAAMR,OACxCrX,QAAS6X,GAAWA,EAAMP,QAAUO,EAAMR,KAAOnL,EAAYiE,EAAOiB,SAASyG,EAAM1N,IAAIwJ,SAAUkE,EAAML,WAGzG,MAAMM,EAAkB3H,EAAOiB,SAAS,GAAGuC,SAC3CsD,EAAOjX,QAASmX,IACf,MAAMY,EAAQZ,EAAM1G,UAAWY,GAAQD,EAASC,GAAKiG,QAAUQ,GAC/D,GAAIC,GAAS,EAAG,CACJZ,EAAM3D,OAAOuE,EAAOZ,EAAM/U,OAAS2V,GAC3C/X,QAASqR,IACXD,EAASC,GAAKgG,KAAO,KACrBjG,EAASC,GAAKiG,QAAU,MAEzB,IAEFL,EAASA,EAAO/V,OAAQiW,GAAUA,EAAM/U,QAExC,MAAMuR,EAAWhK,KAAKkB,IAAI,KAAMiF,EAAOtC,IAAKvN,GAAMA,EAAEqX,SAASpW,OAAOqK,OAAOwE,WAI3E,OAFApP,KAAKkS,OAAOtE,MAAMnE,OAAO4N,cAAc,QAAUrX,KAAKwJ,GAAIqM,GAEnD,CACNS,SACAnH,SACA6D,WACArD,QAAS3P,KAAK2P,QAAQ9C,IAAK+C,GAAWA,EAAOpG,IAAI6I,KAAK,KAEvD,CAED,MAAAiF,CAAO9H,EAAgB+H,GACjBvX,KAAKyP,QAAQzP,KAAKyS,gBAAgBjD,GAIvC,MAAMgI,EAAShI,EAAOiI,gBAAgBzY,IAAIgB,KAAKwJ,KAAO,CAAEkO,MAAO,GAO/D,KANEF,EAAOE,MACTlI,EAAOiI,gBAAgBrY,IAAIY,KAAKwJ,GAAIgO,GAEpCxX,KAAK8S,qBAAqBtD,GAGtBxP,KAAK2V,aAAanG,GAGrB,OAFAgI,EAAOG,QAAS,EAChB3X,KAAKkS,OAAOnE,KAAK/N,KAAK4P,OAAOpG,GAAI,KAC1B,KAMR,GAFAxJ,KAAKkS,OAAO9F,MAAMpM,KAAK4P,QAAU5P,KAAK4P,OAAOpG,IAEzC+N,EAAMK,QAAU,GAMnB,KALEL,EAAMK,QAEH5X,KAAK6X,UAAU7X,KAAK8X,OAAOtI,GAEhCxP,KAAK6X,SAAW7X,KAAK6X,SAAStX,OAAQgP,IAAUC,EAAOiI,gBAAgBzY,IAAIuQ,EAAK/F,MAAQgG,EAAOiI,gBAAgBzY,IAAIuQ,EAAK/F,IAAImO,QACxH3X,KAAK6X,SAASpW,OAAQ,CACzB,MAAME,EAAK4N,GAA2BA,EAAKwI,cAAgBvI,EAAOiI,gBAAgBzY,IAAIuQ,EAAK/F,KAAO,CAAEkO,MAAO,IAAKA,MAAQ,GACxH1X,KAAK6X,SAAShM,KAAK,CAACmM,EAAIC,IAAOtW,EAAEsW,GAAMtW,EAAEqW,IAEzC,IAAK,MAAME,KAASlY,KAAK6X,SAAU,CAClC,MAAM9C,EAAWmD,EAAMZ,OAAO9H,EAAQ+H,GACtC,GAAIxC,EAEH,OADA/U,KAAKkS,OAAOpE,WACLiH,EAGR,GAAIwC,EAAMK,SAAW,EAAG,KACxB,CACD,OAGK5X,KAAKkS,OAAOtE,MAAM,oBAMzB,OAJA5N,KAAKkS,OAAOpE,WAEZ0J,EAAOG,QAAS,EAET3X,KAAK8V,YAAYtG,EACxB,CAED,MAAAsI,CAAOtI,GAENxP,KAAKyS,gBAAgBjD,GAErB,MAAMiB,SAAEA,EAAQ0H,QAAEA,EAAO/H,QAAEA,GAAYZ,EACjCU,EAAelQ,KAAKkQ,aAEpBkI,EAAyB,GACzBC,EAAgBC,IACrB,IAAKtY,KAAK2P,QAAQgB,KAAMjG,GAAMA,EAAElB,KAAO8O,EAAO1I,OAAOpG,MAAQ4O,EAASzH,KAAMhG,GAAMA,EAAEiF,OAAOpG,KAAO8O,EAAO1I,OAAOpG,IAAK,CACpH,MAAMqG,EAAS7P,KAAKyP,OAAOpD,KAAM0D,GAAUA,EAAMZ,OAAO3O,SAAS8X,EAAO1I,OAAOhB,KACzEoB,EAAShQ,KAAKyP,OAAOpD,KAAM0D,GAAUA,EAAMZ,OAAO3O,SAAS8X,EAAO1I,OAAOd,KAC/E,GAAIe,IAAWG,GAAWH,GAAUG,GAAUH,EAAOe,OAASZ,EAAOY,MAAQ,OAE7E,GAAIf,GAAUG,EACb,GAAIsI,EAAO1I,OAAOlB,OAASL,EAAWW,SAAU,CAC/C,GAAIgB,EAAOY,MAAQf,EAAOe,MAAQ,EAAG,OACrC,GAAI5Q,KAAK2P,QAAQgB,KAAMjG,GAAMmF,EAAOV,OAAO3O,SAASkK,EAAEkE,KAAOoB,EAAOb,OAAO3O,SAASkK,EAAEoE,KAAM,MAC5F,MAAM,GAAIwJ,EAAO1I,OAAOlB,OAASL,EAAWa,YACxCW,EAAOe,MAAQZ,EAAOY,MAAO,OAInC,GACC0H,EAAO1I,OAAOlB,OAASL,EAAWa,YAClClP,KAAK2P,QAAQgB,KACXjG,GACAA,EAAEgE,OAASL,EAAWa,aACrBxE,EAAEkE,KAAO0J,EAAO1I,OAAOhB,IAAMlE,EAAEoE,KAAOwJ,EAAO1I,OAAOd,IAAOpE,EAAEkE,KAAO0J,EAAO1I,OAAOd,IAAMpE,EAAEoE,KAAOwJ,EAAO1I,OAAOhB,KAGlH,OAGD,GAAI0J,EAAO1I,OAAOlB,OAASL,EAAWW,SAAU,CAC/C,GAAIa,IACHyI,EAAOP,YAAc/O,KAAKgB,IAAIsO,EAAOP,eAAgBlI,EAAOV,OAAOtC,IAAKvN,GAAM6Y,EAAQG,EAAO1I,OAAOd,IAAIxP,KACpGgZ,EAAOP,aAAe,GAAG,OAG9B,GAAI/H,IACHsI,EAAOP,YAAc/O,KAAKgB,IAAIsO,EAAOP,eAAgB/H,EAAOb,OAAOtC,IAAKvN,GAAM6Y,EAAQ7Y,GAAGgZ,EAAO1I,OAAOhB,MACnG0J,EAAOP,aAAe,GAAG,MAE9B,CAEDK,EAAS7Y,KAAK+Y,EACd,GAGF,IAAK,MAAM5H,KAAOR,EACbQ,EAAM,IAEVyH,EAAQzH,GAAKrR,QAAQ,CAACsC,EAAG6H,KACpB7H,EAAI,GAAK+O,IAAQlH,GAAI6O,EAAa,CAAEzI,OAAQpB,OAAOK,EAAErF,EAAIkH,GAAMqH,YAAapW,MAGjFwW,EAAQ9Y,QAAQ,CAAC0N,EAAIvD,KACpB,MAAM7H,EAAIoL,EAAG2D,GACT/O,EAAI,GAAG0W,EAAa,CAAEzI,OAAQpB,OAAOK,EAAE6B,EAAKlH,GAAKuO,YAAapW,MAGnEyO,EAAQM,GAAKrR,QAAQ,CAACsC,EAAG6H,KACpB7H,EAAI,GAAG0W,EAAa,CAAEzI,OAAQpB,OAAOS,EAAEzF,EAAIkH,GAAMqH,YAAapW,MAGnEyO,EAAQ/Q,QAAQ,CAAC0N,EAAIvD,KACpBA,EAAKA,GAAMhK,OAAOc,KAAKmQ,GAAUhP,QAAU,EAAI+H,EAC/C,MAAM7H,EAAIoL,EAAG2D,GACT/O,EAAI,GAAG0W,EAAa,CAAEzI,OAAQpB,OAAOS,EAAEyB,EAAKlH,GAAKuO,YAAapW,OAOlEyW,EAASzH,KACR2H,GACA,CAACjK,EAAWa,WAAYb,EAAWM,OAAOnO,SAAS8X,EAAO1I,OAAOlB,QAChEwB,EAAaG,IAAIiI,EAAO1I,OAAOhB,MAC/BsB,EAAaG,IAAIiI,EAAO1I,OAAOd,KASnC9O,KAAK6X,SAAWO,EAASvL,IAAKyL,GAAW,IAAIrG,SAAS,CAAEC,OAAQlS,KAAKkS,OAAQE,OAAQpS,QAASsY,KAN7FtY,KAAK6X,SAAW,EAOjB,EAGF,MAAMU,OAcL,WAAApY,CAAYqY,GAAkBjB,MAAEA,EAAQ,IAAIrF,OAAEA,EAAS,IAAIvE,aAAiC,IAC3F3N,KAAKuX,MAAQA,EACbvX,KAAKkS,OAASA,EAEd,MAAMuG,EAAS,CACdjP,GAAI,EACJxG,EAAG,EACHgK,WAAY,EACZoI,WAAYoD,EAAIE,kBAChB1F,SAAUwF,EAAIG,iBACdjD,QAAS,GAGV1V,KAAKmP,OAAS,CACbsJ,KACGD,EAAIrJ,OAAOtC,IAAKvN,IAAO,CACzBkK,GAAIlK,EAAEkK,GACNxG,EAAG1D,EAAE0D,EACLgK,WAAY1N,EAAE0N,WACdoI,WAAY9V,EAAE8V,WACdwD,MAAOtZ,EAAEsZ,MACT5F,SAAU1T,EAAE0T,SACZ0C,QAAS,OAGX1V,KAAKyQ,SAAWzQ,KAAKmP,OAAOnD,OAAO,CAACa,EAAKvN,KAAC,IAAWuN,EAAK,CAACvN,EAAEkK,IAAKlK,IAAM,CAAA,GAExEU,KAAKoQ,QAAUoI,EAAIpI,QACnBpQ,KAAKmY,QAAUK,EAAIL,QAEnBnY,KAAK6Y,MAAQL,EAAIM,KAAO9P,KAAKgB,IAAIwO,EAAIM,KAAO,KAAMN,EAAIrJ,OAAOtC,IAAKvN,GAAMA,EAAE0D,IAE1EhD,KAAKyX,gBAAkB,IAAI1Y,GAC3B,CAED,KAAAga,GAEC/Y,KAAKgZ,SAAW,IAAI/G,SAAS,CAC5BC,OAAQlS,KAAKkS,OACbtC,OAAQ,OAET5P,KAAKgZ,SAASnB,SAAW7X,KAAKmP,OAAO5F,MAAM,GAAGsD,IAC5CqK,GACA,IAAIjF,SAAS,CACZC,OAAQlS,KAAKkS,OACbE,OAAQpS,KAAKgZ,SACbpJ,OAAQpB,OAAOC,EAAEyI,EAAM1N,IACvBuO,YAAa/X,KAAKmY,QAAQjB,EAAM1N,IAAIwC,OAAO,CAACwH,EAAK7R,IAAM6R,EAAM7R,EAAG,MAInE,IAAIsX,EAAyB,KAE7BjZ,KAAKkS,OAAOrE,eAAe,SAE3B,MAAM+H,EAAkB3W,MAAMe,KAAKmP,OAAO1N,QAAQiO,KAAK,GAEjD6H,EAAQ,CAAEK,QAAS5X,KAAKuX,MAAOG,MAAO,GAC5C,KAAOH,EAAMK,QAAU,GAAG,GACvBL,EAAMG,MAER,MAAMlI,EAAS,CACdiB,SAAUzQ,KAAKyQ,SACfL,QAASpQ,KAAKoQ,QACd+H,QAASnY,KAAKmY,QACdV,gBAAiBzX,KAAKyX,gBACtB7B,mBAGKb,EAAW/U,KAAKgZ,SAAS1B,OAAO9H,EAAQ+H,GAO9C,GANAxC,EAAS6C,QAAU5X,KAAKuX,MAAQA,EAAMK,QACtC7C,EAAS2C,MAAQH,EAAMG,MACvB1X,KAAKkZ,iBAAiBnE,GACtB/U,KAAKkS,OAAOtE,MAAM,QAASmH,EAASoE,MAEpCF,GAAgBA,GAAgBlE,EAASoE,KAAOF,EAAaE,KAAOpE,EAAWkE,GAC1EA,EAAaE,KAAM,MAGxB,GAAInZ,KAAKyX,gBAAgBzY,IAAI,IAAI2Y,OAAQ,KACzC,CAWD,OATA3X,KAAKkS,OAAOpE,WACZ9N,KAAKkS,OAAOtE,MAAM,WAAYqL,GAAgBA,EAAaE,KAAMF,GACjEjZ,KAAKkS,OAAOtE,MAAM,QAAS5N,KAAKuX,MAAQA,EAAMK,SAE9C5X,KAAKkS,OAAOtE,MACX,mBACAgI,EAAgB/I,IAAK0E,GAAMA,EAAIgG,EAAMG,QAG/BuB,CACP,CAED,gBAAAC,CAAiBnE,GAChBA,EAASoE,KAAO,EAGhB,MAAM1I,EAAmCsE,EAAS5F,OAAOnD,OAAO,CAACa,EAAKvN,KAAO,IAAKuN,EAAK,CAACvN,EAAEkK,IAAK,IAAKlK,KAAMU,KAAKyQ,SAASnR,EAAEkK,OAAU,CAAA,GAO9H2F,EAAS4F,EAAS5F,OAAO5O,OAAQ2W,GAAUtM,OAAOwE,SAAS8H,EAAMR,OAAO7J,IAAKqK,GAAUzG,EAASyG,EAAM1N,KACtG4P,EAAoCjK,EAAOnD,OAAO,CAACa,EAAKqK,KAC7DrK,EAAIqK,EAAM0B,OAAS/L,EAAIqK,EAAM0B,QAAU,GACvC/L,EAAIqK,EAAM0B,OAAOrZ,KAAK2X,GACfrK,GACL,CAAE,GACLrN,OAAOiX,OAAO2C,GAAS/Z,QAASga,IACnBA,EAAGxN,KAAK,CAAC+C,EAAIE,IAAOF,EAAG5L,EAAI8L,EAAG9L,GAAGuG,MAAM,EAAG8P,EAAG5X,OAAS,GAC9DpC,QAAQ,CAACuP,EAAIxN,KACLiY,EAAGjY,EAAI,GACXsV,KAAO9H,EAAG8H,OAAM3B,EAASoE,MAAQ,SAI1C,MAAMzB,EAAQ,IAAI3Y,IAClBgW,EAAS5F,OAAO9P,QAAS6X,IAIxB,GAHKtM,OAAOwE,SAAS8H,EAAMR,QAAS3B,EAASuB,OAAOpC,MAAOsC,IAAWA,EAAMhW,SAAS0W,EAAM1N,OAC1FuL,EAASoE,MAAQ,IAAM1I,EAASyG,EAAM1N,IAAIwD,YAEvCkK,EAAML,SAAU,CACnB,MAAM5L,UAAEA,EAASC,YAAEA,GAAgBgM,EAAML,SACnCzB,EAAa3E,EAASyG,EAAM1N,IAAI4L,WACtCsC,EAAMtY,IAAI6L,EAAWjC,KAAKkB,IAAIwN,EAAM1Y,IAAIiM,IAAc,EAAG,EAAImK,IAC7DsC,EAAMtY,IAAI8L,EAAalC,KAAKkB,IAAIwN,EAAM1Y,IAAIkM,IAAgB,EAAG,EAAIkK,GACjE,IAIF,MAAMkE,EAAcnO,EAAgB4J,EAAS/B,SAAUhT,KAAKyQ,SAAS,GAAGuC,UACxE0E,EAAMtY,IAAIka,EAAYrO,UAAWjC,KAAKkB,IAAIwN,EAAM1Y,IAAIsa,EAAYrO,YAAc,EAAG,EAAIjL,KAAKyQ,SAAS,GAAG2E,aACtGsC,EAAMtY,IAAIka,EAAYpO,YAAalC,KAAKkB,IAAIwN,EAAM1Y,IAAIsa,EAAYpO,cAAgB,EAAG,EAAIlL,KAAKyQ,SAAS,GAAG2E,aAE1G,IAAK,MAAOnU,EAAGsY,KAAW7B,EAAMjY,UAC3BwB,EAAI,IAAG8T,EAASoE,MAAQnQ,KAAKwQ,IAAIvY,GAAKsY,GAG3C,IAAIE,EAAY,EACZC,EAAc,EAClB3E,EAASuB,OAAOjX,QAASmX,IACxB1L,QAAQmD,OAAOwC,EAAS+F,EAAM,IAAK,iBAAkBA,EAAOhX,OAAOc,KAAKmQ,IAExE,MAAMkJ,EAAQ3Q,KAAK4K,IAAInD,EAAS+F,EAAM,IAAIE,MACpCkD,EAAMnJ,EAAS+F,EAAMA,EAAM/U,OAAS,IAAIkV,QAE9C8C,GAAazQ,KAAKkB,IAAI,EAAGyP,EAAQ5E,EAAS/B,SAAW4G,GAGrD,IAAIhB,EAAQ,KACZpC,EAAMnX,QAASmK,IACd,MAAM0N,EAAQzG,EAASjH,GACnB0N,EAAM0B,QAAUA,IACL,OAAVA,KAAkBc,EACtBd,EAAQ1B,EAAM0B,WAKjB7D,EAASoE,MAAqB,GAAZM,EAAkBvL,EACpC6G,EAASoE,MAAQ,GAAKO,EAAc,EAGpC,MAAMG,EAAe,IAAI1K,GAAQtD,KAAK,CAAC+C,EAAIE,IAAOF,EAAG5L,EAAI8L,EAAG9L,GACtD8W,EAAaD,EAAatQ,MAAM,GAAGsD,IAAI,CAACiC,EAAI1N,KACjD,MAAMwN,EAAKiL,EAAazY,GAClBkJ,EAAKwE,EAAG9L,EAAI4L,EAAG5L,EACf+W,EAAKjL,EAAG4H,KAAO9H,EAAG8H,KAExB,IAAKqD,EAAI,OAAOzP,EAAKtK,KAAK6Y,MAI1B,OAAgB,EAFH7P,KAAKgR,MAAMD,EAAKhF,EAAS/B,SAAU1I,EAAKtK,KAAK6Y,OAErC7P,KAAKiR,GAAK,IAAM,IAEhCC,EAAYlR,KAAKkB,OAAO4P,EAAY,GAC1C/E,EAASoE,MAAQe,GAAa,EAE9BpP,QAAQmD,OAAO8G,EAASoE,MAAQ,EAAG,2BAA4BpE,EAASoE,KAAMzB,EAAO+B,EAAWC,GAC5F3E,EAASoE,KAAO,IAAGpE,EAASoE,KAAOlP,IACvC,GCpgCF,SAAKqE,GACJA,EAAAA,EAAA,IAAA,GAAA,MACAA,EAAAA,EAAA,IAAA,GAAA,MACAA,EAAAA,EAAA,IAAA,GAAA,MAEAA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,KAAA,GAAA,MACA,CAPD,CAAKA,IAAAA,EAOJ,CAAA,IA0CD,MAAM6L,qBAAqBta,YAiB1B,WAAAM,CAAYJ,GACXqa,QACAA,MAAMta,OAAOC,EACb,CAED,WAAIsa,GACH,OACCra,KAAKc,SAAS6P,KAAM2J,GAAS,CAAChM,EAAiBiM,MAAOjM,EAAiBkM,MAAMha,SAAS8Z,EAAK5L,QAAU4L,EAAKG,OAC1Gza,KAAKc,SAASoT,MAAOoG,GAAS,CAACA,EAAKtX,EAAGsX,EAAKI,GAAIJ,EAAKK,GAAIL,EAAK5D,MAAMxC,MAAMtJ,OAAOwE,YACjFpP,KAAKc,SACHyI,MAAM,GACN2K,MACA,CAACoG,EAAMvJ,IACNuJ,EAAKG,MACLza,KAAKc,SAASiQ,GAAI0J,MAClBH,EAAKM,OACL5a,KAAKc,SAASiQ,GAAI6J,OAClBN,EAAKO,aACL7a,KAAKc,SAASiQ,GAAI8J,aAClBP,EAAK5D,MAAQ1W,KAAKc,SAASiQ,GAAI2F,MAC/B4D,EAAKtX,EAAIhD,KAAKc,SAASiQ,GAAI/N,EAG/B,CAED,SAAI8X,GACH,OAAO9a,KAAK+a,YAAc/a,KAAK+a,WAAWD,KAC1C,CAED,WAAIE,GACH,MAAO,CACNpK,MAAO5Q,KAAK4Q,MACZ9P,SAAUd,KAAKc,SAEhB,CAED,qBAAIma,GACH,MAAMC,EAAUlb,KAAKc,SAASuL,KAAMiO,GAASA,EAAK5L,OAASJ,EAAiB6M,KAEtEzE,EAAOwE,GAASE,eAAiBF,EAAQE,gBAAgB1E,KAAOwE,GAASxE,KAE/E,OAAO9L,OAAOwE,SAASsH,GAAQA,EAAO1W,KAAKgT,QAC3C,CAED,gBAAAqI,CAAiBC,GAChBxQ,QAAQmD,OAAOqN,EAAW1K,QAAU5Q,KAAK4Q,MAAO,kBAAmB0K,EAAW1K,MAAO5Q,KAAK4Q,OAE1F5Q,KAAKoQ,QAAUkL,EAAWlL,QAC1BkL,EAAWxa,SAASzB,QAASkc,IAC5B,MAAM3K,MAAEA,KAAUwK,GAAmBG,EAC/BjB,EAAOta,KAAKc,SAASuL,KAAMiO,GAASA,EAAK1J,QAAUA,GACzD9F,QAAQmD,OAAOqM,EAAM,qBAAsB1J,GAEvC0J,IAAMA,EAAKc,eAAiBA,IAEjC,EAvEMjB,aAASzZ,UAAG,eACZyZ,aAAA9Z,UAAY,CAAC,MAyErB,MAAMmb,wBAAwB3b,YAO7B,WAAAM,CAAYJ,GACXqa,QACAA,MAAMta,OAAOC,EACb,CAED,aAAA0b,GACC,IAAIC,EAAK,EAeT,OAbA1b,KAAK2M,SAAW3M,KAAK2M,SAASpM,OAAQob,IACrC,MAAMtB,EAAUsB,EAAQtB,QAMxB,OALKA,IACJvP,QAAQ8C,MAAM,qBAAsB+N,KAClCD,GAGIrB,IAGJqB,EAAI5Q,QAAQ8C,MAAM,8BAA+B,GAAG8N,KAAM1b,KAAK2M,SAASlL,OAASia,KAChF5Q,QAAQ8C,MAAM,wBAAwB5N,KAAK2M,SAASlL,oBAElDia,CACP,EA5BMF,gBAAS9a,UAAG,kBE7HpB,MAAMkb,qBAAqB/b,YAa1B,WAAAM,CAAYJ,GACXqa,QACA5a,OAAOM,OAAOE,KAAMD,EACpB,CAED,UAAI8b,GACH,OAAO7S,KAAKsE,MAAMtE,KAAK8S,KAAK9b,KAAK+b,YAAc,CAC/C,CAED,UAAIC,GACH,OAAO/c,MAAMe,KAAK6b,QAAQnM,KAAK1P,KAAKic,MACpC,CAED,YAAIjJ,GACH,OAAOhK,KAAKkB,IACX,MACIlK,KAAKsW,QAAU,IAAIzJ,IAAK0F,GACZA,EAAI1F,IAAKrD,GAAOxJ,KAAKmP,OAAO9C,KAAM/M,GAAMA,EAAEkK,KAAOA,IAElDwC,OAAO,CAACgH,EAAUkE,IAAUlE,EAAWkE,EAAMlE,SAAU,IAGvE,EAlCM4I,aAASlb,UAAG,eDFpB,SAAK6N,GAEJA,EAAA,MAAA,UACAA,EAAA,MAAA,UACAA,EAAA,MAAA,UAGAA,EAAA,WAAA,cACAA,EAAA,WAAA,cACAA,EAAA,YAAA,gBACAA,EAAA,WAAA,eACAA,EAAA,WAAA,eACAA,EAAA,aAAA,iBACAA,EAAA,YAAA,gBACAA,EAAA,YAAA,gBACAA,EAAA,WAAA,eACAA,EAAA,aAAA,iBACAA,EAAA,aAAA,iBACAA,EAAA,YAAA,gBAGAA,EAAA,eAAA,WACAA,EAAA,eAAA,WACAA,EAAA,aAAA,WAGAA,EAAA,KAAA,UACAA,EAAA,IAAA,SACAA,EAAA,IAAA,SACAA,EAAA,MAAA,WACAA,EAAA,KAAA,UACAA,EAAA,KAAA,UACAA,EAAA,IAAA,SACAA,EAAA,MAAA,WACAA,EAAA,MAAA,WACAA,EAAA,KAAA,UAGAA,EAAA,WAAA,sBACAA,EAAA,SAAA,oBACAA,EAAA,eAAA,0BACAA,EAAA,QAAA,mBACAA,EAAA,YAAA,uBACAA,EAAA,WAAA,kCACAA,EAAA,SAAA,8BACAA,EAAA,QAAA,4BAGAA,EAAA,WAAA,eACAA,EAAA,WAAA,eACAA,EAAA,WAAA,eACAA,EAAA,gBAAA,8BACAA,EAAA,gBAAA,8BACAA,EAAA,gBAAA,8BACAA,EAAA,gBAAA,8BAGAA,EAAA,MAAA,WACAA,EAAA,MAAA,WACAA,EAAA,MAAA,UACAA,EAAA,MAAA,UACAA,EAAA,MAAA,UACAA,EAAA,MAAA,UACAA,EAAA,MAAA,UACAA,EAAA,OAAA,UACAA,EAAA,OAAA,WAGAA,EAAA,MAAA,WACAA,EAAA,MAAA,WACAA,EAAA,MAAA,WACAA,EAAA,MAAA,WACAA,EAAA,MAAA,WACAA,EAAA,MAAA,WAGAA,EAAA,SAAA,aACAA,EAAA,UAAA,cACAA,EAAA,aAAA,iBAGAA,EAAA,YAAA,gBACAA,EAAA,aAAA,iBACAA,EAAA,cAAA,kBAGAA,EAAA,UAAA,cACAA,EAAA,QAAA,YACAA,EAAA,SAAA,aACAA,EAAA,OAAA,WAGAA,EAAA,UAAA,cACAA,EAAA,WAAA,eAEAA,EAAA,sBAAA,qBAKAA,EAAA,YAAA,gBACAA,EAAA,WAAA,eAGAA,EAAA,IAAA,OACAA,EAAA,OAAA,UAGAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IAGAA,EAAA,eAAA,mBACAA,EAAA,gBAAA,oBACAA,EAAA,WAAA,eAEAA,EAAA,eAAA,mBACAA,EAAA,iBAAA,oBACAA,EAAA,aAAA,eACAA,EAAA,eAAA,eAGAA,EAAA,cAAA,mBACAA,EAAA,mBAAA,wBACAA,EAAA,eAAA,mBACAA,EAAA,eAAA,mBACAA,EAAA,oBAAA,yBACAA,EAAA,WAAA,eACAA,EAAA,YAAA,gBACAA,EAAA,YAAA,gBACAA,EAAA,WAAA,eACAA,EAAA,eAAA,mBACAA,EAAA,YAAA,gBACAA,EAAA,cAAA,kBACAA,EAAA,cAAA,mBACAA,EAAA,aAAA,iBACAA,EAAA,cAAA,mBAGAA,EAAA,UAAA,aACAA,EAAA,SAAA,YAEAA,EAAA,KAAA,QACAA,EAAA,cAAA,iBACA,CApJD,CAAKA,IAAAA,EAoJJ,CAAA,IAGD,MAAM2N,EAAK3N,EAEE4N,EAAa3c,OAAOiX,OAAOlI,GAC3B6N,EAAaD,EAAW5b,OAAQgR,GAAM,SAAS8K,KAAK9K,IACpD+K,GAAgBH,EAAW5b,OAAQgR,GAAM,UAAU8K,KAAK9K,IACxDgL,GAAiBJ,EAAW5b,OAAQgR,GAAM,WAAW8K,KAAK9K,IAC1DiL,GAAiBL,EAAW5b,OAAQgR,GAAM,YAAY8K,KAAK9K,IAC3DkL,GAAiBN,EAAW5b,OAAQgR,GAAM,UAAU8K,KAAK9K,IACzDmL,GAAeP,EAAW5b,OAAQgR,GAAM,MAAM8K,KAAK9K,IACnDoL,GAAmBR,EAAW5b,OAAQgR,GAAM,eAAe8K,KAAK9K,IAChEqL,GAAiBT,EAAW5b,OAAQgR,GAAM,aAAa8K,KAAK9K,IAC5DsL,GAAqB,CAACX,EAAGtZ,WAAYsZ,EAAGrZ,WAAYqZ,EAAGpZ,YACvDga,GAA4BX,EAAW5b,OAAQgR,GAAM,oBAAoB8K,KAAK9K,IAC9EwL,GAAaZ,EAAW5b,OAAQgR,GAAM,SAAS8K,KAAK9K,IACpDyL,GAAab,EAAW5b,OAAQgR,GAAM,SAAS8K,KAAK9K,IACpD0L,GAAad,EAAW5b,OAAQgR,GAAM,SAAS8K,KAAK9K,IACpD2L,GAAgBf,EAAW5b,OAAQgR,GAAM,UAAU8K,KAAK9K,IACxD4L,GAAehB,EAAW5b,OAAQgR,GAAM,WAAW8K,KAAK9K,IACxD6L,GAAcjB,EAAW5b,OAAQgR,GAAM,SAAS8K,KAAK9K,IACrD8L,GAAY,CAACnB,EAAGhV,IAAKgV,EAAGoB,QACxBC,GAAY,CAACrB,EAAGsB,UAAWtB,EAAGuB,QAASvB,EAAGwB,SAAUxB,EAAGyB,QACvDC,GAAazB,EAAW5b,OAAQgR,GAAM,QAAQ8K,KAAK9K,IACnDsM,GAAc1B,EAAW5b,OAAQgR,GAAM,SAAS8K,KAAK9K,IAErDuM,GAAmB,IAC5BpB,MACAQ,MACAW,MACAT,MACAG,GAEHrB,EAAGtU,cACHsU,EAAGrU,mBACHqU,EAAGpU,eACHoU,EAAGnU,eACHmU,EAAG7W,oBACH6W,EAAGlU,WACHkU,EAAGjU,YACHiU,EAAG7T,YACH6T,EAAG5T,cACH4T,EAAG3T,cACH2T,EAAG1T,aACH0T,EAAGzT,eAGSsV,GAAqB,IAAIX,IAEzBY,GAAc,IACvB5B,KACAE,MACAI,MACAC,GACHT,EAAGtZ,WACHsZ,EAAGrZ,WACHqZ,EAAGpZ,cACAia,MACAG,MACAC,MACAC,MACAC,IAGEY,GAAgB,CAAA,EACtB7B,EAAW/c,QAASkS,GAAO0M,GAAc1M,GAAK,GAC9CiL,GAAend,QAASkS,GAAO0M,GAAc1M,GAAK,GAClDoL,GAAiBtd,QAASkS,GAAO0M,GAAc1M,GAAK,IACpDqL,GAAevd,QAASkS,GAAO0M,GAAc1M,GAAK,IAClDwL,GAAW1d,QAASkS,GAAO0M,GAAc1M,GAAK,IAC9C8L,GAAUhe,QAASkS,GAAO0M,GAAc1M,GAAK,IAE7C,MAAM2M,GAAgB,CAAA,EACtB3B,GAAeld,QAASkS,GAAO2M,GAAc3M,GAAK,GAClD0L,GAAW5d,QAASkS,GAAO2M,GAAc3M,GAAK,GAE9C,MAAM4M,MAgBL,WAAAhe,CAAYJ,GACXP,OAAOM,OAAOE,KAAMD,EACpB,CAED,UAAIqe,GACH,OAAOpe,KAAK0O,KAAK8D,MAAM,KAAKyE,UAAU,EACtC,CAED,eAAIoH,GACH,OAAOzT,OAAOwE,SAASpP,KAAKgN,WAC5B,CAED,cAAIsR,GACH,OAAOxB,GAA0Btc,SAASR,KAAK0O,OAAS1O,KAAK0O,OAASH,EAAU3L,UAChF,CAED,eAAI2b,GACH,OACCnC,EAAW5b,SAASR,KAAK0O,OAAS4N,GAAc9b,SAASR,KAAK0O,OAAS+N,GAAejc,SAASR,KAAK0O,OAASiO,GAAiBnc,SAASR,KAAK0O,KAE7I,CAED,eAAI8P,GACH,OAAO9B,GAAalc,SAASR,KAAK0O,OAASwO,GAAc1c,SAASR,KAAK0O,OAASyO,GAAa3c,SAASR,KAAK0O,OAAS0O,GAAY5c,SAASR,KAAK0O,KAC9I,CAED,YAAI+P,GACH,OAAQze,KAAK0O,MACZ,KAAKwN,EAAGtZ,WACP,OAAO,EAER,KAAKsZ,EAAGwC,gBACR,KAAKxC,EAAGyC,gBACP,OAAO,EAER,KAAKzC,EAAG0C,gBACR,KAAK1C,EAAG2C,gBACP,OAAO,EAER,KAAK3C,EAAG4C,MACP,OAAO,EAER,KAAK5C,EAAG6C,MACP,OAAO,EAER,KAAK7C,EAAG8C,MACP,OAAO,EAER,KAAK9C,EAAG+C,MACP,OAAO,EAER,KAAK/C,EAAGgD,MACP,OAAO,EAER,KAAKhD,EAAGiD,MACP,OAAO,EAER,KAAKjD,EAAG1V,OACP,OAAQ,EAET,KAAK0V,EAAGlW,MACP,OAAO,EAER,KAAKkW,EAAGjW,MACP,OAAO,EAER,KAAKiW,EAAGhW,MACP,OAAO,EAER,KAAKgW,EAAG/V,MACP,OAAO,EAER,KAAK+V,EAAG9V,MACP,OAAO,EAER,KAAK8V,EAAG7V,MACP,OAAO,EAER,KAAK6V,EAAG5V,MACP,OAAO,EAOT,OAAO,IACP,CAED,QAAI8Y,GACH,OAAQpf,KAAK0O,MACZ,KAAKwN,EAAGhV,IACP,OAAO,EAER,KAAKgV,EAAGoB,OACP,OAAO,EAGT,OAAO,IACP,CAED,aAAI+B,GACH,OAAQrf,KAAK0O,MACZ,KAAKwN,EAAGwC,gBACR,KAAKxC,EAAG0C,gBACP,MAAO,IAER,KAAK1C,EAAGyC,gBACR,KAAKzC,EAAG2C,gBACP,MAAO,IAGT,OAAO,IACP,CAED,SAAIS,GACH,OAAQtf,KAAK0O,MACZ,KAAKwN,EAAGtZ,WACP,OAAOD,EAAgBC,WAExB,KAAKsZ,EAAGwC,gBACR,KAAKxC,EAAGyC,gBACP,OAAOhc,EAAgBE,WAExB,KAAKqZ,EAAG0C,gBACR,KAAK1C,EAAG2C,gBACP,OAAOlc,EAAgBG,WAEzB,CAED,QAAIyc,GACH,OAAQvf,KAAK0O,MACZ,KAAKwN,EAAGtZ,WACP,OAAO5C,KAAKgD,EAAIhD,KAAKsf,MAAQ,EAE9B,KAAKpD,EAAGwC,gBACR,KAAKxC,EAAG0C,gBACP,OAAO5e,KAAKgD,EAAIhD,KAAKsf,MAEtB,KAAKpD,EAAGyC,gBACR,KAAKzC,EAAG2C,gBACP,OAAO7e,KAAKgD,EAGd,OAAOhD,KAAKgD,CACZ,CAED,SAAIwc,GACH,OAAQxf,KAAK0O,MACZ,KAAKwN,EAAGtZ,WACP,OAAO5C,KAAKgD,EAAIhD,KAAKsf,MAAQ,EAE9B,KAAKpD,EAAGwC,gBACR,KAAKxC,EAAG0C,gBACP,OAAO5e,KAAKgD,EAEb,KAAKkZ,EAAGyC,gBACR,KAAKzC,EAAG2C,gBACP,OAAO7e,KAAKgD,EAAIhD,KAAKsf,MAGvB,OAAOtf,KAAKgD,CACZ,CAED,gBAAIyc,GACH,OAAKzf,KAAKwW,OAASxW,KAAKwW,MAAQ,EAAU,GAEnCvX,MAAM+J,KAAKsE,MAAMtE,KAAK8S,KAAK9b,KAAKwW,QAAU,GAC/C9G,KAAK,MACL1D,OAAO,CAAC0T,EAASnhB,EAAG6C,IAAOpB,KAAKwW,MAAS,GAAKpV,EAAK,CAACA,EAAI,KAAMse,GAAWA,EAAU,GACrF,EAzLMvB,MAASzd,UAAG,QA4LpB,MAAMif,kBAAkBxB,MAOvB,WAAAhe,CAAYJ,GACXqa,MAAMra,GACNP,OAAOM,OAAOE,KAAMD,EACpB,CAED,SAAIuf,GACH,OAAOtf,KAAK4f,MACZ,CAED,SAAIN,CAAM9gB,GACTwB,KAAK4f,OAASphB,CACd,EE7aF,MAAMqhB,GAAiB,KAGvB,IAAKC,GAMAC,GAQAC,GAMAC,GAMAC,GAQAC,IAlCL,SAAKL,GACJA,EAAA,GAAA,IACAA,EAAA,KAAA,IACAA,EAAA,OAAA,GACA,CAJD,CAAKA,KAAAA,GAIJ,CAAA,IAED,SAAKC,GACJA,EAAA,MAAA,QACAA,EAAA,WAAA,aACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eACAA,EAAA,aAAA,cACA,CAND,CAAKA,KAAAA,GAMJ,CAAA,IAED,SAAKC,GACJA,EAAA,KAAA,OACAA,EAAA,MAAA,QACAA,EAAA,SAAA,UACA,CAJD,CAAKA,KAAAA,GAIJ,CAAA,IAED,SAAKC,GACJA,EAAA,QAAA,UACAA,EAAA,QAAA,UACAA,EAAA,QAAA,SACA,CAJD,CAAKA,KAAAA,GAIJ,CAAA,IAED,SAAKC,GACJA,EAAA,OAAA,SACAA,EAAA,WAAA,cACAA,EAAA,WAAA,cACAA,EAAA,OAAA,SACAA,EAAA,MAAA,OACA,CAND,CAAKA,KAAAA,GAMJ,CAAA,IAED,SAAKC,GACJA,EAAA,OAAA,SACAA,EAAA,QAAA,UACAA,EAAA,YAAA,cACAA,EAAA,kBAAA,oBACAA,EAAA,UAAA,WACA,CAND,CAAKA,KAAAA,GAMJ,CAAA,IAiBD,MAAMC,aAAavgB,aAenB,MAAMwgB,kBAAkBD,KAgDvB,YAAOE,EAAM5J,KAAEA,EAAI1D,SAAEA,IACpB,MAAMuN,EAAO,IAAIF,UAAU,CAC1BG,KAAM,IACN9J,OACA+J,YAAa,KAId,OAFAF,EAAKvN,SAAWhK,KAAKC,MAAM+J,GAEpBuN,CACP,CAED,WAAApgB,CAAYJ,GACXqa,QACAA,MAAMta,OAAOC,GAEbP,OAAOM,OAAOE,KAAMD,GAEhB6K,OAAOwE,SAASrP,EAAKwf,OAAS3U,OAAOwE,SAASrP,EAAKyf,SAAQxf,KAAKgD,GAAKhD,KAAKuf,KAAOvf,KAAKwf,OAAS,GAC9F5U,OAAOwE,SAASpP,KAAK0gB,UAAS1gB,KAAK0gB,OAAS1gB,KAAKgD,EAEtD,CAED,eAAI2d,GACH,OAAO3gB,KAAK4a,MAAQ5a,KAAK0W,KAAO1W,KAAKgT,SAAWhT,KAAK0W,IACrD,CAED,gBAAIkK,GACH,OAAOf,GAAiB,IAAM7f,KAAKye,UAAY,EAAI,IAAMze,KAAKof,KAC9D,CAED,YAAIpM,GACH,IAAIxU,EAAQwB,KAAK4gB,aAIjB,OAHI5gB,KAAK8B,aAAYtD,GAASwB,KAAK8B,WAAWmJ,UAAYjL,KAAK8B,WAAWoJ,aACtElL,KAAK6W,WAAUrY,GAASwB,KAAK6W,SAAS5L,UAAYjL,KAAK6W,SAAS3L,aAE7DlL,KAAK4a,MAAQpc,EAAQ,EAAIA,CAChC,CAED,YAAIwU,CAASxU,GACZsM,QAAQmD,OAAOrD,OAAOwE,SAAS5Q,GAAQ,0BAA2BA,GAElE,MAAMqiB,EAAUpW,EAAIjM,EAnKHqhB,KAoKXpB,EAAWzV,KAAK8S,KApKL+D,IAoKuBgB,GAClC/e,EAAaqJ,EAAgB3M,EAAQ,GAAKigB,EAAUoB,IAE1D7f,KAAKye,SAAWA,EAChBze,KAAKof,KAAO,EAERtd,EAAWmJ,YAAcnJ,EAAWoJ,YAAalL,KAAK8B,WAAaA,EAClE9B,KAAK8B,gBAAagf,CACvB,CAED,SAAItM,GACH,OAAOxU,KAAK0W,IACZ,CAED,SAAIgB,GACH,OAAK1X,KAAK6W,SAEH,GAAG7W,KAAK6W,SAAS5L,aAAajL,KAAK6W,SAAS3L,cAFxB,IAG3B,CAED,mBAAI6V,GACH,MAAqB,MAAd/gB,KAAKwgB,IACZ,CAED,QAAIQ,GACH,OAAOhhB,KAAKihB,IAAMjhB,KAAKihB,IAAIje,EAAIhD,KAAKgD,CACpC,CAED,QAAIke,GACH,OAAOlhB,KAAKihB,IAAMjhB,KAAKihB,IAAI/d,EAAIlD,KAAKmhB,GAAKnhB,KAAKmhB,GAAG,GAAK,CACtD,CAED,kBAAIC,GACH,OAAOphB,KAAKqhB,cAAgBpB,GAAYqB,OACxC,CAED,cAAIC,GACH,OAAOvhB,KAAKwhB,QAAQ3U,IAAK4U,GAjIP,WAiI8BA,EAAMrU,KAAO,KAAO,IAAIiF,KAAK,GAC7E,CAED,cAAIqP,GACH,QAAS1hB,KAAK4a,OAAS5a,KAAKohB,cAC5B,EAGF,IAAKO,GAtIGtB,UAAS3f,UAAG,YAsIpB,SAAKihB,GACJA,EAAAA,EAAA,KAAA,GAAA,OACAA,EAAAA,EAAA,OAAA,GAAA,SACAA,EAAAA,EAAA,IAAA,GAAA,MACAA,EAAAA,EAAA,YAAA,GAAA,cACAA,EAAAA,EAAA,eAAA,GAAA,iBACAA,EAAAA,EAAA,eAAA,GAAA,gBACA,CAPD,CAAKA,KAAAA,GAOJ,CAAA,IAED,MAAMC,sBAAsBxB,KAQ3B,WAAAjgB,CAAYJ,GACXqa,QAEA5a,OAAOM,OAAOE,KAAMD,EACpB,CAED,QAAI2O,GACH,OAAImT,EAAiBrhB,SAASR,KAAK8hB,WAAmBH,GAAYI,KAC9D,SAAS1F,KAAKrc,KAAK8hB,WAAmBH,GAAYK,OAClD,eAAe3F,KAAKrc,KAAK8hB,WAAmBH,GAAYM,IACxDC,GAAqB1hB,SAASR,KAAK8hB,WAAmBH,GAAYQ,YAClEC,GAAqB5hB,SAASR,KAAK8hB,WAAmBH,GAAYU,eAClEC,GAAqB9hB,SAASR,KAAK8hB,WAAmBH,GAAYY,eAE/D,IACP,CAED,cAAIC,GACH,MAAO,CAACb,GAAYQ,YAAaR,GAAYI,KAAMJ,GAAYK,QAAQxhB,SAASR,KAAK0O,KACrF,CAED,SAAI8F,GACH,OAAOxU,KAAK0W,KAAO,EACnB,CAED,QAAI+L,GACH,OAAQziB,KAAK8hB,WACZ,KAAKvT,EAAUxH,MACd,OAAQ/G,KAAKkD,EAAI,EAElB,KAAKqL,EAAUvH,MACd,OAAiB,EAAThH,KAAKkD,EAEd,KAAKqL,EAAUtH,MACd,OAAQjH,KAAKkD,EAGf,OAAO,IACP,CAED,SAAImK,GACH,OAAQrN,KAAK8hB,WACZ,KAAKvT,EAAUpH,WACf,KAAKoH,EAAUmU,WACd,OAAO,EAER,KAAKnU,EAAUnH,SACf,KAAKmH,EAAUoU,SACd,OAAO,EAER,KAAKpU,EAAUjH,QACf,KAAKiH,EAAUqU,QACd,OAAQ,EAET,KAAKrU,EAAUlH,eACd,OAAO,EAER,KAAKkH,EAAUhH,YACd,OAAQ,EAGV,OAAO,IACP,CAED,eAAIsb,GACH,OAAQ7iB,KAAK8hB,WACZ,KAAKvT,EAAUuU,eACd,OAAQ,EAET,KAAKvU,EAAU5G,aACd,OAAO,EAER,KAAK4G,EAAUwU,eACd,OAAO,EAGT,OAAO,IACP,CAED,UAAIC,GACH,OAAQhjB,KAAK8hB,WACZ,KAAKvT,EAAUjJ,YACd,OAAO,EACR,KAAKiJ,EAAUhJ,WACd,OAAO,EACR,KAAKgJ,EAAU/I,WACd,OAAO,EACR,KAAK+I,EAAU9I,aACd,OAAO,EACR,KAAK8I,EAAU7I,YACd,OAAO,EACR,KAAK6I,EAAU5I,YACd,OAAO,EACR,KAAK4I,EAAU3I,WACd,OAAO,EACR,KAAK2I,EAAU1I,aACd,OAAO,EACR,KAAK0I,EAAUzI,aACd,OAAO,EACR,KAAKyI,EAAUxI,YACd,OAAO,EAGT,OAAO,IACP,EA/GM6b,cAASlhB,UAAG,gBAqHpB,MAAMuiB,iBAAiB7C,KAKtB,SAAI5L,GACH,OAAOxU,KAAK0W,KAAO,GACnB,EANMuM,SAASviB,UAAG,WASpB,MAAMwiB,GAAcjkB,MAAM,GACxByQ,KAAK,GACL7C,IAAI,CAACtO,EAAG6C,IAAMqI,OAAO4N,cAAc,OAAUjW,IAE/C,MAAM+hB,kBAAkBF,SAMvB,sBAAOG,CAAgBC,GACtB,GAAI,WAAWhH,KAAKgH,GAAO,CAC1B,MAAOC,EAAQ9kB,GAAS6kB,EAAK7Q,MAAM,KACnC,IAAIiM,EAAWyE,GAAYpT,UAAW7O,GAAMqiB,EAAO9iB,SAASS,IAC5Dwd,EAAWA,GAAY,EAAIA,EAAW,EACtC,IAAIzL,GAAY,GAAKyL,GAAU1gB,WAG/B,OAFIulB,EAAO9iB,SAAS,OAAMwS,GAAY,KAE/B,IAAImQ,UAAU,CAAEzM,KAAM,EAAG1D,WAAUuQ,MAAO/kB,GACjD,CAED,OAAO,IACP,CAED,WAAA2B,CAAYJ,GACXqa,QAEA5a,OAAOM,OAAOE,KAAMD,EACpB,CAED,SAAIyU,GACH,OAAOxU,KAAK0W,KAAO,GACnB,CAGD,qBAAI8M,GACH,MAAOjlB,EAAGklB,EAAKC,GAAO1jB,KAAKgT,SAAS2Q,MAAM,gBAG1C,OAFmB9D,GAAiBjV,OAAO6Y,IAASC,EAAM,IAAM,EAGhE,CAGD,OAAIE,GACH,MAAOZ,GAAUhjB,KAAKujB,MAAMI,MAAM,QAAU,CAAC,IAG7C,OAFc/Y,OAAOoY,GAELhjB,KAAKwjB,kBAAoB,EAAK3D,EAC9C,CAED,OAAAgE,CAAQC,EAAQ,CAAC,GAAI,MACpB,MAAMF,EAAM5jB,KAAK4jB,IAEjB,OAAOhZ,OAAOwE,SAASpP,KAAK4jB,MAAQA,GAAOE,EAAM,IAAMF,EAAME,EAAM,EACnE,EAjDMX,UAASziB,UAAG,YAoDpB,MAAMqjB,kBAAkBd,SAKvB,WAAA9iB,CAAYJ,GACXqa,QAEA5a,OAAOM,OAAOE,KAAMD,EACpB,EARMgkB,UAASrjB,UAAG,YAWpB,MAAMsjB,iBAAiBf,SAQtB,WAAA9iB,CAAYJ,GACXqa,QAEA5a,OAAOM,OAAOE,KAAMD,EACpB,EAXMikB,SAAStjB,UAAG,WAcpB,MAAMujB,kBAAkBhB,SAKvB,WAAA9iB,CAAYJ,GACXqa,QAEA5a,OAAOM,OAAOE,KAAMD,EACpB,EARMkkB,UAASvjB,UAAG,YAWpB,MAAMwjB,oBAAoBjB,SAMzB,WAAA9iB,CAAYJ,GACXqa,QAEA5a,OAAOM,OAAOE,KAAMD,EACpB,EATMmkB,YAASxjB,UAAG,cAYpB,MAAMyjB,sBAAsB/D,KAa3B,WAAAjgB,CAAYJ,GACXqa,QAEA5a,OAAOM,OAAOE,KAAMD,EACpB,CAED,SAAIyU,GACH,OAAOxU,KAAK0W,IACZ,CAED,YAAI1D,GACH,MAAMxU,EAAQqhB,GAAiB,IAAM7f,KAAKye,UAAY,EAAI,IAAMze,KAAKof,MACrE,OAAIpf,KAAK8B,WAAoBtD,EAAQwB,KAAK8B,WAAWmJ,UAAajL,KAAK8B,WAAWoJ,YAE3E1M,CACP,ECndF,IAAU4lB,GDwbFD,cAASzjB,UAAG,gBCxbpB,SAAU0jB,GAwCIA,EAAAC,oBAAuBC,IACnC,MAAMC,EAxCe,CAACD,IACtB,MAAMC,EAAO,IAAIxlB,IAmCjB,OAhCAulB,EAAQE,KAAKnlB,QAAS2V,IACrB,GAA0B,IAAtBA,EAAI7F,OAAO1N,OAAc,CAC5B,MAAMyV,EAAQlC,EAAI7F,OAAO,GACrB+H,EAAMsJ,MAA2B,IAAnBtJ,EAAMuH,WAAgBvH,EAAMsJ,KAAO,IACrD,IAGF8D,EAAQnV,OAAO9P,QAAS6X,IACvB,MAAMlU,EAAIgG,KAAKC,MAAqB,GAAfiO,EAAMwJ,QAAe,GAC1C,IAAIhhB,EAAM,EACiBA,EAAvBwX,EAAM6J,gBAAuB/X,KAAKgB,IAAIhH,KAAMuhB,EAAKjkB,QAGnD,IAAIikB,EAAKjkB,QAAQ+L,KAAMoY,IAEtB,MAAMpL,EAAKkL,EAAKvlB,IAAIylB,GACdlF,EAAOvW,KAAKgB,OAAOqP,EAAGxM,IAAKvN,GAAMA,EAAEigB,OACnCC,EAAQxW,KAAKkB,OAAOmP,EAAGxM,IAAKvN,GAAMA,EAAEkgB,QAI1C,OAFoBxW,KAAKgB,IAAIwV,EAAOtI,EAAMsI,OAASxW,KAAKkB,IAAIqV,EAAMrI,EAAMqI,MAEtB,IAA7B5c,EAAgBE,cAChCG,EAERkU,EAAMwN,OAAShlB,EAEf,MAAM2Z,EAAKkL,EAAKvlB,IAAIU,IAAQ,GAC5B6kB,EAAKnlB,IAAIM,EAAK2Z,GAEdA,EAAG9Z,KAAK2X,KAGFqN,GAIMI,CAAcL,GAE3B,IAAI5N,EAAO,EACX,MAAMkO,EAAK,IAAInY,IAAI,CAACiK,IACdmO,EAAc,IAAIN,EAAK9kB,WAAWoM,KAAK,EAAEiZ,IAAMC,KAAQD,EAAKC,GAClE,IAAK,MAAO/hB,EAAGmM,KAAW0V,EAGzB1V,EAAO9P,QAAS6X,IACXA,EAAMkE,iBACTlE,EAAMsJ,KAAOtJ,EAAMsJ,MAAQtJ,EAAMkE,eAAeP,YAAc,GAAM,IAAM3D,EAAMsJ,KAChFtJ,EAAM0D,MAAQ1D,EAAMkE,eAAeR,MAAQmF,GAAUiF,MAAQ,KAC7D9N,EAAMuH,SAAWhR,EAAOyJ,EAAMkE,eAAe6J,gBAC7C/N,EAAMkI,KAAO3R,EAAOyJ,EAAMkE,eAAe8J,YACrChO,EAAMkE,eAAe+J,WAAa,KAAKjO,EAAML,SAAW7L,EAAK,EAAG,KAGjEkM,EAAM6J,gBAAiB7J,EAAMR,KAAO,GAEnCQ,EAAMwK,aAAYhL,GAAQQ,EAAMlE,WAE/BkE,EAAMwK,YAAcxK,EAAMkE,gBAAkBxQ,OAAOC,UAAUqM,EAAMkE,eAAe1E,MAAOQ,EAAMR,KAAOQ,EAAMkE,eAAe1E,KAC3HQ,EAAMR,KAAOA,EAClBkO,EAAG3U,IAAIiH,EAAMR,KAAOQ,EAAMlE,aAI5B4R,EAAG3X,OAAOyJ,GAINkO,EAAG5T,OAAM0F,EAAO1N,KAAKgB,OAAO4a,IAG7Bha,OAAOC,UAAUyZ,EAAQrJ,mBAAoBqJ,EAAQtR,SAAWsR,EAAQrJ,kBACvEqJ,EAAQtR,SAAWhK,KAAKkB,OAAO0a,EAAI,IAG5BR,EAAAgB,qBAAwBd,IACpCA,EAAQhO,OAAS,GACjB,IAAK,MAAMtB,KAAOsP,EAAQE,KAAM,CAC/B,MAAMrV,EAAS6F,EAAI7F,OAAO5O,OACxB2W,KAAWA,EAAM0D,OAAU1D,EAAMkK,gBAAmBlK,EAAM6J,iBAAqB7J,EAAMkE,gBAAkBlE,EAAMkE,eAAeX,KAAO,KAE/H4K,EAAW,IAAI5Y,IAAI0C,GAEzB,KAAOkW,EAASrU,MAAM,CACrB,IAAI0F,EAAO,EAEX,MAAMF,EAAQ,GACR8O,EAAahmB,IAClBkX,EAAMjX,KAAKD,EAAEkK,IACRlK,EAAEoiB,aAAYhL,GAAQpX,EAAE0T,UAC7BqS,EAASpY,OAAO3N,IAGXimB,EAAKpW,EAAO9C,KAAM/M,GAAM+lB,EAAShV,IAAI/Q,IAO3C,IANIimB,EAAG5E,YAAc,IAEpBjK,EAAO6O,EAAG5E,aAEX2E,EAAUC,KAEG,CAEZ,MAAMjmB,EAAI6P,EAAO9C,KAAM/M,GAAM+lB,EAAShV,IAAI/Q,IAAMA,EAAEqhB,cAAgBjK,GAClE,IAAKpX,EAAG,MAERgmB,EAAUhmB,EACV,CAKDglB,EAAQhO,OAAO/W,KAAKiX,EACpB,CACD,EAEF,CAvHD,CAAU4N,KAAAA,GAuHT,CAAA,IAqGD,IAAUoB,GCjGLC,GAmLAC,IDlFL,SAAUF,GAIT,MAAMtX,EAAsB,QAStByX,EAAe,kBAIfC,EAAa,CAClB,CAAC,KAAM,MACP,CAAC,KAAM5F,GAAS6F,MAChB,CAAC7F,GAAS6F,KAAM7F,GAAS8F,UACzB,CAAC9F,GAAS6F,KAAM7F,GAAS+F,OACzB,CAAC/F,GAAS8F,SAAU9F,GAAS8F,UAC7B,CAAC9F,GAAS8F,SAAU9F,GAAS+F,OAC7B,CAAC/F,GAAS+F,MAAO,MACjB,CAAC/F,GAAS+F,MAAO/F,GAAS6F,OACzBhZ,IAAKmZ,GAAOA,EAAG3T,KAAK,MA6ChB4T,EAAkB,CAACC,EAAwBC,KAChD,IAAKD,EAAW/W,OAAO1N,OACtB,MAAO,CACN0N,OAAQ,GACRmH,OAAQ,GACRtD,SAAU,GAMZ,OAFe,IAAIoT,OAAsBF,EAAYC,GAEvCpN,SAGFyM,EAAAa,gBAAmB/B,IAC/B,MAAMgC,EAAYhC,EAAQnV,OACxB5O,OAAQ2W,IAAWA,EAAMwK,YACzB7U,IAAKqK,IAAW,CAChB1N,GAAI0N,EAAM1N,GACVoP,MAAO1B,EAAM0B,MACb5V,EAAGkU,EAAMlU,EACTujB,cAAerP,EAAMkE,gBAAkBxQ,OAAOwE,SAAS8H,EAAMkE,eAAe1E,MAAQQ,EAAMkE,eAAe1E,KAAOQ,EAAMlU,EACtHge,KAAM9J,EAAM8J,KACZ9d,EAAGgU,EAAMgK,KAAqB,IAAdhK,EAAM0B,MACtB5F,SAAWkE,EAAM0J,aAAe1S,EAAuB2R,GACvDpB,SAAUvH,EAAMuH,SAChBW,KAAMlI,EAAMkI,KACZoH,cAAetP,EAAMsP,cACrBC,KAAMvP,EAAMuP,KACZjG,KAAMtJ,EAAMsJ,KAEZkG,GAAmB,MAAfxP,EAAMsJ,KAAe,EAAmB,MAAftJ,EAAMsJ,MAAmC,IAAnBtJ,EAAMuH,SAAiBzV,KAAK2d,KAAKzP,EAAMlU,EAAIshB,EAAQsC,aAAe,EACrHC,MAAO3P,EAAMkE,gBAAiBlE,EAAMkE,eAAeyL,OAAa,EAChEzR,WAAY8B,EAAMkE,eAAiBlE,EAAMkE,eAAe+J,WAAa,QAEvE,IAAIxM,EAAoBzK,EAAsBoW,EAAQwC,cAAc7b,UAAaqZ,EAAQwC,cAAc5b,YACnGN,OAAOwE,SAASkV,EAAQrJ,qBAC3BtC,EAAmB3P,KAAKkB,IAAIyO,EAAkB7O,EAAYwa,EAAQrJ,kBAAmB/M,UAEtF,MAAM6Y,EAAgBzC,EAAQ0C,YAAYhb,OAAO,CAACa,EAAKoa,EAAQ7a,KAC9D6a,EAAO5nB,QAASuZ,GAAW/L,EAAI+L,GAASxM,GACjCS,GACL,CAAE,GAEC0F,EAAM,CAAC,KAAM+T,EAAUzZ,IAAKvN,GAAMA,EAAEkK,KACpC0d,EAAUZ,EAAUzZ,IAAKvN,IAAO,IAClCA,EACHkK,GAAI+I,EAAI7E,QAAQpO,EAAEkK,IAClBxG,EAAG1D,EAAE0D,EAAIshB,EAAQ6C,OACjBna,YAAa,EAAI1N,EAAEonB,KAAO,EAAIpnB,EAAEunB,OAChCzR,WAAYxK,OAAOwE,SAAS9P,EAAE8V,YAAc9V,EAAE8V,WAAapM,KAAK2d,MAAMrnB,EAAEmf,SAAoB,GAATnf,EAAE8f,MAAc,GACnG8G,WAAYa,EAAcznB,EAAEsZ,UAIvBxI,EAAUnR,MAAMsT,EAAI9Q,OAAS,GACjCiO,KAAK,MACL7C,IAAI,IAAM5N,MAAMsT,EAAI9Q,QAAQiO,KAAK,IAC7ByI,EAAUlZ,MAAMsT,EAAI9Q,QACxBiO,KAAK,MACL7C,IAAI,IAAM5N,MAAMsT,EAAI9Q,QAAQiO,KAAK,IAG7B0X,EAAM9c,GAAuB+c,UAAI/c,EA/HV,KA+HwC+c,EAAG,QA/H3C,IA+HoE/c,GAEjG,IAAK,MAAMsE,KAAMsY,EAAS,CACzB,IAAK,MAAMpY,KAAMoY,EAAS,CAIzB,GAHA/O,EAAQvJ,EAAGpF,IAAIsF,EAAGtF,IACjBoF,IAAOE,GAAMF,EAAG2X,eAAiBzX,EAAGyX,cAAgB,EAAIc,EAAG,SAAGzY,EAAG2X,cAAgBzX,EAAGyX,eAAiBZ,EArI/E,IAqIoH,EAEvI/W,EAAGsX,aAAepX,EAAGoX,WAAY9V,EAAQxB,EAAGpF,IAAIsF,EAAGtF,IAAM,OAExD,GAAIoF,EAAG5L,GAAK8L,EAAG9L,EAAGoN,EAAQxB,EAAGpF,IAAIsF,EAAGtF,IAAM,MAC1C,CACJ,MAAM8d,EAAate,KAAKue,IAxID,GAwIMve,KAAK4K,IAAIhF,EAAGgK,MAAQ9J,EAAG8J,QAC9C4O,EAAS5Y,EAAGgK,QAAU9J,EAAG8J,MAAQ5P,KAAKue,KAAKve,KAAK4K,IAAIhF,EAAG1L,EAAI4L,EAAG5L,GA1IlD,IA0IwE,EACpFoH,EAAKsE,EAAG5L,EAAI8L,EAAG9L,EACfykB,EAAM7Y,EAAGoS,KAAOlS,EAAGkS,KACzB5Q,EAAQxB,EAAGpF,IAAIsF,EAAGtF,KAAO8d,EAAaE,EAASxe,KAAKgB,IAAIod,EAAG9c,GAAK8c,EAAGK,OAAW,EAtI1D,EAuIpB,CAGD,MAAMC,GAAM,EAAI9Y,EAAG8X,KAAO,EAAI5X,EAAG4X,IACjCvO,EAAQvJ,EAAGpF,IAAIsF,EAAGtF,KAAOke,EACzBtX,EAAQxB,EAAGpF,IAAIsF,EAAGtF,KAAOke,EAErBvP,EAAQvJ,EAAGpF,IAAIsF,EAAGtF,IAAM,MAAM2O,EAAQvJ,EAAGpF,IAAIsF,EAAGtF,IAAM,GAGtDoF,EAAG4X,eAAiB1X,EAAG0X,eAAiB5X,EAAG4X,gBAAkB1X,EAAG0X,gBAAepW,EAAQxB,EAAGpF,IAAIsF,EAAGtF,KAtJ3E,IAyJrBoF,EAAG4R,MAAS1R,EAAG0R,MAASoF,EAAWplB,SAAS,CAACsO,EAAG2X,KAAM7X,EAAG6X,MAAMpU,KAAK,QAAOjC,EAAQxB,EAAGpF,IAAIsF,EAAGtF,KAxJ3E,GAyJvB,CAGD4G,EAAQmC,EAAI9Q,QAAQmN,EAAGpF,IAAM4d,EAAG9C,EAAQhF,MAAQ1Q,EAAG5L,KAAO,EAxJpC,EAyJtB,CAED,MAAO,CACNuP,MACApD,OAAQ+X,EACRvO,mBACAD,kBAAmB,EACnBI,KAAMwL,EAAQqD,SAASnI,MACvBpP,UACA+H,YAIWqN,EAAAoC,gBAAkBC,MAAOvD,GAA4BwD,SAAS,QAAS3B,MACnF,MAAM3N,EAAMgN,EAAAa,gBAAgB/B,IACtB/R,IAAEA,EAAGnC,QAAEA,EAAO+H,QAAEA,GAAYK,EAGlC,GAAI8L,EAAQlU,QAAS,CACpBtF,QAAQmD,OACPqW,EAAQlU,QAAQ3O,OAAS8Q,EAAIA,EAAI9Q,OAAS,IAAM6iB,EAAQlU,QAAQ,GAAG3O,OAAS8Q,EAAIA,EAAI9Q,OAAS,GAC7F,yBACA8Q,EAAI9Q,OACJ,GAAG6iB,EAAQlU,QAAQ3O,UAAU6iB,EAAQlU,QAAQ,GAAG3O,SAChD,GAAG2O,EAAQ3O,UAAU2O,EAAQ,GAAG3O,UAEjC,IAAK,IAAIL,EAAI,EAAGA,EAAImR,EAAI9Q,OAAS,EAAGL,IAAK,CACxC,MAAM2mB,EAAK3mB,EAAImR,EAAI9Q,OAAS8Q,EAAInR,GAAKkjB,EAAQlU,QAAQ3O,OAAS,EAC9D,IAAK,IAAIP,EAAI,EAAGA,EAAIqR,EAAI9Q,OAAQP,IAAKkP,EAAQhP,GAAGF,GAAKojB,EAAQlU,QAAQ2X,GAAIxV,EAAIrR,GAC7E,CACD,CACGojB,EAAQnM,SACXA,EAAQ9Y,QAAQ,CAAC2V,EAAK5T,IACrB4T,EAAI3V,QAAQ,CAACd,EAAG2C,KACf,MAAM8mB,EAAK1D,EAAQnM,QAAQ5F,EAAInR,IAAImR,EAAIrR,IACnC0J,OAAOwE,SAAS4Y,KAAK7P,EAAQ/W,GAAGF,GAAK8mB,MAKxCpd,OAAOwE,SAASkV,EAAQrJ,qBAC3BzC,EAAIE,kBAAoB1P,KAAK2d,MAA4E,EAAvE3d,KAAKwQ,IAAIxQ,KAAKgB,IAAI,EAAGsa,EAAQrJ,kBAAoBqJ,EAAQtR,aAExFmT,EAAQjU,QAAQiU,EAAQjU,OAAOnE,KAAK,cAAeuW,EAAQ2D,aAAc,MAAOzP,GAEpF,MAAMzD,EAAW+S,QAAeA,EAAOtP,EAAK2N,GAAWF,EAAgBzN,EAAK2N,GACtE+B,EAAenT,EAAS5F,OAAOtC,IAAKvN,IAAO,IAC7CA,EACHkK,GAAIgP,EAAIjG,IAAIjT,EAAEkK,OAEf0e,EAAa7oB,QAASC,IACrB,MAAM4X,EAAQoN,EAAQnV,OAAO9C,KAAMkZ,GAAOA,EAAG/b,KAAOlK,EAAEkK,IACtD0N,EAAMR,KAAO9L,OAAOwE,SAAS9P,EAAEoX,MAAQ1N,KAAKC,MAAO3J,EAAEoX,KAAOmJ,GAAkB3R,GAAuB,KACrGgJ,EAAMN,UAAYtX,EAAEsX,UACpBM,EAAML,SAAWvX,EAAEuX,WAGpByN,EAAQtR,SAAWhK,KAAKC,MAAO8L,EAAS/B,SAAW6M,GAAkB3R,GACrEoW,EAAQhO,OAASvB,EAASuB,OAAOzJ,IAAK2J,GAAUA,EAAM3J,IAAKrD,GAAOgP,EAAIjG,IAAI/I,KAE1E8a,EAAQ6D,aAAe,CACtBhP,KAAMpE,EAASoE,KACfiP,cAAerT,EAAS6C,QACxByQ,YAAatT,EAAS2C,OAIvB4M,EAAQnV,OAAO9P,QAAS6X,IACvB,MAAM/X,EAAS+oB,EAAa7b,KAAM/M,GAAMA,EAAEkK,KAAO0N,EAAM1N,IAClDrK,IACKyL,OAAOwE,SAASjQ,EAAOuX,OAAwB,MAAfQ,EAAMsJ,MAAmC,IAAnBtJ,EAAMuH,SAM5C,MAAfvH,EAAMsJ,OAChBtJ,EAAMR,KAAO,EACbQ,EAAMN,UAAY,EAClBM,EAAMlE,SAAWsR,EAAQtR,SACzBsR,EAAQhO,OAAO/W,KAAK,CAAC2X,EAAM1N,OAT3B0N,EAAMR,KAAO,EACbQ,EAAMN,UAAY,EAClBM,EAAMsJ,KAAO,IACbtJ,EAAMlE,SAAWsR,EAAQtR,SACzBsR,EAAQhO,OAAO/W,KAAK,CAAC2X,EAAM1N,UAUjBgc,EAAA8C,iCAAmCT,MAC/CvD,EACAiE,GACET,SAAS,QAAS3B,MAEpB,MAAMG,EAAYhC,EAAQnV,OACxB5O,OAAQ2W,IAAWA,EAAMwK,YACzB7U,IAAKqK,IACL,MAAMsR,EAAKD,EAAcpZ,OAAO9C,KAAM/M,GAAMA,GAAKA,EAAEkK,KAAO0N,EAAM1N,IAC1DiV,EAAW7T,OAAOwE,SAASoZ,GAAI/J,UAAY+J,EAAG/J,SAAWvH,EAAMuH,SAC/DW,EAAOxU,OAAOwE,SAASoZ,GAAIpJ,MAAQoJ,EAAGpJ,KAAOlI,EAAMkI,KACnDpM,EAAW9E,EAAsB,IAAMuQ,GAAY,EAAI,IAAMW,GAEnE,MAAO,CACN5V,GAAI0N,EAAM1N,GACVoP,MAAO1B,EAAM0B,MACb5V,EAAGkU,EAAMlU,EACTujB,cAAerP,EAAMkE,gBAAgB1E,KACrCxT,EAAGgU,EAAMgK,KAAqB,IAAdhK,EAAM0B,MACtB5F,WAEA0T,GAAmB,MAAfxP,EAAMsJ,KAAe,EAAmB,MAAftJ,EAAMsJ,MAAmC,IAAnBtJ,EAAMuH,SAAiBzV,KAAK2d,KAAKzP,EAAMlU,EAAIshB,EAAQsC,aAAe,EACrHC,MAAO3P,EAAMkE,gBAAiBlE,EAAMkE,eAAeyL,OAAa,EAChEzR,WAAY8B,EAAMkE,gBAAgB+J,YAAc,KAGnD,IAAIxM,EAAoBzK,EAAsBoW,EAAQwC,cAAc7b,UAAaqZ,EAAQwC,cAAc5b,YACnGN,OAAOwE,SAASkV,EAAQrJ,qBAC3BtC,EAAmB3P,KAAKkB,IAAIyO,EAAkB7O,EAAYwa,EAAQrJ,kBAAmB/M,UAEtF,MAAM6Y,EAAgBzC,EAAQ0C,YAAYhb,OAAO,CAACa,EAAKoa,EAAQ7a,KAC9D6a,EAAO5nB,QAASuZ,GAAW/L,EAAI+L,GAASxM,GACjCS,GACL,CAAE,GAEC0F,EAAM,CAAC,KAAM+T,EAAUzZ,IAAKvN,GAAMA,EAAEkK,KACpC0d,EAAUZ,EAAUzZ,IAAKvN,IAAO,IAClCA,EACHkK,GAAI+I,EAAI7E,QAAQpO,EAAEkK,IAClBxG,EAAG1D,EAAE0D,EAAIshB,EAAQ6C,OACjBna,YAAa,EAAI1N,EAAEonB,KAAO,EAAIpnB,EAAEunB,OAChCzR,WAAY9V,EAAE8V,WACd8Q,WAAYa,EAAcznB,EAAEsZ,UAIvBxI,EAAUnR,MAAMsT,EAAI9Q,OAAS,GACjCiO,KAAK,MACL7C,IAAI,IAAM5N,MAAMsT,EAAI9Q,QAAQiO,KAAK,IAC7ByI,EAAUlZ,MAAMsT,EAAI9Q,QACxBiO,KAAK,MACL7C,IAAI,IAAM5N,MAAMsT,EAAI9Q,QAAQiO,KAAK,IAEnC,IAAK,MAAMd,KAAMsY,EAChB,IAAK,MAAMpY,KAAMoY,EAAS,CACzB/O,EAAQvJ,EAAGpF,IAAIsF,EAAGtF,IACjBoF,IAAOE,GAAMF,EAAG2X,eAAiBzX,EAAGyX,cAAgB,EAAIc,EAAG,SAAGzY,EAAG2X,cAAgBzX,EAAGyX,eAAiBZ,EA/S/E,IA+SoH,EAG3I,MAAM+B,GAAM,EAAI9Y,EAAG8X,KAAO,EAAI5X,EAAG4X,IACjCvO,EAAQvJ,EAAGpF,IAAIsF,EAAGtF,KAAOke,EAErBvP,EAAQvJ,EAAGpF,IAAIsF,EAAGtF,IAAM,MAAM2O,EAAQvJ,EAAGpF,IAAIsF,EAAGtF,IAAM,EAC1D,CAIFsB,QAAQmD,OACPqW,EAAQlU,SAAWkU,EAAQlU,QAAQ3O,OAAS8Q,EAAIA,EAAI9Q,OAAS,IAAM6iB,EAAQlU,QAAQ,GAAG3O,OAAS8Q,EAAIA,EAAI9Q,OAAS,GAChH,yBACA8Q,EAAI9Q,OACJ,GAAG6iB,EAAQlU,QAAQ3O,UAAU6iB,EAAQlU,QAAQ,GAAG3O,SAChD,GAAG2O,EAAQ3O,UAAU2O,EAAQ,GAAG3O,UAEjC,IAAK,IAAIL,EAAI,EAAGA,EAAImR,EAAI9Q,OAAS,EAAGL,IAAK,CACxC,MAAM2mB,EAAK3mB,EAAImR,EAAI9Q,OAAS8Q,EAAInR,GAAKkjB,EAAQlU,QAAQ3O,OAAS,EAC9D,IAAK,IAAIP,EAAI,EAAGA,EAAIqR,EAAI9Q,OAAQP,IAAKkP,EAAQhP,GAAGF,GAAKojB,EAAQlU,QAAQ2X,GAAIxV,EAAIrR,GAC7E,CAED,IAAIwX,EAAoB,EACpB9N,OAAOwE,SAASkV,EAAQrJ,qBAAoBvC,EAAoB1P,KAAK2d,MAA4E,EAAvE3d,KAAKwQ,IAAIxQ,KAAKgB,IAAI,EAAGsa,EAAQrJ,kBAAoBqJ,EAAQtR,aAEvI,MAAMwF,EAAM,CACXjG,MACApD,OAAQ+X,EACRvO,mBACAD,oBACAI,KAAMwL,EAAQqD,SAASnI,MACvBpP,UACA+H,WAEKpD,EAAW+S,QAAeA,EAAOtP,EAAK2N,GAAWF,EAAgBzN,EAAK2N,GAEtEsC,GAAY1T,EAASoE,KAErBhK,EAAS4F,EAAS5F,OAAOtC,IAAI,EAAGrD,KAAIkN,OAAME,YAAWC,eAC1D,MAAM2R,EAAKD,EAAcpZ,OAAO9C,KAAM/M,GAAMA,GAAKA,EAAEkK,KAAOA,GACpDkf,EAAQ9d,OAAOwE,SAASsH,GAAQ1N,KAAKC,MAAOyN,EAAOmJ,GAAkB3R,GAAuBwI,EAElG,MAAO,CACNlN,KACAkN,KAAMgS,EACN9R,YACAC,WACA4H,SAAU+J,GAAI/J,SACdW,KAAMoJ,GAAIpJ,QAINpM,EAAWhK,KAAKC,MAAO8L,EAAS/B,SAAW6M,GAAkB3R,GAEnE,MAAO,CACNiB,SACAmH,OAAQvB,EAASuB,OACjBtD,WACAyV,YAGF,CAnXD,CAAUjD,KAAAA,GAmXT,CAAA,IAYD,MAAMmD,wBAAwB9oB,YAkD7B,oBAAO+oB,CAAczZ,EAAqB0Z,GACzC,MAEM1H,EAAK,GAEL9H,EAAKlK,EAAOtC,IAAKvN,IAAO,CAC7BkK,GAAIlK,EAAEkK,GACNoP,MAAOtZ,EAAEsZ,MACT5V,EAAG1D,EAAE0D,EAPgB,GAQrB8lB,GAAI,EACJC,GAAIF,EAAYvpB,EAAEsZ,OAAStZ,EAAE4hB,KAC7BA,KAAM5hB,EAAE4hB,KACR1M,MAAO,KAER6E,EAAGxN,KAAK,CAAC+C,EAAIE,IAAOF,EAAG5L,EAAI8L,EAAG9L,GAC9BqW,EAAG9P,MAAM,GAAGlK,QAAQ,CAACC,EAAG8B,KACvB,MAAMkJ,EAAKtB,KAAKgB,IAAIhB,KAAKC,MAAM3J,EAAE0D,EAAIqW,EAAGjY,GAAG4B,GAAI,GAC/C1D,EAAEwpB,GAAKzP,EAAGjY,GAAG0nB,GAAKxe,IAEnB+O,EAAGha,QAASC,IACXA,EAAEkV,MAAkB,IAAVlV,EAAEsZ,MAActZ,EAAEwpB,GAAc,IAATxpB,EAAE4hB,KAE9BC,EAAG3gB,SAASlB,EAAEypB,KAAK5H,EAAG5hB,KAAKD,EAAEypB,MAEnC1P,EAAGxN,KAAK,CAAC+C,EAAIE,IAAOF,EAAG4F,MAAQ1F,EAAG0F,OAClC2M,EAAGtV,KAAK,CAAC6O,EAAIC,IAAOD,EAAKC,GAEzB,IAAIqO,EAAK,EACT,MAAMC,EAAM9H,EAAGtU,IAAI,CAAC3J,EAAG9B,MACjBA,GAAK+f,EAAG/f,GAAK+f,EAAG/f,EAAI,GAAK,MAE5B4nB,EAFwCA,IAMrC7pB,EAASka,EAAGxM,IAAKvN,GAAM,IAAI+gB,UAAU,IAAKlR,EAAO9C,KAAM6c,GAAOA,EAAG1f,KAAOlK,EAAEkK,IAAK2f,KAAM7pB,EAAEwpB,GAAIM,KAAMH,EAAI9H,EAAGzT,QAAQpO,EAAEypB,QAGxH,OAFA5pB,EAAOE,QAAQ,CAACC,EAAG8B,IAAO9B,EAAEkK,GAAKpI,EAAI,GAE9BjC,CACP,CAED,WAAAgB,CAAYJ,GACXqa,QACAA,MAAMta,OAAOC,GAERC,KAAKqpB,wBAA2BrpB,KAAKspB,YAAWtpB,KAAKqpB,uBAAyBrpB,KAAKupB,gBAExFvpB,KAAKwpB,SAAWxpB,KAAKwpB,UAAY,CAAA,EAI7BxpB,KAAKspB,WAAatpB,KAAK2nB,UAAU3nB,KAAKypB,cAC1C,CAED,iBAAI3C,GACH,OAAO9mB,KAAKgc,QAAUhc,KAAKgc,OAAO,GAAG8K,aACrC,CAED,gBAAI4C,GACH,OAAO1pB,KAAKgc,QAAUhc,KAAKgc,OAAO,GAAG0N,YACrC,CAED,wBAAIC,GACH,OAAO3pB,KAAK4pB,SAASrpB,OAAOspB,SAAS,GAAGlZ,KAAM4P,GAAS,CAACoB,GAAYU,eAAgBV,GAAYY,gBAAgB/hB,SAAS+f,EAAK7R,MAC9H,CAED,mBAAIob,GACH,OAAO9pB,KAAKgc,QAAUhc,KAAKgc,OAAO,GAAG8N,eACrC,CAED,aAAIR,GACH,QAAStpB,KAAKsW,MACd,CAED,kBAAIyT,GACH,QAAK/pB,KAAKsW,QAEHtW,KAAKsW,OAAO0T,KAAK,GAAG9V,MAAO1K,GAAOoB,OAAOwE,SAASpP,KAAKmP,OAAO9C,KAAM/M,GAAMA,EAAEkK,KAAOA,IAAKkN,MAC/F,CAED,QAAI8N,GACH,OAAOxkB,KAAK4pB,SAAS/c,IAAI,CAAC+c,EAAUhX,KAG5B,CACNzD,OAHcnP,KAAKmP,OAAO5O,OAAQjB,GAAMA,EAAEsZ,QAAUhG,GAIpDgX,aAGF,CAED,eAAIhD,GACH,OAAO5mB,KAAKmP,OAAO1N,OAASuH,KAAKgB,OAAOhK,KAAKmP,OAAOtC,IAAKvN,GAAMA,EAAE0D,IAAMhD,KAAKmnB,MAC5E,CAED,UAAIA,GACH,OAAOnnB,KAAK2nB,SAASpI,IACrB,CAED,SAAID,GACH,OAAOtf,KAAK2nB,SAASnI,MAAQxf,KAAK2nB,SAASpI,IAC3C,CAED,WAAI0K,GACH,OAAOjqB,KAAKmP,OACVvC,OAAO,CAAC5M,KAAKkqB,WACb3pB,OAAOspB,SACP7d,OAAO,CAACa,EAAKqK,KACTtM,OAAOwE,SAAS8H,EAAMR,QACpB7J,EAAIwD,IAAI6G,EAAMR,OAAO7J,EAAIzN,IAAI8X,EAAMR,KAAM,IAE9C7J,EAAI7N,IAAIkY,EAAMR,MAAMnX,KAAK2X,IAGnBrK,GACL,IAAI9N,IACR,CAED,WAAIorB,GACH,MAAO,IAAInqB,KAAKiqB,QAAQxqB,WAAWuM,OAAO,CAACa,GAAM6J,EAAMvH,MAEtD,IADAA,EAASA,EAAO5O,OAAQjB,IAAOA,EAAEyhB,kBAAoBzhB,EAAEsb,QAC5CnZ,OAAQ,CAClB,MAAMuB,EAAIgG,KAAKgB,OAAOmF,EAAOtC,IAAKvN,GAAMA,EAAE0D,IAC1C6J,EAAI6J,GAAQ1T,CACZ,CAED,OAAO6J,GACL,CAAE,EACL,CAED,aAAIud,GACH,MAAMjb,EAASnP,KAAKmP,OAAO5O,OAAQ2W,GAAUtM,OAAOwE,SAAS8H,EAAMR,QAAUQ,EAAM6J,iBAGnF,OAFA5R,EAAOtD,KAAK,CAAC+C,EAAIE,IAAOF,EAAG5L,EAAI8L,EAAG9L,GAE3BmM,EAAO5F,MAAM,EAAG4F,EAAO1N,OAAS,GAAGoL,IAAI,CAAC+B,EAAIxN,KAClD,MAAM0N,EAAKK,EAAO/N,EAAI,GAEtB,OAAQ0N,EAAG4H,KAAO9H,EAAG8H,MAAQ1N,KAAKkB,IAAI4E,EAAG9L,EAAI4L,EAAG5L,EAAG,OAEpD,CAED,qBAAIqnB,GACH,MACMjR,EADSpZ,KAAKmP,OAAO5O,OAAQ2W,GAAUtM,OAAOwE,SAAS8H,EAAMR,QAAUQ,EAAM6J,kBAAoB7J,EAAM0D,OACzD5O,OAAO,CAACa,EAAKqK,KAChErK,EAAIqK,EAAM0B,OAAS/L,EAAIqK,EAAM0B,QAAU,GACvC/L,EAAIqK,EAAM0B,OAAOrZ,KAAK2X,GACfrK,GACL,CAAE,GAECyd,EAAQ9qB,OAAOiX,OAAO2C,GAASvM,IAAKwM,GACzCA,EACExN,KAAK,CAAC+C,EAAIE,IAAOF,EAAG5L,EAAI8L,EAAG9L,GAC3BuG,MAAM,EAAG8P,EAAG5X,OAAS,GACrBoL,IAAI,CAAC+B,EAAIxN,KACT,MAAM0N,EAAKuK,EAAGjY,EAAI,GAClB,OAAQ0N,EAAG4H,KAAO9H,EAAG8H,MAAQ1N,KAAKkB,IAAI4E,EAAG9L,EAAI4L,EAAG5L,EAAG,SAItD,MAAO,GAAG4J,UAAU0d,EACpB,CAED,qBAAIC,GACH,MACMC,EADSxqB,KAAKmP,OAAO5O,OAAQ2W,GAAUtM,OAAOwE,SAAS8H,EAAMR,QAAUQ,EAAM6J,iBAC/B/U,OAAO,CAACa,EAAKqK,KAChE,MAAMuT,EAAazqB,KAAKgnB,YAAYlX,UAAW1D,GAAUA,EAAM5L,SAAS0W,EAAM0B,QAG9E,OAFA/L,EAAI4d,GAAc5d,EAAI4d,IAAe,GACrC5d,EAAI4d,GAAYlrB,KAAK2X,GACdrK,GACL,CAAE,GAECyd,EAAQ9qB,OAAOiX,OAAO+T,GAAS3d,IAAKwM,GACzCA,EACExN,KAAK,CAAC+C,EAAIE,IAAOF,EAAG5L,EAAI8L,EAAG9L,GAC3BuG,MAAM,EAAG8P,EAAG5X,OAAS,GACrBoL,IAAI,CAAC+B,EAAIxN,KACT,MAAM0N,EAAKuK,EAAGjY,EAAI,GAClB,OAAQ0N,EAAG4H,KAAO9H,EAAG8H,MAAQ1N,KAAKkB,IAAI4E,EAAG9L,EAAI4L,EAAG5L,EAAG,SAItD,MAAO,GAAG4J,UAAU0d,EACpB,CAED,aAAIpQ,GACH,IAAKla,KAAKgT,WAAahT,KAAKgnB,YAAa,OAEzC,MAGMwD,EAHSxqB,KAAKmP,OAAO5O,OACzB2W,GAAUtM,OAAOwE,SAAS8H,EAAMR,QAAUQ,EAAM6J,kBAAoB7J,EAAM0D,QAAU1D,EAAMkK,kBAAoBlK,EAAMsJ,MAA2B,IAAnBtJ,EAAMuH,WAEhFzS,OAAO,CAACa,EAAKqK,KAChE,MAAMuT,EAAazqB,KAAKgnB,YAAYlX,UAAW1D,GAAUA,EAAM5L,SAAS0W,EAAM0B,QAG9E,OAFA/L,EAAI4d,GAAc5d,EAAI4d,IAAe,GACrC5d,EAAI4d,GAAYlrB,KAAK2X,GACdrK,GACL,CAAE,GAEC6d,EAASlrB,OAAOiX,OAAO+T,GAAS3d,IAAKwM,IAC1C,MAAMQ,EAAe,IAAIR,GAAIxN,KAAK,CAAC+C,EAAIE,IAAOF,EAAG8R,OAAS5R,EAAG4R,QACvD7H,EAAQ7Y,KAAK2nB,SAASnI,MAAQ3F,EAAa,GAAG7W,EAC9C8W,EAAaD,EAAatQ,MAAM,GAAGsD,IAAI,CAACiC,EAAI1N,KACjD,MAAMwN,EAAKiL,EAAazY,GAClBkJ,EAAKwE,EAAG4R,OAAS9R,EAAG8R,OACpB3G,EAAKjL,EAAG4H,KAAQ9H,EAAG8H,KAEzB,IAAKqD,EAAI,OAAOzP,EAAKuO,EAIrB,OAAgB,EAFH7P,KAAKgR,MAAMD,EAAK/Z,KAAKgT,SAAU1I,EAAKuO,GAE5B7P,KAAKiR,GAAK,IAAM,IAGtC,OAAOjR,KAAKkB,IAAI,KAAM4P,KAGvB,OAAO9Q,KAAKkB,IAAI,KAAMwgB,EACtB,CAED,YAAIja,GACH,OAAOzQ,KAAKmP,OAAOnD,OAAO,CAACa,EAAKqK,KAC/BrK,EAAIqK,EAAM1N,IAAM0N,EACTrK,GACL,CAAE,EACL,CAED,SAAI8d,GACH,OAAQ3qB,KAAKmP,QAAQ1N,SAAWzB,KAAKsW,QAAQ7U,MAC7C,CAED,eAAImpB,GACH,MAAMC,EAAiB7qB,KAAKsW,OAAO0T,KAAK,GAClCvZ,EAAWzQ,KAAKyQ,SACtB,OACCzQ,KAAKspB,WACLuB,EAAela,KAAMnH,IACpB,MAAM0N,EAAQzG,EAASjH,GACvB,OAAQ0N,EAAMwK,aAAe9W,OAAOwE,SAAS8H,EAAMR,QAAUQ,EAAM6J,iBAGrE,CAED,SAAI+J,GAgBH,MAAO,CAfS,GAAG9qB,KAAK8mB,cAAc7b,aAAajL,KAAK8mB,cAAc5b,iBACjDlL,KAAKmP,OAAOtC,IAAKvN,GACrC,CACCA,EAAEsZ,MACFtZ,EAAE6pB,KACFngB,KAAKC,MAAM3J,EAAE2hB,IAAM3hB,EAAE2hB,IAAI/d,EAAI5D,EAAE6hB,KAAK,IAAM,GAC1C7hB,EAAEyhB,gBAAkB,EAAIzhB,EAAEmf,SAC1Bnf,EAAEyhB,gBAAkB,EAAIzhB,EAAE8f,KAC1B9f,EAAEkhB,KAAO,IAAM,GACflhB,EAAEsb,OAAS,GACXtb,EAAEknB,cACFlnB,EAAEmnB,MAAQ,IACTpU,KAAK,OAG0BA,KAAK,KACvC,CAED,kBAAIkX,GACH,OAAOlgB,EAAI,QAACrJ,KAAK8qB,MACjB,CAGD,mBAAIC,GACH,OAAO/qB,KAAKqpB,wBAA0BrpB,KAAKupB,cAC3C,CAED,oBAAIyB,GACH,OAAO/rB,MAAMnB,KAAK,IAAI2O,IAAI,CAACzM,KAAKqpB,uBAAwBrpB,KAAKupB,gBAAgBhpB,OAAOspB,UACpF,CAED,gBAAIoB,GACH,IAAKjrB,KAAKspB,YAActpB,KAAKsW,SAAWtW,KAAKsW,OAAO7U,OAAQ,OAAO,KAEnE,MAAMypB,EAAUlrB,KAAKqqB,kBAAkB1Z,KAAMwa,GAASA,EAAO,GAIvDhK,EAFanhB,KAAKmP,OAAO5O,OAAQ2W,IAAWA,EAAMwK,aAAexK,EAAMsJ,MAG3E3T,IAAKqK,GAAUA,EAAMiK,IACrB6I,KAAK,GACLnd,IAAK3J,GAAM,IAAS,GAAJA,GACZkoB,EAAMnsB,MAAMnB,KAAK,IAAI2O,IAAI0U,IAC3BnhB,KAAK0pB,cAAc0B,EAAI7rB,KAAK,IAAIS,KAAK0pB,gBAEzC,MAAMpT,EAAStW,KAAKsW,OAClBzJ,IAAK0F,GAAQA,EAAI1F,IAAKrD,GAAOxJ,KAAKmP,OAAO9C,KAAM/M,GAAMA,EAAEkK,KAAOA,IAAKjJ,OAAQ2W,IAAWA,EAAMwK,aAAexK,EAAMsJ,OACjHjgB,OAAQiW,GAAUA,EAAM/U,QAEpB4pB,EAAWH,EAAU,GAAK5U,EAAOzJ,IAAKwM,GAAOA,EAAGxM,IAAKvN,GAAMA,EAAEiiB,YAAYlP,KAAK,MAE9EiZ,EAASJ,EAAU,GAAK5U,EAAOzJ,IAAKwM,GAAOA,EAAGxM,IAAKvN,GAAMA,EAAEmf,UAAUpM,KAAK,KAGhF,OAFIrS,KAAK8mB,eAAewE,EAAO/rB,KAAK,IAAIS,KAAK8mB,cAAc7b,aAAajL,KAAK8mB,cAAc5b,eAEpF,CAACkgB,EAAKC,EAAUC,EACvB,CAED,WAAIC,GACH,GAAIvrB,KAAKwrB,SAAU,MAAO,aAE1B,MAAMC,EAAajsB,OAAOC,QAAQO,KAAKwpB,UAAU3d,KAAK,CAAC+C,EAAIE,IAAOA,EAAG,GAAKF,EAAG,IAC7E,OAAI6c,EAAW,IAAMA,EAAW,GAAG,IAAM,EAAUA,EAAW,GAAG,GAE1D,IACP,CAED,mBAAIC,GACH,IAAK9gB,OAAOwE,SAASpP,KAAKgT,UAAW,OAAO,EAE5C,MAAM2Y,EAAoBpgB,EAAYsU,GAAgB7f,KAAK8mB,eAE3D,OAAO9mB,KAAKgT,SAAW2Y,CACvB,CAED,YAAAlC,GACCzpB,KAAKkqB,SAAW,IAAI7J,UAAU,CAAE3J,KAAM1W,KAAKgT,SAAUhQ,EAAGhD,KAAK2nB,SAASnI,QAEtExf,KAAK4rB,eAn1BkB,CAACtH,IACzB,MAAMuH,EAAcvH,EAAQnV,OAAO5O,OAAQ2W,GAAUA,EAAM0D,OAC3D,IAAKiR,EAAYpqB,OAAQ,OAEzB,MACMqqB,EAAW,IADDxH,EAAQ2F,QACKxqB,WAAWuM,OAAO,CAAC+f,GAAOrV,EAAMvH,MAC5DA,EAAO9P,QAAS6X,IACf,IAAKA,EAAM0D,MAAO,CACjBmR,EAAK7U,EAAM0B,OAASmT,EAAK7U,EAAM0B,QAAU,GAEzC,MAAMoT,EAAWD,EAAK7U,EAAM0B,OAAOlC,GACnCqV,EAAK7U,EAAM0B,OAAOlC,IAASsV,GAAYA,EAAShpB,EAAIkU,EAAMlU,EAAIkU,EAAQ8U,CACtE,IAGKD,GACL,CAAwD,GAGrDE,EAAiBzsB,OAAOC,QAAQqsB,GAAU9f,OAAO,CAACa,GAAM+L,EAAOsT,MACpErf,EAAI+L,GAASpZ,OAAOC,QAAQysB,GAC1Brf,IAAI,EAAE0E,EAAG2F,MAAY,CAAEA,QAAOR,KAAM9L,OAAO2G,GAAI4a,SAAU,IAAKC,OAAQ,MACtEvgB,KAAK,CAACzB,EAAIC,IAAOD,EAAG8M,MAAMlU,EAAIqH,EAAG6M,MAAMlU,GACzC6J,EAAI+L,GAAOrZ,KAAK,CAAEmX,KAAM4N,EAAQtR,SAAUkE,MAAOoN,EAAQ4F,SAAUiC,QAAS,EAAGC,OAAQ,KAEvF,IAAI1V,EAAO,EAQX,OAPA7J,EAAI+L,GAAOvZ,QAASsoB,IACfA,EAASjR,KAAOA,IACnBiR,EAASwE,QAAUzV,EACnBA,EAAOiR,EAASjR,QAIX7J,GACL,CAAqC,GAGxCgf,EAAYxsB,QAAS6X,IACpB,MAAM0B,EAAQqT,EAAe/U,EAAM0B,OACnC,GAAIA,EAAO,CACV,MAAM+O,EAAW/O,EAAMvM,KAAM1K,GAAMA,EAAEuV,MAAMlU,EAAIkU,EAAMlU,GACjD2kB,GAAUA,EAASyE,OAAO7sB,KAAK2X,GACnCA,EAAMwN,OAASxN,EAAMlU,CAGrB,IAGFxD,OAAOiX,OAAOwV,GAAgB5sB,QAASuZ,GACtCA,EAAMvZ,QAASsoB,IACd,GAAIA,EAASyE,OAAO3qB,OAAQ,CAC3BkmB,EAASzQ,MAAMmV,SAAW1E,EAASyE,OAAOvf,IAAKvN,GAAMA,EAAEkK,IAEvD,MAAM8iB,EAAgB3E,EAASyE,OAAOpgB,OAAO,CAACuF,EAAGjS,IAAMiS,EAAIjS,EAAE0T,SAAU,GAEjEuZ,EADWvjB,KAAKgB,IAAIsiB,EAAe3E,EAASjR,KAAOiR,EAASwE,SAC1CG,EAExB,IAAI5V,EAAOiR,EAASjR,KACpB,IAAIiR,EAASyE,QAAQnV,UAAU5X,QAAS6X,IACvCA,EAAMR,KAAO1N,KAAKC,MAAMyN,EAAOQ,EAAMlE,SAAWuZ,GAChD7V,EAAOQ,EAAMR,MAEd,MAsxBF8V,CAAiBxsB,MAjxBO,CAACskB,IAC1B,MAAMmI,EAAWnI,EAAQnV,OAAO5O,OAAQ2W,GAAUA,EAAMkK,iBAAmBlK,EAAM0D,OAC3E8R,EAAWpI,EAAQnV,OAAO5O,OAAQ2W,GAAUA,EAAMmK,cAAgBpB,GAAY0M,UAAYzV,EAAM0D,OAEtG6R,EAASptB,QAASutB,IACjB,IAAIC,EAAaH,EAASnsB,OAAQ2W,GAAUA,EAAMuH,WAAamO,EAAQnO,UAAYvH,EAAMlU,EAAI4pB,EAAQ5pB,GAYrG,GAXK6pB,EAAWprB,SACforB,EAAavI,EAAQnV,OAAO5O,OAC1B2W,GACAtM,OAAOwE,SAAS8H,EAAMR,QACrBQ,EAAM0D,QACN1D,EAAMsJ,MACPtJ,EAAMuH,WAAamO,EAAQnO,UAC3BvH,EAAMkI,OAASwN,EAAQxN,MACvBlI,EAAMlU,EAAI4pB,EAAQ5pB,IAErB6pB,EAAWhhB,KAAK,CAAC6I,EAAIC,IAAOA,EAAG3R,EAAI0R,EAAG1R,GAClC6pB,EAAWprB,OAAQ,CACtB,MAAMqrB,EAAUD,EAAW,GAC3BC,EAAQC,UAAYH,EAAQpjB,GAC5B,MAAMwjB,EAAUhkB,KAAKkB,IAAI4iB,EAAQE,SAAW,EAAGJ,EAAQI,SAAW,GAClEF,EAAQE,QAAUA,EAClBJ,EAAQI,QAAUA,EAEbJ,EAAQlW,OAAMkW,EAAQlW,KAAOoW,EAAQpW,KAAOoW,EAAQ9Z,SAAW,GAEpE,MAAMia,EAAKP,EAAShf,QAAQof,GACxBG,GAAM,GAAGP,EAAS7Z,OAAOoa,EAAI,EACjC,KAsvBDC,CAAkBltB,MAClBA,KAAKmtB,mBACL,CAED,YAAAvB,GACC,MAAMzB,EAAUnqB,KAAKmqB,QACjBA,GACHnqB,KAAKmP,OAAO9P,QAAS6X,IACpB,MAAMlU,EAAImnB,EAAQjT,EAAMR,MACpB9L,OAAOwE,SAASpM,KAAIkU,EAAMwN,OAAS1hB,IAEzC,CAED,iBAAAmqB,GACC,IAAKntB,KAAKgnB,YAAa,OACvB,MAAM4C,EAAW5pB,KAAK4pB,SAASI,KAAK,GACpChqB,KAAKgnB,YAAYgD,KAAK,GAAG3qB,QAASyJ,IACjC,MAAMskB,EAAQ,IAAIptB,KAAKmP,OAAO5O,OAAQjB,GAAMA,EAAEsZ,QAAU9P,MAAgB8gB,EAASrpB,OAAQuM,GAAMA,EAAE8L,QAAU9P,IAC3GskB,EAAMvhB,KAAK,CAACwhB,EAAIC,IAAOA,EAAGtqB,EAAIqqB,EAAGrqB,GAEjC,IAAI0T,EAAO1W,KAAKgT,SAChBoa,EAAM/tB,QAASkhB,IACVA,aAAgBF,UACdE,EAAKQ,iBAAoBR,EAAKmB,aAAYhL,EAAO6J,EAAK7J,MACjD6J,aAAgBqB,gBAAerB,EAAK7J,KAAOA,MAGxD,CAED,UAAA6W,CAAWC,OAAuB1M,GACjC,OAAK9gB,KAAKspB,UAKH,CAENna,OAAQnP,KAAKmP,OAAOtC,IAAKvN,IACxB,MAAMiX,EAAK,CACV/M,GAAIlK,EAAEkK,GACNkN,KAAMpX,EAAEoX,KACRE,UAAWtX,EAAEsX,UACbC,SAAUvX,EAAEuX,UAGb,GAAI2W,EAAK,CACR,MAAMC,EAAWD,EAAIre,OAAO9C,KAAMmc,GAAOA,EAAGhf,KAAOlK,EAAEkK,IACjDikB,IACCnuB,EAAEmf,WAAagP,EAAShP,WAAUlI,EAAGkI,SAAWnf,EAAEmf,UAClDnf,EAAE8f,OAASqO,EAASrO,OAAM7I,EAAG6I,KAAO9f,EAAE8f,MACtC9f,EAAEsb,QAAU6S,EAAS7S,QAAOrE,EAAGqE,QAAUtb,EAAEsb,OAC3Ctb,EAAEmnB,OAASgH,EAAShH,OAAMlQ,EAAGkQ,KAAOnnB,EAAEmnB,MACtCnnB,EAAEyhB,kBAAoB0M,EAAS1M,kBAAiBxK,EAAGsE,YAAcvb,EAAEyhB,iBAExE,CAED,OAAOxK,IAERD,OAAQtW,KAAKsW,OACbtD,SAAUhT,KAAKgT,SACfyV,UAAWzoB,KAAKmoB,cAAchP,MA9BH,IAgC5B,CAED,aAAAuU,CAAc3Y,GACTA,EAAS+R,eACZ9mB,KAAKgc,OAAO3c,QAAS4c,IACpBA,EAAM6K,cAAgB/R,EAAS+R,cAC/B7K,EAAM6N,iBAAkB,IAI1B9pB,KAAKsW,OAASvB,EAASuB,OACvBtW,KAAKgT,SAAW+B,EAAS/B,SACzBhT,KAAKmP,OAAO9P,QAAS6X,IACpBA,EAAML,SAAW,KACjBK,EAAMR,KAAO,KACbQ,EAAMN,UAAY,KAElB,MAAML,EAAKxB,EAAS5F,QAAQ9C,KAAM/M,GAAMA,EAAEkK,KAAO0N,EAAM1N,IACnD+M,IACHW,EAAMR,KAAOH,EAAGG,KAChBQ,EAAML,SAAWN,EAAGM,SACpBK,EAAMN,UAAYL,EAAGK,UAEjBhM,OAAOwE,SAASmH,EAAGkI,YAAWvH,EAAMuH,SAAWlI,EAAGkI,UAClD7T,OAAOwE,SAASmH,EAAG6I,QAAOlI,EAAMkI,KAAO7I,EAAG6I,WAC9B0B,IAAZvK,EAAGkQ,OAAoBvP,EAAMuP,KAAOlQ,EAAGkQ,WAC1B3F,IAAbvK,EAAGqE,QAAqB1D,EAAM0D,MAAQrE,EAAGqE,MAAQmF,GAAUiF,WAAQlE,GACnEvK,EAAGsE,cAAa3D,EAAMsJ,KAAO,QAI/B5V,OAAOwE,SAAS2F,EAAS0T,YAAWzoB,KAAKmoB,aAAe,CAAEhP,MAAOpE,EAAS0T,WAE9EzoB,KAAKypB,cACL,CAED,iBAAAkE,GACC3tB,KAAKsW,OAAS,KACdtW,KAAKgT,SAAW,KAChBhT,KAAKmP,OAAO9P,QAAS6X,IACpBA,EAAMR,KAAO,KACbQ,EAAMN,UAAY,KAClBM,EAAML,SAAW,MAElB,CAED,YAAA+W,GACC5tB,KAAKgT,SAAW,EAChBhT,KAAKsW,OAAStW,KAAKwkB,KAAK3X,IAAKmI,GAAQA,EAAI7F,OAAOtC,IAAKvN,GAAMA,EAAEkK,KAC7DxJ,KAAKsW,OAAOjX,QAASkT,IACpB,IAAImE,EAAO,EACInE,EAAI1F,IAAKrD,GAAOxJ,KAAKmP,OAAO9C,KAAM/M,GAAMA,EAAEkK,KAAOA,IACzDnK,QAAQ,CAACC,EAAGsR,KAClBtR,EAAEsX,UAAYhG,EACdtR,EAAEoX,KAAOA,EAETA,GAAQpX,EAAE0T,WAGXhT,KAAKgT,SAAWhK,KAAKkB,IAAIlK,KAAKgT,SAAU0D,IAEzC,CAED,cAAAmX,GACCzJ,GAAaC,oBAAoBrkB,MACjCokB,GAAagB,qBAAqBplB,KAClC,CAED,uBAAM8tB,CAAkB3H,SACjBX,GAAeoC,gBAAgB5nB,KAAMmmB,EAC3C,CAGD,cAAM4H,EAASC,OAAEA,EAAS,cAAe7H,GAA+B,IACvE,OAAQ6H,GACP,IAAK,OACJhuB,KAAK4tB,eAEL,MACD,IAAK,YACL,IAAK,iBACE5tB,KAAK8tB,kBAAkB3H,GAE7B,MAED,QACCnmB,KAAK6tB,iBAGP7tB,KAAKypB,cACL,CAED,WAAAwE,GACC,OAAO,IAAIrS,aAAa,CACvBqM,aAAcjoB,KAAKioB,aACnBlM,UAAW/b,KAAK+b,UAChBE,MAAOjc,KAAKgc,OAAO,GAEnB7M,OAAQnP,KAAKmP,OACbya,SAAU5pB,KAAK4pB,SACfsE,MAAOluB,KAAKkuB,MACZ5X,OAAQtW,KAAKsW,QAEd,CAED,cAAA6X,GACC,MAAMC,EAAepuB,KAAKsW,QAAU,IAAI7J,IAAIzM,KAAKsW,OAAO0T,KAAK,IAE7D,OAAOhqB,KAAKgnB,YACVzmB,OAAQ8tB,GAAQA,EAAI5sB,QACpBoL,IAAKyhB,IACL,MAAMC,EAAUvuB,KAAK2nB,SAAS6G,QAAQ,GAChCC,EAAWxtB,GAAMjB,KAAK2nB,SAAS6G,QAAQF,EAAa5gB,QAAQzM,IAAMstB,EAElEpf,EAASnP,KAAKmP,OAAO5O,OAAQ2W,GAAUoX,EAAa9tB,SAAS0W,EAAM0B,QACzE,IAAKzJ,EAAO1N,OAAQ,OAAO,KAE3B,MAAMX,EAA2BqO,EAAOtC,IAAKqK,IAAW,CACvDtG,MAAOsG,EAAM1N,GACbgN,OAAQxW,KAAKsW,QAAU,IAAIxG,UAAW0G,GAAUA,EAAMhW,SAAS0W,EAAM1N,KACrEkF,KAAMwI,EAAMsJ,KAAOlS,EAAiBkM,KAAOlM,EAAiBiM,MAC5D3B,MAAO0V,EAAa5gB,QAAQwJ,EAAM0B,OAClC5V,EAAGkU,EAAM8J,KACTN,OAAQxJ,EAAMwJ,OACdhG,GAAI+T,EAAQvX,EAAM0B,QAAkC,MAAxB1B,EAAMsP,cAAwBtP,EAAMgK,KAAOhK,EAAMiK,GAAGjK,EAAMiK,GAAG1f,OAAS,IAClGkZ,GAAI8T,EAAQvX,EAAM0B,QAAkC,MAAxB1B,EAAMsP,cAAwBtP,EAAMiK,GAAG,GAAKjK,EAAMgK,MAC9EwN,MAA+B,MAAxBxX,EAAMsP,cAAwBtP,EAAMiK,GAAG,GAAKjK,EAAMiK,GAAGjK,EAAMiK,GAAG1f,OAAS,GAC9EuZ,QAAS9D,EAAM8D,QACfyD,SAAUvH,EAAMuH,SAChBW,KAAMlI,EAAMkI,KACZqH,KAAMvP,EAAMuP,MAAQ,KACpBD,cAAetP,EAAMsP,cACrB5L,QAAS1D,EAAM0D,MACfwG,eAAgBlK,EAAMkK,eACtB+D,aAAcjO,EAAML,SACpBgE,YAAa3D,EAAM6J,gBACnBrK,KAAMQ,EAAMR,MAAQ,EACpB+D,MAAOvD,EAAM6J,kBAAoB7J,EAAM0D,OAAS5a,KAAKsW,SAAW8X,EAAa/d,IAAI6G,EAAM1N,OAExF,IAAK1I,EAAS6P,KAAM2J,IAAUA,EAAKG,MAAO,OAAO,KAEjD,MAAMkR,EAAoBpgB,EAAYsU,GAAgB7f,KAAK8mB,eAG3DhmB,EAAS4R,QAAQ,CAChB9B,MAAO,EACPlC,KAAMJ,EAAiBqgB,IACvB/V,MAAO,KACP6F,SAAU,KACVgI,KAAM,KACNrH,KAAM,KACNoH,cAAe,KACf5L,OAAO,EACPwG,gBAAgB,EAChBvG,aAAa,EACb7X,EAAGhD,KAAK2nB,SAASpI,KACjBmB,OAAQ1gB,KAAK2nB,SAASpI,KACtB7E,GAAI,EACJC,GAAI,EACJ+T,MAAO,EACP1T,QAAS,KACTmK,WAAYnlB,KAAKgT,SAAW2Y,EAC5BjV,KAAM,EACN+D,MAAM,IAEP3Z,EAASvB,KAAK,CACbqR,OAAQ,EACRlC,KAAMJ,EAAiB6M,IACvBvC,MAAO,KACP6F,SAAU,KACVgI,KAAM,KACNrH,KAAM,KACNoH,cAAe,KACf5L,OAAO,EACPwG,gBAAgB,EAChBvG,aAAa,EACb7X,EAAGhD,KAAK2nB,SAASnI,MACjBkB,OAAQ1gB,KAAK2nB,SAASnI,MACtB9E,GAAI,EACJC,GAAI,EACJ+T,MAAO,EACP1T,QAAS,KACTmK,YAAY,EACZzO,KAAM1W,KAAKgT,SACXyH,MAAM,IAGP,IAAIrK,EAAU,KACVpQ,KAAKsW,SACRlG,EAAUtP,EAAS+L,IAAI,IAAM/L,EAAS+L,IAAI,IAAM,IAEhD7M,KAAKsW,OAAOjX,QAASmX,IACpB,IAAIoY,EAAM,EACVpY,EAAMnX,QAASmK,IACd,MAAMqlB,EAAM/tB,EAASgP,UAAWxQ,GAAMA,EAAEsR,QAAUpH,GAC9CqlB,EAAM,GAAKD,GAAO,IAAGxe,EAAQye,GAAKD,GAAO,GAC7CA,EAAMC,IAGHD,GAAO,IAAGxe,EAAQtP,EAASW,OAAS,GAAGmtB,GAAO,MAIpD,MAAM7T,EAAa,IAAK/a,KAAKmoB,aAAc2G,QAAS9uB,KAAK8uB,SAEnDC,EACL/uB,KAAK+uB,kBACL/uB,KAAK+uB,iBAAiBliB,IAAI,EAAGmiB,MAAKrH,eAAgB,CACjDqH,MACArH,SAAU,IACNA,EACHzkB,EAAGykB,EAASzkB,EAAIqrB,MAInB,OAAO,IAAIpU,aAAa,CACvBvJ,MAAO5Q,KAAKioB,aACZjV,SAAUhT,KAAKgT,SACf2Y,oBACA4C,UACAztB,WACAsP,UACA2K,aACAgU,uBAGDxuB,OAAOspB,QACT,CAED,aAAAoF,CAActiB,GACb,MAAMuiB,EAASlvB,KAAKmP,OAAOnD,OAAO,CAAC9B,EAAKgN,IAAUlO,KAAKkB,IAAIA,EAAKgN,EAAM1N,IAAK,GAAK,EAChFxJ,KAAKoQ,QAAUnR,MAAMiwB,EAAS,GAC5Bxf,KAAK,MACL7C,IAAI,IAAM5N,MAAMiwB,GAAQxf,KAAK,IAE/B/C,EAAStN,QAASsc,IACjB,MAAMpJ,EAAMoJ,EAAQ7a,SAAS+L,IAAKvN,GAAMA,EAAEsR,OAC1C9F,QAAQmD,OAAO0N,EAAQvL,QAAQ3O,SAAW8Q,EAAI9Q,OAAS,EAAG,2BAA4Bka,EAAQvL,QAAQ3O,OAAQ8Q,EAAI9Q,QAElH,IAAK,IAAI0tB,EAAK,EAAGA,EAAK5c,EAAI9Q,SAAU0tB,EACnC,IAAK,IAAIjc,EAAK,EAAGA,EAAKX,EAAI9Q,OAAS,IAAKyR,EAAI,CAC3C,MAAMkc,EAAQ7c,EAAI4c,GAAM,EAAID,EAAS3c,EAAI4c,GACnCE,EAAQ9c,EAAIW,GAElBlT,KAAKoQ,QAAQgf,GAAOC,GAAS1T,EAAQvL,QAAQ+e,EAAK,GAAGjc,EACrD,CAIFyI,EAAQ7a,SAASzB,QAASib,IACzB,MAAMpD,EAAQlX,KAAKmP,OAAO9C,KAAM6K,GAAUA,EAAM1N,KAAO8Q,EAAK1J,OACxDsG,IACHA,EAAMkE,eAAiBd,EAAKc,oBACO0F,IAA/B5J,EAAMkE,eAAeR,QAAqB1D,EAAM0D,MAAQ1D,EAAMkE,eAAeR,MAAQmF,GAAUiF,MAAQ,WAM9GhlB,KAAKib,kBAAoBtO,EAASX,OAAO,CAACwH,EAAKmI,IAAYnI,EAAMmI,EAAQV,kBAAmB,GAAKtO,EAASlL,MAC1G,EAprBMknB,gBAASjoB,UAAG,kBACZioB,gBAAStoB,UAAG,CAAC,cAAe,eAAgB,gBAAiB,WE3kBrE,MAAMivB,sBAAsBjP,UAG3B,WAAAlgB,CAAYJ,GACXqa,MAAMra,EACN,CAED,SAAIwvB,GACH,OAAO,IAAIC,MAAoBxvB,KAAa,CAC3C,GAAAhB,CAAI8R,EAAQpR,GACX,MAAM+vB,EAAO3e,EAEb,OAAQpR,GACP,IAAK,KACL,IAAK,OACL,IAAK,WACL,IAAK,OACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,OACL,IAAK,UACL,IAAK,cACL,IAAK,gBAAiB,CACrB,MAAMlB,EAAQixB,EAAK/vB,GACnB,YAAiBohB,IAAVtiB,EAAsB,KAAOA,CACpC,CAED,IAAK,QACL,IAAK,OACL,IAAK,YAAa,CACjB,MAAMA,EAAQixB,EAAK/vB,GACnB,YAAiBohB,IAAVtiB,GAA8BA,CACrC,CAED,IAAK,QACJ,QAASixB,EAAK7U,MAEf,IAAK,WACJ,OAAO6U,EAAK5Y,SAAW,GAAG4Y,EAAK5Y,SAAS5L,aAAawkB,EAAK5Y,SAAS3L,cAAgB,KAEpF,IAAK,aACJ,OAAOukB,EAAK3tB,WAAa,GAAG2tB,EAAK3tB,WAAWmJ,aAAawkB,EAAK3tB,WAAWoJ,cAAgB,KAE1F,IAAK,UACJ,OAAOukB,EAAKjO,QAId,EAEDpiB,IAAK,CAAC0R,EAAQpR,EAAKlB,KAClB,MAAMixB,EAAO3e,EAEb,OAAQpR,GACP,IAAK,OACL,IAAK,WACL,IAAK,OACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,cACL,IAAK,YACL,IAAK,gBAGJ,OAFC+vB,EAAa/vB,GAAOlB,GAEd,EACR,IAAK,QAGJ,OAFAixB,EAAK7U,MAAQpc,EAAQuhB,GAAUiF,MAAQ,MAEhC,EACR,IAAK,WAEJ,GADAyK,EAAK5Y,SAAW,KACZrY,GAA0B,iBAAVA,EAAoB,CACvC,MAAMkxB,EAAWlxB,EAAMmlB,MAAM,iBACzB+L,IACHD,EAAK5Y,SAAW,CACf5L,UAAW0kB,SAASD,EAAS,IAC7BxkB,YAAaykB,SAASD,EAAS,KAGjC,CAED,OAAO,EACR,IAAK,aAEJ,GADAD,EAAK3tB,WAAa,KACdtD,GAA0B,iBAAVA,EAAoB,CACvC,MAAMkxB,EAAWlxB,EAAMmlB,MAAM,iBACzB+L,IACHD,EAAK3tB,WAAa,CACjBmJ,UAAW0kB,SAASD,EAAS,IAC7BxkB,YAAaykB,SAASD,EAAS,KAGjC,CAED,OAAO,EACR,IAAK,KACL,IAAK,UACJ,OAAO,EAGT,OAAO,GAGRE,QAAS,IAAgB,CACxB,KACA,WACA,OACA,WACA,OACA,gBACA,QACA,OACA,OACA,WACA,aACA,UACA,cACA,YACA,gBACA,OACA,QACA,WAGDC,yBAAwB,KAChB,CAAEC,YAAY,EAAMC,cAAc,KAG3C,EAGF,MAAMC,wBAAwBrH,gBAM7B,WAAAxoB,CAAYJ,GACXqa,MAAMra,GAHPC,KAAMmP,OAAoB,KAKzBnP,KAAKmP,OAASpP,EAAKoP,OACfnP,KAAKmP,QAAQwB,KAAMuG,KAAYA,aAAiBoY,kBAAiBtvB,KAAKmP,OAASnP,KAAKmP,OAAOtC,IAAKqK,GAAU,IAAIoY,cAAcpY,KAE5HlX,KAAKsW,QAAQtW,KAAKiwB,mBACtB,CAED,iBAAAA,GACCjwB,KAAKmP,OAAO9P,QAAS6X,GAAWA,EAAMV,OAAS,GAC/CxW,KAAKsW,OAAOjX,QAAQ,CAACmX,EAAO0Z,KAC3B1Z,EAAMnX,QAASmK,IACd,MAAM0N,EAAQlX,KAAKmP,OAAO9C,KAAM6K,GAAUA,EAAM1N,KAAOA,GACnD0N,EAAOA,EAAMV,MAAQ0Z,EACpBplB,QAAQkD,KAAK,oBAAqBxE,EAAIxJ,KAAKmP,OAAO1N,WAGzD,CAED,mBAAA0uB,GACC,MAAM7Z,EAA4B,GAClCtW,KAAKmP,OAAO9P,QAAS6X,IAChBA,GAAOV,OAAS,IACnBF,EAAOY,EAAMV,OAASF,EAAOY,EAAMV,QAAU,GAC7CF,EAAOY,EAAMV,OAAOjX,KAAK2X,MAI3BZ,EAAOjX,QAASmX,GAAUA,EAAM3K,KAAK,CAAC+C,EAAIE,IAAOF,EAAG8H,KAAO5H,EAAG4H,OAE9D1W,KAAKsW,OAASA,EAAOzJ,IAAK2J,GAAUA,EAAM3J,IAAKqK,GAAUA,EAAM1N,IAC/D,CAED,SAAI+lB,GACH,OAAO,IAAIC,MAAsBxvB,KAAa,CAC7ChB,IAAK,CAAC8R,EAAQpR,KACb,MAAM+vB,EAAO3e,EAEb,OAAQpR,GACP,IAAK,eACL,IAAK,WACJ,OAAO+vB,EAAK/vB,GAEb,IAAK,SACJ,OAAO+vB,EAAKnZ,QAAQzJ,IAAK2J,GAAUA,EAAMnE,KAAK,OAAS,KAExD,IAAK,gBACL,IAAK,eACL,IAAK,kBACJ,OAAOod,EAAKzT,OAAO,GAAGtc,GAGvB,IAAK,SACJ,MAAO,KAAO,CACbuoB,aAAcwH,EAAKxH,aACnB3R,OAAQmZ,EAAKnZ,OACbtD,SAAUyc,EAAKzc,SACf8T,cAAe2I,EAAKzT,OAAO,GAAG8K,cAC9B4C,aAAc+F,EAAKzT,OAAO,GAAG0N,iBAOjCtqB,IAAK,CAAC0R,EAAQpR,EAAKlB,KAElB,MAAMixB,EAAO3e,EAEb,OAAQpR,GACP,IAAK,gBACL,IAAK,eACL,IAAK,kBAIJ,OAHC+vB,EAAKzT,OAAO,GAAGtc,GAAelB,EAC/BixB,EAAKzT,OAASyT,EAAKzT,OAAOnP,IAAI,IAAM4iB,EAAKzT,OAAO,KAEzC,EACR,IAAK,WAGJ,OAFAyT,EAAKzc,SAAWxU,GAET,EACR,IAAK,eACL,IAAK,SACJ,OAAO,EAGT,OAAO,GAGRoxB,QAAS,IAAgB,CAAC,eAAgB,gBAAiB,kBAAmB,eAAgB,WAAY,UAE1GC,yBAAwB,KAChB,CAAEC,YAAY,EAAMC,cAAc,KAG3C,CAED,QAAAK,CAASxM,EAAc,KACtB,IAAK5jB,KAAKspB,UAAW,OAAO,KAE5B,MAAM+G,EAAsB,IAAOzM,EAG7B0M,EAAStwB,KAAKsW,OAAOzJ,IAAI,CAAC0F,EAAKge,KACpC,MAAMphB,EAASoD,EACb1F,IAAKrD,IACL,MAAM0N,EAAQlX,KAAKmP,OAAO9C,KAAM6K,GAAUA,EAAM1N,KAAOA,GACvD,GAAI0N,EAAO,CACV,MAAMsZ,EAAYtZ,EAAMmV,SAAWnV,EAAMmV,SAASxf,IAAKrD,GAAOxJ,KAAKmP,OAAO9C,KAAM6K,GAAUA,EAAM1N,KAAOA,IAAO,GAE9G,MAAO,IAAIgnB,EAAWtZ,EACtB,CAED,MAAO,KAEP8S,KAAK,GAKDyG,EAAsBthB,EAC1B5O,OAAQ2W,IAAWA,EAAMsJ,MAAQ5V,OAAOwE,SAAS8H,EAAMR,OAASQ,EAAMR,MAAQ,GAAK9L,OAAOwE,SAAS8H,EAAMlE,WACzGnG,IAAKqK,GACLA,EAAMsK,QAAQ3U,IAAK4U,GAAU,CAC5B,CACCjY,GAAI0N,EAAM1N,GACVknB,KAAMxZ,EAAMR,KACZhI,KAAM,UACNiiB,QAAS,SACTC,QAAS1Z,EAAM0B,MACfiY,WAAY1jB,EAAYsU,GACxBqP,SAAU,IAEX,CACCtnB,GAAI0N,EAAM1N,GACVknB,KAAMxZ,EAAMR,KAAOQ,EAAMlE,SACzBtE,KAAM,UACNiiB,QAAS,UACTC,QAAS1Z,EAAM0B,MACfiY,WAAY1jB,EAAYsU,OAI1BuI,KAAK,GA6BP,OA3BAyG,EAAW5kB,KAAK,SAAU+C,EAAIE,GAC7B,OAAOF,EAAG8hB,KAAO5hB,EAAG4hB,IACrB,GAEW,IAAPH,GACHE,EAAW/d,QACV,CACCge,KAnCe,EAoCfhiB,KAAM,OACNiiB,QAAS,gBACT1lB,UAAWjL,KAAK8mB,cAAc7b,UAC9BC,YAAalL,KAAK8mB,cAAc5b,YAChC6lB,cAAe,GAEhB,CAAEL,KA1Cc,EA0CGhiB,KAAM,OAAQiiB,QAAS,WAAYN,wBAIxDI,EAAWpxB,QAAS6X,IACnBA,EAAM8Z,MAAQhoB,KAAKC,MAAMiO,EAAMwZ,KA/Cd,KAiDlBD,EAAWpxB,QAAQ,CAAC6X,EAAO9V,KAC1B8V,EAAM+Z,UAAY/Z,EAAM8Z,OAAS5vB,EAAI,EAAIqvB,EAAWrvB,EAAI,GAAG4vB,MAAQ,KAGpEP,EAAWlxB,KAAK,CAAE0xB,UAAW,EAAGviB,KAAM,OAAQiiB,QAAS,eAEhDF,IAGR,MAAO,CACNS,OA1Ec,CAAEC,WAAY,EAAGC,aAAc,KA2E7Cd,SAED,EAzLMN,gBAAStvB,UAAG,kBACZsvB,gBAAS3vB,UAAG,GDlCpB,SAAKolB,GACJA,EAAA,QAAA,UACAA,EAAA,SAAA,UACA,CAHD,CAAKA,KAAAA,GAGJ,CAAA,IAgLD,SAAKC,GACJA,EAAA,MAAA,QACAA,EAAA,OAAA,SACAA,EAAA,UAAA,YACAA,EAAA,aAAA,eACAA,EAAA,YAAA,cACAA,EAAA,MAAA,QACAA,EAAA,WAAA,aACAA,EAAA,cAAA,gBACAA,EAAA,MAAA,QACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eACAA,EAAA,MAAA,QACAA,EAAA,WAAA,aACAA,EAAA,MAAA,OACA,CAfD,CAAKA,KAAAA,GAeJ,CAAA,IEtTD,MAAM2L,GAAc,CACnB,CAACrR,GAAS6F,MAAO,EACjB,CAAC7F,GAAS8F,UAAW,EACrB,CAAC9F,GAAS+F,QAAS,GAGPuL,GAAmBhN,IAC/B,IAAKA,EAAQgF,UAAW,OAExB,MAAM7Y,EAAW6T,EAAQ7T,SAEnBtB,EAASmV,EAAQnV,OAAO1N,OACxB8vB,EAAcjN,EAAQhO,OAAO0T,KAAK,GAAGvoB,OACrC+vB,EAAelN,EAAQnV,OAAO5O,OAAQjB,GAAMA,EAAEuX,UAAUpV,OACxDgU,EAAQ,IAAIhJ,IACjB6X,EAAQnV,OAAO5O,OAAQjB,GAAMA,EAAEuX,YAAcvX,EAAEkhB,MAAuB,IAAflhB,EAAEmf,WAAiB5R,IAAKvN,GAAM,GAAGA,EAAEuX,SAAU5L,aAAa3L,EAAEuX,SAAU3L,gBAExHumB,EAAiB,IAAIhlB,IAAIgJ,GAC/Bgc,EAAexkB,OAAO,OAEtB,MAAMykB,EAAiBpN,EAAQhO,OAAO3F,KAAM6F,IAC3C,MAAMrH,EAASqH,EAAM3J,IAAKrD,GAAOiH,EAASjH,IAC1C,IAAK2F,EAAOwB,KAAMrR,GAAMA,EAAEuX,UAAW,OAAO,EAE5C,IAAI3L,EAAc,EACdymB,EAAU,EACVC,EAAS,EACb,OAAOziB,EAAOwB,KAAK,CAACuG,EAAO9V,KAC1B,MAAMgK,EAAI8L,EAAML,SAAWK,EAAML,SAAS3L,YAAc,EACxD,GAAIE,IAAMF,EAAa,CACtB,GAAIA,EAAc,IAAMymB,EAAUzmB,GAAe0mB,EAAS,GAAI,OAAO,EAErED,EAAU,EACVC,EAAS,CACT,CAMD,OAJA1mB,EAAcE,EACdumB,GAAWza,EAAMlE,WACf4e,KAEExwB,IAAM+N,EAAO1N,OAAS,GACrByJ,EAAc,IAAMymB,EAAUzmB,GAAe0mB,EAAS,QAOvDC,EAAiBvN,EAAQhO,OAAO3F,KAAM6F,IAC3C,MAAMrH,EAASqH,EAAM3J,IAAKrD,GAAOiH,EAASjH,IAC1C,IAAIkN,EAAO,EACX,OAAOvH,EAAOwB,KAAMuG,IACfA,EAAM0D,QAEN1D,EAAMR,KAAOA,IACjBA,EAAOQ,EAAMR,KAAOQ,EAAMlE,UAEnB,OAKH8e,EADkB,IAAIrlB,IAAI6X,EAAQnV,OAAO5O,OAAQjB,GAAMA,EAAEuX,UAAYvX,EAAEuX,SAAS3L,YAAc,GAAG2B,IAAKvN,GAAMA,EAAE0T,WACxEhC,KAAO,EAE7C+gB,EAAkBxmB,EAAYsU,GAAgByE,EAAQwC,eACtDkL,EAAc1N,EAAQwF,gBAAkBxF,EAAQtR,SAAW+e,EAE3DE,EAAgB3N,EAAQhO,OAAO0T,KAAK,GAAGnd,IAAKrD,GAAOiH,EAASjH,IAG5D0oB,EAAsBD,EAActhB,KACxCuG,IACCA,IACAtM,OAAOwE,SAAS8H,EAAMR,QACtB9L,OAAOwE,SAAS8H,EAAMuH,WACvBvH,EAAMuH,SAAW,IAChB7T,OAAOwE,SAAS8H,EAAMlE,WACvBkE,EAAMlE,UAAY,GAGdmf,EAAaF,EAAcjmB,OAAO,CAAComB,EAAMlb,IAAUkb,GAAQlb,EAAMR,KAAO,GAAKQ,EAAMR,KAAOQ,EAAMlE,SAAWgf,GAAa,GACxHK,EAAe/N,EAAQtR,SAAW+e,EAClCO,EAAeL,EAActhB,KAAMuG,GAAUA,EAAM0D,OACnD2X,EAASjO,EAAQnV,OAAO5O,OAAQjB,GAAMA,EAAEsb,OAAOnZ,OAC/C+wB,EAAgBD,GAAUN,EAAcxwB,OAExCgxB,EAAgBR,EAActhB,KAAMuG,IACzC,IAAI3F,EAAI2F,EAAMR,KAAO,IAAMQ,EAAMuH,SAAW,GAG5C,GAFIvH,EAAML,WAAUtF,GAAK2F,EAAML,SAAS3L,cAEnCN,OAAOwE,SAASmC,GAAI,OAAO,EAKhC,OAHiB9G,EAAIzB,KAAKC,MAAMsI,GAAIsO,IAGlBA,KAoBb6S,EAjBapO,EAAQhO,OAAQzJ,IAAK2J,GACvCA,EAAMxK,OACL,EAAGwD,SAAQmjB,UAAU5hB,EAAI6hB,KACxB,MAAM1b,EAAQzG,EAASM,GASvB,OARImG,EAAMuP,MAEG,IAARmM,GAAa,CAAC5S,GAAS8F,SAAU9F,GAAS+F,OAAOvlB,SAAS0W,EAAMuP,QAAOjX,EAAS,GAEpFA,GAAU6hB,GAAYna,EAAMuP,MAC5BkM,EAASA,KAAYnjB,GAAU,GAAKA,GAAU,IACnC0H,EAAMsJ,OAAMmS,EAASA,GAAqB,IAAXnjB,GAEpC,CAAEA,SAAQmjB,WAElB,CAAEnjB,OAAQ,EAAGmjB,QAAQ,KAGOhiB,KAAK,EAAGgiB,YAAaA,GACnD,IAAIlZ,EAAY,EACZoZ,EAAc,EAClBvO,EAAQhO,OAAQjX,QAASmX,IACxB,MAAMsc,EAAgBtc,EAAMxK,OAAO,CAACwH,EAAKzC,IAAOyC,EAAM/C,EAASM,GAAIiC,SAAU,GAC7EyG,GAAazQ,KAAKkB,IAAI,EAAGoa,EAAQtR,SAAW8f,GAC5CD,GAAe7pB,KAAKkB,IAAI,EAAG4oB,EAAgBxO,EAAQtR,YAEpDyG,GAAaoG,GACb,MAAMkT,EAAazO,EAAQnV,OAAO5O,OAChCjB,KAAOA,EAAEsb,OAAUtb,EAAEyhB,iBAAoBzhB,EAAE8hB,gBAAoB9hB,EAAE8b,kBAAkB9b,EAAE8b,eAAeyL,MAAQ,KAASjc,OAAOwE,SAAS9P,EAAEoX,QACvIjV,OAEIuxB,EAAa1O,EAAQnV,OAAO5O,OAChC2W,KAAWA,EAAM6J,iBAAoB7J,EAAM0D,OAAU1D,EAAMkK,gBAAmB6Q,EAAczxB,SAAS0W,KACrGzV,QAEIwxB,YAAEA,GAAgB3O,EAAQhO,OAAQ0T,KAAK,GAAGhe,OAC/C,CAAC7M,EAAQ4R,KACH5R,EAAO8zB,aACP9zB,EAAOka,GAAGhJ,IAAIU,GAAY,CAAEkiB,aAAa,EAAM5Z,GAAIla,EAAOka,KAG/Dla,EAAOka,GAAGpJ,IAAIc,GAEP5R,GAER,CAAE8zB,aAAa,EAAO5Z,GAAI,IAAI5M,MAGzByN,EAAYoK,EAAQpK,WAAa,EAEjCnP,EACLmnB,GACAhY,GAAa,GACb2X,GACAoB,GACA3O,EAAQ+F,kBAAkB1Z,KAAMwa,GAASA,EAAO,IAChD4H,EAAa,IACZzO,EAAQwC,eACTqL,GACA7N,EAAQtR,SAAWgf,GACnB1N,EAAQnV,OAAOwB,KAAMuG,GAAUA,EAAML,UAAYK,EAAML,SAAS5L,UAAYiM,EAAML,SAAS3L,aAAe,IACrGgoB,GACJnoB,IACAsnB,GACDnY,EAAY,KACXwX,IACAD,EAAezgB,OACfyhB,IACAhZ,IACAoZ,KACCvO,EAAQhO,OAAQ7U,SACjBixB,IACAJ,IACAE,IACAlO,EAAQtR,WAAagf,GAAgBpnB,OAAOwE,SAASkV,EAAQrJ,oBAAsBqJ,EAAQrJ,mBAAmC,IAAd+W,GAC5GmB,IAAQpoB,GAAUsnB,KAAgBnY,EAAY,KAAQwX,GAAmBe,GAAkBI,GAAgBH,GAAeJ,GAEhI,IAAIc,EAAiBpqB,KAAKgB,IAAIgoB,EAAanS,MACvCjV,OAAOwE,SAASkV,EAAQrJ,qBAAoBmY,EAAiBpqB,KAAKkB,IAAI,EAAGlB,KAAKgB,IAAIopB,EAAgB9O,EAAQrJ,qBAC9G,MAAMoY,EAAe/O,EAAQtR,SAAWogB,EAExC,IAAIE,EAAe,EACnB,GAAIhP,EAAQwK,UAAYoD,EAAqBoB,EAAe,OACvD,IAAKvoB,EAAO,CAChB,MAAMwoB,EAAYvqB,KAAK2d,KAAgE,EAA3D3d,KAAK4K,IAAI6F,EAAYzQ,KAAKkB,IAAI,EAAGoa,EAAQhO,OAAO7U,UAE5E,IAAI2xB,EAAiBpqB,KAAKgB,IAAIgoB,EAAanS,MACvCjV,OAAOwE,SAASkV,EAAQrJ,qBAAoBmY,EAAiBpqB,KAAKkB,IAAI,EAAGlB,KAAKgB,IAAIopB,EAAgB9O,EAAQrJ,qBAI9GqY,GAAgB,EAAIC,IAAc,GAHbH,EAAiBpqB,KAAKkB,IAAI,EAAG,EAAImpB,IAAiB,EAAI,KAGpB,EAFrCrqB,KAAK2d,KAAK8K,EAAezgB,QAE8B,EAAIkJ,GAAa,EAC1F,CAED,MAAO,CACN/K,SACAoiB,cACA0B,cACAF,aACAC,aACAxB,eACAM,sBACArY,YACAoZ,cACAQ,eACAX,aACAhB,iBACA8B,gBAAiB/B,EAAezgB,KAChCyhB,gBACAvY,YACA2X,iBACAS,eACAC,SACAC,gBACAU,UACAC,OACApoB,QACAuoB,iBClPF,IAAKG,IAAL,SAAKA,GACJA,EAAA,SAAA,WACAA,EAAA,KAAA,OACAA,EAAA,aAAA,eACAA,EAAA,KAAA,MACA,CALD,CAAKA,KAAAA,GAKJ,CAAA,IAWD,MAAMC,GAAmB,CAACC,EAAiBjlB,EAAmB+kB,GAAWG,WAAuB,GAAGhnB,UAAU+mB,EAAI9mB,IAAKgnB,GAAWA,EAAOC,UAAUplB,KAE5IqlB,GAAY,CAACJ,GAAmBK,gBAAe,GAAsC,CAAA,KAE1F,IAAIC,EAAO,GACPC,GAAU,EAEd,IAAK,IAAI9yB,EAAI,EAAGA,EAAIuyB,EAAIlyB,SAAUL,EAAG,CACrBuyB,EAAIvyB,EAAI,aAAc+yB,eAAiBR,EAAIvyB,aAAc+yB,eAAiBR,EAAIvyB,EAAI,aAAc+yB,cAEzGD,IACJD,GAAQ,KACRC,GAAU,IAGP9yB,EAAI,IAAM8yB,IAASD,GAAQ,MAE/BC,GAAU,EAEVD,GAAQN,EAAIvyB,GAAG6yB,KAEhB,CAED,OAAOD,EAAe,IAAIC,KAAUA,GAGrC,MAAME,sBAAsBt0B,YAK3B,WAAO/B,CAAKwmB,GACX,MAAMuP,EAAS,IAAIM,cAGnB,OAFAN,EAAOvP,QAAUA,EAEVuP,CACP,CAED,WAAA1zB,CAAYJ,OAAY+gB,GACvB1G,QACApa,KAAKF,OAAOC,EACZ,CAED,SAAA+zB,GACC,MAAO,CAAC9zB,KAAKskB,QACb,CAED,OAAIqP,GACH,MAAO,CAAC3zB,KACR,CAED,QAAIi0B,GACH,OAAOj0B,KAAKskB,QAAQvmB,UACpB,EA1BMo2B,cAASzzB,UAAG,gBA6BpB,MAAM0zB,qBAAqBv0B,YAK1B,cAAOw0B,CAAQV,GACd,MAAMW,EAAO,GACb,IAAK,MAAMT,KAAUF,EACpB,GAAIE,aAAkBO,aACrB,IAAK,MAAMljB,KAAO2iB,EAAOF,IAAKW,EAAK/0B,KAAK2R,QAClCojB,EAAK/0B,KAAKs0B,GAIlB,MAAMU,EAAO,GACb,IAAIjQ,EAAU,KACd,IAAK,MAAMuP,KAAUS,EAChBT,aAAkBM,cACjBN,EAAOvP,QAAUA,IACpBiQ,EAAKh1B,KAAKs0B,GACVvP,EAAUuP,EAAOvP,SAEZiQ,EAAKh1B,KAAKs0B,GAGlB,OAAOU,CACP,CAED,cAAOC,CAAQb,GACd,MAAME,EAAS,IAAIO,aAGnB,OAFAP,EAAOF,IAAMS,aAAaC,QAAQV,GAE3BE,CACP,CAED,WAAA1zB,CAAYJ,OAAY+gB,GACvB1G,QACApa,KAAKF,OAAOC,EACZ,CAED,SAAA+zB,CAAUplB,GACT,OAAOglB,GAAiB1zB,KAAK2zB,IAAKjlB,EAClC,CAED,QAAIulB,GACH,OAAOF,GAAU/zB,KAAK2zB,IAAK,CAAEK,cAAc,GAC3C,EA7CMI,aAAS1zB,UAAG,eAgDpB,MAAM+zB,qBAAqB50B,YAO1B,WAAAM,CAAYJ,OAAY+gB,GACvB1G,QACApa,KAAKF,OAAOC,EACZ,CAED,SAAA+zB,CAAUplB,GACT,MAAMgmB,EAAUhB,GAAiB1zB,KAAK20B,MAEtC,GAAI30B,KAAK40B,WAAY,CACpB,MAAMC,EAAgB70B,KAAK40B,WAAW/nB,IAAK8mB,GAAQD,GAAiBC,IAC9DmB,EAAmBD,EAAcA,EAAcpzB,OAAS,GAE9D,OAAQiN,GACP,KAAK+kB,GAAWG,SACf,OAAOc,EAAQ9nB,UAAUioB,GAE1B,KAAKpB,GAAWsB,aAChB,KAAKtB,GAAWuB,KAOf,MAAO,IANU,GAAGpoB,UAChB3N,MAAMe,KAAK0X,MAAQ,GACpBhI,KAAK,MACL7C,IAAI,CAACtO,EAAG6C,IAAM,IAAIszB,KAAYG,EAAczzB,GAAKpB,KAAK0X,MAAQ,UAGzCgd,KAAYI,GAGrC,KAAKrB,GAAWwB,KACf,MAAO,IAAIP,KAAYI,GAEzB,MACA,OAAQpmB,GACP,KAAK+kB,GAAWG,SAChB,KAAKH,GAAWsB,aAChB,KAAKtB,GAAWwB,KACf,OAAOP,EAER,KAAKjB,GAAWuB,KACf,MAAO,GAAGpoB,UACN3N,MAAMe,KAAK0X,OACZhI,KAAK,MACL7C,IAAI,IAAM6nB,IAKhB5pB,QAAQkD,KAAK,gCAAiCU,EAAM1O,KACpD,CAED,OAAI2zB,GACH,MAAMiB,EAAa50B,KAAK40B,WAAa50B,KAAK40B,WAAW50B,KAAK40B,WAAWnzB,OAAS,GAAK,GAEnF,MAAO,IAAIzB,KAAK20B,QAASC,EACzB,CAED,QAAIX,GACH,MAAMU,EAAOZ,GAAU/zB,KAAK20B,KAAM,CAAEX,cAAc,IAElD,IAAIC,EAAO,GAAGj0B,KAAK0X,SAASid,IAG5B,OAFI30B,KAAK40B,aAAYX,GAAQ,IAAMj0B,KAAK40B,WAAW/nB,IAAK8mB,GAAQI,GAAUJ,EAAK,CAAEK,aAAcL,EAAIlyB,OAAS,KAAM4Q,KAAK,MAAQ,KAExH4hB,CACP,EApEMQ,aAAS/zB,UAAG,eAuEpB,MAAMw0B,mBAAmBr1B,YAMxB,WAAAM,CAAYJ,OAAY+gB,GACvB1G,QACApa,KAAKF,OAAOC,EACZ,CAED,SAAA+zB,CAAUplB,GACT,MAAMymB,EAAOn1B,KAAKo1B,KAAKtB,UAAUplB,GAC3B2mB,EAAQ3B,GAAiB1zB,KAAKo1B,KAAKzB,IAAKF,GAAWwB,MACnDK,EAAO5B,GAAiB1zB,KAAKwgB,KAAM9R,GAEzC,OAAQA,GACP,KAAK+kB,GAAWG,SACf,MAAO,IAAIuB,KAASG,GAErB,KAAK7B,GAAWwB,KACf,MAAO,IAAIK,KAASD,GAErB,KAAK5B,GAAWsB,aAChB,KAAKtB,GAAWuB,KACf,MAAO,IAAIG,KAASG,KAASD,GAE9B,QACCvqB,QAAQkD,KAAK,gCAAiCU,EAAM1O,MAEtD,CAED,OAAI2zB,GACH,MAAO,CAAC3zB,KAAKo1B,QAASp1B,KAAKwgB,KAC3B,CAED,QAAIyT,GACH,MAAO,IAAMj0B,KAAKo1B,KAAKnB,KAAO,KAAOF,GAAU/zB,KAAKwgB,MAAQ,GAC5D,EArCM0U,WAASx0B,UAAG,sLC1HhB60B,GAAS,WACZ,IAAI12B,EAAI,SAAU4lB,EAAG+Q,EAAG32B,EAAG42B,GACzB,IAAK52B,EAAIA,GAAK,GAAI42B,EAAIhR,EAAEhjB,OAAQg0B,IAAK52B,EAAE4lB,EAAEgR,IAAMD,GAC/C,OAAO32B,CACP,EACD62B,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,GAAI,GAAI,GAAI,IACtBC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAC3Bb,EAAS,CACZc,MAAO,WAAmB,EAC1BplB,GAAI,CAAE,EACNqlB,SAAU,CACTvrB,MAAO,EACPwrB,aAAc,EACdC,eAAgB,EAChBC,IAAK,EACLC,0BAA2B,EAC3B,KAAM,EACN,KAAM,EACNC,4BAA6B,EAC7BC,YAAa,GACbC,QAAS,GACT/S,MAAO,GACP,IAAK,GACLgT,SAAU,GACV,KAAM,GACNC,OAAQ,GACRC,cAAe,GACfC,SAAU,GACVC,OAAQ,GACRC,SAAU,GACV,IAAK,GACL,IAAK,GACL,IAAK,GACLC,uBAAwB,GACxBC,cAAe,GACf,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACLC,YAAa,GACbC,QAAS,GACTC,QAAS,GACTC,cAAe,GACfC,SAAU,GACVC,OAAQ,GACRC,SAAU,GACVC,uBAAwB,GACxBC,cAAe,GACfC,QAAS,EACTC,KAAM,GAEPC,WAAY,CACX,EAAG,QACH,EAAG,MACH,EAAG,KACH,EAAG,KACH,GAAI,IACJ,GAAI,WACJ,GAAI,KACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KAELC,aAAc,CACb,EACA,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,EAAG,GACJ,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,IAENC,cAAe,SAAmBC,EAAQC,EAAQC,EAAUrnB,EAAIsnB,EAAyBC,EAAiBC,GAGzG,IAAIC,EAAKF,EAAG/2B,OAAS,EACrB,OAAQ82B,GACP,KAAK,EACJ,OAAOC,EAAGE,EAAK,GAGhB,KAAK,EACJ14B,KAAK24B,EAAIC,EAAK,KAAMJ,EAAGE,IACvB,MACD,KAAK,EACJ14B,KAAK24B,EAAIC,EAAK,aAAcJ,EAAGE,IAC/B,MACD,KAAK,EACJ14B,KAAK24B,EAAIC,EAAK,eAAgB9E,EAAU0E,EAAGE,KAC3C,MACD,KAAK,EACL,KAAK,GACkB,IAAlBF,EAAGE,GAAIj3B,QAA0C,iBAA1B+2B,EAAGE,GAAI,GAAGj6B,YAAgCuB,KAAK24B,EAAIH,EAAGE,GAAI,GAChF14B,KAAK24B,EAAIE,EAAYL,EAAGE,IAE7B,MACD,KAAK,EACL,KAAK,GACJ14B,KAAK24B,EAAI,CAACH,EAAGE,IACb,MACD,KAAK,EACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACJ14B,KAAK24B,EAAIH,EAAGE,GACZ,MACD,KAAK,EACJ14B,KAAK24B,EAAI,IAAIH,EAAGE,EAAK,GAAIF,EAAGE,IAC5B,MACD,KAAK,EACJ14B,KAAK24B,EAAI,IAAIH,EAAGE,EAAK,MAAOF,EAAGE,IAC/B,MACD,KAAK,GACJ14B,KAAK24B,EAAI7U,EAAM0U,EAAGE,EAAK,GAAIF,EAAGE,IAC9B,MACD,KAAK,GACJ14B,KAAK24B,EAAIG,EAAaN,EAAGE,IACzB,MACD,KAAK,GACL,KAAK,GACJ14B,KAAK24B,EAAIE,EAAYL,EAAGE,IACxB,MACD,KAAK,GACL,KAAK,GACJ14B,KAAK24B,EAAIH,EAAGE,EAAK,GACjB,MACD,KAAK,GACL,KAAK,GACJ14B,KAAK24B,EAAII,EAAWP,EAAGE,EAAK,GAAIF,EAAGE,EAAK,GAAIF,EAAGE,IAC/C,MACD,KAAK,GACL,KAAK,GACJ14B,KAAK24B,EAAI,KACT,MACD,KAAK,GACL,KAAK,GACJ34B,KAAK24B,EAAI/D,EAAW4D,EAAGE,EAAK,IAC5B,MACD,KAAK,GACJ14B,KAAK24B,EAAIK,EAASR,EAAGE,EAAK,GAAIF,EAAGE,EAAK,IACtC,MACD,KAAK,GACJ14B,KAAK24B,EAAI,IAAIH,EAAGE,EAAK,GAAIF,EAAGE,IAC5B,MACD,KAAK,GACJ14B,KAAK24B,EAAIE,EAAY,CAACL,EAAGE,KACzB,MACD,KAAK,GACJ14B,KAAK24B,EAAInB,EAAQgB,EAAGE,IACpB,MACD,KAAK,GACJ14B,KAAK24B,EAAIK,EAASR,EAAGE,EAAK,GAAIF,EAAGE,EAAK,IAGxC,EACDO,MAAO,CACN,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAAG,GAAI,EAAG,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAIvD,EAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,GAC5H,CAAE,EAAG,CAAC,IACN,CAAE,EAAG,CAAC,EAAG,KACT,CAAE,EAAG,CAAC,EAAG,IACT,CAAE,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAIF,EAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,GAC3F,CAAE,EAAG,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACxF,CAAE,EAAG,CAAC,EAAG,GAAI,GAAIC,GACjBn3B,EAAEo3B,EAAK,CAAC,EAAG,IACXp3B,EAAEo3B,EAAK,CAAC,EAAG,IACXp3B,EAAEo3B,EAAK,CAAC,EAAG,KACXp3B,EAAEo3B,EAAK,CAAC,EAAG,KACXp3B,EAAEo3B,EAAK,CAAC,EAAG,KACXp3B,EAAEo3B,EAAK,CAAC,EAAG,KACXp3B,EAAEo3B,EAAKC,EAAK,CAAE,GAAI,CAAC,EAAG,IAAK,GAAIC,IAC/Bt3B,EAAEo3B,EAAK,CAAC,EAAG,KACX,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIN,EAAK,GAAIC,GAC3E,CAAE,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAIF,EAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,GACrF,CAAE,EAAG,CAAC,EAAG,IACT,CAAE,EAAG,CAAC,EAAG,IACT,CAAE,EAAG,CAAC,EAAG,IACT,CAAE,EAAG,CAAC,EAAG,IAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACrFl3B,EAAEu3B,EAAK,CAAC,EAAG,KACXv3B,EAAEu3B,EAAK,CAAC,EAAG,KACXv3B,EAAEu3B,EAAK,CAAC,EAAG,KACXv3B,EAAEu3B,EAAK,CAAC,EAAG,KACXv3B,EAAEu3B,EAAK,CAAC,EAAG,KACXv3B,EAAEu3B,EAAK,CAAC,EAAG,IAAK,CAAE,GAAI,CAAC,EAAG,MAC1Bv3B,EAAEu3B,EAAK,CAAC,EAAG,KACX,CAAE,GAAIP,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACzE,CAAE,GAAIF,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACjF,CAAE,GAAI,GAAI,GAAI,GAAI,GAAIL,EAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,GAC/E,CAAE,GAAI,CAAC,EAAG,KACV,CAAE,GAAI,GAAI,GAAID,GACd,CAAE,GAAI,CAAC,EAAG,KACV,CAAE,GAAIO,EAAK,GAAIC,GACf,CAAE,GAAIH,EAAK,GAAI,CAAC,EAAG,KACnBn3B,EAAEu3B,EAAK,CAAC,EAAG,KACX,CAAE,GAAIN,EAAK,GAAI,IACf,CAAE,GAAID,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACjF,CAAE,GAAIF,EAAK,GAAIC,EAAK,GAAI,CAAC,EAAG,IAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACtFl3B,EAAEo3B,EAAK,CAAC,EAAG,IACXp3B,EAAEo3B,EAAK,CAAC,EAAG,IACXp3B,EAAEo3B,EAAK,CAAC,EAAG,KACXp3B,EAAEo3B,EAAK,CAAC,EAAG,IAAK,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,MAC1C,CAAE,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAIP,EAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,GACrF/2B,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,KAC/BA,EAAEu3B,EAAK,CAAC,EAAG,IAAK,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,MAC1C,CAAE,GAAIP,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,CAAC,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACtFl3B,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,KACvCA,EAAEo3B,EAAK,CAAC,EAAG,KACXp3B,EAAEo3B,EAAK,CAAC,EAAG,KACX,CAAE,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAIP,EAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,GACrF,CAAE,GAAII,EAAK,GAAI,CAAC,EAAG,KACnBn3B,EAAEu3B,EAAK,CAAC,EAAG,KACXv3B,EAAEu3B,EAAK,CAAC,EAAG,KACX,CAAE,GAAIP,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACjFl3B,EAAEu3B,EAAK,CAAC,EAAG,KACX,CAAE,GAAIJ,EAAK,GAAI,CAAC,EAAG,KACnBn3B,EAAEo3B,EAAK,CAAC,EAAG,KACX,CAAE,GAAIJ,EAAK,GAAIC,EAAK,GAAI,CAAC,EAAG,IAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACtFl3B,EAAEo3B,EAAK,CAAC,EAAG,KACXp3B,EAAEu3B,EAAK,CAAC,EAAG,MAEZ8C,eAAgB,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,IAC7DC,WAAY,SAAoBv7B,EAAKwL,GACpC,IAAIA,EAAKgwB,YAEF,CACN,IAAIruB,EAAQ,IAAIsuB,MAAMz7B,GAEtB,MADAmN,EAAM3B,KAAOA,EACP2B,CACN,CALA/K,KAAKq2B,MAAMz4B,EAMZ,EACDU,MAAO,SAAeg7B,GACjB,IAAA7J,EAAOzvB,KACVu5B,EAAQ,CAAC,GAETC,EAAS,CAAC,MACVC,EAAS,GACTR,EAAQj5B,KAAKi5B,MACbb,EAAS,GACTE,EAAW,EACXD,EAAS,EAINqB,EAAOD,EAAOlwB,MAAMowB,KAAKC,UAAW,GACpCC,EAAQr6B,OAAOqB,OAAOb,KAAK65B,OAC3BC,EAAc,CAAE7oB,GAAI,CAAA,GACxB,IAAK,IAAIwT,KAAKzkB,KAAKiR,GACdzR,OAAO6B,UAAU04B,eAAeJ,KAAK35B,KAAKiR,GAAIwT,KACjDqV,EAAY7oB,GAAGwT,GAAKzkB,KAAKiR,GAAGwT,IAG9BoV,EAAMG,SAASV,EAAOQ,EAAY7oB,IAClC6oB,EAAY7oB,GAAG4oB,MAAQA,EACvBC,EAAY7oB,GAAGskB,OAASv1B,UACG,IAAhB65B,EAAMI,SAChBJ,EAAMI,OAAS,IAEhB,IAAIC,EAAQL,EAAMI,OAClBR,EAAOl6B,KAAK26B,GACZ,IAAIC,EAASN,EAAM1T,SAAW0T,EAAM1T,QAAQgU,OACH,mBAA9BL,EAAY7oB,GAAGkoB,WACzBn5B,KAAKm5B,WAAaW,EAAY7oB,GAAGkoB,WAEjCn5B,KAAKm5B,WAAa35B,OAAO46B,eAAep6B,MAAMm5B,WA0B/C,IAnBc,IAQV7V,EAEH+W,EACAzqB,EAEA9L,EAEAnC,EACA24B,EACAC,EACAC,EAlBiBC,EAAM,WACvB,IAAIC,EAKJ,MAHqB,iBADrBA,EAAQb,EAAMY,OA9BR,KAgCLC,EAAQjL,EAAK6G,SAASoE,IAAUA,GAE1BA,CACR,EAOCC,EAAQ,CAAE,IAKE,CAUZ,GATAN,EAAQd,EAAMA,EAAM93B,OAAS,GACzBzB,KAAKk5B,eAAemB,GACvBzqB,EAAS5P,KAAKk5B,eAAemB,IAEzB/W,UACHA,EAASmX,KAEV7qB,EAASqpB,EAAMoB,IAAUpB,EAAMoB,GAAO/W,SAEjB,IAAX1T,IAA2BA,EAAOnO,SAAWmO,EAAO,GAAI,CAClE,IAAIgrB,EAAS,GAEb,IAAKj5B,KADL64B,EAAW,GACDvB,EAAMoB,GACXr6B,KAAKi4B,WAAWt2B,IAAMA,EA9DnB,GA+DN64B,EAASj7B,KAAK,IAAMS,KAAKi4B,WAAWt2B,GAAK,KAI1Ci5B,EADGf,EAAMgB,aAER,wBACCvC,EAAW,GACZ,MACAuB,EAAMgB,eACN,eACAL,EAASnoB,KAAK,MACd,WACCrS,KAAKi4B,WAAW3U,IAAWA,GAC5B,IAGA,wBACCgV,EAAW,GACZ,iBAhFG,GAiFFhV,EAAgB,eAAiB,KAAOtjB,KAAKi4B,WAAW3U,IAAWA,GAAU,KAEhFtjB,KAAKm5B,WAAWyB,EAAQ,CACvBvX,KAAMwW,EAAMlW,MACZ+W,MAAO16B,KAAKi4B,WAAW3U,IAAWA,EAClCtP,KAAM6lB,EAAMvB,SACZwC,IAAKZ,EACLM,SAAUA,GAEX,CACD,GAAI5qB,EAAO,aAAc3Q,OAAS2Q,EAAOnO,OAAS,EACjD,MAAM,IAAI43B,MAAM,oDAAsDgB,EAAQ,YAAc/W,GAE7F,OAAQ1T,EAAO,IACd,KAAK,EACJ2pB,EAAMh6B,KAAK+jB,GACXkW,EAAOj6B,KAAKs6B,EAAMzB,QAClBqB,EAAOl6B,KAAKs6B,EAAMI,QAClBV,EAAMh6B,KAAKqQ,EAAO,IAClB0T,EAAS,KAER+U,EAASwB,EAAMxB,OACfD,EAASyB,EAAMzB,OACfE,EAAWuB,EAAMvB,SACjB4B,EAAQL,EAAMI,OAQf,MACD,KAAK,EAaJ,GAZAK,EAAMt6B,KAAKk4B,aAAatoB,EAAO,IAAI,GACnC+qB,EAAMhC,EAAIa,EAAOA,EAAO/3B,OAAS64B,GACjCK,EAAMlC,GAAK,CACVsC,WAAYtB,EAAOA,EAAOh4B,QAAU64B,GAAO,IAAIS,WAC/CC,UAAWvB,EAAOA,EAAOh4B,OAAS,GAAGu5B,UACrCC,aAAcxB,EAAOA,EAAOh4B,QAAU64B,GAAO,IAAIW,aACjDC,YAAazB,EAAOA,EAAOh4B,OAAS,GAAGy5B,aAEpCf,IACHQ,EAAMlC,GAAG3U,MAAQ,CAAC2V,EAAOA,EAAOh4B,QAAU64B,GAAO,IAAIxW,MAAM,GAAI2V,EAAOA,EAAOh4B,OAAS,GAAGqiB,MAAM,UAG/E,KADjBhgB,EAAI9D,KAAKm4B,cAAcgD,MAAMR,EAAO,CAACvC,EAAQC,EAAQC,EAAUwB,EAAY7oB,GAAIrB,EAAO,GAAI4pB,EAAQC,GAAQ7sB,OAAO8sB,KAEhH,OAAO51B,EAEJw2B,IACHf,EAAQA,EAAMhwB,MAAM,GAAI,EAAI+wB,EAAM,GAClCd,EAASA,EAAOjwB,MAAM,GAAI,EAAI+wB,GAC9Bb,EAASA,EAAOlwB,MAAM,GAAI,EAAI+wB,IAE/Bf,EAAMh6B,KAAKS,KAAKk4B,aAAatoB,EAAO,IAAI,IACxC4pB,EAAOj6B,KAAKo7B,EAAMhC,GAClBc,EAAOl6B,KAAKo7B,EAAMlC,IAClB8B,EAAWtB,EAAMM,EAAMA,EAAM93B,OAAS,IAAI83B,EAAMA,EAAM93B,OAAS,IAC/D83B,EAAMh6B,KAAKg7B,GACX,MACD,KAAK,EACJ,OAAO,EAET,CACD,OAAO,CACP,GAGF,MAAM3B,EAAO,CAAClqB,EAAM3O,KAAU,CAAEtB,YAAa,gBAAiBiQ,OAAM3O,SAE9D+4B,EAAgB73B,IAAC,CAAQxC,YAAa,gBAAiB6lB,QAAS1Z,OAAO3J,KACvE43B,EAAelF,IAAS,CAAEl1B,YAAa,eAAgBk1B,QACvDoF,EAAa,CAACrhB,EAAOid,EAAMC,KAAgB,CAAEn2B,YAAa,eAAgBiZ,MAAO9M,OAAO8M,GAAQid,OAAMC,eACtGoE,EAAW,CAAC5D,EAAM5U,KAAU,CAAE/hB,YAAa,aAAc22B,OAAM5U,SAE/DgX,EAAWv2B,IAAC,CAAQu2B,SAAS,EAAM/1B,OAAQmJ,OAAO3J,KAElD2zB,EAAcjhB,GACnBA,EAAM9G,IAAKuuB,GACe,iBAArBA,EAAK38B,YAAuC28B,EAAKzH,IAE9C,CAACyH,IAGJtX,EAAQ,CAACnK,EAAOC,KAIrB,GAHAD,EAAQ/O,OAAO+O,MACfC,EAAMhP,OAAOgP,KAEAD,GAAQ,MAAM,IAAI0f,MAAM,0BAA0B1f,MAAUC,KAEzE,OAAO3a,MAAM2a,EAAM,EAAID,GACrBjK,KAAK,GACL7C,IAAI,CAACtO,EAAG6C,IAAM03B,EAAanf,EAAQvY,KAgBhC0yB,EAAY,CAACsH,EAAMjV,EAAU,CAAEvV,MAAO,MAC3C,MAAMyqB,EAAU1H,GAAQ,GAAG/mB,UAAU+mB,EAAI9mB,IAAKqG,GAd1B,EAACkoB,EAAMjV,KAC3B,GAAIiV,EAAK5D,QAAS,CACjB,MAAM5mB,EAAQuV,EAAQvV,MAGtB,OAFAuV,EAAQvV,OAASwqB,EAAK35B,OAEfxC,MAAMm8B,EAAK35B,QAChBiO,KAAK,GACL7C,IAAI,CAACtO,EAAG6C,IAAM03B,EAAaloB,EAAQxP,GACrC,CAED,MAAO,CAAC0yB,EAAUsH,EAAMjV,KAI6BmV,CAAapoB,EAAIiT,KAEtE,OAAQiV,EAAK38B,aACZ,IAAK,eACJ28B,EAAKzH,IAAM0H,EAAOD,EAAKzH,KAEvB,MACD,IAAK,eACJyH,EAAKzG,KAAO0G,EAAOD,EAAKzG,MACxByG,EAAKxG,WAAawG,EAAKxG,YAAcwG,EAAKxG,WAAW/nB,IAAIwuB,GAEzD,MACD,IAAK,aACJD,EAAKhG,KAAOtB,EAAUsH,EAAKhG,KAAMjP,GACjCiV,EAAK5a,KAAO6a,EAAOD,EAAK5a,MAK1B,OAAO4a,GAGR,IAAIvB,EACS,CACXpD,IAAK,EAEL0C,WAAY,SAAoBv7B,EAAKwL,GACpC,IAAIpJ,KAAKiR,GAAGskB,OAGX,MAAM,IAAI8D,MAAMz7B,GAFhBoC,KAAKiR,GAAGskB,OAAO4D,WAAWv7B,EAAKwL,EAIhC,EAGD4wB,SAAU,SAAUV,EAAOroB,GAiB1B,OAhBAjR,KAAKiR,GAAKA,GAAMjR,KAAKiR,IAAM,CAAA,EAC3BjR,KAAKu7B,OAASjC,EACdt5B,KAAKw7B,MAAQx7B,KAAKy7B,WAAaz7B,KAAK07B,MAAO,EAC3C17B,KAAKs4B,SAAWt4B,KAAKq4B,OAAS,EAC9Br4B,KAAKo4B,OAASp4B,KAAK27B,QAAU37B,KAAK2jB,MAAQ,GAC1C3jB,KAAK47B,eAAiB,CAAC,WACvB57B,KAAKi6B,OAAS,CACbc,WAAY,EACZE,aAAc,EACdD,UAAW,EACXE,YAAa,GAEVl7B,KAAKmmB,QAAQgU,SAChBn6B,KAAKi6B,OAAOnW,MAAQ,CAAC,EAAG,IAEzB9jB,KAAK67B,OAAS,EACP77B,IACP,EAGDs5B,MAAO,WACN,IAAIwC,EAAK97B,KAAKu7B,OAAO,GAkBrB,OAjBAv7B,KAAKo4B,QAAU0D,EACf97B,KAAKq4B,SACLr4B,KAAK67B,SACL77B,KAAK2jB,OAASmY,EACd97B,KAAK27B,SAAWG,EACJA,EAAGnY,MAAM,oBAEpB3jB,KAAKs4B,WACLt4B,KAAKi6B,OAAOe,aAEZh7B,KAAKi6B,OAAOiB,cAETl7B,KAAKmmB,QAAQgU,QAChBn6B,KAAKi6B,OAAOnW,MAAM,KAGnB9jB,KAAKu7B,OAASv7B,KAAKu7B,OAAOhyB,MAAM,GACzBuyB,CACP,EAGDC,MAAO,SAAUD,GAChB,IAAIxB,EAAMwB,EAAGr6B,OACTsS,EAAQ+nB,EAAGtpB,MAAM,iBAErBxS,KAAKu7B,OAASO,EAAK97B,KAAKu7B,OACxBv7B,KAAKo4B,OAASp4B,KAAKo4B,OAAO4D,OAAO,EAAGh8B,KAAKo4B,OAAO32B,OAAS64B,GAEzDt6B,KAAK67B,QAAUvB,EACf,IAAI2B,EAAWj8B,KAAK2jB,MAAMnR,MAAM,iBAChCxS,KAAK2jB,MAAQ3jB,KAAK2jB,MAAMqY,OAAO,EAAGh8B,KAAK2jB,MAAMliB,OAAS,GACtDzB,KAAK27B,QAAU37B,KAAK27B,QAAQK,OAAO,EAAGh8B,KAAK27B,QAAQl6B,OAAS,GAExDsS,EAAMtS,OAAS,IAClBzB,KAAKs4B,UAAYvkB,EAAMtS,OAAS,GAEjC,IAAIqC,EAAI9D,KAAKi6B,OAAOnW,MAepB,OAbA9jB,KAAKi6B,OAAS,CACbc,WAAY/6B,KAAKi6B,OAAOc,WACxBC,UAAWh7B,KAAKs4B,SAAW,EAC3B2C,aAAcj7B,KAAKi6B,OAAOgB,aAC1BC,YAAannB,GACTA,EAAMtS,SAAWw6B,EAASx6B,OAASzB,KAAKi6B,OAAOgB,aAAe,GAAKgB,EAASA,EAASx6B,OAASsS,EAAMtS,QAAQA,OAASsS,EAAM,GAAGtS,OAC/HzB,KAAKi6B,OAAOgB,aAAeX,GAG3Bt6B,KAAKmmB,QAAQgU,SAChBn6B,KAAKi6B,OAAOnW,MAAQ,CAAChgB,EAAE,GAAIA,EAAE,GAAK9D,KAAKq4B,OAASiC,IAEjDt6B,KAAKq4B,OAASr4B,KAAKo4B,OAAO32B,OACnBzB,IACP,EAGDk8B,KAAM,WAEL,OADAl8B,KAAKw7B,OAAQ,EACNx7B,IACP,EAGDm8B,OAAQ,WACP,OAAIn8B,KAAKmmB,QAAQiW,iBAChBp8B,KAAKy7B,YAAa,EAcZz7B,MAZCA,KAAKm5B,WACX,0BACEn5B,KAAKs4B,SAAW,GACjB,mIACAt4B,KAAK66B,eACN,CACCxX,KAAM,GACNqX,MAAO,KACP1mB,KAAMhU,KAAKs4B,UAKd,EAGD+D,KAAM,SAAUp7B,GACfjB,KAAK+7B,MAAM/7B,KAAK2jB,MAAMpa,MAAMtI,GAC5B,EAGDq7B,UAAW,WACV,IAAIC,EAAOv8B,KAAK27B,QAAQK,OAAO,EAAGh8B,KAAK27B,QAAQl6B,OAASzB,KAAK2jB,MAAMliB,QACnE,OAAQ86B,EAAK96B,OAAS,GAAK,MAAQ,IAAM86B,EAAKP,QAAQ,IAAIQ,QAAQ,MAAO,GACzE,EAGDC,cAAe,WACd,IAAIC,EAAO18B,KAAK2jB,MAIhB,OAHI+Y,EAAKj7B,OAAS,KACjBi7B,GAAQ18B,KAAKu7B,OAAOS,OAAO,EAAG,GAAKU,EAAKj7B,UAEjCi7B,EAAKV,OAAO,EAAG,KAAOU,EAAKj7B,OAAS,GAAK,MAAQ,KAAK+6B,QAAQ,MAAO,GAC7E,EAGD3B,aAAc,WACb,IAAI8B,EAAM38B,KAAKs8B,YACXxvB,EAAI,IAAI7N,MAAM09B,EAAIl7B,OAAS,GAAG4Q,KAAK,KACvC,OAAOsqB,EAAM38B,KAAKy8B,gBAAkB,KAAO3vB,EAAI,GAC/C,EAGD8vB,WAAY,SAAUjZ,EAAOkZ,GAC5B,IAAInC,EAAO3mB,EAAO+oB,EAwDlB,GAtDI98B,KAAKmmB,QAAQiW,kBAEhBU,EAAS,CACRxE,SAAUt4B,KAAKs4B,SACf2B,OAAQ,CACPc,WAAY/6B,KAAKi6B,OAAOc,WACxBC,UAAWh7B,KAAKg7B,UAChBC,aAAcj7B,KAAKi6B,OAAOgB,aAC1BC,YAAal7B,KAAKi6B,OAAOiB,aAE1B9C,OAAQp4B,KAAKo4B,OACbzU,MAAO3jB,KAAK2jB,MACZoZ,QAAS/8B,KAAK+8B,QACdpB,QAAS37B,KAAK27B,QACdtD,OAAQr4B,KAAKq4B,OACbwD,OAAQ77B,KAAK67B,OACbL,MAAOx7B,KAAKw7B,MACZD,OAAQv7B,KAAKu7B,OACbtqB,GAAIjR,KAAKiR,GACT2qB,eAAgB57B,KAAK47B,eAAeryB,MAAM,GAC1CmyB,KAAM17B,KAAK07B,MAER17B,KAAKmmB,QAAQgU,SAChB2C,EAAO7C,OAAOnW,MAAQ9jB,KAAKi6B,OAAOnW,MAAMva,MAAM,MAIhDwK,EAAQ4P,EAAM,GAAGA,MAAM,sBAEtB3jB,KAAKs4B,UAAYvkB,EAAMtS,QAExBzB,KAAKi6B,OAAS,CACbc,WAAY/6B,KAAKi6B,OAAOe,UACxBA,UAAWh7B,KAAKs4B,SAAW,EAC3B2C,aAAcj7B,KAAKi6B,OAAOiB,YAC1BA,YAAannB,EACVA,EAAMA,EAAMtS,OAAS,GAAGA,OAASsS,EAAMA,EAAMtS,OAAS,GAAGkiB,MAAM,UAAU,GAAGliB,OAC5EzB,KAAKi6B,OAAOiB,YAAcvX,EAAM,GAAGliB,QAEvCzB,KAAKo4B,QAAUzU,EAAM,GACrB3jB,KAAK2jB,OAASA,EAAM,GACpB3jB,KAAK+8B,QAAUpZ,EACf3jB,KAAKq4B,OAASr4B,KAAKo4B,OAAO32B,OACtBzB,KAAKmmB,QAAQgU,SAChBn6B,KAAKi6B,OAAOnW,MAAQ,CAAC9jB,KAAK67B,OAAS77B,KAAK67B,QAAU77B,KAAKq4B,SAExDr4B,KAAKw7B,OAAQ,EACbx7B,KAAKy7B,YAAa,EAClBz7B,KAAKu7B,OAASv7B,KAAKu7B,OAAOhyB,MAAMoa,EAAM,GAAGliB,QACzCzB,KAAK27B,SAAWhY,EAAM,GACtB+W,EAAQ16B,KAAKm4B,cAAcwB,KAAK35B,KAAMA,KAAKiR,GAAIjR,KAAM68B,EAAc78B,KAAK47B,eAAe57B,KAAK47B,eAAen6B,OAAS,IAChHzB,KAAK07B,MAAQ17B,KAAKu7B,SACrBv7B,KAAK07B,MAAO,GAEThB,EACH,OAAOA,EACD,GAAI16B,KAAKy7B,WAAY,CAE3B,IAAK,IAAIhX,KAAKqY,EACb98B,KAAKykB,GAAKqY,EAAOrY,GAElB,OAAO,CACP,CACD,OAAO,CACP,EAGDiY,KAAM,WACL,GAAI18B,KAAK07B,KACR,OAAO17B,KAAKy2B,IAMb,IAAIiE,EAAO/W,EAAOqZ,EAAWpsB,EAJxB5Q,KAAKu7B,SACTv7B,KAAK07B,MAAO,GAIR17B,KAAKw7B,QACTx7B,KAAKo4B,OAAS,GACdp4B,KAAK2jB,MAAQ,IAGd,IADA,IAAIsZ,EAAQj9B,KAAKk9B,gBACR97B,EAAI,EAAGA,EAAI67B,EAAMx7B,OAAQL,IAEjC,IADA47B,EAAYh9B,KAAKu7B,OAAO5X,MAAM3jB,KAAKi9B,MAAMA,EAAM77B,SAC5BuiB,GAASqZ,EAAU,GAAGv7B,OAASkiB,EAAM,GAAGliB,QAAS,CAGnE,GAFAkiB,EAAQqZ,EACRpsB,EAAQxP,EACJpB,KAAKmmB,QAAQiW,gBAAiB,CAEjC,IAAc,KADd1B,EAAQ16B,KAAK48B,WAAWI,EAAWC,EAAM77B,KAExC,OAAOs5B,EACD,GAAI16B,KAAKy7B,WAAY,CAC3B9X,GAAQ,EACR,QACA,CAEA,OAAO,CAER,CAAM,IAAK3jB,KAAKmmB,QAAQgX,KACxB,KAED,CAEF,OAAIxZ,GAEW,KADd+W,EAAQ16B,KAAK48B,WAAWjZ,EAAOsZ,EAAMrsB,MAE7B8pB,EAKW,KAAhB16B,KAAKu7B,OACDv7B,KAAKy2B,IAELz2B,KAAKm5B,WAAW,0BAA4Bn5B,KAAKs4B,SAAW,GAAK,yBAA2Bt4B,KAAK66B,eAAgB,CACvHxX,KAAM,GACNqX,MAAO,KACP1mB,KAAMhU,KAAKs4B,UAGb,EAGDmC,IAAK,WACJ,IAAI32B,EAAI9D,KAAK08B,OACb,OAAI54B,GAGI9D,KAAKy6B,KAEb,EAGD2C,MAAO,SAAeC,GACrBr9B,KAAK47B,eAAer8B,KAAK89B,EACzB,EAGDC,SAAU,WAET,OADQt9B,KAAK47B,eAAen6B,OAAS,EAC7B,EACAzB,KAAK47B,eAAe2B,MAEpBv9B,KAAK47B,eAAe,EAE5B,EAGDsB,cAAe,WACd,OAAIl9B,KAAK47B,eAAen6B,QAAUzB,KAAK47B,eAAe57B,KAAK47B,eAAen6B,OAAS,GAC3EzB,KAAKw9B,WAAWx9B,KAAK47B,eAAe57B,KAAK47B,eAAen6B,OAAS,IAAIw7B,MAErEj9B,KAAKw9B,WAAoB,QAAEP,KAEnC,EAGDQ,SAAU,SAAkBx8B,GAE3B,OADAA,EAAIjB,KAAK47B,eAAen6B,OAAS,EAAIuH,KAAK4K,IAAI3S,GAAK,KAC1C,EACDjB,KAAK47B,eAAe36B,GAEpB,SAER,EAGDy8B,UAAW,SAAmBL,GAC7Br9B,KAAKo9B,MAAMC,EACX,EAGDM,eAAgB,WACf,OAAO39B,KAAK47B,eAAen6B,MAC3B,EACD0kB,QAAS,CAAE,EACXgS,cAAe,SAAmBlnB,EAAI2sB,EAAKC,EAA2BC,GAErE,OAAQD,GACP,KAAK,EACJ,MACD,KAAK,EAML,KAAK,EAGL,KAAK,EACJ,OAAOD,EAAIxF,OAPZ,KAAK,EACJ,OAAO,GAQR,KAAK,EACJ,OAAO,EAGT,EACD6E,MAAO,CAAC,WAAY,sBAAuB,yBAA0B,mBAAoB,YAAa,UACtGO,WAAY,CAAEO,QAAS,CAAEd,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAIe,WAAW,KAKjE,SAASC,IACRj+B,KAAKiR,GAAK,EACV,CAGD,OANAskB,EAAOsE,MAAQA,EAIfoE,EAAO58B,UAAYk0B,EACnBA,EAAO0I,OAASA,EACT,IAAIA,CACX,CA31BY,GA81BO1I,GAAO0I,OAIc1I,GAAO0I,OAHzC,IAGPC,GAHmB,WAClB,OAAO3I,GAAOj3B,MAAM68B,MAAM5F,GAAQqE,UACnC,ECp6BA,IAAYuE,GAOAC,IAPZ,SAAYD,GACXA,EAAAA,EAAA,QAAA,GAAA,UACAA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,QAAA,GAAA,UACAA,EAAAA,EAAA,OAAA,GAAA,QACA,CALD,CAAYA,KAAAA,GAKX,CAAA,IAED,SAAYC,GACXA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,OAAA,GAAA,SACAA,EAAAA,EAAA,MAAA,GAAA,OACA,CAJD,CAAYA,KAAAA,GAIX,CAAA,IAkBD,MAAMC,GAAe70B,IAAU,CAAQkF,KAAMyvB,GAAeG,QAAS1lB,MAAOpP,IAEtE+0B,GAA2D,CAChE,IAAKJ,GAAeK,MACpB,IAAKL,GAAeK,MACpB,IAAKL,GAAeM,QACpB,IAAKN,GAAeM,QACpB,IAAKN,GAAeO,OACpB,IAAKP,GAAeO,QAMfC,GAA6D,CAClE,IAAKP,GAAqBQ,MAC1B,IAAKR,GAAqBS,MAC1B,IAAKT,GAAqBU,QA+BrBC,GAAY,IACJphC,KAAKqL,KAAKg2B,SAASjhC,WAAWi+B,OAAO,IAAIQ,QAAQ,KAAM,IAExDhqB,MAAM,IAAIyE,UAAU1N,MAAM,EAAG,GAAG8I,KAAK,IAa5C4sB,GAAoB,CAAC7sB,EAAoBuhB,KAC9C,IAAIuL,EAAUvL,EACd,KAAOuL,EAAQz9B,QAAQ,CACtB,MAAM09B,EAAOD,EAAQE,QACfC,EAAQd,GAAoBY,GAClC,GAAIE,EAAO,CACV,GA1DkB,MA0DD7+B,SAAS2+B,IAASE,IAAUjtB,EAAO1D,KAAM,MAE1D,GA7DiB,MA6DDlO,SAAS2+B,GAAO,CAC/B,MAAM/yB,EAAQ,CAAEsC,KAAM2wB,EAAOC,MAAO10B,OAAOwE,SAASgD,EAAOktB,OAASltB,EAAOktB,MAAQ,EAAI,GACvFJ,EAAUD,GAAkB7yB,EAAO8yB,GAEnC9sB,EAAOmtB,KAAOntB,EAAOmtB,MAAQ,GAC7BntB,EAAOmtB,KAAKhgC,KAAK6M,EACjB,CACD,MACAgG,EAAOmtB,KAAOntB,EAAOmtB,MAAQ,GAC7BntB,EAAOmtB,KAAKhgC,KAAK8+B,GAAYc,GAE9B,CAED,KAAO/sB,EAAO1D,OAASyvB,GAAeG,SAAWlsB,EAAOmtB,MAA+B,IAAvBntB,EAAOmtB,KAAK99B,QAAc,CACzF,MAAMyP,EAAMkB,EAAOmtB,KAAK,GACxBntB,EAAO1D,KAAOwC,EAAIxC,KAClB0D,EAAOmtB,KAAOruB,EAAIquB,KAClBntB,EAAOwG,MAAQ1H,EAAI0H,MACnBxG,EAAOktB,MAAQpuB,EAAIouB,KACnB,CAED,KAAOltB,EAAOmtB,MAA+B,IAAvBntB,EAAOmtB,KAAK99B,QAAgB2Q,EAAOmtB,KAAK,GAAG7wB,OAASyvB,GAAeG,SAAS,CACjG,MAAMptB,EAAMkB,EAAOmtB,KAAK,GACxBntB,EAAOmtB,KAAOruB,EAAIquB,KAClBntB,EAAOwG,MAAQ1H,EAAI0H,KACnB,CAID,OAFAxG,EAAOotB,MAAQptB,EAAO1D,OAASyvB,GAAeK,OAASpsB,EAAOmtB,MAAQntB,EAAOmtB,KAAKrrB,MAAOhD,GAAQA,EAAI0H,OAE9FsmB,GAGFO,GAAarzB,GACdA,EAAMwM,MAAcxM,EAAMwM,MACrBxM,EAAMmzB,KAAaE,GAAUrzB,EAAMmzB,KAAK,SAA5C,EAGAG,GAAatzB,GACdA,EAAMwM,MAAcxM,EAAMwM,MACrBxM,EAAMmzB,KAAaG,GAAUtzB,EAAMmzB,KAAKnzB,EAAMmzB,KAAK99B,OAAS,SAAhE,EAQAk+B,GAAY,CAACvzB,EAAmBtN,KACrCA,EANuB,CAACsN,GACpBA,EAAMwM,MAAcxM,EAAMwM,MACrBxM,EAAMmzB,KAAa,GAAGE,GAAUrzB,MAAUszB,GAAUtzB,UAAxD,EAIAwzB,CAASxzB,IAAUA,EAEpBA,EAAMmzB,MAAMnzB,EAAMmzB,KAAKlgC,QAAS6R,GAAQyuB,GAAUzuB,EAAKpS,KAS5D,MAAM+gC,YAQL,WAAA1/B,CAAY2/B,GAEX,MAAMvtB,EAAM,IAAI9F,IAChBqzB,EAAIzgC,QAAQ,CAAC+7B,EAAMh6B,KAClBg6B,EAAK5xB,GAzFe,EAACpK,EAAkBwR,EAAemvB,KACxD,IAAIC,EAAOD,EAIX,IAHKC,EACI5gC,EAAIiR,IAAI2vB,KAAOA,GAAQ,IAAMpvB,EAAM7S,YADjCiiC,EAAOpvB,EAAM7S,WAGjBqB,EAAIiR,IAAI2vB,IAAOA,GAAQ,IAAMjB,KAEpC,OAAOiB,GAkFKC,CAAe1tB,EAAKnR,EAAI,EAAGg6B,EAAK5xB,IAC1C+I,EAAItC,IAAImrB,EAAK5xB,MAEdxJ,KAAKkgC,SAAWJ,EAAIjzB,IAAKuuB,GAASA,EAAK5xB,IACvCxJ,KAAKmgC,aAAeL,EAAIv2B,MAAM,EAAGu2B,EAAIr+B,OAAS,GAAGoL,IAAKuuB,GAAUA,EAAKgF,YAAczB,GAAiBvD,EAAKgF,aAAehC,GAAqBQ,OAG7I,MAAMjL,EAAM,GAAG/mB,UAAUkzB,EAAIjzB,IAAKuuB,GAAS,IAAIA,EAAKiF,WAAYjF,EAAK5xB,MAAO4xB,EAAKkF,eACjFtgC,KAAKoM,MAAQ,CAAEsC,KAAMyvB,GAAeG,SACpCW,GAAkBj/B,KAAKoM,MAAOunB,GAE9B,MAAM70B,EAAO,CAAA,EACb6gC,GAAU3/B,KAAKoM,MAAOtN,GACtBkB,KAAKqV,OAAS7V,OAAOC,QAAQX,GAAM+N,IAAI,EAAEnN,EAAK0M,MAC7C,IAAImG,EAAM7S,EAAI8S,MAAM,KACD,IAAfD,EAAI9Q,SAAc8Q,EAAM,CAACA,EAAI,GAAIA,EAAI,KAGzC,MAAO,CACNnG,QACA0X,MAJavR,EAAI1F,IAAKrD,GAAOxJ,KAAKkgC,SAASxyB,QAAQlE,IAKnD9J,SAIFM,KAAKugC,UAAY,IAAIxhC,GACrB,CAED,eAAIyhC,GACH,OAAKxgC,KAAKkgC,SAEHlgC,KAAKkgC,SAASz+B,OAFM,IAG3B,CAED,cAAIg/B,GACH,MAAMC,EAAS1gC,KAAKqV,OAAO9U,OAAQ8K,GAAMA,EAAEe,MAAMozB,OAYjD,OAXcx/B,KAAKqV,OAAO9U,OAAQ8K,IACjC,GAAIA,EAAEe,MAAMozB,MAAO,OAAO,EAE1B,GAAIn0B,EAAEyY,MAAM,KAAOzY,EAAEyY,MAAM,GAAI,CAC9B,MAAMlT,EAAQvF,EAAEyY,MAAM,GACtB,OAAQ4c,EAAO/vB,KAAMtF,GAAMA,EAAEyY,MAAM,IAAMlT,GAASvF,EAAEyY,MAAM,IAAMlT,EAChE,CAED,OAAO,GAIR,CAED,oBAAI+vB,GACH,MAAMtrB,EAAqB,GACrBurB,EAAWx0B,IACZA,EAAMozB,MAAOnqB,EAAO9V,KAAK6M,EAAMmzB,KAAK1yB,IAAKqE,GAAQA,EAAI0H,QAChDxM,EAAMwM,MAAOvD,EAAO9V,KAAK,CAAC6M,EAAMwM,QAChCxM,EAAMmzB,MAAMnzB,EAAMmzB,KAAKlgC,QAAS6R,GAAQ0vB,EAAQ1vB,KAI1D,OAFA0vB,EAAQ5gC,KAAKoM,OAENiJ,CACP,CAED,kBAAAwrB,CAAmBC,EAAiBC,GACnC,GAAIA,GAAaD,EAAS,OAAO,KAEjC,IAAIE,EAAM5C,GAAqBS,MAC/B,IAAK,IAAIz9B,EAAI0/B,EAAS1/B,EAAI2/B,EAAW3/B,IAAK4/B,EAAMh4B,KAAKgB,IAAIg3B,EAAKhhC,KAAKmgC,aAAa/+B,IAEhF,OAAO4/B,CACP,CAED,qBAAOC,CAAepN,EAAqBqN,GAC1C,MAAMhB,EAAWrM,EAAOqM,SAAS3/B,OAAO,CAAChC,EAAG6C,IAAM8/B,EAAQ,GAAK9/B,GAC/D,GAAI8+B,EAASz+B,SAAWoyB,EAAOqM,SAASz+B,OACvC,MAAO,CACNy+B,SAAUrM,EAAOqM,SACjBC,aAActM,EAAOsM,aACrB9qB,OAAQwe,EAAOxe,QAIjB,MAAMA,EAASwe,EAAOxe,OACpBxI,IAAKxB,KAASkH,IAAKshB,EAAOqM,SAAS32B,MAAM8B,EAAEyY,MAAM,GAAIzY,EAAEyY,MAAM,GAAK,GAAGvjB,OAAQiJ,GAAO02B,EAAS1/B,SAASgJ,OAAS6B,KAC/G9K,OAAO,EAAGgS,SAAUA,EAAI9Q,QACxBoL,IACA,EAAG0F,SAAQlH,MACT,CACA3L,IAAK2L,EAAE3L,IACP0M,MAAOf,EAAEe,MACT0X,MAAO,CAACoc,EAASxyB,QAAQ6E,EAAI,IAAK2tB,EAASxyB,QAAQ6E,EAAIA,EAAI9Q,OAAS,QAIlE0+B,EAAeD,EAAS32B,MAAM,EAAG22B,EAASz+B,OAAS,GAAGoL,IAAI,CAACrD,EAAIpI,KACpE,MAAM+/B,EAASjB,EAAS9+B,EAAI,GAC5B,OAAOyyB,EAAOgN,mBAAmBhN,EAAOqM,SAASxyB,QAAQlE,GAAKqqB,EAAOqM,SAASxyB,QAAQyzB,MAGvF,MAAO,CACNjB,WACAC,eACA9qB,SAED,CAED,IAAA6rB,CAAKA,GAGJ,OAFKlhC,KAAKugC,UAAUvhC,IAAIkiC,IAAOlhC,KAAKugC,UAAUnhC,IAAI8hC,EAAMrB,YAAYoB,eAAejhC,KAAMkhC,IAElFlhC,KAAKugC,UAAUvhC,IAAIkiC,EAC1B,CAMD,eAAAE,CAAgBC,EAAiBC,GAAU,GAE1C,MAAMC,EAAcvhC,KAAKkgC,SACvBrzB,IAAI,CAACtO,EAAG6C,IAAOA,EAAIigC,EAAK5/B,OAAS4/B,EAAKjgC,GAAK,MAC3C4K,OAAO,CAACwD,EAAQxM,EAAG5B,KACnBoO,EAAOxP,KAAKkgC,SAAS9+B,IAAM4B,EACpBwM,GACL,CAAkC,GAEhCgyB,EAAap1B,IAClB,GAAIA,EAAMwM,MAAO,MAAO,CAAC2oB,EAAYn1B,EAAMwM,OAASxM,EAAMwM,MAAQ,KAAmC,OAA7B2oB,EAAYn1B,EAAMwM,QAE1F,MAAM2mB,EAAOnzB,EAAMmzB,KAAK1yB,IAAKqE,GAAQswB,EAAUtwB,IACzCuwB,EAASlC,EACb1yB,IAAKyI,GAASA,EAAK,IACnB/U,OAAOspB,SACPxX,KAAK,KACDqvB,EAAUnC,EAAK5uB,KAAK,EAAEpS,EAAGmjC,KAAaA,GAEtCzN,EAAOwN,EAjQI,EAAC/yB,EAAsBgzB,GAAmB,KAC7D,GAAIhzB,IAASyvB,GAAeG,QAAS,OAAQqD,GAAUA,EAEvD,GAAID,EACH,OAAQhzB,GACP,KAAKyvB,GAAeK,MACnB,OAAQmD,GAAU,IAAIA,IACvB,KAAKxD,GAAeM,QACnB,OAAQkD,GAAU,IAAIA,IACvB,KAAKxD,GAAeO,OACnB,OAAQiD,GAAU,IAAIA,IACvB,QACC,OAAQA,GAAUA,EAIrB,OAAQjzB,GACP,KAAKyvB,GAAeK,MACnB,OAAQmD,GAAU,IAAIA,KACvB,KAAKxD,GAAeM,QACnB,OAAQkD,GAAU,IAAIA,KACvB,KAAKxD,GAAeO,OACnB,OAAQiD,GAAU,IAAIA,KACvB,QACC,OAAQA,GAAUA,IAyOIC,CAAYx1B,EAAMsC,KAAMgzB,EAAxBE,CAAiCH,GAAU,KAEjE,MAAO,CAACxN,EAAMyN,IAGf,IAAKzN,GAAQuN,EAAUxhC,KAAKoM,OAI5B,OAHA6nB,EAAOA,GAAQ,GACVqN,IAASrN,EAAOA,EAAKuI,QAAQ,UAAW,KAEtCvI,CACP,ECzPF,IAAIsB,GAAS,WACZ,IAAI12B,EAAI,SAAU4lB,EAAG+Q,EAAG32B,EAAG42B,GACzB,IAAK52B,EAAIA,GAAK,GAAI42B,EAAIhR,EAAEhjB,OAAQg0B,IAAK52B,EAAE4lB,EAAEgR,IAAMD,GAC/C,OAAO32B,CACR,EACA62B,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,IACVC,EAAM,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAC9CC,EAAM,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAC/ByL,EAAM,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAC3CC,EAAM,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAC/BvM,EAAS,CACZc,MAAO,WAAmB,EAC1BplB,GAAI,CAAE,EACNqlB,SAAU,CACTvrB,MAAO,EACPwrB,aAAc,EACdwL,aAAc,EACdtL,IAAK,EACL9C,IAAK,EACLqO,OAAQ,EACRC,OAAQ,EACRC,QAAS,EACTC,WAAY,GACZ,IAAK,GACL,IAAK,GACL,IAAK,GACLC,YAAa,GACb,IAAK,GACL,IAAK,GACL,IAAK,GACLC,YAAa,GACbC,aAAc,GACdlC,YAAa,GACb,IAAK,GACL,IAAK,GACL,IAAK,GACLmC,GAAI,GACJC,OAAQ,GACRzK,QAAS,EACTC,KAAM,GAEPC,WAAY,CAAE,EAAG,QAAS,EAAG,MAAO,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,MACzHC,aAAc,CACb,EACA,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,GAAI,GACL,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,IAELC,cAAe,SAAmBC,EAAQC,EAAQC,EAAUrnB,EAAIsnB,EAAyBC,EAAiBC,GAGzG,IAAIC,EAAKF,EAAG/2B,OAAS,EACrB,OAAQ82B,GACP,KAAK,EACJ,OAAOC,EAAGE,EAAK,GAGhB,KAAK,EACJF,EAAGE,GAAIgE,OAEP18B,KAAK24B,EAAIH,EAAGE,GAAIz4B,SAEhB,MACD,KAAK,EACJD,KAAK24B,EAAI,IAAI8J,IAEb,MACD,KAAK,GACL,KAAK,GACJziC,KAAK24B,EAAI,CAACH,EAAGE,IAEb,MACD,KAAK,GACL,KAAK,GACJ14B,KAAK24B,EAAI,IAAIH,EAAGE,EAAK,GAAIF,EAAGE,IAE5B,MACD,KAAK,GACJ14B,KAAK24B,EAAI,IAAI8J,IACbziC,KAAK24B,EAAE1X,IAAI7f,EAAEo3B,EAAGE,IAEhB,MACD,KAAK,GACL,KAAK,GACJF,EAAGE,EAAK,GAAGgE,OACXlE,EAAGE,EAAK,GAAGzX,IAAI7f,EAAEo3B,EAAGE,IAEpB14B,KAAK24B,EAAIH,EAAGE,EAAK,GAEjB,MACD,KAAK,GACL,KAAK,GACJF,EAAGE,EAAK,GAAGzX,IAAI7f,EAAEo3B,EAAGE,IAEpB14B,KAAK24B,EAAIH,EAAGE,EAAK,GAEjB,MACD,KAAK,GACJ14B,KAAK24B,EAAI,IAAI8J,IACbziC,KAAK24B,EAAE1X,IAAIyhB,GAAGlK,EAAGE,IAEjB,MACD,KAAK,GACL,KAAK,GACJF,EAAGE,EAAK,GAAGgE,OACXlE,EAAGE,EAAK,GAAGzX,IAAIyhB,GAAGlK,EAAGE,IAErB14B,KAAK24B,EAAIH,EAAGE,EAAK,GAEjB,MACD,KAAK,GACJF,EAAGE,EAAK,GAAGzX,IAAIyhB,GAAGlK,EAAGE,IAErB14B,KAAK24B,EAAIH,EAAGE,EAAK,GAEjB,MACD,KAAK,GACL,KAAK,GACL,KAAK,GACJF,EAAGE,EAAK,GAAGzX,IAAI0hB,GAAGnK,EAAGE,IAErB14B,KAAK24B,EAAIH,EAAGE,EAAK,GAEjB,MACD,KAAK,GACJ14B,KAAK24B,EAAI,IAAI8J,IACbziC,KAAK24B,EAAE1X,IAAI+f,IAAIxI,EAAGE,IAClB14B,KAAK24B,EAAE+D,OAEP,MACD,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACJlE,EAAGE,EAAK,GAAGzX,IAAI+f,IAAIxI,EAAGE,IACtBF,EAAGE,EAAK,GAAGgE,OAEX18B,KAAK24B,EAAIH,EAAGE,EAAK,GAInB,EACDO,MAAO,CACN,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAIvD,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,EAAG,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,CAAC,EAAG,GAAI,GAAI,GAC9I,CAAE,EAAG,CAAC,IACN,CAAE,EAAG,CAAC,EAAG,KACT,CAAE,EAAG,CAAC,EAAG,IACT,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,GAAI,GAAIL,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAII,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIL,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,CAAC,EAAG,KAC9I,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,GAAI,GAAIL,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,CAAC,EAAG,KACnG,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,GAAI,GAAIL,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAII,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIL,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,CAAC,EAAG,KAC9Il3B,EAAEs3B,EAAK,CAAC,EAAG,KACX,CAAE,GAAI,GAAI,GAAIH,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAIL,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,CAAC,EAAG,KACxFl3B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEu3B,EAAK,CAAC,EAAG,IAAK,CAAE,GAAI,GAAI,GAAIV,EAAK,GAAIC,EAAK,GAAIC,IAChD/2B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEgjC,EAAK,CAAC,EAAG,KACXhjC,EAAEgjC,EAAK,CAAC,EAAG,IACXhjC,EAAEgjC,EAAK,CAAC,EAAG,IACXhjC,EAAEgjC,EAAK,CAAC,EAAG,IACX,CAAE,EAAG,CAAC,EAAG,IACThjC,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEijC,EAAK,CAAC,EAAG,IAAK,CAAE,GAAI,GAAI,GAAI9L,EAAK,GAAIC,EAAK,GAAIC,IAChDr3B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEu3B,EAAK,CAAC,EAAG,IAAK,CAAE,GAAI,GAAI,GAAIV,EAAK,GAAIC,EAAK,GAAIC,IAChD/2B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEu3B,EAAK,CAAC,EAAG,IAAK,CAAE,GAAI,GAAI,GAAIV,EAAK,GAAIC,EAAK,GAAIC,IAChD/2B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEijC,EAAK,CAAC,EAAG,IAAK,CAAE,GAAI,GAAI,GAAI9L,EAAK,GAAIC,EAAK,GAAIC,IAChDr3B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEu3B,EAAK,CAAC,EAAG,IAAK,CAAE,GAAI,GAAI,GAAIV,EAAK,GAAIC,EAAK,GAAIC,IAChD/2B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEijC,EAAK,CAAC,EAAG,IAAK,CAAE,GAAI,GAAI,GAAI9L,EAAK,GAAIC,EAAK,GAAIC,IAChDr3B,EAAEs3B,EAAK,CAAC,EAAG,KACXt3B,EAAEgjC,EAAK,CAAC,EAAG,KACXhjC,EAAEs3B,EAAK,CAAC,EAAG,MAEZ+C,eAAgB,CAAE,EAAG,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,IACrCC,WAAY,SAAoBv7B,EAAKwL,GACpC,IAAIA,EAAKgwB,YAEF,CACN,IAAIruB,EAAQ,IAAIsuB,MAAMz7B,GAEtB,MADAmN,EAAM3B,KAAOA,EACP2B,CACN,CALA/K,KAAKq2B,MAAMz4B,EAMZ,EACDU,MAAO,SAAeg7B,GACjB,IAAA7J,EAAOzvB,KACVu5B,EAAQ,CAAC,GAETC,EAAS,CAAC,MACVC,EAAS,GACTR,EAAQj5B,KAAKi5B,MACbb,EAAS,GACTE,EAAW,EACXD,EAAS,EAINqB,EAAOD,EAAOlwB,MAAMowB,KAAKC,UAAW,GACpCC,EAAQr6B,OAAOqB,OAAOb,KAAK65B,OAC3BC,EAAc,CAAE7oB,GAAI,CAAA,GACxB,IAAK,IAAIwT,KAAKzkB,KAAKiR,GACdzR,OAAO6B,UAAU04B,eAAeJ,KAAK35B,KAAKiR,GAAIwT,KACjDqV,EAAY7oB,GAAGwT,GAAKzkB,KAAKiR,GAAGwT,IAG9BoV,EAAMG,SAASV,EAAOQ,EAAY7oB,IAClC6oB,EAAY7oB,GAAG4oB,MAAQA,EACvBC,EAAY7oB,GAAGskB,OAASv1B,UACG,IAAhB65B,EAAMI,SAChBJ,EAAMI,OAAS,IAEhB,IAAIC,EAAQL,EAAMI,OAClBR,EAAOl6B,KAAK26B,GACZ,IAAIC,EAASN,EAAM1T,SAAW0T,EAAM1T,QAAQgU,OACH,mBAA9BL,EAAY7oB,GAAGkoB,WACzBn5B,KAAKm5B,WAAaW,EAAY7oB,GAAGkoB,WAEjCn5B,KAAKm5B,WAAa35B,OAAO46B,eAAep6B,MAAMm5B,WA0B/C,IAnBc,IAQV7V,EAEH+W,EACAzqB,EAEA9L,EAEAnC,EACA24B,EACAC,EACAC,EAlBiBC,EAAM,WACvB,IAAIC,EAKJ,MAHqB,iBADrBA,EAAQb,EAAMY,OA9BR,KAgCLC,EAAQjL,EAAK6G,SAASoE,IAAUA,GAE1BA,CACR,EAOCC,EAAQ,CAAE,IAKE,CAUZ,GATAN,EAAQd,EAAMA,EAAM93B,OAAS,GACzBzB,KAAKk5B,eAAemB,GACvBzqB,EAAS5P,KAAKk5B,eAAemB,IAEzB/W,UACHA,EAASmX,KAEV7qB,EAASqpB,EAAMoB,IAAUpB,EAAMoB,GAAO/W,SAEjB,IAAX1T,IAA2BA,EAAOnO,SAAWmO,EAAO,GAAI,CAClE,IAAIgrB,EAAS,GAEb,IAAKj5B,KADL64B,EAAW,GACDvB,EAAMoB,GACXr6B,KAAKi4B,WAAWt2B,IAAMA,EA9DnB,GA+DN64B,EAASj7B,KAAK,IAAMS,KAAKi4B,WAAWt2B,GAAK,KAI1Ci5B,EADGf,EAAMgB,aAER,wBACCvC,EAAW,GACZ,MACAuB,EAAMgB,eACN,eACAL,EAASnoB,KAAK,MACd,WACCrS,KAAKi4B,WAAW3U,IAAWA,GAC5B,IAGA,wBACCgV,EAAW,GACZ,iBAhFG,GAiFFhV,EAAgB,eAAiB,KAAOtjB,KAAKi4B,WAAW3U,IAAWA,GAAU,KAEhFtjB,KAAKm5B,WAAWyB,EAAQ,CACvBvX,KAAMwW,EAAMlW,MACZ+W,MAAO16B,KAAKi4B,WAAW3U,IAAWA,EAClCtP,KAAM6lB,EAAMvB,SACZwC,IAAKZ,EACLM,SAAUA,GAEX,CACD,GAAI5qB,EAAO,aAAc3Q,OAAS2Q,EAAOnO,OAAS,EACjD,MAAM,IAAI43B,MAAM,oDAAsDgB,EAAQ,YAAc/W,GAE7F,OAAQ1T,EAAO,IACd,KAAK,EACJ2pB,EAAMh6B,KAAK+jB,GACXkW,EAAOj6B,KAAKs6B,EAAMzB,QAClBqB,EAAOl6B,KAAKs6B,EAAMI,QAClBV,EAAMh6B,KAAKqQ,EAAO,IAClB0T,EAAS,KAER+U,EAASwB,EAAMxB,OACfD,EAASyB,EAAMzB,OACfE,EAAWuB,EAAMvB,SACjB4B,EAAQL,EAAMI,OAQf,MACD,KAAK,EAaJ,GAZAK,EAAMt6B,KAAKk4B,aAAatoB,EAAO,IAAI,GACnC+qB,EAAMhC,EAAIa,EAAOA,EAAO/3B,OAAS64B,GACjCK,EAAMlC,GAAK,CACVsC,WAAYtB,EAAOA,EAAOh4B,QAAU64B,GAAO,IAAIS,WAC/CC,UAAWvB,EAAOA,EAAOh4B,OAAS,GAAGu5B,UACrCC,aAAcxB,EAAOA,EAAOh4B,QAAU64B,GAAO,IAAIW,aACjDC,YAAazB,EAAOA,EAAOh4B,OAAS,GAAGy5B,aAEpCf,IACHQ,EAAMlC,GAAG3U,MAAQ,CAAC2V,EAAOA,EAAOh4B,QAAU64B,GAAO,IAAIxW,MAAM,GAAI2V,EAAOA,EAAOh4B,OAAS,GAAGqiB,MAAM,UAG/E,KADjBhgB,EAAI9D,KAAKm4B,cAAcgD,MAAMR,EAAO,CAACvC,EAAQC,EAAQC,EAAUwB,EAAY7oB,GAAIrB,EAAO,GAAI4pB,EAAQC,GAAQ7sB,OAAO8sB,KAEhH,OAAO51B,EAEJw2B,IACHf,EAAQA,EAAMhwB,MAAM,GAAI,EAAI+wB,EAAM,GAClCd,EAASA,EAAOjwB,MAAM,GAAI,EAAI+wB,GAC9Bb,EAASA,EAAOlwB,MAAM,GAAI,EAAI+wB,IAE/Bf,EAAMh6B,KAAKS,KAAKk4B,aAAatoB,EAAO,IAAI,IACxC4pB,EAAOj6B,KAAKo7B,EAAMhC,GAClBc,EAAOl6B,KAAKo7B,EAAMlC,IAClB8B,EAAWtB,EAAMM,EAAMA,EAAM93B,OAAS,IAAI83B,EAAMA,EAAM93B,OAAS,IAC/D83B,EAAMh6B,KAAKg7B,GACX,MACD,KAAK,EACJ,OAAO,EAET,CACD,OAAO,CACP,GAGF,MAAMqI,KACL,WAAAziC,GACCH,KAAKwJ,GAAK,KACVxJ,KAAKqgC,WAAa,GAClBrgC,KAAKsgC,YAAc,GACnBtgC,KAAKogC,YAAc,IACnB,CAED,CAAAh/B,CAAEoI,GAED,OADAxJ,KAAKwJ,GAAKA,EACHxJ,IACP,CAED,EAAA0iC,CAAGrC,GAEF,OADArgC,KAAKqgC,WAAaA,EACXrgC,IACP,CAED,EAAA2iC,CAAGrC,GAEF,OADAtgC,KAAKsgC,YAAcA,EACZtgC,IACP,CAED,GAAAghC,CAAIZ,GAEH,OADApgC,KAAKogC,YAAcA,EACZpgC,IACP,EAGF,MAAMyiC,IACL,WAAAtiC,GACCH,KAAK20B,KAAO,GACZ30B,KAAKihB,IAAM,IAAI2hB,IACf,CAED,IAAAlG,GAGC,OAFA18B,KAAK20B,KAAKp1B,KAAKS,KAAKihB,KACpBjhB,KAAKihB,IAAM,IAAI2hB,KACR5iC,IACP,CAED,MAAAC,GACC,OAAOD,KAAK20B,IACZ,EAGF,IAAIkF,EACS,CACXpD,IAAK,EAEL0C,WAAY,SAAoBv7B,EAAKwL,GACpC,IAAIpJ,KAAKiR,GAAGskB,OAGX,MAAM,IAAI8D,MAAMz7B,GAFhBoC,KAAKiR,GAAGskB,OAAO4D,WAAWv7B,EAAKwL,EAIhC,EAGD4wB,SAAU,SAAUV,EAAOroB,GAiB1B,OAhBAjR,KAAKiR,GAAKA,GAAMjR,KAAKiR,IAAM,CAAA,EAC3BjR,KAAKu7B,OAASjC,EACdt5B,KAAKw7B,MAAQx7B,KAAKy7B,WAAaz7B,KAAK07B,MAAO,EAC3C17B,KAAKs4B,SAAWt4B,KAAKq4B,OAAS,EAC9Br4B,KAAKo4B,OAASp4B,KAAK27B,QAAU37B,KAAK2jB,MAAQ,GAC1C3jB,KAAK47B,eAAiB,CAAC,WACvB57B,KAAKi6B,OAAS,CACbc,WAAY,EACZE,aAAc,EACdD,UAAW,EACXE,YAAa,GAEVl7B,KAAKmmB,QAAQgU,SAChBn6B,KAAKi6B,OAAOnW,MAAQ,CAAC,EAAG,IAEzB9jB,KAAK67B,OAAS,EACP77B,IACP,EAGDs5B,MAAO,WACN,IAAIwC,EAAK97B,KAAKu7B,OAAO,GAkBrB,OAjBAv7B,KAAKo4B,QAAU0D,EACf97B,KAAKq4B,SACLr4B,KAAK67B,SACL77B,KAAK2jB,OAASmY,EACd97B,KAAK27B,SAAWG,EACJA,EAAGnY,MAAM,oBAEpB3jB,KAAKs4B,WACLt4B,KAAKi6B,OAAOe,aAEZh7B,KAAKi6B,OAAOiB,cAETl7B,KAAKmmB,QAAQgU,QAChBn6B,KAAKi6B,OAAOnW,MAAM,KAGnB9jB,KAAKu7B,OAASv7B,KAAKu7B,OAAOhyB,MAAM,GACzBuyB,CACP,EAGDC,MAAO,SAAUD,GAChB,IAAIxB,EAAMwB,EAAGr6B,OACTsS,EAAQ+nB,EAAGtpB,MAAM,iBAErBxS,KAAKu7B,OAASO,EAAK97B,KAAKu7B,OACxBv7B,KAAKo4B,OAASp4B,KAAKo4B,OAAO4D,OAAO,EAAGh8B,KAAKo4B,OAAO32B,OAAS64B,GAEzDt6B,KAAK67B,QAAUvB,EACf,IAAI2B,EAAWj8B,KAAK2jB,MAAMnR,MAAM,iBAChCxS,KAAK2jB,MAAQ3jB,KAAK2jB,MAAMqY,OAAO,EAAGh8B,KAAK2jB,MAAMliB,OAAS,GACtDzB,KAAK27B,QAAU37B,KAAK27B,QAAQK,OAAO,EAAGh8B,KAAK27B,QAAQl6B,OAAS,GAExDsS,EAAMtS,OAAS,IAClBzB,KAAKs4B,UAAYvkB,EAAMtS,OAAS,GAEjC,IAAIqC,EAAI9D,KAAKi6B,OAAOnW,MAepB,OAbA9jB,KAAKi6B,OAAS,CACbc,WAAY/6B,KAAKi6B,OAAOc,WACxBC,UAAWh7B,KAAKs4B,SAAW,EAC3B2C,aAAcj7B,KAAKi6B,OAAOgB,aAC1BC,YAAannB,GACTA,EAAMtS,SAAWw6B,EAASx6B,OAASzB,KAAKi6B,OAAOgB,aAAe,GAAKgB,EAASA,EAASx6B,OAASsS,EAAMtS,QAAQA,OAASsS,EAAM,GAAGtS,OAC/HzB,KAAKi6B,OAAOgB,aAAeX,GAG3Bt6B,KAAKmmB,QAAQgU,SAChBn6B,KAAKi6B,OAAOnW,MAAQ,CAAChgB,EAAE,GAAIA,EAAE,GAAK9D,KAAKq4B,OAASiC,IAEjDt6B,KAAKq4B,OAASr4B,KAAKo4B,OAAO32B,OACnBzB,IACP,EAGDk8B,KAAM,WAEL,OADAl8B,KAAKw7B,OAAQ,EACNx7B,IACP,EAGDm8B,OAAQ,WACP,OAAIn8B,KAAKmmB,QAAQiW,iBAChBp8B,KAAKy7B,YAAa,EAcZz7B,MAZCA,KAAKm5B,WACX,0BACEn5B,KAAKs4B,SAAW,GACjB,mIACAt4B,KAAK66B,eACN,CACCxX,KAAM,GACNqX,MAAO,KACP1mB,KAAMhU,KAAKs4B,UAKd,EAGD+D,KAAM,SAAUp7B,GACfjB,KAAK+7B,MAAM/7B,KAAK2jB,MAAMpa,MAAMtI,GAC5B,EAGDq7B,UAAW,WACV,IAAIC,EAAOv8B,KAAK27B,QAAQK,OAAO,EAAGh8B,KAAK27B,QAAQl6B,OAASzB,KAAK2jB,MAAMliB,QACnE,OAAQ86B,EAAK96B,OAAS,GAAK,MAAQ,IAAM86B,EAAKP,QAAQ,IAAIQ,QAAQ,MAAO,GACzE,EAGDC,cAAe,WACd,IAAIC,EAAO18B,KAAK2jB,MAIhB,OAHI+Y,EAAKj7B,OAAS,KACjBi7B,GAAQ18B,KAAKu7B,OAAOS,OAAO,EAAG,GAAKU,EAAKj7B,UAEjCi7B,EAAKV,OAAO,EAAG,KAAOU,EAAKj7B,OAAS,GAAK,MAAQ,KAAK+6B,QAAQ,MAAO,GAC7E,EAGD3B,aAAc,WACb,IAAI8B,EAAM38B,KAAKs8B,YACXxvB,EAAI,IAAI7N,MAAM09B,EAAIl7B,OAAS,GAAG4Q,KAAK,KACvC,OAAOsqB,EAAM38B,KAAKy8B,gBAAkB,KAAO3vB,EAAI,GAC/C,EAGD8vB,WAAY,SAAUjZ,EAAOkZ,GAC5B,IAAInC,EAAO3mB,EAAO+oB,EAwDlB,GAtDI98B,KAAKmmB,QAAQiW,kBAEhBU,EAAS,CACRxE,SAAUt4B,KAAKs4B,SACf2B,OAAQ,CACPc,WAAY/6B,KAAKi6B,OAAOc,WACxBC,UAAWh7B,KAAKg7B,UAChBC,aAAcj7B,KAAKi6B,OAAOgB,aAC1BC,YAAal7B,KAAKi6B,OAAOiB,aAE1B9C,OAAQp4B,KAAKo4B,OACbzU,MAAO3jB,KAAK2jB,MACZoZ,QAAS/8B,KAAK+8B,QACdpB,QAAS37B,KAAK27B,QACdtD,OAAQr4B,KAAKq4B,OACbwD,OAAQ77B,KAAK67B,OACbL,MAAOx7B,KAAKw7B,MACZD,OAAQv7B,KAAKu7B,OACbtqB,GAAIjR,KAAKiR,GACT2qB,eAAgB57B,KAAK47B,eAAeryB,MAAM,GAC1CmyB,KAAM17B,KAAK07B,MAER17B,KAAKmmB,QAAQgU,SAChB2C,EAAO7C,OAAOnW,MAAQ9jB,KAAKi6B,OAAOnW,MAAMva,MAAM,MAIhDwK,EAAQ4P,EAAM,GAAGA,MAAM,sBAEtB3jB,KAAKs4B,UAAYvkB,EAAMtS,QAExBzB,KAAKi6B,OAAS,CACbc,WAAY/6B,KAAKi6B,OAAOe,UACxBA,UAAWh7B,KAAKs4B,SAAW,EAC3B2C,aAAcj7B,KAAKi6B,OAAOiB,YAC1BA,YAAannB,EACVA,EAAMA,EAAMtS,OAAS,GAAGA,OAASsS,EAAMA,EAAMtS,OAAS,GAAGkiB,MAAM,UAAU,GAAGliB,OAC5EzB,KAAKi6B,OAAOiB,YAAcvX,EAAM,GAAGliB,QAEvCzB,KAAKo4B,QAAUzU,EAAM,GACrB3jB,KAAK2jB,OAASA,EAAM,GACpB3jB,KAAK+8B,QAAUpZ,EACf3jB,KAAKq4B,OAASr4B,KAAKo4B,OAAO32B,OACtBzB,KAAKmmB,QAAQgU,SAChBn6B,KAAKi6B,OAAOnW,MAAQ,CAAC9jB,KAAK67B,OAAS77B,KAAK67B,QAAU77B,KAAKq4B,SAExDr4B,KAAKw7B,OAAQ,EACbx7B,KAAKy7B,YAAa,EAClBz7B,KAAKu7B,OAASv7B,KAAKu7B,OAAOhyB,MAAMoa,EAAM,GAAGliB,QACzCzB,KAAK27B,SAAWhY,EAAM,GACtB+W,EAAQ16B,KAAKm4B,cAAcwB,KAAK35B,KAAMA,KAAKiR,GAAIjR,KAAM68B,EAAc78B,KAAK47B,eAAe57B,KAAK47B,eAAen6B,OAAS,IAChHzB,KAAK07B,MAAQ17B,KAAKu7B,SACrBv7B,KAAK07B,MAAO,GAEThB,EACH,OAAOA,EACD,GAAI16B,KAAKy7B,WAAY,CAE3B,IAAK,IAAIhX,KAAKqY,EACb98B,KAAKykB,GAAKqY,EAAOrY,GAElB,OAAO,CACP,CACD,OAAO,CACP,EAGDiY,KAAM,WACL,GAAI18B,KAAK07B,KACR,OAAO17B,KAAKy2B,IAMb,IAAIiE,EAAO/W,EAAOqZ,EAAWpsB,EAJxB5Q,KAAKu7B,SACTv7B,KAAK07B,MAAO,GAIR17B,KAAKw7B,QACTx7B,KAAKo4B,OAAS,GACdp4B,KAAK2jB,MAAQ,IAGd,IADA,IAAIsZ,EAAQj9B,KAAKk9B,gBACR97B,EAAI,EAAGA,EAAI67B,EAAMx7B,OAAQL,IAEjC,IADA47B,EAAYh9B,KAAKu7B,OAAO5X,MAAM3jB,KAAKi9B,MAAMA,EAAM77B,SAC5BuiB,GAASqZ,EAAU,GAAGv7B,OAASkiB,EAAM,GAAGliB,QAAS,CAGnE,GAFAkiB,EAAQqZ,EACRpsB,EAAQxP,EACJpB,KAAKmmB,QAAQiW,gBAAiB,CAEjC,IAAc,KADd1B,EAAQ16B,KAAK48B,WAAWI,EAAWC,EAAM77B,KAExC,OAAOs5B,EACD,GAAI16B,KAAKy7B,WAAY,CAC3B9X,GAAQ,EACR,QACA,CAEA,OAAO,CAER,CAAM,IAAK3jB,KAAKmmB,QAAQgX,KACxB,KAED,CAEF,OAAIxZ,GAEW,KADd+W,EAAQ16B,KAAK48B,WAAWjZ,EAAOsZ,EAAMrsB,MAE7B8pB,EAKW,KAAhB16B,KAAKu7B,OACDv7B,KAAKy2B,IAELz2B,KAAKm5B,WAAW,0BAA4Bn5B,KAAKs4B,SAAW,GAAK,yBAA2Bt4B,KAAK66B,eAAgB,CACvHxX,KAAM,GACNqX,MAAO,KACP1mB,KAAMhU,KAAKs4B,UAGb,EAGDmC,IAAK,WACJ,IAAI32B,EAAI9D,KAAK08B,OACb,OAAI54B,GAGI9D,KAAKy6B,KAEb,EAGD2C,MAAO,SAAeC,GACrBr9B,KAAK47B,eAAer8B,KAAK89B,EACzB,EAGDC,SAAU,WAET,OADQt9B,KAAK47B,eAAen6B,OAAS,EAC7B,EACAzB,KAAK47B,eAAe2B,MAEpBv9B,KAAK47B,eAAe,EAE5B,EAGDsB,cAAe,WACd,OAAIl9B,KAAK47B,eAAen6B,QAAUzB,KAAK47B,eAAe57B,KAAK47B,eAAen6B,OAAS,GAC3EzB,KAAKw9B,WAAWx9B,KAAK47B,eAAe57B,KAAK47B,eAAen6B,OAAS,IAAIw7B,MAErEj9B,KAAKw9B,WAAoB,QAAEP,KAEnC,EAGDQ,SAAU,SAAkBx8B,GAE3B,OADAA,EAAIjB,KAAK47B,eAAen6B,OAAS,EAAIuH,KAAK4K,IAAI3S,GAAK,KAC1C,EACDjB,KAAK47B,eAAe36B,GAEpB,SAER,EAGDy8B,UAAW,SAAmBL,GAC7Br9B,KAAKo9B,MAAMC,EACX,EAGDM,eAAgB,WACf,OAAO39B,KAAK47B,eAAen6B,MAC3B,EACD0kB,QAAS,CAAE,EACXgS,cAAe,SAAmBlnB,EAAI2sB,EAAKC,EAA2BC,GAErE,OAAQD,GACP,KAAK,EACJ,MACD,KAAK,EACJ,OAAOD,EAAIxF,OAEZ,KAAK,EACJ,OAAO,GAER,KAAK,EACJ,OAAO,EAGT,EACD6E,MAAO,CAAC,WAAY,uBAAwB,uBAAwB,UACpEO,WAAY,CAAEO,QAAS,CAAEd,MAAO,CAAC,EAAG,EAAG,EAAG,GAAIe,WAAW,KAK3D,SAASC,IACRj+B,KAAKiR,GAAK,EACV,CAGD,OANAskB,EAAOsE,MAAQA,EAIfoE,EAAO58B,UAAYk0B,EACnBA,EAAO0I,OAASA,EACT,IAAIA,CACX,CAvxBY,GA2xBO1I,GAAO0I,OAIc1I,GAAO0I,OAHzC,IAGP4E,GAHmB,WAClB,OAAOtN,GAAOj3B,MAAM68B,MAAM5F,GAAQqE,UACnC,ECr2BA,MAAMkJ,GAAa7O,IAClB,MAAM6L,EAAM+C,GAAc5O,GAE1B,OAAO,IAAI4L,YAAYC,ICDxB,MAAMiD,sBAAsBljC,YAK3B,WAAAM,CAAYJ,GACXqa,QACAA,MAAMta,OAAOC,EACb,CAiZD,iBAAOijC,CAAWt3B,EAA0B,IAC3C,MAAMu3B,EAAQ,IAAIF,cAGlB,OAFAE,EAAMv3B,OAASA,EAERu3B,CACP,CAED,QAAAC,CAAS/5B,GACR,OAAOnJ,KAAK0L,OAAOnL,OAAQoB,GAAMA,EAAEwH,WAAaA,EAChD,CAED,iBAAAg6B,CAAkBh6B,EAAwBi6B,GACzC,OAAOpjC,KAAK0L,OAAOnL,OAAQoB,GAAMA,EAAEwH,WAAaA,KAAcyB,OAAOwE,SAASzN,EAAEqL,aAAerL,EAAEqL,YAAco2B,GAC/G,CAED,eAAAC,GACC,OAAOrjC,KAAK0L,OAAOnL,OAAQwI,GAAU9E,EAAsBzD,SAASuI,EAAMI,UAC1E,CAED,cAAAm6B,GACC,OAAOtjC,KAAK0L,OAAOnL,OAAQwI,IAAW9E,EAAsBzD,SAASuI,EAAMI,UAC3E,CAED,MAAA0yB,CAAO74B,EAAWE,GACjBlD,KAAK0L,OAAOrM,QAAS0J,IACpBA,EAAM/F,GAAKA,EACX+F,EAAM7F,GAAKA,GAEZ,CAED,KAAAqgC,CAAMC,GACLxjC,KAAK0L,OAAOrM,QAAS0J,IACpBA,EAAM/F,GAAKwgC,EACXz6B,EAAM7F,GAAKsgC,GAEZ,CAGD,SAAAC,CAAUthC,GACTnC,KAAK0L,OAAOrM,QAAS0J,IACpB,IAAI/F,EAAI+F,EAAM/F,EAAIb,EAAO,GAAG,GAAK4G,EAAM7F,EAAIf,EAAO,GAAG,GAAKA,EAAO,GAAG,GACpE,MAAMe,EAAI6F,EAAM/F,EAAIb,EAAO,GAAG,GAAK4G,EAAM7F,EAAIf,EAAO,GAAG,GAAKA,EAAO,GAAG,GAEtE,GAAI4G,EAAM26B,UAAW,CACpB,GAAI94B,OAAOwE,SAASrG,EAAM26B,UAAUhpB,IAAK,CACxC,MAAMA,EAAK3R,EAAM/F,EAAIb,EAAO,GAAG,GAAK4G,EAAM26B,UAAUhpB,GAAKvY,EAAO,GAAG,GAAKA,EAAO,GAAG,GAC5EwY,EAAK5R,EAAM/F,EAAIb,EAAO,GAAG,GAAK4G,EAAM26B,UAAU/oB,GAAKxY,EAAO,GAAG,GAAKA,EAAO,GAAG,GAClFa,EAAI+F,EAAM/F,EAAIb,EAAO,GAAG,GAAiD,IAA3C4G,EAAM26B,UAAUhpB,GAAK3R,EAAM26B,UAAU/oB,IAAYxY,EAAO,GAAG,GAAKA,EAAO,GAAG,GAExG4G,EAAM26B,UAAUhpB,GAAKA,EACrB3R,EAAM26B,UAAU/oB,GAAKA,CACrB,CAED,GAAI/P,OAAOwE,SAASrG,EAAM26B,UAAUpkB,OAAQ,CAC3C,MAAMqkB,EAAU36B,KAAKwB,KAAKrI,EAAO,GAAG,GAAKA,EAAO,GAAG,GAAKA,EAAO,GAAG,GAAKA,EAAO,GAAG,IACjF4G,EAAM26B,UAAUpkB,OAASqkB,EACzB56B,EAAM26B,UAAUE,QAAUD,CAC1B,CACD,CAED56B,EAAM/F,EAAIA,EACV+F,EAAM7F,EAAIA,GAEX,EAvdM6/B,cAASriC,UAAG,gBCiCpB,MAOMmjC,GAAoB,CACzBnhC,EAAaqE,MACbrE,EAAasE,MACbtE,EAAauE,MACbvE,EAAa8E,WACb9E,EAAa+E,WACb/E,EAAa4C,YACb5C,EAAa6C,WACb7C,EAAa8C,WACb9C,EAAa+C,aACb/C,EAAagD,YACbhD,EAAaiD,YACbjD,EAAakD,WACblD,EAAamD,aACbnD,EAAaoD,aACbpD,EAAaqD,YACbrD,EAAaogB,eACbpgB,EAAaqgB,eACbrgB,EAAaiF,aACbjF,EAAaiC,KACbjC,EAAakC,IACblC,EAAamC,IACbnC,EAAaoC,MACbpC,EAAaqC,KACbrC,EAAasC,KACbtC,EAAauC,IACbvC,EAAawC,MACbxC,EAAayC,MACbzC,EAAa0C,KACb1C,EAAayE,WACbzE,EAAa0E,SACb1E,EAAa2E,eACb3E,EAAa4E,QACb5E,EAAa6E,YACb7E,EAAaE,WACbF,EAAaG,WACbH,EAAaI,WACbJ,EAAagc,gBACbhc,EAAaic,gBACbjc,EAAakc,gBACblc,EAAamc,gBACbnc,EAAasD,MACbtD,EAAauD,MACbvD,EAAawD,MACbxD,EAAayD,MACbzD,EAAa0D,MACb1D,EAAa2D,MACb3D,EAAa4D,MACb5D,EAAa6D,OACb7D,EAAa8D,OACb9D,EAAa8a,UACb9a,EAAa+a,QACb/a,EAAawE,IACbxE,EAAakB,EACblB,EAAaf,EACbe,EAAamB,EACbnB,EAAazB,EACbyB,EAAaoB,EACbpB,EAAaqB,EACbrB,EAAasB,EACbtB,EAAakF,cACblF,EAAamF,mBACbnF,EAAaoF,eACbpF,EAAaqF,eACbrF,EAAa2C,oBACb3C,EAAasF,WACbtF,EAAauF,YACbvF,EAAawF,YACbxF,EAAayF,WACbzF,EAAa0F,eACb1F,EAAa2F,YACb3F,EAAa4F,cACb5F,EAAa6F,cACb7F,EAAa8F,aACb9F,EAAa+F,cACb/F,EAAagG,UACbhG,EAAaiG,SACbjG,EAAaohC,cACbphC,EAAaiE,SACbjE,EAAamE,UACbnE,EAAakE,aACblE,EAAaqhC,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"} \ No newline at end of file +{"version":3,"file":"index.js","sources":["../../libs/browserComponents.ts","../../../src/starry/aux_/typedJSON.ts","../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/semanticPoint.ts","../../../src/starry/utils.ts","../../../src/starry/logger.ts","../../../src/starry/equationSolver.ts","../../../src/starry/eventTopology.ts","../../../src/starry/token.ts","../../../src/starry/patch.ts","../../../src/starry/term.ts","../../../src/starry/spartitoMeasure.ts","../../../src/starry/interfaces.ts","../../../src/starry/editableMeasure.ts","../../../src/starry/measureEvaluator.ts","../../../src/measureLayout/measureLayout.ts","../../../src/measureLayout/grammar.jison.js","../../../src/staffLayout/staffLayout.ts","../../../src/staffLayout/grammar.jison.js","../../../src/staffLayout/parser.ts","../../../src/starry/semanticGraph.ts","../../../src/starry/scoreComponents.ts","../../../src/starry/semanticTopology.ts","../../../src/performer/types.ts","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifile.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/stream.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifileEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/streamEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiSequence.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MusicNotation.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiPlayer.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/config.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/node.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/navigator.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiUtils.js","../../../node_modules/@k-l-lambda/music-widgets/index.js","../../../src/performer/notation.ts","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/sha256.js","../../../src/starry/hashVector.ts","../../../src/starry/spartito.ts","../../../src/starry/staffContext.ts","../../../src/starry/score.ts","../../../src/measureLayout/parser.ts","../../../src/starry/beadSolver.ts","../../../src/isomorphic/converter.ts","../../../node_modules/events/events.js","../../libs/async-queue.ts","../../libs/ZeroClient.ts","../../libs/PyProcessor.ts","../../../node_modules/util/support/isBuffer.js","../../../node_modules/util/node_modules/inherits/inherits_browser.js","../../../node_modules/util/node_modules/inherits/inherits.js","../../../node_modules/util/util.js","../../libs/predictors.ts","../../../node_modules/crypt/crypt.js","../../../node_modules/charenc/charenc.js","../../../node_modules/sha1/sha1.js","../../libs/util.ts","../../libs/predictPages.ts","../../../src/starry/measureRectification.ts","../../libs/store.ts","../../libs/regulationBead.ts","../../libs/regulation.ts","../src/index.ts"],"sourcesContent":["globalThis.btoa = (str) => Buffer.from(str, 'binary').toString('base64');\nglobalThis.atob = (str) => Buffer.from(str, 'base64').toString('binary');\n","import pick from 'lodash/pick';\n\nconst recoverJSON = (json: string | object, classDict): T => {\n\tif (typeof json === 'object') json = JSON.stringify(json);\n\n\treturn JSON.parse(json, (_, value) => {\n\t\tif (value && typeof value === 'object' && value.__prototype) {\n\t\t\tconst Class = classDict[value.__prototype];\n\t\t\tif (Class) {\n\t\t\t\tconst { __prototype, ...fields } = value;\n\t\t\t\treturn new Class(fields);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t});\n};\n\nconst deepCopy = (o: any, dict: Map = null): any => {\n\tdict = dict || new Map();\n\tif (dict.get(o)) return dict.get(o);\n\n\tif (Array.isArray(o)) {\n\t\tconst result = [];\n\t\tdict.set(o, result);\n\n\t\to.forEach((e) => result.push(deepCopy(e, dict)));\n\n\t\treturn result;\n\t} else if (o && typeof o === 'object') {\n\t\tconst result = {};\n\t\tdict.set(o, result);\n\n\t\tObject.entries(o).forEach(([key, value]) => (result[key] = deepCopy(value, dict)));\n\t\tObject.setPrototypeOf(result, o.__proto__);\n\n\t\treturn result;\n\t}\n\n\treturn o;\n};\n\nclass SimpleClass {\n\tassign(data?: object) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\ttoJSON() {\n\t\tconst cls = this.constructor as any;\n\n\t\tconst serializedKeys = cls.serializedKeys || (cls.blackKeys && Object.keys(this).filter((key) => !cls.blackKeys.includes(key)));\n\t\tconst fields = serializedKeys ? pick(this, serializedKeys) : this;\n\n\t\treturn {\n\t\t\t__prototype: cls.className,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tdeepCopy(): this {\n\t\treturn deepCopy(this);\n\t}\n}\n\nexport { recoverJSON, SimpleClass };\n","var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import { EventFeature, BackgroundImage, EventPredisposition } from './interfaces';\nimport { StemBeam } from './term';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum EventElementType {\n\tPAD,\n\tBOS,\n\tEOS,\n\n\tCHORD,\n\tREST,\n}\n\ninterface EventElement {\n\thref?: string;\n\tdisposed?: boolean;\n\tindex?: number;\n\tvoice?: number;\n\n\ttype: EventElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\tfeature: EventFeature;\n\tpivotX?: number;\n\theadY?: number;\n\n\t// targets\n\ttick?: number;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: StemBeam;\n\tstemDirection?: string;\n\tgrace?: boolean;\n\ttremoloCatcher?: boolean;\n\ttimeWarped?: boolean;\n\tfullMeasure?: boolean; // full measure rest\n\tfake?: boolean;\n\n\torder?: number;\n\n\tpredisposition?: EventPredisposition;\n}\n\ntype Matrix = number[][];\n\ninterface Annotation {\n\tloss: number;\n\tgrant: boolean;\n\tpatched: boolean; // from manually solved measure\n}\n\nclass EventCluster extends SimpleClass {\n\tstatic className = 'EventCluster';\n\tstatic blackKeys = ['id'];\n\n\tid?: string; // for db access\n\tindex?: number;\n\tduration?: number;\n\tstaffY0?: number; // the first staff top + staffY\n\n\tsignatureDuration: number;\n\telements: EventElement[];\n\tmatrixH?: Matrix; // matrix N x N, [next][prev]\n\n\tbackgroundImages?: BackgroundImage[];\n\n\tannotation?: Annotation;\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget regular(): boolean {\n\t\treturn (\n\t\t\tthis.elements.some((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !elem.fake) &&\n\t\t\tthis.elements.every((elem) => [elem.x, elem.y1, elem.y2, elem.tick].every(Number.isFinite)) &&\n\t\t\tthis.elements\n\t\t\t\t.slice(1)\n\t\t\t\t.every(\n\t\t\t\t\t(elem, ei) =>\n\t\t\t\t\t\telem.fake ||\n\t\t\t\t\t\tthis.elements[ei].fake ||\n\t\t\t\t\t\telem.grace ||\n\t\t\t\t\t\tthis.elements[ei].grace ||\n\t\t\t\t\t\telem.fullMeasure ||\n\t\t\t\t\t\tthis.elements[ei].fullMeasure ||\n\t\t\t\t\t\telem.tick <= this.elements[ei].tick ||\n\t\t\t\t\t\telem.x > this.elements[ei].x\n\t\t\t\t)\n\t\t);\n\t}\n\n\tget grant(): boolean {\n\t\treturn this.annotation && this.annotation.grant;\n\t}\n\n\tget feature(): Partial {\n\t\treturn {\n\t\t\tindex: this.index,\n\t\t\telements: this.elements,\n\t\t};\n\t}\n\n\tget estimatedDuration(): number {\n\t\tconst endElem = this.elements.find((elem) => elem.type === EventElementType.EOS);\n\n\t\tconst tick = endElem?.predisposition ? endElem.predisposition?.tick : endElem?.tick;\n\n\t\treturn Number.isFinite(tick) ? tick : this.duration;\n\t}\n\n\tassignPrediction(prediction: any): void {\n\t\tconsole.assert(prediction.index === this.index, 'index mismatch:', prediction.index, this.index);\n\n\t\tthis.matrixH = prediction.matrixH;\n\t\tprediction.elements.forEach((pe) => {\n\t\t\tconst { index, ...predisposition } = pe;\n\t\t\tconst elem = this.elements.find((elem) => elem.index === index);\n\t\t\tconsole.assert(elem, 'element not found:', index);\n\n\t\t\tif (elem) elem.predisposition = predisposition;\n\t\t});\n\t}\n}\n\nclass EventClusterSet extends SimpleClass {\n\tstatic className = 'EventClusterSet';\n\n\tname?: string;\n\n\tclusters: EventCluster[];\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\ttrimIrregular(): number {\n\t\tlet ir = 0;\n\n\t\tthis.clusters = this.clusters.filter((cluster) => {\n\t\t\tconst regular = cluster.regular;\n\t\t\tif (!regular) {\n\t\t\t\tconsole.debug('irregular cluster:', cluster);\n\t\t\t\t++ir;\n\t\t\t}\n\n\t\t\treturn regular;\n\t\t});\n\n\t\tif (ir) console.debug('Irregular clusters trimmed:', `${ir}/${this.clusters.length + ir}`);\n\t\telse console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`);\n\n\t\treturn ir;\n\t}\n}\n\nexport { EventElementType, EventElement, EventCluster, EventClusterSet };\n","import { TextType } from './interfaces';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\n\nenum TokenType {\n\t// clefs\n\tClefG = 'clefs-G', // clefs.G_change\n\tClefF = 'clefs-F', // clefs.F_change\n\tClefC = 'clefs-C', // clefs.C_change\n\n\t// time signature\n\tTimesigC44 = 'timesig-C44',\n\tTimesigC22 = 'timesig-C22',\n\tTimesigZero = 'zero|timesig0',\n\tTimesigOne = 'one|timesig1',\n\tTimesigTwo = 'two|timesig2',\n\tTimesigThree = 'three|timesig3',\n\tTimesigFour = 'four|timesig4',\n\tTimesigFive = 'five|timesig5',\n\tTimesigSix = 'six|timesig6',\n\tTimesigSeven = 'seven|timesig7',\n\tTimesigEight = 'eight|timesig8',\n\tTimesigNine = 'nine|timesig9',\n\n\t// octave shifts\n\tOctaveShift8va = 'octave-a',\n\tOctaveShift8vb = 'octave-b',\n\tOctaveShift0 = 'octave-0',\n\n\t// numbers\n\tZero = 'zero|n0',\n\tOne = 'one|n1',\n\tTwo = 'two|n2',\n\tThree = 'three|n3',\n\tFour = 'four|n4',\n\tFive = 'five|n5',\n\tSix = 'six|n6',\n\tSeven = 'seven|n7',\n\tEight = 'eight|n8',\n\tNine = 'nine|n9',\n\n\t// accidentals\n\tAccNatural = 'accidentals-natural',\n\tAccSharp = 'accidentals-sharp',\n\tAccDoublesharp = 'accidentals-doublesharp',\n\tAccFlat = 'accidentals-flat',\n\tAccFlatflat = 'accidentals-flatflat',\n\tKeyNatural = 'accidentals-natural|key-natural',\n\tKeySharp = 'accidentals-sharp|key-sharp',\n\tKeyFlat = 'accidentals-flat|key-flat',\n\n\t// noteheads\n\tNoteheadS0 = 'noteheads-s0',\n\tNoteheadS1 = 'noteheads-s1',\n\tNoteheadS2 = 'noteheads-s2',\n\tNoteheadS1stemU = 'noteheads-s1|noteheads-s1-u',\n\tNoteheadS1stemD = 'noteheads-s1|noteheads-s1-d',\n\tNoteheadS2stemU = 'noteheads-s2|noteheads-s2-u',\n\tNoteheadS2stemD = 'noteheads-s2|noteheads-s2-d',\n\n\t// rests\n\tRest0 = 'rests-0o',\n\tRest1 = 'rests-1o',\n\tRest2 = 'rests-2',\n\tRest3 = 'rests-3',\n\tRest4 = 'rests-4',\n\tRest5 = 'rests-5',\n\tRest6 = 'rests-6',\n\tRest0W = 'rests-0',\n\tRestM1 = 'rests-M1',\n\n\t// flags\n\tFlag3 = 'flags-u3', // flags.d3\n\tFlag4 = 'flags-u4', // flags.d4\n\tFlag5 = 'flags-u5', // flags.d5\n\tFlag6 = 'flags-u6', // flags.d6\n\tFlag7 = 'flags-u7', // flags.d7\n\tFlag8 = 'flags-u8', // flags.d8\n\n\t// beams\n\tBeamLeft = '|beam-left',\n\tBeamRight = '|beam-right',\n\tBeamContinue = '|beam-continue',\n\n\t// tremolos\n\tTremoloLeft = '|tremolo-left',\n\tTremoloRight = '|tremolo-right',\n\tTremoloMiddle = '|tremolo-middle',\n\n\t// slur & tie\n\tSlurBegin = '|slur-begin',\n\tSlurEnd = '|slur-end',\n\tTieBegin = '|tie-begin',\n\tTieEnd = '|tie-end',\n\n\t// volta\n\tVoltaLeft = '|volta-left',\n\tVoltaRight = '|volta-right',\n\n\tVoltaAlternativeBegin = '|volta-alter-begin',\n\t//VoltaAlternativeEnd = \"|volta-alter-end\",\n\n\t// vertical bars\n\t//BarMeasure = \"|bar-measure\",\n\tBarTerminal = '|bar-terminal',\n\tBarSegment = '|bar-segment',\n\n\t// dots (duration)\n\tDot = '|dot',\n\tDotDot = '|dotdot',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\t//\n\tWedgeCrescendo = '|wedge-crescendo',\n\tWedgeDiminuendo = '|wedge-diminuendo',\n\tWedgeClose = '|wedge-close',\n\n\tCrescendoBegin = '|wedge-crescendo',\n\tDecrescendoBegin = '|wedge-diminuendo',\n\tCrescendoEnd = '|wedge-close',\n\tDecrescendoEnd = '|wedge-close',\n\n\t// scripts\n\tScriptFermata = 'scripts-ufermata', // scripts.dfermata\n\tScriptShortFermata = 'scripts-ushortfermata', // scripts.dshortfermata\n\tScriptSforzato = 'scripts-sforzato',\n\tScriptStaccato = 'scripts-staccato',\n\tScriptStaccatissimo = 'scripts-ustaccatissimo', // scripts.dstaccatissimo\n\tScriptTurn = 'scripts-turn',\n\tScriptTrill = 'scripts-trill',\n\tScriptSegno = 'scripts-segno',\n\tScriptCoda = 'scripts-coda',\n\tScriptArpeggio = 'scripts-arpeggio',\n\tScriptPrall = 'scripts-prall',\n\tScriptMordent = 'scripts-mordent',\n\tScriptMarcato = 'scripts-umarcato', // scripts.dmarcato\n\tScriptTenuto = 'scripts-tenuto',\n\tScriptPortato = 'scripts-uportato', // scripts.dportato\n\n\t// pedal\n\tPedalStar = 'pedal-star',\n\tPedalPed = 'pedal-Ped',\n\n\tText = '|text',\n\tGraceNotehead = '|grace-notehead',\n}\n\n// alias\nconst tt = TokenType;\n\nexport const TokenTypes = Object.values(TokenType);\nexport const TokenClefs = TokenTypes.filter((t) => /clefs-/.test(t));\nexport const TokenTimesigs = TokenTypes.filter((t) => /timesig/.test(t));\nexport const TokenTimesigsC = TokenTypes.filter((t) => /timesig-/.test(t));\nexport const TokenTimesigsN = TokenTypes.filter((t) => /timesig\\d/.test(t));\nexport const TokenOctshifts = TokenTypes.filter((t) => /octave-/.test(t));\nexport const TokenNumbers = TokenTypes.filter((t) => /n\\d/.test(t));\nexport const TokenAccidentals = TokenTypes.filter((t) => /accidentals-/.test(t));\nexport const TokenNoteheads = TokenTypes.filter((t) => /noteheads-/.test(t));\nexport const TokenBareNoteheads = [tt.NoteheadS0, tt.NoteheadS1, tt.NoteheadS2];\nexport const TokenDirectionalNoteheads = TokenTypes.filter((t) => /noteheads-.+-[ud]/.test(t));\nexport const TokenRests = TokenTypes.filter((t) => /rests-/.test(t));\nexport const TokenFlags = TokenTypes.filter((t) => /flags-/.test(t));\nexport const TokenVolta = TokenTypes.filter((t) => /volta-/.test(t));\nexport const TokenDynamics = TokenTypes.filter((t) => /^[a-z]$/.test(t));\nexport const TokenScripts = TokenTypes.filter((t) => /scripts-/.test(t));\nexport const TokenPedals = TokenTypes.filter((t) => /pedal-/.test(t));\nexport const TokenDots = [tt.Dot, tt.DotDot];\nexport const TokenArcs = [tt.SlurBegin, tt.SlurEnd, tt.TieBegin, tt.TieEnd];\nexport const TokenBeams = TokenTypes.filter((t) => /beam-/.test(t));\nexport const TokenWedges = TokenTypes.filter((t) => /wedge-/.test(t));\n\nexport const TokenAccessories = [\n\t...TokenNumbers,\n\t...TokenDynamics,\n\t...TokenWedges,\n\t...TokenPedals,\n\t...TokenArcs,\n\n\ttt.ScriptFermata,\n\ttt.ScriptShortFermata,\n\ttt.ScriptSforzato,\n\ttt.ScriptStaccato,\n\ttt.ScriptStaccatissimo,\n\ttt.ScriptTurn,\n\ttt.ScriptTrill,\n\ttt.ScriptPrall,\n\ttt.ScriptMordent,\n\ttt.ScriptMarcato,\n\ttt.ScriptTenuto,\n\ttt.ScriptPortato,\n];\n\nexport const TokenDirectionless = [...TokenPedals];\n\nexport const TokenGlyphs = [\n\t...TokenClefs,\n\t...TokenTimesigs,\n\t...TokenNumbers,\n\t...TokenAccidentals,\n\ttt.NoteheadS0,\n\ttt.NoteheadS1,\n\ttt.NoteheadS2,\n\t...TokenRests,\n\t...TokenDynamics,\n\t...TokenScripts,\n\t...TokenPedals,\n\t...TokenDots,\n];\n\nconst TOKEN_Y_ROUND = {} as Record;\nTokenClefs.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenTimesigsN.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenAccidentals.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenNoteheads.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenRests.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenDots.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\n\nconst TOKEN_Y_FIXED = {} as Record;\nTokenTimesigsC.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\nTokenVolta.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\n\nclass Token {\n\tstatic className = 'Token';\n\n\tid: string;\n\ttype: TokenType;\n\tx: number;\n\ty: number;\n\tpivotX?: number;\n\n\tconfidence: number;\n\n\ttip?: { x: number; y: number };\n\n\tvoice?: number; // integer, every bit stand for a voice\n\ttimeWarped?: boolean;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tget typeId(): string {\n\t\treturn this.type.split('|').reverse()[0];\n\t}\n\n\tget isPredicted(): boolean {\n\t\treturn Number.isFinite(this.confidence);\n\t}\n\n\tget isNotehead(): boolean {\n\t\treturn TokenDirectionalNoteheads.includes(this.type) || this.type === TokenType.NoteheadS0;\n\t}\n\n\tget isContexted(): boolean {\n\t\treturn (\n\t\t\tTokenClefs.includes(this.type) || TokenTimesigs.includes(this.type) || TokenOctshifts.includes(this.type) || TokenAccidentals.includes(this.type)\n\t\t);\n\t}\n\n\tget isAccessory(): boolean {\n\t\treturn TokenNumbers.includes(this.type) || TokenDynamics.includes(this.type) || TokenScripts.includes(this.type) || TokenPedals.includes(this.type);\n\t}\n\n\tget division(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Flag3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Flag4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Flag5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Flag6:\n\t\t\t\treturn 6;\n\n\t\t\tcase tt.Flag7:\n\t\t\t\treturn 7;\n\n\t\t\tcase tt.Flag8:\n\t\t\t\treturn 8;\n\n\t\t\tcase tt.RestM1:\n\t\t\t\treturn -1;\n\n\t\t\tcase tt.Rest0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.Rest1:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.Rest2:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Rest3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Rest4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Rest5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Rest6:\n\t\t\t\treturn 6;\n\n\t\t\t// TODO:\n\t\t\t//case tt.Rest0W:\n\t\t\t//\treturn 0;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget dots(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.Dot:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.DotDot:\n\t\t\t\treturn 2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget direction(): 'u' | 'd' | null {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn 'u';\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 'd';\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget width(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS2;\n\t\t}\n\t}\n\n\tget left(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x - this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x - this.width;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget right(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x + this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x + this.width;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget voiceIndices(): number[] {\n\t\tif (!this.voice || this.voice < 0) return [];\n\n\t\treturn Array(Math.floor(Math.log2(this.voice)) + 1)\n\t\t\t.fill(null)\n\t\t\t.reduce((indices, _, i) => (this.voice & (1 << i) ? [i + 1, ...indices] : indices), []);\n\t}\n}\n\nclass TextToken extends Token {\n\ttextType: TextType;\n\ttext: string;\n\ttextFeature?: Record;\n\twidth_: number;\n\tfontSize: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t\tObject.assign(this, data);\n\t}\n\n\tget width(): number {\n\t\treturn this.width_;\n\t}\n\n\tset width(value: number) {\n\t\tthis.width_ = value;\n\t}\n}\n\nexport { TokenType, Token, TextToken, TOKEN_Y_ROUND, TOKEN_Y_FIXED };\n","import { SimpleClass } from './aux_/typedJSON';\nimport { StaffBasic } from './interfaces';\nimport { ContextedTerm, EventTerm, MarkTerm } from './term';\n\nclass PatchMeasure extends SimpleClass {\n\tstatic className = 'PatchMeasure';\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tbasic: StaffBasic;\n\n\t//points: SemanticPoint[];\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tvoices: number[][]; // [voice, id]\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tObject.assign(this, data);\n\t}\n\n\tget staffN(): number {\n\t\treturn Math.floor(Math.log2(this.staffMask)) + 1;\n\t}\n\n\tget basics(): StaffBasic[] {\n\t\treturn Array(this.staffN).fill(this.basic);\n\t}\n\n\tget duration(): number {\n\t\treturn Math.max(\n\t\t\t0,\n\t\t\t...(this.voices || []).map((ids) => {\n\t\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\n\t\t\t\treturn events.reduce((duration, event) => duration + event.duration, 0);\n\t\t\t})\n\t\t);\n\t}\n}\n\nexport { PatchMeasure };\n","import { Fraction, Pitch, EventFeature, EventPredisposition } from './interfaces';\nimport { gcd, reducedFraction } from './utils';\nimport { TokenType } from './token';\nimport * as Token from './token';\nimport { SimpleClass } from './aux_/typedJSON';\n\nconst WHOLE_DURATION = 128 * 3 * 5;\nconst WHOLE_EXP2 = WHOLE_DURATION / 15;\n\nenum AccessoryDirection {\n\tUp = '^',\n\tDown = '_',\n\tMiddle = '-',\n}\n\nenum GraceType {\n\tGrace = 'grace',\n\tAfterGrace = 'afterGrace',\n\tAcciaccatura = 'acciaccatura',\n\tAppoggiatura = 'appoggiatura',\n\tSlashedGrace = 'slashedGrace',\n}\n\nenum StemBeam {\n\tOpen = 'Open',\n\tClose = 'Close',\n\tContinue = 'Continue',\n}\n\nenum TremoloLink {\n\tPitcher = 'Pitcher',\n\tCatcher = 'Catcher',\n\tPierced = 'Pierced',\n}\n\nenum GlissandoStyle {\n\tNormal = 'normal',\n\tDashedLine = 'dashed-line',\n\tDottedLine = 'dotted-line',\n\tZigzag = 'zigzag',\n\tTrill = 'trill',\n}\n\nenum ArpeggioStyle {\n\tNormal = 'Normal',\n\tBracket = 'Bracket',\n\tParenthesis = 'Parenthesis',\n\tParenthesisDashed = 'ParenthesisDashed',\n\tArrowDown = 'ArrowDown',\n}\n\ninterface Accessory {\n\tdirection?: AccessoryDirection;\n\tparenthesized?: boolean;\n\ttype: TokenType;\n\tid?: string;\n\tx: number;\n}\n\ninterface TermPitch extends Pitch {\n\ttying?: boolean;\n\ttied?: boolean;\n\tparenthesized?: boolean;\n\toctaveShift?: number;\n}\n\nclass Term extends SimpleClass {\n\tx: number;\n\tstaff?: number;\n}\n\ntype RestType = 'r' | 'R' | 's' | null;\n\ninterface DurationalTerm {\n\tdivision: number;\n\tdots: number;\n\tmultiplier?: Fraction;\n}\n\nconst SCALE_NAMES = 'CDEFGAB';\n\nclass EventTerm extends Term implements DurationalTerm {\n\tstatic className = 'EventTerm';\n\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\n\tsystem: number;\n\troundX: number; // for tick map, scheduler\n\tintX: number; // for measure hash\n\tintY: number;\n\tys: number[]; // order by ascending pitch, low (greater Y) to high (less Y)\n\tpitches?: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\taccessories: Accessory[];\n\tmultiplier: Fraction;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\trepetitionChord: boolean;\n\tgrace?: GraceType;\n\tbeam?: StemBeam;\n\ttimeWarp?: Fraction;\n\tparenthesized?: boolean;\n\ttremolo?: number; // like division, 'number of beams' + 2\n\ttremoloLink?: TremoloLink;\n\tglissando?: boolean;\n\tglissandoStyle?: GlissandoStyle;\n\tarpeggioStyle?: ArpeggioStyle;\n\ttip?: { x: number; y: number };\n\n\ttick: number;\n\n\t// for topology\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature: EventFeature;\n\tpredisposition: EventPredisposition;\n\n\tgraceIds?: number[];\n\tcatcherId?: number; // tremolo catcher event ID for tremolo pitcher event\n\n\tnoteIds?: string[]; // order by upwards\n\n\tstatic space({ tick, duration }: { tick: number; duration: number }): EventTerm {\n\t\tconst term = new EventTerm({\n\t\t\trest: 's',\n\t\t\ttick,\n\t\t\taccessories: [],\n\t\t});\n\t\tterm.duration = Math.round(duration);\n\n\t\treturn term;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tObject.assign(this, data);\n\n\t\tif (Number.isFinite(data.left) && Number.isFinite(data.right)) this.x = (this.left + this.right) / 2;\n\t\tif (!Number.isFinite(this.pivotX)) this.pivotX = this.x;\n\t\t//console.assert(Number.isFinite(this.x), \"EventTerm: invalid x,\", data);\n\t}\n\n\tget alignedTick(): number {\n\t\treturn this.grace ? this.tick + this.duration : this.tick;\n\t}\n\n\tget mainDuration(): number {\n\t\treturn WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t}\n\n\tget duration(): number {\n\t\tlet value = this.mainDuration;\n\t\tif (this.multiplier) value *= this.multiplier.numerator / this.multiplier.denominator;\n\t\tif (this.timeWarp) value *= this.timeWarp.numerator / this.timeWarp.denominator;\n\n\t\treturn this.grace ? value / 8 : value;\n\t}\n\n\tset duration(value: number) {\n\t\tconsole.assert(Number.isFinite(value), 'invalid duration value:', value);\n\n\t\tconst divider = gcd(value, WHOLE_EXP2);\n\t\tconst division = Math.log2(WHOLE_EXP2 / divider);\n\t\tconst multiplier = reducedFraction(value * 2 ** division, WHOLE_DURATION);\n\n\t\tthis.division = division;\n\t\tthis.dots = 0;\n\n\t\tif (multiplier.numerator !== multiplier.denominator) this.multiplier = multiplier;\n\t\telse this.multiplier = undefined;\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget times(): string {\n\t\tif (!this.timeWarp) return null;\n\n\t\treturn `${this.timeWarp.numerator}/${this.timeWarp.denominator}`;\n\t}\n\n\tget fullMeasureRest(): boolean {\n\t\treturn this.rest === 'R';\n\t}\n\n\tget tipX(): number {\n\t\treturn this.tip ? this.tip.x : this.x;\n\t}\n\n\tget tipY(): number {\n\t\treturn this.tip ? this.tip.y : this.ys ? this.ys[0] : 0;\n\t}\n\n\tget tremoloCatcher(): boolean {\n\t\treturn this.tremoloLink === TremoloLink.Catcher;\n\t}\n\n\tget scaleChord(): string {\n\t\treturn this.pitches.map((pitch) => SCALE_NAMES[(pitch.note + 700) % 7]).join('');\n\t}\n\n\tget zeroHolder(): boolean {\n\t\treturn !!this.grace || this.tremoloCatcher;\n\t}\n}\n\nenum ContextType {\n\tClef,\n\tKeyAcc,\n\tAcc,\n\tOctaveShift,\n\tTimeSignatureC,\n\tTimeSignatureN,\n}\n\nclass ContextedTerm extends Term {\n\tstatic className = 'ContextedTerm';\n\n\ty: number;\n\ttokenType: TokenType;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget type(): ContextType {\n\t\tif (Token.TokenClefs.includes(this.tokenType)) return ContextType.Clef;\n\t\tif (/\\|key-/.test(this.tokenType)) return ContextType.KeyAcc;\n\t\tif (/accidentals-/.test(this.tokenType)) return ContextType.Acc;\n\t\tif (Token.TokenOctshifts.includes(this.tokenType)) return ContextType.OctaveShift;\n\t\tif (Token.TokenTimesigsC.includes(this.tokenType)) return ContextType.TimeSignatureC;\n\t\tif (Token.TokenTimesigsN.includes(this.tokenType)) return ContextType.TimeSignatureN;\n\n\t\treturn null;\n\t}\n\n\tget staffLevel(): boolean {\n\t\treturn [ContextType.OctaveShift, ContextType.Clef, ContextType.KeyAcc].includes(this.type);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.1;\n\t}\n\n\tget clef(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.ClefG:\n\t\t\t\treturn -this.y - 2;\n\n\t\t\tcase TokenType.ClefF:\n\t\t\t\treturn -this.y + 2;\n\n\t\t\tcase TokenType.ClefC:\n\t\t\t\treturn -this.y;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget alter() {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.AccNatural:\n\t\t\tcase TokenType.KeyNatural:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.AccSharp:\n\t\t\tcase TokenType.KeySharp:\n\t\t\t\treturn 1;\n\n\t\t\tcase TokenType.AccFlat:\n\t\t\tcase TokenType.KeyFlat:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.AccDoublesharp:\n\t\t\t\treturn 2;\n\n\t\t\tcase TokenType.AccFlatflat:\n\t\t\t\treturn -2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget octaveShift(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.OctaveShift8va:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.OctaveShift0:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.OctaveShift8vb:\n\t\t\t\treturn 1;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget number(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.TimesigZero:\n\t\t\t\treturn 0;\n\t\t\tcase TokenType.TimesigOne:\n\t\t\t\treturn 1;\n\t\t\tcase TokenType.TimesigTwo:\n\t\t\t\treturn 2;\n\t\t\tcase TokenType.TimesigThree:\n\t\t\t\treturn 3;\n\t\t\tcase TokenType.TimesigFour:\n\t\t\t\treturn 4;\n\t\t\tcase TokenType.TimesigFive:\n\t\t\t\treturn 5;\n\t\t\tcase TokenType.TimesigSix:\n\t\t\t\treturn 6;\n\t\t\tcase TokenType.TimesigSeven:\n\t\t\t\treturn 7;\n\t\t\tcase TokenType.TimesigEight:\n\t\t\t\treturn 8;\n\t\t\tcase TokenType.TimesigNine:\n\t\t\t\treturn 9;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\n//class BreakTerm extends Term {\n//};\n\nclass MarkTerm extends Term {\n\tstatic className = 'MarkTerm';\n\n\ttick: number;\n\n\tget prior(): number {\n\t\treturn this.tick + 0.01;\n\t}\n}\n\nconst MUSIC_NOTES = Array(7)\n\t.fill(0)\n\t.map((_, i) => String.fromCodePoint(0x1d15d + i));\n\nclass TempoTerm extends MarkTerm {\n\tstatic className = 'TempoTerm';\n\n\tduration: string;\n\tbeats: string;\n\n\tstatic fromNumeralText(text: string): TempoTerm {\n\t\tif (/.+=.*\\d+/.test(text)) {\n\t\t\tconst [symbol, value] = text.split('=');\n\t\t\tlet division = MUSIC_NOTES.findIndex((n) => symbol.includes(n));\n\t\t\tdivision = division >= 0 ? division : 2;\n\t\t\tlet duration = (2 ** division).toString();\n\t\t\tif (symbol.includes('.')) duration += '.';\n\n\t\t\treturn new TempoTerm({ tick: 0, duration, beats: value });\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.01;\n\t}\n\n\t// a whole note equal to 1920\n\tget durationMagnitude(): number {\n\t\tconst [_, den, dot] = this.duration.match(/^(\\d+)(\\.)?$/);\n\t\tconst magnitude = (WHOLE_DURATION / Number(den)) * (dot ? 1.5 : 1);\n\n\t\treturn magnitude;\n\t}\n\n\t// beats per minute, suppose 1 beat = 480 ticks\n\tget bpm(): number {\n\t\tconst [number] = this.beats.match(/\\d+/) || [90];\n\t\tconst beats = Number(number);\n\n\t\treturn (beats * this.durationMagnitude * 4) / WHOLE_DURATION;\n\t}\n\n\tisValid(range = [10, 400]): boolean {\n\t\tconst bpm = this.bpm;\n\n\t\treturn Number.isFinite(this.bpm) && bpm >= range[0] && bpm < range[1];\n\t}\n}\n\nclass GlyphTerm extends MarkTerm {\n\tstatic className = 'GlyphTerm';\n\n\tglyph: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass TextTerm extends MarkTerm {\n\tstatic className = 'TextTerm';\n\n\tdirection?: AccessoryDirection;\n\ttext: string;\n\tbold: boolean;\n\titalic: boolean;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass LyricTerm extends MarkTerm {\n\tstatic className = 'LyricTerm';\n\n\ttext: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass CommandTerm extends MarkTerm {\n\tstatic className = 'CommandTerm';\n\n\tcommand: string;\n\tparameters: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass ChordmodeTerm extends Term implements DurationalTerm {\n\tstatic className = 'ChordmodeTerm';\n\n\tpitch: Pitch;\n\tbasePitch?: Pitch;\n\tmodifier?: string;\n\n\tdivision: number;\n\tdots: number;\n\tmultiplier: Fraction;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget duration(): number {\n\t\tconst value = WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t\tif (this.multiplier) return (value * this.multiplier.numerator) / this.multiplier.denominator;\n\n\t\treturn value;\n\t}\n}\n\nexport {\n\tTerm,\n\tEventTerm,\n\tContextedTerm,\n\t//BreakTerm,\n\tMarkTerm,\n\tTempoTerm,\n\tGlyphTerm,\n\tTextTerm,\n\tLyricTerm,\n\tCommandTerm,\n\tChordmodeTerm,\n\tDurationalTerm,\n\tContextType,\n\tGraceType,\n\tTermPitch,\n\tRestType,\n\tGlissandoStyle,\n\tArpeggioStyle,\n\tAccessory,\n\tAccessoryDirection,\n\tWHOLE_DURATION,\n\tStemBeam,\n\tTremoloLink,\n};\n","import sha1 from 'js-sha1';\nimport erf from 'math-erf';\n\nimport { SimpleClass } from './aux_/typedJSON';\nimport * as EquationSolver from './equationSolver';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport {\n\tBackgroundImage,\n\tEventMeasure,\n\tFraction,\n\tMeasureBarType,\n\tRegulationOptions,\n\tRegulationSolution,\n\tRegulationSolutionEvent,\n\tStaffBasic,\n} from './interfaces';\nimport type { MeasureRectification } from './measureRectification';\nimport { PatchMeasure } from './patch';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\nimport { ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, StemBeam, TremoloLink, WHOLE_DURATION } from './term';\nimport type { GraphMeasure } from './timewiseGraph';\nimport { argmax, frac, fractionMul, roundNumber } from './utils';\n\nnamespace SimplePolicy {\n\tconst constructXMap = (measure: SpartitoMeasure): Map => {\n\t\tconst xMap = new Map();\n\n\t\t// mark full measure rests\n\t\tmeasure.rows.forEach((row) => {\n\t\t\tif (row.events.length === 1) {\n\t\t\t\tconst event = row.events[0];\n\t\t\t\tif (event.rest && event.division === 0) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst x = Math.round(event.pivotX * 10) / 10;\n\t\t\tlet key = 0;\n\t\t\tif (event.fullMeasureRest) key = Math.min(x, ...xMap.keys());\n\t\t\telse {\n\t\t\t\tkey =\n\t\t\t\t\t[...xMap.keys()].find((k) => {\n\t\t\t\t\t\t// check if the event is aligned with the current chord\n\t\t\t\t\t\tconst es = xMap.get(k);\n\t\t\t\t\t\tconst left = Math.min(...es.map((e) => e.left));\n\t\t\t\t\t\tconst right = Math.max(...es.map((e) => e.right));\n\n\t\t\t\t\t\tconst overlaySize = Math.min(right, event.right) - Math.max(left, event.left);\n\n\t\t\t\t\t\treturn overlaySize > NOTEHEAD_WIDTHS.NoteheadS1 * 0.62;\n\t\t\t\t\t}) || x;\n\t\t\t}\n\t\t\tevent.roundX = key;\n\n\t\t\tconst es = xMap.get(key) || [];\n\t\t\txMap.set(key, es);\n\n\t\t\tes.push(event);\n\t\t});\n\n\t\treturn xMap;\n\t};\n\n\texport const computeMeasureTicks = (measure: SpartitoMeasure): void => {\n\t\tconst xMap = constructXMap(measure);\n\n\t\tlet tick = 0;\n\t\tconst ts = new Set([tick]);\n\t\tconst eventGroups = [...xMap.entries()].sort(([x1], [x2]) => x1 - x2); //.map(entry => entry[1]);\n\t\tfor (const [x, events] of eventGroups) {\n\t\t\tvoid x;\n\n\t\t\tevents.forEach((event: EventTerm) => {\n\t\t\t\tif (event.predisposition) {\n\t\t\t\t\tevent.rest = event.rest && event.predisposition.fullMeasure > 0.5 ? 'R' : event.rest;\n\t\t\t\t\tevent.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t\tevent.division = argmax(event.predisposition.divisionVector);\n\t\t\t\t\tevent.dots = argmax(event.predisposition.dotsVector);\n\t\t\t\t\tif (event.predisposition.timeWarped > 0.5) event.timeWarp = frac(2, 3);\n\t\t\t\t}\n\n\t\t\t\tif (event.fullMeasureRest) event.tick = 0;\n\t\t\t\telse {\n\t\t\t\t\tif (event.zeroHolder) tick -= event.duration;\n\n\t\t\t\t\tif (!event.zeroHolder && event.predisposition && Number.isInteger(event.predisposition.tick)) event.tick = event.predisposition.tick;\n\t\t\t\t\telse event.tick = tick;\n\t\t\t\t\tts.add(event.tick + event.duration);\n\t\t\t\t}\n\t\t\t\t//console.log(\"append tick:\", event.tick + event.duration, event);\n\t\t\t});\n\t\t\tts.delete(tick);\n\n\t\t\t//column.xToTick[x] = tick;\n\n\t\t\tif (ts.size) tick = Math.min(...ts);\n\t\t}\n\n\t\tif (Number.isInteger(measure.estimatedDuration)) measure.duration = measure.estimatedDuration;\n\t\telse measure.duration = Math.max(...ts, 0);\n\t};\n\n\texport const computeMeasureVoices = (measure: SpartitoMeasure): void => {\n\t\tmeasure.voices = [];\n\t\tfor (const row of measure.rows) {\n\t\t\tconst events = row.events.filter(\n\t\t\t\t(event) => !event.grace && !event.tremoloCatcher && !event.fullMeasureRest && !(event.predisposition && event.predisposition.fake > 0.5)\n\t\t\t);\n\t\t\tconst eventSet = new Set(events);\n\n\t\t\twhile (eventSet.size) {\n\t\t\t\tlet tick = 0;\n\n\t\t\t\tconst voice = [];\n\t\t\t\tconst pushEvent = (e: EventTerm) => {\n\t\t\t\t\tvoice.push(e.id);\n\t\t\t\t\tif (!e.zeroHolder) tick += e.duration;\n\t\t\t\t\teventSet.delete(e);\n\t\t\t\t};\n\n\t\t\t\tconst e0 = events.find((e) => eventSet.has(e));\n\t\t\t\tif (e0.alignedTick > 0) {\n\t\t\t\t\t//voice.tickMap[tick] = EventTerm.space({ tick, duration: e0.alignedTick });\n\t\t\t\t\ttick = e0.alignedTick;\n\t\t\t\t}\n\t\t\t\tpushEvent(e0);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// TODO: consider slur pair\n\t\t\t\t\tconst e = events.find((e) => eventSet.has(e) && e.alignedTick === tick);\n\t\t\t\t\tif (!e) break;\n\n\t\t\t\t\tpushEvent(e);\n\t\t\t\t}\n\n\t\t\t\t//if (tick < measure.duration)\n\t\t\t\t//\tvoice.tickMap[tick] = EventTerm.space({ tick, duration: staff.duration - tick });\n\n\t\t\t\tmeasure.voices.push(voice);\n\t\t\t}\n\t\t}\n\t};\n}\n\nconst solveGraceEvents = (measure: SpartitoMeasure): void => {\n\tconst graceEvents = measure.events.filter((event) => event.grace /*&& !Number.isFinite(event.tick)*/);\n\tif (!graceEvents.length) return;\n\n\tconst tickMap = measure.tickMap;\n\tconst staffMap = [...tickMap.entries()].reduce((smap, [tick, events]) => {\n\t\tevents.forEach((event) => {\n\t\t\tif (!event.grace) {\n\t\t\t\tsmap[event.staff] = smap[event.staff] || {};\n\n\t\t\t\tconst oldEvent = smap[event.staff][tick];\n\t\t\t\tsmap[event.staff][tick] = !oldEvent || oldEvent.x > event.x ? event : oldEvent;\n\t\t\t}\n\t\t});\n\n\t\treturn smap;\n\t}, {} as { [staff: number]: { [tick: number]: EventTerm } });\n\n\ttype Position = { tick: number; preTick: number; graces: EventTerm[]; event: EventTerm };\n\tconst staffPositions = Object.entries(staffMap).reduce((map, [staff, emap]) => {\n\t\tmap[staff] = Object.entries(emap)\n\t\t\t.map(([t, event]) => ({ event, tick: Number(t), preTick: -240, graces: [] }))\n\t\t\t.sort((p1, p2) => p1.event.x - p2.event.x);\n\t\tmap[staff].push({ tick: measure.duration, event: measure.endEvent, preTick: 0, graces: [] }); // terminal bar\n\n\t\tlet tick = 0;\n\t\tmap[staff].forEach((position) => {\n\t\t\tif (position.tick > tick) {\n\t\t\t\tposition.preTick = tick;\n\t\t\t\ttick = position.tick;\n\t\t\t}\n\t\t});\n\n\t\treturn map;\n\t}, {} as { [staff: number]: Position[] });\n\n\t// append grace events into positions\n\tgraceEvents.forEach((event) => {\n\t\tconst staff = staffPositions[event.staff];\n\t\tif (staff) {\n\t\t\tconst position = staff.find((p) => p.event.x > event.x);\n\t\t\tif (position) position.graces.push(event);\n\t\t\tevent.roundX = event.x;\n\t\t\t//if (position.tick >= measure.duration)\n\t\t\t//\tevent.grace = GraceType.AfterGrace;\n\t\t}\n\t});\n\n\tObject.values(staffPositions).forEach((staff) =>\n\t\tstaff.forEach((position) => {\n\t\t\tif (position.graces.length) {\n\t\t\t\tposition.event.graceIds = position.graces.map((e) => e.id);\n\n\t\t\t\tconst totalDuration = position.graces.reduce((t, e) => t + e.duration, 0);\n\t\t\t\tconst duration = Math.min(totalDuration, position.tick - position.preTick);\n\t\t\t\tconst warp = duration / totalDuration;\n\n\t\t\t\tlet tick = position.tick;\n\t\t\t\t[...position.graces].reverse().forEach((event) => {\n\t\t\t\t\tevent.tick = Math.round(tick - event.duration * warp);\n\t\t\t\t\ttick = event.tick;\n\t\t\t\t});\n\t\t\t}\n\t\t})\n\t);\n};\n\nconst solveTremoloPairs = (measure: SpartitoMeasure): void => {\n\tconst catchers = measure.events.filter((event) => event.tremoloCatcher && !event.grace);\n\tconst pitchers = measure.events.filter((event) => event.tremoloLink === TremoloLink.Pitcher && !event.grace);\n\n\tcatchers.forEach((catcher) => {\n\t\tlet candidates = pitchers.filter((event) => event.division === catcher.division && event.x < catcher.x);\n\t\tif (!candidates.length)\n\t\t\tcandidates = measure.events.filter(\n\t\t\t\t(event) =>\n\t\t\t\t\tNumber.isFinite(event.tick) &&\n\t\t\t\t\t!event.grace &&\n\t\t\t\t\t!event.rest &&\n\t\t\t\t\tevent.division === catcher.division &&\n\t\t\t\t\tevent.dots === catcher.dots &&\n\t\t\t\t\tevent.x < catcher.x\n\t\t\t);\n\t\tcandidates.sort((c1, c2) => c2.x - c1.x);\n\t\tif (candidates.length) {\n\t\t\tconst pitcher = candidates[0];\n\t\t\tpitcher.catcherId = catcher.id;\n\t\t\tconst tremolo = Math.max(pitcher.tremolo || 3, catcher.tremolo || 3);\n\t\t\tpitcher.tremolo = tremolo;\n\t\t\tcatcher.tremolo = tremolo;\n\n\t\t\tif (!catcher.tick) catcher.tick = pitcher.tick + pitcher.duration / 2;\n\n\t\t\tconst pi = pitchers.indexOf(pitcher);\n\t\t\tif (pi >= 0) pitchers.splice(pi, 1);\n\t\t}\n\t});\n};\n\nnamespace EquationPolicy {\n\ttype EventID = number;\n\ttype Time = number;\n\n\tconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\n\tconst CHORDS_SEAM_SIGMA = 0.6;\n\tconst NEIGHBOR_CHORDS_SIGMA = 1.6;\n\tconst Y_DECAY_SIGMA = 16;\n\tconst STAFF_DECAY_FACTOR = 2;\n\tconst STEM_DIRECTION_DECAY = 0.9;\n\tconst ILL_BEAMS_PENALTY = 0.2;\n\n\tconst INVERT_SQRT2 = 0.7071067811865475;\n\n\tconst MATRIX_H_WEIGHT = 3;\n\n\tconst FINE_BEAMS = [\n\t\t[null, null],\n\t\t[null, StemBeam.Open],\n\t\t[StemBeam.Open, StemBeam.Continue],\n\t\t[StemBeam.Open, StemBeam.Close],\n\t\t[StemBeam.Continue, StemBeam.Continue],\n\t\t[StemBeam.Continue, StemBeam.Close],\n\t\t[StemBeam.Close, null],\n\t\t[StemBeam.Close, StemBeam.Open],\n\t].map((bb) => bb.join('-'));\n\n\tinterface Event {\n\t\tid: EventID;\n\t\tstaff: number;\n\t\tx: number;\n\t\ty: number;\n\t\tduration: Time;\n\t\tconfidence: number;\n\t\tshrinkness: number;\n\t}\n\n\texport interface StaffGroup {\n\t\tevents: Event[];\n\t\texpectedDuration: Time;\n\t\tmeasureShrinkness: number;\n\t\tendX: number;\n\t\tmatrixH: Matrix;\n\t\tmatrixV: Matrix;\n\n\t\tids?: EventID[];\n\t}\n\n\tinterface EventResult {\n\t\tid: EventID;\n\t\ttick: Time;\n\t\tendTick: Time;\n\t\ttickGroup: number;\n\t\ttimeWarp?: Fraction;\n\t}\n\n\texport interface StaffGroupSolution {\n\t\tevents: EventResult[];\n\t\tvoices: EventID[][];\n\t\tduration: number;\n\n\t\tloss?: number;\n\t\tcredits?: number;\n\t\ttimes?: number;\n\t}\n\n\texport interface RegulatorOptions extends EquationSolver.SolverOptions {\n\t\tsolver?: (staffGroup: StaffGroup, options: EquationSolver.SolverOptions) => Promise;\n\t}\n\n\tconst solveStaffGroup = (staffGroup: StaffGroup, options: EquationSolver.SolverOptions): StaffGroupSolution => {\n\t\tif (!staffGroup.events.length) {\n\t\t\treturn {\n\t\t\t\tevents: [],\n\t\t\t\tvoices: [],\n\t\t\t\tduration: 0,\n\t\t\t};\n\t\t}\n\n\t\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\t\treturn solver.solve();\n\t};\n\n\texport const estiamteMeasure = (measure: SpartitoMeasure): StaffGroup => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => ({\n\t\t\t\tid: event.id,\n\t\t\t\tstaff: event.staff,\n\t\t\t\tx: event.x,\n\t\t\t\ttickEstimated: event.predisposition && Number.isFinite(event.predisposition.tick) ? event.predisposition.tick : event.x,\n\t\t\t\ttipX: event.tipX,\n\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\tduration: (event.mainDuration * DURATION_MULTIPLIER) / WHOLE_DURATION,\n\t\t\t\tdivision: event.division,\n\t\t\t\tdots: event.dots,\n\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\tbeam: event.beam,\n\t\t\t\trest: event.rest,\n\t\t\t\t// the possibility of full measure rest\n\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\tshrinkness: event.predisposition ? event.predisposition.timeWarped : null,\n\t\t\t}));\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: Number.isFinite(e.shrinkness) ? e.shrinkness : Math.tanh((e.division - e.dots * 0.1) / 4),\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\t//const hp = (dx: number): number => 1 - erf(((dx / NEIGHBOR_CHORDS_SIGMA) ** 0.6) * INVERT_SQRT2);\n\t\tconst hp = (dx: number): number => erf(dx / NEIGHBOR_CHORDS_SIGMA) * erf(NEIGHBOR_CHORDS_SIGMA / dx);\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\tif (e1.staffGroup !== e2.staffGroup) matrixH[e1.id][e2.id] = 0;\n\t\t\t\t// prohibit voice crossing staff groups\n\t\t\t\telse if (e1.x <= e2.x) matrixH[e1.id][e2.id] = 0;\n\t\t\t\telse {\n\t\t\t\t\tconst staffDecay = Math.exp(-Math.abs(e1.staff - e2.staff) * STAFF_DECAY_FACTOR);\n\t\t\t\t\tconst yDecay = e1.staff === e2.staff ? Math.exp(-Math.abs(e1.y - e2.y) / Y_DECAY_SIGMA) : 1;\n\t\t\t\t\tconst dx = e1.x - e2.x;\n\t\t\t\t\tconst dtx = e1.tipX - e2.tipX;\n\t\t\t\t\tmatrixH[e1.id][e2.id] = (staffDecay * yDecay * Math.min(hp(dx), hp(dtx))) ** (1 / MATRIX_H_WEIGHT);\n\t\t\t\t}\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\t\t\t\tmatrixH[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\n\t\t\t\t// weaken inconsistent stem directions\n\t\t\t\tif (e1.stemDirection && e2.stemDirection && e1.stemDirection !== e2.stemDirection) matrixH[e1.id][e2.id] *= STEM_DIRECTION_DECAY;\n\n\t\t\t\t// ill beams penalty\n\t\t\t\tif (!e1.rest && !e2.rest && !FINE_BEAMS.includes([e2.beam, e1.beam].join('-'))) matrixH[e1.id][e2.id] *= ILL_BEAMS_PENALTY;\n\t\t\t}\n\n\t\t\t// H possibility of e1 and end of measure\n\t\t\tmatrixH[ids.length][e1.id] = hp(measure.width - e1.x) ** (1 / MATRIX_H_WEIGHT);\n\t\t}\n\n\t\treturn {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness: 0,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t};\n\n\texport const regulateMeasure = async (measure: SpartitoMeasure, { solver = null, ...options }: RegulatorOptions): Promise => {\n\t\tconst env = estiamteMeasure(measure);\n\t\tconst { ids, matrixH, matrixV } = env;\n\n\t\t// copy matrices values from measure topology data\n\t\tif (measure.matrixH) {\n\t\t\tconsole.assert(\n\t\t\t\tmeasure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t\t'matrix shape mismatch:',\n\t\t\t\tids.length,\n\t\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t\t);\n\t\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t\t}\n\t\t}\n\t\tif (measure.matrixV) {\n\t\t\tmatrixV.forEach((row, i) =>\n\t\t\t\trow.forEach((_, j) => {\n\t\t\t\t\tconst mp = measure.matrixV[ids[i]][ids[j]];\n\t\t\t\t\tif (Number.isFinite(mp)) matrixV[i][j] = mp;\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\tenv.measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tif (options.logger) options.logger.info('--- MEASURE', measure.measureIndex, '---', env);\n\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\t\tconst resultEvents = solution.events.map((e) => ({\n\t\t\t...e,\n\t\t\tid: env.ids[e.id], // decode compact ids\n\t\t}));\n\t\tresultEvents.forEach((e) => {\n\t\t\tconst event = measure.events.find((e0) => e0.id === e.id);\n\t\t\tevent.tick = Number.isFinite(e.tick) ? Math.round((e.tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : null;\n\t\t\tevent.tickGroup = e.tickGroup;\n\t\t\tevent.timeWarp = e.timeWarp;\n\t\t});\n\n\t\tmeasure.duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\t\tmeasure.voices = solution.voices.map((voice) => voice.map((id) => env.ids[id]));\n\n\t\tmeasure.solutionStat = {\n\t\t\tloss: solution.loss,\n\t\t\tsolverCredits: solution.credits,\n\t\t\tsolverTimes: solution.times,\n\t\t};\n\n\t\t// full measure rests\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst result = resultEvents.find((e) => e.id === event.id);\n\t\t\tif (!result) return;\n\t\t\telse if (!Number.isFinite(result.tick) && event.rest === 'r' && event.division === 0) {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.rest = 'R';\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t} else if (event.rest === 'R') {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t}\n\t\t});\n\t};\n\n\texport const regulateMeasureWithRectification = async (\n\t\tmeasure: SpartitoMeasure,\n\t\trectification: MeasureRectification,\n\t\t{ solver = null, ...options }: RegulatorOptions\n\t): Promise => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => {\n\t\t\t\tconst re = rectification.events.find((e) => e && e.id === event.id);\n\t\t\t\tconst division = Number.isFinite(re?.division) ? re.division : event.division;\n\t\t\t\tconst dots = Number.isFinite(re?.dots) ? re.dots : event.dots;\n\t\t\t\tconst duration = DURATION_MULTIPLIER * 2 ** -division * (2 - 2 ** -dots);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: event.id,\n\t\t\t\t\tstaff: event.staff,\n\t\t\t\t\tx: event.x,\n\t\t\t\t\ttickEstimated: event.predisposition?.tick,\n\t\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\t\tduration,\n\t\t\t\t\t// the possibility of full measure rest\n\t\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\t\tshrinkness: event.predisposition?.timeWarped || 0,\n\t\t\t\t};\n\t\t\t});\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: e.shrinkness,\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\t\t\t}\n\t\t}\n\n\t\t// copy matrices values from measure topology data\n\t\tconsole.assert(\n\t\t\tmeasure.matrixH && measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t'matrix shape mismatch:',\n\t\t\tids.length,\n\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t);\n\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t}\n\n\t\tlet measureShrinkness = 0;\n\t\tif (Number.isFinite(measure.estimatedDuration)) measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tconst env = {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\n\t\tconst priority = -solution.loss;\n\n\t\tconst events = solution.events.map(({ id, tick, tickGroup, timeWarp }) => {\n\t\t\tconst re = rectification.events.find((e) => e && e.id === id);\n\t\t\tconst tickN = Number.isFinite(tick) ? Math.round((tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : tick;\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttick: tickN,\n\t\t\t\ttickGroup,\n\t\t\t\ttimeWarp,\n\t\t\t\tdivision: re?.division,\n\t\t\t\tdots: re?.dots,\n\t\t\t};\n\t\t});\n\n\t\tconst duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\n\t\treturn {\n\t\t\tevents,\n\t\t\tvoices: solution.voices,\n\t\t\tduration,\n\t\t\tpriority,\n\t\t};\n\t};\n}\n\ntype Matrix = number[][];\n\ntype TickMap = Map;\n\ninterface SolutionStatistics {\n\tloss?: number;\n\tsolverCredits?: number;\n\tsolverTimes?: number;\n}\n\nclass SpartitoMeasure extends SimpleClass {\n\tstatic className = 'SpartitoMeasure';\n\tstatic blackKeys = ['staffGroups', 'solutionStat', 'measureNumber', 'deposit'];\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tstaffGroups: number[][];\n\toriginalRegulationHash?: string;\n\tmeasureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures\n\n\tpatched: boolean;\n\tdiscard: boolean;\n\n\tposition: {\n\t\tsystemIndex: number;\n\t\tlocalIndex: number; // the measure local index in its system\n\t\tleft: number;\n\t\tright: number;\n\t\tstaffYs?: number[];\n\t\tstaffYsFull?: number[];\n\t};\n\n\tbackgroundImages: BackgroundImage[];\n\n\tevents: EventTerm[];\n\tendEvent: Partial; // the placeholder for end tick\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n\tindent: boolean;\n\n\tsolutionStat?: SolutionStatistics;\n\n\tmatrixH: Matrix; // matrix N x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n\testimatedDuration: number;\n\n\tgraph: GraphMeasure;\n\n\tdeposit: Record;\n\n\tstatic reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[] {\n\t\tconst HALF_NOTEHEAD = 0.7;\n\n\t\tconst ys = [];\n\n\t\tconst es = events.map((e) => ({\n\t\t\tid: e.id,\n\t\t\tstaff: e.staff,\n\t\t\tx: e.x / HALF_NOTEHEAD,\n\t\t\trx: 0,\n\t\t\try: staffYsFull[e.staff] + e.tipY,\n\t\t\ttipY: e.tipY,\n\t\t\tprior: 0,\n\t\t}));\n\t\tes.sort((e1, e2) => e1.x - e2.x);\n\t\tes.slice(1).forEach((e, i) => {\n\t\t\tconst dx = Math.min(Math.round(e.x - es[i].x), 2);\n\t\t\te.rx = es[i].rx + dx;\n\t\t});\n\t\tes.forEach((e) => {\n\t\t\te.prior = e.staff * 1e4 + e.rx + e.tipY * 0.01;\n\n\t\t\tif (!ys.includes(e.ry)) ys.push(e.ry);\n\t\t});\n\t\tes.sort((e1, e2) => e1.prior - e2.prior);\n\t\tys.sort((y1, y2) => y1 - y2);\n\n\t\tlet yi = 0;\n\t\tconst yis = ys.map((y, i) => {\n\t\t\tif (!i || ys[i] - ys[i - 1] < 0.5) return yi;\n\n\t\t\t++yi;\n\t\t\treturn yi;\n\t\t});\n\n\t\tconst result = es.map((e) => new EventTerm({ ...events.find((ev) => ev.id === e.id), intX: e.rx, intY: yis[ys.indexOf(e.ry)] }));\n\t\tresult.forEach((e, i) => (e.id = i + 1));\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tif (!this.originalRegulationHash && !this.regulated) this.originalRegulationHash = this.regulationHash;\n\n\t\tthis.barTypes = this.barTypes || {};\n\n\t\t// Ensure postRegulate runs for measures deserialized with voices (e.g. from patches/JSON)\n\t\t// to set endEvent and roundX needed for playback cursor positioning.\n\t\tif (this.regulated && this.position) this.postRegulate();\n\t}\n\n\tget timeSignature(): Fraction {\n\t\treturn this.basics && this.basics[0].timeSignature;\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.basics && this.basics[0].keySignature;\n\t}\n\n\tget timeSignatureChanged(): boolean {\n\t\treturn this.contexts.filter(Boolean)[0].some((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type));\n\t}\n\n\tget doubtfulTimesig(): boolean {\n\t\treturn this.basics && this.basics[0].doubtfulTimesig;\n\t}\n\n\tget regulated(): boolean {\n\t\treturn !!this.voices;\n\t}\n\n\tget validRegulated(): boolean {\n\t\tif (!this.voices) return false;\n\n\t\treturn this.voices.flat(1).every((id) => Number.isFinite(this.events.find((e) => e.id === id)?.tick));\n\t}\n\n\tget rows(): EventMeasure[] {\n\t\treturn this.contexts.map((contexts, si) => {\n\t\t\tconst events = this.events.filter((e) => e.staff === si);\n\n\t\t\treturn {\n\t\t\t\tevents,\n\t\t\t\tcontexts,\n\t\t\t};\n\t\t});\n\t}\n\n\tget eventStartX(): number {\n\t\treturn this.events.length ? Math.min(...this.events.map((e) => e.x)) : this.startX;\n\t}\n\n\tget startX(): number {\n\t\treturn this.position.left;\n\t}\n\n\tget width(): number {\n\t\treturn this.position.right - this.position.left;\n\t}\n\n\tget tickMap(): TickMap {\n\t\treturn this.events\n\t\t\t.concat([this.endEvent as EventTerm])\n\t\t\t.filter(Boolean)\n\t\t\t.reduce((map, event) => {\n\t\t\t\tif (Number.isFinite(event.tick)) {\n\t\t\t\t\tif (!map.has(event.tick)) map.set(event.tick, []);\n\n\t\t\t\t\tmap.get(event.tick).push(event);\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}, new Map());\n\t}\n\n\tget tickToX(): { [tick: number]: number } {\n\t\treturn [...this.tickMap.entries()].reduce((map, [tick, events]) => {\n\t\t\tevents = events.filter((e) => !e.fullMeasureRest && !e.grace);\n\t\t\tif (events.length) {\n\t\t\t\tconst x = Math.min(...events.map((e) => e.x));\n\t\t\t\tmap[tick] = x;\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget tickRates(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tevents.sort((e1, e2) => e1.x - e2.x);\n\n\t\treturn events.slice(0, events.length - 1).map((e1, i) => {\n\t\t\tconst e2 = events[i + 1];\n\n\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t});\n\t}\n\n\tget tickRatesInStaves(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(sevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickRatesInGroups(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(gevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickTwist(): number {\n\t\tif (!this.duration || !this.staffGroups) return undefined;\n\n\t\tconst events = this.events.filter(\n\t\t\t(event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !(event.rest && event.division === 0)\n\t\t); // ignore rest0\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst twists = Object.values(gevents).map((es) => {\n\t\t\tconst eventsXOrder = [...es].sort((e1, e2) => e1.pivotX - e2.pivotX);\n\t\t\tconst xSpan = this.position.right - eventsXOrder[0].x;\n\t\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\t\tconst e1 = eventsXOrder[i];\n\t\t\t\tconst dx = e2.pivotX - e1.pivotX;\n\t\t\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\t\t\tif (!dt) return dx / xSpan;\n\n\t\t\t\tconst rate = Math.atan2(dt / this.duration, dx / xSpan);\n\n\t\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t\t});\n\n\t\t\treturn Math.max(0, ...tickTwists);\n\t\t});\n\n\t\treturn Math.max(0, ...twists);\n\t}\n\n\tget eventMap(): Record {\n\t\treturn this.events.reduce((map, event) => {\n\t\t\tmap[event.id] = event;\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget empty(): boolean {\n\t\treturn !this.events?.length || !this.voices?.length;\n\t}\n\n\tget hasIllEvent(): boolean {\n\t\tconst voicedEventIds = this.voices.flat(1);\n\t\tconst eventMap = this.eventMap;\n\t\treturn (\n\t\t\tthis.regulated &&\n\t\t\tvoicedEventIds.some((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\treturn !event.zeroHolder && !Number.isFinite(event.tick) && !event.fullMeasureRest;\n\t\t\t})\n\t\t);\n\t}\n\n\tget brief(): string {\n\t\tconst timesig = `${this.timeSignature.numerator}/${this.timeSignature.denominator}`;\n\t\tconst eventBrieves = this.events.map((e) =>\n\t\t\t[\n\t\t\t\te.staff,\n\t\t\t\te.intX,\n\t\t\t\tMath.round(e.tip ? e.tip.y : e.ys?.[0] ?? 0),\n\t\t\t\te.fullMeasureRest ? 0 : e.division,\n\t\t\t\te.fullMeasureRest ? 0 : e.dots,\n\t\t\t\te.rest ? 'r' : '',\n\t\t\t\te.grace || '',\n\t\t\t\te.stemDirection,\n\t\t\t\te.beam || '',\n\t\t\t].join('|')\n\t\t);\n\n\t\treturn [timesig, ...eventBrieves].join('\\n');\n\t}\n\n\tget regulationHash(): string {\n\t\treturn sha1(this.brief);\n\t}\n\n\t// prefer use originalRegulationHash\n\tget regulationHash0(): string {\n\t\treturn this.originalRegulationHash || this.regulationHash;\n\t}\n\n\tget regulationHashes(): string[] {\n\t\treturn Array.from(new Set([this.originalRegulationHash, this.regulationHash].filter(Boolean)));\n\t}\n\n\tget featureWords(): string[][] | null {\n\t\tif (!this.regulated || !this.voices || !this.voices.length) return null;\n\n\t\tconst invalid = this.tickRatesInStaves.some((rate) => rate < 0);\n\n\t\tconst mainEvents = this.events.filter((event) => !event.zeroHolder && !event.rest);\n\n\t\tconst ys = mainEvents\n\t\t\t.map((event) => event.ys)\n\t\t\t.flat(1)\n\t\t\t.map((y) => `Y${-y * 2}`);\n\t\tconst uys = Array.from(new Set(ys));\n\t\tif (this.keySignature) uys.push(`K${this.keySignature}`);\n\n\t\tconst voices = this.voices\n\t\t\t.map((ids) => ids.map((id) => this.events.find((e) => e.id === id)).filter((event) => !event.zeroHolder && !event.rest))\n\t\t\t.filter((voice) => voice.length);\n\n\t\tconst melodies = invalid ? [] : voices.map((es) => es.map((e) => e.scaleChord).join('-'));\n\n\t\tconst rhythm = invalid ? [] : voices.map((es) => es.map((e) => e.division).join(''));\n\t\tif (this.timeSignature) rhythm.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`);\n\n\t\treturn [uys, melodies, rhythm];\n\t}\n\n\tget barType(): MeasureBarType {\n\t\tif (this.voltaEnd) return 'VoltaRight';\n\n\t\tconst typeEntris = Object.entries(this.barTypes).sort((e1, e2) => e2[1] - e1[1]);\n\t\tif (typeEntris[0] && typeEntris[0][1] >= 1) return typeEntris[0][0] as MeasureBarType;\n\n\t\treturn null;\n\t}\n\n\tget partialDuration(): boolean {\n\t\tif (!Number.isFinite(this.duration)) return false;\n\n\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\treturn this.duration < signatureDuration;\n\t}\n\n\tpostRegulate(): void {\n\t\tthis.endEvent = new EventTerm({ tick: this.duration, x: this.position.right });\n\n\t\tthis.updateRoundX();\n\t\tsolveGraceEvents(this);\n\t\tsolveTremoloPairs(this);\n\t\tthis.updateContextTick();\n\t}\n\n\tupdateRoundX(): void {\n\t\tconst tickToX = this.tickToX;\n\t\tif (tickToX)\n\t\t\tthis.events.forEach((event) => {\n\t\t\t\tconst x = tickToX[event.tick];\n\t\t\t\tif (Number.isFinite(x)) event.roundX = x;\n\t\t\t});\n\t}\n\n\tupdateContextTick(): void {\n\t\tif (!this.staffGroups) return;\n\t\tconst contexts = this.contexts.flat(1);\n\t\tthis.staffGroups.flat(1).forEach((staffIndex) => {\n\t\t\tconst terms = [...this.events.filter((e) => e.staff === staffIndex), ...contexts.filter((c) => c.staff === staffIndex)];\n\t\t\tterms.sort((t1, t2) => t2.x - t1.x); // order by x from right to left\n\n\t\t\tlet tick = this.duration;\n\t\t\tterms.forEach((term) => {\n\t\t\t\tif (term instanceof EventTerm) {\n\t\t\t\t\tif (!term.fullMeasureRest && !term.zeroHolder) tick = term.tick;\n\t\t\t\t} else if (term instanceof ContextedTerm) term.tick = tick;\n\t\t\t});\n\t\t});\n\t}\n\n\tasSolution(ref: SpartitoMeasure = undefined): RegulationSolution {\n\t\tif (!this.regulated) return null;\n\n\t\t//let timeSignature = undefined;\n\t\t//if (ref && printFraction(ref.timeSignature) !== printFraction(this.timeSignature)) timeSignature = this.timeSignature;\n\n\t\treturn {\n\t\t\t//timeSignature,\n\t\t\tevents: this.events.map((e) => {\n\t\t\t\tconst se = {\n\t\t\t\t\tid: e.id,\n\t\t\t\t\ttick: e.tick,\n\t\t\t\t\ttickGroup: e.tickGroup,\n\t\t\t\t\ttimeWarp: e.timeWarp,\n\t\t\t\t} as RegulationSolutionEvent;\n\n\t\t\t\tif (ref) {\n\t\t\t\t\tconst refEvent = ref.events.find((re) => re.id === e.id);\n\t\t\t\t\tif (refEvent) {\n\t\t\t\t\t\tif (e.division !== refEvent.division) se.division = e.division;\n\t\t\t\t\t\tif (e.dots !== refEvent.dots) se.dots = e.dots;\n\t\t\t\t\t\tif (e.grace !== refEvent.grace) se.grace = !!e.grace;\n\t\t\t\t\t\tif (e.beam !== refEvent.beam) se.beam = e.beam;\n\t\t\t\t\t\tif (e.fullMeasureRest !== refEvent.fullMeasureRest) se.fullMeasure = e.fullMeasureRest;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn se;\n\t\t\t}),\n\t\t\tvoices: this.voices,\n\t\t\tduration: this.duration,\n\t\t\tpriority: -this.solutionStat?.loss,\n\t\t};\n\t}\n\n\tapplySolution(solution: RegulationSolution): void {\n\t\tif (solution.timeSignature) {\n\t\t\tthis.basics.forEach((basic) => {\n\t\t\t\tbasic.timeSignature = solution.timeSignature;\n\t\t\t\tbasic.doubtfulTimesig = false;\n\t\t\t});\n\t\t}\n\n\t\tthis.voices = solution.voices;\n\t\tthis.duration = solution.duration;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.timeWarp = null;\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\n\t\t\tconst se = solution.events?.find((e) => e.id === event.id);\n\t\t\tif (se) {\n\t\t\t\tevent.tick = se.tick;\n\t\t\t\tevent.timeWarp = se.timeWarp;\n\t\t\t\tevent.tickGroup = se.tickGroup;\n\n\t\t\t\tif (Number.isFinite(se.division)) event.division = se.division;\n\t\t\t\tif (Number.isFinite(se.dots)) event.dots = se.dots;\n\t\t\t\tif (se.beam !== undefined) event.beam = se.beam as StemBeam;\n\t\t\t\tif (se.grace !== undefined) event.grace = se.grace ? GraceType.Grace : undefined;\n\t\t\t\tif (se.fullMeasure) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tif (Number.isFinite(solution.priority)) this.solutionStat = { loss: -solution.priority };\n\n\t\tthis.postRegulate();\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.voices = null;\n\t\tthis.duration = null;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\t\t\tevent.timeWarp = null;\n\t\t});\n\t}\n\n\tregulateTest(): void {\n\t\tthis.duration = 0;\n\t\tthis.voices = this.rows.map((row) => row.events.map((e) => e.id));\n\t\tthis.voices.forEach((ids) => {\n\t\t\tlet tick = 0;\n\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\t\t\tevents.forEach((e, index) => {\n\t\t\t\te.tickGroup = index;\n\t\t\t\te.tick = tick;\n\n\t\t\t\ttick += e.duration;\n\t\t\t});\n\n\t\t\tthis.duration = Math.max(this.duration, tick);\n\t\t});\n\t}\n\n\tregulateSimple(): void {\n\t\tSimplePolicy.computeMeasureTicks(this);\n\t\tSimplePolicy.computeMeasureVoices(this);\n\t}\n\n\tasync regulateEquations(options: EquationPolicy.RegulatorOptions): Promise {\n\t\tawait EquationPolicy.regulateMeasure(this, options);\n\t}\n\n\t// compute event.tick, event.tickGroup, event.timeWarp, voices, duration\n\tasync regulate({ policy = 'advanced', ...options }: RegulationOptions = {}): Promise {\n\t\tswitch (policy) {\n\t\t\tcase 'test':\n\t\t\t\tthis.regulateTest();\n\n\t\t\t\tbreak;\n\t\t\tcase 'equations':\n\t\t\tcase 'advanced':\n\t\t\t\tawait this.regulateEquations(options);\n\n\t\t\t\tbreak;\n\t\t\tcase 'simple':\n\t\t\tdefault:\n\t\t\t\tthis.regulateSimple();\n\t\t}\n\n\t\tthis.postRegulate();\n\t}\n\n\tcreatePatch(): PatchMeasure {\n\t\treturn new PatchMeasure({\n\t\t\tmeasureIndex: this.measureIndex,\n\t\t\tstaffMask: this.staffMask,\n\t\t\tbasic: this.basics[0],\n\t\t\t//points: [],\n\t\t\tevents: this.events,\n\t\t\tcontexts: this.contexts,\n\t\t\tmarks: this.marks,\n\t\t\tvoices: this.voices,\n\t\t});\n\t}\n\n\tcreateClusters(): EventCluster[] {\n\t\tconst trueEventIds = this.voices && new Set(this.voices.flat(1));\n\n\t\treturn this.staffGroups\n\t\t\t.filter((idx) => idx.length)\n\t\t\t.map((staffIndices) => {\n\t\t\t\tconst staffY0 = this.position.staffYs[0];\n\t\t\t\tconst staffYn = (n) => this.position.staffYs[staffIndices.indexOf(n)] - staffY0;\n\n\t\t\t\tconst events = this.events.filter((event) => staffIndices.includes(event.staff));\n\t\t\t\tif (!events.length) return null;\n\n\t\t\t\tconst elements: EventElement[] = events.map((event) => ({\n\t\t\t\t\tindex: event.id,\n\t\t\t\t\tvoice: (this.voices || []).findIndex((voice) => voice.includes(event.id)),\n\t\t\t\t\ttype: event.rest ? EventElementType.REST : EventElementType.CHORD,\n\t\t\t\t\tstaff: staffIndices.indexOf(event.staff),\n\t\t\t\t\tx: event.tipX,\n\t\t\t\t\tpivotX: event.pivotX,\n\t\t\t\t\ty1: staffYn(event.staff) + (event.stemDirection === 'u' ? event.tipY : event.ys[event.ys.length - 1]),\n\t\t\t\t\ty2: staffYn(event.staff) + (event.stemDirection === 'u' ? event.ys[0] : event.tipY),\n\t\t\t\t\theadY: event.stemDirection === 'u' ? event.ys[0] : event.ys[event.ys.length - 1],\n\t\t\t\t\tfeature: event.feature,\n\t\t\t\t\tdivision: event.division,\n\t\t\t\t\tdots: event.dots,\n\t\t\t\t\tbeam: event.beam || null,\n\t\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\t\tgrace: !!event.grace,\n\t\t\t\t\ttremoloCatcher: event.tremoloCatcher,\n\t\t\t\t\ttimeWarped: !!event.timeWarp,\n\t\t\t\t\tfullMeasure: event.fullMeasureRest,\n\t\t\t\t\ttick: event.tick || 0,\n\t\t\t\t\tfake: !event.fullMeasureRest && !event.grace && this.voices && !trueEventIds.has(event.id), // tremoloCatcher deemed as fake\n\t\t\t\t}));\n\t\t\t\tif (!elements.some((elem) => !elem.fake)) return null;\n\n\t\t\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\t\t\t// BOS & EOS\n\t\t\t\telements.unshift({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\ttype: EventElementType.BOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.left,\n\t\t\t\t\tpivotX: this.position.left,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: this.duration < signatureDuration,\n\t\t\t\t\ttick: 0,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\t\t\t\telements.push({\n\t\t\t\t\tindex: -1,\n\t\t\t\t\ttype: EventElementType.EOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.right,\n\t\t\t\t\tpivotX: this.position.right,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: false,\n\t\t\t\t\ttick: this.duration,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\n\t\t\t\tlet matrixH = null;\n\t\t\t\tif (this.voices) {\n\t\t\t\t\tmatrixH = elements.map(() => elements.map(() => 0));\n\n\t\t\t\t\tthis.voices.forEach((voice) => {\n\t\t\t\t\t\tlet tar = 0;\n\t\t\t\t\t\tvoice.forEach((id) => {\n\t\t\t\t\t\t\tconst src = elements.findIndex((e) => e.index === id);\n\t\t\t\t\t\t\tif (src > 0 && tar >= 0) matrixH[src][tar] = 1;\n\t\t\t\t\t\t\ttar = src;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (tar >= 0) matrixH[elements.length - 1][tar] = 1;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst annotation = { ...this.solutionStat, patched: this.patched };\n\n\t\t\t\tconst backgroundImages =\n\t\t\t\t\tthis.backgroundImages &&\n\t\t\t\t\tthis.backgroundImages.map(({ url, position }) => ({\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t...position,\n\t\t\t\t\t\t\ty: position.y - staffY0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\n\t\t\t\treturn new EventCluster({\n\t\t\t\t\tindex: this.measureIndex,\n\t\t\t\t\tduration: this.duration,\n\t\t\t\t\tsignatureDuration,\n\t\t\t\t\tstaffY0,\n\t\t\t\t\telements,\n\t\t\t\t\tmatrixH,\n\t\t\t\t\tannotation,\n\t\t\t\t\tbackgroundImages,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n\n\tapplyClusters(clusters: EventCluster[]): void {\n\t\tconst id_max = this.events.reduce((max, event) => Math.max(max, event.id), 0) + 1;\n\t\tthis.matrixH = Array(id_max + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(id_max).fill(0));\n\n\t\tclusters.forEach((cluster) => {\n\t\t\tconst ids = cluster.elements.map((e) => e.index);\n\t\t\tconsole.assert(cluster.matrixH.length === ids.length - 1, 'unexpected matrixH size:', cluster.matrixH.length, ids.length);\n\n\t\t\tfor (let is = 1; is < ids.length; ++is) {\n\t\t\t\tfor (let it = 0; it < ids.length - 1; ++it) {\n\t\t\t\t\tconst srcId = ids[is] < 0 ? id_max : ids[is];\n\t\t\t\t\tconst tarId = ids[it];\n\n\t\t\t\t\tthis.matrixH[srcId][tarId] = cluster.matrixH[is - 1][it];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// event predisposition\n\t\t\tcluster.elements.forEach((elem) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === elem.index);\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.predisposition = elem.predisposition;\n\t\t\t\t\tif (event.predisposition.grace !== undefined) event.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// estimated measure duration\n\t\tthis.estimatedDuration = clusters.reduce((sum, cluster) => sum + cluster.estimatedDuration, 0) / clusters.length;\n\t}\n}\n\nexport { SpartitoMeasure, EquationPolicy };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { Term, EventTerm, ContextedTerm, ChordmodeTerm, MarkTerm, Accessory, GraceType, TremoloLink } from './term';\nimport { HashVector } from './hashVector';\nimport { StaffLayout } from '../staffLayout';\nimport * as measureLayout from '../measureLayout';\n\ninterface Rect {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n}\n\ninterface ChordRect {\n\tx: number;\n\tstemX: number;\n\twidth: number;\n\ttop: number;\n\tbottom: number;\n\tstemDirection: string;\n\ttip?: { x: number; y: number };\n}\n\ninterface VLine {\n\tx: number;\n\ty1: number;\n\ty2: number;\n}\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ntype DivisionVecotor = [number, number, number, number, number, number, number, number, number]; // [0, 1, 2, 3, 4, 5, 6, 7, 8]\n\ntype MeasureBarType = null | 'Terminal' | 'Segment' | 'VoltaRight';\n\ninterface EventFeature {\n\tdivisions: DivisionVecotor;\n\tdots: [number, number]; // [1, 2]\n\tbeams: [number, number, number]; // ['Open', 'Continue', 'Close']\n\tstemDirections: [number, number]; // ['u', 'd']\n\tgrace: number;\n\ttremoloCatcher: number;\n}\n\ninterface EventPredisposition {\n\tgrace: boolean;\n\ttimeWarped: number;\n\tfullMeasure: number;\n\tfake: number;\n\tfakeP: number;\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tdivisionVector: DivisionVecotor;\n\tdotsVector: [number, number, number]; // [0, 1, 2]\n\tbeamVector: [number, number, number, number]; // [null, open, continue, close]\n\tstemDirectionVector: [number, number, number]; // [null, up, down]\n}\n\ninterface ChordColumn {\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\tys: number[];\n\tnoteIds: string[]; // order by upwards\n\tdivision: number;\n\tdots: number;\n\trest: boolean;\n\tstemDirection: string;\n\taccessories?: Accessory[];\n\tgrace?: GraceType;\n\ttremolo?: number;\n\ttremoloLink?: TremoloLink;\n\tbeam?: string;\n\ttip?: { x: number; y: number };\n\n\t//stemTipY?: number;\n\n\t// for topology\n\tstaff?: number;\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature?: EventFeature;\n}\n\ninterface EventMeasure {\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[];\n}\n\ninterface StaffBasic {\n\ttimeSignature: Fraction;\n\ttimeSigNumeric: boolean;\n\tkeySignature: number;\n\tdoubtfulTimesig: boolean;\n}\n\ninterface EventMeasureColumn {\n\tmeasureIndex: number;\n\t//startX: number;\n\t//width: number;\n\n\trows: EventMeasure[]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\txMap?: Map;\n\tregularLoss?: number;\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n}\n\ninterface EventSystem {\n\tstaffMask: number;\n\tcolumns: EventMeasureColumn[]; // [measure]\n}\n\ninterface TermMeasure extends Partial {\n\tterms: Term[];\n\tduration: number;\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n}\n\ntype TermRow = TermMeasure[];\n\ninterface TermStaff {\n\trows: TermRow[]; // [system]\n}\n\ninterface Pitch {\n\tnote: number;\n\talter: number;\n}\n\nenum PageLayoutMethod {\n\tByLines = 'ByLines',\n\tByBlocks = 'ByBlocks',\n}\n\ninterface RecognitionSettings {\n\tenabledGauge: boolean; // staves straighten\n\tpageLayoutMethod: PageLayoutMethod;\n\tsemanticConfidenceThreshold: number;\n}\n\ninterface Crop {\n\taspect?: number | undefined;\n\tx?: number | undefined;\n\ty?: number | undefined;\n\twidth?: number | undefined;\n\theight?: number | undefined;\n\tunit?: 'px' | '%' | undefined;\n}\n\n//\t0 2 4\t\t\tr r tx\n//\t1 3 5\t\t\tr r ty\ntype Matrix2x3 = [number, number, number, number, number, number];\n\ninterface SourceImageFile {\n\tname: string;\n\tsize: number;\n\turl: string;\n\tcrop?: Crop;\n\tmatrix: Matrix2x3;\n\tdimensions: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tinterval: number;\n\tneedGauge?: boolean;\n}\n\ninterface Area extends Rect {\n\tstaves: {\n\t\tinterval: number;\n\t\tmiddleRhos: number[];\n\t\tphi1: number;\n\t\tphi2: number;\n\t};\n}\n\ninterface PageLayout {\n\tareas: Area[];\n}\n\ninterface MeasureBrief {\n\ttimeSignature: Fraction;\n}\n\ninterface VoiceMeasure {\n\ttickMap: { [key: number]: EventTerm | ChordmodeTerm };\n\tduration: number;\n\n\ttimeSignature?: Fraction;\n\ttimeSigNumeric?: boolean;\n\tkeySignature?: number;\n\n\tcontextedTerms: ContextedTerm[];\n\tmarks: MarkTerm[];\n\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbar?: string;\n\n\tempty?: boolean;\n\n\theadStaff?: number;\n\ttailStaff?: number;\n\n\ttrait?: HashVector;\n\tvoiceIndex?: number;\n}\n\ninterface TermVoice {\n\tmode: string;\n\tmeasures: VoiceMeasure[];\n}\n\ninterface VoicesStaff {\n\tcontext?: string;\n\tname?: string;\n\tvoices: TermVoice[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n\tslashSystemSeparator: boolean;\n}\n\ninterface MusicHeaders {\n\ttitle: string;\n\tsubtitle: string;\n\tsubsubtitle: string;\n\tcomposer: string;\n\tpoet: string;\n\tarranger: string;\n\topus: string;\n\tcopyright: string;\n\tinstrument: string;\n\tdedication: string;\n\ttagline: string;\n}\n\ninterface MusicSheet {\n\ttitle: string;\n\tpageSize: {\n\t\t// in pixels\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tunitSize: number;\n\tmeasureLayout?: measureLayout.MeasureLayout;\n\tstaffLayout: StaffLayout;\n\tpaperOptions?: Partial;\n\theaders: Partial;\n\n\tvoiceStaves: VoicesStaff[];\n\tinstrumentDict: { [key: string]: string };\n}\n\ninterface Performing {\n\tnotation: MetaNotation;\n\ttokenMap: Map;\n}\n\ntype RegulationPolicy = 'test' | 'simple' | 'equations' | 'advanced';\n\ninterface RegulationOptions {\n\tpolicy?: RegulationPolicy;\n\tquota?: number;\n\t[key: string]: any;\n}\n\ninterface ScoreData {\n\tversion?: number;\n\t[key: string]: any;\n}\n\ninterface AdditionalLineStack {\n\tleft: number;\n\tright: number;\n\tn: number;\n}\n\ninterface RegulationSolutionEvent {\n\tid: number;\n\ttick: number;\n\ttickGroup: number;\n\ttimeWarp: Fraction;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: string;\n\tgrace?: boolean;\n\tfullMeasure?: boolean;\n}\n\ninterface RegulationSolution {\n\tevents: RegulationSolutionEvent[];\n\tvoices: number[][];\n\tduration: number;\n\tpriority?: number;\n\testimatedDuration?: number;\n\ttimeSignature?: Fraction;\n}\n\ninterface BackgroundImage {\n\turl: string;\n\tposition: Rect;\n\toriginal?: boolean;\n}\n\nenum TextType { //\tLEVEL\t\t\tCHARSET\n\tTitle = 'Title', // page\t\t\t\tgeneral\n\tAuthor = 'Author', // page\t\t\t\tgeneral\n\tTempoText = 'TempoText', // measure\t\t\tspecific vocabulary\n\tTempoNumeral = 'TempoNumeral', // measure\t\t\tsymbolic and numeric\n\tTextualMark = 'TextualMark', // term\t\t\t\tspecific vocabulary\n\tLyric = 'Lyric', // term\t\t\t\tgeneral\n\tInstrument = 'Instrument', // system\t\t\tspecific vocabulary\n\tMeasureNumber = 'MeasureNumber', // system\t\t\tnumeric\n\tTimes = 'Times', // staff\t\t\tnumeric\n\tAlternation1 = 'Alternation1', // measure\t\t\tnumeric\n\tAlternation2 = 'Alternation2', // measure\t\t\tnumeric\n\tChord = 'Chord', // measure\t\t\tspecific domian\n\tPageMargin = 'PageMargin', // page\t\t\t\tgeneral\n\tOther = 'Other', // page\t\t\t\tgeneral\n}\n\nexport {\n\tRect,\n\tChordRect,\n\tVLine,\n\tFraction,\n\tMeasureBarType,\n\tEventFeature,\n\tEventPredisposition,\n\tChordColumn,\n\tEventMeasure,\n\tEventMeasureColumn,\n\tEventSystem,\n\tTermMeasure,\n\tTermRow,\n\tTermStaff,\n\tPitch,\n\tPageLayoutMethod,\n\tRecognitionSettings,\n\tSourceImageFile,\n\tPageLayout,\n\tStaffBasic,\n\tVoiceMeasure,\n\tVoicesStaff,\n\tTermVoice,\n\tMeasureBrief,\n\tAdditionalLineStack,\n\tTextType,\n\tMusicSheet,\n\tPerforming,\n\tRegulationOptions,\n\tScoreData,\n\tMusicHeaders,\n\tMatrix2x3,\n\tRegulationSolutionEvent,\n\tRegulationSolution,\n\tBackgroundImage,\n};\n","import { MIDI } from '@k-l-lambda/music-widgets';\n\nimport { Fraction } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ArpeggioStyle, EventTerm, GraceType, RestType, StemBeam, TermPitch, TremoloLink } from './term';\nimport { noteToPitch } from './utils';\n\n// NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI\n\ninterface EventUIAgent {\n\treadonly id: number;\n\treadonly duration: number;\n\n\t//ys: number[];\n\tpitches: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\tgrace: boolean; //\n\tbeam: StemBeam;\n\ttimeWarp: string; //\n\ttremolo: number;\n\ttremoloLink: TremoloLink;\n\tglissando: boolean;\n\tarpeggioStyle: ArpeggioStyle;\n\ttick: number;\n}\n\ninterface MeasureUIAgent {\n\treadonly measureIndex: number;\n\ttimeSignature: Fraction;\n\tdoubtfulTimesig: boolean;\n\tkeySignature: number;\n\t//readonly events: EventUIAgent[];\n\tduration: number;\n\treadonly voices: number[][];\n}\n\nclass EditableEvent extends EventTerm {\n\tvoice: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t}\n\n\tget agent(): EventUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget(target, key): any {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'arpeggioStyle': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? null : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'glissando': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? false : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\treturn !!self.grace;\n\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\treturn self.timeWarp ? `${self.timeWarp.numerator}/${self.timeWarp.denominator}` : null;\n\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\treturn self.multiplier ? `${self.multiplier.numerator}/${self.multiplier.denominator}` : null;\n\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn self.pitches;\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'glissando':\n\t\t\t\t\tcase 'arpeggioStyle':\n\t\t\t\t\t\t(self as any)[key] = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\tself.grace = value ? GraceType.Grace : null;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\tself.timeWarp = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.timeWarp = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\tself.multiplier = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.multiplier = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => [\n\t\t\t\t'id',\n\t\t\t\t'duration',\n\t\t\t\t'rest',\n\t\t\t\t'division',\n\t\t\t\t'dots',\n\t\t\t\t'stemDirection',\n\t\t\t\t'tying',\n\t\t\t\t'tied',\n\t\t\t\t'beam',\n\t\t\t\t'timeWarp',\n\t\t\t\t'multiplier',\n\t\t\t\t'tremolo',\n\t\t\t\t'tremoloLink',\n\t\t\t\t'glissando',\n\t\t\t\t'arpeggioStyle',\n\t\t\t\t'tick',\n\t\t\t\t'grace',\n\t\t\t\t'pitches',\n\t\t\t],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n}\n\nclass EditableMeasure extends SpartitoMeasure {\n\tstatic className = 'EditableMeasure';\n\tstatic blackKeys = [];\n\n\tevents: EditableEvent[] = null;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\n\t\tthis.events = data.events;\n\t\tif (this.events?.some((event) => !(event instanceof EditableEvent))) this.events = this.events.map((event) => new EditableEvent(event));\n\n\t\tif (this.voices) this.syncVoiceToEvents();\n\t}\n\n\tsyncVoiceToEvents(): void {\n\t\tthis.events.forEach((event) => (event.voice = -1));\n\t\tthis.voices.forEach((voice, voiceIndex) => {\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\tif (event) event.voice = voiceIndex;\n\t\t\t\telse console.warn('no event with id:', id, this.events.length);\n\t\t\t});\n\t\t});\n\t}\n\n\tsyncVoiceFromEvents(): void {\n\t\tconst voices: EditableEvent[][] = [];\n\t\tthis.events.forEach((event) => {\n\t\t\tif (event?.voice >= 0) {\n\t\t\t\tvoices[event.voice] = voices[event.voice] || [];\n\t\t\t\tvoices[event.voice].push(event);\n\t\t\t}\n\t\t});\n\n\t\tvoices.forEach((voice) => voice.sort((e1, e2) => e1.tick - e2.tick));\n\n\t\tthis.voices = voices.map((voice) => voice.map((event) => event.id));\n\t}\n\n\tget agent(): MeasureUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget: (target, key): any => {\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\treturn self[key];\n\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn self.voices?.map((voice) => voice.join(',')) || null;\n\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\treturn self.basics[0][key];\n\t\t\t\t\t//case 'events':\n\t\t\t\t\t//\treturn self.events.map(eventUIAgent);\n\t\t\t\t\tcase 'toJSON':\n\t\t\t\t\t\treturn () => ({\n\t\t\t\t\t\t\tmeasureIndex: self.measureIndex,\n\t\t\t\t\t\t\tvoices: self.voices,\n\t\t\t\t\t\t\tduration: self.duration,\n\t\t\t\t\t\t\ttimeSignature: self.basics[0].timeSignature,\n\t\t\t\t\t\t\tkeySignature: self.basics[0].keySignature,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\t//console.log('set:', key, value);\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\t(self.basics[0][key] as any) = value;\n\t\t\t\t\t\tself.basics = self.basics.map(() => self.basics[0]);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\tself.duration = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => ['measureIndex', 'timeSignature', 'doubtfulTimesig', 'keySignature', 'duration', 'voices'],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n\n\tmakeMIDI(bpm: number = 120): MIDI.MidiData {\n\t\tif (!this.regulated) return null;\n\n\t\tconst microsecondsPerBeat = 60e6 / bpm;\n\n\t\tconst header = { formatType: 0, ticksPerBeat: 480 };\n\t\tconst tracks = this.voices.map((ids, vi) => {\n\t\t\tconst events = ids\n\t\t\t\t.map((id) => {\n\t\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\t\tif (event) {\n\t\t\t\t\t\tconst subEvents = event.graceIds ? event.graceIds.map((id) => this.events.find((event) => event.id === id)) : [];\n\n\t\t\t\t\t\treturn [...subEvents, event];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [];\n\t\t\t\t})\n\t\t\t\t.flat(1);\n\n\t\t\tconst startTime = 0;\n\n\t\t\ttype Event = MIDI.MidiEvent & { [key: string]: any };\n\t\t\tconst midiEvents: Event[] = events\n\t\t\t\t.filter((event) => !event.rest && Number.isFinite(event.tick) && event.tick >= 0 && Number.isFinite(event.duration))\n\t\t\t\t.map((event) =>\n\t\t\t\t\tevent.pitches.map((pitch) => [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t\tvelocity: 96,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick + event.duration,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t)\n\t\t\t\t.flat(2);\n\n\t\t\tmidiEvents.sort(function (e1, e2) {\n\t\t\t\treturn e1.time - e2.time;\n\t\t\t});\n\n\t\t\tif (vi === 0) {\n\t\t\t\tmidiEvents.unshift(\n\t\t\t\t\t{\n\t\t\t\t\t\ttime: startTime,\n\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\tsubtype: 'timeSignature',\n\t\t\t\t\t\tnumerator: this.timeSignature.numerator,\n\t\t\t\t\t\tdenominator: this.timeSignature.denominator,\n\t\t\t\t\t\tthirtyseconds: 8,\n\t\t\t\t\t},\n\t\t\t\t\t{ time: startTime, type: 'meta', subtype: 'setTempo', microsecondsPerBeat }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tmidiEvents.forEach((event) => {\n\t\t\t\tevent.ticks = Math.round(event.time - startTime);\n\t\t\t});\n\t\t\tmidiEvents.forEach((event, i) => {\n\t\t\t\tevent.deltaTime = event.ticks - (i > 0 ? midiEvents[i - 1].ticks : 0);\n\t\t\t});\n\n\t\t\tmidiEvents.push({ deltaTime: 0, type: 'meta', subtype: 'endOfTrack' });\n\n\t\t\treturn midiEvents;\n\t\t});\n\n\t\treturn {\n\t\t\theader,\n\t\t\ttracks,\n\t\t};\n\t}\n}\n\nexport { EditableEvent, EditableMeasure };\n","import { SpartitoMeasure } from './spartitoMeasure';\nimport { StemBeam, WHOLE_DURATION } from './term';\nimport { fractionMul, gcd } from './utils';\n\nexport interface MeasureEvaluation {\n\tevents: number;\n\tvalidEvents: number;\n\tvoiceRugged: boolean;\n\tnullEvents: number;\n\tfakeEvents: number;\n\twarpedEvents: number;\n\tcomplicatedTimewarp: boolean;\n\tspaceTime: number;\n\tsurplusTime: number;\n\tdurationRate: number;\n\tbeamBroken: boolean;\n\tfractionalWarp: boolean;\n\tirregularWarpsN: number;\n\tirregularTick: boolean;\n\ttickTwist: number;\n\ttickOverlapped: boolean;\n\tgraceInVoice: boolean;\n\tgraceN: number;\n\tgraceDominant: boolean;\n\tperfect: boolean;\n\tfine: boolean;\n\terror: boolean;\n\tqualityScore: number;\n}\n\nconst BEAM_STATUS = {\n\t[StemBeam.Open]: 1,\n\t[StemBeam.Continue]: 0,\n\t[StemBeam.Close]: -1,\n};\n\nexport const evaluateMeasure = (measure: SpartitoMeasure): MeasureEvaluation => {\n\tif (!measure.regulated) return undefined;\n\n\tconst eventMap = measure.eventMap;\n\n\tconst events = measure.events.length;\n\tconst validEvents = measure.voices.flat(1).length;\n\tconst warpedEvents = measure.events.filter((e) => e.timeWarp).length;\n\tconst warps = new Set(\n\t\tmeasure.events.filter((e) => e.timeWarp && !(e.rest && e.division === 0)).map((e) => `${e.timeWarp!.numerator}/${e.timeWarp!.denominator}`)\n\t);\n\tconst irregularWarps = new Set(warps);\n\tirregularWarps.delete('2/3');\n\n\tconst fractionalWarp = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tif (!events.some((e) => e.timeWarp)) return false;\n\n\t\tlet denominator = 0;\n\t\tlet tickSum = 0;\n\t\tlet eventN = 0;\n\t\treturn events.some((event, i) => {\n\t\t\tconst d = event.timeWarp ? event.timeWarp.denominator : 0;\n\t\t\tif (d !== denominator) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\n\t\t\t\ttickSum = 0;\n\t\t\t\teventN = 0;\n\t\t\t}\n\n\t\t\tdenominator = d;\n\t\t\ttickSum += event.duration;\n\t\t\t++eventN;\n\n\t\t\tif (i === events.length - 1) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst tickOverlapped = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tlet tick = 0;\n\t\treturn events.some((event) => {\n\t\t\tif (event.grace) return false;\n\n\t\t\tif (event.tick < tick) return true;\n\t\t\ttick = event.tick + event.duration;\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst fractionalTimes = new Set(measure.events.filter((e) => e.timeWarp && e.timeWarp.denominator > 3).map((e) => e.duration));\n\tconst complicatedTimewarp = fractionalTimes.size > 1;\n\n\tconst literalDuration = fractionMul(WHOLE_DURATION, measure.timeSignature);\n\tconst sigDuration = measure.doubtfulTimesig ? measure.duration : literalDuration;\n\n\tconst inVoiceEvents = measure.voices.flat(1).map((id) => eventMap[id]);\n\n\t// Guard: detect corrupted event data in voices (e.g. missing division, NaN tick)\n\tconst corruptedVoiceEvent = inVoiceEvents.some(\n\t\t(event) =>\n\t\t\t!event ||\n\t\t\t!Number.isFinite(event.tick) ||\n\t\t\t!Number.isFinite(event.division) ||\n\t\t\tevent.division < 0 ||\n\t\t\t!Number.isFinite(event.duration) ||\n\t\t\tevent.duration <= 0\n\t);\n\n\tconst overranged = inVoiceEvents.reduce((over, event) => over || event.tick < 0 || event.tick + event.duration > sigDuration, false);\n\tconst overDuration = measure.duration > literalDuration;\n\tconst graceInVoice = inVoiceEvents.some((event) => event.grace);\n\tconst graceN = measure.events.filter((e) => e.grace).length;\n\tconst graceDominant = graceN >= inVoiceEvents.length;\n\n\tconst irregularTick = inVoiceEvents.some((event) => {\n\t\tlet t = event.tick * 2 ** (event.division + 2);\n\t\tif (event.timeWarp) t *= event.timeWarp.denominator;\n\n\t\tif (!Number.isFinite(t)) return true;\n\n\t\tconst fragment = gcd(Math.round(t), WHOLE_DURATION);\n\t\t//if (fragment < WHOLE_DURATION)\n\t\t//\tconsole.log(\"irregularTick:\", event.tick, fragment);\n\t\treturn fragment < WHOLE_DURATION;\n\t});\n\n\tconst beamStatus = measure.voices!.map((voice) =>\n\t\tvoice.reduce(\n\t\t\t({ status, broken }, ei, evi) => {\n\t\t\t\tconst event = eventMap[ei];\n\t\t\t\tif (event.beam) {\n\t\t\t\t\t// allow an open beam at beginning of a voice\n\t\t\t\t\tif (evi === 0 && [StemBeam.Continue, StemBeam.Close].includes(event.beam)) status = 1;\n\n\t\t\t\t\tstatus += BEAM_STATUS[event.beam];\n\t\t\t\t\tbroken = broken || !(status >= 0 && status <= 1);\n\t\t\t\t} else if (!event.rest) broken = broken || status !== 0;\n\n\t\t\t\treturn { status, broken };\n\t\t\t},\n\t\t\t{ status: 0, broken: false }\n\t\t)\n\t);\n\tconst beamBroken = beamStatus.some(({ broken }) => broken); // allow an open beam at the end of a voice (status == 1)\n\tlet spaceTime = 0;\n\tlet surplusTime = 0;\n\tmeasure.voices!.forEach((voice) => {\n\t\tconst eventDuration = voice.reduce((sum, ei) => sum + eventMap[ei].duration, 0);\n\t\tspaceTime += Math.max(0, measure.duration - eventDuration);\n\t\tsurplusTime += Math.max(0, eventDuration - measure.duration);\n\t});\n\tspaceTime /= WHOLE_DURATION;\n\tconst nullEvents = measure.events.filter(\n\t\t(e) => !e.grace && !e.fullMeasureRest && !e.tremoloCatcher && (!e.predisposition || e.predisposition.fakeP < 0.1) && !Number.isFinite(e.tick)\n\t).length;\n\n\tconst fakeEvents = measure.events.filter(\n\t\t(event) => !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !inVoiceEvents.includes(event)\n\t).length;\n\n\tconst { voiceRugged } = measure.voices!.flat(1).reduce(\n\t\t(result, ei) => {\n\t\t\tif (!result.voiceRugged) {\n\t\t\t\tif (result.es.has(ei)) return { voiceRugged: true, es: result.es };\n\t\t\t}\n\n\t\t\tresult.es.add(ei);\n\n\t\t\treturn result;\n\t\t},\n\t\t{ voiceRugged: false, es: new Set() }\n\t);\n\n\tconst tickTwist = measure.tickTwist || 0;\n\n\tconst error =\n\t\tcorruptedVoiceEvent ||\n\t\ttickTwist >= 1 ||\n\t\ttickOverlapped ||\n\t\tvoiceRugged ||\n\t\tmeasure.tickRatesInStaves.some((rate) => rate < 0) ||\n\t\tnullEvents > 2 ||\n\t\t!measure.timeSignature ||\n\t\toverranged ||\n\t\tmeasure.duration > sigDuration ||\n\t\tmeasure.events.some((event) => event.timeWarp && event.timeWarp.numerator / event.timeWarp.denominator <= 0.5);\n\tconst perfect =\n\t\t!error &&\n\t\t!overDuration &&\n\t\ttickTwist < 0.2 &&\n\t\t!fractionalWarp &&\n\t\t!irregularWarps.size &&\n\t\t!irregularTick &&\n\t\t!spaceTime &&\n\t\t!surplusTime &&\n\t\t!!measure.voices!.length &&\n\t\t!beamBroken &&\n\t\t!graceInVoice &&\n\t\t!graceDominant &&\n\t\t(measure.duration === sigDuration || (Number.isFinite(measure.estimatedDuration) && measure.estimatedDuration <= sigDuration * 0.75));\n\tconst fine = !error && !overDuration && tickTwist < 0.3 && !fractionalWarp && !irregularTick && !surplusTime && !beamBroken && !graceInVoice;\n\n\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\tconst durationRate = measure.duration / expectDuration;\n\n\tlet qualityScore = 0;\n\tif (measure.patched && !corruptedVoiceEvent) qualityScore = 1;\n\telse if (!error) {\n\t\tconst spaceLoss = Math.tanh(Math.abs(spaceTime / Math.max(1, measure.voices.length)) * 1);\n\n\t\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\t\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\t\tconst durationLoss = expectDuration ? Math.max(0, 1 - durationRate) ** 2 : 0;\n\t\tconst warpsLoss = Math.tanh(irregularWarps.size);\n\n\t\tqualityScore = (1 - spaceLoss) * (1 - durationLoss) * (1 - warpsLoss) * (1 - tickTwist ** 2);\n\t}\n\n\treturn {\n\t\tevents,\n\t\tvalidEvents,\n\t\tvoiceRugged,\n\t\tnullEvents,\n\t\tfakeEvents,\n\t\twarpedEvents,\n\t\tcomplicatedTimewarp,\n\t\tspaceTime,\n\t\tsurplusTime,\n\t\tdurationRate,\n\t\tbeamBroken,\n\t\tfractionalWarp,\n\t\tirregularWarpsN: irregularWarps.size,\n\t\tirregularTick,\n\t\ttickTwist,\n\t\ttickOverlapped,\n\t\tgraceInVoice,\n\t\tgraceN,\n\t\tgraceDominant,\n\t\tperfect,\n\t\tfine,\n\t\terror,\n\t\tqualityScore,\n\t};\n};\n","import { SimpleClass } from '../starry/aux_/typedJSON';\n\nenum LayoutType {\n\tOrdinary = 'ordinary',\n\tFull = 'full',\n\tConservative = 'conservative',\n\tOnce = 'once',\n}\n\ninterface MeasureLayout {\n\tserialize(type: LayoutType): number[];\n\n\tseq: MeasureSeq;\n\tcode: string;\n}\n\nexport type MeasureSeq = MeasureLayout[];\n\nconst spreadMeasureSeq = (seq: MeasureSeq, type: LayoutType = LayoutType.Ordinary): number[] => [].concat(...seq.map((layout) => layout.serialize(type)));\n\nconst seqToCode = (seq: MeasureSeq, { withBrackets = false }: { withBrackets?: boolean } = {}): string => {\n\t//const code = seq.map(layout => layout.code).join(\", \");\n\tlet code = '';\n\tlet inRange = false;\n\n\tfor (let i = 0; i < seq.length; ++i) {\n\t\tconst middle = seq[i - 1] instanceof SingleMLayout && seq[i] instanceof SingleMLayout && seq[i + 1] instanceof SingleMLayout;\n\t\tif (middle) {\n\t\t\tif (!inRange) {\n\t\t\t\tcode += '..';\n\t\t\t\tinRange = true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (i > 0 && !inRange) code += ', ';\n\n\t\t\tinRange = false;\n\n\t\t\tcode += seq[i].code;\n\t\t}\n\t}\n\n\treturn withBrackets ? `[${code}]` : code;\n};\n\nclass SingleMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'SingleMLayout';\n\n\tmeasure: number;\n\n\tstatic from(measure: number) {\n\t\tconst layout = new SingleMLayout();\n\t\tlayout.measure = measure;\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(): number[] {\n\t\treturn [this.measure];\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this];\n\t}\n\n\tget code(): string {\n\t\treturn this.measure.toString();\n\t}\n}\n\nclass BlockMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'BlockMLayout';\n\n\tseq: MeasureSeq;\n\n\tstatic trimSeq(seq: MeasureSeq): MeasureSeq {\n\t\tconst seq2 = [];\n\t\tfor (const layout of seq) {\n\t\t\tif (layout instanceof BlockMLayout) {\n\t\t\t\tfor (const sub of layout.seq) seq2.push(sub);\n\t\t\t} else seq2.push(layout);\n\t\t}\n\n\t\t// reduce duplicated or backwards single measures\n\t\tconst seq3 = [];\n\t\tlet measure = null;\n\t\tfor (const layout of seq2) {\n\t\t\tif (layout instanceof SingleMLayout) {\n\t\t\t\tif (layout.measure > measure) {\n\t\t\t\t\tseq3.push(layout);\n\t\t\t\t\tmeasure = layout.measure;\n\t\t\t\t}\n\t\t\t} else seq3.push(layout);\n\t\t}\n\n\t\treturn seq3;\n\t}\n\n\tstatic fromSeq(seq: MeasureSeq): BlockMLayout {\n\t\tconst layout = new BlockMLayout();\n\t\tlayout.seq = BlockMLayout.trimSeq(seq);\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\treturn spreadMeasureSeq(this.seq, type);\n\t}\n\n\tget code(): string {\n\t\treturn seqToCode(this.seq, { withBrackets: true });\n\t}\n}\n\nclass VoltaMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'VoltaMLayout';\n\n\ttimes: number;\n\tbody: MeasureSeq;\n\talternates: MeasureSeq[];\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst bodySeq = spreadMeasureSeq(this.body);\n\n\t\tif (this.alternates) {\n\t\t\tconst alternateSeqs = this.alternates.map((seq) => spreadMeasureSeq(seq));\n\t\t\tconst lastAlternateSeq = alternateSeqs[alternateSeqs.length - 1];\n\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\t\treturn bodySeq.concat(...alternateSeqs);\n\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Full: {\n\t\t\t\t\tconst priorSeq = [].concat(\n\t\t\t\t\t\t...Array(this.times - 1)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map((_, i) => [...bodySeq, ...alternateSeqs[i % (this.times - 1)]])\n\t\t\t\t\t);\n\n\t\t\t\t\treturn [...priorSeq, ...bodySeq, ...lastAlternateSeq];\n\t\t\t\t}\n\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn [...bodySeq, ...lastAlternateSeq];\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn bodySeq;\n\n\t\t\t\tcase LayoutType.Full:\n\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t...Array(this.times)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map(() => bodySeq)\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn('the current case not handled:', type, this);\n\t}\n\n\tget seq(): MeasureSeq {\n\t\tconst alternates = this.alternates ? this.alternates[this.alternates.length - 1] : [];\n\n\t\treturn [...this.body, ...alternates];\n\t}\n\n\tget code(): string {\n\t\tconst body = seqToCode(this.body, { withBrackets: true });\n\n\t\tlet code = `${this.times}*${body}`;\n\t\tif (this.alternates) code += '{' + this.alternates.map((seq) => seqToCode(seq, { withBrackets: seq.length > 1 })).join(', ') + '}';\n\n\t\treturn code;\n\t}\n}\n\nclass ABAMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'ABAMLayout';\n\n\tmain: MeasureLayout;\n\trest: MeasureSeq;\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst seqA = this.main.serialize(type);\n\t\tconst seqA_ = spreadMeasureSeq(this.main.seq, LayoutType.Once);\n\t\tconst seqB = spreadMeasureSeq(this.rest, type);\n\n\t\tswitch (type) {\n\t\t\tcase LayoutType.Ordinary: // A B\n\t\t\t\treturn [...seqA, ...seqB];\n\n\t\t\tcase LayoutType.Once: // B A'\n\t\t\t\treturn [...seqB, ...seqA_];\n\n\t\t\tcase LayoutType.Conservative: // A B A'\n\t\t\tcase LayoutType.Full: // A B A'\n\t\t\t\treturn [...seqA, ...seqB, ...seqA_];\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn('the current case not handled:', type, this);\n\t\t}\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this.main, ...this.rest];\n\t}\n\n\tget code(): string {\n\t\treturn '<' + this.main.code + ', ' + seqToCode(this.rest) + '>';\n\t}\n}\n\nexport { LayoutType, MeasureLayout, SingleMLayout, BlockMLayout, VoltaMLayout, ABAMLayout };\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 13],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 15],\n\t\t$V3 = [1, 26],\n\t\t$V4 = [1, 29],\n\t\t$V5 = [1, 28],\n\t\t$V6 = [1, 30],\n\t\t$V7 = [5, 13, 22, 27, 29],\n\t\t$V8 = [2, 15],\n\t\t$V9 = [1, 32],\n\t\t$Va = [5, 14, 21, 22, 27, 28, 29];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tmeasure_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tindex_wise_measure_layout: 6,\n\t\t\t'i:': 7,\n\t\t\t's:': 8,\n\t\t\tsegment_wise_measure_layout: 9,\n\t\t\tiw_sequence: 10,\n\t\t\tiw_item: 11,\n\t\t\trange: 12,\n\t\t\t',': 13,\n\t\t\tUNSIGNED: 14,\n\t\t\t'..': 15,\n\t\t\tsingle: 16,\n\t\t\tiw_block_item: 17,\n\t\t\tiw_volta: 18,\n\t\t\tiw_aba: 19,\n\t\t\tiw_block: 20,\n\t\t\t'[': 21,\n\t\t\t']': 22,\n\t\t\t'*': 23,\n\t\t\tiw_optional_alternates: 24,\n\t\t\tiw_alternates: 25,\n\t\t\t'{': 26,\n\t\t\t'}': 27,\n\t\t\t'<': 28,\n\t\t\t'>': 29,\n\t\t\tsw_sequence: 30,\n\t\t\tsw_item: 31,\n\t\t\tsegment: 32,\n\t\t\tsw_block_item: 33,\n\t\t\tsw_volta: 34,\n\t\t\tsw_aba: 35,\n\t\t\tsw_block: 36,\n\t\t\tsw_optional_alternates: 37,\n\t\t\tsw_alternates: 38,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: {\n\t\t\t2: 'error',\n\t\t\t5: 'EOF',\n\t\t\t7: 'i:',\n\t\t\t8: 's:',\n\t\t\t13: ',',\n\t\t\t14: 'UNSIGNED',\n\t\t\t15: '..',\n\t\t\t21: '[',\n\t\t\t22: ']',\n\t\t\t23: '*',\n\t\t\t26: '{',\n\t\t\t27: '}',\n\t\t\t28: '<',\n\t\t\t29: '>',\n\t\t},\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[4, 2],\n\t\t\t[4, 2],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 3],\n\t\t\t[10, 3],\n\t\t\t[12, 3],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[16, 1],\n\t\t\t[17, 1],\n\t\t\t[20, 3],\n\t\t\t[18, 4],\n\t\t\t[24, 0],\n\t\t\t[24, 1],\n\t\t\t[25, 3],\n\t\t\t[19, 5],\n\t\t\t[9, 1],\n\t\t\t[30, 1],\n\t\t\t[30, 2],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[32, 1],\n\t\t\t[33, 1],\n\t\t\t[36, 3],\n\t\t\t[34, 4],\n\t\t\t[37, 0],\n\t\t\t[37, 1],\n\t\t\t[38, 3],\n\t\t\t[35, 4],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.$ = root(null, $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = root('index-wise', $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tthis.$ = root('segment-wise', serialize($$[$0]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\tcase 23:\n\t\t\t\t\tif ($$[$0].length === 1 && $$[$0][0].__prototype === 'BlockMLayout') this.$ = $$[$0][0];\n\t\t\t\t\telse this.$ = blockLayout($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\tcase 24:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 7:\n\t\t\t\tcase 11:\n\t\t\t\tcase 12:\n\t\t\t\tcase 13:\n\t\t\t\tcase 14:\n\t\t\t\tcase 20:\n\t\t\t\tcase 27:\n\t\t\t\tcase 28:\n\t\t\t\tcase 29:\n\t\t\t\tcase 35:\n\t\t\t\t\tthis.$ = $$[$0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], ...$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 10:\n\t\t\t\t\tthis.$ = range($$[$0 - 2], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = singleLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 16:\n\t\t\t\tcase 31:\n\t\t\t\t\tthis.$ = blockLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 17:\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 18:\n\t\t\t\tcase 33:\n\t\t\t\t\tthis.$ = voltaBlock($$[$0 - 3], $$[$0 - 1], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 19:\n\t\t\t\tcase 34:\n\t\t\t\t\tthis.$ = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 36:\n\t\t\t\t\tthis.$ = alternates($$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 3], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\t\tthis.$ = blockLayout([$$[$0]]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 30:\n\t\t\t\t\tthis.$ = segment($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 2], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 6: 3, 7: [1, 4], 8: [1, 5], 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 17] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 6: 18, 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 9: 19, 14: $V3, 21: $V4, 28: $V5, 30: 20, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 5: [2, 5], 13: $V6 },\n\t\t\to($V7, [2, 6]),\n\t\t\to($V7, [2, 7]),\n\t\t\to($V7, [2, 11]),\n\t\t\to($V7, [2, 12]),\n\t\t\to($V7, [2, 13]),\n\t\t\to($V7, [2, 14]),\n\t\t\to($V7, $V8, { 15: [1, 31], 23: $V9 }),\n\t\t\to($V7, [2, 16]),\n\t\t\t{ 11: 33, 14: [1, 34], 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 10: 35, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [2, 1] },\n\t\t\t{ 5: [2, 3] },\n\t\t\t{ 5: [2, 4] },\n\t\t\t{ 5: [2, 23], 14: $V3, 21: $V4, 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 24]),\n\t\t\to($Va, [2, 26]),\n\t\t\to($Va, [2, 27]),\n\t\t\to($Va, [2, 28]),\n\t\t\to($Va, [2, 29]),\n\t\t\to($Va, [2, 30], { 23: [1, 37] }),\n\t\t\to($Va, [2, 31]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 31: 38, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 39, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 11: 40, 12: 41, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 14: [1, 42] },\n\t\t\t{ 20: 43, 21: $V1 },\n\t\t\t{ 13: [1, 44] },\n\t\t\t{ 13: $V8, 23: $V9 },\n\t\t\t{ 13: $V6, 22: [1, 45] },\n\t\t\to($Va, [2, 25]),\n\t\t\t{ 21: $V4, 36: 46 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 47, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 22: [1, 48], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 8]),\n\t\t\to($V7, [2, 9]),\n\t\t\to($V7, [2, 10]),\n\t\t\to($V7, [2, 19], { 24: 49, 25: 50, 26: [1, 51] }),\n\t\t\t{ 10: 52, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\to([5, 13, 22, 26, 27, 29], [2, 17]),\n\t\t\to($Va, [2, 34], { 37: 53, 38: 54, 26: [1, 55] }),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 29: [1, 56], 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to([5, 14, 21, 22, 26, 27, 28, 29], [2, 32]),\n\t\t\to($V7, [2, 18]),\n\t\t\to($V7, [2, 20]),\n\t\t\t{ 10: 57, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 13: $V6, 29: [1, 58] },\n\t\t\to($Va, [2, 33]),\n\t\t\to($Va, [2, 35]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 59, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 37]),\n\t\t\t{ 13: $V6, 27: [1, 60] },\n\t\t\to($V7, [2, 22]),\n\t\t\t{ 14: $V3, 21: $V4, 27: [1, 61], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 21]),\n\t\t\to($Va, [2, 36]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 17: [2, 1], 18: [2, 3], 19: [2, 4] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tconst root = (type, data) => ({ __prototype: 'MesaureLayout', type, data });\n\n\tconst singleLayout = (n) => ({ __prototype: 'SingleMLayout', measure: Number(n) });\n\tconst blockLayout = (seq) => ({ __prototype: 'BlockMLayout', seq });\n\tconst voltaBlock = (times, body, alternates) => ({ __prototype: 'VoltaMLayout', times: Number(times), body, alternates });\n\tconst abaBlock = (main, rest) => ({ __prototype: 'ABAMLayout', main, rest });\n\n\tconst segment = (n) => ({ segment: true, length: Number(n) });\n\n\tconst alternates = (items) =>\n\t\titems.map((item) => {\n\t\t\tif (item.__prototype === 'BlockMLayout') return item.seq;\n\n\t\t\treturn [item];\n\t\t});\n\n\tconst range = (start, end) => {\n\t\tstart = Number(start);\n\t\tend = Number(end);\n\n\t\tif (!(end >= start)) throw new Error(`invalid measure range: ${start}..${end}`);\n\n\t\treturn Array(end + 1 - start)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => singleLayout(start + i));\n\t};\n\n\tconst serializeSeq = (item, options) => {\n\t\tif (item.segment) {\n\t\t\tconst index = options.index;\n\t\t\toptions.index += item.length;\n\n\t\t\treturn Array(item.length)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => singleLayout(index + i));\n\t\t}\n\n\t\treturn [serialize(item, options)];\n\t};\n\n\tconst serialize = (item, options = { index: 1 }) => {\n\t\tconst speard = (seq) => [].concat(...seq.map((it) => serializeSeq(it, options)));\n\n\t\tswitch (item.__prototype) {\n\t\t\tcase 'BlockMLayout':\n\t\t\t\titem.seq = speard(item.seq);\n\n\t\t\t\tbreak;\n\t\t\tcase 'VoltaMLayout':\n\t\t\t\titem.body = speard(item.body);\n\t\t\t\titem.alternates = item.alternates && item.alternates.map(speard);\n\n\t\t\t\tbreak;\n\t\t\tcase 'ABAMLayout':\n\t\t\t\titem.main = serialize(item.main, options);\n\t\t\t\titem.rest = speard(item.rest);\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn item;\n\t};\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 14;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([*,\\[\\]<>{}]))/, /^(?:(([1-9])([0-9])*))/, /^(?:(([a-z])+):)/, /^(?:\\.\\.)/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3, 4, 5], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","export interface RawItem {\n\tid: string;\n\tleftBounds: string[];\n\trightBounds: string[];\n\tconjunction: string;\n}\n\nexport enum StaffGroupType {\n\tDefault,\n\tBrace, // {}\n\tBracket, // <>\n\tSquare, // []\n}\n\nexport enum StaffConjunctionType {\n\tBlank,\n\tDashed,\n\tSolid,\n}\n\ntype StaffID = string;\n\nexport interface StaffGroup {\n\ttype: StaffGroupType;\n\tsubs?: StaffGroup[];\n\tstaff?: StaffID;\n\tlevel?: number;\n\tgrand?: boolean;\n}\n\ninterface StaffGroupTrait {\n\tgroup: StaffGroup;\n\trange: [number, number];\n\tkey: string;\n}\n\nconst singleGroup = (id: string) => ({ type: StaffGroupType.Default, staff: id });\n\nconst BOUNDS_TO_GROUPTYPE: { [bound: string]: StaffGroupType } = {\n\t'{': StaffGroupType.Brace,\n\t'}': StaffGroupType.Brace,\n\t'<': StaffGroupType.Bracket,\n\t'>': StaffGroupType.Bracket,\n\t'[': StaffGroupType.Square,\n\t']': StaffGroupType.Square,\n};\n\nconst OPEN_BOUNDS = '{<[';\nconst CLOSE_BOUNDS = '}>]';\n\nconst CONJUNCTIONS_MAP: { [conj: string]: StaffConjunctionType } = {\n\t',': StaffConjunctionType.Blank,\n\t'-': StaffConjunctionType.Solid,\n\t'.': StaffConjunctionType.Dashed,\n};\n\nconst bracketCode = (type: StaffGroupType, partial: boolean = false): ((inner: string) => string) => {\n\tif (type === StaffGroupType.Default) return (inner) => inner;\n\n\tif (partial) {\n\t\tswitch (type) {\n\t\t\tcase StaffGroupType.Brace:\n\t\t\t\treturn (inner) => `{${inner}`;\n\t\t\tcase StaffGroupType.Bracket:\n\t\t\t\treturn (inner) => `<${inner}`;\n\t\t\tcase StaffGroupType.Square:\n\t\t\t\treturn (inner) => `[${inner}`;\n\t\t\tdefault:\n\t\t\t\treturn (inner) => inner;\n\t\t}\n\t}\n\n\tswitch (type) {\n\t\tcase StaffGroupType.Brace:\n\t\t\treturn (inner) => `{${inner}}`;\n\t\tcase StaffGroupType.Bracket:\n\t\t\treturn (inner) => `<${inner}>`;\n\t\tcase StaffGroupType.Square:\n\t\t\treturn (inner) => `[${inner}]`;\n\t\tdefault:\n\t\t\treturn (inner) => inner;\n\t}\n};\n\nconst randomB64 = (): string => {\n\tconst code = btoa(Math.random().toString().substr(2)).replace(/=/g, '');\n\n\treturn code.split('').reverse().slice(0, 6).join('');\n};\n\nconst makeUniqueName = (set: Set, index: number, prefix?: string): string => {\n\tlet name = prefix;\n\tif (!name) name = index.toString();\n\telse if (set.has(name)) name += '_' + index.toString();\n\n\twhile (set.has(name)) name += '_' + randomB64();\n\n\treturn name;\n};\n\nconst makeGroupsFromRaw = (parent: StaffGroup, seq: string[]): string[] => {\n\tlet remains = seq;\n\twhile (remains.length) {\n\t\tconst word = remains.shift();\n\t\tconst bound = BOUNDS_TO_GROUPTYPE[word];\n\t\tif (bound) {\n\t\t\tif (CLOSE_BOUNDS.includes(word) && bound === parent.type) break;\n\n\t\t\tif (OPEN_BOUNDS.includes(word)) {\n\t\t\t\tconst group = { type: bound, level: Number.isFinite(parent.level) ? parent.level + 1 : 0 };\n\t\t\t\tremains = makeGroupsFromRaw(group, remains);\n\n\t\t\t\tparent.subs = parent.subs || [];\n\t\t\t\tparent.subs.push(group);\n\t\t\t}\n\t\t} else {\n\t\t\tparent.subs = parent.subs || [];\n\t\t\tparent.subs.push(singleGroup(word));\n\t\t}\n\t}\n\n\twhile (parent.type === StaffGroupType.Default && parent.subs && parent.subs.length === 1) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.type = sub.type;\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t\tparent.level = sub.level;\n\t}\n\n\twhile (parent.subs && parent.subs.length === 1 && parent.subs[0].type === StaffGroupType.Default) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t}\n\n\tparent.grand = parent.type === StaffGroupType.Brace && parent.subs && parent.subs.every((sub) => sub.staff);\n\n\treturn remains;\n};\n\nconst groupHead = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupHead(group.subs[0]);\n};\n\nconst groupTail = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupTail(group.subs[group.subs.length - 1]);\n};\n\nexport const groupKey = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return `${groupHead(group)}-${groupTail(group)}`;\n};\n\nconst groupDict = (group: StaffGroup, dict: { [key: string]: StaffGroup }): void => {\n\tdict[groupKey(group)] = group;\n\n\tif (group.subs) group.subs.forEach((sub) => groupDict(sub, dict));\n};\n\nexport interface MaskedStaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroups: StaffGroupTrait[];\n}\n\nclass StaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroup: StaffGroup;\n\tgroups: StaffGroupTrait[];\n\n\tmaskCache: Map;\n\n\tconstructor(raw: RawItem[]) {\n\t\t// make unique ids\n\t\tconst ids = new Set();\n\t\traw.forEach((item, i) => {\n\t\t\titem.id = makeUniqueName(ids, i + 1, item.id);\n\t\t\tids.add(item.id);\n\t\t});\n\t\tthis.staffIds = raw.map((item) => item.id);\n\t\tthis.conjunctions = raw.slice(0, raw.length - 1).map((item) => (item.conjunction ? CONJUNCTIONS_MAP[item.conjunction] : StaffConjunctionType.Blank));\n\n\t\t// make groups\n\t\tconst seq = [].concat(...raw.map((item) => [...item.leftBounds, item.id, ...item.rightBounds]));\n\t\tthis.group = { type: StaffGroupType.Default };\n\t\tmakeGroupsFromRaw(this.group, seq);\n\n\t\tconst dict = {};\n\t\tgroupDict(this.group, dict);\n\t\tthis.groups = Object.entries(dict).map(([key, group]) => {\n\t\t\tlet ids = key.split('-');\n\t\t\tif (ids.length === 1) ids = [ids[0], ids[0]];\n\t\t\tconst range = ids.map((id) => this.staffIds.indexOf(id));\n\n\t\t\treturn {\n\t\t\t\tgroup,\n\t\t\t\trange,\n\t\t\t\tkey,\n\t\t\t} as StaffGroupTrait;\n\t\t});\n\n\t\tthis.maskCache = new Map();\n\t}\n\n\tget stavesCount(): number {\n\t\tif (!this.staffIds) return null;\n\n\t\treturn this.staffIds.length;\n\t}\n\n\tget partGroups(): StaffGroupTrait[] {\n\t\tconst grands = this.groups.filter((g) => g.group.grand);\n\t\tconst parts = this.groups.filter((g) => {\n\t\t\tif (g.group.grand) return true;\n\n\t\t\tif (g.range[0] === g.range[1]) {\n\t\t\t\tconst index = g.range[0];\n\t\t\t\treturn !grands.some((g) => g.range[0] <= index && g.range[1] >= index);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn parts;\n\t}\n\n\tget standaloneGroups(): string[][] {\n\t\tconst groups: string[][] = [];\n\t\tconst collect = (group: StaffGroup): void => {\n\t\t\tif (group.grand) groups.push(group.subs.map((sub) => sub.staff));\n\t\t\telse if (group.staff) groups.push([group.staff]);\n\t\t\telse if (group.subs) group.subs.forEach((sub) => collect(sub));\n\t\t};\n\t\tcollect(this.group);\n\n\t\treturn groups;\n\t}\n\n\tconjunctionBetween(upStaff: number, downStaff: number): StaffConjunctionType {\n\t\tif (downStaff <= upStaff) return null;\n\n\t\tlet con = StaffConjunctionType.Solid;\n\t\tfor (let i = upStaff; i < downStaff; i++) con = Math.min(con, this.conjunctions[i]);\n\n\t\treturn con;\n\t}\n\n\tstatic makeMaskLayout(layout: StaffLayout, mask: number): MaskedStaffLayout {\n\t\tconst staffIds = layout.staffIds.filter((_, i) => mask & (1 << i));\n\t\tif (staffIds.length === layout.staffIds.length) {\n\t\t\treturn {\n\t\t\t\tstaffIds: layout.staffIds,\n\t\t\t\tconjunctions: layout.conjunctions,\n\t\t\t\tgroups: layout.groups,\n\t\t\t};\n\t\t}\n\n\t\tconst groups = layout.groups\n\t\t\t.map((g) => ({ ids: layout.staffIds.slice(g.range[0], g.range[1] + 1).filter((id) => staffIds.includes(id)), ...g }))\n\t\t\t.filter(({ ids }) => ids.length)\n\t\t\t.map(\n\t\t\t\t({ ids, ...g }) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tkey: g.key,\n\t\t\t\t\t\tgroup: g.group,\n\t\t\t\t\t\trange: [staffIds.indexOf(ids[0]), staffIds.indexOf(ids[ids.length - 1])],\n\t\t\t\t\t} as StaffGroupTrait)\n\t\t\t);\n\n\t\tconst conjunctions = staffIds.slice(0, staffIds.length - 1).map((id, i) => {\n\t\t\tconst nextId = staffIds[i + 1];\n\t\t\treturn layout.conjunctionBetween(layout.staffIds.indexOf(id), layout.staffIds.indexOf(nextId));\n\t\t});\n\n\t\treturn {\n\t\t\tstaffIds,\n\t\t\tconjunctions,\n\t\t\tgroups,\n\t\t};\n\t}\n\n\tmask(mask: number): MaskedStaffLayout {\n\t\tif (!this.maskCache.get(mask)) this.maskCache.set(mask, StaffLayout.makeMaskLayout(this, mask));\n\n\t\treturn this.maskCache.get(mask);\n\t}\n\n\t// {,}\t*\t1,1\t\t=> {,}\n\t// {,}\t*\t1,x\t\t=> {\n\t// {,}\t*\t0,x\t\t=>\n\t// {,}\t*\t0,1\t\t=> {}\n\tpartialMaskCode(bits: (1 | 0)[], withIds = false): string {\n\t\ttype Attendance = 0 | 1 | null;\n\t\tconst staffStatus = this.staffIds\n\t\t\t.map((_, i) => (i < bits.length ? bits[i] : null))\n\t\t\t.reduce((status, x, i) => {\n\t\t\t\tstatus[this.staffIds[i]] = x;\n\t\t\t\treturn status;\n\t\t\t}, {} as { [id: string]: Attendance });\n\n\t\tconst joinGroup = (group: StaffGroup): [string, boolean] => {\n\t\t\tif (group.staff) return [staffStatus[group.staff] ? group.staff : null, staffStatus[group.staff] === null];\n\n\t\t\tconst subs = group.subs.map((sub) => joinGroup(sub));\n\t\t\tconst subStr = subs\n\t\t\t\t.map((pair) => pair[0])\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(',');\n\t\t\tconst partial = subs.some(([_, partial]) => partial);\n\n\t\t\tconst code = subStr ? bracketCode(group.type, partial)(subStr) : null;\n\n\t\t\treturn [code, partial];\n\t\t};\n\n\t\tlet [code] = joinGroup(this.group);\n\t\tcode = code || '';\n\t\tif (!withIds) code = code.replace(/[_\\w]+/g, '');\n\n\t\treturn code;\n\t}\n}\n\nexport default StaffLayout;\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 15],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 17],\n\t\t$V3 = [1, 11],\n\t\t$V4 = [1, 12],\n\t\t$V5 = [1, 13],\n\t\t$V6 = [1, 24],\n\t\t$V7 = [1, 25],\n\t\t$V8 = [1, 26],\n\t\t$V9 = [5, 11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Va = [15, 16, 17, 21, 22, 23, 24],\n\t\t$Vb = [11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Vc = [5, 11, 12, 13, 21, 22, 23, 24];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tstaff_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tseq: 6,\n\t\t\tseq_id: 7,\n\t\t\tseq_br: 8,\n\t\t\tseq_con: 9,\n\t\t\tbound_left: 10,\n\t\t\t'<': 11,\n\t\t\t'[': 12,\n\t\t\t'{': 13,\n\t\t\tbound_right: 14,\n\t\t\t'>': 15,\n\t\t\t']': 16,\n\t\t\t'}': 17,\n\t\t\tbound_lefts: 18,\n\t\t\tbound_rights: 19,\n\t\t\tconjunction: 20,\n\t\t\t'-': 21,\n\t\t\t',': 22,\n\t\t\t'.': 23,\n\t\t\tID: 24,\n\t\t\tseq_bl: 25,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: { 2: 'error', 5: 'EOF', 11: '<', 12: '[', 13: '{', 15: '>', 16: ']', 17: '}', 21: '-', 22: ',', 23: '.', 24: 'ID' },\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[6, 0],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[18, 1],\n\t\t\t[18, 2],\n\t\t\t[19, 1],\n\t\t\t[19, 2],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[7, 1],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[25, 1],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[9, 1],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t$$[$0].next();\n\n\t\t\t\t\tthis.$ = $$[$0].toJSON();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = new Seq();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13:\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 14:\n\t\t\t\tcase 16:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 20:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.i($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 23:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\tcase 24:\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.bl($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\tcase 27:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 28:\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 29:\n\t\t\t\tcase 30:\n\t\t\t\tcase 31:\n\t\t\t\t\t$$[$0 - 1].tip.br($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.con($$[$0]);\n\t\t\t\t\tthis.$.next();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 33:\n\t\t\t\tcase 34:\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\t$$[$0 - 1].tip.con($$[$0]);\n\t\t\t\t\t$$[$0 - 1].next();\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 5: [2, 3], 6: 3, 7: 4, 8: 5, 9: 6, 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 10, 20: 9, 21: $V3, 22: $V4, 23: $V5, 24: [1, 7], 25: 8 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 18] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 5: [2, 4], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 22, 19: 20, 20: 21, 21: $V3, 22: $V4, 23: $V5, 24: [1, 19] },\n\t\t\t{ 5: [2, 5], 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 29, 20: 28, 21: $V3, 22: $V4, 23: $V5, 24: [1, 27] },\n\t\t\t{ 5: [2, 6], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 33, 19: 31, 20: 32, 21: $V3, 22: $V4, 23: $V5, 24: [1, 30] },\n\t\t\to($V9, [2, 20]),\n\t\t\t{ 14: 23, 15: $V6, 16: $V7, 17: $V8, 19: 35, 20: 36, 21: $V3, 22: $V4, 23: $V5, 24: [1, 34] },\n\t\t\to($V9, [2, 32]),\n\t\t\to($Va, [2, 25], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 17]),\n\t\t\to($V9, [2, 18]),\n\t\t\to($V9, [2, 19]),\n\t\t\to($Vb, [2, 13]),\n\t\t\to($Vb, [2, 7]),\n\t\t\to($Vb, [2, 8]),\n\t\t\to($Vb, [2, 9]),\n\t\t\t{ 1: [2, 1] },\n\t\t\to($V9, [2, 21]),\n\t\t\to($Vc, [2, 29], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 33]),\n\t\t\to($Va, [2, 26], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 15]),\n\t\t\to($V9, [2, 10]),\n\t\t\to($V9, [2, 11]),\n\t\t\to($V9, [2, 12]),\n\t\t\to($V9, [2, 23]),\n\t\t\to($V9, [2, 35]),\n\t\t\to($Va, [2, 27], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 24]),\n\t\t\to($Vc, [2, 31], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 36]),\n\t\t\to($Va, [2, 28], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 22]),\n\t\t\to($Vc, [2, 30], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 34]),\n\t\t\to($Vb, [2, 14]),\n\t\t\to($V9, [2, 16]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 18: [2, 1] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tclass Item {\n\t\tconstructor() {\n\t\t\tthis.id = null;\n\t\t\tthis.leftBounds = [];\n\t\t\tthis.rightBounds = [];\n\t\t\tthis.conjunction = null;\n\t\t}\n\n\t\ti(id) {\n\t\t\tthis.id = id;\n\t\t\treturn this;\n\t\t}\n\n\t\tbl(leftBounds) {\n\t\t\tthis.leftBounds = leftBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tbr(rightBounds) {\n\t\t\tthis.rightBounds = rightBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tcon(conjunction) {\n\t\t\tthis.conjunction = conjunction;\n\t\t\treturn this;\n\t\t}\n\t}\n\n\tclass Seq {\n\t\tconstructor() {\n\t\t\tthis.body = [];\n\t\t\tthis.tip = new Item();\n\t\t}\n\n\t\tnext() {\n\t\t\tthis.body.push(this.tip);\n\t\t\tthis.tip = new Item();\n\t\t\treturn this;\n\t\t}\n\n\t\ttoJSON() {\n\t\t\treturn this.body;\n\t\t}\n\t}\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 24;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([-,.\\[\\]<>{}]))/, /^(?:([a-zA-Z_0-9]+))/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\n// if (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import StaffLayout from './staffLayout';\nimport grammar from './grammar.jison';\n\nconst parseCode = (code: string): StaffLayout => {\n\tconst raw = grammar.parse(code);\n\n\treturn new StaffLayout(raw);\n};\n\nexport { parseCode };\n","//import { staffSvg } from \"@kelvinnxu/lotus\";\n\nimport { SemanticType, SemanticPoint, /*glyphSemanticMapping, glyphCenters,*/ SYSTEM_SEMANTIC_TYPES, Point } from './semanticPoint';\nimport { SimpleClass } from './aux_/typedJSON';\n\nclass SemanticGraph extends SimpleClass {\n\tstatic className = 'SemanticGraph';\n\n\tpoints: SemanticPoint[];\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\t/*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph {\n\t\tconst tokens = [].concat(...staff.measures.map(measure => measure.tokens));\n\n\t\tconst voltaRightXs = [];\n\n\t\tconst points = [];\n\t\ttokens.forEach(token => {\n\t\t\tconst def = hashTable[token.hash];\n\n\t\t\tif (token.glyph) {\n\t\t\t\tconst glyph = token.glyph as string;\n\t\t\t\tlet semantic = null;\n\n\t\t\t\tconst isKey = /^\\\\key/.test(token.source) || token.is(\"KEY\");\n\t\t\t\tlet { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 };\n\t\t\t\tif (token.scale2) {\n\t\t\t\t\tcx *= token.scale2.x;\n\t\t\t\t\tcy *= token.scale2.y;\n\t\t\t\t}\n\n\t\t\t\tlet x = token.x + cx;\n\t\t\t\tconst y = token.y + cy;\n\n\t\t\t\tswitch (glyph) {\n\t\t\t\tcase \"rests.0\":\n\t\t\t\t\tif (/^R/.test(token.source))\n\t\t\t\t\t\tsemantic = \"Rest0W\";\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Rest0\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.flat\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.natural\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.sharp\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dots.dot\":\n\t\t\t\t\tif (token.is(\"VOLTA\")) {\n\t\t\t\t\t\tx += 0.24;\t// dot glyph center X offset\n\t\t\t\t\t\tif (token.is(\"LEFT\"))\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaLeft;\n\t\t\t\t\t\telse if (token.is(\"RIGHT\")) {\n\t\t\t\t\t\t\tvoltaRightXs.push(x);\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaRight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Dot\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"zero\":\n\t\t\t\tcase \"one\":\n\t\t\t\tcase \"two\":\n\t\t\t\tcase \"three\":\n\t\t\t\tcase \"four\":\n\t\t\t\tcase \"five\":\n\t\t\t\tcase \"six\":\n\t\t\t\tcase \"seven\":\n\t\t\t\tcase \"eight\":\n\t\t\t\tcase \"nine\": {\n\t\t\t\t\tconst upper = glyph[0].toUpperCase() + glyph.substr(1);\n\t\t\t\t\tsemantic = token.is(\"TIME_SIG\") ? \"Timesig\" + upper : upper;\n\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t}\n\n\t\t\t\tif (semantic) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (token.is(\"TEMPO_NOTEHEAD\")) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.TempoNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// grace noteheads\n\t\t\t\tif (token.is(\"NOTEHEAD\") && Number.isFinite(token.scale) && token.scale < 0.75) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.GraceNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// semantic from token symbol\n\t\t\tlet semantic = null;\n\t\t\tconst cx = 0;\n\t\t\tlet cy = 0;\n\t\t\tif (token.is(\"OCTAVE\")) {\n\t\t\t\tif (token.is(\"_8\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift8;\n\t\t\t\t\tcy = token.is(\"B\") ? -0.7512 : -0.7256;\n\t\t\t\t}\n\t\t\t\telse if (token.is(\"CLOSE\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift0;\n\t\t\t\t\tcy = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (/^flags/.test(token.glyph)) {\n\t\t\t\tlet direction = 0;\n\t\t\t\tif (/\\.u\\d/.test(token.glyph))\n\t\t\t\t\tdirection = 1;\n\t\t\t\tif (/\\.d\\d/.test(token.glyph))\n\t\t\t\t\tdirection = -1;\n\t\t\t\tif (direction) {\n\t\t\t\t\tconst [n] = token.glyph.match(/\\d+/);\n\t\t\t\t\tconst flagCount = Number(n) - 2;\n\t\t\t\t\t//console.log(\"flags:\", token.glyph, flagCount);\n\t\t\t\t\tfor (let i = 0; i < flagCount; ++i) {\n\t\t\t\t\t\tconst y = token.y + (i + 0.5) * direction;\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//console.log(\"flags.1:\", token.x, y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"SLUR\")) {\n\t\t\t\tconst d = def && def.d;\n\t\t\t\tif (d) {\n\t\t\t\t\tconst numbers = d.match(/-?[\\d.]+/g).map(Number);\n\t\t\t\t\t//console.log(\"slur:\", numbers);\n\t\t\t\t\tconst x1 = token.x + numbers[0];\n\t\t\t\t\tconst y1 = token.y + numbers[1];\n\t\t\t\t\tconst x2 = token.x + numbers[6];\n\t\t\t\t\tconst y2 = token.y + numbers[7];\n\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurBegin,\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1,\n\t\t\t\t\t});\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurEnd,\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"NOTE_STEM\")) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.vline_Stem,\n\t\t\t\t\tx: token.x + def.width / 2,\n\t\t\t\t\ty: token.y,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: token.y,\n\t\t\t\t\t\ty2: token.y + token.height,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (token.is(\"TEXT\") || token.is(\"CHORD_TEXT\")) {\n\t\t\t\tif (/\\S/.test(token.text)) {\n\t\t\t\t\t// NOTE: text rect computation is delayed to sheet rendering\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\tindex: token.index,\n\t\t\t\t\t\t\ttext: token.text,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx: token.x + cx,\n\t\t\t\t\ty: token.y + cy,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// beams\n\t\tconst stems = tokens.filter(token => token.is(\"NOTE_STEM\")).map(stem => ({\n\t\t\tx: stem.x + stem.width / 2,\n\t\t\ty1: stem.y,\n\t\t\ty2: stem.y + stem.height,\n\t\t}));\n\t\tconst beams = tokens.filter(token => token.is(\"NOTETAIL\") && token.is(\"JOINT\"))\n\t\t\t.map(beam => {\n\t\t\t\tconst def = hashTable[beam.hash];\n\t\t\t\tconst points = def && def.points;\n\t\t\t\tif (points) {\n\t\t\t\t\tconst floats = points.split(\" \").map(Number);\n\t\t\t\t\tconst x1 = beam.x + floats[4];\n\t\t\t\t\tconst x2 = beam.x + floats[0];\n\t\t\t\t\tconst y1 = beam.y + (floats[5] + floats[7]) / 2;\n\t\t\t\t\tconst y2 = beam.y + (floats[1] + floats[3]) / 2;\n\t\t\t\t\tconst k = (y2 - y1) / (x2 - x1);\n\n\t\t\t\t\treturn { x1, x2, y1, y2, k, capital: beam.is(\"CAPITAL_BEAM\") };\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}).filter(Boolean);\n\t\t//console.log(\"beams:\", beams);\n\t\tbeams.forEach(beam => {\n\t\t\tconst innerStems = stems.filter(stem => stem.x > beam.x1 - 0.2 && stem.x < beam.x2 + 0.2);\n\t\t\t//console.log(\"innerStems:\", beam, innerStems);\n\n\t\t\tlet lines = 0;\n\t\t\tinnerStems.forEach(stem => {\n\t\t\t\tconst beamY = beam.y1 + (stem.x - beam.x1) * beam.k;\n\t\t\t\t//console.log(\"beamY:\", beamY, Math.min(Math.abs(beamY - beam.y1), Math.abs(beamY - beam.y2)));\n\t\t\t\tif (beamY >= stem.y1 - 0.1 && beamY <= stem.y2 + 0.1) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t});\n\n\t\t\t\t\t++lines;\n\n\t\t\t\t\t// beam semantics\n\t\t\t\t\tif (beam.capital) {\n\t\t\t\t\t\tlet semantic = SemanticType.BeamContinue;\n\t\t\t\t\t\tif (Math.abs(stem.x - beam.x1) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamLeft;\n\t\t\t\t\t\telse if (Math.abs(stem.x - beam.x2) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamRight;\n\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!lines)\n\t\t\t\tconsole.warn(\"empty beam:\", beam, innerStems, stems);\n\t\t\t//else if (lines < 2)\n\t\t\t//\tconsole.debug(\"single beam:\", beam, innerStems, stems);\n\t\t});\n\n\t\t// wedges (crescendo & decrescendo)\n\t\tconst crescendos = tokens.filter(token => token.is(\"WEDGE CRESCENDO TOP\"));\n\t\tconst crescendoBottoms = tokens.filter(token => token.is(\"WEDGE CRESCENDO BOTTOM\"));\n\t\tconst decrescendos = tokens.filter(token => token.is(\"WEDGE DECRESCENDO TOP\"));\n\t\tconst decrescendoBottoms = tokens.filter(token => token.is(\"WEDGE DECRESCENDO BOTTOM\"));\n\t\tcrescendos.forEach(line => {\n\t\t\tconst partner = crescendoBottoms.find(b => b.x === line.x && Math.abs(b.y - line.y) < 0.06);\n\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.CrescendoBegin,\n\t\t\t\t\tx: line.x,\n\t\t\t\t\ty: line.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired crescendo:\", line, crescendoBottoms);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.CrescendoEnd,\n\t\t\t\tx: line.x + line.target.x,\n\t\t\t\ty: line.y + line.target.y,\n\t\t\t});\n\t\t});\n\t\tdecrescendos.forEach(line => {\n\t\t\tconst partner = decrescendoBottoms.find(b => b.x + b.target.x === line.x + line.target.x && Math.abs(b.y + b.target.y - (line.y + line.target.y)) < 0.06);\n\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.DecrescendoBegin,\n\t\t\t\tx: line.x,\n\t\t\t\ty: line.y,\n\t\t\t});\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.DecrescendoEnd,\n\t\t\t\t\tx: line.x + line.target.x,\n\t\t\t\t\ty: line.y + line.target.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired decrescendo:\", line, decrescendoBottoms);\n\t\t});\n\n\t\t// TODO: volta alternative\n\n\t\t// measure bars\n\t\tconst measureSeparators = staff.tokens.filter(token => token.is(\"MEASURE_SEPARATOR\"));\n\t\tconst singleBars = [];\n\t\tconst groupBars = [];\n\n\t\tfor (let i = 0; i < measureSeparators.length; ++i) {\n\t\t\tconst bar = measureSeparators[i];\n\t\t\tconst nextBar = measureSeparators[i + 1];\n\t\t\tconst inteval = nextBar ? nextBar.x - bar.x : Infinity;\n\n\t\t\tif (inteval < 1) {\n\t\t\t\tgroupBars.push([bar, nextBar]);\n\t\t\t\t++i;\n\t\t\t}\n\t\t\telse\n\t\t\t\tsingleBars.push(bar);\n\t\t};\n\t\t//console.log(\"bars:\", singleBars, groupBars);\n\n\t\tsingleBars.forEach(bar => {\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx: bar.x + bar.sw / 2,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tgroupBars.forEach(group => {\n\t\t\tlet x = (group[0].x + group[1].x) / 2;\n\t\t\tconst bold0 = group[0].is(\"BOLD\");\n\t\t\tconst bold1 = group[1].is(\"BOLD\");\n\n\t\t\tlet semantic = null;\n\t\t\tif (!bold0 && bold1) {\n\t\t\t\tx = group[0].x;\n\n\t\t\t\tif (!voltaRightXs.some(vx => x - vx < 2))\n\t\t\t\t\tsemantic = SemanticType.vline_BarTerminal;\n\t\t\t}\n\t\t\telse if (bold0 && !bold1)\n\t\t\t\tx = group[1].x;\n\t\t\telse if (!bold0 && !bold1)\n\t\t\t\tsemantic = SemanticType.vline_BarSegment;\n\n\t\t\t//console.log(\"group:\", group[0].x, group[1].x, x);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx,\n\t\t\t\t\ty: 0,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: -2,\n\t\t\t\t\t\ty2: 2,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}*/\n\n\tstatic fromPoints(points: SemanticPoint[] = []): SemanticGraph {\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}\n\n\tgetLayer(semantic: SemanticType): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic);\n\t}\n\n\tgetConfidentLayer(semantic: SemanticType, threshold: number): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic && (!Number.isFinite(p.confidence) || p.confidence >= threshold));\n\t}\n\n\tgetSystemPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\tgetStaffPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => !SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\toffset(x: number, y: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x += x;\n\t\t\tpoint.y += y;\n\t\t});\n\t}\n\n\tscale(factor: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x *= factor;\n\t\t\tpoint.y *= factor;\n\t\t});\n\t}\n\n\t// multipy 3x2 matrix\n\ttransform(matrix: [number, number][]): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tlet x = point.x * matrix[0][0] + point.y * matrix[1][0] + matrix[2][0];\n\t\t\tconst y = point.x * matrix[0][1] + point.y * matrix[1][1] + matrix[2][1];\n\n\t\t\tif (point.extension) {\n\t\t\t\tif (Number.isFinite(point.extension.y1)) {\n\t\t\t\t\tconst y1 = point.x * matrix[0][1] + point.extension.y1 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tconst y2 = point.x * matrix[0][1] + point.extension.y2 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tx = point.x * matrix[0][0] + (point.extension.y1 + point.extension.y2) * 0.5 * matrix[1][0] + matrix[2][0];\n\n\t\t\t\t\tpoint.extension.y1 = y1;\n\t\t\t\t\tpoint.extension.y2 = y2;\n\t\t\t\t}\n\n\t\t\t\tif (Number.isFinite(point.extension.width)) {\n\t\t\t\t\tconst scaling = Math.sqrt(matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);\n\t\t\t\t\tpoint.extension.width *= scaling;\n\t\t\t\t\tpoint.extension.height *= scaling;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpoint.x = x;\n\t\t\tpoint.y = y;\n\t\t});\n\t}\n}\n\nexport { SemanticGraph };\n","import { SimpleClass } from './aux_/typedJSON';\nimport {\n\tAdditionalLineStack,\n\tChordColumn,\n\tChordRect,\n\tEventFeature,\n\tEventMeasureColumn,\n\tEventSystem,\n\tPageLayout,\n\tRect,\n\tSourceImageFile,\n\tTextType,\n\tVLine,\n} from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { SemanticGraph } from './semanticGraph';\nimport { hashPageSemanticPoint, hashSemanticPoint, NOTEHEAD_WIDTHS, SemanticPoint, SemanticType } from './semanticPoint';\nimport { AccessoryDirection, ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, TempoTerm, TremoloLink } from './term';\nimport {\n\tTextToken,\n\tToken,\n\tTokenAccessories,\n\tTokenBeams,\n\tTokenClefs,\n\tTokenDirectionless,\n\tTokenDots,\n\tTokenFlags,\n\tTokenNoteheads,\n\tTokenRests,\n\tTokenTimesigs,\n\tTokenType,\n\tTOKEN_Y_FIXED,\n\tTOKEN_Y_ROUND,\n} from './token';\nimport { distance2D, roundNumber, solveOverlapping, trans23 } from './utils';\n\ntype ChordsFeeder = (si: number, mi: number) => ChordColumn[];\ntype ColumnProcessor = (column: EventMeasureColumn) => EventMeasureColumn;\n\nconst CHORD_X_TOLERANCE = 0.2;\n//const EVENT_X_TOLERANCE = 0.8;\n\nconst STEM_LENGTH_MAX = 6;\n\nconst INDENT_THRESHOLD = 2;\n\nconst MEASURE_SEMANTICS = [\n\tSemanticType.ClefG,\n\tSemanticType.ClefF,\n\tSemanticType.ClefC,\n\tSemanticType.TimesigC44,\n\tSemanticType.TimesigC22,\n\tSemanticType.TimesigZero,\n\tSemanticType.TimesigOne,\n\tSemanticType.TimesigTwo,\n\tSemanticType.TimesigThree,\n\tSemanticType.TimesigFour,\n\tSemanticType.TimesigFive,\n\tSemanticType.TimesigSix,\n\tSemanticType.TimesigSeven,\n\tSemanticType.TimesigEight,\n\tSemanticType.TimesigNine,\n\tSemanticType.OctaveShift8va,\n\tSemanticType.OctaveShift8vb,\n\tSemanticType.OctaveShift0,\n\tSemanticType.Zero,\n\tSemanticType.One,\n\tSemanticType.Two,\n\tSemanticType.Three,\n\tSemanticType.Four,\n\tSemanticType.Five,\n\tSemanticType.Six,\n\tSemanticType.Seven,\n\tSemanticType.Eight,\n\tSemanticType.Nine,\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n\tSemanticType.Rest0W,\n\tSemanticType.RestM1,\n\tSemanticType.SlurBegin,\n\tSemanticType.SlurEnd,\n\tSemanticType.Dot,\n\tSemanticType.f,\n\tSemanticType.p,\n\tSemanticType.m,\n\tSemanticType.n,\n\tSemanticType.r,\n\tSemanticType.s,\n\tSemanticType.z,\n\tSemanticType.ScriptFermata,\n\tSemanticType.ScriptShortFermata,\n\tSemanticType.ScriptSforzato,\n\tSemanticType.ScriptStaccato,\n\tSemanticType.ScriptStaccatissimo,\n\tSemanticType.ScriptTurn,\n\tSemanticType.ScriptTrill,\n\tSemanticType.ScriptSegno,\n\tSemanticType.ScriptCoda,\n\tSemanticType.ScriptArpeggio,\n\tSemanticType.ScriptPrall,\n\tSemanticType.ScriptMordent,\n\tSemanticType.ScriptMarcato,\n\tSemanticType.ScriptTenuto,\n\tSemanticType.ScriptPortato,\n\tSemanticType.PedalStar,\n\tSemanticType.PedalPed,\n\tSemanticType.GraceNotehead,\n\tSemanticType.BeamLeft,\n\tSemanticType.BeamRight,\n\tSemanticType.BeamContinue,\n\tSemanticType.CrescendoBegin,\n\tSemanticType.CrescendoEnd,\n\tSemanticType.DecrescendoBegin,\n\tSemanticType.DecrescendoEnd,\n\tSemanticType.TremoloLeft,\n\tSemanticType.TremoloRight,\n\tSemanticType.TremoloMiddle,\n];\n\nconst STAFF_LINED_SEMANTICS = [\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n];\n\nconst LINED_INTERVAL_SEMANTICS = [SemanticType.SignLined, SemanticType.SignInterval];\n\nconst NOTEHEAD_FOR_STEM_SEMANTICS = [SemanticType.NoteheadS1, SemanticType.NoteheadS2];\n\nconst KEYACC_CANDIDATE_SEMANTICS = {\n\tAccSharp: TokenType.KeySharp,\n\tAccNatural: TokenType.KeyNatural,\n\tAccFlat: TokenType.KeyFlat,\n};\n\nconst NOTEHEAD_TABLE: { [key: string]: { [key: string]: SemanticType } } = {\n\t[SemanticType.NoteheadS1]: {\n\t\tup: SemanticType.NoteheadS1stemU,\n\t\tdown: SemanticType.NoteheadS1stemD,\n\t},\n\t[SemanticType.NoteheadS2]: {\n\t\tup: SemanticType.NoteheadS2stemU,\n\t\tdown: SemanticType.NoteheadS2stemD,\n\t},\n};\n\nconst REST_SEMANTICS = [\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n];\n\nconst TOKEN_TO_STEMBEAM = {\n\t[TokenType.BeamLeft]: 'Open',\n\t[TokenType.BeamRight]: 'Close',\n\t[TokenType.BeamContinue]: 'Continue',\n};\n\nconst TEXT_TYPE_ALIAS = {\n\tAlter1: TextType.Alternation1,\n\tAlter2: TextType.Alternation2,\n};\n\ninterface StaffPosition {\n\ty: number;\n\tradius: number;\n}\n\ninterface TextArea {\n\tscore: number;\n\tcx: number;\n\tcy: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\ttype: string;\n\ttheta: number;\n\tfeature_dict: Record;\n}\n\ntype Stem = VLine & { direction: 'u' | 'd' };\n\nconst noteheadsXPivot = (xs: number[], direction: 'u' | 'd' | null): number => {\n\tswitch (xs.length) {\n\t\tcase 0:\n\t\t\treturn undefined;\n\n\t\tcase 1:\n\t\t\treturn xs[0];\n\n\t\tcase 2:\n\t\t\treturn direction === 'u' ? Math.min(...xs) : Math.max(...xs);\n\n\t\tdefault: {\n\t\t\tconst mean = xs.reduce((sum, x) => sum + x, 0) / xs.length;\n\t\t\txs.sort((x1, x2) => Math.abs(x1 - mean) - Math.abs(x2 - mean));\n\n\t\t\treturn noteheadsXPivot(xs.slice(0, xs.length - 1), direction);\n\t\t}\n\t}\n};\n\nconst noteheadsPivot = (nhs: Token[]): number =>\n\tnoteheadsXPivot(\n\t\tnhs.map((nh) => (Number.isFinite(nh.pivotX) ? nh.pivotX : nh.x)),\n\t\tnhs[0].direction\n\t);\n\nclass Measure extends SimpleClass {\n\tstatic className = 'Measure';\n\tstatic blackKeys = ['tokens', 'antiTokens'];\n\n\tleft: number;\n\twidth: number;\n\theight: number;\n\n\talternative: boolean;\n\n\ttokens: Token[];\n\tantiTokens: Token[];\n\n\tbarTypes: Record;\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.tokens = this.tokens || [];\n\t\tthis.antiTokens = this.antiTokens || [];\n\t\tthis.barTypes = this.barTypes || {};\n\t}\n\n\tget right(): number {\n\t\treturn this.left + this.width;\n\t}\n\n\tget noteheads(): Token[] {\n\t\treturn this.tokens.filter((t) => t.isNotehead).sort((n1, n2) => n1.x - n2.x);\n\t}\n\n\tget chordRects(): ChordRect[] {\n\t\tconst noteheads = this.noteheads.filter((nh) =>\n\t\t\t[TokenType.NoteheadS0, TokenType.NoteheadS1stemU, TokenType.NoteheadS2stemU, TokenType.NoteheadS1stemD, TokenType.NoteheadS2stemD].includes(nh.type)\n\t\t);\n\n\t\tlet nulN = 0;\n\n\t\tconst nhmap: Record = noteheads.reduce((map, nh) => {\n\t\t\tconst tip = nh.tip ? `${nh.tip.x}|${nh.tip.y}` : `nul${nulN}`;\n\t\t\tlet key = `${nh.type}|${tip}`;\n\n\t\t\tif (!nh.tip && map[key]) {\n\t\t\t\tif (!map[key].some((hh) => Math.abs(hh.x - nh.x) < NOTEHEAD_WIDTHS.NoteheadS0)) {\n\t\t\t\t\t++nulN;\n\t\t\t\t\tkey = `${nh.type}|nul${nulN}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmap[key] = map[key] || [];\n\t\t\tmap[key].push(nh);\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(nhmap).map((nhs) => {\n\t\t\tconst left = Math.min(...nhs.map((nh) => nh.x));\n\t\t\tconst right = Math.max(...nhs.map((nh) => nh.x));\n\t\t\tconst top = Math.min(...nhs.map((nh) => nh.y));\n\t\t\tconst bottom = Math.max(...nhs.map((nh) => nh.y));\n\n\t\t\tconst nh0 = nhs[0];\n\n\t\t\tconst stemX = nh0 && nh0.tip ? nh0.tip.x : left;\n\n\t\t\tlet x = left;\n\t\t\tlet width = right - left;\n\t\t\tlet stemDirection = null;\n\n\t\t\tswitch (nh0.type) {\n\t\t\t\tcase TokenType.NoteheadS0:\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS0 / 2;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemU:\n\t\t\t\tcase TokenType.NoteheadS2stemU:\n\t\t\t\t\tstemDirection = 'u';\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS1;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemD:\n\t\t\t\tcase TokenType.NoteheadS2stemD:\n\t\t\t\t\tstemDirection = 'd';\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx,\n\t\t\t\twidth,\n\t\t\t\tstemX,\n\t\t\t\tstemDirection,\n\t\t\t\ttop,\n\t\t\t\tbottom,\n\t\t\t\ttip: nh0.tip,\n\t\t\t};\n\t\t});\n\t}\n\n\tget timeWarped(): boolean {\n\t\treturn this.tokens && this.tokens.some((token) => token.timeWarped);\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\tconst chords = this.getChords();\n\t\tconst up = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y <= -3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.ceil(Math.min(...chord.ys)) + 2,\n\t\t\t}));\n\t\tconst down = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y >= 3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.floor(Math.max(...chord.ys)) - 2,\n\t\t\t}));\n\n\t\treturn [...up, ...down].map((stack) => ({\n\t\t\tleft: stack.left - 0.28,\n\t\t\tright: stack.right + 0.28,\n\t\t\tn: stack.n,\n\t\t}));\n\t}\n\n\tgetChords(): ChordColumn[] {\n\t\tconst flags = this.tokens.filter((t) => TokenFlags.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\t\tconst beams = this.tokens.filter((t) => TokenBeams.includes(t.type));\n\n\t\tconst chordRcs = this.chordRects\n\t\t\t.map((rect) => {\n\t\t\t\tconst noteheads = this.noteheads.filter(\n\t\t\t\t\t(nh) =>\n\t\t\t\t\t\tnh.direction === rect.stemDirection &&\n\t\t\t\t\t\tnh.left >= rect.x &&\n\t\t\t\t\t\tnh.right <= rect.x + rect.width + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tnh.y >= rect.top &&\n\t\t\t\t\t\tnh.y <= rect.bottom\n\t\t\t\t);\n\t\t\t\tnoteheads.sort((n1, n2) => n2.y - n1.y);\n\t\t\t\tconst ys = noteheads.map((nh) => nh.y);\n\t\t\t\tconst noteIds = noteheads.map((nh) => nh.id);\n\n\t\t\t\tconst division = noteheads.reduce((d, nh) => Math.max(d, nh.division), 0);\n\n\t\t\t\treturn {\n\t\t\t\t\trect,\n\t\t\t\t\tleft: rect.x,\n\t\t\t\t\tright: rect.x + rect.width,\n\t\t\t\t\tpivotX: noteheadsPivot(noteheads),\n\t\t\t\t\tys,\n\t\t\t\t\ttip: rect.tip,\n\t\t\t\t\tnoteIds,\n\t\t\t\t\tdivision,\n\t\t\t\t\tdots: null,\n\t\t\t\t\trest: false,\n\t\t\t\t\tstemDirection: rect.stemDirection,\n\t\t\t\t\tbeam: null,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((c1, c2) => c2.left - c1.left);\n\n\t\tconst accs = new Set();\n\n\t\tconst chords = chordRcs.map(({ rect, ...chord }) => {\n\t\t\tif (chord.division >= 1) {\n\t\t\t\t// NOTE: notehead-s1 may have flags too\n\t\t\t\tconst flagRange = [rect.bottom, rect.top];\n\t\t\t\tswitch (rect.stemDirection) {\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\tflagRange[0] = rect.tip ? rect.tip.y - 0.2 : rect.top - STEM_LENGTH_MAX - 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tflagRange[1] = rect.tip ? rect.tip.y + 0.2 : rect.bottom + STEM_LENGTH_MAX + 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nearbyFlags = flags.filter(\n\t\t\t\t\t(flag) =>\n\t\t\t\t\t\t!accs.has(flag.id) &&\n\t\t\t\t\t\tflag.x > rect.stemX - CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.x < rect.stemX + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.y > flagRange[0] &&\n\t\t\t\t\t\tflag.y < flagRange[1]\n\t\t\t\t);\n\t\t\t\tchord.division = nearbyFlags.reduce((d, flag) => Math.max(d, flag.division), chord.division);\n\n\t\t\t\tnearbyFlags.forEach((flag) => accs.add(flag.id));\n\n\t\t\t\tif (chord.division >= 3) {\n\t\t\t\t\tconst beamToken = rect.tip && beams.find((t) => Math.abs(rect.tip.x - t.x) < 0.3 && Math.abs(rect.tip.y - t.y) < 0.7);\n\t\t\t\t\tif (beamToken) chord.beam = TOKEN_TO_STEMBEAM[beamToken.type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst nearbyDots = dots.filter(\n\t\t\t\t(dot) =>\n\t\t\t\t\t!accs.has(dot.id) &&\n\t\t\t\t\tdot.x > rect.x + rect.width - 0.2 &&\n\t\t\t\t\tdot.x < rect.x + rect.width + 1.2 &&\n\t\t\t\t\tdot.y > rect.top - 1 &&\n\t\t\t\t\tdot.y <= rect.bottom + 0.5\n\t\t\t);\n\t\t\tchord.dots = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\tnearbyDots.forEach((dot) => accs.add(dot.id));\n\n\t\t\treturn chord;\n\t\t});\n\n\t\tchords.reverse();\n\n\t\treturn chords;\n\t}\n\n\tgetRests(): ChordColumn[] {\n\t\tconst rests = this.tokens.filter((t) => TokenRests.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\n\t\treturn rests.map((rest) => {\n\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > rest.x + 0.5 && dot.x < rest.x + 2 && dot.y > rest.y - 1 && dot.y < rest.y + 0.5);\n\t\t\tconst dotValue = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\treturn {\n\t\t\t\tleft: rest.x - 0.75,\n\t\t\t\tright: rest.x + 0.75,\n\t\t\t\tpivotX: rest.x,\n\t\t\t\trest: true,\n\t\t\t\tys: [rest.y],\n\t\t\t\tnoteIds: [rest.id],\n\t\t\t\tdots: dotValue,\n\t\t\t\tdivision: rest.division,\n\t\t\t\tstemDirection: null,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\treturn [...this.getChords(), ...this.getRests()].sort((e1, e2) => e1.left - e2.left);\n\t}\n\n\tgetContexts(fields = {}): ContextedTerm[] {\n\t\treturn this.tokens\n\t\t\t.filter((t) => t.isContexted)\n\t\t\t.sort((n1, n2) => n1.x - n2.x)\n\t\t\t.map(\n\t\t\t\t(token) =>\n\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\ttokenType: token.type,\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t})\n\t\t\t);\n\t}\n\n\tassignAccessoriesOnEvents(events: ChordColumn[]): void {\n\t\tevents.forEach((event) => (event.accessories = event.accessories || []));\n\n\t\tconst accessories = this.tokens.filter((token) => TokenAccessories.includes(token.type));\n\t\t//console.log(\"accessories:\", accessories);\n\t\taccessories.forEach((accessory) => {\n\t\t\tconst relatedEvents = events.filter((event) => accessory.x > event.left - 1 && accessory.x < event.right + 1);\n\n\t\t\tif (relatedEvents.length > 0) {\n\t\t\t\tlet owner = relatedEvents[0];\n\t\t\t\tif (relatedEvents.length > 1) {\n\t\t\t\t\towner = relatedEvents\n\t\t\t\t\t\t.map((event) => ({ event, d: Math.min(...event.ys.map((y) => Math.abs(y - accessory.y))) }))\n\t\t\t\t\t\t.sort(({ d: d1 }, { d: d2 }) => d1 - d2)\n\t\t\t\t\t\t.map(({ event }) => event)[0];\n\t\t\t\t}\n\t\t\t\t//console.log(\"relatedEvents:\", accessory, owner);\n\n\t\t\t\tlet direction = accessory.y > Math.max(...owner.ys) ? AccessoryDirection.Down : AccessoryDirection.Up;\n\t\t\t\tif (TokenDirectionless.includes(accessory.type)) direction = null;\n\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: accessory.type,\n\t\t\t\t\tid: accessory.id,\n\t\t\t\t\tdirection,\n\t\t\t\t\tx: accessory.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone accessory:\", accessory.type);\n\t\t});\n\n\t\t// arpeggio\n\t\tconst sortEvents = [...events];\n\t\tsortEvents.sort((e1, e2) => e1.left - e2.left);\n\n\t\tconst arpeggios = this.tokens.filter((token) => token.type === TokenType.ScriptArpeggio);\n\t\tarpeggios.forEach((arpeggio) => {\n\t\t\tconst owner = sortEvents.find(\n\t\t\t\t(event) => arpeggio.x < event.left && event.ys.some((y) => y < arpeggio.y + 0.25) && event.ys.some((y) => y > arpeggio.y)\n\t\t\t);\n\t\t\t//const owner = sortEvents.find(event => event.left - leftMost.left < 2 && event.ys.some(y => Math.abs(y - arpeggio.y + 0.25) < 0.5));\n\t\t\tif (owner) {\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: TokenType.ScriptArpeggio,\n\t\t\t\t\tid: arpeggio.id,\n\t\t\t\t\tx: arpeggio.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone arpeggio:\", arpeggio);\n\t\t});\n\n\t\t// grace noteheads\n\t\tconst graceNhs = this.tokens.filter((token) => token.type === TokenType.GraceNotehead);\n\t\tgraceNhs.forEach((grace) => {\n\t\t\tconst event = events.find((event) => grace.x > event.left && grace.x < event.right && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tif (event) event.grace = GraceType.Grace;\n\t\t});\n\n\t\t// tremolos\n\t\tconst tremolsLs = this.tokens.filter((token) => token.type === TokenType.TremoloLeft);\n\t\tconst tremolsRs = this.tokens.filter((token) => token.type === TokenType.TremoloRight);\n\t\tconst tremolsMs = this.tokens.filter((token) => token.type === TokenType.TremoloMiddle);\n\n\t\tconst tevents = events\n\t\t\t.filter((event) => !event.rest)\n\t\t\t.map((event) => {\n\t\t\t\tconst ys = [...event.ys];\n\t\t\t\tif (event.tip) ys.push(event.tip.y);\n\t\t\t\telse {\n\t\t\t\t\tys.push(event.ys[0] + 2);\n\t\t\t\t\tys.push(event.ys[event.ys.length - 1] - 2);\n\t\t\t\t}\n\n\t\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\t\t\t\tconst stemR = event.tip ? event.tip.x : event.right;\n\n\t\t\t\treturn {\n\t\t\t\t\tevent,\n\t\t\t\t\ttop: Math.min(...ys),\n\t\t\t\t\tbottom: Math.max(...ys),\n\t\t\t\t\tstemL,\n\t\t\t\t\tstemR,\n\t\t\t\t};\n\t\t\t});\n\n\t\ttremolsMs.forEach((tm) => {\n\t\t\tconst te = tevents.find((te) => {\n\t\t\t\tif (te.event.tip) return tm.y > te.top && tm.y < te.bottom && Math.abs(tm.x - te.event.tip.x) < 0.3;\n\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t}\n\t\t});\n\t\ttremolsLs.forEach((tl) => {\n\t\t\tconst te = tevents.find((te) => tl.y > te.top && tl.y < te.bottom && tl.x > te.stemR && tl.x < te.stemR + 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Pitcher;\n\t\t\t}\n\t\t});\n\t\ttremolsRs.forEach((tr) => {\n\t\t\tconst te = tevents.find((te) => tr.y > te.top && tr.y < te.bottom && tr.x < te.stemL && tr.x > te.stemL - 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Catcher;\n\t\t\t}\n\t\t});\n\t}\n\n\tassignFeaturesOnEvents(events: ChordColumn[], semantics: SemanticPoint[]): void {\n\t\tconst points = semantics.filter((point) => point.x > this.left && point.x < this.right);\n\t\tconst rests = points.filter((point) => REST_SEMANTICS.includes(point.semantic));\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tconst dotPs = points.filter((point) => point.semantic === SemanticType.Dot);\n\t\tconst beamLs = points.filter((points) => points.semantic === SemanticType.BeamLeft);\n\t\tconst beamMs = points.filter((points) => points.semantic === SemanticType.BeamContinue);\n\t\tconst beamRs = points.filter((points) => points.semantic === SemanticType.BeamRight);\n\t\tconst gracePs = points.filter((point) => point.semantic === SemanticType.GraceNotehead);\n\t\tconst tremoloRs = points.filter((point) => point.semantic === SemanticType.TremoloRight);\n\t\tconst stems = points.filter((point) => point.semantic === SemanticType.vline_Stem);\n\t\tconst s0 = points.filter((point) => point.semantic === SemanticType.NoteheadS0);\n\t\tconst s1 = points.filter((point) => point.semantic === SemanticType.NoteheadS1);\n\t\tconst s2 = points.filter((point) => point.semantic === SemanticType.NoteheadS2);\n\n\t\tevents.forEach((event) => {\n\t\t\tconst cx = event.tip ? event.tip.x : (event.left + event.right) / 2;\n\t\t\tconst top = event.tip ? Math.min(event.tip.y, event.ys[event.ys.length - 1]) : event.ys[event.ys.length - 1];\n\t\t\tconst bottom = event.tip ? Math.max(event.tip.y, event.ys[0]) : event.ys[0];\n\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\n\t\t\tconst divisions = [0, 0, 0, 0, 0, 0, 0];\n\t\t\tif (event.rest) {\n\t\t\t\tconst i_rests = rests.filter((point) => distance2D(point, { x: cx, y: event.ys[0] }) < 0.5);\n\t\t\t\ti_rests.forEach((r) => {\n\t\t\t\t\tconst d = REST_SEMANTICS.indexOf(r.semantic);\n\t\t\t\t\tdivisions[d] = Math.max(divisions[d], r.confidence);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst nhs = [s0, s1, s2]\n\t\t\t\t\t.map((ss) => ss.filter((nh) => nh.x > event.left && nh.x < event.right && nh.y > top - 0.25 && nh.y < bottom + 0.25))\n\t\t\t\t\t.map((ss) => Math.max(0, ...ss.map((nh) => nh.confidence)));\n\n\t\t\t\tconst i_flags = flags.filter((flag) => flag.y > top - 0.2 && flag.y < bottom + 0.2 && Math.abs(flag.x - cx) < 0.2);\n\t\t\t\ti_flags.sort((f1, f2) => f2.confidence - f1.confidence);\n\n\t\t\t\tdivisions[0] = nhs[0];\n\t\t\t\tdivisions[1] = nhs[1];\n\t\t\t\tdivisions[2] = nhs[2];\n\t\t\t\tArray(divisions.length - 3)\n\t\t\t\t\t.fill(0)\n\t\t\t\t\t.forEach((_, i) => (divisions[3 + i] = i_flags[i] ? i_flags[i].confidence : 0));\n\t\t\t}\n\n\t\t\tconst i_dots = dotPs.filter((dot) => dot.x > cx && dot.x < event.right + 2.6);\n\t\t\tconst dots2 = i_dots.filter((dot) => i_dots.some((d) => dot.x > d.x && Math.abs(dot.y - d.y) < 0.2));\n\t\t\tconst dots = [Math.max(0, ...i_dots.map((dot) => dot.confidence)), Math.max(0, ...dots2.map((dot) => dot.confidence))];\n\n\t\t\tconst beams = [beamLs, beamMs, beamRs]\n\t\t\t\t.map((bs) => bs.filter((b) => Math.abs(b.x - cx) < 0.2 && b.y > top - 0.2 && b.y < bottom + 0.2))\n\t\t\t\t.map((bs) => Math.max(0, ...bs.map((b) => b.confidence)));\n\n\t\t\tconst u_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[0] }, { x: stem.x, y: stem.extension.y2 }) < 0.5);\n\t\t\tconst d_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[event.ys.length - 1] }, { x: stem.x, y: stem.extension.y1 }) < 0.5);\n\t\t\tconst stemDirections = [Math.max(0, ...u_stems.map((stem) => stem.confidence)), Math.max(0, ...d_stems.map((stem) => stem.confidence))];\n\n\t\t\tconst graces = gracePs.filter((grace) => Math.abs(grace.x - cx) < 0.6 && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tconst grace = Math.max(0, ...graces.map((grace) => grace.confidence));\n\n\t\t\tconst tremolos =\n\t\t\t\tevent.division === 0\n\t\t\t\t\t? tremoloRs.filter((tremolo) => tremolo.x > event.left - 2 && tremolo.x < event.right)\n\t\t\t\t\t: tremoloRs.filter((tremolo) => tremolo.y > top - 0.04 && tremolo.y < bottom + 0.04 && tremolo.x > stemL - 2 && tremolo.x < stemL);\n\t\t\tconst tremoloCatcher = Math.max(0, ...tremolos.map((tremolo) => tremolo.confidence));\n\n\t\t\tevent.feature = {\n\t\t\t\tdivisions,\n\t\t\t\tdots,\n\t\t\t\tbeams,\n\t\t\t\tstemDirections,\n\t\t\t\tgrace,\n\t\t\t\ttremoloCatcher,\n\t\t\t} as EventFeature;\n\t\t});\n\t}\n}\n\nclass Staff extends SimpleClass {\n\tstatic className = 'Staff';\n\tstatic blackKeys = ['index', 'semanticTop', 'semanticBttom'];\n\n\tindex?: number; // staff index in full staff layout\n\n\t// in units\n\ttop: number;\n\theight: number;\n\tstaffY: number;\n\n\tsemanticTop: number;\n\tsemanticBottom: number;\n\n\tbackgroundImage: string | Buffer;\n\tmaskImage: string | Buffer;\n\timagePosition: Rect;\n\n\tmeasures: Measure[];\n\n\tsemantics: SemanticPoint[];\n\n\tconstructor({ measureCount = null, measureBars = null, ...data }: Record = {}) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.height = this.height || 10;\n\t\tthis.staffY = this.staffY || 5;\n\n\t\tif (measureBars) {\n\t\t\tlet left = 0;\n\t\t\tthis.measures = measureBars.map((endX) => {\n\t\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\t\tleft = endX;\n\n\t\t\t\treturn measure;\n\t\t\t});\n\t\t} else if (measureCount)\n\t\t\tthis.measures = Array(measureCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Measure());\n\t\telse this.measures = [];\n\t}\n\n\t// relative to staffY\n\tget noteRange(): { top: number; bottom: number } {\n\t\tconst noteheads: Token[] = [].concat(...this.measures.map((measure) => measure.noteheads));\n\t\tconst ys = noteheads.map((note) => note.y);\n\t\tconst top = Math.min(-2, ...ys);\n\t\tconst bottom = Math.max(2, ...ys);\n\n\t\treturn { top, bottom };\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\treturn [].concat(...this.measures.map((measure) => measure.additionalLines));\n\t}\n\n\trearrangeMeasures(measureBars: number[]): void {\n\t\tif (!measureBars.length) {\n\t\t\tconsole.warn('rearrangeMeasures error, measureBars are empty.');\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokens = this.measures?.map((measure) => measure.tokens).flat(1) || [];\n\n\t\tlet left = 0;\n\t\tthis.measures = measureBars.map((endX) => {\n\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\tleft = endX;\n\n\t\t\treturn measure;\n\t\t});\n\n\t\tthis.reassignTokens(tokens);\n\t}\n\n\treassignTokens(tokens: Token[] = null): void {\n\t\tif (!tokens) tokens = [].concat(...this.measures.map((measure) => measure.tokens));\n\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\n\t\ttokens.forEach((token) => {\n\t\t\tfor (const measure of this.measures) {\n\t\t\t\tif (token.x < measure.right) {\n\t\t\t\t\tmeasure.tokens.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tassignSemantics(graph: SemanticGraph): void {\n\t\tthis.semantics = graph.getStaffPoints();\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, system: System, logger: Logger = new DummyLogger()): void {\n\t\tif (!this.semantics) return;\n\n\t\tlet points = system.qualifiedSemantics(this.semantics, threshold);\n\t\tpoints = solveOverlapping(points);\n\n\t\t// tempo noteheads\n\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t//console.log(\"temponh:\", tempoNh, index, points[index]);\n\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t// TODO: construct tempo term\n\t\t});\n\n\t\tconst antiP = (id: string): SemanticPoint | null => {\n\t\t\tif (system.displacementSemantics?.[id]) return this.semantics.find((p) => p.id === id);\n\n\t\t\treturn null;\n\t\t};\n\n\t\tpoints.filter((point) => MEASURE_SEMANTICS.includes(point.semantic)).forEach((point) => this.appendPoint(point, { points }));\n\n\t\t// noteheads with stem from noteheads & stems\n\t\tconst stems: Stem[] = points\n\t\t\t.filter((point) => point.semantic === SemanticType.vline_Stem)\n\t\t\t.filter((stem) => stem.extension.y2 - stem.extension.y1 > 1.5) // exclude too short stems\n\t\t\t.map((p) => ({\n\t\t\t\tx: p.x,\n\t\t\t\ty1: p.extension.y1,\n\t\t\t\ty2: p.extension.y2,\n\t\t\t\tdirection: null,\n\t\t\t}));\n\t\tconst noteheads = points.filter(\n\t\t\t(point) => NOTEHEAD_FOR_STEM_SEMANTICS.includes(point.semantic) && point.y > this.semanticTop && point.y < this.semanticBottom\n\t\t);\n\t\tconst rootNhs = new Set();\n\n\t\t// for 2nd degree chord notes\n\t\tconst nhOffsetX = (nh: SemanticPoint, stem: Stem, down: boolean): number => {\n\t\t\tif ((down ? 1 : 0) ^ (nh.x < stem.x ? 1 : 0)) return 0;\n\n\t\t\tconst offset = NOTEHEAD_WIDTHS[nh.semantic];\n\n\t\t\treturn down ? -offset : offset;\n\t\t};\n\n\t\t// find root noteheads on stem\n\t\tstems.forEach((stem) => {\n\t\t\tconst attachedHeads = noteheads.filter(\n\t\t\t\t(nh) =>\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 < 0.32 &&\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 > -0.44 && // for grace noteheads, more close to their stem\n\t\t\t\t\tnh.y > stem.y1 - 0.5 &&\n\t\t\t\t\tnh.y < stem.y2 + 0.5 &&\n\t\t\t\t\t!(nh.x > stem.x && nh.y > stem.y2) &&\n\t\t\t\t\t!(nh.x < stem.x && nh.y < stem.y1)\n\t\t\t);\n\t\t\t//if (stem.x===102.0625 && stem.y2===1.875)\n\t\t\t//\tdebugger;\n\t\t\tif (attachedHeads.length) {\n\t\t\t\tattachedHeads.sort((n1, n2) => n1.y - n2.y);\n\n\t\t\t\tconst topDist = Math.min(...attachedHeads.map((nh) => nh.y - stem.y1));\n\t\t\t\tconst bottomDist = Math.min(...attachedHeads.map((nh) => stem.y2 - nh.y));\n\t\t\t\tif (Math.min(topDist, bottomDist) > 0.5) return; // no root notehead on this stem\n\n\t\t\t\tconst down = topDist < bottomDist;\n\t\t\t\tstem.direction = down ? 'd' : 'u';\n\n\t\t\t\tif (!down) attachedHeads.reverse();\n\t\t\t\tconst root = attachedHeads[0];\n\n\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[root.semantic].down : NOTEHEAD_TABLE[root.semantic].up;\n\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: root.id,\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx: stem.x + nhOffsetX(root, stem, down),\n\t\t\t\t\t\ty: root.y,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tconfidence: root.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\tantiPoint: antiP(root.id),\n\t\t\t\t\t\tpoints,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\trootNhs.add(root.id);\n\t\t\t}\n\t\t});\n\n\t\t// non-root noteheads\n\t\tnoteheads\n\t\t\t.filter((nh) => !rootNhs.has(nh.id))\n\t\t\t.forEach((nh) => {\n\t\t\t\tconst nearStems = stems\n\t\t\t\t\t.filter((stem) => Math.abs(stem.x - nh.x) < 2 && nh.y > stem.y1 && nh.y < stem.y2)\n\t\t\t\t\t.sort((s1, s2) => Math.abs(s1.x - nh.x) - Math.abs(s2.x - nh.x));\n\t\t\t\tconst stem = nearStems[0];\n\t\t\t\tif (stem) {\n\t\t\t\t\tconst down = stem.direction === 'd';\n\t\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[nh.semantic].down : NOTEHEAD_TABLE[nh.semantic].up;\n\n\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: nh.id,\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x + nhOffsetX(nh, stem, down),\n\t\t\t\t\t\t\ty: nh.y,\n\t\t\t\t\t\t\tpivotX: nh.x,\n\t\t\t\t\t\t\tconfidence: nh.confidence,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\t\tantiPoint: antiP(nh.id),\n\t\t\t\t\t\t\tpoints,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else logger.debug('isolated notehead:', system.index, this.index, nh);\n\t\t\t});\n\n\t\t// group flags\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tflags.sort((f1, f2) => f1.x - f2.x);\n\t\tthis.appendFlags(flags, stems);\n\n\t\t// group dots\n\t\tconst dots = points\n\t\t\t.filter((point) => point.semantic === SemanticType.Dot)\n\t\t\t.map((dot) => {\n\t\t\t\tconst y = roundNumber(dot.y, 0.5);\n\t\t\t\treturn { x: dot.x, y };\n\t\t\t});\n\t\tconst dotLines: { [key: number]: SemanticPoint[] } = dots.reduce((table, dot) => {\n\t\t\ttable[dot.y] = table[dot.y] || [];\n\t\t\ttable[dot.y].push(dot);\n\t\t\treturn table;\n\t\t}, {});\n\t\tObject.entries(dotLines).forEach(([sy, line]) => {\n\t\t\tconst y = Number(sy);\n\t\t\tif (line.length > 1) {\n\t\t\t\tline.sort((d1, d2) => d1.x - d2.x);\n\t\t\t\tfor (let i = 0; i < line.length - 1; i++) {\n\t\t\t\t\tconst dot = line[i];\n\t\t\t\t\tif (line.find((d) => d.x > dot.x && d.x - dot.x < 1.2)) {\n\t\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: dot.id,\n\t\t\t\t\t\t\t\tx: dot.x,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tconfidence: dot.confidence,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: TokenType.DotDot, antiPoint: antiP(dot.id), points }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// pair key accidentals\n\t\tconst keyaccs = points.filter((point) => point.semantic === SemanticType.KeyAcc);\n\t\tconst accs = points.filter((point) => KEYACC_CANDIDATE_SEMANTICS[point.semantic]);\n\t\taccs.forEach((acc) => {\n\t\t\tif (keyaccs.some((key) => Math.abs(acc.x - key.x) < 0.5 && Math.abs(acc.y - key.y) < 1)) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: acc.id,\n\t\t\t\t\t\tsemantic: acc.semantic,\n\t\t\t\t\t\tx: acc.x,\n\t\t\t\t\t\ty: acc.y,\n\t\t\t\t\t\tconfidence: acc.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{ type: KEYACC_CANDIDATE_SEMANTICS[acc.semantic], points }\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// octave shift heads\n\t\tconst octs = points.filter((point) => point.semantic === SemanticType.OctaveShift8);\n\t\tocts.forEach((oct) => {\n\t\t\tconst type = oct.y < 0 ? TokenType.OctaveShift8va : TokenType.OctaveShift8vb;\n\t\t\tthis.appendPoint(\n\t\t\t\t{\n\t\t\t\t\tid: oct.id,\n\t\t\t\t\tx: oct.x,\n\t\t\t\t\ty: oct.y,\n\t\t\t\t\tconfidence: oct.confidence,\n\t\t\t\t},\n\t\t\t\t{ type, points }\n\t\t\t);\n\t\t});\n\n\t\t// group volta dots\n\t\tconst voltaDots = this.semantics.filter((point) => [SemanticType.VoltaLeft, SemanticType.VoltaRight].includes(point.semantic));\n\t\tvoltaDots.sort((d1, d2) => d1.x - d2.x);\n\t\tconst voltaGroups: Record> = voltaDots.reduce(\n\t\t\t(groups, dot) => {\n\t\t\t\tconst group = groups[dot.semantic];\n\t\t\t\tconst xs = Array.from(Object.keys(group)).map(Number);\n\t\t\t\tconst x = xs.find((x) => dot.x < x + 0.2) || dot.x;\n\n\t\t\t\tgroup[x] = groups[dot.semantic][x] || [];\n\t\t\t\tgroup[x].push(dot);\n\n\t\t\t\treturn groups;\n\t\t\t},\n\t\t\t{ [SemanticType.VoltaLeft]: {}, [SemanticType.VoltaRight]: {} }\n\t\t);\n\t\tfor (const [type, group] of Object.entries(voltaGroups)) {\n\t\t\tObject.values(group).forEach((dots) => {\n\t\t\t\tif (dots.length > 1) {\n\t\t\t\t\tconst confidence = dots.reduce((sum, dot) => sum + dot.confidence, 0);\n\t\t\t\t\tif (dots[0].y * dots[1].y < 0 && confidence >= threshold * 2) this.appendPoint(dots[0], { type: TokenType[type] });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tappendPoint(\n\t\tpoint: Partial,\n\t\t{ type, points = null, antiPoint, ...fields }: { type?: TokenType; antiPoint?: SemanticPoint; [key: string]: any } = {}\n\t): void {\n\t\t//console.log(\"appendPoint.0:\", point, point.x, point.y);\n\t\tconst x = point.x;\n\t\tconst measure = this.measures.find((measure) => x < measure.left + measure.width);\n\t\tif (!measure)\n\t\t\t// drop tokens out of measures range\n\t\t\treturn;\n\n\t\t// lined or interval\n\t\tlet lined = false;\n\t\tlet interval = false;\n\t\tif (STAFF_LINED_SEMANTICS.includes(point.semantic)) {\n\t\t\tconsole.assert(points, 'argument of points for this semantic is required:', point.semantic);\n\t\t\tconst signs = points.filter((p) => LINED_INTERVAL_SEMANTICS.includes(p.semantic) && Math.abs(p.y - point.y) < 0.2 && Math.abs(p.x - point.x) < 1.2);\n\t\t\tif (signs.some((s) => s.semantic === SemanticType.SignLined)) lined = true;\n\t\t\telse if (signs.some((s) => s.semantic === SemanticType.SignInterval)) interval = true;\n\t\t}\n\n\t\ttype = type || TokenType[point.semantic];\n\t\tconst fixedY = TOKEN_Y_FIXED[type];\n\t\tlet roundY = TOKEN_Y_ROUND[type];\n\n\t\tif (lined || interval) roundY = Math.max(roundY, 1);\n\n\t\tlet y = point.y;\n\t\tif (Number.isFinite(fixedY)) y = fixedY;\n\t\telse if (roundY) {\n\t\t\tif (interval) y = roundNumber(y + 0.5, roundY) - 0.5;\n\t\t\telse y = roundNumber(y, roundY);\n\t\t}\n\t\t//if (lined || interval)\n\t\t//\tconsole.log(\"round sign:\", point.semantic, y, lined, interval);\n\n\t\tconst holder = measure.tokens.find((token) => token.type === type && Math.abs(token.x - x) < 0.1 && Math.abs(token.y - y) < 0.1);\n\t\tif (holder) {\n\t\t\tif (Number.isFinite(holder.confidence) && holder.confidence < point.confidence) {\n\t\t\t\tholder.x = x;\n\t\t\t\tholder.y = y;\n\t\t\t\tholder.confidence = point.confidence;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// exlude clef out of pitch range\n\t\tif (TokenClefs.includes(type)) {\n\t\t\tif (Math.abs(y) > 3) return;\n\t\t}\n\n\t\t// TODO: exclude overlapped pair by a token prior table\n\n\t\tmeasure.tokens.push(\n\t\t\tnew Token({\n\t\t\t\tid: point.id,\n\t\t\t\ttype,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tpivotX: point.pivotX,\n\t\t\t\tconfidence: point.confidence,\n\t\t\t\t...fields,\n\t\t\t})\n\t\t);\n\n\t\tif (antiPoint) {\n\t\t\tmeasure.antiTokens.push(\n\t\t\t\tnew Token({\n\t\t\t\t\tid: antiPoint.id,\n\t\t\t\t\ttype,\n\t\t\t\t\tx,\n\t\t\t\t\ty: antiPoint.y,\n\t\t\t\t\tconfidence: antiPoint.confidence,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}\n\n\tappendFlags(flags: SemanticPoint[], stems: Stem[]): void {\n\t\t//console.log(\"flags:\", flags);\n\t\tconst stemGroups = stems\n\t\t\t.map((stem) => ({\n\t\t\t\t...stem,\n\t\t\t\tflags: flags.filter((flag) => Math.abs(flag.x - stem.x) < 0.3 && flag.y > stem.y1 - 0.5 && flag.y < stem.y2 + 0.5),\n\t\t\t}))\n\t\t\t.filter((group) => group.flags.length);\n\n\t\tstemGroups.forEach((group) => {\n\t\t\tconst mainFlag = group.flags.reduce((main, flag) => (main && main.confidence > flag.confidence ? main : flag), null);\n\n\t\t\t//const upDistance = mainFlag.y - group.y1;\n\t\t\t//const downDistance = group.y2 - mainFlag.y;\n\t\t\t//const downward = downDistance < upDistance;\n\t\t\tconst downward = group.direction === 'd';\n\n\t\t\tconst tailY = downward ? Math.min(group.y2, group.y1 + STEM_LENGTH_MAX) : Math.max(group.y1, group.y2 - STEM_LENGTH_MAX);\n\n\t\t\tconst flagTips = group.flags.map((flag) => ({\n\t\t\t\ttip: (tailY - flag.y) * (downward ? 1 : -1),\n\t\t\t\tconfidence: flag.confidence,\n\t\t\t}));\n\t\t\tconst count = flagTips.filter((f) => f.tip < 2 || f.confidence > mainFlag.confidence * 0.7).length;\n\n\t\t\tconst type = TokenFlags[count - 1];\n\t\t\tif (type) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: group.flags[0].id,\n\t\t\t\t\t\tx: group.x,\n\t\t\t\t\t\ty: tailY,\n\t\t\t\t\t\tconfidence: Math.min(...group.flags.map((flag) => flag.confidence)),\n\t\t\t\t\t},\n\t\t\t\t\t{ type }\n\t\t\t\t);\n\t\t\t\t//console.log(\"flag:\", type);\n\t\t\t}\n\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\t\tthis.semantics = [];\n\t}\n\n\tclearPredictedTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = measure.tokens.filter((token) => !token.isPredicted)));\n\t}\n}\n\nclass System extends SimpleClass {\n\tstatic className = 'System';\n\tstatic blackKeys = ['index', 'pageIndex', 'prev', 'next', 'headMeasureIndex', 'tokens', 'indent'];\n\n\tindex?: number;\n\tpageIndex?: number;\n\tprev?: System;\n\tnext?: System;\n\theadMeasureIndex?: number; // zero based\n\n\t// in units\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\tindent: boolean;\n\n\tmeasureCount: number;\n\tstaves: Staff[];\n\n\tmeasureBars: number[];\n\n\tbackgroundImage: string;\n\timagePosition: Rect;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tsidBlackList: string[];\n\tsidWhiteList: string[];\n\n\tdisplacementSemantics?: { [id: string]: Partial };\n\n\tstaffMaskChanged: number;\n\tbracketsAppearance: string; // the staff layout code by prediction\n\n\tconstructor({ stavesCount, ...fields }: any) {\n\t\tsuper();\n\t\tsuper.assign(fields);\n\n\t\tif (!this.measureBars) {\n\t\t\tconst HEAD_WIDTH = 5;\n\t\t\tconst segmentLength = (this.width - HEAD_WIDTH) / this.measureCount;\n\t\t\tthis.measureBars = Array(this.measureCount)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => HEAD_WIDTH + segmentLength * (i + 1));\n\t\t}\n\n\t\tif (!fields.staves && stavesCount)\n\t\t\tthis.staves = Array(stavesCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Staff({ measureBars: this.measureBars }));\n\n\t\tthis.arrangePosition();\n\n\t\tthis.measureCount = this.measureCount || this.measureBars.length;\n\n\t\tthis.sidBlackList = this.sidBlackList || [];\n\t\tthis.sidWhiteList = this.sidWhiteList || [];\n\t}\n\n\tget noteRange(): { top: number; bottom: number } {\n\t\tif (!this.staves.length) return null;\n\n\t\tconst staffTop = this.staves[0];\n\t\tconst staffBottom = this.staves[this.staves.length - 1];\n\n\t\treturn {\n\t\t\ttop: staffTop.top + staffTop.staffY + staffTop.noteRange.top,\n\t\t\tbottom: staffBottom.top + staffBottom.staffY + staffBottom.noteRange.bottom,\n\t\t};\n\t}\n\n\tget staffPositions(): StaffPosition[] {\n\t\treturn this.staves.map((staff) => ({\n\t\t\ty: staff.top + staff.staffY,\n\t\t\tradius: 2,\n\t\t}));\n\t}\n\n\tget staffMask(): number {\n\t\tif (this.staffMaskChanged) return this.staffMaskChanged;\n\n\t\tif (this.prev && this.staves.length === this.prev.staves.length) return this.prev.staffMask;\n\n\t\treturn 2 ** this.staves.length - 1;\n\t}\n\n\tget staffTop(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[0].y - positions[0].radius : 0;\n\t}\n\n\tget staffBottom(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[positions.length - 1].y + positions[positions.length - 1].radius : 0;\n\t}\n\n\tarrangePosition(): void {\n\t\tlet y = 0;\n\t\tfor (const staff of this.staves) {\n\t\t\tif (Number.isFinite(staff.top)) break;\n\n\t\t\tstaff.top = y;\n\t\t\ty += staff.height;\n\t\t}\n\t}\n\n\ttidyMeasureBars(): void {\n\t\tthis.measureBars = this.measureBars.filter((x) => x > 1);\n\t\tthis.measureBars.sort((b1, b2) => b1 - b2);\n\n\t\tconst restWidth = this.width - this.measureBars[this.measureBars.length - 1];\n\t\tif (restWidth > 12) this.measureBars.push(this.width);\n\t\telse if (restWidth < 2) this.measureBars[this.measureBars.length - 1] = this.width;\n\n\t\tthis.measureBars = this.measureBars.filter((x, i) => i < 1 || x - this.measureBars[i - 1] > 4);\n\t}\n\n\trearrangeMeasures(): void {\n\t\tthis.measureCount = this.measureBars.length;\n\t\tthis.staves.forEach((staff) => staff.rearrangeMeasures(this.measureBars));\n\t}\n\n\tget height(): number {\n\t\treturn this.staves.reduce((height, staff) => height + staff.height, 0);\n\t}\n\n\tget connectionLine(): { top: number; bottom: number } {\n\t\tconst staffHead = this.staves[0];\n\t\tconst staffTail = this.staves[this.staves.length - 1];\n\n\t\treturn (\n\t\t\tstaffHead && {\n\t\t\t\ttop: staffHead.top + staffHead.staffY - 2,\n\t\t\t\tbottom: staffTail.top + staffTail.staffY + 2,\n\t\t\t}\n\t\t);\n\t}\n\n\tget middleY(): number {\n\t\tif (!this.staves.length) return 0;\n\n\t\tconst sum = this.staves.reduce((sum, staff) => sum + staff.top + staff.staffY, 0);\n\n\t\treturn sum / this.staves.length;\n\t}\n\n\tget timeSignatureOnHead(): boolean {\n\t\treturn this.staves.some((staff) => staff.measures[0]?.tokens.some((token) => TokenTimesigs.includes(token.type)));\n\t}\n\n\t// an array staff or null on every position of full staff layout\n\tgetStaffArray(stavesCount: number): Staff[] {\n\t\tlet si = 0;\n\n\t\treturn Array(stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, i) => {\n\t\t\t\tconst on = this.staffMask & (1 << i);\n\t\t\t\tconst staff = on ? this.staves[si++] : null;\n\t\t\t\tconsole.assert(!on || staff, 'system staves count is less than staff mask declared:', this.staves.length, this.staffMask.toString(2));\n\n\t\t\t\treturn staff;\n\t\t\t});\n\t}\n\n\t// measureIndex: the local measure index\n\tgetMarksInMeasure(measureIndex: number): MarkTerm[] {\n\t\tconsole.assert(measureIndex < this.measureBars.length, 'measure index out of range:', measureIndex, this.measureBars.length);\n\n\t\tconst left = measureIndex > 0 ? this.measureBars[measureIndex - 1] : 0;\n\t\tconst right = this.measureBars[measureIndex];\n\n\t\tconst tempoTokens = (this.tokens ?? []).filter(\n\t\t\t(token) => token.x >= left && token.x < right && token instanceof TextToken && token.textType === TextType.TempoNumeral\n\t\t) as TextToken[];\n\n\t\treturn [...tempoTokens.map((token) => TempoTerm.fromNumeralText(token.text)).filter(Boolean)];\n\t}\n\n\tgetEvents(stavesCount: number): EventSystem {\n\t\tconsole.assert(Number.isInteger(this.headMeasureIndex), 'invalid headMeasureIndex:', this.headMeasureIndex);\n\n\t\t// Empty system (no measureBars / no staves with measures): return empty result\n\t\tif (!this.measureBars?.length && this.staves.every((s) => !s.measures?.length)) {\n\t\t\treturn { staffMask: this.staffMask, columns: [] };\n\t\t}\n\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => {\n\t\t\t\tconst events = measure.getEvents();\n\t\t\t\tmeasure.assignAccessoriesOnEvents(events);\n\t\t\t\tmeasure.assignFeaturesOnEvents(events, staff.semantics);\n\n\t\t\t\treturn {\n\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t\tcontexts: measure.getContexts({ staff: staff.index }),\n\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts?.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (row[mi] && !row[mi].contexts.length && !row[mi].events.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//onst measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: this.getMarksInMeasure(i),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i]?.voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i]?.voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row[i]?.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i]?.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\t\t//columns.forEach(computeMeasureTicks);\n\n\t\t// assign id on column events\n\t\tcolumns.forEach((column) => {\n\t\t\tconst events = [].concat(...column.rows.filter(Boolean).map((row) => row.events));\n\t\t\tevents.forEach((event, i) => (event.id = i + 1));\n\t\t});\n\n\t\tconst lastColumn = columns[columns.length - 1];\n\t\tif (lastColumn) lastColumn.break = true;\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tgetEventsFunctional(stavesCount: number, ev: ChordsFeeder, processors: ColumnProcessor[] = [], { useXMap = false } = {}): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff, si) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure, mi) => {\n\t\t\t\tconst events = ev(si, mi);\n\n\t\t\t\treturn (\n\t\t\t\t\tevents && {\n\t\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcontexts: measure.getContexts({ staff: si }),\n\t\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\t// [measure, staff]\n\t\tconst columns: EventMeasureColumn[] = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => {\n\t\t\t\tconst localRows = rows.map((row) => row[mi]);\n\t\t\t\tif (localRows.some((row) => !row)) return null;\n\n\t\t\t\tlet xMap: Map = null;\n\t\t\t\tif (useXMap) {\n\t\t\t\t\tconst events: EventTerm[] = [].concat(...localRows.map((row) => row.events));\n\t\t\t\t\tconst groupMap: { [group: number]: EventTerm[] } = events.reduce((map, event) => {\n\t\t\t\t\t\tif (Number.isFinite(event.tickGroup)) map[event.tickGroup] = map[event.tickGroup] || [];\n\t\t\t\t\t\tmap[event.tickGroup].push(event);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, {});\n\n\t\t\t\t\txMap = Object.values(groupMap).reduce((map, events) => {\n\t\t\t\t\t\tconst x = Math.min(...events.map((event) => (event.left + event.right) / 2));\n\t\t\t\t\t\tmap.set(x, events);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, new Map());\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + mi,\n\t\t\t\t\t//startX: measureStartXs[mi],\n\t\t\t\t\t//width: measureWidths[mi],\n\t\t\t\t\trows: localRows, // [staff]\n\t\t\t\t\tmarks: this.getMarksInMeasure(mi),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\txMap,\n\t\t\t\t\tvoltaBegin: localRows.some((row) => row.voltaBegin),\n\t\t\t\t\tvoltaEnd: localRows.some((row) => row.voltaEnd),\n\t\t\t\t\talternative: localRows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: localRows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\tprocessors.forEach((proc) => columns.forEach(proc));\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\t// get EventSystem contains only contexted terms\n\tgetContexts(stavesCount: number): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: null,\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => ({\n\t\t\t\tevents: null,\n\t\t\t\tcontexts: measure.getContexts(),\n\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t}));\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (!row[mi].contexts.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: [],\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i].voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i].voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i].barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tassignSemantics(staffIndex: number, graph: SemanticGraph): void {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff is null:', staffIndex, this.staves);\n\t\tconst oy = staff.top + staff.staffY;\n\n\t\tgraph.getSystemPoints().forEach((point) => {\n\t\t\tconst p = { ...point };\n\t\t\tp.y += oy;\n\n\t\t\tif (p.extension) {\n\t\t\t\tp.extension = { ...p.extension };\n\t\t\t\tif (Number.isFinite(p.extension.y1)) {\n\t\t\t\t\tp.extension.y1 += oy;\n\t\t\t\t\tp.extension.y2 += oy;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.semantics.push(p);\n\t\t});\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, logger: Logger = new DummyLogger()): void {\n\t\t//console.log(\"System.assignSemantics:\", graph);\n\t\tthis.measureBars = [];\n\n\t\tif (!this.semantics) return;\n\n\t\tconst graph = SemanticGraph.fromPoints(this.semantics);\n\n\t\tconst bars = graph.getConfidentLayer(SemanticType.vline_BarMeasure, threshold);\n\t\tbars.sort((b1, b2) => b1.x - b2.x);\n\n\t\tconst staffTop = this.staffTop;\n\t\tconst staffBottom = this.staffBottom;\n\n\t\tconst MERGE_WINDOW = 0.4;\n\t\tlet lastX = 0;\n\t\tconst barColumns: { [key: number]: number } = bars.reduce((columns, bar) => {\n\t\t\tconst confidence = Number.isFinite(bar.confidence) ? Math.tanh(bar.confidence) : 1;\n\n\t\t\tconst x = bar.x - lastX > MERGE_WINDOW ? bar.x : lastX;\n\t\t\tlastX = bar.x;\n\t\t\tlet intensity = columns[x] || 0;\n\t\t\tintensity += (Math.min(bar.extension.y2, staffBottom) - Math.max(bar.extension.y1, staffTop)) * confidence;\n\n\t\t\tif (bar.x !== x) delete columns[x];\n\t\t\tcolumns[bar.x] = intensity;\n\n\t\t\treturn columns;\n\t\t}, {});\n\t\tconst barXs: number[] = Object.entries(barColumns)\n\t\t\t.filter(([x, intensity]) => (void x, intensity > 3 * this.staves.length))\n\t\t\t.map(([x]) => Number(x));\n\t\t// Include bar positions from whitelisted semantic points\n\t\tif (this.sidWhiteList.length) {\n\t\t\tfor (const bar of bars) {\n\t\t\t\tif (this.sidWhiteList.includes((bar as SemanticPoint).id) && !barXs.some((x) => Math.abs(x - bar.x) <= 2)) {\n\t\t\t\t\tbarXs.push(bar.x);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbarXs.sort((x1, x2) => x1 - x2);\n\t\tbarXs.forEach((x, i) => {\n\t\t\tif (i <= 0 || x - barXs[i - 1] > 2) this.measureBars.push(x);\n\t\t});\n\n\t\tif (!this.measureBars.length) this.measureBars.push(this.width);\n\n\t\tthis.tidyMeasureBars();\n\t\tthis.rearrangeMeasures();\n\n\t\t// measure bar type\n\t\tconst typeBars = this.semantics.filter((point) => [SemanticType.vline_BarTerminal, SemanticType.vline_BarSegment].includes(point.semantic));\n\t\ttypeBars.forEach((bar) => {\n\t\t\tconst measure = this.staves[0].measures.find((measure) => bar.x > measure.right - 2 && bar.x < measure.right + 1);\n\t\t\tif (measure) {\n\t\t\t\tconst type = bar.semantic.replace(/^vline_Bar/, '');\n\t\t\t\tmeasure.barTypes[type] = measure.barTypes[type] || 0;\n\t\t\t\tmeasure.barTypes[type] += bar.confidence;\n\t\t\t}\n\t\t});\n\n\t\tlet staffIndex = 0;\n\t\tconst staffMask = this.staffMask;\n\t\tthis.staves.forEach((staff, si) => {\n\t\t\t// staff index\n\t\t\twhile (!(staffMask & (1 << staffIndex))) ++staffIndex;\n\t\t\tstaff.index = staffIndex++;\n\n\t\t\t// assign semantic boundaries\n\t\t\tif (si === 0) staff.semanticTop = -staff.staffY;\n\t\t\telse {\n\t\t\t\tconst prevStaff = this.staves[si - 1];\n\t\t\t\tstaff.semanticTop = prevStaff.top + prevStaff.staffY + 3 - (staff.top + staff.staffY);\n\t\t\t}\n\n\t\t\tif (si < this.staves.length - 1) {\n\t\t\t\tconst nextStaff = this.staves[si + 1];\n\t\t\t\tstaff.semanticBottom = nextStaff.top + nextStaff.staffY - 3 - (staff.top + staff.staffY);\n\t\t\t} else staff.semanticBottom = this.height - (staff.top + staff.staffY);\n\n\t\t\tif (staff.semantics && staff.semantics.length) {\n\t\t\t\tstaff.semantics.forEach((point) => hashSemanticPoint(this.index, si, point));\n\n\t\t\t\tstaff.clearPredictedTokens();\n\t\t\t\tstaff.assemble(threshold, this, logger);\n\t\t\t}\n\t\t});\n\t}\n\n\tqualifiedSemantics(semantics: SemanticPoint[], threshold: number = 1): SemanticPoint[] {\n\t\treturn semantics\n\t\t\t.filter(\n\t\t\t\t(p) => this.sidWhiteList.includes(p.id) || (!this.sidBlackList.includes(p.id) && (p.confidence >= threshold || !Number.isFinite(p.confidence)))\n\t\t\t)\n\t\t\t.map((point) => {\n\t\t\t\t// displace semantic point\n\t\t\t\tif (this.displacementSemantics && this.displacementSemantics[point.id]) return { ...point, ...this.displacementSemantics[point.id] };\n\n\t\t\t\treturn point;\n\t\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.staves.forEach((staff) => staff.clearTokens());\n\t\tthis.semantics = [];\n\t}\n\n\tnewPoint(staffIndex: number, data: SemanticPoint, threshold: number = 1): SemanticPoint {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff index out of bound:', staffIndex, this.staves.length);\n\n\t\tconst { semantic, x, y, confidence = 0, extension = null } = data;\n\t\tconst point = { semantic, x, y, confidence, extension };\n\t\tif (!point.extension) delete point.extension;\n\n\t\thashSemanticPoint(this.index, staffIndex, point);\n\t\tstaff.semantics.push(point);\n\t\tstaff.clearPredictedTokens();\n\t\tstaff.assemble(threshold, this);\n\n\t\treturn point;\n\t}\n\n\tappendToken(token: TextToken): void {\n\t\tthis.tokens.push(token);\n\n\t\tswitch (token.textType) {\n\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t{\n\t\t\t\t\t// remove noteheads in text area\n\t\t\t\t\tconst staff = this.staves[0];\n\t\t\t\t\tif (staff) {\n\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\t\t\t\t\t\tstaff.measures.forEach((measure) => {\n\t\t\t\t\t\t\tmeasure.tokens = measure.tokens.filter(\n\t\t\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t\t\t!TokenNoteheads.includes(t.type) ||\n\t\t\t\t\t\t\t\t\tMath.abs(t.x - token.x) > token.width / 2 ||\n\t\t\t\t\t\t\t\t\tMath.abs(oy + t.y - token.y) > token.fontSize / 2\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase TextType.Alternation1:\n\t\t\tcase TextType.Alternation2:\n\t\t\t\t//console.log(\"appendToken:\", token, this.staves[0].measures);\n\t\t\t\tthis.staves[0].measures.forEach((measure) => {\n\t\t\t\t\tconst overlap = Math.min(measure.left + measure.width, token.x + token.width / 2) - Math.max(measure.left, token.x - token.width / 2);\n\t\t\t\t\tmeasure.alternative = measure.alternative || overlap / measure.width > 0.5;\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nclass Page extends SimpleClass {\n\tstatic className = 'Page';\n\tstatic blackKeys = ['index', 'tokens'];\n\n\tindex?: number;\n\n\t// in units\n\twidth: number;\n\theight: number;\n\n\tsystems: System[];\n\n\tsource: SourceImageFile;\n\tlayout?: PageLayout;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.systems = this.systems || [];\n\n\t\tif (this.source) {\n\t\t\tthis.source.matrix = this.source.matrix || [1, 0, 0, 1, 0, 0];\n\t\t}\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tclearTokens(): void {\n\t\tthis.semantics = null;\n\t\tthis.tokens = null;\n\n\t\tthis.systems.forEach((system) => (system.tokens = null));\n\t}\n\n\tassignTexts(areas: TextArea[], [imageHeight, imageWidth]: [number, number]): void {\n\t\tconst interval = this.source && this.source.interval ? this.source.interval * (imageHeight / this.source.dimensions.height) : imageHeight / this.height;\n\n\t\tthis.semantics = areas.map((area) => {\n\t\t\tconst p = {\n\t\t\t\tx: (area.cx - imageWidth / 2) / interval,\n\t\t\t\ty: (area.cy - imageHeight / 2) / interval,\n\t\t\t};\n\t\t\tconst rp = this.source && this.source.matrix ? trans23(p, this.source.matrix) : p;\n\n\t\t\treturn {\n\t\t\t\tconfidence: area.score,\n\t\t\t\tx: rp.x + this.width / 2,\n\t\t\t\ty: rp.y + this.height / 2,\n\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\textension: {\n\t\t\t\t\ttext: area.text,\n\t\t\t\t\ttype: area.type,\n\t\t\t\t\twidth: area.width / interval,\n\t\t\t\t\theight: area.height / interval,\n\t\t\t\t\ttheta: area.theta,\n\t\t\t\t\ttextFeature: area.feature_dict,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tassemble({ textAnnotations = null }: { textAnnotations?: { [id: string]: string } } = {}, logger: Logger = new DummyLogger()): void {\n\t\tthis.tokens = [];\n\t\tthis.systems.forEach((system) => (system.tokens = []));\n\n\t\t// compute system indent\n\t\tif (this.systems.length) {\n\t\t\tconst sysXs = this.systems.map((system) => system.left);\n\t\t\tconst middleX = sysXs[Math.floor((sysXs.length - 1) / 2)];\n\t\t\tthis.systems.forEach((system) => (system.indent = system.left > middleX + INDENT_THRESHOLD));\n\t\t}\n\n\t\tif (this.semantics) {\n\t\t\tconst pageName = this.source ? this.source.name : this.index.toString();\n\n\t\t\tthis.semantics.forEach((point) => {\n\t\t\t\thashPageSemanticPoint(pageName, point);\n\n\t\t\t\tconst fields = {\n\t\t\t\t\tid: point.id,\n\t\t\t\t\ttype: TokenType.Text,\n\t\t\t\t\tconfidence: point.confidence,\n\t\t\t\t\ttextType: TEXT_TYPE_ALIAS[point.extension.type] || point.extension.type,\n\t\t\t\t\ttext: (textAnnotations && textAnnotations[point.id]) || point.extension.text,\n\t\t\t\t\ttextFeasure: point.extension.textFeature,\n\t\t\t\t\twidth: point.extension.width,\n\t\t\t\t\tfontSize: point.extension.height,\n\t\t\t\t};\n\n\t\t\t\tswitch (point.semantic) {\n\t\t\t\t\tcase SemanticType.rect_Text:\n\t\t\t\t\t\tswitch (fields.textType) {\n\t\t\t\t\t\t\t// page tokens\n\t\t\t\t\t\t\tcase TextType.Title:\n\t\t\t\t\t\t\tcase TextType.Author:\n\t\t\t\t\t\t\tcase TextType.PageMargin:\n\t\t\t\t\t\t\tcase TextType.Other:\n\t\t\t\t\t\t\t\tthis.tokens.push(\n\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\tx: point.x,\n\t\t\t\t\t\t\t\t\t\ty: point.y,\n\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens on the top of system\n\t\t\t\t\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t\t\t\tcase TextType.Chord:\n\t\t\t\t\t\t\tcase TextType.MeasureNumber:\n\t\t\t\t\t\t\tcase TextType.Instrument:\n\t\t\t\t\t\t\tcase TextType.Alternation1:\n\t\t\t\t\t\t\tcase TextType.Alternation2:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = this.systems.find((system) => system.top + system.staffTop > point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tsystem.appendToken(\n\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\tx: point.x - system.left,\n\t\t\t\t\t\t\t\t\t\t\t\ty: point.y - system.top,\n\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens in staff\n\t\t\t\t\t\t\tcase TextType.TextualMark:\n\t\t\t\t\t\t\tcase TextType.Times:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = [...this.systems].reverse().find((system) => system.top < point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tconst sy = point.y - (system.top + system.staffTop);\n\t\t\t\t\t\t\t\t\t\tconst sx = point.x - system.left;\n\t\t\t\t\t\t\t\t\t\tconst staff = system.staves.find((staff) => sy >= staff.top && sy < staff.top + staff.height);\n\t\t\t\t\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\t\t\t\t\tconst measure = staff.measures.find((measure) => sx >= measure.left && sx < measure.left + measure.width);\n\t\t\t\t\t\t\t\t\t\t\tif (measure) {\n\t\t\t\t\t\t\t\t\t\t\t\tmeasure.tokens.push(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx: sx,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty: sy,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport { Measure, Staff, System, Page };\n","import { ChordColumn, Fraction } from './interfaces';\nimport { GraceType } from './term';\nimport { roundNumber } from './utils';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum SemanticElementType {\n\tBOS,\n\tPAD,\n\n\tNoteheadS0,\n\tNoteheadS1,\n\tNoteheadS2,\n\tNoteheadGrace,\n\tvline_Stem,\n\tFlag3,\n\tBeamLeft,\n\tBeamContinue,\n\tBeamRight,\n\tDot,\n\tRest0,\n\tRest1,\n\tRest2,\n\tRest3,\n\tRest4,\n\tRest5,\n\tRest6,\n\n\t// measure time signature denominators & numerators\n\tTimeD2,\n\tTimeD4,\n\tTimeD8,\n\tTimeN1,\n\tTimeN2,\n\tTimeN3,\n\tTimeN4,\n\tTimeN5,\n\tTimeN6,\n\tTimeN7,\n\tTimeN8,\n\tTimeN9,\n\tTimeN10,\n\tTimeN11,\n\tTimeN12,\n}\n\nconst TIME_SIG_DENOMINATORS = Object.fromEntries([2, 4, 8].map((n) => [n, SemanticElementType[`TimeD${n}`]]));\nconst TIME_SIG_NUMERATORS = Object.fromEntries(\n\tArray(12)\n\t\t.fill(null)\n\t\t.map((_, i) => i + 1)\n\t\t.map((n) => [n, SemanticElementType[`TimeN${n}`]])\n);\n\nconst et = SemanticElementType;\n\nconst ELEMENT_TOKEN_NAMES = {\n\t[et.BOS]: 'BOS',\n\t[et.NoteheadS0]: 'noteheads-s0',\n\t[et.NoteheadS1]: 'noteheads-s1',\n\t[et.NoteheadS2]: 'noteheads-s2',\n\t[et.NoteheadGrace]: 'GraceNotehead',\n\t[et.Flag3]: 'flags-u3',\n\t[et.BeamLeft]: 'BeamLeft',\n\t[et.BeamContinue]: 'BeamContinue',\n\t[et.BeamRight]: 'BeamRight',\n\t[et.Dot]: 'dot',\n\t[et.Rest0]: 'rests-0o',\n\t[et.Rest1]: 'rests-1o',\n\t[et.Rest2]: 'rests-2',\n\t[et.Rest3]: 'rests-3',\n\t[et.Rest4]: 'rests-4',\n\t[et.Rest5]: 'rests-5',\n\t[et.Rest6]: 'rests-6',\n};\n\nconst NOTEHEAD_BASE_DIVISION = {\n\t[et.NoteheadS0]: 0,\n\t[et.NoteheadS1]: 1,\n\t[et.NoteheadS2]: 2,\n\t[et.NoteheadGrace]: 2,\n};\n\nconst NOTEHEAD_ELEMENT_TYPES = [et.NoteheadS0, et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace];\n\nconst REST_ELEMENT_TYPES = [et.Rest0, et.Rest1, et.Rest2, et.Rest3, et.Rest4, et.Rest5, et.Rest6];\n\nconst BEAM_ELEMENT_TYPES = [et.BeamLeft, et.BeamContinue, et.BeamRight];\n\nconst NOTE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES];\n\nconst SOURCE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES, et.vline_Stem];\n\nconst TARGET_ELEMENT_TYPES = [et.BOS, et.NoteheadS0, et.vline_Stem, ...REST_ELEMENT_TYPES];\n\nconst ROOT_NOTE_ELEMENT_TYPES = [...NOTE_ELEMENT_TYPES, et.vline_Stem];\n\nconst ELEMENT_TO_STEMBEAM = {\n\t[et.BeamLeft]: 'Open',\n\t[et.BeamRight]: 'Close',\n};\n\ninterface SemanticElement {\n\ttype: SemanticElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\n\tindex?: number;\n\ttick?: number;\n\tid?: string;\n}\n\ntype Matrix = number[][];\n\nconst metaElem = (type: SemanticElementType): SemanticElement => ({\n\ttype,\n\tstaff: -1,\n\tx: 0,\n\ty1: 0,\n\ty2: 0,\n});\n\nconst BOS_ELEMENT = metaElem(SemanticElementType.BOS);\n\nconst fractionToElems = (fraction: Fraction): SemanticElement[] => [\n\tmetaElem(TIME_SIG_NUMERATORS[fraction.numerator]),\n\tmetaElem(TIME_SIG_DENOMINATORS[fraction.denominator]),\n];\n\nconst argmax = (data: number[], mask: boolean[]): number => {\n\tconst values = data.filter((_, i) => mask[i]);\n\tconst max = Math.max(...values);\n\n\treturn data.findIndex((x) => x === max);\n};\n\nclass SemanticCluster extends SimpleClass {\n\tindex?: number;\n\n\telements: SemanticElement[];\n\tmatrixH?: Matrix; // matrix N x N\n\t_matrixV?: Matrix; // matrix N x N\n\tgroupsV?: number[][]; // ids array\n\tmasks?: [boolean[], boolean[], boolean[]]; // the masks for: [jointer source, jointer target, V]\n\n\tstatic elementToJSON(elem: SemanticElement): object {\n\t\tconst result: any = {\n\t\t\ttype: elem.type,\n\t\t\tstaff: elem.staff,\n\t\t\tx: elem.x,\n\t\t\ty1: elem.y1,\n\t\t\ty2: elem.y2,\n\t\t};\n\n\t\tif (elem.id) result.id = elem.id;\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget sourceMask(): boolean[] {\n\t\treturn this.elements.map((elem) => SOURCE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget targetMask(): boolean[] {\n\t\treturn this.elements.map((elem) => TARGET_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget vMask(): boolean[] {\n\t\treturn this.elements.map((elem) => ROOT_NOTE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget compactMatrixH(): Matrix {\n\t\tif (!this.matrixH) return null;\n\n\t\tconst sourceMask = this.sourceMask;\n\t\tconst targetMask = this.targetMask;\n\n\t\treturn this.matrixH.filter((_, i) => sourceMask[i]).map((row) => row.filter((_, j) => targetMask[j]));\n\t}\n\n\tset compactMatrixH(value: Matrix) {\n\t\tthis.matrixH = expandMatrixByMasks([].concat(...value), [this.sourceMask, this.targetMask]);\n\t}\n\n\tget compactMatrixV(): number[] {\n\t\tif (!this._matrixV) return null;\n\n\t\tconst vMask = this.vMask;\n\n\t\tconst matrix = this._matrixV.filter((_, i) => vMask[i]).map((row) => row.filter((_, j) => vMask[j]));\n\n\t\treturn [].concat(...matrix.map((row, i) => row.slice(0, i)));\n\t}\n\n\tset compactMatrixV(value: number[]) {\n\t\tthis.matrixV = value && expandMatrixByMaskTriu(value, this.vMask);\n\t}\n\n\tget matrixV(): Matrix {\n\t\treturn this.groupsV && matrixFromGroups(this.elements.length, this.groupsV);\n\t}\n\n\tset matrixV(value: Matrix) {\n\t\tif (!value) {\n\t\t\tthis.groupsV = null;\n\t\t\tthis._matrixV = value;\n\t\t\treturn;\n\t\t}\n\n\t\tconst THRESHOLD = 0.5;\n\n\t\tconst groups: number[][] = [];\n\t\tconst vMask = value.map((row, i) => row.some(Number.isFinite) || value.some((row) => Number.isFinite(row[i])));\n\n\t\tvalue.forEach((row, i) => {\n\t\t\tif (vMask[i]) {\n\t\t\t\tlet found = false;\n\n\t\t\t\tfor (let j = 0; j < i; ++j) {\n\t\t\t\t\tconst cell = row[j];\n\t\t\t\t\tif (cell >= THRESHOLD) {\n\t\t\t\t\t\tconst g = groups.findIndex((group) => group.includes(j));\n\t\t\t\t\t\tgroups[g].push(i);\n\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!found) groups.push([i]);\n\t\t\t}\n\t\t});\n\n\t\tthis.groupsV = groups;\n\t\tthis._matrixV = value;\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\t__prototype: 'SemanticCluster',\n\t\t\tindex: this.index,\n\t\t\telements: this.elements.map(SemanticCluster.elementToJSON),\n\t\t\tcompactMatrixH: this.compactMatrixH,\n\t\t\tcompactMatrixV: this.compactMatrixV,\n\t\t\t//groupsV: this.groupsV,\n\t\t};\n\t}\n\n\tstatic mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][] {\n\t\tconst rows = x2i.reduce((rows, i, x) => {\n\t\t\tif (rows[i]) rows[i] = rows[i].map((v, xi) => (v + matrix[x][xi] ? 1 : 0));\n\t\t\telse rows[i] = matrix[x];\n\n\t\t\treturn rows;\n\t\t}, [] as number[][]);\n\n\t\treturn rows.map((row) => i2x.map((x) => row[x]));\n\t}\n\n\tmergeOverlapping() {\n\t\tconst overlaps = this.overlappedNoteheads();\n\t\tif (overlaps.length) {\n\t\t\tconst x2i = this.elements.map((_, index) => {\n\t\t\t\tconst pair = overlaps.find((ij) => index === ij[1]);\n\t\t\t\tconst i = pair ? pair[0] : index;\n\n\t\t\t\treturn i - overlaps.filter((ij) => ij[1] < i).length;\n\t\t\t});\n\t\t\tconst i2x = Array(this.elements.length - overlaps.length)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, i) => x2i.findIndex((ii) => ii === i));\n\n\t\t\tthis.elements = i2x.map((x) => this.elements[x]);\n\t\t\tconsole.assert(this.elements.every(Boolean), 'null element found:', this, x2i, i2x);\n\n\t\t\tthis.matrixH = SemanticCluster.mapMatrix(this.matrixH, x2i, i2x);\n\t\t\tthis.groupsV = this.groupsV.map((group) => Array.from(new Set(group.map((x) => x2i[x]))));\n\t\t}\n\t}\n\n\toverlappedNoteheads(): [number, number][] {\n\t\tconst indices = [];\n\n\t\tconst noteheads = this.elements.filter((elem) => NOTEHEAD_ELEMENT_TYPES.includes(elem.type));\n\t\tfor (let i = 0; i < noteheads.length; ++i) {\n\t\t\tconst nh1 = noteheads[i];\n\t\t\tfor (let j = i + 1; j < noteheads.length; ++j) {\n\t\t\t\tconst nh2 = noteheads[j];\n\t\t\t\tif ((nh1.x - nh2.x) * (nh1.x - nh2.x) + (nh1.y1 - nh2.y1) * (nh1.y1 - nh2.y1) < 0.2 ** 2) indices.push([nh1.index, nh2.index]);\n\t\t\t}\n\t\t}\n\n\t\treturn indices;\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\tconsole.assert(this.matrixH, '[SemanticCluster.getEvents]\tmatrixH is null.');\n\n\t\tconst NOTE_STEM_CONFIDENCE = 0.5;\n\n\t\tconst ids = Array(this.elements.length)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => index);\n\n\t\tconst targetMask = this.masks ? this.masks[1] : ids.map((id) => TARGET_ELEMENT_TYPES.includes(this.elements[id].type));\n\n\t\t//const stems = ids.filter(i => this.elements[i].type === et.vline_Stem);\n\t\tconst stemMasks = ids.map((id) => this.elements[id].type === et.vline_Stem && this.elements[id].y2 - this.elements[id].y1 > 2); // TODO: sift out too short stems by rectification model\n\t\tconst stemNotes = ids.filter((i) => [et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace].includes(this.elements[i].type));\n\t\tconst s0s = ids.filter((i) => this.elements[i].type === et.NoteheadS0);\n\t\tconst subS0Masks = ids.map(() => false);\n\n\t\t// root elements: top NoteheadS0, Rests, stem with noteheads\n\t\tconst stemMap: { [stem: number]: number[] } = {};\n\t\tstemNotes.forEach((id) => {\n\t\t\tconst note = this.elements[id];\n\t\t\tconst stems = ids\n\t\t\t\t.filter((i) => stemMasks[i])\n\t\t\t\t.filter((stemId) => this.elements[stemId].y1 - 0.5 < note.y1 && this.elements[stemId].y2 + 0.5 > note.y1) // filter by stem Y range\n\t\t\t\t.sort((i1, i2) => this.matrixH[id][i2] - this.matrixH[id][i1]) // sort by confidence\n\t\t\t\t.slice(0, 2)\n\t\t\t\t.filter((i, ii) => ii === 0 || this.matrixH[id][i] >= NOTE_STEM_CONFIDENCE);\n\t\t\tstems.forEach((stem) => {\n\t\t\t\tstemMap[stem] = stemMap[stem] || [];\n\t\t\t\tstemMap[stem].push(id);\n\t\t\t});\n\t\t});\n\n\t\ts0s.forEach((id) => {\n\t\t\tconst s0 = this.elements[id];\n\t\t\tconst prevId = argmax(this.matrixH[id], targetMask);\n\t\t\tconst prev = this.elements[prevId];\n\t\t\tif (prev.type === et.NoteheadS0 && Math.abs(s0.x - prev.x) < 2.6) {\n\t\t\t\tsubS0Masks[id] = true;\n\t\t\t\tstemMap[prevId] = stemMap[prevId] || [prevId];\n\t\t\t\tstemMap[prevId].push(id);\n\t\t\t} else stemMap[id] = stemMap[id] || [id];\n\t\t});\n\n\t\t// setup linkings\n\t\tconst linkings: { [key: number]: number } = {};\n\n\t\tconst roots = ids.filter((id) => stemMap[id] || REST_ELEMENT_TYPES.includes(this.elements[id].type));\n\t\troots.sort((i1, i2) => this.elements[i1].x - this.elements[i2].x); // traverse roots from left to right later\n\n\t\tconst parentMasks = ids.map((id) => id === et.BOS);\n\t\troots.forEach((id) => {\n\t\t\tconst parentId = argmax(this.matrixH[id], parentMasks);\n\t\t\tlinkings[id] = parentId;\n\n\t\t\tif (parentId && !REST_ELEMENT_TYPES.includes(this.elements[parentId].type)) parentMasks[parentId] = false;\n\n\t\t\tparentMasks[id] = true;\n\t\t});\n\t\t//console.log(\"topology:\", stemMap, linkings);\n\n\t\tconst dots = this.elements.filter((elem) => elem.type === et.Dot);\n\t\tconst flags = this.elements.filter((elem) => elem.type === et.Flag3);\n\t\tconst beams = this.elements.filter((elem) => BEAM_ELEMENT_TYPES.includes(elem.type));\n\n\t\tconst groupsV = this.groupsV;\n\n\t\treturn roots\n\t\t\t.map((rootId): ChordColumn => {\n\t\t\t\tconst root = this.elements[rootId];\n\n\t\t\t\tconst tickGroup = groupsV ? groupsV.findIndex((group) => group.includes(rootId)) : null;\n\n\t\t\t\tif (REST_ELEMENT_TYPES.includes(root.type)) {\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > root.x + 0.5 && dot.x < root.x + 0.75 + 1.2 && dot.y1 > root.y1 - 1 && dot.y1 < root.y1);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft: root.x - 0.75,\n\t\t\t\t\t\tright: root.x + 0.75,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\trest: true,\n\t\t\t\t\t\tys: [root.y1],\n\t\t\t\t\t\tnoteIds: [root.id],\n\t\t\t\t\t\tdots: nearbyDots.length,\n\t\t\t\t\t\tdivision: root.type - et.Rest0,\n\t\t\t\t\t\tstemDirection: null,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: root.staff,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t} else if (stemMap[rootId]) {\n\t\t\t\t\tconst subNotes = stemMap[rootId].map((id) => this.elements[id]);\n\t\t\t\t\tconst left = Math.min(...subNotes.map((n) => n.x - 0.7));\n\t\t\t\t\tconst right = Math.max(...subNotes.map((n) => n.x + 0.7));\n\t\t\t\t\tsubNotes.sort((n1, n2) => n2.y1 - n1.y1);\n\n\t\t\t\t\tconst ys = subNotes.map((note) => note.y1);\n\n\t\t\t\t\tconst noteIds = subNotes.map((note) => note.id);\n\n\t\t\t\t\tconst top = ys[0];\n\t\t\t\t\tconst bottom = ys[ys.length - 1];\n\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > right && dot.x < right + 1.2 && dot.y1 > top - 1 && dot.y1 < bottom + 0.5);\n\t\t\t\t\tconst dotGroups: { [key: number]: SemanticElement[] } = nearbyDots.reduce((groups, dot) => {\n\t\t\t\t\t\tconst y = roundNumber(dot.y1, 0.5);\n\t\t\t\t\t\tgroups[y] = groups[y] || [];\n\t\t\t\t\t\tgroups[y].push(dot);\n\n\t\t\t\t\t\treturn groups;\n\t\t\t\t\t}, {});\n\t\t\t\t\tconst dotValue = Math.max(...Object.values(dotGroups).map((group) => group.length), 0);\n\n\t\t\t\t\tlet division = NOTEHEAD_BASE_DIVISION[subNotes[0].type];\n\n\t\t\t\t\tlet stemDirection = null;\n\t\t\t\t\tlet beam: string = null;\n\t\t\t\t\tlet tip = null;\n\t\t\t\t\tif (root.type === et.vline_Stem) {\n\t\t\t\t\t\tconst topTip = top - root.y1;\n\t\t\t\t\t\tconst bottomTip = root.y2 - bottom;\n\t\t\t\t\t\tstemDirection = topTip > bottomTip ? 'u' : 'd';\n\n\t\t\t\t\t\ttip = { x: root.x, y: stemDirection === 'u' ? root.y1 : root.y2 };\n\n\t\t\t\t\t\tif (division === 2) {\n\t\t\t\t\t\t\tconst flagRange = stemDirection === 'u' ? [root.y1 - 0.4, root.y2 - 1] : [root.y1 + 1, root.y2 + 0.4];\n\t\t\t\t\t\t\tconst nearbyFlags = flags.filter((flag) => Math.abs(flag.x - root.x) < 0.2 && flag.y1 > flagRange[0] && flag.y1 < flagRange[1]);\n\t\t\t\t\t\t\tdivision += nearbyFlags.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//const tipY = stemDirection === \"u\" ? root.y1 : root.y2;\n\t\t\t\t\t\tconst tipRange = stemDirection === 'u' ? [root.y1 - 0.2, root.y1 + 0.9] : [root.y2 - 0.9, root.y2 + 0.2];\n\t\t\t\t\t\tconst beamElem = beams.find((beam) => Math.abs(beam.x - root.x) < 0.2 && beam.y1 > tipRange[0] && beam.y1 < tipRange[1]);\n\t\t\t\t\t\tbeam = beamElem ? ELEMENT_TO_STEMBEAM[beamElem.type] : null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst grace = subNotes[0].type === SemanticElementType.NoteheadGrace ? GraceType.Grace : null;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tright,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tys,\n\t\t\t\t\t\ttip,\n\t\t\t\t\t\tnoteIds,\n\t\t\t\t\t\tdivision,\n\t\t\t\t\t\tdots: dotValue,\n\t\t\t\t\t\trest: false,\n\t\t\t\t\t\tstemDirection,\n\t\t\t\t\t\tbeam,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: subNotes[0].staff,\n\t\t\t\t\t\tgrace,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n}\n\ninterface SemanticClusterSetData {\n\tvocab?: string[];\n\tclusters: SemanticCluster[];\n}\n\nclass SemanticClusterSet {\n\tclusters: SemanticCluster[];\n\n\tconstructor(data?: SemanticClusterSetData) {\n\t\tif (data) {\n\t\t\tthis.clusters = data.clusters;\n\n\t\t\t// upgrade vocab\n\t\t\tif (data.vocab) {\n\t\t\t\tconst converts = data.vocab\n\t\t\t\t\t.map((name, i) => [i, SemanticElementType[name]])\n\t\t\t\t\t.filter(([x, y]) => x !== y)\n\t\t\t\t\t.reduce((table, [x, y]) => ((table[x] = y), table), {});\n\t\t\t\tthis.clusters.forEach((connection) =>\n\t\t\t\t\tconnection.elements.forEach((elem) => {\n\t\t\t\t\t\tif (Number.isFinite(converts[elem.type])) elem.type = converts[elem.type];\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoJSON() {\n\t\tconst vocab = Object.entries(SemanticElementType)\n\t\t\t.filter((entry) => Number.isFinite(entry[1]))\n\t\t\t.map((entry) => entry[0]);\n\n\t\treturn {\n\t\t\t__prototype: 'SemanticClusterSet',\n\t\t\tvocab,\n\t\t\tclusters: this.clusters.map((c) => c.toJSON()),\n\t\t};\n\t}\n}\n\nconst expandMatrixByMasks = (matrix: number[], masks: [boolean[], boolean[]]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\tconst [maskSrc, maskTar] = masks;\n\n\treturn maskSrc.map((src) => maskTar.map((tar) => (src && tar ? iter.next().value : null)));\n};\n\nconst expandMatrixByMaskTriu = (matrix: number[], mask: boolean[]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\treturn mask.map((row, i) => mask.map((column, j) => (row && column && j < i ? iter.next().value : null)));\n};\n\nconst matrixFromGroups = (len: number, groups: number[][]): Matrix => {\n\tconst groupIds = Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) => groups.findIndex((group) => group.includes(i)));\n\n\treturn Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) =>\n\t\t\tArray(len)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tif (j >= i) return null;\n\n\t\t\t\t\tconst id1 = groupIds[i];\n\t\t\t\t\tconst id2 = groupIds[j];\n\n\t\t\t\t\tif (id1 < 0 || id2 < 0) return null;\n\n\t\t\t\t\treturn id1 === id2 ? 1 : 0;\n\t\t\t\t})\n\t\t);\n};\n\nexport {\n\tSemanticElementType,\n\tSemanticElement,\n\tSemanticCluster,\n\tSemanticClusterSet,\n\tELEMENT_TOKEN_NAMES,\n\tNOTEHEAD_ELEMENT_TYPES,\n\tNOTE_ELEMENT_TYPES,\n\tBOS_ELEMENT,\n\tfractionToElems,\n\texpandMatrixByMasks,\n\texpandMatrixByMaskTriu,\n\tmatrixFromGroups,\n};\n","import { MusicNotation } from '@k-l-lambda/music-widgets';\n\n// implicit note (from expressive marks) types\nenum ImplicitType {\n\tNone = 0,\n\n\tMordent = 'mordent',\n\tPrall = 'prall',\n\tTurn = 'turn',\n\tTrill = 'trill',\n\tTremolo = 'tremolo',\n\tArpeggio = 'arpeggio',\n}\n\ninterface ChordPosition {\n\tindex: number;\n\tcount: number;\n}\n\nclass TokenPosition {\n\tsystem?: number;\n\tmeasure?: number;\n\tx: number;\n\tendX?: number;\n}\n\ninterface Note extends MusicNotation.Note {\n\tchordPosition?: ChordPosition;\n\tmeasure?: number;\n}\n\ninterface Notation {\n\tnotes: Note[];\n\tendTick: number;\n}\n\ninterface SheetPosition {\n\tsystem: number;\n\tx: number;\n}\n\nexport { ChordPosition, ImplicitType, TokenPosition, Note, Notation, SheetPosition };\n","/*\nclass to parse the .mid file format\n(depends on stream.js)\n*/\n\nconst Stream = require(\"./stream.js\");\n\n\n\nmodule.exports = function MidiFile (data) {\n\tfunction readChunk (stream) {\n\t\tconst id = stream.readString(4);\n\t\tconst length = stream.readInt32();\n\n\t\treturn {\n\t\t\tid,\n\t\t\tlength,\n\t\t\tdata: stream.read(length),\n\t\t};\n\t}\n\n\tlet lastEventTypeByte;\n\n\tfunction readEvent (stream) {\n\t\tconst event = {};\n\t\tevent.deltaTime = stream.readVarInt();\n\t\tlet eventTypeByte = stream.readInt8();\n\t\tif ((eventTypeByte & 0xf0) === 0xf0) {\n\t\t\t// system / meta event\n\t\t\tif (eventTypeByte === 0xff) {\n\t\t\t\t// meta event\n\t\t\t\tevent.type = \"meta\";\n\t\t\t\tconst subtypeByte = stream.readInt8();\n\t\t\t\tconst length = stream.readVarInt();\n\n\t\t\t\tswitch (subtypeByte) {\n\t\t\t\tcase 0x00:\n\t\t\t\t\tevent.subtype = \"sequenceNumber\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for sequenceNumber event is 2, got \" + length);\n\t\t\t\t\tevent.number = stream.readInt16();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x01:\n\t\t\t\t\tevent.subtype = \"text\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x02:\n\t\t\t\t\tevent.subtype = \"copyrightNotice\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tevent.subtype = \"trackName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x04:\n\t\t\t\t\tevent.subtype = \"instrumentName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x05:\n\t\t\t\t\tevent.subtype = \"lyrics\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x06:\n\t\t\t\t\tevent.subtype = \"marker\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x07:\n\t\t\t\t\tevent.subtype = \"cuePoint\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x20:\n\t\t\t\t\tevent.subtype = \"midiChannelPrefix\";\n\t\t\t\t\tif (length !== 1)\n\t\t\t\t\t\tthrow new Error(\"Expected length for midiChannelPrefix event is 1, got \" + length);\n\t\t\t\t\tevent.channel = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x2f:\n\t\t\t\t\tevent.subtype = \"endOfTrack\";\n\t\t\t\t\tif (length !== 0)\n\t\t\t\t\t\tthrow new Error(\"Expected length for endOfTrack event is 0, got \" + length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x51:\n\t\t\t\t\tevent.subtype = \"setTempo\";\n\t\t\t\t\tif (length !== 3)\n\t\t\t\t\t\tthrow new Error(\"Expected length for setTempo event is 3, got \" + length);\n\t\t\t\t\tevent.microsecondsPerBeat = (\n\t\t\t\t\t\t(stream.readInt8() << 16) +\n\t\t\t\t\t\t\t(stream.readInt8() << 8) +\n\t\t\t\t\t\t\tstream.readInt8()\n\t\t\t\t\t);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x54:\n\t\t\t\t\tevent.subtype = \"smpteOffset\";\n\t\t\t\t\tif (length !== 5)\n\t\t\t\t\t\tthrow new Error(\"Expected length for smpteOffset event is 5, got \" + length);\n\t\t\t\t\tconst hourByte = stream.readInt8();\n\t\t\t\t\tevent.frameRate = {\n\t\t\t\t\t\t0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30,\n\t\t\t\t\t}[hourByte & 0x60];\n\t\t\t\t\tevent.hour = hourByte & 0x1f;\n\t\t\t\t\tevent.min = stream.readInt8();\n\t\t\t\t\tevent.sec = stream.readInt8();\n\t\t\t\t\tevent.frame = stream.readInt8();\n\t\t\t\t\tevent.subframe = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x58:\n\t\t\t\t\tevent.subtype = \"timeSignature\";\n\t\t\t\t\tif (length !== 4)\n\t\t\t\t\t\tthrow new Error(\"Expected length for timeSignature event is 4, got \" + length);\n\t\t\t\t\tevent.numerator = stream.readInt8();\n\t\t\t\t\tevent.denominator = Math.pow(2, stream.readInt8());\n\t\t\t\t\tevent.metronome = stream.readInt8();\n\t\t\t\t\tevent.thirtyseconds = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x59:\n\t\t\t\t\tevent.subtype = \"keySignature\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for keySignature event is 2, got \" + length);\n\t\t\t\t\tevent.key = stream.readInt8(true);\n\t\t\t\t\tevent.scale = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x7f:\n\t\t\t\t\tevent.subtype = \"sequencerSpecific\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tdefault:\n\t\t\t\t\t// console.log(\"Unrecognised meta event subtype: \" + subtypeByte);\n\t\t\t\t\tevent.subtype = \"unknown\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\n\t\t\t\t//event.data = stream.readString(length);\n\t\t\t\t//return event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf0) {\n\t\t\t\tevent.type = \"sysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf7) {\n\t\t\t\tevent.type = \"dividedSysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type byte: \" + eventTypeByte);\n\t\t}\n\t\telse {\n\t\t\t/* channel event */\n\t\t\tlet param1;\n\t\t\tif ((eventTypeByte & 0x80) === 0) {\n\t\t\t\t/* running status - reuse lastEventTypeByte as the event type.\n\t\t\t\t\teventTypeByte is actually the first parameter\n\t\t\t\t*/\n\t\t\t\tparam1 = eventTypeByte;\n\t\t\t\teventTypeByte = lastEventTypeByte;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparam1 = stream.readInt8();\n\t\t\t\tlastEventTypeByte = eventTypeByte;\n\t\t\t}\n\n\t\t\tconst eventType = eventTypeByte >> 4;\n\t\t\tevent.channel = eventTypeByte & 0x0f;\n\t\t\tevent.type = \"channel\";\n\n\t\t\tswitch (eventType) {\n\t\t\tcase 0x08:\n\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x09:\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\t\t\t\tif (event.velocity === 0)\n\t\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\telse\n\t\t\t\t\tevent.subtype = \"noteOn\";\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0a:\n\t\t\t\tevent.subtype = \"noteAftertouch\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.amount = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0b:\n\t\t\t\tevent.subtype = \"controller\";\n\t\t\t\tevent.controllerType = param1;\n\t\t\t\tevent.value = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0c:\n\t\t\t\tevent.subtype = \"programChange\";\n\t\t\t\tevent.programNumber = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0d:\n\t\t\t\tevent.subtype = \"channelAftertouch\";\n\t\t\t\tevent.amount = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0e:\n\t\t\t\tevent.subtype = \"pitchBend\";\n\t\t\t\tevent.value = param1 + (stream.readInt8() << 7);\n\n\t\t\t\treturn event;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type: \" + eventType);\n\n\t\t\t\t/*\n\t\t\t\tconsole.log(\"Unrecognised MIDI event type: \" + eventType);\n\t\t\t\tstream.readInt8();\n\t\t\t\tevent.subtype = 'unknown';\n\t\t\t\treturn event;\n\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n\n\n\tlet source = data;\n\tif (typeof data === \"string\")\n\t\tsource = data.split(\"\").map(c => c.charCodeAt(0));\n\n\tconst stream = new Stream(source);\n\tconst headerChunk = readChunk(stream);\n\tif (headerChunk.id !== \"MThd\" || headerChunk.length !== 6)\n\t\tthrow new Error(\"Bad .mid file - header not found\");\n\n\tconst headerStream = new Stream(headerChunk.data);\n\tconst formatType = headerStream.readInt16();\n\tconst trackCount = headerStream.readInt16();\n\tconst timeDivision = headerStream.readInt16();\n\n\tlet ticksPerBeat;\n\tif (timeDivision & 0x8000)\n\t\tthrow new Error(\"Expressing time division in SMTPE frames is not supported yet\");\n\telse\n\t\tticksPerBeat = timeDivision;\n\n\n\tconst header = {\n\t\tformatType,\n\t\ttrackCount,\n\t\tticksPerBeat,\n\t};\n\tconst tracks = [];\n\tfor (let i = 0; i < header.trackCount; i++) {\n\t\ttracks[i] = [];\n\t\tconst trackChunk = readChunk(stream);\n\t\tif (trackChunk.id !== \"MTrk\")\n\t\t\tthrow new Error(\"Unexpected chunk - expected MTrk, got \" + trackChunk.id);\n\n\t\tconst trackStream = new Stream(trackChunk.data);\n\t\twhile (!trackStream.eof()) {\n\t\t\tconst event = readEvent(trackStream);\n\t\t\ttracks[i].push(event);\n\t\t}\n\t}\n\n\treturn {\n\t\theader,\n\t\ttracks,\n\t};\n};\n","\n/* Wrapper for accessing buffer through sequential reads */\n\n\n\nmodule.exports = class Stream {\n\tconstructor (buffer) {\n\t\tthis.array = new Uint8Array(buffer);\n\t\tthis.position = 0;\n\t}\n\n\n\teof () {\n\t\treturn this.position >= this.array.length;\n\t}\n\n\n\tread (length) {\n\t\tconst result = this.array.slice(this.position, this.position + length);\n\t\tthis.position += length;\n\n\t\treturn result;\n\t}\n\n\n\treadString (length) {\n\t\tconst data = Array.from(this.read(length));\n\n\t\treturn data.map(c => String.fromCharCode(c)).join(\"\");\n\t}\n\n\n\t// read a big-endian 32-bit integer\n\treadInt32 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 24) +\n\t\t\t(this.array[this.position + 1] << 16) +\n\t\t\t(this.array[this.position + 2] << 8) +\n\t\t\tthis.array[this.position + 3]);\n\t\tthis.position += 4;\n\n\t\treturn result;\n\t}\n\n\n\t// read a big-endian 16-bit integer\n\treadInt16 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 8) +\n\t\t\tthis.array[this.position + 1]);\n\t\tthis.position += 2;\n\n\t\treturn result;\n\t}\n\n\n\t// read an 8-bit integer\n\treadInt8 (signed) {\n\t\tlet result = this.array[this.position];\n\t\tif (signed && result > 127)\n\t\t\tresult -= 256;\n\t\tthis.position += 1;\n\n\t\treturn result;\n\t}\n\n\n\t/* read a MIDI-style variable-length integer\n\t\t(big-endian value in groups of 7 bits,\n\t\twith top bit set to signify that another byte follows)\n\t*/\n\treadVarInt () {\n\t\tlet result = 0;\n\t\twhile (true) {\n\t\t\tconst b = this.readInt8();\n\t\t\tif (b & 0x80) {\n\t\t\t\tresult += (b & 0x7f);\n\t\t\t\tresult <<= 7;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// b is the last byte\n\t\t\t\treturn result + b;\n\t\t\t}\n\t\t}\n\t}\n};\n","/*\r\nclass to encode the .mid file format\r\n(depends on streamEx.js)\r\n*/\r\n\r\nconst OStream = require(\"./streamEx.js\");\r\n\r\n\r\n\r\nmodule.exports = function OMidiFile ({ header, tracks }) {\r\n\tfunction writeChunk (stream, id, data) {\r\n\t\tconsole.assert(id.length === 4, \"chunk id must be 4 byte\");\r\n\r\n\t\tstream.write(id);\r\n\t\tstream.writeInt32(data.length);\r\n\t\tstream.write(data);\r\n\t}\r\n\r\n\tfunction writeEvent (stream, event) {\r\n\t\tif (event.subtype === \"unknown\")\r\n\t\t\treturn;\r\n\r\n\t\tstream.writeVarInt(event.deltaTime);\r\n\r\n\t\tswitch (event.type) {\r\n\t\tcase \"meta\":\r\n\t\t\tstream.writeInt8(0xff);\r\n\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"sequenceNumber\":\r\n\t\t\t\tstream.writeInt8(0x00);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt16(event.number);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"text\":\r\n\t\t\t\tstream.writeInt8(0x01);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"copyrightNotice\":\r\n\t\t\t\tstream.writeInt8(0x02);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"trackName\":\r\n\t\t\t\tstream.writeInt8(0x03);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"instrumentName\":\r\n\t\t\t\tstream.writeInt8(0x04);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"lyrics\":\r\n\t\t\t\tstream.writeInt8(0x05);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"marker\":\r\n\t\t\t\tstream.writeInt8(0x06);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"cuePoint\":\r\n\t\t\t\tstream.writeInt8(0x07);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"midiChannelPrefix\":\r\n\t\t\t\tstream.writeInt8(0x20);\r\n\t\t\t\tstream.writeVarInt(1);\r\n\r\n\t\t\t\tstream.writeInt8(event.channel);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"endOfTrack\":\r\n\t\t\t\tstream.writeInt8(0x2f);\r\n\t\t\t\tstream.writeVarInt(0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"setTempo\":\r\n\t\t\t\tstream.writeInt8(0x51);\r\n\t\t\t\tstream.writeVarInt(3);\r\n\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 16) & 0xff);\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 8) & 0xff);\r\n\t\t\t\tstream.writeInt8(event.microsecondsPerBeat & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"smpteOffset\":\r\n\t\t\t\tstream.writeInt8(0x54);\r\n\t\t\t\tstream.writeVarInt(5);\r\n\r\n\t\t\t\tvar frameByte = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 }[event.frameRate];\r\n\t\t\t\tstream.writeInt8(event.hour | frameByte);\r\n\t\t\t\tstream.writeInt8(event.min);\r\n\t\t\t\tstream.writeInt8(event.sec);\r\n\t\t\t\tstream.writeInt8(event.frame);\r\n\t\t\t\tstream.writeInt8(event.subframe);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"timeSignature\":\r\n\t\t\t\tstream.writeInt8(0x58);\r\n\t\t\t\tstream.writeVarInt(4);\r\n\r\n\t\t\t\tstream.writeInt8(event.numerator);\r\n\t\t\t\tstream.writeInt8(Math.log2(event.denominator));\r\n\t\t\t\tstream.writeInt8(event.metronome);\r\n\t\t\t\tstream.writeInt8(event.thirtyseconds);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"keySignature\":\r\n\t\t\t\tstream.writeInt8(0x59);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt8(event.key);\r\n\t\t\t\tstream.writeInt8(event.scale);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sequencerSpecific\":\r\n\t\t\t\tstream.writeInt8(0x7f);\r\n\t\t\t\tstream.writeVarInt(event.data.length);\r\n\r\n\t\t\t\tstream.write(event.data);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"sysEx\":\r\n\t\t\tstream.writeInt8(0xf0);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"dividedSysEx\":\r\n\t\t\tstream.writeInt8(0xf7);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"channel\":\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"noteOn\":\r\n\t\t\t\tstream.writeInt8(0x90 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteOff\":\r\n\t\t\t\tstream.writeInt8(0x80 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity ? event.velocity : 0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xa0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"controller\":\r\n\t\t\t\tstream.writeInt8(0xb0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.controllerType);\r\n\t\t\t\tstream.writeInt8(event.value);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"programChange\":\r\n\t\t\t\tstream.writeInt8(0xc0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.programNumber);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"channelAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xd0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pitchBend\":\r\n\t\t\t\tstream.writeInt8(0xe0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.value & 0xff);\r\n\t\t\t\tstream.writeInt8((event.value >> 7) & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow new Error(\"unhandled event type:\" + event.type);\r\n\t\t}\r\n\t}\r\n\r\n\tconst stream = new OStream();\r\n\r\n\tconst headerChunk = new OStream();\r\n\theaderChunk.writeInt16(header.formatType);\r\n\theaderChunk.writeInt16(tracks.length);\r\n\theaderChunk.writeInt16(header.ticksPerBeat);\r\n\r\n\twriteChunk(stream, \"MThd\", headerChunk.getBuffer());\r\n\r\n\tfor (let i = 0; i < tracks.length; ++i) {\r\n\t\tconst trackChunk = new OStream();\r\n\r\n\t\tfor (let ei = 0; ei < tracks[i].length; ++ei)\r\n\t\t\twriteEvent(trackChunk, tracks[i][ei]);\r\n\r\n\t\twriteChunk(stream, \"MTrk\", trackChunk.getBuffer());\r\n\t}\r\n\r\n\treturn stream.getArrayBuffer();\r\n};\r\n","\r\n/* Wrapper for accessing strings through sequential writes */\r\n\r\n\r\n\r\nmodule.exports = class OStream {\r\n\tconstructor () {\r\n\t\tthis.buffer = \"\";\r\n\t}\r\n\r\n\twrite (str) {\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\t/* write a big-endian 32-bit integer */\r\n\twriteInt32 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 24) & 0xff) + String.fromCharCode((i >> 16) & 0xff) +\r\n\t\t\tString.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a big-endian 16-bit integer */\r\n\twriteInt16 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write an 8-bit integer */\r\n\twriteInt8 (i) {\r\n\t\tthis.buffer += String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a MIDI-style variable-length integer\r\n\t\t(big-endian value in groups of 7 bits,\r\n\t\twith top bit set to signify that another byte follows)\r\n\t*/\r\n\twriteVarInt (i) {\r\n\t\tif (i < 0)\r\n\t\t\tthrow new Error(\"OStream.writeVarInt minus number: \" + i);\r\n\r\n\t\tconst b = i & 0x7f;\r\n\t\ti >>= 7;\r\n\t\tlet str = String.fromCharCode(b);\r\n\r\n\t\twhile (i) {\r\n\t\t\tconst b = i & 0x7f;\r\n\t\t\ti >>= 7;\r\n\t\t\tstr = String.fromCharCode(b | 0x80) + str;\r\n\t\t}\r\n\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\tgetBuffer () {\r\n\t\treturn this.buffer;\r\n\t}\r\n\r\n\tgetArrayBuffer () {\r\n\t\treturn Uint8Array.from(this.buffer.split(\"\").map(c => c.charCodeAt(0))).buffer;\r\n\t}\r\n};\r\n","\nmodule.exports = {\n\tparseMidiData: require(\"./midifile.js\"),\n\tencodeMidiFile: require(\"./midifileEx.js\"),\n};\n","\nconst midiToSequence = (midiFile, {timeWarp = 1} = {}) => {\n\tconst trackStates = [];\n\tlet beatsPerMinute = 120;\n\tconst ticksPerBeat = midiFile.header.ticksPerBeat;\n\n\tfor (let i = 0; i < midiFile.tracks.length; i++) {\n\t\ttrackStates[i] = {\n\t\t\tnextEventIndex: 0,\n\t\t\tticksToNextEvent: (\n\t\t\t\tmidiFile.tracks[i].length ?\n\t\t\t\t\tmidiFile.tracks[i][0].deltaTime :\n\t\t\t\t\tnull\n\t\t\t),\n\t\t};\n\t}\n\n\tfunction getNextEvent () {\n\t\tlet ticksToNextEvent = null;\n\t\tlet nextEventTrack = null;\n\t\tlet nextEventIndex = null;\n\n\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\tif (\n\t\t\t\ttrackStates[i].ticksToNextEvent != null\n\t\t\t\t&& (ticksToNextEvent == null || trackStates[i].ticksToNextEvent < ticksToNextEvent)\n\t\t\t) {\n\t\t\t\tticksToNextEvent = trackStates[i].ticksToNextEvent;\n\t\t\t\tnextEventTrack = i;\n\t\t\t\tnextEventIndex = trackStates[i].nextEventIndex;\n\t\t\t}\n\t\t}\n\t\tif (nextEventTrack != null) {\n\t\t\t/* consume event from that track */\n\t\t\tconst nextEvent = midiFile.tracks[nextEventTrack][nextEventIndex];\n\t\t\tif (midiFile.tracks[nextEventTrack][nextEventIndex + 1]) \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent += midiFile.tracks[nextEventTrack][nextEventIndex + 1].deltaTime;\n\t\t\telse \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent = null;\n\n\t\t\ttrackStates[nextEventTrack].nextEventIndex += 1;\n\t\t\t/* advance timings on all tracks by ticksToNextEvent */\n\t\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\t\tif (trackStates[i].ticksToNextEvent != null) \n\t\t\t\t\ttrackStates[i].ticksToNextEvent -= ticksToNextEvent;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tticksToEvent: ticksToNextEvent,\n\t\t\t\tevent: nextEvent,\n\t\t\t\ttrack: nextEventTrack,\n\t\t\t};\n\t\t}\n\t\telse \n\t\t\treturn null;\n\t\t\n\t};\n\t//\n\tlet midiEvent;\n\tconst events = [];\n\t//\n\tfunction processEvents () {\n\t\tfunction processNext () {\n\t\t\tlet secondsToGenerate = 0;\n\t\t\tif (midiEvent.ticksToEvent > 0) {\n\t\t\t\tconst beatsToGenerate = midiEvent.ticksToEvent / ticksPerBeat;\n\t\t\t\tsecondsToGenerate = beatsToGenerate / (beatsPerMinute / 60);\n\t\t\t}\n\n\t\t\t// beatsPerMinute must be changed after secondsToGenerate calculation\n\t\t\tif ( midiEvent.event.type == \"meta\" && midiEvent.event.subtype == \"setTempo\" ) {\n\t\t\t\t// tempo change events can occur anywhere in the middle and affect events that follow\n\t\t\t\tbeatsPerMinute = 60e+6 / midiEvent.event.microsecondsPerBeat;\n\t\t\t}\n\n\t\t\tconst time = (secondsToGenerate * 1000 * timeWarp) || 0;\n\t\t\tevents.push([ midiEvent, time ]);\n\t\t\tmidiEvent = getNextEvent();\n\t\t};\n\t\t//\n\t\tif (midiEvent = getNextEvent()) {\n\t\t\twhile (midiEvent)\n\t\t\t\tprocessNext();\n\t\t}\n\t};\n\n\tprocessEvents();\n\n\treturn events;\n};\n\n\nconst trimSequence = seq => {\n\tconst status = new Map();\n\n\treturn seq.filter(([{event, ticksToEvent}]) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tstatus.clear();\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn true;\n\n\t\tconst key = `${event.subtype}|${event.channel}|${event.noteNumber}`;\n\n\t\tif (status.get(key)) {\n\t\t\t//console.debug(\"event trimmed:\", event, ticksToEvent);\n\t\t\treturn false;\n\t\t}\n\n\t\tstatus.set(key, event);\n\n\t\treturn true;\n\t});\n};\n\n\nconst fixOverlapNotes = seq => {\n\tconst noteMap = new Map();\n\tconst overlapMap = new Map();\n\tconst swaps = [];\n\n\tlet leapIndex = -1;\n\n\tseq.forEach(([{event, ticksToEvent}], index) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tleapIndex = index;\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn;\n\n\t\tconst key = `${event.channel}|${event.noteNumber}`;\n\n\t\tswitch (event.subtype) {\n\t\tcase \"noteOn\":\n\t\t\tif (noteMap.get(key))\n\t\t\t\toverlapMap.set(key, leapIndex);\n\t\t\telse\n\t\t\t\tnoteMap.set(key, leapIndex);\n\n\t\t\tbreak;\n\t\tcase \"noteOff\":\n\t\t\tif (overlapMap.get(key)) {\n\t\t\t\tswaps.push([overlapMap.get(key), index]);\n\t\t\t\toverlapMap.delete(key);\n\t\t\t}\n\t\t\telse\n\t\t\t\tnoteMap.delete(key);\n\n\t\t\tbreak;\n\t\t}\n\t});\n\n\t// shift overlapped swaps\n\tswaps.forEach((swap, i) => {\n\t\tfor (let ii = i - 1; ii >= 0; --ii) {\n\t\t\tconst pre = swaps[ii];\n\t\t\tif (pre[1] < swap[0])\n\t\t\t\tbreak;\n\n\t\t\tif (swap[0] > pre[0])\n\t\t\t\t++swap[0];\n\t\t}\n\t});\n\n\t//console.debug(\"swaps:\", swaps);\n\tswaps.forEach(([front, back]) => {\n\t\tif (back >= seq.length - 1 || front < 0)\n\t\t\treturn;\n\n\t\tconst offEvent = seq[back];\n\t\tconst nextEvent = seq[back + 1];\n\t\tconst leapEvent = seq[front];\n\n\t\tif (!leapEvent[0].ticksToEvent) {\n\t\t\tconsole.warn(\"invalid front index:\", front, back, leapEvent);\n\t\t\treturn;\n\t\t}\n\n\t\t// ms per tick\n\t\tconst tempo = leapEvent[1] / leapEvent[0].ticksToEvent;\n\n\t\tnextEvent[1] += offEvent[1];\n\t\tnextEvent[0].ticksToEvent += offEvent[0].ticksToEvent;\n\n\t\toffEvent[0].ticksToEvent = leapEvent[0].ticksToEvent - 1;\n\t\tleapEvent[0].ticksToEvent = 1;\n\n\t\toffEvent[1] = offEvent[0].ticksToEvent * tempo;\n\t\tleapEvent[1] = leapEvent[0].ticksToEvent * tempo;\n\t\t//console.debug(\"swap:\", [front, back], offEvent, nextEvent, leapEvent);\n\n\t\tseq.splice(back, 1);\n\t\tseq.splice(front, 0, offEvent);\n\t});\n\n\treturn seq;\n};\n\n\n\nmodule.exports = {\n\tmidiToSequence,\n\ttrimSequence,\n\tfixOverlapNotes,\n};\n","\nconst MidiSequence = require(\"./MidiSequence.js\");\n\n\n\nconst PedalControllerTypes = {\n\t64: \"Sustain\",\n\t65: \"Portamento\",\n\t66: \"Sostenuto\",\n\t67: \"Soft\",\n};\n\n\n\nclass Notation {\n\tstatic parseMidi (data, {fixOverlap = true} = {}) {\n\t\tconst channelStatus = [];\n\t\tconst pedalStatus = {};\n\t\tconst pedals = {};\n\t\tconst channels = [];\n\t\tconst bars = [];\n\t\tlet time = 0;\n\t\tlet millisecondsPerBeat = 600000 / 120;\n\t\tlet beats = 0;\n\t\tlet numerator = 4;\n\t\tlet barIndex = 0;\n\t\tconst keyRange = {};\n\t\tlet rawTicks = 0;\n\t\tlet ticks = 0;\n\t\tlet correspondences;\n\t\tconst tempos = [];\n\n\t\tconst ticksPerBeat = data.header.ticksPerBeat;\n\n\t\tlet rawEvents = MidiSequence.midiToSequence(data);\n\n\t\tif (fixOverlap)\n\t\t\trawEvents = MidiSequence.trimSequence(MidiSequence.fixOverlapNotes(rawEvents));\n\n\t\tconst events = rawEvents.map(d => ({\n\t\t\tdata: d[0].event,\n\t\t\ttrack: d[0].track,\n\t\t\tdeltaTime: d[1],\n\t\t\tdeltaTicks: d[0].ticksToEvent,\n\t\t}));\n\n\t\tlet index = 0;\n\n\t\tconst ticksNormal = 1;\n\n\t\tfor (const ev of events) {\n\t\t\trawTicks += ev.deltaTicks;\n\t\t\tticks = Math.round(rawTicks * ticksNormal);\n\n\t\t\tif (ev.deltaTicks > 0) {\n\t\t\t\t// append bars\n\t\t\t\tconst deltaBeats = ev.deltaTicks / ticksPerBeat;\n\t\t\t\tfor (let b = Math.ceil(beats); b < beats + deltaBeats; ++b) {\n\t\t\t\t\tconst t = time + (b - beats) * millisecondsPerBeat;\n\t\t\t\t\tbars.push({time: t, index: barIndex % numerator});\n\n\t\t\t\t\t++barIndex;\n\t\t\t\t}\n\n\t\t\t\tbeats += deltaBeats;\n\t\t\t}\n\n\t\t\ttime += ev.deltaTime;\n\n\t\t\t//const ticksTime = beats * millisecondsPerBeat;\n\t\t\t//console.log(\"time:\", time, ticksTime, ticksTime - time);\n\n\t\t\tev.time = time;\n\t\t\tev.ticks = ticks;\n\n\t\t\tconst event = ev.data;\n\t\t\tswitch (event.type) {\n\t\t\tcase \"channel\":\n\t\t\t\t//channelStatus[event.channel] = channelStatus[event.channel] || [];\n\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"noteOn\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\t\t\t\t\t\t//channelStatus[event.channel][pitch] = {\n\t\t\t\t\t\tchannelStatus.push({\n\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\tstartTick: ticks,\n\t\t\t\t\t\t\tstart: time,\n\t\t\t\t\t\t\tvelocity: event.velocity,\n\t\t\t\t\t\t\tbeats: beats,\n\t\t\t\t\t\t\ttrack: ev.track,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tkeyRange.low = Math.min(keyRange.low || pitch, pitch);\n\n\t\t\t\t\t\tev.index = index;\n\t\t\t\t\t\t++index;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"noteOff\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\n\t\t\t\t\t\tchannels[event.channel] = channels[event.channel] || [];\n\n\t\t\t\t\t\tconst statusIndex = channelStatus.findIndex(status => status.channel == event.channel && status.pitch == pitch);\n\t\t\t\t\t\tif (statusIndex >= 0) {\n\t\t\t\t\t\t\tconst status = channelStatus.splice(statusIndex, 1)[0];\n\n\t\t\t\t\t\t\tchannels[event.channel].push({\n\t\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\t\tstartTick: status.startTick,\n\t\t\t\t\t\t\t\tendTick: ticks,\n\t\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\t\tstart: status.start,\n\t\t\t\t\t\t\t\tduration: time - status.start,\n\t\t\t\t\t\t\t\tvelocity: status.velocity,\n\t\t\t\t\t\t\t\tbeats: status.beats,\n\t\t\t\t\t\t\t\ttrack: status.track,\n\t\t\t\t\t\t\t\tfinger: status.finger,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tconsole.debug(\"unexpected noteOff: \", time, event);\n\n\t\t\t\t\t\tkeyRange.high = Math.max(keyRange.high || pitch, pitch);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"controller\":\n\t\t\t\t\tswitch (event.controllerType) {\n\t\t\t\t\t// pedal controllers\n\t\t\t\t\tcase 64:\n\t\t\t\t\tcase 65:\n\t\t\t\t\tcase 66:\n\t\t\t\t\tcase 67:\n\t\t\t\t\t\tconst pedalType = PedalControllerTypes[event.controllerType];\n\n\t\t\t\t\t\tpedalStatus[event.channel] = pedalStatus[event.channel] || {};\n\t\t\t\t\t\tpedals[event.channel] = pedals[event.channel] || [];\n\n\t\t\t\t\t\tconst status = pedalStatus[event.channel][pedalType];\n\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tpedals[event.channel].push({type: pedalType, start: status.start, duration: time - status.start, value: status.value});\n\t\t\t\t\t\tpedalStatus[event.channel][pedalType] = {start: time, value: event.value};\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase \"meta\":\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"setTempo\":\n\t\t\t\t\tmillisecondsPerBeat = event.microsecondsPerBeat / 1000;\n\t\t\t\t\t//beats = Math.round(beats);\n\t\t\t\t\t//console.assert(Number.isFinite(time), \"invalid time:\", time);\n\t\t\t\t\ttempos.push({tempo: event.microsecondsPerBeat, tick: ticks, time});\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"timeSignature\":\n\t\t\t\t\tnumerator = event.numerator;\n\t\t\t\t\tbarIndex = 0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tif (!correspondences && /^find-corres:/.test(event.text)) {\n\t\t\t\t\t\tconst captures = event.text.match(/:([\\d\\,-]+)/);\n\t\t\t\t\t\tconst str = captures && captures[1] || \"\";\n\t\t\t\t\t\tcorrespondences = str.split(\",\").map(s => Number(s));\n\t\t\t\t\t}\n\t\t\t\t\telse if (/fingering\\(.*\\)/.test(event.text)) {\n\t\t\t\t\t\tconst [_, fingers] = event.text.match(/\\((.+)\\)/);\n\t\t\t\t\t\tconst finger = Number(fingers);\n\t\t\t\t\t\tif (!Number.isNaN(finger)) {\n\t\t\t\t\t\t\tconst status = channelStatus[channelStatus.length - 1];\n\t\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\t\tstatus.finger = finger;\n\n\t\t\t\t\t\t\tconst event = events.find(e => e.index == index - 1);\n\t\t\t\t\t\t\tif (event)\n\t\t\t\t\t\t\t\tevent.data.finger = finger;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"copyrightNotice\":\n\t\t\t\t\tconsole.log(\"MIDI copyright:\", event.text);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tchannelStatus.forEach(status => {\n\t\t\tconsole.debug(\"unclosed noteOn event at\", status.startTick, status);\n\n\t\t\tchannels[status.channel].push({\n\t\t\t\tstartTick: status.startTick,\n\t\t\t\tendTick: ticks,\n\t\t\t\tpitch: status.pitch,\n\t\t\t\tstart: status.start,\n\t\t\t\tduration: time - status.start,\n\t\t\t\tvelocity: status.velocity,\n\t\t\t\tbeats: status.beats,\n\t\t\t\ttrack: status.track,\n\t\t\t\tfinger: status.finger,\n\t\t\t});\n\t\t});\n\n\t\treturn new Notation({\n\t\t\tchannels,\n\t\t\tkeyRange,\n\t\t\tpedals,\n\t\t\tbars,\n\t\t\tendTime: time,\n\t\t\tendTick: ticks,\n\t\t\tcorrespondences,\n\t\t\tevents,\n\t\t\ttempos,\n\t\t\tticksPerBeat,\n\t\t\tmeta: {},\n\t\t});\n\t}\n\n\n\tconstructor (fields) {\n\t\tObject.assign(this, fields);\n\n\t\t// channels to notes\n\t\tthis.notes = [];\n\t\tfor (const channel of this.channels) {\n\t\t\tif (channel) {\n\t\t\t\tfor (const note of channel)\n\t\t\t\t\tthis.notes.push(note);\n\t\t\t}\n\t\t}\n\t\tthis.notes.sort(function (n1, n2) {\n\t\t\treturn n1.start - n2.start;\n\t\t});\n\n\t\tfor (const i in this.notes)\n\t\t\tthis.notes[i].index = Number(i);\n\n\n\t\t// duration\n\t\tthis.duration = this.notes.length > 0 ? (this.endTime - this.notes[0].start) : 0,\n\n\t\t//this.endSoftIndex = this.notes.length ? this.notes[this.notes.length - 1].softIndex : 0;\n\n\n\t\t// pitch map\n\t\tthis.pitchMap = [];\n\t\tfor (const c in this.channels) {\n\t\t\tfor (const n in this.channels[c]) {\n\t\t\t\tconst pitch = this.channels[c][n].pitch;\n\t\t\t\tthis.pitchMap[pitch] = this.pitchMap[pitch] || [];\n\n\t\t\t\tthis.pitchMap[pitch].push(this.channels[c][n]);\n\t\t\t}\n\t\t}\n\n\t\tthis.pitchMap.forEach(notes => notes.sort((n1, n2) => n1.start - n2.start));\n\n\n\t\t/*// setup measure notes index\n\t\tif (this.measures) {\n\t\t\tconst measure_list = [];\n\n\t\t\tlet last_measure = null;\n\t\t\tconst measure_entries = Object.entries(this.measures).sort((e1, e2) => Number(e1[0]) - Number(e2[0]));\n\t\t\tfor (const [t, measure] of measure_entries) {\n\t\t\t\t//console.log(\"measure time:\", Number(t));\n\t\t\t\tmeasure.startTick = Number(t);\n\t\t\t\tmeasure.notes = [];\n\n\t\t\t\tif (last_measure)\n\t\t\t\t\tlast_measure.endTick = measure.startTick;\n\n\t\t\t\tconst m = measure.measure;\n\t\t\t\tmeasure_list[m] = measure_list[m] || [];\n\t\t\t\tmeasure_list[m].push(measure);\n\n\t\t\t\tlast_measure = measure;\n\t\t\t}\n\t\t\tif (last_measure)\n\t\t\t\tlast_measure.endTick = this.notes[this.notes.length - 1].endTick;\n\t\t\tfor (const i in this.notes) {\n\t\t\t\tconst note = this.notes[i];\n\t\t\t\tfor (const t in this.measures) {\n\t\t\t\t\tconst measure = this.measures[t];\n\t\t\t\t\tif (note.startTick >= measure.startTick && note.startTick < measure.endTick || note.endTick > measure.startTick && note.endTick <= measure.endTick)\n\t\t\t\t\t\tmeasure.notes.push(note);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.measure_list = measure_list;\n\t\t}*/\n\n\n\t\t// prepare beats info\n\t\tif (this.meta.beatInfos) {\n\t\t\tfor (let i = 0; i < this.meta.beatInfos.length; ++i) {\n\t\t\t\tconst info = this.meta.beatInfos[i];\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tconst lastInfo = this.meta.beatInfos[i - 1];\n\t\t\t\t\tinfo.beatIndex = lastInfo.beatIndex + Math.ceil((info.tick - lastInfo.tick) / this.ticksPerBeat);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tinfo.beatIndex = 0;\n\t\t\t}\n\t\t}\n\n\n\t\t// compute tempos tick -> time\n\t\t{\n\t\t\tlet time = 0;\n\t\t\tlet ticks = 0;\n\t\t\tlet tempo = 500000;\n\t\t\tfor (const entry of this.tempos) {\n\t\t\t\tconst deltaTicks = entry.tick - ticks;\n\t\t\t\ttime += (tempo / 1000) * deltaTicks / this.ticksPerBeat;\n\n\t\t\t\tticks = entry.tick;\n\t\t\t\ttempo = entry.tempo;\n\n\t\t\t\tentry.time = time;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfindChordBySoftindex (softIndex, radius = 0.8) {\n\t\treturn this.notes.filter(note => Math.abs(note.softIndex - softIndex) < radius);\n\t}\n\n\n\taverageTempo (tickRange) {\n\t\ttickRange = tickRange || {from: 0, to: this.endtick};\n\n\t\tconsole.assert(this.tempos, \"no tempos.\");\n\t\tconsole.assert(tickRange.to > tickRange.from, \"range is invalid:\", tickRange);\n\n\t\tconst span = index => {\n\t\t\tconst from = Math.max(tickRange.from, this.tempos[index].tick);\n\t\t\tconst to = (index < this.tempos.length - 1) ? Math.min(this.tempos[index + 1].tick, tickRange.to) : tickRange.to;\n\n\t\t\treturn Math.max(0, to - from);\n\t\t};\n\n\t\tconst tempo_sum = this.tempos.reduce((sum, tempo, index) => sum + tempo.tempo * span(index), 0);\n\n\t\tconst average = tempo_sum / (tickRange.to - tickRange.from);\n\n\t\t// convert microseconds per beat to beats per minute\n\t\treturn 60e+6 / average;\n\t}\n\n\n\tticksToTime (tick) {\n\t\tconsole.assert(Number.isFinite(tick), \"invalid tick value:\", tick);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.tick > tick);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.time + (tick - tempo.tick) * tempo.tempo * 1e-3 / this.ticksPerBeat;\n\t}\n\n\n\ttimeToTicks (time) {\n\t\tconsole.assert(Number.isFinite(time), \"invalid time value:\", time);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.time > time);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.tick + (time - tempo.time) * this.ticksPerBeat / (tempo.tempo * 1e-3);\n\t}\n\n\n\ttickRangeToTimeRange (tickRange) {\n\t\tconsole.assert(tickRange.to >= tickRange.from, \"invalid tick range:\", tickRange);\n\n\t\treturn {\n\t\t\tfrom: this.ticksToTime(tickRange.from),\n\t\t\tto: this.ticksToTime(tickRange.to),\n\t\t};\n\t}\n\n\n\t/*getMeasureRange (measureRange) {\n\t\tconsole.assert(Number.isInteger(measureRange.start) && Number.isInteger(measureRange.end), \"invalid measure range:\", measureRange);\n\t\tconsole.assert(this.measure_list && this.measure_list[measureRange.start] && this.measure_list[measureRange.end], \"no measure data for specific index:\", this.measure_list, measureRange);\n\n\t\tconst startMeasure = this.measure_list[measureRange.start][0];\n\t\tlet endMeasure = null;\n\t\tfor (const measure of this.measure_list[measureRange.end]) {\n\t\t\tif (measure.endTick > startMeasure.startTick) {\n\t\t\t\tendMeasure = measure;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// there no path between start measure and end measure.\n\t\tif (!endMeasure)\n\t\t\treturn null;\n\n\t\tconst tickRange = {from: startMeasure.startTick, to: endMeasure.endTick, duration: endMeasure.endTick - startMeasure.startTick};\n\t\tconst timeRange = this.tickRangeToTimeRange(tickRange);\n\t\ttimeRange.duration = timeRange.to - timeRange.from;\n\n\t\treturn {\n\t\t\ttickRange,\n\t\t\ttimeRange,\n\t\t};\n\t}*/\n\n\n\tscaleTempo ({factor, headTempo}) {\n\t\tconsole.assert(this.tempos && this.tempos.length, \"[Notation.scaleTempo] tempos is empty.\");\n\n\t\tif (headTempo)\n\t\t\tfactor = headTempo / this.tempos[0].tempo;\n\n\t\tconsole.assert(Number.isFinite(factor) && factor > 0, \"[Notation.scaleTempo] invalid factor:\", factor);\n\n\t\tthis.tempos.forEach(tempo => {\n\t\t\ttempo.tempo *= factor;\n\t\t\ttempo.time *= factor;\n\t\t});\n\t\tthis.events.forEach(event => {\n\t\t\tevent.deltaTime *= factor;\n\t\t\tevent.time *= factor;\n\t\t});\n\t\tthis.notes.forEach(note => {\n\t\t\tnote.start *= factor;\n\t\t\tnote.duration *= factor;\n\t\t});\n\n\t\tthis.endTime *= factor;\n\t}\n};\n\n\n\nmodule.exports = {\n\tNotation,\n};\n","\nconst { Notation } = require(\"./MusicNotation.js\");\n\n\n\n//const msDelay = ms => new Promise(resolve => setTimeout(resolve, ms));\nconst animationDelay = () => new Promise(resolve => requestAnimationFrame(resolve));\n\n\nclass MidiPlayer {\n\tconstructor (midiData, {cacheSpan = 600, onMidi, onPlayFinish, onTurnCursor} = {}) {\n\t\tthis.cacheSpan = cacheSpan;\n\t\tthis.onMidi = onMidi;\n\t\tthis.onPlayFinish = onPlayFinish;\n\t\tthis.onTurnCursor = onTurnCursor;\n\n\t\tlet notation;\n\t\tif (midiData.notes && Number.isFinite(midiData.endTime))\n\t\t\tnotation = midiData;\n\t\telse\n\t\t\tnotation = Notation.parseMidi(midiData);\n\n\t\tthis.notation = notation;\n\t\tthis.events = notation.events;\n\t\t//console.log(\"events:\", this.events);\n\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t\tthis.startTime = performance.now();\n\t\tthis.duration = notation.endTime;\n\t\tthis.cursorTurnDelta = 0;\n\n\t\tconsole.assert(notation.tempos && notation.tempos.length, \"[MidiPlayer] invalid notation, tempos is empty.\");\n\t}\n\n\n\tdispose () {\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t}\n\n\n\tget progressTicks () {\n\t\treturn this.notation.timeToTicks(this.progressTime);\n\t}\n\n\n\tset progressTicks (value) {\n\t\tthis.progressTime = this.notation.ticksToTime(value);\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(this.progressTime);\n\t}\n\n\n\tasync play ({nextFrame = animationDelay} = {}) {\n\t\tif (this.progressTime >= this.duration)\n\t\t\tthis.progressTime = 0;\n\n\t\tlet now = performance.now();\n\t\tthis.startTime = now - this.progressTime;\n\n\t\tthis.isPlaying = true;\n\n\t\tlet currentEventIndex = this.events.findIndex(event => event.time >= now - this.startTime);\n\n\t\twhile (this.isPlaying) {\n\t\t\tfor (; currentEventIndex < this.events.length; ++currentEventIndex) {\n\t\t\t\tconst event = this.events[currentEventIndex];\n\t\t\t\t//console.log(\"play event:\", currentEventIndex, event.time, this.progressTime + this.cacheSpan);\n\t\t\t\tif (!event || event.time > this.progressTime + this.cacheSpan)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (event.data.type === \"channel\" && this.startTime + event.time >= now)\n\t\t\t\t\tif (this.onMidi)\n\t\t\t\t\t\tthis.onMidi(event.data, this.startTime + event.time);\n\t\t\t}\n\n\t\t\tawait nextFrame();\n\n\t\t\tif (!this.isPlaying)\n\t\t\t\tbreak;\n\n\t\t\tif (this.cursorTurnDelta !== 0) {\n\t\t\t\tconst backturn = this.cursorTurnDelta < 0;\n\n\t\t\t\tthis.startTime -= this.cursorTurnDelta;\n\t\t\t\tthis.cursorTurnDelta = 0;\n\n\t\t\t\tif (backturn) {\n\t\t\t\t\tfor (; currentEventIndex > 0; --currentEventIndex) {\n\t\t\t\t\t\tconst eventTime = this.events[currentEventIndex].time;\n\t\t\t\t\t\tif (this.startTime + eventTime < now)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnow = performance.now();\n\n\t\t\tthis.progressTime = now - this.startTime;\n\n\t\t\tif (this.progressTime > this.duration) {\n\t\t\t\tthis.isPlaying = false;\n\n\t\t\t\tif (this.onPlayFinish)\n\t\t\t\t\tthis.onPlayFinish();\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpause () {\n\t\tthis.isPlaying = false;\n\t}\n\n\n\tturnCursor (time) {\n\t\t//console.log(\"onTurnCursor:\", time, oldTime);\n\t\tif (this.isPlaying)\n\t\t\tthis.cursorTurnDelta += time - this.progressTime;\n\t\telse\n\t\t\tthis.progressTime = time;\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(time);\n\t}\n};\n\n\n\nmodule.exports = MidiPlayer;\n","\nmodule.exports = {\n\tCostStepAttenuation: 0.6,\n\tSkipDeep: 3,\n\tPriorDistanceSigmoidFactor: 0.1,\n\tPriorValueSigmoidFactor: 0.12,\n\n\tSkipCost: 0.5,\n\tLagOffsetCost: 1,\n\tLeadOffsetCost: 1.6,\n\tZeroOffsetCost: 0.58,\n\n\tRelocationThreshold: 6,\n};\n","\nconst {pick} = require(\"lodash\");\n\nconst Config = require(\"./config.js\");\n\n\n\nclass Node {\n\tconstructor (s_note, c_note) {\n\t\tthis.s_note = s_note;\n\t\tthis.c_note = c_note;\n\n\t\tconsole.assert(this.s_note.softIndex != null, \"s_note softIndex is null\");\n\t\tthis.offset = this.s_note.softIndex - this.c_note.softIndex;\n\n\t\tthis._prev = null;\n\t\tthis._totalCost = 0;\n\t\tthis._value = 0;\n\t\tthis.cacheDirty = true;\n\n\t\t//this.evaluatePrev(Node.Zero);\n\t}\n\n\n\tget prev () {\n\t\treturn this._prev;\n\t}\n\n\n\tset prev (value) {\n\t\tif (value != this._prev) {\n\t\t\tthis._prev = value;\n\t\t\tthis.cacheDirty = true;\n\t\t}\n\t}\n\n\n\tget si () {\n\t\treturn this.s_note.index;\n\t}\n\n\n\tget ci () {\n\t\treturn this.c_note.index;\n\t}\n\n\n\tget root () {\n\t\treturn this.prev.root || this;\n\t}\n\n\n\tget rootSi () {\n\t\treturn !this.prev.zero ? this.prev.rootSi : this.si;\n\t}\n\n\n\tget id () {\n\t\treturn `${this.s_note.index},${this.c_note.index}`;\n\t}\n\n\n\tstatic cost (prev, skip, self) {\n\t\treturn prev * Config.CostStepAttenuation + Math.tanh(skip * Config.SkipCost) + Math.tanh(self * 0.5);\n\t}\n\n\n\tupdateCache () {\n\t\tif (this.cacheDirty) {\n\t\t\tthis._totalCost = Node.cost(this.prev.totalCost, this.si - this.prev.si - 1, this.selfCost);\n\t\t\tthis._value = this.prev.value + 1 - Math.tanh(this.selfCost * 0.5);\n\n\t\t\tthis.cacheDirty = false;\n\t\t}\n\t}\n\n\n\tget totalCost () {\n\t\tthis.updateCache();\n\n\t\treturn this._totalCost;\n\t}\n\n\n\tget value () {\n\t\tthis.updateCache();\n\n\t\treturn this._value;\n\t}\n\n\n\tget deep () {\n\t\treturn this.prev.deep + 1;\n\t}\n\n\n\tget path () {\n\t\tconst path = [];\n\t\tfor (let node = this; !node.zero; node = node.prev) {\n\t\t\tpath[node.si] = node.ci;\n\t\t}\n\n\t\tfor (let i = 0; i < path.length; ++i)\n\t\t\tif (typeof path[i] != \"number\")\n\t\t\t\tpath[i] = -1;\n\n\t\treturn path;\n\t}\n\n\n\tdump () {\n\t\treturn pick(this, [\"id\", \"si\", \"ci\", \"rootSi\", \"value\", \"deep\", \"rootSi\", \"offset\", \"prior\", \"selfCost\", \"totalCost\"]);\n\t}\n\n\n\tevaluatePrev (node) {\n\t\tconst cost = this.evaluatePrevCost(node);\n\n\t\tconsole.assert(this.si - node.si >= 1, \"node index error:\", this, node/*, {get [Symbol.toStringTag]() {debugger}}*/);\n\t\t//if (this.si - node.si < 1)\n\t\t//\tdebugger;\n\n\t\tconst totalCost = Node.cost(node.totalCost, this.si - node.si - 1, cost);\n\n\t\tif (!this.prev || totalCost < this.totalCost) {\n\t\t\tthis.prev = node;\n\t\t\tthis.selfCost = cost;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tevaluatePrevCost (node) {\n\t\tlet cost = 0;\n\n\t\tif (node.offset != null) {\n\t\t\tconst bias = this.offset - node.offset;\n\t\t\tconst costCoeff = node.zero ? Config.ZeroOffsetCost : (bias > 0 ? Config.LagOffsetCost : Config.LeadOffsetCost);\n\t\t\tcost += (bias * costCoeff) ** 2;\n\t\t}\n\n\t\treturn cost;\n\t}\n\n\n\tpriorByOffset (offset) {\n\t\tconst distance = Math.abs(this.offset - offset) / 1;//(this.s_note.deltaSi + 0.04);\n\n\t\treturn Math.tanh(this.value * Config.PriorValueSigmoidFactor) - Math.tanh(distance * Config.PriorDistanceSigmoidFactor);\n\t\t//return Math.log(this.value) * Math.tanh(4 / distance);\n\t\t//return this.value - distance;\n\t}\n\n\n\tstatic zero () {\n\t\treturn {\n\t\t\tzero: true,\n\t\t\ttotalCost: 0,\n\t\t\tvalue: 0,\n\t\t\tsi: -1,\n\t\t\tci: -1,\n\t\t\tdeep: 0,\n\t\t\toffset: 0,\n\t\t};\n\t}\n};\n\n\n\nmodule.exports = Node;\n","\nconst Config = require(\"./config.js\");\nconst Node = require(\"./node.js\");\n\n\n\nclass Navigator {\n\tconstructor (criterion, sample, options = {}) {\n\t\tthis.criterion = criterion;\n\t\tthis.sample = sample;\n\n\t\tthis.getCursorOffset = options.getCursorOffset || (() => null);\n\t\tthis.outOfPage = options.outOfPage;\n\n\t\tthis.bestNode = null;\n\t\tthis.fineCursor = null;\n\n\t\tthis.breakingSI = sample.notes.length - 1;\n\n\t\tthis.zeroNode = Node.zero();\n\t\tthis.zeroNode.offset = this.getCursorOffset() || 0;\n\n\t\tthis.relocationThreshold = options.relocationThreshold || Config.RelocationThreshold;\n\t}\n\n\n\tstep (index) {\n\t\t//console.log(\"step:\", this.zeroNode.offset);\n\t\tconst note = this.sample.notes[index];\n\n\t\tif (note.matches.length > 0) {\n\t\t\t//console.log(\"zeroNode.offset:\", index, this.zeroNode.offset);\n\t\t\tnote.matches.forEach(node => {\n\t\t\t\tnode.evaluatePrev(this.zeroNode);\n\t\t\t\t//console.log(\"node:\", node, node.evaluatePrevCost(this.zeroNode), node.offset, this.zeroNode.offset);\n\n\t\t\t\tfor (let si = index - 1; si >= Math.max(this.breakingSI + 1, index - Config.SkipDeep); --si) {\n\t\t\t\t\t//const skipCost = Config.SkipCost * (index - 1 - si);\n\n\t\t\t\t\tconst prevNote = this.sample.notes[si];\n\t\t\t\t\tconsole.assert(prevNote, \"prevNote is null:\", si, index, this.sample.notes);\n\t\t\t\t\tprevNote.matches.forEach(prevNode => {\n\t\t\t\t\t\tconst bias = node.offset - prevNode.offset;\n\t\t\t\t\t\tif (/*prevNode.totalCost + skipCost < node.totalCost\n\t\t\t\t\t\t\t&&*/ (bias < 2 / Config.LagOffsetCost && bias > -2 / Config.LeadOffsetCost))\n\t\t\t\t\t\t\tnode.evaluatePrev(prevNode);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tnode.prior = node.totalCost > 1.99 ? -1 : node.priorByOffset(this.zeroNode.offset);\n\n\t\t\t\tif (node.prior > 0 && this.outOfPage) {\n\t\t\t\t\tconst tick = this.criterion.notes[node.ci].startTick;\n\t\t\t\t\tif (this.outOfPage(tick))\n\t\t\t\t\t\tnode.prior -= 0.7;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tnote.matches.sort((c1, c2) => c2.prior - c1.prior);\n\t\t\tthis.cursors = note.matches;\n\t\t\t//console.log(\"navigator cursors:\", this.cursors);\n\n\t\t\tlet fineCursor = null;\n\t\t\tconst nullLength = this.nullSteps(index);\n\n\t\t\tconst cursor = this.cursors[0];\n\t\t\tif (cursor && cursor.totalCost < 1) {\n\t\t\t\t//console.log(\"nullLength:\", nullLength, nullLength * Math.log(cursor.value / 4));\n\t\t\t\tif (cursor.prior > 0 || (cursor.totalCost < 0.4 && Math.log(Math.max(nullLength * cursor.value, 1e-3)) > this.relocationThreshold)) {\n\t\t\t\t\tthis.zeroNode.offset = cursor.offset;\n\n\t\t\t\t\tfineCursor = cursor;\n\n\t\t\t\t\tif (!this.bestNode || cursor.value > this.bestNode.value)\n\t\t\t\t\t\tthis.bestNode = cursor;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fineCursor)\n\t\t\t\tthis.fineCursor = fineCursor;\n\t\t\telse {\n\t\t\t\tif (!this.resetCursor(index, {breaking: false/*nullLength > Config.SkipDeep*/})) {\n\t\t\t\t\tthis.zeroNode.offset += note.deltaSi * Math.tanh(nullLength);\n\t\t\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", note.deltaSi, nullLength);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthis.cursors = [];\n\t}\n\n\n\tpath ({fromIndex = 0, toIndex = this.sample.notes.length - 1} = {}) {\n\t\tconst path = [];\n\n\t\tlet offset = null;\n\n\t\tfor (let si = toIndex; si >= fromIndex;) {\n\t\t\tconst note = this.sample.notes[si];\n\n\t\t\tif (!note.matches.length || note.matches[0].prior < -0.01 || note.matches[0].totalCost >= 1) {\n\t\t\t\t//if (note.matches.length)\n\t\t\t\t//\tconsole.log(\"path -1:\", si, note.matches[0].prior, note.matches[0].totalCost);\n\t\t\t\tpath[si] = -1;\n\t\t\t\t--si;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// sort nodes by backwards heuristic offset\n\t\t\tif (offset != null) {\n\t\t\t\tnote.matches.forEach(node => node.backPrior = (node.totalCost < 1.99 ? node.priorByOffset(offset) : -1));\n\t\t\t\tnote.matches.sort((n1, n2) => n2.backPrior - n1.backPrior);\n\t\t\t}\n\n\t\t\tconst node = note.matches[0];\n\t\t\tnode.path.forEach((ci, si) => path[si] = ci);\n\t\t\t//console.log(\"node path:\", si, node.path);\n\n\t\t\toffset = node.root.offset;\n\n\t\t\tsi = node.rootSi - 1;\n\t\t}\n\n\t\tconsole.assert(path.length == toIndex + 1, \"path length error:\", path, fromIndex, toIndex + 1,\n\t\t\tthis.sample.notes.length, this.sample.notes.length ? this.sample.notes[this.sample.notes.length - 1].index : null);\n\n\t\treturn path;\n\t}\n\n\n\tnullSteps (index) {\n\t\treturn index - (this.fineCursor ? this.fineCursor.si : -1) - 1;\n\t}\n\n\n\tresetCursor (index, {breaking = true} = {}) {\n\t\tif (breaking)\n\t\t\tthis.breakingSI = index;\n\n\t\tconst cursorOffset = this.getCursorOffset();\n\t\tif (cursorOffset != null) {\n\t\t\t//console.log(\"cursorOffset:\", cursorOffset);\n\n\t\t\tthis.zeroNode.offset = cursorOffset;\n\t\t\t//this.breaking = this.nullSteps(index) > Config.SkipDeep;\n\t\t\t//if (this.breaking)\t// trivial zero node si resets result in focus path interruption\n\t\t\tthis.zeroNode.si = index;\n\t\t\tthis.fineCursor = null;\n\n\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", cursorOffset);\n\t\t\t//console.log(\"cursor offset reset:\", cursorOffset);\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tget relocationTendency () {\n\t\tconst cursor = this.cursors && this.cursors[0];\n\t\tif (!cursor)\n\t\t\treturn null;\n\n\t\tconst nullLength = this.nullSteps(cursor.si);\n\t\tif (nullLength <= 0)\n\t\t\treturn 0;\n\n\t\treturn Math.log(Math.max(nullLength * cursor.value, 1e-3)) / this.relocationThreshold;\n\t}\n};\n\n\n\nmodule.exports = Navigator;\n","\nconst Node = require(\"./node.js\");\nconst Navigator = require(\"./navigator.js\");\n\n\n\nconst HEART_BEAT = 800;\t// in ms\nconst SIMULTANEOUS_INTERVAL = HEART_BEAT * 0.24;\n\n\nconst normalizeInterval = interval => Math.tanh(interval / SIMULTANEOUS_INTERVAL);\n\n\n// greater softIndexFactor make 'harder' soft index\nconst makeNoteSoftIndex = function (notes, index, {softIndexFactor = 1} = {}) {\n\tindex = Number(index);\n\n\tconst note = notes[index];\n\n\t// make soft index\n\tif (index > 0) {\n\t\tconst lastNote = notes[index - 1];\n\n\t\tconsole.assert(note.start != null, \"note.start is null\", note);\n\t\tconsole.assert(lastNote.start != null, \"lastNote.start is null\", lastNote);\n\n\t\tnote.deltaSi = normalizeInterval((note.start - lastNote.start) * softIndexFactor);\n\t\tnote.softIndex = lastNote.softIndex + note.deltaSi;\n\n\t\tconsole.assert(!Number.isNaN(note.deltaSi), \"note.deltaSi is NaN.\", note.start, lastNote.start);\n\t}\n\telse {\n\t\tnote.softIndex = 0;\n\t\tnote.deltaSi = 0;\n\t}\n};\n\n\nconst makeMatchNodes = function (note, criterion, zeroNode = Node.zero()) {\n\tnote.matches = [];\n\n\tconst targetList = criterion.pitchMap[note.pitch];\n\tif (targetList) {\n\t\tfor (const targetNote of targetList) {\n\t\t\tconst node = new Node(note, targetNote);\n\t\t\tif (zeroNode)\n\t\t\t\tnode.evaluatePrev(zeroNode);\n\n\t\t\tnote.matches.push(node);\n\t\t}\n\t}\n};\n\n\nconst genNotationContext = function (notation, {softIndexFactor = 1} = {}) {\n\tfor (let i = 0; i < notation.notes.length; ++i)\n\t\tmakeNoteSoftIndex(notation.notes, i, {softIndexFactor});\n};\n\n\nconst runNavigation = async function(criterion, sample, onStep) {\n\tconst navigator = new Navigator(criterion, sample);\n\tnavigator.resetCursor(-1);\n\n\tfor (let i = 0; i < sample.notes.length; ++i) {\n\t\tnavigator.step(i);\n\n\t\tconst next = await (onStep && onStep(i, navigator));\n\t\tif (next === Symbol.for(\"end\")) {\n\t\t\tconsole.log(\"Navigation interrupted.\");\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t//console.log(\"Navigation accomplished.\");\n\n\treturn navigator;\n};\n\n\n\nmodule.exports = {\n\tnormalizeInterval,\n\tmakeNoteSoftIndex,\n\tmakeMatchNodes,\n\tgenNotationContext,\n\trunNavigation,\n\tNavigator,\n\tNode,\n};\n","\nconst MIDI = require(\"./MIDI\");\n\n\n\nconst trackDeltaToAbs = events => {\n\tlet tick = 0;\n\n\tevents.forEach(event => {\n\t\ttick += event.deltaTime;\n\t\tevent.tick = tick;\n\t});\n};\n\n\nconst trackAbsToDelta = events => {\n\tlet lastTick = 0;\n\n\tevents.sort((e1, e2) => e1.tick - e2.tick).forEach(event => {\n\t\tevent.deltaTime = event.tick - lastTick;\n\t\tlastTick = event.tick;\n\t});\n};\n\n\nconst sliceTrack = (track, startTick, endTick) => {\n\ttrackDeltaToAbs(track);\n\n\tconst events = [];\n\tconst status = {};\n\n\ttrack.forEach(event => {\n\t\tif (event.tick >= startTick && event.tick <= endTick && event.subtype !== \"endOfTrack\")\n\t\t\tevents.push({\n\t\t\t\t...event,\n\t\t\t\ttick: event.tick - startTick,\n\t\t\t});\n\t\telse if (event.tick < startTick) {\n\t\t\tswitch (event.type) {\n\t\t\tcase \"meta\":\n\t\t\t\tstatus[event.subtype] = event;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\tObject.values(status).forEach(event => events.push({\n\t\t...event,\n\t\ttick: 0,\n\t}));\n\n\tevents.push({\n\t\ttick: endTick - startTick,\n\t\ttype: \"meta\",\n\t\tsubtype: \"endOfTrack\",\n\t});\n\n\ttrackAbsToDelta(events);\n\n\treturn events;\n};\n\n\nconst sliceMidi = (midi, startTick, endTick) => ({\n\theader: midi.header,\n\ttracks: midi.tracks.map(track => sliceTrack(track, startTick, endTick)),\n});\n\n\nconst TICKS_PER_BEATS = 480;\n\nconst EXCLUDE_MIDI_EVENT_SUBTYPES = [\n\t\"endOfTrack\", \"trackName\",\n\t\"noteOn\", \"noteOff\",\n];\n\n\nfunction encodeToMIDIData(notation, {startTime, unclosedNoteDuration = 30e+3} = {}) {\n\tnotation.microsecondsPerBeat = notation.microsecondsPerBeat || 500000;\n\n\tconst ticksPerBeat = TICKS_PER_BEATS;\n\tconst msToTicks = ticksPerBeat * 1000 / notation.microsecondsPerBeat;\n\n\tconst header = { formatType: 0, ticksPerBeat };\n\tconst track = [];\n\n\tif (!Number.isFinite(startTime)) {\n\t\tif (!notation.notes || !notation.notes[0])\n\t\t\tthrow new Error(\"encodeToMidiData: no start time specificed\");\n\n\t\tstartTime = notation.notes[0].start;\n\t}\n\n\ttrack.push({ time: startTime, type: \"meta\", subtype: \"copyrightNotice\", text: `Composed by MusicWdigets. BUILT on ${new Date(Number(process.env.VUE_APP_BUILD_TIME)).toDateString()}` });\n\n\tconst containsTempo = notation.events && notation.events.find(event => event.subtype == \"setTempo\");\n\tif (!containsTempo) {\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"timeSignature\", numerator: 4, denominator: 4, thirtyseconds: 8 });\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"setTempo\", microsecondsPerBeat: notation.microsecondsPerBeat });\n\t}\n\n\t//if (notation.correspondences)\n\t//\ttrack.push({ time: startTime, type: \"meta\", subtype: \"text\", text: \"find-corres:\" + notation.correspondences.join(\",\") });\n\n\tlet endTime = startTime || 0;\n\n\tif (notation.notes) {\n\t\tfor (const note of notation.notes) {\n\t\t\ttrack.push({\n\t\t\t\ttime: note.start,\n\t\t\t\ttype: \"channel\",\n\t\t\t\tsubtype: \"noteOn\",\n\t\t\t\tchannel: note.channel || 0,\n\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\tvelocity: note.velocity,\n\t\t\t\tfinger: note.finger,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, note.start);\n\n\t\t\tif (Number.isFinite(unclosedNoteDuration))\n\t\t\t\tnote.duration = note.duration || unclosedNoteDuration;\n\t\t\tif (note.duration) {\n\t\t\t\ttrack.push({\n\t\t\t\t\ttime: note.start + note.duration,\n\t\t\t\t\ttype: \"channel\",\n\t\t\t\t\tsubtype: \"noteOff\",\n\t\t\t\t\tchannel: note.channel || 0,\n\t\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\t\tvelocity: 0,\n\t\t\t\t});\n\n\t\t\t\tendTime = Math.max(endTime, note.start + note.duration);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (notation.events) {\n\t\tconst events = notation.events.filter(event => !EXCLUDE_MIDI_EVENT_SUBTYPES.includes(event.data.subtype));\n\t\tfor (const event of events) {\n\t\t\ttrack.push({\n\t\t\t\ttime: event.time,\n\t\t\t\t...event.data,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, event.time);\n\t\t}\n\t}\n\n\ttrack.push({ time: endTime + 100, type: \"meta\", subtype: \"endOfTrack\" });\n\n\ttrack.sort(function (e1, e2) { return e1.time - e2.time; });\n\n\t// append finger event after every noteOn event\n\ttrack.map((event, index) => ({event, index}))\n\t\t.filter(({event}) => event.subtype == \"noteOn\" && event.finger != null)\n\t\t.reverse()\n\t\t.forEach(({event, index}) => track.splice(index + 1, 0, {\n\t\t\ttime: event.time,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `fingering(${event.finger})`,\n\t\t}));\n\n\ttrack.forEach(event => event.ticks = Math.round((event.time - startTime) * msToTicks));\n\ttrack.forEach((event, i) => event.deltaTime = (event.ticks - (i > 0 ? track[i - 1].ticks : 0)));\n\n\treturn {header, tracks: [track]};\n};\n\n\nfunction encodeToMIDI(notation, options) {\n\tconst data = encodeToMIDIData(notation, options);\n\treturn MIDI.encodeMidiFile(data);\n};\n\n\n\nmodule.exports = {\n\tsliceMidi,\n\tencodeToMIDIData,\n\tencodeToMIDI,\n};\n","\nconst MIDI = require(\"./source/inc/MIDI\");\nconst MusicNotation = require(\"./source/inc/MusicNotation\");\nconst MidiPlayer = require(\"./source/inc/MidiPlayer.js\");\nconst Matcher = require(\"./source/inc/Matcher\");\nconst MidiUtils = require(\"./source/inc/MidiUtils.js\");\n\n\n\nmodule.exports = {\n\tMIDI,\n\tMusicNotation,\n\tMidiPlayer,\n\tMatcher,\n\tMidiUtils,\n};\n","import pick from 'lodash/pick';\n\nimport { MusicNotation, MIDI } from '@k-l-lambda/music-widgets';\n\n//import {MeasureLayout, LayoutType} from\nimport { ImplicitType, ChordPosition } from './types';\n\nconst WHOLE_DURATION_MAGNITUDE = 1920;\nconst TICKS_PER_BEAT = WHOLE_DURATION_MAGNITUDE / 4;\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ninterface StaffNoteProperties {\n\trest: boolean;\n\ttied: boolean;\n\toverlapped: boolean;\n\timplicitType: ImplicitType;\n\tafterGrace: boolean;\n\tchordPosition: ChordPosition;\n\tdivision: number;\n\n\tcontextIndex: number;\n\tstaffTrack: number;\n}\n\ninterface MetaNote extends MusicNotation.Note, Partial {\n\tid: string;\n\tmeasure: number;\n\tendTick: number;\n}\n\ninterface SubNote {\n\tstartTick: number;\n\tendTick: number;\n\tpitch: number;\n\tvelocity?: number;\n}\n\ninterface MeasureNote extends Partial {\n\ttick: number;\n\tpitch: number;\n\tduration: number;\n\tchordPosition: ChordPosition;\n\tstaff: number;\n\n\ttrack: number;\n\tchannel: number;\n\tid: string;\n\tids: string[];\n\n\tsubNotes: SubNote[];\n}\n\ninterface MeasureEvent {\n\tdata: any;\n\ttrack: number;\n\tticks?: number;\n}\n\ninterface Measure {\n\ttick: number;\n\tduration: number;\n\n\tnotes: MeasureNote[];\n\tevents?: MeasureEvent[];\n\ttimeSignature?: Fraction;\n\tkeySignature?: number;\n}\n\ninterface PerformOptions {\n\twithRestTied?: boolean;\n}\n\ninterface MidiEvent extends MIDI.MidiEvent {\n\tticks?: number;\n\tmeasure?: number;\n\tids?: string[];\n\tstaffTrack?: number;\n\tstaff?: number;\n}\ntype MidiTrack = MidiEvent[];\n\nconst EXTRA_NOTE_FIELDS = ['rest', 'tied', 'overlapped', 'implicitType', 'afterGrace', 'contextIndex', 'staffTrack', 'chordPosition', 'division'];\nconst COMMON_NOTE_FIELDS = ['id', 'ids', 'pitch', 'velocity', 'track', 'channel', ...EXTRA_NOTE_FIELDS];\n\nclass MetaNotation {\n\t//pitchContextGroup: PitchContextTable[];\n\t//measureLayout: MeasureLayout;\n\tmeasures: Measure[];\n\n\ttrackNames: string[];\n\tidTrackMap: { [key: string]: number };\n\n\tripe: boolean = false;\n\n\tstatic fromAbsoluteNotes(notes: MetaNote[], measureHeads: number[], data?: Partial): MetaNotation {\n\t\tconst notation = new MetaNotation(data);\n\n\t\tnotation.measures = Array(measureHeads.length)\n\t\t\t.fill(null)\n\t\t\t.map((__, i) => {\n\t\t\t\tconst tick = measureHeads[i];\n\t\t\t\tconst duration = measureHeads[i + 1] ? measureHeads[i + 1] - tick : 0;\n\n\t\t\t\tconst mnotes = notes\n\t\t\t\t\t.filter((note) => note.measure === i + 1)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(note) =>\n\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\ttick: note.startTick - tick,\n\t\t\t\t\t\t\t\tduration: note.endTick - note.startTick,\n\t\t\t\t\t\t\t\t...pick(note, COMMON_NOTE_FIELDS),\n\t\t\t\t\t\t\t\tsubNotes: [],\n\t\t\t\t\t\t\t} as MeasureNote)\n\t\t\t\t\t);\n\n\t\t\t\t// reduce note data size\n\t\t\t\tmnotes.forEach((mn) =>\n\t\t\t\t\t['rest', 'tied', 'implicitType', 'afterGrace'].forEach((field) => {\n\t\t\t\t\t\tif (!mn[field]) delete mn[field];\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes: mnotes,\n\t\t\t\t};\n\t\t\t});\n\n\t\tnotation.idTrackMap = notes.reduce((map, note) => {\n\t\t\tif (note.id) map[note.id] = note.track;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn notation;\n\t}\n\n\tstatic performAbsoluteNotes(abNotes: MetaNote[], { withRestTied = false }: PerformOptions = {}): MusicNotation.Note[] {\n\t\tconst notes = abNotes\n\t\t\t.filter((note) => (withRestTied || (!note.rest && !note.tied)) && !note.overlapped)\n\t\t\t.map((note) => ({\n\t\t\t\tmeasure: note.measure,\n\t\t\t\tchannel: note.channel,\n\t\t\t\ttrack: note.track,\n\t\t\t\tstart: note.start,\n\t\t\t\tstartTick: note.startTick,\n\t\t\t\tendTick: note.endTick,\n\t\t\t\tpitch: note.pitch,\n\t\t\t\tduration: note.duration,\n\t\t\t\tvelocity: note.velocity || 127,\n\t\t\t\tid: note.id,\n\t\t\t\tids: note.ids,\n\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\tcontextIndex: note.contextIndex,\n\t\t\t\timplicitType: note.implicitType,\n\t\t\t\tchordPosition: note.chordPosition,\n\t\t\t}));\n\n\t\tconst noteMap = notes.reduce((map, note) => {\n\t\t\tconst key = `${note.channel}|${note.start}|${note.pitch}`;\n\t\t\tconst priorNote = map[key];\n\t\t\tif (priorNote) priorNote.ids.push(...note.ids);\n\t\t\telse map[key] = note;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(noteMap);\n\t}\n\n\tconstructor(data?: Partial) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\t/*get ordinaryMeasureIndices (): number[] {\n\t\tif (this.measureLayout)\n\t\t\treturn this.measureLayout.serialize(LayoutType.Ordinary);\n\n\t\treturn Array(this.measures.length).fill(null).map((_, i) => i + 1);\n\t}*/\n\n\t// In Lilypond 2.20.0, minus tick value at the head of a track result in MIDI event time bias,\n\t//\tSo store the bias values to correct MIDI time from lilyond.\n\tget trackTickBias(): { [key: string]: number } {\n\t\tconst headMeasure = this.measures[0];\n\t\treturn this.trackNames.reduce((map, name, track) => {\n\t\t\tmap[name] = 0;\n\t\t\tif (headMeasure) {\n\t\t\t\tconst note = headMeasure.notes.find((note) => note.track === track);\n\t\t\t\tif (note) map[name] = Math.min(note.tick, 0);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget idSet(): Set {\n\t\treturn this.measures.reduce(\n\t\t\t(set, measure) => (measure.notes.filter((note) => !note.rest).forEach((note) => note.ids.forEach((id) => set.add(id))), set),\n\t\t\tnew Set()\n\t\t);\n\t}\n\n\ttoJSON() {\n\t\treturn {\n\t\t\t__prototype: 'LilyNotation',\n\t\t\t//pitchContextGroup: this.pitchContextGroup,\n\t\t\t//measureLayout: this.measureLayout,\n\t\t\tmeasures: this.measures,\n\t\t\tidTrackMap: this.idTrackMap,\n\t\t\ttrackNames: this.trackNames,\n\t\t\tripe: this.ripe,\n\t\t};\n\t}\n\n\ttoAbsoluteNotes(measureIndices: number[] /*= this.ordinaryMeasureIndices*/): MetaNote[] {\n\t\tlet measureTick = 0;\n\t\tconst measureNotes: MetaNote[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst notes = measure.notes.map((mnote) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartTick: measureTick + mnote.tick,\n\t\t\t\t\tendTick: measureTick + mnote.tick + mnote.duration,\n\t\t\t\t\tstart: measureTick + mnote.tick,\n\t\t\t\t\tduration: mnote.duration,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t\t...pick(mnote, COMMON_NOTE_FIELDS),\n\t\t\t\t} as MetaNote;\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn notes;\n\t\t});\n\n\t\treturn [].concat(...measureNotes);\n\t}\n\n\t/*getMeasureIndices (type: LayoutType) {\n\t\treturn this.measureLayout.serialize(type);\n\t}*/\n\n\ttoPerformingNotation(measureIndices: number[] /*= this.ordinaryMeasureIndices*/, options: PerformOptions = {}): MusicNotation.Notation {\n\t\t//console.debug(\"toPerformingNotation:\", this, measureIndices);\n\t\tconst abNotes = this.toAbsoluteNotes(measureIndices);\n\t\tconst notes = MetaNotation.performAbsoluteNotes(abNotes, options);\n\n\t\t//const lastNote = notes[notes.length - 1];\n\t\tconst endTime = Math.max(...notes.map((note) => note.start + note.duration));\n\n\t\tconst endTick = measureIndices.reduce((tick, index) => tick + this.measures[index - 1].duration, 0);\n\n\t\tconst notation = new MusicNotation.Notation({\n\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\tmeta: {},\n\t\t\ttempos: [], // TODO\n\t\t\tchannels: [notes],\n\t\t\tendTime,\n\t\t\tendTick,\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\ttoPerformingMIDI(measureIndices: number[], { trackList }: { trackList?: boolean[] } = {}): MIDI.MidiData & { zeroTick: number } {\n\t\tif (!measureIndices.length) return null;\n\n\t\t// to avoid begin minus tick\n\t\tconst zeroTick = -Math.min(0, ...(this.measures[0]?.events.map((e) => e.ticks) || []), ...(this.measures[0]?.notes.map((note) => note.tick) || []));\n\n\t\tlet measureTick = zeroTick;\n\t\tconst measureEvents: MeasureEvent[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst events = measure.events.map((mevent) => ({\n\t\t\t\tticks: measureTick + mevent.ticks,\n\t\t\t\ttrack: mevent.track,\n\t\t\t\tdata: {\n\t\t\t\t\t...mevent.data,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn events;\n\t\t});\n\n\t\tconst eventPriority = (event: MidiEvent): number => event.ticks + (event.subtype === 'noteOff' ? -1e-8 : 0);\n\n\t\tconst tracks: MidiTrack[] = [].concat(...measureEvents).reduce((tracks, mevent) => {\n\t\t\ttracks[mevent.track] = tracks[mevent.track] || [];\n\t\t\ttracks[mevent.track].push({\n\t\t\t\tticks: mevent.ticks,\n\t\t\t\t...mevent.data,\n\t\t\t});\n\n\t\t\treturn tracks;\n\t\t}, []);\n\n\t\ttracks[0] = tracks[0] || [];\n\t\t/*tracks[0].push({\n\t\t\tticks: 0,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `${npmPackage.name} ${npmPackage.version}`,\n\t\t});*/\n\n\t\t// append note events\n\t\tmeasureTick = zeroTick;\n\t\tmeasureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\t\t\tif (!Number.isFinite(measure.duration)) return;\n\n\t\t\tmeasure.notes.forEach((note) => {\n\t\t\t\tif (trackList && !trackList[note.track]) return;\n\n\t\t\t\tif (note.rest) return;\n\n\t\t\t\tconst tick = measureTick + note.tick;\n\n\t\t\t\tconst track = (tracks[note.track] = tracks[note.track] || []);\n\n\t\t\t\tnote.subNotes.forEach((subnote) => {\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.startTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: subnote.velocity,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.endTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: 0,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\t\t});\n\n\t\tconst finalTick = measureTick;\n\n\t\t// ensure no empty track\n\t\tfor (let t = 0; t < tracks.length; ++t) tracks[t] = tracks[t] || [];\n\n\t\t// sort & make deltaTime\n\t\ttracks.forEach((events) => {\n\t\t\tevents.sort((e1, e2) => eventPriority(e1) - eventPriority(e2));\n\n\t\t\tlet ticks = 0;\n\t\t\tevents.forEach((event) => {\n\t\t\t\tevent.deltaTime = event.ticks - ticks;\n\t\t\t\tif (!Number.isFinite(event.deltaTime)) event.deltaTime = 0;\n\t\t\t\telse ticks = event.ticks;\n\t\t\t});\n\n\t\t\tevents.push({ deltaTime: Math.max(finalTick - ticks, 0), type: 'meta', subtype: 'endOfTrack' });\n\t\t});\n\n\t\treturn {\n\t\t\theader: {\n\t\t\t\tformatType: 0,\n\t\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\t},\n\t\t\ttracks,\n\t\t\tzeroTick,\n\t\t};\n\t}\n\n\ttoPerformingNotationWithEvents(measureIndices: number[], options: { trackList?: boolean[] } = {}): MusicNotation.Notation {\n\t\tif (!measureIndices.length) return null;\n\n\t\tconst { zeroTick, ...midi } = this.toPerformingMIDI(measureIndices, options);\n\t\tconst notation = MusicNotation.Notation.parseMidi(midi);\n\n\t\tassignNotationNoteDataFromEvents(notation);\n\n\t\tlet tick = zeroTick;\n\n\t\tnotation.measures = measureIndices.map((index) => {\n\t\t\tconst startTick = tick;\n\t\t\ttick += this.measures[index - 1].duration;\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\tstartTick,\n\t\t\t\tendTick: tick,\n\t\t\t};\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\t// find the MIDI event of setTempo in measures data, and change the value of microsecondsPerBeat\n\tsetTempo(bpm: number): boolean {\n\t\tlet found = false;\n\t\tfor (const measure of this.measures) {\n\t\t\tfor (const event of measure.events) {\n\t\t\t\tif (event.data.subtype === 'setTempo') {\n\t\t\t\t\tevent.data.microsecondsPerBeat = 60e6 / bpm;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn found;\n\t}\n}\n\nconst assignNotationNoteDataFromEvents = (midiNotation: MusicNotation.NotationData, fields = ['ids', 'measure', 'staffTrack']) => {\n\tconst noteId = (channel: number, pitch: number, tick: number): string => `${channel}|${pitch}|${tick}`;\n\n\tconst noteMap = midiNotation.notes.reduce((map, note) => {\n\t\tmap[noteId(note.channel, note.pitch, note.startTick)] = note;\n\n\t\treturn map;\n\t}, {});\n\n\tmidiNotation.events.forEach((event) => {\n\t\tif (event.data.subtype === 'noteOn') {\n\t\t\tconst id = noteId(event.data.channel, event.data.noteNumber, event.ticks);\n\t\t\tconst note = noteMap[id];\n\t\t\tconsole.assert(!!note, 'cannot find note of', id);\n\n\t\t\tif (note) Object.assign(note, pick(event.data, fields));\n\t\t}\n\t});\n};\n\nexport { MetaNote, MetaNotation, MidiEvent };\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","import _SHA256 from 'crypto-js/sha256';\n\nconst SHA256 = (source: string): Uint8Array => {\n\tconst { words, sigBytes } = _SHA256(source);\n\tconst uwords = words.map((x) => (x < 0 ? x + 0x100000000 : x));\n\tconst word_len = sigBytes / words.length;\n\n\treturn new Uint8Array(sigBytes).map((_, i) => (uwords[Math.floor(i / word_len)] >> ((3 - (i % word_len)) * 8)) & 0xff);\n};\n\ntype Hash = Uint8Array;\nconst HASH_LEN = 256;\n\nclass HashVector {\n\tfields: number[];\n\n\tstatic fromHash(hash: Hash): HashVector {\n\t\tconst fields = [];\n\t\tfor (const byte of hash) {\n\t\t\tfor (let b = 0; b < 8; ++b) fields.push((byte >> b) & 1 ? 1 : -1);\n\t\t}\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic fromString(source: string): HashVector {\n\t\tconst hash = SHA256(source);\n\t\treturn HashVector.fromHash(hash);\n\t}\n\n\tstatic fromWords(words: string[]): HashVector {\n\t\tconst vs = words.map((word) => HashVector.fromString(word));\n\t\treturn vs.reduce((sum, v) => sum.add(v), HashVector.zero);\n\t}\n\n\tstatic concat(...vectors: HashVector[]): HashVector {\n\t\tconst fields = vectors.map((v) => v.fields).flat(1);\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tconstructor(fields: number[] | null = null) {\n\t\tthis.fields = fields || Array(HASH_LEN).fill(0);\n\t}\n\n\tget length(): number {\n\t\treturn this.fields.length;\n\t}\n\n\ttoHash(): Hash {\n\t\treturn Uint8Array.from(\n\t\t\tArray(this.length / 8)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => {\n\t\t\t\t\tconst bits = this.fields.slice(i * 8, (i + 1) * 8);\n\n\t\t\t\t\treturn bits.reduce((byte, bit, b) => byte | ((bit > 0 ? 1 : 0) << b), 0);\n\t\t\t\t})\n\t\t) as Hash;\n\t}\n\n\tadd(vec: HashVector): this {\n\t\tthis.fields.forEach((value, i) => (this.fields[i] = value + vec.fields[i]));\n\n\t\treturn this;\n\t}\n\n\tscale(factor: number): this {\n\t\tthis.fields = this.fields.map((value) => value * factor);\n\n\t\treturn this;\n\t}\n\n\tsub(crop: number): HashVector {\n\t\tconst fields = crop > 0 ? this.fields.slice(0, crop) : this.fields.slice(crop);\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic get zero(): HashVector {\n\t\treturn new HashVector();\n\t}\n}\n\nconst odds = (byte: number): number => {\n\tlet result = 0;\n\tfor (let b = byte; b > 0; b >>= 1) {\n\t\tif (b % 2) ++result;\n\t}\n\n\treturn result;\n};\nconst ODDS = Array(2 ** 8)\n\t.fill(0)\n\t.map((_, i) => odds(i));\nconst ODDS_HEX = ODDS.reduce((table, odd, i) => ({ ...table, [('0' + i.toString(16)).slice(-2)]: odd }), {});\n\nconst countOnes = (hash: Hash): number => hash.reduce((sum, byte) => sum + ODDS[byte], 0);\n\nconst xorHashes = (hash1: Hash, hash2: Hash): Hash => hash1.map((byte, i) => byte ^ hash2[i]) as Hash;\n\nconst cosHashes = (hash1: Hash, hash2: Hash): number => {\n\tconst len = hash1.length * 8;\n\n\tconst xor = xorHashes(hash1, hash2);\n\tconst ones = countOnes(xor);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst cosBigInts = (hash1: bigint, hash2: bigint, len: number = HASH_LEN): number => {\n\tconst xor = hash1 ^ hash2;\n\tconst xor_hex = '0'.repeat(len / 4) + xor.toString(16);\n\n\tconst ones = Array(len / 8)\n\t\t.fill(0)\n\t\t.reduce((ones, _, i) => ones + ODDS_HEX[xor_hex.slice((i + 1) * -2, i ? i * -2 : undefined)], 0);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst i2hex = (i) => ('0' + i.toString(16)).slice(-2);\nconst hashToHex = (hash: Hash): string => Array.from(hash).map(i2hex).join('');\n\nconst hexToHash = (hex: string): Hash =>\n\tUint8Array.from(\n\t\tArray(hex.length / 2)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => hex.substring(i * 2, (i + 1) * 2))\n\t\t\t.map((x) => parseInt(x, 16))\n\t);\n\nconst hashToBigInt = (hash: Hash): bigint => {\n\t// __NOT_FOR_BROWSER_\n\treturn Array.from(hash).reduce((r, x) => r * 0x100n + BigInt(x), 0n);\n\t/*\n\t// _NOT_FOR_BROWSER__\n\tthrow new Error('BigInt not supported');\n\t//*/\n};\n\nconst hashFromWords = (words: string[]): Hash => HashVector.fromWords(words).toHash();\n\nexport { Hash, HashVector, cosHashes, cosBigInts, hashToHex, hexToHash, hashToBigInt, hashFromWords };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { cosHashes, Hash, hashToBigInt, hashToHex, HashVector } from './hashVector';\nimport { Performing, RegulationOptions, TermMeasure, TermVoice, VoiceMeasure, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ContextedTerm, EventTerm, TempoTerm, TermPitch, WHOLE_DURATION } from './term';\nimport { TokenType } from './token';\nimport { argmax, frac, fractionMul, noteToPitch, printFraction, reducedFraction } from './utils';\n\nexport const emptyVoiceFromStaffMeasure = (staff: TermMeasure, chiefVoice: boolean = false): VoiceMeasure => {\n\treturn {\n\t\tempty: true,\n\t\tduration: staff.duration,\n\t\ttickMap: {\n\t\t\t[0]: EventTerm.space({ duration: staff.duration, tick: 0 }),\n\t\t},\n\t\ttimeSignature: staff.timeSignature,\n\t\ttimeSigNumeric: staff.timeSigNumeric,\n\t\tkeySignature: staff.keySignature,\n\t\tcontextedTerms: staff.terms.filter((term) => term instanceof ContextedTerm && (!term.staffLevel || chiefVoice)) as ContextedTerm[],\n\t\tmarks: [],\n\t};\n};\n\nconst removeEmptyMeasuresInVoicesStaves = (staves: VoicesStaff[]): void => {\n\t//console.assert(staves[0] && staves[0].voices[0], 'voices is empty:', staves);\n\tif (!(staves[0] && staves[0].voices[0])) {\n\t\tconsole.warn('empty voices:', staves);\n\t\treturn;\n\t}\n\n\tconst measureCount = staves[0].voices[0].measures.length;\n\tconst measureEmpties = Array(measureCount)\n\t\t.fill(null)\n\t\t.map((_, m) => {\n\t\t\tfor (const staff of staves) {\n\t\t\t\tfor (const voice of staff.voices) {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tif (!measure.empty) return false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\tmeasureEmpties.forEach((empty, m) => {\n\t\tif (empty) {\n\t\t\tstaves.forEach((staff) =>\n\t\t\t\tstaff.voices.forEach((voice) => {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tmeasure.tickMap = {};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t});\n};\n\nconst markingTiesInVoice = (voice: TermVoice) => {\n\tconst events = [].concat(...voice.measures.map((m) => Object.values(m.tickMap).filter((event) => event instanceof EventTerm)));\n\t//console.log(\"events:\", events);\n\n\tfor (let i = 1; i < events.length; ++i) {\n\t\tconst event0 = events[i - 1];\n\t\tconst event1 = events[i];\n\t\tif (!event0.rest && !event1.rest) {\n\t\t\tif (event0.accessories.some((acc) => acc.type === TokenType.SlurBegin) && event1.accessories.some((acc) => acc.type === TokenType.SlurEnd)) {\n\t\t\t\tconst pitches = event0.pitches.filter((p0) => event1.pitches.some((p1) => p1.note === p0.note && p1.alter === p0.alter));\n\t\t\t\tif (pitches.length > 0) {\n\t\t\t\t\tevent0.tying = true;\n\t\t\t\t\tevent1.tied = true;\n\n\t\t\t\t\tpitches.forEach((p0) => {\n\t\t\t\t\t\tp0.tying = true;\n\t\t\t\t\t\tconst p1 = event1.pitches.find((p1) => p1.note === p0.note && p1.alter === p0.alter);\n\t\t\t\t\t\tp1.tied = true;\n\t\t\t\t\t});\n\n\t\t\t\t\t// remove slurs from accessories\n\t\t\t\t\tpitches.forEach(() => {\n\t\t\t\t\t\tconst si0 = event0.accessories.findIndex((acc) => acc.type === TokenType.SlurBegin);\n\t\t\t\t\t\tif (si0 >= 0) event0.accessories.splice(si0, 1);\n\n\t\t\t\t\t\tconst si1 = event1.accessories.findIndex((acc) => acc.type === TokenType.SlurEnd);\n\t\t\t\t\t\tif (si1 >= 0) event1.accessories.splice(si1, 1);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nclass Spartito extends SimpleClass {\n\tstatic className = 'Spartito';\n\n\tstavesCount: number;\n\tstaffGroups: number[][];\n\tmeasures: SpartitoMeasure[];\n\n\ttags: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.measures.forEach((measure) => (measure.staffGroups = this.staffGroups));\n\t}\n\n\tget regulated(): boolean {\n\t\treturn this.measures.every((m) => m.regulated);\n\t}\n\n\tget solidMeasureCount(): number {\n\t\treturn this.measures.filter((measure) => !measure.empty).length;\n\t}\n\n\tget measureIndexMapping(): number[] {\n\t\tlet n = 0;\n\t\treturn this.measures.map((measure) => {\n\t\t\treturn !measure.empty ? n++ : null;\n\t\t});\n\t}\n\n\tget headBPM(): number {\n\t\tfor (const measure of this.measures) {\n\t\t\tif (measure.marks) {\n\t\t\t\tconst tempoMark = measure.marks.find((mark) => mark instanceof TempoTerm && mark.isValid()) as TempoTerm;\n\t\t\t\tif (tempoMark) return tempoMark.bpm;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget measureLayoutCode(): string {\n\t\tconst ms = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure, i) => ({\n\t\t\t\tindex: i + 1,\n\t\t\t\tvb: measure.voltaBegin,\n\t\t\t\tve: measure.voltaEnd,\n\t\t\t\talter: measure.alternative,\n\t\t\t\tleftSign: '',\n\t\t\t\trightSign: '',\n\t\t\t}));\n\t\tms.forEach((m, i) => {\n\t\t\tif (m.vb) {\n\t\t\t\tconst nextI = ms.slice(i + 1).findIndex((mm) => mm.vb);\n\t\t\t\tconst nextVBI = nextI >= 0 ? i + nextI : ms.length;\n\t\t\t\tif (ms.slice(i, nextVBI - 1).some((mm) => mm.ve))\n\t\t\t\t\t// check if volta range closed\n\t\t\t\t\tm.leftSign = '2*[';\n\t\t\t}\n\n\t\t\tif (m.ve) {\n\t\t\t\tconst pms = ms.slice(0, i + 1).reverse();\n\t\t\t\tconst lastVEI = pms.slice(1).findIndex((mm) => mm.ve);\n\t\t\t\tif (lastVEI >= 0) {\n\t\t\t\t\tif (!pms.slice(1, lastVEI + 1).some((mm) => mm.vb))\n\t\t\t\t\t\t// ignore unclosed right volta\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m.alter) {\n\t\t\t\t\tconst lastMI = pms.findIndex((m) => !m.alter);\n\t\t\t\t\tif (lastMI > 0) {\n\t\t\t\t\t\tpms[lastMI].rightSign = ']';\n\t\t\t\t\t\tpms[lastMI - 1].leftSign = '{[';\n\n\t\t\t\t\t\tm.rightSign = '],';\n\n\t\t\t\t\t\tif (ms[i + 1]) ms[i + 1].rightSign = '},';\n\t\t\t\t\t}\n\t\t\t\t} else m.rightSign = '],';\n\n\t\t\t\tif (!pms.some((m) => m.vb)) ms[0].leftSign = '2*[';\n\t\t\t}\n\t\t});\n\n\t\treturn ms\n\t\t\t.map((m) => m.leftSign + m.index.toString() + m.rightSign + (m.rightSign ? '' : ','))\n\t\t\t.join(' ')\n\t\t\t.replace(/,$/, '');\n\t}\n\n\tget qualityScore(): number {\n\t\tconst measures = this.measures.filter((measure) => !measure.empty);\n\t\tconst qss = measures.map(evaluateMeasure).map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\t//console.log('qss:', qss);\n\n\t\treturn measures.length ? sum / measures.length : null;\n\t}\n\n\tdumpEvaluations(): void {\n\t\tconst es = this.measures.filter((measure) => !measure.empty).map((m) => ({ measureIndex: m.measureIndex, ...evaluateMeasure(m) }));\n\t\tconst qss = es.map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\tconsole.log('qualityScore:', sum / es.length);\n\n\t\tconsole.table(es);\n\t}\n\n\tregulate(options: RegulationOptions = {}): void {\n\t\tthis.measures.forEach((m) => m.regulated || m.regulate(options));\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.measures.forEach((m) => (m.voices = null));\n\t}\n\n\t// measures' estimatedDuration should be valid\n\trectifyTimeSignatures(logger: Logger = new DummyLogger()): void {\n\t\tconst mis = this.measures\n\t\t\t.map((measure, index) => ({ measure, index }))\n\t\t\t.filter(({ measure, index }) => !index || measure.timeSignatureChanged)\n\t\t\t.map(({ index }) => index);\n\t\tconst segments = mis\n\t\t\t.map((index, si) => this.measures.slice(index, si < mis.length - 1 ? mis[si + 1] : this.measures.length))\n\t\t\t.map((ms) => ms.filter((m) => m.estimatedDuration > 0))\n\t\t\t.filter((seg) => seg.length >= 3 || seg.some((measure) => measure.doubtfulTimesig));\n\t\t//console.log(\"segments:\", segments.map(ms => ms.map(m => m.measureIndex)));\n\n\t\tsegments.forEach((measures) => {\n\t\t\tif (measures[0].patched) {\n\t\t\t\t// rectify according to patched head measure\n\t\t\t\tconst newTimeSignature = measures[0].timeSignature;\n\t\t\t\tconst measuresToFix = measures\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t.filter((measure) => !measure.patched && printFraction(measure.timeSignature) !== printFraction(newTimeSignature));\n\t\t\t\tif (measuresToFix.length) {\n\t\t\t\t\tconst originTimeSignature = measuresToFix[0].timeSignature;\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by patched head:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${printFraction(newTimeSignature)}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst originTimeSignature = measures[0].timeSignature;\n\t\t\tconst regularD = Number.isInteger(Math.log2(originTimeSignature.denominator));\n\n\t\t\tlet denominator = regularD ? 4 : 8;\n\t\t\tif (regularD) denominator = Math.max(denominator, measures[0].timeSignature.denominator);\n\n\t\t\tconst numerators = measures.map((measure) => Math.round((measure.estimatedDuration * denominator) / WHOLE_DURATION));\n\t\t\tconst countings = Object.entries(numerators.reduce((c, n) => ((c[n] = (c[n] || 0) + 1), c), {} as Record)).sort(\n\t\t\t\t(p1, p2) => p2[1] - p1[1]\n\t\t\t);\n\t\t\tconst peakCount = countings[0][1];\n\t\t\tconst candidateNumerators = countings.filter(([_, c]) => c > peakCount * 0.6);\n\t\t\tconst bestCounting = candidateNumerators.reduce((best, c) => (Number(c[0]) > Number(best[0]) ? c : best));\n\t\t\tif (bestCounting[1] > 1) {\n\t\t\t\t//console.log(\"countings:\", countings, bestCounting[0]);\n\t\t\t\tlet numerator = Number(bestCounting[0]);\n\t\t\t\tif (!regularD || originTimeSignature.denominator * numerator !== originTimeSignature.numerator * denominator) {\n\t\t\t\t\tif (regularD && denominator !== originTimeSignature.denominator) {\n\t\t\t\t\t\tconst reducedN = (numerator * originTimeSignature.denominator) / denominator;\n\t\t\t\t\t\tif (Number.isInteger(reducedN)) {\n\t\t\t\t\t\t\tnumerator = reducedN;\n\t\t\t\t\t\t\tdenominator = originTimeSignature.denominator;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst measuresToFix = measures.filter((measure) => !measure.patched);\n\n\t\t\t\t\tconst newTimeSignature = frac(numerator, denominator);\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by estimation:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${numerator}/${denominator}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tmakeVoiceStaves(): VoicesStaff[] {\n\t\tthis.regulate();\n\n\t\tconst voiceCount = Math.max(...this.measures.map((measure) => measure.voices.length));\n\t\tif (!voiceCount || !Number.isFinite(voiceCount)) return null;\n\n\t\t// mark tied pitches for patched measues\n\t\tthis.measures\n\t\t\t.filter((measure) => measure.patched)\n\t\t\t.forEach((measure) => {\n\t\t\t\tmeasure.events.forEach((event) => {\n\t\t\t\t\tif (event.tied) event.pitches.forEach((pitch) => (pitch.tied = true));\n\t\t\t\t});\n\t\t\t});\n\n\t\t// Move courtesy clefs to the next measure.\n\t\t// A courtesy clef that appears after all events on its staff announces the\n\t\t// clef change for the next measure rather than applying to the current one.\n\t\tfor (let mi = 0; mi < this.measures.length - 1; mi++) {\n\t\t\tconst measure = this.measures[mi];\n\t\t\tconst nextMeasure = this.measures[mi + 1];\n\t\t\tif (!measure.contexts || !nextMeasure?.contexts) continue;\n\n\t\t\tfor (let si = 0; si < measure.contexts.length; si++) {\n\t\t\t\tconst ctxList = measure.contexts[si];\n\t\t\t\tif (!ctxList) continue;\n\n\t\t\t\tconst staffEvents = measure.events?.filter((e: any) => e.staff === si) || [];\n\t\t\t\tconst maxEventX = staffEvents.reduce((max: number, e: any) => Math.max(max, e.x || 0), -Infinity);\n\t\t\t\tif (!Number.isFinite(maxEventX)) continue;\n\n\t\t\t\tconst deferred: ContextedTerm[] = [];\n\t\t\t\tmeasure.contexts[si] = ctxList.filter((term) => {\n\t\t\t\t\tif (term.type === 0 /* ContextType.Clef */ && term.x > maxEventX) {\n\t\t\t\t\t\tdeferred.push(term);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\n\t\t\t\tif (deferred.length > 0 && nextMeasure.contexts[si]) {\n\t\t\t\t\tdeferred.forEach((term) => (term.tick = 0));\n\t\t\t\t\tnextMeasure.contexts[si] = [...deferred, ...nextMeasure.contexts[si]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// [measure, voice]\n\t\tconst measures: VoiceMeasure[][] = this.measures.map((measure /*, mi*/) => {\n\t\t\tconsole.assert(measure.validRegulated, '[makeVoiceStaves] measure is invalid:', measure);\n\n\t\t\tconst eventMap: { [key: number]: EventTerm } = {};\n\t\t\tmeasure.events.forEach((event) => (eventMap[event.id] = event));\n\n\t\t\tconst leftStaves = new Set(\n\t\t\t\tArray(measure.contexts.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, i) => i)\n\t\t\t);\n\n\t\t\tlet bar = null;\n\t\t\tif (measure.barType) {\n\t\t\t\tswitch (measure.barType) {\n\t\t\t\t\tcase 'Segment':\n\t\t\t\t\t\tbar = '||';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Terminal':\n\t\t\t\t\t\tbar = '|.';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst voices: VoiceMeasure[] = measure.voices.map((ids /*, vi*/) => {\n\t\t\t\tconst events = ids.map((id) => eventMap[id]);\n\t\t\t\tevents.sort((e1, e2) => e1.tick - e2.tick);\n\n\t\t\t\tconst tickMap = {};\n\t\t\t\tlet tick = 0;\n\t\t\t\tlet lastEvent = null;\n\t\t\t\tfor (const event of events) {\n\t\t\t\t\tif (!Number.isFinite(event?.tick)) {\n\t\t\t\t\t\tconsole.warn('invalid event tick:', event);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (event.tick > tick) tickMap[tick] = EventTerm.space({ tick, duration: event.tick - tick });\n\t\t\t\t\telse if (!event.grace && event.tick < tick && lastEvent)\n\t\t\t\t\t\tlastEvent.timeWarp = reducedFraction(event.tick - lastEvent.tick, lastEvent.duration);\n\t\t\t\t\t//console.log(\"timewarp:\", event.tick - lastEvent.tick, lastEvent.duration, lastEvent.timeWarp);\n\n\t\t\t\t\ttickMap[event.tick] = event;\n\n\t\t\t\t\tif (!event.zeroHolder) {\n\t\t\t\t\t\ttick = Math.round(event.tick + event.duration);\n\t\t\t\t\t\tlastEvent = event;\n\n\t\t\t\t\t\t// sub grace events\n\t\t\t\t\t\tif (event.graceIds) {\n\t\t\t\t\t\t\tevent.graceIds.forEach((id) => {\n\t\t\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\t\t\tif (grace) tickMap[grace.tick] = grace;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (measure.endEvent && measure.endEvent.graceIds) {\n\t\t\t\t\tmeasure.endEvent.graceIds.forEach((id) => {\n\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\tif (grace && (!lastEvent || grace.staff === lastEvent.staff)) tickMap[grace.tick] = grace;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (tick < measure.duration) tickMap[tick] = EventTerm.space({ tick, duration: measure.duration - tick });\n\t\t\t\telse if (tick > measure.duration && Number.isFinite(measure.duration))\n\t\t\t\t\t//console.warn(\"duration out of range:\", tick, column.duration, mi, vi);\n\t\t\t\t\tlastEvent.timeWarp = reducedFraction(measure.duration - lastEvent.tick, lastEvent.duration);\n\n\t\t\t\tconsole.assert(\n\t\t\t\t\t!lastEvent || !lastEvent.timeWarp || (Number.isInteger(lastEvent.timeWarp.numerator) && Number.isInteger(lastEvent.timeWarp.denominator)),\n\t\t\t\t\t'invalid time warp:',\n\t\t\t\t\tlastEvent\n\t\t\t\t);\n\n\t\t\t\tconst staffIndex = events[0] ? events[0].staff : 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\n\t\t\t\t//const row = measure.rows[staffIndex];\n\t\t\t\tconst contextedTerms = measure.contexts[staffIndex];\n\n\t\t\t\tconst tailEvent = events[events.length - 1];\n\t\t\t\tconst tailStaff = tailEvent ? tailEvent.staff : 0;\n\n\t\t\t\t// TODO: modify full measure rests duration\n\n\t\t\t\treturn {\n\t\t\t\t\ttickMap,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t...basic,\n\t\t\t\t\t// TODO: consider staff altered voice\n\t\t\t\t\tcontextedTerms,\n\t\t\t\t\tmarks: [],\n\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\theadStaff: staffIndex,\n\t\t\t\t\ttailStaff,\n\t\t\t\t\tbar,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\twhile (voices.length < voiceCount) {\n\t\t\t\tconst staffIndex = leftStaves.values().next().value || 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\t\t\t\tconst terms = measure.contexts[staffIndex];\n\n\t\t\t\tconst chiefVoice = voices.every((voice) => voice.headStaff !== staffIndex);\n\n\t\t\t\tconst voice = emptyVoiceFromStaffMeasure(\n\t\t\t\t\t{\n\t\t\t\t\t\tterms,\n\t\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t\t...basic,\n\t\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\t},\n\t\t\t\t\tchiefVoice\n\t\t\t\t);\n\t\t\t\tvoice.headStaff = staffIndex;\n\t\t\t\tvoice.tailStaff = staffIndex;\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\n\t\t\treturn voices;\n\t\t});\n\n\t\t// compute traits for voice-measures\n\t\tmeasures.forEach((voices) =>\n\t\t\tvoices.forEach((measure) => {\n\t\t\t\tconst words = [];\n\n\t\t\t\tif (!measure.empty) {\n\t\t\t\t\twords.push(`s${measure.headStaff}`);\n\t\t\t\t\twords.push(`s${measure.tailStaff}`);\n\t\t\t\t}\n\n\t\t\t\tObject.values(measure.tickMap).forEach((event) => {\n\t\t\t\t\tif (event instanceof EventTerm) {\n\t\t\t\t\t\twords.push(`s${event.staff}`);\n\n\t\t\t\t\t\tif (event.stemDirection) {\n\t\t\t\t\t\t\tconst sd = `st${event.staff}-${event.stemDirection}`;\n\t\t\t\t\t\t\twords.push(sd, sd);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.grace) words.push(`gd${event.mainDuration}`);\n\t\t\t\t\t\telse words.push(`d${event.mainDuration}`);\n\n\t\t\t\t\t\tif (event.rest) words.push('r-' + event.rest);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tevent.pitches.forEach((pitch) => {\n\t\t\t\t\t\t\t\twords.push(`p1-${pitch.note}`);\n\t\t\t\t\t\t\t\twords.push(`p8-${Math.round(pitch.note / 8)}`);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmeasure.trait = HashVector.fromWords(words);\n\t\t\t})\n\t\t);\n\t\t//console.log(\"measure traits:\");\n\t\t//console.table(measures.map(voices => voices.map(measure => hashToHex(measure.trait.toHash()))));\n\n\t\tconst staffToGroup: Record = this.staffGroups\n\t\t\t.flat(1)\n\t\t\t.reduce((map, si) => ((map[si] = this.staffGroups.findIndex((group) => group.includes(si))), map), {});\n\n\t\t// sort voices to connect voices between neighhoring measures\n\t\tconst voiceTraits = Array(voiceCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => ({ vector: HashVector.zero, index, weight: 0, headStaff: null }));\n\t\tmeasures.forEach((voices, mi) => {\n\t\t\tvoiceTraits.sort((v1, v2) => v2.weight - v1.weight);\n\n\t\t\tconst leftVoices = new Set(voices);\n\t\t\tvoiceTraits.forEach((voiceTrait) => {\n\t\t\t\tconst vs = [...leftVoices];\n\t\t\t\tlet measure = vs[0];\n\t\t\t\tif (mi > 0 && vs.length > 1) {\n\t\t\t\t\tconst consistencies = vs.map((measure) =>\n\t\t\t\t\t\tstaffToGroup[measure.headStaff] === staffToGroup[voiceTrait.headStaff]\n\t\t\t\t\t\t\t? cosHashes(voiceTrait.vector.toHash(), measure.trait.toHash())\n\t\t\t\t\t\t\t: -1\n\t\t\t\t\t);\n\t\t\t\t\tmeasure = vs[argmax(consistencies)];\n\t\t\t\t}\n\t\t\t\tleftVoices.delete(measure);\n\n\t\t\t\tmeasure.voiceIndex = voiceTrait.index;\n\t\t\t\tvoiceTrait.vector.scale(0.4).add(measure.trait);\n\n\t\t\t\tvoiceTrait.weight = Object.keys(measure.tickMap).length;\n\n\t\t\t\tif (mi === 0) voiceTrait.headStaff = measure.headStaff;\n\t\t\t});\n\n\t\t\tvoices.sort((m1, m2) => m1.voiceIndex - m2.voiceIndex);\n\t\t});\n\n\t\t//const staffTraits = Array(this.stavesCount).fill(null).map((_, si) => HashVector.fromString(`s${si}`).toHash());\n\t\tconst staffVoiceIndices = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map(() => []);\n\t\tvoiceTraits.forEach((trait) => {\n\t\t\t//const consistencies = staffTraits.map(staff => cosHashes(trait.vector.toHash(), staff));\n\t\t\t//staffVoiceIndices[argmax(consistencies)].push(trait.index);\n\t\t\tstaffVoiceIndices[trait.headStaff].push(trait.index);\n\t\t});\n\n\t\tconst staves = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, si) => {\n\t\t\t\tif (!measures[0]) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvoices: [],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t//const voiceIndicies = measures[0].map((voice, vi) => ({ voice, vi })).filter(({ voice }) => voice.headStaff === si).map(({ vi }) => vi);\n\t\t\t\tconst voiceIndicies = staffVoiceIndices[si];\n\n\t\t\t\tconst voices = voiceIndicies.map((vi): TermVoice => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmode: 'relative',\n\t\t\t\t\t\tmeasures: measures.map((m) => m[vi]),\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\treturn { voices };\n\t\t\t});\n\n\t\tremoveEmptyMeasuresInVoicesStaves(staves);\n\t\tstaves.forEach((staff) => staff.voices.forEach(markingTiesInVoice));\n\n\t\treturn staves;\n\t}\n\n\tperform(): Performing {\n\t\tconst staves = this.makeVoiceStaves();\n\t\tif (!staves) return null;\n\n\t\tconst tokenMap = new Map();\n\n\t\t// TODO: store staff channels in score\n\t\tconst staffToChannel = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.reduce((map, _, i) => {\n\t\t\t\tmap[i] = i;\n\t\t\t\treturn map;\n\t\t\t}, {});\n\n\t\tconst voiceChannels = [].concat(...staves.map((staff, si) => staff.voices.map(() => staffToChannel[si])));\n\n\t\tlet hasTempo = false;\n\n\t\tlet nextTick = 0;\n\t\tlet events0 = null;\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure) => {\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst voices: VoiceMeasure[] = [].concat(...staves.map((staff) => staff.voices.map((voice) => voice.measures[measureIndex])));\n\t\t\t\tconst voice0 = voices[0];\n\t\t\t\tconst tick = nextTick;\n\n\t\t\t\t//const signatureDuration = (WHOLE_DURATION * voice0.timeSignature.numerator) / voice0.timeSignature.denominator;\n\n\t\t\t\tnextTick += voice0.duration;\n\n\t\t\t\tconst notes = [].concat(\n\t\t\t\t\t...voices.map((measure, vi) => {\n\t\t\t\t\t\tconst tickFactor = 1; //measure.duration ? signatureDuration / measure.duration : 1;\n\n\t\t\t\t\t\tconst channel = voiceChannels[vi];\n\n\t\t\t\t\t\tconst chords = Object.values(measure.tickMap)\n\t\t\t\t\t\t\t.filter((term) => term instanceof EventTerm && !term.rest)\n\t\t\t\t\t\t\t.map((term: EventTerm) => {\n\t\t\t\t\t\t\t\tconst duration = Math.round(term.duration * tickFactor);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(term.tick), 'invalid event term tick:', term);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(duration), 'invalid event term duration:', term);\n\n\t\t\t\t\t\t\t\tif (term.tick >= 0) {\n\t\t\t\t\t\t\t\t\t// exclude minus tick tokens\n\t\t\t\t\t\t\t\t\tterm.noteIds.forEach((id) => {\n\t\t\t\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: term.roundX,\n\t\t\t\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(term.staff));\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttick: Math.round(term.tick * tickFactor),\n\t\t\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\t\t\tpitches: term.pitches,\n\t\t\t\t\t\t\t\t\tnoteIds: term.noteIds,\n\t\t\t\t\t\t\t\t\tpart,\n\t\t\t\t\t\t\t\t\tstaff: term.staff,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t\t...chords.map((chord) => {\n\t\t\t\t\t\t\t\t// exclude repeated pitches\n\t\t\t\t\t\t\t\tconst pitchMap: { [pitch: number]: TermPitch } = chord.pitches.reduce((map, pitch) => {\n\t\t\t\t\t\t\t\t\tmap[noteToPitch(pitch)] = pitch;\n\t\t\t\t\t\t\t\t\treturn map;\n\t\t\t\t\t\t\t\t}, {});\n\t\t\t\t\t\t\t\tconst pitches = Object.values(pitchMap).sort((p1, p2) => p1.note - p2.note);\n\n\t\t\t\t\t\t\t\treturn pitches\n\t\t\t\t\t\t\t\t\t.filter((pitch) => !pitch.tied)\n\t\t\t\t\t\t\t\t\t.map((pitch, i) => {\n\t\t\t\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\ttick: chord.tick,\n\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\t\t\t\ttrack: chord.part,\n\t\t\t\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tconst events = [];\n\t\t\t\tevents0 = events0 || events;\n\n\t\t\t\tif (measure.marks)\n\t\t\t\t\tmeasure.marks.forEach((mark) => {\n\t\t\t\t\t\tif (mark instanceof TempoTerm) {\n\t\t\t\t\t\t\tconst bpm = mark.bpm;\n\t\t\t\t\t\t\tif (mark.isValid()) {\n\t\t\t\t\t\t\t\tconst es = hasTempo ? events : events0; // set the first tempo to the beginning of the track\n\t\t\t\t\t\t\t\tconst tick = hasTempo ? mark.tick : 0;\n\t\t\t\t\t\t\t\tes.push({\n\t\t\t\t\t\t\t\t\ttrack: 0,\n\t\t\t\t\t\t\t\t\tticks: tick,\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\t\t\t\t\t\tmicrosecondsPerBeat: Math.round(60e6 / bpm),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\thasTempo = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents,\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tif (!hasTempo) {\n\t\t\tmeasures[0].events.push({\n\t\t\t\ttrack: 0,\n\t\t\t\tticks: 0,\n\t\t\t\tdata: {\n\t\t\t\t\ttype: 'meta',\n\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\tmicrosecondsPerBeat: 0.5e6, // TODO\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tperformByEstimation(): Performing {\n\t\tconst tokenMap = new Map();\n\t\tlet nextTick = 0;\n\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => measure.events.some((event) => event.predisposition))\n\t\t\t.map((measure) => {\n\t\t\t\tconst tick = nextTick;\n\t\t\t\tconst duration = Math.round(measure.estimatedDuration || fractionMul(WHOLE_DURATION, measure.timeSignature));\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\tnextTick += duration;\n\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst chords = measure.events.filter((event) => event.predisposition && event.predisposition.fake < 0.5 && !event.rest);\n\t\t\t\tconst notes = chords\n\t\t\t\t\t.map((chord) => {\n\t\t\t\t\t\tconst noteTick = Math.round(chord.predisposition.tick);\n\n\t\t\t\t\t\tchord.noteIds.forEach((id) => {\n\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\tx: chord.roundX,\n\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn chord.pitches.map((pitch, i) => {\n\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(chord.staff));\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttick: noteTick,\n\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\ttrack: part,\n\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\tchannel: 0,\n\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.flat(1);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents: [],\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tfeatureHash(): Hash {\n\t\tconst headMeasures = this.measures.slice(0, 16);\n\t\tconst measureWords = headMeasures.map((measure) => measure.featureWords);\n\n\t\tconst levels = [1, 4, 16].map((len) => {\n\t\t\tconst meaures = measureWords.slice(0, len).filter(Boolean);\n\t\t\tconst ys = meaures.map((words) => words[0]).flat(1);\n\t\t\tconst melodies = meaures.map((words) => words[1]).flat(1);\n\t\t\tconst rhythm = meaures.map((words) => words[2]).flat(1);\n\n\t\t\tconst [vecY, vecMelody, vecRhythm] = [ys, melodies, rhythm].map(HashVector.fromWords);\n\n\t\t\treturn HashVector.concat(vecY, vecMelody.sub(128), vecRhythm.sub(128));\n\t\t});\n\n\t\treturn HashVector.concat(...levels).toHash();\n\t}\n\n\tfeatureHashHex(): string {\n\t\treturn hashToHex(this.featureHash());\n\t}\n\n\tfeatureHashBigInt(): bigint {\n\t\treturn hashToBigInt(this.featureHash());\n\t}\n\n\tassignMeasureNumbers(): void {\n\t\tlet n = null as any;\n\t\tfor (const measure of this.measures) {\n\t\t\tif (!measure.discard && !measure.events.length) continue;\n\n\t\t\tif (measure.indent) n = null;\n\n\t\t\tif (!Number.isFinite(n)) n = measure.partialDuration ? 0 : 1;\n\n\t\t\tmeasure.measureNumber = n++;\n\t\t}\n\t}\n}\n\nexport { SpartitoMeasure, Spartito };\n","import { Fraction } from './interfaces';\nimport { ContextedTerm, ContextType } from './term';\nimport { Logger, DummyLogger } from './logger';\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nexport const mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst PHONETS = 'CDEFGAB';\n\nconst ALTER_NAMES = {\n\t[-2]: '\\u266D\\u266D',\n\t[-1]: '\\u266D',\n\t[0]: '\\u266E',\n\t[1]: '\\u266F',\n\t[2]: '\\uD834\\uDD2A',\n};\n\n/*\n\tCoordinates:\n\n\t\tnote:\n\t\t\tzero: the middle C line (maybe altered)\n\t\t\tpositive: high (right on piano keyboard)\n\t\t\tunit: a step in scales of the current staff key\n\n\t\tstaff Y:\n\t\t\tzero: the third (middle) line among 5 staff lines\n\t\t\tpositive: down\n\t\t\tunit: a interval between 2 neighbor staff lines\n*/\n\nexport default class StaffContext {\n\tlogger: Logger = new DummyLogger();\n\n\tclef: number = -3;\n\tkeyAlters: number[] = [];\n\toctaveShift: number = 0;\n\talters: number[] = [];\n\n\ttimeSignature: Fraction = {\n\t\tnumerator: 4,\n\t\tdenominator: 4,\n\t};\n\ttimeSigNumeric: boolean = false;\n\ttimeSigNumSet: boolean = false;\n\ttimeSigDenSet: boolean = false;\n\tdoubtingTimesig: boolean = true;\n\n\tchange(term: ContextedTerm) {\n\t\tswitch (term.type) {\n\t\t\tcase ContextType.Clef:\n\t\t\t\tthis.clef = term.clef;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.KeyAcc:\n\t\t\t\tthis.keyAlters[mod7(this.yToNote(term.y))] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.Acc:\n\t\t\t\tthis.alters[this.yToNote(term.y)] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.OctaveShift:\n\t\t\t\tthis.octaveShift = term.octaveShift;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureC:\n\t\t\t\tthis.timeSigNumeric = false;\n\t\t\t\tswitch (term.tokenType) {\n\t\t\t\t\tcase 'timesig-C44':\n\t\t\t\t\t\tthis.timeSignature.numerator = 4;\n\t\t\t\t\t\tthis.timeSignature.denominator = 4;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'timesig-C22':\n\t\t\t\t\t\tthis.timeSignature.numerator = 2;\n\t\t\t\t\t\tthis.timeSignature.denominator = 2;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureN:\n\t\t\t\tthis.timeSigNumeric = true;\n\t\t\t\tswitch (term.y) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (this.timeSigDenSet) this.timeSignature.denominator = this.timeSignature.denominator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.denominator = term.number;\n\n\t\t\t\t\t\tthis.timeSigDenSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase -1:\n\t\t\t\t\t\tif (this.timeSigNumSet) this.timeSignature.numerator = this.timeSignature.numerator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.numerator = term.number;\n\n\t\t\t\t\t\tthis.timeSigNumSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.logger.warn('unexpected time signature Y:', term.y);\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tresetMeasure() {\n\t\tthis.alters = [];\n\n\t\tthis.timeSigNumSet = false;\n\t\tthis.timeSigDenSet = false;\n\t}\n\n\tresetSystem() {\n\t\tthis.keyAlters = [];\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.keyAlters.filter((a) => Number.isInteger(a)).reduce((sum, a) => sum + a, 0);\n\t}\n\n\tget partialTimeSignature(): boolean {\n\t\treturn !this.timeSigNumSet !== !this.timeSigDenSet;\n\t}\n\n\tnoteToY(note: number): number {\n\t\treturn -note / 2 - this.clef - this.octaveShift * 3.5;\n\t}\n\n\tpitchToNote(pitch: number, { preferredAlter = null } = {}): { note: number; alter: number } {\n\t\tif (!preferredAlter) preferredAlter = this.keySignature < 0 ? -1 : 1;\n\n\t\tconst group = Math.floor((pitch - MIDDLE_C) / 12);\n\t\tconst gp = mod12(pitch);\n\t\tconst alteredGp = GROUP_N_TO_PITCH.includes(gp) ? gp : mod12(gp - preferredAlter);\n\t\tconst gn = GROUP_N_TO_PITCH.indexOf(alteredGp);\n\t\tthis.logger.assert(gn >= 0, 'invalid preferredAlter:', pitch, preferredAlter, alteredGp);\n\n\t\tconst naturalNote = group * 7 + gn;\n\n\t\tconst alterValue = gp - alteredGp;\n\t\tconst keyAlterValue = this.keyAlters[gn] || 0;\n\t\tconst onAcc = Number.isInteger(this.alters[naturalNote]);\n\n\t\tconst alter = onAcc ? alterValue : alterValue === keyAlterValue ? null : alterValue;\n\n\t\treturn { note: naturalNote, alter };\n\t}\n\n\tpitchToY(pitch: number, { preferredAlter = null } = {}): { y: number; alter: number } {\n\t\tconst { note, alter } = this.pitchToNote(pitch, { preferredAlter });\n\t\tconst y = this.noteToY(note);\n\n\t\treturn { y, alter };\n\t}\n\n\tyToNote(y: number): number {\n\t\tthis.logger.assert(Number.isInteger(y * 2), 'invalid y:', y);\n\n\t\treturn (-y - this.octaveShift * 3.5 - this.clef) * 2;\n\t}\n\n\talterOnNote(note: number): number {\n\t\tif (Number.isInteger(this.alters[note])) return this.alters[note];\n\n\t\tconst gn = mod7(note);\n\t\tif (Number.isInteger(this.keyAlters[gn])) return this.keyAlters[gn];\n\n\t\treturn 0;\n\t}\n\n\tnoteToPitch(note: number): number {\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tconst pitch = MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + this.alterOnNote(note);\n\t\tif (!Number.isFinite(pitch)) {\n\t\t\tthis.logger.warn('invalid pitch value:', pitch, note, group, gn);\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn pitch;\n\t}\n\n\tyToPitch(y: number): number {\n\t\treturn this.noteToPitch(this.yToNote(y));\n\t}\n\n\tyToPitchName(y: number): string {\n\t\tconst note = this.yToNote(y);\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tlet alter = this.alterOnNote(note);\n\t\tif (!alter && !Number.isInteger(this.alters[note])) alter = null;\n\n\t\treturn `${ALTER_NAMES[alter] ? ALTER_NAMES[alter] : ''}${PHONETS[gn]}${group + 4}`;\n\t}\n}\n","import sha1 from 'js-sha1';\n\nimport * as measureLayout from '../measureLayout';\nimport * as staffLayout from '../staffLayout';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { EventSystem, MeasureBrief, MusicSheet, RecognitionSettings, ScoreData, TermMeasure, TermStaff, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { PatchMeasure } from './patch';\nimport { Measure, Page, Staff, System } from './scoreComponents';\nimport { hashSemanticPoint, SemanticPoint, SemanticType } from './semanticPoint';\nimport { BOS_ELEMENT, fractionToElems, SemanticCluster, SemanticElement, SemanticElementType } from './semanticTopology';\nimport { Spartito, SpartitoMeasure } from './spartito';\nimport StaffContext from './staffContext';\nimport { ContextedTerm, ContextType, EventTerm, WHOLE_DURATION } from './term';\nimport type { SemanticPointInMeasure } from './timewiseGraph';\nimport { TimewiseGraph } from './timewiseGraph';\nimport { Token, TokenType } from './token';\nimport { distance2D, solveOverlapping } from './utils';\n\nexport const VERSION = 14;\n\ninterface Topology {\n\tclusters: SemanticCluster[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n}\n\nconst GRAND_STAFF_LAYOUT = '{-}';\n\nconst processStaffContext = (staff: TermStaff, logger: Logger = new DummyLogger()): void => {\n\tconst context = new StaffContext();\n\tcontext.logger = logger;\n\n\tfor (const row of staff.rows) {\n\t\tfor (const measure of row) {\n\t\t\tconst startEvent = measure.terms.find((term) => term instanceof EventTerm) as EventTerm;\n\t\t\tlet tick = startEvent ? Math.min(startEvent.tick, 0) : 0;\n\n\t\t\tmeasure.terms.forEach((term) => {\n\t\t\t\tif (term instanceof ContextedTerm) {\n\t\t\t\t\tterm.tick = tick; // TODO: not working here because measure not regulated yet\n\t\t\t\t\tcontext.change(term);\n\t\t\t\t} else if (term instanceof EventTerm) {\n\t\t\t\t\tconst endTick = term.tick + (term.duration || 0);\n\t\t\t\t\tif (endTick > tick) tick = endTick;\n\n\t\t\t\t\tif (term.ys) {\n\t\t\t\t\t\tterm.pitches = term.ys.map((y) => {\n\t\t\t\t\t\t\tconst note = context.yToNote(y);\n\t\t\t\t\t\t\tconst alter = context.alterOnNote(note);\n\n\t\t\t\t\t\t\treturn { note, alter, octaveShift: context.octaveShift };\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmeasure.timeSignature = { ...context.timeSignature };\n\t\t\tmeasure.timeSigNumeric = context.timeSigNumeric;\n\t\t\tmeasure.doubtfulTimesig =\n\t\t\t\tcontext.doubtingTimesig ||\n\t\t\t\t!Number.isInteger(Math.log2(measure.timeSignature.denominator)) ||\n\t\t\t\tmeasure.timeSignature.numerator <= measure.timeSignature.denominator / 4;\n\n\t\t\tmeasure.keySignature = context.keySignature;\n\n\t\t\t// fill empty measure duration\n\t\t\tif (measure.duration === 0) measure.duration = (WHOLE_DURATION * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\n\t\t\tcontext.resetMeasure();\n\t\t}\n\n\t\tcontext.resetSystem();\n\t}\n};\n\nconst upgradeScoreData = (data: ScoreData): ScoreData => {\n\tif (data.version < 3) {\n\t\tconst { version, stavesCount, layoutTemplate, ...fields } = data;\n\t\tvoid version;\n\t\tvoid layoutTemplate;\n\n\t\tlet staffLayoutCode =\n\t\t\tstavesCount > 1\n\t\t\t\t? Array(stavesCount - 1)\n\t\t\t\t\t\t.fill(',')\n\t\t\t\t\t\t.join('')\n\t\t\t\t: '';\n\n\t\t// use graph staff by default for 2 staves score\n\t\tif (stavesCount === 2) staffLayoutCode = '{-}';\n\n\t\tdata = {\n\t\t\tversion: 3,\n\t\t\tstaffLayoutCode,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tif (data.version < 8) {\n\t\t// upgrade system measure bar semantics\n\t\tdata.pages.forEach((page) => {\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tif (system.semantics) {\n\t\t\t\t\tconst bars = system.semantics.filter((point) => point.semantic === SemanticType.vline_BarMeasure);\n\n\t\t\t\t\tsystem.semantics = [].concat(\n\t\t\t\t\t\t...system.staves.map((staff) => {\n\t\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\n\t\t\t\t\t\t\treturn bars.map((point) => ({\n\t\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\t\ty: point.y + oy,\n\t\t\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\t\t\t...point.extension,\n\t\t\t\t\t\t\t\t\ty1: point.extension.y1 + oy,\n\t\t\t\t\t\t\t\t\ty2: point.extension.y2 + oy,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tdata.version = 8;\n\t}\n\n\tif (data.version < 9) {\n\t\t// remove old format spartito\n\t\tdata.spartito = null;\n\n\t\tdata.version = 9;\n\t}\n\n\treturn data;\n};\n\nconst bitsToMask = (bits: number[]): number => bits.reduce((mask, bit, i) => (bit ? mask | (1 << i) : mask), 0);\n\ninterface PointPosition {\n\tpoint: SemanticPoint;\n\tpageIndex: number;\n\tsystemIndex: number;\n\tstaffIndex: number;\n}\n\ninterface MeasureValidation {\n\ttickMap: { [tick: number]: number };\n}\n\ninterface Size {\n\twidth: number;\n\theight: number;\n}\n\nclass Score extends SimpleClass {\n\tstatic className = 'Score';\n\n\tversion = VERSION;\n\n\ttitle: string;\n\t// in pixels\n\tpageSize: Size;\n\tunitSize: number;\n\tstaffLayoutCode: string;\n\n\tpaperOptions?: Partial;\n\n\theaders: { [key: string]: string };\n\n\ttextAnnotations: { [id: string]: string };\n\n\ttags?: string[];\n\n\tinstrumentDict: { [key: string]: string };\n\n\tpages: Page[];\n\ttopology: Topology;\n\tspartito?: Spartito;\n\n\tpatches?: PatchMeasure[];\n\n\tsettings: RecognitionSettings;\n\n\tconstructor(data: ScoreData) {\n\t\tsuper();\n\t\tsuper.assign(upgradeScoreData(data));\n\n\t\tthis.pages = this.pages || [];\n\t\tthis.headers = this.headers || {};\n\t\tthis.instrumentDict = this.instrumentDict || {};\n\n\t\tthis.pageSize = this.pageSize || {\n\t\t\t// A4 paper\n\t\t\twidth: 794,\n\t\t\theight: 1122,\n\t\t};\n\n\t\tthis.unitSize = this.unitSize || null;\n\n\t\tthis.staffLayoutCode = this.staffLayoutCode || (this.maxStavesCount === 2 ? GRAND_STAFF_LAYOUT : Array(this.maxStavesCount).fill('').join(','));\n\t}\n\n\tget systems(): System[] {\n\t\treturn [].concat(...this.pages.map((page) => page.systems));\n\t}\n\n\tget measureCount(): number {\n\t\treturn this.systems.reduce((sum, system) => sum + (system.measureCount || 0), 0);\n\t}\n\n\tget imageKeys(): string[] {\n\t\treturn [\n\t\t\t...this.pages.map((page) => page.source?.url),\n\t\t\t...this.systems.map((system) => system.backgroundImage),\n\t\t\t...[].concat(\n\t\t\t\t...this.systems.map((system) =>\n\t\t\t\t\t[...system.staves.map((staff) => staff.backgroundImage), ...system.staves.map((staff) => staff.maskImage)].filter(Boolean)\n\t\t\t\t)\n\t\t\t),\n\t\t].filter(Boolean);\n\t}\n\n\tget breakSystemIndices(): number[] {\n\t\tconst indices = [];\n\t\tlet systemCount = 0;\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tif (i < this.pages.length - 1) {\n\t\t\t\tsystemCount += page.systems.length;\n\t\t\t\tindices.push(systemCount - 1);\n\t\t\t}\n\t\t});\n\n\t\treturn indices;\n\t}\n\n\tget staffLayout(): staffLayout.StaffLayout {\n\t\treturn staffLayout.parseCode(this.staffLayoutCode);\n\t}\n\n\tget measureLayoutCode(): string {\n\t\treturn this.spartito?.measureLayoutCode;\n\t}\n\n\tget maxStavesCount(): number {\n\t\treturn Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget semanticHash(): string {\n\t\tconst ids = [].concat(\n\t\t\t...this.systems.map((system) =>\n\t\t\t\t[].concat(...system.staves.map((staff) => (staff.semantics ? system.qualifiedSemantics(staff.semantics).map((s) => s.id) : [])))\n\t\t\t)\n\t\t);\n\t\treturn sha1(ids.join(''));\n\t}\n\n\teventSystemsToTermStaves(eventSystems: EventSystem[], logger: Logger = new DummyLogger()): TermStaff[] {\n\t\t// [staff]\n\t\tconst termStaves: TermStaff[] = Array(this.maxStavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, staffIndex): TermStaff => {\n\t\t\t\treturn {\n\t\t\t\t\t// [system, measure]\n\t\t\t\t\trows: eventSystems.map((sys, i) =>\n\t\t\t\t\t\tsys.columns.map((column, ii): TermMeasure => {\n\t\t\t\t\t\t\tconst measure = column.rows[staffIndex];\n\t\t\t\t\t\t\tconsole.assert(measure, '[eventSystemsToTermStaves] measure is null:', staffIndex, column.rows);\n\n\t\t\t\t\t\t\tconst contexts = measure.contexts;\n\n\t\t\t\t\t\t\t// prepend octave shift 0 at begin of every system\n\t\t\t\t\t\t\tif (ii === 0) {\n\t\t\t\t\t\t\t\tif (!contexts.some((term) => term.type === ContextType.OctaveShift)) {\n\t\t\t\t\t\t\t\t\tcontexts.unshift(\n\t\t\t\t\t\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\t\t\t\t\t\tstaff: staffIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\t\t\t\ttokenType: TokenType.OctaveShift0,\n\t\t\t\t\t\t\t\t\t\t\ttick: 0,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst terms = [...(measure.events || []), ...contexts].sort((t1, t2) => t1.x - t2.x);\n\n\t\t\t\t\t\t\tconst pageBreak = staffIndex === 0 && ii === sys.columns.length - 1 && this.breakSystemIndices.includes(i);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tterms,\n\t\t\t\t\t\t\t\t//xToTick: column.xToTick,\n\t\t\t\t\t\t\t\tduration: column.duration,\n\t\t\t\t\t\t\t\tpageBreak,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\ttermStaves.forEach((staff) => processStaffContext(staff, logger));\n\n\t\treturn termStaves;\n\t}\n\n\tresetPageLayout(parameters: { unitSize?: number; pageSize?: Size }) {\n\t\tconst { unitSize = this.unitSize, pageSize = this.pageSize } = parameters;\n\n\t\tconst newCenter = {\n\t\t\tx: (pageSize.width * 0.5) / unitSize,\n\t\t\ty: (pageSize.height * 0.5) / unitSize,\n\t\t};\n\n\t\tthis.pages.forEach((page) => {\n\t\t\tconst offsetX = newCenter.x - page.width / 2;\n\t\t\tconst offsetY = newCenter.y - page.height / 2;\n\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tsystem.left += offsetX;\n\t\t\t\tsystem.top += offsetY;\n\t\t\t});\n\n\t\t\tif (page.semantics) {\n\t\t\t\tpage.semantics.forEach((point) => {\n\t\t\t\t\tpoint.x += offsetX;\n\t\t\t\t\tpoint.y += offsetY;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tpage.width = pageSize.width / unitSize;\n\t\t\tpage.height = pageSize.height / unitSize;\n\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations });\n\t\t});\n\n\t\tthis.unitSize = unitSize;\n\t\tthis.pageSize = pageSize;\n\t}\n\n\tgetMeasure(measureIndex: number): {\n\t\tmeasureIndex: number;\n\t\tsystem: System;\n\t\tlocalIndex: number;\n\t\tleft: number;\n\t\tright: number;\n\t\tmeasures: Measure[];\n\t} {\n\t\tlet index = measureIndex;\n\t\tfor (const system of this.systems) {\n\t\t\tif (index < system.measureCount) {\n\t\t\t\tconst staff = system.staves[0];\n\t\t\t\tconst measure = staff.measures[index];\n\t\t\t\tconsole.assert(measure, 'measure is null:', system.measureCount, index, staff.measures);\n\t\t\t\tconst measures = system.getStaffArray(this.maxStavesCount).map((staff) => staff && staff.measures[index]);\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex,\n\t\t\t\t\tsystem,\n\t\t\t\t\tlocalIndex: index,\n\t\t\t\t\tleft: measure.left,\n\t\t\t\t\tright: measure.right,\n\t\t\t\t\tmeasures,\n\t\t\t\t};\n\t\t\t}\n\t\t\tindex -= system.measureCount;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetRawCluster(measureIndex: number, threshold: number, { timeSignature }: Partial = {}): SemanticCluster {\n\t\tconst position = this.getMeasure(measureIndex);\n\t\tif (!position) return null;\n\n\t\tconst { system, left, right } = position;\n\t\t//console.log(\"measure:\", system, left, right);\n\n\t\tconst elements: SemanticElement[] = [BOS_ELEMENT];\n\n\t\tif (timeSignature) elements.push(...fractionToElems(timeSignature));\n\n\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tlet points = system.qualifiedSemantics(staff.semantics, threshold).filter((point) => point.x > left && point.x < right);\n\t\t\tpoints = solveOverlapping(points);\n\n\t\t\t// exlude tempo noteheads\n\t\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t});\n\n\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\n\t\t\tpoints.forEach((point) => {\n\t\t\t\tconst type = SemanticElementType[point.semantic];\n\t\t\t\tif (type) {\n\t\t\t\t\tlet y1 = point.y;\n\t\t\t\t\tlet y2 = point.y;\n\t\t\t\t\tif (type === SemanticElementType.vline_Stem) {\n\t\t\t\t\t\ty1 = point.extension.y1;\n\t\t\t\t\t\ty2 = point.extension.y2;\n\t\t\t\t\t}\n\n\t\t\t\t\telements.push({\n\t\t\t\t\t\tid: point.id,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\tx: point.x - left,\n\t\t\t\t\t\ty1: y1 + y0,\n\t\t\t\t\t\ty2: y2 + y0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new SemanticCluster({\n\t\t\tindex: measureIndex,\n\t\t\telements,\n\t\t});\n\t}\n\n\tgetRawClusters(threshold: number = 1): SemanticCluster[] {\n\t\t//const times = this.getMeasuresTime();\n\n\t\treturn Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => this.getRawCluster(mi, threshold /*, times[mi]*/));\n\t}\n\n\tmakeSpartito(logger: Logger = new DummyLogger()): Spartito {\n\t\tlet eventSystems: EventSystem[] = this.systems.map((system) => system.getEvents(this.maxStavesCount));\n\n\t\t/*if (this.topology) {\n\t\t\tconst clusters = this.topology.clusters;\n\n\t\t\t// [measure, staff, event]\n\t\t\tconst eventsColumns: ChordColumn[][][] = clusters\n\t\t\t\t.filter((cluster) => cluster.index < this.measureCount)\n\t\t\t\t.reduce((columns, cluster) => {\n\t\t\t\t\tconst { system, measures } = this.getMeasure(cluster.index);\n\t\t\t\t\tconst events = cluster.getEvents();\n\n\t\t\t\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\t\t\t\t\tconst x0 = measures.filter(Boolean)[0].left;\n\n\t\t\t\t\tconst staves = system.getStaffArray(this.maxStavesCount);\n\n\t\t\t\t\t// translate by staff & measure relative offset\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst staff = staves[event.staff];\n\t\t\t\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\t\t\t\t\t\tevent.ys = event.ys.map((y) => roundNumber(y - y0, 0.5));\n\n\t\t\t\t\t\tevent.left += x0;\n\t\t\t\t\t\tevent.right += x0;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst column = measures.map((measure, staffIndex) => {\n\t\t\t\t\t\tif (!measure) return [];\n\n\t\t\t\t\t\t//console.log(\"m:\", mi, \"s:\", staffIndex);\n\t\t\t\t\t\tconst localEvents = events.filter((event) => event.staff === staffIndex);\n\t\t\t\t\t\t//measure.assignModifiersOnEvents(localEvents);\n\t\t\t\t\t\tmeasure.assignAccessoriesOnEvents(localEvents);\n\n\t\t\t\t\t\treturn localEvents;\n\t\t\t\t\t});\n\n\t\t\t\t\tcolumns[cluster.index] = column;\n\n\t\t\t\t\treturn columns;\n\t\t\t\t}, []);\n\n\t\t\tconst breakSystemIndices = this.breakSystemIndices;\n\n\t\t\tconst basicEventSystems = eventSystems;\n\t\t\teventSystems = [];\n\n\t\t\tlet measures = 0;\n\t\t\tfor (const system of this.systems) {\n\t\t\t\tconst esys = system.getEventsFunctional(this.maxStavesCount, (si, mi) => eventsColumns[measures + mi] && eventsColumns[measures + mi][si], [], {\n\t\t\t\t\tuseXMap: false,\n\t\t\t\t});\n\n\t\t\t\tconst basicSys = basicEventSystems[system.index];\n\t\t\t\t//onst nullN = esys.columns.filter(c => !c).length;\n\t\t\t\t//if (nullN)\n\t\t\t\t//\tconsole.log(\"null:\", nullN, esys.columns.length);\n\t\t\t\tesys.columns = esys.columns.map((column, i) => (column ? column : basicSys.columns[i]));\n\n\t\t\t\tconst sysIndex = this.systems.indexOf(system);\n\t\t\t\tconst pageBreak = breakSystemIndices.includes(sysIndex);\n\t\t\t\tconst lastColumn = esys.columns[esys.columns.length - 1];\n\t\t\t\tif (lastColumn) {\n\t\t\t\t\tlastColumn.break = true;\n\t\t\t\t\tlastColumn.pageBreak = pageBreak;\n\t\t\t\t}\n\n\t\t\t\teventSystems.push(esys);\n\t\t\t\tmeasures += system.measureCount;\n\t\t\t}\n\t\t}*/\n\n\t\tconst staves = this.eventSystemsToTermStaves(eventSystems, logger);\n\n\t\t// assign staff basics for columns\n\t\teventSystems.forEach((sys, ri) => {\n\t\t\tsys.columns.forEach((column, mi) => {\n\t\t\t\tcolumn.basics = staves.map((staff) => {\n\t\t\t\t\tconst { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig } = staff.rows[ri][mi];\n\n\t\t\t\t\treturn { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig };\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tconst clusters = null; //this.topology && this.topology.clusters;\n\n\t\tconst measures = [].concat(\n\t\t\t...eventSystems.map((esys) =>\n\t\t\t\tesys.columns.map((column) => {\n\t\t\t\t\tconst measureIndex = column.measureIndex;\n\t\t\t\t\tconst { system, localIndex, left, right } = this.getMeasure(measureIndex);\n\n\t\t\t\t\tconst cluster = clusters && clusters.find((cluster) => cluster.index === measureIndex);\n\n\t\t\t\t\tconst staffYsFull = [];\n\t\t\t\t\tsystem.staves.forEach((staff) => (staffYsFull[staff.index] = staff.top + staff.staffY));\n\n\t\t\t\t\tconst patch = this.patches && this.patches.find((patch) => patch.measureIndex === measureIndex);\n\t\t\t\t\tconst events = patch ? patch.events : SpartitoMeasure.reorderEvents([].concat(...column.rows.map((row) => row.events)), staffYsFull);\n\n\t\t\t\t\tconst barTypes = Object.fromEntries(Object.entries(column.barTypes).map(([k, v]) => [k, v / system.staves.length]));\n\t\t\t\t\tconst indent = localIndex === 0 && system.indent;\n\n\t\t\t\t\treturn new SpartitoMeasure({\n\t\t\t\t\t\tmeasureIndex,\n\t\t\t\t\t\tstaffMask: esys.staffMask,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\t\tlocalIndex,\n\t\t\t\t\t\t\tleft,\n\t\t\t\t\t\t\tright,\n\t\t\t\t\t\t\tstaffYs: system.staves.map((staff) => staff.top + staff.staffY),\n\t\t\t\t\t\t\tstaffYsFull,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t//startX: column.startX,\n\t\t\t\t\t\t//width: column.width,\n\t\t\t\t\t\tduration: patch ? patch.duration : column.duration,\n\t\t\t\t\t\tevents,\n\t\t\t\t\t\tcontexts: column.rows.map((row) => row.contexts),\n\t\t\t\t\t\tmarks: column.marks,\n\t\t\t\t\t\tbreak: column.break,\n\t\t\t\t\t\tpageBreak: column.pageBreak,\n\t\t\t\t\t\tvoltaBegin: column.voltaBegin,\n\t\t\t\t\t\tvoltaEnd: column.voltaEnd,\n\t\t\t\t\t\talternative: column.alternative,\n\t\t\t\t\t\tbarTypes,\n\t\t\t\t\t\tindent,\n\t\t\t\t\t\tbasics: patch ? patch.basics : column.basics,\n\t\t\t\t\t\tmatrixH: cluster && cluster.matrixH,\n\t\t\t\t\t\tmatrixV: cluster && cluster.matrixV,\n\t\t\t\t\t\tvoices: patch ? patch.voices : null,\n\t\t\t\t\t\tpatched: !!patch,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tconst staffLayout = this.staffLayout;\n\t\tconst staffGroups = staffLayout.standaloneGroups.map((ids) => ids.map((id) => staffLayout.staffIds.indexOf(id)));\n\n\t\tthis.spartito = new Spartito({\n\t\t\tstavesCount: this.maxStavesCount,\n\t\t\tstaffGroups,\n\t\t\tmeasures,\n\t\t});\n\n\t\treturn this.spartito;\n\t}\n\n\tmakeMusicSheet(): MusicSheet {\n\t\tconst spartito = this.spartito || this.makeSpartito();\n\n\t\tif (!spartito.regulated) console.warn('[makeMusicSheet]\tspartito not regulated.');\n\n\t\tconst voiceStaves = spartito.makeVoiceStaves();\n\n\t\tconst { title, pageSize, unitSize, staffLayout, paperOptions, headers, instrumentDict } = this;\n\t\tconst measureLayout = this.getMeasureLayout();\n\n\t\treturn {\n\t\t\ttitle,\n\t\t\tpageSize,\n\t\t\tunitSize,\n\t\t\tmeasureLayout,\n\t\t\tstaffLayout,\n\t\t\tpaperOptions,\n\t\t\theaders,\n\t\t\tvoiceStaves,\n\t\t\tinstrumentDict,\n\t\t};\n\t}\n\n\tfindPoint(sid: string): PointPosition {\n\t\tfor (const system of this.systems) {\n\t\t\tfor (let si = 0; si < system.staves.length; ++si) {\n\t\t\t\tconst point = system.staves[si].semantics.find((point) => point.id === sid);\n\t\t\t\tif (point) {\n\t\t\t\t\tconst pageIndex = this.pages.findIndex((page) => page.systems.includes(system));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpoint,\n\t\t\t\t\t\tpageIndex,\n\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\tstaffIndex: si,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetMeasureSemantics(systemIndex: number, localIndex: number): SemanticPointInMeasure[] {\n\t\tconst system = this.systems[systemIndex];\n\t\tif (!system) return null;\n\n\t\tconst left = localIndex ? system.measureBars[localIndex - 1] : 0;\n\t\tconst right = system.measureBars[localIndex] || system.width;\n\n\t\treturn system.staves\n\t\t\t.map((staff, si) => {\n\t\t\t\tconst staffY = staff.top + staff.staffY;\n\t\t\t\treturn staff.semantics\n\t\t\t\t\t.filter((point) => point.x >= left && point.x < right)\n\t\t\t\t\t.map((point) => {\n\t\t\t\t\t\tconst [y1, y2] = Number.isFinite(point.extension?.y1) ? [point.extension.y1, point.extension.y2] : [point.y, point.y];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\tstaff: si,\n\t\t\t\t\t\t\tsy1: y1 + staffY,\n\t\t\t\t\t\t\tsy2: y2 + staffY,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1);\n\t}\n\n\tmakeTimewiseGraph({ store = false }: { store?: boolean } = {}): TimewiseGraph {\n\t\tif (!this.spartito) return null;\n\n\t\tconst measures = this.spartito.measures\n\t\t\t.filter((measure) => measure.events.length > 0)\n\t\t\t.map((measure) => {\n\t\t\t\tconst points = this.getMeasureSemantics(measure.position.systemIndex, measure.position.localIndex);\n\n\t\t\t\tconst graph = {\n\t\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\t\tleft: measure.position.left,\n\t\t\t\t\tright: measure.position.right,\n\t\t\t\t\tpoints,\n\t\t\t\t};\n\n\t\t\t\tif (store) measure.graph = graph;\n\n\t\t\t\treturn graph;\n\t\t\t});\n\n\t\treturn { measures };\n\t}\n\n\tgetTokenMap(): Map {\n\t\tconst map = new Map();\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => staff.measures.forEach((measure) => measure.tokens.forEach((token) => map.set(token.id, token))))\n\t\t);\n\n\t\treturn map;\n\t}\n\n\tassemble(confidenceThreshold: number = 1, logger: Logger = new DummyLogger()) {\n\t\tconst ids = new Map();\n\n\t\tconst append = (systemIndex, staffIndex, point) => {\n\t\t\tconst id = hashSemanticPoint(systemIndex, staffIndex, point);\n\t\t\tlogger.assert(!ids.has(id), 'semantic point hash conflicted:', id, point, ids.get(id));\n\n\t\t\tids.set(id, point);\n\t\t};\n\n\t\tthis.pages.forEach((page, index) => (page.index = index));\n\n\t\tlet measureIndex = 0;\n\t\tthis.systems.forEach((system, systemIndex) => {\n\t\t\tsystem.index = systemIndex;\n\t\t\tsystem.headMeasureIndex = measureIndex;\n\t\t\tsystem.prev = this.systems[systemIndex - 1] || null;\n\t\t\tsystem.next = this.systems[systemIndex + 1] || null;\n\n\t\t\tif (system.semantics && system.semantics.length) system.semantics.forEach((point) => append(systemIndex, null, point));\n\n\t\t\tsystem.assemble(confidenceThreshold, logger);\n\t\t\tmeasureIndex += system.measureCount;\n\t\t});\n\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tpage.systems.forEach((system) => (system.pageIndex = i));\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations }, logger);\n\t\t});\n\t}\n\n\tassembleSystem(system: System, confidenceThreshold: number = 1) {\n\t\tthis.systems.forEach((system, si) => (system.index = si));\n\t\tconst systemIndex = system.index;\n\n\t\tif (system.semantics && system.semantics.length) {\n\t\t\tsystem.semantics.forEach((point) => hashSemanticPoint(systemIndex, null, point));\n\t\t\tsystem.assemble(confidenceThreshold);\n\t\t}\n\t}\n\n\tmarkVoices(staves: VoicesStaff[]): void {\n\t\tconst tokenMap = this.getTokenMap();\n\t\tfor (const token of tokenMap.values()) token.voice = 0;\n\n\t\tconst vis = []\n\t\t\t.concat(...staves.map((staff, s) => (staff.voices || []).map((_, v) => [s, v])))\n\t\t\t.sort(([s1, v1], [s2, v2]) => v1 - v2 || s1 - s2)\n\t\t\t.map(([s, v]) => `${s}|${v}`);\n\n\t\tstaves.forEach((staff, si) =>\n\t\t\t(staff.voices || []).forEach((voice, vi) =>\n\t\t\t\tvoice.measures.forEach((measure) => {\n\t\t\t\t\tconst voiceIndex = vis.indexOf(`${si}|${vi}`);\n\n\t\t\t\t\tconst events = Object.values(measure.tickMap).filter((event) => event instanceof EventTerm) as EventTerm[];\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst notes = event.noteIds ? event.noteIds.map((id) => tokenMap.get(id)).filter(Boolean) : [];\n\t\t\t\t\t\tconst accessories = event.accessories ? event.accessories.map((acc) => tokenMap.get(acc.id)).filter(Boolean) : [];\n\t\t\t\t\t\t//console.log(\"notes:\", si, vi, mi, event.noteIds, notes, accessories);\n\n\t\t\t\t\t\t[...notes, ...accessories].forEach((token) => (token.voice |= 1 << voiceIndex));\n\n\t\t\t\t\t\tif (event.timeWarp) notes.forEach((note) => (note.timeWarped = true));\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t}\n\n\tasync replaceImageKeys(proc: (x: string | Buffer) => Promise): Promise {\n\t\tawait Promise.all([\n\t\t\t...(this.pages.map(async (page) => {\n\t\t\t\tif (page.source) page.source.url = await proc(page.source.url);\n\t\t\t}) as Promise[]),\n\t\t\t...this.systems.map((system) =>\n\t\t\t\tPromise.all([\n\t\t\t\t\tproc(system.backgroundImage).then((key) => (system.backgroundImage = key)),\n\t\t\t\t\t...(system.staves.map(async (staff) => {\n\t\t\t\t\t\tstaff.backgroundImage = await proc(staff.backgroundImage);\n\t\t\t\t\t\tstaff.maskImage = await proc(staff.maskImage);\n\t\t\t\t\t}) as Promise[]),\n\t\t\t\t])\n\t\t\t),\n\t\t]);\n\t}\n\n\tinferenceStaffLayout(): void {\n\t\t// inference the complete layout\n\t\tconst staffTotal = Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t\tthis.staffLayoutCode = Array(staffTotal).fill('').join(',');\n\n\t\tconst completeSystems = this.systems.filter((system) => system.staves.length === staffTotal && system.bracketsAppearance);\n\t\tif (!completeSystems.length) return; // no enough evidence\n\n\t\tconst candidateCodes = completeSystems\n\t\t\t.map((system) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst layout = staffLayout.parseCode(system.bracketsAppearance);\n\t\t\t\t\tif (layout.staffIds.length !== system.staves.length) return null;\n\n\t\t\t\t\treturn system.bracketsAppearance;\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t\tif (!candidateCodes.length) return; // no valid layout\n\n\t\tconst codeCounting = candidateCodes.reduce((acc, code) => {\n\t\t\tconst count = acc[code] || 0;\n\t\t\tacc[code] = count + 1;\n\t\t\treturn acc;\n\t\t}, {} as { [code: string]: number });\n\t\tconst maxCount = Math.max(...Object.values(codeCounting));\n\t\tconst code = Object.entries(codeCounting).find(([_, count]) => count === maxCount)[0];\n\n\t\t// added connection lines between braces {-}\n\t\tconst connectedCode = code.replace(/\\{,*\\}/g, (match) => match.replace(/,/g, '-'));\n\t\tconst layout = staffLayout.parseCode(connectedCode);\n\n\t\tthis.staffLayoutCode = connectedCode;\n\t\t//console.log(\"complete code:\", code);\n\n\t\t// inference systems' mask\n\t\tlet lastSys: System = null;\n\t\tfor (const system of this.systems) {\n\t\t\tif (lastSys && system.staves.length === lastSys.staves.length && system.bracketsAppearance === lastSys.bracketsAppearance) {\n\t\t\t\tsystem.staffMaskChanged = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (system.staves.length < staffTotal && system.bracketsAppearance) {\n\t\t\t\t// validate the system brackets code\n\t\t\t\ttry {\n\t\t\t\t\tif (!staffLayout.parseCode(system.bracketsAppearance)) continue;\n\t\t\t\t} catch (_) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst search = (bits: (0 | 1)[]): number => {\n\t\t\t\t\tif (bits.length > layout.staffIds.length) return null;\n\n\t\t\t\t\tif (bits.reduce((sum, bit) => sum + bit, 0) === system.staves.length) return bitsToMask(bits);\n\n\t\t\t\t\tfor (const bit of [1, 0]) {\n\t\t\t\t\t\tconst bb = [...bits, bit] as (0 | 1)[];\n\t\t\t\t\t\tconst code1 = layout.partialMaskCode(bb);\n\t\t\t\t\t\tif (code1 === system.bracketsAppearance) return bitsToMask(bb);\n\t\t\t\t\t\telse if (system.bracketsAppearance.startsWith(code1)) {\n\t\t\t\t\t\t\tconst result = search(bb);\n\t\t\t\t\t\t\tif (result) return result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t\tconst mask = search([]);\n\t\t\t\t//console.log(\"mask:\", system.bracketsAppearance, mask.toString(2));\n\n\t\t\t\tsystem.staffMaskChanged = !lastSys || mask !== lastSys.staffMask ? mask : null;\n\t\t\t}\n\n\t\t\tlastSys = system;\n\t\t}\n\t}\n\n\tassignBackgroundForMeasure(measure: SpartitoMeasure): void {\n\t\tmeasure.backgroundImages = [];\n\n\t\tconst system = this.systems[measure.position.systemIndex];\n\t\tif (system.backgroundImage) {\n\t\t\tmeasure.backgroundImages.push({\n\t\t\t\turl: system.backgroundImage,\n\t\t\t\tposition: system.imagePosition,\n\t\t\t\toriginal: true,\n\t\t\t});\n\t\t}\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tif (!system.backgroundImage && staff.backgroundImage)\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.backgroundImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t\toriginal: true,\n\t\t\t\t});\n\n\t\t\tif (staff.maskImage) {\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.maskImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tblackoutFakeNotes(scope: 'patched' | 'perfect' | 'all' = 'patched'): string[] {\n\t\tif (!this.spartito) return;\n\n\t\tlet inScope = (_) => true;\n\t\tswitch (scope) {\n\t\t\tcase 'patched':\n\t\t\t\tinScope = (measure) => measure.patched;\n\t\t\t\tbreak;\n\t\t\tcase 'perfect':\n\t\t\t\tinScope = (measure) => measure.patched || (measure.regulated && evaluateMeasure(measure).perfect);\n\t\t\t\tbreak;\n\t\t}\n\t\tconst measures = this.spartito.measures.filter(inScope);\n\n\t\tconst fakeIds = measures.reduce((ids, measure) => {\n\t\t\tif (!measure.regulated) return;\n\n\t\t\tconst voicedIds = measure.voices.flat(1);\n\t\t\tconst fakeChords = measure.events.filter((event) => !event.rest && !event.grace && !voicedIds.includes(event.id));\n\n\t\t\tfakeChords.forEach((event) => event.noteIds && ids.push(...event.noteIds));\n\n\t\t\treturn ids;\n\t\t}, [] as string[]);\n\t\tconst fakeIdSet = new Set(fakeIds);\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\tconst blackIds = staff.semantics.filter((point) => fakeIdSet.has(point.id)).map((point) => point.id);\n\t\t\t\tsystem.sidBlackList.push(...blackIds);\n\t\t\t})\n\t\t);\n\n\t\treturn fakeIds;\n\t}\n\n\tgetMeasureLayout(): measureLayout.MeasureLayout {\n\t\tconst code = this.spartito && this.spartito.measureLayoutCode;\n\t\tif (code) {\n\t\t\ttry {\n\t\t\t\treturn measureLayout.parseCode(code);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.debug('invalid measure layout code:', err);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t*splitToSingleScoresGen(): Generator {\n\t\tthis.assemble();\n\t\tconst startSysIndices = this.systems.filter((system) => system.index > 0 && system.indent && system.timeSignatureOnHead).map((system) => system.index);\n\n\t\tif (!startSysIndices.length) {\n\t\t\tyield this.deepCopy();\n\t\t\treturn;\n\t\t}\n\n\t\tconst templateScore = new Score({ ...this, pages: [], topology: undefined, spartito: undefined, patches: undefined });\n\n\t\t// clear temporary objects before deep dopy\n\t\tthis.pages.forEach((page) => {\n\t\t\tdelete page.tokens;\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tdelete system.tokens;\n\t\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\t\tstaff.measures = [];\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tlet startSysIndex = 0;\n\t\tfor (const endSysIndex of [...startSysIndices, this.systems.length]) {\n\t\t\tconst sysInRange = (system) => system.index >= startSysIndex && system.index < endSysIndex;\n\t\t\tconst pages = this.pages\n\t\t\t\t.filter((page) => page.systems.some(sysInRange))\n\t\t\t\t.map((page) => {\n\t\t\t\t\tconst { systems, ...fields } = page;\n\t\t\t\t\treturn new Page({ ...fields, systems: systems.filter(sysInRange).map((system) => new System({ ...system })) });\n\t\t\t\t});\n\n\t\t\tconst newScore = templateScore.deepCopy();\n\t\t\tnewScore.headers.SubScoreSystem = `${startSysIndex}-${endSysIndex - 1}`;\n\t\t\tnewScore.headers.SubScorePage = `${pages[0].index}-${pages[pages.length - 1].index}`;\n\n\t\t\t//newScore.pages = pages.map((page) => page.deepCopy());\n\t\t\tnewScore.pages = pages;\n\t\t\tnewScore.assemble();\n\t\t\tnewScore.inferenceStaffLayout();\n\n\t\t\tstartSysIndex = endSysIndex;\n\n\t\t\tyield newScore;\n\t\t}\n\t}\n\n\tsplitToSingleScores(): Score[] {\n\t\treturn [...this.splitToSingleScoresGen()];\n\t}\n}\n\nexport { PaperOptions, Score, Page, System, Staff, Measure, MeasureValidation };\nexport type { SemanticPointInMeasure };\n","import type { MeasureLayout } from './measureLayout';\nimport * as measureLayout from './measureLayout';\nimport grammar from './grammar.jison';\nimport { recoverJSON } from '../starry/aux_/typedJSON';\n\nconst parseCode = (code: string): MeasureLayout => {\n\tconst raw = grammar.parse(code);\n\n\tif (raw?.data) return recoverJSON(raw.data, measureLayout);\n\n\treturn null;\n};\n\nexport { parseCode };\n","import { RegulationSolution, RegulationSolutionEvent, EventPredisposition } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport { argmax, frac } from './utils';\nimport { WHOLE_DURATION, StemBeam } from './term';\nimport { Logger, DummyLogger } from './logger';\n\ninterface BeadPicker {\n\tn_seq: number;\n\tquota: number;\n\tcost: number; // duration in milliseconds\n\n\tpredictCluster(cluster: EventCluster, tip: number): Promise;\n}\n\nenum BeadType {\n\tPass = 'i',\n\tDivision = 'd',\n\tDots = 'o',\n}\n\nconst DIVISION_NAMES = ['whole', 'half', 'quarter', 'eighth', 'sixteenth', 'thirtysecond', 'sixtyfourth', '128th', '256th'];\n\ninterface BeadNodeInitData {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n}\n\nconst RESIDUE_LOSS_WEIGHT = 0.2;\nconst VOICEN_LOSS_WEIGHT = 0.002;\nconst SPACE_LOSS_WEIGHT = 0.4 / WHOLE_DURATION;\nconst PRETENTIOUSNESS_LOSS_WEIGHT = 0.02;\n\nconst POSSIBILITY_LOW_BOUNDARY = 1e-12;\n\nconst PRETENTIOUSNESS_CLIP = 100;\n\ninterface ClusterEvaluation {\n\ttickErr: number;\n\ttwist: number;\n\tresidue: number;\n\tendTick: number;\n\tfatalError: boolean;\n\tvoiceN: number;\n\tspaceDuration: number;\n\tpretentiousness: number;\n\tloss: number;\n}\n\ninterface ElementState {\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tbeam: StemBeam;\n\tstemDirection: string;\n\tgrace: boolean;\n\ttimeWarped: boolean;\n\tfullMeasure: boolean; // full measure rest\n\tfake: boolean;\n\torder: number;\n\tpredisposition: EventPredisposition;\n}\n\ninterface ClusterState {\n\telements: ElementState[];\n}\n\nconst STEM_DIRECTION_OPTIONS = [undefined, 'u', 'd'];\n\nconst BEAM_OPTIONS = [undefined, StemBeam.Open, StemBeam.Continue, StemBeam.Close];\n\nconst saveClusterState = (cluster: EventCluster): ClusterState => ({\n\telements: cluster.elements.map((elem) => ({\n\t\ttick: elem.tick!,\n\t\tdivision: elem.division!,\n\t\tdots: elem.dots!,\n\t\tbeam: elem.beam!,\n\t\tstemDirection: elem.stemDirection!,\n\t\tgrace: elem.grace!,\n\t\ttimeWarped: elem.timeWarped!,\n\t\tfullMeasure: elem.fullMeasure!,\n\t\tfake: elem.fake!,\n\t\torder: elem.order!,\n\t\tpredisposition: elem.predisposition!,\n\t})),\n});\n\nconst restoreClusterState = (cluster: EventCluster, state: ClusterState): void => cluster.elements.forEach((elem, i) => Object.assign(elem, state.elements[i]));\n\nconst measurePretentious = (p) => Math.min(PRETENTIOUSNESS_CLIP, -Math.log(p));\n\ninterface BeadDeductionContext {\n\tpicker: BeadPicker;\n\tlogger: Logger;\n\tptFactor: number; // pretentiousness tolerance factor\n}\n\nclass BeadNode {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n\n\tchildren: Record;\n\taccessCount: number;\n\n\tconstructor(data: BeadNodeInitData) {\n\t\tObject.assign(this, data);\n\n\t\t//this.possibilities = this.possibilities.map((x, i) => (this.type === BeadType.Pass && !i) ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\n\t\tthis.children = {};\n\t\tthis.accessCount = 0;\n\t}\n\n\tnextBranch(): number | null {\n\t\tconst ps = this.possibilities.map((p, i) => p / (this.children[i] ? this.children[i].accessCount + 1 : 1));\n\t\t//const ps = this.possibilities.map((p, i) => p * (this.children[i] ? (2 ** -this.children[i].accessCount) : 1));\n\n\t\tif (ps.every((p) => !p)) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn argmax(ps);\n\t}\n\n\tget currentElem(): EventElement {\n\t\treturn this.cluster.elements[this.elemIndex];\n\t}\n\n\tbranchID(ni: number): string {\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\treturn `i_${ni}`;\n\t\t\tcase BeadType.Division:\n\t\t\t\treturn DIVISION_NAMES[ni];\n\t\t\tcase BeadType.Dots:\n\t\t\t\treturn 'o' + '.'.repeat(ni);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tasync deduce({ picker, logger, ptFactor }: BeadDeductionContext, deep: number = 0): Promise {\n\t\t++this.accessCount;\n\n\t\tconst ni = this.nextBranch()!;\n\t\tlogger.debug(String.fromCodePoint(0x1f349) + ' '.repeat(deep), this.branchID(ni), this.accessCount > 1 ? `[${this.accessCount}]` : '');\n\n\t\tif (!Number.isInteger(ni) || ni < 0) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tthis.pretentiousness += measurePretentious(this.possibilities[ni]);\n\t\tif (this.pretentiousness > PRETENTIOUSNESS_CLIP * ptFactor) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tlet selfEval: null | ClusterEvaluation = null;\n\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\t{\n\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\tconst element = this.cluster.elements[ni];\n\t\t\t\t\tconsole.assert(element, 'null element:', ni, this.cluster.elements.length);\n\t\t\t\t\tif (element.type === EventElementType.EOS) {\n\t\t\t\t\t\tselfEval = evaluateCluster(this.cluster, tip, this.pretentiousness);\n\t\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.cluster.elements[0].order = tip;\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip + 1)).map((x, i) =>\n\t\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 || i === this.cluster.elements.length - 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: 0,\n\t\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.order = tip;\n\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tconsole.assert(element.predisposition, 'no predisposition:', ni, this.possibilities);\n\t\t\t\t\t\t\tconst possibilities = element.predisposition!.divisionVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: ni,\n\t\t\t\t\t\t\t\ttype: BeadType.Division,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Division:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.division = ni;\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tconst possibilities = this.currentElem.predisposition!.dotsVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Dots,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Dots:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.dots = ni;\n\n\t\t\t\t\tselfEval = evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip)).map((x, i) =>\n\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst evaluation = await this.children[ni].deduce({ picker, logger, ptFactor }, deep + 1);\n\t\tif (selfEval && evaluation.fatalError) {\n\t\t\tconst tip = this.currentElem.order!;\n\t\t\tthis.cluster.elements.forEach((elem) => {\n\t\t\t\tif (elem.order! > tip) elem.order = undefined;\n\t\t\t});\n\n\t\t\t// clear children data\n\t\t\tthis.cluster.elements.forEach((elem) => (elem.order = elem.order! > this.currentElem.order! ? undefined : elem.order));\n\t\t\tthis.cluster.elements[this.cluster.elements.length - 1].tick = selfEval.endTick;\n\n\t\t\treturn selfEval;\n\t\t}\n\n\t\treturn evaluation;\n\t}\n}\n\nconst estimateElementDuration = (elem: EventElement) => WHOLE_DURATION * 2 ** -elem.division! * (2 - 2 ** -elem.dots!);\n\nconst evaluateCluster = (cluster: EventCluster, tip: number, pretentiousness: number): ClusterEvaluation => {\n\tconst events = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order) && elem.order! < tip\n\t);\n\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\tconst eos = cluster.elements[cluster.elements.length - 1];\n\n\tlet tick = 0;\n\tlet lastOrder = 0;\n\tlet endTick = 0;\n\tlet voiceN = 1;\n\n\t// [x, tick, estimated tick]\n\tconst scales: [number, number, number][] = [[eos.x, cluster.signatureDuration, cluster.signatureDuration]];\n\n\tlet totalDuration = 0;\n\n\t// assign tick for events\n\tevents.forEach((event) => {\n\t\tif (event.order! > lastOrder + 1) {\n\t\t\ttick = 0;\n\t\t\t++voiceN;\n\t\t}\n\n\t\tconst referenceScale = scales.find((s) => s[1] >= tick);\n\t\tif (referenceScale && event.x > referenceScale[0] + 3) {\n\t\t\tconst nearScale = scales.reduce((n, s) => (Math.abs(event.predisposition!.tick - s[2]) < Math.abs(event.predisposition!.tick - n[2]) ? s : n));\n\t\t\tif (Math.abs(nearScale[0] - event.x) < 2) tick = Math.max(tick, nearScale[1]);\n\t\t}\n\n\t\tevent.tick = tick;\n\n\t\tconst si = Math.max(\n\t\t\t0,\n\t\t\tscales.findIndex((s) => s[0] > event.x)\n\t\t);\n\t\tscales.splice(si, 0, [event.x, event.tick, event.predisposition!.tick]);\n\n\t\t//let duration = WHOLE_DURATION * (2 ** -event.division!) * (2 - 2 ** -event.dots!);\n\t\tlet duration = estimateElementDuration(event);\n\t\tif (event.predisposition!.timeWarped > 0.5) duration = (duration * 2) / 3;\n\n\t\ttick += duration;\n\t\ttotalDuration += duration;\n\t\tendTick = Math.max(endTick, tick);\n\t\tlastOrder = event.order!;\n\t});\n\n\t/*const pretentiousness = events.reduce((p, event) => p +\n\t\tmeasurePretentious(event.predisposition!.divisionVector![event.division!]) +\n\t\tmeasurePretentious(event.predisposition!.dotsVector![event.dots!]), 0);*/\n\n\tif (endTick > 0) cluster.elements[cluster.elements.length - 1].tick = endTick;\n\n\tconst xSpan = cluster.elements[cluster.elements.length - 1].pivotX! - cluster.elements[1].pivotX!;\n\tconst tickSpan = Math.max(...events.map((e) => e.tick!), endTick);\n\n\t// tick twist loss\n\tconst eventsXOrder = [...events].sort((e1, e2) => e1.pivotX! - e2.pivotX!);\n\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\tconst e1 = eventsXOrder[i];\n\t\tconst dx = e2.pivotX! - e1.pivotX!;\n\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\tif (!dt) return dx / xSpan;\n\n\t\tconst rate = Math.atan2(dt / tickSpan, dx / xSpan);\n\n\t\t//if (dt < 0)\n\t\t//\tconsole.log(\"minus dt:\", dt, dx, rate);\n\n\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t});\n\t//console.debug(\"tickTwists:\", tickTwists, eventsXOrder);\n\n\tconst twist = Math.max(...tickTwists, 0);\n\n\tconst tickMSE = events.map((event) => (event.tick! - event.predisposition!.tick) ** 2);\n\t//console.debug(\"tickMSE:\", tickMSE.map(Math.sqrt));\n\tconst tickErr = tickMSE.length ? Math.sqrt(tickMSE.reduce((sum, mse) => sum + mse, 0) / tickMSE.length) : 0;\n\t//console.debug(\"tick/twist:\", tickErr / WHOLE_DURATION, twist);\n\n\tconst residueElements = cluster.elements.filter(\n\t\t(elem) =>\n\t\t\t[EventElementType.CHORD, EventElementType.REST].includes(elem.type) &&\n\t\t\t!(Number.isInteger(elem.order) && elem.order! < tip) &&\n\t\t\t!(elem.predisposition && elem.predisposition.fakeP > 0.5)\n\t);\n\tconst residue = residueElements.length;\n\n\tconst fatalError = twist >= 1 || endTick > cluster.signatureDuration;\n\n\t//const spaceDuration = Math.max(0, cluster.signatureDuration - endTick);\n\tconst spaceDuration = Math.max(0, cluster.signatureDuration - totalDuration / voiceN);\n\n\tconst loss =\n\t\ttickErr / WHOLE_DURATION +\n\t\ttwist +\n\t\tresidue * RESIDUE_LOSS_WEIGHT +\n\t\tvoiceN * VOICEN_LOSS_WEIGHT +\n\t\tspaceDuration * SPACE_LOSS_WEIGHT +\n\t\tpretentiousness * PRETENTIOUSNESS_LOSS_WEIGHT;\n\n\treturn {\n\t\ttickErr,\n\t\ttwist,\n\t\tresidue,\n\t\tendTick,\n\t\tfatalError,\n\t\tvoiceN,\n\t\tspaceDuration,\n\t\tpretentiousness,\n\t\tloss,\n\t};\n};\n\nconst solveCluster = async (\n\tcluster: EventCluster,\n\tpicker: BeadPicker,\n\tlogger: Logger,\n\tquota: number = 200,\n\tstopLoss: number = 0,\n\tptFactor: number = 1\n): Promise => {\n\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\tconst suc0 = await picker.predictCluster(cluster, 1);\n\n\tconst root = new BeadNode({ cluster, elemIndex: 0, pretentiousness: 0, type: BeadType.Pass, possibilities: suc0 });\n\n\tlet bestEvaluation: ClusterEvaluation | null = null;\n\tlet bestState: ClusterState | null = null;\n\n\tpicker.quota = quota;\n\twhile (picker.quota) {\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\n\t\tconst evaluation = await root.deduce({ picker, logger, ptFactor });\n\n\t\tlogger.debug('loss:', evaluation);\n\n\t\tif (!bestEvaluation || evaluation.loss < bestEvaluation.loss) {\n\t\t\tbestEvaluation = evaluation;\n\n\t\t\tcluster.duration = bestEvaluation.endTick;\n\t\t\tbestState = saveClusterState(cluster);\n\n\t\t\tif (Number.isFinite(stopLoss) && bestEvaluation.loss <= stopLoss!) break;\n\t\t}\n\n\t\tif (!Number.isFinite(root.accessCount)) break;\n\t}\n\tlogger.debug('bestEvaluation:', bestEvaluation);\n\n\trestoreClusterState(cluster, bestState!);\n\n\t// solve residue elements\n\tconst fixedEvents = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\tconst pendingEvents = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !Number.isInteger(elem.order)\n\t);\n\tif (fixedEvents.length) {\n\t\tpendingEvents.forEach((event) => {\n\t\t\t// exclude fake events (includes grace, fullMeasure) from voices\n\t\t\tevent.tick = undefined;\n\n\t\t\tif (event.predisposition!.fakeP < 0.5) {\n\t\t\t\t//const near = fixedEvents.reduce((n, e) => Math.abs(e.predisposition!.tick - event.predisposition!.tick) < Math.abs(n.predisposition!.tick - event.predisposition!.tick) ? e : n);\n\t\t\t\tconst duration = estimateElementDuration(event);\n\t\t\t\tconst candidates = fixedEvents.filter((e) => e.tick! + duration <= bestEvaluation!.endTick);\n\t\t\t\tif (candidates.length) {\n\t\t\t\t\tconst near = candidates.reduce((n, e) => (Math.abs(e.x - event.x) < Math.abs(n.x - event.x) ? e : n));\n\t\t\t\t\tevent.tick = near.tick;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfixedEvents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t// properties\n\t[...fixedEvents, ...pendingEvents].forEach((event) => {\n\t\tevent.grace = !Number.isFinite(event.tick) && event.predisposition!.grace;\n\t\tevent.timeWarped = event.predisposition!.timeWarped > 0.5;\n\t\tevent.fullMeasure = event.predisposition!.fullMeasure > 0.5;\n\t\tevent.stemDirection = STEM_DIRECTION_OPTIONS[argmax(event.predisposition!.stemDirectionVector)];\n\t\tevent.beam = BEAM_OPTIONS[argmax(event.predisposition!.beamVector)];\n\t});\n\n\t// construct matrixH\n\tconst ids = cluster.elements.map((e) => e.index);\n\tconst idx = (id: number): number => ids.indexOf(id);\n\tcluster.matrixH = cluster.elements.map(() => Array(cluster.elements.length).fill(0));\n\tfixedEvents.forEach((event, i) => {\n\t\tconst lastEvent = fixedEvents[i - 1];\n\t\tif (!lastEvent || lastEvent.order! < event.order! - 1) {\n\t\t\tcluster.matrixH![idx(event.index!)][0] = 1;\n\t\t\tif (lastEvent) cluster.matrixH![cluster.elements.length - 1][idx(lastEvent.index!)] = 1;\n\t\t} else {\n\t\t\tconsole.assert(\n\t\t\t\tcluster.matrixH![idx(event.index!)] && Number.isFinite(cluster.matrixH![idx(event.index!)][idx(lastEvent.index!)]),\n\t\t\t\t'matrixH out of range:',\n\t\t\t\tevent.index,\n\t\t\t\tlastEvent.index,\n\t\t\t\tcluster.matrixH!.length\n\t\t\t);\n\n\t\t\tcluster.matrixH![idx(event.index!)][idx(lastEvent.index!)] = 1;\n\t\t}\n\t});\n\tif (!pendingEvents.length && fixedEvents.length) cluster.matrixH![cluster.elements.length - 1][idx(fixedEvents[fixedEvents.length - 1].index!)] = 1;\n\n\treturn bestEvaluation!;\n};\n\ninterface BeadSolverOptions {\n\tpicker: BeadPicker;\n\tstopLoss?: number;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tptFactor?: number;\n\tlogger?: Logger;\n}\n\nconst solveMeasure = async (measure: SpartitoMeasure, options: BeadSolverOptions): Promise => {\n\tconst { stopLoss = 0.09, quotaMax = 1000, quotaFactor = 5, ptFactor = 1, logger = new DummyLogger() } = options;\n\n\tlet worstLoss = 0;\n\n\tconst clusters = measure.createClusters();\n\tfor (const cluster of clusters) {\n\t\tconst quota = Math.min(quotaMax, Math.ceil(cluster.elements.length * quotaFactor));\n\t\tlogger.info(`[measure-${measure.measureIndex}]`, quota);\n\t\tconst { loss } = await solveCluster(cluster, options.picker, logger, quota, stopLoss, ptFactor);\n\t\tworstLoss = Math.max(worstLoss, loss);\n\t}\n\n\tconst voices = [] as number[][];\n\n\tconst durations = [] as number[];\n\n\tconst solutionEvents = [] as RegulationSolutionEvent[];\n\n\tclusters.forEach((cluster) => {\n\t\tconst events = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\t\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t\tif (!events.length) return;\n\n\t\tlet voice = [] as number[];\n\t\tvoices.push(voice);\n\t\tlet lastOrder = 0;\n\t\tevents.forEach((event) => {\n\t\t\tif (event.fullMeasure || event.grace || event.tremoloCatcher) return;\n\n\t\t\tif (event.order! > lastOrder + 1) {\n\t\t\t\tvoice = [event.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t} else voice.push(event.index!);\n\n\t\t\tlastOrder = event.order!;\n\t\t});\n\n\t\tlet tipElem = events[events.length - 1];\n\n\t\t// complete voices from pending events\n\t\tconst pendingEvents = cluster.elements.filter(\n\t\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isFinite(elem.tick) && !Number.isInteger(elem.order)\n\t\t);\n\t\twhile (pendingEvents.length) {\n\t\t\tconst ei = pendingEvents.findIndex((e) => e.tick! >= tipElem.tick! + estimateElementDuration(tipElem));\n\t\t\tif (ei >= 0) voice.push(pendingEvents.splice(ei, 1)[0].index!);\n\t\t\telse {\n\t\t\t\ttipElem = pendingEvents.splice(0, 1)[0];\n\t\t\t\tvoice = [tipElem.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\t\t}\n\n\t\tif (events.some((elem) => !elem.fullMeasure && Number.isInteger(elem.order))) {\n\t\t\tconst eos = cluster.elements.find((elem) => elem.type === EventElementType.EOS);\n\t\t\tdurations.push(eos!.tick!);\n\t\t}\n\n\t\tconst eventMap = measure.eventMap;\n\n\t\tconst tickSet = cluster.elements.reduce((set, elem) => {\n\t\t\tif (Number.isFinite(elem.tick)) set.add(elem.tick!);\n\t\t\treturn set;\n\t\t}, new Set());\n\t\tconst ticks = Array.from(tickSet).sort((t1, t2) => t1 - t2);\n\n\t\t// fill solutionEvents\n\t\tevents.forEach((elem) => {\n\t\t\tconst event = eventMap[elem.index!];\n\t\t\tif (event) {\n\t\t\t\tsolutionEvents.push({\n\t\t\t\t\tid: event.id!,\n\t\t\t\t\ttick: elem.tick!,\n\t\t\t\t\ttickGroup: ticks.indexOf(elem.tick!),\n\t\t\t\t\tdivision: elem.division !== event.division ? elem.division : undefined,\n\t\t\t\t\tdots: elem.dots !== event.dots ? elem.dots : undefined,\n\t\t\t\t\ttimeWarp: elem.timeWarped ? frac(2, 3) : undefined, // TODO:\n\t\t\t\t\tbeam: elem.beam !== event.beam ? elem.beam : undefined,\n\t\t\t\t\tgrace: elem.grace !== !!event.grace ? elem.grace : undefined,\n\t\t\t\t\tfullMeasure: elem.fullMeasure || undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\tconst estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n\n\treturn {\n\t\tvoices: voices.filter((voice) => voice.length),\n\t\tduration: Math.max(...durations),\n\t\tevents: solutionEvents,\n\t\tpriority: -worstLoss,\n\t\testimatedDuration,\n\t};\n};\n\ninterface GlimpseMeasureOptions {\n\tpicker: BeadPicker;\n\tresetSignatureForDoubtfulOnly?: boolean;\n}\n\nconst glimpseMeasure = async (measure: SpartitoMeasure, { picker, resetSignatureForDoubtfulOnly }: GlimpseMeasureOptions): Promise => {\n\tconst clusters = measure.createClusters();\n\tconst eventMap = measure.eventMap;\n\n\tfor (const cluster of clusters) {\n\t\tif (!resetSignatureForDoubtfulOnly || measure.doubtfulTimesig) cluster.signatureDuration = 0; // re-estimate measure duration\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\t\tawait picker.predictCluster(cluster, 1);\n\n\t\tcluster.elements\n\t\t\t.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type))\n\t\t\t.forEach((elem) => {\n\t\t\t\tconst event = eventMap[elem.index!];\n\t\t\t\tevent.predisposition = elem.predisposition!;\n\t\t\t});\n\t}\n\n\tmeasure.estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n};\n\nconst estimateMeasure = async (measure: SpartitoMeasure, picker: BeadPicker): Promise =>\n\tglimpseMeasure(measure, { picker, resetSignatureForDoubtfulOnly: true });\n\nexport { BeadPicker, solveCluster, solveMeasure, estimateMeasure, glimpseMeasure };\n","import * as starry from '../starry';\nimport { MidiJson, ScoreJSON } from './types';\nimport { ChordColumn, Staff } from '../starry';\nimport { parseCode } from '../staffLayout';\nimport { MidiEvent } from '../performer';\n\nexport interface FindScoreResource {\n\tscoreJson: ScoreJSON;\n\tmidiJson: MidiJson;\n}\n\nconst SUPPORT_CLEF_TYPES = [starry.TokenType.ClefG, starry.TokenType.ClefF, starry.TokenType.ClefC];\n\nconst tokenToText = (token: starry.ContextedTerm) => {\n\tlet text = null;\n\tswitch (token.tokenType) {\n\t\tcase starry.TokenType.ClefG:\n\t\t\ttext = 'Treble';\n\t\t\tbreak;\n\t\tcase starry.TokenType.ClefF:\n\t\t\ttext = 'Bass';\n\t\t\tbreak;\n\t\tcase starry.TokenType.ClefC:\n\t\t\tif (token.y === -1) {\n\t\t\t\ttext = 'Tenor';\n\t\t\t} else {\n\t\t\t\ttext = 'Alto';\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\treturn text;\n};\n\nexport function encodeFindResource(score: starry.Score): FindScoreResource {\n\tconst perform = score.spartito.perform();\n\tconst maskImages = score.systems.map((sy) => sy.staves.map((st) => st?.maskImage)).flat();\n\tconst hasMaskImage = maskImages.filter(Boolean).length > maskImages.length / 2;\n\n\tconst scoreJson: ScoreJSON = {} as ScoreJSON;\n\n\tconst idsMap = new Map(); // starry内部ID到find播放器id的映射\n\tconst idsXMap = new Map(); // 内部ID和元素X坐标的映射\n\tconst idStaffIndexMap = new Map(); // 内部ID和元素所属part的内部staff索引\n\n\tscoreJson.unitSize = score.unitSize;\n\n\tscoreJson.title = {\n\t\ttitle: score.title,\n\t} as any;\n\n\tconst coverTexts: {\n\t\tconfidence: number;\n\t\tfontSize: number;\n\t\tid: string;\n\t\ttext: string;\n\t\ttextType: 'Title' | 'Author';\n\t\ttype: starry.TokenType;\n\t\twidth_: number;\n\t\tx: number;\n\t\ty: number;\n\t}[] = score.pages[0].tokens as any;\n\n\tif (Array.isArray(coverTexts) && coverTexts.length > 0) {\n\t\tconst [title, ...subtitles] = coverTexts\n\t\t\t.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Title')\n\t\t\t.sort((a, b) => b.fontSize - a.fontSize);\n\n\t\tif (title) {\n\t\t\tscoreJson.title.title = title.text;\n\t\t\tscoreJson.title.t = { size: title.fontSize };\n\t\t}\n\n\t\tif (subtitles?.length > 0) {\n\t\t\tsubtitles.sort((a, b) => a.y - b.y);\n\t\t\tscoreJson.title.subtitle = subtitles.map((x) => x.text).join('\\n');\n\t\t\tscoreJson.title.s = { size: subtitles.reduce((a, n) => a + n.fontSize, 0) / subtitles.length };\n\t\t}\n\n\t\tconst authors = coverTexts.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Author' && x.x > score.pages[0].width / 2);\n\n\t\tif (authors.length > 0) {\n\t\t\tscoreJson.title.composer = authors.map((x) => x.text).join('\\n');\n\t\t\tscoreJson.title.c = { size: authors.reduce((a, n) => a + n.fontSize, 0) / authors.length };\n\t\t}\n\t}\n\n\tscoreJson.page = {\n\t\tw: score.pages[0].width,\n\t\th: score.pages[0].height,\n\t};\n\n\tscoreJson.pages = score.pages.map((page) => {\n\t\tconst bgWidth = page.source.dimensions.width / page.source.interval;\n\t\tconst bgHeight = page.source.dimensions.height / page.source.interval;\n\n\t\tconst [a, b, c, d] = page.source.matrix;\n\n\t\treturn {\n\t\t\tsrc: page.source.url, // 本页本地图片URL\n\t\t\tw: bgWidth, // 背景图\n\t\t\th: bgHeight, // 背景图\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tl1: score.systems.indexOf(page.systems[0]), // 本页起始system编号\n\t\t\tls: page.systems.length, // 本页system数量\n\t\t\tmatrix: [\n\t\t\t\ta,\n\t\t\t\tb,\n\t\t\t\tc,\n\t\t\t\td,\n\t\t\t\t(-1 / 2) * a * bgWidth + (-1 / 2) * bgHeight * c + (1 / 2) * page.width || 0,\n\t\t\t\t(-1 / 2) * b * bgWidth + (-1 / 2) * bgHeight * d + (1 / 2) * page.height || 0,\n\t\t\t],\n\t\t};\n\t});\n\n\tscoreJson.parts = [];\n\tscoreJson.lines = [];\n\n\t// 没有降噪图就不需要这些字段\n\tif (hasMaskImage) {\n\t\tconst partTemplates = score.staffLayout.partGroups.map((p) => (p.range[0] === p.range[1] ? [p.range[0]] : p.range));\n\t\tconst tokenMap = score.getTokenMap();\n\t\tconst measureXs: number[][] = [];\n\n\t\t// partIndex: part索引,template: 当前part所包含的staff的全局索引\n\t\tfor (const [partIndex, template] of partTemplates.entries()) {\n\t\t\tconst staffIndexBase = partTemplates.slice(0, partIndex).flat().length;\n\n\t\t\tconst part: ScoreJSON['parts'][0] = {\n\t\t\t\tmeasures: [],\n\t\t\t};\n\n\t\t\tscore.systems.forEach((system, systemIndex) => {\n\t\t\t\tconst staves = system.staves.slice();\n\n\t\t\t\t// 不可见staff用null填充的staff列表\n\t\t\t\tconst paddedStaves = partTemplates.flat().map((staffIndex) => (!((1 << staffIndex) & system.staffMask) ? null : staves.shift()));\n\t\t\t\tconst bars = [0, ...system.measureBars];\n\n\t\t\t\t// 便历当前system下的小节\n\t\t\t\tfor (let mi = 0; mi < system.measureCount; mi++) {\n\t\t\t\t\tconst measureIndex = score.spartito.measureIndexMapping[system.headMeasureIndex + mi];\n\n\t\t\t\t\t// 如果小节被过滤\n\t\t\t\t\tif (!Number.isFinite(measureIndex)) {\n\t\t\t\t\t\tif (bars.length > mi + 1) bars[mi + 1] = bars[mi];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst chordColumns: { chord: ChordColumn; staffIndexInPart: number }[] = [];\n\n\t\t\t\t\tfor (const staffIndex of template) {\n\t\t\t\t\t\tconst staff = paddedStaves[staffIndex];\n\n\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\tchordColumns.push(...staff.measures[mi].getChords().map((chord) => ({ chord, staffIndexInPart: staffIndex - staffIndexBase })));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet noteIndex = 0;\n\n\t\t\t\t\tconst measureStartX = bars[mi]; // 小节开头相对system的x偏移\n\n\t\t\t\t\tconst measureNotes = [];\n\n\t\t\t\t\tchordColumns.forEach(({ staffIndexInPart, chord }) => {\n\t\t\t\t\t\tconst elems = [];\n\n\t\t\t\t\t\tlet firstX = chord.tip ? chord.tip.x : chord.right - chord.left / 2;\n\n\t\t\t\t\t\tchord.noteIds.forEach((noteId, key) => {\n\t\t\t\t\t\t\tconst token = tokenMap.get(noteId);\n\n\t\t\t\t\t\t\tconst innerId = `n_${partTemplates.length > 1 ? partIndex + '_' : ''}${measureIndex}_${noteIndex}`;\n\t\t\t\t\t\t\tnoteIndex++;\n\t\t\t\t\t\t\tidsMap.set(token.id, innerId);\n\t\t\t\t\t\t\tidsXMap.set(token.id, (token.left + token.right) / 2 - measureStartX);\n\t\t\t\t\t\t\tidStaffIndexMap.set(token.id, staffIndexInPart + 1);\n\n\t\t\t\t\t\t\telems.push({\n\t\t\t\t\t\t\t\tline: -chord.ys[key] * 2, // 五线中线为0,往上为正/向下为负,每半格子1个单位\n\t\t\t\t\t\t\t\tid: innerId, // n_小节号_第几个音符\n\t\t\t\t\t\t\t\t// acc: {\n\t\t\t\t\t\t\t\t// \tacc: AccType.Flat,\n\t\t\t\t\t\t\t\t// \tx: -1\n\t\t\t\t\t\t\t\t// }, // 临时升降记号及其偏移量\n\t\t\t\t\t\t\t\tstaff: staffIndexInPart + 1,\n\t\t\t\t\t\t\t\tx: (token.left + token.right) / 2 - firstX, // 当前符头相对第一个符头的偏移量\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tmeasureXs[measureIndex] = measureXs[measureIndex] || [];\n\t\t\t\t\t\tmeasureXs[measureIndex].push(firstX - measureStartX);\n\n\t\t\t\t\t\tconst events = score.spartito.measures[system.headMeasureIndex + mi].events.filter((x) =>\n\t\t\t\t\t\t\tx.noteIds.some((y) => chord.noteIds.includes(y))\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tmeasureNotes.push({\n\t\t\t\t\t\t\telems,\n\t\t\t\t\t\t\tx: firstX - measureStartX, // 本音符相对于小节开头的x偏移量\n\t\t\t\t\t\t\ttype: 2 ** chord.division, // n分音符,1为全音符\n\t\t\t\t\t\t\t...(events.some((x) => x.grace) ? { grace: {} } : {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tpart.measures[measureIndex] = {\n\t\t\t\t\t\tw: bars[mi + 1] - bars[mi], // 本小节宽度\n\t\t\t\t\t\tstaves: template.length, // 本part的staff个数\n\t\t\t\t\t\tnotes: measureNotes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// 提取谱号、调号\n\t\t\tlet lastFifths = null;\n\t\t\tscore.spartito.measures.forEach((measure, i) => {\n\t\t\t\tconst measureIndex = score.spartito.measureIndexMapping[i];\n\n\t\t\t\tconst clefTokens = measure.contexts.flat().filter((x) => SUPPORT_CLEF_TYPES.includes(x.tokenType) && template.includes(x.staff));\n\t\t\t\tconst clefs = clefTokens.map((token) => {\n\t\t\t\t\tconst pt = partTemplates.find((p) => p.includes(token.staff));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\tclef: tokenToText(token),\n\t\t\t\t\t\tstaff: pt.indexOf(token.staff) + 1, // staff索引从1开始\n\t\t\t\t\t\ttick: token.tick,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\tif (clefs.length > 0) {\n\t\t\t\t\tpart.measures[measureIndex] && (part.measures[measureIndex].clefs = clefs);\n\t\t\t\t}\n\n\t\t\t\tconst fifths = measure.basics.filter((x, i) => (1 << i) & measure.staffMask)[0].keySignature;\n\n\t\t\t\tif (fifths !== lastFifths) {\n\t\t\t\t\tpart.measures[measureIndex] && (part.measures[measureIndex].fifths = { fifths });\n\t\t\t\t\tlastFifths = fifths;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (part.measures.length > 0) {\n\t\t\t\tscoreJson.parts[partIndex] = part;\n\t\t\t}\n\t\t}\n\n\t\tscore.systems.forEach((system, systemIndex) => {\n\t\t\tconst lineStaves = [];\n\n\t\t\tconst systemTopStaff = system.staves[0];\n\t\t\tconst systemBottomStaff = system.staves[system.staves.length - 1];\n\n\t\t\tconst systemTopStaffY = systemTopStaff.top + systemTopStaff.staffY - 2;\n\t\t\tconst systemBottomStaffY = systemBottomStaff.top + systemBottomStaff.staffY - 2;\n\n\t\t\tconst staves = system.staves.slice();\n\n\t\t\tconst paddedStaves = partTemplates.flat().map((staffIndex) => {\n\t\t\t\tconst isEmpty = !((1 << staffIndex) & system.staffMask);\n\t\t\t\tif (isEmpty) {\n\t\t\t\t\treturn null;\n\t\t\t\t} else {\n\t\t\t\t\treturn staves.shift();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet lastPartLastStaff = null;\n\n\t\t\tfor (const [partIndex, template] of partTemplates.entries()) {\n\t\t\t\tconst partStaves: Staff[] = template.map((staffIndex) => paddedStaves.find((s) => s?.index === staffIndex) || null);\n\n\t\t\t\tconst staffs = partStaves.map((staff, index) => [index, !staff] as [number, boolean]).filter((s) => s[1]);\n\n\t\t\t\tlet details = null;\n\t\t\t\tif (staffs.length > 0) {\n\t\t\t\t\tdetails = Object.fromEntries(staffs.map((d) => [d[0] + 1, { hide: d[1] }]));\n\t\t\t\t}\n\n\t\t\t\tlet y = 0;\n\t\t\t\tlet height = 0;\n\n\t\t\t\tconst visibleStaves = partStaves.filter((s) => !!s);\n\n\t\t\t\tif (visibleStaves.length > 0) {\n\t\t\t\t\tconst partTopStaff = visibleStaves[0];\n\t\t\t\t\tconst partBottomStaff = visibleStaves[visibleStaves.length - 1];\n\t\t\t\t\tconst partTopStaffY = partTopStaff.top + partTopStaff.staffY - 2;\n\t\t\t\t\tconst partBottomStaffY = partBottomStaff.top + partBottomStaff.staffY - 2;\n\n\t\t\t\t\ty = partTopStaffY - systemTopStaffY;\n\t\t\t\t\theight = partBottomStaffY - partTopStaffY + 4;\n\t\t\t\t}\n\n\t\t\t\tconst { list: distances, last } = partStaves.reduce(\n\t\t\t\t\t(acc, next, index) => {\n\t\t\t\t\t\tif (acc.last === null || next === null) {\n\t\t\t\t\t\t\tif (index === 0 && y > 0) {\n\t\t\t\t\t\t\t\tacc.list.push(y - 4);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tacc.list.push(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tacc.list.push(next.top + next.staffY - (acc.last.top + acc.last.staffY) - 4);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tacc.last = next || acc.last;\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{ last: lastPartLastStaff, list: [] } as { last: Staff; list: number[] }\n\t\t\t\t);\n\n\t\t\t\tlastPartLastStaff = last;\n\n\t\t\t\tconst imgs = partStaves.map((staff) => {\n\t\t\t\t\tif (staff?.maskImage) {\n\t\t\t\t\t\tconst rect = staff.imagePosition;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsrc: staff.maskImage,\n\t\t\t\t\t\t\tx: rect.x,\n\t\t\t\t\t\t\ty: system.top + staff.top + rect.y - (system.top + staff.top + staff.staffY - 2),\n\t\t\t\t\t\t\tw: rect.width,\n\t\t\t\t\t\t\th: rect.height,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t});\n\n\t\t\t\tconst spartitoMeasure = score.spartito.measures[system.headMeasureIndex];\n\t\t\t\tlineStaves.push({\n\t\t\t\t\t// parts\n\t\t\t\t\tdistances, // 两个staff间距\n\t\t\t\t\timgs,\n\t\t\t\t\ty, // 本staff相对于当前system第一线的起始y坐标\n\t\t\t\t\tstaves: template.length, // 本staff数量\n\t\t\t\t\tparti: partIndex, // 本staff所属part编号\n\t\t\t\t\theight, // 本staff高度\n\t\t\t\t\t...(details ? { details } : {}),\n\t\t\t\t\tclef: Object.fromEntries(\n\t\t\t\t\t\tscore.spartito.measures[system.headMeasureIndex]?.contexts\n\t\t\t\t\t\t\t.flat()\n\t\t\t\t\t\t\t.filter((x) => SUPPORT_CLEF_TYPES.includes(x.tokenType) && template.includes(x.staff))\n\t\t\t\t\t\t\t.map((token) => [token.staff, tokenToText(token)])\n\t\t\t\t\t),\n\t\t\t\t\tfifths: spartitoMeasure.basics.filter((x, i) => (1 << i) & spartitoMeasure.staffMask)[0].keySignature,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst mIndices = system.measureBars\n\t\t\t\t.map((_, i) => score.spartito.measureIndexMapping[system.headMeasureIndex + i])\n\t\t\t\t.filter((x) => Number.isFinite(x));\n\n\t\t\tscoreJson.lines[systemIndex] = {\n\t\t\t\tm1: mIndices[0], // 本system起始小节编号\n\t\t\t\tm2: mIndices.length > 0 ? mIndices[mIndices.length - 1] + 1 : undefined, // 本system结尾小节编号+1\n\t\t\t\tx: system.left, // 本system左侧小节线x坐标\n\t\t\t\ty: system.top + systemTopStaffY, // 本system左侧小节线y坐标\n\t\t\t\tw: system.measureBars[system.measureBars.length - 1], // 本system宽度\n\t\t\t\th: systemBottomStaffY - systemTopStaffY + 4, // 本system高度\n\t\t\t\tlineStaves,\n\t\t\t};\n\t\t});\n\n\t\tconst map = { 0: 'default', 1: 'brace', 2: 'bracket', 3: 'square' };\n\n\t\tconst staffLayout = parseCode(score.staffLayoutCode);\n\t\tconst sortedParts = staffLayout.partGroups\n\t\t\t.map((x) => {\n\t\t\t\treturn {\n\t\t\t\t\tsort: x.range[0],\n\t\t\t\t\tpart: x,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((a, b) => a.sort - b.sort)\n\t\t\t.map((x) => x.part);\n\n\t\tscoreJson.groups = staffLayout.groups\n\t\t\t.filter((x) => x.group.type !== 0)\n\t\t\t.map((part, key) => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: map[part.group.type] as any,\n\t\t\t\t\tp1: sortedParts.findIndex((x) => x.range.includes(part.range[0])),\n\t\t\t\t\tp2: sortedParts.findIndex((x) => x.range.includes(part.range[part.range.length - 1])),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.filter((x) => x.type !== 'default');\n\t}\n\n\tif (perform) {\n\t\tscoreJson.measInfo = perform.notation.measures.map((measure, measureIndex) => {\n\t\t\tconst map = new Map();\n\t\t\tmeasure.notes.forEach((n) => {\n\t\t\t\tmap.set(n.tick, [...(map.get(n.tick) || []), idsXMap.get(n.id)]);\n\t\t\t});\n\n\t\t\t// 找出每个tick对应的第一个音符的中心点的x\n\t\t\treturn Array.from(map.entries())\n\t\t\t\t.sort((a, b) => +a[0] - b[0])\n\t\t\t\t.reduce(\n\t\t\t\t\t(acc, ent, key) => {\n\t\t\t\t\t\tconst val = ent[1].find((x) => x > acc.last) || ent[1][0];\n\t\t\t\t\t\tacc.list.push(val);\n\t\t\t\t\t\tacc.last = val;\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{ last: null, list: [] }\n\t\t\t\t)\n\t\t\t\t.list.filter(Number.isFinite);\n\t\t});\n\t}\n\n\t/******************************* 生成 midiJson *************************************/\n\n\tlet midiJson: MidiJson;\n\n\tif (perform) {\n\t\tmidiJson = {} as MidiJson;\n\n\t\tconst idNoteMap = new Map();\n\n\t\tlet beatsCurrent;\n\t\tlet beatsUnitCurrent;\n\t\tperform.notation.measures.forEach((measure, mIndex) => {\n\t\t\tconst { numerator: beats, denominator: beatsUnit } = measure.timeSignature;\n\n\t\t\tif (!midiJson.beats && !midiJson.beatsUnit) {\n\t\t\t\tmidiJson.beats = beats;\n\t\t\t\tmidiJson.beatsUnit = beatsUnit;\n\t\t\t\tbeatsCurrent = beats;\n\t\t\t\tbeatsUnitCurrent = beatsUnit;\n\t\t\t}\n\n\t\t\tmidiJson.beatInfos = midiJson.beatInfos || [];\n\n\t\t\tif (beatsCurrent !== beats || beatsUnitCurrent !== beatsUnit) {\n\t\t\t\tbeatsCurrent = beats;\n\t\t\t\tbeatsUnitCurrent = beatsUnit;\n\n\t\t\t\tmidiJson.beatInfos.push({\n\t\t\t\t\ttick: measure.tick,\n\t\t\t\t\tbeats,\n\t\t\t\t\tbeatsUnit,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tmidiJson.tempos = midiJson.tempos || [];\n\n\t\t\tmeasure.events.forEach((evt) => {\n\t\t\t\tif (evt.data.type === 'meta' && evt.data.subtype === 'setTempo') {\n\t\t\t\t\tmidiJson.tempos.push({\n\t\t\t\t\t\ttick: measure.tick,\n\t\t\t\t\t\ttempo: evt.data.microsecondsPerBeat,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tmidiJson.measures = perform.notation.measures.reduce((acc, measure, index) => {\n\t\t\tconst note_ticks = Array.from(new Set(measure.notes.map((x) => x.tick))).sort((a, b) => a - b);\n\n\t\t\tmeasure.notes.forEach((x) => {\n\t\t\t\tidNoteMap.set(x.id, note_ticks.indexOf(x.tick));\n\t\t\t});\n\n\t\t\tacc[measure.tick] = {\n\t\t\t\tmeasure: index, // 小节编号\n\t\t\t\tduration: measure.duration, // 小节时值\n\t\t\t\tnote_ticks, // 本小节每列的tick\n\t\t\t};\n\n\t\t\treturn acc;\n\t\t}, {});\n\n\t\tmidiJson.measureInfos = perform.notation.measures.map((measure, key) => ({\n\t\t\tnumber: String(key + 1), // 小节编号\n\t\t\tfifths: measure.keySignature, // 调号 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7\n\t\t\tbeats: measure.timeSignature.numerator, // 拍号分子\n\t\t\tbeatUnit: measure.timeSignature.denominator, // 拍号分母\n\t\t}));\n\n\t\tconst midi = perform.notation.toPerformingMIDI(perform.notation.measures.map((_, key) => key + 1));\n\n\t\tconst tracks = midi.tracks as unknown as (MidiEvent & { duration: number })[][];\n\n\t\tconst { partGroups } = score.staffLayout;\n\n\t\tlet mergedTracks = tracks.map((track, trackIndex) => {\n\t\t\tconst key = partGroups[trackIndex].key;\n\n\t\t\tlet program: number;\n\n\t\t\tswitch (key) {\n\t\t\t\tcase 'vi':\n\t\t\t\tcase 'vi1':\n\t\t\t\tcase 'vi2':\n\t\t\t\t\tprogram = 40; // 小提琴\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'viola':\n\t\t\t\t\tprogram = 42; // 中提琴\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'vo':\n\t\t\t\t\tprogram = 55; // 合成人声\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'basso':\n\t\t\t\t\tprogram = 71; // 大管乐器\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: // 大钢琴\n\t\t\t\t\tprogram = 0;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tprogram, // 音色:0-127\n\t\t\t\tchannel: trackIndex, // 通道:0-15\n\t\t\t\tname: score.instrumentDict[key] ?? 'Piano', // 轨道名称\n\t\t\t\ttrack,\n\t\t\t};\n\t\t});\n\n\t\t// 找出大谱表所在track(声部),根据分手条件拆分为左右手\n\t\tif (partGroups.some((g) => g.group.grand)) {\n\t\t\tconst lhPattern = /l\\.?h\\.?|左手|left hand/i;\n\t\t\tconst rhPattern = /r\\.?h\\.?|右手|right hand/i;\n\t\t\tconst instrus = Object.entries(score.instrumentDict)\n\t\t\t\t.filter(([key, value]) => lhPattern.test(value) || rhPattern.test(value))\n\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\thand: lhPattern.test(value) ? 'left' : 'right',\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\tlet handStaves: number[] = null;\n\t\t\tlet partIndex;\n\n\t\t\t// 标记了左右手\n\t\t\tif (instrus.length === 2 && instrus[0].hand !== instrus[1].hand) {\n\t\t\t\tconst left = instrus.find((x) => x.hand === 'left');\n\t\t\t\tconst right = instrus.find((x) => x.hand === 'right');\n\t\t\t\thandStaves = [score.staffLayout.staffIds.findIndex((x) => x === right?.key), score.staffLayout.staffIds.findIndex((x) => x === left?.key)];\n\n\t\t\t\tpartIndex = partGroups.findIndex((g) => g.range[0] <= Math.min(...handStaves) && g.range[1] >= Math.max(...handStaves));\n\t\t\t}\n\n\t\t\tif (Number.isFinite(partIndex) && partIndex > -1) {\n\t\t\t\tconst trackToSplit = mergedTracks[partIndex];\n\t\t\t\tconst newTracks: any[][] = []; // Array.from(new Set(firstTrack.track.map(x => x.channel))).sort((a, b) => a - b)\n\n\t\t\t\ttrackToSplit.track.forEach((evt) => {\n\t\t\t\t\tif (Number.isFinite(evt.staff)) {\n\t\t\t\t\t\tif (!newTracks[evt.staff]) {\n\t\t\t\t\t\t\tnewTracks[evt.staff] = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnewTracks[evt.staff].push(evt);\n\t\t\t\t\t}\n\t\t\t\t\tif (evt.type === 'meta') {\n\t\t\t\t\t\tnewTracks.forEach((stave) => {\n\t\t\t\t\t\t\tstave.push(evt);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmergedTracks.splice(partIndex, 1, newTracks.filter(Boolean).map((track) => ({ ...trackToSplit, track })) as any);\n\n\t\t\t\tmergedTracks = mergedTracks.flat();\n\n\t\t\t\t// 指定左右手track\n\t\t\t\tmidiJson.rightHandTrack = handStaves[0];\n\t\t\t\tmidiJson.leftHandTrack = handStaves[1];\n\t\t\t} else {\n\t\t\t\tmergedTracks.sort((a, b) => (a === mergedTracks[partIndex] ? -1 : 0));\n\t\t\t}\n\t\t}\n\n\t\tmidiJson.tracks = mergedTracks.map(({ program, channel, name }) => ({ program, channel, name }));\n\n\t\tconst transformedTracks = mergedTracks.map(({ track }) => {\n\t\t\tconst pitchMap: Map = new Map();\n\n\t\t\treturn track.map((evt) => {\n\t\t\t\tif (evt.subtype === 'noteOn') {\n\t\t\t\t\tpitchMap.set(evt.noteNumber, evt);\n\t\t\t\t}\n\n\t\t\t\tif (evt.subtype === 'noteOff') {\n\t\t\t\t\tconst onEvent = pitchMap.get(evt.noteNumber);\n\t\t\t\t\tif (onEvent?.noteNumber === evt.noteNumber) {\n\t\t\t\t\t\tonEvent.duration = evt.ticks - onEvent.ticks;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn evt;\n\t\t\t});\n\t\t});\n\n\t\tconst measureTickMap = new Map(Object.entries(midiJson.measures).map(([tick, m]) => [m.measure, +tick]));\n\n\t\tmidiJson.events = (transformedTracks as (MidiEvent & { duration: number; numId?: string; ticks: number })[][])\n\t\t\t.map((track, trackIndex) => {\n\t\t\t\treturn track\n\t\t\t\t\t.filter((x) => x.type === 'channel')\n\t\t\t\t\t.map((evt) => {\n\t\t\t\t\t\tif (evt?.ids?.[0]) {\n\t\t\t\t\t\t\tevt.numId = idsMap.get(evt.ids[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet newEvent: [number, number, number] = [0, 0, 0];\n\n\t\t\t\t\t\tswitch (evt.subtype) {\n\t\t\t\t\t\t\tcase 'noteOn':\n\t\t\t\t\t\t\t\tnewEvent = [0x90 | evt.channel, evt.noteNumber, evt.velocity];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'noteOff':\n\t\t\t\t\t\t\t\tnewEvent = [0x80 | evt.channel, evt.noteNumber, evt.velocity ? evt.velocity : 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'noteAftertouch':\n\t\t\t\t\t\t\t\tnewEvent = [0xa0 | evt.channel, evt.noteNumber, evt.amount];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'controller':\n\t\t\t\t\t\t\t\tnewEvent = [0xb0 | evt.channel, evt.controllerType, evt.value];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'programChange':\n\t\t\t\t\t\t\t\tnewEvent = [0xc0 | evt.channel, evt.programNumber, 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'channelAftertouch':\n\t\t\t\t\t\t\t\tnewEvent = [0xd0 | evt.channel, evt.amount, 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'pitchBend':\n\t\t\t\t\t\t\t\tnewEvent = [0xe0 | evt.channel, evt.value & 0xff, (evt.value >> 7) & 0xff];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tthrow new Error('unhandled event subtype:' + evt.subtype);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...(evt.subtype === 'noteOn' ? { id: idsMap.get(evt?.ids?.[0]) } : {}), // 对应符头的id\n\t\t\t\t\t\t\ttick: evt.ticks,\n\t\t\t\t\t\t\tchannel: evt.channel,\n\t\t\t\t\t\t\tduration: evt.duration, // 只有note on事件有时值\n\t\t\t\t\t\t\ttrack: trackIndex, // evt.staffTrack, // 所属track\n\t\t\t\t\t\t\tevent: newEvent, // [event, note, velocity]\n\t\t\t\t\t\t\telem_ids: evt?.ids.map((id) => idsMap.get(id)),\n\t\t\t\t\t\t\tmeasure: evt.measure - 1, // 所属小节编号\n\t\t\t\t\t\t\tmeas_start_tick: measureTickMap.get(evt.measure - 1), // 所属小节起始tick\n\t\t\t\t\t\t\tstaff: idStaffIndexMap.get(evt.ids[0]),\n\t\t\t\t\t\t\tnote: idNoteMap.get(evt.ids[0]),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1)\n\t\t\t.sort((a, b) => {\n\t\t\t\tfor (const field of ['tick', 'measure', 'track']) {\n\t\t\t\t\tif (a[field] !== b[field]) {\n\t\t\t\t\t\treturn a[field] - b[field];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn 0;\n\t\t\t});\n\t}\n\n\treturn {\n\t\tscoreJson,\n\t\tmidiJson,\n\t};\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { EventEmitter } from 'events';\n\ninterface DSPromiseOption {\n\ttimeout?: number;\n}\n\nexport function destructPromise(\n\toptions: DSPromiseOption = {}\n): [promise: Promise, resolve: (value: T | PromiseLike) => void, reject: (reason?: any) => void] {\n\tconst { timeout } = options;\n\tlet rs: (value: T | PromiseLike) => void;\n\tlet rj: (reason: any) => void;\n\n\treturn [\n\t\tnew Promise((resolve, reject) => {\n\t\t\trs = resolve;\n\t\t\trj = reject;\n\n\t\t\tif (timeout >= 0) setTimeout(rj, timeout, 'timeout');\n\t\t}),\n\t\trs,\n\t\trj,\n\t];\n}\n\ntype AsyncTask = [fn: (data: any) => Promise, payload: any, resolve: (data: any) => void, reject: (reason: any) => void];\n\nexport class AsyncQueue extends EventEmitter {\n\tprivate working = false;\n\n\ttasks: AsyncTask[];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.working = false;\n\t\tthis.tasks = [];\n\t\tprocess.nextTick(() => {\n\t\t\tthis.emit('idle');\n\t\t});\n\t}\n\n\tprivate async _digest(item: AsyncTask) {\n\t\tthis.working = true;\n\n\t\tconst [taskFn, payload, resolve, reject] = item;\n\t\tawait taskFn(payload).then(resolve, reject);\n\n\t\tif (this.tasks.length > 0) {\n\t\t\tawait this._digest(this.tasks.shift());\n\t\t} else {\n\t\t\tthis.working = false;\n\t\t\tthis.emit('idle');\n\t\t}\n\t}\n\n\t/**\n\t * 添加队列任务\n\t * @param task\n\t * @param options\n\t */\n\taddTask(task: [AsyncTask[0], AsyncTask[1]], { timeout = 600000 }: { timeout?: number } = {}): Promise {\n\t\tconst [promise, resolve, reject] = destructPromise({ timeout });\n\n\t\tif (this.working) {\n\t\t\tthis.tasks.push([...task, resolve, reject]);\n\t\t} else {\n\t\t\tthis._digest([...task, resolve, reject]);\n\t\t}\n\n\t\treturn promise;\n\t}\n}\n","import { pack, unpack } from 'msgpackr';\nimport { Request } from 'zeromq';\nimport { AsyncQueue } from './async-queue';\n\ninterface Response {\n\tcode: number;\n\tmsg: string;\n\tdata?: any;\n}\n\nexport interface Logger {\n\tinfo: (...data: any[]) => void;\n\terror: (...data: any[]) => void;\n}\n\ntype PyArgs = any[];\ntype PyKwargs = Record;\n\nexport default class ZeroClient {\n\tlogger: Logger;\n\tprivate socket: Request;\n\tprivate queue: AsyncQueue = new AsyncQueue();\n\n\tprivate url: string;\n\n\tconstructor(logger: Logger = console) {\n\t\tthis.logger = logger;\n\t}\n\n\tbind(url?: string) {\n\t\turl && (this.url = url);\n\t\tthis.socket = new Request({\n\t\t\tsendTimeout: 15e3,\n\t\t\treceiveTimeout: 300e3,\n\t\t});\n\n\t\tthis.socket.connect(this.url);\n\t}\n\n\tprivate __request(payload) {\n\t\tlet retryTimes = 0;\n\n\t\tconst req = async (data) => {\n\t\t\ttry {\n\t\t\t\tif (this.socket.closed) this.bind();\n\t\t\t\treturn await this.socket.send(pack(data)).then(() => this.socket.receive());\n\t\t\t} catch (err) {\n\t\t\t\tif (retryTimes < 2) {\n\t\t\t\t\tretryTimes++;\n\t\t\t\t\tconsole.log(`请求失败,${err.stack}`);\n\t\t\t\t\tconsole.error(`3s后重试第${retryTimes}次`);\n\t\t\t\t\tthis.socket.close();\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 3000));\n\t\t\t\t\treturn req(data);\n\t\t\t\t} else {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn req(payload);\n\t}\n\n\tasync request(method: string, args: PyArgs | PyKwargs = null, kwargs: PyKwargs = null): Promise {\n\t\tconst [args_, kwargs_] = Array.isArray(args) ? [args, kwargs] : [undefined, args];\n\t\tconst msg: any = { method };\n\t\tif (args_) msg.args = args_;\n\t\tif (kwargs_) msg.kwargs = kwargs_;\n\n\t\treturn this.queue.addTask([\n\t\t\tasync (opt) => {\n\t\t\t\tconst [result] = await this.__request(opt);\n\n\t\t\t\tconst obj = unpack(result) as Response;\n\n\t\t\t\tif (obj.code === 0) {\n\t\t\t\t\treturn obj.data;\n\t\t\t\t} else {\n\t\t\t\t\treturn Promise.reject(obj.msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmsg,\n\t\t]);\n\t}\n}\n","import { getPortPromise } from 'portfinder';\nimport { Options, PythonShell } from 'python-shell';\nimport { defaultsDeep } from 'lodash';\nimport ZeroClient, { Logger } from './ZeroClient';\n\nexport default class PyProcessor extends ZeroClient {\n\tprivate readonly scriptPath: string;\n\tprivate readonly options: Options;\n\tprivate pyShell: PythonShell;\n\n\tprivate retryCount: number = 0;\n\tprivate retryDelay: number = 3000;\n\n\tconstructor(scriptPath: string, options: Options = {}, logger: Logger = console) {\n\t\tsuper(logger);\n\t\tthis.scriptPath = scriptPath;\n\t\tthis.options = options;\n\t}\n\n\tasync bind(port?: string | number) {\n\t\tconst freePort =\n\t\t\tport ||\n\t\t\t(await getPortPromise({\n\t\t\t\tport: 12022,\n\t\t\t\tstopPort: 12122,\n\t\t\t}));\n\n\t\t// \"./streamPredictor.py\", \"--inspect\"\n\t\tconst options = defaultsDeep(\n\t\t\t{\n\t\t\t\targs: [...(this.options.args || []), '-p', `${freePort}`],\n\t\t\t},\n\t\t\tthis.options\n\t\t);\n\n\t\tthis.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`);\n\n\t\tthis.pyShell = new PythonShell(this.scriptPath, options);\n\n\t\tthis.pyShell.stdout.on('data', (data) => this.logger.info(data));\n\n\t\tthis.pyShell.on('pythonError', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`, err));\n\t\tthis.pyShell.on('stderr', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`, err));\n\t\tthis.pyShell.on('error', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} error:`, err));\n\t\tthis.pyShell.on('close', () => {\n\t\t\t// python子进程关闭事件\n\t\t\tif (this.retryCount < 5) {\n\t\t\t\tthis.retryCount++;\n\t\t\t\tthis.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.bind();\n\t\t\t\t}, this.retryDelay);\n\t\t\t}\n\t\t});\n\n\t\tsuper.bind(`tcp://127.0.0.1:${freePort}`);\n\t}\n}\n","module.exports = function isBuffer(arg) {\n return arg instanceof Buffer;\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","try {\n var util = require('util');\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n module.exports = require('./inherits_browser.js');\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","import ZeroClient, { Logger } from './ZeroClient';\nimport * as starry from '../../src/starry';\nimport PyProcessor from './PyProcessor';\nimport { destructPromise } from './async-queue';\nimport { getPort } from 'portfinder';\nimport util from 'util';\nimport { Options } from 'python-shell';\n\nconst getPortPromise = util.promisify(getPort);\n\nexport interface LayoutResult {\n\tdetection: starry.PageLayout;\n\ttheta: number;\n\tinterval: number;\n\tsourceSize?: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n}\n\nexport interface PredictorInterface {\n\tlayout: (streams: Buffer[]) => LayoutResult[];\n\tlayout$reinforce: (streams: Buffer[], baseLayouts: LayoutResult[]) => LayoutResult[];\n\tgauge: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tmask: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tsemantic: (streams: Buffer[]) => any[];\n\ttextLoc: (streams: Buffer[]) => any[];\n\ttextOcr: (params: { buffers: Buffer[]; location: any[] }) => any[];\n\tbrackets: (params: { buffers: Buffer[] }) => any[];\n\ttopo: (params: { clusters: starry.EventCluster[] }) => any[];\n\tgaugeRenderer: (params: [Buffer, Buffer, number]) => { buffer: Buffer; size: { width: number; height: number } };\n\tjianpu: (params: { buffers: Buffer[] }) => any[];\n\t// [source: Buffer, gauge: Buffer, baseY: number]\n}\n\ntype PredictorType = keyof PredictorInterface;\n\nexport type PyClientsConstructOptions = Partial>;\n\nexport class PyClients {\n\tclients = new Map>();\n\n\tconstructor(public readonly options: PyClientsConstructOptions, public readonly logger: Logger = console) {}\n\n\tasync getClient(type: PredictorType) {\n\t\tif (this.clients.has(type)) {\n\t\t\treturn this.clients.get(type);\n\t\t}\n\n\t\tconst [promise, resolve, reject] = destructPromise();\n\n\t\tconst opt = this.options[type];\n\n\t\tif (!opt) {\n\t\t\tthrow new Error(`no config for client \\`${type}\\` found`);\n\t\t}\n\n\t\ttry {\n\t\t\tif (typeof opt === 'string') {\n\t\t\t\tconst client = new ZeroClient();\n\t\t\t\tclient.bind(opt);\n\t\t\t\tresolve(client);\n\t\t\t} else {\n\t\t\t\tconst { scriptPath, ...option } = opt;\n\t\t\t\tconst client = new PyProcessor(scriptPath, option, this.logger);\n\t\t\t\tawait client.bind(`${await getPortPromise()}`);\n\t\t\t\tresolve(client);\n\t\t\t}\n\n\t\t\tthis.logger.info(`PyClients: ${type} started`);\n\t\t} catch (err) {\n\t\t\tthis.logger.error(`PyClients: ${type} start fail: ${JSON.stringify(err)}`);\n\t\t\treject(err);\n\t\t}\n\n\t\tthis.clients.set(type, promise);\n\n\t\treturn promise;\n\t}\n\n\tasync checkHost(type: PredictorType): Promise {\n\t\tconst client = await this.getClient(type);\n\n\t\treturn client.request('checkHost');\n\t}\n\n\tasync warmup() {\n\t\tconst opts = Object.keys(this.options) as PredictorType[];\n\t\tawait Promise.all(opts.map((type) => this.getClient(type)));\n\t}\n\n\t/**\n\t * 模型预测\n\t * @param type layout | mask | gauge | semantic\n\t * @param args\n\t */\n\tasync predictScoreImages(type: T, ...args: Parameters): Promise> {\n\t\tconst clientType = type.split('$')[0] as PredictorType;\n\t\tconst client = await this.getClient(clientType);\n\t\tlet res = null;\n\n\t\tthis.logger.info(`[predictor]: ${type} py start..`);\n\t\tconst start = Date.now();\n\n\t\tswitch (type) {\n\t\t\tcase 'layout':\n\t\t\t\tres = await client.request('predictDetection', args);\n\t\t\t\tbreak;\n\t\t\tcase 'layout$reinforce':\n\t\t\t\tres = await client.request('predictReinforce', args);\n\t\t\t\tbreak;\n\t\t\tcase 'gauge':\n\t\t\tcase 'mask':\n\t\t\t\tres = await client.request('predict', args, { by_buffer: true });\n\t\t\t\tbreak;\n\t\t\tcase 'semantic':\n\t\t\tcase 'textLoc':\n\t\t\t\tres = await client.request('predict', args);\n\t\t\t\tbreak;\n\t\t\tcase 'textOcr':\n\t\t\tcase 'brackets':\n\t\t\tcase 'topo':\n\t\t\tcase 'gaugeRenderer':\n\t\t\tcase 'jianpu':\n\t\t\t\tres = await client.request('predict', ...args);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.logger.error(`[predictor]: no predictor ${type}`);\n\t\t}\n\n\t\tthis.logger.info(`[predictor]: ${type} py duration: ${Date.now() - start}ms`);\n\n\t\treturn res;\n\t}\n}\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","(function() {\n var crypt = require('crypt'),\n utf8 = require('charenc').utf8,\n bin = require('charenc').bin,\n\n // The core\n sha1 = function (message) {\n // Convert to byte array\n if (message.constructor == String)\n message = utf8.stringToBytes(message);\n else if (typeof Buffer !== 'undefined' && typeof Buffer.isBuffer == 'function' && Buffer.isBuffer(message))\n message = Array.prototype.slice.call(message, 0);\n else if (!Array.isArray(message))\n message = message.toString();\n\n // otherwise assume byte array\n\n var m = crypt.bytesToWords(message),\n l = message.length * 8,\n w = [],\n H0 = 1732584193,\n H1 = -271733879,\n H2 = -1732584194,\n H3 = 271733878,\n H4 = -1009589776;\n\n // Padding\n m[l >> 5] |= 0x80 << (24 - l % 32);\n m[((l + 64 >>> 9) << 4) + 15] = l;\n\n for (var i = 0; i < m.length; i += 16) {\n var a = H0,\n b = H1,\n c = H2,\n d = H3,\n e = H4;\n\n for (var j = 0; j < 80; j++) {\n\n if (j < 16)\n w[j] = m[i + j];\n else {\n var n = w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16];\n w[j] = (n << 1) | (n >>> 31);\n }\n\n var t = ((H0 << 5) | (H0 >>> 27)) + H4 + (w[j] >>> 0) + (\n j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 :\n j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 :\n j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 :\n (H1 ^ H2 ^ H3) - 899497514);\n\n H4 = H3;\n H3 = H2;\n H2 = (H1 << 30) | (H1 >>> 2);\n H1 = H0;\n H0 = t;\n }\n\n H0 += a;\n H1 += b;\n H2 += c;\n H3 += d;\n H4 += e;\n }\n\n return [H0, H1, H2, H3, H4];\n },\n\n // Public API\n api = function (message, options) {\n var digestbytes = crypt.wordsToBytes(sha1(message));\n return options && options.asBytes ? digestbytes :\n options && options.asString ? bin.bytesToString(digestbytes) :\n crypt.bytesToHex(digestbytes);\n };\n\n api._blocksize = 16;\n api._digestsize = 20;\n\n module.exports = api;\n})();\n","import SparkMD5 from 'spark-md5';\n//import JSZip from 'jszip';\nimport * as starry from '../../src/starry';\n//import { encodeFindResource } from '../../src/isomorphic/converter';\nimport sharp, { FormatEnum } from 'sharp';\nimport got from 'got';\n//import { Logger } from './ZeroClient';\nimport type { SolutionStore, SaveIssueMeasure } from './store';\nimport { ScoreJSON } from '../../src/isomorphic/types';\n\nconst SYSTEM_MARGIN = 4;\n\nexport const constructSystem = ({ page, backgroundImage, detection, imageSize, position }) => {\n\tconst systemWidth = (detection.phi2 - detection.phi1) / detection.interval;\n\tconst systemHeight = imageSize.height / detection.interval;\n\n\tconst lastSystem = page.systems[page.systems.length - 1];\n\tconst top = position ? position.y : (lastSystem ? lastSystem.top + lastSystem.height : 0) + SYSTEM_MARGIN;\n\tconst left = position ? position.x : SYSTEM_MARGIN;\n\n\tconst stavesTops = [\n\t\t0,\n\t\t...Array(detection.middleRhos.length - 1)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => (detection.middleRhos[i] + detection.middleRhos[i + 1]) / 2 / detection.interval),\n\t];\n\n\tconst measureBars = [systemWidth];\n\n\tconst staves = stavesTops.map(\n\t\t(top, i) =>\n\t\t\tnew starry.Staff({\n\t\t\t\ttop,\n\t\t\t\theight: (stavesTops[i + 1] || systemHeight) - top,\n\t\t\t\tstaffY: detection.middleRhos[i] / detection.interval - top,\n\t\t\t\tmeasureBars,\n\t\t\t})\n\t);\n\n\t//console.log(\"detection:\", detection, options, stavesTops);\n\n\tconst imagePosition = {\n\t\tx: -detection.phi1 / detection.interval,\n\t\ty: 0,\n\t\twidth: imageSize.width / detection.interval,\n\t\theight: imageSize.height / detection.interval,\n\t};\n\n\treturn new starry.System({\n\t\tstaves,\n\t\tleft,\n\t\ttop,\n\t\twidth: systemWidth,\n\t\tbackgroundImage,\n\t\timagePosition,\n\t\tmeasureBars,\n\t});\n};\n\nexport interface ConvertOption {\n\tformat?: keyof FormatEnum;\n\tquality?: number;\n\tmaxHeight?: number;\n}\n\nconst toBuffer = async (url: string | Buffer): Promise => {\n\tif (typeof url === 'string') {\n\t\tif (/^https?:\\/\\//.test(url)) {\n\t\t\treturn (await got(url, { responseType: 'buffer', decompress: true, https: { rejectUnauthorized: false } })).body;\n\t\t}\n\n\t\tif (/^data:image\\//.test(url)) {\n\t\t\treturn Buffer.from(url.split(',')[1], 'base64');\n\t\t}\n\n\t\treturn Buffer.from(url);\n\t}\n\n\treturn url;\n};\n\n/**\n * 转换图片格式,默认webp、最大高度1080,高度小于1080自动不做尺寸变换\n * @param url\n * @param format\n * @param maxHeight\n * @param quality\n */\nexport async function convertImage(url: string | Buffer, { format = 'webp', maxHeight = 1080, quality = 80 }: ConvertOption = {}) {\n\tlet buf = await toBuffer(url);\n\n\tconst webpBuffer = await new Promise((resolve) => {\n\t\tsharp(buf)\n\t\t\t.resize({\n\t\t\t\twidth: maxHeight,\n\t\t\t\theight: maxHeight,\n\t\t\t\tfit: 'inside',\n\t\t\t\twithoutEnlargement: true,\n\t\t\t})\n\t\t\t.toFormat(format, { quality })\n\t\t\t.toBuffer((err, buf) => {\n\t\t\t\tresolve(buf);\n\t\t\t});\n\t});\n\n\tconst md5 = SparkMD5.ArrayBuffer.hash(webpBuffer);\n\n\treturn {\n\t\tbuffer: webpBuffer,\n\t\tfilename: `${md5}.${format}`,\n\t};\n}\n\n/**\n * 替换scoreJson图片地址\n * @param scoreJson\n * @param onReplaceImage\n */\nexport const replaceScoreJsonImages = (scoreJson: ScoreJSON, onReplaceImage: (src: string) => string = (src) => src) => {\n\tconst json = JSON.parse(JSON.stringify(scoreJson));\n\n\tjson.pages.forEach((page) => {\n\t\tpage?.src && (page.src = onReplaceImage(page?.src));\n\t});\n\n\tjson.lines.forEach((system) => {\n\t\tsystem.lineStaves.forEach((line) => {\n\t\t\tline.imgs.forEach((staff) => {\n\t\t\t\tstaff?.src && (staff.src = onReplaceImage(staff.src));\n\t\t\t});\n\t\t});\n\t});\n\n\treturn json;\n};\n\n/**\n * 获取scoreJson图片资源列表\n * @param scoreJson\n */\nexport const getScoreJsonImages = (scoreJson: ScoreJSON) => {\n\treturn [\n\t\t...scoreJson.pages.map((page) => page?.src),\n\t\t...scoreJson.lines\n\t\t\t.map((system) => system.lineStaves.map((staff) => staff.imgs))\n\t\t\t.flat(2)\n\t\t\t.map((staff) => staff?.src)\n\t\t\t.filter(Boolean),\n\t];\n};\n\ninterface ScorePatchesUpdateOptions {\n\tsolutionStore?: SolutionStore;\n}\n\nexport const updateScorePatches = (score: starry.Score, measures: starry.SpartitoMeasure[], options: ScorePatchesUpdateOptions = {}): void => {\n\tconsole.assert(\n\t\tmeasures.every((measure) => measure.validRegulated),\n\t\t'[updateScorePatches] some measures not valid regulated:',\n\t\tmeasures.filter((measure) => !measure.validRegulated)\n\t);\n\n\tscore.patches = measures.map((measure) => measure.createPatch());\n\n\tif (options?.solutionStore) {\n\t\tscore.assemble();\n\t\tconst spartito = score.makeSpartito();\n\n\t\tmeasures.forEach((measure) => {\n\t\t\toptions.solutionStore!.set(measure.regulationHash, { ...measure.asSolution(), priority: 1 });\n\t\t\tif (measure.regulationHash0 !== measure.regulationHash) {\n\t\t\t\tconst originMeasure = spartito.measures.find((m) => m.measureIndex === measure.measureIndex);\n\t\t\t\toptions.solutionStore!.set(measure.regulationHash0, { ...measure.asSolution(originMeasure), priority: 1 });\n\t\t\t}\n\t\t});\n\t}\n};\n\ninterface EditableMeasuresSaveOptions {\n\tstatus?: number;\n\tsolutionStore?: SolutionStore;\n}\n\nexport const saveEditableMeasures = async (\n\tscore: starry.Score,\n\tmeasureIndices: number[],\n\tsaveMeasure: SaveIssueMeasure,\n\t{ status = 2, solutionStore }: EditableMeasuresSaveOptions = {}\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\n\tconst measures = measureIndices\n\t\t.map((index) => spartito.measures.find((measure) => measure.measureIndex === index))\n\t\t.filter(Boolean) as starry.SpartitoMeasure[];\n\n\tif (solutionStore) {\n\t\tconst solutions = await solutionStore.batchGet(measures.map((measure) => measure.regulationHash0));\n\t\tmeasures.forEach((measure, i) => {\n\t\t\tconst solution = solutions[i];\n\t\t\tif (solution) measure.applySolution(solution);\n\t\t});\n\t}\n\n\tmeasures.forEach((measure) => {\n\t\tsaveMeasure({\n\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\tmeasure: new starry.EditableMeasure(measure),\n\t\t\tstatus,\n\t\t});\n\t});\n};\n","import sha1 from 'sha1';\nimport { Canvas, Image, loadImage } from 'skia-canvas';\nimport { WeakLRUCache } from 'weak-lru-cache';\nimport * as starry from '../../src/starry';\nimport { SemanticGraph } from '../../src/starry';\nimport { LayoutResult, PyClients } from './predictors';\nimport { constructSystem, convertImage } from './util';\n\nglobalThis.OffscreenCanvas = (globalThis as any).OffscreenCanvas || Canvas;\n(globalThis as any).Image = (globalThis as any).Image || Image;\nglobalThis.btoa = globalThis.btoa || ((str: string) => Buffer.from(str, 'binary').toString('base64'));\n\nconst STAFF_PADDING_LEFT = 32;\n\nconst MAX_PAGE_WIDTH = 1200;\n\nconst GAUGE_VISION_SPEC = {\n\tviewportHeight: 256,\n\tviewportUnit: 8,\n};\n\nconst MASK_VISION_SPEC = {\n\tviewportHeight: 192,\n\tviewportUnit: 8,\n};\n\nconst SEMANTIC_VISION_SPEC = {\n\tviewportHeight: 192,\n\tviewportUnit: 8,\n};\n\ninterface OMRStat {\n\tcost: number; // in milliseconds\n\tpagesCost: number; // in milliseconds\n\tpages: number;\n}\n\ninterface OMRSummary {\n\tcostTotal: number; // in milliseconds\n\tcostPerPage: number; // in milliseconds\n\tpagesTotal: number;\n\tscoreN: number;\n}\n\n/**\n * 为布局识别的图片标准化处理\n * @param image\n * @param width\n */\nfunction scaleForLayout(image: Image, width: number): Canvas {\n\tlet height = (image.height / image.width) * width;\n\n\tconst canvas = new Canvas(width, height);\n\tconst ctx = canvas.getContext('2d');\n\n\tctx.drawImage(image, 0, 0, width, (width * image.height) / image.width);\n\n\treturn canvas;\n}\n\n/**\n * 根据所有图像的检测结果设置合适的全局页面尺寸\n * @param score\n * @param detections\n * @param outputWidth\n */\nfunction setGlobalPageSize(score: starry.Score, detections: LayoutResult[], outputWidth: number) {\n\tconst sizeRatios = detections\n\t\t.filter((s) => s && s.detection && s.detection.areas?.length)\n\t\t.map((v, k) => {\n\t\t\tconst staffInterval = Math.min(...v.detection.areas.filter((area) => area.staves?.middleRhos?.length).map((x) => x.staves.interval));\n\n\t\t\tconst sourceSize = v.sourceSize;\n\t\t\treturn {\n\t\t\t\t...v,\n\t\t\t\tindex: k,\n\t\t\t\tvw: sourceSize.width / staffInterval, // 页面宽度(逻辑单位)\n\t\t\t\thwr: sourceSize.height / sourceSize.width, // 页面高宽比\n\t\t\t};\n\t\t});\n\n\tif (!sizeRatios.length) {\n\t\tthrow new Error('empty result');\n\t}\n\n\tconst maxVW = sizeRatios.sort((a, b) => b.vw - a.vw)[0];\n\tconst maxAspect = Math.max(...sizeRatios.map((r) => r.hwr));\n\n\tscore.unitSize = outputWidth / maxVW.vw;\n\n\t// 页面显示尺寸\n\tscore.pageSize = {\n\t\twidth: outputWidth,\n\t\theight: outputWidth * maxAspect,\n\t};\n}\n\nconst batchTask = (fn: () => Promise) => fn();\nconst concurrencyTask = (fns: (() => Promise)[]) => Promise.all(fns.map((fn) => fn()));\n\nconst shootStaffImage = async (\n\tsystem: starry.System,\n\tstaffIndex: number,\n\t{ paddingLeft = 0, scaling = 1, spec }: { paddingLeft?: number; scaling?: number; spec: { viewportHeight: number; viewportUnit: number } }\n): Promise => {\n\tif (!system || !system.backgroundImage) return null;\n\n\tconst staff = system.staves[staffIndex];\n\tif (!staff) return null;\n\n\tconst middleUnits = spec.viewportHeight / spec.viewportUnit / 2;\n\n\tconst width = system.imagePosition.width * spec.viewportUnit;\n\tconst height = system.imagePosition.height * spec.viewportUnit;\n\tconst x = system.imagePosition.x * spec.viewportUnit + paddingLeft;\n\tconst y = (system.imagePosition.y - (staff.top + staff.staffY - middleUnits)) * spec.viewportUnit;\n\n\tconst canvas = new Canvas(Math.round(width + x) * scaling, spec.viewportHeight * scaling);\n\tconst context = canvas.getContext('2d');\n\tcontext.fillStyle = 'white';\n\tcontext.fillRect(0, 0, canvas.width, canvas.height);\n\tcontext.drawImage(await loadImage(system.backgroundImage), x * scaling, y * scaling, width * scaling, height * scaling);\n\n\treturn canvas;\n\t// .substr(22);\t// remove the prefix of 'data:image/png;base64,'\n};\n\n/**\n * 根据布局检测结果进行截图\n * @param score\n * @param pageCanvas\n * @param page\n * @param detection\n */\nasync function shootImageByDetection({\n\tpage,\n\tscore,\n\tpageCanvas,\n}: {\n\tscore: starry.Score;\n\tpage: starry.Page;\n\tpageCanvas: Canvas; // 原始图片绘制好的canvas\n}) {\n\tif (!page?.layout?.areas?.length) {\n\t\treturn null;\n\t}\n\n\tpage.width = score.pageSize.width / score.unitSize;\n\tpage.height = score.pageSize.height / score.unitSize;\n\n\tconst correctCanvas = new Canvas(pageCanvas.width, pageCanvas.height);\n\tconst ctx = correctCanvas.getContext('2d');\n\n\tctx.save();\n\n\tconst { width, height } = correctCanvas;\n\tconst [a, b, c, d] = page.source.matrix;\n\n\tctx.setTransform(a, b, c, d, (-1 / 2) * width + (1 / 2) * a * width + (1 / 2) * b * height, (-1 / 2) * height + (1 / 2) * c * width + (1 / 2) * d * height);\n\n\tctx.drawImage(pageCanvas, 0, 0);\n\n\tctx.restore();\n\n\tconst interval = page.source.interval;\n\n\tpage.layout.areas.map((area, systemIndex) => {\n\t\tconsole.assert(area.staves?.middleRhos?.length, '[shootImageByDetection] empty area:', area);\n\n\t\tconst data = ctx.getImageData(area.x, area.y, area.width, area.height);\n\n\t\tconst canvas = new Canvas(area.width, area.height);\n\n\t\tconst context = canvas.getContext('2d');\n\t\t// context.rotate(-area.staves.theta);\n\t\tcontext.putImageData(data, 0, 0);\n\n\t\tconst detection = area.staves;\n\t\tconst size = { width: area.width, height: area.height };\n\n\t\tconst sourceCenter = {\n\t\t\tx: pageCanvas.width / 2 / interval,\n\t\t\ty: pageCanvas.height / 2 / interval,\n\t\t};\n\n\t\tconst position = {\n\t\t\tx: (area.x + area.staves.phi1) / interval - sourceCenter.x + page.width / 2,\n\t\t\ty: area.y / interval - sourceCenter.y + page.height / 2,\n\t\t};\n\n\t\tpage.systems[systemIndex] = constructSystem({\n\t\t\tpage,\n\t\t\tbackgroundImage: canvas.toBufferSync('png'),\n\t\t\tdetection,\n\t\t\timageSize: size,\n\t\t\tposition,\n\t\t});\n\t});\n\n\treturn correctCanvas;\n}\n\nasync function shootStaffBackgroundImage({ system, staff, staffIndex }: { system: starry.System; staff: starry.Staff; staffIndex: number }) {\n\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\tspec: SEMANTIC_VISION_SPEC,\n\t});\n\n\tstaff.backgroundImage = sourceCanvas.toBufferSync('png');\n\n\t// No phi1 offset here: shootStaffImage bakes the system's barline offset\n\t// into the canvas coordinate space, so -paddingLeft is already correct.\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - SEMANTIC_VISION_SPEC.viewportHeight / 2 / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\twidth: sourceCanvas.width / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\theight: sourceCanvas.height / SEMANTIC_VISION_SPEC.viewportUnit,\n\t};\n}\n\n/**\n * 单个staff的变形矫正\n * @param system\n * @param staff\n * @param staffIndex\n * @param gaugeImage\n * @param pyClients\n */\nasync function gaugeStaff({\n\tsystem,\n\tstaff,\n\tstaffIndex,\n\tgaugeImage,\n\tpyClients,\n}: {\n\tsystem: starry.System;\n\tstaff: starry.Staff;\n\tstaffIndex: number;\n\tgaugeImage: Buffer;\n\tpyClients: PyClients;\n}) {\n\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\tspec: GAUGE_VISION_SPEC,\n\t\tscaling: 2,\n\t});\n\n\tconst sourceBuffer = sourceCanvas.toBufferSync('png');\n\n\tconst baseY = (system.middleY - (staff.top + staff.staffY)) * GAUGE_VISION_SPEC.viewportUnit + GAUGE_VISION_SPEC.viewportHeight / 2;\n\n\tconst { buffer, size } = await pyClients.predictScoreImages('gaugeRenderer', [sourceBuffer, gaugeImage, baseY]);\n\n\tstaff.backgroundImage = buffer;\n\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / GAUGE_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - size.height / 2 / GAUGE_VISION_SPEC.viewportUnit,\n\t\twidth: size.width / GAUGE_VISION_SPEC.viewportUnit,\n\t\theight: size.height / GAUGE_VISION_SPEC.viewportUnit,\n\t};\n\n\tstaff.maskImage = null;\n}\n\n/**\n * 单个staff的降噪\n * @param staff\n * @param staffIndex\n * @param maskImage\n */\nasync function maskStaff({ staff, staffIndex, maskImage }: { staff: starry.Staff; staffIndex: number; maskImage: Buffer }) {\n\tconst img = await loadImage(maskImage);\n\n\tstaff.maskImage = maskImage;\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / MASK_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - MASK_VISION_SPEC.viewportHeight / 2 / MASK_VISION_SPEC.viewportUnit,\n\t\twidth: img.width / MASK_VISION_SPEC.viewportUnit,\n\t\theight: img.height / MASK_VISION_SPEC.viewportUnit,\n\t};\n}\n\n/**\n * 单个staff的语义识别\n * @param score\n * @param staffIndex\n * @param system\n * @param staff\n * @param graph\n */\nasync function semanticStaff({\n\tscore,\n\tstaffIndex,\n\tsystem,\n\tstaff,\n\tgraph,\n}: {\n\tscore: starry.Score;\n\tstaffIndex: number;\n\tsystem: starry.System;\n\tstaff: starry.Staff;\n\tgraph: SemanticGraph;\n}) {\n\tgraph.offset(-STAFF_PADDING_LEFT / SEMANTIC_VISION_SPEC.viewportUnit, 0);\n\n\tsystem.assignSemantics(staffIndex, graph);\n\n\tstaff.assignSemantics(graph);\n\tstaff.clearPredictedTokens();\n\n\tscore.assembleSystem(system, score.settings?.semanticConfidenceThreshold || 1);\n}\n\nfunction replacePageImages(page: starry.Page, onReplaceImageKey: (src: string) => any) {\n\tconst tasks = [\n\t\t[page.source, 'url'],\n\t\t...page.systems\n\t\t\t.map((system) => {\n\t\t\t\treturn [\n\t\t\t\t\t[system, 'backgroundImage'],\n\t\t\t\t\t...system.staves\n\t\t\t\t\t\t.map((staff) => [\n\t\t\t\t\t\t\t[staff, 'backgroundImage'],\n\t\t\t\t\t\t\t[staff, 'maskImage'],\n\t\t\t\t\t\t])\n\t\t\t\t\t\t.flat(),\n\t\t\t\t];\n\t\t\t})\n\t\t\t.flat(),\n\t];\n\n\ttasks.map(([target, key]: [any, string]) => {\n\t\ttarget[key] = onReplaceImageKey(target[key]);\n\t});\n}\n\nexport type TaskProgress = { total?: number; finished?: number };\n\nexport interface OMRPage {\n\turl: string | Buffer;\n\tkey?: string;\n\tlayout?: LayoutResult;\n\trenew?: boolean;\n\tenableGauge?: boolean;\n}\n\nexport interface ProgressState {\n\tlayout?: TaskProgress;\n\ttext?: TaskProgress;\n\tgauge?: TaskProgress;\n\tmask?: TaskProgress;\n\tsemantic?: TaskProgress;\n\tregulate?: TaskProgress;\n\tbrackets?: TaskProgress;\n}\n\nclass OMRProgress {\n\tstate: ProgressState = {};\n\n\tonChange: (evt: ProgressState) => void;\n\n\tconstructor(onChange: (evt: ProgressState) => void) {\n\t\tthis.onChange = onChange;\n\t}\n\n\tsetTotal(stage: keyof ProgressState, total: number) {\n\t\tthis.state[stage] = this.state[stage] || {\n\t\t\ttotal,\n\t\t\tfinished: 0,\n\t\t};\n\t}\n\n\tincrease(stage: keyof ProgressState, step = 1) {\n\t\tconst info: TaskProgress = this.state[stage] || {\n\t\t\tfinished: 0,\n\t\t};\n\t\tinfo.finished += step;\n\n\t\tthis.onChange(this.state);\n\t}\n}\n\ntype SourceImage = string | Buffer;\n\nexport interface OMROption {\n\toutputWidth?: number;\n\ttitle?: string; // 曲谱标题\n\tpageStore?: {\n\t\thas?: (key: string) => Promise;\n\t\tget: (key: string) => Promise;\n\t\tset: (key: string, val: string) => Promise;\n\t};\n\trenew?: boolean;\n\tprocesses?: (keyof ProgressState)[]; // 选择流程\n\tonProgress?: (progress: ProgressState) => void;\n\tonReplaceImage?: (src: SourceImage) => Promise; // 替换所有图片地址,用于上传或者格式转换\n}\n\nconst lruCache = new WeakLRUCache();\n\n// 默认store\nconst pageStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as string;\n\t},\n\tasync set(key: string, val: string) {\n\t\tlruCache.setValue(key, val);\n\t},\n};\n\n/**\n * 默认将图片转换为webp格式的base64字符串\n * @param src\n */\nconst onReplaceImage = async (src: SourceImage) => {\n\tif (src instanceof Buffer || (typeof src === 'string' && (/^https?:\\/\\//.test(src) || /^data:image\\//.test(src)))) {\n\t\tconst webpBuffer = (await convertImage(src)).buffer;\n\t\treturn `data:image/webp;base64,${webpBuffer.toString('base64')}`;\n\t}\n\n\treturn src;\n};\n\n/**\n * 识别所有图片\n * @param pyClients\n * @param images\n * @param option\n */\nexport const predictPages = async (\n\tpyClients: PyClients,\n\timages: OMRPage[],\n\toption: OMROption = { outputWidth: 1200, pageStore, onReplaceImage }\n): Promise<{ score: starry.Score; omitPages: number[]; stat: OMRStat }> => {\n\tconst logger = pyClients.logger;\n\n\toption.outputWidth = option.outputWidth || 1200;\n\toption.pageStore = option.pageStore || pageStore;\n\toption.onReplaceImage = option.onReplaceImage || onReplaceImage;\n\n\toption.processes =\n\t\tArray.isArray(option.processes) && option.processes.length > 0 ? option.processes : ['layout', 'text', 'gauge', 'mask', 'semantic', 'brackets'];\n\tconst progress: OMRProgress = new OMRProgress(option.onProgress);\n\n\tconst t0 = Date.now();\n\n\t// 预处理删除不合法区域\n\timages.forEach((image) => {\n\t\tif (image.layout?.detection) {\n\t\t\timage.layout.detection.areas = image.layout.detection?.areas?.filter((a) => a?.staves?.middleRhos?.length > 0);\n\t\t} else {\n\t\t\tdelete image.layout;\n\t\t}\n\t});\n\n\tconst score = new starry.Score({\n\t\ttitle: option?.title,\n\t\tstavesCount: 2,\n\t\tpaperOptions: {\n\t\t\traggedLast: true,\n\t\t\traggedLastBottom: true,\n\t\t},\n\t\theaders: {},\n\t\tinstrumentDict: {},\n\t\tsettings: {\n\t\t\tenabledGauge: option.processes.includes('gauge'),\n\t\t\tsemanticConfidenceThreshold: 1,\n\t\t},\n\t});\n\n\tlogger.info(`[predictor]: download_source_images-${images.length}`);\n\n\t// 原始拍摄图\n\tconst originalImages: Image[] = await Promise.all(images.map((img) => loadImage(img.url as any)));\n\n\tlogger.info(`[predictor]: source_images_downloaded-${images.length}`);\n\n\t//const INPUT_IMAGE_WIDTH = images.filter((x) => x?.layout?.interval)?.[0]?.layout?.sourceSize?.width;\n\n\t/******************************* 布局识别 start *************************/\n\t// 输入给布局检测的图\n\tconst pageCanvasList: Canvas[] = originalImages.map((img, index) => scaleForLayout(img, images[index]!.layout?.sourceSize?.width ?? img.width));\n\n\tprogress.setTotal('layout', originalImages.length);\n\tprogress.setTotal('text', originalImages.length);\n\n\tconst detections = await Promise.all(\n\t\tpageCanvasList.map(async (cvs, key) => {\n\t\t\tif (!images[key].layout) return (await pyClients.predictScoreImages('layout', [cvs.toBufferSync('png')]))?.[0];\n\n\t\t\t// reinforce layout from front-end if no gauge\n\t\t\tif (!images[key].enableGauge && images[key]?.layout?.detection?.areas?.length)\n\t\t\t\treturn (await pyClients.predictScoreImages('layout$reinforce', [cvs.toBufferSync('png')], [images[key].layout]))?.[0];\n\n\t\t\treturn images[key].layout;\n\t\t})\n\t);\n\n\tdetections.forEach((page) => {\n\t\tpage.detection.areas = page.detection?.areas?.filter((a) => a?.staves?.middleRhos?.length > 0);\n\t});\n\n\tconst imageURLMap = new Map();\n\tconst collectImage = async (source: SourceImage): Promise => {\n\t\tconst url = await option.onReplaceImage(source);\n\t\timageURLMap.set(source, url);\n\t};\n\n\t// 根据所有页面的宽高比决定全局显示尺寸\n\tsetGlobalPageSize(score, detections, option.outputWidth);\n\n\tasync function createPage(detect, pageIndex) {\n\t\tconst { url, key, layout, enableGauge } = images[pageIndex];\n\n\t\tconst pageKey = sha1(JSON.stringify({ key: key || url, layout, enableGauge }));\n\n\t\tconst cachedPageJson = await option.pageStore.get(pageKey);\n\n\t\tconst omit = !option.renew && ((cachedPageJson && !images[pageIndex].renew) || !detect.detection.areas?.length);\n\n\t\tconst page = (score.pages[pageIndex] =\n\t\t\tomit && cachedPageJson\n\t\t\t\t? starry.recoverJSON(cachedPageJson, starry)\n\t\t\t\t: new starry.Page({\n\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\tname: key || (typeof url === 'string' && /https?:\\/\\//.test(url) ? url : null),\n\t\t\t\t\t\t\tsize: 0,\n\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\tcrop: {\n\t\t\t\t\t\t\t\tunit: '%',\n\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\t\t\theight: 100,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdimensions: detect.sourceSize,\n\t\t\t\t\t\t\tmatrix: [Math.cos(detect.theta), -Math.sin(detect.theta), Math.sin(detect.theta), Math.cos(detect.theta), 0, 0],\n\t\t\t\t\t\t\tinterval: detect.interval,\n\t\t\t\t\t\t\tneedGauge: images[pageIndex].enableGauge,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlayout: detect.detection,\n\t\t\t\t }));\n\n\t\tconst correctCanvas = omit\n\t\t\t? null\n\t\t\t: await shootImageByDetection({\n\t\t\t\t\tscore,\n\t\t\t\t\tpage,\n\t\t\t\t\tpageCanvas: pageCanvasList[pageIndex],\n\t\t\t });\n\n\t\tprogress.increase('layout');\n\n\t\treturn {\n\t\t\tpage,\n\t\t\tomit,\n\t\t\thash: pageKey,\n\t\t\tcorrectCanvas,\n\t\t};\n\t}\n\n\tconst systemsCount = detections.reduce((acc, x) => acc + (x.detection.areas?.length ?? 0), 0);\n\tconst stavesCount = detections.reduce((acc, x) => acc + (x.detection.areas?.reduce?.((a, y) => a + (y.staves?.middleRhos?.length ?? 0), 0) ?? 0), 0);\n\n\tprogress.setTotal('gauge', stavesCount);\n\tprogress.setTotal('mask', stavesCount);\n\tprogress.setTotal('semantic', stavesCount);\n\tprogress.setTotal('brackets', systemsCount);\n\n\tconst allTasks = [];\n\n\tconst omitPages = [];\n\n\tconst t1 = Date.now();\n\n\tlet n_page = 0;\n\n\tfor (const pageIndex of detections.keys()) {\n\t\tconst pageTasks = [];\n\n\t\tconst { page, correctCanvas, omit, hash } = await createPage(detections[pageIndex], pageIndex);\n\n\t\tpageTasks.push(collectImage(page.source.url));\n\t\tpageTasks.push(...page.systems.map((system) => collectImage(system.backgroundImage)));\n\n\t\tlogger.info(`[predictor]: check_cache_pageIndex-${pageIndex} omit: ${omit}`);\n\t\tif (omit) {\n\t\t\tomitPages.push(pageIndex);\n\t\t} else {\n\t\t\tconst staves = page.systems\n\t\t\t\t.map((system, systemIndex) => system.staves.map((staff, staffIndex) => ({ pageIndex, systemIndex, staffIndex, page, system, staff })))\n\t\t\t\t.flat(1);\n\n\t\t\tawait concurrencyTask([\n\t\t\t\t/******************************* 括号检测 start *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\tif (!option.processes.includes('brackets')) return;\n\n\t\t\t\t\tconst detection = page.layout;\n\t\t\t\t\tconst interval = page.source.interval;\n\n\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\tconst bracketImages = page.systems.map((system, systemIndex) => {\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tstaves: { middleRhos, phi1 },\n\t\t\t\t\t\t} = detection.areas[systemIndex];\n\n\t\t\t\t\t\tconst topMid = middleRhos[0];\n\t\t\t\t\t\tconst bottomMid = middleRhos[middleRhos.length - 1];\n\n\t\t\t\t\t\tconst sourceRect = {\n\t\t\t\t\t\t\tx: x + phi1 - 4 * interval,\n\t\t\t\t\t\t\ty: y + topMid - 4 * interval,\n\t\t\t\t\t\t\twidth: 8 * interval,\n\t\t\t\t\t\t\theight: bottomMid - topMid + 8 * interval,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst OUTPUT_INTERVAL = 8;\n\n\t\t\t\t\t\tconst canvas = new Canvas(OUTPUT_INTERVAL * 8, (sourceRect.height / interval) * OUTPUT_INTERVAL);\n\n\t\t\t\t\t\tconst context = canvas.getContext('2d');\n\t\t\t\t\t\tcontext.drawImage(correctCanvas, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height, 0, 0, canvas.width, canvas.height);\n\n\t\t\t\t\t\t// console.log(pageIndex, systemIndex, JSON.stringify(sourceRect), correctCanvas.width, correctCanvas.height)\n\t\t\t\t\t\t// const pctx = canvas.getContext('2d')\n\t\t\t\t\t\t// pctx.strokeStyle = 'red'\n\t\t\t\t\t\t// pctx.fillStyle = 'rgba(255, 0, 0, 0.2)'\n\t\t\t\t\t\t// pctx.fillRect(sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height)\n\t\t\t\t\t\t// const area = detections[pageIndex].detection.areas[systemIndex]\n\t\t\t\t\t\t// pctx.strokeStyle = 'green'\n\t\t\t\t\t\t// pctx.fillStyle = 'rgba(0, 255, 0, 0.1)'\n\t\t\t\t\t\t// pctx.fillRect(area.x, area.y, area.width, area.height)\n\t\t\t\t\t\t// pctx.fillRect(area.x, area.y, area.width, area.height)\n\t\t\t\t\t\t// require('fs').writeFile(`test--system-${systemIndex}.png`, canvas.toBufferSync('png'), () => {})\n\t\t\t\t\t\t// require('fs-extra').writeFile(`test--brackets-${pageIndex}-${systemIndex}.png`, canvas.toBufferSync('png'))\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\tbuffer: canvas.toBufferSync('png'),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\t\tlogger.info(`[predictor]: brackets js [pageIndex-${pageIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\tconst bracketsRes = await pyClients.predictScoreImages('brackets', { buffers: bracketImages.map((x) => x.buffer) });\n\t\t\t\t\tprogress.increase('brackets', bracketImages.length);\n\n\t\t\t\t\tbracketImages.forEach(({ system }, index) => {\n\t\t\t\t\t\tif (bracketsRes[index]) {\n\t\t\t\t\t\t\tsystem.bracketsAppearance = bracketsRes[index];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t/******************************* 括号检测 end *************************/\n\n\t\t\t\t/******************************* 文本识别 start *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\tif (!option.processes.includes('text')) return;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t// await require('fs-extra').writeFile(`test--text-location-${pageIndex}.png`, correctCanvas.toBufferSync('png'))\n\t\t\t\t\t\tconst bufferForText = correctCanvas.toBufferSync('png');\n\n\t\t\t\t\t\tconst resultLoc = await pyClients.predictScoreImages('textLoc', [bufferForText]);\n\n\t\t\t\t\t\tconst location = resultLoc[0].filter((box) => box.score > 0);\n\n\t\t\t\t\t\tif (location.length > 0) {\n\t\t\t\t\t\t\tconst [resultOCR] = await pyClients.predictScoreImages('textOcr', {\n\t\t\t\t\t\t\t\tbuffers: [bufferForText],\n\t\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tpage.assignTexts(resultOCR.areas, resultOCR.imageSize);\n\t\t\t\t\t\t\tpage.assemble();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlogger.info(`[predictor]: text js [pageIndex-${pageIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\tprogress.increase('text');\n\n\t\t\t\t\t\tif (!option.title) {\n\t\t\t\t\t\t\tconst coverTexts: {\n\t\t\t\t\t\t\t\tconfidence: number;\n\t\t\t\t\t\t\t\tfontSize: number;\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\ttext: string;\n\t\t\t\t\t\t\t\ttextType: 'Title' | 'Author';\n\t\t\t\t\t\t\t\ttype: starry.TokenType;\n\t\t\t\t\t\t\t\twidth_: number;\n\t\t\t\t\t\t\t\tx: number;\n\t\t\t\t\t\t\t\ty: number;\n\t\t\t\t\t\t\t}[] = score.pages[0].tokens as any;\n\n\t\t\t\t\t\t\tif (Array.isArray(coverTexts) && coverTexts.length > 0) {\n\t\t\t\t\t\t\t\tconst [titleToken] = coverTexts\n\t\t\t\t\t\t\t\t\t.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Title')\n\t\t\t\t\t\t\t\t\t.sort((a, b) => b.fontSize - a.fontSize);\n\n\t\t\t\t\t\t\t\tif (titleToken) {\n\t\t\t\t\t\t\t\t\tscore.title = titleToken.text;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tlogger.error(`[predictor]: text js [pageIndex-${pageIndex}] ${JSON.stringify(err)}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t/******************************* 文本识别 end *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\t/******************************* 变形矫正 start *************************/\n\t\t\t\t\tawait batchTask(async () => {\n\t\t\t\t\t\tconst disableGauge = !option.processes.includes('gauge') || images[pageIndex].enableGauge === false;\n\n\t\t\t\t\t\tif (!disableGauge) {\n\t\t\t\t\t\t\tconst gaugeRes = await pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t'gauge',\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tstaves.map(async ({ staffIndex, system }) => {\n\t\t\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\t\t\t\t\t\t\t\t\t\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\t\t\t\t\t\t\t\t\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\t\t\t\t\t\t\t\t\t\tspec: GAUGE_VISION_SPEC,\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js shoot [page-${pageIndex}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\t\t\t\t\treturn sourceCanvas.toBufferSync('png');\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tfor (const [index, { system, staff, pageIndex, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js [page-${pageIndex}, staff-${staffIndex}] start..`);\n\t\t\t\t\t\t\t\tawait gaugeStaff({\n\t\t\t\t\t\t\t\t\tpyClients,\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tgaugeImage: gaugeRes[index].image,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js [page-${pageIndex}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\t\t\tprogress.increase('gauge');\n\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.backgroundImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (const [_, { system, staff, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tawait shootStaffBackgroundImage({\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.backgroundImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t/******************************* 变形矫正 end *************************/\n\n\t\t\t\t\tawait concurrencyTask([\n\t\t\t\t\t\t/******************************* 降噪 start *************************/\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tif (!option.processes.includes('mask')) return;\n\n\t\t\t\t\t\t\tconst maskRes = await pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t'mask',\n\t\t\t\t\t\t\t\tstaves.map(({ staff }) => staff.backgroundImage as Buffer)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tfor (const [index, { staff, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tawait maskStaff({\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tmaskImage: maskRes[index].image,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: mask js [page-${pageIndex}, ${index}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\t\t\t\t\t\t\t\tprogress.increase('mask');\n\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.maskImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/******************************* 降噪 end *************************/\n\n\t\t\t\t\t\t/******************************* 语义识别 start *************************/\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tif (!option.processes.includes('semantic')) return;\n\n\t\t\t\t\t\t\tconst semanticRes = starry.recoverJSON(\n\t\t\t\t\t\t\t\tawait pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t\t'semantic',\n\t\t\t\t\t\t\t\t\tstaves.map(({ staff }) => staff.backgroundImage as Buffer)\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tstarry\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tstaves.forEach(({ system }) => system.clearTokens());\n\n\t\t\t\t\t\t\tfor (const [index, { staffIndex, system, staff }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tawait semanticStaff({\n\t\t\t\t\t\t\t\t\tscore,\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tgraph: semanticRes[index],\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t\t\t`[predictor]: semantic js [page-${pageIndex}, system-${system.index}, staff-${staff.index}] duration: ${\n\t\t\t\t\t\t\t\t\t\tDate.now() - startTime\n\t\t\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tprogress.increase('semantic');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/******************************* 语义识别 end *************************/\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\t++n_page;\n\t\t}\n\n\t\tallTasks.push(\n\t\t\tPromise.all(pageTasks).then(() => {\n\t\t\t\treplacePageImages(page, (src) => imageURLMap.get(src));\n\t\t\t\tlogger.info(`[predictor]: pageStore set: [${pageIndex}]`);\n\t\t\t\treturn option.pageStore.set(hash, JSON.stringify(page));\n\t\t\t})\n\t\t);\n\t}\n\n\tconst t2 = Date.now();\n\n\tawait Promise.all(allTasks);\n\n\tlogger.info(`[predictor]: inferenceStaffLayout: ${score.title}, [${score.systems.length}]`);\n\n\tscore.inferenceStaffLayout();\n\n\tlogger.info(`[predictor]: done: ${score.title}`);\n\n\t// correct semantic ids\n\tscore.assemble();\n\n\tconst t3 = Date.now();\n\n\treturn {\n\t\tscore,\n\t\tomitPages,\n\t\tstat: {\n\t\t\tcost: t3 - t0,\n\t\t\tpagesCost: t2 - t1,\n\t\t\tpages: n_page,\n\t\t},\n\t};\n};\n\nexport const abstractOMRStats = (stats: OMRStat[]): OMRSummary => {\n\tconst { costTotal, pagesCostTotal, pagesTotal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcostTotal: sum.costTotal + stat.cost,\n\t\t\tpagesCostTotal: sum.pagesCostTotal + stat.pagesCost,\n\t\t\tpagesTotal: sum.pagesTotal + stat.pages,\n\t\t}),\n\t\t{ costTotal: 0, pagesCostTotal: 0, pagesTotal: 0 }\n\t);\n\n\treturn {\n\t\tcostTotal,\n\t\tcostPerPage: pagesTotal ? costTotal / pagesTotal : null,\n\t\tpagesTotal,\n\t\tscoreN: stats.length,\n\t};\n};\n","import { EventTerm } from './term';\nimport type { SpartitoMeasure } from './spartitoMeasure';\n\ninterface EventRectification {\n\tid: number;\n\tdivision?: number;\n\tdots?: number;\n}\n\n// Here suppose sum of pvals equal to 1.\nconst multinomial_1 = (pvals: number[]): number => {\n\tconst n = Math.random();\n\n\tlet s = 0;\n\tfor (let i = 0; i < pvals.length; ++i) {\n\t\ts += pvals[i];\n\t\tif (s > n) return i;\n\t}\n\n\treturn pvals.length - 1;\n};\n\nconst looseVector = (ns: number[], factor = 0.9): number[] => {\n\tconst logits = ns.map((n) => Math.log(n) * factor);\n\tconst n2 = logits.map(Math.exp);\n\n\tconst sum = n2.reduce((sum, x) => sum + x, 0);\n\n\treturn n2.map((x) => x / sum);\n};\n\nconst looseEvent = (event: EventTerm): EventTerm => {\n\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return event;\n\n\tconst divisionVector = event.predisposition?.divisionVector ? looseVector(event.predisposition.divisionVector) : null;\n\tconst dotsVector = event.predisposition?.dotsVector ? looseVector(event.predisposition.dotsVector) : null;\n\n\treturn new EventTerm({\n\t\t...event,\n\t\tpredisposition: {\n\t\t\t...event.predisposition,\n\t\t\tdivisionVector,\n\t\t\tdotsVector,\n\t\t},\n\t});\n};\n\nclass MeasureRectification {\n\tevents: EventRectification[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\ttoString(): string {\n\t\treturn this.events\n\t\t\t.map((event) => {\n\t\t\t\tif (!event) return '';\n\n\t\t\t\tconst { division = '', dots = '' } = event;\n\t\t\t\treturn `${division}|${dots}`;\n\t\t\t})\n\t\t\t.join(',');\n\t}\n\n\tstatic default(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tconst division = event.predisposition.divisionVector ? event.division : undefined;\n\t\t\t\tconst dots = event.predisposition.dotsVector ? event.dots : undefined;\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n\n\tstatic roll(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tlet division = undefined;\n\t\t\t\tlet dots = undefined;\n\n\t\t\t\tif (event.predisposition.divisionVector) division = multinomial_1(event.predisposition.divisionVector);\n\n\t\t\t\tif (event.predisposition.dotsVector) dots = multinomial_1(event.predisposition.dotsVector);\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n}\n\nconst genMeasureRectifications = function* (measure: SpartitoMeasure): Generator {\n\tconst keys = new Set();\n\n\tconst origin = MeasureRectification.default(measure.events);\n\tkeys.add(origin.toString());\n\n\tyield origin;\n\n\tlet stale = 0;\n\tlet events = measure.events;\n\n\twhile (stale < 100) {\n\t\tif (stale && stale % 10 === 0) events = events.map(looseEvent);\n\n\t\tconst rectification = MeasureRectification.roll(events);\n\t\tconst key = rectification.toString();\n\n\t\tif (keys.has(key)) {\n\t\t\t++stale;\n\t\t\tcontinue;\n\t\t}\n\n\t\tstale = 0;\n\n\t\tkeys.add(key);\n\t\tyield rectification;\n\t}\n};\n\nexport { MeasureRectification, genMeasureRectifications };\n","import { WeakLRUCache } from 'weak-lru-cache';\n\nimport { RegulationSolution, SpartitoMeasure } from '../../src/starry';\n\nconst lruCache = new WeakLRUCache();\n\ninterface SolutionStore {\n\tget: (key: string) => Promise;\n\tset: (key: string, val: RegulationSolution) => Promise;\n\tbatchGet: (keys: string[]) => Promise;\n}\n\n// 默认store\nconst DefaultSolutionStore: SolutionStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as RegulationSolution;\n\t},\n\tasync set(key: string, val: RegulationSolution) {\n\t\tlruCache.setValue(key, val);\n\t},\n\tasync batchGet(keys: string[]) {\n\t\treturn keys.map((key) => lruCache.getValue(key) as RegulationSolution);\n\t},\n};\n\nconst enum MeasureStatus {\n\tDiscard = -1,\n\tSolved = 0,\n\tIssue = 1,\n\tFatal = 2,\n}\n\ninterface IssueMeasure {\n\tscoreId: string;\n\tmeasureIndex: number;\n\tmeasure: SpartitoMeasure;\n\tstatus: MeasureStatus;\n}\n\ntype SaveIssueMeasure = (data: Omit) => void;\n\nexport { SolutionStore, DefaultSolutionStore, MeasureStatus, IssueMeasure, SaveIssueMeasure };\n","import * as starry from '../../src/starry';\nimport { Logger } from './ZeroClient';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure, MeasureStatus } from './store';\n\ninterface BeadRegulationCounting {\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface RegulationBeadStat {\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tmeasures: BeadRegulationCounting;\n\tqualityScore: number;\n}\n\ninterface RegulationBeadSummary {\n\tscoreN: number;\n\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tcostPerMeasure: number | null; // in milliseconds\n\tcostPerTime: number | null; // in milliseconds\n\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface ProgressInfo {\n\tpass: number;\n\tremaining: number;\n\ttotal: number;\n}\n\ninterface RegulateBeadOption {\n\tlogger?: Logger;\n\tpickers: starry.BeadPicker[];\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tfreshOnly?: boolean;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n\tonProgress?: (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => void;\n\tonPassStart?: (pass: number, conditionName: string, pendingCount: number) => void;\n}\n\ninterface MeasureReord {\n\torigin: starry.SpartitoMeasure;\n\tcurrent: starry.SpartitoMeasure;\n\tevaluation?: starry.MeasureEvaluation;\n\tbaseQuality: number;\n\tpicker: starry.BeadPicker;\n}\n\ninterface BeadSolverOptions {\n\tstopLoss: number;\n\tquotaMax: number;\n\tquotaFactor: number;\n\tptFactor: number;\n}\n\nenum PendingCondition {\n\tErrorOnly,\n\tNotFine,\n\tImperfect,\n}\n\nconst isPending = (evaluation: starry.MeasureEvaluation, condition: PendingCondition) => {\n\tswitch (condition) {\n\t\tcase PendingCondition.ErrorOnly:\n\t\t\treturn evaluation.error;\n\n\t\tcase PendingCondition.Imperfect:\n\t\t\treturn !evaluation.perfect;\n\t}\n\n\treturn !evaluation.fine;\n};\n\ntype OnUpdate = (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean) => void;\n\nconst solveMeasureRecords = async (\n\trecords: MeasureReord[],\n\tonUpdate: OnUpdate,\n\tstdout: NodeJS.WritableStream | null,\n\toptions: Partial,\n\tpendingCondition: PendingCondition = PendingCondition.NotFine,\n\tpass: number = 0,\n\tonProgress?: RegulateBeadOption['onProgress']\n): Promise => {\n\tconst pendingRecords = records.filter(({ evaluation }) => !evaluation || isPending(evaluation, pendingCondition));\n\tstdout?.write('.'.repeat(pendingRecords.length));\n\tstdout?.write('\\b'.repeat(pendingRecords.length));\n\n\tconst total = pendingRecords.length;\n\tlet done = 0;\n\n\tfor (const record of pendingRecords) {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tconst solution = await starry.beadSolver.solveMeasure(measure, { picker: record.picker, ...options });\n\t\tmeasure.applySolution(solution);\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better =\n\t\t\t!record.evaluation ||\n\t\t\tevaluation.fine > record.evaluation.fine ||\n\t\t\t(evaluation.qualityScore > record.evaluation.qualityScore && evaluation.fine === record.evaluation.fine);\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\t\t}\n\n\t\tonUpdate(record.current, evaluation, better);\n\n\t\tdone++;\n\t\tonProgress?.(record.current, evaluation, better, { pass, remaining: total - done, total });\n\t}\n\n\tif (pendingRecords.length) stdout?.write('\\n');\n\n\treturn pendingRecords.length;\n};\n\nconst regulateWithBeadSolver = async (\n\tscore: starry.Score,\n\t{ logger, pickers, solutionStore = DefaultSolutionStore, ignoreCache, freshOnly, onSaveIssueMeasure, onProgress, onPassStart }: RegulateBeadOption\n): Promise => {\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\tlogger?.info(`[regulateWithBeadSolver] begin, measure total: ${spartito.measures.length}.`, ignoreCache ? 'ignoreCache' : '', freshOnly ? 'freshOnly' : '');\n\n\tconst records = spartito.measures\n\t\t.filter((measure) => measure.events?.length && !measure.patched)\n\t\t.map(\n\t\t\t(measure) =>\n\t\t\t\t({\n\t\t\t\t\torigin: measure.deepCopy(),\n\t\t\t\t\tcurrent: measure,\n\t\t\t\t\tevaluation: undefined,\n\t\t\t\t\tbaseQuality: 0,\n\t\t\t\t} as MeasureReord)\n\t\t);\n\n\t// rectify time signature\n\tfor (const measure of spartito.measures.filter((measure) => measure.events?.length)) {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > measure.events.length + 1);\n\t\tif (picker) await starry.beadSolver.estimateMeasure(measure, picker);\n\t}\n\tspartito.rectifyTimeSignatures(logger as any);\n\n\t// zero pickers' cost\n\tpickers.forEach((picker) => (picker.cost = 0));\n\n\tconst counting = {\n\t\tcached: 0,\n\t\tsimple: 0,\n\t\tcomputed: 0,\n\t\ttryTimes: 0,\n\t\tsolved: 0,\n\t\tissue: 0,\n\t\tfatal: 0,\n\t};\n\n\tlogger?.info(`[regulateWithBeadSolver] measures estimation finished.`);\n\n\t// apply solutions\n\tif (solutionStore && !ignoreCache)\n\t\tfor (const record of records) {\n\t\t\tconst solution = await solutionStore.get(record.origin.regulationHash0);\n\t\t\tif (solution) {\n\t\t\t\trecord.current.applySolution(solution);\n\t\t\t\t++counting.cached;\n\n\t\t\t\trecord.evaluation = starry.evaluateMeasure(record.current);\n\t\t\t\trecord.baseQuality = record.evaluation.qualityScore;\n\t\t\t}\n\t\t}\n\n\tlogger?.info('[regulateWithBeadSolver]', `${counting.cached}/${records.length}`, 'solutions loaded.');\n\n\tconst stdout = logger ? null : process.stdout;\n\tif (counting.cached) stdout?.write(`${counting.cached}c`);\n\n\trecords.forEach((record) => {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > record.current.events.length + 1);\n\t\tif (!picker) {\n\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] size out of range:`, record.current.events.length);\n\t\t} else record.picker = picker;\n\t});\n\n\tconst pendingRecords = records.filter((record) => record.picker && (!record.evaluation || (!record.evaluation.fine && !freshOnly))) as (MeasureReord & {\n\t\tevaluation: starry.MeasureEvaluation;\n\t})[];\n\n\t// solve by simple policy\n\tpendingRecords.forEach((record) => {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tmeasure.regulate({ policy: 'simple' });\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better = !record.evaluation || evaluation.qualityScore > record.evaluation.qualityScore;\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\n\t\t\tif (evaluation.perfect) {\n\t\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] regulated by simple policy.`);\n\t\t\t\t++counting.simple;\n\t\t\t}\n\t\t}\n\t});\n\tcounting.computed = pendingRecords.length - counting.simple;\n\n\tif (counting.simple) stdout?.write(`${counting.simple}s`);\n\n\tconst onUpdate = (measure, evaluation, better) => {\n\t\tlogger?.info(\n\t\t\t`[regulateWithBeadSolver] measure[${measure.measureIndex}/${spartito.measures.length}] regulated${\n\t\t\t\tbetter ? '+' : '-'\n\t\t\t}: ${evaluation.qualityScore.toFixed(3)}, ${evaluation.fine ? 'solved' : evaluation.error ? 'error' : 'issue'}, ${measure.regulationHash}`\n\t\t);\n\n\t\tstdout?.write(`\\x1b[${evaluation.fine ? '32' : evaluation.error ? '31' : '33'}m${better ? '+' : '-'}\\x1b[0m`);\n\t};\n\n\t// Global progress: total = all measures, remaining = non-fine measures across all passes\n\tconst totalMeasures = spartito.measures.length;\n\tconst computeRemaining = () => pendingRecords.filter((r) => !r.evaluation?.fine).length;\n\tconst wrappedOnProgress = onProgress\n\t\t? (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => {\n\t\t\t\tonProgress(measure, evaluation, better, { pass: progress.pass, remaining: computeRemaining(), total: totalMeasures });\n\t\t }\n\t\t: undefined;\n\n\tonPassStart?.(1, 'Imperfect', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.05, quotaMax: 200, quotaFactor: 3, ptFactor: 1 },\n\t\tPendingCondition.Imperfect,\n\t\t1,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(2, 'NotFine', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 20, ptFactor: 1.6 },\n\t\tPendingCondition.NotFine,\n\t\t2,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(3, 'ErrorOnly', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 40, ptFactor: 3 },\n\t\tPendingCondition.ErrorOnly,\n\t\t3,\n\t\twrappedOnProgress\n\t);\n\n\tpendingRecords.forEach(({ evaluation, baseQuality, current, origin }) => {\n\t\tif (evaluation.fine) ++counting.solved;\n\t\telse if (evaluation.error) ++counting.fatal;\n\t\telse ++counting.issue;\n\n\t\tif (evaluation.qualityScore > baseQuality || !baseQuality) {\n\t\t\tsolutionStore.set(origin.regulationHash0, { ...current.asSolution(origin), priority: -current?.solutionStat?.loss! });\n\t\t\tif (current.regulationHash !== origin.regulationHash0)\n\t\t\t\tsolutionStore.set(current.regulationHash, { ...current.asSolution(), priority: -current?.solutionStat?.loss! });\n\t\t\t//console.log('better:', current.measureIndex, evaluation.qualityScore, baseQuality);\n\t\t}\n\n\t\tif (!evaluation.fine) {\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: current.measureIndex,\n\t\t\t\tmeasure: new starry.EditableMeasure(current),\n\t\t\t\tstatus: evaluation.error ? MeasureStatus.Fatal : MeasureStatus.Issue,\n\t\t\t});\n\t\t}\n\t});\n\n\tconst t1 = Date.now();\n\tconst pickerCost = pickers.reduce((cost, picker) => cost + picker.cost, 0);\n\n\tconst qualityScore = spartito.qualityScore;\n\tconst totalCost = t1 - t0;\n\n\tlogger?.info('[regulateWithBeadSolver] done in ', totalCost, 'ms, qualityScore:', qualityScore);\n\n\t// zero 'cached' statistics for freshOnly mode\n\tif (freshOnly) counting.cached = 0;\n\n\treturn {\n\t\ttotalCost: t1 - t0,\n\t\tpickerCost,\n\t\tmeasures: counting,\n\t\tqualityScore,\n\t};\n};\n\nconst abstractRegulationBeadStats = (stats: RegulationBeadStat[]): RegulationBeadSummary => {\n\tconst { totalCost, pickerCost, measureN, timeN } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\ttotalCost: sum.totalCost + stat.totalCost,\n\t\t\tpickerCost: sum.pickerCost + stat.pickerCost,\n\t\t\tmeasureN: sum.measureN + stat.measures.computed,\n\t\t\ttimeN: sum.timeN + stat.measures.tryTimes,\n\t\t}),\n\t\t{\n\t\t\ttotalCost: 0,\n\t\t\tpickerCost: 0,\n\t\t\tmeasureN: 0,\n\t\t\ttimeN: 0,\n\t\t}\n\t);\n\n\tconst costPerMeasure = measureN > 0 ? totalCost / measureN : null;\n\tconst costPerTime = timeN > 0 ? totalCost / timeN : null;\n\n\tconst { cached, simple, computed, tryTimes, solved, issue, fatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.measures.cached,\n\t\t\tsimple: sum.simple + stat.measures.simple,\n\t\t\tcomputed: sum.computed + stat.measures.computed,\n\t\t\ttryTimes: sum.tryTimes + stat.measures.tryTimes,\n\t\t\tsolved: sum.solved + stat.measures.solved,\n\t\t\tissue: sum.issue + stat.measures.issue,\n\t\t\tfatal: sum.fatal + stat.measures.fatal,\n\t\t}),\n\t\t{ cached: 0, simple: 0, computed: 0, tryTimes: 0, solved: 0, issue: 0, fatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\ttotalCost,\n\t\tpickerCost,\n\t\tcostPerMeasure,\n\t\tcostPerTime,\n\t\tcached,\n\t\tsimple,\n\t\tcomputed,\n\t\ttryTimes,\n\t\tsolved,\n\t\tissue,\n\t\tfatal,\n\t};\n};\n\nexport { regulateWithBeadSolver, abstractRegulationBeadStats, RegulationBeadStat, ProgressInfo };\n","import * as starry from '../../src/starry';\nimport { PyClients } from './predictors';\nimport { Logger } from './ZeroClient';\nimport { SpartitoMeasure, EditableMeasure, evaluateMeasure } from '../../src/starry';\nimport { EquationPolicy } from '../../src/starry/spartitoMeasure';\nimport { genMeasureRectifications } from '../../src/starry/measureRectification';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure } from './store';\nexport * from './regulationBead';\n\nglobalThis.btoa = globalThis.btoa || ((str) => Buffer.from(str, 'binary').toString('base64'));\n\nconst RECTIFICATION_SEARCH_ITERATIONS = parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS || '30');\nconst BASE_QUOTA_FACTOR = parseInt(process.env.BASE_QUOTA_FACTOR || '40');\nconst RECTIFICATION_QUOTA_FACTOR = parseInt(process.env.RECTIFICATION_QUOTA_FACTOR || '80');\n\nconst MATRIXH_INTERPOLATION_K = 0.9;\n\ninterface SolveMeasureOptions {\n\tsolver?: (...args: any[]) => any;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tlogger?: Logger;\n}\n\nconst computeQuota = (n: number, factor: number, limit: number) =>\n\tMath.min(Math.ceil((n + 1) * factor * Math.log(n + 2)), Math.ceil(limit * Math.min(1, (24 / (n + 1)) ** 2)));\n\ninterface BaseRegulationStat {\n\tcached: number;\n\tcomputed: number;\n\tsolved: number;\n}\n\nasync function solveMeasures(\n\tmeasures: SpartitoMeasure[],\n\t{ solver, quotaMax = 1000, quotaFactor = BASE_QUOTA_FACTOR, solutionStore = DefaultSolutionStore, ignoreCache = false, logger }: SolveMeasureOptions = {}\n): Promise {\n\tlet cached = 0;\n\tlet solved = 0;\n\n\tlogger?.info(`[solveMeasures] begin, measure total: ${measures.length}.`);\n\n\tawait Promise.all(\n\t\tmeasures.map(async (measure) => {\n\t\t\tif (!ignoreCache) {\n\t\t\t\tconst solution = await solutionStore.get(measure.regulationHash);\n\t\t\t\tif (solution) {\n\t\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\t\t++cached;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst quota = computeQuota(measure.events.length, quotaFactor, quotaMax);\n\n\t\t\tawait measure.regulate({\n\t\t\t\tpolicy: 'equations',\n\t\t\t\tquota,\n\t\t\t\tsolver,\n\t\t\t});\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tif (!stat.error) solutionStore.set(measure.regulationHash0, { ...measure.asSolution(), priority: -measure?.solutionStat?.loss! });\n\t\t\tif (stat.perfect) ++solved;\n\n\t\t\tlogger?.info(\n\t\t\t\t`[solveMeasures] measure[${measure.measureIndex}/${measures.length}] regulated: ${stat.perfect ? 'solved' : stat.error ? 'error' : 'issue'}, ${\n\t\t\t\t\tmeasure.regulationHash\n\t\t\t\t}`\n\t\t\t);\n\t\t})\n\t);\n\n\tlogger?.info(`[solveMeasures] ${cached}/${measures.length} cache hit, ${solved} solved.`);\n\n\treturn {\n\t\tcached,\n\t\tcomputed: measures.length - cached,\n\t\tsolved,\n\t};\n}\n\nconst solveMeasuresWithRectifications = async (\n\tmeasure: SpartitoMeasure,\n\t{ solver, quotaMax = 4000 }: SolveMeasureOptions\n): Promise => {\n\tlet best = evaluateMeasure(measure);\n\tlet bestSolution: starry.RegulationSolution = measure.asSolution();\n\tconst quota = computeQuota(measure.events.length, RECTIFICATION_QUOTA_FACTOR, quotaMax);\n\tlet n_rec = 0;\n\n\t// @ts-ignore\n\tfor (const rec of genMeasureRectifications(measure)) {\n\t\tconst solution = await EquationPolicy.regulateMeasureWithRectification(measure, rec, { solver, quota });\n\n\t\tconst testMeasure = measure.deepCopy() as SpartitoMeasure;\n\t\ttestMeasure.applySolution(solution);\n\t\tconst result = evaluateMeasure(testMeasure);\n\n\t\tif (\n\t\t\tresult.perfect > best.perfect ||\n\t\t\tresult.error < best.error ||\n\t\t\t(!result.error && result.perfect >= best.perfect && solution.priority! > bestSolution.priority!)\n\t\t) {\n\t\t\tbest = result;\n\t\t\tbestSolution = solution;\n\t\t}\n\n\t\tif (result.perfect) break;\n\n\t\t++n_rec;\n\t\tif (n_rec > RECTIFICATION_SEARCH_ITERATIONS) break;\n\t}\n\n\treturn bestSolution;\n};\n\ninterface RegulateWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateMaybeWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients?: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateSimpleOption {\n\tsolutionStore: SolutionStore;\n\tsolver: (...args: any[]) => any;\n\tlogger?: Logger;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n}\n\ninterface TopoRegulationStat {\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\nasync function doRegulateWithTopo(\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateWithTopoOption\n): Promise {\n\tpyClients.logger.info(`[RegulateWithTopo] regulate score: ${score.title}, measures: ${score.spartito!.measures.length}`);\n\n\tconst issueMeasures = score.spartito!.measures.filter((measure) => {\n\t\tconst stat = evaluateMeasure(measure);\n\t\treturn !stat.perfect;\n\t});\n\tpyClients.logger.info(`[RegulateWithTopo] basic issues: ${issueMeasures.length}`);\n\n\tif (issueMeasures.length === 0) {\n\t\treturn {\n\t\t\tsolved: 0,\n\t\t\tissue: 0,\n\t\t\tfatal: 0,\n\t\t};\n\t}\n\n\tconst clusters = ([] as starry.EventCluster[]).concat(...issueMeasures.map((measure) => measure.createClusters()));\n\tconst results = await pyClients.predictScoreImages('topo', { clusters });\n\tconsole.assert(results.length === clusters.length, 'prediction number mismatch:', clusters.length, results.length);\n\n\tclusters.forEach((cluster, index) => {\n\t\tconst result = results[index];\n\t\tconsole.assert(result, 'no result for cluster:', cluster.index);\n\n\t\tcluster.assignPrediction(result);\n\t});\n\n\tissueMeasures.forEach((measure) => {\n\t\tconst cs = clusters.filter((c) => c.index === measure.measureIndex);\n\t\tmeasure.applyClusters(cs);\n\n\t\t// intepolate matrixH\n\t\tconst { matrixH } = EquationPolicy.estiamteMeasure(measure);\n\t\tmatrixH.forEach((row, i) =>\n\t\t\trow.forEach((v, j) => {\n\t\t\t\tmeasure.matrixH[i][j] = measure.matrixH[i][j] * MATRIXH_INTERPOLATION_K + v * (1 - MATRIXH_INTERPOLATION_K);\n\t\t\t})\n\t\t);\n\t});\n\n\tconst solvedIndices: number[] = [];\n\tconst errorIndices: number[] = [];\n\n\t// rectification search\n\tawait Promise.all(\n\t\tissueMeasures.map(async (measure) => {\n\t\t\tconst hash = measure.regulationHash0;\n\t\t\tconst solution = await solveMeasuresWithRectifications(measure, { solver });\n\t\t\tif (solution) {\n\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\tsolutionStore.set(hash, solution);\n\t\t\t\tsolutionStore.set(measure.regulationHash, measure.asSolution());\n\t\t\t\tpyClients.logger.info(`[RegulateWithTopo] solutionStore set: ${measure.measureIndex}, ${hash}, ${measure.regulationHash}`);\n\t\t\t}\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\tmeasure: new EditableMeasure(measure),\n\t\t\t\tstatus: stat.error ? 2 : 1,\n\t\t\t});\n\t\t\tif (stat.perfect) solvedIndices.push(measure.measureIndex);\n\t\t\telse if (stat.error) errorIndices.push(measure.measureIndex);\n\t\t})\n\t);\n\n\tconst n_issues = issueMeasures.length - solvedIndices.length - errorIndices.length;\n\tpyClients.logger.info(`[RegulateWithTopo] score: ${score.title}, solved/issue/fatal: ${solvedIndices.length}/${n_issues}/${errorIndices.length}`);\n\tif (solvedIndices.length) pyClients.logger.info(`[RegulateWithTopo] solved measures: ${solvedIndices.join(', ')}`);\n\tif (errorIndices.length) pyClients.logger.info(`[RegulateWithTopo] error measures: ${errorIndices.join(', ')}`);\n\n\treturn {\n\t\tsolved: solvedIndices.length,\n\t\tissue: n_issues,\n\t\tfatal: errorIndices.length,\n\t};\n}\n\ninterface RegulationStat {\n\tbaseCost: number; // in milliseconds\n\ttopoCost: number; // in milliseconds\n\tbaseMeasures: BaseRegulationStat;\n\ttopoMeasures?: TopoRegulationStat;\n\tqualityScore: number;\n}\n\nconst doRegulate = async (\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateMaybeWithTopoOption\n): Promise => {\n\tpyClients?.logger?.info(`[doRegulate] score: ${score.title}`);\n\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\n\tconst baseMeasures = await solveMeasures(spartito.measures, { solver, quotaMax: 1000, solutionStore, logger: pyClients?.logger });\n\n\tconst t1 = Date.now();\n\n\tconst topoMeasures = pyClients ? await doRegulateWithTopo(score, { pyClients, solver, solutionStore, onSaveIssueMeasure }) : undefined;\n\n\tconst t2 = Date.now();\n\n\treturn {\n\t\tbaseCost: t1 - t0,\n\t\ttopoCost: t2 - t1,\n\t\tbaseMeasures,\n\t\ttopoMeasures,\n\t\tqualityScore: spartito.qualityScore,\n\t};\n};\n\nconst doSimpleRegulate = async (\n\tscore: starry.Score,\n\t{ solver, solutionStore = DefaultSolutionStore, logger, quotaMax = 240, quotaFactor = 16 }: RegulateSimpleOption\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\tconst measures = spartito.measures.filter((measure) => !measure.regulated);\n\n\tawait solveMeasures(measures, { solver, quotaMax, quotaFactor, solutionStore, logger });\n\n\tconsole.assert(score.spartito?.regulated, 'doSimpleRegulate: regulation incomplete:', spartito.measures.filter((measure) => !measure.regulated).length);\n};\n\nconst evaluateScoreQuality = async (score: starry.Score, options: RegulateSimpleOption): Promise => {\n\tif (!score.spartito?.regulated) await doSimpleRegulate(score, options);\n\n\treturn score.spartito!.regulated ? score.spartito!.qualityScore : null;\n};\n\ninterface RegulationSummary {\n\tscoreN: number;\n\n\tbaseCostTotal: number; // in milliseconds\n\ttopoCostTotal: number; // in milliseconds\n\tbaseCostPerMeasure: number | null; // in milliseconds\n\ttopoCostPerMeasure: number | null; // in milliseconds\n\n\tcached: number;\n\tbaseComputed: number;\n\tbaseSolved: number;\n\ttopoSolved: number;\n\ttopoIssue: number;\n\ttopoFatal: number;\n}\n\nconst abstractRegulationStats = (stats: RegulationStat[]): RegulationSummary => {\n\tconst { baseCostTotal, topoCostTotal, baseMeasures, topoMeasures } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tbaseCostTotal: sum.baseCostTotal + stat.baseCost,\n\t\t\ttopoCostTotal: sum.topoCostTotal + stat.topoCost,\n\t\t\tbaseMeasures: sum.baseMeasures + stat.baseMeasures.computed,\n\t\t\ttopoMeasures: sum.topoMeasures + (stat.topoMeasures!.solved + stat.topoMeasures!.issue + stat.topoMeasures!.fatal),\n\t\t}),\n\t\t{\n\t\t\tbaseCostTotal: 0,\n\t\t\ttopoCostTotal: 0,\n\t\t\tbaseMeasures: 0,\n\t\t\ttopoMeasures: 0,\n\t\t}\n\t);\n\n\tconst baseCostPerMeasure = baseMeasures > 0 ? baseCostTotal / baseMeasures : null;\n\tconst topoCostPerMeasure = topoMeasures > 0 ? topoCostTotal / topoMeasures : null;\n\n\tconst { cached, baseComputed, baseSolved, topoSolved, topoIssue, topoFatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.baseMeasures.cached,\n\t\t\tbaseComputed: sum.baseComputed + stat.baseMeasures.computed,\n\t\t\tbaseSolved: sum.baseSolved + stat.baseMeasures.solved,\n\t\t\ttopoSolved: sum.topoSolved + stat.topoMeasures!.solved,\n\t\t\ttopoIssue: sum.topoIssue + stat.topoMeasures!.issue,\n\t\t\ttopoFatal: sum.topoFatal + stat.topoMeasures!.fatal,\n\t\t}),\n\t\t{ cached: 0, baseComputed: 0, baseSolved: 0, topoSolved: 0, topoIssue: 0, topoFatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\tbaseCostTotal,\n\t\ttopoCostTotal,\n\t\tbaseCostPerMeasure,\n\t\ttopoCostPerMeasure,\n\t\tcached,\n\t\tbaseComputed,\n\t\tbaseSolved,\n\t\ttopoSolved,\n\t\ttopoIssue,\n\t\ttopoFatal,\n\t};\n};\n\nexport { doRegulate, doSimpleRegulate, evaluateScoreQuality, abstractRegulationStats };\n","console.info(`%cstarry-omr%c v1.0.0 2026-05-05T14:46:38.729Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../libs/browserComponents';\n\nexport * from '../../../src/isomorphic/converter';\nexport * as starry from '../../../src/starry';\nexport * from '../../libs/predictors';\nexport * from '../../libs/predictPages';\nexport * from '../../libs/regulation';\nexport * from '../../libs/store';\nexport * from '../../libs/util';\n"],"names":["globalThis","btoa","str","Buffer","from","toString","atob","recoverJSON","json","classDict","JSON","stringify","parse","_","value","__prototype","Class","fields","deepCopy","o","dict","Map","get","Array","isArray","result","set","forEach","e","push","Object","entries","key","setPrototypeOf","__proto__","SimpleClass","assign","data","this","toJSON","cls","constructor","serializedKeys","blackKeys","keys","filter","includes","pick","className","Sylvester","Matrix","create","elements","setElements","I","n","j","els","i","prototype","dup","isSquare","cols","length","toRightTriangular","p","M","np","multiplier","determinant","det","isSingular","augment","matrix","T","nj","inverse","divisor","new_element","inverse_elements","SemanticType","NOTEHEAD_WIDTHS","NoteheadS0","NoteheadS1","NoteheadS2","glyphCenters","x","zero","y","one","two","three","four","five","six","seven","eight","nine","f","m","r","s","z","SYSTEM_SEMANTIC_TYPES","BarMeasure","vline_BarMeasure","vline_BarTerminal","vline_BarSegment","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","st","CONFLICTION_GROUPS","Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","ScriptStaccatissimo","TimesigZero","TimesigOne","TimesigTwo","TimesigThree","TimesigFour","TimesigFive","TimesigSix","TimesigSeven","TimesigEight","TimesigNine","Rest0","Rest1","Rest2","Rest3","Rest4","Rest5","Rest6","Rest0W","RestM1","SignInterval","SignLined","BeamLeft","BeamContinue","BeamRight","STAMP_SEMANTICS","ClefG","ClefF","ClefC","Dot","AccNatural","AccSharp","AccDoublesharp","AccFlat","AccFlatflat","TimesigC44","TimesigC22","OctaveShift8","OctaveShift0","ScriptFermata","ScriptShortFermata","ScriptSforzato","ScriptStaccato","ScriptTurn","ScriptTrill","ScriptSegno","ScriptCoda","ScriptArpeggio","ScriptPrall","ScriptMordent","ScriptMarcato","ScriptTenuto","ScriptPortato","PedalStar","PedalPed","hashSemanticPoint","systemIndex","staffIndex","point","Math","round","source","semantic","hash","sha1","array","slice","id","String","fromCharCode","substring","hashPageSemanticPoint","pageName","roundNumber","precision","min","Infinity","max","distance2D","p1","p2","dx","dy","sqrt","gcd","a","b","Number","isInteger","console","error","frac","numerator","denominator","reducedFraction","d","g","printFraction","fractionMul","fraction","segmentPoints","points","axis","sorted","sort","seg","lastP","reduce","segments","filterWeekPoints","rests","group","find","weeks","solveOverlapping","pset","Set","xClusters","clusters","concat","map","c","ps","confidence","delete","GROUP_N_TO_PITCH","noteToPitch","note","alter","floor","gn","mod7","argmax","indexOf","DummyLogger","debug","groupCollapsed","groupEnd","info","warn","assert","DURATION_MULTIPLIER","floatToTimeWarp","floatToFrac","ActionType","EventElementType","TokenType","Action","P","type","PLACE","e1","V","e2","order","VERTICAL","H","HORIZONTAL","events","isFinite","StageMatrix","fromNode","node","status","stages","fill","actions","action","stage1","findIndex","stage","stage2","add","stagedEvents","endHs","matrixH","has","endHP","hActions","pendingHeads","eventMap","eid","some","index","pathOf","target","ei","size","yy","sub","findDoublePath","s1","s2","paths","t","path","reducePath","column","toEquations","eventCount","equations","path1","path2","equation","PathNode","logger","last","parent","join","like","ids","split","constructStages","unshift","newStage","si","splice","constructConstraints","factors","duration","constraints","it","inbalancesConstraints","ones","fixed","inbalances","constraint","sum","solveEquations","xis","items","abs","equationMap","conflicted","lines","line","bias","every","squareLines","restLines","candidateLines","i1","i2","prior","sl","c1","c2","invert","mat","matrixInverse","solution","row","xi","optimallySolve","shrinkMap","shrinkness","groups","pair","released","releasedIds","warps","lowWarp","isConflicted","eventTendencies","timeWarps","getSolution","actionKey","hacts","a1","a2","hmap","act","startEs","voices","se","voice","values","tick","endTick","tickGroup","timeWarp","estages","solveStages","changed","reverse","event","measureDuration","outEI","fromCodePoint","deduce","quota","access","actionAccessing","times","closed","credits","children","expand","possibility","n1","n2","child","matrixV","branches","appendBranch","branch","Solver","env","event0","measureShrinkness","expectedDuration","staff","xSpan","endX","solve","pathRoot","bestSolution","evaluateSolution","loss","sevents","es","partialFrac","weight","log","spaceTime","staffAlters","start","end","eventsXOrder","tickTwists","dt","atan2","PI","tickTwist","EventCluster","super","regular","elem","CHORD","REST","fake","y1","y2","grace","fullMeasure","grant","annotation","feature","estimatedDuration","endElem","EOS","predisposition","assignPrediction","prediction","pe","EventClusterSet","trimIrregular","ir","cluster","PatchMeasure","staffN","log2","staffMask","basics","basic","tt","TokenTypes","TokenClefs","test","TokenTimesigs","TokenTimesigsC","TokenTimesigsN","TokenOctshifts","TokenNumbers","TokenAccidentals","TokenNoteheads","TokenBareNoteheads","TokenDirectionalNoteheads","TokenRests","TokenFlags","TokenVolta","TokenDynamics","TokenScripts","TokenPedals","TokenDots","DotDot","TokenArcs","SlurBegin","SlurEnd","TieBegin","TieEnd","TokenBeams","TokenWedges","TokenAccessories","TokenDirectionless","TokenGlyphs","TOKEN_Y_ROUND","TOKEN_Y_FIXED","Token","typeId","isPredicted","isNotehead","isContexted","isAccessory","division","NoteheadS1stemU","NoteheadS1stemD","NoteheadS2stemU","NoteheadS2stemD","Flag3","Flag4","Flag5","Flag6","Flag7","Flag8","dots","direction","width","left","right","voiceIndices","indices","TextToken","width_","WHOLE_DURATION","AccessoryDirection","GraceType","StemBeam","TremoloLink","GlissandoStyle","ArpeggioStyle","Term","EventTerm","space","term","rest","accessories","pivotX","alignedTick","mainDuration","divider","undefined","fullMeasureRest","tipX","tip","tipY","ys","tremoloCatcher","tremoloLink","Catcher","scaleChord","pitches","pitch","zeroHolder","ContextType","ContextedTerm","Token.TokenClefs","tokenType","Clef","KeyAcc","Acc","Token.TokenOctshifts","OctaveShift","Token.TokenTimesigsC","TimeSignatureC","Token.TokenTimesigsN","TimeSignatureN","staffLevel","clef","KeyNatural","KeySharp","KeyFlat","octaveShift","OctaveShift8va","OctaveShift8vb","number","MarkTerm","MUSIC_NOTES","TempoTerm","fromNumeralText","text","symbol","beats","durationMagnitude","den","dot","match","bpm","isValid","range","GlyphTerm","TextTerm","LyricTerm","CommandTerm","ChordmodeTerm","SimplePolicy","computeMeasureTicks","measure","xMap","rows","k","roundX","constructXMap","ts","eventGroups","x1","x2","Grace","divisionVector","dotsVector","timeWarped","computeMeasureVoices","eventSet","pushEvent","e0","EquationPolicy","PageLayoutMethod","TextType","INVERT_SQRT2","FINE_BEAMS","Open","Continue","Close","bb","solveStaffGroup","staffGroup","options","EquationSolver.Solver","estiamteMeasure","allEvents","tickEstimated","stemDirection","beam","pR","tanh","eventStartX","fakeP","timeSignature","staffGroupMap","staffGroups","staves","ievents","startX","hp","erf","staffDecay","exp","yDecay","dtx","nR","position","regulateMeasure","async","solver","ii","mp","measureIndex","resultEvents","solutionStat","solverCredits","solverTimes","regulateMeasureWithRectification","rectification","re","priority","tickN","SpartitoMeasure","reorderEvents","staffYsFull","rx","ry","yi","yis","ev","intX","intY","originalRegulationHash","regulated","regulationHash","barTypes","postRegulate","keySignature","timeSignatureChanged","contexts","Boolean","doubtfulTimesig","validRegulated","flat","tickMap","endEvent","tickToX","tickRates","tickRatesInStaves","rates","tickRatesInGroups","gevents","groupIndex","twists","empty","hasIllEvent","voicedEventIds","brief","regulationHash0","regulationHashes","featureWords","invalid","rate","uys","melodies","rhythm","barType","voltaEnd","typeEntris","partialDuration","signatureDuration","updateRoundX","graceEvents","staffMap","smap","oldEvent","staffPositions","emap","preTick","graces","graceIds","totalDuration","warp","solveGraceEvents","catchers","pitchers","Pitcher","catcher","candidates","pitcher","catcherId","tremolo","pi","solveTremoloPairs","updateContextTick","terms","t1","t2","asSolution","ref","refEvent","applySolution","cleanupRegulation","regulateTest","regulateSimple","regulateEquations","regulate","policy","createPatch","marks","createClusters","trueEventIds","idx","staffIndices","staffY0","staffYs","staffYn","headY","BOS","tar","src","patched","backgroundImages","url","applyClusters","id_max","is","srcId","tarId","EditableEvent","agent","Proxy","self","captures","parseInt","ownKeys","getOwnPropertyDescriptor","enumerable","configurable","EditableMeasure","syncVoiceToEvents","voiceIndex","syncVoiceFromEvents","makeMIDI","microsecondsPerBeat","tracks","vi","subEvents","midiEvents","time","subtype","channel","noteNumber","velocity","thirtyseconds","ticks","deltaTime","header","formatType","ticksPerBeat","BEAM_STATUS","evaluateMeasure","validEvents","warpedEvents","irregularWarps","fractionalWarp","tickSum","eventN","tickOverlapped","complicatedTimewarp","literalDuration","sigDuration","inVoiceEvents","corruptedVoiceEvent","overranged","over","overDuration","graceInVoice","graceN","graceDominant","irregularTick","beamBroken","broken","evi","surplusTime","eventDuration","nullEvents","fakeEvents","voiceRugged","perfect","fine","expectDuration","durationRate","qualityScore","spaceLoss","irregularWarpsN","LayoutType","spreadMeasureSeq","seq","Ordinary","layout","serialize","seqToCode","withBrackets","code","inRange","SingleMLayout","BlockMLayout","trimSeq","seq2","seq3","fromSeq","VoltaMLayout","bodySeq","body","alternates","alternateSeqs","lastAlternateSeq","Conservative","Full","Once","ABAMLayout","seqA","main","seqA_","seqB","parser","v","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","trace","symbols_","start_symbol","measure_layout","EOF","index_wise_measure_layout","segment_wise_measure_layout","iw_sequence","iw_item","UNSIGNED","single","iw_block_item","iw_volta","iw_aba","iw_block","iw_optional_alternates","iw_alternates","sw_sequence","sw_item","segment","sw_block_item","sw_volta","sw_aba","sw_block","sw_optional_alternates","sw_alternates","$accept","$end","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","root","blockLayout","singleLayout","voltaBlock","abaBlock","table","defaultActions","parseError","recoverable","Error","input","stack","vstack","lstack","args","call","arguments","lexer","sharedState","hasOwnProperty","setInput","yylloc","yyloc","ranges","getPrototypeOf","state","len","newState","expected","lex","token","yyval","errStr","showPosition","loc","first_line","last_line","first_column","last_column","apply","item","speard","serializeSeq","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","unput","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","test_match","indexed_rule","backup","matches","tempMatch","rules","_currentRules","flex","begin","condition","popState","pop","conditions","topState","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","INITIAL","inclusive","Parser","grammar$1","StaffGroupType","StaffConjunctionType","singleGroup","Default","BOUNDS_TO_GROUPTYPE","Brace","Bracket","Square","CONJUNCTIONS_MAP","Blank","Solid","Dashed","randomB64","random","makeGroupsFromRaw","remains","word","shift","bound","level","subs","grand","groupHead","groupTail","groupDict","groupKey","StaffLayout","raw","prefix","name","makeUniqueName","staffIds","conjunctions","conjunction","leftBounds","rightBounds","maskCache","stavesCount","partGroups","grands","standaloneGroups","collect","conjunctionBetween","upStaff","downStaff","con","makeMaskLayout","mask","nextId","partialMaskCode","bits","withIds","staffStatus","joinGroup","subStr","partial","inner","bracketCode","$Vb","$Vc","staff_layout","seq_id","seq_br","seq_con","bound_left","bound_right","bound_lefts","bound_rights","ID","seq_bl","Seq","bl","br","Item","grammar","parseCode","SemanticGraph","fromPoints","graph","getLayer","getConfidentLayer","threshold","getSystemPoints","getStaffPoints","scale","factor","transform","extension","scaling","height","MEASURE_SEMANTICS","GraceNotehead","CrescendoBegin","CrescendoEnd","DecrescendoBegin","DecrescendoEnd","TremoloLeft","TremoloRight","TremoloMiddle","STAFF_LINED_SEMANTICS","LINED_INTERVAL_SEMANTICS","NOTEHEAD_FOR_STEM_SEMANTICS","KEYACC_CANDIDATE_SEMANTICS","NOTEHEAD_TABLE","up","down","REST_SEMANTICS","TOKEN_TO_STEMBEAM","TEXT_TYPE_ALIAS","Alter1","Alternation1","Alter2","Alternation2","noteheadsXPivot","xs","mean","Measure","tokens","antiTokens","noteheads","chordRects","nh","nulN","nhmap","hh","nhs","top","bottom","nh0","stemX","additionalLines","chords","getChords","chord","ceil","flags","beams","chordRcs","rect","noteIds","accs","flagRange","nearbyFlags","flag","beamToken","nearbyDots","getRests","dotValue","getEvents","getContexts","assignAccessoriesOnEvents","accessory","relatedEvents","owner","d1","d2","Down","Up","sortEvents","arpeggio","tremolsLs","tremolsRs","tremolsMs","tevents","stemL","stemR","tm","te","tl","tr","assignFeaturesOnEvents","semantics","dotPs","beamLs","beamMs","beamRs","gracePs","tremoloRs","stems","vline_Stem","s0","cx","divisions","ss","i_flags","f1","f2","i_dots","dots2","bs","u_stems","stem","d_stems","stemDirections","tremolos","Staff","measureCount","measureBars","staffY","measures","noteRange","rearrangeMeasures","reassignTokens","assignSemantics","assemble","system","qualifiedSemantics","TempoNotehead","tempoNh","antiP","displacementSemantics","appendPoint","semanticTop","semanticBottom","rootNhs","nhOffsetX","attachedHeads","topDist","bottomDist","antiPoint","nearStems","appendFlags","dotLines","sy","keyaccs","acc","oct","voltaDots","VoltaLeft","VoltaRight","voltaGroups","lined","interval","signs","fixedY","roundY","holder","mainFlag","downward","tailY","count","clearTokens","clearPredictedTokens","System","HEAD_WIDTH","segmentLength","arrangePosition","sidBlackList","sidWhiteList","staffTop","staffBottom","radius","staffMaskChanged","prev","positions","tidyMeasureBars","b1","b2","restWidth","connectionLine","staffHead","staffTail","middleY","timeSignatureOnHead","getStaffArray","on","getMarksInMeasure","textType","TempoNumeral","headMeasureIndex","columns","voltaBegin","alternative","mi","timeSigs","lastColumn","break","getEventsFunctional","processors","useXMap","localRows","groupMap","proc","oy","bars","lastX","barColumns","bar","intensity","barXs","prevStaff","nextStaff","newPoint","appendToken","fontSize","overlap","Page","systems","assignTexts","areas","imageHeight","imageWidth","dimensions","area","cy","rp","score","rect_Text","theta","textFeature","feature_dict","textAnnotations","sysXs","middleX","indent","Text","textFeasure","Title","Author","PageMargin","Other","Chord","MeasureNumber","Instrument","TextualMark","Times","sx","SemanticElementType","TIME_SIG_DENOMINATORS","fromEntries","TIME_SIG_NUMERATORS","et","ELEMENT_TOKEN_NAMES","NoteheadGrace","NOTEHEAD_BASE_DIVISION","NOTEHEAD_ELEMENT_TYPES","REST_ELEMENT_TYPES","BEAM_ELEMENT_TYPES","NOTE_ELEMENT_TYPES","SOURCE_ELEMENT_TYPES","TARGET_ELEMENT_TYPES","ROOT_NOTE_ELEMENT_TYPES","ELEMENT_TO_STEMBEAM","metaElem","BOS_ELEMENT","fractionToElems","SemanticCluster","elementToJSON","sourceMask","targetMask","vMask","compactMatrixH","expandMatrixByMasks","compactMatrixV","_matrixV","expandMatrixByMaskTriu","groupsV","matrixFromGroups","found","mapMatrix","x2i","i2x","mergeOverlapping","overlaps","overlappedNoteheads","ij","nh1","nh2","masks","stemMasks","stemNotes","s0s","subS0Masks","stemMap","stemId","prevId","linkings","roots","parentMasks","parentId","rootId","subNotes","dotGroups","tipRange","beamElem","iter","gen","maskSrc","maskTar","groupIds","id1","id2","ImplicitType","Stream","buffer","Uint8Array","eof","read","readString","readInt32","readInt16","readInt8","signed","readVarInt","OStream","write","writeInt32","writeInt16","writeInt8","writeVarInt","getBuffer","getArrayBuffer","charCodeAt","MIDI","parseMidiData","readChunk","stream","lastEventTypeByte","readEvent","eventTypeByte","param1","eventType","amount","controllerType","programNumber","subtypeByte","hourByte","frameRate","hour","sec","frame","subframe","pow","metronome","headerChunk","headerStream","trackCount","timeDivision","trackChunk","trackStream","encodeMidiFile","writeChunk","writeEvent","frameByte","MidiSequence","midiToSequence","midiFile","trackStates","beatsPerMinute","nextEventIndex","ticksToNextEvent","getNextEvent","nextEventTrack","nextEvent","ticksToEvent","track","midiEvent","processNext","secondsToGenerate","processEvents","trimSequence","clear","fixOverlapNotes","noteMap","overlapMap","swaps","leapIndex","swap","front","back","offEvent","leapEvent","tempo","require$$0","PedalControllerTypes","Notation","parseMidi","fixOverlap","channelStatus","pedalStatus","pedals","channels","millisecondsPerBeat","barIndex","keyRange","correspondences","rawTicks","tempos","rawEvents","deltaTicks","deltaBeats","startTick","low","statusIndex","finger","high","pedalType","fingers","isNaN","endTime","meta","notes","pitchMap","beatInfos","lastInfo","beatIndex","entry","findChordBySoftindex","softIndex","averageTempo","tickRange","to","endtick","span","ticksToTime","next_tempo_index","tempo_index","timeToTicks","tickRangeToTimeRange","scaleTempo","headTempo","MusicNotation","animationDelay","Promise","resolve","requestAnimationFrame","MidiPlayer_1","MidiPlayer","midiData","cacheSpan","onMidi","onPlayFinish","onTurnCursor","notation","isPlaying","progressTime","startTime","performance","now","cursorTurnDelta","dispose","progressTicks","play","nextFrame","currentEventIndex","backturn","eventTime","pause","turnCursor","config","CostStepAttenuation","SkipDeep","PriorDistanceSigmoidFactor","PriorValueSigmoidFactor","SkipCost","LagOffsetCost","LeadOffsetCost","ZeroOffsetCost","RelocationThreshold","Config","require$$1","Node","s_note","c_note","_prev","_totalCost","_value","cacheDirty","ci","rootSi","cost","skip","updateCache","totalCost","selfCost","deep","dump","evaluatePrev","evaluatePrevCost","priorByOffset","distance","navigator","Navigator","criterion","sample","getCursorOffset","outOfPage","bestNode","fineCursor","breakingSI","zeroNode","relocationThreshold","step","prevNote","prevNode","cursors","nullLength","nullSteps","cursor","resetCursor","breaking","deltaSi","fromIndex","toIndex","backPrior","cursorOffset","relocationTendency","normalizeInterval","HEART_BEAT","makeNoteSoftIndex","softIndexFactor","lastNote","Matcher","makeMatchNodes","targetList","targetNote","genNotationContext","runNavigation","onStep","Symbol","for","EXCLUDE_MIDI_EVENT_SUBTYPES","encodeToMIDIData","unclosedNoteDuration","msToTicks","Date","process","VUE_APP_BUILD_TIME","toDateString","MidiUtils","sliceMidi","midi","trackDeltaToAbs","lastTick","trackAbsToDelta","sliceTrack","encodeToMIDI","musicWidgets","require$$2","require$$3","require$$4","COMMON_NOTE_FIELDS","MetaNotation","fromAbsoluteNotes","measureHeads","__","mnotes","mn","field","idTrackMap","performAbsoluteNotes","abNotes","withRestTied","tied","overlapped","staffTrack","contextIndex","implicitType","chordPosition","priorNote","ripe","trackTickBias","headMeasure","trackNames","idSet","toAbsoluteNotes","measureIndices","measureTick","measureNotes","mnote","toPerformingNotation","WHOLE_DURATION_MAGNITUDE","toPerformingMIDI","trackList","zeroTick","measureEvents","mevent","eventPriority","subnote","finalTick","toPerformingNotationWithEvents","assignNotationNoteDataFromEvents","setTempo","midiNotation","noteId","CryptoJS","exports","crypto","window","msCrypto","global","require","err","cryptoSecureRandomInt","getRandomValues","Uint32Array","randomBytes","readInt32LE","F","obj","C","C_lib","lib","Base","extend","overrides","mixIn","init","$super","instance","properties","propertyName","clone","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","nBytes","C_enc","enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","decodeURIComponent","escape","utf8Str","unescape","encodeURIComponent","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","_process","doFlush","processedWords","dataWords","dataSigBytes","blockSize","nBlocksReady","nWordsReady","_minBufferSize","nBytesReady","_doProcessBlock","Hasher","cfg","_doReset","update","messageUpdate","finalize","_doFinalize","_createHelper","hasher","message","_createHmacHelper","C_algo","HMAC","algo","K","isPrime","sqrtN","getFractionalBits","nPrime","W","SHA256","_hash","h","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","nBitsTotal","nBitsLeft","HmacSHA256","factory","HashVector","fromHash","byte","fromString","_SHA256","uwords","word_len","fromWords","vectors","toHash","bit","vec","crop","ODDS","odds","odd","cosHashes","hash1","hash2","xor","xorHashes","i2hex","emptyVoiceFromStaffMeasure","chiefVoice","timeSigNumeric","contextedTerms","markingTiesInVoice","event1","p0","tying","si0","si1","Spartito","solidMeasureCount","measureIndexMapping","headBPM","tempoMark","mark","measureLayoutCode","ms","vb","ve","leftSign","rightSign","nextI","mm","nextVBI","pms","lastVEI","lastMI","dumpEvaluations","rectifyTimeSignatures","mis","newTimeSignature","measuresToFix","originTimeSignature","regularD","numerators","countings","peakCount","bestCounting","best","reducedN","makeVoiceStaves","voiceCount","nextMeasure","ctxList","maxEventX","deferred","leftStaves","lastEvent","tailEvent","tailStaff","pageBreak","headStaff","sd","trait","staffToGroup","voiceTraits","vector","v1","v2","leftVoices","voiceTrait","vs","consistencies","m1","m2","staffVoiceIndices","mode","removeEmptyMeasuresInVoicesStaves","perform","tokenMap","staffToChannel","voiceChannels","hasTempo","nextTick","events0","voice0","part","pitchValue","performByEstimation","noteTick","featureHash","measureWords","levels","meaures","vecY","vecMelody","vecRhythm","featureHashHex","featureHashBigInt","BigInt","assignMeasureNumbers","discard","measureNumber","mod12","ALTER_NAMES","StaffContext","keyAlters","alters","timeSigNumSet","timeSigDenSet","doubtingTimesig","change","yToNote","partialTimeSignature","resetMeasure","resetSystem","noteToY","pitchToNote","preferredAlter","gp","alteredGp","naturalNote","alterValue","keyAlterValue","pitchToY","alterOnNote","yToPitch","yToPitchName","bitsToMask","Score","version","layoutTemplate","staffLayoutCode","pages","page","spartito","upgradeScoreData","headers","instrumentDict","pageSize","unitSize","maxStavesCount","imageKeys","backgroundImage","maskImage","breakSystemIndices","systemCount","staffLayout","staffLayout.parseCode","semanticHash","eventSystemsToTermStaves","eventSystems","termStaves","sys","context","startEvent","processStaffContext","resetPageLayout","parameters","newCenter","offsetX","offsetY","getMeasure","localIndex","getRawCluster","systemY0","y0","getRawClusters","makeSpartito","ri","esys","patch","patches","makeMusicSheet","voiceStaves","title","paperOptions","measureLayout","getMeasureLayout","findPoint","sid","pageIndex","getMeasureSemantics","sy1","sy2","makeTimewiseGraph","store","getTokenMap","confidenceThreshold","append","assembleSystem","markVoices","vis","replaceImageKeys","all","then","inferenceStaffLayout","staffTotal","completeSystems","bracketsAppearance","candidateCodes","codeCounting","maxCount","connectedCode","lastSys","search","code1","startsWith","assignBackgroundForMeasure","imagePosition","original","blackoutFakeNotes","scope","inScope","fakeIds","voicedIds","fakeIdSet","blackIds","measureLayout.parseCode","splitToSingleScoresGen","startSysIndices","templateScore","topology","startSysIndex","endSysIndex","sysInRange","newScore","SubScoreSystem","SubScorePage","splitToSingleScores","BeadType","DIVISION_NAMES","SPACE_LOSS_WEIGHT","POSSIBILITY_LOW_BOUNDARY","STEM_DIRECTION_OPTIONS","BEAM_OPTIONS","saveClusterState","BeadNode","accessCount","nextBranch","possibilities","currentElem","elemIndex","branchID","ni","Pass","Division","Dots","repeat","picker","ptFactor","evaluateCluster","pretentiousness","selfEval","element","residue","fatalError","predictCluster","evaluation","estimateElementDuration","eos","lastOrder","voiceN","scales","referenceScale","nearScale","tickSpan","twist","tickMSE","tickErr","mse","spaceDuration","solveCluster","stopLoss","suc0","bestEvaluation","bestState","restoreClusterState","fixedEvents","pendingEvents","near","stemDirectionVector","beamVector","solveMeasure","quotaMax","quotaFactor","worstLoss","durations","solutionEvents","tipElem","tickSet","glimpseMeasure","resetSignatureForDoubtfulOnly","estimateMeasure","StemTip","StemHead","rect_Lyric","SemanticClusterSet","vocab","converts","connection","SUPPORT_CLEF_TYPES","starry.TokenType","tokenToText","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","Function","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","EventEmitter","eventsModule","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","existing","warning","newListener","emit","warned","w","onceWrapper","fired","wrapFn","_onceWrap","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","copy","addEventListener","wrapListener","arg","removeEventListener","destructPromise","timeout","rs","rj","setTimeout","defineProperty","RangeError","setMaxListeners","getMaxListeners","doError","er","listeners","addListener","prependListener","prependOnceListener","list","originalListener","spliceOne","off","removeAllListeners","rawListeners","eventNames","AsyncQueue","working","tasks","_digest","taskFn","payload","addTask","task","promise","ZeroClient","queue","socket","Request","sendTimeout","receiveTimeout","connect","__request","retryTimes","req","send","pack","receive","close","request","method","kwargs","args_","kwargs_","msg","opt","unpack","PyProcessor","scriptPath","retryCount","retryDelay","port","freePort","getPortPromise","stopPort","defaultsDeep","pyShell","PythonShell","stdout","isBuffer","inherits_browserModule","ctor","superCtor","super_","writable","TempCtor","util","inherits","inheritsModule","getOwnPropertyDescriptors","descriptors","formatRegExp","format","isString","objects","inspect","isNull","isObject","deprecate","fn","noDeprecation","throwDeprecation","traceDeprecation","debugEnviron","debugs","opts","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","isFunction","primitive","simple","isNumber","formatPrimitive","visibleKeys","val","arrayToHash","isError","formatError","isRegExp","RegExp","isDate","output","base","braces","toUTCString","formatProperty","formatArray","cur","reduceToSingleString","desc","ar","objectToString","pad","debuglog","NODE_DEBUG","toUpperCase","pid","bold","italic","underline","white","grey","black","blue","cyan","green","magenta","red","yellow","special","boolean","null","string","date","regexp","isNullOrUndefined","isSymbol","isPrimitive","months","prop","getHours","getMinutes","getSeconds","getDate","getMonth","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","cb","newReason","promisify","promiseResolve","promiseReject","defineProperties","custom","callbackify","callbackified","maybeCb","rej","getPort","base64map","crypt","rotl","rotr","endian","bytes","bytesToWords","wordsToBytes","bytesToHex","hex","hexToBytes","bytesToBase64","base64","triplet","charAt","base64ToBytes","imod4","cryptModule","charenc","utf8","stringToBytes","bin","bytesToString","charenc_1","api","digestbytes","H0","H1","H2","H3","H4","asBytes","asString","_blocksize","_digestsize","sha1Module","constructSystem","detection","imageSize","systemWidth","phi2","phi1","systemHeight","lastSystem","stavesTops","middleRhos","starry.Staff","starry.System","convertImage","maxHeight","quality","buf","got","responseType","decompress","https","rejectUnauthorized","toBuffer","webpBuffer","sharp","resize","fit","withoutEnlargement","toFormat","filename","SparkMD5","ArrayBuffer","OffscreenCanvas","Canvas","Image","STAFF_PADDING_LEFT","GAUGE_VISION_SPEC","viewportHeight","viewportUnit","MASK_VISION_SPEC","SEMANTIC_VISION_SPEC","concurrencyTask","fns","shootStaffImage","paddingLeft","spec","middleUnits","canvas","getContext","fillStyle","fillRect","drawImage","loadImage","shootStaffBackgroundImage","sourceCanvas","toBufferSync","gaugeStaff","gaugeImage","pyClients","sourceBuffer","baseY","predictScoreImages","maskStaff","img","semanticStaff","settings","semanticConfidenceThreshold","replacePageImages","onReplaceImageKey","OMRProgress","onChange","setTotal","total","finished","increase","lruCache","WeakLRUCache","pageStore","getValue","setValue","onReplaceImage","multinomial_1","pvals","looseVector","ns","looseEvent","MeasureRectification","roll","DefaultSolutionStore","PendingCondition","solveMeasureRecords","records","onUpdate","pendingCondition","NotFine","pass","onProgress","pendingRecords","ErrorOnly","Imperfect","isPending","record","current","starry.beadSolver.solveMeasure","starry.evaluateMeasure","better","remaining","RECTIFICATION_SEARCH_ITERATIONS","BASE_QUOTA_FACTOR","RECTIFICATION_QUOTA_FACTOR","computeQuota","limit","solveMeasures","solutionStore","ignoreCache","cached","solved","stat","computed","solveMeasuresWithRectifications","n_rec","rec","default","stale","genMeasureRectifications","testMeasure","doSimpleRegulate","PyClients","clients","getClient","client","option","checkHost","warmup","clientType","res","by_buffer","stats","costTotal","pagesCostTotal","pagesTotal","pagesCost","costPerPage","scoreN","pickerCost","measureN","timeN","tryTimes","costPerMeasure","costPerTime","issue","fatal","baseCostTotal","topoCostTotal","baseMeasures","topoMeasures","baseCost","topoCost","baseCostPerMeasure","topoCostPerMeasure","baseComputed","baseSolved","topoSolved","topoIssue","topoFatal","onSaveIssueMeasure","t0","issueMeasures","results","cs","solvedIndices","errorIndices","n_issues","doRegulateWithTopo","maskImages","hasMaskImage","scoreJson","idsMap","idsXMap","idStaffIndexMap","coverTexts","subtitles","subtitle","authors","composer","bgWidth","bgHeight","l1","ls","parts","partTemplates","measureXs","partIndex","template","staffIndexBase","paddedStaves","chordColumns","staffIndexInPart","noteIndex","measureStartX","elems","firstX","innerId","lastFifths","clefs","pt","fifths","lineStaves","systemTopStaff","systemBottomStaff","systemTopStaffY","systemBottomStaffY","lastPartLastStaff","partStaves","staffs","details","hide","visibleStaves","partTopStaff","partBottomStaff","partTopStaffY","partBottomStaffY","distances","imgs","spartitoMeasure","parti","mIndices","sortedParts","midiJson","measInfo","ent","idNoteMap","beatsCurrent","beatsUnitCurrent","mIndex","beatsUnit","evt","note_ticks","measureInfos","beatUnit","mergedTracks","trackIndex","program","lhPattern","rhPattern","instrus","hand","handStaves","trackToSplit","newTracks","stave","rightHandTrack","leftHandTrack","transformedTracks","onEvent","measureTickMap","numId","newEvent","elem_ids","meas_start_tick","images","outputWidth","processes","progress","image","starry.Score","raggedLast","raggedLastBottom","enabledGauge","originalImages","pageCanvasList","scaleForLayout","sourceSize","detections","cvs","enableGauge","imageURLMap","collectImage","createPage","detect","pageKey","cachedPageJson","omit","renew","starry.recoverJSON","starry","starry.Page","unit","cos","sin","needGauge","correctCanvas","pageCanvas","save","setTransform","restore","getImageData","putImageData","sourceCenter","shootImageByDetection","sizeRatios","staffInterval","vw","hwr","maxVW","maxAspect","setGlobalPageSize","systemsCount","allTasks","omitPages","n_page","pageTasks","bracketImages","topMid","bottomMid","sourceRect","OUTPUT_INTERVAL","bracketsRes","buffers","bufferForText","location","box","resultOCR","titleToken","gaugeRes","maskRes","semanticRes","t3","pickers","freshOnly","onPassStart","baseQuality","n_seq","starry.beadSolver.estimateMeasure","counting","toFixed","totalMeasures","computeRemaining","wrappedOnProgress","starry.EditableMeasure","saveMeasure","solutions","batchGet","originMeasure"],"mappings":"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M7F,EAAIA,GAEX,EAvdM6/B,cAASriC,UAAG,gBCiCpB,MAOMmjC,GAAoB,CACzBnhC,EAAaqE,MACbrE,EAAasE,MACbtE,EAAauE,MACbvE,EAAa8E,WACb9E,EAAa+E,WACb/E,EAAa4C,YACb5C,EAAa6C,WACb7C,EAAa8C,WACb9C,EAAa+C,aACb/C,EAAagD,YACbhD,EAAaiD,YACbjD,EAAakD,WACblD,EAAamD,aACbnD,EAAaoD,aACbpD,EAAaqD,YACbrD,EAAaogB,eACbpgB,EAAaqgB,eACbrgB,EAAaiF,aACbjF,EAAaiC,KACbjC,EAAakC,IACblC,EAAamC,IACbnC,EAAaoC,MACbpC,EAAaqC,KACbrC,EAAasC,KACbtC,EAAauC,IACbvC,EAAawC,MACbxC,EAAayC,MACbzC,EAAa0C,KACb1C,EAAayE,WACbzE,EAAa0E,SACb1E,EAAa2E,eACb3E,EAAa4E,QACb5E,EAAa6E,YACb7E,EAAaE,WACbF,EAAaG,WACbH,EAAaI,WACbJ,EAAagc,gBACbhc,EAAaic,gBACbjc,EAAakc,gBACblc,EAAamc,gBACbnc,EAAasD,MACbtD,EAAauD,MACbvD,EAAawD,MACbxD,EAAayD,MACbzD,EAAa0D,MACb1D,EAAa2D,MACb3D,EAAa4D,MACb5D,EAAa6D,OACb7D,EAAa8D,OACb9D,EAAa8a,UACb9a,EAAa+a,QACb/a,EAAawE,IACbxE,EAAakB,EACblB,EAAaf,EACbe,EAAamB,EACbnB,EAAazB,EACbyB,EAAaoB,EACbpB,EAAaqB,EACbrB,EAAasB,EACbtB,EAAakF,cACblF,EAAamF,mBACbnF,EAAaoF,eACbpF,EAAaqF,eACbrF,EAAa2C,oBACb3C,EAAasF,WACbtF,EAAauF,YACbvF,EAAawF,YACbxF,EAAayF,WACbzF,EAAa0F,eACb1F,EAAa2F,YACb3F,EAAa4F,cACb5F,EAAa6F,cACb7F,EAAa8F,aACb9F,EAAa+F,cACb/F,EAAagG,UACbhG,EAAaiG,SACbjG,EAAaohC,cACbphC,EAAaiE,SACbjE,EAAamE,UACbnE,EAAakE,aACblE,EAAaqhC,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"} \ No newline at end of file diff --git a/backend/omr/dist/regulator.js b/backend/omr/dist/regulator.js index 34fb55983ec248e5aedc83c1ffedcb2321ac4238..658f187e94229f9b4bf40042f7acd00ce8140ae9 100644 --- a/backend/omr/dist/regulator.js +++ b/backend/omr/dist/regulator.js @@ -1,7 +1,7 @@ /** * name: backend * version: v1.0.0 - * build time: 5/5/2026, 9:56:21 PM + * build time: 5/5/2026, 10:46:38 PM * system user: camus * git user name: k.l.lambda * git user email: k.l.lambda@gmail.com @@ -16260,7 +16260,7 @@ const saveEditableMeasures = async (score, measureIndices, saveMeasure, { status }); }; -console.info(`%cstarry-omr%c v1.0.0 2026-05-05T13:56:46.565Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;'); +console.info(`%cstarry-omr%c v1.0.0 2026-05-05T14:47:04.294Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;'); exports.PyClients = PyClients; exports.abstractRegulationBeadStats = abstractRegulationBeadStats; diff --git a/backend/omr/dist/regulator.js.map b/backend/omr/dist/regulator.js.map index 5196796003af32afe9fb8e7ba9018e219e69d03b..840db7e2ba33b90b0c555e10daa736291f75bb22 100644 --- a/backend/omr/dist/regulator.js.map +++ b/backend/omr/dist/regulator.js.map @@ -1 +1 @@ -{"version":3,"file":"regulator.js","sources":["../../libs/browserComponents.ts","../../../node_modules/events/events.js","../../libs/async-queue.ts","../../libs/ZeroClient.ts","../../libs/PyProcessor.ts","../../../node_modules/util/support/isBuffer.js","../../../node_modules/util/node_modules/inherits/inherits_browser.js","../../../node_modules/util/node_modules/inherits/inherits.js","../../../node_modules/util/util.js","../../libs/predictors.ts","../../../src/starry/aux_/typedJSON.ts","../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/semanticPoint.ts","../../../src/starry/utils.ts","../../../src/starry/logger.ts","../../../src/starry/equationSolver.ts","../../../src/starry/eventTopology.ts","../../../src/starry/patch.ts","../../../src/starry/token.ts","../../../src/starry/term.ts","../../../src/starry/spartitoMeasure.ts","../../../src/starry/editableMeasure.ts","../../../src/starry/interfaces.ts","../../../src/starry/measureEvaluator.ts","../../../src/measureLayout/measureLayout.ts","../../../src/measureLayout/grammar.jison.js","../../../src/measureLayout/parser.ts","../../../src/staffLayout/staffLayout.ts","../../../src/staffLayout/grammar.jison.js","../../../src/staffLayout/parser.ts","../../../src/starry/semanticGraph.ts","../../../src/starry/scoreComponents.ts","../../../src/starry/semanticTopology.ts","../../../src/performer/types.ts","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/stream.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifile.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/streamEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifileEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiSequence.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MusicNotation.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiPlayer.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/config.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/node.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/navigator.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiUtils.js","../../../node_modules/@k-l-lambda/music-widgets/index.js","../../../src/performer/notation.ts","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/sha256.js","../../../src/starry/hashVector.ts","../../../src/starry/spartito.ts","../../../src/starry/staffContext.ts","../../../src/starry/score.ts","../../../src/starry/beadSolver.ts","../../../src/starry/measureRectification.ts","../../libs/store.ts","../../libs/regulationBead.ts","../../libs/regulation.ts","../../libs/util.ts","../src/regulator.ts"],"sourcesContent":["globalThis.btoa = (str) => Buffer.from(str, 'binary').toString('base64');\nglobalThis.atob = (str) => Buffer.from(str, 'base64').toString('binary');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { EventEmitter } from 'events';\n\ninterface DSPromiseOption {\n\ttimeout?: number;\n}\n\nexport function destructPromise(\n\toptions: DSPromiseOption = {}\n): [promise: Promise, resolve: (value: T | PromiseLike) => void, reject: (reason?: any) => void] {\n\tconst { timeout } = options;\n\tlet rs: (value: T | PromiseLike) => void;\n\tlet rj: (reason: any) => void;\n\n\treturn [\n\t\tnew Promise((resolve, reject) => {\n\t\t\trs = resolve;\n\t\t\trj = reject;\n\n\t\t\tif (timeout >= 0) setTimeout(rj, timeout, 'timeout');\n\t\t}),\n\t\trs,\n\t\trj,\n\t];\n}\n\ntype AsyncTask = [fn: (data: any) => Promise, payload: any, resolve: (data: any) => void, reject: (reason: any) => void];\n\nexport class AsyncQueue extends EventEmitter {\n\tprivate working = false;\n\n\ttasks: AsyncTask[];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.working = false;\n\t\tthis.tasks = [];\n\t\tprocess.nextTick(() => {\n\t\t\tthis.emit('idle');\n\t\t});\n\t}\n\n\tprivate async _digest(item: AsyncTask) {\n\t\tthis.working = true;\n\n\t\tconst [taskFn, payload, resolve, reject] = item;\n\t\tawait taskFn(payload).then(resolve, reject);\n\n\t\tif (this.tasks.length > 0) {\n\t\t\tawait this._digest(this.tasks.shift());\n\t\t} else {\n\t\t\tthis.working = false;\n\t\t\tthis.emit('idle');\n\t\t}\n\t}\n\n\t/**\n\t * 添加队列任务\n\t * @param task\n\t * @param options\n\t */\n\taddTask(task: [AsyncTask[0], AsyncTask[1]], { timeout = 600000 }: { timeout?: number } = {}): Promise {\n\t\tconst [promise, resolve, reject] = destructPromise({ timeout });\n\n\t\tif (this.working) {\n\t\t\tthis.tasks.push([...task, resolve, reject]);\n\t\t} else {\n\t\t\tthis._digest([...task, resolve, reject]);\n\t\t}\n\n\t\treturn promise;\n\t}\n}\n","import { pack, unpack } from 'msgpackr';\nimport { Request } from 'zeromq';\nimport { AsyncQueue } from './async-queue';\n\ninterface Response {\n\tcode: number;\n\tmsg: string;\n\tdata?: any;\n}\n\nexport interface Logger {\n\tinfo: (...data: any[]) => void;\n\terror: (...data: any[]) => void;\n}\n\ntype PyArgs = any[];\ntype PyKwargs = Record;\n\nexport default class ZeroClient {\n\tlogger: Logger;\n\tprivate socket: Request;\n\tprivate queue: AsyncQueue = new AsyncQueue();\n\n\tprivate url: string;\n\n\tconstructor(logger: Logger = console) {\n\t\tthis.logger = logger;\n\t}\n\n\tbind(url?: string) {\n\t\turl && (this.url = url);\n\t\tthis.socket = new Request({\n\t\t\tsendTimeout: 15e3,\n\t\t\treceiveTimeout: 300e3,\n\t\t});\n\n\t\tthis.socket.connect(this.url);\n\t}\n\n\tprivate __request(payload) {\n\t\tlet retryTimes = 0;\n\n\t\tconst req = async (data) => {\n\t\t\ttry {\n\t\t\t\tif (this.socket.closed) this.bind();\n\t\t\t\treturn await this.socket.send(pack(data)).then(() => this.socket.receive());\n\t\t\t} catch (err) {\n\t\t\t\tif (retryTimes < 2) {\n\t\t\t\t\tretryTimes++;\n\t\t\t\t\tconsole.log(`请求失败,${err.stack}`);\n\t\t\t\t\tconsole.error(`3s后重试第${retryTimes}次`);\n\t\t\t\t\tthis.socket.close();\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 3000));\n\t\t\t\t\treturn req(data);\n\t\t\t\t} else {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn req(payload);\n\t}\n\n\tasync request(method: string, args: PyArgs | PyKwargs = null, kwargs: PyKwargs = null): Promise {\n\t\tconst [args_, kwargs_] = Array.isArray(args) ? [args, kwargs] : [undefined, args];\n\t\tconst msg: any = { method };\n\t\tif (args_) msg.args = args_;\n\t\tif (kwargs_) msg.kwargs = kwargs_;\n\n\t\treturn this.queue.addTask([\n\t\t\tasync (opt) => {\n\t\t\t\tconst [result] = await this.__request(opt);\n\n\t\t\t\tconst obj = unpack(result) as Response;\n\n\t\t\t\tif (obj.code === 0) {\n\t\t\t\t\treturn obj.data;\n\t\t\t\t} else {\n\t\t\t\t\treturn Promise.reject(obj.msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmsg,\n\t\t]);\n\t}\n}\n","import { getPortPromise } from 'portfinder';\nimport { Options, PythonShell } from 'python-shell';\nimport { defaultsDeep } from 'lodash';\nimport ZeroClient, { Logger } from './ZeroClient';\n\nexport default class PyProcessor extends ZeroClient {\n\tprivate readonly scriptPath: string;\n\tprivate readonly options: Options;\n\tprivate pyShell: PythonShell;\n\n\tprivate retryCount: number = 0;\n\tprivate retryDelay: number = 3000;\n\n\tconstructor(scriptPath: string, options: Options = {}, logger: Logger = console) {\n\t\tsuper(logger);\n\t\tthis.scriptPath = scriptPath;\n\t\tthis.options = options;\n\t}\n\n\tasync bind(port?: string | number) {\n\t\tconst freePort =\n\t\t\tport ||\n\t\t\t(await getPortPromise({\n\t\t\t\tport: 12022,\n\t\t\t\tstopPort: 12122,\n\t\t\t}));\n\n\t\t// \"./streamPredictor.py\", \"--inspect\"\n\t\tconst options = defaultsDeep(\n\t\t\t{\n\t\t\t\targs: [...(this.options.args || []), '-p', `${freePort}`],\n\t\t\t},\n\t\t\tthis.options\n\t\t);\n\n\t\tthis.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`);\n\n\t\tthis.pyShell = new PythonShell(this.scriptPath, options);\n\n\t\tthis.pyShell.stdout.on('data', (data) => this.logger.info(data));\n\n\t\tthis.pyShell.on('pythonError', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`, err));\n\t\tthis.pyShell.on('stderr', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`, err));\n\t\tthis.pyShell.on('error', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} error:`, err));\n\t\tthis.pyShell.on('close', () => {\n\t\t\t// python子进程关闭事件\n\t\t\tif (this.retryCount < 5) {\n\t\t\t\tthis.retryCount++;\n\t\t\t\tthis.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.bind();\n\t\t\t\t}, this.retryDelay);\n\t\t\t}\n\t\t});\n\n\t\tsuper.bind(`tcp://127.0.0.1:${freePort}`);\n\t}\n}\n","module.exports = function isBuffer(arg) {\n return arg instanceof Buffer;\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","try {\n var util = require('util');\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n module.exports = require('./inherits_browser.js');\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","import ZeroClient, { Logger } from './ZeroClient';\nimport * as starry from '../../src/starry';\nimport PyProcessor from './PyProcessor';\nimport { destructPromise } from './async-queue';\nimport { getPort } from 'portfinder';\nimport util from 'util';\nimport { Options } from 'python-shell';\n\nconst getPortPromise = util.promisify(getPort);\n\nexport interface LayoutResult {\n\tdetection: starry.PageLayout;\n\ttheta: number;\n\tinterval: number;\n\tsourceSize?: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n}\n\nexport interface PredictorInterface {\n\tlayout: (streams: Buffer[]) => LayoutResult[];\n\tlayout$reinforce: (streams: Buffer[], baseLayouts: LayoutResult[]) => LayoutResult[];\n\tgauge: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tmask: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tsemantic: (streams: Buffer[]) => any[];\n\ttextLoc: (streams: Buffer[]) => any[];\n\ttextOcr: (params: { buffers: Buffer[]; location: any[] }) => any[];\n\tbrackets: (params: { buffers: Buffer[] }) => any[];\n\ttopo: (params: { clusters: starry.EventCluster[] }) => any[];\n\tgaugeRenderer: (params: [Buffer, Buffer, number]) => { buffer: Buffer; size: { width: number; height: number } };\n\tjianpu: (params: { buffers: Buffer[] }) => any[];\n\t// [source: Buffer, gauge: Buffer, baseY: number]\n}\n\ntype PredictorType = keyof PredictorInterface;\n\nexport type PyClientsConstructOptions = Partial>;\n\nexport class PyClients {\n\tclients = new Map>();\n\n\tconstructor(public readonly options: PyClientsConstructOptions, public readonly logger: Logger = console) {}\n\n\tasync getClient(type: PredictorType) {\n\t\tif (this.clients.has(type)) {\n\t\t\treturn this.clients.get(type);\n\t\t}\n\n\t\tconst [promise, resolve, reject] = destructPromise();\n\n\t\tconst opt = this.options[type];\n\n\t\tif (!opt) {\n\t\t\tthrow new Error(`no config for client \\`${type}\\` found`);\n\t\t}\n\n\t\ttry {\n\t\t\tif (typeof opt === 'string') {\n\t\t\t\tconst client = new ZeroClient();\n\t\t\t\tclient.bind(opt);\n\t\t\t\tresolve(client);\n\t\t\t} else {\n\t\t\t\tconst { scriptPath, ...option } = opt;\n\t\t\t\tconst client = new PyProcessor(scriptPath, option, this.logger);\n\t\t\t\tawait client.bind(`${await getPortPromise()}`);\n\t\t\t\tresolve(client);\n\t\t\t}\n\n\t\t\tthis.logger.info(`PyClients: ${type} started`);\n\t\t} catch (err) {\n\t\t\tthis.logger.error(`PyClients: ${type} start fail: ${JSON.stringify(err)}`);\n\t\t\treject(err);\n\t\t}\n\n\t\tthis.clients.set(type, promise);\n\n\t\treturn promise;\n\t}\n\n\tasync checkHost(type: PredictorType): Promise {\n\t\tconst client = await this.getClient(type);\n\n\t\treturn client.request('checkHost');\n\t}\n\n\tasync warmup() {\n\t\tconst opts = Object.keys(this.options) as PredictorType[];\n\t\tawait Promise.all(opts.map((type) => this.getClient(type)));\n\t}\n\n\t/**\n\t * 模型预测\n\t * @param type layout | mask | gauge | semantic\n\t * @param args\n\t */\n\tasync predictScoreImages(type: T, ...args: Parameters): Promise> {\n\t\tconst clientType = type.split('$')[0] as PredictorType;\n\t\tconst client = await this.getClient(clientType);\n\t\tlet res = null;\n\n\t\tthis.logger.info(`[predictor]: ${type} py start..`);\n\t\tconst start = Date.now();\n\n\t\tswitch (type) {\n\t\t\tcase 'layout':\n\t\t\t\tres = await client.request('predictDetection', args);\n\t\t\t\tbreak;\n\t\t\tcase 'layout$reinforce':\n\t\t\t\tres = await client.request('predictReinforce', args);\n\t\t\t\tbreak;\n\t\t\tcase 'gauge':\n\t\t\tcase 'mask':\n\t\t\t\tres = await client.request('predict', args, { by_buffer: true });\n\t\t\t\tbreak;\n\t\t\tcase 'semantic':\n\t\t\tcase 'textLoc':\n\t\t\t\tres = await client.request('predict', args);\n\t\t\t\tbreak;\n\t\t\tcase 'textOcr':\n\t\t\tcase 'brackets':\n\t\t\tcase 'topo':\n\t\t\tcase 'gaugeRenderer':\n\t\t\tcase 'jianpu':\n\t\t\t\tres = await client.request('predict', ...args);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.logger.error(`[predictor]: no predictor ${type}`);\n\t\t}\n\n\t\tthis.logger.info(`[predictor]: ${type} py duration: ${Date.now() - start}ms`);\n\n\t\treturn res;\n\t}\n}\n","import pick from 'lodash/pick';\n\nconst recoverJSON = (json: string | object, classDict): T => {\n\tif (typeof json === 'object') json = JSON.stringify(json);\n\n\treturn JSON.parse(json, (_, value) => {\n\t\tif (value && typeof value === 'object' && value.__prototype) {\n\t\t\tconst Class = classDict[value.__prototype];\n\t\t\tif (Class) {\n\t\t\t\tconst { __prototype, ...fields } = value;\n\t\t\t\treturn new Class(fields);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t});\n};\n\nconst deepCopy = (o: any, dict: Map = null): any => {\n\tdict = dict || new Map();\n\tif (dict.get(o)) return dict.get(o);\n\n\tif (Array.isArray(o)) {\n\t\tconst result = [];\n\t\tdict.set(o, result);\n\n\t\to.forEach((e) => result.push(deepCopy(e, dict)));\n\n\t\treturn result;\n\t} else if (o && typeof o === 'object') {\n\t\tconst result = {};\n\t\tdict.set(o, result);\n\n\t\tObject.entries(o).forEach(([key, value]) => (result[key] = deepCopy(value, dict)));\n\t\tObject.setPrototypeOf(result, o.__proto__);\n\n\t\treturn result;\n\t}\n\n\treturn o;\n};\n\nclass SimpleClass {\n\tassign(data?: object) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\ttoJSON() {\n\t\tconst cls = this.constructor as any;\n\n\t\tconst serializedKeys = cls.serializedKeys || (cls.blackKeys && Object.keys(this).filter((key) => !cls.blackKeys.includes(key)));\n\t\tconst fields = serializedKeys ? pick(this, serializedKeys) : this;\n\n\t\treturn {\n\t\t\t__prototype: cls.className,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tdeepCopy(): this {\n\t\treturn deepCopy(this);\n\t}\n}\n\nexport { recoverJSON, SimpleClass };\n","var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import { EventFeature, BackgroundImage, EventPredisposition } from './interfaces';\nimport { StemBeam } from './term';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum EventElementType {\n\tPAD,\n\tBOS,\n\tEOS,\n\n\tCHORD,\n\tREST,\n}\n\ninterface EventElement {\n\thref?: string;\n\tdisposed?: boolean;\n\tindex?: number;\n\tvoice?: number;\n\n\ttype: EventElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\tfeature: EventFeature;\n\tpivotX?: number;\n\theadY?: number;\n\n\t// targets\n\ttick?: number;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: StemBeam;\n\tstemDirection?: string;\n\tgrace?: boolean;\n\ttremoloCatcher?: boolean;\n\ttimeWarped?: boolean;\n\tfullMeasure?: boolean; // full measure rest\n\tfake?: boolean;\n\n\torder?: number;\n\n\tpredisposition?: EventPredisposition;\n}\n\ntype Matrix = number[][];\n\ninterface Annotation {\n\tloss: number;\n\tgrant: boolean;\n\tpatched: boolean; // from manually solved measure\n}\n\nclass EventCluster extends SimpleClass {\n\tstatic className = 'EventCluster';\n\tstatic blackKeys = ['id'];\n\n\tid?: string; // for db access\n\tindex?: number;\n\tduration?: number;\n\tstaffY0?: number; // the first staff top + staffY\n\n\tsignatureDuration: number;\n\telements: EventElement[];\n\tmatrixH?: Matrix; // matrix N x N, [next][prev]\n\n\tbackgroundImages?: BackgroundImage[];\n\n\tannotation?: Annotation;\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget regular(): boolean {\n\t\treturn (\n\t\t\tthis.elements.some((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !elem.fake) &&\n\t\t\tthis.elements.every((elem) => [elem.x, elem.y1, elem.y2, elem.tick].every(Number.isFinite)) &&\n\t\t\tthis.elements\n\t\t\t\t.slice(1)\n\t\t\t\t.every(\n\t\t\t\t\t(elem, ei) =>\n\t\t\t\t\t\telem.fake ||\n\t\t\t\t\t\tthis.elements[ei].fake ||\n\t\t\t\t\t\telem.grace ||\n\t\t\t\t\t\tthis.elements[ei].grace ||\n\t\t\t\t\t\telem.fullMeasure ||\n\t\t\t\t\t\tthis.elements[ei].fullMeasure ||\n\t\t\t\t\t\telem.tick <= this.elements[ei].tick ||\n\t\t\t\t\t\telem.x > this.elements[ei].x\n\t\t\t\t)\n\t\t);\n\t}\n\n\tget grant(): boolean {\n\t\treturn this.annotation && this.annotation.grant;\n\t}\n\n\tget feature(): Partial {\n\t\treturn {\n\t\t\tindex: this.index,\n\t\t\telements: this.elements,\n\t\t};\n\t}\n\n\tget estimatedDuration(): number {\n\t\tconst endElem = this.elements.find((elem) => elem.type === EventElementType.EOS);\n\n\t\tconst tick = endElem?.predisposition ? endElem.predisposition?.tick : endElem?.tick;\n\n\t\treturn Number.isFinite(tick) ? tick : this.duration;\n\t}\n\n\tassignPrediction(prediction: any): void {\n\t\tconsole.assert(prediction.index === this.index, 'index mismatch:', prediction.index, this.index);\n\n\t\tthis.matrixH = prediction.matrixH;\n\t\tprediction.elements.forEach((pe) => {\n\t\t\tconst { index, ...predisposition } = pe;\n\t\t\tconst elem = this.elements.find((elem) => elem.index === index);\n\t\t\tconsole.assert(elem, 'element not found:', index);\n\n\t\t\tif (elem) elem.predisposition = predisposition;\n\t\t});\n\t}\n}\n\nclass EventClusterSet extends SimpleClass {\n\tstatic className = 'EventClusterSet';\n\n\tname?: string;\n\n\tclusters: EventCluster[];\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\ttrimIrregular(): number {\n\t\tlet ir = 0;\n\n\t\tthis.clusters = this.clusters.filter((cluster) => {\n\t\t\tconst regular = cluster.regular;\n\t\t\tif (!regular) {\n\t\t\t\tconsole.debug('irregular cluster:', cluster);\n\t\t\t\t++ir;\n\t\t\t}\n\n\t\t\treturn regular;\n\t\t});\n\n\t\tif (ir) console.debug('Irregular clusters trimmed:', `${ir}/${this.clusters.length + ir}`);\n\t\telse console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`);\n\n\t\treturn ir;\n\t}\n}\n\nexport { EventElementType, EventElement, EventCluster, EventClusterSet };\n","import { SimpleClass } from './aux_/typedJSON';\nimport { StaffBasic } from './interfaces';\nimport { ContextedTerm, EventTerm, MarkTerm } from './term';\n\nclass PatchMeasure extends SimpleClass {\n\tstatic className = 'PatchMeasure';\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tbasic: StaffBasic;\n\n\t//points: SemanticPoint[];\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tvoices: number[][]; // [voice, id]\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tObject.assign(this, data);\n\t}\n\n\tget staffN(): number {\n\t\treturn Math.floor(Math.log2(this.staffMask)) + 1;\n\t}\n\n\tget basics(): StaffBasic[] {\n\t\treturn Array(this.staffN).fill(this.basic);\n\t}\n\n\tget duration(): number {\n\t\treturn Math.max(\n\t\t\t0,\n\t\t\t...(this.voices || []).map((ids) => {\n\t\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\n\t\t\t\treturn events.reduce((duration, event) => duration + event.duration, 0);\n\t\t\t})\n\t\t);\n\t}\n}\n\nexport { PatchMeasure };\n","import { TextType } from './interfaces';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\n\nenum TokenType {\n\t// clefs\n\tClefG = 'clefs-G', // clefs.G_change\n\tClefF = 'clefs-F', // clefs.F_change\n\tClefC = 'clefs-C', // clefs.C_change\n\n\t// time signature\n\tTimesigC44 = 'timesig-C44',\n\tTimesigC22 = 'timesig-C22',\n\tTimesigZero = 'zero|timesig0',\n\tTimesigOne = 'one|timesig1',\n\tTimesigTwo = 'two|timesig2',\n\tTimesigThree = 'three|timesig3',\n\tTimesigFour = 'four|timesig4',\n\tTimesigFive = 'five|timesig5',\n\tTimesigSix = 'six|timesig6',\n\tTimesigSeven = 'seven|timesig7',\n\tTimesigEight = 'eight|timesig8',\n\tTimesigNine = 'nine|timesig9',\n\n\t// octave shifts\n\tOctaveShift8va = 'octave-a',\n\tOctaveShift8vb = 'octave-b',\n\tOctaveShift0 = 'octave-0',\n\n\t// numbers\n\tZero = 'zero|n0',\n\tOne = 'one|n1',\n\tTwo = 'two|n2',\n\tThree = 'three|n3',\n\tFour = 'four|n4',\n\tFive = 'five|n5',\n\tSix = 'six|n6',\n\tSeven = 'seven|n7',\n\tEight = 'eight|n8',\n\tNine = 'nine|n9',\n\n\t// accidentals\n\tAccNatural = 'accidentals-natural',\n\tAccSharp = 'accidentals-sharp',\n\tAccDoublesharp = 'accidentals-doublesharp',\n\tAccFlat = 'accidentals-flat',\n\tAccFlatflat = 'accidentals-flatflat',\n\tKeyNatural = 'accidentals-natural|key-natural',\n\tKeySharp = 'accidentals-sharp|key-sharp',\n\tKeyFlat = 'accidentals-flat|key-flat',\n\n\t// noteheads\n\tNoteheadS0 = 'noteheads-s0',\n\tNoteheadS1 = 'noteheads-s1',\n\tNoteheadS2 = 'noteheads-s2',\n\tNoteheadS1stemU = 'noteheads-s1|noteheads-s1-u',\n\tNoteheadS1stemD = 'noteheads-s1|noteheads-s1-d',\n\tNoteheadS2stemU = 'noteheads-s2|noteheads-s2-u',\n\tNoteheadS2stemD = 'noteheads-s2|noteheads-s2-d',\n\n\t// rests\n\tRest0 = 'rests-0o',\n\tRest1 = 'rests-1o',\n\tRest2 = 'rests-2',\n\tRest3 = 'rests-3',\n\tRest4 = 'rests-4',\n\tRest5 = 'rests-5',\n\tRest6 = 'rests-6',\n\tRest0W = 'rests-0',\n\tRestM1 = 'rests-M1',\n\n\t// flags\n\tFlag3 = 'flags-u3', // flags.d3\n\tFlag4 = 'flags-u4', // flags.d4\n\tFlag5 = 'flags-u5', // flags.d5\n\tFlag6 = 'flags-u6', // flags.d6\n\tFlag7 = 'flags-u7', // flags.d7\n\tFlag8 = 'flags-u8', // flags.d8\n\n\t// beams\n\tBeamLeft = '|beam-left',\n\tBeamRight = '|beam-right',\n\tBeamContinue = '|beam-continue',\n\n\t// tremolos\n\tTremoloLeft = '|tremolo-left',\n\tTremoloRight = '|tremolo-right',\n\tTremoloMiddle = '|tremolo-middle',\n\n\t// slur & tie\n\tSlurBegin = '|slur-begin',\n\tSlurEnd = '|slur-end',\n\tTieBegin = '|tie-begin',\n\tTieEnd = '|tie-end',\n\n\t// volta\n\tVoltaLeft = '|volta-left',\n\tVoltaRight = '|volta-right',\n\n\tVoltaAlternativeBegin = '|volta-alter-begin',\n\t//VoltaAlternativeEnd = \"|volta-alter-end\",\n\n\t// vertical bars\n\t//BarMeasure = \"|bar-measure\",\n\tBarTerminal = '|bar-terminal',\n\tBarSegment = '|bar-segment',\n\n\t// dots (duration)\n\tDot = '|dot',\n\tDotDot = '|dotdot',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\t//\n\tWedgeCrescendo = '|wedge-crescendo',\n\tWedgeDiminuendo = '|wedge-diminuendo',\n\tWedgeClose = '|wedge-close',\n\n\tCrescendoBegin = '|wedge-crescendo',\n\tDecrescendoBegin = '|wedge-diminuendo',\n\tCrescendoEnd = '|wedge-close',\n\tDecrescendoEnd = '|wedge-close',\n\n\t// scripts\n\tScriptFermata = 'scripts-ufermata', // scripts.dfermata\n\tScriptShortFermata = 'scripts-ushortfermata', // scripts.dshortfermata\n\tScriptSforzato = 'scripts-sforzato',\n\tScriptStaccato = 'scripts-staccato',\n\tScriptStaccatissimo = 'scripts-ustaccatissimo', // scripts.dstaccatissimo\n\tScriptTurn = 'scripts-turn',\n\tScriptTrill = 'scripts-trill',\n\tScriptSegno = 'scripts-segno',\n\tScriptCoda = 'scripts-coda',\n\tScriptArpeggio = 'scripts-arpeggio',\n\tScriptPrall = 'scripts-prall',\n\tScriptMordent = 'scripts-mordent',\n\tScriptMarcato = 'scripts-umarcato', // scripts.dmarcato\n\tScriptTenuto = 'scripts-tenuto',\n\tScriptPortato = 'scripts-uportato', // scripts.dportato\n\n\t// pedal\n\tPedalStar = 'pedal-star',\n\tPedalPed = 'pedal-Ped',\n\n\tText = '|text',\n\tGraceNotehead = '|grace-notehead',\n}\n\n// alias\nconst tt = TokenType;\n\nexport const TokenTypes = Object.values(TokenType);\nexport const TokenClefs = TokenTypes.filter((t) => /clefs-/.test(t));\nexport const TokenTimesigs = TokenTypes.filter((t) => /timesig/.test(t));\nexport const TokenTimesigsC = TokenTypes.filter((t) => /timesig-/.test(t));\nexport const TokenTimesigsN = TokenTypes.filter((t) => /timesig\\d/.test(t));\nexport const TokenOctshifts = TokenTypes.filter((t) => /octave-/.test(t));\nexport const TokenNumbers = TokenTypes.filter((t) => /n\\d/.test(t));\nexport const TokenAccidentals = TokenTypes.filter((t) => /accidentals-/.test(t));\nexport const TokenNoteheads = TokenTypes.filter((t) => /noteheads-/.test(t));\nexport const TokenBareNoteheads = [tt.NoteheadS0, tt.NoteheadS1, tt.NoteheadS2];\nexport const TokenDirectionalNoteheads = TokenTypes.filter((t) => /noteheads-.+-[ud]/.test(t));\nexport const TokenRests = TokenTypes.filter((t) => /rests-/.test(t));\nexport const TokenFlags = TokenTypes.filter((t) => /flags-/.test(t));\nexport const TokenVolta = TokenTypes.filter((t) => /volta-/.test(t));\nexport const TokenDynamics = TokenTypes.filter((t) => /^[a-z]$/.test(t));\nexport const TokenScripts = TokenTypes.filter((t) => /scripts-/.test(t));\nexport const TokenPedals = TokenTypes.filter((t) => /pedal-/.test(t));\nexport const TokenDots = [tt.Dot, tt.DotDot];\nexport const TokenArcs = [tt.SlurBegin, tt.SlurEnd, tt.TieBegin, tt.TieEnd];\nexport const TokenBeams = TokenTypes.filter((t) => /beam-/.test(t));\nexport const TokenWedges = TokenTypes.filter((t) => /wedge-/.test(t));\n\nexport const TokenAccessories = [\n\t...TokenNumbers,\n\t...TokenDynamics,\n\t...TokenWedges,\n\t...TokenPedals,\n\t...TokenArcs,\n\n\ttt.ScriptFermata,\n\ttt.ScriptShortFermata,\n\ttt.ScriptSforzato,\n\ttt.ScriptStaccato,\n\ttt.ScriptStaccatissimo,\n\ttt.ScriptTurn,\n\ttt.ScriptTrill,\n\ttt.ScriptPrall,\n\ttt.ScriptMordent,\n\ttt.ScriptMarcato,\n\ttt.ScriptTenuto,\n\ttt.ScriptPortato,\n];\n\nexport const TokenDirectionless = [...TokenPedals];\n\nexport const TokenGlyphs = [\n\t...TokenClefs,\n\t...TokenTimesigs,\n\t...TokenNumbers,\n\t...TokenAccidentals,\n\ttt.NoteheadS0,\n\ttt.NoteheadS1,\n\ttt.NoteheadS2,\n\t...TokenRests,\n\t...TokenDynamics,\n\t...TokenScripts,\n\t...TokenPedals,\n\t...TokenDots,\n];\n\nconst TOKEN_Y_ROUND = {} as Record;\nTokenClefs.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenTimesigsN.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenAccidentals.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenNoteheads.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenRests.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenDots.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\n\nconst TOKEN_Y_FIXED = {} as Record;\nTokenTimesigsC.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\nTokenVolta.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\n\nclass Token {\n\tstatic className = 'Token';\n\n\tid: string;\n\ttype: TokenType;\n\tx: number;\n\ty: number;\n\tpivotX?: number;\n\n\tconfidence: number;\n\n\ttip?: { x: number; y: number };\n\n\tvoice?: number; // integer, every bit stand for a voice\n\ttimeWarped?: boolean;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tget typeId(): string {\n\t\treturn this.type.split('|').reverse()[0];\n\t}\n\n\tget isPredicted(): boolean {\n\t\treturn Number.isFinite(this.confidence);\n\t}\n\n\tget isNotehead(): boolean {\n\t\treturn TokenDirectionalNoteheads.includes(this.type) || this.type === TokenType.NoteheadS0;\n\t}\n\n\tget isContexted(): boolean {\n\t\treturn (\n\t\t\tTokenClefs.includes(this.type) || TokenTimesigs.includes(this.type) || TokenOctshifts.includes(this.type) || TokenAccidentals.includes(this.type)\n\t\t);\n\t}\n\n\tget isAccessory(): boolean {\n\t\treturn TokenNumbers.includes(this.type) || TokenDynamics.includes(this.type) || TokenScripts.includes(this.type) || TokenPedals.includes(this.type);\n\t}\n\n\tget division(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Flag3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Flag4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Flag5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Flag6:\n\t\t\t\treturn 6;\n\n\t\t\tcase tt.Flag7:\n\t\t\t\treturn 7;\n\n\t\t\tcase tt.Flag8:\n\t\t\t\treturn 8;\n\n\t\t\tcase tt.RestM1:\n\t\t\t\treturn -1;\n\n\t\t\tcase tt.Rest0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.Rest1:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.Rest2:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Rest3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Rest4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Rest5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Rest6:\n\t\t\t\treturn 6;\n\n\t\t\t// TODO:\n\t\t\t//case tt.Rest0W:\n\t\t\t//\treturn 0;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget dots(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.Dot:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.DotDot:\n\t\t\t\treturn 2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget direction(): 'u' | 'd' | null {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn 'u';\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 'd';\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget width(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS2;\n\t\t}\n\t}\n\n\tget left(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x - this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x - this.width;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget right(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x + this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x + this.width;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget voiceIndices(): number[] {\n\t\tif (!this.voice || this.voice < 0) return [];\n\n\t\treturn Array(Math.floor(Math.log2(this.voice)) + 1)\n\t\t\t.fill(null)\n\t\t\t.reduce((indices, _, i) => (this.voice & (1 << i) ? [i + 1, ...indices] : indices), []);\n\t}\n}\n\nclass TextToken extends Token {\n\ttextType: TextType;\n\ttext: string;\n\ttextFeature?: Record;\n\twidth_: number;\n\tfontSize: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t\tObject.assign(this, data);\n\t}\n\n\tget width(): number {\n\t\treturn this.width_;\n\t}\n\n\tset width(value: number) {\n\t\tthis.width_ = value;\n\t}\n}\n\nexport { TokenType, Token, TextToken, TOKEN_Y_ROUND, TOKEN_Y_FIXED };\n","import { Fraction, Pitch, EventFeature, EventPredisposition } from './interfaces';\nimport { gcd, reducedFraction } from './utils';\nimport { TokenType } from './token';\nimport * as Token from './token';\nimport { SimpleClass } from './aux_/typedJSON';\n\nconst WHOLE_DURATION = 128 * 3 * 5;\nconst WHOLE_EXP2 = WHOLE_DURATION / 15;\n\nenum AccessoryDirection {\n\tUp = '^',\n\tDown = '_',\n\tMiddle = '-',\n}\n\nenum GraceType {\n\tGrace = 'grace',\n\tAfterGrace = 'afterGrace',\n\tAcciaccatura = 'acciaccatura',\n\tAppoggiatura = 'appoggiatura',\n\tSlashedGrace = 'slashedGrace',\n}\n\nenum StemBeam {\n\tOpen = 'Open',\n\tClose = 'Close',\n\tContinue = 'Continue',\n}\n\nenum TremoloLink {\n\tPitcher = 'Pitcher',\n\tCatcher = 'Catcher',\n\tPierced = 'Pierced',\n}\n\nenum GlissandoStyle {\n\tNormal = 'normal',\n\tDashedLine = 'dashed-line',\n\tDottedLine = 'dotted-line',\n\tZigzag = 'zigzag',\n\tTrill = 'trill',\n}\n\nenum ArpeggioStyle {\n\tNormal = 'Normal',\n\tBracket = 'Bracket',\n\tParenthesis = 'Parenthesis',\n\tParenthesisDashed = 'ParenthesisDashed',\n\tArrowDown = 'ArrowDown',\n}\n\ninterface Accessory {\n\tdirection?: AccessoryDirection;\n\tparenthesized?: boolean;\n\ttype: TokenType;\n\tid?: string;\n\tx: number;\n}\n\ninterface TermPitch extends Pitch {\n\ttying?: boolean;\n\ttied?: boolean;\n\tparenthesized?: boolean;\n\toctaveShift?: number;\n}\n\nclass Term extends SimpleClass {\n\tx: number;\n\tstaff?: number;\n}\n\ntype RestType = 'r' | 'R' | 's' | null;\n\ninterface DurationalTerm {\n\tdivision: number;\n\tdots: number;\n\tmultiplier?: Fraction;\n}\n\nconst SCALE_NAMES = 'CDEFGAB';\n\nclass EventTerm extends Term implements DurationalTerm {\n\tstatic className = 'EventTerm';\n\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\n\tsystem: number;\n\troundX: number; // for tick map, scheduler\n\tintX: number; // for measure hash\n\tintY: number;\n\tys: number[]; // order by ascending pitch, low (greater Y) to high (less Y)\n\tpitches?: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\taccessories: Accessory[];\n\tmultiplier: Fraction;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\trepetitionChord: boolean;\n\tgrace?: GraceType;\n\tbeam?: StemBeam;\n\ttimeWarp?: Fraction;\n\tparenthesized?: boolean;\n\ttremolo?: number; // like division, 'number of beams' + 2\n\ttremoloLink?: TremoloLink;\n\tglissando?: boolean;\n\tglissandoStyle?: GlissandoStyle;\n\tarpeggioStyle?: ArpeggioStyle;\n\ttip?: { x: number; y: number };\n\n\ttick: number;\n\n\t// for topology\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature: EventFeature;\n\tpredisposition: EventPredisposition;\n\n\tgraceIds?: number[];\n\tcatcherId?: number; // tremolo catcher event ID for tremolo pitcher event\n\n\tnoteIds?: string[]; // order by upwards\n\n\tstatic space({ tick, duration }: { tick: number; duration: number }): EventTerm {\n\t\tconst term = new EventTerm({\n\t\t\trest: 's',\n\t\t\ttick,\n\t\t\taccessories: [],\n\t\t});\n\t\tterm.duration = Math.round(duration);\n\n\t\treturn term;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tObject.assign(this, data);\n\n\t\tif (Number.isFinite(data.left) && Number.isFinite(data.right)) this.x = (this.left + this.right) / 2;\n\t\tif (!Number.isFinite(this.pivotX)) this.pivotX = this.x;\n\t\t//console.assert(Number.isFinite(this.x), \"EventTerm: invalid x,\", data);\n\t}\n\n\tget alignedTick(): number {\n\t\treturn this.grace ? this.tick + this.duration : this.tick;\n\t}\n\n\tget mainDuration(): number {\n\t\treturn WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t}\n\n\tget duration(): number {\n\t\tlet value = this.mainDuration;\n\t\tif (this.multiplier) value *= this.multiplier.numerator / this.multiplier.denominator;\n\t\tif (this.timeWarp) value *= this.timeWarp.numerator / this.timeWarp.denominator;\n\n\t\treturn this.grace ? value / 8 : value;\n\t}\n\n\tset duration(value: number) {\n\t\tconsole.assert(Number.isFinite(value), 'invalid duration value:', value);\n\n\t\tconst divider = gcd(value, WHOLE_EXP2);\n\t\tconst division = Math.log2(WHOLE_EXP2 / divider);\n\t\tconst multiplier = reducedFraction(value * 2 ** division, WHOLE_DURATION);\n\n\t\tthis.division = division;\n\t\tthis.dots = 0;\n\n\t\tif (multiplier.numerator !== multiplier.denominator) this.multiplier = multiplier;\n\t\telse this.multiplier = undefined;\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget times(): string {\n\t\tif (!this.timeWarp) return null;\n\n\t\treturn `${this.timeWarp.numerator}/${this.timeWarp.denominator}`;\n\t}\n\n\tget fullMeasureRest(): boolean {\n\t\treturn this.rest === 'R';\n\t}\n\n\tget tipX(): number {\n\t\treturn this.tip ? this.tip.x : this.x;\n\t}\n\n\tget tipY(): number {\n\t\treturn this.tip ? this.tip.y : this.ys ? this.ys[0] : 0;\n\t}\n\n\tget tremoloCatcher(): boolean {\n\t\treturn this.tremoloLink === TremoloLink.Catcher;\n\t}\n\n\tget scaleChord(): string {\n\t\treturn this.pitches.map((pitch) => SCALE_NAMES[(pitch.note + 700) % 7]).join('');\n\t}\n\n\tget zeroHolder(): boolean {\n\t\treturn !!this.grace || this.tremoloCatcher;\n\t}\n}\n\nenum ContextType {\n\tClef,\n\tKeyAcc,\n\tAcc,\n\tOctaveShift,\n\tTimeSignatureC,\n\tTimeSignatureN,\n}\n\nclass ContextedTerm extends Term {\n\tstatic className = 'ContextedTerm';\n\n\ty: number;\n\ttokenType: TokenType;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget type(): ContextType {\n\t\tif (Token.TokenClefs.includes(this.tokenType)) return ContextType.Clef;\n\t\tif (/\\|key-/.test(this.tokenType)) return ContextType.KeyAcc;\n\t\tif (/accidentals-/.test(this.tokenType)) return ContextType.Acc;\n\t\tif (Token.TokenOctshifts.includes(this.tokenType)) return ContextType.OctaveShift;\n\t\tif (Token.TokenTimesigsC.includes(this.tokenType)) return ContextType.TimeSignatureC;\n\t\tif (Token.TokenTimesigsN.includes(this.tokenType)) return ContextType.TimeSignatureN;\n\n\t\treturn null;\n\t}\n\n\tget staffLevel(): boolean {\n\t\treturn [ContextType.OctaveShift, ContextType.Clef, ContextType.KeyAcc].includes(this.type);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.1;\n\t}\n\n\tget clef(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.ClefG:\n\t\t\t\treturn -this.y - 2;\n\n\t\t\tcase TokenType.ClefF:\n\t\t\t\treturn -this.y + 2;\n\n\t\t\tcase TokenType.ClefC:\n\t\t\t\treturn -this.y;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget alter() {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.AccNatural:\n\t\t\tcase TokenType.KeyNatural:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.AccSharp:\n\t\t\tcase TokenType.KeySharp:\n\t\t\t\treturn 1;\n\n\t\t\tcase TokenType.AccFlat:\n\t\t\tcase TokenType.KeyFlat:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.AccDoublesharp:\n\t\t\t\treturn 2;\n\n\t\t\tcase TokenType.AccFlatflat:\n\t\t\t\treturn -2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget octaveShift(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.OctaveShift8va:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.OctaveShift0:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.OctaveShift8vb:\n\t\t\t\treturn 1;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget number(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.TimesigZero:\n\t\t\t\treturn 0;\n\t\t\tcase TokenType.TimesigOne:\n\t\t\t\treturn 1;\n\t\t\tcase TokenType.TimesigTwo:\n\t\t\t\treturn 2;\n\t\t\tcase TokenType.TimesigThree:\n\t\t\t\treturn 3;\n\t\t\tcase TokenType.TimesigFour:\n\t\t\t\treturn 4;\n\t\t\tcase TokenType.TimesigFive:\n\t\t\t\treturn 5;\n\t\t\tcase TokenType.TimesigSix:\n\t\t\t\treturn 6;\n\t\t\tcase TokenType.TimesigSeven:\n\t\t\t\treturn 7;\n\t\t\tcase TokenType.TimesigEight:\n\t\t\t\treturn 8;\n\t\t\tcase TokenType.TimesigNine:\n\t\t\t\treturn 9;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\n//class BreakTerm extends Term {\n//};\n\nclass MarkTerm extends Term {\n\tstatic className = 'MarkTerm';\n\n\ttick: number;\n\n\tget prior(): number {\n\t\treturn this.tick + 0.01;\n\t}\n}\n\nconst MUSIC_NOTES = Array(7)\n\t.fill(0)\n\t.map((_, i) => String.fromCodePoint(0x1d15d + i));\n\nclass TempoTerm extends MarkTerm {\n\tstatic className = 'TempoTerm';\n\n\tduration: string;\n\tbeats: string;\n\n\tstatic fromNumeralText(text: string): TempoTerm {\n\t\tif (/.+=.*\\d+/.test(text)) {\n\t\t\tconst [symbol, value] = text.split('=');\n\t\t\tlet division = MUSIC_NOTES.findIndex((n) => symbol.includes(n));\n\t\t\tdivision = division >= 0 ? division : 2;\n\t\t\tlet duration = (2 ** division).toString();\n\t\t\tif (symbol.includes('.')) duration += '.';\n\n\t\t\treturn new TempoTerm({ tick: 0, duration, beats: value });\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.01;\n\t}\n\n\t// a whole note equal to 1920\n\tget durationMagnitude(): number {\n\t\tconst [_, den, dot] = this.duration.match(/^(\\d+)(\\.)?$/);\n\t\tconst magnitude = (WHOLE_DURATION / Number(den)) * (dot ? 1.5 : 1);\n\n\t\treturn magnitude;\n\t}\n\n\t// beats per minute, suppose 1 beat = 480 ticks\n\tget bpm(): number {\n\t\tconst [number] = this.beats.match(/\\d+/) || [90];\n\t\tconst beats = Number(number);\n\n\t\treturn (beats * this.durationMagnitude * 4) / WHOLE_DURATION;\n\t}\n\n\tisValid(range = [10, 400]): boolean {\n\t\tconst bpm = this.bpm;\n\n\t\treturn Number.isFinite(this.bpm) && bpm >= range[0] && bpm < range[1];\n\t}\n}\n\nclass GlyphTerm extends MarkTerm {\n\tstatic className = 'GlyphTerm';\n\n\tglyph: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass TextTerm extends MarkTerm {\n\tstatic className = 'TextTerm';\n\n\tdirection?: AccessoryDirection;\n\ttext: string;\n\tbold: boolean;\n\titalic: boolean;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass LyricTerm extends MarkTerm {\n\tstatic className = 'LyricTerm';\n\n\ttext: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass CommandTerm extends MarkTerm {\n\tstatic className = 'CommandTerm';\n\n\tcommand: string;\n\tparameters: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass ChordmodeTerm extends Term implements DurationalTerm {\n\tstatic className = 'ChordmodeTerm';\n\n\tpitch: Pitch;\n\tbasePitch?: Pitch;\n\tmodifier?: string;\n\n\tdivision: number;\n\tdots: number;\n\tmultiplier: Fraction;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget duration(): number {\n\t\tconst value = WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t\tif (this.multiplier) return (value * this.multiplier.numerator) / this.multiplier.denominator;\n\n\t\treturn value;\n\t}\n}\n\nexport {\n\tTerm,\n\tEventTerm,\n\tContextedTerm,\n\t//BreakTerm,\n\tMarkTerm,\n\tTempoTerm,\n\tGlyphTerm,\n\tTextTerm,\n\tLyricTerm,\n\tCommandTerm,\n\tChordmodeTerm,\n\tDurationalTerm,\n\tContextType,\n\tGraceType,\n\tTermPitch,\n\tRestType,\n\tGlissandoStyle,\n\tArpeggioStyle,\n\tAccessory,\n\tAccessoryDirection,\n\tWHOLE_DURATION,\n\tStemBeam,\n\tTremoloLink,\n};\n","import sha1 from 'js-sha1';\nimport erf from 'math-erf';\n\nimport { SimpleClass } from './aux_/typedJSON';\nimport * as EquationSolver from './equationSolver';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport {\n\tBackgroundImage,\n\tEventMeasure,\n\tFraction,\n\tMeasureBarType,\n\tRegulationOptions,\n\tRegulationSolution,\n\tRegulationSolutionEvent,\n\tStaffBasic,\n} from './interfaces';\nimport type { MeasureRectification } from './measureRectification';\nimport { PatchMeasure } from './patch';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\nimport { ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, StemBeam, TremoloLink, WHOLE_DURATION } from './term';\nimport type { GraphMeasure } from './timewiseGraph';\nimport { argmax, frac, fractionMul, roundNumber } from './utils';\n\nnamespace SimplePolicy {\n\tconst constructXMap = (measure: SpartitoMeasure): Map => {\n\t\tconst xMap = new Map();\n\n\t\t// mark full measure rests\n\t\tmeasure.rows.forEach((row) => {\n\t\t\tif (row.events.length === 1) {\n\t\t\t\tconst event = row.events[0];\n\t\t\t\tif (event.rest && event.division === 0) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst x = Math.round(event.pivotX * 10) / 10;\n\t\t\tlet key = 0;\n\t\t\tif (event.fullMeasureRest) key = Math.min(x, ...xMap.keys());\n\t\t\telse {\n\t\t\t\tkey =\n\t\t\t\t\t[...xMap.keys()].find((k) => {\n\t\t\t\t\t\t// check if the event is aligned with the current chord\n\t\t\t\t\t\tconst es = xMap.get(k);\n\t\t\t\t\t\tconst left = Math.min(...es.map((e) => e.left));\n\t\t\t\t\t\tconst right = Math.max(...es.map((e) => e.right));\n\n\t\t\t\t\t\tconst overlaySize = Math.min(right, event.right) - Math.max(left, event.left);\n\n\t\t\t\t\t\treturn overlaySize > NOTEHEAD_WIDTHS.NoteheadS1 * 0.62;\n\t\t\t\t\t}) || x;\n\t\t\t}\n\t\t\tevent.roundX = key;\n\n\t\t\tconst es = xMap.get(key) || [];\n\t\t\txMap.set(key, es);\n\n\t\t\tes.push(event);\n\t\t});\n\n\t\treturn xMap;\n\t};\n\n\texport const computeMeasureTicks = (measure: SpartitoMeasure): void => {\n\t\tconst xMap = constructXMap(measure);\n\n\t\tlet tick = 0;\n\t\tconst ts = new Set([tick]);\n\t\tconst eventGroups = [...xMap.entries()].sort(([x1], [x2]) => x1 - x2); //.map(entry => entry[1]);\n\t\tfor (const [x, events] of eventGroups) {\n\t\t\tvoid x;\n\n\t\t\tevents.forEach((event: EventTerm) => {\n\t\t\t\tif (event.predisposition) {\n\t\t\t\t\tevent.rest = event.rest && event.predisposition.fullMeasure > 0.5 ? 'R' : event.rest;\n\t\t\t\t\tevent.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t\tevent.division = argmax(event.predisposition.divisionVector);\n\t\t\t\t\tevent.dots = argmax(event.predisposition.dotsVector);\n\t\t\t\t\tif (event.predisposition.timeWarped > 0.5) event.timeWarp = frac(2, 3);\n\t\t\t\t}\n\n\t\t\t\tif (event.fullMeasureRest) event.tick = 0;\n\t\t\t\telse {\n\t\t\t\t\tif (event.zeroHolder) tick -= event.duration;\n\n\t\t\t\t\tif (!event.zeroHolder && event.predisposition && Number.isInteger(event.predisposition.tick)) event.tick = event.predisposition.tick;\n\t\t\t\t\telse event.tick = tick;\n\t\t\t\t\tts.add(event.tick + event.duration);\n\t\t\t\t}\n\t\t\t\t//console.log(\"append tick:\", event.tick + event.duration, event);\n\t\t\t});\n\t\t\tts.delete(tick);\n\n\t\t\t//column.xToTick[x] = tick;\n\n\t\t\tif (ts.size) tick = Math.min(...ts);\n\t\t}\n\n\t\tif (Number.isInteger(measure.estimatedDuration)) measure.duration = measure.estimatedDuration;\n\t\telse measure.duration = Math.max(...ts, 0);\n\t};\n\n\texport const computeMeasureVoices = (measure: SpartitoMeasure): void => {\n\t\tmeasure.voices = [];\n\t\tfor (const row of measure.rows) {\n\t\t\tconst events = row.events.filter(\n\t\t\t\t(event) => !event.grace && !event.tremoloCatcher && !event.fullMeasureRest && !(event.predisposition && event.predisposition.fake > 0.5)\n\t\t\t);\n\t\t\tconst eventSet = new Set(events);\n\n\t\t\twhile (eventSet.size) {\n\t\t\t\tlet tick = 0;\n\n\t\t\t\tconst voice = [];\n\t\t\t\tconst pushEvent = (e: EventTerm) => {\n\t\t\t\t\tvoice.push(e.id);\n\t\t\t\t\tif (!e.zeroHolder) tick += e.duration;\n\t\t\t\t\teventSet.delete(e);\n\t\t\t\t};\n\n\t\t\t\tconst e0 = events.find((e) => eventSet.has(e));\n\t\t\t\tif (e0.alignedTick > 0) {\n\t\t\t\t\t//voice.tickMap[tick] = EventTerm.space({ tick, duration: e0.alignedTick });\n\t\t\t\t\ttick = e0.alignedTick;\n\t\t\t\t}\n\t\t\t\tpushEvent(e0);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// TODO: consider slur pair\n\t\t\t\t\tconst e = events.find((e) => eventSet.has(e) && e.alignedTick === tick);\n\t\t\t\t\tif (!e) break;\n\n\t\t\t\t\tpushEvent(e);\n\t\t\t\t}\n\n\t\t\t\t//if (tick < measure.duration)\n\t\t\t\t//\tvoice.tickMap[tick] = EventTerm.space({ tick, duration: staff.duration - tick });\n\n\t\t\t\tmeasure.voices.push(voice);\n\t\t\t}\n\t\t}\n\t};\n}\n\nconst solveGraceEvents = (measure: SpartitoMeasure): void => {\n\tconst graceEvents = measure.events.filter((event) => event.grace /*&& !Number.isFinite(event.tick)*/);\n\tif (!graceEvents.length) return;\n\n\tconst tickMap = measure.tickMap;\n\tconst staffMap = [...tickMap.entries()].reduce((smap, [tick, events]) => {\n\t\tevents.forEach((event) => {\n\t\t\tif (!event.grace) {\n\t\t\t\tsmap[event.staff] = smap[event.staff] || {};\n\n\t\t\t\tconst oldEvent = smap[event.staff][tick];\n\t\t\t\tsmap[event.staff][tick] = !oldEvent || oldEvent.x > event.x ? event : oldEvent;\n\t\t\t}\n\t\t});\n\n\t\treturn smap;\n\t}, {} as { [staff: number]: { [tick: number]: EventTerm } });\n\n\ttype Position = { tick: number; preTick: number; graces: EventTerm[]; event: EventTerm };\n\tconst staffPositions = Object.entries(staffMap).reduce((map, [staff, emap]) => {\n\t\tmap[staff] = Object.entries(emap)\n\t\t\t.map(([t, event]) => ({ event, tick: Number(t), preTick: -240, graces: [] }))\n\t\t\t.sort((p1, p2) => p1.event.x - p2.event.x);\n\t\tmap[staff].push({ tick: measure.duration, event: measure.endEvent, preTick: 0, graces: [] }); // terminal bar\n\n\t\tlet tick = 0;\n\t\tmap[staff].forEach((position) => {\n\t\t\tif (position.tick > tick) {\n\t\t\t\tposition.preTick = tick;\n\t\t\t\ttick = position.tick;\n\t\t\t}\n\t\t});\n\n\t\treturn map;\n\t}, {} as { [staff: number]: Position[] });\n\n\t// append grace events into positions\n\tgraceEvents.forEach((event) => {\n\t\tconst staff = staffPositions[event.staff];\n\t\tif (staff) {\n\t\t\tconst position = staff.find((p) => p.event.x > event.x);\n\t\t\tif (position) position.graces.push(event);\n\t\t\tevent.roundX = event.x;\n\t\t\t//if (position.tick >= measure.duration)\n\t\t\t//\tevent.grace = GraceType.AfterGrace;\n\t\t}\n\t});\n\n\tObject.values(staffPositions).forEach((staff) =>\n\t\tstaff.forEach((position) => {\n\t\t\tif (position.graces.length) {\n\t\t\t\tposition.event.graceIds = position.graces.map((e) => e.id);\n\n\t\t\t\tconst totalDuration = position.graces.reduce((t, e) => t + e.duration, 0);\n\t\t\t\tconst duration = Math.min(totalDuration, position.tick - position.preTick);\n\t\t\t\tconst warp = duration / totalDuration;\n\n\t\t\t\tlet tick = position.tick;\n\t\t\t\t[...position.graces].reverse().forEach((event) => {\n\t\t\t\t\tevent.tick = Math.round(tick - event.duration * warp);\n\t\t\t\t\ttick = event.tick;\n\t\t\t\t});\n\t\t\t}\n\t\t})\n\t);\n};\n\nconst solveTremoloPairs = (measure: SpartitoMeasure): void => {\n\tconst catchers = measure.events.filter((event) => event.tremoloCatcher && !event.grace);\n\tconst pitchers = measure.events.filter((event) => event.tremoloLink === TremoloLink.Pitcher && !event.grace);\n\n\tcatchers.forEach((catcher) => {\n\t\tlet candidates = pitchers.filter((event) => event.division === catcher.division && event.x < catcher.x);\n\t\tif (!candidates.length)\n\t\t\tcandidates = measure.events.filter(\n\t\t\t\t(event) =>\n\t\t\t\t\tNumber.isFinite(event.tick) &&\n\t\t\t\t\t!event.grace &&\n\t\t\t\t\t!event.rest &&\n\t\t\t\t\tevent.division === catcher.division &&\n\t\t\t\t\tevent.dots === catcher.dots &&\n\t\t\t\t\tevent.x < catcher.x\n\t\t\t);\n\t\tcandidates.sort((c1, c2) => c2.x - c1.x);\n\t\tif (candidates.length) {\n\t\t\tconst pitcher = candidates[0];\n\t\t\tpitcher.catcherId = catcher.id;\n\t\t\tconst tremolo = Math.max(pitcher.tremolo || 3, catcher.tremolo || 3);\n\t\t\tpitcher.tremolo = tremolo;\n\t\t\tcatcher.tremolo = tremolo;\n\n\t\t\tif (!catcher.tick) catcher.tick = pitcher.tick + pitcher.duration / 2;\n\n\t\t\tconst pi = pitchers.indexOf(pitcher);\n\t\t\tif (pi >= 0) pitchers.splice(pi, 1);\n\t\t}\n\t});\n};\n\nnamespace EquationPolicy {\n\ttype EventID = number;\n\ttype Time = number;\n\n\tconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\n\tconst CHORDS_SEAM_SIGMA = 0.6;\n\tconst NEIGHBOR_CHORDS_SIGMA = 1.6;\n\tconst Y_DECAY_SIGMA = 16;\n\tconst STAFF_DECAY_FACTOR = 2;\n\tconst STEM_DIRECTION_DECAY = 0.9;\n\tconst ILL_BEAMS_PENALTY = 0.2;\n\n\tconst INVERT_SQRT2 = 0.7071067811865475;\n\n\tconst MATRIX_H_WEIGHT = 3;\n\n\tconst FINE_BEAMS = [\n\t\t[null, null],\n\t\t[null, StemBeam.Open],\n\t\t[StemBeam.Open, StemBeam.Continue],\n\t\t[StemBeam.Open, StemBeam.Close],\n\t\t[StemBeam.Continue, StemBeam.Continue],\n\t\t[StemBeam.Continue, StemBeam.Close],\n\t\t[StemBeam.Close, null],\n\t\t[StemBeam.Close, StemBeam.Open],\n\t].map((bb) => bb.join('-'));\n\n\tinterface Event {\n\t\tid: EventID;\n\t\tstaff: number;\n\t\tx: number;\n\t\ty: number;\n\t\tduration: Time;\n\t\tconfidence: number;\n\t\tshrinkness: number;\n\t}\n\n\texport interface StaffGroup {\n\t\tevents: Event[];\n\t\texpectedDuration: Time;\n\t\tmeasureShrinkness: number;\n\t\tendX: number;\n\t\tmatrixH: Matrix;\n\t\tmatrixV: Matrix;\n\n\t\tids?: EventID[];\n\t}\n\n\tinterface EventResult {\n\t\tid: EventID;\n\t\ttick: Time;\n\t\tendTick: Time;\n\t\ttickGroup: number;\n\t\ttimeWarp?: Fraction;\n\t}\n\n\texport interface StaffGroupSolution {\n\t\tevents: EventResult[];\n\t\tvoices: EventID[][];\n\t\tduration: number;\n\n\t\tloss?: number;\n\t\tcredits?: number;\n\t\ttimes?: number;\n\t}\n\n\texport interface RegulatorOptions extends EquationSolver.SolverOptions {\n\t\tsolver?: (staffGroup: StaffGroup, options: EquationSolver.SolverOptions) => Promise;\n\t}\n\n\tconst solveStaffGroup = (staffGroup: StaffGroup, options: EquationSolver.SolverOptions): StaffGroupSolution => {\n\t\tif (!staffGroup.events.length) {\n\t\t\treturn {\n\t\t\t\tevents: [],\n\t\t\t\tvoices: [],\n\t\t\t\tduration: 0,\n\t\t\t};\n\t\t}\n\n\t\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\t\treturn solver.solve();\n\t};\n\n\texport const estiamteMeasure = (measure: SpartitoMeasure): StaffGroup => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => ({\n\t\t\t\tid: event.id,\n\t\t\t\tstaff: event.staff,\n\t\t\t\tx: event.x,\n\t\t\t\ttickEstimated: event.predisposition && Number.isFinite(event.predisposition.tick) ? event.predisposition.tick : event.x,\n\t\t\t\ttipX: event.tipX,\n\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\tduration: (event.mainDuration * DURATION_MULTIPLIER) / WHOLE_DURATION,\n\t\t\t\tdivision: event.division,\n\t\t\t\tdots: event.dots,\n\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\tbeam: event.beam,\n\t\t\t\trest: event.rest,\n\t\t\t\t// the possibility of full measure rest\n\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\tshrinkness: event.predisposition ? event.predisposition.timeWarped : null,\n\t\t\t}));\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: Number.isFinite(e.shrinkness) ? e.shrinkness : Math.tanh((e.division - e.dots * 0.1) / 4),\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\t//const hp = (dx: number): number => 1 - erf(((dx / NEIGHBOR_CHORDS_SIGMA) ** 0.6) * INVERT_SQRT2);\n\t\tconst hp = (dx: number): number => erf(dx / NEIGHBOR_CHORDS_SIGMA) * erf(NEIGHBOR_CHORDS_SIGMA / dx);\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\tif (e1.staffGroup !== e2.staffGroup) matrixH[e1.id][e2.id] = 0;\n\t\t\t\t// prohibit voice crossing staff groups\n\t\t\t\telse if (e1.x <= e2.x) matrixH[e1.id][e2.id] = 0;\n\t\t\t\telse {\n\t\t\t\t\tconst staffDecay = Math.exp(-Math.abs(e1.staff - e2.staff) * STAFF_DECAY_FACTOR);\n\t\t\t\t\tconst yDecay = e1.staff === e2.staff ? Math.exp(-Math.abs(e1.y - e2.y) / Y_DECAY_SIGMA) : 1;\n\t\t\t\t\tconst dx = e1.x - e2.x;\n\t\t\t\t\tconst dtx = e1.tipX - e2.tipX;\n\t\t\t\t\tmatrixH[e1.id][e2.id] = (staffDecay * yDecay * Math.min(hp(dx), hp(dtx))) ** (1 / MATRIX_H_WEIGHT);\n\t\t\t\t}\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\t\t\t\tmatrixH[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\n\t\t\t\t// weaken inconsistent stem directions\n\t\t\t\tif (e1.stemDirection && e2.stemDirection && e1.stemDirection !== e2.stemDirection) matrixH[e1.id][e2.id] *= STEM_DIRECTION_DECAY;\n\n\t\t\t\t// ill beams penalty\n\t\t\t\tif (!e1.rest && !e2.rest && !FINE_BEAMS.includes([e2.beam, e1.beam].join('-'))) matrixH[e1.id][e2.id] *= ILL_BEAMS_PENALTY;\n\t\t\t}\n\n\t\t\t// H possibility of e1 and end of measure\n\t\t\tmatrixH[ids.length][e1.id] = hp(measure.width - e1.x) ** (1 / MATRIX_H_WEIGHT);\n\t\t}\n\n\t\treturn {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness: 0,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t};\n\n\texport const regulateMeasure = async (measure: SpartitoMeasure, { solver = null, ...options }: RegulatorOptions): Promise => {\n\t\tconst env = estiamteMeasure(measure);\n\t\tconst { ids, matrixH, matrixV } = env;\n\n\t\t// copy matrices values from measure topology data\n\t\tif (measure.matrixH) {\n\t\t\tconsole.assert(\n\t\t\t\tmeasure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t\t'matrix shape mismatch:',\n\t\t\t\tids.length,\n\t\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t\t);\n\t\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t\t}\n\t\t}\n\t\tif (measure.matrixV) {\n\t\t\tmatrixV.forEach((row, i) =>\n\t\t\t\trow.forEach((_, j) => {\n\t\t\t\t\tconst mp = measure.matrixV[ids[i]][ids[j]];\n\t\t\t\t\tif (Number.isFinite(mp)) matrixV[i][j] = mp;\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\tenv.measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tif (options.logger) options.logger.info('--- MEASURE', measure.measureIndex, '---', env);\n\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\t\tconst resultEvents = solution.events.map((e) => ({\n\t\t\t...e,\n\t\t\tid: env.ids[e.id], // decode compact ids\n\t\t}));\n\t\tresultEvents.forEach((e) => {\n\t\t\tconst event = measure.events.find((e0) => e0.id === e.id);\n\t\t\tevent.tick = Number.isFinite(e.tick) ? Math.round((e.tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : null;\n\t\t\tevent.tickGroup = e.tickGroup;\n\t\t\tevent.timeWarp = e.timeWarp;\n\t\t});\n\n\t\tmeasure.duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\t\tmeasure.voices = solution.voices.map((voice) => voice.map((id) => env.ids[id]));\n\n\t\tmeasure.solutionStat = {\n\t\t\tloss: solution.loss,\n\t\t\tsolverCredits: solution.credits,\n\t\t\tsolverTimes: solution.times,\n\t\t};\n\n\t\t// full measure rests\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst result = resultEvents.find((e) => e.id === event.id);\n\t\t\tif (!result) return;\n\t\t\telse if (!Number.isFinite(result.tick) && event.rest === 'r' && event.division === 0) {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.rest = 'R';\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t} else if (event.rest === 'R') {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t}\n\t\t});\n\t};\n\n\texport const regulateMeasureWithRectification = async (\n\t\tmeasure: SpartitoMeasure,\n\t\trectification: MeasureRectification,\n\t\t{ solver = null, ...options }: RegulatorOptions\n\t): Promise => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => {\n\t\t\t\tconst re = rectification.events.find((e) => e && e.id === event.id);\n\t\t\t\tconst division = Number.isFinite(re?.division) ? re.division : event.division;\n\t\t\t\tconst dots = Number.isFinite(re?.dots) ? re.dots : event.dots;\n\t\t\t\tconst duration = DURATION_MULTIPLIER * 2 ** -division * (2 - 2 ** -dots);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: event.id,\n\t\t\t\t\tstaff: event.staff,\n\t\t\t\t\tx: event.x,\n\t\t\t\t\ttickEstimated: event.predisposition?.tick,\n\t\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\t\tduration,\n\t\t\t\t\t// the possibility of full measure rest\n\t\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\t\tshrinkness: event.predisposition?.timeWarped || 0,\n\t\t\t\t};\n\t\t\t});\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: e.shrinkness,\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\t\t\t}\n\t\t}\n\n\t\t// copy matrices values from measure topology data\n\t\tconsole.assert(\n\t\t\tmeasure.matrixH && measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t'matrix shape mismatch:',\n\t\t\tids.length,\n\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t);\n\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t}\n\n\t\tlet measureShrinkness = 0;\n\t\tif (Number.isFinite(measure.estimatedDuration)) measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tconst env = {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\n\t\tconst priority = -solution.loss;\n\n\t\tconst events = solution.events.map(({ id, tick, tickGroup, timeWarp }) => {\n\t\t\tconst re = rectification.events.find((e) => e && e.id === id);\n\t\t\tconst tickN = Number.isFinite(tick) ? Math.round((tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : tick;\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttick: tickN,\n\t\t\t\ttickGroup,\n\t\t\t\ttimeWarp,\n\t\t\t\tdivision: re?.division,\n\t\t\t\tdots: re?.dots,\n\t\t\t};\n\t\t});\n\n\t\tconst duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\n\t\treturn {\n\t\t\tevents,\n\t\t\tvoices: solution.voices,\n\t\t\tduration,\n\t\t\tpriority,\n\t\t};\n\t};\n}\n\ntype Matrix = number[][];\n\ntype TickMap = Map;\n\ninterface SolutionStatistics {\n\tloss?: number;\n\tsolverCredits?: number;\n\tsolverTimes?: number;\n}\n\nclass SpartitoMeasure extends SimpleClass {\n\tstatic className = 'SpartitoMeasure';\n\tstatic blackKeys = ['staffGroups', 'solutionStat', 'measureNumber', 'deposit'];\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tstaffGroups: number[][];\n\toriginalRegulationHash?: string;\n\tmeasureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures\n\n\tpatched: boolean;\n\tdiscard: boolean;\n\n\tposition: {\n\t\tsystemIndex: number;\n\t\tlocalIndex: number; // the measure local index in its system\n\t\tleft: number;\n\t\tright: number;\n\t\tstaffYs?: number[];\n\t\tstaffYsFull?: number[];\n\t};\n\n\tbackgroundImages: BackgroundImage[];\n\n\tevents: EventTerm[];\n\tendEvent: Partial; // the placeholder for end tick\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n\tindent: boolean;\n\n\tsolutionStat?: SolutionStatistics;\n\n\tmatrixH: Matrix; // matrix N x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n\testimatedDuration: number;\n\n\tgraph: GraphMeasure;\n\n\tdeposit: Record;\n\n\tstatic reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[] {\n\t\tconst HALF_NOTEHEAD = 0.7;\n\n\t\tconst ys = [];\n\n\t\tconst es = events.map((e) => ({\n\t\t\tid: e.id,\n\t\t\tstaff: e.staff,\n\t\t\tx: e.x / HALF_NOTEHEAD,\n\t\t\trx: 0,\n\t\t\try: staffYsFull[e.staff] + e.tipY,\n\t\t\ttipY: e.tipY,\n\t\t\tprior: 0,\n\t\t}));\n\t\tes.sort((e1, e2) => e1.x - e2.x);\n\t\tes.slice(1).forEach((e, i) => {\n\t\t\tconst dx = Math.min(Math.round(e.x - es[i].x), 2);\n\t\t\te.rx = es[i].rx + dx;\n\t\t});\n\t\tes.forEach((e) => {\n\t\t\te.prior = e.staff * 1e4 + e.rx + e.tipY * 0.01;\n\n\t\t\tif (!ys.includes(e.ry)) ys.push(e.ry);\n\t\t});\n\t\tes.sort((e1, e2) => e1.prior - e2.prior);\n\t\tys.sort((y1, y2) => y1 - y2);\n\n\t\tlet yi = 0;\n\t\tconst yis = ys.map((y, i) => {\n\t\t\tif (!i || ys[i] - ys[i - 1] < 0.5) return yi;\n\n\t\t\t++yi;\n\t\t\treturn yi;\n\t\t});\n\n\t\tconst result = es.map((e) => new EventTerm({ ...events.find((ev) => ev.id === e.id), intX: e.rx, intY: yis[ys.indexOf(e.ry)] }));\n\t\tresult.forEach((e, i) => (e.id = i + 1));\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tif (!this.originalRegulationHash && !this.regulated) this.originalRegulationHash = this.regulationHash;\n\n\t\tthis.barTypes = this.barTypes || {};\n\n\t\t// Ensure postRegulate runs for measures deserialized with voices (e.g. from patches/JSON)\n\t\t// to set endEvent and roundX needed for playback cursor positioning.\n\t\tif (this.regulated && this.position) this.postRegulate();\n\t}\n\n\tget timeSignature(): Fraction {\n\t\treturn this.basics && this.basics[0].timeSignature;\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.basics && this.basics[0].keySignature;\n\t}\n\n\tget timeSignatureChanged(): boolean {\n\t\treturn this.contexts.filter(Boolean)[0].some((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type));\n\t}\n\n\tget doubtfulTimesig(): boolean {\n\t\treturn this.basics && this.basics[0].doubtfulTimesig;\n\t}\n\n\tget regulated(): boolean {\n\t\treturn !!this.voices;\n\t}\n\n\tget validRegulated(): boolean {\n\t\tif (!this.voices) return false;\n\n\t\treturn this.voices.flat(1).every((id) => Number.isFinite(this.events.find((e) => e.id === id)?.tick));\n\t}\n\n\tget rows(): EventMeasure[] {\n\t\treturn this.contexts.map((contexts, si) => {\n\t\t\tconst events = this.events.filter((e) => e.staff === si);\n\n\t\t\treturn {\n\t\t\t\tevents,\n\t\t\t\tcontexts,\n\t\t\t};\n\t\t});\n\t}\n\n\tget eventStartX(): number {\n\t\treturn this.events.length ? Math.min(...this.events.map((e) => e.x)) : this.startX;\n\t}\n\n\tget startX(): number {\n\t\treturn this.position.left;\n\t}\n\n\tget width(): number {\n\t\treturn this.position.right - this.position.left;\n\t}\n\n\tget tickMap(): TickMap {\n\t\treturn this.events\n\t\t\t.concat([this.endEvent as EventTerm])\n\t\t\t.filter(Boolean)\n\t\t\t.reduce((map, event) => {\n\t\t\t\tif (Number.isFinite(event.tick)) {\n\t\t\t\t\tif (!map.has(event.tick)) map.set(event.tick, []);\n\n\t\t\t\t\tmap.get(event.tick).push(event);\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}, new Map());\n\t}\n\n\tget tickToX(): { [tick: number]: number } {\n\t\treturn [...this.tickMap.entries()].reduce((map, [tick, events]) => {\n\t\t\tevents = events.filter((e) => !e.fullMeasureRest && !e.grace);\n\t\t\tif (events.length) {\n\t\t\t\tconst x = Math.min(...events.map((e) => e.x));\n\t\t\t\tmap[tick] = x;\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget tickRates(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tevents.sort((e1, e2) => e1.x - e2.x);\n\n\t\treturn events.slice(0, events.length - 1).map((e1, i) => {\n\t\t\tconst e2 = events[i + 1];\n\n\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t});\n\t}\n\n\tget tickRatesInStaves(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(sevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickRatesInGroups(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(gevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickTwist(): number {\n\t\tif (!this.duration || !this.staffGroups) return undefined;\n\n\t\tconst events = this.events.filter(\n\t\t\t(event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !(event.rest && event.division === 0)\n\t\t); // ignore rest0\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst twists = Object.values(gevents).map((es) => {\n\t\t\tconst eventsXOrder = [...es].sort((e1, e2) => e1.pivotX - e2.pivotX);\n\t\t\tconst xSpan = this.position.right - eventsXOrder[0].x;\n\t\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\t\tconst e1 = eventsXOrder[i];\n\t\t\t\tconst dx = e2.pivotX - e1.pivotX;\n\t\t\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\t\t\tif (!dt) return dx / xSpan;\n\n\t\t\t\tconst rate = Math.atan2(dt / this.duration, dx / xSpan);\n\n\t\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t\t});\n\n\t\t\treturn Math.max(0, ...tickTwists);\n\t\t});\n\n\t\treturn Math.max(0, ...twists);\n\t}\n\n\tget eventMap(): Record {\n\t\treturn this.events.reduce((map, event) => {\n\t\t\tmap[event.id] = event;\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget empty(): boolean {\n\t\treturn !this.events?.length || !this.voices?.length;\n\t}\n\n\tget hasIllEvent(): boolean {\n\t\tconst voicedEventIds = this.voices.flat(1);\n\t\tconst eventMap = this.eventMap;\n\t\treturn (\n\t\t\tthis.regulated &&\n\t\t\tvoicedEventIds.some((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\treturn !event.zeroHolder && !Number.isFinite(event.tick) && !event.fullMeasureRest;\n\t\t\t})\n\t\t);\n\t}\n\n\tget brief(): string {\n\t\tconst timesig = `${this.timeSignature.numerator}/${this.timeSignature.denominator}`;\n\t\tconst eventBrieves = this.events.map((e) =>\n\t\t\t[\n\t\t\t\te.staff,\n\t\t\t\te.intX,\n\t\t\t\tMath.round(e.tip ? e.tip.y : e.ys?.[0] ?? 0),\n\t\t\t\te.fullMeasureRest ? 0 : e.division,\n\t\t\t\te.fullMeasureRest ? 0 : e.dots,\n\t\t\t\te.rest ? 'r' : '',\n\t\t\t\te.grace || '',\n\t\t\t\te.stemDirection,\n\t\t\t\te.beam || '',\n\t\t\t].join('|')\n\t\t);\n\n\t\treturn [timesig, ...eventBrieves].join('\\n');\n\t}\n\n\tget regulationHash(): string {\n\t\treturn sha1(this.brief);\n\t}\n\n\t// prefer use originalRegulationHash\n\tget regulationHash0(): string {\n\t\treturn this.originalRegulationHash || this.regulationHash;\n\t}\n\n\tget regulationHashes(): string[] {\n\t\treturn Array.from(new Set([this.originalRegulationHash, this.regulationHash].filter(Boolean)));\n\t}\n\n\tget featureWords(): string[][] | null {\n\t\tif (!this.regulated || !this.voices || !this.voices.length) return null;\n\n\t\tconst invalid = this.tickRatesInStaves.some((rate) => rate < 0);\n\n\t\tconst mainEvents = this.events.filter((event) => !event.zeroHolder && !event.rest);\n\n\t\tconst ys = mainEvents\n\t\t\t.map((event) => event.ys)\n\t\t\t.flat(1)\n\t\t\t.map((y) => `Y${-y * 2}`);\n\t\tconst uys = Array.from(new Set(ys));\n\t\tif (this.keySignature) uys.push(`K${this.keySignature}`);\n\n\t\tconst voices = this.voices\n\t\t\t.map((ids) => ids.map((id) => this.events.find((e) => e.id === id)).filter((event) => !event.zeroHolder && !event.rest))\n\t\t\t.filter((voice) => voice.length);\n\n\t\tconst melodies = invalid ? [] : voices.map((es) => es.map((e) => e.scaleChord).join('-'));\n\n\t\tconst rhythm = invalid ? [] : voices.map((es) => es.map((e) => e.division).join(''));\n\t\tif (this.timeSignature) rhythm.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`);\n\n\t\treturn [uys, melodies, rhythm];\n\t}\n\n\tget barType(): MeasureBarType {\n\t\tif (this.voltaEnd) return 'VoltaRight';\n\n\t\tconst typeEntris = Object.entries(this.barTypes).sort((e1, e2) => e2[1] - e1[1]);\n\t\tif (typeEntris[0] && typeEntris[0][1] >= 1) return typeEntris[0][0] as MeasureBarType;\n\n\t\treturn null;\n\t}\n\n\tget partialDuration(): boolean {\n\t\tif (!Number.isFinite(this.duration)) return false;\n\n\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\treturn this.duration < signatureDuration;\n\t}\n\n\tpostRegulate(): void {\n\t\tthis.endEvent = new EventTerm({ tick: this.duration, x: this.position.right });\n\n\t\tthis.updateRoundX();\n\t\tsolveGraceEvents(this);\n\t\tsolveTremoloPairs(this);\n\t\tthis.updateContextTick();\n\t}\n\n\tupdateRoundX(): void {\n\t\tconst tickToX = this.tickToX;\n\t\tif (tickToX)\n\t\t\tthis.events.forEach((event) => {\n\t\t\t\tconst x = tickToX[event.tick];\n\t\t\t\tif (Number.isFinite(x)) event.roundX = x;\n\t\t\t});\n\t}\n\n\tupdateContextTick(): void {\n\t\tif (!this.staffGroups) return;\n\t\tconst contexts = this.contexts.flat(1);\n\t\tthis.staffGroups.flat(1).forEach((staffIndex) => {\n\t\t\tconst terms = [...this.events.filter((e) => e.staff === staffIndex), ...contexts.filter((c) => c.staff === staffIndex)];\n\t\t\tterms.sort((t1, t2) => t2.x - t1.x); // order by x from right to left\n\n\t\t\tlet tick = this.duration;\n\t\t\tterms.forEach((term) => {\n\t\t\t\tif (term instanceof EventTerm) {\n\t\t\t\t\tif (!term.fullMeasureRest && !term.zeroHolder) tick = term.tick;\n\t\t\t\t} else if (term instanceof ContextedTerm) term.tick = tick;\n\t\t\t});\n\t\t});\n\t}\n\n\tasSolution(ref: SpartitoMeasure = undefined): RegulationSolution {\n\t\tif (!this.regulated) return null;\n\n\t\t//let timeSignature = undefined;\n\t\t//if (ref && printFraction(ref.timeSignature) !== printFraction(this.timeSignature)) timeSignature = this.timeSignature;\n\n\t\treturn {\n\t\t\t//timeSignature,\n\t\t\tevents: this.events.map((e) => {\n\t\t\t\tconst se = {\n\t\t\t\t\tid: e.id,\n\t\t\t\t\ttick: e.tick,\n\t\t\t\t\ttickGroup: e.tickGroup,\n\t\t\t\t\ttimeWarp: e.timeWarp,\n\t\t\t\t} as RegulationSolutionEvent;\n\n\t\t\t\tif (ref) {\n\t\t\t\t\tconst refEvent = ref.events.find((re) => re.id === e.id);\n\t\t\t\t\tif (refEvent) {\n\t\t\t\t\t\tif (e.division !== refEvent.division) se.division = e.division;\n\t\t\t\t\t\tif (e.dots !== refEvent.dots) se.dots = e.dots;\n\t\t\t\t\t\tif (e.grace !== refEvent.grace) se.grace = !!e.grace;\n\t\t\t\t\t\tif (e.beam !== refEvent.beam) se.beam = e.beam;\n\t\t\t\t\t\tif (e.fullMeasureRest !== refEvent.fullMeasureRest) se.fullMeasure = e.fullMeasureRest;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn se;\n\t\t\t}),\n\t\t\tvoices: this.voices,\n\t\t\tduration: this.duration,\n\t\t\tpriority: -this.solutionStat?.loss,\n\t\t};\n\t}\n\n\tapplySolution(solution: RegulationSolution): void {\n\t\tif (solution.timeSignature) {\n\t\t\tthis.basics.forEach((basic) => {\n\t\t\t\tbasic.timeSignature = solution.timeSignature;\n\t\t\t\tbasic.doubtfulTimesig = false;\n\t\t\t});\n\t\t}\n\n\t\tthis.voices = solution.voices;\n\t\tthis.duration = solution.duration;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.timeWarp = null;\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\n\t\t\tconst se = solution.events?.find((e) => e.id === event.id);\n\t\t\tif (se) {\n\t\t\t\tevent.tick = se.tick;\n\t\t\t\tevent.timeWarp = se.timeWarp;\n\t\t\t\tevent.tickGroup = se.tickGroup;\n\n\t\t\t\tif (Number.isFinite(se.division)) event.division = se.division;\n\t\t\t\tif (Number.isFinite(se.dots)) event.dots = se.dots;\n\t\t\t\tif (se.beam !== undefined) event.beam = se.beam as StemBeam;\n\t\t\t\tif (se.grace !== undefined) event.grace = se.grace ? GraceType.Grace : undefined;\n\t\t\t\tif (se.fullMeasure) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tif (Number.isFinite(solution.priority)) this.solutionStat = { loss: -solution.priority };\n\n\t\tthis.postRegulate();\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.voices = null;\n\t\tthis.duration = null;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\t\t\tevent.timeWarp = null;\n\t\t});\n\t}\n\n\tregulateTest(): void {\n\t\tthis.duration = 0;\n\t\tthis.voices = this.rows.map((row) => row.events.map((e) => e.id));\n\t\tthis.voices.forEach((ids) => {\n\t\t\tlet tick = 0;\n\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\t\t\tevents.forEach((e, index) => {\n\t\t\t\te.tickGroup = index;\n\t\t\t\te.tick = tick;\n\n\t\t\t\ttick += e.duration;\n\t\t\t});\n\n\t\t\tthis.duration = Math.max(this.duration, tick);\n\t\t});\n\t}\n\n\tregulateSimple(): void {\n\t\tSimplePolicy.computeMeasureTicks(this);\n\t\tSimplePolicy.computeMeasureVoices(this);\n\t}\n\n\tasync regulateEquations(options: EquationPolicy.RegulatorOptions): Promise {\n\t\tawait EquationPolicy.regulateMeasure(this, options);\n\t}\n\n\t// compute event.tick, event.tickGroup, event.timeWarp, voices, duration\n\tasync regulate({ policy = 'advanced', ...options }: RegulationOptions = {}): Promise {\n\t\tswitch (policy) {\n\t\t\tcase 'test':\n\t\t\t\tthis.regulateTest();\n\n\t\t\t\tbreak;\n\t\t\tcase 'equations':\n\t\t\tcase 'advanced':\n\t\t\t\tawait this.regulateEquations(options);\n\n\t\t\t\tbreak;\n\t\t\tcase 'simple':\n\t\t\tdefault:\n\t\t\t\tthis.regulateSimple();\n\t\t}\n\n\t\tthis.postRegulate();\n\t}\n\n\tcreatePatch(): PatchMeasure {\n\t\treturn new PatchMeasure({\n\t\t\tmeasureIndex: this.measureIndex,\n\t\t\tstaffMask: this.staffMask,\n\t\t\tbasic: this.basics[0],\n\t\t\t//points: [],\n\t\t\tevents: this.events,\n\t\t\tcontexts: this.contexts,\n\t\t\tmarks: this.marks,\n\t\t\tvoices: this.voices,\n\t\t});\n\t}\n\n\tcreateClusters(): EventCluster[] {\n\t\tconst trueEventIds = this.voices && new Set(this.voices.flat(1));\n\n\t\treturn this.staffGroups\n\t\t\t.filter((idx) => idx.length)\n\t\t\t.map((staffIndices) => {\n\t\t\t\tconst staffY0 = this.position.staffYs[0];\n\t\t\t\tconst staffYn = (n) => this.position.staffYs[staffIndices.indexOf(n)] - staffY0;\n\n\t\t\t\tconst events = this.events.filter((event) => staffIndices.includes(event.staff));\n\t\t\t\tif (!events.length) return null;\n\n\t\t\t\tconst elements: EventElement[] = events.map((event) => ({\n\t\t\t\t\tindex: event.id,\n\t\t\t\t\tvoice: (this.voices || []).findIndex((voice) => voice.includes(event.id)),\n\t\t\t\t\ttype: event.rest ? EventElementType.REST : EventElementType.CHORD,\n\t\t\t\t\tstaff: staffIndices.indexOf(event.staff),\n\t\t\t\t\tx: event.tipX,\n\t\t\t\t\tpivotX: event.pivotX,\n\t\t\t\t\ty1: staffYn(event.staff) + (event.stemDirection === 'u' ? event.tipY : event.ys[event.ys.length - 1]),\n\t\t\t\t\ty2: staffYn(event.staff) + (event.stemDirection === 'u' ? event.ys[0] : event.tipY),\n\t\t\t\t\theadY: event.stemDirection === 'u' ? event.ys[0] : event.ys[event.ys.length - 1],\n\t\t\t\t\tfeature: event.feature,\n\t\t\t\t\tdivision: event.division,\n\t\t\t\t\tdots: event.dots,\n\t\t\t\t\tbeam: event.beam || null,\n\t\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\t\tgrace: !!event.grace,\n\t\t\t\t\ttremoloCatcher: event.tremoloCatcher,\n\t\t\t\t\ttimeWarped: !!event.timeWarp,\n\t\t\t\t\tfullMeasure: event.fullMeasureRest,\n\t\t\t\t\ttick: event.tick || 0,\n\t\t\t\t\tfake: !event.fullMeasureRest && !event.grace && this.voices && !trueEventIds.has(event.id), // tremoloCatcher deemed as fake\n\t\t\t\t}));\n\t\t\t\tif (!elements.some((elem) => !elem.fake)) return null;\n\n\t\t\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\t\t\t// BOS & EOS\n\t\t\t\telements.unshift({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\ttype: EventElementType.BOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.left,\n\t\t\t\t\tpivotX: this.position.left,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: this.duration < signatureDuration,\n\t\t\t\t\ttick: 0,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\t\t\t\telements.push({\n\t\t\t\t\tindex: -1,\n\t\t\t\t\ttype: EventElementType.EOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.right,\n\t\t\t\t\tpivotX: this.position.right,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: false,\n\t\t\t\t\ttick: this.duration,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\n\t\t\t\tlet matrixH = null;\n\t\t\t\tif (this.voices) {\n\t\t\t\t\tmatrixH = elements.map(() => elements.map(() => 0));\n\n\t\t\t\t\tthis.voices.forEach((voice) => {\n\t\t\t\t\t\tlet tar = 0;\n\t\t\t\t\t\tvoice.forEach((id) => {\n\t\t\t\t\t\t\tconst src = elements.findIndex((e) => e.index === id);\n\t\t\t\t\t\t\tif (src > 0 && tar >= 0) matrixH[src][tar] = 1;\n\t\t\t\t\t\t\ttar = src;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (tar >= 0) matrixH[elements.length - 1][tar] = 1;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst annotation = { ...this.solutionStat, patched: this.patched };\n\n\t\t\t\tconst backgroundImages =\n\t\t\t\t\tthis.backgroundImages &&\n\t\t\t\t\tthis.backgroundImages.map(({ url, position }) => ({\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t...position,\n\t\t\t\t\t\t\ty: position.y - staffY0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\n\t\t\t\treturn new EventCluster({\n\t\t\t\t\tindex: this.measureIndex,\n\t\t\t\t\tduration: this.duration,\n\t\t\t\t\tsignatureDuration,\n\t\t\t\t\tstaffY0,\n\t\t\t\t\telements,\n\t\t\t\t\tmatrixH,\n\t\t\t\t\tannotation,\n\t\t\t\t\tbackgroundImages,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n\n\tapplyClusters(clusters: EventCluster[]): void {\n\t\tconst id_max = this.events.reduce((max, event) => Math.max(max, event.id), 0) + 1;\n\t\tthis.matrixH = Array(id_max + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(id_max).fill(0));\n\n\t\tclusters.forEach((cluster) => {\n\t\t\tconst ids = cluster.elements.map((e) => e.index);\n\t\t\tconsole.assert(cluster.matrixH.length === ids.length - 1, 'unexpected matrixH size:', cluster.matrixH.length, ids.length);\n\n\t\t\tfor (let is = 1; is < ids.length; ++is) {\n\t\t\t\tfor (let it = 0; it < ids.length - 1; ++it) {\n\t\t\t\t\tconst srcId = ids[is] < 0 ? id_max : ids[is];\n\t\t\t\t\tconst tarId = ids[it];\n\n\t\t\t\t\tthis.matrixH[srcId][tarId] = cluster.matrixH[is - 1][it];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// event predisposition\n\t\t\tcluster.elements.forEach((elem) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === elem.index);\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.predisposition = elem.predisposition;\n\t\t\t\t\tif (event.predisposition.grace !== undefined) event.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// estimated measure duration\n\t\tthis.estimatedDuration = clusters.reduce((sum, cluster) => sum + cluster.estimatedDuration, 0) / clusters.length;\n\t}\n}\n\nexport { SpartitoMeasure, EquationPolicy };\n","import { MIDI } from '@k-l-lambda/music-widgets';\n\nimport { Fraction } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ArpeggioStyle, EventTerm, GraceType, RestType, StemBeam, TermPitch, TremoloLink } from './term';\nimport { noteToPitch } from './utils';\n\n// NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI\n\ninterface EventUIAgent {\n\treadonly id: number;\n\treadonly duration: number;\n\n\t//ys: number[];\n\tpitches: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\tgrace: boolean; //\n\tbeam: StemBeam;\n\ttimeWarp: string; //\n\ttremolo: number;\n\ttremoloLink: TremoloLink;\n\tglissando: boolean;\n\tarpeggioStyle: ArpeggioStyle;\n\ttick: number;\n}\n\ninterface MeasureUIAgent {\n\treadonly measureIndex: number;\n\ttimeSignature: Fraction;\n\tdoubtfulTimesig: boolean;\n\tkeySignature: number;\n\t//readonly events: EventUIAgent[];\n\tduration: number;\n\treadonly voices: number[][];\n}\n\nclass EditableEvent extends EventTerm {\n\tvoice: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t}\n\n\tget agent(): EventUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget(target, key): any {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'arpeggioStyle': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? null : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'glissando': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? false : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\treturn !!self.grace;\n\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\treturn self.timeWarp ? `${self.timeWarp.numerator}/${self.timeWarp.denominator}` : null;\n\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\treturn self.multiplier ? `${self.multiplier.numerator}/${self.multiplier.denominator}` : null;\n\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn self.pitches;\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'glissando':\n\t\t\t\t\tcase 'arpeggioStyle':\n\t\t\t\t\t\t(self as any)[key] = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\tself.grace = value ? GraceType.Grace : null;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\tself.timeWarp = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.timeWarp = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\tself.multiplier = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.multiplier = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => [\n\t\t\t\t'id',\n\t\t\t\t'duration',\n\t\t\t\t'rest',\n\t\t\t\t'division',\n\t\t\t\t'dots',\n\t\t\t\t'stemDirection',\n\t\t\t\t'tying',\n\t\t\t\t'tied',\n\t\t\t\t'beam',\n\t\t\t\t'timeWarp',\n\t\t\t\t'multiplier',\n\t\t\t\t'tremolo',\n\t\t\t\t'tremoloLink',\n\t\t\t\t'glissando',\n\t\t\t\t'arpeggioStyle',\n\t\t\t\t'tick',\n\t\t\t\t'grace',\n\t\t\t\t'pitches',\n\t\t\t],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n}\n\nclass EditableMeasure extends SpartitoMeasure {\n\tstatic className = 'EditableMeasure';\n\tstatic blackKeys = [];\n\n\tevents: EditableEvent[] = null;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\n\t\tthis.events = data.events;\n\t\tif (this.events?.some((event) => !(event instanceof EditableEvent))) this.events = this.events.map((event) => new EditableEvent(event));\n\n\t\tif (this.voices) this.syncVoiceToEvents();\n\t}\n\n\tsyncVoiceToEvents(): void {\n\t\tthis.events.forEach((event) => (event.voice = -1));\n\t\tthis.voices.forEach((voice, voiceIndex) => {\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\tif (event) event.voice = voiceIndex;\n\t\t\t\telse console.warn('no event with id:', id, this.events.length);\n\t\t\t});\n\t\t});\n\t}\n\n\tsyncVoiceFromEvents(): void {\n\t\tconst voices: EditableEvent[][] = [];\n\t\tthis.events.forEach((event) => {\n\t\t\tif (event?.voice >= 0) {\n\t\t\t\tvoices[event.voice] = voices[event.voice] || [];\n\t\t\t\tvoices[event.voice].push(event);\n\t\t\t}\n\t\t});\n\n\t\tvoices.forEach((voice) => voice.sort((e1, e2) => e1.tick - e2.tick));\n\n\t\tthis.voices = voices.map((voice) => voice.map((event) => event.id));\n\t}\n\n\tget agent(): MeasureUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget: (target, key): any => {\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\treturn self[key];\n\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn self.voices?.map((voice) => voice.join(',')) || null;\n\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\treturn self.basics[0][key];\n\t\t\t\t\t//case 'events':\n\t\t\t\t\t//\treturn self.events.map(eventUIAgent);\n\t\t\t\t\tcase 'toJSON':\n\t\t\t\t\t\treturn () => ({\n\t\t\t\t\t\t\tmeasureIndex: self.measureIndex,\n\t\t\t\t\t\t\tvoices: self.voices,\n\t\t\t\t\t\t\tduration: self.duration,\n\t\t\t\t\t\t\ttimeSignature: self.basics[0].timeSignature,\n\t\t\t\t\t\t\tkeySignature: self.basics[0].keySignature,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\t//console.log('set:', key, value);\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\t(self.basics[0][key] as any) = value;\n\t\t\t\t\t\tself.basics = self.basics.map(() => self.basics[0]);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\tself.duration = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => ['measureIndex', 'timeSignature', 'doubtfulTimesig', 'keySignature', 'duration', 'voices'],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n\n\tmakeMIDI(bpm: number = 120): MIDI.MidiData {\n\t\tif (!this.regulated) return null;\n\n\t\tconst microsecondsPerBeat = 60e6 / bpm;\n\n\t\tconst header = { formatType: 0, ticksPerBeat: 480 };\n\t\tconst tracks = this.voices.map((ids, vi) => {\n\t\t\tconst events = ids\n\t\t\t\t.map((id) => {\n\t\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\t\tif (event) {\n\t\t\t\t\t\tconst subEvents = event.graceIds ? event.graceIds.map((id) => this.events.find((event) => event.id === id)) : [];\n\n\t\t\t\t\t\treturn [...subEvents, event];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [];\n\t\t\t\t})\n\t\t\t\t.flat(1);\n\n\t\t\tconst startTime = 0;\n\n\t\t\ttype Event = MIDI.MidiEvent & { [key: string]: any };\n\t\t\tconst midiEvents: Event[] = events\n\t\t\t\t.filter((event) => !event.rest && Number.isFinite(event.tick) && event.tick >= 0 && Number.isFinite(event.duration))\n\t\t\t\t.map((event) =>\n\t\t\t\t\tevent.pitches.map((pitch) => [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t\tvelocity: 96,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick + event.duration,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t)\n\t\t\t\t.flat(2);\n\n\t\t\tmidiEvents.sort(function (e1, e2) {\n\t\t\t\treturn e1.time - e2.time;\n\t\t\t});\n\n\t\t\tif (vi === 0) {\n\t\t\t\tmidiEvents.unshift(\n\t\t\t\t\t{\n\t\t\t\t\t\ttime: startTime,\n\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\tsubtype: 'timeSignature',\n\t\t\t\t\t\tnumerator: this.timeSignature.numerator,\n\t\t\t\t\t\tdenominator: this.timeSignature.denominator,\n\t\t\t\t\t\tthirtyseconds: 8,\n\t\t\t\t\t},\n\t\t\t\t\t{ time: startTime, type: 'meta', subtype: 'setTempo', microsecondsPerBeat }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tmidiEvents.forEach((event) => {\n\t\t\t\tevent.ticks = Math.round(event.time - startTime);\n\t\t\t});\n\t\t\tmidiEvents.forEach((event, i) => {\n\t\t\t\tevent.deltaTime = event.ticks - (i > 0 ? midiEvents[i - 1].ticks : 0);\n\t\t\t});\n\n\t\t\tmidiEvents.push({ deltaTime: 0, type: 'meta', subtype: 'endOfTrack' });\n\n\t\t\treturn midiEvents;\n\t\t});\n\n\t\treturn {\n\t\t\theader,\n\t\t\ttracks,\n\t\t};\n\t}\n}\n\nexport { EditableEvent, EditableMeasure };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { Term, EventTerm, ContextedTerm, ChordmodeTerm, MarkTerm, Accessory, GraceType, TremoloLink } from './term';\nimport { HashVector } from './hashVector';\nimport { StaffLayout } from '../staffLayout';\nimport * as measureLayout from '../measureLayout';\n\ninterface Rect {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n}\n\ninterface ChordRect {\n\tx: number;\n\tstemX: number;\n\twidth: number;\n\ttop: number;\n\tbottom: number;\n\tstemDirection: string;\n\ttip?: { x: number; y: number };\n}\n\ninterface VLine {\n\tx: number;\n\ty1: number;\n\ty2: number;\n}\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ntype DivisionVecotor = [number, number, number, number, number, number, number, number, number]; // [0, 1, 2, 3, 4, 5, 6, 7, 8]\n\ntype MeasureBarType = null | 'Terminal' | 'Segment' | 'VoltaRight';\n\ninterface EventFeature {\n\tdivisions: DivisionVecotor;\n\tdots: [number, number]; // [1, 2]\n\tbeams: [number, number, number]; // ['Open', 'Continue', 'Close']\n\tstemDirections: [number, number]; // ['u', 'd']\n\tgrace: number;\n\ttremoloCatcher: number;\n}\n\ninterface EventPredisposition {\n\tgrace: boolean;\n\ttimeWarped: number;\n\tfullMeasure: number;\n\tfake: number;\n\tfakeP: number;\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tdivisionVector: DivisionVecotor;\n\tdotsVector: [number, number, number]; // [0, 1, 2]\n\tbeamVector: [number, number, number, number]; // [null, open, continue, close]\n\tstemDirectionVector: [number, number, number]; // [null, up, down]\n}\n\ninterface ChordColumn {\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\tys: number[];\n\tnoteIds: string[]; // order by upwards\n\tdivision: number;\n\tdots: number;\n\trest: boolean;\n\tstemDirection: string;\n\taccessories?: Accessory[];\n\tgrace?: GraceType;\n\ttremolo?: number;\n\ttremoloLink?: TremoloLink;\n\tbeam?: string;\n\ttip?: { x: number; y: number };\n\n\t//stemTipY?: number;\n\n\t// for topology\n\tstaff?: number;\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature?: EventFeature;\n}\n\ninterface EventMeasure {\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[];\n}\n\ninterface StaffBasic {\n\ttimeSignature: Fraction;\n\ttimeSigNumeric: boolean;\n\tkeySignature: number;\n\tdoubtfulTimesig: boolean;\n}\n\ninterface EventMeasureColumn {\n\tmeasureIndex: number;\n\t//startX: number;\n\t//width: number;\n\n\trows: EventMeasure[]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\txMap?: Map;\n\tregularLoss?: number;\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n}\n\ninterface EventSystem {\n\tstaffMask: number;\n\tcolumns: EventMeasureColumn[]; // [measure]\n}\n\ninterface TermMeasure extends Partial {\n\tterms: Term[];\n\tduration: number;\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n}\n\ntype TermRow = TermMeasure[];\n\ninterface TermStaff {\n\trows: TermRow[]; // [system]\n}\n\ninterface Pitch {\n\tnote: number;\n\talter: number;\n}\n\nenum PageLayoutMethod {\n\tByLines = 'ByLines',\n\tByBlocks = 'ByBlocks',\n}\n\ninterface RecognitionSettings {\n\tenabledGauge: boolean; // staves straighten\n\tpageLayoutMethod: PageLayoutMethod;\n\tsemanticConfidenceThreshold: number;\n}\n\ninterface Crop {\n\taspect?: number | undefined;\n\tx?: number | undefined;\n\ty?: number | undefined;\n\twidth?: number | undefined;\n\theight?: number | undefined;\n\tunit?: 'px' | '%' | undefined;\n}\n\n//\t0 2 4\t\t\tr r tx\n//\t1 3 5\t\t\tr r ty\ntype Matrix2x3 = [number, number, number, number, number, number];\n\ninterface SourceImageFile {\n\tname: string;\n\tsize: number;\n\turl: string;\n\tcrop?: Crop;\n\tmatrix: Matrix2x3;\n\tdimensions: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tinterval: number;\n\tneedGauge?: boolean;\n}\n\ninterface Area extends Rect {\n\tstaves: {\n\t\tinterval: number;\n\t\tmiddleRhos: number[];\n\t\tphi1: number;\n\t\tphi2: number;\n\t};\n}\n\ninterface PageLayout {\n\tareas: Area[];\n}\n\ninterface MeasureBrief {\n\ttimeSignature: Fraction;\n}\n\ninterface VoiceMeasure {\n\ttickMap: { [key: number]: EventTerm | ChordmodeTerm };\n\tduration: number;\n\n\ttimeSignature?: Fraction;\n\ttimeSigNumeric?: boolean;\n\tkeySignature?: number;\n\n\tcontextedTerms: ContextedTerm[];\n\tmarks: MarkTerm[];\n\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbar?: string;\n\n\tempty?: boolean;\n\n\theadStaff?: number;\n\ttailStaff?: number;\n\n\ttrait?: HashVector;\n\tvoiceIndex?: number;\n}\n\ninterface TermVoice {\n\tmode: string;\n\tmeasures: VoiceMeasure[];\n}\n\ninterface VoicesStaff {\n\tcontext?: string;\n\tname?: string;\n\tvoices: TermVoice[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n\tslashSystemSeparator: boolean;\n}\n\ninterface MusicHeaders {\n\ttitle: string;\n\tsubtitle: string;\n\tsubsubtitle: string;\n\tcomposer: string;\n\tpoet: string;\n\tarranger: string;\n\topus: string;\n\tcopyright: string;\n\tinstrument: string;\n\tdedication: string;\n\ttagline: string;\n}\n\ninterface MusicSheet {\n\ttitle: string;\n\tpageSize: {\n\t\t// in pixels\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tunitSize: number;\n\tmeasureLayout?: measureLayout.MeasureLayout;\n\tstaffLayout: StaffLayout;\n\tpaperOptions?: Partial;\n\theaders: Partial;\n\n\tvoiceStaves: VoicesStaff[];\n\tinstrumentDict: { [key: string]: string };\n}\n\ninterface Performing {\n\tnotation: MetaNotation;\n\ttokenMap: Map;\n}\n\ntype RegulationPolicy = 'test' | 'simple' | 'equations' | 'advanced';\n\ninterface RegulationOptions {\n\tpolicy?: RegulationPolicy;\n\tquota?: number;\n\t[key: string]: any;\n}\n\ninterface ScoreData {\n\tversion?: number;\n\t[key: string]: any;\n}\n\ninterface AdditionalLineStack {\n\tleft: number;\n\tright: number;\n\tn: number;\n}\n\ninterface RegulationSolutionEvent {\n\tid: number;\n\ttick: number;\n\ttickGroup: number;\n\ttimeWarp: Fraction;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: string;\n\tgrace?: boolean;\n\tfullMeasure?: boolean;\n}\n\ninterface RegulationSolution {\n\tevents: RegulationSolutionEvent[];\n\tvoices: number[][];\n\tduration: number;\n\tpriority?: number;\n\testimatedDuration?: number;\n\ttimeSignature?: Fraction;\n}\n\ninterface BackgroundImage {\n\turl: string;\n\tposition: Rect;\n\toriginal?: boolean;\n}\n\nenum TextType { //\tLEVEL\t\t\tCHARSET\n\tTitle = 'Title', // page\t\t\t\tgeneral\n\tAuthor = 'Author', // page\t\t\t\tgeneral\n\tTempoText = 'TempoText', // measure\t\t\tspecific vocabulary\n\tTempoNumeral = 'TempoNumeral', // measure\t\t\tsymbolic and numeric\n\tTextualMark = 'TextualMark', // term\t\t\t\tspecific vocabulary\n\tLyric = 'Lyric', // term\t\t\t\tgeneral\n\tInstrument = 'Instrument', // system\t\t\tspecific vocabulary\n\tMeasureNumber = 'MeasureNumber', // system\t\t\tnumeric\n\tTimes = 'Times', // staff\t\t\tnumeric\n\tAlternation1 = 'Alternation1', // measure\t\t\tnumeric\n\tAlternation2 = 'Alternation2', // measure\t\t\tnumeric\n\tChord = 'Chord', // measure\t\t\tspecific domian\n\tPageMargin = 'PageMargin', // page\t\t\t\tgeneral\n\tOther = 'Other', // page\t\t\t\tgeneral\n}\n\nexport {\n\tRect,\n\tChordRect,\n\tVLine,\n\tFraction,\n\tMeasureBarType,\n\tEventFeature,\n\tEventPredisposition,\n\tChordColumn,\n\tEventMeasure,\n\tEventMeasureColumn,\n\tEventSystem,\n\tTermMeasure,\n\tTermRow,\n\tTermStaff,\n\tPitch,\n\tPageLayoutMethod,\n\tRecognitionSettings,\n\tSourceImageFile,\n\tPageLayout,\n\tStaffBasic,\n\tVoiceMeasure,\n\tVoicesStaff,\n\tTermVoice,\n\tMeasureBrief,\n\tAdditionalLineStack,\n\tTextType,\n\tMusicSheet,\n\tPerforming,\n\tRegulationOptions,\n\tScoreData,\n\tMusicHeaders,\n\tMatrix2x3,\n\tRegulationSolutionEvent,\n\tRegulationSolution,\n\tBackgroundImage,\n};\n","import { SpartitoMeasure } from './spartitoMeasure';\nimport { StemBeam, WHOLE_DURATION } from './term';\nimport { fractionMul, gcd } from './utils';\n\nexport interface MeasureEvaluation {\n\tevents: number;\n\tvalidEvents: number;\n\tvoiceRugged: boolean;\n\tnullEvents: number;\n\tfakeEvents: number;\n\twarpedEvents: number;\n\tcomplicatedTimewarp: boolean;\n\tspaceTime: number;\n\tsurplusTime: number;\n\tdurationRate: number;\n\tbeamBroken: boolean;\n\tfractionalWarp: boolean;\n\tirregularWarpsN: number;\n\tirregularTick: boolean;\n\ttickTwist: number;\n\ttickOverlapped: boolean;\n\tgraceInVoice: boolean;\n\tgraceN: number;\n\tgraceDominant: boolean;\n\tperfect: boolean;\n\tfine: boolean;\n\terror: boolean;\n\tqualityScore: number;\n}\n\nconst BEAM_STATUS = {\n\t[StemBeam.Open]: 1,\n\t[StemBeam.Continue]: 0,\n\t[StemBeam.Close]: -1,\n};\n\nexport const evaluateMeasure = (measure: SpartitoMeasure): MeasureEvaluation => {\n\tif (!measure.regulated) return undefined;\n\n\tconst eventMap = measure.eventMap;\n\n\tconst events = measure.events.length;\n\tconst validEvents = measure.voices.flat(1).length;\n\tconst warpedEvents = measure.events.filter((e) => e.timeWarp).length;\n\tconst warps = new Set(\n\t\tmeasure.events.filter((e) => e.timeWarp && !(e.rest && e.division === 0)).map((e) => `${e.timeWarp!.numerator}/${e.timeWarp!.denominator}`)\n\t);\n\tconst irregularWarps = new Set(warps);\n\tirregularWarps.delete('2/3');\n\n\tconst fractionalWarp = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tif (!events.some((e) => e.timeWarp)) return false;\n\n\t\tlet denominator = 0;\n\t\tlet tickSum = 0;\n\t\tlet eventN = 0;\n\t\treturn events.some((event, i) => {\n\t\t\tconst d = event.timeWarp ? event.timeWarp.denominator : 0;\n\t\t\tif (d !== denominator) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\n\t\t\t\ttickSum = 0;\n\t\t\t\teventN = 0;\n\t\t\t}\n\n\t\t\tdenominator = d;\n\t\t\ttickSum += event.duration;\n\t\t\t++eventN;\n\n\t\t\tif (i === events.length - 1) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst tickOverlapped = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tlet tick = 0;\n\t\treturn events.some((event) => {\n\t\t\tif (event.grace) return false;\n\n\t\t\tif (event.tick < tick) return true;\n\t\t\ttick = event.tick + event.duration;\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst fractionalTimes = new Set(measure.events.filter((e) => e.timeWarp && e.timeWarp.denominator > 3).map((e) => e.duration));\n\tconst complicatedTimewarp = fractionalTimes.size > 1;\n\n\tconst literalDuration = fractionMul(WHOLE_DURATION, measure.timeSignature);\n\tconst sigDuration = measure.doubtfulTimesig ? measure.duration : literalDuration;\n\n\tconst inVoiceEvents = measure.voices.flat(1).map((id) => eventMap[id]);\n\n\t// Guard: detect corrupted event data in voices (e.g. missing division, NaN tick)\n\tconst corruptedVoiceEvent = inVoiceEvents.some(\n\t\t(event) =>\n\t\t\t!event ||\n\t\t\t!Number.isFinite(event.tick) ||\n\t\t\t!Number.isFinite(event.division) ||\n\t\t\tevent.division < 0 ||\n\t\t\t!Number.isFinite(event.duration) ||\n\t\t\tevent.duration <= 0\n\t);\n\n\tconst overranged = inVoiceEvents.reduce((over, event) => over || event.tick < 0 || event.tick + event.duration > sigDuration, false);\n\tconst overDuration = measure.duration > literalDuration;\n\tconst graceInVoice = inVoiceEvents.some((event) => event.grace);\n\tconst graceN = measure.events.filter((e) => e.grace).length;\n\tconst graceDominant = graceN >= inVoiceEvents.length;\n\n\tconst irregularTick = inVoiceEvents.some((event) => {\n\t\tlet t = event.tick * 2 ** (event.division + 2);\n\t\tif (event.timeWarp) t *= event.timeWarp.denominator;\n\n\t\tif (!Number.isFinite(t)) return true;\n\n\t\tconst fragment = gcd(Math.round(t), WHOLE_DURATION);\n\t\t//if (fragment < WHOLE_DURATION)\n\t\t//\tconsole.log(\"irregularTick:\", event.tick, fragment);\n\t\treturn fragment < WHOLE_DURATION;\n\t});\n\n\tconst beamStatus = measure.voices!.map((voice) =>\n\t\tvoice.reduce(\n\t\t\t({ status, broken }, ei, evi) => {\n\t\t\t\tconst event = eventMap[ei];\n\t\t\t\tif (event.beam) {\n\t\t\t\t\t// allow an open beam at beginning of a voice\n\t\t\t\t\tif (evi === 0 && [StemBeam.Continue, StemBeam.Close].includes(event.beam)) status = 1;\n\n\t\t\t\t\tstatus += BEAM_STATUS[event.beam];\n\t\t\t\t\tbroken = broken || !(status >= 0 && status <= 1);\n\t\t\t\t} else if (!event.rest) broken = broken || status !== 0;\n\n\t\t\t\treturn { status, broken };\n\t\t\t},\n\t\t\t{ status: 0, broken: false }\n\t\t)\n\t);\n\tconst beamBroken = beamStatus.some(({ broken }) => broken); // allow an open beam at the end of a voice (status == 1)\n\tlet spaceTime = 0;\n\tlet surplusTime = 0;\n\tmeasure.voices!.forEach((voice) => {\n\t\tconst eventDuration = voice.reduce((sum, ei) => sum + eventMap[ei].duration, 0);\n\t\tspaceTime += Math.max(0, measure.duration - eventDuration);\n\t\tsurplusTime += Math.max(0, eventDuration - measure.duration);\n\t});\n\tspaceTime /= WHOLE_DURATION;\n\tconst nullEvents = measure.events.filter(\n\t\t(e) => !e.grace && !e.fullMeasureRest && !e.tremoloCatcher && (!e.predisposition || e.predisposition.fakeP < 0.1) && !Number.isFinite(e.tick)\n\t).length;\n\n\tconst fakeEvents = measure.events.filter(\n\t\t(event) => !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !inVoiceEvents.includes(event)\n\t).length;\n\n\tconst { voiceRugged } = measure.voices!.flat(1).reduce(\n\t\t(result, ei) => {\n\t\t\tif (!result.voiceRugged) {\n\t\t\t\tif (result.es.has(ei)) return { voiceRugged: true, es: result.es };\n\t\t\t}\n\n\t\t\tresult.es.add(ei);\n\n\t\t\treturn result;\n\t\t},\n\t\t{ voiceRugged: false, es: new Set() }\n\t);\n\n\tconst tickTwist = measure.tickTwist || 0;\n\n\tconst error =\n\t\tcorruptedVoiceEvent ||\n\t\ttickTwist >= 1 ||\n\t\ttickOverlapped ||\n\t\tvoiceRugged ||\n\t\tmeasure.tickRatesInStaves.some((rate) => rate < 0) ||\n\t\tnullEvents > 2 ||\n\t\t!measure.timeSignature ||\n\t\toverranged ||\n\t\tmeasure.duration > sigDuration ||\n\t\tmeasure.events.some((event) => event.timeWarp && event.timeWarp.numerator / event.timeWarp.denominator <= 0.5);\n\tconst perfect =\n\t\t!error &&\n\t\t!overDuration &&\n\t\ttickTwist < 0.2 &&\n\t\t!fractionalWarp &&\n\t\t!irregularWarps.size &&\n\t\t!irregularTick &&\n\t\t!spaceTime &&\n\t\t!surplusTime &&\n\t\t!!measure.voices!.length &&\n\t\t!beamBroken &&\n\t\t!graceInVoice &&\n\t\t!graceDominant &&\n\t\t(measure.duration === sigDuration || (Number.isFinite(measure.estimatedDuration) && measure.estimatedDuration <= sigDuration * 0.75));\n\tconst fine = !error && !overDuration && tickTwist < 0.3 && !fractionalWarp && !irregularTick && !surplusTime && !beamBroken && !graceInVoice;\n\n\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\tconst durationRate = measure.duration / expectDuration;\n\n\tlet qualityScore = 0;\n\tif (measure.patched && !corruptedVoiceEvent) qualityScore = 1;\n\telse if (!error) {\n\t\tconst spaceLoss = Math.tanh(Math.abs(spaceTime / Math.max(1, measure.voices.length)) * 1);\n\n\t\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\t\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\t\tconst durationLoss = expectDuration ? Math.max(0, 1 - durationRate) ** 2 : 0;\n\t\tconst warpsLoss = Math.tanh(irregularWarps.size);\n\n\t\tqualityScore = (1 - spaceLoss) * (1 - durationLoss) * (1 - warpsLoss) * (1 - tickTwist ** 2);\n\t}\n\n\treturn {\n\t\tevents,\n\t\tvalidEvents,\n\t\tvoiceRugged,\n\t\tnullEvents,\n\t\tfakeEvents,\n\t\twarpedEvents,\n\t\tcomplicatedTimewarp,\n\t\tspaceTime,\n\t\tsurplusTime,\n\t\tdurationRate,\n\t\tbeamBroken,\n\t\tfractionalWarp,\n\t\tirregularWarpsN: irregularWarps.size,\n\t\tirregularTick,\n\t\ttickTwist,\n\t\ttickOverlapped,\n\t\tgraceInVoice,\n\t\tgraceN,\n\t\tgraceDominant,\n\t\tperfect,\n\t\tfine,\n\t\terror,\n\t\tqualityScore,\n\t};\n};\n","import { SimpleClass } from '../starry/aux_/typedJSON';\n\nenum LayoutType {\n\tOrdinary = 'ordinary',\n\tFull = 'full',\n\tConservative = 'conservative',\n\tOnce = 'once',\n}\n\ninterface MeasureLayout {\n\tserialize(type: LayoutType): number[];\n\n\tseq: MeasureSeq;\n\tcode: string;\n}\n\nexport type MeasureSeq = MeasureLayout[];\n\nconst spreadMeasureSeq = (seq: MeasureSeq, type: LayoutType = LayoutType.Ordinary): number[] => [].concat(...seq.map((layout) => layout.serialize(type)));\n\nconst seqToCode = (seq: MeasureSeq, { withBrackets = false }: { withBrackets?: boolean } = {}): string => {\n\t//const code = seq.map(layout => layout.code).join(\", \");\n\tlet code = '';\n\tlet inRange = false;\n\n\tfor (let i = 0; i < seq.length; ++i) {\n\t\tconst middle = seq[i - 1] instanceof SingleMLayout && seq[i] instanceof SingleMLayout && seq[i + 1] instanceof SingleMLayout;\n\t\tif (middle) {\n\t\t\tif (!inRange) {\n\t\t\t\tcode += '..';\n\t\t\t\tinRange = true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (i > 0 && !inRange) code += ', ';\n\n\t\t\tinRange = false;\n\n\t\t\tcode += seq[i].code;\n\t\t}\n\t}\n\n\treturn withBrackets ? `[${code}]` : code;\n};\n\nclass SingleMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'SingleMLayout';\n\n\tmeasure: number;\n\n\tstatic from(measure: number) {\n\t\tconst layout = new SingleMLayout();\n\t\tlayout.measure = measure;\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(): number[] {\n\t\treturn [this.measure];\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this];\n\t}\n\n\tget code(): string {\n\t\treturn this.measure.toString();\n\t}\n}\n\nclass BlockMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'BlockMLayout';\n\n\tseq: MeasureSeq;\n\n\tstatic trimSeq(seq: MeasureSeq): MeasureSeq {\n\t\tconst seq2 = [];\n\t\tfor (const layout of seq) {\n\t\t\tif (layout instanceof BlockMLayout) {\n\t\t\t\tfor (const sub of layout.seq) seq2.push(sub);\n\t\t\t} else seq2.push(layout);\n\t\t}\n\n\t\t// reduce duplicated or backwards single measures\n\t\tconst seq3 = [];\n\t\tlet measure = null;\n\t\tfor (const layout of seq2) {\n\t\t\tif (layout instanceof SingleMLayout) {\n\t\t\t\tif (layout.measure > measure) {\n\t\t\t\t\tseq3.push(layout);\n\t\t\t\t\tmeasure = layout.measure;\n\t\t\t\t}\n\t\t\t} else seq3.push(layout);\n\t\t}\n\n\t\treturn seq3;\n\t}\n\n\tstatic fromSeq(seq: MeasureSeq): BlockMLayout {\n\t\tconst layout = new BlockMLayout();\n\t\tlayout.seq = BlockMLayout.trimSeq(seq);\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\treturn spreadMeasureSeq(this.seq, type);\n\t}\n\n\tget code(): string {\n\t\treturn seqToCode(this.seq, { withBrackets: true });\n\t}\n}\n\nclass VoltaMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'VoltaMLayout';\n\n\ttimes: number;\n\tbody: MeasureSeq;\n\talternates: MeasureSeq[];\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst bodySeq = spreadMeasureSeq(this.body);\n\n\t\tif (this.alternates) {\n\t\t\tconst alternateSeqs = this.alternates.map((seq) => spreadMeasureSeq(seq));\n\t\t\tconst lastAlternateSeq = alternateSeqs[alternateSeqs.length - 1];\n\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\t\treturn bodySeq.concat(...alternateSeqs);\n\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Full: {\n\t\t\t\t\tconst priorSeq = [].concat(\n\t\t\t\t\t\t...Array(this.times - 1)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map((_, i) => [...bodySeq, ...alternateSeqs[i % (this.times - 1)]])\n\t\t\t\t\t);\n\n\t\t\t\t\treturn [...priorSeq, ...bodySeq, ...lastAlternateSeq];\n\t\t\t\t}\n\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn [...bodySeq, ...lastAlternateSeq];\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn bodySeq;\n\n\t\t\t\tcase LayoutType.Full:\n\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t...Array(this.times)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map(() => bodySeq)\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn('the current case not handled:', type, this);\n\t}\n\n\tget seq(): MeasureSeq {\n\t\tconst alternates = this.alternates ? this.alternates[this.alternates.length - 1] : [];\n\n\t\treturn [...this.body, ...alternates];\n\t}\n\n\tget code(): string {\n\t\tconst body = seqToCode(this.body, { withBrackets: true });\n\n\t\tlet code = `${this.times}*${body}`;\n\t\tif (this.alternates) code += '{' + this.alternates.map((seq) => seqToCode(seq, { withBrackets: seq.length > 1 })).join(', ') + '}';\n\n\t\treturn code;\n\t}\n}\n\nclass ABAMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'ABAMLayout';\n\n\tmain: MeasureLayout;\n\trest: MeasureSeq;\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst seqA = this.main.serialize(type);\n\t\tconst seqA_ = spreadMeasureSeq(this.main.seq, LayoutType.Once);\n\t\tconst seqB = spreadMeasureSeq(this.rest, type);\n\n\t\tswitch (type) {\n\t\t\tcase LayoutType.Ordinary: // A B\n\t\t\t\treturn [...seqA, ...seqB];\n\n\t\t\tcase LayoutType.Once: // B A'\n\t\t\t\treturn [...seqB, ...seqA_];\n\n\t\t\tcase LayoutType.Conservative: // A B A'\n\t\t\tcase LayoutType.Full: // A B A'\n\t\t\t\treturn [...seqA, ...seqB, ...seqA_];\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn('the current case not handled:', type, this);\n\t\t}\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this.main, ...this.rest];\n\t}\n\n\tget code(): string {\n\t\treturn '<' + this.main.code + ', ' + seqToCode(this.rest) + '>';\n\t}\n}\n\nexport { LayoutType, MeasureLayout, SingleMLayout, BlockMLayout, VoltaMLayout, ABAMLayout };\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 13],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 15],\n\t\t$V3 = [1, 26],\n\t\t$V4 = [1, 29],\n\t\t$V5 = [1, 28],\n\t\t$V6 = [1, 30],\n\t\t$V7 = [5, 13, 22, 27, 29],\n\t\t$V8 = [2, 15],\n\t\t$V9 = [1, 32],\n\t\t$Va = [5, 14, 21, 22, 27, 28, 29];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tmeasure_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tindex_wise_measure_layout: 6,\n\t\t\t'i:': 7,\n\t\t\t's:': 8,\n\t\t\tsegment_wise_measure_layout: 9,\n\t\t\tiw_sequence: 10,\n\t\t\tiw_item: 11,\n\t\t\trange: 12,\n\t\t\t',': 13,\n\t\t\tUNSIGNED: 14,\n\t\t\t'..': 15,\n\t\t\tsingle: 16,\n\t\t\tiw_block_item: 17,\n\t\t\tiw_volta: 18,\n\t\t\tiw_aba: 19,\n\t\t\tiw_block: 20,\n\t\t\t'[': 21,\n\t\t\t']': 22,\n\t\t\t'*': 23,\n\t\t\tiw_optional_alternates: 24,\n\t\t\tiw_alternates: 25,\n\t\t\t'{': 26,\n\t\t\t'}': 27,\n\t\t\t'<': 28,\n\t\t\t'>': 29,\n\t\t\tsw_sequence: 30,\n\t\t\tsw_item: 31,\n\t\t\tsegment: 32,\n\t\t\tsw_block_item: 33,\n\t\t\tsw_volta: 34,\n\t\t\tsw_aba: 35,\n\t\t\tsw_block: 36,\n\t\t\tsw_optional_alternates: 37,\n\t\t\tsw_alternates: 38,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: {\n\t\t\t2: 'error',\n\t\t\t5: 'EOF',\n\t\t\t7: 'i:',\n\t\t\t8: 's:',\n\t\t\t13: ',',\n\t\t\t14: 'UNSIGNED',\n\t\t\t15: '..',\n\t\t\t21: '[',\n\t\t\t22: ']',\n\t\t\t23: '*',\n\t\t\t26: '{',\n\t\t\t27: '}',\n\t\t\t28: '<',\n\t\t\t29: '>',\n\t\t},\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[4, 2],\n\t\t\t[4, 2],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 3],\n\t\t\t[10, 3],\n\t\t\t[12, 3],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[16, 1],\n\t\t\t[17, 1],\n\t\t\t[20, 3],\n\t\t\t[18, 4],\n\t\t\t[24, 0],\n\t\t\t[24, 1],\n\t\t\t[25, 3],\n\t\t\t[19, 5],\n\t\t\t[9, 1],\n\t\t\t[30, 1],\n\t\t\t[30, 2],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[32, 1],\n\t\t\t[33, 1],\n\t\t\t[36, 3],\n\t\t\t[34, 4],\n\t\t\t[37, 0],\n\t\t\t[37, 1],\n\t\t\t[38, 3],\n\t\t\t[35, 4],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.$ = root(null, $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = root('index-wise', $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tthis.$ = root('segment-wise', serialize($$[$0]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\tcase 23:\n\t\t\t\t\tif ($$[$0].length === 1 && $$[$0][0].__prototype === 'BlockMLayout') this.$ = $$[$0][0];\n\t\t\t\t\telse this.$ = blockLayout($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\tcase 24:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 7:\n\t\t\t\tcase 11:\n\t\t\t\tcase 12:\n\t\t\t\tcase 13:\n\t\t\t\tcase 14:\n\t\t\t\tcase 20:\n\t\t\t\tcase 27:\n\t\t\t\tcase 28:\n\t\t\t\tcase 29:\n\t\t\t\tcase 35:\n\t\t\t\t\tthis.$ = $$[$0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], ...$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 10:\n\t\t\t\t\tthis.$ = range($$[$0 - 2], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = singleLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 16:\n\t\t\t\tcase 31:\n\t\t\t\t\tthis.$ = blockLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 17:\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 18:\n\t\t\t\tcase 33:\n\t\t\t\t\tthis.$ = voltaBlock($$[$0 - 3], $$[$0 - 1], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 19:\n\t\t\t\tcase 34:\n\t\t\t\t\tthis.$ = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 36:\n\t\t\t\t\tthis.$ = alternates($$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 3], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\t\tthis.$ = blockLayout([$$[$0]]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 30:\n\t\t\t\t\tthis.$ = segment($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 2], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 6: 3, 7: [1, 4], 8: [1, 5], 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 17] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 6: 18, 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 9: 19, 14: $V3, 21: $V4, 28: $V5, 30: 20, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 5: [2, 5], 13: $V6 },\n\t\t\to($V7, [2, 6]),\n\t\t\to($V7, [2, 7]),\n\t\t\to($V7, [2, 11]),\n\t\t\to($V7, [2, 12]),\n\t\t\to($V7, [2, 13]),\n\t\t\to($V7, [2, 14]),\n\t\t\to($V7, $V8, { 15: [1, 31], 23: $V9 }),\n\t\t\to($V7, [2, 16]),\n\t\t\t{ 11: 33, 14: [1, 34], 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 10: 35, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [2, 1] },\n\t\t\t{ 5: [2, 3] },\n\t\t\t{ 5: [2, 4] },\n\t\t\t{ 5: [2, 23], 14: $V3, 21: $V4, 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 24]),\n\t\t\to($Va, [2, 26]),\n\t\t\to($Va, [2, 27]),\n\t\t\to($Va, [2, 28]),\n\t\t\to($Va, [2, 29]),\n\t\t\to($Va, [2, 30], { 23: [1, 37] }),\n\t\t\to($Va, [2, 31]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 31: 38, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 39, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 11: 40, 12: 41, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 14: [1, 42] },\n\t\t\t{ 20: 43, 21: $V1 },\n\t\t\t{ 13: [1, 44] },\n\t\t\t{ 13: $V8, 23: $V9 },\n\t\t\t{ 13: $V6, 22: [1, 45] },\n\t\t\to($Va, [2, 25]),\n\t\t\t{ 21: $V4, 36: 46 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 47, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 22: [1, 48], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 8]),\n\t\t\to($V7, [2, 9]),\n\t\t\to($V7, [2, 10]),\n\t\t\to($V7, [2, 19], { 24: 49, 25: 50, 26: [1, 51] }),\n\t\t\t{ 10: 52, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\to([5, 13, 22, 26, 27, 29], [2, 17]),\n\t\t\to($Va, [2, 34], { 37: 53, 38: 54, 26: [1, 55] }),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 29: [1, 56], 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to([5, 14, 21, 22, 26, 27, 28, 29], [2, 32]),\n\t\t\to($V7, [2, 18]),\n\t\t\to($V7, [2, 20]),\n\t\t\t{ 10: 57, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 13: $V6, 29: [1, 58] },\n\t\t\to($Va, [2, 33]),\n\t\t\to($Va, [2, 35]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 59, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 37]),\n\t\t\t{ 13: $V6, 27: [1, 60] },\n\t\t\to($V7, [2, 22]),\n\t\t\t{ 14: $V3, 21: $V4, 27: [1, 61], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 21]),\n\t\t\to($Va, [2, 36]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 17: [2, 1], 18: [2, 3], 19: [2, 4] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tconst root = (type, data) => ({ __prototype: 'MesaureLayout', type, data });\n\n\tconst singleLayout = (n) => ({ __prototype: 'SingleMLayout', measure: Number(n) });\n\tconst blockLayout = (seq) => ({ __prototype: 'BlockMLayout', seq });\n\tconst voltaBlock = (times, body, alternates) => ({ __prototype: 'VoltaMLayout', times: Number(times), body, alternates });\n\tconst abaBlock = (main, rest) => ({ __prototype: 'ABAMLayout', main, rest });\n\n\tconst segment = (n) => ({ segment: true, length: Number(n) });\n\n\tconst alternates = (items) =>\n\t\titems.map((item) => {\n\t\t\tif (item.__prototype === 'BlockMLayout') return item.seq;\n\n\t\t\treturn [item];\n\t\t});\n\n\tconst range = (start, end) => {\n\t\tstart = Number(start);\n\t\tend = Number(end);\n\n\t\tif (!(end >= start)) throw new Error(`invalid measure range: ${start}..${end}`);\n\n\t\treturn Array(end + 1 - start)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => singleLayout(start + i));\n\t};\n\n\tconst serializeSeq = (item, options) => {\n\t\tif (item.segment) {\n\t\t\tconst index = options.index;\n\t\t\toptions.index += item.length;\n\n\t\t\treturn Array(item.length)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => singleLayout(index + i));\n\t\t}\n\n\t\treturn [serialize(item, options)];\n\t};\n\n\tconst serialize = (item, options = { index: 1 }) => {\n\t\tconst speard = (seq) => [].concat(...seq.map((it) => serializeSeq(it, options)));\n\n\t\tswitch (item.__prototype) {\n\t\t\tcase 'BlockMLayout':\n\t\t\t\titem.seq = speard(item.seq);\n\n\t\t\t\tbreak;\n\t\t\tcase 'VoltaMLayout':\n\t\t\t\titem.body = speard(item.body);\n\t\t\t\titem.alternates = item.alternates && item.alternates.map(speard);\n\n\t\t\t\tbreak;\n\t\t\tcase 'ABAMLayout':\n\t\t\t\titem.main = serialize(item.main, options);\n\t\t\t\titem.rest = speard(item.rest);\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn item;\n\t};\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 14;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([*,\\[\\]<>{}]))/, /^(?:(([1-9])([0-9])*))/, /^(?:(([a-z])+):)/, /^(?:\\.\\.)/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3, 4, 5], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import type { MeasureLayout } from './measureLayout';\nimport * as measureLayout from './measureLayout';\nimport grammar from './grammar.jison';\nimport { recoverJSON } from '../starry/aux_/typedJSON';\n\nconst parseCode = (code: string): MeasureLayout => {\n\tconst raw = grammar.parse(code);\n\n\tif (raw?.data) return recoverJSON(raw.data, measureLayout);\n\n\treturn null;\n};\n\nexport { parseCode };\n","export interface RawItem {\n\tid: string;\n\tleftBounds: string[];\n\trightBounds: string[];\n\tconjunction: string;\n}\n\nexport enum StaffGroupType {\n\tDefault,\n\tBrace, // {}\n\tBracket, // <>\n\tSquare, // []\n}\n\nexport enum StaffConjunctionType {\n\tBlank,\n\tDashed,\n\tSolid,\n}\n\ntype StaffID = string;\n\nexport interface StaffGroup {\n\ttype: StaffGroupType;\n\tsubs?: StaffGroup[];\n\tstaff?: StaffID;\n\tlevel?: number;\n\tgrand?: boolean;\n}\n\ninterface StaffGroupTrait {\n\tgroup: StaffGroup;\n\trange: [number, number];\n\tkey: string;\n}\n\nconst singleGroup = (id: string) => ({ type: StaffGroupType.Default, staff: id });\n\nconst BOUNDS_TO_GROUPTYPE: { [bound: string]: StaffGroupType } = {\n\t'{': StaffGroupType.Brace,\n\t'}': StaffGroupType.Brace,\n\t'<': StaffGroupType.Bracket,\n\t'>': StaffGroupType.Bracket,\n\t'[': StaffGroupType.Square,\n\t']': StaffGroupType.Square,\n};\n\nconst OPEN_BOUNDS = '{<[';\nconst CLOSE_BOUNDS = '}>]';\n\nconst CONJUNCTIONS_MAP: { [conj: string]: StaffConjunctionType } = {\n\t',': StaffConjunctionType.Blank,\n\t'-': StaffConjunctionType.Solid,\n\t'.': StaffConjunctionType.Dashed,\n};\n\nconst bracketCode = (type: StaffGroupType, partial: boolean = false): ((inner: string) => string) => {\n\tif (type === StaffGroupType.Default) return (inner) => inner;\n\n\tif (partial) {\n\t\tswitch (type) {\n\t\t\tcase StaffGroupType.Brace:\n\t\t\t\treturn (inner) => `{${inner}`;\n\t\t\tcase StaffGroupType.Bracket:\n\t\t\t\treturn (inner) => `<${inner}`;\n\t\t\tcase StaffGroupType.Square:\n\t\t\t\treturn (inner) => `[${inner}`;\n\t\t\tdefault:\n\t\t\t\treturn (inner) => inner;\n\t\t}\n\t}\n\n\tswitch (type) {\n\t\tcase StaffGroupType.Brace:\n\t\t\treturn (inner) => `{${inner}}`;\n\t\tcase StaffGroupType.Bracket:\n\t\t\treturn (inner) => `<${inner}>`;\n\t\tcase StaffGroupType.Square:\n\t\t\treturn (inner) => `[${inner}]`;\n\t\tdefault:\n\t\t\treturn (inner) => inner;\n\t}\n};\n\nconst randomB64 = (): string => {\n\tconst code = btoa(Math.random().toString().substr(2)).replace(/=/g, '');\n\n\treturn code.split('').reverse().slice(0, 6).join('');\n};\n\nconst makeUniqueName = (set: Set, index: number, prefix?: string): string => {\n\tlet name = prefix;\n\tif (!name) name = index.toString();\n\telse if (set.has(name)) name += '_' + index.toString();\n\n\twhile (set.has(name)) name += '_' + randomB64();\n\n\treturn name;\n};\n\nconst makeGroupsFromRaw = (parent: StaffGroup, seq: string[]): string[] => {\n\tlet remains = seq;\n\twhile (remains.length) {\n\t\tconst word = remains.shift();\n\t\tconst bound = BOUNDS_TO_GROUPTYPE[word];\n\t\tif (bound) {\n\t\t\tif (CLOSE_BOUNDS.includes(word) && bound === parent.type) break;\n\n\t\t\tif (OPEN_BOUNDS.includes(word)) {\n\t\t\t\tconst group = { type: bound, level: Number.isFinite(parent.level) ? parent.level + 1 : 0 };\n\t\t\t\tremains = makeGroupsFromRaw(group, remains);\n\n\t\t\t\tparent.subs = parent.subs || [];\n\t\t\t\tparent.subs.push(group);\n\t\t\t}\n\t\t} else {\n\t\t\tparent.subs = parent.subs || [];\n\t\t\tparent.subs.push(singleGroup(word));\n\t\t}\n\t}\n\n\twhile (parent.type === StaffGroupType.Default && parent.subs && parent.subs.length === 1) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.type = sub.type;\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t\tparent.level = sub.level;\n\t}\n\n\twhile (parent.subs && parent.subs.length === 1 && parent.subs[0].type === StaffGroupType.Default) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t}\n\n\tparent.grand = parent.type === StaffGroupType.Brace && parent.subs && parent.subs.every((sub) => sub.staff);\n\n\treturn remains;\n};\n\nconst groupHead = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupHead(group.subs[0]);\n};\n\nconst groupTail = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupTail(group.subs[group.subs.length - 1]);\n};\n\nexport const groupKey = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return `${groupHead(group)}-${groupTail(group)}`;\n};\n\nconst groupDict = (group: StaffGroup, dict: { [key: string]: StaffGroup }): void => {\n\tdict[groupKey(group)] = group;\n\n\tif (group.subs) group.subs.forEach((sub) => groupDict(sub, dict));\n};\n\nexport interface MaskedStaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroups: StaffGroupTrait[];\n}\n\nclass StaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroup: StaffGroup;\n\tgroups: StaffGroupTrait[];\n\n\tmaskCache: Map;\n\n\tconstructor(raw: RawItem[]) {\n\t\t// make unique ids\n\t\tconst ids = new Set();\n\t\traw.forEach((item, i) => {\n\t\t\titem.id = makeUniqueName(ids, i + 1, item.id);\n\t\t\tids.add(item.id);\n\t\t});\n\t\tthis.staffIds = raw.map((item) => item.id);\n\t\tthis.conjunctions = raw.slice(0, raw.length - 1).map((item) => (item.conjunction ? CONJUNCTIONS_MAP[item.conjunction] : StaffConjunctionType.Blank));\n\n\t\t// make groups\n\t\tconst seq = [].concat(...raw.map((item) => [...item.leftBounds, item.id, ...item.rightBounds]));\n\t\tthis.group = { type: StaffGroupType.Default };\n\t\tmakeGroupsFromRaw(this.group, seq);\n\n\t\tconst dict = {};\n\t\tgroupDict(this.group, dict);\n\t\tthis.groups = Object.entries(dict).map(([key, group]) => {\n\t\t\tlet ids = key.split('-');\n\t\t\tif (ids.length === 1) ids = [ids[0], ids[0]];\n\t\t\tconst range = ids.map((id) => this.staffIds.indexOf(id));\n\n\t\t\treturn {\n\t\t\t\tgroup,\n\t\t\t\trange,\n\t\t\t\tkey,\n\t\t\t} as StaffGroupTrait;\n\t\t});\n\n\t\tthis.maskCache = new Map();\n\t}\n\n\tget stavesCount(): number {\n\t\tif (!this.staffIds) return null;\n\n\t\treturn this.staffIds.length;\n\t}\n\n\tget partGroups(): StaffGroupTrait[] {\n\t\tconst grands = this.groups.filter((g) => g.group.grand);\n\t\tconst parts = this.groups.filter((g) => {\n\t\t\tif (g.group.grand) return true;\n\n\t\t\tif (g.range[0] === g.range[1]) {\n\t\t\t\tconst index = g.range[0];\n\t\t\t\treturn !grands.some((g) => g.range[0] <= index && g.range[1] >= index);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn parts;\n\t}\n\n\tget standaloneGroups(): string[][] {\n\t\tconst groups: string[][] = [];\n\t\tconst collect = (group: StaffGroup): void => {\n\t\t\tif (group.grand) groups.push(group.subs.map((sub) => sub.staff));\n\t\t\telse if (group.staff) groups.push([group.staff]);\n\t\t\telse if (group.subs) group.subs.forEach((sub) => collect(sub));\n\t\t};\n\t\tcollect(this.group);\n\n\t\treturn groups;\n\t}\n\n\tconjunctionBetween(upStaff: number, downStaff: number): StaffConjunctionType {\n\t\tif (downStaff <= upStaff) return null;\n\n\t\tlet con = StaffConjunctionType.Solid;\n\t\tfor (let i = upStaff; i < downStaff; i++) con = Math.min(con, this.conjunctions[i]);\n\n\t\treturn con;\n\t}\n\n\tstatic makeMaskLayout(layout: StaffLayout, mask: number): MaskedStaffLayout {\n\t\tconst staffIds = layout.staffIds.filter((_, i) => mask & (1 << i));\n\t\tif (staffIds.length === layout.staffIds.length) {\n\t\t\treturn {\n\t\t\t\tstaffIds: layout.staffIds,\n\t\t\t\tconjunctions: layout.conjunctions,\n\t\t\t\tgroups: layout.groups,\n\t\t\t};\n\t\t}\n\n\t\tconst groups = layout.groups\n\t\t\t.map((g) => ({ ids: layout.staffIds.slice(g.range[0], g.range[1] + 1).filter((id) => staffIds.includes(id)), ...g }))\n\t\t\t.filter(({ ids }) => ids.length)\n\t\t\t.map(\n\t\t\t\t({ ids, ...g }) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tkey: g.key,\n\t\t\t\t\t\tgroup: g.group,\n\t\t\t\t\t\trange: [staffIds.indexOf(ids[0]), staffIds.indexOf(ids[ids.length - 1])],\n\t\t\t\t\t} as StaffGroupTrait)\n\t\t\t);\n\n\t\tconst conjunctions = staffIds.slice(0, staffIds.length - 1).map((id, i) => {\n\t\t\tconst nextId = staffIds[i + 1];\n\t\t\treturn layout.conjunctionBetween(layout.staffIds.indexOf(id), layout.staffIds.indexOf(nextId));\n\t\t});\n\n\t\treturn {\n\t\t\tstaffIds,\n\t\t\tconjunctions,\n\t\t\tgroups,\n\t\t};\n\t}\n\n\tmask(mask: number): MaskedStaffLayout {\n\t\tif (!this.maskCache.get(mask)) this.maskCache.set(mask, StaffLayout.makeMaskLayout(this, mask));\n\n\t\treturn this.maskCache.get(mask);\n\t}\n\n\t// {,}\t*\t1,1\t\t=> {,}\n\t// {,}\t*\t1,x\t\t=> {\n\t// {,}\t*\t0,x\t\t=>\n\t// {,}\t*\t0,1\t\t=> {}\n\tpartialMaskCode(bits: (1 | 0)[], withIds = false): string {\n\t\ttype Attendance = 0 | 1 | null;\n\t\tconst staffStatus = this.staffIds\n\t\t\t.map((_, i) => (i < bits.length ? bits[i] : null))\n\t\t\t.reduce((status, x, i) => {\n\t\t\t\tstatus[this.staffIds[i]] = x;\n\t\t\t\treturn status;\n\t\t\t}, {} as { [id: string]: Attendance });\n\n\t\tconst joinGroup = (group: StaffGroup): [string, boolean] => {\n\t\t\tif (group.staff) return [staffStatus[group.staff] ? group.staff : null, staffStatus[group.staff] === null];\n\n\t\t\tconst subs = group.subs.map((sub) => joinGroup(sub));\n\t\t\tconst subStr = subs\n\t\t\t\t.map((pair) => pair[0])\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(',');\n\t\t\tconst partial = subs.some(([_, partial]) => partial);\n\n\t\t\tconst code = subStr ? bracketCode(group.type, partial)(subStr) : null;\n\n\t\t\treturn [code, partial];\n\t\t};\n\n\t\tlet [code] = joinGroup(this.group);\n\t\tcode = code || '';\n\t\tif (!withIds) code = code.replace(/[_\\w]+/g, '');\n\n\t\treturn code;\n\t}\n}\n\nexport default StaffLayout;\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 15],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 17],\n\t\t$V3 = [1, 11],\n\t\t$V4 = [1, 12],\n\t\t$V5 = [1, 13],\n\t\t$V6 = [1, 24],\n\t\t$V7 = [1, 25],\n\t\t$V8 = [1, 26],\n\t\t$V9 = [5, 11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Va = [15, 16, 17, 21, 22, 23, 24],\n\t\t$Vb = [11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Vc = [5, 11, 12, 13, 21, 22, 23, 24];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tstaff_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tseq: 6,\n\t\t\tseq_id: 7,\n\t\t\tseq_br: 8,\n\t\t\tseq_con: 9,\n\t\t\tbound_left: 10,\n\t\t\t'<': 11,\n\t\t\t'[': 12,\n\t\t\t'{': 13,\n\t\t\tbound_right: 14,\n\t\t\t'>': 15,\n\t\t\t']': 16,\n\t\t\t'}': 17,\n\t\t\tbound_lefts: 18,\n\t\t\tbound_rights: 19,\n\t\t\tconjunction: 20,\n\t\t\t'-': 21,\n\t\t\t',': 22,\n\t\t\t'.': 23,\n\t\t\tID: 24,\n\t\t\tseq_bl: 25,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: { 2: 'error', 5: 'EOF', 11: '<', 12: '[', 13: '{', 15: '>', 16: ']', 17: '}', 21: '-', 22: ',', 23: '.', 24: 'ID' },\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[6, 0],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[18, 1],\n\t\t\t[18, 2],\n\t\t\t[19, 1],\n\t\t\t[19, 2],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[7, 1],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[25, 1],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[9, 1],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t$$[$0].next();\n\n\t\t\t\t\tthis.$ = $$[$0].toJSON();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = new Seq();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13:\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 14:\n\t\t\t\tcase 16:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 20:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.i($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 23:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\tcase 24:\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.bl($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\tcase 27:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 28:\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 29:\n\t\t\t\tcase 30:\n\t\t\t\tcase 31:\n\t\t\t\t\t$$[$0 - 1].tip.br($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.con($$[$0]);\n\t\t\t\t\tthis.$.next();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 33:\n\t\t\t\tcase 34:\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\t$$[$0 - 1].tip.con($$[$0]);\n\t\t\t\t\t$$[$0 - 1].next();\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 5: [2, 3], 6: 3, 7: 4, 8: 5, 9: 6, 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 10, 20: 9, 21: $V3, 22: $V4, 23: $V5, 24: [1, 7], 25: 8 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 18] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 5: [2, 4], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 22, 19: 20, 20: 21, 21: $V3, 22: $V4, 23: $V5, 24: [1, 19] },\n\t\t\t{ 5: [2, 5], 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 29, 20: 28, 21: $V3, 22: $V4, 23: $V5, 24: [1, 27] },\n\t\t\t{ 5: [2, 6], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 33, 19: 31, 20: 32, 21: $V3, 22: $V4, 23: $V5, 24: [1, 30] },\n\t\t\to($V9, [2, 20]),\n\t\t\t{ 14: 23, 15: $V6, 16: $V7, 17: $V8, 19: 35, 20: 36, 21: $V3, 22: $V4, 23: $V5, 24: [1, 34] },\n\t\t\to($V9, [2, 32]),\n\t\t\to($Va, [2, 25], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 17]),\n\t\t\to($V9, [2, 18]),\n\t\t\to($V9, [2, 19]),\n\t\t\to($Vb, [2, 13]),\n\t\t\to($Vb, [2, 7]),\n\t\t\to($Vb, [2, 8]),\n\t\t\to($Vb, [2, 9]),\n\t\t\t{ 1: [2, 1] },\n\t\t\to($V9, [2, 21]),\n\t\t\to($Vc, [2, 29], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 33]),\n\t\t\to($Va, [2, 26], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 15]),\n\t\t\to($V9, [2, 10]),\n\t\t\to($V9, [2, 11]),\n\t\t\to($V9, [2, 12]),\n\t\t\to($V9, [2, 23]),\n\t\t\to($V9, [2, 35]),\n\t\t\to($Va, [2, 27], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 24]),\n\t\t\to($Vc, [2, 31], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 36]),\n\t\t\to($Va, [2, 28], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 22]),\n\t\t\to($Vc, [2, 30], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 34]),\n\t\t\to($Vb, [2, 14]),\n\t\t\to($V9, [2, 16]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 18: [2, 1] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tclass Item {\n\t\tconstructor() {\n\t\t\tthis.id = null;\n\t\t\tthis.leftBounds = [];\n\t\t\tthis.rightBounds = [];\n\t\t\tthis.conjunction = null;\n\t\t}\n\n\t\ti(id) {\n\t\t\tthis.id = id;\n\t\t\treturn this;\n\t\t}\n\n\t\tbl(leftBounds) {\n\t\t\tthis.leftBounds = leftBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tbr(rightBounds) {\n\t\t\tthis.rightBounds = rightBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tcon(conjunction) {\n\t\t\tthis.conjunction = conjunction;\n\t\t\treturn this;\n\t\t}\n\t}\n\n\tclass Seq {\n\t\tconstructor() {\n\t\t\tthis.body = [];\n\t\t\tthis.tip = new Item();\n\t\t}\n\n\t\tnext() {\n\t\t\tthis.body.push(this.tip);\n\t\t\tthis.tip = new Item();\n\t\t\treturn this;\n\t\t}\n\n\t\ttoJSON() {\n\t\t\treturn this.body;\n\t\t}\n\t}\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 24;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([-,.\\[\\]<>{}]))/, /^(?:([a-zA-Z_0-9]+))/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\n// if (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import StaffLayout from './staffLayout';\nimport grammar from './grammar.jison';\n\nconst parseCode = (code: string): StaffLayout => {\n\tconst raw = grammar.parse(code);\n\n\treturn new StaffLayout(raw);\n};\n\nexport { parseCode };\n","//import { staffSvg } from \"@kelvinnxu/lotus\";\n\nimport { SemanticType, SemanticPoint, /*glyphSemanticMapping, glyphCenters,*/ SYSTEM_SEMANTIC_TYPES, Point } from './semanticPoint';\nimport { SimpleClass } from './aux_/typedJSON';\n\nclass SemanticGraph extends SimpleClass {\n\tstatic className = 'SemanticGraph';\n\n\tpoints: SemanticPoint[];\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\t/*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph {\n\t\tconst tokens = [].concat(...staff.measures.map(measure => measure.tokens));\n\n\t\tconst voltaRightXs = [];\n\n\t\tconst points = [];\n\t\ttokens.forEach(token => {\n\t\t\tconst def = hashTable[token.hash];\n\n\t\t\tif (token.glyph) {\n\t\t\t\tconst glyph = token.glyph as string;\n\t\t\t\tlet semantic = null;\n\n\t\t\t\tconst isKey = /^\\\\key/.test(token.source) || token.is(\"KEY\");\n\t\t\t\tlet { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 };\n\t\t\t\tif (token.scale2) {\n\t\t\t\t\tcx *= token.scale2.x;\n\t\t\t\t\tcy *= token.scale2.y;\n\t\t\t\t}\n\n\t\t\t\tlet x = token.x + cx;\n\t\t\t\tconst y = token.y + cy;\n\n\t\t\t\tswitch (glyph) {\n\t\t\t\tcase \"rests.0\":\n\t\t\t\t\tif (/^R/.test(token.source))\n\t\t\t\t\t\tsemantic = \"Rest0W\";\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Rest0\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.flat\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.natural\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.sharp\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dots.dot\":\n\t\t\t\t\tif (token.is(\"VOLTA\")) {\n\t\t\t\t\t\tx += 0.24;\t// dot glyph center X offset\n\t\t\t\t\t\tif (token.is(\"LEFT\"))\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaLeft;\n\t\t\t\t\t\telse if (token.is(\"RIGHT\")) {\n\t\t\t\t\t\t\tvoltaRightXs.push(x);\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaRight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Dot\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"zero\":\n\t\t\t\tcase \"one\":\n\t\t\t\tcase \"two\":\n\t\t\t\tcase \"three\":\n\t\t\t\tcase \"four\":\n\t\t\t\tcase \"five\":\n\t\t\t\tcase \"six\":\n\t\t\t\tcase \"seven\":\n\t\t\t\tcase \"eight\":\n\t\t\t\tcase \"nine\": {\n\t\t\t\t\tconst upper = glyph[0].toUpperCase() + glyph.substr(1);\n\t\t\t\t\tsemantic = token.is(\"TIME_SIG\") ? \"Timesig\" + upper : upper;\n\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t}\n\n\t\t\t\tif (semantic) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (token.is(\"TEMPO_NOTEHEAD\")) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.TempoNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// grace noteheads\n\t\t\t\tif (token.is(\"NOTEHEAD\") && Number.isFinite(token.scale) && token.scale < 0.75) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.GraceNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// semantic from token symbol\n\t\t\tlet semantic = null;\n\t\t\tconst cx = 0;\n\t\t\tlet cy = 0;\n\t\t\tif (token.is(\"OCTAVE\")) {\n\t\t\t\tif (token.is(\"_8\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift8;\n\t\t\t\t\tcy = token.is(\"B\") ? -0.7512 : -0.7256;\n\t\t\t\t}\n\t\t\t\telse if (token.is(\"CLOSE\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift0;\n\t\t\t\t\tcy = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (/^flags/.test(token.glyph)) {\n\t\t\t\tlet direction = 0;\n\t\t\t\tif (/\\.u\\d/.test(token.glyph))\n\t\t\t\t\tdirection = 1;\n\t\t\t\tif (/\\.d\\d/.test(token.glyph))\n\t\t\t\t\tdirection = -1;\n\t\t\t\tif (direction) {\n\t\t\t\t\tconst [n] = token.glyph.match(/\\d+/);\n\t\t\t\t\tconst flagCount = Number(n) - 2;\n\t\t\t\t\t//console.log(\"flags:\", token.glyph, flagCount);\n\t\t\t\t\tfor (let i = 0; i < flagCount; ++i) {\n\t\t\t\t\t\tconst y = token.y + (i + 0.5) * direction;\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//console.log(\"flags.1:\", token.x, y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"SLUR\")) {\n\t\t\t\tconst d = def && def.d;\n\t\t\t\tif (d) {\n\t\t\t\t\tconst numbers = d.match(/-?[\\d.]+/g).map(Number);\n\t\t\t\t\t//console.log(\"slur:\", numbers);\n\t\t\t\t\tconst x1 = token.x + numbers[0];\n\t\t\t\t\tconst y1 = token.y + numbers[1];\n\t\t\t\t\tconst x2 = token.x + numbers[6];\n\t\t\t\t\tconst y2 = token.y + numbers[7];\n\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurBegin,\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1,\n\t\t\t\t\t});\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurEnd,\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"NOTE_STEM\")) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.vline_Stem,\n\t\t\t\t\tx: token.x + def.width / 2,\n\t\t\t\t\ty: token.y,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: token.y,\n\t\t\t\t\t\ty2: token.y + token.height,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (token.is(\"TEXT\") || token.is(\"CHORD_TEXT\")) {\n\t\t\t\tif (/\\S/.test(token.text)) {\n\t\t\t\t\t// NOTE: text rect computation is delayed to sheet rendering\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\tindex: token.index,\n\t\t\t\t\t\t\ttext: token.text,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx: token.x + cx,\n\t\t\t\t\ty: token.y + cy,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// beams\n\t\tconst stems = tokens.filter(token => token.is(\"NOTE_STEM\")).map(stem => ({\n\t\t\tx: stem.x + stem.width / 2,\n\t\t\ty1: stem.y,\n\t\t\ty2: stem.y + stem.height,\n\t\t}));\n\t\tconst beams = tokens.filter(token => token.is(\"NOTETAIL\") && token.is(\"JOINT\"))\n\t\t\t.map(beam => {\n\t\t\t\tconst def = hashTable[beam.hash];\n\t\t\t\tconst points = def && def.points;\n\t\t\t\tif (points) {\n\t\t\t\t\tconst floats = points.split(\" \").map(Number);\n\t\t\t\t\tconst x1 = beam.x + floats[4];\n\t\t\t\t\tconst x2 = beam.x + floats[0];\n\t\t\t\t\tconst y1 = beam.y + (floats[5] + floats[7]) / 2;\n\t\t\t\t\tconst y2 = beam.y + (floats[1] + floats[3]) / 2;\n\t\t\t\t\tconst k = (y2 - y1) / (x2 - x1);\n\n\t\t\t\t\treturn { x1, x2, y1, y2, k, capital: beam.is(\"CAPITAL_BEAM\") };\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}).filter(Boolean);\n\t\t//console.log(\"beams:\", beams);\n\t\tbeams.forEach(beam => {\n\t\t\tconst innerStems = stems.filter(stem => stem.x > beam.x1 - 0.2 && stem.x < beam.x2 + 0.2);\n\t\t\t//console.log(\"innerStems:\", beam, innerStems);\n\n\t\t\tlet lines = 0;\n\t\t\tinnerStems.forEach(stem => {\n\t\t\t\tconst beamY = beam.y1 + (stem.x - beam.x1) * beam.k;\n\t\t\t\t//console.log(\"beamY:\", beamY, Math.min(Math.abs(beamY - beam.y1), Math.abs(beamY - beam.y2)));\n\t\t\t\tif (beamY >= stem.y1 - 0.1 && beamY <= stem.y2 + 0.1) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t});\n\n\t\t\t\t\t++lines;\n\n\t\t\t\t\t// beam semantics\n\t\t\t\t\tif (beam.capital) {\n\t\t\t\t\t\tlet semantic = SemanticType.BeamContinue;\n\t\t\t\t\t\tif (Math.abs(stem.x - beam.x1) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamLeft;\n\t\t\t\t\t\telse if (Math.abs(stem.x - beam.x2) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamRight;\n\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!lines)\n\t\t\t\tconsole.warn(\"empty beam:\", beam, innerStems, stems);\n\t\t\t//else if (lines < 2)\n\t\t\t//\tconsole.debug(\"single beam:\", beam, innerStems, stems);\n\t\t});\n\n\t\t// wedges (crescendo & decrescendo)\n\t\tconst crescendos = tokens.filter(token => token.is(\"WEDGE CRESCENDO TOP\"));\n\t\tconst crescendoBottoms = tokens.filter(token => token.is(\"WEDGE CRESCENDO BOTTOM\"));\n\t\tconst decrescendos = tokens.filter(token => token.is(\"WEDGE DECRESCENDO TOP\"));\n\t\tconst decrescendoBottoms = tokens.filter(token => token.is(\"WEDGE DECRESCENDO BOTTOM\"));\n\t\tcrescendos.forEach(line => {\n\t\t\tconst partner = crescendoBottoms.find(b => b.x === line.x && Math.abs(b.y - line.y) < 0.06);\n\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.CrescendoBegin,\n\t\t\t\t\tx: line.x,\n\t\t\t\t\ty: line.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired crescendo:\", line, crescendoBottoms);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.CrescendoEnd,\n\t\t\t\tx: line.x + line.target.x,\n\t\t\t\ty: line.y + line.target.y,\n\t\t\t});\n\t\t});\n\t\tdecrescendos.forEach(line => {\n\t\t\tconst partner = decrescendoBottoms.find(b => b.x + b.target.x === line.x + line.target.x && Math.abs(b.y + b.target.y - (line.y + line.target.y)) < 0.06);\n\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.DecrescendoBegin,\n\t\t\t\tx: line.x,\n\t\t\t\ty: line.y,\n\t\t\t});\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.DecrescendoEnd,\n\t\t\t\t\tx: line.x + line.target.x,\n\t\t\t\t\ty: line.y + line.target.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired decrescendo:\", line, decrescendoBottoms);\n\t\t});\n\n\t\t// TODO: volta alternative\n\n\t\t// measure bars\n\t\tconst measureSeparators = staff.tokens.filter(token => token.is(\"MEASURE_SEPARATOR\"));\n\t\tconst singleBars = [];\n\t\tconst groupBars = [];\n\n\t\tfor (let i = 0; i < measureSeparators.length; ++i) {\n\t\t\tconst bar = measureSeparators[i];\n\t\t\tconst nextBar = measureSeparators[i + 1];\n\t\t\tconst inteval = nextBar ? nextBar.x - bar.x : Infinity;\n\n\t\t\tif (inteval < 1) {\n\t\t\t\tgroupBars.push([bar, nextBar]);\n\t\t\t\t++i;\n\t\t\t}\n\t\t\telse\n\t\t\t\tsingleBars.push(bar);\n\t\t};\n\t\t//console.log(\"bars:\", singleBars, groupBars);\n\n\t\tsingleBars.forEach(bar => {\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx: bar.x + bar.sw / 2,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tgroupBars.forEach(group => {\n\t\t\tlet x = (group[0].x + group[1].x) / 2;\n\t\t\tconst bold0 = group[0].is(\"BOLD\");\n\t\t\tconst bold1 = group[1].is(\"BOLD\");\n\n\t\t\tlet semantic = null;\n\t\t\tif (!bold0 && bold1) {\n\t\t\t\tx = group[0].x;\n\n\t\t\t\tif (!voltaRightXs.some(vx => x - vx < 2))\n\t\t\t\t\tsemantic = SemanticType.vline_BarTerminal;\n\t\t\t}\n\t\t\telse if (bold0 && !bold1)\n\t\t\t\tx = group[1].x;\n\t\t\telse if (!bold0 && !bold1)\n\t\t\t\tsemantic = SemanticType.vline_BarSegment;\n\n\t\t\t//console.log(\"group:\", group[0].x, group[1].x, x);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx,\n\t\t\t\t\ty: 0,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: -2,\n\t\t\t\t\t\ty2: 2,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}*/\n\n\tstatic fromPoints(points: SemanticPoint[] = []): SemanticGraph {\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}\n\n\tgetLayer(semantic: SemanticType): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic);\n\t}\n\n\tgetConfidentLayer(semantic: SemanticType, threshold: number): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic && (!Number.isFinite(p.confidence) || p.confidence >= threshold));\n\t}\n\n\tgetSystemPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\tgetStaffPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => !SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\toffset(x: number, y: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x += x;\n\t\t\tpoint.y += y;\n\t\t});\n\t}\n\n\tscale(factor: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x *= factor;\n\t\t\tpoint.y *= factor;\n\t\t});\n\t}\n\n\t// multipy 3x2 matrix\n\ttransform(matrix: [number, number][]): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tlet x = point.x * matrix[0][0] + point.y * matrix[1][0] + matrix[2][0];\n\t\t\tconst y = point.x * matrix[0][1] + point.y * matrix[1][1] + matrix[2][1];\n\n\t\t\tif (point.extension) {\n\t\t\t\tif (Number.isFinite(point.extension.y1)) {\n\t\t\t\t\tconst y1 = point.x * matrix[0][1] + point.extension.y1 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tconst y2 = point.x * matrix[0][1] + point.extension.y2 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tx = point.x * matrix[0][0] + (point.extension.y1 + point.extension.y2) * 0.5 * matrix[1][0] + matrix[2][0];\n\n\t\t\t\t\tpoint.extension.y1 = y1;\n\t\t\t\t\tpoint.extension.y2 = y2;\n\t\t\t\t}\n\n\t\t\t\tif (Number.isFinite(point.extension.width)) {\n\t\t\t\t\tconst scaling = Math.sqrt(matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);\n\t\t\t\t\tpoint.extension.width *= scaling;\n\t\t\t\t\tpoint.extension.height *= scaling;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpoint.x = x;\n\t\t\tpoint.y = y;\n\t\t});\n\t}\n}\n\nexport { SemanticGraph };\n","import { SimpleClass } from './aux_/typedJSON';\nimport {\n\tAdditionalLineStack,\n\tChordColumn,\n\tChordRect,\n\tEventFeature,\n\tEventMeasureColumn,\n\tEventSystem,\n\tPageLayout,\n\tRect,\n\tSourceImageFile,\n\tTextType,\n\tVLine,\n} from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { SemanticGraph } from './semanticGraph';\nimport { hashPageSemanticPoint, hashSemanticPoint, NOTEHEAD_WIDTHS, SemanticPoint, SemanticType } from './semanticPoint';\nimport { AccessoryDirection, ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, TempoTerm, TremoloLink } from './term';\nimport {\n\tTextToken,\n\tToken,\n\tTokenAccessories,\n\tTokenBeams,\n\tTokenClefs,\n\tTokenDirectionless,\n\tTokenDots,\n\tTokenFlags,\n\tTokenNoteheads,\n\tTokenRests,\n\tTokenTimesigs,\n\tTokenType,\n\tTOKEN_Y_FIXED,\n\tTOKEN_Y_ROUND,\n} from './token';\nimport { distance2D, roundNumber, solveOverlapping, trans23 } from './utils';\n\ntype ChordsFeeder = (si: number, mi: number) => ChordColumn[];\ntype ColumnProcessor = (column: EventMeasureColumn) => EventMeasureColumn;\n\nconst CHORD_X_TOLERANCE = 0.2;\n//const EVENT_X_TOLERANCE = 0.8;\n\nconst STEM_LENGTH_MAX = 6;\n\nconst INDENT_THRESHOLD = 2;\n\nconst MEASURE_SEMANTICS = [\n\tSemanticType.ClefG,\n\tSemanticType.ClefF,\n\tSemanticType.ClefC,\n\tSemanticType.TimesigC44,\n\tSemanticType.TimesigC22,\n\tSemanticType.TimesigZero,\n\tSemanticType.TimesigOne,\n\tSemanticType.TimesigTwo,\n\tSemanticType.TimesigThree,\n\tSemanticType.TimesigFour,\n\tSemanticType.TimesigFive,\n\tSemanticType.TimesigSix,\n\tSemanticType.TimesigSeven,\n\tSemanticType.TimesigEight,\n\tSemanticType.TimesigNine,\n\tSemanticType.OctaveShift8va,\n\tSemanticType.OctaveShift8vb,\n\tSemanticType.OctaveShift0,\n\tSemanticType.Zero,\n\tSemanticType.One,\n\tSemanticType.Two,\n\tSemanticType.Three,\n\tSemanticType.Four,\n\tSemanticType.Five,\n\tSemanticType.Six,\n\tSemanticType.Seven,\n\tSemanticType.Eight,\n\tSemanticType.Nine,\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n\tSemanticType.Rest0W,\n\tSemanticType.RestM1,\n\tSemanticType.SlurBegin,\n\tSemanticType.SlurEnd,\n\tSemanticType.Dot,\n\tSemanticType.f,\n\tSemanticType.p,\n\tSemanticType.m,\n\tSemanticType.n,\n\tSemanticType.r,\n\tSemanticType.s,\n\tSemanticType.z,\n\tSemanticType.ScriptFermata,\n\tSemanticType.ScriptShortFermata,\n\tSemanticType.ScriptSforzato,\n\tSemanticType.ScriptStaccato,\n\tSemanticType.ScriptStaccatissimo,\n\tSemanticType.ScriptTurn,\n\tSemanticType.ScriptTrill,\n\tSemanticType.ScriptSegno,\n\tSemanticType.ScriptCoda,\n\tSemanticType.ScriptArpeggio,\n\tSemanticType.ScriptPrall,\n\tSemanticType.ScriptMordent,\n\tSemanticType.ScriptMarcato,\n\tSemanticType.ScriptTenuto,\n\tSemanticType.ScriptPortato,\n\tSemanticType.PedalStar,\n\tSemanticType.PedalPed,\n\tSemanticType.GraceNotehead,\n\tSemanticType.BeamLeft,\n\tSemanticType.BeamRight,\n\tSemanticType.BeamContinue,\n\tSemanticType.CrescendoBegin,\n\tSemanticType.CrescendoEnd,\n\tSemanticType.DecrescendoBegin,\n\tSemanticType.DecrescendoEnd,\n\tSemanticType.TremoloLeft,\n\tSemanticType.TremoloRight,\n\tSemanticType.TremoloMiddle,\n];\n\nconst STAFF_LINED_SEMANTICS = [\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n];\n\nconst LINED_INTERVAL_SEMANTICS = [SemanticType.SignLined, SemanticType.SignInterval];\n\nconst NOTEHEAD_FOR_STEM_SEMANTICS = [SemanticType.NoteheadS1, SemanticType.NoteheadS2];\n\nconst KEYACC_CANDIDATE_SEMANTICS = {\n\tAccSharp: TokenType.KeySharp,\n\tAccNatural: TokenType.KeyNatural,\n\tAccFlat: TokenType.KeyFlat,\n};\n\nconst NOTEHEAD_TABLE: { [key: string]: { [key: string]: SemanticType } } = {\n\t[SemanticType.NoteheadS1]: {\n\t\tup: SemanticType.NoteheadS1stemU,\n\t\tdown: SemanticType.NoteheadS1stemD,\n\t},\n\t[SemanticType.NoteheadS2]: {\n\t\tup: SemanticType.NoteheadS2stemU,\n\t\tdown: SemanticType.NoteheadS2stemD,\n\t},\n};\n\nconst REST_SEMANTICS = [\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n];\n\nconst TOKEN_TO_STEMBEAM = {\n\t[TokenType.BeamLeft]: 'Open',\n\t[TokenType.BeamRight]: 'Close',\n\t[TokenType.BeamContinue]: 'Continue',\n};\n\nconst TEXT_TYPE_ALIAS = {\n\tAlter1: TextType.Alternation1,\n\tAlter2: TextType.Alternation2,\n};\n\ninterface StaffPosition {\n\ty: number;\n\tradius: number;\n}\n\ninterface TextArea {\n\tscore: number;\n\tcx: number;\n\tcy: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\ttype: string;\n\ttheta: number;\n\tfeature_dict: Record;\n}\n\ntype Stem = VLine & { direction: 'u' | 'd' };\n\nconst noteheadsXPivot = (xs: number[], direction: 'u' | 'd' | null): number => {\n\tswitch (xs.length) {\n\t\tcase 0:\n\t\t\treturn undefined;\n\n\t\tcase 1:\n\t\t\treturn xs[0];\n\n\t\tcase 2:\n\t\t\treturn direction === 'u' ? Math.min(...xs) : Math.max(...xs);\n\n\t\tdefault: {\n\t\t\tconst mean = xs.reduce((sum, x) => sum + x, 0) / xs.length;\n\t\t\txs.sort((x1, x2) => Math.abs(x1 - mean) - Math.abs(x2 - mean));\n\n\t\t\treturn noteheadsXPivot(xs.slice(0, xs.length - 1), direction);\n\t\t}\n\t}\n};\n\nconst noteheadsPivot = (nhs: Token[]): number =>\n\tnoteheadsXPivot(\n\t\tnhs.map((nh) => (Number.isFinite(nh.pivotX) ? nh.pivotX : nh.x)),\n\t\tnhs[0].direction\n\t);\n\nclass Measure extends SimpleClass {\n\tstatic className = 'Measure';\n\tstatic blackKeys = ['tokens', 'antiTokens'];\n\n\tleft: number;\n\twidth: number;\n\theight: number;\n\n\talternative: boolean;\n\n\ttokens: Token[];\n\tantiTokens: Token[];\n\n\tbarTypes: Record;\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.tokens = this.tokens || [];\n\t\tthis.antiTokens = this.antiTokens || [];\n\t\tthis.barTypes = this.barTypes || {};\n\t}\n\n\tget right(): number {\n\t\treturn this.left + this.width;\n\t}\n\n\tget noteheads(): Token[] {\n\t\treturn this.tokens.filter((t) => t.isNotehead).sort((n1, n2) => n1.x - n2.x);\n\t}\n\n\tget chordRects(): ChordRect[] {\n\t\tconst noteheads = this.noteheads.filter((nh) =>\n\t\t\t[TokenType.NoteheadS0, TokenType.NoteheadS1stemU, TokenType.NoteheadS2stemU, TokenType.NoteheadS1stemD, TokenType.NoteheadS2stemD].includes(nh.type)\n\t\t);\n\n\t\tlet nulN = 0;\n\n\t\tconst nhmap: Record = noteheads.reduce((map, nh) => {\n\t\t\tconst tip = nh.tip ? `${nh.tip.x}|${nh.tip.y}` : `nul${nulN}`;\n\t\t\tlet key = `${nh.type}|${tip}`;\n\n\t\t\tif (!nh.tip && map[key]) {\n\t\t\t\tif (!map[key].some((hh) => Math.abs(hh.x - nh.x) < NOTEHEAD_WIDTHS.NoteheadS0)) {\n\t\t\t\t\t++nulN;\n\t\t\t\t\tkey = `${nh.type}|nul${nulN}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmap[key] = map[key] || [];\n\t\t\tmap[key].push(nh);\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(nhmap).map((nhs) => {\n\t\t\tconst left = Math.min(...nhs.map((nh) => nh.x));\n\t\t\tconst right = Math.max(...nhs.map((nh) => nh.x));\n\t\t\tconst top = Math.min(...nhs.map((nh) => nh.y));\n\t\t\tconst bottom = Math.max(...nhs.map((nh) => nh.y));\n\n\t\t\tconst nh0 = nhs[0];\n\n\t\t\tconst stemX = nh0 && nh0.tip ? nh0.tip.x : left;\n\n\t\t\tlet x = left;\n\t\t\tlet width = right - left;\n\t\t\tlet stemDirection = null;\n\n\t\t\tswitch (nh0.type) {\n\t\t\t\tcase TokenType.NoteheadS0:\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS0 / 2;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemU:\n\t\t\t\tcase TokenType.NoteheadS2stemU:\n\t\t\t\t\tstemDirection = 'u';\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS1;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemD:\n\t\t\t\tcase TokenType.NoteheadS2stemD:\n\t\t\t\t\tstemDirection = 'd';\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx,\n\t\t\t\twidth,\n\t\t\t\tstemX,\n\t\t\t\tstemDirection,\n\t\t\t\ttop,\n\t\t\t\tbottom,\n\t\t\t\ttip: nh0.tip,\n\t\t\t};\n\t\t});\n\t}\n\n\tget timeWarped(): boolean {\n\t\treturn this.tokens && this.tokens.some((token) => token.timeWarped);\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\tconst chords = this.getChords();\n\t\tconst up = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y <= -3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.ceil(Math.min(...chord.ys)) + 2,\n\t\t\t}));\n\t\tconst down = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y >= 3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.floor(Math.max(...chord.ys)) - 2,\n\t\t\t}));\n\n\t\treturn [...up, ...down].map((stack) => ({\n\t\t\tleft: stack.left - 0.28,\n\t\t\tright: stack.right + 0.28,\n\t\t\tn: stack.n,\n\t\t}));\n\t}\n\n\tgetChords(): ChordColumn[] {\n\t\tconst flags = this.tokens.filter((t) => TokenFlags.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\t\tconst beams = this.tokens.filter((t) => TokenBeams.includes(t.type));\n\n\t\tconst chordRcs = this.chordRects\n\t\t\t.map((rect) => {\n\t\t\t\tconst noteheads = this.noteheads.filter(\n\t\t\t\t\t(nh) =>\n\t\t\t\t\t\tnh.direction === rect.stemDirection &&\n\t\t\t\t\t\tnh.left >= rect.x &&\n\t\t\t\t\t\tnh.right <= rect.x + rect.width + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tnh.y >= rect.top &&\n\t\t\t\t\t\tnh.y <= rect.bottom\n\t\t\t\t);\n\t\t\t\tnoteheads.sort((n1, n2) => n2.y - n1.y);\n\t\t\t\tconst ys = noteheads.map((nh) => nh.y);\n\t\t\t\tconst noteIds = noteheads.map((nh) => nh.id);\n\n\t\t\t\tconst division = noteheads.reduce((d, nh) => Math.max(d, nh.division), 0);\n\n\t\t\t\treturn {\n\t\t\t\t\trect,\n\t\t\t\t\tleft: rect.x,\n\t\t\t\t\tright: rect.x + rect.width,\n\t\t\t\t\tpivotX: noteheadsPivot(noteheads),\n\t\t\t\t\tys,\n\t\t\t\t\ttip: rect.tip,\n\t\t\t\t\tnoteIds,\n\t\t\t\t\tdivision,\n\t\t\t\t\tdots: null,\n\t\t\t\t\trest: false,\n\t\t\t\t\tstemDirection: rect.stemDirection,\n\t\t\t\t\tbeam: null,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((c1, c2) => c2.left - c1.left);\n\n\t\tconst accs = new Set();\n\n\t\tconst chords = chordRcs.map(({ rect, ...chord }) => {\n\t\t\tif (chord.division >= 1) {\n\t\t\t\t// NOTE: notehead-s1 may have flags too\n\t\t\t\tconst flagRange = [rect.bottom, rect.top];\n\t\t\t\tswitch (rect.stemDirection) {\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\tflagRange[0] = rect.tip ? rect.tip.y - 0.2 : rect.top - STEM_LENGTH_MAX - 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tflagRange[1] = rect.tip ? rect.tip.y + 0.2 : rect.bottom + STEM_LENGTH_MAX + 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nearbyFlags = flags.filter(\n\t\t\t\t\t(flag) =>\n\t\t\t\t\t\t!accs.has(flag.id) &&\n\t\t\t\t\t\tflag.x > rect.stemX - CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.x < rect.stemX + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.y > flagRange[0] &&\n\t\t\t\t\t\tflag.y < flagRange[1]\n\t\t\t\t);\n\t\t\t\tchord.division = nearbyFlags.reduce((d, flag) => Math.max(d, flag.division), chord.division);\n\n\t\t\t\tnearbyFlags.forEach((flag) => accs.add(flag.id));\n\n\t\t\t\tif (chord.division >= 3) {\n\t\t\t\t\tconst beamToken = rect.tip && beams.find((t) => Math.abs(rect.tip.x - t.x) < 0.3 && Math.abs(rect.tip.y - t.y) < 0.7);\n\t\t\t\t\tif (beamToken) chord.beam = TOKEN_TO_STEMBEAM[beamToken.type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst nearbyDots = dots.filter(\n\t\t\t\t(dot) =>\n\t\t\t\t\t!accs.has(dot.id) &&\n\t\t\t\t\tdot.x > rect.x + rect.width - 0.2 &&\n\t\t\t\t\tdot.x < rect.x + rect.width + 1.2 &&\n\t\t\t\t\tdot.y > rect.top - 1 &&\n\t\t\t\t\tdot.y <= rect.bottom + 0.5\n\t\t\t);\n\t\t\tchord.dots = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\tnearbyDots.forEach((dot) => accs.add(dot.id));\n\n\t\t\treturn chord;\n\t\t});\n\n\t\tchords.reverse();\n\n\t\treturn chords;\n\t}\n\n\tgetRests(): ChordColumn[] {\n\t\tconst rests = this.tokens.filter((t) => TokenRests.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\n\t\treturn rests.map((rest) => {\n\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > rest.x + 0.5 && dot.x < rest.x + 2 && dot.y > rest.y - 1 && dot.y < rest.y + 0.5);\n\t\t\tconst dotValue = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\treturn {\n\t\t\t\tleft: rest.x - 0.75,\n\t\t\t\tright: rest.x + 0.75,\n\t\t\t\tpivotX: rest.x,\n\t\t\t\trest: true,\n\t\t\t\tys: [rest.y],\n\t\t\t\tnoteIds: [rest.id],\n\t\t\t\tdots: dotValue,\n\t\t\t\tdivision: rest.division,\n\t\t\t\tstemDirection: null,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\treturn [...this.getChords(), ...this.getRests()].sort((e1, e2) => e1.left - e2.left);\n\t}\n\n\tgetContexts(fields = {}): ContextedTerm[] {\n\t\treturn this.tokens\n\t\t\t.filter((t) => t.isContexted)\n\t\t\t.sort((n1, n2) => n1.x - n2.x)\n\t\t\t.map(\n\t\t\t\t(token) =>\n\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\ttokenType: token.type,\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t})\n\t\t\t);\n\t}\n\n\tassignAccessoriesOnEvents(events: ChordColumn[]): void {\n\t\tevents.forEach((event) => (event.accessories = event.accessories || []));\n\n\t\tconst accessories = this.tokens.filter((token) => TokenAccessories.includes(token.type));\n\t\t//console.log(\"accessories:\", accessories);\n\t\taccessories.forEach((accessory) => {\n\t\t\tconst relatedEvents = events.filter((event) => accessory.x > event.left - 1 && accessory.x < event.right + 1);\n\n\t\t\tif (relatedEvents.length > 0) {\n\t\t\t\tlet owner = relatedEvents[0];\n\t\t\t\tif (relatedEvents.length > 1) {\n\t\t\t\t\towner = relatedEvents\n\t\t\t\t\t\t.map((event) => ({ event, d: Math.min(...event.ys.map((y) => Math.abs(y - accessory.y))) }))\n\t\t\t\t\t\t.sort(({ d: d1 }, { d: d2 }) => d1 - d2)\n\t\t\t\t\t\t.map(({ event }) => event)[0];\n\t\t\t\t}\n\t\t\t\t//console.log(\"relatedEvents:\", accessory, owner);\n\n\t\t\t\tlet direction = accessory.y > Math.max(...owner.ys) ? AccessoryDirection.Down : AccessoryDirection.Up;\n\t\t\t\tif (TokenDirectionless.includes(accessory.type)) direction = null;\n\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: accessory.type,\n\t\t\t\t\tid: accessory.id,\n\t\t\t\t\tdirection,\n\t\t\t\t\tx: accessory.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone accessory:\", accessory.type);\n\t\t});\n\n\t\t// arpeggio\n\t\tconst sortEvents = [...events];\n\t\tsortEvents.sort((e1, e2) => e1.left - e2.left);\n\n\t\tconst arpeggios = this.tokens.filter((token) => token.type === TokenType.ScriptArpeggio);\n\t\tarpeggios.forEach((arpeggio) => {\n\t\t\tconst owner = sortEvents.find(\n\t\t\t\t(event) => arpeggio.x < event.left && event.ys.some((y) => y < arpeggio.y + 0.25) && event.ys.some((y) => y > arpeggio.y)\n\t\t\t);\n\t\t\t//const owner = sortEvents.find(event => event.left - leftMost.left < 2 && event.ys.some(y => Math.abs(y - arpeggio.y + 0.25) < 0.5));\n\t\t\tif (owner) {\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: TokenType.ScriptArpeggio,\n\t\t\t\t\tid: arpeggio.id,\n\t\t\t\t\tx: arpeggio.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone arpeggio:\", arpeggio);\n\t\t});\n\n\t\t// grace noteheads\n\t\tconst graceNhs = this.tokens.filter((token) => token.type === TokenType.GraceNotehead);\n\t\tgraceNhs.forEach((grace) => {\n\t\t\tconst event = events.find((event) => grace.x > event.left && grace.x < event.right && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tif (event) event.grace = GraceType.Grace;\n\t\t});\n\n\t\t// tremolos\n\t\tconst tremolsLs = this.tokens.filter((token) => token.type === TokenType.TremoloLeft);\n\t\tconst tremolsRs = this.tokens.filter((token) => token.type === TokenType.TremoloRight);\n\t\tconst tremolsMs = this.tokens.filter((token) => token.type === TokenType.TremoloMiddle);\n\n\t\tconst tevents = events\n\t\t\t.filter((event) => !event.rest)\n\t\t\t.map((event) => {\n\t\t\t\tconst ys = [...event.ys];\n\t\t\t\tif (event.tip) ys.push(event.tip.y);\n\t\t\t\telse {\n\t\t\t\t\tys.push(event.ys[0] + 2);\n\t\t\t\t\tys.push(event.ys[event.ys.length - 1] - 2);\n\t\t\t\t}\n\n\t\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\t\t\t\tconst stemR = event.tip ? event.tip.x : event.right;\n\n\t\t\t\treturn {\n\t\t\t\t\tevent,\n\t\t\t\t\ttop: Math.min(...ys),\n\t\t\t\t\tbottom: Math.max(...ys),\n\t\t\t\t\tstemL,\n\t\t\t\t\tstemR,\n\t\t\t\t};\n\t\t\t});\n\n\t\ttremolsMs.forEach((tm) => {\n\t\t\tconst te = tevents.find((te) => {\n\t\t\t\tif (te.event.tip) return tm.y > te.top && tm.y < te.bottom && Math.abs(tm.x - te.event.tip.x) < 0.3;\n\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t}\n\t\t});\n\t\ttremolsLs.forEach((tl) => {\n\t\t\tconst te = tevents.find((te) => tl.y > te.top && tl.y < te.bottom && tl.x > te.stemR && tl.x < te.stemR + 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Pitcher;\n\t\t\t}\n\t\t});\n\t\ttremolsRs.forEach((tr) => {\n\t\t\tconst te = tevents.find((te) => tr.y > te.top && tr.y < te.bottom && tr.x < te.stemL && tr.x > te.stemL - 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Catcher;\n\t\t\t}\n\t\t});\n\t}\n\n\tassignFeaturesOnEvents(events: ChordColumn[], semantics: SemanticPoint[]): void {\n\t\tconst points = semantics.filter((point) => point.x > this.left && point.x < this.right);\n\t\tconst rests = points.filter((point) => REST_SEMANTICS.includes(point.semantic));\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tconst dotPs = points.filter((point) => point.semantic === SemanticType.Dot);\n\t\tconst beamLs = points.filter((points) => points.semantic === SemanticType.BeamLeft);\n\t\tconst beamMs = points.filter((points) => points.semantic === SemanticType.BeamContinue);\n\t\tconst beamRs = points.filter((points) => points.semantic === SemanticType.BeamRight);\n\t\tconst gracePs = points.filter((point) => point.semantic === SemanticType.GraceNotehead);\n\t\tconst tremoloRs = points.filter((point) => point.semantic === SemanticType.TremoloRight);\n\t\tconst stems = points.filter((point) => point.semantic === SemanticType.vline_Stem);\n\t\tconst s0 = points.filter((point) => point.semantic === SemanticType.NoteheadS0);\n\t\tconst s1 = points.filter((point) => point.semantic === SemanticType.NoteheadS1);\n\t\tconst s2 = points.filter((point) => point.semantic === SemanticType.NoteheadS2);\n\n\t\tevents.forEach((event) => {\n\t\t\tconst cx = event.tip ? event.tip.x : (event.left + event.right) / 2;\n\t\t\tconst top = event.tip ? Math.min(event.tip.y, event.ys[event.ys.length - 1]) : event.ys[event.ys.length - 1];\n\t\t\tconst bottom = event.tip ? Math.max(event.tip.y, event.ys[0]) : event.ys[0];\n\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\n\t\t\tconst divisions = [0, 0, 0, 0, 0, 0, 0];\n\t\t\tif (event.rest) {\n\t\t\t\tconst i_rests = rests.filter((point) => distance2D(point, { x: cx, y: event.ys[0] }) < 0.5);\n\t\t\t\ti_rests.forEach((r) => {\n\t\t\t\t\tconst d = REST_SEMANTICS.indexOf(r.semantic);\n\t\t\t\t\tdivisions[d] = Math.max(divisions[d], r.confidence);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst nhs = [s0, s1, s2]\n\t\t\t\t\t.map((ss) => ss.filter((nh) => nh.x > event.left && nh.x < event.right && nh.y > top - 0.25 && nh.y < bottom + 0.25))\n\t\t\t\t\t.map((ss) => Math.max(0, ...ss.map((nh) => nh.confidence)));\n\n\t\t\t\tconst i_flags = flags.filter((flag) => flag.y > top - 0.2 && flag.y < bottom + 0.2 && Math.abs(flag.x - cx) < 0.2);\n\t\t\t\ti_flags.sort((f1, f2) => f2.confidence - f1.confidence);\n\n\t\t\t\tdivisions[0] = nhs[0];\n\t\t\t\tdivisions[1] = nhs[1];\n\t\t\t\tdivisions[2] = nhs[2];\n\t\t\t\tArray(divisions.length - 3)\n\t\t\t\t\t.fill(0)\n\t\t\t\t\t.forEach((_, i) => (divisions[3 + i] = i_flags[i] ? i_flags[i].confidence : 0));\n\t\t\t}\n\n\t\t\tconst i_dots = dotPs.filter((dot) => dot.x > cx && dot.x < event.right + 2.6);\n\t\t\tconst dots2 = i_dots.filter((dot) => i_dots.some((d) => dot.x > d.x && Math.abs(dot.y - d.y) < 0.2));\n\t\t\tconst dots = [Math.max(0, ...i_dots.map((dot) => dot.confidence)), Math.max(0, ...dots2.map((dot) => dot.confidence))];\n\n\t\t\tconst beams = [beamLs, beamMs, beamRs]\n\t\t\t\t.map((bs) => bs.filter((b) => Math.abs(b.x - cx) < 0.2 && b.y > top - 0.2 && b.y < bottom + 0.2))\n\t\t\t\t.map((bs) => Math.max(0, ...bs.map((b) => b.confidence)));\n\n\t\t\tconst u_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[0] }, { x: stem.x, y: stem.extension.y2 }) < 0.5);\n\t\t\tconst d_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[event.ys.length - 1] }, { x: stem.x, y: stem.extension.y1 }) < 0.5);\n\t\t\tconst stemDirections = [Math.max(0, ...u_stems.map((stem) => stem.confidence)), Math.max(0, ...d_stems.map((stem) => stem.confidence))];\n\n\t\t\tconst graces = gracePs.filter((grace) => Math.abs(grace.x - cx) < 0.6 && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tconst grace = Math.max(0, ...graces.map((grace) => grace.confidence));\n\n\t\t\tconst tremolos =\n\t\t\t\tevent.division === 0\n\t\t\t\t\t? tremoloRs.filter((tremolo) => tremolo.x > event.left - 2 && tremolo.x < event.right)\n\t\t\t\t\t: tremoloRs.filter((tremolo) => tremolo.y > top - 0.04 && tremolo.y < bottom + 0.04 && tremolo.x > stemL - 2 && tremolo.x < stemL);\n\t\t\tconst tremoloCatcher = Math.max(0, ...tremolos.map((tremolo) => tremolo.confidence));\n\n\t\t\tevent.feature = {\n\t\t\t\tdivisions,\n\t\t\t\tdots,\n\t\t\t\tbeams,\n\t\t\t\tstemDirections,\n\t\t\t\tgrace,\n\t\t\t\ttremoloCatcher,\n\t\t\t} as EventFeature;\n\t\t});\n\t}\n}\n\nclass Staff extends SimpleClass {\n\tstatic className = 'Staff';\n\tstatic blackKeys = ['index', 'semanticTop', 'semanticBttom'];\n\n\tindex?: number; // staff index in full staff layout\n\n\t// in units\n\ttop: number;\n\theight: number;\n\tstaffY: number;\n\n\tsemanticTop: number;\n\tsemanticBottom: number;\n\n\tbackgroundImage: string | Buffer;\n\tmaskImage: string | Buffer;\n\timagePosition: Rect;\n\n\tmeasures: Measure[];\n\n\tsemantics: SemanticPoint[];\n\n\tconstructor({ measureCount = null, measureBars = null, ...data }: Record = {}) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.height = this.height || 10;\n\t\tthis.staffY = this.staffY || 5;\n\n\t\tif (measureBars) {\n\t\t\tlet left = 0;\n\t\t\tthis.measures = measureBars.map((endX) => {\n\t\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\t\tleft = endX;\n\n\t\t\t\treturn measure;\n\t\t\t});\n\t\t} else if (measureCount)\n\t\t\tthis.measures = Array(measureCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Measure());\n\t\telse this.measures = [];\n\t}\n\n\t// relative to staffY\n\tget noteRange(): { top: number; bottom: number } {\n\t\tconst noteheads: Token[] = [].concat(...this.measures.map((measure) => measure.noteheads));\n\t\tconst ys = noteheads.map((note) => note.y);\n\t\tconst top = Math.min(-2, ...ys);\n\t\tconst bottom = Math.max(2, ...ys);\n\n\t\treturn { top, bottom };\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\treturn [].concat(...this.measures.map((measure) => measure.additionalLines));\n\t}\n\n\trearrangeMeasures(measureBars: number[]): void {\n\t\tif (!measureBars.length) {\n\t\t\tconsole.warn('rearrangeMeasures error, measureBars are empty.');\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokens = this.measures?.map((measure) => measure.tokens).flat(1) || [];\n\n\t\tlet left = 0;\n\t\tthis.measures = measureBars.map((endX) => {\n\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\tleft = endX;\n\n\t\t\treturn measure;\n\t\t});\n\n\t\tthis.reassignTokens(tokens);\n\t}\n\n\treassignTokens(tokens: Token[] = null): void {\n\t\tif (!tokens) tokens = [].concat(...this.measures.map((measure) => measure.tokens));\n\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\n\t\ttokens.forEach((token) => {\n\t\t\tfor (const measure of this.measures) {\n\t\t\t\tif (token.x < measure.right) {\n\t\t\t\t\tmeasure.tokens.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tassignSemantics(graph: SemanticGraph): void {\n\t\tthis.semantics = graph.getStaffPoints();\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, system: System, logger: Logger = new DummyLogger()): void {\n\t\tif (!this.semantics) return;\n\n\t\tlet points = system.qualifiedSemantics(this.semantics, threshold);\n\t\tpoints = solveOverlapping(points);\n\n\t\t// tempo noteheads\n\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t//console.log(\"temponh:\", tempoNh, index, points[index]);\n\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t// TODO: construct tempo term\n\t\t});\n\n\t\tconst antiP = (id: string): SemanticPoint | null => {\n\t\t\tif (system.displacementSemantics?.[id]) return this.semantics.find((p) => p.id === id);\n\n\t\t\treturn null;\n\t\t};\n\n\t\tpoints.filter((point) => MEASURE_SEMANTICS.includes(point.semantic)).forEach((point) => this.appendPoint(point, { points }));\n\n\t\t// noteheads with stem from noteheads & stems\n\t\tconst stems: Stem[] = points\n\t\t\t.filter((point) => point.semantic === SemanticType.vline_Stem)\n\t\t\t.filter((stem) => stem.extension.y2 - stem.extension.y1 > 1.5) // exclude too short stems\n\t\t\t.map((p) => ({\n\t\t\t\tx: p.x,\n\t\t\t\ty1: p.extension.y1,\n\t\t\t\ty2: p.extension.y2,\n\t\t\t\tdirection: null,\n\t\t\t}));\n\t\tconst noteheads = points.filter(\n\t\t\t(point) => NOTEHEAD_FOR_STEM_SEMANTICS.includes(point.semantic) && point.y > this.semanticTop && point.y < this.semanticBottom\n\t\t);\n\t\tconst rootNhs = new Set();\n\n\t\t// for 2nd degree chord notes\n\t\tconst nhOffsetX = (nh: SemanticPoint, stem: Stem, down: boolean): number => {\n\t\t\tif ((down ? 1 : 0) ^ (nh.x < stem.x ? 1 : 0)) return 0;\n\n\t\t\tconst offset = NOTEHEAD_WIDTHS[nh.semantic];\n\n\t\t\treturn down ? -offset : offset;\n\t\t};\n\n\t\t// find root noteheads on stem\n\t\tstems.forEach((stem) => {\n\t\t\tconst attachedHeads = noteheads.filter(\n\t\t\t\t(nh) =>\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 < 0.32 &&\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 > -0.44 && // for grace noteheads, more close to their stem\n\t\t\t\t\tnh.y > stem.y1 - 0.5 &&\n\t\t\t\t\tnh.y < stem.y2 + 0.5 &&\n\t\t\t\t\t!(nh.x > stem.x && nh.y > stem.y2) &&\n\t\t\t\t\t!(nh.x < stem.x && nh.y < stem.y1)\n\t\t\t);\n\t\t\t//if (stem.x===102.0625 && stem.y2===1.875)\n\t\t\t//\tdebugger;\n\t\t\tif (attachedHeads.length) {\n\t\t\t\tattachedHeads.sort((n1, n2) => n1.y - n2.y);\n\n\t\t\t\tconst topDist = Math.min(...attachedHeads.map((nh) => nh.y - stem.y1));\n\t\t\t\tconst bottomDist = Math.min(...attachedHeads.map((nh) => stem.y2 - nh.y));\n\t\t\t\tif (Math.min(topDist, bottomDist) > 0.5) return; // no root notehead on this stem\n\n\t\t\t\tconst down = topDist < bottomDist;\n\t\t\t\tstem.direction = down ? 'd' : 'u';\n\n\t\t\t\tif (!down) attachedHeads.reverse();\n\t\t\t\tconst root = attachedHeads[0];\n\n\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[root.semantic].down : NOTEHEAD_TABLE[root.semantic].up;\n\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: root.id,\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx: stem.x + nhOffsetX(root, stem, down),\n\t\t\t\t\t\ty: root.y,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tconfidence: root.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\tantiPoint: antiP(root.id),\n\t\t\t\t\t\tpoints,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\trootNhs.add(root.id);\n\t\t\t}\n\t\t});\n\n\t\t// non-root noteheads\n\t\tnoteheads\n\t\t\t.filter((nh) => !rootNhs.has(nh.id))\n\t\t\t.forEach((nh) => {\n\t\t\t\tconst nearStems = stems\n\t\t\t\t\t.filter((stem) => Math.abs(stem.x - nh.x) < 2 && nh.y > stem.y1 && nh.y < stem.y2)\n\t\t\t\t\t.sort((s1, s2) => Math.abs(s1.x - nh.x) - Math.abs(s2.x - nh.x));\n\t\t\t\tconst stem = nearStems[0];\n\t\t\t\tif (stem) {\n\t\t\t\t\tconst down = stem.direction === 'd';\n\t\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[nh.semantic].down : NOTEHEAD_TABLE[nh.semantic].up;\n\n\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: nh.id,\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x + nhOffsetX(nh, stem, down),\n\t\t\t\t\t\t\ty: nh.y,\n\t\t\t\t\t\t\tpivotX: nh.x,\n\t\t\t\t\t\t\tconfidence: nh.confidence,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\t\tantiPoint: antiP(nh.id),\n\t\t\t\t\t\t\tpoints,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else logger.debug('isolated notehead:', system.index, this.index, nh);\n\t\t\t});\n\n\t\t// group flags\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tflags.sort((f1, f2) => f1.x - f2.x);\n\t\tthis.appendFlags(flags, stems);\n\n\t\t// group dots\n\t\tconst dots = points\n\t\t\t.filter((point) => point.semantic === SemanticType.Dot)\n\t\t\t.map((dot) => {\n\t\t\t\tconst y = roundNumber(dot.y, 0.5);\n\t\t\t\treturn { x: dot.x, y };\n\t\t\t});\n\t\tconst dotLines: { [key: number]: SemanticPoint[] } = dots.reduce((table, dot) => {\n\t\t\ttable[dot.y] = table[dot.y] || [];\n\t\t\ttable[dot.y].push(dot);\n\t\t\treturn table;\n\t\t}, {});\n\t\tObject.entries(dotLines).forEach(([sy, line]) => {\n\t\t\tconst y = Number(sy);\n\t\t\tif (line.length > 1) {\n\t\t\t\tline.sort((d1, d2) => d1.x - d2.x);\n\t\t\t\tfor (let i = 0; i < line.length - 1; i++) {\n\t\t\t\t\tconst dot = line[i];\n\t\t\t\t\tif (line.find((d) => d.x > dot.x && d.x - dot.x < 1.2)) {\n\t\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: dot.id,\n\t\t\t\t\t\t\t\tx: dot.x,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tconfidence: dot.confidence,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: TokenType.DotDot, antiPoint: antiP(dot.id), points }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// pair key accidentals\n\t\tconst keyaccs = points.filter((point) => point.semantic === SemanticType.KeyAcc);\n\t\tconst accs = points.filter((point) => KEYACC_CANDIDATE_SEMANTICS[point.semantic]);\n\t\taccs.forEach((acc) => {\n\t\t\tif (keyaccs.some((key) => Math.abs(acc.x - key.x) < 0.5 && Math.abs(acc.y - key.y) < 1)) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: acc.id,\n\t\t\t\t\t\tsemantic: acc.semantic,\n\t\t\t\t\t\tx: acc.x,\n\t\t\t\t\t\ty: acc.y,\n\t\t\t\t\t\tconfidence: acc.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{ type: KEYACC_CANDIDATE_SEMANTICS[acc.semantic], points }\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// octave shift heads\n\t\tconst octs = points.filter((point) => point.semantic === SemanticType.OctaveShift8);\n\t\tocts.forEach((oct) => {\n\t\t\tconst type = oct.y < 0 ? TokenType.OctaveShift8va : TokenType.OctaveShift8vb;\n\t\t\tthis.appendPoint(\n\t\t\t\t{\n\t\t\t\t\tid: oct.id,\n\t\t\t\t\tx: oct.x,\n\t\t\t\t\ty: oct.y,\n\t\t\t\t\tconfidence: oct.confidence,\n\t\t\t\t},\n\t\t\t\t{ type, points }\n\t\t\t);\n\t\t});\n\n\t\t// group volta dots\n\t\tconst voltaDots = this.semantics.filter((point) => [SemanticType.VoltaLeft, SemanticType.VoltaRight].includes(point.semantic));\n\t\tvoltaDots.sort((d1, d2) => d1.x - d2.x);\n\t\tconst voltaGroups: Record> = voltaDots.reduce(\n\t\t\t(groups, dot) => {\n\t\t\t\tconst group = groups[dot.semantic];\n\t\t\t\tconst xs = Array.from(Object.keys(group)).map(Number);\n\t\t\t\tconst x = xs.find((x) => dot.x < x + 0.2) || dot.x;\n\n\t\t\t\tgroup[x] = groups[dot.semantic][x] || [];\n\t\t\t\tgroup[x].push(dot);\n\n\t\t\t\treturn groups;\n\t\t\t},\n\t\t\t{ [SemanticType.VoltaLeft]: {}, [SemanticType.VoltaRight]: {} }\n\t\t);\n\t\tfor (const [type, group] of Object.entries(voltaGroups)) {\n\t\t\tObject.values(group).forEach((dots) => {\n\t\t\t\tif (dots.length > 1) {\n\t\t\t\t\tconst confidence = dots.reduce((sum, dot) => sum + dot.confidence, 0);\n\t\t\t\t\tif (dots[0].y * dots[1].y < 0 && confidence >= threshold * 2) this.appendPoint(dots[0], { type: TokenType[type] });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tappendPoint(\n\t\tpoint: Partial,\n\t\t{ type, points = null, antiPoint, ...fields }: { type?: TokenType; antiPoint?: SemanticPoint; [key: string]: any } = {}\n\t): void {\n\t\t//console.log(\"appendPoint.0:\", point, point.x, point.y);\n\t\tconst x = point.x;\n\t\tconst measure = this.measures.find((measure) => x < measure.left + measure.width);\n\t\tif (!measure)\n\t\t\t// drop tokens out of measures range\n\t\t\treturn;\n\n\t\t// lined or interval\n\t\tlet lined = false;\n\t\tlet interval = false;\n\t\tif (STAFF_LINED_SEMANTICS.includes(point.semantic)) {\n\t\t\tconsole.assert(points, 'argument of points for this semantic is required:', point.semantic);\n\t\t\tconst signs = points.filter((p) => LINED_INTERVAL_SEMANTICS.includes(p.semantic) && Math.abs(p.y - point.y) < 0.2 && Math.abs(p.x - point.x) < 1.2);\n\t\t\tif (signs.some((s) => s.semantic === SemanticType.SignLined)) lined = true;\n\t\t\telse if (signs.some((s) => s.semantic === SemanticType.SignInterval)) interval = true;\n\t\t}\n\n\t\ttype = type || TokenType[point.semantic];\n\t\tconst fixedY = TOKEN_Y_FIXED[type];\n\t\tlet roundY = TOKEN_Y_ROUND[type];\n\n\t\tif (lined || interval) roundY = Math.max(roundY, 1);\n\n\t\tlet y = point.y;\n\t\tif (Number.isFinite(fixedY)) y = fixedY;\n\t\telse if (roundY) {\n\t\t\tif (interval) y = roundNumber(y + 0.5, roundY) - 0.5;\n\t\t\telse y = roundNumber(y, roundY);\n\t\t}\n\t\t//if (lined || interval)\n\t\t//\tconsole.log(\"round sign:\", point.semantic, y, lined, interval);\n\n\t\tconst holder = measure.tokens.find((token) => token.type === type && Math.abs(token.x - x) < 0.1 && Math.abs(token.y - y) < 0.1);\n\t\tif (holder) {\n\t\t\tif (Number.isFinite(holder.confidence) && holder.confidence < point.confidence) {\n\t\t\t\tholder.x = x;\n\t\t\t\tholder.y = y;\n\t\t\t\tholder.confidence = point.confidence;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// exlude clef out of pitch range\n\t\tif (TokenClefs.includes(type)) {\n\t\t\tif (Math.abs(y) > 3) return;\n\t\t}\n\n\t\t// TODO: exclude overlapped pair by a token prior table\n\n\t\tmeasure.tokens.push(\n\t\t\tnew Token({\n\t\t\t\tid: point.id,\n\t\t\t\ttype,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tpivotX: point.pivotX,\n\t\t\t\tconfidence: point.confidence,\n\t\t\t\t...fields,\n\t\t\t})\n\t\t);\n\n\t\tif (antiPoint) {\n\t\t\tmeasure.antiTokens.push(\n\t\t\t\tnew Token({\n\t\t\t\t\tid: antiPoint.id,\n\t\t\t\t\ttype,\n\t\t\t\t\tx,\n\t\t\t\t\ty: antiPoint.y,\n\t\t\t\t\tconfidence: antiPoint.confidence,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}\n\n\tappendFlags(flags: SemanticPoint[], stems: Stem[]): void {\n\t\t//console.log(\"flags:\", flags);\n\t\tconst stemGroups = stems\n\t\t\t.map((stem) => ({\n\t\t\t\t...stem,\n\t\t\t\tflags: flags.filter((flag) => Math.abs(flag.x - stem.x) < 0.3 && flag.y > stem.y1 - 0.5 && flag.y < stem.y2 + 0.5),\n\t\t\t}))\n\t\t\t.filter((group) => group.flags.length);\n\n\t\tstemGroups.forEach((group) => {\n\t\t\tconst mainFlag = group.flags.reduce((main, flag) => (main && main.confidence > flag.confidence ? main : flag), null);\n\n\t\t\t//const upDistance = mainFlag.y - group.y1;\n\t\t\t//const downDistance = group.y2 - mainFlag.y;\n\t\t\t//const downward = downDistance < upDistance;\n\t\t\tconst downward = group.direction === 'd';\n\n\t\t\tconst tailY = downward ? Math.min(group.y2, group.y1 + STEM_LENGTH_MAX) : Math.max(group.y1, group.y2 - STEM_LENGTH_MAX);\n\n\t\t\tconst flagTips = group.flags.map((flag) => ({\n\t\t\t\ttip: (tailY - flag.y) * (downward ? 1 : -1),\n\t\t\t\tconfidence: flag.confidence,\n\t\t\t}));\n\t\t\tconst count = flagTips.filter((f) => f.tip < 2 || f.confidence > mainFlag.confidence * 0.7).length;\n\n\t\t\tconst type = TokenFlags[count - 1];\n\t\t\tif (type) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: group.flags[0].id,\n\t\t\t\t\t\tx: group.x,\n\t\t\t\t\t\ty: tailY,\n\t\t\t\t\t\tconfidence: Math.min(...group.flags.map((flag) => flag.confidence)),\n\t\t\t\t\t},\n\t\t\t\t\t{ type }\n\t\t\t\t);\n\t\t\t\t//console.log(\"flag:\", type);\n\t\t\t}\n\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\t\tthis.semantics = [];\n\t}\n\n\tclearPredictedTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = measure.tokens.filter((token) => !token.isPredicted)));\n\t}\n}\n\nclass System extends SimpleClass {\n\tstatic className = 'System';\n\tstatic blackKeys = ['index', 'pageIndex', 'prev', 'next', 'headMeasureIndex', 'tokens', 'indent'];\n\n\tindex?: number;\n\tpageIndex?: number;\n\tprev?: System;\n\tnext?: System;\n\theadMeasureIndex?: number; // zero based\n\n\t// in units\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\tindent: boolean;\n\n\tmeasureCount: number;\n\tstaves: Staff[];\n\n\tmeasureBars: number[];\n\n\tbackgroundImage: string;\n\timagePosition: Rect;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tsidBlackList: string[];\n\tsidWhiteList: string[];\n\n\tdisplacementSemantics?: { [id: string]: Partial };\n\n\tstaffMaskChanged: number;\n\tbracketsAppearance: string; // the staff layout code by prediction\n\n\tconstructor({ stavesCount, ...fields }: any) {\n\t\tsuper();\n\t\tsuper.assign(fields);\n\n\t\tif (!this.measureBars) {\n\t\t\tconst HEAD_WIDTH = 5;\n\t\t\tconst segmentLength = (this.width - HEAD_WIDTH) / this.measureCount;\n\t\t\tthis.measureBars = Array(this.measureCount)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => HEAD_WIDTH + segmentLength * (i + 1));\n\t\t}\n\n\t\tif (!fields.staves && stavesCount)\n\t\t\tthis.staves = Array(stavesCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Staff({ measureBars: this.measureBars }));\n\n\t\tthis.arrangePosition();\n\n\t\tthis.measureCount = this.measureCount || this.measureBars.length;\n\n\t\tthis.sidBlackList = this.sidBlackList || [];\n\t\tthis.sidWhiteList = this.sidWhiteList || [];\n\t}\n\n\tget noteRange(): { top: number; bottom: number } {\n\t\tif (!this.staves.length) return null;\n\n\t\tconst staffTop = this.staves[0];\n\t\tconst staffBottom = this.staves[this.staves.length - 1];\n\n\t\treturn {\n\t\t\ttop: staffTop.top + staffTop.staffY + staffTop.noteRange.top,\n\t\t\tbottom: staffBottom.top + staffBottom.staffY + staffBottom.noteRange.bottom,\n\t\t};\n\t}\n\n\tget staffPositions(): StaffPosition[] {\n\t\treturn this.staves.map((staff) => ({\n\t\t\ty: staff.top + staff.staffY,\n\t\t\tradius: 2,\n\t\t}));\n\t}\n\n\tget staffMask(): number {\n\t\tif (this.staffMaskChanged) return this.staffMaskChanged;\n\n\t\tif (this.prev && this.staves.length === this.prev.staves.length) return this.prev.staffMask;\n\n\t\treturn 2 ** this.staves.length - 1;\n\t}\n\n\tget staffTop(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[0].y - positions[0].radius : 0;\n\t}\n\n\tget staffBottom(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[positions.length - 1].y + positions[positions.length - 1].radius : 0;\n\t}\n\n\tarrangePosition(): void {\n\t\tlet y = 0;\n\t\tfor (const staff of this.staves) {\n\t\t\tif (Number.isFinite(staff.top)) break;\n\n\t\t\tstaff.top = y;\n\t\t\ty += staff.height;\n\t\t}\n\t}\n\n\ttidyMeasureBars(): void {\n\t\tthis.measureBars = this.measureBars.filter((x) => x > 1);\n\t\tthis.measureBars.sort((b1, b2) => b1 - b2);\n\n\t\tconst restWidth = this.width - this.measureBars[this.measureBars.length - 1];\n\t\tif (restWidth > 12) this.measureBars.push(this.width);\n\t\telse if (restWidth < 2) this.measureBars[this.measureBars.length - 1] = this.width;\n\n\t\tthis.measureBars = this.measureBars.filter((x, i) => i < 1 || x - this.measureBars[i - 1] > 4);\n\t}\n\n\trearrangeMeasures(): void {\n\t\tthis.measureCount = this.measureBars.length;\n\t\tthis.staves.forEach((staff) => staff.rearrangeMeasures(this.measureBars));\n\t}\n\n\tget height(): number {\n\t\treturn this.staves.reduce((height, staff) => height + staff.height, 0);\n\t}\n\n\tget connectionLine(): { top: number; bottom: number } {\n\t\tconst staffHead = this.staves[0];\n\t\tconst staffTail = this.staves[this.staves.length - 1];\n\n\t\treturn (\n\t\t\tstaffHead && {\n\t\t\t\ttop: staffHead.top + staffHead.staffY - 2,\n\t\t\t\tbottom: staffTail.top + staffTail.staffY + 2,\n\t\t\t}\n\t\t);\n\t}\n\n\tget middleY(): number {\n\t\tif (!this.staves.length) return 0;\n\n\t\tconst sum = this.staves.reduce((sum, staff) => sum + staff.top + staff.staffY, 0);\n\n\t\treturn sum / this.staves.length;\n\t}\n\n\tget timeSignatureOnHead(): boolean {\n\t\treturn this.staves.some((staff) => staff.measures[0]?.tokens.some((token) => TokenTimesigs.includes(token.type)));\n\t}\n\n\t// an array staff or null on every position of full staff layout\n\tgetStaffArray(stavesCount: number): Staff[] {\n\t\tlet si = 0;\n\n\t\treturn Array(stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, i) => {\n\t\t\t\tconst on = this.staffMask & (1 << i);\n\t\t\t\tconst staff = on ? this.staves[si++] : null;\n\t\t\t\tconsole.assert(!on || staff, 'system staves count is less than staff mask declared:', this.staves.length, this.staffMask.toString(2));\n\n\t\t\t\treturn staff;\n\t\t\t});\n\t}\n\n\t// measureIndex: the local measure index\n\tgetMarksInMeasure(measureIndex: number): MarkTerm[] {\n\t\tconsole.assert(measureIndex < this.measureBars.length, 'measure index out of range:', measureIndex, this.measureBars.length);\n\n\t\tconst left = measureIndex > 0 ? this.measureBars[measureIndex - 1] : 0;\n\t\tconst right = this.measureBars[measureIndex];\n\n\t\tconst tempoTokens = (this.tokens ?? []).filter(\n\t\t\t(token) => token.x >= left && token.x < right && token instanceof TextToken && token.textType === TextType.TempoNumeral\n\t\t) as TextToken[];\n\n\t\treturn [...tempoTokens.map((token) => TempoTerm.fromNumeralText(token.text)).filter(Boolean)];\n\t}\n\n\tgetEvents(stavesCount: number): EventSystem {\n\t\tconsole.assert(Number.isInteger(this.headMeasureIndex), 'invalid headMeasureIndex:', this.headMeasureIndex);\n\n\t\t// Empty system (no measureBars / no staves with measures): return empty result\n\t\tif (!this.measureBars?.length && this.staves.every((s) => !s.measures?.length)) {\n\t\t\treturn { staffMask: this.staffMask, columns: [] };\n\t\t}\n\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => {\n\t\t\t\tconst events = measure.getEvents();\n\t\t\t\tmeasure.assignAccessoriesOnEvents(events);\n\t\t\t\tmeasure.assignFeaturesOnEvents(events, staff.semantics);\n\n\t\t\t\treturn {\n\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t\tcontexts: measure.getContexts({ staff: staff.index }),\n\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts?.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (row[mi] && !row[mi].contexts.length && !row[mi].events.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//onst measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: this.getMarksInMeasure(i),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i]?.voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i]?.voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row[i]?.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i]?.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\t\t//columns.forEach(computeMeasureTicks);\n\n\t\t// assign id on column events\n\t\tcolumns.forEach((column) => {\n\t\t\tconst events = [].concat(...column.rows.filter(Boolean).map((row) => row.events));\n\t\t\tevents.forEach((event, i) => (event.id = i + 1));\n\t\t});\n\n\t\tconst lastColumn = columns[columns.length - 1];\n\t\tif (lastColumn) lastColumn.break = true;\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tgetEventsFunctional(stavesCount: number, ev: ChordsFeeder, processors: ColumnProcessor[] = [], { useXMap = false } = {}): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff, si) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure, mi) => {\n\t\t\t\tconst events = ev(si, mi);\n\n\t\t\t\treturn (\n\t\t\t\t\tevents && {\n\t\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcontexts: measure.getContexts({ staff: si }),\n\t\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\t// [measure, staff]\n\t\tconst columns: EventMeasureColumn[] = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => {\n\t\t\t\tconst localRows = rows.map((row) => row[mi]);\n\t\t\t\tif (localRows.some((row) => !row)) return null;\n\n\t\t\t\tlet xMap: Map = null;\n\t\t\t\tif (useXMap) {\n\t\t\t\t\tconst events: EventTerm[] = [].concat(...localRows.map((row) => row.events));\n\t\t\t\t\tconst groupMap: { [group: number]: EventTerm[] } = events.reduce((map, event) => {\n\t\t\t\t\t\tif (Number.isFinite(event.tickGroup)) map[event.tickGroup] = map[event.tickGroup] || [];\n\t\t\t\t\t\tmap[event.tickGroup].push(event);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, {});\n\n\t\t\t\t\txMap = Object.values(groupMap).reduce((map, events) => {\n\t\t\t\t\t\tconst x = Math.min(...events.map((event) => (event.left + event.right) / 2));\n\t\t\t\t\t\tmap.set(x, events);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, new Map());\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + mi,\n\t\t\t\t\t//startX: measureStartXs[mi],\n\t\t\t\t\t//width: measureWidths[mi],\n\t\t\t\t\trows: localRows, // [staff]\n\t\t\t\t\tmarks: this.getMarksInMeasure(mi),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\txMap,\n\t\t\t\t\tvoltaBegin: localRows.some((row) => row.voltaBegin),\n\t\t\t\t\tvoltaEnd: localRows.some((row) => row.voltaEnd),\n\t\t\t\t\talternative: localRows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: localRows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\tprocessors.forEach((proc) => columns.forEach(proc));\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\t// get EventSystem contains only contexted terms\n\tgetContexts(stavesCount: number): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: null,\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => ({\n\t\t\t\tevents: null,\n\t\t\t\tcontexts: measure.getContexts(),\n\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t}));\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (!row[mi].contexts.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: [],\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i].voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i].voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i].barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tassignSemantics(staffIndex: number, graph: SemanticGraph): void {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff is null:', staffIndex, this.staves);\n\t\tconst oy = staff.top + staff.staffY;\n\n\t\tgraph.getSystemPoints().forEach((point) => {\n\t\t\tconst p = { ...point };\n\t\t\tp.y += oy;\n\n\t\t\tif (p.extension) {\n\t\t\t\tp.extension = { ...p.extension };\n\t\t\t\tif (Number.isFinite(p.extension.y1)) {\n\t\t\t\t\tp.extension.y1 += oy;\n\t\t\t\t\tp.extension.y2 += oy;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.semantics.push(p);\n\t\t});\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, logger: Logger = new DummyLogger()): void {\n\t\t//console.log(\"System.assignSemantics:\", graph);\n\t\tthis.measureBars = [];\n\n\t\tif (!this.semantics) return;\n\n\t\tconst graph = SemanticGraph.fromPoints(this.semantics);\n\n\t\tconst bars = graph.getConfidentLayer(SemanticType.vline_BarMeasure, threshold);\n\t\tbars.sort((b1, b2) => b1.x - b2.x);\n\n\t\tconst staffTop = this.staffTop;\n\t\tconst staffBottom = this.staffBottom;\n\n\t\tconst MERGE_WINDOW = 0.4;\n\t\tlet lastX = 0;\n\t\tconst barColumns: { [key: number]: number } = bars.reduce((columns, bar) => {\n\t\t\tconst confidence = Number.isFinite(bar.confidence) ? Math.tanh(bar.confidence) : 1;\n\n\t\t\tconst x = bar.x - lastX > MERGE_WINDOW ? bar.x : lastX;\n\t\t\tlastX = bar.x;\n\t\t\tlet intensity = columns[x] || 0;\n\t\t\tintensity += (Math.min(bar.extension.y2, staffBottom) - Math.max(bar.extension.y1, staffTop)) * confidence;\n\n\t\t\tif (bar.x !== x) delete columns[x];\n\t\t\tcolumns[bar.x] = intensity;\n\n\t\t\treturn columns;\n\t\t}, {});\n\t\tconst barXs: number[] = Object.entries(barColumns)\n\t\t\t.filter(([x, intensity]) => (void x, intensity > 3 * this.staves.length))\n\t\t\t.map(([x]) => Number(x));\n\t\t// Include bar positions from whitelisted semantic points\n\t\tif (this.sidWhiteList.length) {\n\t\t\tfor (const bar of bars) {\n\t\t\t\tif (this.sidWhiteList.includes((bar as SemanticPoint).id) && !barXs.some((x) => Math.abs(x - bar.x) <= 2)) {\n\t\t\t\t\tbarXs.push(bar.x);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbarXs.sort((x1, x2) => x1 - x2);\n\t\tbarXs.forEach((x, i) => {\n\t\t\tif (i <= 0 || x - barXs[i - 1] > 2) this.measureBars.push(x);\n\t\t});\n\n\t\tif (!this.measureBars.length) this.measureBars.push(this.width);\n\n\t\tthis.tidyMeasureBars();\n\t\tthis.rearrangeMeasures();\n\n\t\t// measure bar type\n\t\tconst typeBars = this.semantics.filter((point) => [SemanticType.vline_BarTerminal, SemanticType.vline_BarSegment].includes(point.semantic));\n\t\ttypeBars.forEach((bar) => {\n\t\t\tconst measure = this.staves[0].measures.find((measure) => bar.x > measure.right - 2 && bar.x < measure.right + 1);\n\t\t\tif (measure) {\n\t\t\t\tconst type = bar.semantic.replace(/^vline_Bar/, '');\n\t\t\t\tmeasure.barTypes[type] = measure.barTypes[type] || 0;\n\t\t\t\tmeasure.barTypes[type] += bar.confidence;\n\t\t\t}\n\t\t});\n\n\t\tlet staffIndex = 0;\n\t\tconst staffMask = this.staffMask;\n\t\tthis.staves.forEach((staff, si) => {\n\t\t\t// staff index\n\t\t\twhile (!(staffMask & (1 << staffIndex))) ++staffIndex;\n\t\t\tstaff.index = staffIndex++;\n\n\t\t\t// assign semantic boundaries\n\t\t\tif (si === 0) staff.semanticTop = -staff.staffY;\n\t\t\telse {\n\t\t\t\tconst prevStaff = this.staves[si - 1];\n\t\t\t\tstaff.semanticTop = prevStaff.top + prevStaff.staffY + 3 - (staff.top + staff.staffY);\n\t\t\t}\n\n\t\t\tif (si < this.staves.length - 1) {\n\t\t\t\tconst nextStaff = this.staves[si + 1];\n\t\t\t\tstaff.semanticBottom = nextStaff.top + nextStaff.staffY - 3 - (staff.top + staff.staffY);\n\t\t\t} else staff.semanticBottom = this.height - (staff.top + staff.staffY);\n\n\t\t\tif (staff.semantics && staff.semantics.length) {\n\t\t\t\tstaff.semantics.forEach((point) => hashSemanticPoint(this.index, si, point));\n\n\t\t\t\tstaff.clearPredictedTokens();\n\t\t\t\tstaff.assemble(threshold, this, logger);\n\t\t\t}\n\t\t});\n\t}\n\n\tqualifiedSemantics(semantics: SemanticPoint[], threshold: number = 1): SemanticPoint[] {\n\t\treturn semantics\n\t\t\t.filter(\n\t\t\t\t(p) => this.sidWhiteList.includes(p.id) || (!this.sidBlackList.includes(p.id) && (p.confidence >= threshold || !Number.isFinite(p.confidence)))\n\t\t\t)\n\t\t\t.map((point) => {\n\t\t\t\t// displace semantic point\n\t\t\t\tif (this.displacementSemantics && this.displacementSemantics[point.id]) return { ...point, ...this.displacementSemantics[point.id] };\n\n\t\t\t\treturn point;\n\t\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.staves.forEach((staff) => staff.clearTokens());\n\t\tthis.semantics = [];\n\t}\n\n\tnewPoint(staffIndex: number, data: SemanticPoint, threshold: number = 1): SemanticPoint {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff index out of bound:', staffIndex, this.staves.length);\n\n\t\tconst { semantic, x, y, confidence = 0, extension = null } = data;\n\t\tconst point = { semantic, x, y, confidence, extension };\n\t\tif (!point.extension) delete point.extension;\n\n\t\thashSemanticPoint(this.index, staffIndex, point);\n\t\tstaff.semantics.push(point);\n\t\tstaff.clearPredictedTokens();\n\t\tstaff.assemble(threshold, this);\n\n\t\treturn point;\n\t}\n\n\tappendToken(token: TextToken): void {\n\t\tthis.tokens.push(token);\n\n\t\tswitch (token.textType) {\n\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t{\n\t\t\t\t\t// remove noteheads in text area\n\t\t\t\t\tconst staff = this.staves[0];\n\t\t\t\t\tif (staff) {\n\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\t\t\t\t\t\tstaff.measures.forEach((measure) => {\n\t\t\t\t\t\t\tmeasure.tokens = measure.tokens.filter(\n\t\t\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t\t\t!TokenNoteheads.includes(t.type) ||\n\t\t\t\t\t\t\t\t\tMath.abs(t.x - token.x) > token.width / 2 ||\n\t\t\t\t\t\t\t\t\tMath.abs(oy + t.y - token.y) > token.fontSize / 2\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase TextType.Alternation1:\n\t\t\tcase TextType.Alternation2:\n\t\t\t\t//console.log(\"appendToken:\", token, this.staves[0].measures);\n\t\t\t\tthis.staves[0].measures.forEach((measure) => {\n\t\t\t\t\tconst overlap = Math.min(measure.left + measure.width, token.x + token.width / 2) - Math.max(measure.left, token.x - token.width / 2);\n\t\t\t\t\tmeasure.alternative = measure.alternative || overlap / measure.width > 0.5;\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nclass Page extends SimpleClass {\n\tstatic className = 'Page';\n\tstatic blackKeys = ['index', 'tokens'];\n\n\tindex?: number;\n\n\t// in units\n\twidth: number;\n\theight: number;\n\n\tsystems: System[];\n\n\tsource: SourceImageFile;\n\tlayout?: PageLayout;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.systems = this.systems || [];\n\n\t\tif (this.source) {\n\t\t\tthis.source.matrix = this.source.matrix || [1, 0, 0, 1, 0, 0];\n\t\t}\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tclearTokens(): void {\n\t\tthis.semantics = null;\n\t\tthis.tokens = null;\n\n\t\tthis.systems.forEach((system) => (system.tokens = null));\n\t}\n\n\tassignTexts(areas: TextArea[], [imageHeight, imageWidth]: [number, number]): void {\n\t\tconst interval = this.source && this.source.interval ? this.source.interval * (imageHeight / this.source.dimensions.height) : imageHeight / this.height;\n\n\t\tthis.semantics = areas.map((area) => {\n\t\t\tconst p = {\n\t\t\t\tx: (area.cx - imageWidth / 2) / interval,\n\t\t\t\ty: (area.cy - imageHeight / 2) / interval,\n\t\t\t};\n\t\t\tconst rp = this.source && this.source.matrix ? trans23(p, this.source.matrix) : p;\n\n\t\t\treturn {\n\t\t\t\tconfidence: area.score,\n\t\t\t\tx: rp.x + this.width / 2,\n\t\t\t\ty: rp.y + this.height / 2,\n\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\textension: {\n\t\t\t\t\ttext: area.text,\n\t\t\t\t\ttype: area.type,\n\t\t\t\t\twidth: area.width / interval,\n\t\t\t\t\theight: area.height / interval,\n\t\t\t\t\ttheta: area.theta,\n\t\t\t\t\ttextFeature: area.feature_dict,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tassemble({ textAnnotations = null }: { textAnnotations?: { [id: string]: string } } = {}, logger: Logger = new DummyLogger()): void {\n\t\tthis.tokens = [];\n\t\tthis.systems.forEach((system) => (system.tokens = []));\n\n\t\t// compute system indent\n\t\tif (this.systems.length) {\n\t\t\tconst sysXs = this.systems.map((system) => system.left);\n\t\t\tconst middleX = sysXs[Math.floor((sysXs.length - 1) / 2)];\n\t\t\tthis.systems.forEach((system) => (system.indent = system.left > middleX + INDENT_THRESHOLD));\n\t\t}\n\n\t\tif (this.semantics) {\n\t\t\tconst pageName = this.source ? this.source.name : this.index.toString();\n\n\t\t\tthis.semantics.forEach((point) => {\n\t\t\t\thashPageSemanticPoint(pageName, point);\n\n\t\t\t\tconst fields = {\n\t\t\t\t\tid: point.id,\n\t\t\t\t\ttype: TokenType.Text,\n\t\t\t\t\tconfidence: point.confidence,\n\t\t\t\t\ttextType: TEXT_TYPE_ALIAS[point.extension.type] || point.extension.type,\n\t\t\t\t\ttext: (textAnnotations && textAnnotations[point.id]) || point.extension.text,\n\t\t\t\t\ttextFeasure: point.extension.textFeature,\n\t\t\t\t\twidth: point.extension.width,\n\t\t\t\t\tfontSize: point.extension.height,\n\t\t\t\t};\n\n\t\t\t\tswitch (point.semantic) {\n\t\t\t\t\tcase SemanticType.rect_Text:\n\t\t\t\t\t\tswitch (fields.textType) {\n\t\t\t\t\t\t\t// page tokens\n\t\t\t\t\t\t\tcase TextType.Title:\n\t\t\t\t\t\t\tcase TextType.Author:\n\t\t\t\t\t\t\tcase TextType.PageMargin:\n\t\t\t\t\t\t\tcase TextType.Other:\n\t\t\t\t\t\t\t\tthis.tokens.push(\n\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\tx: point.x,\n\t\t\t\t\t\t\t\t\t\ty: point.y,\n\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens on the top of system\n\t\t\t\t\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t\t\t\tcase TextType.Chord:\n\t\t\t\t\t\t\tcase TextType.MeasureNumber:\n\t\t\t\t\t\t\tcase TextType.Instrument:\n\t\t\t\t\t\t\tcase TextType.Alternation1:\n\t\t\t\t\t\t\tcase TextType.Alternation2:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = this.systems.find((system) => system.top + system.staffTop > point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tsystem.appendToken(\n\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\tx: point.x - system.left,\n\t\t\t\t\t\t\t\t\t\t\t\ty: point.y - system.top,\n\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens in staff\n\t\t\t\t\t\t\tcase TextType.TextualMark:\n\t\t\t\t\t\t\tcase TextType.Times:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = [...this.systems].reverse().find((system) => system.top < point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tconst sy = point.y - (system.top + system.staffTop);\n\t\t\t\t\t\t\t\t\t\tconst sx = point.x - system.left;\n\t\t\t\t\t\t\t\t\t\tconst staff = system.staves.find((staff) => sy >= staff.top && sy < staff.top + staff.height);\n\t\t\t\t\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\t\t\t\t\tconst measure = staff.measures.find((measure) => sx >= measure.left && sx < measure.left + measure.width);\n\t\t\t\t\t\t\t\t\t\t\tif (measure) {\n\t\t\t\t\t\t\t\t\t\t\t\tmeasure.tokens.push(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx: sx,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty: sy,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport { Measure, Staff, System, Page };\n","import { ChordColumn, Fraction } from './interfaces';\nimport { GraceType } from './term';\nimport { roundNumber } from './utils';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum SemanticElementType {\n\tBOS,\n\tPAD,\n\n\tNoteheadS0,\n\tNoteheadS1,\n\tNoteheadS2,\n\tNoteheadGrace,\n\tvline_Stem,\n\tFlag3,\n\tBeamLeft,\n\tBeamContinue,\n\tBeamRight,\n\tDot,\n\tRest0,\n\tRest1,\n\tRest2,\n\tRest3,\n\tRest4,\n\tRest5,\n\tRest6,\n\n\t// measure time signature denominators & numerators\n\tTimeD2,\n\tTimeD4,\n\tTimeD8,\n\tTimeN1,\n\tTimeN2,\n\tTimeN3,\n\tTimeN4,\n\tTimeN5,\n\tTimeN6,\n\tTimeN7,\n\tTimeN8,\n\tTimeN9,\n\tTimeN10,\n\tTimeN11,\n\tTimeN12,\n}\n\nconst TIME_SIG_DENOMINATORS = Object.fromEntries([2, 4, 8].map((n) => [n, SemanticElementType[`TimeD${n}`]]));\nconst TIME_SIG_NUMERATORS = Object.fromEntries(\n\tArray(12)\n\t\t.fill(null)\n\t\t.map((_, i) => i + 1)\n\t\t.map((n) => [n, SemanticElementType[`TimeN${n}`]])\n);\n\nconst et = SemanticElementType;\n\nconst ELEMENT_TOKEN_NAMES = {\n\t[et.BOS]: 'BOS',\n\t[et.NoteheadS0]: 'noteheads-s0',\n\t[et.NoteheadS1]: 'noteheads-s1',\n\t[et.NoteheadS2]: 'noteheads-s2',\n\t[et.NoteheadGrace]: 'GraceNotehead',\n\t[et.Flag3]: 'flags-u3',\n\t[et.BeamLeft]: 'BeamLeft',\n\t[et.BeamContinue]: 'BeamContinue',\n\t[et.BeamRight]: 'BeamRight',\n\t[et.Dot]: 'dot',\n\t[et.Rest0]: 'rests-0o',\n\t[et.Rest1]: 'rests-1o',\n\t[et.Rest2]: 'rests-2',\n\t[et.Rest3]: 'rests-3',\n\t[et.Rest4]: 'rests-4',\n\t[et.Rest5]: 'rests-5',\n\t[et.Rest6]: 'rests-6',\n};\n\nconst NOTEHEAD_BASE_DIVISION = {\n\t[et.NoteheadS0]: 0,\n\t[et.NoteheadS1]: 1,\n\t[et.NoteheadS2]: 2,\n\t[et.NoteheadGrace]: 2,\n};\n\nconst NOTEHEAD_ELEMENT_TYPES = [et.NoteheadS0, et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace];\n\nconst REST_ELEMENT_TYPES = [et.Rest0, et.Rest1, et.Rest2, et.Rest3, et.Rest4, et.Rest5, et.Rest6];\n\nconst BEAM_ELEMENT_TYPES = [et.BeamLeft, et.BeamContinue, et.BeamRight];\n\nconst NOTE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES];\n\nconst SOURCE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES, et.vline_Stem];\n\nconst TARGET_ELEMENT_TYPES = [et.BOS, et.NoteheadS0, et.vline_Stem, ...REST_ELEMENT_TYPES];\n\nconst ROOT_NOTE_ELEMENT_TYPES = [...NOTE_ELEMENT_TYPES, et.vline_Stem];\n\nconst ELEMENT_TO_STEMBEAM = {\n\t[et.BeamLeft]: 'Open',\n\t[et.BeamRight]: 'Close',\n};\n\ninterface SemanticElement {\n\ttype: SemanticElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\n\tindex?: number;\n\ttick?: number;\n\tid?: string;\n}\n\ntype Matrix = number[][];\n\nconst metaElem = (type: SemanticElementType): SemanticElement => ({\n\ttype,\n\tstaff: -1,\n\tx: 0,\n\ty1: 0,\n\ty2: 0,\n});\n\nconst BOS_ELEMENT = metaElem(SemanticElementType.BOS);\n\nconst fractionToElems = (fraction: Fraction): SemanticElement[] => [\n\tmetaElem(TIME_SIG_NUMERATORS[fraction.numerator]),\n\tmetaElem(TIME_SIG_DENOMINATORS[fraction.denominator]),\n];\n\nconst argmax = (data: number[], mask: boolean[]): number => {\n\tconst values = data.filter((_, i) => mask[i]);\n\tconst max = Math.max(...values);\n\n\treturn data.findIndex((x) => x === max);\n};\n\nclass SemanticCluster extends SimpleClass {\n\tindex?: number;\n\n\telements: SemanticElement[];\n\tmatrixH?: Matrix; // matrix N x N\n\t_matrixV?: Matrix; // matrix N x N\n\tgroupsV?: number[][]; // ids array\n\tmasks?: [boolean[], boolean[], boolean[]]; // the masks for: [jointer source, jointer target, V]\n\n\tstatic elementToJSON(elem: SemanticElement): object {\n\t\tconst result: any = {\n\t\t\ttype: elem.type,\n\t\t\tstaff: elem.staff,\n\t\t\tx: elem.x,\n\t\t\ty1: elem.y1,\n\t\t\ty2: elem.y2,\n\t\t};\n\n\t\tif (elem.id) result.id = elem.id;\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget sourceMask(): boolean[] {\n\t\treturn this.elements.map((elem) => SOURCE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget targetMask(): boolean[] {\n\t\treturn this.elements.map((elem) => TARGET_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget vMask(): boolean[] {\n\t\treturn this.elements.map((elem) => ROOT_NOTE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget compactMatrixH(): Matrix {\n\t\tif (!this.matrixH) return null;\n\n\t\tconst sourceMask = this.sourceMask;\n\t\tconst targetMask = this.targetMask;\n\n\t\treturn this.matrixH.filter((_, i) => sourceMask[i]).map((row) => row.filter((_, j) => targetMask[j]));\n\t}\n\n\tset compactMatrixH(value: Matrix) {\n\t\tthis.matrixH = expandMatrixByMasks([].concat(...value), [this.sourceMask, this.targetMask]);\n\t}\n\n\tget compactMatrixV(): number[] {\n\t\tif (!this._matrixV) return null;\n\n\t\tconst vMask = this.vMask;\n\n\t\tconst matrix = this._matrixV.filter((_, i) => vMask[i]).map((row) => row.filter((_, j) => vMask[j]));\n\n\t\treturn [].concat(...matrix.map((row, i) => row.slice(0, i)));\n\t}\n\n\tset compactMatrixV(value: number[]) {\n\t\tthis.matrixV = value && expandMatrixByMaskTriu(value, this.vMask);\n\t}\n\n\tget matrixV(): Matrix {\n\t\treturn this.groupsV && matrixFromGroups(this.elements.length, this.groupsV);\n\t}\n\n\tset matrixV(value: Matrix) {\n\t\tif (!value) {\n\t\t\tthis.groupsV = null;\n\t\t\tthis._matrixV = value;\n\t\t\treturn;\n\t\t}\n\n\t\tconst THRESHOLD = 0.5;\n\n\t\tconst groups: number[][] = [];\n\t\tconst vMask = value.map((row, i) => row.some(Number.isFinite) || value.some((row) => Number.isFinite(row[i])));\n\n\t\tvalue.forEach((row, i) => {\n\t\t\tif (vMask[i]) {\n\t\t\t\tlet found = false;\n\n\t\t\t\tfor (let j = 0; j < i; ++j) {\n\t\t\t\t\tconst cell = row[j];\n\t\t\t\t\tif (cell >= THRESHOLD) {\n\t\t\t\t\t\tconst g = groups.findIndex((group) => group.includes(j));\n\t\t\t\t\t\tgroups[g].push(i);\n\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!found) groups.push([i]);\n\t\t\t}\n\t\t});\n\n\t\tthis.groupsV = groups;\n\t\tthis._matrixV = value;\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\t__prototype: 'SemanticCluster',\n\t\t\tindex: this.index,\n\t\t\telements: this.elements.map(SemanticCluster.elementToJSON),\n\t\t\tcompactMatrixH: this.compactMatrixH,\n\t\t\tcompactMatrixV: this.compactMatrixV,\n\t\t\t//groupsV: this.groupsV,\n\t\t};\n\t}\n\n\tstatic mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][] {\n\t\tconst rows = x2i.reduce((rows, i, x) => {\n\t\t\tif (rows[i]) rows[i] = rows[i].map((v, xi) => (v + matrix[x][xi] ? 1 : 0));\n\t\t\telse rows[i] = matrix[x];\n\n\t\t\treturn rows;\n\t\t}, [] as number[][]);\n\n\t\treturn rows.map((row) => i2x.map((x) => row[x]));\n\t}\n\n\tmergeOverlapping() {\n\t\tconst overlaps = this.overlappedNoteheads();\n\t\tif (overlaps.length) {\n\t\t\tconst x2i = this.elements.map((_, index) => {\n\t\t\t\tconst pair = overlaps.find((ij) => index === ij[1]);\n\t\t\t\tconst i = pair ? pair[0] : index;\n\n\t\t\t\treturn i - overlaps.filter((ij) => ij[1] < i).length;\n\t\t\t});\n\t\t\tconst i2x = Array(this.elements.length - overlaps.length)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, i) => x2i.findIndex((ii) => ii === i));\n\n\t\t\tthis.elements = i2x.map((x) => this.elements[x]);\n\t\t\tconsole.assert(this.elements.every(Boolean), 'null element found:', this, x2i, i2x);\n\n\t\t\tthis.matrixH = SemanticCluster.mapMatrix(this.matrixH, x2i, i2x);\n\t\t\tthis.groupsV = this.groupsV.map((group) => Array.from(new Set(group.map((x) => x2i[x]))));\n\t\t}\n\t}\n\n\toverlappedNoteheads(): [number, number][] {\n\t\tconst indices = [];\n\n\t\tconst noteheads = this.elements.filter((elem) => NOTEHEAD_ELEMENT_TYPES.includes(elem.type));\n\t\tfor (let i = 0; i < noteheads.length; ++i) {\n\t\t\tconst nh1 = noteheads[i];\n\t\t\tfor (let j = i + 1; j < noteheads.length; ++j) {\n\t\t\t\tconst nh2 = noteheads[j];\n\t\t\t\tif ((nh1.x - nh2.x) * (nh1.x - nh2.x) + (nh1.y1 - nh2.y1) * (nh1.y1 - nh2.y1) < 0.2 ** 2) indices.push([nh1.index, nh2.index]);\n\t\t\t}\n\t\t}\n\n\t\treturn indices;\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\tconsole.assert(this.matrixH, '[SemanticCluster.getEvents]\tmatrixH is null.');\n\n\t\tconst NOTE_STEM_CONFIDENCE = 0.5;\n\n\t\tconst ids = Array(this.elements.length)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => index);\n\n\t\tconst targetMask = this.masks ? this.masks[1] : ids.map((id) => TARGET_ELEMENT_TYPES.includes(this.elements[id].type));\n\n\t\t//const stems = ids.filter(i => this.elements[i].type === et.vline_Stem);\n\t\tconst stemMasks = ids.map((id) => this.elements[id].type === et.vline_Stem && this.elements[id].y2 - this.elements[id].y1 > 2); // TODO: sift out too short stems by rectification model\n\t\tconst stemNotes = ids.filter((i) => [et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace].includes(this.elements[i].type));\n\t\tconst s0s = ids.filter((i) => this.elements[i].type === et.NoteheadS0);\n\t\tconst subS0Masks = ids.map(() => false);\n\n\t\t// root elements: top NoteheadS0, Rests, stem with noteheads\n\t\tconst stemMap: { [stem: number]: number[] } = {};\n\t\tstemNotes.forEach((id) => {\n\t\t\tconst note = this.elements[id];\n\t\t\tconst stems = ids\n\t\t\t\t.filter((i) => stemMasks[i])\n\t\t\t\t.filter((stemId) => this.elements[stemId].y1 - 0.5 < note.y1 && this.elements[stemId].y2 + 0.5 > note.y1) // filter by stem Y range\n\t\t\t\t.sort((i1, i2) => this.matrixH[id][i2] - this.matrixH[id][i1]) // sort by confidence\n\t\t\t\t.slice(0, 2)\n\t\t\t\t.filter((i, ii) => ii === 0 || this.matrixH[id][i] >= NOTE_STEM_CONFIDENCE);\n\t\t\tstems.forEach((stem) => {\n\t\t\t\tstemMap[stem] = stemMap[stem] || [];\n\t\t\t\tstemMap[stem].push(id);\n\t\t\t});\n\t\t});\n\n\t\ts0s.forEach((id) => {\n\t\t\tconst s0 = this.elements[id];\n\t\t\tconst prevId = argmax(this.matrixH[id], targetMask);\n\t\t\tconst prev = this.elements[prevId];\n\t\t\tif (prev.type === et.NoteheadS0 && Math.abs(s0.x - prev.x) < 2.6) {\n\t\t\t\tsubS0Masks[id] = true;\n\t\t\t\tstemMap[prevId] = stemMap[prevId] || [prevId];\n\t\t\t\tstemMap[prevId].push(id);\n\t\t\t} else stemMap[id] = stemMap[id] || [id];\n\t\t});\n\n\t\t// setup linkings\n\t\tconst linkings: { [key: number]: number } = {};\n\n\t\tconst roots = ids.filter((id) => stemMap[id] || REST_ELEMENT_TYPES.includes(this.elements[id].type));\n\t\troots.sort((i1, i2) => this.elements[i1].x - this.elements[i2].x); // traverse roots from left to right later\n\n\t\tconst parentMasks = ids.map((id) => id === et.BOS);\n\t\troots.forEach((id) => {\n\t\t\tconst parentId = argmax(this.matrixH[id], parentMasks);\n\t\t\tlinkings[id] = parentId;\n\n\t\t\tif (parentId && !REST_ELEMENT_TYPES.includes(this.elements[parentId].type)) parentMasks[parentId] = false;\n\n\t\t\tparentMasks[id] = true;\n\t\t});\n\t\t//console.log(\"topology:\", stemMap, linkings);\n\n\t\tconst dots = this.elements.filter((elem) => elem.type === et.Dot);\n\t\tconst flags = this.elements.filter((elem) => elem.type === et.Flag3);\n\t\tconst beams = this.elements.filter((elem) => BEAM_ELEMENT_TYPES.includes(elem.type));\n\n\t\tconst groupsV = this.groupsV;\n\n\t\treturn roots\n\t\t\t.map((rootId): ChordColumn => {\n\t\t\t\tconst root = this.elements[rootId];\n\n\t\t\t\tconst tickGroup = groupsV ? groupsV.findIndex((group) => group.includes(rootId)) : null;\n\n\t\t\t\tif (REST_ELEMENT_TYPES.includes(root.type)) {\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > root.x + 0.5 && dot.x < root.x + 0.75 + 1.2 && dot.y1 > root.y1 - 1 && dot.y1 < root.y1);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft: root.x - 0.75,\n\t\t\t\t\t\tright: root.x + 0.75,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\trest: true,\n\t\t\t\t\t\tys: [root.y1],\n\t\t\t\t\t\tnoteIds: [root.id],\n\t\t\t\t\t\tdots: nearbyDots.length,\n\t\t\t\t\t\tdivision: root.type - et.Rest0,\n\t\t\t\t\t\tstemDirection: null,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: root.staff,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t} else if (stemMap[rootId]) {\n\t\t\t\t\tconst subNotes = stemMap[rootId].map((id) => this.elements[id]);\n\t\t\t\t\tconst left = Math.min(...subNotes.map((n) => n.x - 0.7));\n\t\t\t\t\tconst right = Math.max(...subNotes.map((n) => n.x + 0.7));\n\t\t\t\t\tsubNotes.sort((n1, n2) => n2.y1 - n1.y1);\n\n\t\t\t\t\tconst ys = subNotes.map((note) => note.y1);\n\n\t\t\t\t\tconst noteIds = subNotes.map((note) => note.id);\n\n\t\t\t\t\tconst top = ys[0];\n\t\t\t\t\tconst bottom = ys[ys.length - 1];\n\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > right && dot.x < right + 1.2 && dot.y1 > top - 1 && dot.y1 < bottom + 0.5);\n\t\t\t\t\tconst dotGroups: { [key: number]: SemanticElement[] } = nearbyDots.reduce((groups, dot) => {\n\t\t\t\t\t\tconst y = roundNumber(dot.y1, 0.5);\n\t\t\t\t\t\tgroups[y] = groups[y] || [];\n\t\t\t\t\t\tgroups[y].push(dot);\n\n\t\t\t\t\t\treturn groups;\n\t\t\t\t\t}, {});\n\t\t\t\t\tconst dotValue = Math.max(...Object.values(dotGroups).map((group) => group.length), 0);\n\n\t\t\t\t\tlet division = NOTEHEAD_BASE_DIVISION[subNotes[0].type];\n\n\t\t\t\t\tlet stemDirection = null;\n\t\t\t\t\tlet beam: string = null;\n\t\t\t\t\tlet tip = null;\n\t\t\t\t\tif (root.type === et.vline_Stem) {\n\t\t\t\t\t\tconst topTip = top - root.y1;\n\t\t\t\t\t\tconst bottomTip = root.y2 - bottom;\n\t\t\t\t\t\tstemDirection = topTip > bottomTip ? 'u' : 'd';\n\n\t\t\t\t\t\ttip = { x: root.x, y: stemDirection === 'u' ? root.y1 : root.y2 };\n\n\t\t\t\t\t\tif (division === 2) {\n\t\t\t\t\t\t\tconst flagRange = stemDirection === 'u' ? [root.y1 - 0.4, root.y2 - 1] : [root.y1 + 1, root.y2 + 0.4];\n\t\t\t\t\t\t\tconst nearbyFlags = flags.filter((flag) => Math.abs(flag.x - root.x) < 0.2 && flag.y1 > flagRange[0] && flag.y1 < flagRange[1]);\n\t\t\t\t\t\t\tdivision += nearbyFlags.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//const tipY = stemDirection === \"u\" ? root.y1 : root.y2;\n\t\t\t\t\t\tconst tipRange = stemDirection === 'u' ? [root.y1 - 0.2, root.y1 + 0.9] : [root.y2 - 0.9, root.y2 + 0.2];\n\t\t\t\t\t\tconst beamElem = beams.find((beam) => Math.abs(beam.x - root.x) < 0.2 && beam.y1 > tipRange[0] && beam.y1 < tipRange[1]);\n\t\t\t\t\t\tbeam = beamElem ? ELEMENT_TO_STEMBEAM[beamElem.type] : null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst grace = subNotes[0].type === SemanticElementType.NoteheadGrace ? GraceType.Grace : null;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tright,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tys,\n\t\t\t\t\t\ttip,\n\t\t\t\t\t\tnoteIds,\n\t\t\t\t\t\tdivision,\n\t\t\t\t\t\tdots: dotValue,\n\t\t\t\t\t\trest: false,\n\t\t\t\t\t\tstemDirection,\n\t\t\t\t\t\tbeam,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: subNotes[0].staff,\n\t\t\t\t\t\tgrace,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n}\n\ninterface SemanticClusterSetData {\n\tvocab?: string[];\n\tclusters: SemanticCluster[];\n}\n\nclass SemanticClusterSet {\n\tclusters: SemanticCluster[];\n\n\tconstructor(data?: SemanticClusterSetData) {\n\t\tif (data) {\n\t\t\tthis.clusters = data.clusters;\n\n\t\t\t// upgrade vocab\n\t\t\tif (data.vocab) {\n\t\t\t\tconst converts = data.vocab\n\t\t\t\t\t.map((name, i) => [i, SemanticElementType[name]])\n\t\t\t\t\t.filter(([x, y]) => x !== y)\n\t\t\t\t\t.reduce((table, [x, y]) => ((table[x] = y), table), {});\n\t\t\t\tthis.clusters.forEach((connection) =>\n\t\t\t\t\tconnection.elements.forEach((elem) => {\n\t\t\t\t\t\tif (Number.isFinite(converts[elem.type])) elem.type = converts[elem.type];\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoJSON() {\n\t\tconst vocab = Object.entries(SemanticElementType)\n\t\t\t.filter((entry) => Number.isFinite(entry[1]))\n\t\t\t.map((entry) => entry[0]);\n\n\t\treturn {\n\t\t\t__prototype: 'SemanticClusterSet',\n\t\t\tvocab,\n\t\t\tclusters: this.clusters.map((c) => c.toJSON()),\n\t\t};\n\t}\n}\n\nconst expandMatrixByMasks = (matrix: number[], masks: [boolean[], boolean[]]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\tconst [maskSrc, maskTar] = masks;\n\n\treturn maskSrc.map((src) => maskTar.map((tar) => (src && tar ? iter.next().value : null)));\n};\n\nconst expandMatrixByMaskTriu = (matrix: number[], mask: boolean[]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\treturn mask.map((row, i) => mask.map((column, j) => (row && column && j < i ? iter.next().value : null)));\n};\n\nconst matrixFromGroups = (len: number, groups: number[][]): Matrix => {\n\tconst groupIds = Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) => groups.findIndex((group) => group.includes(i)));\n\n\treturn Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) =>\n\t\t\tArray(len)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tif (j >= i) return null;\n\n\t\t\t\t\tconst id1 = groupIds[i];\n\t\t\t\t\tconst id2 = groupIds[j];\n\n\t\t\t\t\tif (id1 < 0 || id2 < 0) return null;\n\n\t\t\t\t\treturn id1 === id2 ? 1 : 0;\n\t\t\t\t})\n\t\t);\n};\n\nexport {\n\tSemanticElementType,\n\tSemanticElement,\n\tSemanticCluster,\n\tSemanticClusterSet,\n\tELEMENT_TOKEN_NAMES,\n\tNOTEHEAD_ELEMENT_TYPES,\n\tNOTE_ELEMENT_TYPES,\n\tBOS_ELEMENT,\n\tfractionToElems,\n\texpandMatrixByMasks,\n\texpandMatrixByMaskTriu,\n\tmatrixFromGroups,\n};\n","import { MusicNotation } from '@k-l-lambda/music-widgets';\n\n// implicit note (from expressive marks) types\nenum ImplicitType {\n\tNone = 0,\n\n\tMordent = 'mordent',\n\tPrall = 'prall',\n\tTurn = 'turn',\n\tTrill = 'trill',\n\tTremolo = 'tremolo',\n\tArpeggio = 'arpeggio',\n}\n\ninterface ChordPosition {\n\tindex: number;\n\tcount: number;\n}\n\nclass TokenPosition {\n\tsystem?: number;\n\tmeasure?: number;\n\tx: number;\n\tendX?: number;\n}\n\ninterface Note extends MusicNotation.Note {\n\tchordPosition?: ChordPosition;\n\tmeasure?: number;\n}\n\ninterface Notation {\n\tnotes: Note[];\n\tendTick: number;\n}\n\ninterface SheetPosition {\n\tsystem: number;\n\tx: number;\n}\n\nexport { ChordPosition, ImplicitType, TokenPosition, Note, Notation, SheetPosition };\n","\n/* Wrapper for accessing buffer through sequential reads */\n\n\n\nmodule.exports = class Stream {\n\tconstructor (buffer) {\n\t\tthis.array = new Uint8Array(buffer);\n\t\tthis.position = 0;\n\t}\n\n\n\teof () {\n\t\treturn this.position >= this.array.length;\n\t}\n\n\n\tread (length) {\n\t\tconst result = this.array.slice(this.position, this.position + length);\n\t\tthis.position += length;\n\n\t\treturn result;\n\t}\n\n\n\treadString (length) {\n\t\tconst data = Array.from(this.read(length));\n\n\t\treturn data.map(c => String.fromCharCode(c)).join(\"\");\n\t}\n\n\n\t// read a big-endian 32-bit integer\n\treadInt32 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 24) +\n\t\t\t(this.array[this.position + 1] << 16) +\n\t\t\t(this.array[this.position + 2] << 8) +\n\t\t\tthis.array[this.position + 3]);\n\t\tthis.position += 4;\n\n\t\treturn result;\n\t}\n\n\n\t// read a big-endian 16-bit integer\n\treadInt16 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 8) +\n\t\t\tthis.array[this.position + 1]);\n\t\tthis.position += 2;\n\n\t\treturn result;\n\t}\n\n\n\t// read an 8-bit integer\n\treadInt8 (signed) {\n\t\tlet result = this.array[this.position];\n\t\tif (signed && result > 127)\n\t\t\tresult -= 256;\n\t\tthis.position += 1;\n\n\t\treturn result;\n\t}\n\n\n\t/* read a MIDI-style variable-length integer\n\t\t(big-endian value in groups of 7 bits,\n\t\twith top bit set to signify that another byte follows)\n\t*/\n\treadVarInt () {\n\t\tlet result = 0;\n\t\twhile (true) {\n\t\t\tconst b = this.readInt8();\n\t\t\tif (b & 0x80) {\n\t\t\t\tresult += (b & 0x7f);\n\t\t\t\tresult <<= 7;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// b is the last byte\n\t\t\t\treturn result + b;\n\t\t\t}\n\t\t}\n\t}\n};\n","/*\nclass to parse the .mid file format\n(depends on stream.js)\n*/\n\nconst Stream = require(\"./stream.js\");\n\n\n\nmodule.exports = function MidiFile (data) {\n\tfunction readChunk (stream) {\n\t\tconst id = stream.readString(4);\n\t\tconst length = stream.readInt32();\n\n\t\treturn {\n\t\t\tid,\n\t\t\tlength,\n\t\t\tdata: stream.read(length),\n\t\t};\n\t}\n\n\tlet lastEventTypeByte;\n\n\tfunction readEvent (stream) {\n\t\tconst event = {};\n\t\tevent.deltaTime = stream.readVarInt();\n\t\tlet eventTypeByte = stream.readInt8();\n\t\tif ((eventTypeByte & 0xf0) === 0xf0) {\n\t\t\t// system / meta event\n\t\t\tif (eventTypeByte === 0xff) {\n\t\t\t\t// meta event\n\t\t\t\tevent.type = \"meta\";\n\t\t\t\tconst subtypeByte = stream.readInt8();\n\t\t\t\tconst length = stream.readVarInt();\n\n\t\t\t\tswitch (subtypeByte) {\n\t\t\t\tcase 0x00:\n\t\t\t\t\tevent.subtype = \"sequenceNumber\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for sequenceNumber event is 2, got \" + length);\n\t\t\t\t\tevent.number = stream.readInt16();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x01:\n\t\t\t\t\tevent.subtype = \"text\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x02:\n\t\t\t\t\tevent.subtype = \"copyrightNotice\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tevent.subtype = \"trackName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x04:\n\t\t\t\t\tevent.subtype = \"instrumentName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x05:\n\t\t\t\t\tevent.subtype = \"lyrics\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x06:\n\t\t\t\t\tevent.subtype = \"marker\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x07:\n\t\t\t\t\tevent.subtype = \"cuePoint\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x20:\n\t\t\t\t\tevent.subtype = \"midiChannelPrefix\";\n\t\t\t\t\tif (length !== 1)\n\t\t\t\t\t\tthrow new Error(\"Expected length for midiChannelPrefix event is 1, got \" + length);\n\t\t\t\t\tevent.channel = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x2f:\n\t\t\t\t\tevent.subtype = \"endOfTrack\";\n\t\t\t\t\tif (length !== 0)\n\t\t\t\t\t\tthrow new Error(\"Expected length for endOfTrack event is 0, got \" + length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x51:\n\t\t\t\t\tevent.subtype = \"setTempo\";\n\t\t\t\t\tif (length !== 3)\n\t\t\t\t\t\tthrow new Error(\"Expected length for setTempo event is 3, got \" + length);\n\t\t\t\t\tevent.microsecondsPerBeat = (\n\t\t\t\t\t\t(stream.readInt8() << 16) +\n\t\t\t\t\t\t\t(stream.readInt8() << 8) +\n\t\t\t\t\t\t\tstream.readInt8()\n\t\t\t\t\t);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x54:\n\t\t\t\t\tevent.subtype = \"smpteOffset\";\n\t\t\t\t\tif (length !== 5)\n\t\t\t\t\t\tthrow new Error(\"Expected length for smpteOffset event is 5, got \" + length);\n\t\t\t\t\tconst hourByte = stream.readInt8();\n\t\t\t\t\tevent.frameRate = {\n\t\t\t\t\t\t0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30,\n\t\t\t\t\t}[hourByte & 0x60];\n\t\t\t\t\tevent.hour = hourByte & 0x1f;\n\t\t\t\t\tevent.min = stream.readInt8();\n\t\t\t\t\tevent.sec = stream.readInt8();\n\t\t\t\t\tevent.frame = stream.readInt8();\n\t\t\t\t\tevent.subframe = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x58:\n\t\t\t\t\tevent.subtype = \"timeSignature\";\n\t\t\t\t\tif (length !== 4)\n\t\t\t\t\t\tthrow new Error(\"Expected length for timeSignature event is 4, got \" + length);\n\t\t\t\t\tevent.numerator = stream.readInt8();\n\t\t\t\t\tevent.denominator = Math.pow(2, stream.readInt8());\n\t\t\t\t\tevent.metronome = stream.readInt8();\n\t\t\t\t\tevent.thirtyseconds = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x59:\n\t\t\t\t\tevent.subtype = \"keySignature\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for keySignature event is 2, got \" + length);\n\t\t\t\t\tevent.key = stream.readInt8(true);\n\t\t\t\t\tevent.scale = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x7f:\n\t\t\t\t\tevent.subtype = \"sequencerSpecific\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tdefault:\n\t\t\t\t\t// console.log(\"Unrecognised meta event subtype: \" + subtypeByte);\n\t\t\t\t\tevent.subtype = \"unknown\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\n\t\t\t\t//event.data = stream.readString(length);\n\t\t\t\t//return event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf0) {\n\t\t\t\tevent.type = \"sysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf7) {\n\t\t\t\tevent.type = \"dividedSysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type byte: \" + eventTypeByte);\n\t\t}\n\t\telse {\n\t\t\t/* channel event */\n\t\t\tlet param1;\n\t\t\tif ((eventTypeByte & 0x80) === 0) {\n\t\t\t\t/* running status - reuse lastEventTypeByte as the event type.\n\t\t\t\t\teventTypeByte is actually the first parameter\n\t\t\t\t*/\n\t\t\t\tparam1 = eventTypeByte;\n\t\t\t\teventTypeByte = lastEventTypeByte;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparam1 = stream.readInt8();\n\t\t\t\tlastEventTypeByte = eventTypeByte;\n\t\t\t}\n\n\t\t\tconst eventType = eventTypeByte >> 4;\n\t\t\tevent.channel = eventTypeByte & 0x0f;\n\t\t\tevent.type = \"channel\";\n\n\t\t\tswitch (eventType) {\n\t\t\tcase 0x08:\n\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x09:\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\t\t\t\tif (event.velocity === 0)\n\t\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\telse\n\t\t\t\t\tevent.subtype = \"noteOn\";\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0a:\n\t\t\t\tevent.subtype = \"noteAftertouch\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.amount = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0b:\n\t\t\t\tevent.subtype = \"controller\";\n\t\t\t\tevent.controllerType = param1;\n\t\t\t\tevent.value = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0c:\n\t\t\t\tevent.subtype = \"programChange\";\n\t\t\t\tevent.programNumber = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0d:\n\t\t\t\tevent.subtype = \"channelAftertouch\";\n\t\t\t\tevent.amount = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0e:\n\t\t\t\tevent.subtype = \"pitchBend\";\n\t\t\t\tevent.value = param1 + (stream.readInt8() << 7);\n\n\t\t\t\treturn event;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type: \" + eventType);\n\n\t\t\t\t/*\n\t\t\t\tconsole.log(\"Unrecognised MIDI event type: \" + eventType);\n\t\t\t\tstream.readInt8();\n\t\t\t\tevent.subtype = 'unknown';\n\t\t\t\treturn event;\n\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n\n\n\tlet source = data;\n\tif (typeof data === \"string\")\n\t\tsource = data.split(\"\").map(c => c.charCodeAt(0));\n\n\tconst stream = new Stream(source);\n\tconst headerChunk = readChunk(stream);\n\tif (headerChunk.id !== \"MThd\" || headerChunk.length !== 6)\n\t\tthrow new Error(\"Bad .mid file - header not found\");\n\n\tconst headerStream = new Stream(headerChunk.data);\n\tconst formatType = headerStream.readInt16();\n\tconst trackCount = headerStream.readInt16();\n\tconst timeDivision = headerStream.readInt16();\n\n\tlet ticksPerBeat;\n\tif (timeDivision & 0x8000)\n\t\tthrow new Error(\"Expressing time division in SMTPE frames is not supported yet\");\n\telse\n\t\tticksPerBeat = timeDivision;\n\n\n\tconst header = {\n\t\tformatType,\n\t\ttrackCount,\n\t\tticksPerBeat,\n\t};\n\tconst tracks = [];\n\tfor (let i = 0; i < header.trackCount; i++) {\n\t\ttracks[i] = [];\n\t\tconst trackChunk = readChunk(stream);\n\t\tif (trackChunk.id !== \"MTrk\")\n\t\t\tthrow new Error(\"Unexpected chunk - expected MTrk, got \" + trackChunk.id);\n\n\t\tconst trackStream = new Stream(trackChunk.data);\n\t\twhile (!trackStream.eof()) {\n\t\t\tconst event = readEvent(trackStream);\n\t\t\ttracks[i].push(event);\n\t\t}\n\t}\n\n\treturn {\n\t\theader,\n\t\ttracks,\n\t};\n};\n","\r\n/* Wrapper for accessing strings through sequential writes */\r\n\r\n\r\n\r\nmodule.exports = class OStream {\r\n\tconstructor () {\r\n\t\tthis.buffer = \"\";\r\n\t}\r\n\r\n\twrite (str) {\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\t/* write a big-endian 32-bit integer */\r\n\twriteInt32 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 24) & 0xff) + String.fromCharCode((i >> 16) & 0xff) +\r\n\t\t\tString.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a big-endian 16-bit integer */\r\n\twriteInt16 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write an 8-bit integer */\r\n\twriteInt8 (i) {\r\n\t\tthis.buffer += String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a MIDI-style variable-length integer\r\n\t\t(big-endian value in groups of 7 bits,\r\n\t\twith top bit set to signify that another byte follows)\r\n\t*/\r\n\twriteVarInt (i) {\r\n\t\tif (i < 0)\r\n\t\t\tthrow new Error(\"OStream.writeVarInt minus number: \" + i);\r\n\r\n\t\tconst b = i & 0x7f;\r\n\t\ti >>= 7;\r\n\t\tlet str = String.fromCharCode(b);\r\n\r\n\t\twhile (i) {\r\n\t\t\tconst b = i & 0x7f;\r\n\t\t\ti >>= 7;\r\n\t\t\tstr = String.fromCharCode(b | 0x80) + str;\r\n\t\t}\r\n\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\tgetBuffer () {\r\n\t\treturn this.buffer;\r\n\t}\r\n\r\n\tgetArrayBuffer () {\r\n\t\treturn Uint8Array.from(this.buffer.split(\"\").map(c => c.charCodeAt(0))).buffer;\r\n\t}\r\n};\r\n","/*\r\nclass to encode the .mid file format\r\n(depends on streamEx.js)\r\n*/\r\n\r\nconst OStream = require(\"./streamEx.js\");\r\n\r\n\r\n\r\nmodule.exports = function OMidiFile ({ header, tracks }) {\r\n\tfunction writeChunk (stream, id, data) {\r\n\t\tconsole.assert(id.length === 4, \"chunk id must be 4 byte\");\r\n\r\n\t\tstream.write(id);\r\n\t\tstream.writeInt32(data.length);\r\n\t\tstream.write(data);\r\n\t}\r\n\r\n\tfunction writeEvent (stream, event) {\r\n\t\tif (event.subtype === \"unknown\")\r\n\t\t\treturn;\r\n\r\n\t\tstream.writeVarInt(event.deltaTime);\r\n\r\n\t\tswitch (event.type) {\r\n\t\tcase \"meta\":\r\n\t\t\tstream.writeInt8(0xff);\r\n\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"sequenceNumber\":\r\n\t\t\t\tstream.writeInt8(0x00);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt16(event.number);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"text\":\r\n\t\t\t\tstream.writeInt8(0x01);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"copyrightNotice\":\r\n\t\t\t\tstream.writeInt8(0x02);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"trackName\":\r\n\t\t\t\tstream.writeInt8(0x03);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"instrumentName\":\r\n\t\t\t\tstream.writeInt8(0x04);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"lyrics\":\r\n\t\t\t\tstream.writeInt8(0x05);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"marker\":\r\n\t\t\t\tstream.writeInt8(0x06);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"cuePoint\":\r\n\t\t\t\tstream.writeInt8(0x07);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"midiChannelPrefix\":\r\n\t\t\t\tstream.writeInt8(0x20);\r\n\t\t\t\tstream.writeVarInt(1);\r\n\r\n\t\t\t\tstream.writeInt8(event.channel);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"endOfTrack\":\r\n\t\t\t\tstream.writeInt8(0x2f);\r\n\t\t\t\tstream.writeVarInt(0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"setTempo\":\r\n\t\t\t\tstream.writeInt8(0x51);\r\n\t\t\t\tstream.writeVarInt(3);\r\n\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 16) & 0xff);\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 8) & 0xff);\r\n\t\t\t\tstream.writeInt8(event.microsecondsPerBeat & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"smpteOffset\":\r\n\t\t\t\tstream.writeInt8(0x54);\r\n\t\t\t\tstream.writeVarInt(5);\r\n\r\n\t\t\t\tvar frameByte = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 }[event.frameRate];\r\n\t\t\t\tstream.writeInt8(event.hour | frameByte);\r\n\t\t\t\tstream.writeInt8(event.min);\r\n\t\t\t\tstream.writeInt8(event.sec);\r\n\t\t\t\tstream.writeInt8(event.frame);\r\n\t\t\t\tstream.writeInt8(event.subframe);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"timeSignature\":\r\n\t\t\t\tstream.writeInt8(0x58);\r\n\t\t\t\tstream.writeVarInt(4);\r\n\r\n\t\t\t\tstream.writeInt8(event.numerator);\r\n\t\t\t\tstream.writeInt8(Math.log2(event.denominator));\r\n\t\t\t\tstream.writeInt8(event.metronome);\r\n\t\t\t\tstream.writeInt8(event.thirtyseconds);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"keySignature\":\r\n\t\t\t\tstream.writeInt8(0x59);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt8(event.key);\r\n\t\t\t\tstream.writeInt8(event.scale);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sequencerSpecific\":\r\n\t\t\t\tstream.writeInt8(0x7f);\r\n\t\t\t\tstream.writeVarInt(event.data.length);\r\n\r\n\t\t\t\tstream.write(event.data);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"sysEx\":\r\n\t\t\tstream.writeInt8(0xf0);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"dividedSysEx\":\r\n\t\t\tstream.writeInt8(0xf7);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"channel\":\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"noteOn\":\r\n\t\t\t\tstream.writeInt8(0x90 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteOff\":\r\n\t\t\t\tstream.writeInt8(0x80 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity ? event.velocity : 0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xa0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"controller\":\r\n\t\t\t\tstream.writeInt8(0xb0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.controllerType);\r\n\t\t\t\tstream.writeInt8(event.value);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"programChange\":\r\n\t\t\t\tstream.writeInt8(0xc0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.programNumber);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"channelAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xd0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pitchBend\":\r\n\t\t\t\tstream.writeInt8(0xe0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.value & 0xff);\r\n\t\t\t\tstream.writeInt8((event.value >> 7) & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow new Error(\"unhandled event type:\" + event.type);\r\n\t\t}\r\n\t}\r\n\r\n\tconst stream = new OStream();\r\n\r\n\tconst headerChunk = new OStream();\r\n\theaderChunk.writeInt16(header.formatType);\r\n\theaderChunk.writeInt16(tracks.length);\r\n\theaderChunk.writeInt16(header.ticksPerBeat);\r\n\r\n\twriteChunk(stream, \"MThd\", headerChunk.getBuffer());\r\n\r\n\tfor (let i = 0; i < tracks.length; ++i) {\r\n\t\tconst trackChunk = new OStream();\r\n\r\n\t\tfor (let ei = 0; ei < tracks[i].length; ++ei)\r\n\t\t\twriteEvent(trackChunk, tracks[i][ei]);\r\n\r\n\t\twriteChunk(stream, \"MTrk\", trackChunk.getBuffer());\r\n\t}\r\n\r\n\treturn stream.getArrayBuffer();\r\n};\r\n","\nmodule.exports = {\n\tparseMidiData: require(\"./midifile.js\"),\n\tencodeMidiFile: require(\"./midifileEx.js\"),\n};\n","\nconst midiToSequence = (midiFile, {timeWarp = 1} = {}) => {\n\tconst trackStates = [];\n\tlet beatsPerMinute = 120;\n\tconst ticksPerBeat = midiFile.header.ticksPerBeat;\n\n\tfor (let i = 0; i < midiFile.tracks.length; i++) {\n\t\ttrackStates[i] = {\n\t\t\tnextEventIndex: 0,\n\t\t\tticksToNextEvent: (\n\t\t\t\tmidiFile.tracks[i].length ?\n\t\t\t\t\tmidiFile.tracks[i][0].deltaTime :\n\t\t\t\t\tnull\n\t\t\t),\n\t\t};\n\t}\n\n\tfunction getNextEvent () {\n\t\tlet ticksToNextEvent = null;\n\t\tlet nextEventTrack = null;\n\t\tlet nextEventIndex = null;\n\n\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\tif (\n\t\t\t\ttrackStates[i].ticksToNextEvent != null\n\t\t\t\t&& (ticksToNextEvent == null || trackStates[i].ticksToNextEvent < ticksToNextEvent)\n\t\t\t) {\n\t\t\t\tticksToNextEvent = trackStates[i].ticksToNextEvent;\n\t\t\t\tnextEventTrack = i;\n\t\t\t\tnextEventIndex = trackStates[i].nextEventIndex;\n\t\t\t}\n\t\t}\n\t\tif (nextEventTrack != null) {\n\t\t\t/* consume event from that track */\n\t\t\tconst nextEvent = midiFile.tracks[nextEventTrack][nextEventIndex];\n\t\t\tif (midiFile.tracks[nextEventTrack][nextEventIndex + 1]) \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent += midiFile.tracks[nextEventTrack][nextEventIndex + 1].deltaTime;\n\t\t\telse \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent = null;\n\n\t\t\ttrackStates[nextEventTrack].nextEventIndex += 1;\n\t\t\t/* advance timings on all tracks by ticksToNextEvent */\n\t\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\t\tif (trackStates[i].ticksToNextEvent != null) \n\t\t\t\t\ttrackStates[i].ticksToNextEvent -= ticksToNextEvent;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tticksToEvent: ticksToNextEvent,\n\t\t\t\tevent: nextEvent,\n\t\t\t\ttrack: nextEventTrack,\n\t\t\t};\n\t\t}\n\t\telse \n\t\t\treturn null;\n\t\t\n\t};\n\t//\n\tlet midiEvent;\n\tconst events = [];\n\t//\n\tfunction processEvents () {\n\t\tfunction processNext () {\n\t\t\tlet secondsToGenerate = 0;\n\t\t\tif (midiEvent.ticksToEvent > 0) {\n\t\t\t\tconst beatsToGenerate = midiEvent.ticksToEvent / ticksPerBeat;\n\t\t\t\tsecondsToGenerate = beatsToGenerate / (beatsPerMinute / 60);\n\t\t\t}\n\n\t\t\t// beatsPerMinute must be changed after secondsToGenerate calculation\n\t\t\tif ( midiEvent.event.type == \"meta\" && midiEvent.event.subtype == \"setTempo\" ) {\n\t\t\t\t// tempo change events can occur anywhere in the middle and affect events that follow\n\t\t\t\tbeatsPerMinute = 60e+6 / midiEvent.event.microsecondsPerBeat;\n\t\t\t}\n\n\t\t\tconst time = (secondsToGenerate * 1000 * timeWarp) || 0;\n\t\t\tevents.push([ midiEvent, time ]);\n\t\t\tmidiEvent = getNextEvent();\n\t\t};\n\t\t//\n\t\tif (midiEvent = getNextEvent()) {\n\t\t\twhile (midiEvent)\n\t\t\t\tprocessNext();\n\t\t}\n\t};\n\n\tprocessEvents();\n\n\treturn events;\n};\n\n\nconst trimSequence = seq => {\n\tconst status = new Map();\n\n\treturn seq.filter(([{event, ticksToEvent}]) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tstatus.clear();\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn true;\n\n\t\tconst key = `${event.subtype}|${event.channel}|${event.noteNumber}`;\n\n\t\tif (status.get(key)) {\n\t\t\t//console.debug(\"event trimmed:\", event, ticksToEvent);\n\t\t\treturn false;\n\t\t}\n\n\t\tstatus.set(key, event);\n\n\t\treturn true;\n\t});\n};\n\n\nconst fixOverlapNotes = seq => {\n\tconst noteMap = new Map();\n\tconst overlapMap = new Map();\n\tconst swaps = [];\n\n\tlet leapIndex = -1;\n\n\tseq.forEach(([{event, ticksToEvent}], index) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tleapIndex = index;\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn;\n\n\t\tconst key = `${event.channel}|${event.noteNumber}`;\n\n\t\tswitch (event.subtype) {\n\t\tcase \"noteOn\":\n\t\t\tif (noteMap.get(key))\n\t\t\t\toverlapMap.set(key, leapIndex);\n\t\t\telse\n\t\t\t\tnoteMap.set(key, leapIndex);\n\n\t\t\tbreak;\n\t\tcase \"noteOff\":\n\t\t\tif (overlapMap.get(key)) {\n\t\t\t\tswaps.push([overlapMap.get(key), index]);\n\t\t\t\toverlapMap.delete(key);\n\t\t\t}\n\t\t\telse\n\t\t\t\tnoteMap.delete(key);\n\n\t\t\tbreak;\n\t\t}\n\t});\n\n\t// shift overlapped swaps\n\tswaps.forEach((swap, i) => {\n\t\tfor (let ii = i - 1; ii >= 0; --ii) {\n\t\t\tconst pre = swaps[ii];\n\t\t\tif (pre[1] < swap[0])\n\t\t\t\tbreak;\n\n\t\t\tif (swap[0] > pre[0])\n\t\t\t\t++swap[0];\n\t\t}\n\t});\n\n\t//console.debug(\"swaps:\", swaps);\n\tswaps.forEach(([front, back]) => {\n\t\tif (back >= seq.length - 1 || front < 0)\n\t\t\treturn;\n\n\t\tconst offEvent = seq[back];\n\t\tconst nextEvent = seq[back + 1];\n\t\tconst leapEvent = seq[front];\n\n\t\tif (!leapEvent[0].ticksToEvent) {\n\t\t\tconsole.warn(\"invalid front index:\", front, back, leapEvent);\n\t\t\treturn;\n\t\t}\n\n\t\t// ms per tick\n\t\tconst tempo = leapEvent[1] / leapEvent[0].ticksToEvent;\n\n\t\tnextEvent[1] += offEvent[1];\n\t\tnextEvent[0].ticksToEvent += offEvent[0].ticksToEvent;\n\n\t\toffEvent[0].ticksToEvent = leapEvent[0].ticksToEvent - 1;\n\t\tleapEvent[0].ticksToEvent = 1;\n\n\t\toffEvent[1] = offEvent[0].ticksToEvent * tempo;\n\t\tleapEvent[1] = leapEvent[0].ticksToEvent * tempo;\n\t\t//console.debug(\"swap:\", [front, back], offEvent, nextEvent, leapEvent);\n\n\t\tseq.splice(back, 1);\n\t\tseq.splice(front, 0, offEvent);\n\t});\n\n\treturn seq;\n};\n\n\n\nmodule.exports = {\n\tmidiToSequence,\n\ttrimSequence,\n\tfixOverlapNotes,\n};\n","\nconst MidiSequence = require(\"./MidiSequence.js\");\n\n\n\nconst PedalControllerTypes = {\n\t64: \"Sustain\",\n\t65: \"Portamento\",\n\t66: \"Sostenuto\",\n\t67: \"Soft\",\n};\n\n\n\nclass Notation {\n\tstatic parseMidi (data, {fixOverlap = true} = {}) {\n\t\tconst channelStatus = [];\n\t\tconst pedalStatus = {};\n\t\tconst pedals = {};\n\t\tconst channels = [];\n\t\tconst bars = [];\n\t\tlet time = 0;\n\t\tlet millisecondsPerBeat = 600000 / 120;\n\t\tlet beats = 0;\n\t\tlet numerator = 4;\n\t\tlet barIndex = 0;\n\t\tconst keyRange = {};\n\t\tlet rawTicks = 0;\n\t\tlet ticks = 0;\n\t\tlet correspondences;\n\t\tconst tempos = [];\n\n\t\tconst ticksPerBeat = data.header.ticksPerBeat;\n\n\t\tlet rawEvents = MidiSequence.midiToSequence(data);\n\n\t\tif (fixOverlap)\n\t\t\trawEvents = MidiSequence.trimSequence(MidiSequence.fixOverlapNotes(rawEvents));\n\n\t\tconst events = rawEvents.map(d => ({\n\t\t\tdata: d[0].event,\n\t\t\ttrack: d[0].track,\n\t\t\tdeltaTime: d[1],\n\t\t\tdeltaTicks: d[0].ticksToEvent,\n\t\t}));\n\n\t\tlet index = 0;\n\n\t\tconst ticksNormal = 1;\n\n\t\tfor (const ev of events) {\n\t\t\trawTicks += ev.deltaTicks;\n\t\t\tticks = Math.round(rawTicks * ticksNormal);\n\n\t\t\tif (ev.deltaTicks > 0) {\n\t\t\t\t// append bars\n\t\t\t\tconst deltaBeats = ev.deltaTicks / ticksPerBeat;\n\t\t\t\tfor (let b = Math.ceil(beats); b < beats + deltaBeats; ++b) {\n\t\t\t\t\tconst t = time + (b - beats) * millisecondsPerBeat;\n\t\t\t\t\tbars.push({time: t, index: barIndex % numerator});\n\n\t\t\t\t\t++barIndex;\n\t\t\t\t}\n\n\t\t\t\tbeats += deltaBeats;\n\t\t\t}\n\n\t\t\ttime += ev.deltaTime;\n\n\t\t\t//const ticksTime = beats * millisecondsPerBeat;\n\t\t\t//console.log(\"time:\", time, ticksTime, ticksTime - time);\n\n\t\t\tev.time = time;\n\t\t\tev.ticks = ticks;\n\n\t\t\tconst event = ev.data;\n\t\t\tswitch (event.type) {\n\t\t\tcase \"channel\":\n\t\t\t\t//channelStatus[event.channel] = channelStatus[event.channel] || [];\n\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"noteOn\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\t\t\t\t\t\t//channelStatus[event.channel][pitch] = {\n\t\t\t\t\t\tchannelStatus.push({\n\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\tstartTick: ticks,\n\t\t\t\t\t\t\tstart: time,\n\t\t\t\t\t\t\tvelocity: event.velocity,\n\t\t\t\t\t\t\tbeats: beats,\n\t\t\t\t\t\t\ttrack: ev.track,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tkeyRange.low = Math.min(keyRange.low || pitch, pitch);\n\n\t\t\t\t\t\tev.index = index;\n\t\t\t\t\t\t++index;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"noteOff\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\n\t\t\t\t\t\tchannels[event.channel] = channels[event.channel] || [];\n\n\t\t\t\t\t\tconst statusIndex = channelStatus.findIndex(status => status.channel == event.channel && status.pitch == pitch);\n\t\t\t\t\t\tif (statusIndex >= 0) {\n\t\t\t\t\t\t\tconst status = channelStatus.splice(statusIndex, 1)[0];\n\n\t\t\t\t\t\t\tchannels[event.channel].push({\n\t\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\t\tstartTick: status.startTick,\n\t\t\t\t\t\t\t\tendTick: ticks,\n\t\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\t\tstart: status.start,\n\t\t\t\t\t\t\t\tduration: time - status.start,\n\t\t\t\t\t\t\t\tvelocity: status.velocity,\n\t\t\t\t\t\t\t\tbeats: status.beats,\n\t\t\t\t\t\t\t\ttrack: status.track,\n\t\t\t\t\t\t\t\tfinger: status.finger,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tconsole.debug(\"unexpected noteOff: \", time, event);\n\n\t\t\t\t\t\tkeyRange.high = Math.max(keyRange.high || pitch, pitch);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"controller\":\n\t\t\t\t\tswitch (event.controllerType) {\n\t\t\t\t\t// pedal controllers\n\t\t\t\t\tcase 64:\n\t\t\t\t\tcase 65:\n\t\t\t\t\tcase 66:\n\t\t\t\t\tcase 67:\n\t\t\t\t\t\tconst pedalType = PedalControllerTypes[event.controllerType];\n\n\t\t\t\t\t\tpedalStatus[event.channel] = pedalStatus[event.channel] || {};\n\t\t\t\t\t\tpedals[event.channel] = pedals[event.channel] || [];\n\n\t\t\t\t\t\tconst status = pedalStatus[event.channel][pedalType];\n\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tpedals[event.channel].push({type: pedalType, start: status.start, duration: time - status.start, value: status.value});\n\t\t\t\t\t\tpedalStatus[event.channel][pedalType] = {start: time, value: event.value};\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase \"meta\":\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"setTempo\":\n\t\t\t\t\tmillisecondsPerBeat = event.microsecondsPerBeat / 1000;\n\t\t\t\t\t//beats = Math.round(beats);\n\t\t\t\t\t//console.assert(Number.isFinite(time), \"invalid time:\", time);\n\t\t\t\t\ttempos.push({tempo: event.microsecondsPerBeat, tick: ticks, time});\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"timeSignature\":\n\t\t\t\t\tnumerator = event.numerator;\n\t\t\t\t\tbarIndex = 0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tif (!correspondences && /^find-corres:/.test(event.text)) {\n\t\t\t\t\t\tconst captures = event.text.match(/:([\\d\\,-]+)/);\n\t\t\t\t\t\tconst str = captures && captures[1] || \"\";\n\t\t\t\t\t\tcorrespondences = str.split(\",\").map(s => Number(s));\n\t\t\t\t\t}\n\t\t\t\t\telse if (/fingering\\(.*\\)/.test(event.text)) {\n\t\t\t\t\t\tconst [_, fingers] = event.text.match(/\\((.+)\\)/);\n\t\t\t\t\t\tconst finger = Number(fingers);\n\t\t\t\t\t\tif (!Number.isNaN(finger)) {\n\t\t\t\t\t\t\tconst status = channelStatus[channelStatus.length - 1];\n\t\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\t\tstatus.finger = finger;\n\n\t\t\t\t\t\t\tconst event = events.find(e => e.index == index - 1);\n\t\t\t\t\t\t\tif (event)\n\t\t\t\t\t\t\t\tevent.data.finger = finger;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"copyrightNotice\":\n\t\t\t\t\tconsole.log(\"MIDI copyright:\", event.text);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tchannelStatus.forEach(status => {\n\t\t\tconsole.debug(\"unclosed noteOn event at\", status.startTick, status);\n\n\t\t\tchannels[status.channel].push({\n\t\t\t\tstartTick: status.startTick,\n\t\t\t\tendTick: ticks,\n\t\t\t\tpitch: status.pitch,\n\t\t\t\tstart: status.start,\n\t\t\t\tduration: time - status.start,\n\t\t\t\tvelocity: status.velocity,\n\t\t\t\tbeats: status.beats,\n\t\t\t\ttrack: status.track,\n\t\t\t\tfinger: status.finger,\n\t\t\t});\n\t\t});\n\n\t\treturn new Notation({\n\t\t\tchannels,\n\t\t\tkeyRange,\n\t\t\tpedals,\n\t\t\tbars,\n\t\t\tendTime: time,\n\t\t\tendTick: ticks,\n\t\t\tcorrespondences,\n\t\t\tevents,\n\t\t\ttempos,\n\t\t\tticksPerBeat,\n\t\t\tmeta: {},\n\t\t});\n\t}\n\n\n\tconstructor (fields) {\n\t\tObject.assign(this, fields);\n\n\t\t// channels to notes\n\t\tthis.notes = [];\n\t\tfor (const channel of this.channels) {\n\t\t\tif (channel) {\n\t\t\t\tfor (const note of channel)\n\t\t\t\t\tthis.notes.push(note);\n\t\t\t}\n\t\t}\n\t\tthis.notes.sort(function (n1, n2) {\n\t\t\treturn n1.start - n2.start;\n\t\t});\n\n\t\tfor (const i in this.notes)\n\t\t\tthis.notes[i].index = Number(i);\n\n\n\t\t// duration\n\t\tthis.duration = this.notes.length > 0 ? (this.endTime - this.notes[0].start) : 0,\n\n\t\t//this.endSoftIndex = this.notes.length ? this.notes[this.notes.length - 1].softIndex : 0;\n\n\n\t\t// pitch map\n\t\tthis.pitchMap = [];\n\t\tfor (const c in this.channels) {\n\t\t\tfor (const n in this.channels[c]) {\n\t\t\t\tconst pitch = this.channels[c][n].pitch;\n\t\t\t\tthis.pitchMap[pitch] = this.pitchMap[pitch] || [];\n\n\t\t\t\tthis.pitchMap[pitch].push(this.channels[c][n]);\n\t\t\t}\n\t\t}\n\n\t\tthis.pitchMap.forEach(notes => notes.sort((n1, n2) => n1.start - n2.start));\n\n\n\t\t/*// setup measure notes index\n\t\tif (this.measures) {\n\t\t\tconst measure_list = [];\n\n\t\t\tlet last_measure = null;\n\t\t\tconst measure_entries = Object.entries(this.measures).sort((e1, e2) => Number(e1[0]) - Number(e2[0]));\n\t\t\tfor (const [t, measure] of measure_entries) {\n\t\t\t\t//console.log(\"measure time:\", Number(t));\n\t\t\t\tmeasure.startTick = Number(t);\n\t\t\t\tmeasure.notes = [];\n\n\t\t\t\tif (last_measure)\n\t\t\t\t\tlast_measure.endTick = measure.startTick;\n\n\t\t\t\tconst m = measure.measure;\n\t\t\t\tmeasure_list[m] = measure_list[m] || [];\n\t\t\t\tmeasure_list[m].push(measure);\n\n\t\t\t\tlast_measure = measure;\n\t\t\t}\n\t\t\tif (last_measure)\n\t\t\t\tlast_measure.endTick = this.notes[this.notes.length - 1].endTick;\n\t\t\tfor (const i in this.notes) {\n\t\t\t\tconst note = this.notes[i];\n\t\t\t\tfor (const t in this.measures) {\n\t\t\t\t\tconst measure = this.measures[t];\n\t\t\t\t\tif (note.startTick >= measure.startTick && note.startTick < measure.endTick || note.endTick > measure.startTick && note.endTick <= measure.endTick)\n\t\t\t\t\t\tmeasure.notes.push(note);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.measure_list = measure_list;\n\t\t}*/\n\n\n\t\t// prepare beats info\n\t\tif (this.meta.beatInfos) {\n\t\t\tfor (let i = 0; i < this.meta.beatInfos.length; ++i) {\n\t\t\t\tconst info = this.meta.beatInfos[i];\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tconst lastInfo = this.meta.beatInfos[i - 1];\n\t\t\t\t\tinfo.beatIndex = lastInfo.beatIndex + Math.ceil((info.tick - lastInfo.tick) / this.ticksPerBeat);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tinfo.beatIndex = 0;\n\t\t\t}\n\t\t}\n\n\n\t\t// compute tempos tick -> time\n\t\t{\n\t\t\tlet time = 0;\n\t\t\tlet ticks = 0;\n\t\t\tlet tempo = 500000;\n\t\t\tfor (const entry of this.tempos) {\n\t\t\t\tconst deltaTicks = entry.tick - ticks;\n\t\t\t\ttime += (tempo / 1000) * deltaTicks / this.ticksPerBeat;\n\n\t\t\t\tticks = entry.tick;\n\t\t\t\ttempo = entry.tempo;\n\n\t\t\t\tentry.time = time;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfindChordBySoftindex (softIndex, radius = 0.8) {\n\t\treturn this.notes.filter(note => Math.abs(note.softIndex - softIndex) < radius);\n\t}\n\n\n\taverageTempo (tickRange) {\n\t\ttickRange = tickRange || {from: 0, to: this.endtick};\n\n\t\tconsole.assert(this.tempos, \"no tempos.\");\n\t\tconsole.assert(tickRange.to > tickRange.from, \"range is invalid:\", tickRange);\n\n\t\tconst span = index => {\n\t\t\tconst from = Math.max(tickRange.from, this.tempos[index].tick);\n\t\t\tconst to = (index < this.tempos.length - 1) ? Math.min(this.tempos[index + 1].tick, tickRange.to) : tickRange.to;\n\n\t\t\treturn Math.max(0, to - from);\n\t\t};\n\n\t\tconst tempo_sum = this.tempos.reduce((sum, tempo, index) => sum + tempo.tempo * span(index), 0);\n\n\t\tconst average = tempo_sum / (tickRange.to - tickRange.from);\n\n\t\t// convert microseconds per beat to beats per minute\n\t\treturn 60e+6 / average;\n\t}\n\n\n\tticksToTime (tick) {\n\t\tconsole.assert(Number.isFinite(tick), \"invalid tick value:\", tick);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.tick > tick);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.time + (tick - tempo.tick) * tempo.tempo * 1e-3 / this.ticksPerBeat;\n\t}\n\n\n\ttimeToTicks (time) {\n\t\tconsole.assert(Number.isFinite(time), \"invalid time value:\", time);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.time > time);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.tick + (time - tempo.time) * this.ticksPerBeat / (tempo.tempo * 1e-3);\n\t}\n\n\n\ttickRangeToTimeRange (tickRange) {\n\t\tconsole.assert(tickRange.to >= tickRange.from, \"invalid tick range:\", tickRange);\n\n\t\treturn {\n\t\t\tfrom: this.ticksToTime(tickRange.from),\n\t\t\tto: this.ticksToTime(tickRange.to),\n\t\t};\n\t}\n\n\n\t/*getMeasureRange (measureRange) {\n\t\tconsole.assert(Number.isInteger(measureRange.start) && Number.isInteger(measureRange.end), \"invalid measure range:\", measureRange);\n\t\tconsole.assert(this.measure_list && this.measure_list[measureRange.start] && this.measure_list[measureRange.end], \"no measure data for specific index:\", this.measure_list, measureRange);\n\n\t\tconst startMeasure = this.measure_list[measureRange.start][0];\n\t\tlet endMeasure = null;\n\t\tfor (const measure of this.measure_list[measureRange.end]) {\n\t\t\tif (measure.endTick > startMeasure.startTick) {\n\t\t\t\tendMeasure = measure;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// there no path between start measure and end measure.\n\t\tif (!endMeasure)\n\t\t\treturn null;\n\n\t\tconst tickRange = {from: startMeasure.startTick, to: endMeasure.endTick, duration: endMeasure.endTick - startMeasure.startTick};\n\t\tconst timeRange = this.tickRangeToTimeRange(tickRange);\n\t\ttimeRange.duration = timeRange.to - timeRange.from;\n\n\t\treturn {\n\t\t\ttickRange,\n\t\t\ttimeRange,\n\t\t};\n\t}*/\n\n\n\tscaleTempo ({factor, headTempo}) {\n\t\tconsole.assert(this.tempos && this.tempos.length, \"[Notation.scaleTempo] tempos is empty.\");\n\n\t\tif (headTempo)\n\t\t\tfactor = headTempo / this.tempos[0].tempo;\n\n\t\tconsole.assert(Number.isFinite(factor) && factor > 0, \"[Notation.scaleTempo] invalid factor:\", factor);\n\n\t\tthis.tempos.forEach(tempo => {\n\t\t\ttempo.tempo *= factor;\n\t\t\ttempo.time *= factor;\n\t\t});\n\t\tthis.events.forEach(event => {\n\t\t\tevent.deltaTime *= factor;\n\t\t\tevent.time *= factor;\n\t\t});\n\t\tthis.notes.forEach(note => {\n\t\t\tnote.start *= factor;\n\t\t\tnote.duration *= factor;\n\t\t});\n\n\t\tthis.endTime *= factor;\n\t}\n};\n\n\n\nmodule.exports = {\n\tNotation,\n};\n","\nconst { Notation } = require(\"./MusicNotation.js\");\n\n\n\n//const msDelay = ms => new Promise(resolve => setTimeout(resolve, ms));\nconst animationDelay = () => new Promise(resolve => requestAnimationFrame(resolve));\n\n\nclass MidiPlayer {\n\tconstructor (midiData, {cacheSpan = 600, onMidi, onPlayFinish, onTurnCursor} = {}) {\n\t\tthis.cacheSpan = cacheSpan;\n\t\tthis.onMidi = onMidi;\n\t\tthis.onPlayFinish = onPlayFinish;\n\t\tthis.onTurnCursor = onTurnCursor;\n\n\t\tlet notation;\n\t\tif (midiData.notes && Number.isFinite(midiData.endTime))\n\t\t\tnotation = midiData;\n\t\telse\n\t\t\tnotation = Notation.parseMidi(midiData);\n\n\t\tthis.notation = notation;\n\t\tthis.events = notation.events;\n\t\t//console.log(\"events:\", this.events);\n\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t\tthis.startTime = performance.now();\n\t\tthis.duration = notation.endTime;\n\t\tthis.cursorTurnDelta = 0;\n\n\t\tconsole.assert(notation.tempos && notation.tempos.length, \"[MidiPlayer] invalid notation, tempos is empty.\");\n\t}\n\n\n\tdispose () {\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t}\n\n\n\tget progressTicks () {\n\t\treturn this.notation.timeToTicks(this.progressTime);\n\t}\n\n\n\tset progressTicks (value) {\n\t\tthis.progressTime = this.notation.ticksToTime(value);\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(this.progressTime);\n\t}\n\n\n\tasync play ({nextFrame = animationDelay} = {}) {\n\t\tif (this.progressTime >= this.duration)\n\t\t\tthis.progressTime = 0;\n\n\t\tlet now = performance.now();\n\t\tthis.startTime = now - this.progressTime;\n\n\t\tthis.isPlaying = true;\n\n\t\tlet currentEventIndex = this.events.findIndex(event => event.time >= now - this.startTime);\n\n\t\twhile (this.isPlaying) {\n\t\t\tfor (; currentEventIndex < this.events.length; ++currentEventIndex) {\n\t\t\t\tconst event = this.events[currentEventIndex];\n\t\t\t\t//console.log(\"play event:\", currentEventIndex, event.time, this.progressTime + this.cacheSpan);\n\t\t\t\tif (!event || event.time > this.progressTime + this.cacheSpan)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (event.data.type === \"channel\" && this.startTime + event.time >= now)\n\t\t\t\t\tif (this.onMidi)\n\t\t\t\t\t\tthis.onMidi(event.data, this.startTime + event.time);\n\t\t\t}\n\n\t\t\tawait nextFrame();\n\n\t\t\tif (!this.isPlaying)\n\t\t\t\tbreak;\n\n\t\t\tif (this.cursorTurnDelta !== 0) {\n\t\t\t\tconst backturn = this.cursorTurnDelta < 0;\n\n\t\t\t\tthis.startTime -= this.cursorTurnDelta;\n\t\t\t\tthis.cursorTurnDelta = 0;\n\n\t\t\t\tif (backturn) {\n\t\t\t\t\tfor (; currentEventIndex > 0; --currentEventIndex) {\n\t\t\t\t\t\tconst eventTime = this.events[currentEventIndex].time;\n\t\t\t\t\t\tif (this.startTime + eventTime < now)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnow = performance.now();\n\n\t\t\tthis.progressTime = now - this.startTime;\n\n\t\t\tif (this.progressTime > this.duration) {\n\t\t\t\tthis.isPlaying = false;\n\n\t\t\t\tif (this.onPlayFinish)\n\t\t\t\t\tthis.onPlayFinish();\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpause () {\n\t\tthis.isPlaying = false;\n\t}\n\n\n\tturnCursor (time) {\n\t\t//console.log(\"onTurnCursor:\", time, oldTime);\n\t\tif (this.isPlaying)\n\t\t\tthis.cursorTurnDelta += time - this.progressTime;\n\t\telse\n\t\t\tthis.progressTime = time;\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(time);\n\t}\n};\n\n\n\nmodule.exports = MidiPlayer;\n","\nmodule.exports = {\n\tCostStepAttenuation: 0.6,\n\tSkipDeep: 3,\n\tPriorDistanceSigmoidFactor: 0.1,\n\tPriorValueSigmoidFactor: 0.12,\n\n\tSkipCost: 0.5,\n\tLagOffsetCost: 1,\n\tLeadOffsetCost: 1.6,\n\tZeroOffsetCost: 0.58,\n\n\tRelocationThreshold: 6,\n};\n","\nconst {pick} = require(\"lodash\");\n\nconst Config = require(\"./config.js\");\n\n\n\nclass Node {\n\tconstructor (s_note, c_note) {\n\t\tthis.s_note = s_note;\n\t\tthis.c_note = c_note;\n\n\t\tconsole.assert(this.s_note.softIndex != null, \"s_note softIndex is null\");\n\t\tthis.offset = this.s_note.softIndex - this.c_note.softIndex;\n\n\t\tthis._prev = null;\n\t\tthis._totalCost = 0;\n\t\tthis._value = 0;\n\t\tthis.cacheDirty = true;\n\n\t\t//this.evaluatePrev(Node.Zero);\n\t}\n\n\n\tget prev () {\n\t\treturn this._prev;\n\t}\n\n\n\tset prev (value) {\n\t\tif (value != this._prev) {\n\t\t\tthis._prev = value;\n\t\t\tthis.cacheDirty = true;\n\t\t}\n\t}\n\n\n\tget si () {\n\t\treturn this.s_note.index;\n\t}\n\n\n\tget ci () {\n\t\treturn this.c_note.index;\n\t}\n\n\n\tget root () {\n\t\treturn this.prev.root || this;\n\t}\n\n\n\tget rootSi () {\n\t\treturn !this.prev.zero ? this.prev.rootSi : this.si;\n\t}\n\n\n\tget id () {\n\t\treturn `${this.s_note.index},${this.c_note.index}`;\n\t}\n\n\n\tstatic cost (prev, skip, self) {\n\t\treturn prev * Config.CostStepAttenuation + Math.tanh(skip * Config.SkipCost) + Math.tanh(self * 0.5);\n\t}\n\n\n\tupdateCache () {\n\t\tif (this.cacheDirty) {\n\t\t\tthis._totalCost = Node.cost(this.prev.totalCost, this.si - this.prev.si - 1, this.selfCost);\n\t\t\tthis._value = this.prev.value + 1 - Math.tanh(this.selfCost * 0.5);\n\n\t\t\tthis.cacheDirty = false;\n\t\t}\n\t}\n\n\n\tget totalCost () {\n\t\tthis.updateCache();\n\n\t\treturn this._totalCost;\n\t}\n\n\n\tget value () {\n\t\tthis.updateCache();\n\n\t\treturn this._value;\n\t}\n\n\n\tget deep () {\n\t\treturn this.prev.deep + 1;\n\t}\n\n\n\tget path () {\n\t\tconst path = [];\n\t\tfor (let node = this; !node.zero; node = node.prev) {\n\t\t\tpath[node.si] = node.ci;\n\t\t}\n\n\t\tfor (let i = 0; i < path.length; ++i)\n\t\t\tif (typeof path[i] != \"number\")\n\t\t\t\tpath[i] = -1;\n\n\t\treturn path;\n\t}\n\n\n\tdump () {\n\t\treturn pick(this, [\"id\", \"si\", \"ci\", \"rootSi\", \"value\", \"deep\", \"rootSi\", \"offset\", \"prior\", \"selfCost\", \"totalCost\"]);\n\t}\n\n\n\tevaluatePrev (node) {\n\t\tconst cost = this.evaluatePrevCost(node);\n\n\t\tconsole.assert(this.si - node.si >= 1, \"node index error:\", this, node/*, {get [Symbol.toStringTag]() {debugger}}*/);\n\t\t//if (this.si - node.si < 1)\n\t\t//\tdebugger;\n\n\t\tconst totalCost = Node.cost(node.totalCost, this.si - node.si - 1, cost);\n\n\t\tif (!this.prev || totalCost < this.totalCost) {\n\t\t\tthis.prev = node;\n\t\t\tthis.selfCost = cost;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tevaluatePrevCost (node) {\n\t\tlet cost = 0;\n\n\t\tif (node.offset != null) {\n\t\t\tconst bias = this.offset - node.offset;\n\t\t\tconst costCoeff = node.zero ? Config.ZeroOffsetCost : (bias > 0 ? Config.LagOffsetCost : Config.LeadOffsetCost);\n\t\t\tcost += (bias * costCoeff) ** 2;\n\t\t}\n\n\t\treturn cost;\n\t}\n\n\n\tpriorByOffset (offset) {\n\t\tconst distance = Math.abs(this.offset - offset) / 1;//(this.s_note.deltaSi + 0.04);\n\n\t\treturn Math.tanh(this.value * Config.PriorValueSigmoidFactor) - Math.tanh(distance * Config.PriorDistanceSigmoidFactor);\n\t\t//return Math.log(this.value) * Math.tanh(4 / distance);\n\t\t//return this.value - distance;\n\t}\n\n\n\tstatic zero () {\n\t\treturn {\n\t\t\tzero: true,\n\t\t\ttotalCost: 0,\n\t\t\tvalue: 0,\n\t\t\tsi: -1,\n\t\t\tci: -1,\n\t\t\tdeep: 0,\n\t\t\toffset: 0,\n\t\t};\n\t}\n};\n\n\n\nmodule.exports = Node;\n","\nconst Config = require(\"./config.js\");\nconst Node = require(\"./node.js\");\n\n\n\nclass Navigator {\n\tconstructor (criterion, sample, options = {}) {\n\t\tthis.criterion = criterion;\n\t\tthis.sample = sample;\n\n\t\tthis.getCursorOffset = options.getCursorOffset || (() => null);\n\t\tthis.outOfPage = options.outOfPage;\n\n\t\tthis.bestNode = null;\n\t\tthis.fineCursor = null;\n\n\t\tthis.breakingSI = sample.notes.length - 1;\n\n\t\tthis.zeroNode = Node.zero();\n\t\tthis.zeroNode.offset = this.getCursorOffset() || 0;\n\n\t\tthis.relocationThreshold = options.relocationThreshold || Config.RelocationThreshold;\n\t}\n\n\n\tstep (index) {\n\t\t//console.log(\"step:\", this.zeroNode.offset);\n\t\tconst note = this.sample.notes[index];\n\n\t\tif (note.matches.length > 0) {\n\t\t\t//console.log(\"zeroNode.offset:\", index, this.zeroNode.offset);\n\t\t\tnote.matches.forEach(node => {\n\t\t\t\tnode.evaluatePrev(this.zeroNode);\n\t\t\t\t//console.log(\"node:\", node, node.evaluatePrevCost(this.zeroNode), node.offset, this.zeroNode.offset);\n\n\t\t\t\tfor (let si = index - 1; si >= Math.max(this.breakingSI + 1, index - Config.SkipDeep); --si) {\n\t\t\t\t\t//const skipCost = Config.SkipCost * (index - 1 - si);\n\n\t\t\t\t\tconst prevNote = this.sample.notes[si];\n\t\t\t\t\tconsole.assert(prevNote, \"prevNote is null:\", si, index, this.sample.notes);\n\t\t\t\t\tprevNote.matches.forEach(prevNode => {\n\t\t\t\t\t\tconst bias = node.offset - prevNode.offset;\n\t\t\t\t\t\tif (/*prevNode.totalCost + skipCost < node.totalCost\n\t\t\t\t\t\t\t&&*/ (bias < 2 / Config.LagOffsetCost && bias > -2 / Config.LeadOffsetCost))\n\t\t\t\t\t\t\tnode.evaluatePrev(prevNode);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tnode.prior = node.totalCost > 1.99 ? -1 : node.priorByOffset(this.zeroNode.offset);\n\n\t\t\t\tif (node.prior > 0 && this.outOfPage) {\n\t\t\t\t\tconst tick = this.criterion.notes[node.ci].startTick;\n\t\t\t\t\tif (this.outOfPage(tick))\n\t\t\t\t\t\tnode.prior -= 0.7;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tnote.matches.sort((c1, c2) => c2.prior - c1.prior);\n\t\t\tthis.cursors = note.matches;\n\t\t\t//console.log(\"navigator cursors:\", this.cursors);\n\n\t\t\tlet fineCursor = null;\n\t\t\tconst nullLength = this.nullSteps(index);\n\n\t\t\tconst cursor = this.cursors[0];\n\t\t\tif (cursor && cursor.totalCost < 1) {\n\t\t\t\t//console.log(\"nullLength:\", nullLength, nullLength * Math.log(cursor.value / 4));\n\t\t\t\tif (cursor.prior > 0 || (cursor.totalCost < 0.4 && Math.log(Math.max(nullLength * cursor.value, 1e-3)) > this.relocationThreshold)) {\n\t\t\t\t\tthis.zeroNode.offset = cursor.offset;\n\n\t\t\t\t\tfineCursor = cursor;\n\n\t\t\t\t\tif (!this.bestNode || cursor.value > this.bestNode.value)\n\t\t\t\t\t\tthis.bestNode = cursor;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fineCursor)\n\t\t\t\tthis.fineCursor = fineCursor;\n\t\t\telse {\n\t\t\t\tif (!this.resetCursor(index, {breaking: false/*nullLength > Config.SkipDeep*/})) {\n\t\t\t\t\tthis.zeroNode.offset += note.deltaSi * Math.tanh(nullLength);\n\t\t\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", note.deltaSi, nullLength);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthis.cursors = [];\n\t}\n\n\n\tpath ({fromIndex = 0, toIndex = this.sample.notes.length - 1} = {}) {\n\t\tconst path = [];\n\n\t\tlet offset = null;\n\n\t\tfor (let si = toIndex; si >= fromIndex;) {\n\t\t\tconst note = this.sample.notes[si];\n\n\t\t\tif (!note.matches.length || note.matches[0].prior < -0.01 || note.matches[0].totalCost >= 1) {\n\t\t\t\t//if (note.matches.length)\n\t\t\t\t//\tconsole.log(\"path -1:\", si, note.matches[0].prior, note.matches[0].totalCost);\n\t\t\t\tpath[si] = -1;\n\t\t\t\t--si;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// sort nodes by backwards heuristic offset\n\t\t\tif (offset != null) {\n\t\t\t\tnote.matches.forEach(node => node.backPrior = (node.totalCost < 1.99 ? node.priorByOffset(offset) : -1));\n\t\t\t\tnote.matches.sort((n1, n2) => n2.backPrior - n1.backPrior);\n\t\t\t}\n\n\t\t\tconst node = note.matches[0];\n\t\t\tnode.path.forEach((ci, si) => path[si] = ci);\n\t\t\t//console.log(\"node path:\", si, node.path);\n\n\t\t\toffset = node.root.offset;\n\n\t\t\tsi = node.rootSi - 1;\n\t\t}\n\n\t\tconsole.assert(path.length == toIndex + 1, \"path length error:\", path, fromIndex, toIndex + 1,\n\t\t\tthis.sample.notes.length, this.sample.notes.length ? this.sample.notes[this.sample.notes.length - 1].index : null);\n\n\t\treturn path;\n\t}\n\n\n\tnullSteps (index) {\n\t\treturn index - (this.fineCursor ? this.fineCursor.si : -1) - 1;\n\t}\n\n\n\tresetCursor (index, {breaking = true} = {}) {\n\t\tif (breaking)\n\t\t\tthis.breakingSI = index;\n\n\t\tconst cursorOffset = this.getCursorOffset();\n\t\tif (cursorOffset != null) {\n\t\t\t//console.log(\"cursorOffset:\", cursorOffset);\n\n\t\t\tthis.zeroNode.offset = cursorOffset;\n\t\t\t//this.breaking = this.nullSteps(index) > Config.SkipDeep;\n\t\t\t//if (this.breaking)\t// trivial zero node si resets result in focus path interruption\n\t\t\tthis.zeroNode.si = index;\n\t\t\tthis.fineCursor = null;\n\n\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", cursorOffset);\n\t\t\t//console.log(\"cursor offset reset:\", cursorOffset);\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tget relocationTendency () {\n\t\tconst cursor = this.cursors && this.cursors[0];\n\t\tif (!cursor)\n\t\t\treturn null;\n\n\t\tconst nullLength = this.nullSteps(cursor.si);\n\t\tif (nullLength <= 0)\n\t\t\treturn 0;\n\n\t\treturn Math.log(Math.max(nullLength * cursor.value, 1e-3)) / this.relocationThreshold;\n\t}\n};\n\n\n\nmodule.exports = Navigator;\n","\nconst Node = require(\"./node.js\");\nconst Navigator = require(\"./navigator.js\");\n\n\n\nconst HEART_BEAT = 800;\t// in ms\nconst SIMULTANEOUS_INTERVAL = HEART_BEAT * 0.24;\n\n\nconst normalizeInterval = interval => Math.tanh(interval / SIMULTANEOUS_INTERVAL);\n\n\n// greater softIndexFactor make 'harder' soft index\nconst makeNoteSoftIndex = function (notes, index, {softIndexFactor = 1} = {}) {\n\tindex = Number(index);\n\n\tconst note = notes[index];\n\n\t// make soft index\n\tif (index > 0) {\n\t\tconst lastNote = notes[index - 1];\n\n\t\tconsole.assert(note.start != null, \"note.start is null\", note);\n\t\tconsole.assert(lastNote.start != null, \"lastNote.start is null\", lastNote);\n\n\t\tnote.deltaSi = normalizeInterval((note.start - lastNote.start) * softIndexFactor);\n\t\tnote.softIndex = lastNote.softIndex + note.deltaSi;\n\n\t\tconsole.assert(!Number.isNaN(note.deltaSi), \"note.deltaSi is NaN.\", note.start, lastNote.start);\n\t}\n\telse {\n\t\tnote.softIndex = 0;\n\t\tnote.deltaSi = 0;\n\t}\n};\n\n\nconst makeMatchNodes = function (note, criterion, zeroNode = Node.zero()) {\n\tnote.matches = [];\n\n\tconst targetList = criterion.pitchMap[note.pitch];\n\tif (targetList) {\n\t\tfor (const targetNote of targetList) {\n\t\t\tconst node = new Node(note, targetNote);\n\t\t\tif (zeroNode)\n\t\t\t\tnode.evaluatePrev(zeroNode);\n\n\t\t\tnote.matches.push(node);\n\t\t}\n\t}\n};\n\n\nconst genNotationContext = function (notation, {softIndexFactor = 1} = {}) {\n\tfor (let i = 0; i < notation.notes.length; ++i)\n\t\tmakeNoteSoftIndex(notation.notes, i, {softIndexFactor});\n};\n\n\nconst runNavigation = async function(criterion, sample, onStep) {\n\tconst navigator = new Navigator(criterion, sample);\n\tnavigator.resetCursor(-1);\n\n\tfor (let i = 0; i < sample.notes.length; ++i) {\n\t\tnavigator.step(i);\n\n\t\tconst next = await (onStep && onStep(i, navigator));\n\t\tif (next === Symbol.for(\"end\")) {\n\t\t\tconsole.log(\"Navigation interrupted.\");\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t//console.log(\"Navigation accomplished.\");\n\n\treturn navigator;\n};\n\n\n\nmodule.exports = {\n\tnormalizeInterval,\n\tmakeNoteSoftIndex,\n\tmakeMatchNodes,\n\tgenNotationContext,\n\trunNavigation,\n\tNavigator,\n\tNode,\n};\n","\nconst MIDI = require(\"./MIDI\");\n\n\n\nconst trackDeltaToAbs = events => {\n\tlet tick = 0;\n\n\tevents.forEach(event => {\n\t\ttick += event.deltaTime;\n\t\tevent.tick = tick;\n\t});\n};\n\n\nconst trackAbsToDelta = events => {\n\tlet lastTick = 0;\n\n\tevents.sort((e1, e2) => e1.tick - e2.tick).forEach(event => {\n\t\tevent.deltaTime = event.tick - lastTick;\n\t\tlastTick = event.tick;\n\t});\n};\n\n\nconst sliceTrack = (track, startTick, endTick) => {\n\ttrackDeltaToAbs(track);\n\n\tconst events = [];\n\tconst status = {};\n\n\ttrack.forEach(event => {\n\t\tif (event.tick >= startTick && event.tick <= endTick && event.subtype !== \"endOfTrack\")\n\t\t\tevents.push({\n\t\t\t\t...event,\n\t\t\t\ttick: event.tick - startTick,\n\t\t\t});\n\t\telse if (event.tick < startTick) {\n\t\t\tswitch (event.type) {\n\t\t\tcase \"meta\":\n\t\t\t\tstatus[event.subtype] = event;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\tObject.values(status).forEach(event => events.push({\n\t\t...event,\n\t\ttick: 0,\n\t}));\n\n\tevents.push({\n\t\ttick: endTick - startTick,\n\t\ttype: \"meta\",\n\t\tsubtype: \"endOfTrack\",\n\t});\n\n\ttrackAbsToDelta(events);\n\n\treturn events;\n};\n\n\nconst sliceMidi = (midi, startTick, endTick) => ({\n\theader: midi.header,\n\ttracks: midi.tracks.map(track => sliceTrack(track, startTick, endTick)),\n});\n\n\nconst TICKS_PER_BEATS = 480;\n\nconst EXCLUDE_MIDI_EVENT_SUBTYPES = [\n\t\"endOfTrack\", \"trackName\",\n\t\"noteOn\", \"noteOff\",\n];\n\n\nfunction encodeToMIDIData(notation, {startTime, unclosedNoteDuration = 30e+3} = {}) {\n\tnotation.microsecondsPerBeat = notation.microsecondsPerBeat || 500000;\n\n\tconst ticksPerBeat = TICKS_PER_BEATS;\n\tconst msToTicks = ticksPerBeat * 1000 / notation.microsecondsPerBeat;\n\n\tconst header = { formatType: 0, ticksPerBeat };\n\tconst track = [];\n\n\tif (!Number.isFinite(startTime)) {\n\t\tif (!notation.notes || !notation.notes[0])\n\t\t\tthrow new Error(\"encodeToMidiData: no start time specificed\");\n\n\t\tstartTime = notation.notes[0].start;\n\t}\n\n\ttrack.push({ time: startTime, type: \"meta\", subtype: \"copyrightNotice\", text: `Composed by MusicWdigets. BUILT on ${new Date(Number(process.env.VUE_APP_BUILD_TIME)).toDateString()}` });\n\n\tconst containsTempo = notation.events && notation.events.find(event => event.subtype == \"setTempo\");\n\tif (!containsTempo) {\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"timeSignature\", numerator: 4, denominator: 4, thirtyseconds: 8 });\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"setTempo\", microsecondsPerBeat: notation.microsecondsPerBeat });\n\t}\n\n\t//if (notation.correspondences)\n\t//\ttrack.push({ time: startTime, type: \"meta\", subtype: \"text\", text: \"find-corres:\" + notation.correspondences.join(\",\") });\n\n\tlet endTime = startTime || 0;\n\n\tif (notation.notes) {\n\t\tfor (const note of notation.notes) {\n\t\t\ttrack.push({\n\t\t\t\ttime: note.start,\n\t\t\t\ttype: \"channel\",\n\t\t\t\tsubtype: \"noteOn\",\n\t\t\t\tchannel: note.channel || 0,\n\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\tvelocity: note.velocity,\n\t\t\t\tfinger: note.finger,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, note.start);\n\n\t\t\tif (Number.isFinite(unclosedNoteDuration))\n\t\t\t\tnote.duration = note.duration || unclosedNoteDuration;\n\t\t\tif (note.duration) {\n\t\t\t\ttrack.push({\n\t\t\t\t\ttime: note.start + note.duration,\n\t\t\t\t\ttype: \"channel\",\n\t\t\t\t\tsubtype: \"noteOff\",\n\t\t\t\t\tchannel: note.channel || 0,\n\t\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\t\tvelocity: 0,\n\t\t\t\t});\n\n\t\t\t\tendTime = Math.max(endTime, note.start + note.duration);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (notation.events) {\n\t\tconst events = notation.events.filter(event => !EXCLUDE_MIDI_EVENT_SUBTYPES.includes(event.data.subtype));\n\t\tfor (const event of events) {\n\t\t\ttrack.push({\n\t\t\t\ttime: event.time,\n\t\t\t\t...event.data,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, event.time);\n\t\t}\n\t}\n\n\ttrack.push({ time: endTime + 100, type: \"meta\", subtype: \"endOfTrack\" });\n\n\ttrack.sort(function (e1, e2) { return e1.time - e2.time; });\n\n\t// append finger event after every noteOn event\n\ttrack.map((event, index) => ({event, index}))\n\t\t.filter(({event}) => event.subtype == \"noteOn\" && event.finger != null)\n\t\t.reverse()\n\t\t.forEach(({event, index}) => track.splice(index + 1, 0, {\n\t\t\ttime: event.time,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `fingering(${event.finger})`,\n\t\t}));\n\n\ttrack.forEach(event => event.ticks = Math.round((event.time - startTime) * msToTicks));\n\ttrack.forEach((event, i) => event.deltaTime = (event.ticks - (i > 0 ? track[i - 1].ticks : 0)));\n\n\treturn {header, tracks: [track]};\n};\n\n\nfunction encodeToMIDI(notation, options) {\n\tconst data = encodeToMIDIData(notation, options);\n\treturn MIDI.encodeMidiFile(data);\n};\n\n\n\nmodule.exports = {\n\tsliceMidi,\n\tencodeToMIDIData,\n\tencodeToMIDI,\n};\n","\nconst MIDI = require(\"./source/inc/MIDI\");\nconst MusicNotation = require(\"./source/inc/MusicNotation\");\nconst MidiPlayer = require(\"./source/inc/MidiPlayer.js\");\nconst Matcher = require(\"./source/inc/Matcher\");\nconst MidiUtils = require(\"./source/inc/MidiUtils.js\");\n\n\n\nmodule.exports = {\n\tMIDI,\n\tMusicNotation,\n\tMidiPlayer,\n\tMatcher,\n\tMidiUtils,\n};\n","import pick from 'lodash/pick';\n\nimport { MusicNotation, MIDI } from '@k-l-lambda/music-widgets';\n\n//import {MeasureLayout, LayoutType} from\nimport { ImplicitType, ChordPosition } from './types';\n\nconst WHOLE_DURATION_MAGNITUDE = 1920;\nconst TICKS_PER_BEAT = WHOLE_DURATION_MAGNITUDE / 4;\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ninterface StaffNoteProperties {\n\trest: boolean;\n\ttied: boolean;\n\toverlapped: boolean;\n\timplicitType: ImplicitType;\n\tafterGrace: boolean;\n\tchordPosition: ChordPosition;\n\tdivision: number;\n\n\tcontextIndex: number;\n\tstaffTrack: number;\n}\n\ninterface MetaNote extends MusicNotation.Note, Partial {\n\tid: string;\n\tmeasure: number;\n\tendTick: number;\n}\n\ninterface SubNote {\n\tstartTick: number;\n\tendTick: number;\n\tpitch: number;\n\tvelocity?: number;\n}\n\ninterface MeasureNote extends Partial {\n\ttick: number;\n\tpitch: number;\n\tduration: number;\n\tchordPosition: ChordPosition;\n\tstaff: number;\n\n\ttrack: number;\n\tchannel: number;\n\tid: string;\n\tids: string[];\n\n\tsubNotes: SubNote[];\n}\n\ninterface MeasureEvent {\n\tdata: any;\n\ttrack: number;\n\tticks?: number;\n}\n\ninterface Measure {\n\ttick: number;\n\tduration: number;\n\n\tnotes: MeasureNote[];\n\tevents?: MeasureEvent[];\n\ttimeSignature?: Fraction;\n\tkeySignature?: number;\n}\n\ninterface PerformOptions {\n\twithRestTied?: boolean;\n}\n\ninterface MidiEvent extends MIDI.MidiEvent {\n\tticks?: number;\n\tmeasure?: number;\n\tids?: string[];\n\tstaffTrack?: number;\n\tstaff?: number;\n}\ntype MidiTrack = MidiEvent[];\n\nconst EXTRA_NOTE_FIELDS = ['rest', 'tied', 'overlapped', 'implicitType', 'afterGrace', 'contextIndex', 'staffTrack', 'chordPosition', 'division'];\nconst COMMON_NOTE_FIELDS = ['id', 'ids', 'pitch', 'velocity', 'track', 'channel', ...EXTRA_NOTE_FIELDS];\n\nclass MetaNotation {\n\t//pitchContextGroup: PitchContextTable[];\n\t//measureLayout: MeasureLayout;\n\tmeasures: Measure[];\n\n\ttrackNames: string[];\n\tidTrackMap: { [key: string]: number };\n\n\tripe: boolean = false;\n\n\tstatic fromAbsoluteNotes(notes: MetaNote[], measureHeads: number[], data?: Partial): MetaNotation {\n\t\tconst notation = new MetaNotation(data);\n\n\t\tnotation.measures = Array(measureHeads.length)\n\t\t\t.fill(null)\n\t\t\t.map((__, i) => {\n\t\t\t\tconst tick = measureHeads[i];\n\t\t\t\tconst duration = measureHeads[i + 1] ? measureHeads[i + 1] - tick : 0;\n\n\t\t\t\tconst mnotes = notes\n\t\t\t\t\t.filter((note) => note.measure === i + 1)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(note) =>\n\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\ttick: note.startTick - tick,\n\t\t\t\t\t\t\t\tduration: note.endTick - note.startTick,\n\t\t\t\t\t\t\t\t...pick(note, COMMON_NOTE_FIELDS),\n\t\t\t\t\t\t\t\tsubNotes: [],\n\t\t\t\t\t\t\t} as MeasureNote)\n\t\t\t\t\t);\n\n\t\t\t\t// reduce note data size\n\t\t\t\tmnotes.forEach((mn) =>\n\t\t\t\t\t['rest', 'tied', 'implicitType', 'afterGrace'].forEach((field) => {\n\t\t\t\t\t\tif (!mn[field]) delete mn[field];\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes: mnotes,\n\t\t\t\t};\n\t\t\t});\n\n\t\tnotation.idTrackMap = notes.reduce((map, note) => {\n\t\t\tif (note.id) map[note.id] = note.track;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn notation;\n\t}\n\n\tstatic performAbsoluteNotes(abNotes: MetaNote[], { withRestTied = false }: PerformOptions = {}): MusicNotation.Note[] {\n\t\tconst notes = abNotes\n\t\t\t.filter((note) => (withRestTied || (!note.rest && !note.tied)) && !note.overlapped)\n\t\t\t.map((note) => ({\n\t\t\t\tmeasure: note.measure,\n\t\t\t\tchannel: note.channel,\n\t\t\t\ttrack: note.track,\n\t\t\t\tstart: note.start,\n\t\t\t\tstartTick: note.startTick,\n\t\t\t\tendTick: note.endTick,\n\t\t\t\tpitch: note.pitch,\n\t\t\t\tduration: note.duration,\n\t\t\t\tvelocity: note.velocity || 127,\n\t\t\t\tid: note.id,\n\t\t\t\tids: note.ids,\n\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\tcontextIndex: note.contextIndex,\n\t\t\t\timplicitType: note.implicitType,\n\t\t\t\tchordPosition: note.chordPosition,\n\t\t\t}));\n\n\t\tconst noteMap = notes.reduce((map, note) => {\n\t\t\tconst key = `${note.channel}|${note.start}|${note.pitch}`;\n\t\t\tconst priorNote = map[key];\n\t\t\tif (priorNote) priorNote.ids.push(...note.ids);\n\t\t\telse map[key] = note;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(noteMap);\n\t}\n\n\tconstructor(data?: Partial) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\t/*get ordinaryMeasureIndices (): number[] {\n\t\tif (this.measureLayout)\n\t\t\treturn this.measureLayout.serialize(LayoutType.Ordinary);\n\n\t\treturn Array(this.measures.length).fill(null).map((_, i) => i + 1);\n\t}*/\n\n\t// In Lilypond 2.20.0, minus tick value at the head of a track result in MIDI event time bias,\n\t//\tSo store the bias values to correct MIDI time from lilyond.\n\tget trackTickBias(): { [key: string]: number } {\n\t\tconst headMeasure = this.measures[0];\n\t\treturn this.trackNames.reduce((map, name, track) => {\n\t\t\tmap[name] = 0;\n\t\t\tif (headMeasure) {\n\t\t\t\tconst note = headMeasure.notes.find((note) => note.track === track);\n\t\t\t\tif (note) map[name] = Math.min(note.tick, 0);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget idSet(): Set {\n\t\treturn this.measures.reduce(\n\t\t\t(set, measure) => (measure.notes.filter((note) => !note.rest).forEach((note) => note.ids.forEach((id) => set.add(id))), set),\n\t\t\tnew Set()\n\t\t);\n\t}\n\n\ttoJSON() {\n\t\treturn {\n\t\t\t__prototype: 'LilyNotation',\n\t\t\t//pitchContextGroup: this.pitchContextGroup,\n\t\t\t//measureLayout: this.measureLayout,\n\t\t\tmeasures: this.measures,\n\t\t\tidTrackMap: this.idTrackMap,\n\t\t\ttrackNames: this.trackNames,\n\t\t\tripe: this.ripe,\n\t\t};\n\t}\n\n\ttoAbsoluteNotes(measureIndices: number[] /*= this.ordinaryMeasureIndices*/): MetaNote[] {\n\t\tlet measureTick = 0;\n\t\tconst measureNotes: MetaNote[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst notes = measure.notes.map((mnote) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartTick: measureTick + mnote.tick,\n\t\t\t\t\tendTick: measureTick + mnote.tick + mnote.duration,\n\t\t\t\t\tstart: measureTick + mnote.tick,\n\t\t\t\t\tduration: mnote.duration,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t\t...pick(mnote, COMMON_NOTE_FIELDS),\n\t\t\t\t} as MetaNote;\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn notes;\n\t\t});\n\n\t\treturn [].concat(...measureNotes);\n\t}\n\n\t/*getMeasureIndices (type: LayoutType) {\n\t\treturn this.measureLayout.serialize(type);\n\t}*/\n\n\ttoPerformingNotation(measureIndices: number[] /*= this.ordinaryMeasureIndices*/, options: PerformOptions = {}): MusicNotation.Notation {\n\t\t//console.debug(\"toPerformingNotation:\", this, measureIndices);\n\t\tconst abNotes = this.toAbsoluteNotes(measureIndices);\n\t\tconst notes = MetaNotation.performAbsoluteNotes(abNotes, options);\n\n\t\t//const lastNote = notes[notes.length - 1];\n\t\tconst endTime = Math.max(...notes.map((note) => note.start + note.duration));\n\n\t\tconst endTick = measureIndices.reduce((tick, index) => tick + this.measures[index - 1].duration, 0);\n\n\t\tconst notation = new MusicNotation.Notation({\n\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\tmeta: {},\n\t\t\ttempos: [], // TODO\n\t\t\tchannels: [notes],\n\t\t\tendTime,\n\t\t\tendTick,\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\ttoPerformingMIDI(measureIndices: number[], { trackList }: { trackList?: boolean[] } = {}): MIDI.MidiData & { zeroTick: number } {\n\t\tif (!measureIndices.length) return null;\n\n\t\t// to avoid begin minus tick\n\t\tconst zeroTick = -Math.min(0, ...(this.measures[0]?.events.map((e) => e.ticks) || []), ...(this.measures[0]?.notes.map((note) => note.tick) || []));\n\n\t\tlet measureTick = zeroTick;\n\t\tconst measureEvents: MeasureEvent[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst events = measure.events.map((mevent) => ({\n\t\t\t\tticks: measureTick + mevent.ticks,\n\t\t\t\ttrack: mevent.track,\n\t\t\t\tdata: {\n\t\t\t\t\t...mevent.data,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn events;\n\t\t});\n\n\t\tconst eventPriority = (event: MidiEvent): number => event.ticks + (event.subtype === 'noteOff' ? -1e-8 : 0);\n\n\t\tconst tracks: MidiTrack[] = [].concat(...measureEvents).reduce((tracks, mevent) => {\n\t\t\ttracks[mevent.track] = tracks[mevent.track] || [];\n\t\t\ttracks[mevent.track].push({\n\t\t\t\tticks: mevent.ticks,\n\t\t\t\t...mevent.data,\n\t\t\t});\n\n\t\t\treturn tracks;\n\t\t}, []);\n\n\t\ttracks[0] = tracks[0] || [];\n\t\t/*tracks[0].push({\n\t\t\tticks: 0,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `${npmPackage.name} ${npmPackage.version}`,\n\t\t});*/\n\n\t\t// append note events\n\t\tmeasureTick = zeroTick;\n\t\tmeasureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\t\t\tif (!Number.isFinite(measure.duration)) return;\n\n\t\t\tmeasure.notes.forEach((note) => {\n\t\t\t\tif (trackList && !trackList[note.track]) return;\n\n\t\t\t\tif (note.rest) return;\n\n\t\t\t\tconst tick = measureTick + note.tick;\n\n\t\t\t\tconst track = (tracks[note.track] = tracks[note.track] || []);\n\n\t\t\t\tnote.subNotes.forEach((subnote) => {\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.startTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: subnote.velocity,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.endTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: 0,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\t\t});\n\n\t\tconst finalTick = measureTick;\n\n\t\t// ensure no empty track\n\t\tfor (let t = 0; t < tracks.length; ++t) tracks[t] = tracks[t] || [];\n\n\t\t// sort & make deltaTime\n\t\ttracks.forEach((events) => {\n\t\t\tevents.sort((e1, e2) => eventPriority(e1) - eventPriority(e2));\n\n\t\t\tlet ticks = 0;\n\t\t\tevents.forEach((event) => {\n\t\t\t\tevent.deltaTime = event.ticks - ticks;\n\t\t\t\tif (!Number.isFinite(event.deltaTime)) event.deltaTime = 0;\n\t\t\t\telse ticks = event.ticks;\n\t\t\t});\n\n\t\t\tevents.push({ deltaTime: Math.max(finalTick - ticks, 0), type: 'meta', subtype: 'endOfTrack' });\n\t\t});\n\n\t\treturn {\n\t\t\theader: {\n\t\t\t\tformatType: 0,\n\t\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\t},\n\t\t\ttracks,\n\t\t\tzeroTick,\n\t\t};\n\t}\n\n\ttoPerformingNotationWithEvents(measureIndices: number[], options: { trackList?: boolean[] } = {}): MusicNotation.Notation {\n\t\tif (!measureIndices.length) return null;\n\n\t\tconst { zeroTick, ...midi } = this.toPerformingMIDI(measureIndices, options);\n\t\tconst notation = MusicNotation.Notation.parseMidi(midi);\n\n\t\tassignNotationNoteDataFromEvents(notation);\n\n\t\tlet tick = zeroTick;\n\n\t\tnotation.measures = measureIndices.map((index) => {\n\t\t\tconst startTick = tick;\n\t\t\ttick += this.measures[index - 1].duration;\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\tstartTick,\n\t\t\t\tendTick: tick,\n\t\t\t};\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\t// find the MIDI event of setTempo in measures data, and change the value of microsecondsPerBeat\n\tsetTempo(bpm: number): boolean {\n\t\tlet found = false;\n\t\tfor (const measure of this.measures) {\n\t\t\tfor (const event of measure.events) {\n\t\t\t\tif (event.data.subtype === 'setTempo') {\n\t\t\t\t\tevent.data.microsecondsPerBeat = 60e6 / bpm;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn found;\n\t}\n}\n\nconst assignNotationNoteDataFromEvents = (midiNotation: MusicNotation.NotationData, fields = ['ids', 'measure', 'staffTrack']) => {\n\tconst noteId = (channel: number, pitch: number, tick: number): string => `${channel}|${pitch}|${tick}`;\n\n\tconst noteMap = midiNotation.notes.reduce((map, note) => {\n\t\tmap[noteId(note.channel, note.pitch, note.startTick)] = note;\n\n\t\treturn map;\n\t}, {});\n\n\tmidiNotation.events.forEach((event) => {\n\t\tif (event.data.subtype === 'noteOn') {\n\t\t\tconst id = noteId(event.data.channel, event.data.noteNumber, event.ticks);\n\t\t\tconst note = noteMap[id];\n\t\t\tconsole.assert(!!note, 'cannot find note of', id);\n\n\t\t\tif (note) Object.assign(note, pick(event.data, fields));\n\t\t}\n\t});\n};\n\nexport { MetaNote, MetaNotation, MidiEvent };\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","import _SHA256 from 'crypto-js/sha256';\n\nconst SHA256 = (source: string): Uint8Array => {\n\tconst { words, sigBytes } = _SHA256(source);\n\tconst uwords = words.map((x) => (x < 0 ? x + 0x100000000 : x));\n\tconst word_len = sigBytes / words.length;\n\n\treturn new Uint8Array(sigBytes).map((_, i) => (uwords[Math.floor(i / word_len)] >> ((3 - (i % word_len)) * 8)) & 0xff);\n};\n\ntype Hash = Uint8Array;\nconst HASH_LEN = 256;\n\nclass HashVector {\n\tfields: number[];\n\n\tstatic fromHash(hash: Hash): HashVector {\n\t\tconst fields = [];\n\t\tfor (const byte of hash) {\n\t\t\tfor (let b = 0; b < 8; ++b) fields.push((byte >> b) & 1 ? 1 : -1);\n\t\t}\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic fromString(source: string): HashVector {\n\t\tconst hash = SHA256(source);\n\t\treturn HashVector.fromHash(hash);\n\t}\n\n\tstatic fromWords(words: string[]): HashVector {\n\t\tconst vs = words.map((word) => HashVector.fromString(word));\n\t\treturn vs.reduce((sum, v) => sum.add(v), HashVector.zero);\n\t}\n\n\tstatic concat(...vectors: HashVector[]): HashVector {\n\t\tconst fields = vectors.map((v) => v.fields).flat(1);\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tconstructor(fields: number[] | null = null) {\n\t\tthis.fields = fields || Array(HASH_LEN).fill(0);\n\t}\n\n\tget length(): number {\n\t\treturn this.fields.length;\n\t}\n\n\ttoHash(): Hash {\n\t\treturn Uint8Array.from(\n\t\t\tArray(this.length / 8)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => {\n\t\t\t\t\tconst bits = this.fields.slice(i * 8, (i + 1) * 8);\n\n\t\t\t\t\treturn bits.reduce((byte, bit, b) => byte | ((bit > 0 ? 1 : 0) << b), 0);\n\t\t\t\t})\n\t\t) as Hash;\n\t}\n\n\tadd(vec: HashVector): this {\n\t\tthis.fields.forEach((value, i) => (this.fields[i] = value + vec.fields[i]));\n\n\t\treturn this;\n\t}\n\n\tscale(factor: number): this {\n\t\tthis.fields = this.fields.map((value) => value * factor);\n\n\t\treturn this;\n\t}\n\n\tsub(crop: number): HashVector {\n\t\tconst fields = crop > 0 ? this.fields.slice(0, crop) : this.fields.slice(crop);\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic get zero(): HashVector {\n\t\treturn new HashVector();\n\t}\n}\n\nconst odds = (byte: number): number => {\n\tlet result = 0;\n\tfor (let b = byte; b > 0; b >>= 1) {\n\t\tif (b % 2) ++result;\n\t}\n\n\treturn result;\n};\nconst ODDS = Array(2 ** 8)\n\t.fill(0)\n\t.map((_, i) => odds(i));\nconst ODDS_HEX = ODDS.reduce((table, odd, i) => ({ ...table, [('0' + i.toString(16)).slice(-2)]: odd }), {});\n\nconst countOnes = (hash: Hash): number => hash.reduce((sum, byte) => sum + ODDS[byte], 0);\n\nconst xorHashes = (hash1: Hash, hash2: Hash): Hash => hash1.map((byte, i) => byte ^ hash2[i]) as Hash;\n\nconst cosHashes = (hash1: Hash, hash2: Hash): number => {\n\tconst len = hash1.length * 8;\n\n\tconst xor = xorHashes(hash1, hash2);\n\tconst ones = countOnes(xor);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst cosBigInts = (hash1: bigint, hash2: bigint, len: number = HASH_LEN): number => {\n\tconst xor = hash1 ^ hash2;\n\tconst xor_hex = '0'.repeat(len / 4) + xor.toString(16);\n\n\tconst ones = Array(len / 8)\n\t\t.fill(0)\n\t\t.reduce((ones, _, i) => ones + ODDS_HEX[xor_hex.slice((i + 1) * -2, i ? i * -2 : undefined)], 0);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst i2hex = (i) => ('0' + i.toString(16)).slice(-2);\nconst hashToHex = (hash: Hash): string => Array.from(hash).map(i2hex).join('');\n\nconst hexToHash = (hex: string): Hash =>\n\tUint8Array.from(\n\t\tArray(hex.length / 2)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => hex.substring(i * 2, (i + 1) * 2))\n\t\t\t.map((x) => parseInt(x, 16))\n\t);\n\nconst hashToBigInt = (hash: Hash): bigint => {\n\t// __NOT_FOR_BROWSER_\n\treturn Array.from(hash).reduce((r, x) => r * 0x100n + BigInt(x), 0n);\n\t/*\n\t// _NOT_FOR_BROWSER__\n\tthrow new Error('BigInt not supported');\n\t//*/\n};\n\nconst hashFromWords = (words: string[]): Hash => HashVector.fromWords(words).toHash();\n\nexport { Hash, HashVector, cosHashes, cosBigInts, hashToHex, hexToHash, hashToBigInt, hashFromWords };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { cosHashes, Hash, hashToBigInt, hashToHex, HashVector } from './hashVector';\nimport { Performing, RegulationOptions, TermMeasure, TermVoice, VoiceMeasure, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ContextedTerm, EventTerm, TempoTerm, TermPitch, WHOLE_DURATION } from './term';\nimport { TokenType } from './token';\nimport { argmax, frac, fractionMul, noteToPitch, printFraction, reducedFraction } from './utils';\n\nexport const emptyVoiceFromStaffMeasure = (staff: TermMeasure, chiefVoice: boolean = false): VoiceMeasure => {\n\treturn {\n\t\tempty: true,\n\t\tduration: staff.duration,\n\t\ttickMap: {\n\t\t\t[0]: EventTerm.space({ duration: staff.duration, tick: 0 }),\n\t\t},\n\t\ttimeSignature: staff.timeSignature,\n\t\ttimeSigNumeric: staff.timeSigNumeric,\n\t\tkeySignature: staff.keySignature,\n\t\tcontextedTerms: staff.terms.filter((term) => term instanceof ContextedTerm && (!term.staffLevel || chiefVoice)) as ContextedTerm[],\n\t\tmarks: [],\n\t};\n};\n\nconst removeEmptyMeasuresInVoicesStaves = (staves: VoicesStaff[]): void => {\n\t//console.assert(staves[0] && staves[0].voices[0], 'voices is empty:', staves);\n\tif (!(staves[0] && staves[0].voices[0])) {\n\t\tconsole.warn('empty voices:', staves);\n\t\treturn;\n\t}\n\n\tconst measureCount = staves[0].voices[0].measures.length;\n\tconst measureEmpties = Array(measureCount)\n\t\t.fill(null)\n\t\t.map((_, m) => {\n\t\t\tfor (const staff of staves) {\n\t\t\t\tfor (const voice of staff.voices) {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tif (!measure.empty) return false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\tmeasureEmpties.forEach((empty, m) => {\n\t\tif (empty) {\n\t\t\tstaves.forEach((staff) =>\n\t\t\t\tstaff.voices.forEach((voice) => {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tmeasure.tickMap = {};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t});\n};\n\nconst markingTiesInVoice = (voice: TermVoice) => {\n\tconst events = [].concat(...voice.measures.map((m) => Object.values(m.tickMap).filter((event) => event instanceof EventTerm)));\n\t//console.log(\"events:\", events);\n\n\tfor (let i = 1; i < events.length; ++i) {\n\t\tconst event0 = events[i - 1];\n\t\tconst event1 = events[i];\n\t\tif (!event0.rest && !event1.rest) {\n\t\t\tif (event0.accessories.some((acc) => acc.type === TokenType.SlurBegin) && event1.accessories.some((acc) => acc.type === TokenType.SlurEnd)) {\n\t\t\t\tconst pitches = event0.pitches.filter((p0) => event1.pitches.some((p1) => p1.note === p0.note && p1.alter === p0.alter));\n\t\t\t\tif (pitches.length > 0) {\n\t\t\t\t\tevent0.tying = true;\n\t\t\t\t\tevent1.tied = true;\n\n\t\t\t\t\tpitches.forEach((p0) => {\n\t\t\t\t\t\tp0.tying = true;\n\t\t\t\t\t\tconst p1 = event1.pitches.find((p1) => p1.note === p0.note && p1.alter === p0.alter);\n\t\t\t\t\t\tp1.tied = true;\n\t\t\t\t\t});\n\n\t\t\t\t\t// remove slurs from accessories\n\t\t\t\t\tpitches.forEach(() => {\n\t\t\t\t\t\tconst si0 = event0.accessories.findIndex((acc) => acc.type === TokenType.SlurBegin);\n\t\t\t\t\t\tif (si0 >= 0) event0.accessories.splice(si0, 1);\n\n\t\t\t\t\t\tconst si1 = event1.accessories.findIndex((acc) => acc.type === TokenType.SlurEnd);\n\t\t\t\t\t\tif (si1 >= 0) event1.accessories.splice(si1, 1);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nclass Spartito extends SimpleClass {\n\tstatic className = 'Spartito';\n\n\tstavesCount: number;\n\tstaffGroups: number[][];\n\tmeasures: SpartitoMeasure[];\n\n\ttags: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.measures.forEach((measure) => (measure.staffGroups = this.staffGroups));\n\t}\n\n\tget regulated(): boolean {\n\t\treturn this.measures.every((m) => m.regulated);\n\t}\n\n\tget solidMeasureCount(): number {\n\t\treturn this.measures.filter((measure) => !measure.empty).length;\n\t}\n\n\tget measureIndexMapping(): number[] {\n\t\tlet n = 0;\n\t\treturn this.measures.map((measure) => {\n\t\t\treturn !measure.empty ? n++ : null;\n\t\t});\n\t}\n\n\tget headBPM(): number {\n\t\tfor (const measure of this.measures) {\n\t\t\tif (measure.marks) {\n\t\t\t\tconst tempoMark = measure.marks.find((mark) => mark instanceof TempoTerm && mark.isValid()) as TempoTerm;\n\t\t\t\tif (tempoMark) return tempoMark.bpm;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget measureLayoutCode(): string {\n\t\tconst ms = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure, i) => ({\n\t\t\t\tindex: i + 1,\n\t\t\t\tvb: measure.voltaBegin,\n\t\t\t\tve: measure.voltaEnd,\n\t\t\t\talter: measure.alternative,\n\t\t\t\tleftSign: '',\n\t\t\t\trightSign: '',\n\t\t\t}));\n\t\tms.forEach((m, i) => {\n\t\t\tif (m.vb) {\n\t\t\t\tconst nextI = ms.slice(i + 1).findIndex((mm) => mm.vb);\n\t\t\t\tconst nextVBI = nextI >= 0 ? i + nextI : ms.length;\n\t\t\t\tif (ms.slice(i, nextVBI - 1).some((mm) => mm.ve))\n\t\t\t\t\t// check if volta range closed\n\t\t\t\t\tm.leftSign = '2*[';\n\t\t\t}\n\n\t\t\tif (m.ve) {\n\t\t\t\tconst pms = ms.slice(0, i + 1).reverse();\n\t\t\t\tconst lastVEI = pms.slice(1).findIndex((mm) => mm.ve);\n\t\t\t\tif (lastVEI >= 0) {\n\t\t\t\t\tif (!pms.slice(1, lastVEI + 1).some((mm) => mm.vb))\n\t\t\t\t\t\t// ignore unclosed right volta\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m.alter) {\n\t\t\t\t\tconst lastMI = pms.findIndex((m) => !m.alter);\n\t\t\t\t\tif (lastMI > 0) {\n\t\t\t\t\t\tpms[lastMI].rightSign = ']';\n\t\t\t\t\t\tpms[lastMI - 1].leftSign = '{[';\n\n\t\t\t\t\t\tm.rightSign = '],';\n\n\t\t\t\t\t\tif (ms[i + 1]) ms[i + 1].rightSign = '},';\n\t\t\t\t\t}\n\t\t\t\t} else m.rightSign = '],';\n\n\t\t\t\tif (!pms.some((m) => m.vb)) ms[0].leftSign = '2*[';\n\t\t\t}\n\t\t});\n\n\t\treturn ms\n\t\t\t.map((m) => m.leftSign + m.index.toString() + m.rightSign + (m.rightSign ? '' : ','))\n\t\t\t.join(' ')\n\t\t\t.replace(/,$/, '');\n\t}\n\n\tget qualityScore(): number {\n\t\tconst measures = this.measures.filter((measure) => !measure.empty);\n\t\tconst qss = measures.map(evaluateMeasure).map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\t//console.log('qss:', qss);\n\n\t\treturn measures.length ? sum / measures.length : null;\n\t}\n\n\tdumpEvaluations(): void {\n\t\tconst es = this.measures.filter((measure) => !measure.empty).map((m) => ({ measureIndex: m.measureIndex, ...evaluateMeasure(m) }));\n\t\tconst qss = es.map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\tconsole.log('qualityScore:', sum / es.length);\n\n\t\tconsole.table(es);\n\t}\n\n\tregulate(options: RegulationOptions = {}): void {\n\t\tthis.measures.forEach((m) => m.regulated || m.regulate(options));\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.measures.forEach((m) => (m.voices = null));\n\t}\n\n\t// measures' estimatedDuration should be valid\n\trectifyTimeSignatures(logger: Logger = new DummyLogger()): void {\n\t\tconst mis = this.measures\n\t\t\t.map((measure, index) => ({ measure, index }))\n\t\t\t.filter(({ measure, index }) => !index || measure.timeSignatureChanged)\n\t\t\t.map(({ index }) => index);\n\t\tconst segments = mis\n\t\t\t.map((index, si) => this.measures.slice(index, si < mis.length - 1 ? mis[si + 1] : this.measures.length))\n\t\t\t.map((ms) => ms.filter((m) => m.estimatedDuration > 0))\n\t\t\t.filter((seg) => seg.length >= 3 || seg.some((measure) => measure.doubtfulTimesig));\n\t\t//console.log(\"segments:\", segments.map(ms => ms.map(m => m.measureIndex)));\n\n\t\tsegments.forEach((measures) => {\n\t\t\tif (measures[0].patched) {\n\t\t\t\t// rectify according to patched head measure\n\t\t\t\tconst newTimeSignature = measures[0].timeSignature;\n\t\t\t\tconst measuresToFix = measures\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t.filter((measure) => !measure.patched && printFraction(measure.timeSignature) !== printFraction(newTimeSignature));\n\t\t\t\tif (measuresToFix.length) {\n\t\t\t\t\tconst originTimeSignature = measuresToFix[0].timeSignature;\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by patched head:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${printFraction(newTimeSignature)}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst originTimeSignature = measures[0].timeSignature;\n\t\t\tconst regularD = Number.isInteger(Math.log2(originTimeSignature.denominator));\n\n\t\t\tlet denominator = regularD ? 4 : 8;\n\t\t\tif (regularD) denominator = Math.max(denominator, measures[0].timeSignature.denominator);\n\n\t\t\tconst numerators = measures.map((measure) => Math.round((measure.estimatedDuration * denominator) / WHOLE_DURATION));\n\t\t\tconst countings = Object.entries(numerators.reduce((c, n) => ((c[n] = (c[n] || 0) + 1), c), {} as Record)).sort(\n\t\t\t\t(p1, p2) => p2[1] - p1[1]\n\t\t\t);\n\t\t\tconst peakCount = countings[0][1];\n\t\t\tconst candidateNumerators = countings.filter(([_, c]) => c > peakCount * 0.6);\n\t\t\tconst bestCounting = candidateNumerators.reduce((best, c) => (Number(c[0]) > Number(best[0]) ? c : best));\n\t\t\tif (bestCounting[1] > 1) {\n\t\t\t\t//console.log(\"countings:\", countings, bestCounting[0]);\n\t\t\t\tlet numerator = Number(bestCounting[0]);\n\t\t\t\tif (!regularD || originTimeSignature.denominator * numerator !== originTimeSignature.numerator * denominator) {\n\t\t\t\t\tif (regularD && denominator !== originTimeSignature.denominator) {\n\t\t\t\t\t\tconst reducedN = (numerator * originTimeSignature.denominator) / denominator;\n\t\t\t\t\t\tif (Number.isInteger(reducedN)) {\n\t\t\t\t\t\t\tnumerator = reducedN;\n\t\t\t\t\t\t\tdenominator = originTimeSignature.denominator;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst measuresToFix = measures.filter((measure) => !measure.patched);\n\n\t\t\t\t\tconst newTimeSignature = frac(numerator, denominator);\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by estimation:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${numerator}/${denominator}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tmakeVoiceStaves(): VoicesStaff[] {\n\t\tthis.regulate();\n\n\t\tconst voiceCount = Math.max(...this.measures.map((measure) => measure.voices.length));\n\t\tif (!voiceCount || !Number.isFinite(voiceCount)) return null;\n\n\t\t// mark tied pitches for patched measues\n\t\tthis.measures\n\t\t\t.filter((measure) => measure.patched)\n\t\t\t.forEach((measure) => {\n\t\t\t\tmeasure.events.forEach((event) => {\n\t\t\t\t\tif (event.tied) event.pitches.forEach((pitch) => (pitch.tied = true));\n\t\t\t\t});\n\t\t\t});\n\n\t\t// Move courtesy clefs to the next measure.\n\t\t// A courtesy clef that appears after all events on its staff announces the\n\t\t// clef change for the next measure rather than applying to the current one.\n\t\tfor (let mi = 0; mi < this.measures.length - 1; mi++) {\n\t\t\tconst measure = this.measures[mi];\n\t\t\tconst nextMeasure = this.measures[mi + 1];\n\t\t\tif (!measure.contexts || !nextMeasure?.contexts) continue;\n\n\t\t\tfor (let si = 0; si < measure.contexts.length; si++) {\n\t\t\t\tconst ctxList = measure.contexts[si];\n\t\t\t\tif (!ctxList) continue;\n\n\t\t\t\tconst staffEvents = measure.events?.filter((e: any) => e.staff === si) || [];\n\t\t\t\tconst maxEventX = staffEvents.reduce((max: number, e: any) => Math.max(max, e.x || 0), -Infinity);\n\t\t\t\tif (!Number.isFinite(maxEventX)) continue;\n\n\t\t\t\tconst deferred: ContextedTerm[] = [];\n\t\t\t\tmeasure.contexts[si] = ctxList.filter((term) => {\n\t\t\t\t\tif (term.type === 0 /* ContextType.Clef */ && term.x > maxEventX) {\n\t\t\t\t\t\tdeferred.push(term);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\n\t\t\t\tif (deferred.length > 0 && nextMeasure.contexts[si]) {\n\t\t\t\t\tdeferred.forEach((term) => (term.tick = 0));\n\t\t\t\t\tnextMeasure.contexts[si] = [...deferred, ...nextMeasure.contexts[si]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// [measure, voice]\n\t\tconst measures: VoiceMeasure[][] = this.measures.map((measure /*, mi*/) => {\n\t\t\tconsole.assert(measure.validRegulated, '[makeVoiceStaves] measure is invalid:', measure);\n\n\t\t\tconst eventMap: { [key: number]: EventTerm } = {};\n\t\t\tmeasure.events.forEach((event) => (eventMap[event.id] = event));\n\n\t\t\tconst leftStaves = new Set(\n\t\t\t\tArray(measure.contexts.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, i) => i)\n\t\t\t);\n\n\t\t\tlet bar = null;\n\t\t\tif (measure.barType) {\n\t\t\t\tswitch (measure.barType) {\n\t\t\t\t\tcase 'Segment':\n\t\t\t\t\t\tbar = '||';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Terminal':\n\t\t\t\t\t\tbar = '|.';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst voices: VoiceMeasure[] = measure.voices.map((ids /*, vi*/) => {\n\t\t\t\tconst events = ids.map((id) => eventMap[id]);\n\t\t\t\tevents.sort((e1, e2) => e1.tick - e2.tick);\n\n\t\t\t\tconst tickMap = {};\n\t\t\t\tlet tick = 0;\n\t\t\t\tlet lastEvent = null;\n\t\t\t\tfor (const event of events) {\n\t\t\t\t\tif (!Number.isFinite(event?.tick)) {\n\t\t\t\t\t\tconsole.warn('invalid event tick:', event);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (event.tick > tick) tickMap[tick] = EventTerm.space({ tick, duration: event.tick - tick });\n\t\t\t\t\telse if (!event.grace && event.tick < tick && lastEvent)\n\t\t\t\t\t\tlastEvent.timeWarp = reducedFraction(event.tick - lastEvent.tick, lastEvent.duration);\n\t\t\t\t\t//console.log(\"timewarp:\", event.tick - lastEvent.tick, lastEvent.duration, lastEvent.timeWarp);\n\n\t\t\t\t\ttickMap[event.tick] = event;\n\n\t\t\t\t\tif (!event.zeroHolder) {\n\t\t\t\t\t\ttick = Math.round(event.tick + event.duration);\n\t\t\t\t\t\tlastEvent = event;\n\n\t\t\t\t\t\t// sub grace events\n\t\t\t\t\t\tif (event.graceIds) {\n\t\t\t\t\t\t\tevent.graceIds.forEach((id) => {\n\t\t\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\t\t\tif (grace) tickMap[grace.tick] = grace;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (measure.endEvent && measure.endEvent.graceIds) {\n\t\t\t\t\tmeasure.endEvent.graceIds.forEach((id) => {\n\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\tif (grace && (!lastEvent || grace.staff === lastEvent.staff)) tickMap[grace.tick] = grace;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (tick < measure.duration) tickMap[tick] = EventTerm.space({ tick, duration: measure.duration - tick });\n\t\t\t\telse if (tick > measure.duration && Number.isFinite(measure.duration))\n\t\t\t\t\t//console.warn(\"duration out of range:\", tick, column.duration, mi, vi);\n\t\t\t\t\tlastEvent.timeWarp = reducedFraction(measure.duration - lastEvent.tick, lastEvent.duration);\n\n\t\t\t\tconsole.assert(\n\t\t\t\t\t!lastEvent || !lastEvent.timeWarp || (Number.isInteger(lastEvent.timeWarp.numerator) && Number.isInteger(lastEvent.timeWarp.denominator)),\n\t\t\t\t\t'invalid time warp:',\n\t\t\t\t\tlastEvent\n\t\t\t\t);\n\n\t\t\t\tconst staffIndex = events[0] ? events[0].staff : 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\n\t\t\t\t//const row = measure.rows[staffIndex];\n\t\t\t\tconst contextedTerms = measure.contexts[staffIndex];\n\n\t\t\t\tconst tailEvent = events[events.length - 1];\n\t\t\t\tconst tailStaff = tailEvent ? tailEvent.staff : 0;\n\n\t\t\t\t// TODO: modify full measure rests duration\n\n\t\t\t\treturn {\n\t\t\t\t\ttickMap,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t...basic,\n\t\t\t\t\t// TODO: consider staff altered voice\n\t\t\t\t\tcontextedTerms,\n\t\t\t\t\tmarks: [],\n\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\theadStaff: staffIndex,\n\t\t\t\t\ttailStaff,\n\t\t\t\t\tbar,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\twhile (voices.length < voiceCount) {\n\t\t\t\tconst staffIndex = leftStaves.values().next().value || 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\t\t\t\tconst terms = measure.contexts[staffIndex];\n\n\t\t\t\tconst chiefVoice = voices.every((voice) => voice.headStaff !== staffIndex);\n\n\t\t\t\tconst voice = emptyVoiceFromStaffMeasure(\n\t\t\t\t\t{\n\t\t\t\t\t\tterms,\n\t\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t\t...basic,\n\t\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\t},\n\t\t\t\t\tchiefVoice\n\t\t\t\t);\n\t\t\t\tvoice.headStaff = staffIndex;\n\t\t\t\tvoice.tailStaff = staffIndex;\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\n\t\t\treturn voices;\n\t\t});\n\n\t\t// compute traits for voice-measures\n\t\tmeasures.forEach((voices) =>\n\t\t\tvoices.forEach((measure) => {\n\t\t\t\tconst words = [];\n\n\t\t\t\tif (!measure.empty) {\n\t\t\t\t\twords.push(`s${measure.headStaff}`);\n\t\t\t\t\twords.push(`s${measure.tailStaff}`);\n\t\t\t\t}\n\n\t\t\t\tObject.values(measure.tickMap).forEach((event) => {\n\t\t\t\t\tif (event instanceof EventTerm) {\n\t\t\t\t\t\twords.push(`s${event.staff}`);\n\n\t\t\t\t\t\tif (event.stemDirection) {\n\t\t\t\t\t\t\tconst sd = `st${event.staff}-${event.stemDirection}`;\n\t\t\t\t\t\t\twords.push(sd, sd);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.grace) words.push(`gd${event.mainDuration}`);\n\t\t\t\t\t\telse words.push(`d${event.mainDuration}`);\n\n\t\t\t\t\t\tif (event.rest) words.push('r-' + event.rest);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tevent.pitches.forEach((pitch) => {\n\t\t\t\t\t\t\t\twords.push(`p1-${pitch.note}`);\n\t\t\t\t\t\t\t\twords.push(`p8-${Math.round(pitch.note / 8)}`);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmeasure.trait = HashVector.fromWords(words);\n\t\t\t})\n\t\t);\n\t\t//console.log(\"measure traits:\");\n\t\t//console.table(measures.map(voices => voices.map(measure => hashToHex(measure.trait.toHash()))));\n\n\t\tconst staffToGroup: Record = this.staffGroups\n\t\t\t.flat(1)\n\t\t\t.reduce((map, si) => ((map[si] = this.staffGroups.findIndex((group) => group.includes(si))), map), {});\n\n\t\t// sort voices to connect voices between neighhoring measures\n\t\tconst voiceTraits = Array(voiceCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => ({ vector: HashVector.zero, index, weight: 0, headStaff: null }));\n\t\tmeasures.forEach((voices, mi) => {\n\t\t\tvoiceTraits.sort((v1, v2) => v2.weight - v1.weight);\n\n\t\t\tconst leftVoices = new Set(voices);\n\t\t\tvoiceTraits.forEach((voiceTrait) => {\n\t\t\t\tconst vs = [...leftVoices];\n\t\t\t\tlet measure = vs[0];\n\t\t\t\tif (mi > 0 && vs.length > 1) {\n\t\t\t\t\tconst consistencies = vs.map((measure) =>\n\t\t\t\t\t\tstaffToGroup[measure.headStaff] === staffToGroup[voiceTrait.headStaff]\n\t\t\t\t\t\t\t? cosHashes(voiceTrait.vector.toHash(), measure.trait.toHash())\n\t\t\t\t\t\t\t: -1\n\t\t\t\t\t);\n\t\t\t\t\tmeasure = vs[argmax(consistencies)];\n\t\t\t\t}\n\t\t\t\tleftVoices.delete(measure);\n\n\t\t\t\tmeasure.voiceIndex = voiceTrait.index;\n\t\t\t\tvoiceTrait.vector.scale(0.4).add(measure.trait);\n\n\t\t\t\tvoiceTrait.weight = Object.keys(measure.tickMap).length;\n\n\t\t\t\tif (mi === 0) voiceTrait.headStaff = measure.headStaff;\n\t\t\t});\n\n\t\t\tvoices.sort((m1, m2) => m1.voiceIndex - m2.voiceIndex);\n\t\t});\n\n\t\t//const staffTraits = Array(this.stavesCount).fill(null).map((_, si) => HashVector.fromString(`s${si}`).toHash());\n\t\tconst staffVoiceIndices = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map(() => []);\n\t\tvoiceTraits.forEach((trait) => {\n\t\t\t//const consistencies = staffTraits.map(staff => cosHashes(trait.vector.toHash(), staff));\n\t\t\t//staffVoiceIndices[argmax(consistencies)].push(trait.index);\n\t\t\tstaffVoiceIndices[trait.headStaff].push(trait.index);\n\t\t});\n\n\t\tconst staves = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, si) => {\n\t\t\t\tif (!measures[0]) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvoices: [],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t//const voiceIndicies = measures[0].map((voice, vi) => ({ voice, vi })).filter(({ voice }) => voice.headStaff === si).map(({ vi }) => vi);\n\t\t\t\tconst voiceIndicies = staffVoiceIndices[si];\n\n\t\t\t\tconst voices = voiceIndicies.map((vi): TermVoice => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmode: 'relative',\n\t\t\t\t\t\tmeasures: measures.map((m) => m[vi]),\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\treturn { voices };\n\t\t\t});\n\n\t\tremoveEmptyMeasuresInVoicesStaves(staves);\n\t\tstaves.forEach((staff) => staff.voices.forEach(markingTiesInVoice));\n\n\t\treturn staves;\n\t}\n\n\tperform(): Performing {\n\t\tconst staves = this.makeVoiceStaves();\n\t\tif (!staves) return null;\n\n\t\tconst tokenMap = new Map();\n\n\t\t// TODO: store staff channels in score\n\t\tconst staffToChannel = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.reduce((map, _, i) => {\n\t\t\t\tmap[i] = i;\n\t\t\t\treturn map;\n\t\t\t}, {});\n\n\t\tconst voiceChannels = [].concat(...staves.map((staff, si) => staff.voices.map(() => staffToChannel[si])));\n\n\t\tlet hasTempo = false;\n\n\t\tlet nextTick = 0;\n\t\tlet events0 = null;\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure) => {\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst voices: VoiceMeasure[] = [].concat(...staves.map((staff) => staff.voices.map((voice) => voice.measures[measureIndex])));\n\t\t\t\tconst voice0 = voices[0];\n\t\t\t\tconst tick = nextTick;\n\n\t\t\t\t//const signatureDuration = (WHOLE_DURATION * voice0.timeSignature.numerator) / voice0.timeSignature.denominator;\n\n\t\t\t\tnextTick += voice0.duration;\n\n\t\t\t\tconst notes = [].concat(\n\t\t\t\t\t...voices.map((measure, vi) => {\n\t\t\t\t\t\tconst tickFactor = 1; //measure.duration ? signatureDuration / measure.duration : 1;\n\n\t\t\t\t\t\tconst channel = voiceChannels[vi];\n\n\t\t\t\t\t\tconst chords = Object.values(measure.tickMap)\n\t\t\t\t\t\t\t.filter((term) => term instanceof EventTerm && !term.rest)\n\t\t\t\t\t\t\t.map((term: EventTerm) => {\n\t\t\t\t\t\t\t\tconst duration = Math.round(term.duration * tickFactor);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(term.tick), 'invalid event term tick:', term);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(duration), 'invalid event term duration:', term);\n\n\t\t\t\t\t\t\t\tif (term.tick >= 0) {\n\t\t\t\t\t\t\t\t\t// exclude minus tick tokens\n\t\t\t\t\t\t\t\t\tterm.noteIds.forEach((id) => {\n\t\t\t\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: term.roundX,\n\t\t\t\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(term.staff));\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttick: Math.round(term.tick * tickFactor),\n\t\t\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\t\t\tpitches: term.pitches,\n\t\t\t\t\t\t\t\t\tnoteIds: term.noteIds,\n\t\t\t\t\t\t\t\t\tpart,\n\t\t\t\t\t\t\t\t\tstaff: term.staff,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t\t...chords.map((chord) => {\n\t\t\t\t\t\t\t\t// exclude repeated pitches\n\t\t\t\t\t\t\t\tconst pitchMap: { [pitch: number]: TermPitch } = chord.pitches.reduce((map, pitch) => {\n\t\t\t\t\t\t\t\t\tmap[noteToPitch(pitch)] = pitch;\n\t\t\t\t\t\t\t\t\treturn map;\n\t\t\t\t\t\t\t\t}, {});\n\t\t\t\t\t\t\t\tconst pitches = Object.values(pitchMap).sort((p1, p2) => p1.note - p2.note);\n\n\t\t\t\t\t\t\t\treturn pitches\n\t\t\t\t\t\t\t\t\t.filter((pitch) => !pitch.tied)\n\t\t\t\t\t\t\t\t\t.map((pitch, i) => {\n\t\t\t\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\ttick: chord.tick,\n\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\t\t\t\ttrack: chord.part,\n\t\t\t\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tconst events = [];\n\t\t\t\tevents0 = events0 || events;\n\n\t\t\t\tif (measure.marks)\n\t\t\t\t\tmeasure.marks.forEach((mark) => {\n\t\t\t\t\t\tif (mark instanceof TempoTerm) {\n\t\t\t\t\t\t\tconst bpm = mark.bpm;\n\t\t\t\t\t\t\tif (mark.isValid()) {\n\t\t\t\t\t\t\t\tconst es = hasTempo ? events : events0; // set the first tempo to the beginning of the track\n\t\t\t\t\t\t\t\tconst tick = hasTempo ? mark.tick : 0;\n\t\t\t\t\t\t\t\tes.push({\n\t\t\t\t\t\t\t\t\ttrack: 0,\n\t\t\t\t\t\t\t\t\tticks: tick,\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\t\t\t\t\t\tmicrosecondsPerBeat: Math.round(60e6 / bpm),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\thasTempo = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents,\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tif (!hasTempo) {\n\t\t\tmeasures[0].events.push({\n\t\t\t\ttrack: 0,\n\t\t\t\tticks: 0,\n\t\t\t\tdata: {\n\t\t\t\t\ttype: 'meta',\n\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\tmicrosecondsPerBeat: 0.5e6, // TODO\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tperformByEstimation(): Performing {\n\t\tconst tokenMap = new Map();\n\t\tlet nextTick = 0;\n\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => measure.events.some((event) => event.predisposition))\n\t\t\t.map((measure) => {\n\t\t\t\tconst tick = nextTick;\n\t\t\t\tconst duration = Math.round(measure.estimatedDuration || fractionMul(WHOLE_DURATION, measure.timeSignature));\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\tnextTick += duration;\n\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst chords = measure.events.filter((event) => event.predisposition && event.predisposition.fake < 0.5 && !event.rest);\n\t\t\t\tconst notes = chords\n\t\t\t\t\t.map((chord) => {\n\t\t\t\t\t\tconst noteTick = Math.round(chord.predisposition.tick);\n\n\t\t\t\t\t\tchord.noteIds.forEach((id) => {\n\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\tx: chord.roundX,\n\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn chord.pitches.map((pitch, i) => {\n\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(chord.staff));\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttick: noteTick,\n\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\ttrack: part,\n\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\tchannel: 0,\n\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.flat(1);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents: [],\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tfeatureHash(): Hash {\n\t\tconst headMeasures = this.measures.slice(0, 16);\n\t\tconst measureWords = headMeasures.map((measure) => measure.featureWords);\n\n\t\tconst levels = [1, 4, 16].map((len) => {\n\t\t\tconst meaures = measureWords.slice(0, len).filter(Boolean);\n\t\t\tconst ys = meaures.map((words) => words[0]).flat(1);\n\t\t\tconst melodies = meaures.map((words) => words[1]).flat(1);\n\t\t\tconst rhythm = meaures.map((words) => words[2]).flat(1);\n\n\t\t\tconst [vecY, vecMelody, vecRhythm] = [ys, melodies, rhythm].map(HashVector.fromWords);\n\n\t\t\treturn HashVector.concat(vecY, vecMelody.sub(128), vecRhythm.sub(128));\n\t\t});\n\n\t\treturn HashVector.concat(...levels).toHash();\n\t}\n\n\tfeatureHashHex(): string {\n\t\treturn hashToHex(this.featureHash());\n\t}\n\n\tfeatureHashBigInt(): bigint {\n\t\treturn hashToBigInt(this.featureHash());\n\t}\n\n\tassignMeasureNumbers(): void {\n\t\tlet n = null as any;\n\t\tfor (const measure of this.measures) {\n\t\t\tif (!measure.discard && !measure.events.length) continue;\n\n\t\t\tif (measure.indent) n = null;\n\n\t\t\tif (!Number.isFinite(n)) n = measure.partialDuration ? 0 : 1;\n\n\t\t\tmeasure.measureNumber = n++;\n\t\t}\n\t}\n}\n\nexport { SpartitoMeasure, Spartito };\n","import { Fraction } from './interfaces';\nimport { ContextedTerm, ContextType } from './term';\nimport { Logger, DummyLogger } from './logger';\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nexport const mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst PHONETS = 'CDEFGAB';\n\nconst ALTER_NAMES = {\n\t[-2]: '\\u266D\\u266D',\n\t[-1]: '\\u266D',\n\t[0]: '\\u266E',\n\t[1]: '\\u266F',\n\t[2]: '\\uD834\\uDD2A',\n};\n\n/*\n\tCoordinates:\n\n\t\tnote:\n\t\t\tzero: the middle C line (maybe altered)\n\t\t\tpositive: high (right on piano keyboard)\n\t\t\tunit: a step in scales of the current staff key\n\n\t\tstaff Y:\n\t\t\tzero: the third (middle) line among 5 staff lines\n\t\t\tpositive: down\n\t\t\tunit: a interval between 2 neighbor staff lines\n*/\n\nexport default class StaffContext {\n\tlogger: Logger = new DummyLogger();\n\n\tclef: number = -3;\n\tkeyAlters: number[] = [];\n\toctaveShift: number = 0;\n\talters: number[] = [];\n\n\ttimeSignature: Fraction = {\n\t\tnumerator: 4,\n\t\tdenominator: 4,\n\t};\n\ttimeSigNumeric: boolean = false;\n\ttimeSigNumSet: boolean = false;\n\ttimeSigDenSet: boolean = false;\n\tdoubtingTimesig: boolean = true;\n\n\tchange(term: ContextedTerm) {\n\t\tswitch (term.type) {\n\t\t\tcase ContextType.Clef:\n\t\t\t\tthis.clef = term.clef;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.KeyAcc:\n\t\t\t\tthis.keyAlters[mod7(this.yToNote(term.y))] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.Acc:\n\t\t\t\tthis.alters[this.yToNote(term.y)] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.OctaveShift:\n\t\t\t\tthis.octaveShift = term.octaveShift;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureC:\n\t\t\t\tthis.timeSigNumeric = false;\n\t\t\t\tswitch (term.tokenType) {\n\t\t\t\t\tcase 'timesig-C44':\n\t\t\t\t\t\tthis.timeSignature.numerator = 4;\n\t\t\t\t\t\tthis.timeSignature.denominator = 4;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'timesig-C22':\n\t\t\t\t\t\tthis.timeSignature.numerator = 2;\n\t\t\t\t\t\tthis.timeSignature.denominator = 2;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureN:\n\t\t\t\tthis.timeSigNumeric = true;\n\t\t\t\tswitch (term.y) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (this.timeSigDenSet) this.timeSignature.denominator = this.timeSignature.denominator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.denominator = term.number;\n\n\t\t\t\t\t\tthis.timeSigDenSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase -1:\n\t\t\t\t\t\tif (this.timeSigNumSet) this.timeSignature.numerator = this.timeSignature.numerator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.numerator = term.number;\n\n\t\t\t\t\t\tthis.timeSigNumSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.logger.warn('unexpected time signature Y:', term.y);\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tresetMeasure() {\n\t\tthis.alters = [];\n\n\t\tthis.timeSigNumSet = false;\n\t\tthis.timeSigDenSet = false;\n\t}\n\n\tresetSystem() {\n\t\tthis.keyAlters = [];\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.keyAlters.filter((a) => Number.isInteger(a)).reduce((sum, a) => sum + a, 0);\n\t}\n\n\tget partialTimeSignature(): boolean {\n\t\treturn !this.timeSigNumSet !== !this.timeSigDenSet;\n\t}\n\n\tnoteToY(note: number): number {\n\t\treturn -note / 2 - this.clef - this.octaveShift * 3.5;\n\t}\n\n\tpitchToNote(pitch: number, { preferredAlter = null } = {}): { note: number; alter: number } {\n\t\tif (!preferredAlter) preferredAlter = this.keySignature < 0 ? -1 : 1;\n\n\t\tconst group = Math.floor((pitch - MIDDLE_C) / 12);\n\t\tconst gp = mod12(pitch);\n\t\tconst alteredGp = GROUP_N_TO_PITCH.includes(gp) ? gp : mod12(gp - preferredAlter);\n\t\tconst gn = GROUP_N_TO_PITCH.indexOf(alteredGp);\n\t\tthis.logger.assert(gn >= 0, 'invalid preferredAlter:', pitch, preferredAlter, alteredGp);\n\n\t\tconst naturalNote = group * 7 + gn;\n\n\t\tconst alterValue = gp - alteredGp;\n\t\tconst keyAlterValue = this.keyAlters[gn] || 0;\n\t\tconst onAcc = Number.isInteger(this.alters[naturalNote]);\n\n\t\tconst alter = onAcc ? alterValue : alterValue === keyAlterValue ? null : alterValue;\n\n\t\treturn { note: naturalNote, alter };\n\t}\n\n\tpitchToY(pitch: number, { preferredAlter = null } = {}): { y: number; alter: number } {\n\t\tconst { note, alter } = this.pitchToNote(pitch, { preferredAlter });\n\t\tconst y = this.noteToY(note);\n\n\t\treturn { y, alter };\n\t}\n\n\tyToNote(y: number): number {\n\t\tthis.logger.assert(Number.isInteger(y * 2), 'invalid y:', y);\n\n\t\treturn (-y - this.octaveShift * 3.5 - this.clef) * 2;\n\t}\n\n\talterOnNote(note: number): number {\n\t\tif (Number.isInteger(this.alters[note])) return this.alters[note];\n\n\t\tconst gn = mod7(note);\n\t\tif (Number.isInteger(this.keyAlters[gn])) return this.keyAlters[gn];\n\n\t\treturn 0;\n\t}\n\n\tnoteToPitch(note: number): number {\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tconst pitch = MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + this.alterOnNote(note);\n\t\tif (!Number.isFinite(pitch)) {\n\t\t\tthis.logger.warn('invalid pitch value:', pitch, note, group, gn);\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn pitch;\n\t}\n\n\tyToPitch(y: number): number {\n\t\treturn this.noteToPitch(this.yToNote(y));\n\t}\n\n\tyToPitchName(y: number): string {\n\t\tconst note = this.yToNote(y);\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tlet alter = this.alterOnNote(note);\n\t\tif (!alter && !Number.isInteger(this.alters[note])) alter = null;\n\n\t\treturn `${ALTER_NAMES[alter] ? ALTER_NAMES[alter] : ''}${PHONETS[gn]}${group + 4}`;\n\t}\n}\n","import sha1 from 'js-sha1';\n\nimport * as measureLayout from '../measureLayout';\nimport * as staffLayout from '../staffLayout';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { EventSystem, MeasureBrief, MusicSheet, RecognitionSettings, ScoreData, TermMeasure, TermStaff, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { PatchMeasure } from './patch';\nimport { Measure, Page, Staff, System } from './scoreComponents';\nimport { hashSemanticPoint, SemanticPoint, SemanticType } from './semanticPoint';\nimport { BOS_ELEMENT, fractionToElems, SemanticCluster, SemanticElement, SemanticElementType } from './semanticTopology';\nimport { Spartito, SpartitoMeasure } from './spartito';\nimport StaffContext from './staffContext';\nimport { ContextedTerm, ContextType, EventTerm, WHOLE_DURATION } from './term';\nimport type { SemanticPointInMeasure } from './timewiseGraph';\nimport { TimewiseGraph } from './timewiseGraph';\nimport { Token, TokenType } from './token';\nimport { distance2D, solveOverlapping } from './utils';\n\nexport const VERSION = 14;\n\ninterface Topology {\n\tclusters: SemanticCluster[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n}\n\nconst GRAND_STAFF_LAYOUT = '{-}';\n\nconst processStaffContext = (staff: TermStaff, logger: Logger = new DummyLogger()): void => {\n\tconst context = new StaffContext();\n\tcontext.logger = logger;\n\n\tfor (const row of staff.rows) {\n\t\tfor (const measure of row) {\n\t\t\tconst startEvent = measure.terms.find((term) => term instanceof EventTerm) as EventTerm;\n\t\t\tlet tick = startEvent ? Math.min(startEvent.tick, 0) : 0;\n\n\t\t\tmeasure.terms.forEach((term) => {\n\t\t\t\tif (term instanceof ContextedTerm) {\n\t\t\t\t\tterm.tick = tick; // TODO: not working here because measure not regulated yet\n\t\t\t\t\tcontext.change(term);\n\t\t\t\t} else if (term instanceof EventTerm) {\n\t\t\t\t\tconst endTick = term.tick + (term.duration || 0);\n\t\t\t\t\tif (endTick > tick) tick = endTick;\n\n\t\t\t\t\tif (term.ys) {\n\t\t\t\t\t\tterm.pitches = term.ys.map((y) => {\n\t\t\t\t\t\t\tconst note = context.yToNote(y);\n\t\t\t\t\t\t\tconst alter = context.alterOnNote(note);\n\n\t\t\t\t\t\t\treturn { note, alter, octaveShift: context.octaveShift };\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmeasure.timeSignature = { ...context.timeSignature };\n\t\t\tmeasure.timeSigNumeric = context.timeSigNumeric;\n\t\t\tmeasure.doubtfulTimesig =\n\t\t\t\tcontext.doubtingTimesig ||\n\t\t\t\t!Number.isInteger(Math.log2(measure.timeSignature.denominator)) ||\n\t\t\t\tmeasure.timeSignature.numerator <= measure.timeSignature.denominator / 4;\n\n\t\t\tmeasure.keySignature = context.keySignature;\n\n\t\t\t// fill empty measure duration\n\t\t\tif (measure.duration === 0) measure.duration = (WHOLE_DURATION * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\n\t\t\tcontext.resetMeasure();\n\t\t}\n\n\t\tcontext.resetSystem();\n\t}\n};\n\nconst upgradeScoreData = (data: ScoreData): ScoreData => {\n\tif (data.version < 3) {\n\t\tconst { version, stavesCount, layoutTemplate, ...fields } = data;\n\t\tvoid version;\n\t\tvoid layoutTemplate;\n\n\t\tlet staffLayoutCode =\n\t\t\tstavesCount > 1\n\t\t\t\t? Array(stavesCount - 1)\n\t\t\t\t\t\t.fill(',')\n\t\t\t\t\t\t.join('')\n\t\t\t\t: '';\n\n\t\t// use graph staff by default for 2 staves score\n\t\tif (stavesCount === 2) staffLayoutCode = '{-}';\n\n\t\tdata = {\n\t\t\tversion: 3,\n\t\t\tstaffLayoutCode,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tif (data.version < 8) {\n\t\t// upgrade system measure bar semantics\n\t\tdata.pages.forEach((page) => {\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tif (system.semantics) {\n\t\t\t\t\tconst bars = system.semantics.filter((point) => point.semantic === SemanticType.vline_BarMeasure);\n\n\t\t\t\t\tsystem.semantics = [].concat(\n\t\t\t\t\t\t...system.staves.map((staff) => {\n\t\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\n\t\t\t\t\t\t\treturn bars.map((point) => ({\n\t\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\t\ty: point.y + oy,\n\t\t\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\t\t\t...point.extension,\n\t\t\t\t\t\t\t\t\ty1: point.extension.y1 + oy,\n\t\t\t\t\t\t\t\t\ty2: point.extension.y2 + oy,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tdata.version = 8;\n\t}\n\n\tif (data.version < 9) {\n\t\t// remove old format spartito\n\t\tdata.spartito = null;\n\n\t\tdata.version = 9;\n\t}\n\n\treturn data;\n};\n\nconst bitsToMask = (bits: number[]): number => bits.reduce((mask, bit, i) => (bit ? mask | (1 << i) : mask), 0);\n\ninterface PointPosition {\n\tpoint: SemanticPoint;\n\tpageIndex: number;\n\tsystemIndex: number;\n\tstaffIndex: number;\n}\n\ninterface MeasureValidation {\n\ttickMap: { [tick: number]: number };\n}\n\ninterface Size {\n\twidth: number;\n\theight: number;\n}\n\nclass Score extends SimpleClass {\n\tstatic className = 'Score';\n\n\tversion = VERSION;\n\n\ttitle: string;\n\t// in pixels\n\tpageSize: Size;\n\tunitSize: number;\n\tstaffLayoutCode: string;\n\n\tpaperOptions?: Partial;\n\n\theaders: { [key: string]: string };\n\n\ttextAnnotations: { [id: string]: string };\n\n\ttags?: string[];\n\n\tinstrumentDict: { [key: string]: string };\n\n\tpages: Page[];\n\ttopology: Topology;\n\tspartito?: Spartito;\n\n\tpatches?: PatchMeasure[];\n\n\tsettings: RecognitionSettings;\n\n\tconstructor(data: ScoreData) {\n\t\tsuper();\n\t\tsuper.assign(upgradeScoreData(data));\n\n\t\tthis.pages = this.pages || [];\n\t\tthis.headers = this.headers || {};\n\t\tthis.instrumentDict = this.instrumentDict || {};\n\n\t\tthis.pageSize = this.pageSize || {\n\t\t\t// A4 paper\n\t\t\twidth: 794,\n\t\t\theight: 1122,\n\t\t};\n\n\t\tthis.unitSize = this.unitSize || null;\n\n\t\tthis.staffLayoutCode = this.staffLayoutCode || (this.maxStavesCount === 2 ? GRAND_STAFF_LAYOUT : Array(this.maxStavesCount).fill('').join(','));\n\t}\n\n\tget systems(): System[] {\n\t\treturn [].concat(...this.pages.map((page) => page.systems));\n\t}\n\n\tget measureCount(): number {\n\t\treturn this.systems.reduce((sum, system) => sum + (system.measureCount || 0), 0);\n\t}\n\n\tget imageKeys(): string[] {\n\t\treturn [\n\t\t\t...this.pages.map((page) => page.source?.url),\n\t\t\t...this.systems.map((system) => system.backgroundImage),\n\t\t\t...[].concat(\n\t\t\t\t...this.systems.map((system) =>\n\t\t\t\t\t[...system.staves.map((staff) => staff.backgroundImage), ...system.staves.map((staff) => staff.maskImage)].filter(Boolean)\n\t\t\t\t)\n\t\t\t),\n\t\t].filter(Boolean);\n\t}\n\n\tget breakSystemIndices(): number[] {\n\t\tconst indices = [];\n\t\tlet systemCount = 0;\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tif (i < this.pages.length - 1) {\n\t\t\t\tsystemCount += page.systems.length;\n\t\t\t\tindices.push(systemCount - 1);\n\t\t\t}\n\t\t});\n\n\t\treturn indices;\n\t}\n\n\tget staffLayout(): staffLayout.StaffLayout {\n\t\treturn staffLayout.parseCode(this.staffLayoutCode);\n\t}\n\n\tget measureLayoutCode(): string {\n\t\treturn this.spartito?.measureLayoutCode;\n\t}\n\n\tget maxStavesCount(): number {\n\t\treturn Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget semanticHash(): string {\n\t\tconst ids = [].concat(\n\t\t\t...this.systems.map((system) =>\n\t\t\t\t[].concat(...system.staves.map((staff) => (staff.semantics ? system.qualifiedSemantics(staff.semantics).map((s) => s.id) : [])))\n\t\t\t)\n\t\t);\n\t\treturn sha1(ids.join(''));\n\t}\n\n\teventSystemsToTermStaves(eventSystems: EventSystem[], logger: Logger = new DummyLogger()): TermStaff[] {\n\t\t// [staff]\n\t\tconst termStaves: TermStaff[] = Array(this.maxStavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, staffIndex): TermStaff => {\n\t\t\t\treturn {\n\t\t\t\t\t// [system, measure]\n\t\t\t\t\trows: eventSystems.map((sys, i) =>\n\t\t\t\t\t\tsys.columns.map((column, ii): TermMeasure => {\n\t\t\t\t\t\t\tconst measure = column.rows[staffIndex];\n\t\t\t\t\t\t\tconsole.assert(measure, '[eventSystemsToTermStaves] measure is null:', staffIndex, column.rows);\n\n\t\t\t\t\t\t\tconst contexts = measure.contexts;\n\n\t\t\t\t\t\t\t// prepend octave shift 0 at begin of every system\n\t\t\t\t\t\t\tif (ii === 0) {\n\t\t\t\t\t\t\t\tif (!contexts.some((term) => term.type === ContextType.OctaveShift)) {\n\t\t\t\t\t\t\t\t\tcontexts.unshift(\n\t\t\t\t\t\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\t\t\t\t\t\tstaff: staffIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\t\t\t\ttokenType: TokenType.OctaveShift0,\n\t\t\t\t\t\t\t\t\t\t\ttick: 0,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst terms = [...(measure.events || []), ...contexts].sort((t1, t2) => t1.x - t2.x);\n\n\t\t\t\t\t\t\tconst pageBreak = staffIndex === 0 && ii === sys.columns.length - 1 && this.breakSystemIndices.includes(i);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tterms,\n\t\t\t\t\t\t\t\t//xToTick: column.xToTick,\n\t\t\t\t\t\t\t\tduration: column.duration,\n\t\t\t\t\t\t\t\tpageBreak,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\ttermStaves.forEach((staff) => processStaffContext(staff, logger));\n\n\t\treturn termStaves;\n\t}\n\n\tresetPageLayout(parameters: { unitSize?: number; pageSize?: Size }) {\n\t\tconst { unitSize = this.unitSize, pageSize = this.pageSize } = parameters;\n\n\t\tconst newCenter = {\n\t\t\tx: (pageSize.width * 0.5) / unitSize,\n\t\t\ty: (pageSize.height * 0.5) / unitSize,\n\t\t};\n\n\t\tthis.pages.forEach((page) => {\n\t\t\tconst offsetX = newCenter.x - page.width / 2;\n\t\t\tconst offsetY = newCenter.y - page.height / 2;\n\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tsystem.left += offsetX;\n\t\t\t\tsystem.top += offsetY;\n\t\t\t});\n\n\t\t\tif (page.semantics) {\n\t\t\t\tpage.semantics.forEach((point) => {\n\t\t\t\t\tpoint.x += offsetX;\n\t\t\t\t\tpoint.y += offsetY;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tpage.width = pageSize.width / unitSize;\n\t\t\tpage.height = pageSize.height / unitSize;\n\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations });\n\t\t});\n\n\t\tthis.unitSize = unitSize;\n\t\tthis.pageSize = pageSize;\n\t}\n\n\tgetMeasure(measureIndex: number): {\n\t\tmeasureIndex: number;\n\t\tsystem: System;\n\t\tlocalIndex: number;\n\t\tleft: number;\n\t\tright: number;\n\t\tmeasures: Measure[];\n\t} {\n\t\tlet index = measureIndex;\n\t\tfor (const system of this.systems) {\n\t\t\tif (index < system.measureCount) {\n\t\t\t\tconst staff = system.staves[0];\n\t\t\t\tconst measure = staff.measures[index];\n\t\t\t\tconsole.assert(measure, 'measure is null:', system.measureCount, index, staff.measures);\n\t\t\t\tconst measures = system.getStaffArray(this.maxStavesCount).map((staff) => staff && staff.measures[index]);\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex,\n\t\t\t\t\tsystem,\n\t\t\t\t\tlocalIndex: index,\n\t\t\t\t\tleft: measure.left,\n\t\t\t\t\tright: measure.right,\n\t\t\t\t\tmeasures,\n\t\t\t\t};\n\t\t\t}\n\t\t\tindex -= system.measureCount;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetRawCluster(measureIndex: number, threshold: number, { timeSignature }: Partial = {}): SemanticCluster {\n\t\tconst position = this.getMeasure(measureIndex);\n\t\tif (!position) return null;\n\n\t\tconst { system, left, right } = position;\n\t\t//console.log(\"measure:\", system, left, right);\n\n\t\tconst elements: SemanticElement[] = [BOS_ELEMENT];\n\n\t\tif (timeSignature) elements.push(...fractionToElems(timeSignature));\n\n\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tlet points = system.qualifiedSemantics(staff.semantics, threshold).filter((point) => point.x > left && point.x < right);\n\t\t\tpoints = solveOverlapping(points);\n\n\t\t\t// exlude tempo noteheads\n\t\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t});\n\n\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\n\t\t\tpoints.forEach((point) => {\n\t\t\t\tconst type = SemanticElementType[point.semantic];\n\t\t\t\tif (type) {\n\t\t\t\t\tlet y1 = point.y;\n\t\t\t\t\tlet y2 = point.y;\n\t\t\t\t\tif (type === SemanticElementType.vline_Stem) {\n\t\t\t\t\t\ty1 = point.extension.y1;\n\t\t\t\t\t\ty2 = point.extension.y2;\n\t\t\t\t\t}\n\n\t\t\t\t\telements.push({\n\t\t\t\t\t\tid: point.id,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\tx: point.x - left,\n\t\t\t\t\t\ty1: y1 + y0,\n\t\t\t\t\t\ty2: y2 + y0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new SemanticCluster({\n\t\t\tindex: measureIndex,\n\t\t\telements,\n\t\t});\n\t}\n\n\tgetRawClusters(threshold: number = 1): SemanticCluster[] {\n\t\t//const times = this.getMeasuresTime();\n\n\t\treturn Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => this.getRawCluster(mi, threshold /*, times[mi]*/));\n\t}\n\n\tmakeSpartito(logger: Logger = new DummyLogger()): Spartito {\n\t\tlet eventSystems: EventSystem[] = this.systems.map((system) => system.getEvents(this.maxStavesCount));\n\n\t\t/*if (this.topology) {\n\t\t\tconst clusters = this.topology.clusters;\n\n\t\t\t// [measure, staff, event]\n\t\t\tconst eventsColumns: ChordColumn[][][] = clusters\n\t\t\t\t.filter((cluster) => cluster.index < this.measureCount)\n\t\t\t\t.reduce((columns, cluster) => {\n\t\t\t\t\tconst { system, measures } = this.getMeasure(cluster.index);\n\t\t\t\t\tconst events = cluster.getEvents();\n\n\t\t\t\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\t\t\t\t\tconst x0 = measures.filter(Boolean)[0].left;\n\n\t\t\t\t\tconst staves = system.getStaffArray(this.maxStavesCount);\n\n\t\t\t\t\t// translate by staff & measure relative offset\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst staff = staves[event.staff];\n\t\t\t\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\t\t\t\t\t\tevent.ys = event.ys.map((y) => roundNumber(y - y0, 0.5));\n\n\t\t\t\t\t\tevent.left += x0;\n\t\t\t\t\t\tevent.right += x0;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst column = measures.map((measure, staffIndex) => {\n\t\t\t\t\t\tif (!measure) return [];\n\n\t\t\t\t\t\t//console.log(\"m:\", mi, \"s:\", staffIndex);\n\t\t\t\t\t\tconst localEvents = events.filter((event) => event.staff === staffIndex);\n\t\t\t\t\t\t//measure.assignModifiersOnEvents(localEvents);\n\t\t\t\t\t\tmeasure.assignAccessoriesOnEvents(localEvents);\n\n\t\t\t\t\t\treturn localEvents;\n\t\t\t\t\t});\n\n\t\t\t\t\tcolumns[cluster.index] = column;\n\n\t\t\t\t\treturn columns;\n\t\t\t\t}, []);\n\n\t\t\tconst breakSystemIndices = this.breakSystemIndices;\n\n\t\t\tconst basicEventSystems = eventSystems;\n\t\t\teventSystems = [];\n\n\t\t\tlet measures = 0;\n\t\t\tfor (const system of this.systems) {\n\t\t\t\tconst esys = system.getEventsFunctional(this.maxStavesCount, (si, mi) => eventsColumns[measures + mi] && eventsColumns[measures + mi][si], [], {\n\t\t\t\t\tuseXMap: false,\n\t\t\t\t});\n\n\t\t\t\tconst basicSys = basicEventSystems[system.index];\n\t\t\t\t//onst nullN = esys.columns.filter(c => !c).length;\n\t\t\t\t//if (nullN)\n\t\t\t\t//\tconsole.log(\"null:\", nullN, esys.columns.length);\n\t\t\t\tesys.columns = esys.columns.map((column, i) => (column ? column : basicSys.columns[i]));\n\n\t\t\t\tconst sysIndex = this.systems.indexOf(system);\n\t\t\t\tconst pageBreak = breakSystemIndices.includes(sysIndex);\n\t\t\t\tconst lastColumn = esys.columns[esys.columns.length - 1];\n\t\t\t\tif (lastColumn) {\n\t\t\t\t\tlastColumn.break = true;\n\t\t\t\t\tlastColumn.pageBreak = pageBreak;\n\t\t\t\t}\n\n\t\t\t\teventSystems.push(esys);\n\t\t\t\tmeasures += system.measureCount;\n\t\t\t}\n\t\t}*/\n\n\t\tconst staves = this.eventSystemsToTermStaves(eventSystems, logger);\n\n\t\t// assign staff basics for columns\n\t\teventSystems.forEach((sys, ri) => {\n\t\t\tsys.columns.forEach((column, mi) => {\n\t\t\t\tcolumn.basics = staves.map((staff) => {\n\t\t\t\t\tconst { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig } = staff.rows[ri][mi];\n\n\t\t\t\t\treturn { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig };\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tconst clusters = null; //this.topology && this.topology.clusters;\n\n\t\tconst measures = [].concat(\n\t\t\t...eventSystems.map((esys) =>\n\t\t\t\tesys.columns.map((column) => {\n\t\t\t\t\tconst measureIndex = column.measureIndex;\n\t\t\t\t\tconst { system, localIndex, left, right } = this.getMeasure(measureIndex);\n\n\t\t\t\t\tconst cluster = clusters && clusters.find((cluster) => cluster.index === measureIndex);\n\n\t\t\t\t\tconst staffYsFull = [];\n\t\t\t\t\tsystem.staves.forEach((staff) => (staffYsFull[staff.index] = staff.top + staff.staffY));\n\n\t\t\t\t\tconst patch = this.patches && this.patches.find((patch) => patch.measureIndex === measureIndex);\n\t\t\t\t\tconst events = patch ? patch.events : SpartitoMeasure.reorderEvents([].concat(...column.rows.map((row) => row.events)), staffYsFull);\n\n\t\t\t\t\tconst barTypes = Object.fromEntries(Object.entries(column.barTypes).map(([k, v]) => [k, v / system.staves.length]));\n\t\t\t\t\tconst indent = localIndex === 0 && system.indent;\n\n\t\t\t\t\treturn new SpartitoMeasure({\n\t\t\t\t\t\tmeasureIndex,\n\t\t\t\t\t\tstaffMask: esys.staffMask,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\t\tlocalIndex,\n\t\t\t\t\t\t\tleft,\n\t\t\t\t\t\t\tright,\n\t\t\t\t\t\t\tstaffYs: system.staves.map((staff) => staff.top + staff.staffY),\n\t\t\t\t\t\t\tstaffYsFull,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t//startX: column.startX,\n\t\t\t\t\t\t//width: column.width,\n\t\t\t\t\t\tduration: patch ? patch.duration : column.duration,\n\t\t\t\t\t\tevents,\n\t\t\t\t\t\tcontexts: column.rows.map((row) => row.contexts),\n\t\t\t\t\t\tmarks: column.marks,\n\t\t\t\t\t\tbreak: column.break,\n\t\t\t\t\t\tpageBreak: column.pageBreak,\n\t\t\t\t\t\tvoltaBegin: column.voltaBegin,\n\t\t\t\t\t\tvoltaEnd: column.voltaEnd,\n\t\t\t\t\t\talternative: column.alternative,\n\t\t\t\t\t\tbarTypes,\n\t\t\t\t\t\tindent,\n\t\t\t\t\t\tbasics: patch ? patch.basics : column.basics,\n\t\t\t\t\t\tmatrixH: cluster && cluster.matrixH,\n\t\t\t\t\t\tmatrixV: cluster && cluster.matrixV,\n\t\t\t\t\t\tvoices: patch ? patch.voices : null,\n\t\t\t\t\t\tpatched: !!patch,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tconst staffLayout = this.staffLayout;\n\t\tconst staffGroups = staffLayout.standaloneGroups.map((ids) => ids.map((id) => staffLayout.staffIds.indexOf(id)));\n\n\t\tthis.spartito = new Spartito({\n\t\t\tstavesCount: this.maxStavesCount,\n\t\t\tstaffGroups,\n\t\t\tmeasures,\n\t\t});\n\n\t\treturn this.spartito;\n\t}\n\n\tmakeMusicSheet(): MusicSheet {\n\t\tconst spartito = this.spartito || this.makeSpartito();\n\n\t\tif (!spartito.regulated) console.warn('[makeMusicSheet]\tspartito not regulated.');\n\n\t\tconst voiceStaves = spartito.makeVoiceStaves();\n\n\t\tconst { title, pageSize, unitSize, staffLayout, paperOptions, headers, instrumentDict } = this;\n\t\tconst measureLayout = this.getMeasureLayout();\n\n\t\treturn {\n\t\t\ttitle,\n\t\t\tpageSize,\n\t\t\tunitSize,\n\t\t\tmeasureLayout,\n\t\t\tstaffLayout,\n\t\t\tpaperOptions,\n\t\t\theaders,\n\t\t\tvoiceStaves,\n\t\t\tinstrumentDict,\n\t\t};\n\t}\n\n\tfindPoint(sid: string): PointPosition {\n\t\tfor (const system of this.systems) {\n\t\t\tfor (let si = 0; si < system.staves.length; ++si) {\n\t\t\t\tconst point = system.staves[si].semantics.find((point) => point.id === sid);\n\t\t\t\tif (point) {\n\t\t\t\t\tconst pageIndex = this.pages.findIndex((page) => page.systems.includes(system));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpoint,\n\t\t\t\t\t\tpageIndex,\n\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\tstaffIndex: si,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetMeasureSemantics(systemIndex: number, localIndex: number): SemanticPointInMeasure[] {\n\t\tconst system = this.systems[systemIndex];\n\t\tif (!system) return null;\n\n\t\tconst left = localIndex ? system.measureBars[localIndex - 1] : 0;\n\t\tconst right = system.measureBars[localIndex] || system.width;\n\n\t\treturn system.staves\n\t\t\t.map((staff, si) => {\n\t\t\t\tconst staffY = staff.top + staff.staffY;\n\t\t\t\treturn staff.semantics\n\t\t\t\t\t.filter((point) => point.x >= left && point.x < right)\n\t\t\t\t\t.map((point) => {\n\t\t\t\t\t\tconst [y1, y2] = Number.isFinite(point.extension?.y1) ? [point.extension.y1, point.extension.y2] : [point.y, point.y];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\tstaff: si,\n\t\t\t\t\t\t\tsy1: y1 + staffY,\n\t\t\t\t\t\t\tsy2: y2 + staffY,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1);\n\t}\n\n\tmakeTimewiseGraph({ store = false }: { store?: boolean } = {}): TimewiseGraph {\n\t\tif (!this.spartito) return null;\n\n\t\tconst measures = this.spartito.measures\n\t\t\t.filter((measure) => measure.events.length > 0)\n\t\t\t.map((measure) => {\n\t\t\t\tconst points = this.getMeasureSemantics(measure.position.systemIndex, measure.position.localIndex);\n\n\t\t\t\tconst graph = {\n\t\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\t\tleft: measure.position.left,\n\t\t\t\t\tright: measure.position.right,\n\t\t\t\t\tpoints,\n\t\t\t\t};\n\n\t\t\t\tif (store) measure.graph = graph;\n\n\t\t\t\treturn graph;\n\t\t\t});\n\n\t\treturn { measures };\n\t}\n\n\tgetTokenMap(): Map {\n\t\tconst map = new Map();\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => staff.measures.forEach((measure) => measure.tokens.forEach((token) => map.set(token.id, token))))\n\t\t);\n\n\t\treturn map;\n\t}\n\n\tassemble(confidenceThreshold: number = 1, logger: Logger = new DummyLogger()) {\n\t\tconst ids = new Map();\n\n\t\tconst append = (systemIndex, staffIndex, point) => {\n\t\t\tconst id = hashSemanticPoint(systemIndex, staffIndex, point);\n\t\t\tlogger.assert(!ids.has(id), 'semantic point hash conflicted:', id, point, ids.get(id));\n\n\t\t\tids.set(id, point);\n\t\t};\n\n\t\tthis.pages.forEach((page, index) => (page.index = index));\n\n\t\tlet measureIndex = 0;\n\t\tthis.systems.forEach((system, systemIndex) => {\n\t\t\tsystem.index = systemIndex;\n\t\t\tsystem.headMeasureIndex = measureIndex;\n\t\t\tsystem.prev = this.systems[systemIndex - 1] || null;\n\t\t\tsystem.next = this.systems[systemIndex + 1] || null;\n\n\t\t\tif (system.semantics && system.semantics.length) system.semantics.forEach((point) => append(systemIndex, null, point));\n\n\t\t\tsystem.assemble(confidenceThreshold, logger);\n\t\t\tmeasureIndex += system.measureCount;\n\t\t});\n\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tpage.systems.forEach((system) => (system.pageIndex = i));\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations }, logger);\n\t\t});\n\t}\n\n\tassembleSystem(system: System, confidenceThreshold: number = 1) {\n\t\tthis.systems.forEach((system, si) => (system.index = si));\n\t\tconst systemIndex = system.index;\n\n\t\tif (system.semantics && system.semantics.length) {\n\t\t\tsystem.semantics.forEach((point) => hashSemanticPoint(systemIndex, null, point));\n\t\t\tsystem.assemble(confidenceThreshold);\n\t\t}\n\t}\n\n\tmarkVoices(staves: VoicesStaff[]): void {\n\t\tconst tokenMap = this.getTokenMap();\n\t\tfor (const token of tokenMap.values()) token.voice = 0;\n\n\t\tconst vis = []\n\t\t\t.concat(...staves.map((staff, s) => (staff.voices || []).map((_, v) => [s, v])))\n\t\t\t.sort(([s1, v1], [s2, v2]) => v1 - v2 || s1 - s2)\n\t\t\t.map(([s, v]) => `${s}|${v}`);\n\n\t\tstaves.forEach((staff, si) =>\n\t\t\t(staff.voices || []).forEach((voice, vi) =>\n\t\t\t\tvoice.measures.forEach((measure) => {\n\t\t\t\t\tconst voiceIndex = vis.indexOf(`${si}|${vi}`);\n\n\t\t\t\t\tconst events = Object.values(measure.tickMap).filter((event) => event instanceof EventTerm) as EventTerm[];\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst notes = event.noteIds ? event.noteIds.map((id) => tokenMap.get(id)).filter(Boolean) : [];\n\t\t\t\t\t\tconst accessories = event.accessories ? event.accessories.map((acc) => tokenMap.get(acc.id)).filter(Boolean) : [];\n\t\t\t\t\t\t//console.log(\"notes:\", si, vi, mi, event.noteIds, notes, accessories);\n\n\t\t\t\t\t\t[...notes, ...accessories].forEach((token) => (token.voice |= 1 << voiceIndex));\n\n\t\t\t\t\t\tif (event.timeWarp) notes.forEach((note) => (note.timeWarped = true));\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t}\n\n\tasync replaceImageKeys(proc: (x: string | Buffer) => Promise): Promise {\n\t\tawait Promise.all([\n\t\t\t...(this.pages.map(async (page) => {\n\t\t\t\tif (page.source) page.source.url = await proc(page.source.url);\n\t\t\t}) as Promise[]),\n\t\t\t...this.systems.map((system) =>\n\t\t\t\tPromise.all([\n\t\t\t\t\tproc(system.backgroundImage).then((key) => (system.backgroundImage = key)),\n\t\t\t\t\t...(system.staves.map(async (staff) => {\n\t\t\t\t\t\tstaff.backgroundImage = await proc(staff.backgroundImage);\n\t\t\t\t\t\tstaff.maskImage = await proc(staff.maskImage);\n\t\t\t\t\t}) as Promise[]),\n\t\t\t\t])\n\t\t\t),\n\t\t]);\n\t}\n\n\tinferenceStaffLayout(): void {\n\t\t// inference the complete layout\n\t\tconst staffTotal = Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t\tthis.staffLayoutCode = Array(staffTotal).fill('').join(',');\n\n\t\tconst completeSystems = this.systems.filter((system) => system.staves.length === staffTotal && system.bracketsAppearance);\n\t\tif (!completeSystems.length) return; // no enough evidence\n\n\t\tconst candidateCodes = completeSystems\n\t\t\t.map((system) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst layout = staffLayout.parseCode(system.bracketsAppearance);\n\t\t\t\t\tif (layout.staffIds.length !== system.staves.length) return null;\n\n\t\t\t\t\treturn system.bracketsAppearance;\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t\tif (!candidateCodes.length) return; // no valid layout\n\n\t\tconst codeCounting = candidateCodes.reduce((acc, code) => {\n\t\t\tconst count = acc[code] || 0;\n\t\t\tacc[code] = count + 1;\n\t\t\treturn acc;\n\t\t}, {} as { [code: string]: number });\n\t\tconst maxCount = Math.max(...Object.values(codeCounting));\n\t\tconst code = Object.entries(codeCounting).find(([_, count]) => count === maxCount)[0];\n\n\t\t// added connection lines between braces {-}\n\t\tconst connectedCode = code.replace(/\\{,*\\}/g, (match) => match.replace(/,/g, '-'));\n\t\tconst layout = staffLayout.parseCode(connectedCode);\n\n\t\tthis.staffLayoutCode = connectedCode;\n\t\t//console.log(\"complete code:\", code);\n\n\t\t// inference systems' mask\n\t\tlet lastSys: System = null;\n\t\tfor (const system of this.systems) {\n\t\t\tif (lastSys && system.staves.length === lastSys.staves.length && system.bracketsAppearance === lastSys.bracketsAppearance) {\n\t\t\t\tsystem.staffMaskChanged = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (system.staves.length < staffTotal && system.bracketsAppearance) {\n\t\t\t\t// validate the system brackets code\n\t\t\t\ttry {\n\t\t\t\t\tif (!staffLayout.parseCode(system.bracketsAppearance)) continue;\n\t\t\t\t} catch (_) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst search = (bits: (0 | 1)[]): number => {\n\t\t\t\t\tif (bits.length > layout.staffIds.length) return null;\n\n\t\t\t\t\tif (bits.reduce((sum, bit) => sum + bit, 0) === system.staves.length) return bitsToMask(bits);\n\n\t\t\t\t\tfor (const bit of [1, 0]) {\n\t\t\t\t\t\tconst bb = [...bits, bit] as (0 | 1)[];\n\t\t\t\t\t\tconst code1 = layout.partialMaskCode(bb);\n\t\t\t\t\t\tif (code1 === system.bracketsAppearance) return bitsToMask(bb);\n\t\t\t\t\t\telse if (system.bracketsAppearance.startsWith(code1)) {\n\t\t\t\t\t\t\tconst result = search(bb);\n\t\t\t\t\t\t\tif (result) return result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t\tconst mask = search([]);\n\t\t\t\t//console.log(\"mask:\", system.bracketsAppearance, mask.toString(2));\n\n\t\t\t\tsystem.staffMaskChanged = !lastSys || mask !== lastSys.staffMask ? mask : null;\n\t\t\t}\n\n\t\t\tlastSys = system;\n\t\t}\n\t}\n\n\tassignBackgroundForMeasure(measure: SpartitoMeasure): void {\n\t\tmeasure.backgroundImages = [];\n\n\t\tconst system = this.systems[measure.position.systemIndex];\n\t\tif (system.backgroundImage) {\n\t\t\tmeasure.backgroundImages.push({\n\t\t\t\turl: system.backgroundImage,\n\t\t\t\tposition: system.imagePosition,\n\t\t\t\toriginal: true,\n\t\t\t});\n\t\t}\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tif (!system.backgroundImage && staff.backgroundImage)\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.backgroundImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t\toriginal: true,\n\t\t\t\t});\n\n\t\t\tif (staff.maskImage) {\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.maskImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tblackoutFakeNotes(scope: 'patched' | 'perfect' | 'all' = 'patched'): string[] {\n\t\tif (!this.spartito) return;\n\n\t\tlet inScope = (_) => true;\n\t\tswitch (scope) {\n\t\t\tcase 'patched':\n\t\t\t\tinScope = (measure) => measure.patched;\n\t\t\t\tbreak;\n\t\t\tcase 'perfect':\n\t\t\t\tinScope = (measure) => measure.patched || (measure.regulated && evaluateMeasure(measure).perfect);\n\t\t\t\tbreak;\n\t\t}\n\t\tconst measures = this.spartito.measures.filter(inScope);\n\n\t\tconst fakeIds = measures.reduce((ids, measure) => {\n\t\t\tif (!measure.regulated) return;\n\n\t\t\tconst voicedIds = measure.voices.flat(1);\n\t\t\tconst fakeChords = measure.events.filter((event) => !event.rest && !event.grace && !voicedIds.includes(event.id));\n\n\t\t\tfakeChords.forEach((event) => event.noteIds && ids.push(...event.noteIds));\n\n\t\t\treturn ids;\n\t\t}, [] as string[]);\n\t\tconst fakeIdSet = new Set(fakeIds);\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\tconst blackIds = staff.semantics.filter((point) => fakeIdSet.has(point.id)).map((point) => point.id);\n\t\t\t\tsystem.sidBlackList.push(...blackIds);\n\t\t\t})\n\t\t);\n\n\t\treturn fakeIds;\n\t}\n\n\tgetMeasureLayout(): measureLayout.MeasureLayout {\n\t\tconst code = this.spartito && this.spartito.measureLayoutCode;\n\t\tif (code) {\n\t\t\ttry {\n\t\t\t\treturn measureLayout.parseCode(code);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.debug('invalid measure layout code:', err);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t*splitToSingleScoresGen(): Generator {\n\t\tthis.assemble();\n\t\tconst startSysIndices = this.systems.filter((system) => system.index > 0 && system.indent && system.timeSignatureOnHead).map((system) => system.index);\n\n\t\tif (!startSysIndices.length) {\n\t\t\tyield this.deepCopy();\n\t\t\treturn;\n\t\t}\n\n\t\tconst templateScore = new Score({ ...this, pages: [], topology: undefined, spartito: undefined, patches: undefined });\n\n\t\t// clear temporary objects before deep dopy\n\t\tthis.pages.forEach((page) => {\n\t\t\tdelete page.tokens;\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tdelete system.tokens;\n\t\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\t\tstaff.measures = [];\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tlet startSysIndex = 0;\n\t\tfor (const endSysIndex of [...startSysIndices, this.systems.length]) {\n\t\t\tconst sysInRange = (system) => system.index >= startSysIndex && system.index < endSysIndex;\n\t\t\tconst pages = this.pages\n\t\t\t\t.filter((page) => page.systems.some(sysInRange))\n\t\t\t\t.map((page) => {\n\t\t\t\t\tconst { systems, ...fields } = page;\n\t\t\t\t\treturn new Page({ ...fields, systems: systems.filter(sysInRange).map((system) => new System({ ...system })) });\n\t\t\t\t});\n\n\t\t\tconst newScore = templateScore.deepCopy();\n\t\t\tnewScore.headers.SubScoreSystem = `${startSysIndex}-${endSysIndex - 1}`;\n\t\t\tnewScore.headers.SubScorePage = `${pages[0].index}-${pages[pages.length - 1].index}`;\n\n\t\t\t//newScore.pages = pages.map((page) => page.deepCopy());\n\t\t\tnewScore.pages = pages;\n\t\t\tnewScore.assemble();\n\t\t\tnewScore.inferenceStaffLayout();\n\n\t\t\tstartSysIndex = endSysIndex;\n\n\t\t\tyield newScore;\n\t\t}\n\t}\n\n\tsplitToSingleScores(): Score[] {\n\t\treturn [...this.splitToSingleScoresGen()];\n\t}\n}\n\nexport { PaperOptions, Score, Page, System, Staff, Measure, MeasureValidation };\nexport type { SemanticPointInMeasure };\n","import { RegulationSolution, RegulationSolutionEvent, EventPredisposition } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport { argmax, frac } from './utils';\nimport { WHOLE_DURATION, StemBeam } from './term';\nimport { Logger, DummyLogger } from './logger';\n\ninterface BeadPicker {\n\tn_seq: number;\n\tquota: number;\n\tcost: number; // duration in milliseconds\n\n\tpredictCluster(cluster: EventCluster, tip: number): Promise;\n}\n\nenum BeadType {\n\tPass = 'i',\n\tDivision = 'd',\n\tDots = 'o',\n}\n\nconst DIVISION_NAMES = ['whole', 'half', 'quarter', 'eighth', 'sixteenth', 'thirtysecond', 'sixtyfourth', '128th', '256th'];\n\ninterface BeadNodeInitData {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n}\n\nconst RESIDUE_LOSS_WEIGHT = 0.2;\nconst VOICEN_LOSS_WEIGHT = 0.002;\nconst SPACE_LOSS_WEIGHT = 0.4 / WHOLE_DURATION;\nconst PRETENTIOUSNESS_LOSS_WEIGHT = 0.02;\n\nconst POSSIBILITY_LOW_BOUNDARY = 1e-12;\n\nconst PRETENTIOUSNESS_CLIP = 100;\n\ninterface ClusterEvaluation {\n\ttickErr: number;\n\ttwist: number;\n\tresidue: number;\n\tendTick: number;\n\tfatalError: boolean;\n\tvoiceN: number;\n\tspaceDuration: number;\n\tpretentiousness: number;\n\tloss: number;\n}\n\ninterface ElementState {\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tbeam: StemBeam;\n\tstemDirection: string;\n\tgrace: boolean;\n\ttimeWarped: boolean;\n\tfullMeasure: boolean; // full measure rest\n\tfake: boolean;\n\torder: number;\n\tpredisposition: EventPredisposition;\n}\n\ninterface ClusterState {\n\telements: ElementState[];\n}\n\nconst STEM_DIRECTION_OPTIONS = [undefined, 'u', 'd'];\n\nconst BEAM_OPTIONS = [undefined, StemBeam.Open, StemBeam.Continue, StemBeam.Close];\n\nconst saveClusterState = (cluster: EventCluster): ClusterState => ({\n\telements: cluster.elements.map((elem) => ({\n\t\ttick: elem.tick!,\n\t\tdivision: elem.division!,\n\t\tdots: elem.dots!,\n\t\tbeam: elem.beam!,\n\t\tstemDirection: elem.stemDirection!,\n\t\tgrace: elem.grace!,\n\t\ttimeWarped: elem.timeWarped!,\n\t\tfullMeasure: elem.fullMeasure!,\n\t\tfake: elem.fake!,\n\t\torder: elem.order!,\n\t\tpredisposition: elem.predisposition!,\n\t})),\n});\n\nconst restoreClusterState = (cluster: EventCluster, state: ClusterState): void => cluster.elements.forEach((elem, i) => Object.assign(elem, state.elements[i]));\n\nconst measurePretentious = (p) => Math.min(PRETENTIOUSNESS_CLIP, -Math.log(p));\n\ninterface BeadDeductionContext {\n\tpicker: BeadPicker;\n\tlogger: Logger;\n\tptFactor: number; // pretentiousness tolerance factor\n}\n\nclass BeadNode {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n\n\tchildren: Record;\n\taccessCount: number;\n\n\tconstructor(data: BeadNodeInitData) {\n\t\tObject.assign(this, data);\n\n\t\t//this.possibilities = this.possibilities.map((x, i) => (this.type === BeadType.Pass && !i) ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\n\t\tthis.children = {};\n\t\tthis.accessCount = 0;\n\t}\n\n\tnextBranch(): number | null {\n\t\tconst ps = this.possibilities.map((p, i) => p / (this.children[i] ? this.children[i].accessCount + 1 : 1));\n\t\t//const ps = this.possibilities.map((p, i) => p * (this.children[i] ? (2 ** -this.children[i].accessCount) : 1));\n\n\t\tif (ps.every((p) => !p)) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn argmax(ps);\n\t}\n\n\tget currentElem(): EventElement {\n\t\treturn this.cluster.elements[this.elemIndex];\n\t}\n\n\tbranchID(ni: number): string {\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\treturn `i_${ni}`;\n\t\t\tcase BeadType.Division:\n\t\t\t\treturn DIVISION_NAMES[ni];\n\t\t\tcase BeadType.Dots:\n\t\t\t\treturn 'o' + '.'.repeat(ni);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tasync deduce({ picker, logger, ptFactor }: BeadDeductionContext, deep: number = 0): Promise {\n\t\t++this.accessCount;\n\n\t\tconst ni = this.nextBranch()!;\n\t\tlogger.debug(String.fromCodePoint(0x1f349) + ' '.repeat(deep), this.branchID(ni), this.accessCount > 1 ? `[${this.accessCount}]` : '');\n\n\t\tif (!Number.isInteger(ni) || ni < 0) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tthis.pretentiousness += measurePretentious(this.possibilities[ni]);\n\t\tif (this.pretentiousness > PRETENTIOUSNESS_CLIP * ptFactor) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tlet selfEval: null | ClusterEvaluation = null;\n\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\t{\n\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\tconst element = this.cluster.elements[ni];\n\t\t\t\t\tconsole.assert(element, 'null element:', ni, this.cluster.elements.length);\n\t\t\t\t\tif (element.type === EventElementType.EOS) {\n\t\t\t\t\t\tselfEval = evaluateCluster(this.cluster, tip, this.pretentiousness);\n\t\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.cluster.elements[0].order = tip;\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip + 1)).map((x, i) =>\n\t\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 || i === this.cluster.elements.length - 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: 0,\n\t\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.order = tip;\n\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tconsole.assert(element.predisposition, 'no predisposition:', ni, this.possibilities);\n\t\t\t\t\t\t\tconst possibilities = element.predisposition!.divisionVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: ni,\n\t\t\t\t\t\t\t\ttype: BeadType.Division,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Division:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.division = ni;\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tconst possibilities = this.currentElem.predisposition!.dotsVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Dots,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Dots:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.dots = ni;\n\n\t\t\t\t\tselfEval = evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip)).map((x, i) =>\n\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst evaluation = await this.children[ni].deduce({ picker, logger, ptFactor }, deep + 1);\n\t\tif (selfEval && evaluation.fatalError) {\n\t\t\tconst tip = this.currentElem.order!;\n\t\t\tthis.cluster.elements.forEach((elem) => {\n\t\t\t\tif (elem.order! > tip) elem.order = undefined;\n\t\t\t});\n\n\t\t\t// clear children data\n\t\t\tthis.cluster.elements.forEach((elem) => (elem.order = elem.order! > this.currentElem.order! ? undefined : elem.order));\n\t\t\tthis.cluster.elements[this.cluster.elements.length - 1].tick = selfEval.endTick;\n\n\t\t\treturn selfEval;\n\t\t}\n\n\t\treturn evaluation;\n\t}\n}\n\nconst estimateElementDuration = (elem: EventElement) => WHOLE_DURATION * 2 ** -elem.division! * (2 - 2 ** -elem.dots!);\n\nconst evaluateCluster = (cluster: EventCluster, tip: number, pretentiousness: number): ClusterEvaluation => {\n\tconst events = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order) && elem.order! < tip\n\t);\n\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\tconst eos = cluster.elements[cluster.elements.length - 1];\n\n\tlet tick = 0;\n\tlet lastOrder = 0;\n\tlet endTick = 0;\n\tlet voiceN = 1;\n\n\t// [x, tick, estimated tick]\n\tconst scales: [number, number, number][] = [[eos.x, cluster.signatureDuration, cluster.signatureDuration]];\n\n\tlet totalDuration = 0;\n\n\t// assign tick for events\n\tevents.forEach((event) => {\n\t\tif (event.order! > lastOrder + 1) {\n\t\t\ttick = 0;\n\t\t\t++voiceN;\n\t\t}\n\n\t\tconst referenceScale = scales.find((s) => s[1] >= tick);\n\t\tif (referenceScale && event.x > referenceScale[0] + 3) {\n\t\t\tconst nearScale = scales.reduce((n, s) => (Math.abs(event.predisposition!.tick - s[2]) < Math.abs(event.predisposition!.tick - n[2]) ? s : n));\n\t\t\tif (Math.abs(nearScale[0] - event.x) < 2) tick = Math.max(tick, nearScale[1]);\n\t\t}\n\n\t\tevent.tick = tick;\n\n\t\tconst si = Math.max(\n\t\t\t0,\n\t\t\tscales.findIndex((s) => s[0] > event.x)\n\t\t);\n\t\tscales.splice(si, 0, [event.x, event.tick, event.predisposition!.tick]);\n\n\t\t//let duration = WHOLE_DURATION * (2 ** -event.division!) * (2 - 2 ** -event.dots!);\n\t\tlet duration = estimateElementDuration(event);\n\t\tif (event.predisposition!.timeWarped > 0.5) duration = (duration * 2) / 3;\n\n\t\ttick += duration;\n\t\ttotalDuration += duration;\n\t\tendTick = Math.max(endTick, tick);\n\t\tlastOrder = event.order!;\n\t});\n\n\t/*const pretentiousness = events.reduce((p, event) => p +\n\t\tmeasurePretentious(event.predisposition!.divisionVector![event.division!]) +\n\t\tmeasurePretentious(event.predisposition!.dotsVector![event.dots!]), 0);*/\n\n\tif (endTick > 0) cluster.elements[cluster.elements.length - 1].tick = endTick;\n\n\tconst xSpan = cluster.elements[cluster.elements.length - 1].pivotX! - cluster.elements[1].pivotX!;\n\tconst tickSpan = Math.max(...events.map((e) => e.tick!), endTick);\n\n\t// tick twist loss\n\tconst eventsXOrder = [...events].sort((e1, e2) => e1.pivotX! - e2.pivotX!);\n\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\tconst e1 = eventsXOrder[i];\n\t\tconst dx = e2.pivotX! - e1.pivotX!;\n\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\tif (!dt) return dx / xSpan;\n\n\t\tconst rate = Math.atan2(dt / tickSpan, dx / xSpan);\n\n\t\t//if (dt < 0)\n\t\t//\tconsole.log(\"minus dt:\", dt, dx, rate);\n\n\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t});\n\t//console.debug(\"tickTwists:\", tickTwists, eventsXOrder);\n\n\tconst twist = Math.max(...tickTwists, 0);\n\n\tconst tickMSE = events.map((event) => (event.tick! - event.predisposition!.tick) ** 2);\n\t//console.debug(\"tickMSE:\", tickMSE.map(Math.sqrt));\n\tconst tickErr = tickMSE.length ? Math.sqrt(tickMSE.reduce((sum, mse) => sum + mse, 0) / tickMSE.length) : 0;\n\t//console.debug(\"tick/twist:\", tickErr / WHOLE_DURATION, twist);\n\n\tconst residueElements = cluster.elements.filter(\n\t\t(elem) =>\n\t\t\t[EventElementType.CHORD, EventElementType.REST].includes(elem.type) &&\n\t\t\t!(Number.isInteger(elem.order) && elem.order! < tip) &&\n\t\t\t!(elem.predisposition && elem.predisposition.fakeP > 0.5)\n\t);\n\tconst residue = residueElements.length;\n\n\tconst fatalError = twist >= 1 || endTick > cluster.signatureDuration;\n\n\t//const spaceDuration = Math.max(0, cluster.signatureDuration - endTick);\n\tconst spaceDuration = Math.max(0, cluster.signatureDuration - totalDuration / voiceN);\n\n\tconst loss =\n\t\ttickErr / WHOLE_DURATION +\n\t\ttwist +\n\t\tresidue * RESIDUE_LOSS_WEIGHT +\n\t\tvoiceN * VOICEN_LOSS_WEIGHT +\n\t\tspaceDuration * SPACE_LOSS_WEIGHT +\n\t\tpretentiousness * PRETENTIOUSNESS_LOSS_WEIGHT;\n\n\treturn {\n\t\ttickErr,\n\t\ttwist,\n\t\tresidue,\n\t\tendTick,\n\t\tfatalError,\n\t\tvoiceN,\n\t\tspaceDuration,\n\t\tpretentiousness,\n\t\tloss,\n\t};\n};\n\nconst solveCluster = async (\n\tcluster: EventCluster,\n\tpicker: BeadPicker,\n\tlogger: Logger,\n\tquota: number = 200,\n\tstopLoss: number = 0,\n\tptFactor: number = 1\n): Promise => {\n\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\tconst suc0 = await picker.predictCluster(cluster, 1);\n\n\tconst root = new BeadNode({ cluster, elemIndex: 0, pretentiousness: 0, type: BeadType.Pass, possibilities: suc0 });\n\n\tlet bestEvaluation: ClusterEvaluation | null = null;\n\tlet bestState: ClusterState | null = null;\n\n\tpicker.quota = quota;\n\twhile (picker.quota) {\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\n\t\tconst evaluation = await root.deduce({ picker, logger, ptFactor });\n\n\t\tlogger.debug('loss:', evaluation);\n\n\t\tif (!bestEvaluation || evaluation.loss < bestEvaluation.loss) {\n\t\t\tbestEvaluation = evaluation;\n\n\t\t\tcluster.duration = bestEvaluation.endTick;\n\t\t\tbestState = saveClusterState(cluster);\n\n\t\t\tif (Number.isFinite(stopLoss) && bestEvaluation.loss <= stopLoss!) break;\n\t\t}\n\n\t\tif (!Number.isFinite(root.accessCount)) break;\n\t}\n\tlogger.debug('bestEvaluation:', bestEvaluation);\n\n\trestoreClusterState(cluster, bestState!);\n\n\t// solve residue elements\n\tconst fixedEvents = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\tconst pendingEvents = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !Number.isInteger(elem.order)\n\t);\n\tif (fixedEvents.length) {\n\t\tpendingEvents.forEach((event) => {\n\t\t\t// exclude fake events (includes grace, fullMeasure) from voices\n\t\t\tevent.tick = undefined;\n\n\t\t\tif (event.predisposition!.fakeP < 0.5) {\n\t\t\t\t//const near = fixedEvents.reduce((n, e) => Math.abs(e.predisposition!.tick - event.predisposition!.tick) < Math.abs(n.predisposition!.tick - event.predisposition!.tick) ? e : n);\n\t\t\t\tconst duration = estimateElementDuration(event);\n\t\t\t\tconst candidates = fixedEvents.filter((e) => e.tick! + duration <= bestEvaluation!.endTick);\n\t\t\t\tif (candidates.length) {\n\t\t\t\t\tconst near = candidates.reduce((n, e) => (Math.abs(e.x - event.x) < Math.abs(n.x - event.x) ? e : n));\n\t\t\t\t\tevent.tick = near.tick;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfixedEvents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t// properties\n\t[...fixedEvents, ...pendingEvents].forEach((event) => {\n\t\tevent.grace = !Number.isFinite(event.tick) && event.predisposition!.grace;\n\t\tevent.timeWarped = event.predisposition!.timeWarped > 0.5;\n\t\tevent.fullMeasure = event.predisposition!.fullMeasure > 0.5;\n\t\tevent.stemDirection = STEM_DIRECTION_OPTIONS[argmax(event.predisposition!.stemDirectionVector)];\n\t\tevent.beam = BEAM_OPTIONS[argmax(event.predisposition!.beamVector)];\n\t});\n\n\t// construct matrixH\n\tconst ids = cluster.elements.map((e) => e.index);\n\tconst idx = (id: number): number => ids.indexOf(id);\n\tcluster.matrixH = cluster.elements.map(() => Array(cluster.elements.length).fill(0));\n\tfixedEvents.forEach((event, i) => {\n\t\tconst lastEvent = fixedEvents[i - 1];\n\t\tif (!lastEvent || lastEvent.order! < event.order! - 1) {\n\t\t\tcluster.matrixH![idx(event.index!)][0] = 1;\n\t\t\tif (lastEvent) cluster.matrixH![cluster.elements.length - 1][idx(lastEvent.index!)] = 1;\n\t\t} else {\n\t\t\tconsole.assert(\n\t\t\t\tcluster.matrixH![idx(event.index!)] && Number.isFinite(cluster.matrixH![idx(event.index!)][idx(lastEvent.index!)]),\n\t\t\t\t'matrixH out of range:',\n\t\t\t\tevent.index,\n\t\t\t\tlastEvent.index,\n\t\t\t\tcluster.matrixH!.length\n\t\t\t);\n\n\t\t\tcluster.matrixH![idx(event.index!)][idx(lastEvent.index!)] = 1;\n\t\t}\n\t});\n\tif (!pendingEvents.length && fixedEvents.length) cluster.matrixH![cluster.elements.length - 1][idx(fixedEvents[fixedEvents.length - 1].index!)] = 1;\n\n\treturn bestEvaluation!;\n};\n\ninterface BeadSolverOptions {\n\tpicker: BeadPicker;\n\tstopLoss?: number;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tptFactor?: number;\n\tlogger?: Logger;\n}\n\nconst solveMeasure = async (measure: SpartitoMeasure, options: BeadSolverOptions): Promise => {\n\tconst { stopLoss = 0.09, quotaMax = 1000, quotaFactor = 5, ptFactor = 1, logger = new DummyLogger() } = options;\n\n\tlet worstLoss = 0;\n\n\tconst clusters = measure.createClusters();\n\tfor (const cluster of clusters) {\n\t\tconst quota = Math.min(quotaMax, Math.ceil(cluster.elements.length * quotaFactor));\n\t\tlogger.info(`[measure-${measure.measureIndex}]`, quota);\n\t\tconst { loss } = await solveCluster(cluster, options.picker, logger, quota, stopLoss, ptFactor);\n\t\tworstLoss = Math.max(worstLoss, loss);\n\t}\n\n\tconst voices = [] as number[][];\n\n\tconst durations = [] as number[];\n\n\tconst solutionEvents = [] as RegulationSolutionEvent[];\n\n\tclusters.forEach((cluster) => {\n\t\tconst events = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\t\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t\tif (!events.length) return;\n\n\t\tlet voice = [] as number[];\n\t\tvoices.push(voice);\n\t\tlet lastOrder = 0;\n\t\tevents.forEach((event) => {\n\t\t\tif (event.fullMeasure || event.grace || event.tremoloCatcher) return;\n\n\t\t\tif (event.order! > lastOrder + 1) {\n\t\t\t\tvoice = [event.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t} else voice.push(event.index!);\n\n\t\t\tlastOrder = event.order!;\n\t\t});\n\n\t\tlet tipElem = events[events.length - 1];\n\n\t\t// complete voices from pending events\n\t\tconst pendingEvents = cluster.elements.filter(\n\t\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isFinite(elem.tick) && !Number.isInteger(elem.order)\n\t\t);\n\t\twhile (pendingEvents.length) {\n\t\t\tconst ei = pendingEvents.findIndex((e) => e.tick! >= tipElem.tick! + estimateElementDuration(tipElem));\n\t\t\tif (ei >= 0) voice.push(pendingEvents.splice(ei, 1)[0].index!);\n\t\t\telse {\n\t\t\t\ttipElem = pendingEvents.splice(0, 1)[0];\n\t\t\t\tvoice = [tipElem.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\t\t}\n\n\t\tif (events.some((elem) => !elem.fullMeasure && Number.isInteger(elem.order))) {\n\t\t\tconst eos = cluster.elements.find((elem) => elem.type === EventElementType.EOS);\n\t\t\tdurations.push(eos!.tick!);\n\t\t}\n\n\t\tconst eventMap = measure.eventMap;\n\n\t\tconst tickSet = cluster.elements.reduce((set, elem) => {\n\t\t\tif (Number.isFinite(elem.tick)) set.add(elem.tick!);\n\t\t\treturn set;\n\t\t}, new Set());\n\t\tconst ticks = Array.from(tickSet).sort((t1, t2) => t1 - t2);\n\n\t\t// fill solutionEvents\n\t\tevents.forEach((elem) => {\n\t\t\tconst event = eventMap[elem.index!];\n\t\t\tif (event) {\n\t\t\t\tsolutionEvents.push({\n\t\t\t\t\tid: event.id!,\n\t\t\t\t\ttick: elem.tick!,\n\t\t\t\t\ttickGroup: ticks.indexOf(elem.tick!),\n\t\t\t\t\tdivision: elem.division !== event.division ? elem.division : undefined,\n\t\t\t\t\tdots: elem.dots !== event.dots ? elem.dots : undefined,\n\t\t\t\t\ttimeWarp: elem.timeWarped ? frac(2, 3) : undefined, // TODO:\n\t\t\t\t\tbeam: elem.beam !== event.beam ? elem.beam : undefined,\n\t\t\t\t\tgrace: elem.grace !== !!event.grace ? elem.grace : undefined,\n\t\t\t\t\tfullMeasure: elem.fullMeasure || undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\tconst estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n\n\treturn {\n\t\tvoices: voices.filter((voice) => voice.length),\n\t\tduration: Math.max(...durations),\n\t\tevents: solutionEvents,\n\t\tpriority: -worstLoss,\n\t\testimatedDuration,\n\t};\n};\n\ninterface GlimpseMeasureOptions {\n\tpicker: BeadPicker;\n\tresetSignatureForDoubtfulOnly?: boolean;\n}\n\nconst glimpseMeasure = async (measure: SpartitoMeasure, { picker, resetSignatureForDoubtfulOnly }: GlimpseMeasureOptions): Promise => {\n\tconst clusters = measure.createClusters();\n\tconst eventMap = measure.eventMap;\n\n\tfor (const cluster of clusters) {\n\t\tif (!resetSignatureForDoubtfulOnly || measure.doubtfulTimesig) cluster.signatureDuration = 0; // re-estimate measure duration\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\t\tawait picker.predictCluster(cluster, 1);\n\n\t\tcluster.elements\n\t\t\t.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type))\n\t\t\t.forEach((elem) => {\n\t\t\t\tconst event = eventMap[elem.index!];\n\t\t\t\tevent.predisposition = elem.predisposition!;\n\t\t\t});\n\t}\n\n\tmeasure.estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n};\n\nconst estimateMeasure = async (measure: SpartitoMeasure, picker: BeadPicker): Promise =>\n\tglimpseMeasure(measure, { picker, resetSignatureForDoubtfulOnly: true });\n\nexport { BeadPicker, solveCluster, solveMeasure, estimateMeasure, glimpseMeasure };\n","import { EventTerm } from './term';\nimport type { SpartitoMeasure } from './spartitoMeasure';\n\ninterface EventRectification {\n\tid: number;\n\tdivision?: number;\n\tdots?: number;\n}\n\n// Here suppose sum of pvals equal to 1.\nconst multinomial_1 = (pvals: number[]): number => {\n\tconst n = Math.random();\n\n\tlet s = 0;\n\tfor (let i = 0; i < pvals.length; ++i) {\n\t\ts += pvals[i];\n\t\tif (s > n) return i;\n\t}\n\n\treturn pvals.length - 1;\n};\n\nconst looseVector = (ns: number[], factor = 0.9): number[] => {\n\tconst logits = ns.map((n) => Math.log(n) * factor);\n\tconst n2 = logits.map(Math.exp);\n\n\tconst sum = n2.reduce((sum, x) => sum + x, 0);\n\n\treturn n2.map((x) => x / sum);\n};\n\nconst looseEvent = (event: EventTerm): EventTerm => {\n\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return event;\n\n\tconst divisionVector = event.predisposition?.divisionVector ? looseVector(event.predisposition.divisionVector) : null;\n\tconst dotsVector = event.predisposition?.dotsVector ? looseVector(event.predisposition.dotsVector) : null;\n\n\treturn new EventTerm({\n\t\t...event,\n\t\tpredisposition: {\n\t\t\t...event.predisposition,\n\t\t\tdivisionVector,\n\t\t\tdotsVector,\n\t\t},\n\t});\n};\n\nclass MeasureRectification {\n\tevents: EventRectification[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\ttoString(): string {\n\t\treturn this.events\n\t\t\t.map((event) => {\n\t\t\t\tif (!event) return '';\n\n\t\t\t\tconst { division = '', dots = '' } = event;\n\t\t\t\treturn `${division}|${dots}`;\n\t\t\t})\n\t\t\t.join(',');\n\t}\n\n\tstatic default(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tconst division = event.predisposition.divisionVector ? event.division : undefined;\n\t\t\t\tconst dots = event.predisposition.dotsVector ? event.dots : undefined;\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n\n\tstatic roll(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tlet division = undefined;\n\t\t\t\tlet dots = undefined;\n\n\t\t\t\tif (event.predisposition.divisionVector) division = multinomial_1(event.predisposition.divisionVector);\n\n\t\t\t\tif (event.predisposition.dotsVector) dots = multinomial_1(event.predisposition.dotsVector);\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n}\n\nconst genMeasureRectifications = function* (measure: SpartitoMeasure): Generator {\n\tconst keys = new Set();\n\n\tconst origin = MeasureRectification.default(measure.events);\n\tkeys.add(origin.toString());\n\n\tyield origin;\n\n\tlet stale = 0;\n\tlet events = measure.events;\n\n\twhile (stale < 100) {\n\t\tif (stale && stale % 10 === 0) events = events.map(looseEvent);\n\n\t\tconst rectification = MeasureRectification.roll(events);\n\t\tconst key = rectification.toString();\n\n\t\tif (keys.has(key)) {\n\t\t\t++stale;\n\t\t\tcontinue;\n\t\t}\n\n\t\tstale = 0;\n\n\t\tkeys.add(key);\n\t\tyield rectification;\n\t}\n};\n\nexport { MeasureRectification, genMeasureRectifications };\n","import { WeakLRUCache } from 'weak-lru-cache';\n\nimport { RegulationSolution, SpartitoMeasure } from '../../src/starry';\n\nconst lruCache = new WeakLRUCache();\n\ninterface SolutionStore {\n\tget: (key: string) => Promise;\n\tset: (key: string, val: RegulationSolution) => Promise;\n\tbatchGet: (keys: string[]) => Promise;\n}\n\n// 默认store\nconst DefaultSolutionStore: SolutionStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as RegulationSolution;\n\t},\n\tasync set(key: string, val: RegulationSolution) {\n\t\tlruCache.setValue(key, val);\n\t},\n\tasync batchGet(keys: string[]) {\n\t\treturn keys.map((key) => lruCache.getValue(key) as RegulationSolution);\n\t},\n};\n\nconst enum MeasureStatus {\n\tDiscard = -1,\n\tSolved = 0,\n\tIssue = 1,\n\tFatal = 2,\n}\n\ninterface IssueMeasure {\n\tscoreId: string;\n\tmeasureIndex: number;\n\tmeasure: SpartitoMeasure;\n\tstatus: MeasureStatus;\n}\n\ntype SaveIssueMeasure = (data: Omit) => void;\n\nexport { SolutionStore, DefaultSolutionStore, MeasureStatus, IssueMeasure, SaveIssueMeasure };\n","import * as starry from '../../src/starry';\nimport { Logger } from './ZeroClient';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure, MeasureStatus } from './store';\n\ninterface BeadRegulationCounting {\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface RegulationBeadStat {\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tmeasures: BeadRegulationCounting;\n\tqualityScore: number;\n}\n\ninterface RegulationBeadSummary {\n\tscoreN: number;\n\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tcostPerMeasure: number | null; // in milliseconds\n\tcostPerTime: number | null; // in milliseconds\n\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface ProgressInfo {\n\tpass: number;\n\tremaining: number;\n\ttotal: number;\n}\n\ninterface RegulateBeadOption {\n\tlogger?: Logger;\n\tpickers: starry.BeadPicker[];\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tfreshOnly?: boolean;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n\tonProgress?: (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => void;\n\tonPassStart?: (pass: number, conditionName: string, pendingCount: number) => void;\n}\n\ninterface MeasureReord {\n\torigin: starry.SpartitoMeasure;\n\tcurrent: starry.SpartitoMeasure;\n\tevaluation?: starry.MeasureEvaluation;\n\tbaseQuality: number;\n\tpicker: starry.BeadPicker;\n}\n\ninterface BeadSolverOptions {\n\tstopLoss: number;\n\tquotaMax: number;\n\tquotaFactor: number;\n\tptFactor: number;\n}\n\nenum PendingCondition {\n\tErrorOnly,\n\tNotFine,\n\tImperfect,\n}\n\nconst isPending = (evaluation: starry.MeasureEvaluation, condition: PendingCondition) => {\n\tswitch (condition) {\n\t\tcase PendingCondition.ErrorOnly:\n\t\t\treturn evaluation.error;\n\n\t\tcase PendingCondition.Imperfect:\n\t\t\treturn !evaluation.perfect;\n\t}\n\n\treturn !evaluation.fine;\n};\n\ntype OnUpdate = (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean) => void;\n\nconst solveMeasureRecords = async (\n\trecords: MeasureReord[],\n\tonUpdate: OnUpdate,\n\tstdout: NodeJS.WritableStream | null,\n\toptions: Partial,\n\tpendingCondition: PendingCondition = PendingCondition.NotFine,\n\tpass: number = 0,\n\tonProgress?: RegulateBeadOption['onProgress']\n): Promise => {\n\tconst pendingRecords = records.filter(({ evaluation }) => !evaluation || isPending(evaluation, pendingCondition));\n\tstdout?.write('.'.repeat(pendingRecords.length));\n\tstdout?.write('\\b'.repeat(pendingRecords.length));\n\n\tconst total = pendingRecords.length;\n\tlet done = 0;\n\n\tfor (const record of pendingRecords) {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tconst solution = await starry.beadSolver.solveMeasure(measure, { picker: record.picker, ...options });\n\t\tmeasure.applySolution(solution);\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better =\n\t\t\t!record.evaluation ||\n\t\t\tevaluation.fine > record.evaluation.fine ||\n\t\t\t(evaluation.qualityScore > record.evaluation.qualityScore && evaluation.fine === record.evaluation.fine);\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\t\t}\n\n\t\tonUpdate(record.current, evaluation, better);\n\n\t\tdone++;\n\t\tonProgress?.(record.current, evaluation, better, { pass, remaining: total - done, total });\n\t}\n\n\tif (pendingRecords.length) stdout?.write('\\n');\n\n\treturn pendingRecords.length;\n};\n\nconst regulateWithBeadSolver = async (\n\tscore: starry.Score,\n\t{ logger, pickers, solutionStore = DefaultSolutionStore, ignoreCache, freshOnly, onSaveIssueMeasure, onProgress, onPassStart }: RegulateBeadOption\n): Promise => {\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\tlogger?.info(`[regulateWithBeadSolver] begin, measure total: ${spartito.measures.length}.`, ignoreCache ? 'ignoreCache' : '', freshOnly ? 'freshOnly' : '');\n\n\tconst records = spartito.measures\n\t\t.filter((measure) => measure.events?.length && !measure.patched)\n\t\t.map(\n\t\t\t(measure) =>\n\t\t\t\t({\n\t\t\t\t\torigin: measure.deepCopy(),\n\t\t\t\t\tcurrent: measure,\n\t\t\t\t\tevaluation: undefined,\n\t\t\t\t\tbaseQuality: 0,\n\t\t\t\t} as MeasureReord)\n\t\t);\n\n\t// rectify time signature\n\tfor (const measure of spartito.measures.filter((measure) => measure.events?.length)) {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > measure.events.length + 1);\n\t\tif (picker) await starry.beadSolver.estimateMeasure(measure, picker);\n\t}\n\tspartito.rectifyTimeSignatures(logger as any);\n\n\t// zero pickers' cost\n\tpickers.forEach((picker) => (picker.cost = 0));\n\n\tconst counting = {\n\t\tcached: 0,\n\t\tsimple: 0,\n\t\tcomputed: 0,\n\t\ttryTimes: 0,\n\t\tsolved: 0,\n\t\tissue: 0,\n\t\tfatal: 0,\n\t};\n\n\tlogger?.info(`[regulateWithBeadSolver] measures estimation finished.`);\n\n\t// apply solutions\n\tif (solutionStore && !ignoreCache)\n\t\tfor (const record of records) {\n\t\t\tconst solution = await solutionStore.get(record.origin.regulationHash0);\n\t\t\tif (solution) {\n\t\t\t\trecord.current.applySolution(solution);\n\t\t\t\t++counting.cached;\n\n\t\t\t\trecord.evaluation = starry.evaluateMeasure(record.current);\n\t\t\t\trecord.baseQuality = record.evaluation.qualityScore;\n\t\t\t}\n\t\t}\n\n\tlogger?.info('[regulateWithBeadSolver]', `${counting.cached}/${records.length}`, 'solutions loaded.');\n\n\tconst stdout = logger ? null : process.stdout;\n\tif (counting.cached) stdout?.write(`${counting.cached}c`);\n\n\trecords.forEach((record) => {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > record.current.events.length + 1);\n\t\tif (!picker) {\n\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] size out of range:`, record.current.events.length);\n\t\t} else record.picker = picker;\n\t});\n\n\tconst pendingRecords = records.filter((record) => record.picker && (!record.evaluation || (!record.evaluation.fine && !freshOnly))) as (MeasureReord & {\n\t\tevaluation: starry.MeasureEvaluation;\n\t})[];\n\n\t// solve by simple policy\n\tpendingRecords.forEach((record) => {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tmeasure.regulate({ policy: 'simple' });\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better = !record.evaluation || evaluation.qualityScore > record.evaluation.qualityScore;\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\n\t\t\tif (evaluation.perfect) {\n\t\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] regulated by simple policy.`);\n\t\t\t\t++counting.simple;\n\t\t\t}\n\t\t}\n\t});\n\tcounting.computed = pendingRecords.length - counting.simple;\n\n\tif (counting.simple) stdout?.write(`${counting.simple}s`);\n\n\tconst onUpdate = (measure, evaluation, better) => {\n\t\tlogger?.info(\n\t\t\t`[regulateWithBeadSolver] measure[${measure.measureIndex}/${spartito.measures.length}] regulated${\n\t\t\t\tbetter ? '+' : '-'\n\t\t\t}: ${evaluation.qualityScore.toFixed(3)}, ${evaluation.fine ? 'solved' : evaluation.error ? 'error' : 'issue'}, ${measure.regulationHash}`\n\t\t);\n\n\t\tstdout?.write(`\\x1b[${evaluation.fine ? '32' : evaluation.error ? '31' : '33'}m${better ? '+' : '-'}\\x1b[0m`);\n\t};\n\n\t// Global progress: total = all measures, remaining = non-fine measures across all passes\n\tconst totalMeasures = spartito.measures.length;\n\tconst computeRemaining = () => pendingRecords.filter((r) => !r.evaluation?.fine).length;\n\tconst wrappedOnProgress = onProgress\n\t\t? (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => {\n\t\t\t\tonProgress(measure, evaluation, better, { pass: progress.pass, remaining: computeRemaining(), total: totalMeasures });\n\t\t }\n\t\t: undefined;\n\n\tonPassStart?.(1, 'Imperfect', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.05, quotaMax: 200, quotaFactor: 3, ptFactor: 1 },\n\t\tPendingCondition.Imperfect,\n\t\t1,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(2, 'NotFine', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 20, ptFactor: 1.6 },\n\t\tPendingCondition.NotFine,\n\t\t2,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(3, 'ErrorOnly', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 40, ptFactor: 3 },\n\t\tPendingCondition.ErrorOnly,\n\t\t3,\n\t\twrappedOnProgress\n\t);\n\n\tpendingRecords.forEach(({ evaluation, baseQuality, current, origin }) => {\n\t\tif (evaluation.fine) ++counting.solved;\n\t\telse if (evaluation.error) ++counting.fatal;\n\t\telse ++counting.issue;\n\n\t\tif (evaluation.qualityScore > baseQuality || !baseQuality) {\n\t\t\tsolutionStore.set(origin.regulationHash0, { ...current.asSolution(origin), priority: -current?.solutionStat?.loss! });\n\t\t\tif (current.regulationHash !== origin.regulationHash0)\n\t\t\t\tsolutionStore.set(current.regulationHash, { ...current.asSolution(), priority: -current?.solutionStat?.loss! });\n\t\t\t//console.log('better:', current.measureIndex, evaluation.qualityScore, baseQuality);\n\t\t}\n\n\t\tif (!evaluation.fine) {\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: current.measureIndex,\n\t\t\t\tmeasure: new starry.EditableMeasure(current),\n\t\t\t\tstatus: evaluation.error ? MeasureStatus.Fatal : MeasureStatus.Issue,\n\t\t\t});\n\t\t}\n\t});\n\n\tconst t1 = Date.now();\n\tconst pickerCost = pickers.reduce((cost, picker) => cost + picker.cost, 0);\n\n\tconst qualityScore = spartito.qualityScore;\n\tconst totalCost = t1 - t0;\n\n\tlogger?.info('[regulateWithBeadSolver] done in ', totalCost, 'ms, qualityScore:', qualityScore);\n\n\t// zero 'cached' statistics for freshOnly mode\n\tif (freshOnly) counting.cached = 0;\n\n\treturn {\n\t\ttotalCost: t1 - t0,\n\t\tpickerCost,\n\t\tmeasures: counting,\n\t\tqualityScore,\n\t};\n};\n\nconst abstractRegulationBeadStats = (stats: RegulationBeadStat[]): RegulationBeadSummary => {\n\tconst { totalCost, pickerCost, measureN, timeN } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\ttotalCost: sum.totalCost + stat.totalCost,\n\t\t\tpickerCost: sum.pickerCost + stat.pickerCost,\n\t\t\tmeasureN: sum.measureN + stat.measures.computed,\n\t\t\ttimeN: sum.timeN + stat.measures.tryTimes,\n\t\t}),\n\t\t{\n\t\t\ttotalCost: 0,\n\t\t\tpickerCost: 0,\n\t\t\tmeasureN: 0,\n\t\t\ttimeN: 0,\n\t\t}\n\t);\n\n\tconst costPerMeasure = measureN > 0 ? totalCost / measureN : null;\n\tconst costPerTime = timeN > 0 ? totalCost / timeN : null;\n\n\tconst { cached, simple, computed, tryTimes, solved, issue, fatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.measures.cached,\n\t\t\tsimple: sum.simple + stat.measures.simple,\n\t\t\tcomputed: sum.computed + stat.measures.computed,\n\t\t\ttryTimes: sum.tryTimes + stat.measures.tryTimes,\n\t\t\tsolved: sum.solved + stat.measures.solved,\n\t\t\tissue: sum.issue + stat.measures.issue,\n\t\t\tfatal: sum.fatal + stat.measures.fatal,\n\t\t}),\n\t\t{ cached: 0, simple: 0, computed: 0, tryTimes: 0, solved: 0, issue: 0, fatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\ttotalCost,\n\t\tpickerCost,\n\t\tcostPerMeasure,\n\t\tcostPerTime,\n\t\tcached,\n\t\tsimple,\n\t\tcomputed,\n\t\ttryTimes,\n\t\tsolved,\n\t\tissue,\n\t\tfatal,\n\t};\n};\n\nexport { regulateWithBeadSolver, abstractRegulationBeadStats, RegulationBeadStat, ProgressInfo };\n","import * as starry from '../../src/starry';\nimport { PyClients } from './predictors';\nimport { Logger } from './ZeroClient';\nimport { SpartitoMeasure, EditableMeasure, evaluateMeasure } from '../../src/starry';\nimport { EquationPolicy } from '../../src/starry/spartitoMeasure';\nimport { genMeasureRectifications } from '../../src/starry/measureRectification';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure } from './store';\nexport * from './regulationBead';\n\nglobalThis.btoa = globalThis.btoa || ((str) => Buffer.from(str, 'binary').toString('base64'));\n\nconst RECTIFICATION_SEARCH_ITERATIONS = parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS || '30');\nconst BASE_QUOTA_FACTOR = parseInt(process.env.BASE_QUOTA_FACTOR || '40');\nconst RECTIFICATION_QUOTA_FACTOR = parseInt(process.env.RECTIFICATION_QUOTA_FACTOR || '80');\n\nconst MATRIXH_INTERPOLATION_K = 0.9;\n\ninterface SolveMeasureOptions {\n\tsolver?: (...args: any[]) => any;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tlogger?: Logger;\n}\n\nconst computeQuota = (n: number, factor: number, limit: number) =>\n\tMath.min(Math.ceil((n + 1) * factor * Math.log(n + 2)), Math.ceil(limit * Math.min(1, (24 / (n + 1)) ** 2)));\n\ninterface BaseRegulationStat {\n\tcached: number;\n\tcomputed: number;\n\tsolved: number;\n}\n\nasync function solveMeasures(\n\tmeasures: SpartitoMeasure[],\n\t{ solver, quotaMax = 1000, quotaFactor = BASE_QUOTA_FACTOR, solutionStore = DefaultSolutionStore, ignoreCache = false, logger }: SolveMeasureOptions = {}\n): Promise {\n\tlet cached = 0;\n\tlet solved = 0;\n\n\tlogger?.info(`[solveMeasures] begin, measure total: ${measures.length}.`);\n\n\tawait Promise.all(\n\t\tmeasures.map(async (measure) => {\n\t\t\tif (!ignoreCache) {\n\t\t\t\tconst solution = await solutionStore.get(measure.regulationHash);\n\t\t\t\tif (solution) {\n\t\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\t\t++cached;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst quota = computeQuota(measure.events.length, quotaFactor, quotaMax);\n\n\t\t\tawait measure.regulate({\n\t\t\t\tpolicy: 'equations',\n\t\t\t\tquota,\n\t\t\t\tsolver,\n\t\t\t});\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tif (!stat.error) solutionStore.set(measure.regulationHash0, { ...measure.asSolution(), priority: -measure?.solutionStat?.loss! });\n\t\t\tif (stat.perfect) ++solved;\n\n\t\t\tlogger?.info(\n\t\t\t\t`[solveMeasures] measure[${measure.measureIndex}/${measures.length}] regulated: ${stat.perfect ? 'solved' : stat.error ? 'error' : 'issue'}, ${\n\t\t\t\t\tmeasure.regulationHash\n\t\t\t\t}`\n\t\t\t);\n\t\t})\n\t);\n\n\tlogger?.info(`[solveMeasures] ${cached}/${measures.length} cache hit, ${solved} solved.`);\n\n\treturn {\n\t\tcached,\n\t\tcomputed: measures.length - cached,\n\t\tsolved,\n\t};\n}\n\nconst solveMeasuresWithRectifications = async (\n\tmeasure: SpartitoMeasure,\n\t{ solver, quotaMax = 4000 }: SolveMeasureOptions\n): Promise => {\n\tlet best = evaluateMeasure(measure);\n\tlet bestSolution: starry.RegulationSolution = measure.asSolution();\n\tconst quota = computeQuota(measure.events.length, RECTIFICATION_QUOTA_FACTOR, quotaMax);\n\tlet n_rec = 0;\n\n\t// @ts-ignore\n\tfor (const rec of genMeasureRectifications(measure)) {\n\t\tconst solution = await EquationPolicy.regulateMeasureWithRectification(measure, rec, { solver, quota });\n\n\t\tconst testMeasure = measure.deepCopy() as SpartitoMeasure;\n\t\ttestMeasure.applySolution(solution);\n\t\tconst result = evaluateMeasure(testMeasure);\n\n\t\tif (\n\t\t\tresult.perfect > best.perfect ||\n\t\t\tresult.error < best.error ||\n\t\t\t(!result.error && result.perfect >= best.perfect && solution.priority! > bestSolution.priority!)\n\t\t) {\n\t\t\tbest = result;\n\t\t\tbestSolution = solution;\n\t\t}\n\n\t\tif (result.perfect) break;\n\n\t\t++n_rec;\n\t\tif (n_rec > RECTIFICATION_SEARCH_ITERATIONS) break;\n\t}\n\n\treturn bestSolution;\n};\n\ninterface RegulateWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateMaybeWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients?: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateSimpleOption {\n\tsolutionStore: SolutionStore;\n\tsolver: (...args: any[]) => any;\n\tlogger?: Logger;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n}\n\ninterface TopoRegulationStat {\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\nasync function doRegulateWithTopo(\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateWithTopoOption\n): Promise {\n\tpyClients.logger.info(`[RegulateWithTopo] regulate score: ${score.title}, measures: ${score.spartito!.measures.length}`);\n\n\tconst issueMeasures = score.spartito!.measures.filter((measure) => {\n\t\tconst stat = evaluateMeasure(measure);\n\t\treturn !stat.perfect;\n\t});\n\tpyClients.logger.info(`[RegulateWithTopo] basic issues: ${issueMeasures.length}`);\n\n\tif (issueMeasures.length === 0) {\n\t\treturn {\n\t\t\tsolved: 0,\n\t\t\tissue: 0,\n\t\t\tfatal: 0,\n\t\t};\n\t}\n\n\tconst clusters = ([] as starry.EventCluster[]).concat(...issueMeasures.map((measure) => measure.createClusters()));\n\tconst results = await pyClients.predictScoreImages('topo', { clusters });\n\tconsole.assert(results.length === clusters.length, 'prediction number mismatch:', clusters.length, results.length);\n\n\tclusters.forEach((cluster, index) => {\n\t\tconst result = results[index];\n\t\tconsole.assert(result, 'no result for cluster:', cluster.index);\n\n\t\tcluster.assignPrediction(result);\n\t});\n\n\tissueMeasures.forEach((measure) => {\n\t\tconst cs = clusters.filter((c) => c.index === measure.measureIndex);\n\t\tmeasure.applyClusters(cs);\n\n\t\t// intepolate matrixH\n\t\tconst { matrixH } = EquationPolicy.estiamteMeasure(measure);\n\t\tmatrixH.forEach((row, i) =>\n\t\t\trow.forEach((v, j) => {\n\t\t\t\tmeasure.matrixH[i][j] = measure.matrixH[i][j] * MATRIXH_INTERPOLATION_K + v * (1 - MATRIXH_INTERPOLATION_K);\n\t\t\t})\n\t\t);\n\t});\n\n\tconst solvedIndices: number[] = [];\n\tconst errorIndices: number[] = [];\n\n\t// rectification search\n\tawait Promise.all(\n\t\tissueMeasures.map(async (measure) => {\n\t\t\tconst hash = measure.regulationHash0;\n\t\t\tconst solution = await solveMeasuresWithRectifications(measure, { solver });\n\t\t\tif (solution) {\n\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\tsolutionStore.set(hash, solution);\n\t\t\t\tsolutionStore.set(measure.regulationHash, measure.asSolution());\n\t\t\t\tpyClients.logger.info(`[RegulateWithTopo] solutionStore set: ${measure.measureIndex}, ${hash}, ${measure.regulationHash}`);\n\t\t\t}\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\tmeasure: new EditableMeasure(measure),\n\t\t\t\tstatus: stat.error ? 2 : 1,\n\t\t\t});\n\t\t\tif (stat.perfect) solvedIndices.push(measure.measureIndex);\n\t\t\telse if (stat.error) errorIndices.push(measure.measureIndex);\n\t\t})\n\t);\n\n\tconst n_issues = issueMeasures.length - solvedIndices.length - errorIndices.length;\n\tpyClients.logger.info(`[RegulateWithTopo] score: ${score.title}, solved/issue/fatal: ${solvedIndices.length}/${n_issues}/${errorIndices.length}`);\n\tif (solvedIndices.length) pyClients.logger.info(`[RegulateWithTopo] solved measures: ${solvedIndices.join(', ')}`);\n\tif (errorIndices.length) pyClients.logger.info(`[RegulateWithTopo] error measures: ${errorIndices.join(', ')}`);\n\n\treturn {\n\t\tsolved: solvedIndices.length,\n\t\tissue: n_issues,\n\t\tfatal: errorIndices.length,\n\t};\n}\n\ninterface RegulationStat {\n\tbaseCost: number; // in milliseconds\n\ttopoCost: number; // in milliseconds\n\tbaseMeasures: BaseRegulationStat;\n\ttopoMeasures?: TopoRegulationStat;\n\tqualityScore: number;\n}\n\nconst doRegulate = async (\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateMaybeWithTopoOption\n): Promise => {\n\tpyClients?.logger?.info(`[doRegulate] score: ${score.title}`);\n\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\n\tconst baseMeasures = await solveMeasures(spartito.measures, { solver, quotaMax: 1000, solutionStore, logger: pyClients?.logger });\n\n\tconst t1 = Date.now();\n\n\tconst topoMeasures = pyClients ? await doRegulateWithTopo(score, { pyClients, solver, solutionStore, onSaveIssueMeasure }) : undefined;\n\n\tconst t2 = Date.now();\n\n\treturn {\n\t\tbaseCost: t1 - t0,\n\t\ttopoCost: t2 - t1,\n\t\tbaseMeasures,\n\t\ttopoMeasures,\n\t\tqualityScore: spartito.qualityScore,\n\t};\n};\n\nconst doSimpleRegulate = async (\n\tscore: starry.Score,\n\t{ solver, solutionStore = DefaultSolutionStore, logger, quotaMax = 240, quotaFactor = 16 }: RegulateSimpleOption\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\tconst measures = spartito.measures.filter((measure) => !measure.regulated);\n\n\tawait solveMeasures(measures, { solver, quotaMax, quotaFactor, solutionStore, logger });\n\n\tconsole.assert(score.spartito?.regulated, 'doSimpleRegulate: regulation incomplete:', spartito.measures.filter((measure) => !measure.regulated).length);\n};\n\nconst evaluateScoreQuality = async (score: starry.Score, options: RegulateSimpleOption): Promise => {\n\tif (!score.spartito?.regulated) await doSimpleRegulate(score, options);\n\n\treturn score.spartito!.regulated ? score.spartito!.qualityScore : null;\n};\n\ninterface RegulationSummary {\n\tscoreN: number;\n\n\tbaseCostTotal: number; // in milliseconds\n\ttopoCostTotal: number; // in milliseconds\n\tbaseCostPerMeasure: number | null; // in milliseconds\n\ttopoCostPerMeasure: number | null; // in milliseconds\n\n\tcached: number;\n\tbaseComputed: number;\n\tbaseSolved: number;\n\ttopoSolved: number;\n\ttopoIssue: number;\n\ttopoFatal: number;\n}\n\nconst abstractRegulationStats = (stats: RegulationStat[]): RegulationSummary => {\n\tconst { baseCostTotal, topoCostTotal, baseMeasures, topoMeasures } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tbaseCostTotal: sum.baseCostTotal + stat.baseCost,\n\t\t\ttopoCostTotal: sum.topoCostTotal + stat.topoCost,\n\t\t\tbaseMeasures: sum.baseMeasures + stat.baseMeasures.computed,\n\t\t\ttopoMeasures: sum.topoMeasures + (stat.topoMeasures!.solved + stat.topoMeasures!.issue + stat.topoMeasures!.fatal),\n\t\t}),\n\t\t{\n\t\t\tbaseCostTotal: 0,\n\t\t\ttopoCostTotal: 0,\n\t\t\tbaseMeasures: 0,\n\t\t\ttopoMeasures: 0,\n\t\t}\n\t);\n\n\tconst baseCostPerMeasure = baseMeasures > 0 ? baseCostTotal / baseMeasures : null;\n\tconst topoCostPerMeasure = topoMeasures > 0 ? topoCostTotal / topoMeasures : null;\n\n\tconst { cached, baseComputed, baseSolved, topoSolved, topoIssue, topoFatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.baseMeasures.cached,\n\t\t\tbaseComputed: sum.baseComputed + stat.baseMeasures.computed,\n\t\t\tbaseSolved: sum.baseSolved + stat.baseMeasures.solved,\n\t\t\ttopoSolved: sum.topoSolved + stat.topoMeasures!.solved,\n\t\t\ttopoIssue: sum.topoIssue + stat.topoMeasures!.issue,\n\t\t\ttopoFatal: sum.topoFatal + stat.topoMeasures!.fatal,\n\t\t}),\n\t\t{ cached: 0, baseComputed: 0, baseSolved: 0, topoSolved: 0, topoIssue: 0, topoFatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\tbaseCostTotal,\n\t\ttopoCostTotal,\n\t\tbaseCostPerMeasure,\n\t\ttopoCostPerMeasure,\n\t\tcached,\n\t\tbaseComputed,\n\t\tbaseSolved,\n\t\ttopoSolved,\n\t\ttopoIssue,\n\t\ttopoFatal,\n\t};\n};\n\nexport { doRegulate, doSimpleRegulate, evaluateScoreQuality, abstractRegulationStats };\n","import SparkMD5 from 'spark-md5';\n//import JSZip from 'jszip';\nimport * as starry from '../../src/starry';\n//import { encodeFindResource } from '../../src/isomorphic/converter';\nimport sharp, { FormatEnum } from 'sharp';\nimport got from 'got';\n//import { Logger } from './ZeroClient';\nimport type { SolutionStore, SaveIssueMeasure } from './store';\nimport { ScoreJSON } from '../../src/isomorphic/types';\n\nconst SYSTEM_MARGIN = 4;\n\nexport const constructSystem = ({ page, backgroundImage, detection, imageSize, position }) => {\n\tconst systemWidth = (detection.phi2 - detection.phi1) / detection.interval;\n\tconst systemHeight = imageSize.height / detection.interval;\n\n\tconst lastSystem = page.systems[page.systems.length - 1];\n\tconst top = position ? position.y : (lastSystem ? lastSystem.top + lastSystem.height : 0) + SYSTEM_MARGIN;\n\tconst left = position ? position.x : SYSTEM_MARGIN;\n\n\tconst stavesTops = [\n\t\t0,\n\t\t...Array(detection.middleRhos.length - 1)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => (detection.middleRhos[i] + detection.middleRhos[i + 1]) / 2 / detection.interval),\n\t];\n\n\tconst measureBars = [systemWidth];\n\n\tconst staves = stavesTops.map(\n\t\t(top, i) =>\n\t\t\tnew starry.Staff({\n\t\t\t\ttop,\n\t\t\t\theight: (stavesTops[i + 1] || systemHeight) - top,\n\t\t\t\tstaffY: detection.middleRhos[i] / detection.interval - top,\n\t\t\t\tmeasureBars,\n\t\t\t})\n\t);\n\n\t//console.log(\"detection:\", detection, options, stavesTops);\n\n\tconst imagePosition = {\n\t\tx: -detection.phi1 / detection.interval,\n\t\ty: 0,\n\t\twidth: imageSize.width / detection.interval,\n\t\theight: imageSize.height / detection.interval,\n\t};\n\n\treturn new starry.System({\n\t\tstaves,\n\t\tleft,\n\t\ttop,\n\t\twidth: systemWidth,\n\t\tbackgroundImage,\n\t\timagePosition,\n\t\tmeasureBars,\n\t});\n};\n\nexport interface ConvertOption {\n\tformat?: keyof FormatEnum;\n\tquality?: number;\n\tmaxHeight?: number;\n}\n\nconst toBuffer = async (url: string | Buffer): Promise => {\n\tif (typeof url === 'string') {\n\t\tif (/^https?:\\/\\//.test(url)) {\n\t\t\treturn (await got(url, { responseType: 'buffer', decompress: true, https: { rejectUnauthorized: false } })).body;\n\t\t}\n\n\t\tif (/^data:image\\//.test(url)) {\n\t\t\treturn Buffer.from(url.split(',')[1], 'base64');\n\t\t}\n\n\t\treturn Buffer.from(url);\n\t}\n\n\treturn url;\n};\n\n/**\n * 转换图片格式,默认webp、最大高度1080,高度小于1080自动不做尺寸变换\n * @param url\n * @param format\n * @param maxHeight\n * @param quality\n */\nexport async function convertImage(url: string | Buffer, { format = 'webp', maxHeight = 1080, quality = 80 }: ConvertOption = {}) {\n\tlet buf = await toBuffer(url);\n\n\tconst webpBuffer = await new Promise((resolve) => {\n\t\tsharp(buf)\n\t\t\t.resize({\n\t\t\t\twidth: maxHeight,\n\t\t\t\theight: maxHeight,\n\t\t\t\tfit: 'inside',\n\t\t\t\twithoutEnlargement: true,\n\t\t\t})\n\t\t\t.toFormat(format, { quality })\n\t\t\t.toBuffer((err, buf) => {\n\t\t\t\tresolve(buf);\n\t\t\t});\n\t});\n\n\tconst md5 = SparkMD5.ArrayBuffer.hash(webpBuffer);\n\n\treturn {\n\t\tbuffer: webpBuffer,\n\t\tfilename: `${md5}.${format}`,\n\t};\n}\n\n/**\n * 替换scoreJson图片地址\n * @param scoreJson\n * @param onReplaceImage\n */\nexport const replaceScoreJsonImages = (scoreJson: ScoreJSON, onReplaceImage: (src: string) => string = (src) => src) => {\n\tconst json = JSON.parse(JSON.stringify(scoreJson));\n\n\tjson.pages.forEach((page) => {\n\t\tpage?.src && (page.src = onReplaceImage(page?.src));\n\t});\n\n\tjson.lines.forEach((system) => {\n\t\tsystem.lineStaves.forEach((line) => {\n\t\t\tline.imgs.forEach((staff) => {\n\t\t\t\tstaff?.src && (staff.src = onReplaceImage(staff.src));\n\t\t\t});\n\t\t});\n\t});\n\n\treturn json;\n};\n\n/**\n * 获取scoreJson图片资源列表\n * @param scoreJson\n */\nexport const getScoreJsonImages = (scoreJson: ScoreJSON) => {\n\treturn [\n\t\t...scoreJson.pages.map((page) => page?.src),\n\t\t...scoreJson.lines\n\t\t\t.map((system) => system.lineStaves.map((staff) => staff.imgs))\n\t\t\t.flat(2)\n\t\t\t.map((staff) => staff?.src)\n\t\t\t.filter(Boolean),\n\t];\n};\n\ninterface ScorePatchesUpdateOptions {\n\tsolutionStore?: SolutionStore;\n}\n\nexport const updateScorePatches = (score: starry.Score, measures: starry.SpartitoMeasure[], options: ScorePatchesUpdateOptions = {}): void => {\n\tconsole.assert(\n\t\tmeasures.every((measure) => measure.validRegulated),\n\t\t'[updateScorePatches] some measures not valid regulated:',\n\t\tmeasures.filter((measure) => !measure.validRegulated)\n\t);\n\n\tscore.patches = measures.map((measure) => measure.createPatch());\n\n\tif (options?.solutionStore) {\n\t\tscore.assemble();\n\t\tconst spartito = score.makeSpartito();\n\n\t\tmeasures.forEach((measure) => {\n\t\t\toptions.solutionStore!.set(measure.regulationHash, { ...measure.asSolution(), priority: 1 });\n\t\t\tif (measure.regulationHash0 !== measure.regulationHash) {\n\t\t\t\tconst originMeasure = spartito.measures.find((m) => m.measureIndex === measure.measureIndex);\n\t\t\t\toptions.solutionStore!.set(measure.regulationHash0, { ...measure.asSolution(originMeasure), priority: 1 });\n\t\t\t}\n\t\t});\n\t}\n};\n\ninterface EditableMeasuresSaveOptions {\n\tstatus?: number;\n\tsolutionStore?: SolutionStore;\n}\n\nexport const saveEditableMeasures = async (\n\tscore: starry.Score,\n\tmeasureIndices: number[],\n\tsaveMeasure: SaveIssueMeasure,\n\t{ status = 2, solutionStore }: EditableMeasuresSaveOptions = {}\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\n\tconst measures = measureIndices\n\t\t.map((index) => spartito.measures.find((measure) => measure.measureIndex === index))\n\t\t.filter(Boolean) as starry.SpartitoMeasure[];\n\n\tif (solutionStore) {\n\t\tconst solutions = await solutionStore.batchGet(measures.map((measure) => measure.regulationHash0));\n\t\tmeasures.forEach((measure, i) => {\n\t\t\tconst solution = solutions[i];\n\t\t\tif (solution) measure.applySolution(solution);\n\t\t});\n\t}\n\n\tmeasures.forEach((measure) => {\n\t\tsaveMeasure({\n\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\tmeasure: new starry.EditableMeasure(measure),\n\t\t\tstatus,\n\t\t});\n\t});\n};\n","console.info(`%cstarry-omr%c v1.0.0 2026-05-05T13:56:46.565Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../libs/browserComponents';\n\nexport * from '../../libs/predictors';\nexport * from '../../libs/regulation';\nexport * from '../../libs/util';\nexport * as starry from '../../../src/starry';\n"],"names":["eventsModule","events","EventEmitter","Request","pack","unpack","getPortPromise","defaultsDeep","PythonShell","inherits_browserModule","inheritsModule","require$$0","require$$1","util","getPort","pick","sha1","GROUP_N_TO_PITCH","MIDDLE_C","mod7","argmax","Token.TokenClefs","Token.TokenOctshifts","Token.TokenTimesigsC","Token.TokenTimesigsN","EquationSolver.Solver","erf","parser","parse","parseCode","grammar","MIDI","MidiSequence","Notation","MusicNotation","MidiPlayer","Config","Node","Navigator","Matcher","MidiUtils","require$$2","require$$3","require$$4","undefined","require","staffLayout.parseCode","measureLayout.parseCode","WeakLRUCache","starry.beadSolver.solveMeasure","starry.evaluateMeasure","starry.beadSolver.estimateMeasure","starry.EditableMeasure","starry.Staff","starry.System","got","sharp","SparkMD5"],"mappings":"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E,EAAE,CAAC,EAAE;AACd,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACb,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACnJ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACxG,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACnJ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACf,YAAA,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YAC7F,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACb,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EA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"} \ No newline at end of file +{"version":3,"file":"regulator.js","sources":["../../libs/browserComponents.ts","../../../node_modules/events/events.js","../../libs/async-queue.ts","../../libs/ZeroClient.ts","../../libs/PyProcessor.ts","../../../node_modules/util/support/isBuffer.js","../../../node_modules/util/node_modules/inherits/inherits_browser.js","../../../node_modules/util/node_modules/inherits/inherits.js","../../../node_modules/util/util.js","../../libs/predictors.ts","../../../src/starry/aux_/typedJSON.ts","../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/semanticPoint.ts","../../../src/starry/utils.ts","../../../src/starry/logger.ts","../../../src/starry/equationSolver.ts","../../../src/starry/eventTopology.ts","../../../src/starry/patch.ts","../../../src/starry/token.ts","../../../src/starry/term.ts","../../../src/starry/spartitoMeasure.ts","../../../src/starry/editableMeasure.ts","../../../src/starry/interfaces.ts","../../../src/starry/measureEvaluator.ts","../../../src/measureLayout/measureLayout.ts","../../../src/measureLayout/grammar.jison.js","../../../src/measureLayout/parser.ts","../../../src/staffLayout/staffLayout.ts","../../../src/staffLayout/grammar.jison.js","../../../src/staffLayout/parser.ts","../../../src/starry/semanticGraph.ts","../../../src/starry/scoreComponents.ts","../../../src/starry/semanticTopology.ts","../../../src/performer/types.ts","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/stream.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifile.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/streamEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifileEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiSequence.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MusicNotation.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiPlayer.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/config.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/node.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/navigator.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiUtils.js","../../../node_modules/@k-l-lambda/music-widgets/index.js","../../../src/performer/notation.ts","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/sha256.js","../../../src/starry/hashVector.ts","../../../src/starry/spartito.ts","../../../src/starry/staffContext.ts","../../../src/starry/score.ts","../../../src/starry/beadSolver.ts","../../../src/starry/measureRectification.ts","../../libs/store.ts","../../libs/regulationBead.ts","../../libs/regulation.ts","../../libs/util.ts","../src/regulator.ts"],"sourcesContent":["globalThis.btoa = (str) => Buffer.from(str, 'binary').toString('base64');\nglobalThis.atob = (str) => Buffer.from(str, 'base64').toString('binary');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { EventEmitter } from 'events';\n\ninterface DSPromiseOption {\n\ttimeout?: number;\n}\n\nexport function destructPromise(\n\toptions: DSPromiseOption = {}\n): [promise: Promise, resolve: (value: T | PromiseLike) => void, reject: (reason?: any) => void] {\n\tconst { timeout } = options;\n\tlet rs: (value: T | PromiseLike) => void;\n\tlet rj: (reason: any) => void;\n\n\treturn [\n\t\tnew Promise((resolve, reject) => {\n\t\t\trs = resolve;\n\t\t\trj = reject;\n\n\t\t\tif (timeout >= 0) setTimeout(rj, timeout, 'timeout');\n\t\t}),\n\t\trs,\n\t\trj,\n\t];\n}\n\ntype AsyncTask = [fn: (data: any) => Promise, payload: any, resolve: (data: any) => void, reject: (reason: any) => void];\n\nexport class AsyncQueue extends EventEmitter {\n\tprivate working = false;\n\n\ttasks: AsyncTask[];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.working = false;\n\t\tthis.tasks = [];\n\t\tprocess.nextTick(() => {\n\t\t\tthis.emit('idle');\n\t\t});\n\t}\n\n\tprivate async _digest(item: AsyncTask) {\n\t\tthis.working = true;\n\n\t\tconst [taskFn, payload, resolve, reject] = item;\n\t\tawait taskFn(payload).then(resolve, reject);\n\n\t\tif (this.tasks.length > 0) {\n\t\t\tawait this._digest(this.tasks.shift());\n\t\t} else {\n\t\t\tthis.working = false;\n\t\t\tthis.emit('idle');\n\t\t}\n\t}\n\n\t/**\n\t * 添加队列任务\n\t * @param task\n\t * @param options\n\t */\n\taddTask(task: [AsyncTask[0], AsyncTask[1]], { timeout = 600000 }: { timeout?: number } = {}): Promise {\n\t\tconst [promise, resolve, reject] = destructPromise({ timeout });\n\n\t\tif (this.working) {\n\t\t\tthis.tasks.push([...task, resolve, reject]);\n\t\t} else {\n\t\t\tthis._digest([...task, resolve, reject]);\n\t\t}\n\n\t\treturn promise;\n\t}\n}\n","import { pack, unpack } from 'msgpackr';\nimport { Request } from 'zeromq';\nimport { AsyncQueue } from './async-queue';\n\ninterface Response {\n\tcode: number;\n\tmsg: string;\n\tdata?: any;\n}\n\nexport interface Logger {\n\tinfo: (...data: any[]) => void;\n\terror: (...data: any[]) => void;\n}\n\ntype PyArgs = any[];\ntype PyKwargs = Record;\n\nexport default class ZeroClient {\n\tlogger: Logger;\n\tprivate socket: Request;\n\tprivate queue: AsyncQueue = new AsyncQueue();\n\n\tprivate url: string;\n\n\tconstructor(logger: Logger = console) {\n\t\tthis.logger = logger;\n\t}\n\n\tbind(url?: string) {\n\t\turl && (this.url = url);\n\t\tthis.socket = new Request({\n\t\t\tsendTimeout: 15e3,\n\t\t\treceiveTimeout: 300e3,\n\t\t});\n\n\t\tthis.socket.connect(this.url);\n\t}\n\n\tprivate __request(payload) {\n\t\tlet retryTimes = 0;\n\n\t\tconst req = async (data) => {\n\t\t\ttry {\n\t\t\t\tif (this.socket.closed) this.bind();\n\t\t\t\treturn await this.socket.send(pack(data)).then(() => this.socket.receive());\n\t\t\t} catch (err) {\n\t\t\t\tif (retryTimes < 2) {\n\t\t\t\t\tretryTimes++;\n\t\t\t\t\tconsole.log(`请求失败,${err.stack}`);\n\t\t\t\t\tconsole.error(`3s后重试第${retryTimes}次`);\n\t\t\t\t\tthis.socket.close();\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 3000));\n\t\t\t\t\treturn req(data);\n\t\t\t\t} else {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn req(payload);\n\t}\n\n\tasync request(method: string, args: PyArgs | PyKwargs = null, kwargs: PyKwargs = null): Promise {\n\t\tconst [args_, kwargs_] = Array.isArray(args) ? [args, kwargs] : [undefined, args];\n\t\tconst msg: any = { method };\n\t\tif (args_) msg.args = args_;\n\t\tif (kwargs_) msg.kwargs = kwargs_;\n\n\t\treturn this.queue.addTask([\n\t\t\tasync (opt) => {\n\t\t\t\tconst [result] = await this.__request(opt);\n\n\t\t\t\tconst obj = unpack(result) as Response;\n\n\t\t\t\tif (obj.code === 0) {\n\t\t\t\t\treturn obj.data;\n\t\t\t\t} else {\n\t\t\t\t\treturn Promise.reject(obj.msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmsg,\n\t\t]);\n\t}\n}\n","import { getPortPromise } from 'portfinder';\nimport { Options, PythonShell } from 'python-shell';\nimport { defaultsDeep } from 'lodash';\nimport ZeroClient, { Logger } from './ZeroClient';\n\nexport default class PyProcessor extends ZeroClient {\n\tprivate readonly scriptPath: string;\n\tprivate readonly options: Options;\n\tprivate pyShell: PythonShell;\n\n\tprivate retryCount: number = 0;\n\tprivate retryDelay: number = 3000;\n\n\tconstructor(scriptPath: string, options: Options = {}, logger: Logger = console) {\n\t\tsuper(logger);\n\t\tthis.scriptPath = scriptPath;\n\t\tthis.options = options;\n\t}\n\n\tasync bind(port?: string | number) {\n\t\tconst freePort =\n\t\t\tport ||\n\t\t\t(await getPortPromise({\n\t\t\t\tport: 12022,\n\t\t\t\tstopPort: 12122,\n\t\t\t}));\n\n\t\t// \"./streamPredictor.py\", \"--inspect\"\n\t\tconst options = defaultsDeep(\n\t\t\t{\n\t\t\t\targs: [...(this.options.args || []), '-p', `${freePort}`],\n\t\t\t},\n\t\t\tthis.options\n\t\t);\n\n\t\tthis.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`);\n\n\t\tthis.pyShell = new PythonShell(this.scriptPath, options);\n\n\t\tthis.pyShell.stdout.on('data', (data) => this.logger.info(data));\n\n\t\tthis.pyShell.on('pythonError', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`, err));\n\t\tthis.pyShell.on('stderr', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`, err));\n\t\tthis.pyShell.on('error', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} error:`, err));\n\t\tthis.pyShell.on('close', () => {\n\t\t\t// python子进程关闭事件\n\t\t\tif (this.retryCount < 5) {\n\t\t\t\tthis.retryCount++;\n\t\t\t\tthis.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.bind();\n\t\t\t\t}, this.retryDelay);\n\t\t\t}\n\t\t});\n\n\t\tsuper.bind(`tcp://127.0.0.1:${freePort}`);\n\t}\n}\n","module.exports = function isBuffer(arg) {\n return arg instanceof Buffer;\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","try {\n var util = require('util');\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n module.exports = require('./inherits_browser.js');\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","import ZeroClient, { Logger } from './ZeroClient';\nimport * as starry from '../../src/starry';\nimport PyProcessor from './PyProcessor';\nimport { destructPromise } from './async-queue';\nimport { getPort } from 'portfinder';\nimport util from 'util';\nimport { Options } from 'python-shell';\n\nconst getPortPromise = util.promisify(getPort);\n\nexport interface LayoutResult {\n\tdetection: starry.PageLayout;\n\ttheta: number;\n\tinterval: number;\n\tsourceSize?: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n}\n\nexport interface PredictorInterface {\n\tlayout: (streams: Buffer[]) => LayoutResult[];\n\tlayout$reinforce: (streams: Buffer[], baseLayouts: LayoutResult[]) => LayoutResult[];\n\tgauge: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tmask: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tsemantic: (streams: Buffer[]) => any[];\n\ttextLoc: (streams: Buffer[]) => any[];\n\ttextOcr: (params: { buffers: Buffer[]; location: any[] }) => any[];\n\tbrackets: (params: { buffers: Buffer[] }) => any[];\n\ttopo: (params: { clusters: starry.EventCluster[] }) => any[];\n\tgaugeRenderer: (params: [Buffer, Buffer, number]) => { buffer: Buffer; size: { width: number; height: number } };\n\tjianpu: (params: { buffers: Buffer[] }) => any[];\n\t// [source: Buffer, gauge: Buffer, baseY: number]\n}\n\ntype PredictorType = keyof PredictorInterface;\n\nexport type PyClientsConstructOptions = Partial>;\n\nexport class PyClients {\n\tclients = new Map>();\n\n\tconstructor(public readonly options: PyClientsConstructOptions, public readonly logger: Logger = console) {}\n\n\tasync getClient(type: PredictorType) {\n\t\tif (this.clients.has(type)) {\n\t\t\treturn this.clients.get(type);\n\t\t}\n\n\t\tconst [promise, resolve, reject] = destructPromise();\n\n\t\tconst opt = this.options[type];\n\n\t\tif (!opt) {\n\t\t\tthrow new Error(`no config for client \\`${type}\\` found`);\n\t\t}\n\n\t\ttry {\n\t\t\tif (typeof opt === 'string') {\n\t\t\t\tconst client = new ZeroClient();\n\t\t\t\tclient.bind(opt);\n\t\t\t\tresolve(client);\n\t\t\t} else {\n\t\t\t\tconst { scriptPath, ...option } = opt;\n\t\t\t\tconst client = new PyProcessor(scriptPath, option, this.logger);\n\t\t\t\tawait client.bind(`${await getPortPromise()}`);\n\t\t\t\tresolve(client);\n\t\t\t}\n\n\t\t\tthis.logger.info(`PyClients: ${type} started`);\n\t\t} catch (err) {\n\t\t\tthis.logger.error(`PyClients: ${type} start fail: ${JSON.stringify(err)}`);\n\t\t\treject(err);\n\t\t}\n\n\t\tthis.clients.set(type, promise);\n\n\t\treturn promise;\n\t}\n\n\tasync checkHost(type: PredictorType): Promise {\n\t\tconst client = await this.getClient(type);\n\n\t\treturn client.request('checkHost');\n\t}\n\n\tasync warmup() {\n\t\tconst opts = Object.keys(this.options) as PredictorType[];\n\t\tawait Promise.all(opts.map((type) => this.getClient(type)));\n\t}\n\n\t/**\n\t * 模型预测\n\t * @param type layout | mask | gauge | semantic\n\t * @param args\n\t */\n\tasync predictScoreImages(type: T, ...args: Parameters): Promise> {\n\t\tconst clientType = type.split('$')[0] as PredictorType;\n\t\tconst client = await this.getClient(clientType);\n\t\tlet res = null;\n\n\t\tthis.logger.info(`[predictor]: ${type} py start..`);\n\t\tconst start = Date.now();\n\n\t\tswitch (type) {\n\t\t\tcase 'layout':\n\t\t\t\tres = await client.request('predictDetection', args);\n\t\t\t\tbreak;\n\t\t\tcase 'layout$reinforce':\n\t\t\t\tres = await client.request('predictReinforce', args);\n\t\t\t\tbreak;\n\t\t\tcase 'gauge':\n\t\t\tcase 'mask':\n\t\t\t\tres = await client.request('predict', args, { by_buffer: true });\n\t\t\t\tbreak;\n\t\t\tcase 'semantic':\n\t\t\tcase 'textLoc':\n\t\t\t\tres = await client.request('predict', args);\n\t\t\t\tbreak;\n\t\t\tcase 'textOcr':\n\t\t\tcase 'brackets':\n\t\t\tcase 'topo':\n\t\t\tcase 'gaugeRenderer':\n\t\t\tcase 'jianpu':\n\t\t\t\tres = await client.request('predict', ...args);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.logger.error(`[predictor]: no predictor ${type}`);\n\t\t}\n\n\t\tthis.logger.info(`[predictor]: ${type} py duration: ${Date.now() - start}ms`);\n\n\t\treturn res;\n\t}\n}\n","import pick from 'lodash/pick';\n\nconst recoverJSON = (json: string | object, classDict): T => {\n\tif (typeof json === 'object') json = JSON.stringify(json);\n\n\treturn JSON.parse(json, (_, value) => {\n\t\tif (value && typeof value === 'object' && value.__prototype) {\n\t\t\tconst Class = classDict[value.__prototype];\n\t\t\tif (Class) {\n\t\t\t\tconst { __prototype, ...fields } = value;\n\t\t\t\treturn new Class(fields);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t});\n};\n\nconst deepCopy = (o: any, dict: Map = null): any => {\n\tdict = dict || new Map();\n\tif (dict.get(o)) return dict.get(o);\n\n\tif (Array.isArray(o)) {\n\t\tconst result = [];\n\t\tdict.set(o, result);\n\n\t\to.forEach((e) => result.push(deepCopy(e, dict)));\n\n\t\treturn result;\n\t} else if (o && typeof o === 'object') {\n\t\tconst result = {};\n\t\tdict.set(o, result);\n\n\t\tObject.entries(o).forEach(([key, value]) => (result[key] = deepCopy(value, dict)));\n\t\tObject.setPrototypeOf(result, o.__proto__);\n\n\t\treturn result;\n\t}\n\n\treturn o;\n};\n\nclass SimpleClass {\n\tassign(data?: object) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\ttoJSON() {\n\t\tconst cls = this.constructor as any;\n\n\t\tconst serializedKeys = cls.serializedKeys || (cls.blackKeys && Object.keys(this).filter((key) => !cls.blackKeys.includes(key)));\n\t\tconst fields = serializedKeys ? pick(this, serializedKeys) : this;\n\n\t\treturn {\n\t\t\t__prototype: cls.className,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tdeepCopy(): this {\n\t\treturn deepCopy(this);\n\t}\n}\n\nexport { recoverJSON, SimpleClass };\n","var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import { EventFeature, BackgroundImage, EventPredisposition } from './interfaces';\nimport { StemBeam } from './term';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum EventElementType {\n\tPAD,\n\tBOS,\n\tEOS,\n\n\tCHORD,\n\tREST,\n}\n\ninterface EventElement {\n\thref?: string;\n\tdisposed?: boolean;\n\tindex?: number;\n\tvoice?: number;\n\n\ttype: EventElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\tfeature: EventFeature;\n\tpivotX?: number;\n\theadY?: number;\n\n\t// targets\n\ttick?: number;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: StemBeam;\n\tstemDirection?: string;\n\tgrace?: boolean;\n\ttremoloCatcher?: boolean;\n\ttimeWarped?: boolean;\n\tfullMeasure?: boolean; // full measure rest\n\tfake?: boolean;\n\n\torder?: number;\n\n\tpredisposition?: EventPredisposition;\n}\n\ntype Matrix = number[][];\n\ninterface Annotation {\n\tloss: number;\n\tgrant: boolean;\n\tpatched: boolean; // from manually solved measure\n}\n\nclass EventCluster extends SimpleClass {\n\tstatic className = 'EventCluster';\n\tstatic blackKeys = ['id'];\n\n\tid?: string; // for db access\n\tindex?: number;\n\tduration?: number;\n\tstaffY0?: number; // the first staff top + staffY\n\n\tsignatureDuration: number;\n\telements: EventElement[];\n\tmatrixH?: Matrix; // matrix N x N, [next][prev]\n\n\tbackgroundImages?: BackgroundImage[];\n\n\tannotation?: Annotation;\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget regular(): boolean {\n\t\treturn (\n\t\t\tthis.elements.some((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !elem.fake) &&\n\t\t\tthis.elements.every((elem) => [elem.x, elem.y1, elem.y2, elem.tick].every(Number.isFinite)) &&\n\t\t\tthis.elements\n\t\t\t\t.slice(1)\n\t\t\t\t.every(\n\t\t\t\t\t(elem, ei) =>\n\t\t\t\t\t\telem.fake ||\n\t\t\t\t\t\tthis.elements[ei].fake ||\n\t\t\t\t\t\telem.grace ||\n\t\t\t\t\t\tthis.elements[ei].grace ||\n\t\t\t\t\t\telem.fullMeasure ||\n\t\t\t\t\t\tthis.elements[ei].fullMeasure ||\n\t\t\t\t\t\telem.tick <= this.elements[ei].tick ||\n\t\t\t\t\t\telem.x > this.elements[ei].x\n\t\t\t\t)\n\t\t);\n\t}\n\n\tget grant(): boolean {\n\t\treturn this.annotation && this.annotation.grant;\n\t}\n\n\tget feature(): Partial {\n\t\treturn {\n\t\t\tindex: this.index,\n\t\t\telements: this.elements,\n\t\t};\n\t}\n\n\tget estimatedDuration(): number {\n\t\tconst endElem = this.elements.find((elem) => elem.type === EventElementType.EOS);\n\n\t\tconst tick = endElem?.predisposition ? endElem.predisposition?.tick : endElem?.tick;\n\n\t\treturn Number.isFinite(tick) ? tick : this.duration;\n\t}\n\n\tassignPrediction(prediction: any): void {\n\t\tconsole.assert(prediction.index === this.index, 'index mismatch:', prediction.index, this.index);\n\n\t\tthis.matrixH = prediction.matrixH;\n\t\tprediction.elements.forEach((pe) => {\n\t\t\tconst { index, ...predisposition } = pe;\n\t\t\tconst elem = this.elements.find((elem) => elem.index === index);\n\t\t\tconsole.assert(elem, 'element not found:', index);\n\n\t\t\tif (elem) elem.predisposition = predisposition;\n\t\t});\n\t}\n}\n\nclass EventClusterSet extends SimpleClass {\n\tstatic className = 'EventClusterSet';\n\n\tname?: string;\n\n\tclusters: EventCluster[];\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\ttrimIrregular(): number {\n\t\tlet ir = 0;\n\n\t\tthis.clusters = this.clusters.filter((cluster) => {\n\t\t\tconst regular = cluster.regular;\n\t\t\tif (!regular) {\n\t\t\t\tconsole.debug('irregular cluster:', cluster);\n\t\t\t\t++ir;\n\t\t\t}\n\n\t\t\treturn regular;\n\t\t});\n\n\t\tif (ir) console.debug('Irregular clusters trimmed:', `${ir}/${this.clusters.length + ir}`);\n\t\telse console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`);\n\n\t\treturn ir;\n\t}\n}\n\nexport { EventElementType, EventElement, EventCluster, EventClusterSet };\n","import { SimpleClass } from './aux_/typedJSON';\nimport { StaffBasic } from './interfaces';\nimport { ContextedTerm, EventTerm, MarkTerm } from './term';\n\nclass PatchMeasure extends SimpleClass {\n\tstatic className = 'PatchMeasure';\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tbasic: StaffBasic;\n\n\t//points: SemanticPoint[];\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tvoices: number[][]; // [voice, id]\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tObject.assign(this, data);\n\t}\n\n\tget staffN(): number {\n\t\treturn Math.floor(Math.log2(this.staffMask)) + 1;\n\t}\n\n\tget basics(): StaffBasic[] {\n\t\treturn Array(this.staffN).fill(this.basic);\n\t}\n\n\tget duration(): number {\n\t\treturn Math.max(\n\t\t\t0,\n\t\t\t...(this.voices || []).map((ids) => {\n\t\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\n\t\t\t\treturn events.reduce((duration, event) => duration + event.duration, 0);\n\t\t\t})\n\t\t);\n\t}\n}\n\nexport { PatchMeasure };\n","import { TextType } from './interfaces';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\n\nenum TokenType {\n\t// clefs\n\tClefG = 'clefs-G', // clefs.G_change\n\tClefF = 'clefs-F', // clefs.F_change\n\tClefC = 'clefs-C', // clefs.C_change\n\n\t// time signature\n\tTimesigC44 = 'timesig-C44',\n\tTimesigC22 = 'timesig-C22',\n\tTimesigZero = 'zero|timesig0',\n\tTimesigOne = 'one|timesig1',\n\tTimesigTwo = 'two|timesig2',\n\tTimesigThree = 'three|timesig3',\n\tTimesigFour = 'four|timesig4',\n\tTimesigFive = 'five|timesig5',\n\tTimesigSix = 'six|timesig6',\n\tTimesigSeven = 'seven|timesig7',\n\tTimesigEight = 'eight|timesig8',\n\tTimesigNine = 'nine|timesig9',\n\n\t// octave shifts\n\tOctaveShift8va = 'octave-a',\n\tOctaveShift8vb = 'octave-b',\n\tOctaveShift0 = 'octave-0',\n\n\t// numbers\n\tZero = 'zero|n0',\n\tOne = 'one|n1',\n\tTwo = 'two|n2',\n\tThree = 'three|n3',\n\tFour = 'four|n4',\n\tFive = 'five|n5',\n\tSix = 'six|n6',\n\tSeven = 'seven|n7',\n\tEight = 'eight|n8',\n\tNine = 'nine|n9',\n\n\t// accidentals\n\tAccNatural = 'accidentals-natural',\n\tAccSharp = 'accidentals-sharp',\n\tAccDoublesharp = 'accidentals-doublesharp',\n\tAccFlat = 'accidentals-flat',\n\tAccFlatflat = 'accidentals-flatflat',\n\tKeyNatural = 'accidentals-natural|key-natural',\n\tKeySharp = 'accidentals-sharp|key-sharp',\n\tKeyFlat = 'accidentals-flat|key-flat',\n\n\t// noteheads\n\tNoteheadS0 = 'noteheads-s0',\n\tNoteheadS1 = 'noteheads-s1',\n\tNoteheadS2 = 'noteheads-s2',\n\tNoteheadS1stemU = 'noteheads-s1|noteheads-s1-u',\n\tNoteheadS1stemD = 'noteheads-s1|noteheads-s1-d',\n\tNoteheadS2stemU = 'noteheads-s2|noteheads-s2-u',\n\tNoteheadS2stemD = 'noteheads-s2|noteheads-s2-d',\n\n\t// rests\n\tRest0 = 'rests-0o',\n\tRest1 = 'rests-1o',\n\tRest2 = 'rests-2',\n\tRest3 = 'rests-3',\n\tRest4 = 'rests-4',\n\tRest5 = 'rests-5',\n\tRest6 = 'rests-6',\n\tRest0W = 'rests-0',\n\tRestM1 = 'rests-M1',\n\n\t// flags\n\tFlag3 = 'flags-u3', // flags.d3\n\tFlag4 = 'flags-u4', // flags.d4\n\tFlag5 = 'flags-u5', // flags.d5\n\tFlag6 = 'flags-u6', // flags.d6\n\tFlag7 = 'flags-u7', // flags.d7\n\tFlag8 = 'flags-u8', // flags.d8\n\n\t// beams\n\tBeamLeft = '|beam-left',\n\tBeamRight = '|beam-right',\n\tBeamContinue = '|beam-continue',\n\n\t// tremolos\n\tTremoloLeft = '|tremolo-left',\n\tTremoloRight = '|tremolo-right',\n\tTremoloMiddle = '|tremolo-middle',\n\n\t// slur & tie\n\tSlurBegin = '|slur-begin',\n\tSlurEnd = '|slur-end',\n\tTieBegin = '|tie-begin',\n\tTieEnd = '|tie-end',\n\n\t// volta\n\tVoltaLeft = '|volta-left',\n\tVoltaRight = '|volta-right',\n\n\tVoltaAlternativeBegin = '|volta-alter-begin',\n\t//VoltaAlternativeEnd = \"|volta-alter-end\",\n\n\t// vertical bars\n\t//BarMeasure = \"|bar-measure\",\n\tBarTerminal = '|bar-terminal',\n\tBarSegment = '|bar-segment',\n\n\t// dots (duration)\n\tDot = '|dot',\n\tDotDot = '|dotdot',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\t//\n\tWedgeCrescendo = '|wedge-crescendo',\n\tWedgeDiminuendo = '|wedge-diminuendo',\n\tWedgeClose = '|wedge-close',\n\n\tCrescendoBegin = '|wedge-crescendo',\n\tDecrescendoBegin = '|wedge-diminuendo',\n\tCrescendoEnd = '|wedge-close',\n\tDecrescendoEnd = '|wedge-close',\n\n\t// scripts\n\tScriptFermata = 'scripts-ufermata', // scripts.dfermata\n\tScriptShortFermata = 'scripts-ushortfermata', // scripts.dshortfermata\n\tScriptSforzato = 'scripts-sforzato',\n\tScriptStaccato = 'scripts-staccato',\n\tScriptStaccatissimo = 'scripts-ustaccatissimo', // scripts.dstaccatissimo\n\tScriptTurn = 'scripts-turn',\n\tScriptTrill = 'scripts-trill',\n\tScriptSegno = 'scripts-segno',\n\tScriptCoda = 'scripts-coda',\n\tScriptArpeggio = 'scripts-arpeggio',\n\tScriptPrall = 'scripts-prall',\n\tScriptMordent = 'scripts-mordent',\n\tScriptMarcato = 'scripts-umarcato', // scripts.dmarcato\n\tScriptTenuto = 'scripts-tenuto',\n\tScriptPortato = 'scripts-uportato', // scripts.dportato\n\n\t// pedal\n\tPedalStar = 'pedal-star',\n\tPedalPed = 'pedal-Ped',\n\n\tText = '|text',\n\tGraceNotehead = '|grace-notehead',\n}\n\n// alias\nconst tt = TokenType;\n\nexport const TokenTypes = Object.values(TokenType);\nexport const TokenClefs = TokenTypes.filter((t) => /clefs-/.test(t));\nexport const TokenTimesigs = TokenTypes.filter((t) => /timesig/.test(t));\nexport const TokenTimesigsC = TokenTypes.filter((t) => /timesig-/.test(t));\nexport const TokenTimesigsN = TokenTypes.filter((t) => /timesig\\d/.test(t));\nexport const TokenOctshifts = TokenTypes.filter((t) => /octave-/.test(t));\nexport const TokenNumbers = TokenTypes.filter((t) => /n\\d/.test(t));\nexport const TokenAccidentals = TokenTypes.filter((t) => /accidentals-/.test(t));\nexport const TokenNoteheads = TokenTypes.filter((t) => /noteheads-/.test(t));\nexport const TokenBareNoteheads = [tt.NoteheadS0, tt.NoteheadS1, tt.NoteheadS2];\nexport const TokenDirectionalNoteheads = TokenTypes.filter((t) => /noteheads-.+-[ud]/.test(t));\nexport const TokenRests = TokenTypes.filter((t) => /rests-/.test(t));\nexport const TokenFlags = TokenTypes.filter((t) => /flags-/.test(t));\nexport const TokenVolta = TokenTypes.filter((t) => /volta-/.test(t));\nexport const TokenDynamics = TokenTypes.filter((t) => /^[a-z]$/.test(t));\nexport const TokenScripts = TokenTypes.filter((t) => /scripts-/.test(t));\nexport const TokenPedals = TokenTypes.filter((t) => /pedal-/.test(t));\nexport const TokenDots = [tt.Dot, tt.DotDot];\nexport const TokenArcs = [tt.SlurBegin, tt.SlurEnd, tt.TieBegin, tt.TieEnd];\nexport const TokenBeams = TokenTypes.filter((t) => /beam-/.test(t));\nexport const TokenWedges = TokenTypes.filter((t) => /wedge-/.test(t));\n\nexport const TokenAccessories = [\n\t...TokenNumbers,\n\t...TokenDynamics,\n\t...TokenWedges,\n\t...TokenPedals,\n\t...TokenArcs,\n\n\ttt.ScriptFermata,\n\ttt.ScriptShortFermata,\n\ttt.ScriptSforzato,\n\ttt.ScriptStaccato,\n\ttt.ScriptStaccatissimo,\n\ttt.ScriptTurn,\n\ttt.ScriptTrill,\n\ttt.ScriptPrall,\n\ttt.ScriptMordent,\n\ttt.ScriptMarcato,\n\ttt.ScriptTenuto,\n\ttt.ScriptPortato,\n];\n\nexport const TokenDirectionless = [...TokenPedals];\n\nexport const TokenGlyphs = [\n\t...TokenClefs,\n\t...TokenTimesigs,\n\t...TokenNumbers,\n\t...TokenAccidentals,\n\ttt.NoteheadS0,\n\ttt.NoteheadS1,\n\ttt.NoteheadS2,\n\t...TokenRests,\n\t...TokenDynamics,\n\t...TokenScripts,\n\t...TokenPedals,\n\t...TokenDots,\n];\n\nconst TOKEN_Y_ROUND = {} as Record;\nTokenClefs.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenTimesigsN.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenAccidentals.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenNoteheads.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenRests.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenDots.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\n\nconst TOKEN_Y_FIXED = {} as Record;\nTokenTimesigsC.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\nTokenVolta.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\n\nclass Token {\n\tstatic className = 'Token';\n\n\tid: string;\n\ttype: TokenType;\n\tx: number;\n\ty: number;\n\tpivotX?: number;\n\n\tconfidence: number;\n\n\ttip?: { x: number; y: number };\n\n\tvoice?: number; // integer, every bit stand for a voice\n\ttimeWarped?: boolean;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tget typeId(): string {\n\t\treturn this.type.split('|').reverse()[0];\n\t}\n\n\tget isPredicted(): boolean {\n\t\treturn Number.isFinite(this.confidence);\n\t}\n\n\tget isNotehead(): boolean {\n\t\treturn TokenDirectionalNoteheads.includes(this.type) || this.type === TokenType.NoteheadS0;\n\t}\n\n\tget isContexted(): boolean {\n\t\treturn (\n\t\t\tTokenClefs.includes(this.type) || TokenTimesigs.includes(this.type) || TokenOctshifts.includes(this.type) || TokenAccidentals.includes(this.type)\n\t\t);\n\t}\n\n\tget isAccessory(): boolean {\n\t\treturn TokenNumbers.includes(this.type) || TokenDynamics.includes(this.type) || TokenScripts.includes(this.type) || TokenPedals.includes(this.type);\n\t}\n\n\tget division(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Flag3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Flag4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Flag5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Flag6:\n\t\t\t\treturn 6;\n\n\t\t\tcase tt.Flag7:\n\t\t\t\treturn 7;\n\n\t\t\tcase tt.Flag8:\n\t\t\t\treturn 8;\n\n\t\t\tcase tt.RestM1:\n\t\t\t\treturn -1;\n\n\t\t\tcase tt.Rest0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.Rest1:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.Rest2:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Rest3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Rest4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Rest5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Rest6:\n\t\t\t\treturn 6;\n\n\t\t\t// TODO:\n\t\t\t//case tt.Rest0W:\n\t\t\t//\treturn 0;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget dots(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.Dot:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.DotDot:\n\t\t\t\treturn 2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget direction(): 'u' | 'd' | null {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn 'u';\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 'd';\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget width(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS2;\n\t\t}\n\t}\n\n\tget left(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x - this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x - this.width;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget right(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x + this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x + this.width;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget voiceIndices(): number[] {\n\t\tif (!this.voice || this.voice < 0) return [];\n\n\t\treturn Array(Math.floor(Math.log2(this.voice)) + 1)\n\t\t\t.fill(null)\n\t\t\t.reduce((indices, _, i) => (this.voice & (1 << i) ? [i + 1, ...indices] : indices), []);\n\t}\n}\n\nclass TextToken extends Token {\n\ttextType: TextType;\n\ttext: string;\n\ttextFeature?: Record;\n\twidth_: number;\n\tfontSize: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t\tObject.assign(this, data);\n\t}\n\n\tget width(): number {\n\t\treturn this.width_;\n\t}\n\n\tset width(value: number) {\n\t\tthis.width_ = value;\n\t}\n}\n\nexport { TokenType, Token, TextToken, TOKEN_Y_ROUND, TOKEN_Y_FIXED };\n","import { Fraction, Pitch, EventFeature, EventPredisposition } from './interfaces';\nimport { gcd, reducedFraction } from './utils';\nimport { TokenType } from './token';\nimport * as Token from './token';\nimport { SimpleClass } from './aux_/typedJSON';\n\nconst WHOLE_DURATION = 128 * 3 * 5;\nconst WHOLE_EXP2 = WHOLE_DURATION / 15;\n\nenum AccessoryDirection {\n\tUp = '^',\n\tDown = '_',\n\tMiddle = '-',\n}\n\nenum GraceType {\n\tGrace = 'grace',\n\tAfterGrace = 'afterGrace',\n\tAcciaccatura = 'acciaccatura',\n\tAppoggiatura = 'appoggiatura',\n\tSlashedGrace = 'slashedGrace',\n}\n\nenum StemBeam {\n\tOpen = 'Open',\n\tClose = 'Close',\n\tContinue = 'Continue',\n}\n\nenum TremoloLink {\n\tPitcher = 'Pitcher',\n\tCatcher = 'Catcher',\n\tPierced = 'Pierced',\n}\n\nenum GlissandoStyle {\n\tNormal = 'normal',\n\tDashedLine = 'dashed-line',\n\tDottedLine = 'dotted-line',\n\tZigzag = 'zigzag',\n\tTrill = 'trill',\n}\n\nenum ArpeggioStyle {\n\tNormal = 'Normal',\n\tBracket = 'Bracket',\n\tParenthesis = 'Parenthesis',\n\tParenthesisDashed = 'ParenthesisDashed',\n\tArrowDown = 'ArrowDown',\n}\n\ninterface Accessory {\n\tdirection?: AccessoryDirection;\n\tparenthesized?: boolean;\n\ttype: TokenType;\n\tid?: string;\n\tx: number;\n}\n\ninterface TermPitch extends Pitch {\n\ttying?: boolean;\n\ttied?: boolean;\n\tparenthesized?: boolean;\n\toctaveShift?: number;\n}\n\nclass Term extends SimpleClass {\n\tx: number;\n\tstaff?: number;\n}\n\ntype RestType = 'r' | 'R' | 's' | null;\n\ninterface DurationalTerm {\n\tdivision: number;\n\tdots: number;\n\tmultiplier?: Fraction;\n}\n\nconst SCALE_NAMES = 'CDEFGAB';\n\nclass EventTerm extends Term implements DurationalTerm {\n\tstatic className = 'EventTerm';\n\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\n\tsystem: number;\n\troundX: number; // for tick map, scheduler\n\tintX: number; // for measure hash\n\tintY: number;\n\tys: number[]; // order by ascending pitch, low (greater Y) to high (less Y)\n\tpitches?: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\taccessories: Accessory[];\n\tmultiplier: Fraction;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\trepetitionChord: boolean;\n\tgrace?: GraceType;\n\tbeam?: StemBeam;\n\ttimeWarp?: Fraction;\n\tparenthesized?: boolean;\n\ttremolo?: number; // like division, 'number of beams' + 2\n\ttremoloLink?: TremoloLink;\n\tglissando?: boolean;\n\tglissandoStyle?: GlissandoStyle;\n\tarpeggioStyle?: ArpeggioStyle;\n\ttip?: { x: number; y: number };\n\n\ttick: number;\n\n\t// for topology\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature: EventFeature;\n\tpredisposition: EventPredisposition;\n\n\tgraceIds?: number[];\n\tcatcherId?: number; // tremolo catcher event ID for tremolo pitcher event\n\n\tnoteIds?: string[]; // order by upwards\n\n\tstatic space({ tick, duration }: { tick: number; duration: number }): EventTerm {\n\t\tconst term = new EventTerm({\n\t\t\trest: 's',\n\t\t\ttick,\n\t\t\taccessories: [],\n\t\t});\n\t\tterm.duration = Math.round(duration);\n\n\t\treturn term;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tObject.assign(this, data);\n\n\t\tif (Number.isFinite(data.left) && Number.isFinite(data.right)) this.x = (this.left + this.right) / 2;\n\t\tif (!Number.isFinite(this.pivotX)) this.pivotX = this.x;\n\t\t//console.assert(Number.isFinite(this.x), \"EventTerm: invalid x,\", data);\n\t}\n\n\tget alignedTick(): number {\n\t\treturn this.grace ? this.tick + this.duration : this.tick;\n\t}\n\n\tget mainDuration(): number {\n\t\treturn WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t}\n\n\tget duration(): number {\n\t\tlet value = this.mainDuration;\n\t\tif (this.multiplier) value *= this.multiplier.numerator / this.multiplier.denominator;\n\t\tif (this.timeWarp) value *= this.timeWarp.numerator / this.timeWarp.denominator;\n\n\t\treturn this.grace ? value / 8 : value;\n\t}\n\n\tset duration(value: number) {\n\t\tconsole.assert(Number.isFinite(value), 'invalid duration value:', value);\n\n\t\tconst divider = gcd(value, WHOLE_EXP2);\n\t\tconst division = Math.log2(WHOLE_EXP2 / divider);\n\t\tconst multiplier = reducedFraction(value * 2 ** division, WHOLE_DURATION);\n\n\t\tthis.division = division;\n\t\tthis.dots = 0;\n\n\t\tif (multiplier.numerator !== multiplier.denominator) this.multiplier = multiplier;\n\t\telse this.multiplier = undefined;\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget times(): string {\n\t\tif (!this.timeWarp) return null;\n\n\t\treturn `${this.timeWarp.numerator}/${this.timeWarp.denominator}`;\n\t}\n\n\tget fullMeasureRest(): boolean {\n\t\treturn this.rest === 'R';\n\t}\n\n\tget tipX(): number {\n\t\treturn this.tip ? this.tip.x : this.x;\n\t}\n\n\tget tipY(): number {\n\t\treturn this.tip ? this.tip.y : this.ys ? this.ys[0] : 0;\n\t}\n\n\tget tremoloCatcher(): boolean {\n\t\treturn this.tremoloLink === TremoloLink.Catcher;\n\t}\n\n\tget scaleChord(): string {\n\t\treturn this.pitches.map((pitch) => SCALE_NAMES[(pitch.note + 700) % 7]).join('');\n\t}\n\n\tget zeroHolder(): boolean {\n\t\treturn !!this.grace || this.tremoloCatcher;\n\t}\n}\n\nenum ContextType {\n\tClef,\n\tKeyAcc,\n\tAcc,\n\tOctaveShift,\n\tTimeSignatureC,\n\tTimeSignatureN,\n}\n\nclass ContextedTerm extends Term {\n\tstatic className = 'ContextedTerm';\n\n\ty: number;\n\ttokenType: TokenType;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget type(): ContextType {\n\t\tif (Token.TokenClefs.includes(this.tokenType)) return ContextType.Clef;\n\t\tif (/\\|key-/.test(this.tokenType)) return ContextType.KeyAcc;\n\t\tif (/accidentals-/.test(this.tokenType)) return ContextType.Acc;\n\t\tif (Token.TokenOctshifts.includes(this.tokenType)) return ContextType.OctaveShift;\n\t\tif (Token.TokenTimesigsC.includes(this.tokenType)) return ContextType.TimeSignatureC;\n\t\tif (Token.TokenTimesigsN.includes(this.tokenType)) return ContextType.TimeSignatureN;\n\n\t\treturn null;\n\t}\n\n\tget staffLevel(): boolean {\n\t\treturn [ContextType.OctaveShift, ContextType.Clef, ContextType.KeyAcc].includes(this.type);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.1;\n\t}\n\n\tget clef(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.ClefG:\n\t\t\t\treturn -this.y - 2;\n\n\t\t\tcase TokenType.ClefF:\n\t\t\t\treturn -this.y + 2;\n\n\t\t\tcase TokenType.ClefC:\n\t\t\t\treturn -this.y;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget alter() {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.AccNatural:\n\t\t\tcase TokenType.KeyNatural:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.AccSharp:\n\t\t\tcase TokenType.KeySharp:\n\t\t\t\treturn 1;\n\n\t\t\tcase TokenType.AccFlat:\n\t\t\tcase TokenType.KeyFlat:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.AccDoublesharp:\n\t\t\t\treturn 2;\n\n\t\t\tcase TokenType.AccFlatflat:\n\t\t\t\treturn -2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget octaveShift(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.OctaveShift8va:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.OctaveShift0:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.OctaveShift8vb:\n\t\t\t\treturn 1;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget number(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.TimesigZero:\n\t\t\t\treturn 0;\n\t\t\tcase TokenType.TimesigOne:\n\t\t\t\treturn 1;\n\t\t\tcase TokenType.TimesigTwo:\n\t\t\t\treturn 2;\n\t\t\tcase TokenType.TimesigThree:\n\t\t\t\treturn 3;\n\t\t\tcase TokenType.TimesigFour:\n\t\t\t\treturn 4;\n\t\t\tcase TokenType.TimesigFive:\n\t\t\t\treturn 5;\n\t\t\tcase TokenType.TimesigSix:\n\t\t\t\treturn 6;\n\t\t\tcase TokenType.TimesigSeven:\n\t\t\t\treturn 7;\n\t\t\tcase TokenType.TimesigEight:\n\t\t\t\treturn 8;\n\t\t\tcase TokenType.TimesigNine:\n\t\t\t\treturn 9;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\n//class BreakTerm extends Term {\n//};\n\nclass MarkTerm extends Term {\n\tstatic className = 'MarkTerm';\n\n\ttick: number;\n\n\tget prior(): number {\n\t\treturn this.tick + 0.01;\n\t}\n}\n\nconst MUSIC_NOTES = Array(7)\n\t.fill(0)\n\t.map((_, i) => String.fromCodePoint(0x1d15d + i));\n\nclass TempoTerm extends MarkTerm {\n\tstatic className = 'TempoTerm';\n\n\tduration: string;\n\tbeats: string;\n\n\tstatic fromNumeralText(text: string): TempoTerm {\n\t\tif (/.+=.*\\d+/.test(text)) {\n\t\t\tconst [symbol, value] = text.split('=');\n\t\t\tlet division = MUSIC_NOTES.findIndex((n) => symbol.includes(n));\n\t\t\tdivision = division >= 0 ? division : 2;\n\t\t\tlet duration = (2 ** division).toString();\n\t\t\tif (symbol.includes('.')) duration += '.';\n\n\t\t\treturn new TempoTerm({ tick: 0, duration, beats: value });\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.01;\n\t}\n\n\t// a whole note equal to 1920\n\tget durationMagnitude(): number {\n\t\tconst [_, den, dot] = this.duration.match(/^(\\d+)(\\.)?$/);\n\t\tconst magnitude = (WHOLE_DURATION / Number(den)) * (dot ? 1.5 : 1);\n\n\t\treturn magnitude;\n\t}\n\n\t// beats per minute, suppose 1 beat = 480 ticks\n\tget bpm(): number {\n\t\tconst [number] = this.beats.match(/\\d+/) || [90];\n\t\tconst beats = Number(number);\n\n\t\treturn (beats * this.durationMagnitude * 4) / WHOLE_DURATION;\n\t}\n\n\tisValid(range = [10, 400]): boolean {\n\t\tconst bpm = this.bpm;\n\n\t\treturn Number.isFinite(this.bpm) && bpm >= range[0] && bpm < range[1];\n\t}\n}\n\nclass GlyphTerm extends MarkTerm {\n\tstatic className = 'GlyphTerm';\n\n\tglyph: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass TextTerm extends MarkTerm {\n\tstatic className = 'TextTerm';\n\n\tdirection?: AccessoryDirection;\n\ttext: string;\n\tbold: boolean;\n\titalic: boolean;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass LyricTerm extends MarkTerm {\n\tstatic className = 'LyricTerm';\n\n\ttext: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass CommandTerm extends MarkTerm {\n\tstatic className = 'CommandTerm';\n\n\tcommand: string;\n\tparameters: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass ChordmodeTerm extends Term implements DurationalTerm {\n\tstatic className = 'ChordmodeTerm';\n\n\tpitch: Pitch;\n\tbasePitch?: Pitch;\n\tmodifier?: string;\n\n\tdivision: number;\n\tdots: number;\n\tmultiplier: Fraction;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget duration(): number {\n\t\tconst value = WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t\tif (this.multiplier) return (value * this.multiplier.numerator) / this.multiplier.denominator;\n\n\t\treturn value;\n\t}\n}\n\nexport {\n\tTerm,\n\tEventTerm,\n\tContextedTerm,\n\t//BreakTerm,\n\tMarkTerm,\n\tTempoTerm,\n\tGlyphTerm,\n\tTextTerm,\n\tLyricTerm,\n\tCommandTerm,\n\tChordmodeTerm,\n\tDurationalTerm,\n\tContextType,\n\tGraceType,\n\tTermPitch,\n\tRestType,\n\tGlissandoStyle,\n\tArpeggioStyle,\n\tAccessory,\n\tAccessoryDirection,\n\tWHOLE_DURATION,\n\tStemBeam,\n\tTremoloLink,\n};\n","import sha1 from 'js-sha1';\nimport erf from 'math-erf';\n\nimport { SimpleClass } from './aux_/typedJSON';\nimport * as EquationSolver from './equationSolver';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport {\n\tBackgroundImage,\n\tEventMeasure,\n\tFraction,\n\tMeasureBarType,\n\tRegulationOptions,\n\tRegulationSolution,\n\tRegulationSolutionEvent,\n\tStaffBasic,\n} from './interfaces';\nimport type { MeasureRectification } from './measureRectification';\nimport { PatchMeasure } from './patch';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\nimport { ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, StemBeam, TremoloLink, WHOLE_DURATION } from './term';\nimport type { GraphMeasure } from './timewiseGraph';\nimport { argmax, frac, fractionMul, roundNumber } from './utils';\n\nnamespace SimplePolicy {\n\tconst constructXMap = (measure: SpartitoMeasure): Map => {\n\t\tconst xMap = new Map();\n\n\t\t// mark full measure rests\n\t\tmeasure.rows.forEach((row) => {\n\t\t\tif (row.events.length === 1) {\n\t\t\t\tconst event = row.events[0];\n\t\t\t\tif (event.rest && event.division === 0) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst x = Math.round(event.pivotX * 10) / 10;\n\t\t\tlet key = 0;\n\t\t\tif (event.fullMeasureRest) key = Math.min(x, ...xMap.keys());\n\t\t\telse {\n\t\t\t\tkey =\n\t\t\t\t\t[...xMap.keys()].find((k) => {\n\t\t\t\t\t\t// check if the event is aligned with the current chord\n\t\t\t\t\t\tconst es = xMap.get(k);\n\t\t\t\t\t\tconst left = Math.min(...es.map((e) => e.left));\n\t\t\t\t\t\tconst right = Math.max(...es.map((e) => e.right));\n\n\t\t\t\t\t\tconst overlaySize = Math.min(right, event.right) - Math.max(left, event.left);\n\n\t\t\t\t\t\treturn overlaySize > NOTEHEAD_WIDTHS.NoteheadS1 * 0.62;\n\t\t\t\t\t}) || x;\n\t\t\t}\n\t\t\tevent.roundX = key;\n\n\t\t\tconst es = xMap.get(key) || [];\n\t\t\txMap.set(key, es);\n\n\t\t\tes.push(event);\n\t\t});\n\n\t\treturn xMap;\n\t};\n\n\texport const computeMeasureTicks = (measure: SpartitoMeasure): void => {\n\t\tconst xMap = constructXMap(measure);\n\n\t\tlet tick = 0;\n\t\tconst ts = new Set([tick]);\n\t\tconst eventGroups = [...xMap.entries()].sort(([x1], [x2]) => x1 - x2); //.map(entry => entry[1]);\n\t\tfor (const [x, events] of eventGroups) {\n\t\t\tvoid x;\n\n\t\t\tevents.forEach((event: EventTerm) => {\n\t\t\t\tif (event.predisposition) {\n\t\t\t\t\tevent.rest = event.rest && event.predisposition.fullMeasure > 0.5 ? 'R' : event.rest;\n\t\t\t\t\tevent.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t\tevent.division = argmax(event.predisposition.divisionVector);\n\t\t\t\t\tevent.dots = argmax(event.predisposition.dotsVector);\n\t\t\t\t\tif (event.predisposition.timeWarped > 0.5) event.timeWarp = frac(2, 3);\n\t\t\t\t}\n\n\t\t\t\tif (event.fullMeasureRest) event.tick = 0;\n\t\t\t\telse {\n\t\t\t\t\tif (event.zeroHolder) tick -= event.duration;\n\n\t\t\t\t\tif (!event.zeroHolder && event.predisposition && Number.isInteger(event.predisposition.tick)) event.tick = event.predisposition.tick;\n\t\t\t\t\telse event.tick = tick;\n\t\t\t\t\tts.add(event.tick + event.duration);\n\t\t\t\t}\n\t\t\t\t//console.log(\"append tick:\", event.tick + event.duration, event);\n\t\t\t});\n\t\t\tts.delete(tick);\n\n\t\t\t//column.xToTick[x] = tick;\n\n\t\t\tif (ts.size) tick = Math.min(...ts);\n\t\t}\n\n\t\tif (Number.isInteger(measure.estimatedDuration)) measure.duration = measure.estimatedDuration;\n\t\telse measure.duration = Math.max(...ts, 0);\n\t};\n\n\texport const computeMeasureVoices = (measure: SpartitoMeasure): void => {\n\t\tmeasure.voices = [];\n\t\tfor (const row of measure.rows) {\n\t\t\tconst events = row.events.filter(\n\t\t\t\t(event) => !event.grace && !event.tremoloCatcher && !event.fullMeasureRest && !(event.predisposition && event.predisposition.fake > 0.5)\n\t\t\t);\n\t\t\tconst eventSet = new Set(events);\n\n\t\t\twhile (eventSet.size) {\n\t\t\t\tlet tick = 0;\n\n\t\t\t\tconst voice = [];\n\t\t\t\tconst pushEvent = (e: EventTerm) => {\n\t\t\t\t\tvoice.push(e.id);\n\t\t\t\t\tif (!e.zeroHolder) tick += e.duration;\n\t\t\t\t\teventSet.delete(e);\n\t\t\t\t};\n\n\t\t\t\tconst e0 = events.find((e) => eventSet.has(e));\n\t\t\t\tif (e0.alignedTick > 0) {\n\t\t\t\t\t//voice.tickMap[tick] = EventTerm.space({ tick, duration: e0.alignedTick });\n\t\t\t\t\ttick = e0.alignedTick;\n\t\t\t\t}\n\t\t\t\tpushEvent(e0);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// TODO: consider slur pair\n\t\t\t\t\tconst e = events.find((e) => eventSet.has(e) && e.alignedTick === tick);\n\t\t\t\t\tif (!e) break;\n\n\t\t\t\t\tpushEvent(e);\n\t\t\t\t}\n\n\t\t\t\t//if (tick < measure.duration)\n\t\t\t\t//\tvoice.tickMap[tick] = EventTerm.space({ tick, duration: staff.duration - tick });\n\n\t\t\t\tmeasure.voices.push(voice);\n\t\t\t}\n\t\t}\n\t};\n}\n\nconst solveGraceEvents = (measure: SpartitoMeasure): void => {\n\tconst graceEvents = measure.events.filter((event) => event.grace /*&& !Number.isFinite(event.tick)*/);\n\tif (!graceEvents.length) return;\n\n\tconst tickMap = measure.tickMap;\n\tconst staffMap = [...tickMap.entries()].reduce((smap, [tick, events]) => {\n\t\tevents.forEach((event) => {\n\t\t\tif (!event.grace) {\n\t\t\t\tsmap[event.staff] = smap[event.staff] || {};\n\n\t\t\t\tconst oldEvent = smap[event.staff][tick];\n\t\t\t\tsmap[event.staff][tick] = !oldEvent || oldEvent.x > event.x ? event : oldEvent;\n\t\t\t}\n\t\t});\n\n\t\treturn smap;\n\t}, {} as { [staff: number]: { [tick: number]: EventTerm } });\n\n\ttype Position = { tick: number; preTick: number; graces: EventTerm[]; event: EventTerm };\n\tconst staffPositions = Object.entries(staffMap).reduce((map, [staff, emap]) => {\n\t\tmap[staff] = Object.entries(emap)\n\t\t\t.map(([t, event]) => ({ event, tick: Number(t), preTick: -240, graces: [] }))\n\t\t\t.sort((p1, p2) => p1.event.x - p2.event.x);\n\t\tmap[staff].push({ tick: measure.duration, event: measure.endEvent, preTick: 0, graces: [] }); // terminal bar\n\n\t\tlet tick = 0;\n\t\tmap[staff].forEach((position) => {\n\t\t\tif (position.tick > tick) {\n\t\t\t\tposition.preTick = tick;\n\t\t\t\ttick = position.tick;\n\t\t\t}\n\t\t});\n\n\t\treturn map;\n\t}, {} as { [staff: number]: Position[] });\n\n\t// append grace events into positions\n\tgraceEvents.forEach((event) => {\n\t\tconst staff = staffPositions[event.staff];\n\t\tif (staff) {\n\t\t\tconst position = staff.find((p) => p.event.x > event.x);\n\t\t\tif (position) position.graces.push(event);\n\t\t\tevent.roundX = event.x;\n\t\t\t//if (position.tick >= measure.duration)\n\t\t\t//\tevent.grace = GraceType.AfterGrace;\n\t\t}\n\t});\n\n\tObject.values(staffPositions).forEach((staff) =>\n\t\tstaff.forEach((position) => {\n\t\t\tif (position.graces.length) {\n\t\t\t\tposition.event.graceIds = position.graces.map((e) => e.id);\n\n\t\t\t\tconst totalDuration = position.graces.reduce((t, e) => t + e.duration, 0);\n\t\t\t\tconst duration = Math.min(totalDuration, position.tick - position.preTick);\n\t\t\t\tconst warp = duration / totalDuration;\n\n\t\t\t\tlet tick = position.tick;\n\t\t\t\t[...position.graces].reverse().forEach((event) => {\n\t\t\t\t\tevent.tick = Math.round(tick - event.duration * warp);\n\t\t\t\t\ttick = event.tick;\n\t\t\t\t});\n\t\t\t}\n\t\t})\n\t);\n};\n\nconst solveTremoloPairs = (measure: SpartitoMeasure): void => {\n\tconst catchers = measure.events.filter((event) => event.tremoloCatcher && !event.grace);\n\tconst pitchers = measure.events.filter((event) => event.tremoloLink === TremoloLink.Pitcher && !event.grace);\n\n\tcatchers.forEach((catcher) => {\n\t\tlet candidates = pitchers.filter((event) => event.division === catcher.division && event.x < catcher.x);\n\t\tif (!candidates.length)\n\t\t\tcandidates = measure.events.filter(\n\t\t\t\t(event) =>\n\t\t\t\t\tNumber.isFinite(event.tick) &&\n\t\t\t\t\t!event.grace &&\n\t\t\t\t\t!event.rest &&\n\t\t\t\t\tevent.division === catcher.division &&\n\t\t\t\t\tevent.dots === catcher.dots &&\n\t\t\t\t\tevent.x < catcher.x\n\t\t\t);\n\t\tcandidates.sort((c1, c2) => c2.x - c1.x);\n\t\tif (candidates.length) {\n\t\t\tconst pitcher = candidates[0];\n\t\t\tpitcher.catcherId = catcher.id;\n\t\t\tconst tremolo = Math.max(pitcher.tremolo || 3, catcher.tremolo || 3);\n\t\t\tpitcher.tremolo = tremolo;\n\t\t\tcatcher.tremolo = tremolo;\n\n\t\t\tif (!catcher.tick) catcher.tick = pitcher.tick + pitcher.duration / 2;\n\n\t\t\tconst pi = pitchers.indexOf(pitcher);\n\t\t\tif (pi >= 0) pitchers.splice(pi, 1);\n\t\t}\n\t});\n};\n\nnamespace EquationPolicy {\n\ttype EventID = number;\n\ttype Time = number;\n\n\tconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\n\tconst CHORDS_SEAM_SIGMA = 0.6;\n\tconst NEIGHBOR_CHORDS_SIGMA = 1.6;\n\tconst Y_DECAY_SIGMA = 16;\n\tconst STAFF_DECAY_FACTOR = 2;\n\tconst STEM_DIRECTION_DECAY = 0.9;\n\tconst ILL_BEAMS_PENALTY = 0.2;\n\n\tconst INVERT_SQRT2 = 0.7071067811865475;\n\n\tconst MATRIX_H_WEIGHT = 3;\n\n\tconst FINE_BEAMS = [\n\t\t[null, null],\n\t\t[null, StemBeam.Open],\n\t\t[StemBeam.Open, StemBeam.Continue],\n\t\t[StemBeam.Open, StemBeam.Close],\n\t\t[StemBeam.Continue, StemBeam.Continue],\n\t\t[StemBeam.Continue, StemBeam.Close],\n\t\t[StemBeam.Close, null],\n\t\t[StemBeam.Close, StemBeam.Open],\n\t].map((bb) => bb.join('-'));\n\n\tinterface Event {\n\t\tid: EventID;\n\t\tstaff: number;\n\t\tx: number;\n\t\ty: number;\n\t\tduration: Time;\n\t\tconfidence: number;\n\t\tshrinkness: number;\n\t}\n\n\texport interface StaffGroup {\n\t\tevents: Event[];\n\t\texpectedDuration: Time;\n\t\tmeasureShrinkness: number;\n\t\tendX: number;\n\t\tmatrixH: Matrix;\n\t\tmatrixV: Matrix;\n\n\t\tids?: EventID[];\n\t}\n\n\tinterface EventResult {\n\t\tid: EventID;\n\t\ttick: Time;\n\t\tendTick: Time;\n\t\ttickGroup: number;\n\t\ttimeWarp?: Fraction;\n\t}\n\n\texport interface StaffGroupSolution {\n\t\tevents: EventResult[];\n\t\tvoices: EventID[][];\n\t\tduration: number;\n\n\t\tloss?: number;\n\t\tcredits?: number;\n\t\ttimes?: number;\n\t}\n\n\texport interface RegulatorOptions extends EquationSolver.SolverOptions {\n\t\tsolver?: (staffGroup: StaffGroup, options: EquationSolver.SolverOptions) => Promise;\n\t}\n\n\tconst solveStaffGroup = (staffGroup: StaffGroup, options: EquationSolver.SolverOptions): StaffGroupSolution => {\n\t\tif (!staffGroup.events.length) {\n\t\t\treturn {\n\t\t\t\tevents: [],\n\t\t\t\tvoices: [],\n\t\t\t\tduration: 0,\n\t\t\t};\n\t\t}\n\n\t\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\t\treturn solver.solve();\n\t};\n\n\texport const estiamteMeasure = (measure: SpartitoMeasure): StaffGroup => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => ({\n\t\t\t\tid: event.id,\n\t\t\t\tstaff: event.staff,\n\t\t\t\tx: event.x,\n\t\t\t\ttickEstimated: event.predisposition && Number.isFinite(event.predisposition.tick) ? event.predisposition.tick : event.x,\n\t\t\t\ttipX: event.tipX,\n\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\tduration: (event.mainDuration * DURATION_MULTIPLIER) / WHOLE_DURATION,\n\t\t\t\tdivision: event.division,\n\t\t\t\tdots: event.dots,\n\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\tbeam: event.beam,\n\t\t\t\trest: event.rest,\n\t\t\t\t// the possibility of full measure rest\n\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\tshrinkness: event.predisposition ? event.predisposition.timeWarped : null,\n\t\t\t}));\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: Number.isFinite(e.shrinkness) ? e.shrinkness : Math.tanh((e.division - e.dots * 0.1) / 4),\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\t//const hp = (dx: number): number => 1 - erf(((dx / NEIGHBOR_CHORDS_SIGMA) ** 0.6) * INVERT_SQRT2);\n\t\tconst hp = (dx: number): number => erf(dx / NEIGHBOR_CHORDS_SIGMA) * erf(NEIGHBOR_CHORDS_SIGMA / dx);\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\tif (e1.staffGroup !== e2.staffGroup) matrixH[e1.id][e2.id] = 0;\n\t\t\t\t// prohibit voice crossing staff groups\n\t\t\t\telse if (e1.x <= e2.x) matrixH[e1.id][e2.id] = 0;\n\t\t\t\telse {\n\t\t\t\t\tconst staffDecay = Math.exp(-Math.abs(e1.staff - e2.staff) * STAFF_DECAY_FACTOR);\n\t\t\t\t\tconst yDecay = e1.staff === e2.staff ? Math.exp(-Math.abs(e1.y - e2.y) / Y_DECAY_SIGMA) : 1;\n\t\t\t\t\tconst dx = e1.x - e2.x;\n\t\t\t\t\tconst dtx = e1.tipX - e2.tipX;\n\t\t\t\t\tmatrixH[e1.id][e2.id] = (staffDecay * yDecay * Math.min(hp(dx), hp(dtx))) ** (1 / MATRIX_H_WEIGHT);\n\t\t\t\t}\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\t\t\t\tmatrixH[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\n\t\t\t\t// weaken inconsistent stem directions\n\t\t\t\tif (e1.stemDirection && e2.stemDirection && e1.stemDirection !== e2.stemDirection) matrixH[e1.id][e2.id] *= STEM_DIRECTION_DECAY;\n\n\t\t\t\t// ill beams penalty\n\t\t\t\tif (!e1.rest && !e2.rest && !FINE_BEAMS.includes([e2.beam, e1.beam].join('-'))) matrixH[e1.id][e2.id] *= ILL_BEAMS_PENALTY;\n\t\t\t}\n\n\t\t\t// H possibility of e1 and end of measure\n\t\t\tmatrixH[ids.length][e1.id] = hp(measure.width - e1.x) ** (1 / MATRIX_H_WEIGHT);\n\t\t}\n\n\t\treturn {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness: 0,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t};\n\n\texport const regulateMeasure = async (measure: SpartitoMeasure, { solver = null, ...options }: RegulatorOptions): Promise => {\n\t\tconst env = estiamteMeasure(measure);\n\t\tconst { ids, matrixH, matrixV } = env;\n\n\t\t// copy matrices values from measure topology data\n\t\tif (measure.matrixH) {\n\t\t\tconsole.assert(\n\t\t\t\tmeasure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t\t'matrix shape mismatch:',\n\t\t\t\tids.length,\n\t\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t\t);\n\t\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t\t}\n\t\t}\n\t\tif (measure.matrixV) {\n\t\t\tmatrixV.forEach((row, i) =>\n\t\t\t\trow.forEach((_, j) => {\n\t\t\t\t\tconst mp = measure.matrixV[ids[i]][ids[j]];\n\t\t\t\t\tif (Number.isFinite(mp)) matrixV[i][j] = mp;\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\tenv.measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tif (options.logger) options.logger.info('--- MEASURE', measure.measureIndex, '---', env);\n\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\t\tconst resultEvents = solution.events.map((e) => ({\n\t\t\t...e,\n\t\t\tid: env.ids[e.id], // decode compact ids\n\t\t}));\n\t\tresultEvents.forEach((e) => {\n\t\t\tconst event = measure.events.find((e0) => e0.id === e.id);\n\t\t\tevent.tick = Number.isFinite(e.tick) ? Math.round((e.tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : null;\n\t\t\tevent.tickGroup = e.tickGroup;\n\t\t\tevent.timeWarp = e.timeWarp;\n\t\t});\n\n\t\tmeasure.duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\t\tmeasure.voices = solution.voices.map((voice) => voice.map((id) => env.ids[id]));\n\n\t\tmeasure.solutionStat = {\n\t\t\tloss: solution.loss,\n\t\t\tsolverCredits: solution.credits,\n\t\t\tsolverTimes: solution.times,\n\t\t};\n\n\t\t// full measure rests\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst result = resultEvents.find((e) => e.id === event.id);\n\t\t\tif (!result) return;\n\t\t\telse if (!Number.isFinite(result.tick) && event.rest === 'r' && event.division === 0) {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.rest = 'R';\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t} else if (event.rest === 'R') {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t}\n\t\t});\n\t};\n\n\texport const regulateMeasureWithRectification = async (\n\t\tmeasure: SpartitoMeasure,\n\t\trectification: MeasureRectification,\n\t\t{ solver = null, ...options }: RegulatorOptions\n\t): Promise => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => {\n\t\t\t\tconst re = rectification.events.find((e) => e && e.id === event.id);\n\t\t\t\tconst division = Number.isFinite(re?.division) ? re.division : event.division;\n\t\t\t\tconst dots = Number.isFinite(re?.dots) ? re.dots : event.dots;\n\t\t\t\tconst duration = DURATION_MULTIPLIER * 2 ** -division * (2 - 2 ** -dots);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: event.id,\n\t\t\t\t\tstaff: event.staff,\n\t\t\t\t\tx: event.x,\n\t\t\t\t\ttickEstimated: event.predisposition?.tick,\n\t\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\t\tduration,\n\t\t\t\t\t// the possibility of full measure rest\n\t\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\t\tshrinkness: event.predisposition?.timeWarped || 0,\n\t\t\t\t};\n\t\t\t});\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: e.shrinkness,\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\t\t\t}\n\t\t}\n\n\t\t// copy matrices values from measure topology data\n\t\tconsole.assert(\n\t\t\tmeasure.matrixH && measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t'matrix shape mismatch:',\n\t\t\tids.length,\n\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t);\n\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t}\n\n\t\tlet measureShrinkness = 0;\n\t\tif (Number.isFinite(measure.estimatedDuration)) measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tconst env = {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\n\t\tconst priority = -solution.loss;\n\n\t\tconst events = solution.events.map(({ id, tick, tickGroup, timeWarp }) => {\n\t\t\tconst re = rectification.events.find((e) => e && e.id === id);\n\t\t\tconst tickN = Number.isFinite(tick) ? Math.round((tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : tick;\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttick: tickN,\n\t\t\t\ttickGroup,\n\t\t\t\ttimeWarp,\n\t\t\t\tdivision: re?.division,\n\t\t\t\tdots: re?.dots,\n\t\t\t};\n\t\t});\n\n\t\tconst duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\n\t\treturn {\n\t\t\tevents,\n\t\t\tvoices: solution.voices,\n\t\t\tduration,\n\t\t\tpriority,\n\t\t};\n\t};\n}\n\ntype Matrix = number[][];\n\ntype TickMap = Map;\n\ninterface SolutionStatistics {\n\tloss?: number;\n\tsolverCredits?: number;\n\tsolverTimes?: number;\n}\n\nclass SpartitoMeasure extends SimpleClass {\n\tstatic className = 'SpartitoMeasure';\n\tstatic blackKeys = ['staffGroups', 'solutionStat', 'measureNumber', 'deposit'];\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tstaffGroups: number[][];\n\toriginalRegulationHash?: string;\n\tmeasureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures\n\n\tpatched: boolean;\n\tdiscard: boolean;\n\n\tposition: {\n\t\tsystemIndex: number;\n\t\tlocalIndex: number; // the measure local index in its system\n\t\tleft: number;\n\t\tright: number;\n\t\tstaffYs?: number[];\n\t\tstaffYsFull?: number[];\n\t};\n\n\tbackgroundImages: BackgroundImage[];\n\n\tevents: EventTerm[];\n\tendEvent: Partial; // the placeholder for end tick\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n\tindent: boolean;\n\n\tsolutionStat?: SolutionStatistics;\n\n\tmatrixH: Matrix; // matrix N x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n\testimatedDuration: number;\n\n\tgraph: GraphMeasure;\n\n\tdeposit: Record;\n\n\tstatic reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[] {\n\t\tconst HALF_NOTEHEAD = 0.7;\n\n\t\tconst ys = [];\n\n\t\tconst es = events.map((e) => ({\n\t\t\tid: e.id,\n\t\t\tstaff: e.staff,\n\t\t\tx: e.x / HALF_NOTEHEAD,\n\t\t\trx: 0,\n\t\t\try: staffYsFull[e.staff] + e.tipY,\n\t\t\ttipY: e.tipY,\n\t\t\tprior: 0,\n\t\t}));\n\t\tes.sort((e1, e2) => e1.x - e2.x);\n\t\tes.slice(1).forEach((e, i) => {\n\t\t\tconst dx = Math.min(Math.round(e.x - es[i].x), 2);\n\t\t\te.rx = es[i].rx + dx;\n\t\t});\n\t\tes.forEach((e) => {\n\t\t\te.prior = e.staff * 1e4 + e.rx + e.tipY * 0.01;\n\n\t\t\tif (!ys.includes(e.ry)) ys.push(e.ry);\n\t\t});\n\t\tes.sort((e1, e2) => e1.prior - e2.prior);\n\t\tys.sort((y1, y2) => y1 - y2);\n\n\t\tlet yi = 0;\n\t\tconst yis = ys.map((y, i) => {\n\t\t\tif (!i || ys[i] - ys[i - 1] < 0.5) return yi;\n\n\t\t\t++yi;\n\t\t\treturn yi;\n\t\t});\n\n\t\tconst result = es.map((e) => new EventTerm({ ...events.find((ev) => ev.id === e.id), intX: e.rx, intY: yis[ys.indexOf(e.ry)] }));\n\t\tresult.forEach((e, i) => (e.id = i + 1));\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tif (!this.originalRegulationHash && !this.regulated) this.originalRegulationHash = this.regulationHash;\n\n\t\tthis.barTypes = this.barTypes || {};\n\n\t\t// Ensure postRegulate runs for measures deserialized with voices (e.g. from patches/JSON)\n\t\t// to set endEvent and roundX needed for playback cursor positioning.\n\t\tif (this.regulated && this.position) this.postRegulate();\n\t}\n\n\tget timeSignature(): Fraction {\n\t\treturn this.basics && this.basics[0].timeSignature;\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.basics && this.basics[0].keySignature;\n\t}\n\n\tget timeSignatureChanged(): boolean {\n\t\treturn this.contexts.filter(Boolean)[0].some((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type));\n\t}\n\n\tget doubtfulTimesig(): boolean {\n\t\treturn this.basics && this.basics[0].doubtfulTimesig;\n\t}\n\n\tget regulated(): boolean {\n\t\treturn !!this.voices;\n\t}\n\n\tget validRegulated(): boolean {\n\t\tif (!this.voices) return false;\n\n\t\treturn this.voices.flat(1).every((id) => Number.isFinite(this.events.find((e) => e.id === id)?.tick));\n\t}\n\n\tget rows(): EventMeasure[] {\n\t\treturn this.contexts.map((contexts, si) => {\n\t\t\tconst events = this.events.filter((e) => e.staff === si);\n\n\t\t\treturn {\n\t\t\t\tevents,\n\t\t\t\tcontexts,\n\t\t\t};\n\t\t});\n\t}\n\n\tget eventStartX(): number {\n\t\treturn this.events.length ? Math.min(...this.events.map((e) => e.x)) : this.startX;\n\t}\n\n\tget startX(): number {\n\t\treturn this.position.left;\n\t}\n\n\tget width(): number {\n\t\treturn this.position.right - this.position.left;\n\t}\n\n\tget tickMap(): TickMap {\n\t\treturn this.events\n\t\t\t.concat([this.endEvent as EventTerm])\n\t\t\t.filter(Boolean)\n\t\t\t.reduce((map, event) => {\n\t\t\t\tif (Number.isFinite(event.tick)) {\n\t\t\t\t\tif (!map.has(event.tick)) map.set(event.tick, []);\n\n\t\t\t\t\tmap.get(event.tick).push(event);\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}, new Map());\n\t}\n\n\tget tickToX(): { [tick: number]: number } {\n\t\treturn [...this.tickMap.entries()].reduce((map, [tick, events]) => {\n\t\t\tevents = events.filter((e) => !e.fullMeasureRest && !e.grace);\n\t\t\tif (events.length) {\n\t\t\t\tconst x = Math.min(...events.map((e) => e.x));\n\t\t\t\tmap[tick] = x;\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget tickRates(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tevents.sort((e1, e2) => e1.x - e2.x);\n\n\t\treturn events.slice(0, events.length - 1).map((e1, i) => {\n\t\t\tconst e2 = events[i + 1];\n\n\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t});\n\t}\n\n\tget tickRatesInStaves(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(sevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickRatesInGroups(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(gevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickTwist(): number {\n\t\tif (!this.duration || !this.staffGroups) return undefined;\n\n\t\tconst events = this.events.filter(\n\t\t\t(event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !(event.rest && event.division === 0)\n\t\t); // ignore rest0\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst twists = Object.values(gevents).map((es) => {\n\t\t\tconst eventsXOrder = [...es].sort((e1, e2) => e1.pivotX - e2.pivotX);\n\t\t\tconst xSpan = this.position.right - eventsXOrder[0].x;\n\t\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\t\tconst e1 = eventsXOrder[i];\n\t\t\t\tconst dx = e2.pivotX - e1.pivotX;\n\t\t\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\t\t\tif (!dt) return dx / xSpan;\n\n\t\t\t\tconst rate = Math.atan2(dt / this.duration, dx / xSpan);\n\n\t\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t\t});\n\n\t\t\treturn Math.max(0, ...tickTwists);\n\t\t});\n\n\t\treturn Math.max(0, ...twists);\n\t}\n\n\tget eventMap(): Record {\n\t\treturn this.events.reduce((map, event) => {\n\t\t\tmap[event.id] = event;\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget empty(): boolean {\n\t\treturn !this.events?.length || !this.voices?.length;\n\t}\n\n\tget hasIllEvent(): boolean {\n\t\tconst voicedEventIds = this.voices.flat(1);\n\t\tconst eventMap = this.eventMap;\n\t\treturn (\n\t\t\tthis.regulated &&\n\t\t\tvoicedEventIds.some((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\treturn !event.zeroHolder && !Number.isFinite(event.tick) && !event.fullMeasureRest;\n\t\t\t})\n\t\t);\n\t}\n\n\tget brief(): string {\n\t\tconst timesig = `${this.timeSignature.numerator}/${this.timeSignature.denominator}`;\n\t\tconst eventBrieves = this.events.map((e) =>\n\t\t\t[\n\t\t\t\te.staff,\n\t\t\t\te.intX,\n\t\t\t\tMath.round(e.tip ? e.tip.y : e.ys?.[0] ?? 0),\n\t\t\t\te.fullMeasureRest ? 0 : e.division,\n\t\t\t\te.fullMeasureRest ? 0 : e.dots,\n\t\t\t\te.rest ? 'r' : '',\n\t\t\t\te.grace || '',\n\t\t\t\te.stemDirection,\n\t\t\t\te.beam || '',\n\t\t\t].join('|')\n\t\t);\n\n\t\treturn [timesig, ...eventBrieves].join('\\n');\n\t}\n\n\tget regulationHash(): string {\n\t\treturn sha1(this.brief);\n\t}\n\n\t// prefer use originalRegulationHash\n\tget regulationHash0(): string {\n\t\treturn this.originalRegulationHash || this.regulationHash;\n\t}\n\n\tget regulationHashes(): string[] {\n\t\treturn Array.from(new Set([this.originalRegulationHash, this.regulationHash].filter(Boolean)));\n\t}\n\n\tget featureWords(): string[][] | null {\n\t\tif (!this.regulated || !this.voices || !this.voices.length) return null;\n\n\t\tconst invalid = this.tickRatesInStaves.some((rate) => rate < 0);\n\n\t\tconst mainEvents = this.events.filter((event) => !event.zeroHolder && !event.rest);\n\n\t\tconst ys = mainEvents\n\t\t\t.map((event) => event.ys)\n\t\t\t.flat(1)\n\t\t\t.map((y) => `Y${-y * 2}`);\n\t\tconst uys = Array.from(new Set(ys));\n\t\tif (this.keySignature) uys.push(`K${this.keySignature}`);\n\n\t\tconst voices = this.voices\n\t\t\t.map((ids) => ids.map((id) => this.events.find((e) => e.id === id)).filter((event) => !event.zeroHolder && !event.rest))\n\t\t\t.filter((voice) => voice.length);\n\n\t\tconst melodies = invalid ? [] : voices.map((es) => es.map((e) => e.scaleChord).join('-'));\n\n\t\tconst rhythm = invalid ? [] : voices.map((es) => es.map((e) => e.division).join(''));\n\t\tif (this.timeSignature) rhythm.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`);\n\n\t\treturn [uys, melodies, rhythm];\n\t}\n\n\tget barType(): MeasureBarType {\n\t\tif (this.voltaEnd) return 'VoltaRight';\n\n\t\tconst typeEntris = Object.entries(this.barTypes).sort((e1, e2) => e2[1] - e1[1]);\n\t\tif (typeEntris[0] && typeEntris[0][1] >= 1) return typeEntris[0][0] as MeasureBarType;\n\n\t\treturn null;\n\t}\n\n\tget partialDuration(): boolean {\n\t\tif (!Number.isFinite(this.duration)) return false;\n\n\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\treturn this.duration < signatureDuration;\n\t}\n\n\tpostRegulate(): void {\n\t\tthis.endEvent = new EventTerm({ tick: this.duration, x: this.position.right });\n\n\t\tthis.updateRoundX();\n\t\tsolveGraceEvents(this);\n\t\tsolveTremoloPairs(this);\n\t\tthis.updateContextTick();\n\t}\n\n\tupdateRoundX(): void {\n\t\tconst tickToX = this.tickToX;\n\t\tif (tickToX)\n\t\t\tthis.events.forEach((event) => {\n\t\t\t\tconst x = tickToX[event.tick];\n\t\t\t\tif (Number.isFinite(x)) event.roundX = x;\n\t\t\t});\n\t}\n\n\tupdateContextTick(): void {\n\t\tif (!this.staffGroups) return;\n\t\tconst contexts = this.contexts.flat(1);\n\t\tthis.staffGroups.flat(1).forEach((staffIndex) => {\n\t\t\tconst terms = [...this.events.filter((e) => e.staff === staffIndex), ...contexts.filter((c) => c.staff === staffIndex)];\n\t\t\tterms.sort((t1, t2) => t2.x - t1.x); // order by x from right to left\n\n\t\t\tlet tick = this.duration;\n\t\t\tterms.forEach((term) => {\n\t\t\t\tif (term instanceof EventTerm) {\n\t\t\t\t\tif (!term.fullMeasureRest && !term.zeroHolder) tick = term.tick;\n\t\t\t\t} else if (term instanceof ContextedTerm) term.tick = tick;\n\t\t\t});\n\t\t});\n\t}\n\n\tasSolution(ref: SpartitoMeasure = undefined): RegulationSolution {\n\t\tif (!this.regulated) return null;\n\n\t\t//let timeSignature = undefined;\n\t\t//if (ref && printFraction(ref.timeSignature) !== printFraction(this.timeSignature)) timeSignature = this.timeSignature;\n\n\t\treturn {\n\t\t\t//timeSignature,\n\t\t\tevents: this.events.map((e) => {\n\t\t\t\tconst se = {\n\t\t\t\t\tid: e.id,\n\t\t\t\t\ttick: e.tick,\n\t\t\t\t\ttickGroup: e.tickGroup,\n\t\t\t\t\ttimeWarp: e.timeWarp,\n\t\t\t\t} as RegulationSolutionEvent;\n\n\t\t\t\tif (ref) {\n\t\t\t\t\tconst refEvent = ref.events.find((re) => re.id === e.id);\n\t\t\t\t\tif (refEvent) {\n\t\t\t\t\t\tif (e.division !== refEvent.division) se.division = e.division;\n\t\t\t\t\t\tif (e.dots !== refEvent.dots) se.dots = e.dots;\n\t\t\t\t\t\tif (e.grace !== refEvent.grace) se.grace = !!e.grace;\n\t\t\t\t\t\tif (e.beam !== refEvent.beam) se.beam = e.beam;\n\t\t\t\t\t\tif (e.fullMeasureRest !== refEvent.fullMeasureRest) se.fullMeasure = e.fullMeasureRest;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn se;\n\t\t\t}),\n\t\t\tvoices: this.voices,\n\t\t\tduration: this.duration,\n\t\t\tpriority: -this.solutionStat?.loss,\n\t\t};\n\t}\n\n\tapplySolution(solution: RegulationSolution): void {\n\t\tif (solution.timeSignature) {\n\t\t\tthis.basics.forEach((basic) => {\n\t\t\t\tbasic.timeSignature = solution.timeSignature;\n\t\t\t\tbasic.doubtfulTimesig = false;\n\t\t\t});\n\t\t}\n\n\t\tthis.voices = solution.voices;\n\t\tthis.duration = solution.duration;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.timeWarp = null;\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\n\t\t\tconst se = solution.events?.find((e) => e.id === event.id);\n\t\t\tif (se) {\n\t\t\t\tevent.tick = se.tick;\n\t\t\t\tevent.timeWarp = se.timeWarp;\n\t\t\t\tevent.tickGroup = se.tickGroup;\n\n\t\t\t\tif (Number.isFinite(se.division)) event.division = se.division;\n\t\t\t\tif (Number.isFinite(se.dots)) event.dots = se.dots;\n\t\t\t\tif (se.beam !== undefined) event.beam = se.beam as StemBeam;\n\t\t\t\tif (se.grace !== undefined) event.grace = se.grace ? GraceType.Grace : undefined;\n\t\t\t\tif (se.fullMeasure) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tif (Number.isFinite(solution.priority)) this.solutionStat = { loss: -solution.priority };\n\n\t\tthis.postRegulate();\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.voices = null;\n\t\tthis.duration = null;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\t\t\tevent.timeWarp = null;\n\t\t});\n\t}\n\n\tregulateTest(): void {\n\t\tthis.duration = 0;\n\t\tthis.voices = this.rows.map((row) => row.events.map((e) => e.id));\n\t\tthis.voices.forEach((ids) => {\n\t\t\tlet tick = 0;\n\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\t\t\tevents.forEach((e, index) => {\n\t\t\t\te.tickGroup = index;\n\t\t\t\te.tick = tick;\n\n\t\t\t\ttick += e.duration;\n\t\t\t});\n\n\t\t\tthis.duration = Math.max(this.duration, tick);\n\t\t});\n\t}\n\n\tregulateSimple(): void {\n\t\tSimplePolicy.computeMeasureTicks(this);\n\t\tSimplePolicy.computeMeasureVoices(this);\n\t}\n\n\tasync regulateEquations(options: EquationPolicy.RegulatorOptions): Promise {\n\t\tawait EquationPolicy.regulateMeasure(this, options);\n\t}\n\n\t// compute event.tick, event.tickGroup, event.timeWarp, voices, duration\n\tasync regulate({ policy = 'advanced', ...options }: RegulationOptions = {}): Promise {\n\t\tswitch (policy) {\n\t\t\tcase 'test':\n\t\t\t\tthis.regulateTest();\n\n\t\t\t\tbreak;\n\t\t\tcase 'equations':\n\t\t\tcase 'advanced':\n\t\t\t\tawait this.regulateEquations(options);\n\n\t\t\t\tbreak;\n\t\t\tcase 'simple':\n\t\t\tdefault:\n\t\t\t\tthis.regulateSimple();\n\t\t}\n\n\t\tthis.postRegulate();\n\t}\n\n\tcreatePatch(): PatchMeasure {\n\t\treturn new PatchMeasure({\n\t\t\tmeasureIndex: this.measureIndex,\n\t\t\tstaffMask: this.staffMask,\n\t\t\tbasic: this.basics[0],\n\t\t\t//points: [],\n\t\t\tevents: this.events,\n\t\t\tcontexts: this.contexts,\n\t\t\tmarks: this.marks,\n\t\t\tvoices: this.voices,\n\t\t});\n\t}\n\n\tcreateClusters(): EventCluster[] {\n\t\tconst trueEventIds = this.voices && new Set(this.voices.flat(1));\n\n\t\treturn this.staffGroups\n\t\t\t.filter((idx) => idx.length)\n\t\t\t.map((staffIndices) => {\n\t\t\t\tconst staffY0 = this.position.staffYs[0];\n\t\t\t\tconst staffYn = (n) => this.position.staffYs[staffIndices.indexOf(n)] - staffY0;\n\n\t\t\t\tconst events = this.events.filter((event) => staffIndices.includes(event.staff));\n\t\t\t\tif (!events.length) return null;\n\n\t\t\t\tconst elements: EventElement[] = events.map((event) => ({\n\t\t\t\t\tindex: event.id,\n\t\t\t\t\tvoice: (this.voices || []).findIndex((voice) => voice.includes(event.id)),\n\t\t\t\t\ttype: event.rest ? EventElementType.REST : EventElementType.CHORD,\n\t\t\t\t\tstaff: staffIndices.indexOf(event.staff),\n\t\t\t\t\tx: event.tipX,\n\t\t\t\t\tpivotX: event.pivotX,\n\t\t\t\t\ty1: staffYn(event.staff) + (event.stemDirection === 'u' ? event.tipY : event.ys[event.ys.length - 1]),\n\t\t\t\t\ty2: staffYn(event.staff) + (event.stemDirection === 'u' ? event.ys[0] : event.tipY),\n\t\t\t\t\theadY: event.stemDirection === 'u' ? event.ys[0] : event.ys[event.ys.length - 1],\n\t\t\t\t\tfeature: event.feature,\n\t\t\t\t\tdivision: event.division,\n\t\t\t\t\tdots: event.dots,\n\t\t\t\t\tbeam: event.beam || null,\n\t\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\t\tgrace: !!event.grace,\n\t\t\t\t\ttremoloCatcher: event.tremoloCatcher,\n\t\t\t\t\ttimeWarped: !!event.timeWarp,\n\t\t\t\t\tfullMeasure: event.fullMeasureRest,\n\t\t\t\t\ttick: event.tick || 0,\n\t\t\t\t\tfake: !event.fullMeasureRest && !event.grace && this.voices && !trueEventIds.has(event.id), // tremoloCatcher deemed as fake\n\t\t\t\t}));\n\t\t\t\tif (!elements.some((elem) => !elem.fake)) return null;\n\n\t\t\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\t\t\t// BOS & EOS\n\t\t\t\telements.unshift({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\ttype: EventElementType.BOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.left,\n\t\t\t\t\tpivotX: this.position.left,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: this.duration < signatureDuration,\n\t\t\t\t\ttick: 0,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\t\t\t\telements.push({\n\t\t\t\t\tindex: -1,\n\t\t\t\t\ttype: EventElementType.EOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.right,\n\t\t\t\t\tpivotX: this.position.right,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: false,\n\t\t\t\t\ttick: this.duration,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\n\t\t\t\tlet matrixH = null;\n\t\t\t\tif (this.voices) {\n\t\t\t\t\tmatrixH = elements.map(() => elements.map(() => 0));\n\n\t\t\t\t\tthis.voices.forEach((voice) => {\n\t\t\t\t\t\tlet tar = 0;\n\t\t\t\t\t\tvoice.forEach((id) => {\n\t\t\t\t\t\t\tconst src = elements.findIndex((e) => e.index === id);\n\t\t\t\t\t\t\tif (src > 0 && tar >= 0) matrixH[src][tar] = 1;\n\t\t\t\t\t\t\ttar = src;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (tar >= 0) matrixH[elements.length - 1][tar] = 1;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst annotation = { ...this.solutionStat, patched: this.patched };\n\n\t\t\t\tconst backgroundImages =\n\t\t\t\t\tthis.backgroundImages &&\n\t\t\t\t\tthis.backgroundImages.map(({ url, position }) => ({\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t...position,\n\t\t\t\t\t\t\ty: position.y - staffY0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\n\t\t\t\treturn new EventCluster({\n\t\t\t\t\tindex: this.measureIndex,\n\t\t\t\t\tduration: this.duration,\n\t\t\t\t\tsignatureDuration,\n\t\t\t\t\tstaffY0,\n\t\t\t\t\telements,\n\t\t\t\t\tmatrixH,\n\t\t\t\t\tannotation,\n\t\t\t\t\tbackgroundImages,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n\n\tapplyClusters(clusters: EventCluster[]): void {\n\t\tconst id_max = this.events.reduce((max, event) => Math.max(max, event.id), 0) + 1;\n\t\tthis.matrixH = Array(id_max + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(id_max).fill(0));\n\n\t\tclusters.forEach((cluster) => {\n\t\t\tconst ids = cluster.elements.map((e) => e.index);\n\t\t\tconsole.assert(cluster.matrixH.length === ids.length - 1, 'unexpected matrixH size:', cluster.matrixH.length, ids.length);\n\n\t\t\tfor (let is = 1; is < ids.length; ++is) {\n\t\t\t\tfor (let it = 0; it < ids.length - 1; ++it) {\n\t\t\t\t\tconst srcId = ids[is] < 0 ? id_max : ids[is];\n\t\t\t\t\tconst tarId = ids[it];\n\n\t\t\t\t\tthis.matrixH[srcId][tarId] = cluster.matrixH[is - 1][it];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// event predisposition\n\t\t\tcluster.elements.forEach((elem) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === elem.index);\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.predisposition = elem.predisposition;\n\t\t\t\t\tif (event.predisposition.grace !== undefined) event.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// estimated measure duration\n\t\tthis.estimatedDuration = clusters.reduce((sum, cluster) => sum + cluster.estimatedDuration, 0) / clusters.length;\n\t}\n}\n\nexport { SpartitoMeasure, EquationPolicy };\n","import { MIDI } from '@k-l-lambda/music-widgets';\n\nimport { Fraction } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ArpeggioStyle, EventTerm, GraceType, RestType, StemBeam, TermPitch, TremoloLink } from './term';\nimport { noteToPitch } from './utils';\n\n// NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI\n\ninterface EventUIAgent {\n\treadonly id: number;\n\treadonly duration: number;\n\n\t//ys: number[];\n\tpitches: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\tgrace: boolean; //\n\tbeam: StemBeam;\n\ttimeWarp: string; //\n\ttremolo: number;\n\ttremoloLink: TremoloLink;\n\tglissando: boolean;\n\tarpeggioStyle: ArpeggioStyle;\n\ttick: number;\n}\n\ninterface MeasureUIAgent {\n\treadonly measureIndex: number;\n\ttimeSignature: Fraction;\n\tdoubtfulTimesig: boolean;\n\tkeySignature: number;\n\t//readonly events: EventUIAgent[];\n\tduration: number;\n\treadonly voices: number[][];\n}\n\nclass EditableEvent extends EventTerm {\n\tvoice: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t}\n\n\tget agent(): EventUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget(target, key): any {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'arpeggioStyle': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? null : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'glissando': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? false : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\treturn !!self.grace;\n\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\treturn self.timeWarp ? `${self.timeWarp.numerator}/${self.timeWarp.denominator}` : null;\n\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\treturn self.multiplier ? `${self.multiplier.numerator}/${self.multiplier.denominator}` : null;\n\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn self.pitches;\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'glissando':\n\t\t\t\t\tcase 'arpeggioStyle':\n\t\t\t\t\t\t(self as any)[key] = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\tself.grace = value ? GraceType.Grace : null;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\tself.timeWarp = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.timeWarp = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\tself.multiplier = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.multiplier = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => [\n\t\t\t\t'id',\n\t\t\t\t'duration',\n\t\t\t\t'rest',\n\t\t\t\t'division',\n\t\t\t\t'dots',\n\t\t\t\t'stemDirection',\n\t\t\t\t'tying',\n\t\t\t\t'tied',\n\t\t\t\t'beam',\n\t\t\t\t'timeWarp',\n\t\t\t\t'multiplier',\n\t\t\t\t'tremolo',\n\t\t\t\t'tremoloLink',\n\t\t\t\t'glissando',\n\t\t\t\t'arpeggioStyle',\n\t\t\t\t'tick',\n\t\t\t\t'grace',\n\t\t\t\t'pitches',\n\t\t\t],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n}\n\nclass EditableMeasure extends SpartitoMeasure {\n\tstatic className = 'EditableMeasure';\n\tstatic blackKeys = [];\n\n\tevents: EditableEvent[] = null;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\n\t\tthis.events = data.events;\n\t\tif (this.events?.some((event) => !(event instanceof EditableEvent))) this.events = this.events.map((event) => new EditableEvent(event));\n\n\t\tif (this.voices) this.syncVoiceToEvents();\n\t}\n\n\tsyncVoiceToEvents(): void {\n\t\tthis.events.forEach((event) => (event.voice = -1));\n\t\tthis.voices.forEach((voice, voiceIndex) => {\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\tif (event) event.voice = voiceIndex;\n\t\t\t\telse console.warn('no event with id:', id, this.events.length);\n\t\t\t});\n\t\t});\n\t}\n\n\tsyncVoiceFromEvents(): void {\n\t\tconst voices: EditableEvent[][] = [];\n\t\tthis.events.forEach((event) => {\n\t\t\tif (event?.voice >= 0) {\n\t\t\t\tvoices[event.voice] = voices[event.voice] || [];\n\t\t\t\tvoices[event.voice].push(event);\n\t\t\t}\n\t\t});\n\n\t\tvoices.forEach((voice) => voice.sort((e1, e2) => e1.tick - e2.tick));\n\n\t\tthis.voices = voices.map((voice) => voice.map((event) => event.id));\n\t}\n\n\tget agent(): MeasureUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget: (target, key): any => {\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\treturn self[key];\n\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn self.voices?.map((voice) => voice.join(',')) || null;\n\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\treturn self.basics[0][key];\n\t\t\t\t\t//case 'events':\n\t\t\t\t\t//\treturn self.events.map(eventUIAgent);\n\t\t\t\t\tcase 'toJSON':\n\t\t\t\t\t\treturn () => ({\n\t\t\t\t\t\t\tmeasureIndex: self.measureIndex,\n\t\t\t\t\t\t\tvoices: self.voices,\n\t\t\t\t\t\t\tduration: self.duration,\n\t\t\t\t\t\t\ttimeSignature: self.basics[0].timeSignature,\n\t\t\t\t\t\t\tkeySignature: self.basics[0].keySignature,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\t//console.log('set:', key, value);\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\t(self.basics[0][key] as any) = value;\n\t\t\t\t\t\tself.basics = self.basics.map(() => self.basics[0]);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\tself.duration = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => ['measureIndex', 'timeSignature', 'doubtfulTimesig', 'keySignature', 'duration', 'voices'],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n\n\tmakeMIDI(bpm: number = 120): MIDI.MidiData {\n\t\tif (!this.regulated) return null;\n\n\t\tconst microsecondsPerBeat = 60e6 / bpm;\n\n\t\tconst header = { formatType: 0, ticksPerBeat: 480 };\n\t\tconst tracks = this.voices.map((ids, vi) => {\n\t\t\tconst events = ids\n\t\t\t\t.map((id) => {\n\t\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\t\tif (event) {\n\t\t\t\t\t\tconst subEvents = event.graceIds ? event.graceIds.map((id) => this.events.find((event) => event.id === id)) : [];\n\n\t\t\t\t\t\treturn [...subEvents, event];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [];\n\t\t\t\t})\n\t\t\t\t.flat(1);\n\n\t\t\tconst startTime = 0;\n\n\t\t\ttype Event = MIDI.MidiEvent & { [key: string]: any };\n\t\t\tconst midiEvents: Event[] = events\n\t\t\t\t.filter((event) => !event.rest && Number.isFinite(event.tick) && event.tick >= 0 && Number.isFinite(event.duration))\n\t\t\t\t.map((event) =>\n\t\t\t\t\tevent.pitches.map((pitch) => [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t\tvelocity: 96,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick + event.duration,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t)\n\t\t\t\t.flat(2);\n\n\t\t\tmidiEvents.sort(function (e1, e2) {\n\t\t\t\treturn e1.time - e2.time;\n\t\t\t});\n\n\t\t\tif (vi === 0) {\n\t\t\t\tmidiEvents.unshift(\n\t\t\t\t\t{\n\t\t\t\t\t\ttime: startTime,\n\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\tsubtype: 'timeSignature',\n\t\t\t\t\t\tnumerator: this.timeSignature.numerator,\n\t\t\t\t\t\tdenominator: this.timeSignature.denominator,\n\t\t\t\t\t\tthirtyseconds: 8,\n\t\t\t\t\t},\n\t\t\t\t\t{ time: startTime, type: 'meta', subtype: 'setTempo', microsecondsPerBeat }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tmidiEvents.forEach((event) => {\n\t\t\t\tevent.ticks = Math.round(event.time - startTime);\n\t\t\t});\n\t\t\tmidiEvents.forEach((event, i) => {\n\t\t\t\tevent.deltaTime = event.ticks - (i > 0 ? midiEvents[i - 1].ticks : 0);\n\t\t\t});\n\n\t\t\tmidiEvents.push({ deltaTime: 0, type: 'meta', subtype: 'endOfTrack' });\n\n\t\t\treturn midiEvents;\n\t\t});\n\n\t\treturn {\n\t\t\theader,\n\t\t\ttracks,\n\t\t};\n\t}\n}\n\nexport { EditableEvent, EditableMeasure };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { Term, EventTerm, ContextedTerm, ChordmodeTerm, MarkTerm, Accessory, GraceType, TremoloLink } from './term';\nimport { HashVector } from './hashVector';\nimport { StaffLayout } from '../staffLayout';\nimport * as measureLayout from '../measureLayout';\n\ninterface Rect {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n}\n\ninterface ChordRect {\n\tx: number;\n\tstemX: number;\n\twidth: number;\n\ttop: number;\n\tbottom: number;\n\tstemDirection: string;\n\ttip?: { x: number; y: number };\n}\n\ninterface VLine {\n\tx: number;\n\ty1: number;\n\ty2: number;\n}\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ntype DivisionVecotor = [number, number, number, number, number, number, number, number, number]; // [0, 1, 2, 3, 4, 5, 6, 7, 8]\n\ntype MeasureBarType = null | 'Terminal' | 'Segment' | 'VoltaRight';\n\ninterface EventFeature {\n\tdivisions: DivisionVecotor;\n\tdots: [number, number]; // [1, 2]\n\tbeams: [number, number, number]; // ['Open', 'Continue', 'Close']\n\tstemDirections: [number, number]; // ['u', 'd']\n\tgrace: number;\n\ttremoloCatcher: number;\n}\n\ninterface EventPredisposition {\n\tgrace: boolean;\n\ttimeWarped: number;\n\tfullMeasure: number;\n\tfake: number;\n\tfakeP: number;\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tdivisionVector: DivisionVecotor;\n\tdotsVector: [number, number, number]; // [0, 1, 2]\n\tbeamVector: [number, number, number, number]; // [null, open, continue, close]\n\tstemDirectionVector: [number, number, number]; // [null, up, down]\n}\n\ninterface ChordColumn {\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\tys: number[];\n\tnoteIds: string[]; // order by upwards\n\tdivision: number;\n\tdots: number;\n\trest: boolean;\n\tstemDirection: string;\n\taccessories?: Accessory[];\n\tgrace?: GraceType;\n\ttremolo?: number;\n\ttremoloLink?: TremoloLink;\n\tbeam?: string;\n\ttip?: { x: number; y: number };\n\n\t//stemTipY?: number;\n\n\t// for topology\n\tstaff?: number;\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature?: EventFeature;\n}\n\ninterface EventMeasure {\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[];\n}\n\ninterface StaffBasic {\n\ttimeSignature: Fraction;\n\ttimeSigNumeric: boolean;\n\tkeySignature: number;\n\tdoubtfulTimesig: boolean;\n}\n\ninterface EventMeasureColumn {\n\tmeasureIndex: number;\n\t//startX: number;\n\t//width: number;\n\n\trows: EventMeasure[]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\txMap?: Map;\n\tregularLoss?: number;\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n}\n\ninterface EventSystem {\n\tstaffMask: number;\n\tcolumns: EventMeasureColumn[]; // [measure]\n}\n\ninterface TermMeasure extends Partial {\n\tterms: Term[];\n\tduration: number;\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n}\n\ntype TermRow = TermMeasure[];\n\ninterface TermStaff {\n\trows: TermRow[]; // [system]\n}\n\ninterface Pitch {\n\tnote: number;\n\talter: number;\n}\n\nenum PageLayoutMethod {\n\tByLines = 'ByLines',\n\tByBlocks = 'ByBlocks',\n}\n\ninterface RecognitionSettings {\n\tenabledGauge: boolean; // staves straighten\n\tpageLayoutMethod: PageLayoutMethod;\n\tsemanticConfidenceThreshold: number;\n}\n\ninterface Crop {\n\taspect?: number | undefined;\n\tx?: number | undefined;\n\ty?: number | undefined;\n\twidth?: number | undefined;\n\theight?: number | undefined;\n\tunit?: 'px' | '%' | undefined;\n}\n\n//\t0 2 4\t\t\tr r tx\n//\t1 3 5\t\t\tr r ty\ntype Matrix2x3 = [number, number, number, number, number, number];\n\ninterface SourceImageFile {\n\tname: string;\n\tsize: number;\n\turl: string;\n\tcrop?: Crop;\n\tmatrix: Matrix2x3;\n\tdimensions: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tinterval: number;\n\tneedGauge?: boolean;\n}\n\ninterface Area extends Rect {\n\tstaves: {\n\t\tinterval: number;\n\t\tmiddleRhos: number[];\n\t\tphi1: number;\n\t\tphi2: number;\n\t};\n}\n\ninterface PageLayout {\n\tareas: Area[];\n}\n\ninterface MeasureBrief {\n\ttimeSignature: Fraction;\n}\n\ninterface VoiceMeasure {\n\ttickMap: { [key: number]: EventTerm | ChordmodeTerm };\n\tduration: number;\n\n\ttimeSignature?: Fraction;\n\ttimeSigNumeric?: boolean;\n\tkeySignature?: number;\n\n\tcontextedTerms: ContextedTerm[];\n\tmarks: MarkTerm[];\n\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbar?: string;\n\n\tempty?: boolean;\n\n\theadStaff?: number;\n\ttailStaff?: number;\n\n\ttrait?: HashVector;\n\tvoiceIndex?: number;\n}\n\ninterface TermVoice {\n\tmode: string;\n\tmeasures: VoiceMeasure[];\n}\n\ninterface VoicesStaff {\n\tcontext?: string;\n\tname?: string;\n\tvoices: TermVoice[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n\tslashSystemSeparator: boolean;\n}\n\ninterface MusicHeaders {\n\ttitle: string;\n\tsubtitle: string;\n\tsubsubtitle: string;\n\tcomposer: string;\n\tpoet: string;\n\tarranger: string;\n\topus: string;\n\tcopyright: string;\n\tinstrument: string;\n\tdedication: string;\n\ttagline: string;\n}\n\ninterface MusicSheet {\n\ttitle: string;\n\tpageSize: {\n\t\t// in pixels\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tunitSize: number;\n\tmeasureLayout?: measureLayout.MeasureLayout;\n\tstaffLayout: StaffLayout;\n\tpaperOptions?: Partial;\n\theaders: Partial;\n\n\tvoiceStaves: VoicesStaff[];\n\tinstrumentDict: { [key: string]: string };\n}\n\ninterface Performing {\n\tnotation: MetaNotation;\n\ttokenMap: Map;\n}\n\ntype RegulationPolicy = 'test' | 'simple' | 'equations' | 'advanced';\n\ninterface RegulationOptions {\n\tpolicy?: RegulationPolicy;\n\tquota?: number;\n\t[key: string]: any;\n}\n\ninterface ScoreData {\n\tversion?: number;\n\t[key: string]: any;\n}\n\ninterface AdditionalLineStack {\n\tleft: number;\n\tright: number;\n\tn: number;\n}\n\ninterface RegulationSolutionEvent {\n\tid: number;\n\ttick: number;\n\ttickGroup: number;\n\ttimeWarp: Fraction;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: string;\n\tgrace?: boolean;\n\tfullMeasure?: boolean;\n}\n\ninterface RegulationSolution {\n\tevents: RegulationSolutionEvent[];\n\tvoices: number[][];\n\tduration: number;\n\tpriority?: number;\n\testimatedDuration?: number;\n\ttimeSignature?: Fraction;\n}\n\ninterface BackgroundImage {\n\turl: string;\n\tposition: Rect;\n\toriginal?: boolean;\n}\n\nenum TextType { //\tLEVEL\t\t\tCHARSET\n\tTitle = 'Title', // page\t\t\t\tgeneral\n\tAuthor = 'Author', // page\t\t\t\tgeneral\n\tTempoText = 'TempoText', // measure\t\t\tspecific vocabulary\n\tTempoNumeral = 'TempoNumeral', // measure\t\t\tsymbolic and numeric\n\tTextualMark = 'TextualMark', // term\t\t\t\tspecific vocabulary\n\tLyric = 'Lyric', // term\t\t\t\tgeneral\n\tInstrument = 'Instrument', // system\t\t\tspecific vocabulary\n\tMeasureNumber = 'MeasureNumber', // system\t\t\tnumeric\n\tTimes = 'Times', // staff\t\t\tnumeric\n\tAlternation1 = 'Alternation1', // measure\t\t\tnumeric\n\tAlternation2 = 'Alternation2', // measure\t\t\tnumeric\n\tChord = 'Chord', // measure\t\t\tspecific domian\n\tPageMargin = 'PageMargin', // page\t\t\t\tgeneral\n\tOther = 'Other', // page\t\t\t\tgeneral\n}\n\nexport {\n\tRect,\n\tChordRect,\n\tVLine,\n\tFraction,\n\tMeasureBarType,\n\tEventFeature,\n\tEventPredisposition,\n\tChordColumn,\n\tEventMeasure,\n\tEventMeasureColumn,\n\tEventSystem,\n\tTermMeasure,\n\tTermRow,\n\tTermStaff,\n\tPitch,\n\tPageLayoutMethod,\n\tRecognitionSettings,\n\tSourceImageFile,\n\tPageLayout,\n\tStaffBasic,\n\tVoiceMeasure,\n\tVoicesStaff,\n\tTermVoice,\n\tMeasureBrief,\n\tAdditionalLineStack,\n\tTextType,\n\tMusicSheet,\n\tPerforming,\n\tRegulationOptions,\n\tScoreData,\n\tMusicHeaders,\n\tMatrix2x3,\n\tRegulationSolutionEvent,\n\tRegulationSolution,\n\tBackgroundImage,\n};\n","import { SpartitoMeasure } from './spartitoMeasure';\nimport { StemBeam, WHOLE_DURATION } from './term';\nimport { fractionMul, gcd } from './utils';\n\nexport interface MeasureEvaluation {\n\tevents: number;\n\tvalidEvents: number;\n\tvoiceRugged: boolean;\n\tnullEvents: number;\n\tfakeEvents: number;\n\twarpedEvents: number;\n\tcomplicatedTimewarp: boolean;\n\tspaceTime: number;\n\tsurplusTime: number;\n\tdurationRate: number;\n\tbeamBroken: boolean;\n\tfractionalWarp: boolean;\n\tirregularWarpsN: number;\n\tirregularTick: boolean;\n\ttickTwist: number;\n\ttickOverlapped: boolean;\n\tgraceInVoice: boolean;\n\tgraceN: number;\n\tgraceDominant: boolean;\n\tperfect: boolean;\n\tfine: boolean;\n\terror: boolean;\n\tqualityScore: number;\n}\n\nconst BEAM_STATUS = {\n\t[StemBeam.Open]: 1,\n\t[StemBeam.Continue]: 0,\n\t[StemBeam.Close]: -1,\n};\n\nexport const evaluateMeasure = (measure: SpartitoMeasure): MeasureEvaluation => {\n\tif (!measure.regulated) return undefined;\n\n\tconst eventMap = measure.eventMap;\n\n\tconst events = measure.events.length;\n\tconst validEvents = measure.voices.flat(1).length;\n\tconst warpedEvents = measure.events.filter((e) => e.timeWarp).length;\n\tconst warps = new Set(\n\t\tmeasure.events.filter((e) => e.timeWarp && !(e.rest && e.division === 0)).map((e) => `${e.timeWarp!.numerator}/${e.timeWarp!.denominator}`)\n\t);\n\tconst irregularWarps = new Set(warps);\n\tirregularWarps.delete('2/3');\n\n\tconst fractionalWarp = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tif (!events.some((e) => e.timeWarp)) return false;\n\n\t\tlet denominator = 0;\n\t\tlet tickSum = 0;\n\t\tlet eventN = 0;\n\t\treturn events.some((event, i) => {\n\t\t\tconst d = event.timeWarp ? event.timeWarp.denominator : 0;\n\t\t\tif (d !== denominator) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\n\t\t\t\ttickSum = 0;\n\t\t\t\teventN = 0;\n\t\t\t}\n\n\t\t\tdenominator = d;\n\t\t\ttickSum += event.duration;\n\t\t\t++eventN;\n\n\t\t\tif (i === events.length - 1) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst tickOverlapped = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tlet tick = 0;\n\t\treturn events.some((event) => {\n\t\t\tif (event.grace) return false;\n\n\t\t\tif (event.tick < tick) return true;\n\t\t\ttick = event.tick + event.duration;\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst fractionalTimes = new Set(measure.events.filter((e) => e.timeWarp && e.timeWarp.denominator > 3).map((e) => e.duration));\n\tconst complicatedTimewarp = fractionalTimes.size > 1;\n\n\tconst literalDuration = fractionMul(WHOLE_DURATION, measure.timeSignature);\n\tconst sigDuration = measure.doubtfulTimesig ? measure.duration : literalDuration;\n\n\tconst inVoiceEvents = measure.voices.flat(1).map((id) => eventMap[id]);\n\n\t// Guard: detect corrupted event data in voices (e.g. missing division, NaN tick)\n\tconst corruptedVoiceEvent = inVoiceEvents.some(\n\t\t(event) =>\n\t\t\t!event ||\n\t\t\t!Number.isFinite(event.tick) ||\n\t\t\t!Number.isFinite(event.division) ||\n\t\t\tevent.division < 0 ||\n\t\t\t!Number.isFinite(event.duration) ||\n\t\t\tevent.duration <= 0\n\t);\n\n\tconst overranged = inVoiceEvents.reduce((over, event) => over || event.tick < 0 || event.tick + event.duration > sigDuration, false);\n\tconst overDuration = measure.duration > literalDuration;\n\tconst graceInVoice = inVoiceEvents.some((event) => event.grace);\n\tconst graceN = measure.events.filter((e) => e.grace).length;\n\tconst graceDominant = graceN >= inVoiceEvents.length;\n\n\tconst irregularTick = inVoiceEvents.some((event) => {\n\t\tlet t = event.tick * 2 ** (event.division + 2);\n\t\tif (event.timeWarp) t *= event.timeWarp.denominator;\n\n\t\tif (!Number.isFinite(t)) return true;\n\n\t\tconst fragment = gcd(Math.round(t), WHOLE_DURATION);\n\t\t//if (fragment < WHOLE_DURATION)\n\t\t//\tconsole.log(\"irregularTick:\", event.tick, fragment);\n\t\treturn fragment < WHOLE_DURATION;\n\t});\n\n\tconst beamStatus = measure.voices!.map((voice) =>\n\t\tvoice.reduce(\n\t\t\t({ status, broken }, ei, evi) => {\n\t\t\t\tconst event = eventMap[ei];\n\t\t\t\tif (event.beam) {\n\t\t\t\t\t// allow an open beam at beginning of a voice\n\t\t\t\t\tif (evi === 0 && [StemBeam.Continue, StemBeam.Close].includes(event.beam)) status = 1;\n\n\t\t\t\t\tstatus += BEAM_STATUS[event.beam];\n\t\t\t\t\tbroken = broken || !(status >= 0 && status <= 1);\n\t\t\t\t} else if (!event.rest) broken = broken || status !== 0;\n\n\t\t\t\treturn { status, broken };\n\t\t\t},\n\t\t\t{ status: 0, broken: false }\n\t\t)\n\t);\n\tconst beamBroken = beamStatus.some(({ broken }) => broken); // allow an open beam at the end of a voice (status == 1)\n\tlet spaceTime = 0;\n\tlet surplusTime = 0;\n\tmeasure.voices!.forEach((voice) => {\n\t\tconst eventDuration = voice.reduce((sum, ei) => sum + eventMap[ei].duration, 0);\n\t\tspaceTime += Math.max(0, measure.duration - eventDuration);\n\t\tsurplusTime += Math.max(0, eventDuration - measure.duration);\n\t});\n\tspaceTime /= WHOLE_DURATION;\n\tconst nullEvents = measure.events.filter(\n\t\t(e) => !e.grace && !e.fullMeasureRest && !e.tremoloCatcher && (!e.predisposition || e.predisposition.fakeP < 0.1) && !Number.isFinite(e.tick)\n\t).length;\n\n\tconst fakeEvents = measure.events.filter(\n\t\t(event) => !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !inVoiceEvents.includes(event)\n\t).length;\n\n\tconst { voiceRugged } = measure.voices!.flat(1).reduce(\n\t\t(result, ei) => {\n\t\t\tif (!result.voiceRugged) {\n\t\t\t\tif (result.es.has(ei)) return { voiceRugged: true, es: result.es };\n\t\t\t}\n\n\t\t\tresult.es.add(ei);\n\n\t\t\treturn result;\n\t\t},\n\t\t{ voiceRugged: false, es: new Set() }\n\t);\n\n\tconst tickTwist = measure.tickTwist || 0;\n\n\tconst error =\n\t\tcorruptedVoiceEvent ||\n\t\ttickTwist >= 1 ||\n\t\ttickOverlapped ||\n\t\tvoiceRugged ||\n\t\tmeasure.tickRatesInStaves.some((rate) => rate < 0) ||\n\t\tnullEvents > 2 ||\n\t\t!measure.timeSignature ||\n\t\toverranged ||\n\t\tmeasure.duration > sigDuration ||\n\t\tmeasure.events.some((event) => event.timeWarp && event.timeWarp.numerator / event.timeWarp.denominator <= 0.5);\n\tconst perfect =\n\t\t!error &&\n\t\t!overDuration &&\n\t\ttickTwist < 0.2 &&\n\t\t!fractionalWarp &&\n\t\t!irregularWarps.size &&\n\t\t!irregularTick &&\n\t\t!spaceTime &&\n\t\t!surplusTime &&\n\t\t!!measure.voices!.length &&\n\t\t!beamBroken &&\n\t\t!graceInVoice &&\n\t\t!graceDominant &&\n\t\t(measure.duration === sigDuration || (Number.isFinite(measure.estimatedDuration) && measure.estimatedDuration <= sigDuration * 0.75));\n\tconst fine = !error && !overDuration && tickTwist < 0.3 && !fractionalWarp && !irregularTick && !surplusTime && !beamBroken && !graceInVoice;\n\n\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\tconst durationRate = measure.duration / expectDuration;\n\n\tlet qualityScore = 0;\n\tif (measure.patched && !corruptedVoiceEvent) qualityScore = 1;\n\telse if (!error) {\n\t\tconst spaceLoss = Math.tanh(Math.abs(spaceTime / Math.max(1, measure.voices.length)) * 1);\n\n\t\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\t\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\t\tconst durationLoss = expectDuration ? Math.max(0, 1 - durationRate) ** 2 : 0;\n\t\tconst warpsLoss = Math.tanh(irregularWarps.size);\n\n\t\tqualityScore = (1 - spaceLoss) * (1 - durationLoss) * (1 - warpsLoss) * (1 - tickTwist ** 2);\n\t}\n\n\treturn {\n\t\tevents,\n\t\tvalidEvents,\n\t\tvoiceRugged,\n\t\tnullEvents,\n\t\tfakeEvents,\n\t\twarpedEvents,\n\t\tcomplicatedTimewarp,\n\t\tspaceTime,\n\t\tsurplusTime,\n\t\tdurationRate,\n\t\tbeamBroken,\n\t\tfractionalWarp,\n\t\tirregularWarpsN: irregularWarps.size,\n\t\tirregularTick,\n\t\ttickTwist,\n\t\ttickOverlapped,\n\t\tgraceInVoice,\n\t\tgraceN,\n\t\tgraceDominant,\n\t\tperfect,\n\t\tfine,\n\t\terror,\n\t\tqualityScore,\n\t};\n};\n","import { SimpleClass } from '../starry/aux_/typedJSON';\n\nenum LayoutType {\n\tOrdinary = 'ordinary',\n\tFull = 'full',\n\tConservative = 'conservative',\n\tOnce = 'once',\n}\n\ninterface MeasureLayout {\n\tserialize(type: LayoutType): number[];\n\n\tseq: MeasureSeq;\n\tcode: string;\n}\n\nexport type MeasureSeq = MeasureLayout[];\n\nconst spreadMeasureSeq = (seq: MeasureSeq, type: LayoutType = LayoutType.Ordinary): number[] => [].concat(...seq.map((layout) => layout.serialize(type)));\n\nconst seqToCode = (seq: MeasureSeq, { withBrackets = false }: { withBrackets?: boolean } = {}): string => {\n\t//const code = seq.map(layout => layout.code).join(\", \");\n\tlet code = '';\n\tlet inRange = false;\n\n\tfor (let i = 0; i < seq.length; ++i) {\n\t\tconst middle = seq[i - 1] instanceof SingleMLayout && seq[i] instanceof SingleMLayout && seq[i + 1] instanceof SingleMLayout;\n\t\tif (middle) {\n\t\t\tif (!inRange) {\n\t\t\t\tcode += '..';\n\t\t\t\tinRange = true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (i > 0 && !inRange) code += ', ';\n\n\t\t\tinRange = false;\n\n\t\t\tcode += seq[i].code;\n\t\t}\n\t}\n\n\treturn withBrackets ? `[${code}]` : code;\n};\n\nclass SingleMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'SingleMLayout';\n\n\tmeasure: number;\n\n\tstatic from(measure: number) {\n\t\tconst layout = new SingleMLayout();\n\t\tlayout.measure = measure;\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(): number[] {\n\t\treturn [this.measure];\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this];\n\t}\n\n\tget code(): string {\n\t\treturn this.measure.toString();\n\t}\n}\n\nclass BlockMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'BlockMLayout';\n\n\tseq: MeasureSeq;\n\n\tstatic trimSeq(seq: MeasureSeq): MeasureSeq {\n\t\tconst seq2 = [];\n\t\tfor (const layout of seq) {\n\t\t\tif (layout instanceof BlockMLayout) {\n\t\t\t\tfor (const sub of layout.seq) seq2.push(sub);\n\t\t\t} else seq2.push(layout);\n\t\t}\n\n\t\t// reduce duplicated or backwards single measures\n\t\tconst seq3 = [];\n\t\tlet measure = null;\n\t\tfor (const layout of seq2) {\n\t\t\tif (layout instanceof SingleMLayout) {\n\t\t\t\tif (layout.measure > measure) {\n\t\t\t\t\tseq3.push(layout);\n\t\t\t\t\tmeasure = layout.measure;\n\t\t\t\t}\n\t\t\t} else seq3.push(layout);\n\t\t}\n\n\t\treturn seq3;\n\t}\n\n\tstatic fromSeq(seq: MeasureSeq): BlockMLayout {\n\t\tconst layout = new BlockMLayout();\n\t\tlayout.seq = BlockMLayout.trimSeq(seq);\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\treturn spreadMeasureSeq(this.seq, type);\n\t}\n\n\tget code(): string {\n\t\treturn seqToCode(this.seq, { withBrackets: true });\n\t}\n}\n\nclass VoltaMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'VoltaMLayout';\n\n\ttimes: number;\n\tbody: MeasureSeq;\n\talternates: MeasureSeq[];\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst bodySeq = spreadMeasureSeq(this.body);\n\n\t\tif (this.alternates) {\n\t\t\tconst alternateSeqs = this.alternates.map((seq) => spreadMeasureSeq(seq));\n\t\t\tconst lastAlternateSeq = alternateSeqs[alternateSeqs.length - 1];\n\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\t\treturn bodySeq.concat(...alternateSeqs);\n\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Full: {\n\t\t\t\t\tconst priorSeq = [].concat(\n\t\t\t\t\t\t...Array(this.times - 1)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map((_, i) => [...bodySeq, ...alternateSeqs[i % (this.times - 1)]])\n\t\t\t\t\t);\n\n\t\t\t\t\treturn [...priorSeq, ...bodySeq, ...lastAlternateSeq];\n\t\t\t\t}\n\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn [...bodySeq, ...lastAlternateSeq];\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn bodySeq;\n\n\t\t\t\tcase LayoutType.Full:\n\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t...Array(this.times)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map(() => bodySeq)\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn('the current case not handled:', type, this);\n\t}\n\n\tget seq(): MeasureSeq {\n\t\tconst alternates = this.alternates ? this.alternates[this.alternates.length - 1] : [];\n\n\t\treturn [...this.body, ...alternates];\n\t}\n\n\tget code(): string {\n\t\tconst body = seqToCode(this.body, { withBrackets: true });\n\n\t\tlet code = `${this.times}*${body}`;\n\t\tif (this.alternates) code += '{' + this.alternates.map((seq) => seqToCode(seq, { withBrackets: seq.length > 1 })).join(', ') + '}';\n\n\t\treturn code;\n\t}\n}\n\nclass ABAMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'ABAMLayout';\n\n\tmain: MeasureLayout;\n\trest: MeasureSeq;\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst seqA = this.main.serialize(type);\n\t\tconst seqA_ = spreadMeasureSeq(this.main.seq, LayoutType.Once);\n\t\tconst seqB = spreadMeasureSeq(this.rest, type);\n\n\t\tswitch (type) {\n\t\t\tcase LayoutType.Ordinary: // A B\n\t\t\t\treturn [...seqA, ...seqB];\n\n\t\t\tcase LayoutType.Once: // B A'\n\t\t\t\treturn [...seqB, ...seqA_];\n\n\t\t\tcase LayoutType.Conservative: // A B A'\n\t\t\tcase LayoutType.Full: // A B A'\n\t\t\t\treturn [...seqA, ...seqB, ...seqA_];\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn('the current case not handled:', type, this);\n\t\t}\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this.main, ...this.rest];\n\t}\n\n\tget code(): string {\n\t\treturn '<' + this.main.code + ', ' + seqToCode(this.rest) + '>';\n\t}\n}\n\nexport { LayoutType, MeasureLayout, SingleMLayout, BlockMLayout, VoltaMLayout, ABAMLayout };\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 13],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 15],\n\t\t$V3 = [1, 26],\n\t\t$V4 = [1, 29],\n\t\t$V5 = [1, 28],\n\t\t$V6 = [1, 30],\n\t\t$V7 = [5, 13, 22, 27, 29],\n\t\t$V8 = [2, 15],\n\t\t$V9 = [1, 32],\n\t\t$Va = [5, 14, 21, 22, 27, 28, 29];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tmeasure_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tindex_wise_measure_layout: 6,\n\t\t\t'i:': 7,\n\t\t\t's:': 8,\n\t\t\tsegment_wise_measure_layout: 9,\n\t\t\tiw_sequence: 10,\n\t\t\tiw_item: 11,\n\t\t\trange: 12,\n\t\t\t',': 13,\n\t\t\tUNSIGNED: 14,\n\t\t\t'..': 15,\n\t\t\tsingle: 16,\n\t\t\tiw_block_item: 17,\n\t\t\tiw_volta: 18,\n\t\t\tiw_aba: 19,\n\t\t\tiw_block: 20,\n\t\t\t'[': 21,\n\t\t\t']': 22,\n\t\t\t'*': 23,\n\t\t\tiw_optional_alternates: 24,\n\t\t\tiw_alternates: 25,\n\t\t\t'{': 26,\n\t\t\t'}': 27,\n\t\t\t'<': 28,\n\t\t\t'>': 29,\n\t\t\tsw_sequence: 30,\n\t\t\tsw_item: 31,\n\t\t\tsegment: 32,\n\t\t\tsw_block_item: 33,\n\t\t\tsw_volta: 34,\n\t\t\tsw_aba: 35,\n\t\t\tsw_block: 36,\n\t\t\tsw_optional_alternates: 37,\n\t\t\tsw_alternates: 38,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: {\n\t\t\t2: 'error',\n\t\t\t5: 'EOF',\n\t\t\t7: 'i:',\n\t\t\t8: 's:',\n\t\t\t13: ',',\n\t\t\t14: 'UNSIGNED',\n\t\t\t15: '..',\n\t\t\t21: '[',\n\t\t\t22: ']',\n\t\t\t23: '*',\n\t\t\t26: '{',\n\t\t\t27: '}',\n\t\t\t28: '<',\n\t\t\t29: '>',\n\t\t},\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[4, 2],\n\t\t\t[4, 2],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 3],\n\t\t\t[10, 3],\n\t\t\t[12, 3],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[16, 1],\n\t\t\t[17, 1],\n\t\t\t[20, 3],\n\t\t\t[18, 4],\n\t\t\t[24, 0],\n\t\t\t[24, 1],\n\t\t\t[25, 3],\n\t\t\t[19, 5],\n\t\t\t[9, 1],\n\t\t\t[30, 1],\n\t\t\t[30, 2],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[32, 1],\n\t\t\t[33, 1],\n\t\t\t[36, 3],\n\t\t\t[34, 4],\n\t\t\t[37, 0],\n\t\t\t[37, 1],\n\t\t\t[38, 3],\n\t\t\t[35, 4],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.$ = root(null, $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = root('index-wise', $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tthis.$ = root('segment-wise', serialize($$[$0]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\tcase 23:\n\t\t\t\t\tif ($$[$0].length === 1 && $$[$0][0].__prototype === 'BlockMLayout') this.$ = $$[$0][0];\n\t\t\t\t\telse this.$ = blockLayout($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\tcase 24:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 7:\n\t\t\t\tcase 11:\n\t\t\t\tcase 12:\n\t\t\t\tcase 13:\n\t\t\t\tcase 14:\n\t\t\t\tcase 20:\n\t\t\t\tcase 27:\n\t\t\t\tcase 28:\n\t\t\t\tcase 29:\n\t\t\t\tcase 35:\n\t\t\t\t\tthis.$ = $$[$0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], ...$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 10:\n\t\t\t\t\tthis.$ = range($$[$0 - 2], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = singleLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 16:\n\t\t\t\tcase 31:\n\t\t\t\t\tthis.$ = blockLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 17:\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 18:\n\t\t\t\tcase 33:\n\t\t\t\t\tthis.$ = voltaBlock($$[$0 - 3], $$[$0 - 1], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 19:\n\t\t\t\tcase 34:\n\t\t\t\t\tthis.$ = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 36:\n\t\t\t\t\tthis.$ = alternates($$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 3], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\t\tthis.$ = blockLayout([$$[$0]]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 30:\n\t\t\t\t\tthis.$ = segment($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 2], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 6: 3, 7: [1, 4], 8: [1, 5], 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 17] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 6: 18, 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 9: 19, 14: $V3, 21: $V4, 28: $V5, 30: 20, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 5: [2, 5], 13: $V6 },\n\t\t\to($V7, [2, 6]),\n\t\t\to($V7, [2, 7]),\n\t\t\to($V7, [2, 11]),\n\t\t\to($V7, [2, 12]),\n\t\t\to($V7, [2, 13]),\n\t\t\to($V7, [2, 14]),\n\t\t\to($V7, $V8, { 15: [1, 31], 23: $V9 }),\n\t\t\to($V7, [2, 16]),\n\t\t\t{ 11: 33, 14: [1, 34], 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 10: 35, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [2, 1] },\n\t\t\t{ 5: [2, 3] },\n\t\t\t{ 5: [2, 4] },\n\t\t\t{ 5: [2, 23], 14: $V3, 21: $V4, 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 24]),\n\t\t\to($Va, [2, 26]),\n\t\t\to($Va, [2, 27]),\n\t\t\to($Va, [2, 28]),\n\t\t\to($Va, [2, 29]),\n\t\t\to($Va, [2, 30], { 23: [1, 37] }),\n\t\t\to($Va, [2, 31]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 31: 38, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 39, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 11: 40, 12: 41, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 14: [1, 42] },\n\t\t\t{ 20: 43, 21: $V1 },\n\t\t\t{ 13: [1, 44] },\n\t\t\t{ 13: $V8, 23: $V9 },\n\t\t\t{ 13: $V6, 22: [1, 45] },\n\t\t\to($Va, [2, 25]),\n\t\t\t{ 21: $V4, 36: 46 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 47, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 22: [1, 48], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 8]),\n\t\t\to($V7, [2, 9]),\n\t\t\to($V7, [2, 10]),\n\t\t\to($V7, [2, 19], { 24: 49, 25: 50, 26: [1, 51] }),\n\t\t\t{ 10: 52, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\to([5, 13, 22, 26, 27, 29], [2, 17]),\n\t\t\to($Va, [2, 34], { 37: 53, 38: 54, 26: [1, 55] }),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 29: [1, 56], 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to([5, 14, 21, 22, 26, 27, 28, 29], [2, 32]),\n\t\t\to($V7, [2, 18]),\n\t\t\to($V7, [2, 20]),\n\t\t\t{ 10: 57, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 13: $V6, 29: [1, 58] },\n\t\t\to($Va, [2, 33]),\n\t\t\to($Va, [2, 35]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 59, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 37]),\n\t\t\t{ 13: $V6, 27: [1, 60] },\n\t\t\to($V7, [2, 22]),\n\t\t\t{ 14: $V3, 21: $V4, 27: [1, 61], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 21]),\n\t\t\to($Va, [2, 36]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 17: [2, 1], 18: [2, 3], 19: [2, 4] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tconst root = (type, data) => ({ __prototype: 'MesaureLayout', type, data });\n\n\tconst singleLayout = (n) => ({ __prototype: 'SingleMLayout', measure: Number(n) });\n\tconst blockLayout = (seq) => ({ __prototype: 'BlockMLayout', seq });\n\tconst voltaBlock = (times, body, alternates) => ({ __prototype: 'VoltaMLayout', times: Number(times), body, alternates });\n\tconst abaBlock = (main, rest) => ({ __prototype: 'ABAMLayout', main, rest });\n\n\tconst segment = (n) => ({ segment: true, length: Number(n) });\n\n\tconst alternates = (items) =>\n\t\titems.map((item) => {\n\t\t\tif (item.__prototype === 'BlockMLayout') return item.seq;\n\n\t\t\treturn [item];\n\t\t});\n\n\tconst range = (start, end) => {\n\t\tstart = Number(start);\n\t\tend = Number(end);\n\n\t\tif (!(end >= start)) throw new Error(`invalid measure range: ${start}..${end}`);\n\n\t\treturn Array(end + 1 - start)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => singleLayout(start + i));\n\t};\n\n\tconst serializeSeq = (item, options) => {\n\t\tif (item.segment) {\n\t\t\tconst index = options.index;\n\t\t\toptions.index += item.length;\n\n\t\t\treturn Array(item.length)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => singleLayout(index + i));\n\t\t}\n\n\t\treturn [serialize(item, options)];\n\t};\n\n\tconst serialize = (item, options = { index: 1 }) => {\n\t\tconst speard = (seq) => [].concat(...seq.map((it) => serializeSeq(it, options)));\n\n\t\tswitch (item.__prototype) {\n\t\t\tcase 'BlockMLayout':\n\t\t\t\titem.seq = speard(item.seq);\n\n\t\t\t\tbreak;\n\t\t\tcase 'VoltaMLayout':\n\t\t\t\titem.body = speard(item.body);\n\t\t\t\titem.alternates = item.alternates && item.alternates.map(speard);\n\n\t\t\t\tbreak;\n\t\t\tcase 'ABAMLayout':\n\t\t\t\titem.main = serialize(item.main, options);\n\t\t\t\titem.rest = speard(item.rest);\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn item;\n\t};\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 14;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([*,\\[\\]<>{}]))/, /^(?:(([1-9])([0-9])*))/, /^(?:(([a-z])+):)/, /^(?:\\.\\.)/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3, 4, 5], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import type { MeasureLayout } from './measureLayout';\nimport * as measureLayout from './measureLayout';\nimport grammar from './grammar.jison';\nimport { recoverJSON } from '../starry/aux_/typedJSON';\n\nconst parseCode = (code: string): MeasureLayout => {\n\tconst raw = grammar.parse(code);\n\n\tif (raw?.data) return recoverJSON(raw.data, measureLayout);\n\n\treturn null;\n};\n\nexport { parseCode };\n","export interface RawItem {\n\tid: string;\n\tleftBounds: string[];\n\trightBounds: string[];\n\tconjunction: string;\n}\n\nexport enum StaffGroupType {\n\tDefault,\n\tBrace, // {}\n\tBracket, // <>\n\tSquare, // []\n}\n\nexport enum StaffConjunctionType {\n\tBlank,\n\tDashed,\n\tSolid,\n}\n\ntype StaffID = string;\n\nexport interface StaffGroup {\n\ttype: StaffGroupType;\n\tsubs?: StaffGroup[];\n\tstaff?: StaffID;\n\tlevel?: number;\n\tgrand?: boolean;\n}\n\ninterface StaffGroupTrait {\n\tgroup: StaffGroup;\n\trange: [number, number];\n\tkey: string;\n}\n\nconst singleGroup = (id: string) => ({ type: StaffGroupType.Default, staff: id });\n\nconst BOUNDS_TO_GROUPTYPE: { [bound: string]: StaffGroupType } = {\n\t'{': StaffGroupType.Brace,\n\t'}': StaffGroupType.Brace,\n\t'<': StaffGroupType.Bracket,\n\t'>': StaffGroupType.Bracket,\n\t'[': StaffGroupType.Square,\n\t']': StaffGroupType.Square,\n};\n\nconst OPEN_BOUNDS = '{<[';\nconst CLOSE_BOUNDS = '}>]';\n\nconst CONJUNCTIONS_MAP: { [conj: string]: StaffConjunctionType } = {\n\t',': StaffConjunctionType.Blank,\n\t'-': StaffConjunctionType.Solid,\n\t'.': StaffConjunctionType.Dashed,\n};\n\nconst bracketCode = (type: StaffGroupType, partial: boolean = false): ((inner: string) => string) => {\n\tif (type === StaffGroupType.Default) return (inner) => inner;\n\n\tif (partial) {\n\t\tswitch (type) {\n\t\t\tcase StaffGroupType.Brace:\n\t\t\t\treturn (inner) => `{${inner}`;\n\t\t\tcase StaffGroupType.Bracket:\n\t\t\t\treturn (inner) => `<${inner}`;\n\t\t\tcase StaffGroupType.Square:\n\t\t\t\treturn (inner) => `[${inner}`;\n\t\t\tdefault:\n\t\t\t\treturn (inner) => inner;\n\t\t}\n\t}\n\n\tswitch (type) {\n\t\tcase StaffGroupType.Brace:\n\t\t\treturn (inner) => `{${inner}}`;\n\t\tcase StaffGroupType.Bracket:\n\t\t\treturn (inner) => `<${inner}>`;\n\t\tcase StaffGroupType.Square:\n\t\t\treturn (inner) => `[${inner}]`;\n\t\tdefault:\n\t\t\treturn (inner) => inner;\n\t}\n};\n\nconst randomB64 = (): string => {\n\tconst code = btoa(Math.random().toString().substr(2)).replace(/=/g, '');\n\n\treturn code.split('').reverse().slice(0, 6).join('');\n};\n\nconst makeUniqueName = (set: Set, index: number, prefix?: string): string => {\n\tlet name = prefix;\n\tif (!name) name = index.toString();\n\telse if (set.has(name)) name += '_' + index.toString();\n\n\twhile (set.has(name)) name += '_' + randomB64();\n\n\treturn name;\n};\n\nconst makeGroupsFromRaw = (parent: StaffGroup, seq: string[]): string[] => {\n\tlet remains = seq;\n\twhile (remains.length) {\n\t\tconst word = remains.shift();\n\t\tconst bound = BOUNDS_TO_GROUPTYPE[word];\n\t\tif (bound) {\n\t\t\tif (CLOSE_BOUNDS.includes(word) && bound === parent.type) break;\n\n\t\t\tif (OPEN_BOUNDS.includes(word)) {\n\t\t\t\tconst group = { type: bound, level: Number.isFinite(parent.level) ? parent.level + 1 : 0 };\n\t\t\t\tremains = makeGroupsFromRaw(group, remains);\n\n\t\t\t\tparent.subs = parent.subs || [];\n\t\t\t\tparent.subs.push(group);\n\t\t\t}\n\t\t} else {\n\t\t\tparent.subs = parent.subs || [];\n\t\t\tparent.subs.push(singleGroup(word));\n\t\t}\n\t}\n\n\twhile (parent.type === StaffGroupType.Default && parent.subs && parent.subs.length === 1) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.type = sub.type;\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t\tparent.level = sub.level;\n\t}\n\n\twhile (parent.subs && parent.subs.length === 1 && parent.subs[0].type === StaffGroupType.Default) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t}\n\n\tparent.grand = parent.type === StaffGroupType.Brace && parent.subs && parent.subs.every((sub) => sub.staff);\n\n\treturn remains;\n};\n\nconst groupHead = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupHead(group.subs[0]);\n};\n\nconst groupTail = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupTail(group.subs[group.subs.length - 1]);\n};\n\nexport const groupKey = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return `${groupHead(group)}-${groupTail(group)}`;\n};\n\nconst groupDict = (group: StaffGroup, dict: { [key: string]: StaffGroup }): void => {\n\tdict[groupKey(group)] = group;\n\n\tif (group.subs) group.subs.forEach((sub) => groupDict(sub, dict));\n};\n\nexport interface MaskedStaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroups: StaffGroupTrait[];\n}\n\nclass StaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroup: StaffGroup;\n\tgroups: StaffGroupTrait[];\n\n\tmaskCache: Map;\n\n\tconstructor(raw: RawItem[]) {\n\t\t// make unique ids\n\t\tconst ids = new Set();\n\t\traw.forEach((item, i) => {\n\t\t\titem.id = makeUniqueName(ids, i + 1, item.id);\n\t\t\tids.add(item.id);\n\t\t});\n\t\tthis.staffIds = raw.map((item) => item.id);\n\t\tthis.conjunctions = raw.slice(0, raw.length - 1).map((item) => (item.conjunction ? CONJUNCTIONS_MAP[item.conjunction] : StaffConjunctionType.Blank));\n\n\t\t// make groups\n\t\tconst seq = [].concat(...raw.map((item) => [...item.leftBounds, item.id, ...item.rightBounds]));\n\t\tthis.group = { type: StaffGroupType.Default };\n\t\tmakeGroupsFromRaw(this.group, seq);\n\n\t\tconst dict = {};\n\t\tgroupDict(this.group, dict);\n\t\tthis.groups = Object.entries(dict).map(([key, group]) => {\n\t\t\tlet ids = key.split('-');\n\t\t\tif (ids.length === 1) ids = [ids[0], ids[0]];\n\t\t\tconst range = ids.map((id) => this.staffIds.indexOf(id));\n\n\t\t\treturn {\n\t\t\t\tgroup,\n\t\t\t\trange,\n\t\t\t\tkey,\n\t\t\t} as StaffGroupTrait;\n\t\t});\n\n\t\tthis.maskCache = new Map();\n\t}\n\n\tget stavesCount(): number {\n\t\tif (!this.staffIds) return null;\n\n\t\treturn this.staffIds.length;\n\t}\n\n\tget partGroups(): StaffGroupTrait[] {\n\t\tconst grands = this.groups.filter((g) => g.group.grand);\n\t\tconst parts = this.groups.filter((g) => {\n\t\t\tif (g.group.grand) return true;\n\n\t\t\tif (g.range[0] === g.range[1]) {\n\t\t\t\tconst index = g.range[0];\n\t\t\t\treturn !grands.some((g) => g.range[0] <= index && g.range[1] >= index);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn parts;\n\t}\n\n\tget standaloneGroups(): string[][] {\n\t\tconst groups: string[][] = [];\n\t\tconst collect = (group: StaffGroup): void => {\n\t\t\tif (group.grand) groups.push(group.subs.map((sub) => sub.staff));\n\t\t\telse if (group.staff) groups.push([group.staff]);\n\t\t\telse if (group.subs) group.subs.forEach((sub) => collect(sub));\n\t\t};\n\t\tcollect(this.group);\n\n\t\treturn groups;\n\t}\n\n\tconjunctionBetween(upStaff: number, downStaff: number): StaffConjunctionType {\n\t\tif (downStaff <= upStaff) return null;\n\n\t\tlet con = StaffConjunctionType.Solid;\n\t\tfor (let i = upStaff; i < downStaff; i++) con = Math.min(con, this.conjunctions[i]);\n\n\t\treturn con;\n\t}\n\n\tstatic makeMaskLayout(layout: StaffLayout, mask: number): MaskedStaffLayout {\n\t\tconst staffIds = layout.staffIds.filter((_, i) => mask & (1 << i));\n\t\tif (staffIds.length === layout.staffIds.length) {\n\t\t\treturn {\n\t\t\t\tstaffIds: layout.staffIds,\n\t\t\t\tconjunctions: layout.conjunctions,\n\t\t\t\tgroups: layout.groups,\n\t\t\t};\n\t\t}\n\n\t\tconst groups = layout.groups\n\t\t\t.map((g) => ({ ids: layout.staffIds.slice(g.range[0], g.range[1] + 1).filter((id) => staffIds.includes(id)), ...g }))\n\t\t\t.filter(({ ids }) => ids.length)\n\t\t\t.map(\n\t\t\t\t({ ids, ...g }) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tkey: g.key,\n\t\t\t\t\t\tgroup: g.group,\n\t\t\t\t\t\trange: [staffIds.indexOf(ids[0]), staffIds.indexOf(ids[ids.length - 1])],\n\t\t\t\t\t} as StaffGroupTrait)\n\t\t\t);\n\n\t\tconst conjunctions = staffIds.slice(0, staffIds.length - 1).map((id, i) => {\n\t\t\tconst nextId = staffIds[i + 1];\n\t\t\treturn layout.conjunctionBetween(layout.staffIds.indexOf(id), layout.staffIds.indexOf(nextId));\n\t\t});\n\n\t\treturn {\n\t\t\tstaffIds,\n\t\t\tconjunctions,\n\t\t\tgroups,\n\t\t};\n\t}\n\n\tmask(mask: number): MaskedStaffLayout {\n\t\tif (!this.maskCache.get(mask)) this.maskCache.set(mask, StaffLayout.makeMaskLayout(this, mask));\n\n\t\treturn this.maskCache.get(mask);\n\t}\n\n\t// {,}\t*\t1,1\t\t=> {,}\n\t// {,}\t*\t1,x\t\t=> {\n\t// {,}\t*\t0,x\t\t=>\n\t// {,}\t*\t0,1\t\t=> {}\n\tpartialMaskCode(bits: (1 | 0)[], withIds = false): string {\n\t\ttype Attendance = 0 | 1 | null;\n\t\tconst staffStatus = this.staffIds\n\t\t\t.map((_, i) => (i < bits.length ? bits[i] : null))\n\t\t\t.reduce((status, x, i) => {\n\t\t\t\tstatus[this.staffIds[i]] = x;\n\t\t\t\treturn status;\n\t\t\t}, {} as { [id: string]: Attendance });\n\n\t\tconst joinGroup = (group: StaffGroup): [string, boolean] => {\n\t\t\tif (group.staff) return [staffStatus[group.staff] ? group.staff : null, staffStatus[group.staff] === null];\n\n\t\t\tconst subs = group.subs.map((sub) => joinGroup(sub));\n\t\t\tconst subStr = subs\n\t\t\t\t.map((pair) => pair[0])\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(',');\n\t\t\tconst partial = subs.some(([_, partial]) => partial);\n\n\t\t\tconst code = subStr ? bracketCode(group.type, partial)(subStr) : null;\n\n\t\t\treturn [code, partial];\n\t\t};\n\n\t\tlet [code] = joinGroup(this.group);\n\t\tcode = code || '';\n\t\tif (!withIds) code = code.replace(/[_\\w]+/g, '');\n\n\t\treturn code;\n\t}\n}\n\nexport default StaffLayout;\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 15],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 17],\n\t\t$V3 = [1, 11],\n\t\t$V4 = [1, 12],\n\t\t$V5 = [1, 13],\n\t\t$V6 = [1, 24],\n\t\t$V7 = [1, 25],\n\t\t$V8 = [1, 26],\n\t\t$V9 = [5, 11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Va = [15, 16, 17, 21, 22, 23, 24],\n\t\t$Vb = [11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Vc = [5, 11, 12, 13, 21, 22, 23, 24];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tstaff_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tseq: 6,\n\t\t\tseq_id: 7,\n\t\t\tseq_br: 8,\n\t\t\tseq_con: 9,\n\t\t\tbound_left: 10,\n\t\t\t'<': 11,\n\t\t\t'[': 12,\n\t\t\t'{': 13,\n\t\t\tbound_right: 14,\n\t\t\t'>': 15,\n\t\t\t']': 16,\n\t\t\t'}': 17,\n\t\t\tbound_lefts: 18,\n\t\t\tbound_rights: 19,\n\t\t\tconjunction: 20,\n\t\t\t'-': 21,\n\t\t\t',': 22,\n\t\t\t'.': 23,\n\t\t\tID: 24,\n\t\t\tseq_bl: 25,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: { 2: 'error', 5: 'EOF', 11: '<', 12: '[', 13: '{', 15: '>', 16: ']', 17: '}', 21: '-', 22: ',', 23: '.', 24: 'ID' },\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[6, 0],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[18, 1],\n\t\t\t[18, 2],\n\t\t\t[19, 1],\n\t\t\t[19, 2],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[7, 1],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[25, 1],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[9, 1],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t$$[$0].next();\n\n\t\t\t\t\tthis.$ = $$[$0].toJSON();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = new Seq();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13:\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 14:\n\t\t\t\tcase 16:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 20:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.i($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 23:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\tcase 24:\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.bl($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\tcase 27:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 28:\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 29:\n\t\t\t\tcase 30:\n\t\t\t\tcase 31:\n\t\t\t\t\t$$[$0 - 1].tip.br($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.con($$[$0]);\n\t\t\t\t\tthis.$.next();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 33:\n\t\t\t\tcase 34:\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\t$$[$0 - 1].tip.con($$[$0]);\n\t\t\t\t\t$$[$0 - 1].next();\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 5: [2, 3], 6: 3, 7: 4, 8: 5, 9: 6, 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 10, 20: 9, 21: $V3, 22: $V4, 23: $V5, 24: [1, 7], 25: 8 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 18] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 5: [2, 4], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 22, 19: 20, 20: 21, 21: $V3, 22: $V4, 23: $V5, 24: [1, 19] },\n\t\t\t{ 5: [2, 5], 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 29, 20: 28, 21: $V3, 22: $V4, 23: $V5, 24: [1, 27] },\n\t\t\t{ 5: [2, 6], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 33, 19: 31, 20: 32, 21: $V3, 22: $V4, 23: $V5, 24: [1, 30] },\n\t\t\to($V9, [2, 20]),\n\t\t\t{ 14: 23, 15: $V6, 16: $V7, 17: $V8, 19: 35, 20: 36, 21: $V3, 22: $V4, 23: $V5, 24: [1, 34] },\n\t\t\to($V9, [2, 32]),\n\t\t\to($Va, [2, 25], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 17]),\n\t\t\to($V9, [2, 18]),\n\t\t\to($V9, [2, 19]),\n\t\t\to($Vb, [2, 13]),\n\t\t\to($Vb, [2, 7]),\n\t\t\to($Vb, [2, 8]),\n\t\t\to($Vb, [2, 9]),\n\t\t\t{ 1: [2, 1] },\n\t\t\to($V9, [2, 21]),\n\t\t\to($Vc, [2, 29], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 33]),\n\t\t\to($Va, [2, 26], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 15]),\n\t\t\to($V9, [2, 10]),\n\t\t\to($V9, [2, 11]),\n\t\t\to($V9, [2, 12]),\n\t\t\to($V9, [2, 23]),\n\t\t\to($V9, [2, 35]),\n\t\t\to($Va, [2, 27], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 24]),\n\t\t\to($Vc, [2, 31], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 36]),\n\t\t\to($Va, [2, 28], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 22]),\n\t\t\to($Vc, [2, 30], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 34]),\n\t\t\to($Vb, [2, 14]),\n\t\t\to($V9, [2, 16]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 18: [2, 1] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tclass Item {\n\t\tconstructor() {\n\t\t\tthis.id = null;\n\t\t\tthis.leftBounds = [];\n\t\t\tthis.rightBounds = [];\n\t\t\tthis.conjunction = null;\n\t\t}\n\n\t\ti(id) {\n\t\t\tthis.id = id;\n\t\t\treturn this;\n\t\t}\n\n\t\tbl(leftBounds) {\n\t\t\tthis.leftBounds = leftBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tbr(rightBounds) {\n\t\t\tthis.rightBounds = rightBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tcon(conjunction) {\n\t\t\tthis.conjunction = conjunction;\n\t\t\treturn this;\n\t\t}\n\t}\n\n\tclass Seq {\n\t\tconstructor() {\n\t\t\tthis.body = [];\n\t\t\tthis.tip = new Item();\n\t\t}\n\n\t\tnext() {\n\t\t\tthis.body.push(this.tip);\n\t\t\tthis.tip = new Item();\n\t\t\treturn this;\n\t\t}\n\n\t\ttoJSON() {\n\t\t\treturn this.body;\n\t\t}\n\t}\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 24;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([-,.\\[\\]<>{}]))/, /^(?:([a-zA-Z_0-9]+))/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\n// if (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import StaffLayout from './staffLayout';\nimport grammar from './grammar.jison';\n\nconst parseCode = (code: string): StaffLayout => {\n\tconst raw = grammar.parse(code);\n\n\treturn new StaffLayout(raw);\n};\n\nexport { parseCode };\n","//import { staffSvg } from \"@kelvinnxu/lotus\";\n\nimport { SemanticType, SemanticPoint, /*glyphSemanticMapping, glyphCenters,*/ SYSTEM_SEMANTIC_TYPES, Point } from './semanticPoint';\nimport { SimpleClass } from './aux_/typedJSON';\n\nclass SemanticGraph extends SimpleClass {\n\tstatic className = 'SemanticGraph';\n\n\tpoints: SemanticPoint[];\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\t/*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph {\n\t\tconst tokens = [].concat(...staff.measures.map(measure => measure.tokens));\n\n\t\tconst voltaRightXs = [];\n\n\t\tconst points = [];\n\t\ttokens.forEach(token => {\n\t\t\tconst def = hashTable[token.hash];\n\n\t\t\tif (token.glyph) {\n\t\t\t\tconst glyph = token.glyph as string;\n\t\t\t\tlet semantic = null;\n\n\t\t\t\tconst isKey = /^\\\\key/.test(token.source) || token.is(\"KEY\");\n\t\t\t\tlet { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 };\n\t\t\t\tif (token.scale2) {\n\t\t\t\t\tcx *= token.scale2.x;\n\t\t\t\t\tcy *= token.scale2.y;\n\t\t\t\t}\n\n\t\t\t\tlet x = token.x + cx;\n\t\t\t\tconst y = token.y + cy;\n\n\t\t\t\tswitch (glyph) {\n\t\t\t\tcase \"rests.0\":\n\t\t\t\t\tif (/^R/.test(token.source))\n\t\t\t\t\t\tsemantic = \"Rest0W\";\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Rest0\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.flat\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.natural\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.sharp\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dots.dot\":\n\t\t\t\t\tif (token.is(\"VOLTA\")) {\n\t\t\t\t\t\tx += 0.24;\t// dot glyph center X offset\n\t\t\t\t\t\tif (token.is(\"LEFT\"))\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaLeft;\n\t\t\t\t\t\telse if (token.is(\"RIGHT\")) {\n\t\t\t\t\t\t\tvoltaRightXs.push(x);\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaRight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Dot\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"zero\":\n\t\t\t\tcase \"one\":\n\t\t\t\tcase \"two\":\n\t\t\t\tcase \"three\":\n\t\t\t\tcase \"four\":\n\t\t\t\tcase \"five\":\n\t\t\t\tcase \"six\":\n\t\t\t\tcase \"seven\":\n\t\t\t\tcase \"eight\":\n\t\t\t\tcase \"nine\": {\n\t\t\t\t\tconst upper = glyph[0].toUpperCase() + glyph.substr(1);\n\t\t\t\t\tsemantic = token.is(\"TIME_SIG\") ? \"Timesig\" + upper : upper;\n\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t}\n\n\t\t\t\tif (semantic) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (token.is(\"TEMPO_NOTEHEAD\")) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.TempoNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// grace noteheads\n\t\t\t\tif (token.is(\"NOTEHEAD\") && Number.isFinite(token.scale) && token.scale < 0.75) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.GraceNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// semantic from token symbol\n\t\t\tlet semantic = null;\n\t\t\tconst cx = 0;\n\t\t\tlet cy = 0;\n\t\t\tif (token.is(\"OCTAVE\")) {\n\t\t\t\tif (token.is(\"_8\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift8;\n\t\t\t\t\tcy = token.is(\"B\") ? -0.7512 : -0.7256;\n\t\t\t\t}\n\t\t\t\telse if (token.is(\"CLOSE\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift0;\n\t\t\t\t\tcy = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (/^flags/.test(token.glyph)) {\n\t\t\t\tlet direction = 0;\n\t\t\t\tif (/\\.u\\d/.test(token.glyph))\n\t\t\t\t\tdirection = 1;\n\t\t\t\tif (/\\.d\\d/.test(token.glyph))\n\t\t\t\t\tdirection = -1;\n\t\t\t\tif (direction) {\n\t\t\t\t\tconst [n] = token.glyph.match(/\\d+/);\n\t\t\t\t\tconst flagCount = Number(n) - 2;\n\t\t\t\t\t//console.log(\"flags:\", token.glyph, flagCount);\n\t\t\t\t\tfor (let i = 0; i < flagCount; ++i) {\n\t\t\t\t\t\tconst y = token.y + (i + 0.5) * direction;\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//console.log(\"flags.1:\", token.x, y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"SLUR\")) {\n\t\t\t\tconst d = def && def.d;\n\t\t\t\tif (d) {\n\t\t\t\t\tconst numbers = d.match(/-?[\\d.]+/g).map(Number);\n\t\t\t\t\t//console.log(\"slur:\", numbers);\n\t\t\t\t\tconst x1 = token.x + numbers[0];\n\t\t\t\t\tconst y1 = token.y + numbers[1];\n\t\t\t\t\tconst x2 = token.x + numbers[6];\n\t\t\t\t\tconst y2 = token.y + numbers[7];\n\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurBegin,\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1,\n\t\t\t\t\t});\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurEnd,\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"NOTE_STEM\")) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.vline_Stem,\n\t\t\t\t\tx: token.x + def.width / 2,\n\t\t\t\t\ty: token.y,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: token.y,\n\t\t\t\t\t\ty2: token.y + token.height,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (token.is(\"TEXT\") || token.is(\"CHORD_TEXT\")) {\n\t\t\t\tif (/\\S/.test(token.text)) {\n\t\t\t\t\t// NOTE: text rect computation is delayed to sheet rendering\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\tindex: token.index,\n\t\t\t\t\t\t\ttext: token.text,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx: token.x + cx,\n\t\t\t\t\ty: token.y + cy,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// beams\n\t\tconst stems = tokens.filter(token => token.is(\"NOTE_STEM\")).map(stem => ({\n\t\t\tx: stem.x + stem.width / 2,\n\t\t\ty1: stem.y,\n\t\t\ty2: stem.y + stem.height,\n\t\t}));\n\t\tconst beams = tokens.filter(token => token.is(\"NOTETAIL\") && token.is(\"JOINT\"))\n\t\t\t.map(beam => {\n\t\t\t\tconst def = hashTable[beam.hash];\n\t\t\t\tconst points = def && def.points;\n\t\t\t\tif (points) {\n\t\t\t\t\tconst floats = points.split(\" \").map(Number);\n\t\t\t\t\tconst x1 = beam.x + floats[4];\n\t\t\t\t\tconst x2 = beam.x + floats[0];\n\t\t\t\t\tconst y1 = beam.y + (floats[5] + floats[7]) / 2;\n\t\t\t\t\tconst y2 = beam.y + (floats[1] + floats[3]) / 2;\n\t\t\t\t\tconst k = (y2 - y1) / (x2 - x1);\n\n\t\t\t\t\treturn { x1, x2, y1, y2, k, capital: beam.is(\"CAPITAL_BEAM\") };\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}).filter(Boolean);\n\t\t//console.log(\"beams:\", beams);\n\t\tbeams.forEach(beam => {\n\t\t\tconst innerStems = stems.filter(stem => stem.x > beam.x1 - 0.2 && stem.x < beam.x2 + 0.2);\n\t\t\t//console.log(\"innerStems:\", beam, innerStems);\n\n\t\t\tlet lines = 0;\n\t\t\tinnerStems.forEach(stem => {\n\t\t\t\tconst beamY = beam.y1 + (stem.x - beam.x1) * beam.k;\n\t\t\t\t//console.log(\"beamY:\", beamY, Math.min(Math.abs(beamY - beam.y1), Math.abs(beamY - beam.y2)));\n\t\t\t\tif (beamY >= stem.y1 - 0.1 && beamY <= stem.y2 + 0.1) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t});\n\n\t\t\t\t\t++lines;\n\n\t\t\t\t\t// beam semantics\n\t\t\t\t\tif (beam.capital) {\n\t\t\t\t\t\tlet semantic = SemanticType.BeamContinue;\n\t\t\t\t\t\tif (Math.abs(stem.x - beam.x1) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamLeft;\n\t\t\t\t\t\telse if (Math.abs(stem.x - beam.x2) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamRight;\n\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!lines)\n\t\t\t\tconsole.warn(\"empty beam:\", beam, innerStems, stems);\n\t\t\t//else if (lines < 2)\n\t\t\t//\tconsole.debug(\"single beam:\", beam, innerStems, stems);\n\t\t});\n\n\t\t// wedges (crescendo & decrescendo)\n\t\tconst crescendos = tokens.filter(token => token.is(\"WEDGE CRESCENDO TOP\"));\n\t\tconst crescendoBottoms = tokens.filter(token => token.is(\"WEDGE CRESCENDO BOTTOM\"));\n\t\tconst decrescendos = tokens.filter(token => token.is(\"WEDGE DECRESCENDO TOP\"));\n\t\tconst decrescendoBottoms = tokens.filter(token => token.is(\"WEDGE DECRESCENDO BOTTOM\"));\n\t\tcrescendos.forEach(line => {\n\t\t\tconst partner = crescendoBottoms.find(b => b.x === line.x && Math.abs(b.y - line.y) < 0.06);\n\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.CrescendoBegin,\n\t\t\t\t\tx: line.x,\n\t\t\t\t\ty: line.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired crescendo:\", line, crescendoBottoms);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.CrescendoEnd,\n\t\t\t\tx: line.x + line.target.x,\n\t\t\t\ty: line.y + line.target.y,\n\t\t\t});\n\t\t});\n\t\tdecrescendos.forEach(line => {\n\t\t\tconst partner = decrescendoBottoms.find(b => b.x + b.target.x === line.x + line.target.x && Math.abs(b.y + b.target.y - (line.y + line.target.y)) < 0.06);\n\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.DecrescendoBegin,\n\t\t\t\tx: line.x,\n\t\t\t\ty: line.y,\n\t\t\t});\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.DecrescendoEnd,\n\t\t\t\t\tx: line.x + line.target.x,\n\t\t\t\t\ty: line.y + line.target.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired decrescendo:\", line, decrescendoBottoms);\n\t\t});\n\n\t\t// TODO: volta alternative\n\n\t\t// measure bars\n\t\tconst measureSeparators = staff.tokens.filter(token => token.is(\"MEASURE_SEPARATOR\"));\n\t\tconst singleBars = [];\n\t\tconst groupBars = [];\n\n\t\tfor (let i = 0; i < measureSeparators.length; ++i) {\n\t\t\tconst bar = measureSeparators[i];\n\t\t\tconst nextBar = measureSeparators[i + 1];\n\t\t\tconst inteval = nextBar ? nextBar.x - bar.x : Infinity;\n\n\t\t\tif (inteval < 1) {\n\t\t\t\tgroupBars.push([bar, nextBar]);\n\t\t\t\t++i;\n\t\t\t}\n\t\t\telse\n\t\t\t\tsingleBars.push(bar);\n\t\t};\n\t\t//console.log(\"bars:\", singleBars, groupBars);\n\n\t\tsingleBars.forEach(bar => {\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx: bar.x + bar.sw / 2,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tgroupBars.forEach(group => {\n\t\t\tlet x = (group[0].x + group[1].x) / 2;\n\t\t\tconst bold0 = group[0].is(\"BOLD\");\n\t\t\tconst bold1 = group[1].is(\"BOLD\");\n\n\t\t\tlet semantic = null;\n\t\t\tif (!bold0 && bold1) {\n\t\t\t\tx = group[0].x;\n\n\t\t\t\tif (!voltaRightXs.some(vx => x - vx < 2))\n\t\t\t\t\tsemantic = SemanticType.vline_BarTerminal;\n\t\t\t}\n\t\t\telse if (bold0 && !bold1)\n\t\t\t\tx = group[1].x;\n\t\t\telse if (!bold0 && !bold1)\n\t\t\t\tsemantic = SemanticType.vline_BarSegment;\n\n\t\t\t//console.log(\"group:\", group[0].x, group[1].x, x);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx,\n\t\t\t\t\ty: 0,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: -2,\n\t\t\t\t\t\ty2: 2,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}*/\n\n\tstatic fromPoints(points: SemanticPoint[] = []): SemanticGraph {\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}\n\n\tgetLayer(semantic: SemanticType): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic);\n\t}\n\n\tgetConfidentLayer(semantic: SemanticType, threshold: number): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic && (!Number.isFinite(p.confidence) || p.confidence >= threshold));\n\t}\n\n\tgetSystemPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\tgetStaffPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => !SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\toffset(x: number, y: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x += x;\n\t\t\tpoint.y += y;\n\t\t});\n\t}\n\n\tscale(factor: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x *= factor;\n\t\t\tpoint.y *= factor;\n\t\t});\n\t}\n\n\t// multipy 3x2 matrix\n\ttransform(matrix: [number, number][]): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tlet x = point.x * matrix[0][0] + point.y * matrix[1][0] + matrix[2][0];\n\t\t\tconst y = point.x * matrix[0][1] + point.y * matrix[1][1] + matrix[2][1];\n\n\t\t\tif (point.extension) {\n\t\t\t\tif (Number.isFinite(point.extension.y1)) {\n\t\t\t\t\tconst y1 = point.x * matrix[0][1] + point.extension.y1 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tconst y2 = point.x * matrix[0][1] + point.extension.y2 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tx = point.x * matrix[0][0] + (point.extension.y1 + point.extension.y2) * 0.5 * matrix[1][0] + matrix[2][0];\n\n\t\t\t\t\tpoint.extension.y1 = y1;\n\t\t\t\t\tpoint.extension.y2 = y2;\n\t\t\t\t}\n\n\t\t\t\tif (Number.isFinite(point.extension.width)) {\n\t\t\t\t\tconst scaling = Math.sqrt(matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);\n\t\t\t\t\tpoint.extension.width *= scaling;\n\t\t\t\t\tpoint.extension.height *= scaling;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpoint.x = x;\n\t\t\tpoint.y = y;\n\t\t});\n\t}\n}\n\nexport { SemanticGraph };\n","import { SimpleClass } from './aux_/typedJSON';\nimport {\n\tAdditionalLineStack,\n\tChordColumn,\n\tChordRect,\n\tEventFeature,\n\tEventMeasureColumn,\n\tEventSystem,\n\tPageLayout,\n\tRect,\n\tSourceImageFile,\n\tTextType,\n\tVLine,\n} from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { SemanticGraph } from './semanticGraph';\nimport { hashPageSemanticPoint, hashSemanticPoint, NOTEHEAD_WIDTHS, SemanticPoint, SemanticType } from './semanticPoint';\nimport { AccessoryDirection, ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, TempoTerm, TremoloLink } from './term';\nimport {\n\tTextToken,\n\tToken,\n\tTokenAccessories,\n\tTokenBeams,\n\tTokenClefs,\n\tTokenDirectionless,\n\tTokenDots,\n\tTokenFlags,\n\tTokenNoteheads,\n\tTokenRests,\n\tTokenTimesigs,\n\tTokenType,\n\tTOKEN_Y_FIXED,\n\tTOKEN_Y_ROUND,\n} from './token';\nimport { distance2D, roundNumber, solveOverlapping, trans23 } from './utils';\n\ntype ChordsFeeder = (si: number, mi: number) => ChordColumn[];\ntype ColumnProcessor = (column: EventMeasureColumn) => EventMeasureColumn;\n\nconst CHORD_X_TOLERANCE = 0.2;\n//const EVENT_X_TOLERANCE = 0.8;\n\nconst STEM_LENGTH_MAX = 6;\n\nconst INDENT_THRESHOLD = 2;\n\nconst MEASURE_SEMANTICS = [\n\tSemanticType.ClefG,\n\tSemanticType.ClefF,\n\tSemanticType.ClefC,\n\tSemanticType.TimesigC44,\n\tSemanticType.TimesigC22,\n\tSemanticType.TimesigZero,\n\tSemanticType.TimesigOne,\n\tSemanticType.TimesigTwo,\n\tSemanticType.TimesigThree,\n\tSemanticType.TimesigFour,\n\tSemanticType.TimesigFive,\n\tSemanticType.TimesigSix,\n\tSemanticType.TimesigSeven,\n\tSemanticType.TimesigEight,\n\tSemanticType.TimesigNine,\n\tSemanticType.OctaveShift8va,\n\tSemanticType.OctaveShift8vb,\n\tSemanticType.OctaveShift0,\n\tSemanticType.Zero,\n\tSemanticType.One,\n\tSemanticType.Two,\n\tSemanticType.Three,\n\tSemanticType.Four,\n\tSemanticType.Five,\n\tSemanticType.Six,\n\tSemanticType.Seven,\n\tSemanticType.Eight,\n\tSemanticType.Nine,\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n\tSemanticType.Rest0W,\n\tSemanticType.RestM1,\n\tSemanticType.SlurBegin,\n\tSemanticType.SlurEnd,\n\tSemanticType.Dot,\n\tSemanticType.f,\n\tSemanticType.p,\n\tSemanticType.m,\n\tSemanticType.n,\n\tSemanticType.r,\n\tSemanticType.s,\n\tSemanticType.z,\n\tSemanticType.ScriptFermata,\n\tSemanticType.ScriptShortFermata,\n\tSemanticType.ScriptSforzato,\n\tSemanticType.ScriptStaccato,\n\tSemanticType.ScriptStaccatissimo,\n\tSemanticType.ScriptTurn,\n\tSemanticType.ScriptTrill,\n\tSemanticType.ScriptSegno,\n\tSemanticType.ScriptCoda,\n\tSemanticType.ScriptArpeggio,\n\tSemanticType.ScriptPrall,\n\tSemanticType.ScriptMordent,\n\tSemanticType.ScriptMarcato,\n\tSemanticType.ScriptTenuto,\n\tSemanticType.ScriptPortato,\n\tSemanticType.PedalStar,\n\tSemanticType.PedalPed,\n\tSemanticType.GraceNotehead,\n\tSemanticType.BeamLeft,\n\tSemanticType.BeamRight,\n\tSemanticType.BeamContinue,\n\tSemanticType.CrescendoBegin,\n\tSemanticType.CrescendoEnd,\n\tSemanticType.DecrescendoBegin,\n\tSemanticType.DecrescendoEnd,\n\tSemanticType.TremoloLeft,\n\tSemanticType.TremoloRight,\n\tSemanticType.TremoloMiddle,\n];\n\nconst STAFF_LINED_SEMANTICS = [\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n];\n\nconst LINED_INTERVAL_SEMANTICS = [SemanticType.SignLined, SemanticType.SignInterval];\n\nconst NOTEHEAD_FOR_STEM_SEMANTICS = [SemanticType.NoteheadS1, SemanticType.NoteheadS2];\n\nconst KEYACC_CANDIDATE_SEMANTICS = {\n\tAccSharp: TokenType.KeySharp,\n\tAccNatural: TokenType.KeyNatural,\n\tAccFlat: TokenType.KeyFlat,\n};\n\nconst NOTEHEAD_TABLE: { [key: string]: { [key: string]: SemanticType } } = {\n\t[SemanticType.NoteheadS1]: {\n\t\tup: SemanticType.NoteheadS1stemU,\n\t\tdown: SemanticType.NoteheadS1stemD,\n\t},\n\t[SemanticType.NoteheadS2]: {\n\t\tup: SemanticType.NoteheadS2stemU,\n\t\tdown: SemanticType.NoteheadS2stemD,\n\t},\n};\n\nconst REST_SEMANTICS = [\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n];\n\nconst TOKEN_TO_STEMBEAM = {\n\t[TokenType.BeamLeft]: 'Open',\n\t[TokenType.BeamRight]: 'Close',\n\t[TokenType.BeamContinue]: 'Continue',\n};\n\nconst TEXT_TYPE_ALIAS = {\n\tAlter1: TextType.Alternation1,\n\tAlter2: TextType.Alternation2,\n};\n\ninterface StaffPosition {\n\ty: number;\n\tradius: number;\n}\n\ninterface TextArea {\n\tscore: number;\n\tcx: number;\n\tcy: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\ttype: string;\n\ttheta: number;\n\tfeature_dict: Record;\n}\n\ntype Stem = VLine & { direction: 'u' | 'd' };\n\nconst noteheadsXPivot = (xs: number[], direction: 'u' | 'd' | null): number => {\n\tswitch (xs.length) {\n\t\tcase 0:\n\t\t\treturn undefined;\n\n\t\tcase 1:\n\t\t\treturn xs[0];\n\n\t\tcase 2:\n\t\t\treturn direction === 'u' ? Math.min(...xs) : Math.max(...xs);\n\n\t\tdefault: {\n\t\t\tconst mean = xs.reduce((sum, x) => sum + x, 0) / xs.length;\n\t\t\txs.sort((x1, x2) => Math.abs(x1 - mean) - Math.abs(x2 - mean));\n\n\t\t\treturn noteheadsXPivot(xs.slice(0, xs.length - 1), direction);\n\t\t}\n\t}\n};\n\nconst noteheadsPivot = (nhs: Token[]): number =>\n\tnoteheadsXPivot(\n\t\tnhs.map((nh) => (Number.isFinite(nh.pivotX) ? nh.pivotX : nh.x)),\n\t\tnhs[0].direction\n\t);\n\nclass Measure extends SimpleClass {\n\tstatic className = 'Measure';\n\tstatic blackKeys = ['tokens', 'antiTokens'];\n\n\tleft: number;\n\twidth: number;\n\theight: number;\n\n\talternative: boolean;\n\n\ttokens: Token[];\n\tantiTokens: Token[];\n\n\tbarTypes: Record;\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.tokens = this.tokens || [];\n\t\tthis.antiTokens = this.antiTokens || [];\n\t\tthis.barTypes = this.barTypes || {};\n\t}\n\n\tget right(): number {\n\t\treturn this.left + this.width;\n\t}\n\n\tget noteheads(): Token[] {\n\t\treturn this.tokens.filter((t) => t.isNotehead).sort((n1, n2) => n1.x - n2.x);\n\t}\n\n\tget chordRects(): ChordRect[] {\n\t\tconst noteheads = this.noteheads.filter((nh) =>\n\t\t\t[TokenType.NoteheadS0, TokenType.NoteheadS1stemU, TokenType.NoteheadS2stemU, TokenType.NoteheadS1stemD, TokenType.NoteheadS2stemD].includes(nh.type)\n\t\t);\n\n\t\tlet nulN = 0;\n\n\t\tconst nhmap: Record = noteheads.reduce((map, nh) => {\n\t\t\tconst tip = nh.tip ? `${nh.tip.x}|${nh.tip.y}` : `nul${nulN}`;\n\t\t\tlet key = `${nh.type}|${tip}`;\n\n\t\t\tif (!nh.tip && map[key]) {\n\t\t\t\tif (!map[key].some((hh) => Math.abs(hh.x - nh.x) < NOTEHEAD_WIDTHS.NoteheadS0)) {\n\t\t\t\t\t++nulN;\n\t\t\t\t\tkey = `${nh.type}|nul${nulN}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmap[key] = map[key] || [];\n\t\t\tmap[key].push(nh);\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(nhmap).map((nhs) => {\n\t\t\tconst left = Math.min(...nhs.map((nh) => nh.x));\n\t\t\tconst right = Math.max(...nhs.map((nh) => nh.x));\n\t\t\tconst top = Math.min(...nhs.map((nh) => nh.y));\n\t\t\tconst bottom = Math.max(...nhs.map((nh) => nh.y));\n\n\t\t\tconst nh0 = nhs[0];\n\n\t\t\tconst stemX = nh0 && nh0.tip ? nh0.tip.x : left;\n\n\t\t\tlet x = left;\n\t\t\tlet width = right - left;\n\t\t\tlet stemDirection = null;\n\n\t\t\tswitch (nh0.type) {\n\t\t\t\tcase TokenType.NoteheadS0:\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS0 / 2;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemU:\n\t\t\t\tcase TokenType.NoteheadS2stemU:\n\t\t\t\t\tstemDirection = 'u';\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS1;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemD:\n\t\t\t\tcase TokenType.NoteheadS2stemD:\n\t\t\t\t\tstemDirection = 'd';\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx,\n\t\t\t\twidth,\n\t\t\t\tstemX,\n\t\t\t\tstemDirection,\n\t\t\t\ttop,\n\t\t\t\tbottom,\n\t\t\t\ttip: nh0.tip,\n\t\t\t};\n\t\t});\n\t}\n\n\tget timeWarped(): boolean {\n\t\treturn this.tokens && this.tokens.some((token) => token.timeWarped);\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\tconst chords = this.getChords();\n\t\tconst up = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y <= -3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.ceil(Math.min(...chord.ys)) + 2,\n\t\t\t}));\n\t\tconst down = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y >= 3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.floor(Math.max(...chord.ys)) - 2,\n\t\t\t}));\n\n\t\treturn [...up, ...down].map((stack) => ({\n\t\t\tleft: stack.left - 0.28,\n\t\t\tright: stack.right + 0.28,\n\t\t\tn: stack.n,\n\t\t}));\n\t}\n\n\tgetChords(): ChordColumn[] {\n\t\tconst flags = this.tokens.filter((t) => TokenFlags.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\t\tconst beams = this.tokens.filter((t) => TokenBeams.includes(t.type));\n\n\t\tconst chordRcs = this.chordRects\n\t\t\t.map((rect) => {\n\t\t\t\tconst noteheads = this.noteheads.filter(\n\t\t\t\t\t(nh) =>\n\t\t\t\t\t\tnh.direction === rect.stemDirection &&\n\t\t\t\t\t\tnh.left >= rect.x &&\n\t\t\t\t\t\tnh.right <= rect.x + rect.width + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tnh.y >= rect.top &&\n\t\t\t\t\t\tnh.y <= rect.bottom\n\t\t\t\t);\n\t\t\t\tnoteheads.sort((n1, n2) => n2.y - n1.y);\n\t\t\t\tconst ys = noteheads.map((nh) => nh.y);\n\t\t\t\tconst noteIds = noteheads.map((nh) => nh.id);\n\n\t\t\t\tconst division = noteheads.reduce((d, nh) => Math.max(d, nh.division), 0);\n\n\t\t\t\treturn {\n\t\t\t\t\trect,\n\t\t\t\t\tleft: rect.x,\n\t\t\t\t\tright: rect.x + rect.width,\n\t\t\t\t\tpivotX: noteheadsPivot(noteheads),\n\t\t\t\t\tys,\n\t\t\t\t\ttip: rect.tip,\n\t\t\t\t\tnoteIds,\n\t\t\t\t\tdivision,\n\t\t\t\t\tdots: null,\n\t\t\t\t\trest: false,\n\t\t\t\t\tstemDirection: rect.stemDirection,\n\t\t\t\t\tbeam: null,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((c1, c2) => c2.left - c1.left);\n\n\t\tconst accs = new Set();\n\n\t\tconst chords = chordRcs.map(({ rect, ...chord }) => {\n\t\t\tif (chord.division >= 1) {\n\t\t\t\t// NOTE: notehead-s1 may have flags too\n\t\t\t\tconst flagRange = [rect.bottom, rect.top];\n\t\t\t\tswitch (rect.stemDirection) {\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\tflagRange[0] = rect.tip ? rect.tip.y - 0.2 : rect.top - STEM_LENGTH_MAX - 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tflagRange[1] = rect.tip ? rect.tip.y + 0.2 : rect.bottom + STEM_LENGTH_MAX + 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nearbyFlags = flags.filter(\n\t\t\t\t\t(flag) =>\n\t\t\t\t\t\t!accs.has(flag.id) &&\n\t\t\t\t\t\tflag.x > rect.stemX - CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.x < rect.stemX + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.y > flagRange[0] &&\n\t\t\t\t\t\tflag.y < flagRange[1]\n\t\t\t\t);\n\t\t\t\tchord.division = nearbyFlags.reduce((d, flag) => Math.max(d, flag.division), chord.division);\n\n\t\t\t\tnearbyFlags.forEach((flag) => accs.add(flag.id));\n\n\t\t\t\tif (chord.division >= 3) {\n\t\t\t\t\tconst beamToken = rect.tip && beams.find((t) => Math.abs(rect.tip.x - t.x) < 0.3 && Math.abs(rect.tip.y - t.y) < 0.7);\n\t\t\t\t\tif (beamToken) chord.beam = TOKEN_TO_STEMBEAM[beamToken.type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst nearbyDots = dots.filter(\n\t\t\t\t(dot) =>\n\t\t\t\t\t!accs.has(dot.id) &&\n\t\t\t\t\tdot.x > rect.x + rect.width - 0.2 &&\n\t\t\t\t\tdot.x < rect.x + rect.width + 1.2 &&\n\t\t\t\t\tdot.y > rect.top - 1 &&\n\t\t\t\t\tdot.y <= rect.bottom + 0.5\n\t\t\t);\n\t\t\tchord.dots = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\tnearbyDots.forEach((dot) => accs.add(dot.id));\n\n\t\t\treturn chord;\n\t\t});\n\n\t\tchords.reverse();\n\n\t\treturn chords;\n\t}\n\n\tgetRests(): ChordColumn[] {\n\t\tconst rests = this.tokens.filter((t) => TokenRests.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\n\t\treturn rests.map((rest) => {\n\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > rest.x + 0.5 && dot.x < rest.x + 2 && dot.y > rest.y - 1 && dot.y < rest.y + 0.5);\n\t\t\tconst dotValue = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\treturn {\n\t\t\t\tleft: rest.x - 0.75,\n\t\t\t\tright: rest.x + 0.75,\n\t\t\t\tpivotX: rest.x,\n\t\t\t\trest: true,\n\t\t\t\tys: [rest.y],\n\t\t\t\tnoteIds: [rest.id],\n\t\t\t\tdots: dotValue,\n\t\t\t\tdivision: rest.division,\n\t\t\t\tstemDirection: null,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\treturn [...this.getChords(), ...this.getRests()].sort((e1, e2) => e1.left - e2.left);\n\t}\n\n\tgetContexts(fields = {}): ContextedTerm[] {\n\t\treturn this.tokens\n\t\t\t.filter((t) => t.isContexted)\n\t\t\t.sort((n1, n2) => n1.x - n2.x)\n\t\t\t.map(\n\t\t\t\t(token) =>\n\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\ttokenType: token.type,\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t})\n\t\t\t);\n\t}\n\n\tassignAccessoriesOnEvents(events: ChordColumn[]): void {\n\t\tevents.forEach((event) => (event.accessories = event.accessories || []));\n\n\t\tconst accessories = this.tokens.filter((token) => TokenAccessories.includes(token.type));\n\t\t//console.log(\"accessories:\", accessories);\n\t\taccessories.forEach((accessory) => {\n\t\t\tconst relatedEvents = events.filter((event) => accessory.x > event.left - 1 && accessory.x < event.right + 1);\n\n\t\t\tif (relatedEvents.length > 0) {\n\t\t\t\tlet owner = relatedEvents[0];\n\t\t\t\tif (relatedEvents.length > 1) {\n\t\t\t\t\towner = relatedEvents\n\t\t\t\t\t\t.map((event) => ({ event, d: Math.min(...event.ys.map((y) => Math.abs(y - accessory.y))) }))\n\t\t\t\t\t\t.sort(({ d: d1 }, { d: d2 }) => d1 - d2)\n\t\t\t\t\t\t.map(({ event }) => event)[0];\n\t\t\t\t}\n\t\t\t\t//console.log(\"relatedEvents:\", accessory, owner);\n\n\t\t\t\tlet direction = accessory.y > Math.max(...owner.ys) ? AccessoryDirection.Down : AccessoryDirection.Up;\n\t\t\t\tif (TokenDirectionless.includes(accessory.type)) direction = null;\n\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: accessory.type,\n\t\t\t\t\tid: accessory.id,\n\t\t\t\t\tdirection,\n\t\t\t\t\tx: accessory.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone accessory:\", accessory.type);\n\t\t});\n\n\t\t// arpeggio\n\t\tconst sortEvents = [...events];\n\t\tsortEvents.sort((e1, e2) => e1.left - e2.left);\n\n\t\tconst arpeggios = this.tokens.filter((token) => token.type === TokenType.ScriptArpeggio);\n\t\tarpeggios.forEach((arpeggio) => {\n\t\t\tconst owner = sortEvents.find(\n\t\t\t\t(event) => arpeggio.x < event.left && event.ys.some((y) => y < arpeggio.y + 0.25) && event.ys.some((y) => y > arpeggio.y)\n\t\t\t);\n\t\t\t//const owner = sortEvents.find(event => event.left - leftMost.left < 2 && event.ys.some(y => Math.abs(y - arpeggio.y + 0.25) < 0.5));\n\t\t\tif (owner) {\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: TokenType.ScriptArpeggio,\n\t\t\t\t\tid: arpeggio.id,\n\t\t\t\t\tx: arpeggio.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone arpeggio:\", arpeggio);\n\t\t});\n\n\t\t// grace noteheads\n\t\tconst graceNhs = this.tokens.filter((token) => token.type === TokenType.GraceNotehead);\n\t\tgraceNhs.forEach((grace) => {\n\t\t\tconst event = events.find((event) => grace.x > event.left && grace.x < event.right && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tif (event) event.grace = GraceType.Grace;\n\t\t});\n\n\t\t// tremolos\n\t\tconst tremolsLs = this.tokens.filter((token) => token.type === TokenType.TremoloLeft);\n\t\tconst tremolsRs = this.tokens.filter((token) => token.type === TokenType.TremoloRight);\n\t\tconst tremolsMs = this.tokens.filter((token) => token.type === TokenType.TremoloMiddle);\n\n\t\tconst tevents = events\n\t\t\t.filter((event) => !event.rest)\n\t\t\t.map((event) => {\n\t\t\t\tconst ys = [...event.ys];\n\t\t\t\tif (event.tip) ys.push(event.tip.y);\n\t\t\t\telse {\n\t\t\t\t\tys.push(event.ys[0] + 2);\n\t\t\t\t\tys.push(event.ys[event.ys.length - 1] - 2);\n\t\t\t\t}\n\n\t\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\t\t\t\tconst stemR = event.tip ? event.tip.x : event.right;\n\n\t\t\t\treturn {\n\t\t\t\t\tevent,\n\t\t\t\t\ttop: Math.min(...ys),\n\t\t\t\t\tbottom: Math.max(...ys),\n\t\t\t\t\tstemL,\n\t\t\t\t\tstemR,\n\t\t\t\t};\n\t\t\t});\n\n\t\ttremolsMs.forEach((tm) => {\n\t\t\tconst te = tevents.find((te) => {\n\t\t\t\tif (te.event.tip) return tm.y > te.top && tm.y < te.bottom && Math.abs(tm.x - te.event.tip.x) < 0.3;\n\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t}\n\t\t});\n\t\ttremolsLs.forEach((tl) => {\n\t\t\tconst te = tevents.find((te) => tl.y > te.top && tl.y < te.bottom && tl.x > te.stemR && tl.x < te.stemR + 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Pitcher;\n\t\t\t}\n\t\t});\n\t\ttremolsRs.forEach((tr) => {\n\t\t\tconst te = tevents.find((te) => tr.y > te.top && tr.y < te.bottom && tr.x < te.stemL && tr.x > te.stemL - 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Catcher;\n\t\t\t}\n\t\t});\n\t}\n\n\tassignFeaturesOnEvents(events: ChordColumn[], semantics: SemanticPoint[]): void {\n\t\tconst points = semantics.filter((point) => point.x > this.left && point.x < this.right);\n\t\tconst rests = points.filter((point) => REST_SEMANTICS.includes(point.semantic));\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tconst dotPs = points.filter((point) => point.semantic === SemanticType.Dot);\n\t\tconst beamLs = points.filter((points) => points.semantic === SemanticType.BeamLeft);\n\t\tconst beamMs = points.filter((points) => points.semantic === SemanticType.BeamContinue);\n\t\tconst beamRs = points.filter((points) => points.semantic === SemanticType.BeamRight);\n\t\tconst gracePs = points.filter((point) => point.semantic === SemanticType.GraceNotehead);\n\t\tconst tremoloRs = points.filter((point) => point.semantic === SemanticType.TremoloRight);\n\t\tconst stems = points.filter((point) => point.semantic === SemanticType.vline_Stem);\n\t\tconst s0 = points.filter((point) => point.semantic === SemanticType.NoteheadS0);\n\t\tconst s1 = points.filter((point) => point.semantic === SemanticType.NoteheadS1);\n\t\tconst s2 = points.filter((point) => point.semantic === SemanticType.NoteheadS2);\n\n\t\tevents.forEach((event) => {\n\t\t\tconst cx = event.tip ? event.tip.x : (event.left + event.right) / 2;\n\t\t\tconst top = event.tip ? Math.min(event.tip.y, event.ys[event.ys.length - 1]) : event.ys[event.ys.length - 1];\n\t\t\tconst bottom = event.tip ? Math.max(event.tip.y, event.ys[0]) : event.ys[0];\n\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\n\t\t\tconst divisions = [0, 0, 0, 0, 0, 0, 0];\n\t\t\tif (event.rest) {\n\t\t\t\tconst i_rests = rests.filter((point) => distance2D(point, { x: cx, y: event.ys[0] }) < 0.5);\n\t\t\t\ti_rests.forEach((r) => {\n\t\t\t\t\tconst d = REST_SEMANTICS.indexOf(r.semantic);\n\t\t\t\t\tdivisions[d] = Math.max(divisions[d], r.confidence);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst nhs = [s0, s1, s2]\n\t\t\t\t\t.map((ss) => ss.filter((nh) => nh.x > event.left && nh.x < event.right && nh.y > top - 0.25 && nh.y < bottom + 0.25))\n\t\t\t\t\t.map((ss) => Math.max(0, ...ss.map((nh) => nh.confidence)));\n\n\t\t\t\tconst i_flags = flags.filter((flag) => flag.y > top - 0.2 && flag.y < bottom + 0.2 && Math.abs(flag.x - cx) < 0.2);\n\t\t\t\ti_flags.sort((f1, f2) => f2.confidence - f1.confidence);\n\n\t\t\t\tdivisions[0] = nhs[0];\n\t\t\t\tdivisions[1] = nhs[1];\n\t\t\t\tdivisions[2] = nhs[2];\n\t\t\t\tArray(divisions.length - 3)\n\t\t\t\t\t.fill(0)\n\t\t\t\t\t.forEach((_, i) => (divisions[3 + i] = i_flags[i] ? i_flags[i].confidence : 0));\n\t\t\t}\n\n\t\t\tconst i_dots = dotPs.filter((dot) => dot.x > cx && dot.x < event.right + 2.6);\n\t\t\tconst dots2 = i_dots.filter((dot) => i_dots.some((d) => dot.x > d.x && Math.abs(dot.y - d.y) < 0.2));\n\t\t\tconst dots = [Math.max(0, ...i_dots.map((dot) => dot.confidence)), Math.max(0, ...dots2.map((dot) => dot.confidence))];\n\n\t\t\tconst beams = [beamLs, beamMs, beamRs]\n\t\t\t\t.map((bs) => bs.filter((b) => Math.abs(b.x - cx) < 0.2 && b.y > top - 0.2 && b.y < bottom + 0.2))\n\t\t\t\t.map((bs) => Math.max(0, ...bs.map((b) => b.confidence)));\n\n\t\t\tconst u_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[0] }, { x: stem.x, y: stem.extension.y2 }) < 0.5);\n\t\t\tconst d_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[event.ys.length - 1] }, { x: stem.x, y: stem.extension.y1 }) < 0.5);\n\t\t\tconst stemDirections = [Math.max(0, ...u_stems.map((stem) => stem.confidence)), Math.max(0, ...d_stems.map((stem) => stem.confidence))];\n\n\t\t\tconst graces = gracePs.filter((grace) => Math.abs(grace.x - cx) < 0.6 && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tconst grace = Math.max(0, ...graces.map((grace) => grace.confidence));\n\n\t\t\tconst tremolos =\n\t\t\t\tevent.division === 0\n\t\t\t\t\t? tremoloRs.filter((tremolo) => tremolo.x > event.left - 2 && tremolo.x < event.right)\n\t\t\t\t\t: tremoloRs.filter((tremolo) => tremolo.y > top - 0.04 && tremolo.y < bottom + 0.04 && tremolo.x > stemL - 2 && tremolo.x < stemL);\n\t\t\tconst tremoloCatcher = Math.max(0, ...tremolos.map((tremolo) => tremolo.confidence));\n\n\t\t\tevent.feature = {\n\t\t\t\tdivisions,\n\t\t\t\tdots,\n\t\t\t\tbeams,\n\t\t\t\tstemDirections,\n\t\t\t\tgrace,\n\t\t\t\ttremoloCatcher,\n\t\t\t} as EventFeature;\n\t\t});\n\t}\n}\n\nclass Staff extends SimpleClass {\n\tstatic className = 'Staff';\n\tstatic blackKeys = ['index', 'semanticTop', 'semanticBttom'];\n\n\tindex?: number; // staff index in full staff layout\n\n\t// in units\n\ttop: number;\n\theight: number;\n\tstaffY: number;\n\n\tsemanticTop: number;\n\tsemanticBottom: number;\n\n\tbackgroundImage: string | Buffer;\n\tmaskImage: string | Buffer;\n\timagePosition: Rect;\n\n\tmeasures: Measure[];\n\n\tsemantics: SemanticPoint[];\n\n\tconstructor({ measureCount = null, measureBars = null, ...data }: Record = {}) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.height = this.height || 10;\n\t\tthis.staffY = this.staffY || 5;\n\n\t\tif (measureBars) {\n\t\t\tlet left = 0;\n\t\t\tthis.measures = measureBars.map((endX) => {\n\t\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\t\tleft = endX;\n\n\t\t\t\treturn measure;\n\t\t\t});\n\t\t} else if (measureCount)\n\t\t\tthis.measures = Array(measureCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Measure());\n\t\telse this.measures = [];\n\t}\n\n\t// relative to staffY\n\tget noteRange(): { top: number; bottom: number } {\n\t\tconst noteheads: Token[] = [].concat(...this.measures.map((measure) => measure.noteheads));\n\t\tconst ys = noteheads.map((note) => note.y);\n\t\tconst top = Math.min(-2, ...ys);\n\t\tconst bottom = Math.max(2, ...ys);\n\n\t\treturn { top, bottom };\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\treturn [].concat(...this.measures.map((measure) => measure.additionalLines));\n\t}\n\n\trearrangeMeasures(measureBars: number[]): void {\n\t\tif (!measureBars.length) {\n\t\t\tconsole.warn('rearrangeMeasures error, measureBars are empty.');\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokens = this.measures?.map((measure) => measure.tokens).flat(1) || [];\n\n\t\tlet left = 0;\n\t\tthis.measures = measureBars.map((endX) => {\n\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\tleft = endX;\n\n\t\t\treturn measure;\n\t\t});\n\n\t\tthis.reassignTokens(tokens);\n\t}\n\n\treassignTokens(tokens: Token[] = null): void {\n\t\tif (!tokens) tokens = [].concat(...this.measures.map((measure) => measure.tokens));\n\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\n\t\ttokens.forEach((token) => {\n\t\t\tfor (const measure of this.measures) {\n\t\t\t\tif (token.x < measure.right) {\n\t\t\t\t\tmeasure.tokens.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tassignSemantics(graph: SemanticGraph): void {\n\t\tthis.semantics = graph.getStaffPoints();\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, system: System, logger: Logger = new DummyLogger()): void {\n\t\tif (!this.semantics) return;\n\n\t\tlet points = system.qualifiedSemantics(this.semantics, threshold);\n\t\tpoints = solveOverlapping(points);\n\n\t\t// tempo noteheads\n\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t//console.log(\"temponh:\", tempoNh, index, points[index]);\n\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t// TODO: construct tempo term\n\t\t});\n\n\t\tconst antiP = (id: string): SemanticPoint | null => {\n\t\t\tif (system.displacementSemantics?.[id]) return this.semantics.find((p) => p.id === id);\n\n\t\t\treturn null;\n\t\t};\n\n\t\tpoints.filter((point) => MEASURE_SEMANTICS.includes(point.semantic)).forEach((point) => this.appendPoint(point, { points }));\n\n\t\t// noteheads with stem from noteheads & stems\n\t\tconst stems: Stem[] = points\n\t\t\t.filter((point) => point.semantic === SemanticType.vline_Stem)\n\t\t\t.filter((stem) => stem.extension.y2 - stem.extension.y1 > 1.5) // exclude too short stems\n\t\t\t.map((p) => ({\n\t\t\t\tx: p.x,\n\t\t\t\ty1: p.extension.y1,\n\t\t\t\ty2: p.extension.y2,\n\t\t\t\tdirection: null,\n\t\t\t}));\n\t\tconst noteheads = points.filter(\n\t\t\t(point) => NOTEHEAD_FOR_STEM_SEMANTICS.includes(point.semantic) && point.y > this.semanticTop && point.y < this.semanticBottom\n\t\t);\n\t\tconst rootNhs = new Set();\n\n\t\t// for 2nd degree chord notes\n\t\tconst nhOffsetX = (nh: SemanticPoint, stem: Stem, down: boolean): number => {\n\t\t\tif ((down ? 1 : 0) ^ (nh.x < stem.x ? 1 : 0)) return 0;\n\n\t\t\tconst offset = NOTEHEAD_WIDTHS[nh.semantic];\n\n\t\t\treturn down ? -offset : offset;\n\t\t};\n\n\t\t// find root noteheads on stem\n\t\tstems.forEach((stem) => {\n\t\t\tconst attachedHeads = noteheads.filter(\n\t\t\t\t(nh) =>\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 < 0.32 &&\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 > -0.44 && // for grace noteheads, more close to their stem\n\t\t\t\t\tnh.y > stem.y1 - 0.5 &&\n\t\t\t\t\tnh.y < stem.y2 + 0.5 &&\n\t\t\t\t\t!(nh.x > stem.x && nh.y > stem.y2) &&\n\t\t\t\t\t!(nh.x < stem.x && nh.y < stem.y1)\n\t\t\t);\n\t\t\t//if (stem.x===102.0625 && stem.y2===1.875)\n\t\t\t//\tdebugger;\n\t\t\tif (attachedHeads.length) {\n\t\t\t\tattachedHeads.sort((n1, n2) => n1.y - n2.y);\n\n\t\t\t\tconst topDist = Math.min(...attachedHeads.map((nh) => nh.y - stem.y1));\n\t\t\t\tconst bottomDist = Math.min(...attachedHeads.map((nh) => stem.y2 - nh.y));\n\t\t\t\tif (Math.min(topDist, bottomDist) > 0.5) return; // no root notehead on this stem\n\n\t\t\t\tconst down = topDist < bottomDist;\n\t\t\t\tstem.direction = down ? 'd' : 'u';\n\n\t\t\t\tif (!down) attachedHeads.reverse();\n\t\t\t\tconst root = attachedHeads[0];\n\n\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[root.semantic].down : NOTEHEAD_TABLE[root.semantic].up;\n\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: root.id,\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx: stem.x + nhOffsetX(root, stem, down),\n\t\t\t\t\t\ty: root.y,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tconfidence: root.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\tantiPoint: antiP(root.id),\n\t\t\t\t\t\tpoints,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\trootNhs.add(root.id);\n\t\t\t}\n\t\t});\n\n\t\t// non-root noteheads\n\t\tnoteheads\n\t\t\t.filter((nh) => !rootNhs.has(nh.id))\n\t\t\t.forEach((nh) => {\n\t\t\t\tconst nearStems = stems\n\t\t\t\t\t.filter((stem) => Math.abs(stem.x - nh.x) < 2 && nh.y > stem.y1 && nh.y < stem.y2)\n\t\t\t\t\t.sort((s1, s2) => Math.abs(s1.x - nh.x) - Math.abs(s2.x - nh.x));\n\t\t\t\tconst stem = nearStems[0];\n\t\t\t\tif (stem) {\n\t\t\t\t\tconst down = stem.direction === 'd';\n\t\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[nh.semantic].down : NOTEHEAD_TABLE[nh.semantic].up;\n\n\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: nh.id,\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x + nhOffsetX(nh, stem, down),\n\t\t\t\t\t\t\ty: nh.y,\n\t\t\t\t\t\t\tpivotX: nh.x,\n\t\t\t\t\t\t\tconfidence: nh.confidence,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\t\tantiPoint: antiP(nh.id),\n\t\t\t\t\t\t\tpoints,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else logger.debug('isolated notehead:', system.index, this.index, nh);\n\t\t\t});\n\n\t\t// group flags\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tflags.sort((f1, f2) => f1.x - f2.x);\n\t\tthis.appendFlags(flags, stems);\n\n\t\t// group dots\n\t\tconst dots = points\n\t\t\t.filter((point) => point.semantic === SemanticType.Dot)\n\t\t\t.map((dot) => {\n\t\t\t\tconst y = roundNumber(dot.y, 0.5);\n\t\t\t\treturn { x: dot.x, y };\n\t\t\t});\n\t\tconst dotLines: { [key: number]: SemanticPoint[] } = dots.reduce((table, dot) => {\n\t\t\ttable[dot.y] = table[dot.y] || [];\n\t\t\ttable[dot.y].push(dot);\n\t\t\treturn table;\n\t\t}, {});\n\t\tObject.entries(dotLines).forEach(([sy, line]) => {\n\t\t\tconst y = Number(sy);\n\t\t\tif (line.length > 1) {\n\t\t\t\tline.sort((d1, d2) => d1.x - d2.x);\n\t\t\t\tfor (let i = 0; i < line.length - 1; i++) {\n\t\t\t\t\tconst dot = line[i];\n\t\t\t\t\tif (line.find((d) => d.x > dot.x && d.x - dot.x < 1.2)) {\n\t\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: dot.id,\n\t\t\t\t\t\t\t\tx: dot.x,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tconfidence: dot.confidence,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: TokenType.DotDot, antiPoint: antiP(dot.id), points }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// pair key accidentals\n\t\tconst keyaccs = points.filter((point) => point.semantic === SemanticType.KeyAcc);\n\t\tconst accs = points.filter((point) => KEYACC_CANDIDATE_SEMANTICS[point.semantic]);\n\t\taccs.forEach((acc) => {\n\t\t\tif (keyaccs.some((key) => Math.abs(acc.x - key.x) < 0.5 && Math.abs(acc.y - key.y) < 1)) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: acc.id,\n\t\t\t\t\t\tsemantic: acc.semantic,\n\t\t\t\t\t\tx: acc.x,\n\t\t\t\t\t\ty: acc.y,\n\t\t\t\t\t\tconfidence: acc.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{ type: KEYACC_CANDIDATE_SEMANTICS[acc.semantic], points }\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// octave shift heads\n\t\tconst octs = points.filter((point) => point.semantic === SemanticType.OctaveShift8);\n\t\tocts.forEach((oct) => {\n\t\t\tconst type = oct.y < 0 ? TokenType.OctaveShift8va : TokenType.OctaveShift8vb;\n\t\t\tthis.appendPoint(\n\t\t\t\t{\n\t\t\t\t\tid: oct.id,\n\t\t\t\t\tx: oct.x,\n\t\t\t\t\ty: oct.y,\n\t\t\t\t\tconfidence: oct.confidence,\n\t\t\t\t},\n\t\t\t\t{ type, points }\n\t\t\t);\n\t\t});\n\n\t\t// group volta dots\n\t\tconst voltaDots = this.semantics.filter((point) => [SemanticType.VoltaLeft, SemanticType.VoltaRight].includes(point.semantic));\n\t\tvoltaDots.sort((d1, d2) => d1.x - d2.x);\n\t\tconst voltaGroups: Record> = voltaDots.reduce(\n\t\t\t(groups, dot) => {\n\t\t\t\tconst group = groups[dot.semantic];\n\t\t\t\tconst xs = Array.from(Object.keys(group)).map(Number);\n\t\t\t\tconst x = xs.find((x) => dot.x < x + 0.2) || dot.x;\n\n\t\t\t\tgroup[x] = groups[dot.semantic][x] || [];\n\t\t\t\tgroup[x].push(dot);\n\n\t\t\t\treturn groups;\n\t\t\t},\n\t\t\t{ [SemanticType.VoltaLeft]: {}, [SemanticType.VoltaRight]: {} }\n\t\t);\n\t\tfor (const [type, group] of Object.entries(voltaGroups)) {\n\t\t\tObject.values(group).forEach((dots) => {\n\t\t\t\tif (dots.length > 1) {\n\t\t\t\t\tconst confidence = dots.reduce((sum, dot) => sum + dot.confidence, 0);\n\t\t\t\t\tif (dots[0].y * dots[1].y < 0 && confidence >= threshold * 2) this.appendPoint(dots[0], { type: TokenType[type] });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tappendPoint(\n\t\tpoint: Partial,\n\t\t{ type, points = null, antiPoint, ...fields }: { type?: TokenType; antiPoint?: SemanticPoint; [key: string]: any } = {}\n\t): void {\n\t\t//console.log(\"appendPoint.0:\", point, point.x, point.y);\n\t\tconst x = point.x;\n\t\tconst measure = this.measures.find((measure) => x < measure.left + measure.width);\n\t\tif (!measure)\n\t\t\t// drop tokens out of measures range\n\t\t\treturn;\n\n\t\t// lined or interval\n\t\tlet lined = false;\n\t\tlet interval = false;\n\t\tif (STAFF_LINED_SEMANTICS.includes(point.semantic)) {\n\t\t\tconsole.assert(points, 'argument of points for this semantic is required:', point.semantic);\n\t\t\tconst signs = points.filter((p) => LINED_INTERVAL_SEMANTICS.includes(p.semantic) && Math.abs(p.y - point.y) < 0.2 && Math.abs(p.x - point.x) < 1.2);\n\t\t\tif (signs.some((s) => s.semantic === SemanticType.SignLined)) lined = true;\n\t\t\telse if (signs.some((s) => s.semantic === SemanticType.SignInterval)) interval = true;\n\t\t}\n\n\t\ttype = type || TokenType[point.semantic];\n\t\tconst fixedY = TOKEN_Y_FIXED[type];\n\t\tlet roundY = TOKEN_Y_ROUND[type];\n\n\t\tif (lined || interval) roundY = Math.max(roundY, 1);\n\n\t\tlet y = point.y;\n\t\tif (Number.isFinite(fixedY)) y = fixedY;\n\t\telse if (roundY) {\n\t\t\tif (interval) y = roundNumber(y + 0.5, roundY) - 0.5;\n\t\t\telse y = roundNumber(y, roundY);\n\t\t}\n\t\t//if (lined || interval)\n\t\t//\tconsole.log(\"round sign:\", point.semantic, y, lined, interval);\n\n\t\tconst holder = measure.tokens.find((token) => token.type === type && Math.abs(token.x - x) < 0.1 && Math.abs(token.y - y) < 0.1);\n\t\tif (holder) {\n\t\t\tif (Number.isFinite(holder.confidence) && holder.confidence < point.confidence) {\n\t\t\t\tholder.x = x;\n\t\t\t\tholder.y = y;\n\t\t\t\tholder.confidence = point.confidence;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// exlude clef out of pitch range\n\t\tif (TokenClefs.includes(type)) {\n\t\t\tif (Math.abs(y) > 3) return;\n\t\t}\n\n\t\t// TODO: exclude overlapped pair by a token prior table\n\n\t\tmeasure.tokens.push(\n\t\t\tnew Token({\n\t\t\t\tid: point.id,\n\t\t\t\ttype,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tpivotX: point.pivotX,\n\t\t\t\tconfidence: point.confidence,\n\t\t\t\t...fields,\n\t\t\t})\n\t\t);\n\n\t\tif (antiPoint) {\n\t\t\tmeasure.antiTokens.push(\n\t\t\t\tnew Token({\n\t\t\t\t\tid: antiPoint.id,\n\t\t\t\t\ttype,\n\t\t\t\t\tx,\n\t\t\t\t\ty: antiPoint.y,\n\t\t\t\t\tconfidence: antiPoint.confidence,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}\n\n\tappendFlags(flags: SemanticPoint[], stems: Stem[]): void {\n\t\t//console.log(\"flags:\", flags);\n\t\tconst stemGroups = stems\n\t\t\t.map((stem) => ({\n\t\t\t\t...stem,\n\t\t\t\tflags: flags.filter((flag) => Math.abs(flag.x - stem.x) < 0.3 && flag.y > stem.y1 - 0.5 && flag.y < stem.y2 + 0.5),\n\t\t\t}))\n\t\t\t.filter((group) => group.flags.length);\n\n\t\tstemGroups.forEach((group) => {\n\t\t\tconst mainFlag = group.flags.reduce((main, flag) => (main && main.confidence > flag.confidence ? main : flag), null);\n\n\t\t\t//const upDistance = mainFlag.y - group.y1;\n\t\t\t//const downDistance = group.y2 - mainFlag.y;\n\t\t\t//const downward = downDistance < upDistance;\n\t\t\tconst downward = group.direction === 'd';\n\n\t\t\tconst tailY = downward ? Math.min(group.y2, group.y1 + STEM_LENGTH_MAX) : Math.max(group.y1, group.y2 - STEM_LENGTH_MAX);\n\n\t\t\tconst flagTips = group.flags.map((flag) => ({\n\t\t\t\ttip: (tailY - flag.y) * (downward ? 1 : -1),\n\t\t\t\tconfidence: flag.confidence,\n\t\t\t}));\n\t\t\tconst count = flagTips.filter((f) => f.tip < 2 || f.confidence > mainFlag.confidence * 0.7).length;\n\n\t\t\tconst type = TokenFlags[count - 1];\n\t\t\tif (type) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: group.flags[0].id,\n\t\t\t\t\t\tx: group.x,\n\t\t\t\t\t\ty: tailY,\n\t\t\t\t\t\tconfidence: Math.min(...group.flags.map((flag) => flag.confidence)),\n\t\t\t\t\t},\n\t\t\t\t\t{ type }\n\t\t\t\t);\n\t\t\t\t//console.log(\"flag:\", type);\n\t\t\t}\n\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\t\tthis.semantics = [];\n\t}\n\n\tclearPredictedTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = measure.tokens.filter((token) => !token.isPredicted)));\n\t}\n}\n\nclass System extends SimpleClass {\n\tstatic className = 'System';\n\tstatic blackKeys = ['index', 'pageIndex', 'prev', 'next', 'headMeasureIndex', 'tokens', 'indent'];\n\n\tindex?: number;\n\tpageIndex?: number;\n\tprev?: System;\n\tnext?: System;\n\theadMeasureIndex?: number; // zero based\n\n\t// in units\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\tindent: boolean;\n\n\tmeasureCount: number;\n\tstaves: Staff[];\n\n\tmeasureBars: number[];\n\n\tbackgroundImage: string;\n\timagePosition: Rect;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tsidBlackList: string[];\n\tsidWhiteList: string[];\n\n\tdisplacementSemantics?: { [id: string]: Partial };\n\n\tstaffMaskChanged: number;\n\tbracketsAppearance: string; // the staff layout code by prediction\n\n\tconstructor({ stavesCount, ...fields }: any) {\n\t\tsuper();\n\t\tsuper.assign(fields);\n\n\t\tif (!this.measureBars) {\n\t\t\tconst HEAD_WIDTH = 5;\n\t\t\tconst segmentLength = (this.width - HEAD_WIDTH) / this.measureCount;\n\t\t\tthis.measureBars = Array(this.measureCount)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => HEAD_WIDTH + segmentLength * (i + 1));\n\t\t}\n\n\t\tif (!fields.staves && stavesCount)\n\t\t\tthis.staves = Array(stavesCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Staff({ measureBars: this.measureBars }));\n\n\t\tthis.arrangePosition();\n\n\t\tthis.measureCount = this.measureCount || this.measureBars.length;\n\n\t\tthis.sidBlackList = this.sidBlackList || [];\n\t\tthis.sidWhiteList = this.sidWhiteList || [];\n\t}\n\n\tget noteRange(): { top: number; bottom: number } {\n\t\tif (!this.staves.length) return null;\n\n\t\tconst staffTop = this.staves[0];\n\t\tconst staffBottom = this.staves[this.staves.length - 1];\n\n\t\treturn {\n\t\t\ttop: staffTop.top + staffTop.staffY + staffTop.noteRange.top,\n\t\t\tbottom: staffBottom.top + staffBottom.staffY + staffBottom.noteRange.bottom,\n\t\t};\n\t}\n\n\tget staffPositions(): StaffPosition[] {\n\t\treturn this.staves.map((staff) => ({\n\t\t\ty: staff.top + staff.staffY,\n\t\t\tradius: 2,\n\t\t}));\n\t}\n\n\tget staffMask(): number {\n\t\tif (this.staffMaskChanged) return this.staffMaskChanged;\n\n\t\tif (this.prev && this.staves.length === this.prev.staves.length) return this.prev.staffMask;\n\n\t\treturn 2 ** this.staves.length - 1;\n\t}\n\n\tget staffTop(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[0].y - positions[0].radius : 0;\n\t}\n\n\tget staffBottom(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[positions.length - 1].y + positions[positions.length - 1].radius : 0;\n\t}\n\n\tarrangePosition(): void {\n\t\tlet y = 0;\n\t\tfor (const staff of this.staves) {\n\t\t\tif (Number.isFinite(staff.top)) break;\n\n\t\t\tstaff.top = y;\n\t\t\ty += staff.height;\n\t\t}\n\t}\n\n\ttidyMeasureBars(): void {\n\t\tthis.measureBars = this.measureBars.filter((x) => x > 1);\n\t\tthis.measureBars.sort((b1, b2) => b1 - b2);\n\n\t\tconst restWidth = this.width - this.measureBars[this.measureBars.length - 1];\n\t\tif (restWidth > 12) this.measureBars.push(this.width);\n\t\telse if (restWidth < 2) this.measureBars[this.measureBars.length - 1] = this.width;\n\n\t\tthis.measureBars = this.measureBars.filter((x, i) => i < 1 || x - this.measureBars[i - 1] > 4);\n\t}\n\n\trearrangeMeasures(): void {\n\t\tthis.measureCount = this.measureBars.length;\n\t\tthis.staves.forEach((staff) => staff.rearrangeMeasures(this.measureBars));\n\t}\n\n\tget height(): number {\n\t\treturn this.staves.reduce((height, staff) => height + staff.height, 0);\n\t}\n\n\tget connectionLine(): { top: number; bottom: number } {\n\t\tconst staffHead = this.staves[0];\n\t\tconst staffTail = this.staves[this.staves.length - 1];\n\n\t\treturn (\n\t\t\tstaffHead && {\n\t\t\t\ttop: staffHead.top + staffHead.staffY - 2,\n\t\t\t\tbottom: staffTail.top + staffTail.staffY + 2,\n\t\t\t}\n\t\t);\n\t}\n\n\tget middleY(): number {\n\t\tif (!this.staves.length) return 0;\n\n\t\tconst sum = this.staves.reduce((sum, staff) => sum + staff.top + staff.staffY, 0);\n\n\t\treturn sum / this.staves.length;\n\t}\n\n\tget timeSignatureOnHead(): boolean {\n\t\treturn this.staves.some((staff) => staff.measures[0]?.tokens.some((token) => TokenTimesigs.includes(token.type)));\n\t}\n\n\t// an array staff or null on every position of full staff layout\n\tgetStaffArray(stavesCount: number): Staff[] {\n\t\tlet si = 0;\n\n\t\treturn Array(stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, i) => {\n\t\t\t\tconst on = this.staffMask & (1 << i);\n\t\t\t\tconst staff = on ? this.staves[si++] : null;\n\t\t\t\tconsole.assert(!on || staff, 'system staves count is less than staff mask declared:', this.staves.length, this.staffMask.toString(2));\n\n\t\t\t\treturn staff;\n\t\t\t});\n\t}\n\n\t// measureIndex: the local measure index\n\tgetMarksInMeasure(measureIndex: number): MarkTerm[] {\n\t\tconsole.assert(measureIndex < this.measureBars.length, 'measure index out of range:', measureIndex, this.measureBars.length);\n\n\t\tconst left = measureIndex > 0 ? this.measureBars[measureIndex - 1] : 0;\n\t\tconst right = this.measureBars[measureIndex];\n\n\t\tconst tempoTokens = (this.tokens ?? []).filter(\n\t\t\t(token) => token.x >= left && token.x < right && token instanceof TextToken && token.textType === TextType.TempoNumeral\n\t\t) as TextToken[];\n\n\t\treturn [...tempoTokens.map((token) => TempoTerm.fromNumeralText(token.text)).filter(Boolean)];\n\t}\n\n\tgetEvents(stavesCount: number): EventSystem {\n\t\tconsole.assert(Number.isInteger(this.headMeasureIndex), 'invalid headMeasureIndex:', this.headMeasureIndex);\n\n\t\t// Empty system (no measureBars / no staves with measures): return empty result\n\t\tif (!this.measureBars?.length && this.staves.every((s) => !s.measures?.length)) {\n\t\t\treturn { staffMask: this.staffMask, columns: [] };\n\t\t}\n\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => {\n\t\t\t\tconst events = measure.getEvents();\n\t\t\t\tmeasure.assignAccessoriesOnEvents(events);\n\t\t\t\tmeasure.assignFeaturesOnEvents(events, staff.semantics);\n\n\t\t\t\treturn {\n\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t\tcontexts: measure.getContexts({ staff: staff.index }),\n\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts?.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (row[mi] && !row[mi].contexts.length && !row[mi].events.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//onst measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: this.getMarksInMeasure(i),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i]?.voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i]?.voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row[i]?.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i]?.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\t\t//columns.forEach(computeMeasureTicks);\n\n\t\t// assign id on column events\n\t\tcolumns.forEach((column) => {\n\t\t\tconst events = [].concat(...column.rows.filter(Boolean).map((row) => row.events));\n\t\t\tevents.forEach((event, i) => (event.id = i + 1));\n\t\t});\n\n\t\tconst lastColumn = columns[columns.length - 1];\n\t\tif (lastColumn) lastColumn.break = true;\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tgetEventsFunctional(stavesCount: number, ev: ChordsFeeder, processors: ColumnProcessor[] = [], { useXMap = false } = {}): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff, si) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure, mi) => {\n\t\t\t\tconst events = ev(si, mi);\n\n\t\t\t\treturn (\n\t\t\t\t\tevents && {\n\t\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcontexts: measure.getContexts({ staff: si }),\n\t\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\t// [measure, staff]\n\t\tconst columns: EventMeasureColumn[] = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => {\n\t\t\t\tconst localRows = rows.map((row) => row[mi]);\n\t\t\t\tif (localRows.some((row) => !row)) return null;\n\n\t\t\t\tlet xMap: Map = null;\n\t\t\t\tif (useXMap) {\n\t\t\t\t\tconst events: EventTerm[] = [].concat(...localRows.map((row) => row.events));\n\t\t\t\t\tconst groupMap: { [group: number]: EventTerm[] } = events.reduce((map, event) => {\n\t\t\t\t\t\tif (Number.isFinite(event.tickGroup)) map[event.tickGroup] = map[event.tickGroup] || [];\n\t\t\t\t\t\tmap[event.tickGroup].push(event);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, {});\n\n\t\t\t\t\txMap = Object.values(groupMap).reduce((map, events) => {\n\t\t\t\t\t\tconst x = Math.min(...events.map((event) => (event.left + event.right) / 2));\n\t\t\t\t\t\tmap.set(x, events);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, new Map());\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + mi,\n\t\t\t\t\t//startX: measureStartXs[mi],\n\t\t\t\t\t//width: measureWidths[mi],\n\t\t\t\t\trows: localRows, // [staff]\n\t\t\t\t\tmarks: this.getMarksInMeasure(mi),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\txMap,\n\t\t\t\t\tvoltaBegin: localRows.some((row) => row.voltaBegin),\n\t\t\t\t\tvoltaEnd: localRows.some((row) => row.voltaEnd),\n\t\t\t\t\talternative: localRows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: localRows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\tprocessors.forEach((proc) => columns.forEach(proc));\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\t// get EventSystem contains only contexted terms\n\tgetContexts(stavesCount: number): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: null,\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => ({\n\t\t\t\tevents: null,\n\t\t\t\tcontexts: measure.getContexts(),\n\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t}));\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (!row[mi].contexts.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: [],\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i].voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i].voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i].barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tassignSemantics(staffIndex: number, graph: SemanticGraph): void {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff is null:', staffIndex, this.staves);\n\t\tconst oy = staff.top + staff.staffY;\n\n\t\tgraph.getSystemPoints().forEach((point) => {\n\t\t\tconst p = { ...point };\n\t\t\tp.y += oy;\n\n\t\t\tif (p.extension) {\n\t\t\t\tp.extension = { ...p.extension };\n\t\t\t\tif (Number.isFinite(p.extension.y1)) {\n\t\t\t\t\tp.extension.y1 += oy;\n\t\t\t\t\tp.extension.y2 += oy;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.semantics.push(p);\n\t\t});\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, logger: Logger = new DummyLogger()): void {\n\t\t//console.log(\"System.assignSemantics:\", graph);\n\t\tthis.measureBars = [];\n\n\t\tif (!this.semantics) return;\n\n\t\tconst graph = SemanticGraph.fromPoints(this.semantics);\n\n\t\tconst bars = graph.getConfidentLayer(SemanticType.vline_BarMeasure, threshold);\n\t\tbars.sort((b1, b2) => b1.x - b2.x);\n\n\t\tconst staffTop = this.staffTop;\n\t\tconst staffBottom = this.staffBottom;\n\n\t\tconst MERGE_WINDOW = 0.4;\n\t\tlet lastX = 0;\n\t\tconst barColumns: { [key: number]: number } = bars.reduce((columns, bar) => {\n\t\t\tconst confidence = Number.isFinite(bar.confidence) ? Math.tanh(bar.confidence) : 1;\n\n\t\t\tconst x = bar.x - lastX > MERGE_WINDOW ? bar.x : lastX;\n\t\t\tlastX = bar.x;\n\t\t\tlet intensity = columns[x] || 0;\n\t\t\tintensity += (Math.min(bar.extension.y2, staffBottom) - Math.max(bar.extension.y1, staffTop)) * confidence;\n\n\t\t\tif (bar.x !== x) delete columns[x];\n\t\t\tcolumns[bar.x] = intensity;\n\n\t\t\treturn columns;\n\t\t}, {});\n\t\tconst barXs: number[] = Object.entries(barColumns)\n\t\t\t.filter(([x, intensity]) => (void x, intensity > 3 * this.staves.length))\n\t\t\t.map(([x]) => Number(x));\n\t\t// Include bar positions from whitelisted semantic points\n\t\tif (this.sidWhiteList.length) {\n\t\t\tfor (const bar of bars) {\n\t\t\t\tif (this.sidWhiteList.includes((bar as SemanticPoint).id) && !barXs.some((x) => Math.abs(x - bar.x) <= 2)) {\n\t\t\t\t\tbarXs.push(bar.x);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbarXs.sort((x1, x2) => x1 - x2);\n\t\tbarXs.forEach((x, i) => {\n\t\t\tif (i <= 0 || x - barXs[i - 1] > 2) this.measureBars.push(x);\n\t\t});\n\n\t\tif (!this.measureBars.length) this.measureBars.push(this.width);\n\n\t\tthis.tidyMeasureBars();\n\t\tthis.rearrangeMeasures();\n\n\t\t// measure bar type\n\t\tconst typeBars = this.semantics.filter((point) => [SemanticType.vline_BarTerminal, SemanticType.vline_BarSegment].includes(point.semantic));\n\t\ttypeBars.forEach((bar) => {\n\t\t\tconst measure = this.staves[0].measures.find((measure) => bar.x > measure.right - 2 && bar.x < measure.right + 1);\n\t\t\tif (measure) {\n\t\t\t\tconst type = bar.semantic.replace(/^vline_Bar/, '');\n\t\t\t\tmeasure.barTypes[type] = measure.barTypes[type] || 0;\n\t\t\t\tmeasure.barTypes[type] += bar.confidence;\n\t\t\t}\n\t\t});\n\n\t\tlet staffIndex = 0;\n\t\tconst staffMask = this.staffMask;\n\t\tthis.staves.forEach((staff, si) => {\n\t\t\t// staff index\n\t\t\twhile (!(staffMask & (1 << staffIndex))) ++staffIndex;\n\t\t\tstaff.index = staffIndex++;\n\n\t\t\t// assign semantic boundaries\n\t\t\tif (si === 0) staff.semanticTop = -staff.staffY;\n\t\t\telse {\n\t\t\t\tconst prevStaff = this.staves[si - 1];\n\t\t\t\tstaff.semanticTop = prevStaff.top + prevStaff.staffY + 3 - (staff.top + staff.staffY);\n\t\t\t}\n\n\t\t\tif (si < this.staves.length - 1) {\n\t\t\t\tconst nextStaff = this.staves[si + 1];\n\t\t\t\tstaff.semanticBottom = nextStaff.top + nextStaff.staffY - 3 - (staff.top + staff.staffY);\n\t\t\t} else staff.semanticBottom = this.height - (staff.top + staff.staffY);\n\n\t\t\tif (staff.semantics && staff.semantics.length) {\n\t\t\t\tstaff.semantics.forEach((point) => hashSemanticPoint(this.index, si, point));\n\n\t\t\t\tstaff.clearPredictedTokens();\n\t\t\t\tstaff.assemble(threshold, this, logger);\n\t\t\t}\n\t\t});\n\t}\n\n\tqualifiedSemantics(semantics: SemanticPoint[], threshold: number = 1): SemanticPoint[] {\n\t\treturn semantics\n\t\t\t.filter(\n\t\t\t\t(p) => this.sidWhiteList.includes(p.id) || (!this.sidBlackList.includes(p.id) && (p.confidence >= threshold || !Number.isFinite(p.confidence)))\n\t\t\t)\n\t\t\t.map((point) => {\n\t\t\t\t// displace semantic point\n\t\t\t\tif (this.displacementSemantics && this.displacementSemantics[point.id]) return { ...point, ...this.displacementSemantics[point.id] };\n\n\t\t\t\treturn point;\n\t\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.staves.forEach((staff) => staff.clearTokens());\n\t\tthis.semantics = [];\n\t}\n\n\tnewPoint(staffIndex: number, data: SemanticPoint, threshold: number = 1): SemanticPoint {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff index out of bound:', staffIndex, this.staves.length);\n\n\t\tconst { semantic, x, y, confidence = 0, extension = null } = data;\n\t\tconst point = { semantic, x, y, confidence, extension };\n\t\tif (!point.extension) delete point.extension;\n\n\t\thashSemanticPoint(this.index, staffIndex, point);\n\t\tstaff.semantics.push(point);\n\t\tstaff.clearPredictedTokens();\n\t\tstaff.assemble(threshold, this);\n\n\t\treturn point;\n\t}\n\n\tappendToken(token: TextToken): void {\n\t\tthis.tokens.push(token);\n\n\t\tswitch (token.textType) {\n\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t{\n\t\t\t\t\t// remove noteheads in text area\n\t\t\t\t\tconst staff = this.staves[0];\n\t\t\t\t\tif (staff) {\n\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\t\t\t\t\t\tstaff.measures.forEach((measure) => {\n\t\t\t\t\t\t\tmeasure.tokens = measure.tokens.filter(\n\t\t\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t\t\t!TokenNoteheads.includes(t.type) ||\n\t\t\t\t\t\t\t\t\tMath.abs(t.x - token.x) > token.width / 2 ||\n\t\t\t\t\t\t\t\t\tMath.abs(oy + t.y - token.y) > token.fontSize / 2\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase TextType.Alternation1:\n\t\t\tcase TextType.Alternation2:\n\t\t\t\t//console.log(\"appendToken:\", token, this.staves[0].measures);\n\t\t\t\tthis.staves[0].measures.forEach((measure) => {\n\t\t\t\t\tconst overlap = Math.min(measure.left + measure.width, token.x + token.width / 2) - Math.max(measure.left, token.x - token.width / 2);\n\t\t\t\t\tmeasure.alternative = measure.alternative || overlap / measure.width > 0.5;\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nclass Page extends SimpleClass {\n\tstatic className = 'Page';\n\tstatic blackKeys = ['index', 'tokens'];\n\n\tindex?: number;\n\n\t// in units\n\twidth: number;\n\theight: number;\n\n\tsystems: System[];\n\n\tsource: SourceImageFile;\n\tlayout?: PageLayout;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.systems = this.systems || [];\n\n\t\tif (this.source) {\n\t\t\tthis.source.matrix = this.source.matrix || [1, 0, 0, 1, 0, 0];\n\t\t}\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tclearTokens(): void {\n\t\tthis.semantics = null;\n\t\tthis.tokens = null;\n\n\t\tthis.systems.forEach((system) => (system.tokens = null));\n\t}\n\n\tassignTexts(areas: TextArea[], [imageHeight, imageWidth]: [number, number]): void {\n\t\tconst interval = this.source && this.source.interval ? this.source.interval * (imageHeight / this.source.dimensions.height) : imageHeight / this.height;\n\n\t\tthis.semantics = areas.map((area) => {\n\t\t\tconst p = {\n\t\t\t\tx: (area.cx - imageWidth / 2) / interval,\n\t\t\t\ty: (area.cy - imageHeight / 2) / interval,\n\t\t\t};\n\t\t\tconst rp = this.source && this.source.matrix ? trans23(p, this.source.matrix) : p;\n\n\t\t\treturn {\n\t\t\t\tconfidence: area.score,\n\t\t\t\tx: rp.x + this.width / 2,\n\t\t\t\ty: rp.y + this.height / 2,\n\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\textension: {\n\t\t\t\t\ttext: area.text,\n\t\t\t\t\ttype: area.type,\n\t\t\t\t\twidth: area.width / interval,\n\t\t\t\t\theight: area.height / interval,\n\t\t\t\t\ttheta: area.theta,\n\t\t\t\t\ttextFeature: area.feature_dict,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tassemble({ textAnnotations = null }: { textAnnotations?: { [id: string]: string } } = {}, logger: Logger = new DummyLogger()): void {\n\t\tthis.tokens = [];\n\t\tthis.systems.forEach((system) => (system.tokens = []));\n\n\t\t// compute system indent\n\t\tif (this.systems.length) {\n\t\t\tconst sysXs = this.systems.map((system) => system.left);\n\t\t\tconst middleX = sysXs[Math.floor((sysXs.length - 1) / 2)];\n\t\t\tthis.systems.forEach((system) => (system.indent = system.left > middleX + INDENT_THRESHOLD));\n\t\t}\n\n\t\tif (this.semantics) {\n\t\t\tconst pageName = this.source ? this.source.name : this.index.toString();\n\n\t\t\tthis.semantics.forEach((point) => {\n\t\t\t\thashPageSemanticPoint(pageName, point);\n\n\t\t\t\tconst fields = {\n\t\t\t\t\tid: point.id,\n\t\t\t\t\ttype: TokenType.Text,\n\t\t\t\t\tconfidence: point.confidence,\n\t\t\t\t\ttextType: TEXT_TYPE_ALIAS[point.extension.type] || point.extension.type,\n\t\t\t\t\ttext: (textAnnotations && textAnnotations[point.id]) || point.extension.text,\n\t\t\t\t\ttextFeasure: point.extension.textFeature,\n\t\t\t\t\twidth: point.extension.width,\n\t\t\t\t\tfontSize: point.extension.height,\n\t\t\t\t};\n\n\t\t\t\tswitch (point.semantic) {\n\t\t\t\t\tcase SemanticType.rect_Text:\n\t\t\t\t\t\tswitch (fields.textType) {\n\t\t\t\t\t\t\t// page tokens\n\t\t\t\t\t\t\tcase TextType.Title:\n\t\t\t\t\t\t\tcase TextType.Author:\n\t\t\t\t\t\t\tcase TextType.PageMargin:\n\t\t\t\t\t\t\tcase TextType.Other:\n\t\t\t\t\t\t\t\tthis.tokens.push(\n\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\tx: point.x,\n\t\t\t\t\t\t\t\t\t\ty: point.y,\n\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens on the top of system\n\t\t\t\t\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t\t\t\tcase TextType.Chord:\n\t\t\t\t\t\t\tcase TextType.MeasureNumber:\n\t\t\t\t\t\t\tcase TextType.Instrument:\n\t\t\t\t\t\t\tcase TextType.Alternation1:\n\t\t\t\t\t\t\tcase TextType.Alternation2:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = this.systems.find((system) => system.top + system.staffTop > point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tsystem.appendToken(\n\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\tx: point.x - system.left,\n\t\t\t\t\t\t\t\t\t\t\t\ty: point.y - system.top,\n\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens in staff\n\t\t\t\t\t\t\tcase TextType.TextualMark:\n\t\t\t\t\t\t\tcase TextType.Times:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = [...this.systems].reverse().find((system) => system.top < point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tconst sy = point.y - (system.top + system.staffTop);\n\t\t\t\t\t\t\t\t\t\tconst sx = point.x - system.left;\n\t\t\t\t\t\t\t\t\t\tconst staff = system.staves.find((staff) => sy >= staff.top && sy < staff.top + staff.height);\n\t\t\t\t\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\t\t\t\t\tconst measure = staff.measures.find((measure) => sx >= measure.left && sx < measure.left + measure.width);\n\t\t\t\t\t\t\t\t\t\t\tif (measure) {\n\t\t\t\t\t\t\t\t\t\t\t\tmeasure.tokens.push(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx: sx,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty: sy,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport { Measure, Staff, System, Page };\n","import { ChordColumn, Fraction } from './interfaces';\nimport { GraceType } from './term';\nimport { roundNumber } from './utils';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum SemanticElementType {\n\tBOS,\n\tPAD,\n\n\tNoteheadS0,\n\tNoteheadS1,\n\tNoteheadS2,\n\tNoteheadGrace,\n\tvline_Stem,\n\tFlag3,\n\tBeamLeft,\n\tBeamContinue,\n\tBeamRight,\n\tDot,\n\tRest0,\n\tRest1,\n\tRest2,\n\tRest3,\n\tRest4,\n\tRest5,\n\tRest6,\n\n\t// measure time signature denominators & numerators\n\tTimeD2,\n\tTimeD4,\n\tTimeD8,\n\tTimeN1,\n\tTimeN2,\n\tTimeN3,\n\tTimeN4,\n\tTimeN5,\n\tTimeN6,\n\tTimeN7,\n\tTimeN8,\n\tTimeN9,\n\tTimeN10,\n\tTimeN11,\n\tTimeN12,\n}\n\nconst TIME_SIG_DENOMINATORS = Object.fromEntries([2, 4, 8].map((n) => [n, SemanticElementType[`TimeD${n}`]]));\nconst TIME_SIG_NUMERATORS = Object.fromEntries(\n\tArray(12)\n\t\t.fill(null)\n\t\t.map((_, i) => i + 1)\n\t\t.map((n) => [n, SemanticElementType[`TimeN${n}`]])\n);\n\nconst et = SemanticElementType;\n\nconst ELEMENT_TOKEN_NAMES = {\n\t[et.BOS]: 'BOS',\n\t[et.NoteheadS0]: 'noteheads-s0',\n\t[et.NoteheadS1]: 'noteheads-s1',\n\t[et.NoteheadS2]: 'noteheads-s2',\n\t[et.NoteheadGrace]: 'GraceNotehead',\n\t[et.Flag3]: 'flags-u3',\n\t[et.BeamLeft]: 'BeamLeft',\n\t[et.BeamContinue]: 'BeamContinue',\n\t[et.BeamRight]: 'BeamRight',\n\t[et.Dot]: 'dot',\n\t[et.Rest0]: 'rests-0o',\n\t[et.Rest1]: 'rests-1o',\n\t[et.Rest2]: 'rests-2',\n\t[et.Rest3]: 'rests-3',\n\t[et.Rest4]: 'rests-4',\n\t[et.Rest5]: 'rests-5',\n\t[et.Rest6]: 'rests-6',\n};\n\nconst NOTEHEAD_BASE_DIVISION = {\n\t[et.NoteheadS0]: 0,\n\t[et.NoteheadS1]: 1,\n\t[et.NoteheadS2]: 2,\n\t[et.NoteheadGrace]: 2,\n};\n\nconst NOTEHEAD_ELEMENT_TYPES = [et.NoteheadS0, et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace];\n\nconst REST_ELEMENT_TYPES = [et.Rest0, et.Rest1, et.Rest2, et.Rest3, et.Rest4, et.Rest5, et.Rest6];\n\nconst BEAM_ELEMENT_TYPES = [et.BeamLeft, et.BeamContinue, et.BeamRight];\n\nconst NOTE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES];\n\nconst SOURCE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES, et.vline_Stem];\n\nconst TARGET_ELEMENT_TYPES = [et.BOS, et.NoteheadS0, et.vline_Stem, ...REST_ELEMENT_TYPES];\n\nconst ROOT_NOTE_ELEMENT_TYPES = [...NOTE_ELEMENT_TYPES, et.vline_Stem];\n\nconst ELEMENT_TO_STEMBEAM = {\n\t[et.BeamLeft]: 'Open',\n\t[et.BeamRight]: 'Close',\n};\n\ninterface SemanticElement {\n\ttype: SemanticElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\n\tindex?: number;\n\ttick?: number;\n\tid?: string;\n}\n\ntype Matrix = number[][];\n\nconst metaElem = (type: SemanticElementType): SemanticElement => ({\n\ttype,\n\tstaff: -1,\n\tx: 0,\n\ty1: 0,\n\ty2: 0,\n});\n\nconst BOS_ELEMENT = metaElem(SemanticElementType.BOS);\n\nconst fractionToElems = (fraction: Fraction): SemanticElement[] => [\n\tmetaElem(TIME_SIG_NUMERATORS[fraction.numerator]),\n\tmetaElem(TIME_SIG_DENOMINATORS[fraction.denominator]),\n];\n\nconst argmax = (data: number[], mask: boolean[]): number => {\n\tconst values = data.filter((_, i) => mask[i]);\n\tconst max = Math.max(...values);\n\n\treturn data.findIndex((x) => x === max);\n};\n\nclass SemanticCluster extends SimpleClass {\n\tindex?: number;\n\n\telements: SemanticElement[];\n\tmatrixH?: Matrix; // matrix N x N\n\t_matrixV?: Matrix; // matrix N x N\n\tgroupsV?: number[][]; // ids array\n\tmasks?: [boolean[], boolean[], boolean[]]; // the masks for: [jointer source, jointer target, V]\n\n\tstatic elementToJSON(elem: SemanticElement): object {\n\t\tconst result: any = {\n\t\t\ttype: elem.type,\n\t\t\tstaff: elem.staff,\n\t\t\tx: elem.x,\n\t\t\ty1: elem.y1,\n\t\t\ty2: elem.y2,\n\t\t};\n\n\t\tif (elem.id) result.id = elem.id;\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget sourceMask(): boolean[] {\n\t\treturn this.elements.map((elem) => SOURCE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget targetMask(): boolean[] {\n\t\treturn this.elements.map((elem) => TARGET_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget vMask(): boolean[] {\n\t\treturn this.elements.map((elem) => ROOT_NOTE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget compactMatrixH(): Matrix {\n\t\tif (!this.matrixH) return null;\n\n\t\tconst sourceMask = this.sourceMask;\n\t\tconst targetMask = this.targetMask;\n\n\t\treturn this.matrixH.filter((_, i) => sourceMask[i]).map((row) => row.filter((_, j) => targetMask[j]));\n\t}\n\n\tset compactMatrixH(value: Matrix) {\n\t\tthis.matrixH = expandMatrixByMasks([].concat(...value), [this.sourceMask, this.targetMask]);\n\t}\n\n\tget compactMatrixV(): number[] {\n\t\tif (!this._matrixV) return null;\n\n\t\tconst vMask = this.vMask;\n\n\t\tconst matrix = this._matrixV.filter((_, i) => vMask[i]).map((row) => row.filter((_, j) => vMask[j]));\n\n\t\treturn [].concat(...matrix.map((row, i) => row.slice(0, i)));\n\t}\n\n\tset compactMatrixV(value: number[]) {\n\t\tthis.matrixV = value && expandMatrixByMaskTriu(value, this.vMask);\n\t}\n\n\tget matrixV(): Matrix {\n\t\treturn this.groupsV && matrixFromGroups(this.elements.length, this.groupsV);\n\t}\n\n\tset matrixV(value: Matrix) {\n\t\tif (!value) {\n\t\t\tthis.groupsV = null;\n\t\t\tthis._matrixV = value;\n\t\t\treturn;\n\t\t}\n\n\t\tconst THRESHOLD = 0.5;\n\n\t\tconst groups: number[][] = [];\n\t\tconst vMask = value.map((row, i) => row.some(Number.isFinite) || value.some((row) => Number.isFinite(row[i])));\n\n\t\tvalue.forEach((row, i) => {\n\t\t\tif (vMask[i]) {\n\t\t\t\tlet found = false;\n\n\t\t\t\tfor (let j = 0; j < i; ++j) {\n\t\t\t\t\tconst cell = row[j];\n\t\t\t\t\tif (cell >= THRESHOLD) {\n\t\t\t\t\t\tconst g = groups.findIndex((group) => group.includes(j));\n\t\t\t\t\t\tgroups[g].push(i);\n\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!found) groups.push([i]);\n\t\t\t}\n\t\t});\n\n\t\tthis.groupsV = groups;\n\t\tthis._matrixV = value;\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\t__prototype: 'SemanticCluster',\n\t\t\tindex: this.index,\n\t\t\telements: this.elements.map(SemanticCluster.elementToJSON),\n\t\t\tcompactMatrixH: this.compactMatrixH,\n\t\t\tcompactMatrixV: this.compactMatrixV,\n\t\t\t//groupsV: this.groupsV,\n\t\t};\n\t}\n\n\tstatic mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][] {\n\t\tconst rows = x2i.reduce((rows, i, x) => {\n\t\t\tif (rows[i]) rows[i] = rows[i].map((v, xi) => (v + matrix[x][xi] ? 1 : 0));\n\t\t\telse rows[i] = matrix[x];\n\n\t\t\treturn rows;\n\t\t}, [] as number[][]);\n\n\t\treturn rows.map((row) => i2x.map((x) => row[x]));\n\t}\n\n\tmergeOverlapping() {\n\t\tconst overlaps = this.overlappedNoteheads();\n\t\tif (overlaps.length) {\n\t\t\tconst x2i = this.elements.map((_, index) => {\n\t\t\t\tconst pair = overlaps.find((ij) => index === ij[1]);\n\t\t\t\tconst i = pair ? pair[0] : index;\n\n\t\t\t\treturn i - overlaps.filter((ij) => ij[1] < i).length;\n\t\t\t});\n\t\t\tconst i2x = Array(this.elements.length - overlaps.length)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, i) => x2i.findIndex((ii) => ii === i));\n\n\t\t\tthis.elements = i2x.map((x) => this.elements[x]);\n\t\t\tconsole.assert(this.elements.every(Boolean), 'null element found:', this, x2i, i2x);\n\n\t\t\tthis.matrixH = SemanticCluster.mapMatrix(this.matrixH, x2i, i2x);\n\t\t\tthis.groupsV = this.groupsV.map((group) => Array.from(new Set(group.map((x) => x2i[x]))));\n\t\t}\n\t}\n\n\toverlappedNoteheads(): [number, number][] {\n\t\tconst indices = [];\n\n\t\tconst noteheads = this.elements.filter((elem) => NOTEHEAD_ELEMENT_TYPES.includes(elem.type));\n\t\tfor (let i = 0; i < noteheads.length; ++i) {\n\t\t\tconst nh1 = noteheads[i];\n\t\t\tfor (let j = i + 1; j < noteheads.length; ++j) {\n\t\t\t\tconst nh2 = noteheads[j];\n\t\t\t\tif ((nh1.x - nh2.x) * (nh1.x - nh2.x) + (nh1.y1 - nh2.y1) * (nh1.y1 - nh2.y1) < 0.2 ** 2) indices.push([nh1.index, nh2.index]);\n\t\t\t}\n\t\t}\n\n\t\treturn indices;\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\tconsole.assert(this.matrixH, '[SemanticCluster.getEvents]\tmatrixH is null.');\n\n\t\tconst NOTE_STEM_CONFIDENCE = 0.5;\n\n\t\tconst ids = Array(this.elements.length)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => index);\n\n\t\tconst targetMask = this.masks ? this.masks[1] : ids.map((id) => TARGET_ELEMENT_TYPES.includes(this.elements[id].type));\n\n\t\t//const stems = ids.filter(i => this.elements[i].type === et.vline_Stem);\n\t\tconst stemMasks = ids.map((id) => this.elements[id].type === et.vline_Stem && this.elements[id].y2 - this.elements[id].y1 > 2); // TODO: sift out too short stems by rectification model\n\t\tconst stemNotes = ids.filter((i) => [et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace].includes(this.elements[i].type));\n\t\tconst s0s = ids.filter((i) => this.elements[i].type === et.NoteheadS0);\n\t\tconst subS0Masks = ids.map(() => false);\n\n\t\t// root elements: top NoteheadS0, Rests, stem with noteheads\n\t\tconst stemMap: { [stem: number]: number[] } = {};\n\t\tstemNotes.forEach((id) => {\n\t\t\tconst note = this.elements[id];\n\t\t\tconst stems = ids\n\t\t\t\t.filter((i) => stemMasks[i])\n\t\t\t\t.filter((stemId) => this.elements[stemId].y1 - 0.5 < note.y1 && this.elements[stemId].y2 + 0.5 > note.y1) // filter by stem Y range\n\t\t\t\t.sort((i1, i2) => this.matrixH[id][i2] - this.matrixH[id][i1]) // sort by confidence\n\t\t\t\t.slice(0, 2)\n\t\t\t\t.filter((i, ii) => ii === 0 || this.matrixH[id][i] >= NOTE_STEM_CONFIDENCE);\n\t\t\tstems.forEach((stem) => {\n\t\t\t\tstemMap[stem] = stemMap[stem] || [];\n\t\t\t\tstemMap[stem].push(id);\n\t\t\t});\n\t\t});\n\n\t\ts0s.forEach((id) => {\n\t\t\tconst s0 = this.elements[id];\n\t\t\tconst prevId = argmax(this.matrixH[id], targetMask);\n\t\t\tconst prev = this.elements[prevId];\n\t\t\tif (prev.type === et.NoteheadS0 && Math.abs(s0.x - prev.x) < 2.6) {\n\t\t\t\tsubS0Masks[id] = true;\n\t\t\t\tstemMap[prevId] = stemMap[prevId] || [prevId];\n\t\t\t\tstemMap[prevId].push(id);\n\t\t\t} else stemMap[id] = stemMap[id] || [id];\n\t\t});\n\n\t\t// setup linkings\n\t\tconst linkings: { [key: number]: number } = {};\n\n\t\tconst roots = ids.filter((id) => stemMap[id] || REST_ELEMENT_TYPES.includes(this.elements[id].type));\n\t\troots.sort((i1, i2) => this.elements[i1].x - this.elements[i2].x); // traverse roots from left to right later\n\n\t\tconst parentMasks = ids.map((id) => id === et.BOS);\n\t\troots.forEach((id) => {\n\t\t\tconst parentId = argmax(this.matrixH[id], parentMasks);\n\t\t\tlinkings[id] = parentId;\n\n\t\t\tif (parentId && !REST_ELEMENT_TYPES.includes(this.elements[parentId].type)) parentMasks[parentId] = false;\n\n\t\t\tparentMasks[id] = true;\n\t\t});\n\t\t//console.log(\"topology:\", stemMap, linkings);\n\n\t\tconst dots = this.elements.filter((elem) => elem.type === et.Dot);\n\t\tconst flags = this.elements.filter((elem) => elem.type === et.Flag3);\n\t\tconst beams = this.elements.filter((elem) => BEAM_ELEMENT_TYPES.includes(elem.type));\n\n\t\tconst groupsV = this.groupsV;\n\n\t\treturn roots\n\t\t\t.map((rootId): ChordColumn => {\n\t\t\t\tconst root = this.elements[rootId];\n\n\t\t\t\tconst tickGroup = groupsV ? groupsV.findIndex((group) => group.includes(rootId)) : null;\n\n\t\t\t\tif (REST_ELEMENT_TYPES.includes(root.type)) {\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > root.x + 0.5 && dot.x < root.x + 0.75 + 1.2 && dot.y1 > root.y1 - 1 && dot.y1 < root.y1);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft: root.x - 0.75,\n\t\t\t\t\t\tright: root.x + 0.75,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\trest: true,\n\t\t\t\t\t\tys: [root.y1],\n\t\t\t\t\t\tnoteIds: [root.id],\n\t\t\t\t\t\tdots: nearbyDots.length,\n\t\t\t\t\t\tdivision: root.type - et.Rest0,\n\t\t\t\t\t\tstemDirection: null,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: root.staff,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t} else if (stemMap[rootId]) {\n\t\t\t\t\tconst subNotes = stemMap[rootId].map((id) => this.elements[id]);\n\t\t\t\t\tconst left = Math.min(...subNotes.map((n) => n.x - 0.7));\n\t\t\t\t\tconst right = Math.max(...subNotes.map((n) => n.x + 0.7));\n\t\t\t\t\tsubNotes.sort((n1, n2) => n2.y1 - n1.y1);\n\n\t\t\t\t\tconst ys = subNotes.map((note) => note.y1);\n\n\t\t\t\t\tconst noteIds = subNotes.map((note) => note.id);\n\n\t\t\t\t\tconst top = ys[0];\n\t\t\t\t\tconst bottom = ys[ys.length - 1];\n\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > right && dot.x < right + 1.2 && dot.y1 > top - 1 && dot.y1 < bottom + 0.5);\n\t\t\t\t\tconst dotGroups: { [key: number]: SemanticElement[] } = nearbyDots.reduce((groups, dot) => {\n\t\t\t\t\t\tconst y = roundNumber(dot.y1, 0.5);\n\t\t\t\t\t\tgroups[y] = groups[y] || [];\n\t\t\t\t\t\tgroups[y].push(dot);\n\n\t\t\t\t\t\treturn groups;\n\t\t\t\t\t}, {});\n\t\t\t\t\tconst dotValue = Math.max(...Object.values(dotGroups).map((group) => group.length), 0);\n\n\t\t\t\t\tlet division = NOTEHEAD_BASE_DIVISION[subNotes[0].type];\n\n\t\t\t\t\tlet stemDirection = null;\n\t\t\t\t\tlet beam: string = null;\n\t\t\t\t\tlet tip = null;\n\t\t\t\t\tif (root.type === et.vline_Stem) {\n\t\t\t\t\t\tconst topTip = top - root.y1;\n\t\t\t\t\t\tconst bottomTip = root.y2 - bottom;\n\t\t\t\t\t\tstemDirection = topTip > bottomTip ? 'u' : 'd';\n\n\t\t\t\t\t\ttip = { x: root.x, y: stemDirection === 'u' ? root.y1 : root.y2 };\n\n\t\t\t\t\t\tif (division === 2) {\n\t\t\t\t\t\t\tconst flagRange = stemDirection === 'u' ? [root.y1 - 0.4, root.y2 - 1] : [root.y1 + 1, root.y2 + 0.4];\n\t\t\t\t\t\t\tconst nearbyFlags = flags.filter((flag) => Math.abs(flag.x - root.x) < 0.2 && flag.y1 > flagRange[0] && flag.y1 < flagRange[1]);\n\t\t\t\t\t\t\tdivision += nearbyFlags.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//const tipY = stemDirection === \"u\" ? root.y1 : root.y2;\n\t\t\t\t\t\tconst tipRange = stemDirection === 'u' ? [root.y1 - 0.2, root.y1 + 0.9] : [root.y2 - 0.9, root.y2 + 0.2];\n\t\t\t\t\t\tconst beamElem = beams.find((beam) => Math.abs(beam.x - root.x) < 0.2 && beam.y1 > tipRange[0] && beam.y1 < tipRange[1]);\n\t\t\t\t\t\tbeam = beamElem ? ELEMENT_TO_STEMBEAM[beamElem.type] : null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst grace = subNotes[0].type === SemanticElementType.NoteheadGrace ? GraceType.Grace : null;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tright,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tys,\n\t\t\t\t\t\ttip,\n\t\t\t\t\t\tnoteIds,\n\t\t\t\t\t\tdivision,\n\t\t\t\t\t\tdots: dotValue,\n\t\t\t\t\t\trest: false,\n\t\t\t\t\t\tstemDirection,\n\t\t\t\t\t\tbeam,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: subNotes[0].staff,\n\t\t\t\t\t\tgrace,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n}\n\ninterface SemanticClusterSetData {\n\tvocab?: string[];\n\tclusters: SemanticCluster[];\n}\n\nclass SemanticClusterSet {\n\tclusters: SemanticCluster[];\n\n\tconstructor(data?: SemanticClusterSetData) {\n\t\tif (data) {\n\t\t\tthis.clusters = data.clusters;\n\n\t\t\t// upgrade vocab\n\t\t\tif (data.vocab) {\n\t\t\t\tconst converts = data.vocab\n\t\t\t\t\t.map((name, i) => [i, SemanticElementType[name]])\n\t\t\t\t\t.filter(([x, y]) => x !== y)\n\t\t\t\t\t.reduce((table, [x, y]) => ((table[x] = y), table), {});\n\t\t\t\tthis.clusters.forEach((connection) =>\n\t\t\t\t\tconnection.elements.forEach((elem) => {\n\t\t\t\t\t\tif (Number.isFinite(converts[elem.type])) elem.type = converts[elem.type];\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoJSON() {\n\t\tconst vocab = Object.entries(SemanticElementType)\n\t\t\t.filter((entry) => Number.isFinite(entry[1]))\n\t\t\t.map((entry) => entry[0]);\n\n\t\treturn {\n\t\t\t__prototype: 'SemanticClusterSet',\n\t\t\tvocab,\n\t\t\tclusters: this.clusters.map((c) => c.toJSON()),\n\t\t};\n\t}\n}\n\nconst expandMatrixByMasks = (matrix: number[], masks: [boolean[], boolean[]]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\tconst [maskSrc, maskTar] = masks;\n\n\treturn maskSrc.map((src) => maskTar.map((tar) => (src && tar ? iter.next().value : null)));\n};\n\nconst expandMatrixByMaskTriu = (matrix: number[], mask: boolean[]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\treturn mask.map((row, i) => mask.map((column, j) => (row && column && j < i ? iter.next().value : null)));\n};\n\nconst matrixFromGroups = (len: number, groups: number[][]): Matrix => {\n\tconst groupIds = Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) => groups.findIndex((group) => group.includes(i)));\n\n\treturn Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) =>\n\t\t\tArray(len)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tif (j >= i) return null;\n\n\t\t\t\t\tconst id1 = groupIds[i];\n\t\t\t\t\tconst id2 = groupIds[j];\n\n\t\t\t\t\tif (id1 < 0 || id2 < 0) return null;\n\n\t\t\t\t\treturn id1 === id2 ? 1 : 0;\n\t\t\t\t})\n\t\t);\n};\n\nexport {\n\tSemanticElementType,\n\tSemanticElement,\n\tSemanticCluster,\n\tSemanticClusterSet,\n\tELEMENT_TOKEN_NAMES,\n\tNOTEHEAD_ELEMENT_TYPES,\n\tNOTE_ELEMENT_TYPES,\n\tBOS_ELEMENT,\n\tfractionToElems,\n\texpandMatrixByMasks,\n\texpandMatrixByMaskTriu,\n\tmatrixFromGroups,\n};\n","import { MusicNotation } from '@k-l-lambda/music-widgets';\n\n// implicit note (from expressive marks) types\nenum ImplicitType {\n\tNone = 0,\n\n\tMordent = 'mordent',\n\tPrall = 'prall',\n\tTurn = 'turn',\n\tTrill = 'trill',\n\tTremolo = 'tremolo',\n\tArpeggio = 'arpeggio',\n}\n\ninterface ChordPosition {\n\tindex: number;\n\tcount: number;\n}\n\nclass TokenPosition {\n\tsystem?: number;\n\tmeasure?: number;\n\tx: number;\n\tendX?: number;\n}\n\ninterface Note extends MusicNotation.Note {\n\tchordPosition?: ChordPosition;\n\tmeasure?: number;\n}\n\ninterface Notation {\n\tnotes: Note[];\n\tendTick: number;\n}\n\ninterface SheetPosition {\n\tsystem: number;\n\tx: number;\n}\n\nexport { ChordPosition, ImplicitType, TokenPosition, Note, Notation, SheetPosition };\n","\n/* Wrapper for accessing buffer through sequential reads */\n\n\n\nmodule.exports = class Stream {\n\tconstructor (buffer) {\n\t\tthis.array = new Uint8Array(buffer);\n\t\tthis.position = 0;\n\t}\n\n\n\teof () {\n\t\treturn this.position >= this.array.length;\n\t}\n\n\n\tread (length) {\n\t\tconst result = this.array.slice(this.position, this.position + length);\n\t\tthis.position += length;\n\n\t\treturn result;\n\t}\n\n\n\treadString (length) {\n\t\tconst data = Array.from(this.read(length));\n\n\t\treturn data.map(c => String.fromCharCode(c)).join(\"\");\n\t}\n\n\n\t// read a big-endian 32-bit integer\n\treadInt32 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 24) +\n\t\t\t(this.array[this.position + 1] << 16) +\n\t\t\t(this.array[this.position + 2] << 8) +\n\t\t\tthis.array[this.position + 3]);\n\t\tthis.position += 4;\n\n\t\treturn result;\n\t}\n\n\n\t// read a big-endian 16-bit integer\n\treadInt16 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 8) +\n\t\t\tthis.array[this.position + 1]);\n\t\tthis.position += 2;\n\n\t\treturn result;\n\t}\n\n\n\t// read an 8-bit integer\n\treadInt8 (signed) {\n\t\tlet result = this.array[this.position];\n\t\tif (signed && result > 127)\n\t\t\tresult -= 256;\n\t\tthis.position += 1;\n\n\t\treturn result;\n\t}\n\n\n\t/* read a MIDI-style variable-length integer\n\t\t(big-endian value in groups of 7 bits,\n\t\twith top bit set to signify that another byte follows)\n\t*/\n\treadVarInt () {\n\t\tlet result = 0;\n\t\twhile (true) {\n\t\t\tconst b = this.readInt8();\n\t\t\tif (b & 0x80) {\n\t\t\t\tresult += (b & 0x7f);\n\t\t\t\tresult <<= 7;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// b is the last byte\n\t\t\t\treturn result + b;\n\t\t\t}\n\t\t}\n\t}\n};\n","/*\nclass to parse the .mid file format\n(depends on stream.js)\n*/\n\nconst Stream = require(\"./stream.js\");\n\n\n\nmodule.exports = function MidiFile (data) {\n\tfunction readChunk (stream) {\n\t\tconst id = stream.readString(4);\n\t\tconst length = stream.readInt32();\n\n\t\treturn {\n\t\t\tid,\n\t\t\tlength,\n\t\t\tdata: stream.read(length),\n\t\t};\n\t}\n\n\tlet lastEventTypeByte;\n\n\tfunction readEvent (stream) {\n\t\tconst event = {};\n\t\tevent.deltaTime = stream.readVarInt();\n\t\tlet eventTypeByte = stream.readInt8();\n\t\tif ((eventTypeByte & 0xf0) === 0xf0) {\n\t\t\t// system / meta event\n\t\t\tif (eventTypeByte === 0xff) {\n\t\t\t\t// meta event\n\t\t\t\tevent.type = \"meta\";\n\t\t\t\tconst subtypeByte = stream.readInt8();\n\t\t\t\tconst length = stream.readVarInt();\n\n\t\t\t\tswitch (subtypeByte) {\n\t\t\t\tcase 0x00:\n\t\t\t\t\tevent.subtype = \"sequenceNumber\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for sequenceNumber event is 2, got \" + length);\n\t\t\t\t\tevent.number = stream.readInt16();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x01:\n\t\t\t\t\tevent.subtype = \"text\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x02:\n\t\t\t\t\tevent.subtype = \"copyrightNotice\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tevent.subtype = \"trackName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x04:\n\t\t\t\t\tevent.subtype = \"instrumentName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x05:\n\t\t\t\t\tevent.subtype = \"lyrics\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x06:\n\t\t\t\t\tevent.subtype = \"marker\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x07:\n\t\t\t\t\tevent.subtype = \"cuePoint\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x20:\n\t\t\t\t\tevent.subtype = \"midiChannelPrefix\";\n\t\t\t\t\tif (length !== 1)\n\t\t\t\t\t\tthrow new Error(\"Expected length for midiChannelPrefix event is 1, got \" + length);\n\t\t\t\t\tevent.channel = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x2f:\n\t\t\t\t\tevent.subtype = \"endOfTrack\";\n\t\t\t\t\tif (length !== 0)\n\t\t\t\t\t\tthrow new Error(\"Expected length for endOfTrack event is 0, got \" + length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x51:\n\t\t\t\t\tevent.subtype = \"setTempo\";\n\t\t\t\t\tif (length !== 3)\n\t\t\t\t\t\tthrow new Error(\"Expected length for setTempo event is 3, got \" + length);\n\t\t\t\t\tevent.microsecondsPerBeat = (\n\t\t\t\t\t\t(stream.readInt8() << 16) +\n\t\t\t\t\t\t\t(stream.readInt8() << 8) +\n\t\t\t\t\t\t\tstream.readInt8()\n\t\t\t\t\t);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x54:\n\t\t\t\t\tevent.subtype = \"smpteOffset\";\n\t\t\t\t\tif (length !== 5)\n\t\t\t\t\t\tthrow new Error(\"Expected length for smpteOffset event is 5, got \" + length);\n\t\t\t\t\tconst hourByte = stream.readInt8();\n\t\t\t\t\tevent.frameRate = {\n\t\t\t\t\t\t0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30,\n\t\t\t\t\t}[hourByte & 0x60];\n\t\t\t\t\tevent.hour = hourByte & 0x1f;\n\t\t\t\t\tevent.min = stream.readInt8();\n\t\t\t\t\tevent.sec = stream.readInt8();\n\t\t\t\t\tevent.frame = stream.readInt8();\n\t\t\t\t\tevent.subframe = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x58:\n\t\t\t\t\tevent.subtype = \"timeSignature\";\n\t\t\t\t\tif (length !== 4)\n\t\t\t\t\t\tthrow new Error(\"Expected length for timeSignature event is 4, got \" + length);\n\t\t\t\t\tevent.numerator = stream.readInt8();\n\t\t\t\t\tevent.denominator = Math.pow(2, stream.readInt8());\n\t\t\t\t\tevent.metronome = stream.readInt8();\n\t\t\t\t\tevent.thirtyseconds = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x59:\n\t\t\t\t\tevent.subtype = \"keySignature\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for keySignature event is 2, got \" + length);\n\t\t\t\t\tevent.key = stream.readInt8(true);\n\t\t\t\t\tevent.scale = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x7f:\n\t\t\t\t\tevent.subtype = \"sequencerSpecific\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tdefault:\n\t\t\t\t\t// console.log(\"Unrecognised meta event subtype: \" + subtypeByte);\n\t\t\t\t\tevent.subtype = \"unknown\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\n\t\t\t\t//event.data = stream.readString(length);\n\t\t\t\t//return event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf0) {\n\t\t\t\tevent.type = \"sysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf7) {\n\t\t\t\tevent.type = \"dividedSysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type byte: \" + eventTypeByte);\n\t\t}\n\t\telse {\n\t\t\t/* channel event */\n\t\t\tlet param1;\n\t\t\tif ((eventTypeByte & 0x80) === 0) {\n\t\t\t\t/* running status - reuse lastEventTypeByte as the event type.\n\t\t\t\t\teventTypeByte is actually the first parameter\n\t\t\t\t*/\n\t\t\t\tparam1 = eventTypeByte;\n\t\t\t\teventTypeByte = lastEventTypeByte;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparam1 = stream.readInt8();\n\t\t\t\tlastEventTypeByte = eventTypeByte;\n\t\t\t}\n\n\t\t\tconst eventType = eventTypeByte >> 4;\n\t\t\tevent.channel = eventTypeByte & 0x0f;\n\t\t\tevent.type = \"channel\";\n\n\t\t\tswitch (eventType) {\n\t\t\tcase 0x08:\n\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x09:\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\t\t\t\tif (event.velocity === 0)\n\t\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\telse\n\t\t\t\t\tevent.subtype = \"noteOn\";\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0a:\n\t\t\t\tevent.subtype = \"noteAftertouch\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.amount = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0b:\n\t\t\t\tevent.subtype = \"controller\";\n\t\t\t\tevent.controllerType = param1;\n\t\t\t\tevent.value = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0c:\n\t\t\t\tevent.subtype = \"programChange\";\n\t\t\t\tevent.programNumber = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0d:\n\t\t\t\tevent.subtype = \"channelAftertouch\";\n\t\t\t\tevent.amount = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0e:\n\t\t\t\tevent.subtype = \"pitchBend\";\n\t\t\t\tevent.value = param1 + (stream.readInt8() << 7);\n\n\t\t\t\treturn event;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type: \" + eventType);\n\n\t\t\t\t/*\n\t\t\t\tconsole.log(\"Unrecognised MIDI event type: \" + eventType);\n\t\t\t\tstream.readInt8();\n\t\t\t\tevent.subtype = 'unknown';\n\t\t\t\treturn event;\n\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n\n\n\tlet source = data;\n\tif (typeof data === \"string\")\n\t\tsource = data.split(\"\").map(c => c.charCodeAt(0));\n\n\tconst stream = new Stream(source);\n\tconst headerChunk = readChunk(stream);\n\tif (headerChunk.id !== \"MThd\" || headerChunk.length !== 6)\n\t\tthrow new Error(\"Bad .mid file - header not found\");\n\n\tconst headerStream = new Stream(headerChunk.data);\n\tconst formatType = headerStream.readInt16();\n\tconst trackCount = headerStream.readInt16();\n\tconst timeDivision = headerStream.readInt16();\n\n\tlet ticksPerBeat;\n\tif (timeDivision & 0x8000)\n\t\tthrow new Error(\"Expressing time division in SMTPE frames is not supported yet\");\n\telse\n\t\tticksPerBeat = timeDivision;\n\n\n\tconst header = {\n\t\tformatType,\n\t\ttrackCount,\n\t\tticksPerBeat,\n\t};\n\tconst tracks = [];\n\tfor (let i = 0; i < header.trackCount; i++) {\n\t\ttracks[i] = [];\n\t\tconst trackChunk = readChunk(stream);\n\t\tif (trackChunk.id !== \"MTrk\")\n\t\t\tthrow new Error(\"Unexpected chunk - expected MTrk, got \" + trackChunk.id);\n\n\t\tconst trackStream = new Stream(trackChunk.data);\n\t\twhile (!trackStream.eof()) {\n\t\t\tconst event = readEvent(trackStream);\n\t\t\ttracks[i].push(event);\n\t\t}\n\t}\n\n\treturn {\n\t\theader,\n\t\ttracks,\n\t};\n};\n","\r\n/* Wrapper for accessing strings through sequential writes */\r\n\r\n\r\n\r\nmodule.exports = class OStream {\r\n\tconstructor () {\r\n\t\tthis.buffer = \"\";\r\n\t}\r\n\r\n\twrite (str) {\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\t/* write a big-endian 32-bit integer */\r\n\twriteInt32 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 24) & 0xff) + String.fromCharCode((i >> 16) & 0xff) +\r\n\t\t\tString.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a big-endian 16-bit integer */\r\n\twriteInt16 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write an 8-bit integer */\r\n\twriteInt8 (i) {\r\n\t\tthis.buffer += String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a MIDI-style variable-length integer\r\n\t\t(big-endian value in groups of 7 bits,\r\n\t\twith top bit set to signify that another byte follows)\r\n\t*/\r\n\twriteVarInt (i) {\r\n\t\tif (i < 0)\r\n\t\t\tthrow new Error(\"OStream.writeVarInt minus number: \" + i);\r\n\r\n\t\tconst b = i & 0x7f;\r\n\t\ti >>= 7;\r\n\t\tlet str = String.fromCharCode(b);\r\n\r\n\t\twhile (i) {\r\n\t\t\tconst b = i & 0x7f;\r\n\t\t\ti >>= 7;\r\n\t\t\tstr = String.fromCharCode(b | 0x80) + str;\r\n\t\t}\r\n\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\tgetBuffer () {\r\n\t\treturn this.buffer;\r\n\t}\r\n\r\n\tgetArrayBuffer () {\r\n\t\treturn Uint8Array.from(this.buffer.split(\"\").map(c => c.charCodeAt(0))).buffer;\r\n\t}\r\n};\r\n","/*\r\nclass to encode the .mid file format\r\n(depends on streamEx.js)\r\n*/\r\n\r\nconst OStream = require(\"./streamEx.js\");\r\n\r\n\r\n\r\nmodule.exports = function OMidiFile ({ header, tracks }) {\r\n\tfunction writeChunk (stream, id, data) {\r\n\t\tconsole.assert(id.length === 4, \"chunk id must be 4 byte\");\r\n\r\n\t\tstream.write(id);\r\n\t\tstream.writeInt32(data.length);\r\n\t\tstream.write(data);\r\n\t}\r\n\r\n\tfunction writeEvent (stream, event) {\r\n\t\tif (event.subtype === \"unknown\")\r\n\t\t\treturn;\r\n\r\n\t\tstream.writeVarInt(event.deltaTime);\r\n\r\n\t\tswitch (event.type) {\r\n\t\tcase \"meta\":\r\n\t\t\tstream.writeInt8(0xff);\r\n\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"sequenceNumber\":\r\n\t\t\t\tstream.writeInt8(0x00);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt16(event.number);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"text\":\r\n\t\t\t\tstream.writeInt8(0x01);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"copyrightNotice\":\r\n\t\t\t\tstream.writeInt8(0x02);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"trackName\":\r\n\t\t\t\tstream.writeInt8(0x03);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"instrumentName\":\r\n\t\t\t\tstream.writeInt8(0x04);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"lyrics\":\r\n\t\t\t\tstream.writeInt8(0x05);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"marker\":\r\n\t\t\t\tstream.writeInt8(0x06);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"cuePoint\":\r\n\t\t\t\tstream.writeInt8(0x07);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"midiChannelPrefix\":\r\n\t\t\t\tstream.writeInt8(0x20);\r\n\t\t\t\tstream.writeVarInt(1);\r\n\r\n\t\t\t\tstream.writeInt8(event.channel);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"endOfTrack\":\r\n\t\t\t\tstream.writeInt8(0x2f);\r\n\t\t\t\tstream.writeVarInt(0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"setTempo\":\r\n\t\t\t\tstream.writeInt8(0x51);\r\n\t\t\t\tstream.writeVarInt(3);\r\n\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 16) & 0xff);\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 8) & 0xff);\r\n\t\t\t\tstream.writeInt8(event.microsecondsPerBeat & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"smpteOffset\":\r\n\t\t\t\tstream.writeInt8(0x54);\r\n\t\t\t\tstream.writeVarInt(5);\r\n\r\n\t\t\t\tvar frameByte = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 }[event.frameRate];\r\n\t\t\t\tstream.writeInt8(event.hour | frameByte);\r\n\t\t\t\tstream.writeInt8(event.min);\r\n\t\t\t\tstream.writeInt8(event.sec);\r\n\t\t\t\tstream.writeInt8(event.frame);\r\n\t\t\t\tstream.writeInt8(event.subframe);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"timeSignature\":\r\n\t\t\t\tstream.writeInt8(0x58);\r\n\t\t\t\tstream.writeVarInt(4);\r\n\r\n\t\t\t\tstream.writeInt8(event.numerator);\r\n\t\t\t\tstream.writeInt8(Math.log2(event.denominator));\r\n\t\t\t\tstream.writeInt8(event.metronome);\r\n\t\t\t\tstream.writeInt8(event.thirtyseconds);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"keySignature\":\r\n\t\t\t\tstream.writeInt8(0x59);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt8(event.key);\r\n\t\t\t\tstream.writeInt8(event.scale);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sequencerSpecific\":\r\n\t\t\t\tstream.writeInt8(0x7f);\r\n\t\t\t\tstream.writeVarInt(event.data.length);\r\n\r\n\t\t\t\tstream.write(event.data);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"sysEx\":\r\n\t\t\tstream.writeInt8(0xf0);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"dividedSysEx\":\r\n\t\t\tstream.writeInt8(0xf7);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"channel\":\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"noteOn\":\r\n\t\t\t\tstream.writeInt8(0x90 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteOff\":\r\n\t\t\t\tstream.writeInt8(0x80 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity ? event.velocity : 0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xa0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"controller\":\r\n\t\t\t\tstream.writeInt8(0xb0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.controllerType);\r\n\t\t\t\tstream.writeInt8(event.value);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"programChange\":\r\n\t\t\t\tstream.writeInt8(0xc0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.programNumber);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"channelAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xd0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pitchBend\":\r\n\t\t\t\tstream.writeInt8(0xe0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.value & 0xff);\r\n\t\t\t\tstream.writeInt8((event.value >> 7) & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow new Error(\"unhandled event type:\" + event.type);\r\n\t\t}\r\n\t}\r\n\r\n\tconst stream = new OStream();\r\n\r\n\tconst headerChunk = new OStream();\r\n\theaderChunk.writeInt16(header.formatType);\r\n\theaderChunk.writeInt16(tracks.length);\r\n\theaderChunk.writeInt16(header.ticksPerBeat);\r\n\r\n\twriteChunk(stream, \"MThd\", headerChunk.getBuffer());\r\n\r\n\tfor (let i = 0; i < tracks.length; ++i) {\r\n\t\tconst trackChunk = new OStream();\r\n\r\n\t\tfor (let ei = 0; ei < tracks[i].length; ++ei)\r\n\t\t\twriteEvent(trackChunk, tracks[i][ei]);\r\n\r\n\t\twriteChunk(stream, \"MTrk\", trackChunk.getBuffer());\r\n\t}\r\n\r\n\treturn stream.getArrayBuffer();\r\n};\r\n","\nmodule.exports = {\n\tparseMidiData: require(\"./midifile.js\"),\n\tencodeMidiFile: require(\"./midifileEx.js\"),\n};\n","\nconst midiToSequence = (midiFile, {timeWarp = 1} = {}) => {\n\tconst trackStates = [];\n\tlet beatsPerMinute = 120;\n\tconst ticksPerBeat = midiFile.header.ticksPerBeat;\n\n\tfor (let i = 0; i < midiFile.tracks.length; i++) {\n\t\ttrackStates[i] = {\n\t\t\tnextEventIndex: 0,\n\t\t\tticksToNextEvent: (\n\t\t\t\tmidiFile.tracks[i].length ?\n\t\t\t\t\tmidiFile.tracks[i][0].deltaTime :\n\t\t\t\t\tnull\n\t\t\t),\n\t\t};\n\t}\n\n\tfunction getNextEvent () {\n\t\tlet ticksToNextEvent = null;\n\t\tlet nextEventTrack = null;\n\t\tlet nextEventIndex = null;\n\n\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\tif (\n\t\t\t\ttrackStates[i].ticksToNextEvent != null\n\t\t\t\t&& (ticksToNextEvent == null || trackStates[i].ticksToNextEvent < ticksToNextEvent)\n\t\t\t) {\n\t\t\t\tticksToNextEvent = trackStates[i].ticksToNextEvent;\n\t\t\t\tnextEventTrack = i;\n\t\t\t\tnextEventIndex = trackStates[i].nextEventIndex;\n\t\t\t}\n\t\t}\n\t\tif (nextEventTrack != null) {\n\t\t\t/* consume event from that track */\n\t\t\tconst nextEvent = midiFile.tracks[nextEventTrack][nextEventIndex];\n\t\t\tif (midiFile.tracks[nextEventTrack][nextEventIndex + 1]) \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent += midiFile.tracks[nextEventTrack][nextEventIndex + 1].deltaTime;\n\t\t\telse \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent = null;\n\n\t\t\ttrackStates[nextEventTrack].nextEventIndex += 1;\n\t\t\t/* advance timings on all tracks by ticksToNextEvent */\n\t\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\t\tif (trackStates[i].ticksToNextEvent != null) \n\t\t\t\t\ttrackStates[i].ticksToNextEvent -= ticksToNextEvent;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tticksToEvent: ticksToNextEvent,\n\t\t\t\tevent: nextEvent,\n\t\t\t\ttrack: nextEventTrack,\n\t\t\t};\n\t\t}\n\t\telse \n\t\t\treturn null;\n\t\t\n\t};\n\t//\n\tlet midiEvent;\n\tconst events = [];\n\t//\n\tfunction processEvents () {\n\t\tfunction processNext () {\n\t\t\tlet secondsToGenerate = 0;\n\t\t\tif (midiEvent.ticksToEvent > 0) {\n\t\t\t\tconst beatsToGenerate = midiEvent.ticksToEvent / ticksPerBeat;\n\t\t\t\tsecondsToGenerate = beatsToGenerate / (beatsPerMinute / 60);\n\t\t\t}\n\n\t\t\t// beatsPerMinute must be changed after secondsToGenerate calculation\n\t\t\tif ( midiEvent.event.type == \"meta\" && midiEvent.event.subtype == \"setTempo\" ) {\n\t\t\t\t// tempo change events can occur anywhere in the middle and affect events that follow\n\t\t\t\tbeatsPerMinute = 60e+6 / midiEvent.event.microsecondsPerBeat;\n\t\t\t}\n\n\t\t\tconst time = (secondsToGenerate * 1000 * timeWarp) || 0;\n\t\t\tevents.push([ midiEvent, time ]);\n\t\t\tmidiEvent = getNextEvent();\n\t\t};\n\t\t//\n\t\tif (midiEvent = getNextEvent()) {\n\t\t\twhile (midiEvent)\n\t\t\t\tprocessNext();\n\t\t}\n\t};\n\n\tprocessEvents();\n\n\treturn events;\n};\n\n\nconst trimSequence = seq => {\n\tconst status = new Map();\n\n\treturn seq.filter(([{event, ticksToEvent}]) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tstatus.clear();\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn true;\n\n\t\tconst key = `${event.subtype}|${event.channel}|${event.noteNumber}`;\n\n\t\tif (status.get(key)) {\n\t\t\t//console.debug(\"event trimmed:\", event, ticksToEvent);\n\t\t\treturn false;\n\t\t}\n\n\t\tstatus.set(key, event);\n\n\t\treturn true;\n\t});\n};\n\n\nconst fixOverlapNotes = seq => {\n\tconst noteMap = new Map();\n\tconst overlapMap = new Map();\n\tconst swaps = [];\n\n\tlet leapIndex = -1;\n\n\tseq.forEach(([{event, ticksToEvent}], index) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tleapIndex = index;\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn;\n\n\t\tconst key = `${event.channel}|${event.noteNumber}`;\n\n\t\tswitch (event.subtype) {\n\t\tcase \"noteOn\":\n\t\t\tif (noteMap.get(key))\n\t\t\t\toverlapMap.set(key, leapIndex);\n\t\t\telse\n\t\t\t\tnoteMap.set(key, leapIndex);\n\n\t\t\tbreak;\n\t\tcase \"noteOff\":\n\t\t\tif (overlapMap.get(key)) {\n\t\t\t\tswaps.push([overlapMap.get(key), index]);\n\t\t\t\toverlapMap.delete(key);\n\t\t\t}\n\t\t\telse\n\t\t\t\tnoteMap.delete(key);\n\n\t\t\tbreak;\n\t\t}\n\t});\n\n\t// shift overlapped swaps\n\tswaps.forEach((swap, i) => {\n\t\tfor (let ii = i - 1; ii >= 0; --ii) {\n\t\t\tconst pre = swaps[ii];\n\t\t\tif (pre[1] < swap[0])\n\t\t\t\tbreak;\n\n\t\t\tif (swap[0] > pre[0])\n\t\t\t\t++swap[0];\n\t\t}\n\t});\n\n\t//console.debug(\"swaps:\", swaps);\n\tswaps.forEach(([front, back]) => {\n\t\tif (back >= seq.length - 1 || front < 0)\n\t\t\treturn;\n\n\t\tconst offEvent = seq[back];\n\t\tconst nextEvent = seq[back + 1];\n\t\tconst leapEvent = seq[front];\n\n\t\tif (!leapEvent[0].ticksToEvent) {\n\t\t\tconsole.warn(\"invalid front index:\", front, back, leapEvent);\n\t\t\treturn;\n\t\t}\n\n\t\t// ms per tick\n\t\tconst tempo = leapEvent[1] / leapEvent[0].ticksToEvent;\n\n\t\tnextEvent[1] += offEvent[1];\n\t\tnextEvent[0].ticksToEvent += offEvent[0].ticksToEvent;\n\n\t\toffEvent[0].ticksToEvent = leapEvent[0].ticksToEvent - 1;\n\t\tleapEvent[0].ticksToEvent = 1;\n\n\t\toffEvent[1] = offEvent[0].ticksToEvent * tempo;\n\t\tleapEvent[1] = leapEvent[0].ticksToEvent * tempo;\n\t\t//console.debug(\"swap:\", [front, back], offEvent, nextEvent, leapEvent);\n\n\t\tseq.splice(back, 1);\n\t\tseq.splice(front, 0, offEvent);\n\t});\n\n\treturn seq;\n};\n\n\n\nmodule.exports = {\n\tmidiToSequence,\n\ttrimSequence,\n\tfixOverlapNotes,\n};\n","\nconst MidiSequence = require(\"./MidiSequence.js\");\n\n\n\nconst PedalControllerTypes = {\n\t64: \"Sustain\",\n\t65: \"Portamento\",\n\t66: \"Sostenuto\",\n\t67: \"Soft\",\n};\n\n\n\nclass Notation {\n\tstatic parseMidi (data, {fixOverlap = true} = {}) {\n\t\tconst channelStatus = [];\n\t\tconst pedalStatus = {};\n\t\tconst pedals = {};\n\t\tconst channels = [];\n\t\tconst bars = [];\n\t\tlet time = 0;\n\t\tlet millisecondsPerBeat = 600000 / 120;\n\t\tlet beats = 0;\n\t\tlet numerator = 4;\n\t\tlet barIndex = 0;\n\t\tconst keyRange = {};\n\t\tlet rawTicks = 0;\n\t\tlet ticks = 0;\n\t\tlet correspondences;\n\t\tconst tempos = [];\n\n\t\tconst ticksPerBeat = data.header.ticksPerBeat;\n\n\t\tlet rawEvents = MidiSequence.midiToSequence(data);\n\n\t\tif (fixOverlap)\n\t\t\trawEvents = MidiSequence.trimSequence(MidiSequence.fixOverlapNotes(rawEvents));\n\n\t\tconst events = rawEvents.map(d => ({\n\t\t\tdata: d[0].event,\n\t\t\ttrack: d[0].track,\n\t\t\tdeltaTime: d[1],\n\t\t\tdeltaTicks: d[0].ticksToEvent,\n\t\t}));\n\n\t\tlet index = 0;\n\n\t\tconst ticksNormal = 1;\n\n\t\tfor (const ev of events) {\n\t\t\trawTicks += ev.deltaTicks;\n\t\t\tticks = Math.round(rawTicks * ticksNormal);\n\n\t\t\tif (ev.deltaTicks > 0) {\n\t\t\t\t// append bars\n\t\t\t\tconst deltaBeats = ev.deltaTicks / ticksPerBeat;\n\t\t\t\tfor (let b = Math.ceil(beats); b < beats + deltaBeats; ++b) {\n\t\t\t\t\tconst t = time + (b - beats) * millisecondsPerBeat;\n\t\t\t\t\tbars.push({time: t, index: barIndex % numerator});\n\n\t\t\t\t\t++barIndex;\n\t\t\t\t}\n\n\t\t\t\tbeats += deltaBeats;\n\t\t\t}\n\n\t\t\ttime += ev.deltaTime;\n\n\t\t\t//const ticksTime = beats * millisecondsPerBeat;\n\t\t\t//console.log(\"time:\", time, ticksTime, ticksTime - time);\n\n\t\t\tev.time = time;\n\t\t\tev.ticks = ticks;\n\n\t\t\tconst event = ev.data;\n\t\t\tswitch (event.type) {\n\t\t\tcase \"channel\":\n\t\t\t\t//channelStatus[event.channel] = channelStatus[event.channel] || [];\n\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"noteOn\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\t\t\t\t\t\t//channelStatus[event.channel][pitch] = {\n\t\t\t\t\t\tchannelStatus.push({\n\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\tstartTick: ticks,\n\t\t\t\t\t\t\tstart: time,\n\t\t\t\t\t\t\tvelocity: event.velocity,\n\t\t\t\t\t\t\tbeats: beats,\n\t\t\t\t\t\t\ttrack: ev.track,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tkeyRange.low = Math.min(keyRange.low || pitch, pitch);\n\n\t\t\t\t\t\tev.index = index;\n\t\t\t\t\t\t++index;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"noteOff\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\n\t\t\t\t\t\tchannels[event.channel] = channels[event.channel] || [];\n\n\t\t\t\t\t\tconst statusIndex = channelStatus.findIndex(status => status.channel == event.channel && status.pitch == pitch);\n\t\t\t\t\t\tif (statusIndex >= 0) {\n\t\t\t\t\t\t\tconst status = channelStatus.splice(statusIndex, 1)[0];\n\n\t\t\t\t\t\t\tchannels[event.channel].push({\n\t\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\t\tstartTick: status.startTick,\n\t\t\t\t\t\t\t\tendTick: ticks,\n\t\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\t\tstart: status.start,\n\t\t\t\t\t\t\t\tduration: time - status.start,\n\t\t\t\t\t\t\t\tvelocity: status.velocity,\n\t\t\t\t\t\t\t\tbeats: status.beats,\n\t\t\t\t\t\t\t\ttrack: status.track,\n\t\t\t\t\t\t\t\tfinger: status.finger,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tconsole.debug(\"unexpected noteOff: \", time, event);\n\n\t\t\t\t\t\tkeyRange.high = Math.max(keyRange.high || pitch, pitch);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"controller\":\n\t\t\t\t\tswitch (event.controllerType) {\n\t\t\t\t\t// pedal controllers\n\t\t\t\t\tcase 64:\n\t\t\t\t\tcase 65:\n\t\t\t\t\tcase 66:\n\t\t\t\t\tcase 67:\n\t\t\t\t\t\tconst pedalType = PedalControllerTypes[event.controllerType];\n\n\t\t\t\t\t\tpedalStatus[event.channel] = pedalStatus[event.channel] || {};\n\t\t\t\t\t\tpedals[event.channel] = pedals[event.channel] || [];\n\n\t\t\t\t\t\tconst status = pedalStatus[event.channel][pedalType];\n\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tpedals[event.channel].push({type: pedalType, start: status.start, duration: time - status.start, value: status.value});\n\t\t\t\t\t\tpedalStatus[event.channel][pedalType] = {start: time, value: event.value};\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase \"meta\":\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"setTempo\":\n\t\t\t\t\tmillisecondsPerBeat = event.microsecondsPerBeat / 1000;\n\t\t\t\t\t//beats = Math.round(beats);\n\t\t\t\t\t//console.assert(Number.isFinite(time), \"invalid time:\", time);\n\t\t\t\t\ttempos.push({tempo: event.microsecondsPerBeat, tick: ticks, time});\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"timeSignature\":\n\t\t\t\t\tnumerator = event.numerator;\n\t\t\t\t\tbarIndex = 0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tif (!correspondences && /^find-corres:/.test(event.text)) {\n\t\t\t\t\t\tconst captures = event.text.match(/:([\\d\\,-]+)/);\n\t\t\t\t\t\tconst str = captures && captures[1] || \"\";\n\t\t\t\t\t\tcorrespondences = str.split(\",\").map(s => Number(s));\n\t\t\t\t\t}\n\t\t\t\t\telse if (/fingering\\(.*\\)/.test(event.text)) {\n\t\t\t\t\t\tconst [_, fingers] = event.text.match(/\\((.+)\\)/);\n\t\t\t\t\t\tconst finger = Number(fingers);\n\t\t\t\t\t\tif (!Number.isNaN(finger)) {\n\t\t\t\t\t\t\tconst status = channelStatus[channelStatus.length - 1];\n\t\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\t\tstatus.finger = finger;\n\n\t\t\t\t\t\t\tconst event = events.find(e => e.index == index - 1);\n\t\t\t\t\t\t\tif (event)\n\t\t\t\t\t\t\t\tevent.data.finger = finger;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"copyrightNotice\":\n\t\t\t\t\tconsole.log(\"MIDI copyright:\", event.text);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tchannelStatus.forEach(status => {\n\t\t\tconsole.debug(\"unclosed noteOn event at\", status.startTick, status);\n\n\t\t\tchannels[status.channel].push({\n\t\t\t\tstartTick: status.startTick,\n\t\t\t\tendTick: ticks,\n\t\t\t\tpitch: status.pitch,\n\t\t\t\tstart: status.start,\n\t\t\t\tduration: time - status.start,\n\t\t\t\tvelocity: status.velocity,\n\t\t\t\tbeats: status.beats,\n\t\t\t\ttrack: status.track,\n\t\t\t\tfinger: status.finger,\n\t\t\t});\n\t\t});\n\n\t\treturn new Notation({\n\t\t\tchannels,\n\t\t\tkeyRange,\n\t\t\tpedals,\n\t\t\tbars,\n\t\t\tendTime: time,\n\t\t\tendTick: ticks,\n\t\t\tcorrespondences,\n\t\t\tevents,\n\t\t\ttempos,\n\t\t\tticksPerBeat,\n\t\t\tmeta: {},\n\t\t});\n\t}\n\n\n\tconstructor (fields) {\n\t\tObject.assign(this, fields);\n\n\t\t// channels to notes\n\t\tthis.notes = [];\n\t\tfor (const channel of this.channels) {\n\t\t\tif (channel) {\n\t\t\t\tfor (const note of channel)\n\t\t\t\t\tthis.notes.push(note);\n\t\t\t}\n\t\t}\n\t\tthis.notes.sort(function (n1, n2) {\n\t\t\treturn n1.start - n2.start;\n\t\t});\n\n\t\tfor (const i in this.notes)\n\t\t\tthis.notes[i].index = Number(i);\n\n\n\t\t// duration\n\t\tthis.duration = this.notes.length > 0 ? (this.endTime - this.notes[0].start) : 0,\n\n\t\t//this.endSoftIndex = this.notes.length ? this.notes[this.notes.length - 1].softIndex : 0;\n\n\n\t\t// pitch map\n\t\tthis.pitchMap = [];\n\t\tfor (const c in this.channels) {\n\t\t\tfor (const n in this.channels[c]) {\n\t\t\t\tconst pitch = this.channels[c][n].pitch;\n\t\t\t\tthis.pitchMap[pitch] = this.pitchMap[pitch] || [];\n\n\t\t\t\tthis.pitchMap[pitch].push(this.channels[c][n]);\n\t\t\t}\n\t\t}\n\n\t\tthis.pitchMap.forEach(notes => notes.sort((n1, n2) => n1.start - n2.start));\n\n\n\t\t/*// setup measure notes index\n\t\tif (this.measures) {\n\t\t\tconst measure_list = [];\n\n\t\t\tlet last_measure = null;\n\t\t\tconst measure_entries = Object.entries(this.measures).sort((e1, e2) => Number(e1[0]) - Number(e2[0]));\n\t\t\tfor (const [t, measure] of measure_entries) {\n\t\t\t\t//console.log(\"measure time:\", Number(t));\n\t\t\t\tmeasure.startTick = Number(t);\n\t\t\t\tmeasure.notes = [];\n\n\t\t\t\tif (last_measure)\n\t\t\t\t\tlast_measure.endTick = measure.startTick;\n\n\t\t\t\tconst m = measure.measure;\n\t\t\t\tmeasure_list[m] = measure_list[m] || [];\n\t\t\t\tmeasure_list[m].push(measure);\n\n\t\t\t\tlast_measure = measure;\n\t\t\t}\n\t\t\tif (last_measure)\n\t\t\t\tlast_measure.endTick = this.notes[this.notes.length - 1].endTick;\n\t\t\tfor (const i in this.notes) {\n\t\t\t\tconst note = this.notes[i];\n\t\t\t\tfor (const t in this.measures) {\n\t\t\t\t\tconst measure = this.measures[t];\n\t\t\t\t\tif (note.startTick >= measure.startTick && note.startTick < measure.endTick || note.endTick > measure.startTick && note.endTick <= measure.endTick)\n\t\t\t\t\t\tmeasure.notes.push(note);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.measure_list = measure_list;\n\t\t}*/\n\n\n\t\t// prepare beats info\n\t\tif (this.meta.beatInfos) {\n\t\t\tfor (let i = 0; i < this.meta.beatInfos.length; ++i) {\n\t\t\t\tconst info = this.meta.beatInfos[i];\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tconst lastInfo = this.meta.beatInfos[i - 1];\n\t\t\t\t\tinfo.beatIndex = lastInfo.beatIndex + Math.ceil((info.tick - lastInfo.tick) / this.ticksPerBeat);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tinfo.beatIndex = 0;\n\t\t\t}\n\t\t}\n\n\n\t\t// compute tempos tick -> time\n\t\t{\n\t\t\tlet time = 0;\n\t\t\tlet ticks = 0;\n\t\t\tlet tempo = 500000;\n\t\t\tfor (const entry of this.tempos) {\n\t\t\t\tconst deltaTicks = entry.tick - ticks;\n\t\t\t\ttime += (tempo / 1000) * deltaTicks / this.ticksPerBeat;\n\n\t\t\t\tticks = entry.tick;\n\t\t\t\ttempo = entry.tempo;\n\n\t\t\t\tentry.time = time;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfindChordBySoftindex (softIndex, radius = 0.8) {\n\t\treturn this.notes.filter(note => Math.abs(note.softIndex - softIndex) < radius);\n\t}\n\n\n\taverageTempo (tickRange) {\n\t\ttickRange = tickRange || {from: 0, to: this.endtick};\n\n\t\tconsole.assert(this.tempos, \"no tempos.\");\n\t\tconsole.assert(tickRange.to > tickRange.from, \"range is invalid:\", tickRange);\n\n\t\tconst span = index => {\n\t\t\tconst from = Math.max(tickRange.from, this.tempos[index].tick);\n\t\t\tconst to = (index < this.tempos.length - 1) ? Math.min(this.tempos[index + 1].tick, tickRange.to) : tickRange.to;\n\n\t\t\treturn Math.max(0, to - from);\n\t\t};\n\n\t\tconst tempo_sum = this.tempos.reduce((sum, tempo, index) => sum + tempo.tempo * span(index), 0);\n\n\t\tconst average = tempo_sum / (tickRange.to - tickRange.from);\n\n\t\t// convert microseconds per beat to beats per minute\n\t\treturn 60e+6 / average;\n\t}\n\n\n\tticksToTime (tick) {\n\t\tconsole.assert(Number.isFinite(tick), \"invalid tick value:\", tick);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.tick > tick);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.time + (tick - tempo.tick) * tempo.tempo * 1e-3 / this.ticksPerBeat;\n\t}\n\n\n\ttimeToTicks (time) {\n\t\tconsole.assert(Number.isFinite(time), \"invalid time value:\", time);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.time > time);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.tick + (time - tempo.time) * this.ticksPerBeat / (tempo.tempo * 1e-3);\n\t}\n\n\n\ttickRangeToTimeRange (tickRange) {\n\t\tconsole.assert(tickRange.to >= tickRange.from, \"invalid tick range:\", tickRange);\n\n\t\treturn {\n\t\t\tfrom: this.ticksToTime(tickRange.from),\n\t\t\tto: this.ticksToTime(tickRange.to),\n\t\t};\n\t}\n\n\n\t/*getMeasureRange (measureRange) {\n\t\tconsole.assert(Number.isInteger(measureRange.start) && Number.isInteger(measureRange.end), \"invalid measure range:\", measureRange);\n\t\tconsole.assert(this.measure_list && this.measure_list[measureRange.start] && this.measure_list[measureRange.end], \"no measure data for specific index:\", this.measure_list, measureRange);\n\n\t\tconst startMeasure = this.measure_list[measureRange.start][0];\n\t\tlet endMeasure = null;\n\t\tfor (const measure of this.measure_list[measureRange.end]) {\n\t\t\tif (measure.endTick > startMeasure.startTick) {\n\t\t\t\tendMeasure = measure;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// there no path between start measure and end measure.\n\t\tif (!endMeasure)\n\t\t\treturn null;\n\n\t\tconst tickRange = {from: startMeasure.startTick, to: endMeasure.endTick, duration: endMeasure.endTick - startMeasure.startTick};\n\t\tconst timeRange = this.tickRangeToTimeRange(tickRange);\n\t\ttimeRange.duration = timeRange.to - timeRange.from;\n\n\t\treturn {\n\t\t\ttickRange,\n\t\t\ttimeRange,\n\t\t};\n\t}*/\n\n\n\tscaleTempo ({factor, headTempo}) {\n\t\tconsole.assert(this.tempos && this.tempos.length, \"[Notation.scaleTempo] tempos is empty.\");\n\n\t\tif (headTempo)\n\t\t\tfactor = headTempo / this.tempos[0].tempo;\n\n\t\tconsole.assert(Number.isFinite(factor) && factor > 0, \"[Notation.scaleTempo] invalid factor:\", factor);\n\n\t\tthis.tempos.forEach(tempo => {\n\t\t\ttempo.tempo *= factor;\n\t\t\ttempo.time *= factor;\n\t\t});\n\t\tthis.events.forEach(event => {\n\t\t\tevent.deltaTime *= factor;\n\t\t\tevent.time *= factor;\n\t\t});\n\t\tthis.notes.forEach(note => {\n\t\t\tnote.start *= factor;\n\t\t\tnote.duration *= factor;\n\t\t});\n\n\t\tthis.endTime *= factor;\n\t}\n};\n\n\n\nmodule.exports = {\n\tNotation,\n};\n","\nconst { Notation } = require(\"./MusicNotation.js\");\n\n\n\n//const msDelay = ms => new Promise(resolve => setTimeout(resolve, ms));\nconst animationDelay = () => new Promise(resolve => requestAnimationFrame(resolve));\n\n\nclass MidiPlayer {\n\tconstructor (midiData, {cacheSpan = 600, onMidi, onPlayFinish, onTurnCursor} = {}) {\n\t\tthis.cacheSpan = cacheSpan;\n\t\tthis.onMidi = onMidi;\n\t\tthis.onPlayFinish = onPlayFinish;\n\t\tthis.onTurnCursor = onTurnCursor;\n\n\t\tlet notation;\n\t\tif (midiData.notes && Number.isFinite(midiData.endTime))\n\t\t\tnotation = midiData;\n\t\telse\n\t\t\tnotation = Notation.parseMidi(midiData);\n\n\t\tthis.notation = notation;\n\t\tthis.events = notation.events;\n\t\t//console.log(\"events:\", this.events);\n\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t\tthis.startTime = performance.now();\n\t\tthis.duration = notation.endTime;\n\t\tthis.cursorTurnDelta = 0;\n\n\t\tconsole.assert(notation.tempos && notation.tempos.length, \"[MidiPlayer] invalid notation, tempos is empty.\");\n\t}\n\n\n\tdispose () {\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t}\n\n\n\tget progressTicks () {\n\t\treturn this.notation.timeToTicks(this.progressTime);\n\t}\n\n\n\tset progressTicks (value) {\n\t\tthis.progressTime = this.notation.ticksToTime(value);\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(this.progressTime);\n\t}\n\n\n\tasync play ({nextFrame = animationDelay} = {}) {\n\t\tif (this.progressTime >= this.duration)\n\t\t\tthis.progressTime = 0;\n\n\t\tlet now = performance.now();\n\t\tthis.startTime = now - this.progressTime;\n\n\t\tthis.isPlaying = true;\n\n\t\tlet currentEventIndex = this.events.findIndex(event => event.time >= now - this.startTime);\n\n\t\twhile (this.isPlaying) {\n\t\t\tfor (; currentEventIndex < this.events.length; ++currentEventIndex) {\n\t\t\t\tconst event = this.events[currentEventIndex];\n\t\t\t\t//console.log(\"play event:\", currentEventIndex, event.time, this.progressTime + this.cacheSpan);\n\t\t\t\tif (!event || event.time > this.progressTime + this.cacheSpan)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (event.data.type === \"channel\" && this.startTime + event.time >= now)\n\t\t\t\t\tif (this.onMidi)\n\t\t\t\t\t\tthis.onMidi(event.data, this.startTime + event.time);\n\t\t\t}\n\n\t\t\tawait nextFrame();\n\n\t\t\tif (!this.isPlaying)\n\t\t\t\tbreak;\n\n\t\t\tif (this.cursorTurnDelta !== 0) {\n\t\t\t\tconst backturn = this.cursorTurnDelta < 0;\n\n\t\t\t\tthis.startTime -= this.cursorTurnDelta;\n\t\t\t\tthis.cursorTurnDelta = 0;\n\n\t\t\t\tif (backturn) {\n\t\t\t\t\tfor (; currentEventIndex > 0; --currentEventIndex) {\n\t\t\t\t\t\tconst eventTime = this.events[currentEventIndex].time;\n\t\t\t\t\t\tif (this.startTime + eventTime < now)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnow = performance.now();\n\n\t\t\tthis.progressTime = now - this.startTime;\n\n\t\t\tif (this.progressTime > this.duration) {\n\t\t\t\tthis.isPlaying = false;\n\n\t\t\t\tif (this.onPlayFinish)\n\t\t\t\t\tthis.onPlayFinish();\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpause () {\n\t\tthis.isPlaying = false;\n\t}\n\n\n\tturnCursor (time) {\n\t\t//console.log(\"onTurnCursor:\", time, oldTime);\n\t\tif (this.isPlaying)\n\t\t\tthis.cursorTurnDelta += time - this.progressTime;\n\t\telse\n\t\t\tthis.progressTime = time;\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(time);\n\t}\n};\n\n\n\nmodule.exports = MidiPlayer;\n","\nmodule.exports = {\n\tCostStepAttenuation: 0.6,\n\tSkipDeep: 3,\n\tPriorDistanceSigmoidFactor: 0.1,\n\tPriorValueSigmoidFactor: 0.12,\n\n\tSkipCost: 0.5,\n\tLagOffsetCost: 1,\n\tLeadOffsetCost: 1.6,\n\tZeroOffsetCost: 0.58,\n\n\tRelocationThreshold: 6,\n};\n","\nconst {pick} = require(\"lodash\");\n\nconst Config = require(\"./config.js\");\n\n\n\nclass Node {\n\tconstructor (s_note, c_note) {\n\t\tthis.s_note = s_note;\n\t\tthis.c_note = c_note;\n\n\t\tconsole.assert(this.s_note.softIndex != null, \"s_note softIndex is null\");\n\t\tthis.offset = this.s_note.softIndex - this.c_note.softIndex;\n\n\t\tthis._prev = null;\n\t\tthis._totalCost = 0;\n\t\tthis._value = 0;\n\t\tthis.cacheDirty = true;\n\n\t\t//this.evaluatePrev(Node.Zero);\n\t}\n\n\n\tget prev () {\n\t\treturn this._prev;\n\t}\n\n\n\tset prev (value) {\n\t\tif (value != this._prev) {\n\t\t\tthis._prev = value;\n\t\t\tthis.cacheDirty = true;\n\t\t}\n\t}\n\n\n\tget si () {\n\t\treturn this.s_note.index;\n\t}\n\n\n\tget ci () {\n\t\treturn this.c_note.index;\n\t}\n\n\n\tget root () {\n\t\treturn this.prev.root || this;\n\t}\n\n\n\tget rootSi () {\n\t\treturn !this.prev.zero ? this.prev.rootSi : this.si;\n\t}\n\n\n\tget id () {\n\t\treturn `${this.s_note.index},${this.c_note.index}`;\n\t}\n\n\n\tstatic cost (prev, skip, self) {\n\t\treturn prev * Config.CostStepAttenuation + Math.tanh(skip * Config.SkipCost) + Math.tanh(self * 0.5);\n\t}\n\n\n\tupdateCache () {\n\t\tif (this.cacheDirty) {\n\t\t\tthis._totalCost = Node.cost(this.prev.totalCost, this.si - this.prev.si - 1, this.selfCost);\n\t\t\tthis._value = this.prev.value + 1 - Math.tanh(this.selfCost * 0.5);\n\n\t\t\tthis.cacheDirty = false;\n\t\t}\n\t}\n\n\n\tget totalCost () {\n\t\tthis.updateCache();\n\n\t\treturn this._totalCost;\n\t}\n\n\n\tget value () {\n\t\tthis.updateCache();\n\n\t\treturn this._value;\n\t}\n\n\n\tget deep () {\n\t\treturn this.prev.deep + 1;\n\t}\n\n\n\tget path () {\n\t\tconst path = [];\n\t\tfor (let node = this; !node.zero; node = node.prev) {\n\t\t\tpath[node.si] = node.ci;\n\t\t}\n\n\t\tfor (let i = 0; i < path.length; ++i)\n\t\t\tif (typeof path[i] != \"number\")\n\t\t\t\tpath[i] = -1;\n\n\t\treturn path;\n\t}\n\n\n\tdump () {\n\t\treturn pick(this, [\"id\", \"si\", \"ci\", \"rootSi\", \"value\", \"deep\", \"rootSi\", \"offset\", \"prior\", \"selfCost\", \"totalCost\"]);\n\t}\n\n\n\tevaluatePrev (node) {\n\t\tconst cost = this.evaluatePrevCost(node);\n\n\t\tconsole.assert(this.si - node.si >= 1, \"node index error:\", this, node/*, {get [Symbol.toStringTag]() {debugger}}*/);\n\t\t//if (this.si - node.si < 1)\n\t\t//\tdebugger;\n\n\t\tconst totalCost = Node.cost(node.totalCost, this.si - node.si - 1, cost);\n\n\t\tif (!this.prev || totalCost < this.totalCost) {\n\t\t\tthis.prev = node;\n\t\t\tthis.selfCost = cost;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tevaluatePrevCost (node) {\n\t\tlet cost = 0;\n\n\t\tif (node.offset != null) {\n\t\t\tconst bias = this.offset - node.offset;\n\t\t\tconst costCoeff = node.zero ? Config.ZeroOffsetCost : (bias > 0 ? Config.LagOffsetCost : Config.LeadOffsetCost);\n\t\t\tcost += (bias * costCoeff) ** 2;\n\t\t}\n\n\t\treturn cost;\n\t}\n\n\n\tpriorByOffset (offset) {\n\t\tconst distance = Math.abs(this.offset - offset) / 1;//(this.s_note.deltaSi + 0.04);\n\n\t\treturn Math.tanh(this.value * Config.PriorValueSigmoidFactor) - Math.tanh(distance * Config.PriorDistanceSigmoidFactor);\n\t\t//return Math.log(this.value) * Math.tanh(4 / distance);\n\t\t//return this.value - distance;\n\t}\n\n\n\tstatic zero () {\n\t\treturn {\n\t\t\tzero: true,\n\t\t\ttotalCost: 0,\n\t\t\tvalue: 0,\n\t\t\tsi: -1,\n\t\t\tci: -1,\n\t\t\tdeep: 0,\n\t\t\toffset: 0,\n\t\t};\n\t}\n};\n\n\n\nmodule.exports = Node;\n","\nconst Config = require(\"./config.js\");\nconst Node = require(\"./node.js\");\n\n\n\nclass Navigator {\n\tconstructor (criterion, sample, options = {}) {\n\t\tthis.criterion = criterion;\n\t\tthis.sample = sample;\n\n\t\tthis.getCursorOffset = options.getCursorOffset || (() => null);\n\t\tthis.outOfPage = options.outOfPage;\n\n\t\tthis.bestNode = null;\n\t\tthis.fineCursor = null;\n\n\t\tthis.breakingSI = sample.notes.length - 1;\n\n\t\tthis.zeroNode = Node.zero();\n\t\tthis.zeroNode.offset = this.getCursorOffset() || 0;\n\n\t\tthis.relocationThreshold = options.relocationThreshold || Config.RelocationThreshold;\n\t}\n\n\n\tstep (index) {\n\t\t//console.log(\"step:\", this.zeroNode.offset);\n\t\tconst note = this.sample.notes[index];\n\n\t\tif (note.matches.length > 0) {\n\t\t\t//console.log(\"zeroNode.offset:\", index, this.zeroNode.offset);\n\t\t\tnote.matches.forEach(node => {\n\t\t\t\tnode.evaluatePrev(this.zeroNode);\n\t\t\t\t//console.log(\"node:\", node, node.evaluatePrevCost(this.zeroNode), node.offset, this.zeroNode.offset);\n\n\t\t\t\tfor (let si = index - 1; si >= Math.max(this.breakingSI + 1, index - Config.SkipDeep); --si) {\n\t\t\t\t\t//const skipCost = Config.SkipCost * (index - 1 - si);\n\n\t\t\t\t\tconst prevNote = this.sample.notes[si];\n\t\t\t\t\tconsole.assert(prevNote, \"prevNote is null:\", si, index, this.sample.notes);\n\t\t\t\t\tprevNote.matches.forEach(prevNode => {\n\t\t\t\t\t\tconst bias = node.offset - prevNode.offset;\n\t\t\t\t\t\tif (/*prevNode.totalCost + skipCost < node.totalCost\n\t\t\t\t\t\t\t&&*/ (bias < 2 / Config.LagOffsetCost && bias > -2 / Config.LeadOffsetCost))\n\t\t\t\t\t\t\tnode.evaluatePrev(prevNode);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tnode.prior = node.totalCost > 1.99 ? -1 : node.priorByOffset(this.zeroNode.offset);\n\n\t\t\t\tif (node.prior > 0 && this.outOfPage) {\n\t\t\t\t\tconst tick = this.criterion.notes[node.ci].startTick;\n\t\t\t\t\tif (this.outOfPage(tick))\n\t\t\t\t\t\tnode.prior -= 0.7;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tnote.matches.sort((c1, c2) => c2.prior - c1.prior);\n\t\t\tthis.cursors = note.matches;\n\t\t\t//console.log(\"navigator cursors:\", this.cursors);\n\n\t\t\tlet fineCursor = null;\n\t\t\tconst nullLength = this.nullSteps(index);\n\n\t\t\tconst cursor = this.cursors[0];\n\t\t\tif (cursor && cursor.totalCost < 1) {\n\t\t\t\t//console.log(\"nullLength:\", nullLength, nullLength * Math.log(cursor.value / 4));\n\t\t\t\tif (cursor.prior > 0 || (cursor.totalCost < 0.4 && Math.log(Math.max(nullLength * cursor.value, 1e-3)) > this.relocationThreshold)) {\n\t\t\t\t\tthis.zeroNode.offset = cursor.offset;\n\n\t\t\t\t\tfineCursor = cursor;\n\n\t\t\t\t\tif (!this.bestNode || cursor.value > this.bestNode.value)\n\t\t\t\t\t\tthis.bestNode = cursor;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fineCursor)\n\t\t\t\tthis.fineCursor = fineCursor;\n\t\t\telse {\n\t\t\t\tif (!this.resetCursor(index, {breaking: false/*nullLength > Config.SkipDeep*/})) {\n\t\t\t\t\tthis.zeroNode.offset += note.deltaSi * Math.tanh(nullLength);\n\t\t\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", note.deltaSi, nullLength);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthis.cursors = [];\n\t}\n\n\n\tpath ({fromIndex = 0, toIndex = this.sample.notes.length - 1} = {}) {\n\t\tconst path = [];\n\n\t\tlet offset = null;\n\n\t\tfor (let si = toIndex; si >= fromIndex;) {\n\t\t\tconst note = this.sample.notes[si];\n\n\t\t\tif (!note.matches.length || note.matches[0].prior < -0.01 || note.matches[0].totalCost >= 1) {\n\t\t\t\t//if (note.matches.length)\n\t\t\t\t//\tconsole.log(\"path -1:\", si, note.matches[0].prior, note.matches[0].totalCost);\n\t\t\t\tpath[si] = -1;\n\t\t\t\t--si;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// sort nodes by backwards heuristic offset\n\t\t\tif (offset != null) {\n\t\t\t\tnote.matches.forEach(node => node.backPrior = (node.totalCost < 1.99 ? node.priorByOffset(offset) : -1));\n\t\t\t\tnote.matches.sort((n1, n2) => n2.backPrior - n1.backPrior);\n\t\t\t}\n\n\t\t\tconst node = note.matches[0];\n\t\t\tnode.path.forEach((ci, si) => path[si] = ci);\n\t\t\t//console.log(\"node path:\", si, node.path);\n\n\t\t\toffset = node.root.offset;\n\n\t\t\tsi = node.rootSi - 1;\n\t\t}\n\n\t\tconsole.assert(path.length == toIndex + 1, \"path length error:\", path, fromIndex, toIndex + 1,\n\t\t\tthis.sample.notes.length, this.sample.notes.length ? this.sample.notes[this.sample.notes.length - 1].index : null);\n\n\t\treturn path;\n\t}\n\n\n\tnullSteps (index) {\n\t\treturn index - (this.fineCursor ? this.fineCursor.si : -1) - 1;\n\t}\n\n\n\tresetCursor (index, {breaking = true} = {}) {\n\t\tif (breaking)\n\t\t\tthis.breakingSI = index;\n\n\t\tconst cursorOffset = this.getCursorOffset();\n\t\tif (cursorOffset != null) {\n\t\t\t//console.log(\"cursorOffset:\", cursorOffset);\n\n\t\t\tthis.zeroNode.offset = cursorOffset;\n\t\t\t//this.breaking = this.nullSteps(index) > Config.SkipDeep;\n\t\t\t//if (this.breaking)\t// trivial zero node si resets result in focus path interruption\n\t\t\tthis.zeroNode.si = index;\n\t\t\tthis.fineCursor = null;\n\n\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", cursorOffset);\n\t\t\t//console.log(\"cursor offset reset:\", cursorOffset);\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tget relocationTendency () {\n\t\tconst cursor = this.cursors && this.cursors[0];\n\t\tif (!cursor)\n\t\t\treturn null;\n\n\t\tconst nullLength = this.nullSteps(cursor.si);\n\t\tif (nullLength <= 0)\n\t\t\treturn 0;\n\n\t\treturn Math.log(Math.max(nullLength * cursor.value, 1e-3)) / this.relocationThreshold;\n\t}\n};\n\n\n\nmodule.exports = Navigator;\n","\nconst Node = require(\"./node.js\");\nconst Navigator = require(\"./navigator.js\");\n\n\n\nconst HEART_BEAT = 800;\t// in ms\nconst SIMULTANEOUS_INTERVAL = HEART_BEAT * 0.24;\n\n\nconst normalizeInterval = interval => Math.tanh(interval / SIMULTANEOUS_INTERVAL);\n\n\n// greater softIndexFactor make 'harder' soft index\nconst makeNoteSoftIndex = function (notes, index, {softIndexFactor = 1} = {}) {\n\tindex = Number(index);\n\n\tconst note = notes[index];\n\n\t// make soft index\n\tif (index > 0) {\n\t\tconst lastNote = notes[index - 1];\n\n\t\tconsole.assert(note.start != null, \"note.start is null\", note);\n\t\tconsole.assert(lastNote.start != null, \"lastNote.start is null\", lastNote);\n\n\t\tnote.deltaSi = normalizeInterval((note.start - lastNote.start) * softIndexFactor);\n\t\tnote.softIndex = lastNote.softIndex + note.deltaSi;\n\n\t\tconsole.assert(!Number.isNaN(note.deltaSi), \"note.deltaSi is NaN.\", note.start, lastNote.start);\n\t}\n\telse {\n\t\tnote.softIndex = 0;\n\t\tnote.deltaSi = 0;\n\t}\n};\n\n\nconst makeMatchNodes = function (note, criterion, zeroNode = Node.zero()) {\n\tnote.matches = [];\n\n\tconst targetList = criterion.pitchMap[note.pitch];\n\tif (targetList) {\n\t\tfor (const targetNote of targetList) {\n\t\t\tconst node = new Node(note, targetNote);\n\t\t\tif (zeroNode)\n\t\t\t\tnode.evaluatePrev(zeroNode);\n\n\t\t\tnote.matches.push(node);\n\t\t}\n\t}\n};\n\n\nconst genNotationContext = function (notation, {softIndexFactor = 1} = {}) {\n\tfor (let i = 0; i < notation.notes.length; ++i)\n\t\tmakeNoteSoftIndex(notation.notes, i, {softIndexFactor});\n};\n\n\nconst runNavigation = async function(criterion, sample, onStep) {\n\tconst navigator = new Navigator(criterion, sample);\n\tnavigator.resetCursor(-1);\n\n\tfor (let i = 0; i < sample.notes.length; ++i) {\n\t\tnavigator.step(i);\n\n\t\tconst next = await (onStep && onStep(i, navigator));\n\t\tif (next === Symbol.for(\"end\")) {\n\t\t\tconsole.log(\"Navigation interrupted.\");\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t//console.log(\"Navigation accomplished.\");\n\n\treturn navigator;\n};\n\n\n\nmodule.exports = {\n\tnormalizeInterval,\n\tmakeNoteSoftIndex,\n\tmakeMatchNodes,\n\tgenNotationContext,\n\trunNavigation,\n\tNavigator,\n\tNode,\n};\n","\nconst MIDI = require(\"./MIDI\");\n\n\n\nconst trackDeltaToAbs = events => {\n\tlet tick = 0;\n\n\tevents.forEach(event => {\n\t\ttick += event.deltaTime;\n\t\tevent.tick = tick;\n\t});\n};\n\n\nconst trackAbsToDelta = events => {\n\tlet lastTick = 0;\n\n\tevents.sort((e1, e2) => e1.tick - e2.tick).forEach(event => {\n\t\tevent.deltaTime = event.tick - lastTick;\n\t\tlastTick = event.tick;\n\t});\n};\n\n\nconst sliceTrack = (track, startTick, endTick) => {\n\ttrackDeltaToAbs(track);\n\n\tconst events = [];\n\tconst status = {};\n\n\ttrack.forEach(event => {\n\t\tif (event.tick >= startTick && event.tick <= endTick && event.subtype !== \"endOfTrack\")\n\t\t\tevents.push({\n\t\t\t\t...event,\n\t\t\t\ttick: event.tick - startTick,\n\t\t\t});\n\t\telse if (event.tick < startTick) {\n\t\t\tswitch (event.type) {\n\t\t\tcase \"meta\":\n\t\t\t\tstatus[event.subtype] = event;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\tObject.values(status).forEach(event => events.push({\n\t\t...event,\n\t\ttick: 0,\n\t}));\n\n\tevents.push({\n\t\ttick: endTick - startTick,\n\t\ttype: \"meta\",\n\t\tsubtype: \"endOfTrack\",\n\t});\n\n\ttrackAbsToDelta(events);\n\n\treturn events;\n};\n\n\nconst sliceMidi = (midi, startTick, endTick) => ({\n\theader: midi.header,\n\ttracks: midi.tracks.map(track => sliceTrack(track, startTick, endTick)),\n});\n\n\nconst TICKS_PER_BEATS = 480;\n\nconst EXCLUDE_MIDI_EVENT_SUBTYPES = [\n\t\"endOfTrack\", \"trackName\",\n\t\"noteOn\", \"noteOff\",\n];\n\n\nfunction encodeToMIDIData(notation, {startTime, unclosedNoteDuration = 30e+3} = {}) {\n\tnotation.microsecondsPerBeat = notation.microsecondsPerBeat || 500000;\n\n\tconst ticksPerBeat = TICKS_PER_BEATS;\n\tconst msToTicks = ticksPerBeat * 1000 / notation.microsecondsPerBeat;\n\n\tconst header = { formatType: 0, ticksPerBeat };\n\tconst track = [];\n\n\tif (!Number.isFinite(startTime)) {\n\t\tif (!notation.notes || !notation.notes[0])\n\t\t\tthrow new Error(\"encodeToMidiData: no start time specificed\");\n\n\t\tstartTime = notation.notes[0].start;\n\t}\n\n\ttrack.push({ time: startTime, type: \"meta\", subtype: \"copyrightNotice\", text: `Composed by MusicWdigets. BUILT on ${new Date(Number(process.env.VUE_APP_BUILD_TIME)).toDateString()}` });\n\n\tconst containsTempo = notation.events && notation.events.find(event => event.subtype == \"setTempo\");\n\tif (!containsTempo) {\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"timeSignature\", numerator: 4, denominator: 4, thirtyseconds: 8 });\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"setTempo\", microsecondsPerBeat: notation.microsecondsPerBeat });\n\t}\n\n\t//if (notation.correspondences)\n\t//\ttrack.push({ time: startTime, type: \"meta\", subtype: \"text\", text: \"find-corres:\" + notation.correspondences.join(\",\") });\n\n\tlet endTime = startTime || 0;\n\n\tif (notation.notes) {\n\t\tfor (const note of notation.notes) {\n\t\t\ttrack.push({\n\t\t\t\ttime: note.start,\n\t\t\t\ttype: \"channel\",\n\t\t\t\tsubtype: \"noteOn\",\n\t\t\t\tchannel: note.channel || 0,\n\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\tvelocity: note.velocity,\n\t\t\t\tfinger: note.finger,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, note.start);\n\n\t\t\tif (Number.isFinite(unclosedNoteDuration))\n\t\t\t\tnote.duration = note.duration || unclosedNoteDuration;\n\t\t\tif (note.duration) {\n\t\t\t\ttrack.push({\n\t\t\t\t\ttime: note.start + note.duration,\n\t\t\t\t\ttype: \"channel\",\n\t\t\t\t\tsubtype: \"noteOff\",\n\t\t\t\t\tchannel: note.channel || 0,\n\t\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\t\tvelocity: 0,\n\t\t\t\t});\n\n\t\t\t\tendTime = Math.max(endTime, note.start + note.duration);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (notation.events) {\n\t\tconst events = notation.events.filter(event => !EXCLUDE_MIDI_EVENT_SUBTYPES.includes(event.data.subtype));\n\t\tfor (const event of events) {\n\t\t\ttrack.push({\n\t\t\t\ttime: event.time,\n\t\t\t\t...event.data,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, event.time);\n\t\t}\n\t}\n\n\ttrack.push({ time: endTime + 100, type: \"meta\", subtype: \"endOfTrack\" });\n\n\ttrack.sort(function (e1, e2) { return e1.time - e2.time; });\n\n\t// append finger event after every noteOn event\n\ttrack.map((event, index) => ({event, index}))\n\t\t.filter(({event}) => event.subtype == \"noteOn\" && event.finger != null)\n\t\t.reverse()\n\t\t.forEach(({event, index}) => track.splice(index + 1, 0, {\n\t\t\ttime: event.time,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `fingering(${event.finger})`,\n\t\t}));\n\n\ttrack.forEach(event => event.ticks = Math.round((event.time - startTime) * msToTicks));\n\ttrack.forEach((event, i) => event.deltaTime = (event.ticks - (i > 0 ? track[i - 1].ticks : 0)));\n\n\treturn {header, tracks: [track]};\n};\n\n\nfunction encodeToMIDI(notation, options) {\n\tconst data = encodeToMIDIData(notation, options);\n\treturn MIDI.encodeMidiFile(data);\n};\n\n\n\nmodule.exports = {\n\tsliceMidi,\n\tencodeToMIDIData,\n\tencodeToMIDI,\n};\n","\nconst MIDI = require(\"./source/inc/MIDI\");\nconst MusicNotation = require(\"./source/inc/MusicNotation\");\nconst MidiPlayer = require(\"./source/inc/MidiPlayer.js\");\nconst Matcher = require(\"./source/inc/Matcher\");\nconst MidiUtils = require(\"./source/inc/MidiUtils.js\");\n\n\n\nmodule.exports = {\n\tMIDI,\n\tMusicNotation,\n\tMidiPlayer,\n\tMatcher,\n\tMidiUtils,\n};\n","import pick from 'lodash/pick';\n\nimport { MusicNotation, MIDI } from '@k-l-lambda/music-widgets';\n\n//import {MeasureLayout, LayoutType} from\nimport { ImplicitType, ChordPosition } from './types';\n\nconst WHOLE_DURATION_MAGNITUDE = 1920;\nconst TICKS_PER_BEAT = WHOLE_DURATION_MAGNITUDE / 4;\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ninterface StaffNoteProperties {\n\trest: boolean;\n\ttied: boolean;\n\toverlapped: boolean;\n\timplicitType: ImplicitType;\n\tafterGrace: boolean;\n\tchordPosition: ChordPosition;\n\tdivision: number;\n\n\tcontextIndex: number;\n\tstaffTrack: number;\n}\n\ninterface MetaNote extends MusicNotation.Note, Partial {\n\tid: string;\n\tmeasure: number;\n\tendTick: number;\n}\n\ninterface SubNote {\n\tstartTick: number;\n\tendTick: number;\n\tpitch: number;\n\tvelocity?: number;\n}\n\ninterface MeasureNote extends Partial {\n\ttick: number;\n\tpitch: number;\n\tduration: number;\n\tchordPosition: ChordPosition;\n\tstaff: number;\n\n\ttrack: number;\n\tchannel: number;\n\tid: string;\n\tids: string[];\n\n\tsubNotes: SubNote[];\n}\n\ninterface MeasureEvent {\n\tdata: any;\n\ttrack: number;\n\tticks?: number;\n}\n\ninterface Measure {\n\ttick: number;\n\tduration: number;\n\n\tnotes: MeasureNote[];\n\tevents?: MeasureEvent[];\n\ttimeSignature?: Fraction;\n\tkeySignature?: number;\n}\n\ninterface PerformOptions {\n\twithRestTied?: boolean;\n}\n\ninterface MidiEvent extends MIDI.MidiEvent {\n\tticks?: number;\n\tmeasure?: number;\n\tids?: string[];\n\tstaffTrack?: number;\n\tstaff?: number;\n}\ntype MidiTrack = MidiEvent[];\n\nconst EXTRA_NOTE_FIELDS = ['rest', 'tied', 'overlapped', 'implicitType', 'afterGrace', 'contextIndex', 'staffTrack', 'chordPosition', 'division'];\nconst COMMON_NOTE_FIELDS = ['id', 'ids', 'pitch', 'velocity', 'track', 'channel', ...EXTRA_NOTE_FIELDS];\n\nclass MetaNotation {\n\t//pitchContextGroup: PitchContextTable[];\n\t//measureLayout: MeasureLayout;\n\tmeasures: Measure[];\n\n\ttrackNames: string[];\n\tidTrackMap: { [key: string]: number };\n\n\tripe: boolean = false;\n\n\tstatic fromAbsoluteNotes(notes: MetaNote[], measureHeads: number[], data?: Partial): MetaNotation {\n\t\tconst notation = new MetaNotation(data);\n\n\t\tnotation.measures = Array(measureHeads.length)\n\t\t\t.fill(null)\n\t\t\t.map((__, i) => {\n\t\t\t\tconst tick = measureHeads[i];\n\t\t\t\tconst duration = measureHeads[i + 1] ? measureHeads[i + 1] - tick : 0;\n\n\t\t\t\tconst mnotes = notes\n\t\t\t\t\t.filter((note) => note.measure === i + 1)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(note) =>\n\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\ttick: note.startTick - tick,\n\t\t\t\t\t\t\t\tduration: note.endTick - note.startTick,\n\t\t\t\t\t\t\t\t...pick(note, COMMON_NOTE_FIELDS),\n\t\t\t\t\t\t\t\tsubNotes: [],\n\t\t\t\t\t\t\t} as MeasureNote)\n\t\t\t\t\t);\n\n\t\t\t\t// reduce note data size\n\t\t\t\tmnotes.forEach((mn) =>\n\t\t\t\t\t['rest', 'tied', 'implicitType', 'afterGrace'].forEach((field) => {\n\t\t\t\t\t\tif (!mn[field]) delete mn[field];\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes: mnotes,\n\t\t\t\t};\n\t\t\t});\n\n\t\tnotation.idTrackMap = notes.reduce((map, note) => {\n\t\t\tif (note.id) map[note.id] = note.track;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn notation;\n\t}\n\n\tstatic performAbsoluteNotes(abNotes: MetaNote[], { withRestTied = false }: PerformOptions = {}): MusicNotation.Note[] {\n\t\tconst notes = abNotes\n\t\t\t.filter((note) => (withRestTied || (!note.rest && !note.tied)) && !note.overlapped)\n\t\t\t.map((note) => ({\n\t\t\t\tmeasure: note.measure,\n\t\t\t\tchannel: note.channel,\n\t\t\t\ttrack: note.track,\n\t\t\t\tstart: note.start,\n\t\t\t\tstartTick: note.startTick,\n\t\t\t\tendTick: note.endTick,\n\t\t\t\tpitch: note.pitch,\n\t\t\t\tduration: note.duration,\n\t\t\t\tvelocity: note.velocity || 127,\n\t\t\t\tid: note.id,\n\t\t\t\tids: note.ids,\n\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\tcontextIndex: note.contextIndex,\n\t\t\t\timplicitType: note.implicitType,\n\t\t\t\tchordPosition: note.chordPosition,\n\t\t\t}));\n\n\t\tconst noteMap = notes.reduce((map, note) => {\n\t\t\tconst key = `${note.channel}|${note.start}|${note.pitch}`;\n\t\t\tconst priorNote = map[key];\n\t\t\tif (priorNote) priorNote.ids.push(...note.ids);\n\t\t\telse map[key] = note;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(noteMap);\n\t}\n\n\tconstructor(data?: Partial) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\t/*get ordinaryMeasureIndices (): number[] {\n\t\tif (this.measureLayout)\n\t\t\treturn this.measureLayout.serialize(LayoutType.Ordinary);\n\n\t\treturn Array(this.measures.length).fill(null).map((_, i) => i + 1);\n\t}*/\n\n\t// In Lilypond 2.20.0, minus tick value at the head of a track result in MIDI event time bias,\n\t//\tSo store the bias values to correct MIDI time from lilyond.\n\tget trackTickBias(): { [key: string]: number } {\n\t\tconst headMeasure = this.measures[0];\n\t\treturn this.trackNames.reduce((map, name, track) => {\n\t\t\tmap[name] = 0;\n\t\t\tif (headMeasure) {\n\t\t\t\tconst note = headMeasure.notes.find((note) => note.track === track);\n\t\t\t\tif (note) map[name] = Math.min(note.tick, 0);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget idSet(): Set {\n\t\treturn this.measures.reduce(\n\t\t\t(set, measure) => (measure.notes.filter((note) => !note.rest).forEach((note) => note.ids.forEach((id) => set.add(id))), set),\n\t\t\tnew Set()\n\t\t);\n\t}\n\n\ttoJSON() {\n\t\treturn {\n\t\t\t__prototype: 'LilyNotation',\n\t\t\t//pitchContextGroup: this.pitchContextGroup,\n\t\t\t//measureLayout: this.measureLayout,\n\t\t\tmeasures: this.measures,\n\t\t\tidTrackMap: this.idTrackMap,\n\t\t\ttrackNames: this.trackNames,\n\t\t\tripe: this.ripe,\n\t\t};\n\t}\n\n\ttoAbsoluteNotes(measureIndices: number[] /*= this.ordinaryMeasureIndices*/): MetaNote[] {\n\t\tlet measureTick = 0;\n\t\tconst measureNotes: MetaNote[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst notes = measure.notes.map((mnote) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartTick: measureTick + mnote.tick,\n\t\t\t\t\tendTick: measureTick + mnote.tick + mnote.duration,\n\t\t\t\t\tstart: measureTick + mnote.tick,\n\t\t\t\t\tduration: mnote.duration,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t\t...pick(mnote, COMMON_NOTE_FIELDS),\n\t\t\t\t} as MetaNote;\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn notes;\n\t\t});\n\n\t\treturn [].concat(...measureNotes);\n\t}\n\n\t/*getMeasureIndices (type: LayoutType) {\n\t\treturn this.measureLayout.serialize(type);\n\t}*/\n\n\ttoPerformingNotation(measureIndices: number[] /*= this.ordinaryMeasureIndices*/, options: PerformOptions = {}): MusicNotation.Notation {\n\t\t//console.debug(\"toPerformingNotation:\", this, measureIndices);\n\t\tconst abNotes = this.toAbsoluteNotes(measureIndices);\n\t\tconst notes = MetaNotation.performAbsoluteNotes(abNotes, options);\n\n\t\t//const lastNote = notes[notes.length - 1];\n\t\tconst endTime = Math.max(...notes.map((note) => note.start + note.duration));\n\n\t\tconst endTick = measureIndices.reduce((tick, index) => tick + this.measures[index - 1].duration, 0);\n\n\t\tconst notation = new MusicNotation.Notation({\n\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\tmeta: {},\n\t\t\ttempos: [], // TODO\n\t\t\tchannels: [notes],\n\t\t\tendTime,\n\t\t\tendTick,\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\ttoPerformingMIDI(measureIndices: number[], { trackList }: { trackList?: boolean[] } = {}): MIDI.MidiData & { zeroTick: number } {\n\t\tif (!measureIndices.length) return null;\n\n\t\t// to avoid begin minus tick\n\t\tconst zeroTick = -Math.min(0, ...(this.measures[0]?.events.map((e) => e.ticks) || []), ...(this.measures[0]?.notes.map((note) => note.tick) || []));\n\n\t\tlet measureTick = zeroTick;\n\t\tconst measureEvents: MeasureEvent[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst events = measure.events.map((mevent) => ({\n\t\t\t\tticks: measureTick + mevent.ticks,\n\t\t\t\ttrack: mevent.track,\n\t\t\t\tdata: {\n\t\t\t\t\t...mevent.data,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn events;\n\t\t});\n\n\t\tconst eventPriority = (event: MidiEvent): number => event.ticks + (event.subtype === 'noteOff' ? -1e-8 : 0);\n\n\t\tconst tracks: MidiTrack[] = [].concat(...measureEvents).reduce((tracks, mevent) => {\n\t\t\ttracks[mevent.track] = tracks[mevent.track] || [];\n\t\t\ttracks[mevent.track].push({\n\t\t\t\tticks: mevent.ticks,\n\t\t\t\t...mevent.data,\n\t\t\t});\n\n\t\t\treturn tracks;\n\t\t}, []);\n\n\t\ttracks[0] = tracks[0] || [];\n\t\t/*tracks[0].push({\n\t\t\tticks: 0,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `${npmPackage.name} ${npmPackage.version}`,\n\t\t});*/\n\n\t\t// append note events\n\t\tmeasureTick = zeroTick;\n\t\tmeasureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\t\t\tif (!Number.isFinite(measure.duration)) return;\n\n\t\t\tmeasure.notes.forEach((note) => {\n\t\t\t\tif (trackList && !trackList[note.track]) return;\n\n\t\t\t\tif (note.rest) return;\n\n\t\t\t\tconst tick = measureTick + note.tick;\n\n\t\t\t\tconst track = (tracks[note.track] = tracks[note.track] || []);\n\n\t\t\t\tnote.subNotes.forEach((subnote) => {\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.startTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: subnote.velocity,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.endTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: 0,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\t\t});\n\n\t\tconst finalTick = measureTick;\n\n\t\t// ensure no empty track\n\t\tfor (let t = 0; t < tracks.length; ++t) tracks[t] = tracks[t] || [];\n\n\t\t// sort & make deltaTime\n\t\ttracks.forEach((events) => {\n\t\t\tevents.sort((e1, e2) => eventPriority(e1) - eventPriority(e2));\n\n\t\t\tlet ticks = 0;\n\t\t\tevents.forEach((event) => {\n\t\t\t\tevent.deltaTime = event.ticks - ticks;\n\t\t\t\tif (!Number.isFinite(event.deltaTime)) event.deltaTime = 0;\n\t\t\t\telse ticks = event.ticks;\n\t\t\t});\n\n\t\t\tevents.push({ deltaTime: Math.max(finalTick - ticks, 0), type: 'meta', subtype: 'endOfTrack' });\n\t\t});\n\n\t\treturn {\n\t\t\theader: {\n\t\t\t\tformatType: 0,\n\t\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\t},\n\t\t\ttracks,\n\t\t\tzeroTick,\n\t\t};\n\t}\n\n\ttoPerformingNotationWithEvents(measureIndices: number[], options: { trackList?: boolean[] } = {}): MusicNotation.Notation {\n\t\tif (!measureIndices.length) return null;\n\n\t\tconst { zeroTick, ...midi } = this.toPerformingMIDI(measureIndices, options);\n\t\tconst notation = MusicNotation.Notation.parseMidi(midi);\n\n\t\tassignNotationNoteDataFromEvents(notation);\n\n\t\tlet tick = zeroTick;\n\n\t\tnotation.measures = measureIndices.map((index) => {\n\t\t\tconst startTick = tick;\n\t\t\ttick += this.measures[index - 1].duration;\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\tstartTick,\n\t\t\t\tendTick: tick,\n\t\t\t};\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\t// find the MIDI event of setTempo in measures data, and change the value of microsecondsPerBeat\n\tsetTempo(bpm: number): boolean {\n\t\tlet found = false;\n\t\tfor (const measure of this.measures) {\n\t\t\tfor (const event of measure.events) {\n\t\t\t\tif (event.data.subtype === 'setTempo') {\n\t\t\t\t\tevent.data.microsecondsPerBeat = 60e6 / bpm;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn found;\n\t}\n}\n\nconst assignNotationNoteDataFromEvents = (midiNotation: MusicNotation.NotationData, fields = ['ids', 'measure', 'staffTrack']) => {\n\tconst noteId = (channel: number, pitch: number, tick: number): string => `${channel}|${pitch}|${tick}`;\n\n\tconst noteMap = midiNotation.notes.reduce((map, note) => {\n\t\tmap[noteId(note.channel, note.pitch, note.startTick)] = note;\n\n\t\treturn map;\n\t}, {});\n\n\tmidiNotation.events.forEach((event) => {\n\t\tif (event.data.subtype === 'noteOn') {\n\t\t\tconst id = noteId(event.data.channel, event.data.noteNumber, event.ticks);\n\t\t\tconst note = noteMap[id];\n\t\t\tconsole.assert(!!note, 'cannot find note of', id);\n\n\t\t\tif (note) Object.assign(note, pick(event.data, fields));\n\t\t}\n\t});\n};\n\nexport { MetaNote, MetaNotation, MidiEvent };\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","import _SHA256 from 'crypto-js/sha256';\n\nconst SHA256 = (source: string): Uint8Array => {\n\tconst { words, sigBytes } = _SHA256(source);\n\tconst uwords = words.map((x) => (x < 0 ? x + 0x100000000 : x));\n\tconst word_len = sigBytes / words.length;\n\n\treturn new Uint8Array(sigBytes).map((_, i) => (uwords[Math.floor(i / word_len)] >> ((3 - (i % word_len)) * 8)) & 0xff);\n};\n\ntype Hash = Uint8Array;\nconst HASH_LEN = 256;\n\nclass HashVector {\n\tfields: number[];\n\n\tstatic fromHash(hash: Hash): HashVector {\n\t\tconst fields = [];\n\t\tfor (const byte of hash) {\n\t\t\tfor (let b = 0; b < 8; ++b) fields.push((byte >> b) & 1 ? 1 : -1);\n\t\t}\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic fromString(source: string): HashVector {\n\t\tconst hash = SHA256(source);\n\t\treturn HashVector.fromHash(hash);\n\t}\n\n\tstatic fromWords(words: string[]): HashVector {\n\t\tconst vs = words.map((word) => HashVector.fromString(word));\n\t\treturn vs.reduce((sum, v) => sum.add(v), HashVector.zero);\n\t}\n\n\tstatic concat(...vectors: HashVector[]): HashVector {\n\t\tconst fields = vectors.map((v) => v.fields).flat(1);\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tconstructor(fields: number[] | null = null) {\n\t\tthis.fields = fields || Array(HASH_LEN).fill(0);\n\t}\n\n\tget length(): number {\n\t\treturn this.fields.length;\n\t}\n\n\ttoHash(): Hash {\n\t\treturn Uint8Array.from(\n\t\t\tArray(this.length / 8)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => {\n\t\t\t\t\tconst bits = this.fields.slice(i * 8, (i + 1) * 8);\n\n\t\t\t\t\treturn bits.reduce((byte, bit, b) => byte | ((bit > 0 ? 1 : 0) << b), 0);\n\t\t\t\t})\n\t\t) as Hash;\n\t}\n\n\tadd(vec: HashVector): this {\n\t\tthis.fields.forEach((value, i) => (this.fields[i] = value + vec.fields[i]));\n\n\t\treturn this;\n\t}\n\n\tscale(factor: number): this {\n\t\tthis.fields = this.fields.map((value) => value * factor);\n\n\t\treturn this;\n\t}\n\n\tsub(crop: number): HashVector {\n\t\tconst fields = crop > 0 ? this.fields.slice(0, crop) : this.fields.slice(crop);\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic get zero(): HashVector {\n\t\treturn new HashVector();\n\t}\n}\n\nconst odds = (byte: number): number => {\n\tlet result = 0;\n\tfor (let b = byte; b > 0; b >>= 1) {\n\t\tif (b % 2) ++result;\n\t}\n\n\treturn result;\n};\nconst ODDS = Array(2 ** 8)\n\t.fill(0)\n\t.map((_, i) => odds(i));\nconst ODDS_HEX = ODDS.reduce((table, odd, i) => ({ ...table, [('0' + i.toString(16)).slice(-2)]: odd }), {});\n\nconst countOnes = (hash: Hash): number => hash.reduce((sum, byte) => sum + ODDS[byte], 0);\n\nconst xorHashes = (hash1: Hash, hash2: Hash): Hash => hash1.map((byte, i) => byte ^ hash2[i]) as Hash;\n\nconst cosHashes = (hash1: Hash, hash2: Hash): number => {\n\tconst len = hash1.length * 8;\n\n\tconst xor = xorHashes(hash1, hash2);\n\tconst ones = countOnes(xor);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst cosBigInts = (hash1: bigint, hash2: bigint, len: number = HASH_LEN): number => {\n\tconst xor = hash1 ^ hash2;\n\tconst xor_hex = '0'.repeat(len / 4) + xor.toString(16);\n\n\tconst ones = Array(len / 8)\n\t\t.fill(0)\n\t\t.reduce((ones, _, i) => ones + ODDS_HEX[xor_hex.slice((i + 1) * -2, i ? i * -2 : undefined)], 0);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst i2hex = (i) => ('0' + i.toString(16)).slice(-2);\nconst hashToHex = (hash: Hash): string => Array.from(hash).map(i2hex).join('');\n\nconst hexToHash = (hex: string): Hash =>\n\tUint8Array.from(\n\t\tArray(hex.length / 2)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => hex.substring(i * 2, (i + 1) * 2))\n\t\t\t.map((x) => parseInt(x, 16))\n\t);\n\nconst hashToBigInt = (hash: Hash): bigint => {\n\t// __NOT_FOR_BROWSER_\n\treturn Array.from(hash).reduce((r, x) => r * 0x100n + BigInt(x), 0n);\n\t/*\n\t// _NOT_FOR_BROWSER__\n\tthrow new Error('BigInt not supported');\n\t//*/\n};\n\nconst hashFromWords = (words: string[]): Hash => HashVector.fromWords(words).toHash();\n\nexport { Hash, HashVector, cosHashes, cosBigInts, hashToHex, hexToHash, hashToBigInt, hashFromWords };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { cosHashes, Hash, hashToBigInt, hashToHex, HashVector } from './hashVector';\nimport { Performing, RegulationOptions, TermMeasure, TermVoice, VoiceMeasure, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ContextedTerm, EventTerm, TempoTerm, TermPitch, WHOLE_DURATION } from './term';\nimport { TokenType } from './token';\nimport { argmax, frac, fractionMul, noteToPitch, printFraction, reducedFraction } from './utils';\n\nexport const emptyVoiceFromStaffMeasure = (staff: TermMeasure, chiefVoice: boolean = false): VoiceMeasure => {\n\treturn {\n\t\tempty: true,\n\t\tduration: staff.duration,\n\t\ttickMap: {\n\t\t\t[0]: EventTerm.space({ duration: staff.duration, tick: 0 }),\n\t\t},\n\t\ttimeSignature: staff.timeSignature,\n\t\ttimeSigNumeric: staff.timeSigNumeric,\n\t\tkeySignature: staff.keySignature,\n\t\tcontextedTerms: staff.terms.filter((term) => term instanceof ContextedTerm && (!term.staffLevel || chiefVoice)) as ContextedTerm[],\n\t\tmarks: [],\n\t};\n};\n\nconst removeEmptyMeasuresInVoicesStaves = (staves: VoicesStaff[]): void => {\n\t//console.assert(staves[0] && staves[0].voices[0], 'voices is empty:', staves);\n\tif (!(staves[0] && staves[0].voices[0])) {\n\t\tconsole.warn('empty voices:', staves);\n\t\treturn;\n\t}\n\n\tconst measureCount = staves[0].voices[0].measures.length;\n\tconst measureEmpties = Array(measureCount)\n\t\t.fill(null)\n\t\t.map((_, m) => {\n\t\t\tfor (const staff of staves) {\n\t\t\t\tfor (const voice of staff.voices) {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tif (!measure.empty) return false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\tmeasureEmpties.forEach((empty, m) => {\n\t\tif (empty) {\n\t\t\tstaves.forEach((staff) =>\n\t\t\t\tstaff.voices.forEach((voice) => {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tmeasure.tickMap = {};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t});\n};\n\nconst markingTiesInVoice = (voice: TermVoice) => {\n\tconst events = [].concat(...voice.measures.map((m) => Object.values(m.tickMap).filter((event) => event instanceof EventTerm)));\n\t//console.log(\"events:\", events);\n\n\tfor (let i = 1; i < events.length; ++i) {\n\t\tconst event0 = events[i - 1];\n\t\tconst event1 = events[i];\n\t\tif (!event0.rest && !event1.rest) {\n\t\t\tif (event0.accessories.some((acc) => acc.type === TokenType.SlurBegin) && event1.accessories.some((acc) => acc.type === TokenType.SlurEnd)) {\n\t\t\t\tconst pitches = event0.pitches.filter((p0) => event1.pitches.some((p1) => p1.note === p0.note && p1.alter === p0.alter));\n\t\t\t\tif (pitches.length > 0) {\n\t\t\t\t\tevent0.tying = true;\n\t\t\t\t\tevent1.tied = true;\n\n\t\t\t\t\tpitches.forEach((p0) => {\n\t\t\t\t\t\tp0.tying = true;\n\t\t\t\t\t\tconst p1 = event1.pitches.find((p1) => p1.note === p0.note && p1.alter === p0.alter);\n\t\t\t\t\t\tp1.tied = true;\n\t\t\t\t\t});\n\n\t\t\t\t\t// remove slurs from accessories\n\t\t\t\t\tpitches.forEach(() => {\n\t\t\t\t\t\tconst si0 = event0.accessories.findIndex((acc) => acc.type === TokenType.SlurBegin);\n\t\t\t\t\t\tif (si0 >= 0) event0.accessories.splice(si0, 1);\n\n\t\t\t\t\t\tconst si1 = event1.accessories.findIndex((acc) => acc.type === TokenType.SlurEnd);\n\t\t\t\t\t\tif (si1 >= 0) event1.accessories.splice(si1, 1);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nclass Spartito extends SimpleClass {\n\tstatic className = 'Spartito';\n\n\tstavesCount: number;\n\tstaffGroups: number[][];\n\tmeasures: SpartitoMeasure[];\n\n\ttags: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.measures.forEach((measure) => (measure.staffGroups = this.staffGroups));\n\t}\n\n\tget regulated(): boolean {\n\t\treturn this.measures.every((m) => m.regulated);\n\t}\n\n\tget solidMeasureCount(): number {\n\t\treturn this.measures.filter((measure) => !measure.empty).length;\n\t}\n\n\tget measureIndexMapping(): number[] {\n\t\tlet n = 0;\n\t\treturn this.measures.map((measure) => {\n\t\t\treturn !measure.empty ? n++ : null;\n\t\t});\n\t}\n\n\tget headBPM(): number {\n\t\tfor (const measure of this.measures) {\n\t\t\tif (measure.marks) {\n\t\t\t\tconst tempoMark = measure.marks.find((mark) => mark instanceof TempoTerm && mark.isValid()) as TempoTerm;\n\t\t\t\tif (tempoMark) return tempoMark.bpm;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget measureLayoutCode(): string {\n\t\tconst ms = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure, i) => ({\n\t\t\t\tindex: i + 1,\n\t\t\t\tvb: measure.voltaBegin,\n\t\t\t\tve: measure.voltaEnd,\n\t\t\t\talter: measure.alternative,\n\t\t\t\tleftSign: '',\n\t\t\t\trightSign: '',\n\t\t\t}));\n\t\tms.forEach((m, i) => {\n\t\t\tif (m.vb) {\n\t\t\t\tconst nextI = ms.slice(i + 1).findIndex((mm) => mm.vb);\n\t\t\t\tconst nextVBI = nextI >= 0 ? i + nextI : ms.length;\n\t\t\t\tif (ms.slice(i, nextVBI - 1).some((mm) => mm.ve))\n\t\t\t\t\t// check if volta range closed\n\t\t\t\t\tm.leftSign = '2*[';\n\t\t\t}\n\n\t\t\tif (m.ve) {\n\t\t\t\tconst pms = ms.slice(0, i + 1).reverse();\n\t\t\t\tconst lastVEI = pms.slice(1).findIndex((mm) => mm.ve);\n\t\t\t\tif (lastVEI >= 0) {\n\t\t\t\t\tif (!pms.slice(1, lastVEI + 1).some((mm) => mm.vb))\n\t\t\t\t\t\t// ignore unclosed right volta\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m.alter) {\n\t\t\t\t\tconst lastMI = pms.findIndex((m) => !m.alter);\n\t\t\t\t\tif (lastMI > 0) {\n\t\t\t\t\t\tpms[lastMI].rightSign = ']';\n\t\t\t\t\t\tpms[lastMI - 1].leftSign = '{[';\n\n\t\t\t\t\t\tm.rightSign = '],';\n\n\t\t\t\t\t\tif (ms[i + 1]) ms[i + 1].rightSign = '},';\n\t\t\t\t\t}\n\t\t\t\t} else m.rightSign = '],';\n\n\t\t\t\tif (!pms.some((m) => m.vb)) ms[0].leftSign = '2*[';\n\t\t\t}\n\t\t});\n\n\t\treturn ms\n\t\t\t.map((m) => m.leftSign + m.index.toString() + m.rightSign + (m.rightSign ? '' : ','))\n\t\t\t.join(' ')\n\t\t\t.replace(/,$/, '');\n\t}\n\n\tget qualityScore(): number {\n\t\tconst measures = this.measures.filter((measure) => !measure.empty);\n\t\tconst qss = measures.map(evaluateMeasure).map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\t//console.log('qss:', qss);\n\n\t\treturn measures.length ? sum / measures.length : null;\n\t}\n\n\tdumpEvaluations(): void {\n\t\tconst es = this.measures.filter((measure) => !measure.empty).map((m) => ({ measureIndex: m.measureIndex, ...evaluateMeasure(m) }));\n\t\tconst qss = es.map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\tconsole.log('qualityScore:', sum / es.length);\n\n\t\tconsole.table(es);\n\t}\n\n\tregulate(options: RegulationOptions = {}): void {\n\t\tthis.measures.forEach((m) => m.regulated || m.regulate(options));\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.measures.forEach((m) => (m.voices = null));\n\t}\n\n\t// measures' estimatedDuration should be valid\n\trectifyTimeSignatures(logger: Logger = new DummyLogger()): void {\n\t\tconst mis = this.measures\n\t\t\t.map((measure, index) => ({ measure, index }))\n\t\t\t.filter(({ measure, index }) => !index || measure.timeSignatureChanged)\n\t\t\t.map(({ index }) => index);\n\t\tconst segments = mis\n\t\t\t.map((index, si) => this.measures.slice(index, si < mis.length - 1 ? mis[si + 1] : this.measures.length))\n\t\t\t.map((ms) => ms.filter((m) => m.estimatedDuration > 0))\n\t\t\t.filter((seg) => seg.length >= 3 || seg.some((measure) => measure.doubtfulTimesig));\n\t\t//console.log(\"segments:\", segments.map(ms => ms.map(m => m.measureIndex)));\n\n\t\tsegments.forEach((measures) => {\n\t\t\tif (measures[0].patched) {\n\t\t\t\t// rectify according to patched head measure\n\t\t\t\tconst newTimeSignature = measures[0].timeSignature;\n\t\t\t\tconst measuresToFix = measures\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t.filter((measure) => !measure.patched && printFraction(measure.timeSignature) !== printFraction(newTimeSignature));\n\t\t\t\tif (measuresToFix.length) {\n\t\t\t\t\tconst originTimeSignature = measuresToFix[0].timeSignature;\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by patched head:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${printFraction(newTimeSignature)}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst originTimeSignature = measures[0].timeSignature;\n\t\t\tconst regularD = Number.isInteger(Math.log2(originTimeSignature.denominator));\n\n\t\t\tlet denominator = regularD ? 4 : 8;\n\t\t\tif (regularD) denominator = Math.max(denominator, measures[0].timeSignature.denominator);\n\n\t\t\tconst numerators = measures.map((measure) => Math.round((measure.estimatedDuration * denominator) / WHOLE_DURATION));\n\t\t\tconst countings = Object.entries(numerators.reduce((c, n) => ((c[n] = (c[n] || 0) + 1), c), {} as Record)).sort(\n\t\t\t\t(p1, p2) => p2[1] - p1[1]\n\t\t\t);\n\t\t\tconst peakCount = countings[0][1];\n\t\t\tconst candidateNumerators = countings.filter(([_, c]) => c > peakCount * 0.6);\n\t\t\tconst bestCounting = candidateNumerators.reduce((best, c) => (Number(c[0]) > Number(best[0]) ? c : best));\n\t\t\tif (bestCounting[1] > 1) {\n\t\t\t\t//console.log(\"countings:\", countings, bestCounting[0]);\n\t\t\t\tlet numerator = Number(bestCounting[0]);\n\t\t\t\tif (!regularD || originTimeSignature.denominator * numerator !== originTimeSignature.numerator * denominator) {\n\t\t\t\t\tif (regularD && denominator !== originTimeSignature.denominator) {\n\t\t\t\t\t\tconst reducedN = (numerator * originTimeSignature.denominator) / denominator;\n\t\t\t\t\t\tif (Number.isInteger(reducedN)) {\n\t\t\t\t\t\t\tnumerator = reducedN;\n\t\t\t\t\t\t\tdenominator = originTimeSignature.denominator;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst measuresToFix = measures.filter((measure) => !measure.patched);\n\n\t\t\t\t\tconst newTimeSignature = frac(numerator, denominator);\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by estimation:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${numerator}/${denominator}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tmakeVoiceStaves(): VoicesStaff[] {\n\t\tthis.regulate();\n\n\t\tconst voiceCount = Math.max(...this.measures.map((measure) => measure.voices.length));\n\t\tif (!voiceCount || !Number.isFinite(voiceCount)) return null;\n\n\t\t// mark tied pitches for patched measues\n\t\tthis.measures\n\t\t\t.filter((measure) => measure.patched)\n\t\t\t.forEach((measure) => {\n\t\t\t\tmeasure.events.forEach((event) => {\n\t\t\t\t\tif (event.tied) event.pitches.forEach((pitch) => (pitch.tied = true));\n\t\t\t\t});\n\t\t\t});\n\n\t\t// Move courtesy clefs to the next measure.\n\t\t// A courtesy clef that appears after all events on its staff announces the\n\t\t// clef change for the next measure rather than applying to the current one.\n\t\tfor (let mi = 0; mi < this.measures.length - 1; mi++) {\n\t\t\tconst measure = this.measures[mi];\n\t\t\tconst nextMeasure = this.measures[mi + 1];\n\t\t\tif (!measure.contexts || !nextMeasure?.contexts) continue;\n\n\t\t\tfor (let si = 0; si < measure.contexts.length; si++) {\n\t\t\t\tconst ctxList = measure.contexts[si];\n\t\t\t\tif (!ctxList) continue;\n\n\t\t\t\tconst staffEvents = measure.events?.filter((e: any) => e.staff === si) || [];\n\t\t\t\tconst maxEventX = staffEvents.reduce((max: number, e: any) => Math.max(max, e.x || 0), -Infinity);\n\t\t\t\tif (!Number.isFinite(maxEventX)) continue;\n\n\t\t\t\tconst deferred: ContextedTerm[] = [];\n\t\t\t\tmeasure.contexts[si] = ctxList.filter((term) => {\n\t\t\t\t\tif (term.type === 0 /* ContextType.Clef */ && term.x > maxEventX) {\n\t\t\t\t\t\tdeferred.push(term);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\n\t\t\t\tif (deferred.length > 0 && nextMeasure.contexts[si]) {\n\t\t\t\t\tdeferred.forEach((term) => (term.tick = 0));\n\t\t\t\t\tnextMeasure.contexts[si] = [...deferred, ...nextMeasure.contexts[si]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// [measure, voice]\n\t\tconst measures: VoiceMeasure[][] = this.measures.map((measure /*, mi*/) => {\n\t\t\tconsole.assert(measure.validRegulated, '[makeVoiceStaves] measure is invalid:', measure);\n\n\t\t\tconst eventMap: { [key: number]: EventTerm } = {};\n\t\t\tmeasure.events.forEach((event) => (eventMap[event.id] = event));\n\n\t\t\tconst leftStaves = new Set(\n\t\t\t\tArray(measure.contexts.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, i) => i)\n\t\t\t);\n\n\t\t\tlet bar = null;\n\t\t\tif (measure.barType) {\n\t\t\t\tswitch (measure.barType) {\n\t\t\t\t\tcase 'Segment':\n\t\t\t\t\t\tbar = '||';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Terminal':\n\t\t\t\t\t\tbar = '|.';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst voices: VoiceMeasure[] = measure.voices.map((ids /*, vi*/) => {\n\t\t\t\tconst events = ids.map((id) => eventMap[id]);\n\t\t\t\tevents.sort((e1, e2) => e1.tick - e2.tick);\n\n\t\t\t\tconst tickMap = {};\n\t\t\t\tlet tick = 0;\n\t\t\t\tlet lastEvent = null;\n\t\t\t\tfor (const event of events) {\n\t\t\t\t\tif (!Number.isFinite(event?.tick)) {\n\t\t\t\t\t\tconsole.warn('invalid event tick:', event);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (event.tick > tick) tickMap[tick] = EventTerm.space({ tick, duration: event.tick - tick });\n\t\t\t\t\telse if (!event.grace && event.tick < tick && lastEvent)\n\t\t\t\t\t\tlastEvent.timeWarp = reducedFraction(event.tick - lastEvent.tick, lastEvent.duration);\n\t\t\t\t\t//console.log(\"timewarp:\", event.tick - lastEvent.tick, lastEvent.duration, lastEvent.timeWarp);\n\n\t\t\t\t\ttickMap[event.tick] = event;\n\n\t\t\t\t\tif (!event.zeroHolder) {\n\t\t\t\t\t\ttick = Math.round(event.tick + event.duration);\n\t\t\t\t\t\tlastEvent = event;\n\n\t\t\t\t\t\t// sub grace events\n\t\t\t\t\t\tif (event.graceIds) {\n\t\t\t\t\t\t\tevent.graceIds.forEach((id) => {\n\t\t\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\t\t\tif (grace) tickMap[grace.tick] = grace;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (measure.endEvent && measure.endEvent.graceIds) {\n\t\t\t\t\tmeasure.endEvent.graceIds.forEach((id) => {\n\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\tif (grace && (!lastEvent || grace.staff === lastEvent.staff)) tickMap[grace.tick] = grace;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (tick < measure.duration) tickMap[tick] = EventTerm.space({ tick, duration: measure.duration - tick });\n\t\t\t\telse if (tick > measure.duration && Number.isFinite(measure.duration))\n\t\t\t\t\t//console.warn(\"duration out of range:\", tick, column.duration, mi, vi);\n\t\t\t\t\tlastEvent.timeWarp = reducedFraction(measure.duration - lastEvent.tick, lastEvent.duration);\n\n\t\t\t\tconsole.assert(\n\t\t\t\t\t!lastEvent || !lastEvent.timeWarp || (Number.isInteger(lastEvent.timeWarp.numerator) && Number.isInteger(lastEvent.timeWarp.denominator)),\n\t\t\t\t\t'invalid time warp:',\n\t\t\t\t\tlastEvent\n\t\t\t\t);\n\n\t\t\t\tconst staffIndex = events[0] ? events[0].staff : 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\n\t\t\t\t//const row = measure.rows[staffIndex];\n\t\t\t\tconst contextedTerms = measure.contexts[staffIndex];\n\n\t\t\t\tconst tailEvent = events[events.length - 1];\n\t\t\t\tconst tailStaff = tailEvent ? tailEvent.staff : 0;\n\n\t\t\t\t// TODO: modify full measure rests duration\n\n\t\t\t\treturn {\n\t\t\t\t\ttickMap,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t...basic,\n\t\t\t\t\t// TODO: consider staff altered voice\n\t\t\t\t\tcontextedTerms,\n\t\t\t\t\tmarks: [],\n\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\theadStaff: staffIndex,\n\t\t\t\t\ttailStaff,\n\t\t\t\t\tbar,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\twhile (voices.length < voiceCount) {\n\t\t\t\tconst staffIndex = leftStaves.values().next().value || 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\t\t\t\tconst terms = measure.contexts[staffIndex];\n\n\t\t\t\tconst chiefVoice = voices.every((voice) => voice.headStaff !== staffIndex);\n\n\t\t\t\tconst voice = emptyVoiceFromStaffMeasure(\n\t\t\t\t\t{\n\t\t\t\t\t\tterms,\n\t\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t\t...basic,\n\t\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\t},\n\t\t\t\t\tchiefVoice\n\t\t\t\t);\n\t\t\t\tvoice.headStaff = staffIndex;\n\t\t\t\tvoice.tailStaff = staffIndex;\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\n\t\t\treturn voices;\n\t\t});\n\n\t\t// compute traits for voice-measures\n\t\tmeasures.forEach((voices) =>\n\t\t\tvoices.forEach((measure) => {\n\t\t\t\tconst words = [];\n\n\t\t\t\tif (!measure.empty) {\n\t\t\t\t\twords.push(`s${measure.headStaff}`);\n\t\t\t\t\twords.push(`s${measure.tailStaff}`);\n\t\t\t\t}\n\n\t\t\t\tObject.values(measure.tickMap).forEach((event) => {\n\t\t\t\t\tif (event instanceof EventTerm) {\n\t\t\t\t\t\twords.push(`s${event.staff}`);\n\n\t\t\t\t\t\tif (event.stemDirection) {\n\t\t\t\t\t\t\tconst sd = `st${event.staff}-${event.stemDirection}`;\n\t\t\t\t\t\t\twords.push(sd, sd);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.grace) words.push(`gd${event.mainDuration}`);\n\t\t\t\t\t\telse words.push(`d${event.mainDuration}`);\n\n\t\t\t\t\t\tif (event.rest) words.push('r-' + event.rest);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tevent.pitches.forEach((pitch) => {\n\t\t\t\t\t\t\t\twords.push(`p1-${pitch.note}`);\n\t\t\t\t\t\t\t\twords.push(`p8-${Math.round(pitch.note / 8)}`);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmeasure.trait = HashVector.fromWords(words);\n\t\t\t})\n\t\t);\n\t\t//console.log(\"measure traits:\");\n\t\t//console.table(measures.map(voices => voices.map(measure => hashToHex(measure.trait.toHash()))));\n\n\t\tconst staffToGroup: Record = this.staffGroups\n\t\t\t.flat(1)\n\t\t\t.reduce((map, si) => ((map[si] = this.staffGroups.findIndex((group) => group.includes(si))), map), {});\n\n\t\t// sort voices to connect voices between neighhoring measures\n\t\tconst voiceTraits = Array(voiceCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => ({ vector: HashVector.zero, index, weight: 0, headStaff: null }));\n\t\tmeasures.forEach((voices, mi) => {\n\t\t\tvoiceTraits.sort((v1, v2) => v2.weight - v1.weight);\n\n\t\t\tconst leftVoices = new Set(voices);\n\t\t\tvoiceTraits.forEach((voiceTrait) => {\n\t\t\t\tconst vs = [...leftVoices];\n\t\t\t\tlet measure = vs[0];\n\t\t\t\tif (mi > 0 && vs.length > 1) {\n\t\t\t\t\tconst consistencies = vs.map((measure) =>\n\t\t\t\t\t\tstaffToGroup[measure.headStaff] === staffToGroup[voiceTrait.headStaff]\n\t\t\t\t\t\t\t? cosHashes(voiceTrait.vector.toHash(), measure.trait.toHash())\n\t\t\t\t\t\t\t: -1\n\t\t\t\t\t);\n\t\t\t\t\tmeasure = vs[argmax(consistencies)];\n\t\t\t\t}\n\t\t\t\tleftVoices.delete(measure);\n\n\t\t\t\tmeasure.voiceIndex = voiceTrait.index;\n\t\t\t\tvoiceTrait.vector.scale(0.4).add(measure.trait);\n\n\t\t\t\tvoiceTrait.weight = Object.keys(measure.tickMap).length;\n\n\t\t\t\tif (mi === 0) voiceTrait.headStaff = measure.headStaff;\n\t\t\t});\n\n\t\t\tvoices.sort((m1, m2) => m1.voiceIndex - m2.voiceIndex);\n\t\t});\n\n\t\t//const staffTraits = Array(this.stavesCount).fill(null).map((_, si) => HashVector.fromString(`s${si}`).toHash());\n\t\tconst staffVoiceIndices = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map(() => []);\n\t\tvoiceTraits.forEach((trait) => {\n\t\t\t//const consistencies = staffTraits.map(staff => cosHashes(trait.vector.toHash(), staff));\n\t\t\t//staffVoiceIndices[argmax(consistencies)].push(trait.index);\n\t\t\tstaffVoiceIndices[trait.headStaff].push(trait.index);\n\t\t});\n\n\t\tconst staves = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, si) => {\n\t\t\t\tif (!measures[0]) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvoices: [],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t//const voiceIndicies = measures[0].map((voice, vi) => ({ voice, vi })).filter(({ voice }) => voice.headStaff === si).map(({ vi }) => vi);\n\t\t\t\tconst voiceIndicies = staffVoiceIndices[si];\n\n\t\t\t\tconst voices = voiceIndicies.map((vi): TermVoice => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmode: 'relative',\n\t\t\t\t\t\tmeasures: measures.map((m) => m[vi]),\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\treturn { voices };\n\t\t\t});\n\n\t\tremoveEmptyMeasuresInVoicesStaves(staves);\n\t\tstaves.forEach((staff) => staff.voices.forEach(markingTiesInVoice));\n\n\t\treturn staves;\n\t}\n\n\tperform(): Performing {\n\t\tconst staves = this.makeVoiceStaves();\n\t\tif (!staves) return null;\n\n\t\tconst tokenMap = new Map();\n\n\t\t// TODO: store staff channels in score\n\t\tconst staffToChannel = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.reduce((map, _, i) => {\n\t\t\t\tmap[i] = i;\n\t\t\t\treturn map;\n\t\t\t}, {});\n\n\t\tconst voiceChannels = [].concat(...staves.map((staff, si) => staff.voices.map(() => staffToChannel[si])));\n\n\t\tlet hasTempo = false;\n\n\t\tlet nextTick = 0;\n\t\tlet events0 = null;\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure) => {\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst voices: VoiceMeasure[] = [].concat(...staves.map((staff) => staff.voices.map((voice) => voice.measures[measureIndex])));\n\t\t\t\tconst voice0 = voices[0];\n\t\t\t\tconst tick = nextTick;\n\n\t\t\t\t//const signatureDuration = (WHOLE_DURATION * voice0.timeSignature.numerator) / voice0.timeSignature.denominator;\n\n\t\t\t\tnextTick += voice0.duration;\n\n\t\t\t\tconst notes = [].concat(\n\t\t\t\t\t...voices.map((measure, vi) => {\n\t\t\t\t\t\tconst tickFactor = 1; //measure.duration ? signatureDuration / measure.duration : 1;\n\n\t\t\t\t\t\tconst channel = voiceChannels[vi];\n\n\t\t\t\t\t\tconst chords = Object.values(measure.tickMap)\n\t\t\t\t\t\t\t.filter((term) => term instanceof EventTerm && !term.rest)\n\t\t\t\t\t\t\t.map((term: EventTerm) => {\n\t\t\t\t\t\t\t\tconst duration = Math.round(term.duration * tickFactor);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(term.tick), 'invalid event term tick:', term);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(duration), 'invalid event term duration:', term);\n\n\t\t\t\t\t\t\t\tif (term.tick >= 0) {\n\t\t\t\t\t\t\t\t\t// exclude minus tick tokens\n\t\t\t\t\t\t\t\t\tterm.noteIds.forEach((id) => {\n\t\t\t\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: term.roundX,\n\t\t\t\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(term.staff));\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttick: Math.round(term.tick * tickFactor),\n\t\t\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\t\t\tpitches: term.pitches,\n\t\t\t\t\t\t\t\t\tnoteIds: term.noteIds,\n\t\t\t\t\t\t\t\t\tpart,\n\t\t\t\t\t\t\t\t\tstaff: term.staff,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t\t...chords.map((chord) => {\n\t\t\t\t\t\t\t\t// exclude repeated pitches\n\t\t\t\t\t\t\t\tconst pitchMap: { [pitch: number]: TermPitch } = chord.pitches.reduce((map, pitch) => {\n\t\t\t\t\t\t\t\t\tmap[noteToPitch(pitch)] = pitch;\n\t\t\t\t\t\t\t\t\treturn map;\n\t\t\t\t\t\t\t\t}, {});\n\t\t\t\t\t\t\t\tconst pitches = Object.values(pitchMap).sort((p1, p2) => p1.note - p2.note);\n\n\t\t\t\t\t\t\t\treturn pitches\n\t\t\t\t\t\t\t\t\t.filter((pitch) => !pitch.tied)\n\t\t\t\t\t\t\t\t\t.map((pitch, i) => {\n\t\t\t\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\ttick: chord.tick,\n\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\t\t\t\ttrack: chord.part,\n\t\t\t\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tconst events = [];\n\t\t\t\tevents0 = events0 || events;\n\n\t\t\t\tif (measure.marks)\n\t\t\t\t\tmeasure.marks.forEach((mark) => {\n\t\t\t\t\t\tif (mark instanceof TempoTerm) {\n\t\t\t\t\t\t\tconst bpm = mark.bpm;\n\t\t\t\t\t\t\tif (mark.isValid()) {\n\t\t\t\t\t\t\t\tconst es = hasTempo ? events : events0; // set the first tempo to the beginning of the track\n\t\t\t\t\t\t\t\tconst tick = hasTempo ? mark.tick : 0;\n\t\t\t\t\t\t\t\tes.push({\n\t\t\t\t\t\t\t\t\ttrack: 0,\n\t\t\t\t\t\t\t\t\tticks: tick,\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\t\t\t\t\t\tmicrosecondsPerBeat: Math.round(60e6 / bpm),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\thasTempo = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents,\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tif (!hasTempo) {\n\t\t\tmeasures[0].events.push({\n\t\t\t\ttrack: 0,\n\t\t\t\tticks: 0,\n\t\t\t\tdata: {\n\t\t\t\t\ttype: 'meta',\n\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\tmicrosecondsPerBeat: 0.5e6, // TODO\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tperformByEstimation(): Performing {\n\t\tconst tokenMap = new Map();\n\t\tlet nextTick = 0;\n\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => measure.events.some((event) => event.predisposition))\n\t\t\t.map((measure) => {\n\t\t\t\tconst tick = nextTick;\n\t\t\t\tconst duration = Math.round(measure.estimatedDuration || fractionMul(WHOLE_DURATION, measure.timeSignature));\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\tnextTick += duration;\n\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst chords = measure.events.filter((event) => event.predisposition && event.predisposition.fake < 0.5 && !event.rest);\n\t\t\t\tconst notes = chords\n\t\t\t\t\t.map((chord) => {\n\t\t\t\t\t\tconst noteTick = Math.round(chord.predisposition.tick);\n\n\t\t\t\t\t\tchord.noteIds.forEach((id) => {\n\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\tx: chord.roundX,\n\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn chord.pitches.map((pitch, i) => {\n\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(chord.staff));\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttick: noteTick,\n\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\ttrack: part,\n\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\tchannel: 0,\n\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.flat(1);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents: [],\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tfeatureHash(): Hash {\n\t\tconst headMeasures = this.measures.slice(0, 16);\n\t\tconst measureWords = headMeasures.map((measure) => measure.featureWords);\n\n\t\tconst levels = [1, 4, 16].map((len) => {\n\t\t\tconst meaures = measureWords.slice(0, len).filter(Boolean);\n\t\t\tconst ys = meaures.map((words) => words[0]).flat(1);\n\t\t\tconst melodies = meaures.map((words) => words[1]).flat(1);\n\t\t\tconst rhythm = meaures.map((words) => words[2]).flat(1);\n\n\t\t\tconst [vecY, vecMelody, vecRhythm] = [ys, melodies, rhythm].map(HashVector.fromWords);\n\n\t\t\treturn HashVector.concat(vecY, vecMelody.sub(128), vecRhythm.sub(128));\n\t\t});\n\n\t\treturn HashVector.concat(...levels).toHash();\n\t}\n\n\tfeatureHashHex(): string {\n\t\treturn hashToHex(this.featureHash());\n\t}\n\n\tfeatureHashBigInt(): bigint {\n\t\treturn hashToBigInt(this.featureHash());\n\t}\n\n\tassignMeasureNumbers(): void {\n\t\tlet n = null as any;\n\t\tfor (const measure of this.measures) {\n\t\t\tif (!measure.discard && !measure.events.length) continue;\n\n\t\t\tif (measure.indent) n = null;\n\n\t\t\tif (!Number.isFinite(n)) n = measure.partialDuration ? 0 : 1;\n\n\t\t\tmeasure.measureNumber = n++;\n\t\t}\n\t}\n}\n\nexport { SpartitoMeasure, Spartito };\n","import { Fraction } from './interfaces';\nimport { ContextedTerm, ContextType } from './term';\nimport { Logger, DummyLogger } from './logger';\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nexport const mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst PHONETS = 'CDEFGAB';\n\nconst ALTER_NAMES = {\n\t[-2]: '\\u266D\\u266D',\n\t[-1]: '\\u266D',\n\t[0]: '\\u266E',\n\t[1]: '\\u266F',\n\t[2]: '\\uD834\\uDD2A',\n};\n\n/*\n\tCoordinates:\n\n\t\tnote:\n\t\t\tzero: the middle C line (maybe altered)\n\t\t\tpositive: high (right on piano keyboard)\n\t\t\tunit: a step in scales of the current staff key\n\n\t\tstaff Y:\n\t\t\tzero: the third (middle) line among 5 staff lines\n\t\t\tpositive: down\n\t\t\tunit: a interval between 2 neighbor staff lines\n*/\n\nexport default class StaffContext {\n\tlogger: Logger = new DummyLogger();\n\n\tclef: number = -3;\n\tkeyAlters: number[] = [];\n\toctaveShift: number = 0;\n\talters: number[] = [];\n\n\ttimeSignature: Fraction = {\n\t\tnumerator: 4,\n\t\tdenominator: 4,\n\t};\n\ttimeSigNumeric: boolean = false;\n\ttimeSigNumSet: boolean = false;\n\ttimeSigDenSet: boolean = false;\n\tdoubtingTimesig: boolean = true;\n\n\tchange(term: ContextedTerm) {\n\t\tswitch (term.type) {\n\t\t\tcase ContextType.Clef:\n\t\t\t\tthis.clef = term.clef;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.KeyAcc:\n\t\t\t\tthis.keyAlters[mod7(this.yToNote(term.y))] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.Acc:\n\t\t\t\tthis.alters[this.yToNote(term.y)] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.OctaveShift:\n\t\t\t\tthis.octaveShift = term.octaveShift;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureC:\n\t\t\t\tthis.timeSigNumeric = false;\n\t\t\t\tswitch (term.tokenType) {\n\t\t\t\t\tcase 'timesig-C44':\n\t\t\t\t\t\tthis.timeSignature.numerator = 4;\n\t\t\t\t\t\tthis.timeSignature.denominator = 4;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'timesig-C22':\n\t\t\t\t\t\tthis.timeSignature.numerator = 2;\n\t\t\t\t\t\tthis.timeSignature.denominator = 2;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureN:\n\t\t\t\tthis.timeSigNumeric = true;\n\t\t\t\tswitch (term.y) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (this.timeSigDenSet) this.timeSignature.denominator = this.timeSignature.denominator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.denominator = term.number;\n\n\t\t\t\t\t\tthis.timeSigDenSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase -1:\n\t\t\t\t\t\tif (this.timeSigNumSet) this.timeSignature.numerator = this.timeSignature.numerator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.numerator = term.number;\n\n\t\t\t\t\t\tthis.timeSigNumSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.logger.warn('unexpected time signature Y:', term.y);\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tresetMeasure() {\n\t\tthis.alters = [];\n\n\t\tthis.timeSigNumSet = false;\n\t\tthis.timeSigDenSet = false;\n\t}\n\n\tresetSystem() {\n\t\tthis.keyAlters = [];\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.keyAlters.filter((a) => Number.isInteger(a)).reduce((sum, a) => sum + a, 0);\n\t}\n\n\tget partialTimeSignature(): boolean {\n\t\treturn !this.timeSigNumSet !== !this.timeSigDenSet;\n\t}\n\n\tnoteToY(note: number): number {\n\t\treturn -note / 2 - this.clef - this.octaveShift * 3.5;\n\t}\n\n\tpitchToNote(pitch: number, { preferredAlter = null } = {}): { note: number; alter: number } {\n\t\tif (!preferredAlter) preferredAlter = this.keySignature < 0 ? -1 : 1;\n\n\t\tconst group = Math.floor((pitch - MIDDLE_C) / 12);\n\t\tconst gp = mod12(pitch);\n\t\tconst alteredGp = GROUP_N_TO_PITCH.includes(gp) ? gp : mod12(gp - preferredAlter);\n\t\tconst gn = GROUP_N_TO_PITCH.indexOf(alteredGp);\n\t\tthis.logger.assert(gn >= 0, 'invalid preferredAlter:', pitch, preferredAlter, alteredGp);\n\n\t\tconst naturalNote = group * 7 + gn;\n\n\t\tconst alterValue = gp - alteredGp;\n\t\tconst keyAlterValue = this.keyAlters[gn] || 0;\n\t\tconst onAcc = Number.isInteger(this.alters[naturalNote]);\n\n\t\tconst alter = onAcc ? alterValue : alterValue === keyAlterValue ? null : alterValue;\n\n\t\treturn { note: naturalNote, alter };\n\t}\n\n\tpitchToY(pitch: number, { preferredAlter = null } = {}): { y: number; alter: number } {\n\t\tconst { note, alter } = this.pitchToNote(pitch, { preferredAlter });\n\t\tconst y = this.noteToY(note);\n\n\t\treturn { y, alter };\n\t}\n\n\tyToNote(y: number): number {\n\t\tthis.logger.assert(Number.isInteger(y * 2), 'invalid y:', y);\n\n\t\treturn (-y - this.octaveShift * 3.5 - this.clef) * 2;\n\t}\n\n\talterOnNote(note: number): number {\n\t\tif (Number.isInteger(this.alters[note])) return this.alters[note];\n\n\t\tconst gn = mod7(note);\n\t\tif (Number.isInteger(this.keyAlters[gn])) return this.keyAlters[gn];\n\n\t\treturn 0;\n\t}\n\n\tnoteToPitch(note: number): number {\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tconst pitch = MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + this.alterOnNote(note);\n\t\tif (!Number.isFinite(pitch)) {\n\t\t\tthis.logger.warn('invalid pitch value:', pitch, note, group, gn);\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn pitch;\n\t}\n\n\tyToPitch(y: number): number {\n\t\treturn this.noteToPitch(this.yToNote(y));\n\t}\n\n\tyToPitchName(y: number): string {\n\t\tconst note = this.yToNote(y);\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tlet alter = this.alterOnNote(note);\n\t\tif (!alter && !Number.isInteger(this.alters[note])) alter = null;\n\n\t\treturn `${ALTER_NAMES[alter] ? ALTER_NAMES[alter] : ''}${PHONETS[gn]}${group + 4}`;\n\t}\n}\n","import sha1 from 'js-sha1';\n\nimport * as measureLayout from '../measureLayout';\nimport * as staffLayout from '../staffLayout';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { EventSystem, MeasureBrief, MusicSheet, RecognitionSettings, ScoreData, TermMeasure, TermStaff, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { PatchMeasure } from './patch';\nimport { Measure, Page, Staff, System } from './scoreComponents';\nimport { hashSemanticPoint, SemanticPoint, SemanticType } from './semanticPoint';\nimport { BOS_ELEMENT, fractionToElems, SemanticCluster, SemanticElement, SemanticElementType } from './semanticTopology';\nimport { Spartito, SpartitoMeasure } from './spartito';\nimport StaffContext from './staffContext';\nimport { ContextedTerm, ContextType, EventTerm, WHOLE_DURATION } from './term';\nimport type { SemanticPointInMeasure } from './timewiseGraph';\nimport { TimewiseGraph } from './timewiseGraph';\nimport { Token, TokenType } from './token';\nimport { distance2D, solveOverlapping } from './utils';\n\nexport const VERSION = 14;\n\ninterface Topology {\n\tclusters: SemanticCluster[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n}\n\nconst GRAND_STAFF_LAYOUT = '{-}';\n\nconst processStaffContext = (staff: TermStaff, logger: Logger = new DummyLogger()): void => {\n\tconst context = new StaffContext();\n\tcontext.logger = logger;\n\n\tfor (const row of staff.rows) {\n\t\tfor (const measure of row) {\n\t\t\tconst startEvent = measure.terms.find((term) => term instanceof EventTerm) as EventTerm;\n\t\t\tlet tick = startEvent ? Math.min(startEvent.tick, 0) : 0;\n\n\t\t\tmeasure.terms.forEach((term) => {\n\t\t\t\tif (term instanceof ContextedTerm) {\n\t\t\t\t\tterm.tick = tick; // TODO: not working here because measure not regulated yet\n\t\t\t\t\tcontext.change(term);\n\t\t\t\t} else if (term instanceof EventTerm) {\n\t\t\t\t\tconst endTick = term.tick + (term.duration || 0);\n\t\t\t\t\tif (endTick > tick) tick = endTick;\n\n\t\t\t\t\tif (term.ys) {\n\t\t\t\t\t\tterm.pitches = term.ys.map((y) => {\n\t\t\t\t\t\t\tconst note = context.yToNote(y);\n\t\t\t\t\t\t\tconst alter = context.alterOnNote(note);\n\n\t\t\t\t\t\t\treturn { note, alter, octaveShift: context.octaveShift };\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmeasure.timeSignature = { ...context.timeSignature };\n\t\t\tmeasure.timeSigNumeric = context.timeSigNumeric;\n\t\t\tmeasure.doubtfulTimesig =\n\t\t\t\tcontext.doubtingTimesig ||\n\t\t\t\t!Number.isInteger(Math.log2(measure.timeSignature.denominator)) ||\n\t\t\t\tmeasure.timeSignature.numerator <= measure.timeSignature.denominator / 4;\n\n\t\t\tmeasure.keySignature = context.keySignature;\n\n\t\t\t// fill empty measure duration\n\t\t\tif (measure.duration === 0) measure.duration = (WHOLE_DURATION * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\n\t\t\tcontext.resetMeasure();\n\t\t}\n\n\t\tcontext.resetSystem();\n\t}\n};\n\nconst upgradeScoreData = (data: ScoreData): ScoreData => {\n\tif (data.version < 3) {\n\t\tconst { version, stavesCount, layoutTemplate, ...fields } = data;\n\t\tvoid version;\n\t\tvoid layoutTemplate;\n\n\t\tlet staffLayoutCode =\n\t\t\tstavesCount > 1\n\t\t\t\t? Array(stavesCount - 1)\n\t\t\t\t\t\t.fill(',')\n\t\t\t\t\t\t.join('')\n\t\t\t\t: '';\n\n\t\t// use graph staff by default for 2 staves score\n\t\tif (stavesCount === 2) staffLayoutCode = '{-}';\n\n\t\tdata = {\n\t\t\tversion: 3,\n\t\t\tstaffLayoutCode,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tif (data.version < 8) {\n\t\t// upgrade system measure bar semantics\n\t\tdata.pages.forEach((page) => {\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tif (system.semantics) {\n\t\t\t\t\tconst bars = system.semantics.filter((point) => point.semantic === SemanticType.vline_BarMeasure);\n\n\t\t\t\t\tsystem.semantics = [].concat(\n\t\t\t\t\t\t...system.staves.map((staff) => {\n\t\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\n\t\t\t\t\t\t\treturn bars.map((point) => ({\n\t\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\t\ty: point.y + oy,\n\t\t\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\t\t\t...point.extension,\n\t\t\t\t\t\t\t\t\ty1: point.extension.y1 + oy,\n\t\t\t\t\t\t\t\t\ty2: point.extension.y2 + oy,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tdata.version = 8;\n\t}\n\n\tif (data.version < 9) {\n\t\t// remove old format spartito\n\t\tdata.spartito = null;\n\n\t\tdata.version = 9;\n\t}\n\n\treturn data;\n};\n\nconst bitsToMask = (bits: number[]): number => bits.reduce((mask, bit, i) => (bit ? mask | (1 << i) : mask), 0);\n\ninterface PointPosition {\n\tpoint: SemanticPoint;\n\tpageIndex: number;\n\tsystemIndex: number;\n\tstaffIndex: number;\n}\n\ninterface MeasureValidation {\n\ttickMap: { [tick: number]: number };\n}\n\ninterface Size {\n\twidth: number;\n\theight: number;\n}\n\nclass Score extends SimpleClass {\n\tstatic className = 'Score';\n\n\tversion = VERSION;\n\n\ttitle: string;\n\t// in pixels\n\tpageSize: Size;\n\tunitSize: number;\n\tstaffLayoutCode: string;\n\n\tpaperOptions?: Partial;\n\n\theaders: { [key: string]: string };\n\n\ttextAnnotations: { [id: string]: string };\n\n\ttags?: string[];\n\n\tinstrumentDict: { [key: string]: string };\n\n\tpages: Page[];\n\ttopology: Topology;\n\tspartito?: Spartito;\n\n\tpatches?: PatchMeasure[];\n\n\tsettings: RecognitionSettings;\n\n\tconstructor(data: ScoreData) {\n\t\tsuper();\n\t\tsuper.assign(upgradeScoreData(data));\n\n\t\tthis.pages = this.pages || [];\n\t\tthis.headers = this.headers || {};\n\t\tthis.instrumentDict = this.instrumentDict || {};\n\n\t\tthis.pageSize = this.pageSize || {\n\t\t\t// A4 paper\n\t\t\twidth: 794,\n\t\t\theight: 1122,\n\t\t};\n\n\t\tthis.unitSize = this.unitSize || null;\n\n\t\tthis.staffLayoutCode = this.staffLayoutCode || (this.maxStavesCount === 2 ? GRAND_STAFF_LAYOUT : Array(this.maxStavesCount).fill('').join(','));\n\t}\n\n\tget systems(): System[] {\n\t\treturn [].concat(...this.pages.map((page) => page.systems));\n\t}\n\n\tget measureCount(): number {\n\t\treturn this.systems.reduce((sum, system) => sum + (system.measureCount || 0), 0);\n\t}\n\n\tget imageKeys(): string[] {\n\t\treturn [\n\t\t\t...this.pages.map((page) => page.source?.url),\n\t\t\t...this.systems.map((system) => system.backgroundImage),\n\t\t\t...[].concat(\n\t\t\t\t...this.systems.map((system) =>\n\t\t\t\t\t[...system.staves.map((staff) => staff.backgroundImage), ...system.staves.map((staff) => staff.maskImage)].filter(Boolean)\n\t\t\t\t)\n\t\t\t),\n\t\t].filter(Boolean);\n\t}\n\n\tget breakSystemIndices(): number[] {\n\t\tconst indices = [];\n\t\tlet systemCount = 0;\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tif (i < this.pages.length - 1) {\n\t\t\t\tsystemCount += page.systems.length;\n\t\t\t\tindices.push(systemCount - 1);\n\t\t\t}\n\t\t});\n\n\t\treturn indices;\n\t}\n\n\tget staffLayout(): staffLayout.StaffLayout {\n\t\treturn staffLayout.parseCode(this.staffLayoutCode);\n\t}\n\n\tget measureLayoutCode(): string {\n\t\treturn this.spartito?.measureLayoutCode;\n\t}\n\n\tget maxStavesCount(): number {\n\t\treturn Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget semanticHash(): string {\n\t\tconst ids = [].concat(\n\t\t\t...this.systems.map((system) =>\n\t\t\t\t[].concat(...system.staves.map((staff) => (staff.semantics ? system.qualifiedSemantics(staff.semantics).map((s) => s.id) : [])))\n\t\t\t)\n\t\t);\n\t\treturn sha1(ids.join(''));\n\t}\n\n\teventSystemsToTermStaves(eventSystems: EventSystem[], logger: Logger = new DummyLogger()): TermStaff[] {\n\t\t// [staff]\n\t\tconst termStaves: TermStaff[] = Array(this.maxStavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, staffIndex): TermStaff => {\n\t\t\t\treturn {\n\t\t\t\t\t// [system, measure]\n\t\t\t\t\trows: eventSystems.map((sys, i) =>\n\t\t\t\t\t\tsys.columns.map((column, ii): TermMeasure => {\n\t\t\t\t\t\t\tconst measure = column.rows[staffIndex];\n\t\t\t\t\t\t\tconsole.assert(measure, '[eventSystemsToTermStaves] measure is null:', staffIndex, column.rows);\n\n\t\t\t\t\t\t\tconst contexts = measure.contexts;\n\n\t\t\t\t\t\t\t// prepend octave shift 0 at begin of every system\n\t\t\t\t\t\t\tif (ii === 0) {\n\t\t\t\t\t\t\t\tif (!contexts.some((term) => term.type === ContextType.OctaveShift)) {\n\t\t\t\t\t\t\t\t\tcontexts.unshift(\n\t\t\t\t\t\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\t\t\t\t\t\tstaff: staffIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\t\t\t\ttokenType: TokenType.OctaveShift0,\n\t\t\t\t\t\t\t\t\t\t\ttick: 0,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst terms = [...(measure.events || []), ...contexts].sort((t1, t2) => t1.x - t2.x);\n\n\t\t\t\t\t\t\tconst pageBreak = staffIndex === 0 && ii === sys.columns.length - 1 && this.breakSystemIndices.includes(i);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tterms,\n\t\t\t\t\t\t\t\t//xToTick: column.xToTick,\n\t\t\t\t\t\t\t\tduration: column.duration,\n\t\t\t\t\t\t\t\tpageBreak,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\ttermStaves.forEach((staff) => processStaffContext(staff, logger));\n\n\t\treturn termStaves;\n\t}\n\n\tresetPageLayout(parameters: { unitSize?: number; pageSize?: Size }) {\n\t\tconst { unitSize = this.unitSize, pageSize = this.pageSize } = parameters;\n\n\t\tconst newCenter = {\n\t\t\tx: (pageSize.width * 0.5) / unitSize,\n\t\t\ty: (pageSize.height * 0.5) / unitSize,\n\t\t};\n\n\t\tthis.pages.forEach((page) => {\n\t\t\tconst offsetX = newCenter.x - page.width / 2;\n\t\t\tconst offsetY = newCenter.y - page.height / 2;\n\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tsystem.left += offsetX;\n\t\t\t\tsystem.top += offsetY;\n\t\t\t});\n\n\t\t\tif (page.semantics) {\n\t\t\t\tpage.semantics.forEach((point) => {\n\t\t\t\t\tpoint.x += offsetX;\n\t\t\t\t\tpoint.y += offsetY;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tpage.width = pageSize.width / unitSize;\n\t\t\tpage.height = pageSize.height / unitSize;\n\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations });\n\t\t});\n\n\t\tthis.unitSize = unitSize;\n\t\tthis.pageSize = pageSize;\n\t}\n\n\tgetMeasure(measureIndex: number): {\n\t\tmeasureIndex: number;\n\t\tsystem: System;\n\t\tlocalIndex: number;\n\t\tleft: number;\n\t\tright: number;\n\t\tmeasures: Measure[];\n\t} {\n\t\tlet index = measureIndex;\n\t\tfor (const system of this.systems) {\n\t\t\tif (index < system.measureCount) {\n\t\t\t\tconst staff = system.staves[0];\n\t\t\t\tconst measure = staff.measures[index];\n\t\t\t\tconsole.assert(measure, 'measure is null:', system.measureCount, index, staff.measures);\n\t\t\t\tconst measures = system.getStaffArray(this.maxStavesCount).map((staff) => staff && staff.measures[index]);\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex,\n\t\t\t\t\tsystem,\n\t\t\t\t\tlocalIndex: index,\n\t\t\t\t\tleft: measure.left,\n\t\t\t\t\tright: measure.right,\n\t\t\t\t\tmeasures,\n\t\t\t\t};\n\t\t\t}\n\t\t\tindex -= system.measureCount;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetRawCluster(measureIndex: number, threshold: number, { timeSignature }: Partial = {}): SemanticCluster {\n\t\tconst position = this.getMeasure(measureIndex);\n\t\tif (!position) return null;\n\n\t\tconst { system, left, right } = position;\n\t\t//console.log(\"measure:\", system, left, right);\n\n\t\tconst elements: SemanticElement[] = [BOS_ELEMENT];\n\n\t\tif (timeSignature) elements.push(...fractionToElems(timeSignature));\n\n\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tlet points = system.qualifiedSemantics(staff.semantics, threshold).filter((point) => point.x > left && point.x < right);\n\t\t\tpoints = solveOverlapping(points);\n\n\t\t\t// exlude tempo noteheads\n\t\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t});\n\n\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\n\t\t\tpoints.forEach((point) => {\n\t\t\t\tconst type = SemanticElementType[point.semantic];\n\t\t\t\tif (type) {\n\t\t\t\t\tlet y1 = point.y;\n\t\t\t\t\tlet y2 = point.y;\n\t\t\t\t\tif (type === SemanticElementType.vline_Stem) {\n\t\t\t\t\t\ty1 = point.extension.y1;\n\t\t\t\t\t\ty2 = point.extension.y2;\n\t\t\t\t\t}\n\n\t\t\t\t\telements.push({\n\t\t\t\t\t\tid: point.id,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\tx: point.x - left,\n\t\t\t\t\t\ty1: y1 + y0,\n\t\t\t\t\t\ty2: y2 + y0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new SemanticCluster({\n\t\t\tindex: measureIndex,\n\t\t\telements,\n\t\t});\n\t}\n\n\tgetRawClusters(threshold: number = 1): SemanticCluster[] {\n\t\t//const times = this.getMeasuresTime();\n\n\t\treturn Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => this.getRawCluster(mi, threshold /*, times[mi]*/));\n\t}\n\n\tmakeSpartito(logger: Logger = new DummyLogger()): Spartito {\n\t\tlet eventSystems: EventSystem[] = this.systems.map((system) => system.getEvents(this.maxStavesCount));\n\n\t\t/*if (this.topology) {\n\t\t\tconst clusters = this.topology.clusters;\n\n\t\t\t// [measure, staff, event]\n\t\t\tconst eventsColumns: ChordColumn[][][] = clusters\n\t\t\t\t.filter((cluster) => cluster.index < this.measureCount)\n\t\t\t\t.reduce((columns, cluster) => {\n\t\t\t\t\tconst { system, measures } = this.getMeasure(cluster.index);\n\t\t\t\t\tconst events = cluster.getEvents();\n\n\t\t\t\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\t\t\t\t\tconst x0 = measures.filter(Boolean)[0].left;\n\n\t\t\t\t\tconst staves = system.getStaffArray(this.maxStavesCount);\n\n\t\t\t\t\t// translate by staff & measure relative offset\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst staff = staves[event.staff];\n\t\t\t\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\t\t\t\t\t\tevent.ys = event.ys.map((y) => roundNumber(y - y0, 0.5));\n\n\t\t\t\t\t\tevent.left += x0;\n\t\t\t\t\t\tevent.right += x0;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst column = measures.map((measure, staffIndex) => {\n\t\t\t\t\t\tif (!measure) return [];\n\n\t\t\t\t\t\t//console.log(\"m:\", mi, \"s:\", staffIndex);\n\t\t\t\t\t\tconst localEvents = events.filter((event) => event.staff === staffIndex);\n\t\t\t\t\t\t//measure.assignModifiersOnEvents(localEvents);\n\t\t\t\t\t\tmeasure.assignAccessoriesOnEvents(localEvents);\n\n\t\t\t\t\t\treturn localEvents;\n\t\t\t\t\t});\n\n\t\t\t\t\tcolumns[cluster.index] = column;\n\n\t\t\t\t\treturn columns;\n\t\t\t\t}, []);\n\n\t\t\tconst breakSystemIndices = this.breakSystemIndices;\n\n\t\t\tconst basicEventSystems = eventSystems;\n\t\t\teventSystems = [];\n\n\t\t\tlet measures = 0;\n\t\t\tfor (const system of this.systems) {\n\t\t\t\tconst esys = system.getEventsFunctional(this.maxStavesCount, (si, mi) => eventsColumns[measures + mi] && eventsColumns[measures + mi][si], [], {\n\t\t\t\t\tuseXMap: false,\n\t\t\t\t});\n\n\t\t\t\tconst basicSys = basicEventSystems[system.index];\n\t\t\t\t//onst nullN = esys.columns.filter(c => !c).length;\n\t\t\t\t//if (nullN)\n\t\t\t\t//\tconsole.log(\"null:\", nullN, esys.columns.length);\n\t\t\t\tesys.columns = esys.columns.map((column, i) => (column ? column : basicSys.columns[i]));\n\n\t\t\t\tconst sysIndex = this.systems.indexOf(system);\n\t\t\t\tconst pageBreak = breakSystemIndices.includes(sysIndex);\n\t\t\t\tconst lastColumn = esys.columns[esys.columns.length - 1];\n\t\t\t\tif (lastColumn) {\n\t\t\t\t\tlastColumn.break = true;\n\t\t\t\t\tlastColumn.pageBreak = pageBreak;\n\t\t\t\t}\n\n\t\t\t\teventSystems.push(esys);\n\t\t\t\tmeasures += system.measureCount;\n\t\t\t}\n\t\t}*/\n\n\t\tconst staves = this.eventSystemsToTermStaves(eventSystems, logger);\n\n\t\t// assign staff basics for columns\n\t\teventSystems.forEach((sys, ri) => {\n\t\t\tsys.columns.forEach((column, mi) => {\n\t\t\t\tcolumn.basics = staves.map((staff) => {\n\t\t\t\t\tconst { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig } = staff.rows[ri][mi];\n\n\t\t\t\t\treturn { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig };\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tconst clusters = null; //this.topology && this.topology.clusters;\n\n\t\tconst measures = [].concat(\n\t\t\t...eventSystems.map((esys) =>\n\t\t\t\tesys.columns.map((column) => {\n\t\t\t\t\tconst measureIndex = column.measureIndex;\n\t\t\t\t\tconst { system, localIndex, left, right } = this.getMeasure(measureIndex);\n\n\t\t\t\t\tconst cluster = clusters && clusters.find((cluster) => cluster.index === measureIndex);\n\n\t\t\t\t\tconst staffYsFull = [];\n\t\t\t\t\tsystem.staves.forEach((staff) => (staffYsFull[staff.index] = staff.top + staff.staffY));\n\n\t\t\t\t\tconst patch = this.patches && this.patches.find((patch) => patch.measureIndex === measureIndex);\n\t\t\t\t\tconst events = patch ? patch.events : SpartitoMeasure.reorderEvents([].concat(...column.rows.map((row) => row.events)), staffYsFull);\n\n\t\t\t\t\tconst barTypes = Object.fromEntries(Object.entries(column.barTypes).map(([k, v]) => [k, v / system.staves.length]));\n\t\t\t\t\tconst indent = localIndex === 0 && system.indent;\n\n\t\t\t\t\treturn new SpartitoMeasure({\n\t\t\t\t\t\tmeasureIndex,\n\t\t\t\t\t\tstaffMask: esys.staffMask,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\t\tlocalIndex,\n\t\t\t\t\t\t\tleft,\n\t\t\t\t\t\t\tright,\n\t\t\t\t\t\t\tstaffYs: system.staves.map((staff) => staff.top + staff.staffY),\n\t\t\t\t\t\t\tstaffYsFull,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t//startX: column.startX,\n\t\t\t\t\t\t//width: column.width,\n\t\t\t\t\t\tduration: patch ? patch.duration : column.duration,\n\t\t\t\t\t\tevents,\n\t\t\t\t\t\tcontexts: column.rows.map((row) => row.contexts),\n\t\t\t\t\t\tmarks: column.marks,\n\t\t\t\t\t\tbreak: column.break,\n\t\t\t\t\t\tpageBreak: column.pageBreak,\n\t\t\t\t\t\tvoltaBegin: column.voltaBegin,\n\t\t\t\t\t\tvoltaEnd: column.voltaEnd,\n\t\t\t\t\t\talternative: column.alternative,\n\t\t\t\t\t\tbarTypes,\n\t\t\t\t\t\tindent,\n\t\t\t\t\t\tbasics: patch ? patch.basics : column.basics,\n\t\t\t\t\t\tmatrixH: cluster && cluster.matrixH,\n\t\t\t\t\t\tmatrixV: cluster && cluster.matrixV,\n\t\t\t\t\t\tvoices: patch ? patch.voices : null,\n\t\t\t\t\t\tpatched: !!patch,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tconst staffLayout = this.staffLayout;\n\t\tconst staffGroups = staffLayout.standaloneGroups.map((ids) => ids.map((id) => staffLayout.staffIds.indexOf(id)));\n\n\t\tthis.spartito = new Spartito({\n\t\t\tstavesCount: this.maxStavesCount,\n\t\t\tstaffGroups,\n\t\t\tmeasures,\n\t\t});\n\n\t\treturn this.spartito;\n\t}\n\n\tmakeMusicSheet(): MusicSheet {\n\t\tconst spartito = this.spartito || this.makeSpartito();\n\n\t\tif (!spartito.regulated) console.warn('[makeMusicSheet]\tspartito not regulated.');\n\n\t\tconst voiceStaves = spartito.makeVoiceStaves();\n\n\t\tconst { title, pageSize, unitSize, staffLayout, paperOptions, headers, instrumentDict } = this;\n\t\tconst measureLayout = this.getMeasureLayout();\n\n\t\treturn {\n\t\t\ttitle,\n\t\t\tpageSize,\n\t\t\tunitSize,\n\t\t\tmeasureLayout,\n\t\t\tstaffLayout,\n\t\t\tpaperOptions,\n\t\t\theaders,\n\t\t\tvoiceStaves,\n\t\t\tinstrumentDict,\n\t\t};\n\t}\n\n\tfindPoint(sid: string): PointPosition {\n\t\tfor (const system of this.systems) {\n\t\t\tfor (let si = 0; si < system.staves.length; ++si) {\n\t\t\t\tconst point = system.staves[si].semantics.find((point) => point.id === sid);\n\t\t\t\tif (point) {\n\t\t\t\t\tconst pageIndex = this.pages.findIndex((page) => page.systems.includes(system));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpoint,\n\t\t\t\t\t\tpageIndex,\n\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\tstaffIndex: si,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetMeasureSemantics(systemIndex: number, localIndex: number): SemanticPointInMeasure[] {\n\t\tconst system = this.systems[systemIndex];\n\t\tif (!system) return null;\n\n\t\tconst left = localIndex ? system.measureBars[localIndex - 1] : 0;\n\t\tconst right = system.measureBars[localIndex] || system.width;\n\n\t\treturn system.staves\n\t\t\t.map((staff, si) => {\n\t\t\t\tconst staffY = staff.top + staff.staffY;\n\t\t\t\treturn staff.semantics\n\t\t\t\t\t.filter((point) => point.x >= left && point.x < right)\n\t\t\t\t\t.map((point) => {\n\t\t\t\t\t\tconst [y1, y2] = Number.isFinite(point.extension?.y1) ? [point.extension.y1, point.extension.y2] : [point.y, point.y];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\tstaff: si,\n\t\t\t\t\t\t\tsy1: y1 + staffY,\n\t\t\t\t\t\t\tsy2: y2 + staffY,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1);\n\t}\n\n\tmakeTimewiseGraph({ store = false }: { store?: boolean } = {}): TimewiseGraph {\n\t\tif (!this.spartito) return null;\n\n\t\tconst measures = this.spartito.measures\n\t\t\t.filter((measure) => measure.events.length > 0)\n\t\t\t.map((measure) => {\n\t\t\t\tconst points = this.getMeasureSemantics(measure.position.systemIndex, measure.position.localIndex);\n\n\t\t\t\tconst graph = {\n\t\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\t\tleft: measure.position.left,\n\t\t\t\t\tright: measure.position.right,\n\t\t\t\t\tpoints,\n\t\t\t\t};\n\n\t\t\t\tif (store) measure.graph = graph;\n\n\t\t\t\treturn graph;\n\t\t\t});\n\n\t\treturn { measures };\n\t}\n\n\tgetTokenMap(): Map {\n\t\tconst map = new Map();\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => staff.measures.forEach((measure) => measure.tokens.forEach((token) => map.set(token.id, token))))\n\t\t);\n\n\t\treturn map;\n\t}\n\n\tassemble(confidenceThreshold: number = 1, logger: Logger = new DummyLogger()) {\n\t\tconst ids = new Map();\n\n\t\tconst append = (systemIndex, staffIndex, point) => {\n\t\t\tconst id = hashSemanticPoint(systemIndex, staffIndex, point);\n\t\t\tlogger.assert(!ids.has(id), 'semantic point hash conflicted:', id, point, ids.get(id));\n\n\t\t\tids.set(id, point);\n\t\t};\n\n\t\tthis.pages.forEach((page, index) => (page.index = index));\n\n\t\tlet measureIndex = 0;\n\t\tthis.systems.forEach((system, systemIndex) => {\n\t\t\tsystem.index = systemIndex;\n\t\t\tsystem.headMeasureIndex = measureIndex;\n\t\t\tsystem.prev = this.systems[systemIndex - 1] || null;\n\t\t\tsystem.next = this.systems[systemIndex + 1] || null;\n\n\t\t\tif (system.semantics && system.semantics.length) system.semantics.forEach((point) => append(systemIndex, null, point));\n\n\t\t\tsystem.assemble(confidenceThreshold, logger);\n\t\t\tmeasureIndex += system.measureCount;\n\t\t});\n\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tpage.systems.forEach((system) => (system.pageIndex = i));\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations }, logger);\n\t\t});\n\t}\n\n\tassembleSystem(system: System, confidenceThreshold: number = 1) {\n\t\tthis.systems.forEach((system, si) => (system.index = si));\n\t\tconst systemIndex = system.index;\n\n\t\tif (system.semantics && system.semantics.length) {\n\t\t\tsystem.semantics.forEach((point) => hashSemanticPoint(systemIndex, null, point));\n\t\t\tsystem.assemble(confidenceThreshold);\n\t\t}\n\t}\n\n\tmarkVoices(staves: VoicesStaff[]): void {\n\t\tconst tokenMap = this.getTokenMap();\n\t\tfor (const token of tokenMap.values()) token.voice = 0;\n\n\t\tconst vis = []\n\t\t\t.concat(...staves.map((staff, s) => (staff.voices || []).map((_, v) => [s, v])))\n\t\t\t.sort(([s1, v1], [s2, v2]) => v1 - v2 || s1 - s2)\n\t\t\t.map(([s, v]) => `${s}|${v}`);\n\n\t\tstaves.forEach((staff, si) =>\n\t\t\t(staff.voices || []).forEach((voice, vi) =>\n\t\t\t\tvoice.measures.forEach((measure) => {\n\t\t\t\t\tconst voiceIndex = vis.indexOf(`${si}|${vi}`);\n\n\t\t\t\t\tconst events = Object.values(measure.tickMap).filter((event) => event instanceof EventTerm) as EventTerm[];\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst notes = event.noteIds ? event.noteIds.map((id) => tokenMap.get(id)).filter(Boolean) : [];\n\t\t\t\t\t\tconst accessories = event.accessories ? event.accessories.map((acc) => tokenMap.get(acc.id)).filter(Boolean) : [];\n\t\t\t\t\t\t//console.log(\"notes:\", si, vi, mi, event.noteIds, notes, accessories);\n\n\t\t\t\t\t\t[...notes, ...accessories].forEach((token) => (token.voice |= 1 << voiceIndex));\n\n\t\t\t\t\t\tif (event.timeWarp) notes.forEach((note) => (note.timeWarped = true));\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t}\n\n\tasync replaceImageKeys(proc: (x: string | Buffer) => Promise): Promise {\n\t\tawait Promise.all([\n\t\t\t...(this.pages.map(async (page) => {\n\t\t\t\tif (page.source) page.source.url = await proc(page.source.url);\n\t\t\t}) as Promise[]),\n\t\t\t...this.systems.map((system) =>\n\t\t\t\tPromise.all([\n\t\t\t\t\tproc(system.backgroundImage).then((key) => (system.backgroundImage = key)),\n\t\t\t\t\t...(system.staves.map(async (staff) => {\n\t\t\t\t\t\tstaff.backgroundImage = await proc(staff.backgroundImage);\n\t\t\t\t\t\tstaff.maskImage = await proc(staff.maskImage);\n\t\t\t\t\t}) as Promise[]),\n\t\t\t\t])\n\t\t\t),\n\t\t]);\n\t}\n\n\tinferenceStaffLayout(): void {\n\t\t// inference the complete layout\n\t\tconst staffTotal = Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t\tthis.staffLayoutCode = Array(staffTotal).fill('').join(',');\n\n\t\tconst completeSystems = this.systems.filter((system) => system.staves.length === staffTotal && system.bracketsAppearance);\n\t\tif (!completeSystems.length) return; // no enough evidence\n\n\t\tconst candidateCodes = completeSystems\n\t\t\t.map((system) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst layout = staffLayout.parseCode(system.bracketsAppearance);\n\t\t\t\t\tif (layout.staffIds.length !== system.staves.length) return null;\n\n\t\t\t\t\treturn system.bracketsAppearance;\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t\tif (!candidateCodes.length) return; // no valid layout\n\n\t\tconst codeCounting = candidateCodes.reduce((acc, code) => {\n\t\t\tconst count = acc[code] || 0;\n\t\t\tacc[code] = count + 1;\n\t\t\treturn acc;\n\t\t}, {} as { [code: string]: number });\n\t\tconst maxCount = Math.max(...Object.values(codeCounting));\n\t\tconst code = Object.entries(codeCounting).find(([_, count]) => count === maxCount)[0];\n\n\t\t// added connection lines between braces {-}\n\t\tconst connectedCode = code.replace(/\\{,*\\}/g, (match) => match.replace(/,/g, '-'));\n\t\tconst layout = staffLayout.parseCode(connectedCode);\n\n\t\tthis.staffLayoutCode = connectedCode;\n\t\t//console.log(\"complete code:\", code);\n\n\t\t// inference systems' mask\n\t\tlet lastSys: System = null;\n\t\tfor (const system of this.systems) {\n\t\t\tif (lastSys && system.staves.length === lastSys.staves.length && system.bracketsAppearance === lastSys.bracketsAppearance) {\n\t\t\t\tsystem.staffMaskChanged = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (system.staves.length < staffTotal && system.bracketsAppearance) {\n\t\t\t\t// validate the system brackets code\n\t\t\t\ttry {\n\t\t\t\t\tif (!staffLayout.parseCode(system.bracketsAppearance)) continue;\n\t\t\t\t} catch (_) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst search = (bits: (0 | 1)[]): number => {\n\t\t\t\t\tif (bits.length > layout.staffIds.length) return null;\n\n\t\t\t\t\tif (bits.reduce((sum, bit) => sum + bit, 0) === system.staves.length) return bitsToMask(bits);\n\n\t\t\t\t\tfor (const bit of [1, 0]) {\n\t\t\t\t\t\tconst bb = [...bits, bit] as (0 | 1)[];\n\t\t\t\t\t\tconst code1 = layout.partialMaskCode(bb);\n\t\t\t\t\t\tif (code1 === system.bracketsAppearance) return bitsToMask(bb);\n\t\t\t\t\t\telse if (system.bracketsAppearance.startsWith(code1)) {\n\t\t\t\t\t\t\tconst result = search(bb);\n\t\t\t\t\t\t\tif (result) return result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t\tconst mask = search([]);\n\t\t\t\t//console.log(\"mask:\", system.bracketsAppearance, mask.toString(2));\n\n\t\t\t\tsystem.staffMaskChanged = !lastSys || mask !== lastSys.staffMask ? mask : null;\n\t\t\t}\n\n\t\t\tlastSys = system;\n\t\t}\n\t}\n\n\tassignBackgroundForMeasure(measure: SpartitoMeasure): void {\n\t\tmeasure.backgroundImages = [];\n\n\t\tconst system = this.systems[measure.position.systemIndex];\n\t\tif (system.backgroundImage) {\n\t\t\tmeasure.backgroundImages.push({\n\t\t\t\turl: system.backgroundImage,\n\t\t\t\tposition: system.imagePosition,\n\t\t\t\toriginal: true,\n\t\t\t});\n\t\t}\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tif (!system.backgroundImage && staff.backgroundImage)\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.backgroundImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t\toriginal: true,\n\t\t\t\t});\n\n\t\t\tif (staff.maskImage) {\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.maskImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tblackoutFakeNotes(scope: 'patched' | 'perfect' | 'all' = 'patched'): string[] {\n\t\tif (!this.spartito) return;\n\n\t\tlet inScope = (_) => true;\n\t\tswitch (scope) {\n\t\t\tcase 'patched':\n\t\t\t\tinScope = (measure) => measure.patched;\n\t\t\t\tbreak;\n\t\t\tcase 'perfect':\n\t\t\t\tinScope = (measure) => measure.patched || (measure.regulated && evaluateMeasure(measure).perfect);\n\t\t\t\tbreak;\n\t\t}\n\t\tconst measures = this.spartito.measures.filter(inScope);\n\n\t\tconst fakeIds = measures.reduce((ids, measure) => {\n\t\t\tif (!measure.regulated) return;\n\n\t\t\tconst voicedIds = measure.voices.flat(1);\n\t\t\tconst fakeChords = measure.events.filter((event) => !event.rest && !event.grace && !voicedIds.includes(event.id));\n\n\t\t\tfakeChords.forEach((event) => event.noteIds && ids.push(...event.noteIds));\n\n\t\t\treturn ids;\n\t\t}, [] as string[]);\n\t\tconst fakeIdSet = new Set(fakeIds);\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\tconst blackIds = staff.semantics.filter((point) => fakeIdSet.has(point.id)).map((point) => point.id);\n\t\t\t\tsystem.sidBlackList.push(...blackIds);\n\t\t\t})\n\t\t);\n\n\t\treturn fakeIds;\n\t}\n\n\tgetMeasureLayout(): measureLayout.MeasureLayout {\n\t\tconst code = this.spartito && this.spartito.measureLayoutCode;\n\t\tif (code) {\n\t\t\ttry {\n\t\t\t\treturn measureLayout.parseCode(code);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.debug('invalid measure layout code:', err);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t*splitToSingleScoresGen(): Generator {\n\t\tthis.assemble();\n\t\tconst startSysIndices = this.systems.filter((system) => system.index > 0 && system.indent && system.timeSignatureOnHead).map((system) => system.index);\n\n\t\tif (!startSysIndices.length) {\n\t\t\tyield this.deepCopy();\n\t\t\treturn;\n\t\t}\n\n\t\tconst templateScore = new Score({ ...this, pages: [], topology: undefined, spartito: undefined, patches: undefined });\n\n\t\t// clear temporary objects before deep dopy\n\t\tthis.pages.forEach((page) => {\n\t\t\tdelete page.tokens;\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tdelete system.tokens;\n\t\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\t\tstaff.measures = [];\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tlet startSysIndex = 0;\n\t\tfor (const endSysIndex of [...startSysIndices, this.systems.length]) {\n\t\t\tconst sysInRange = (system) => system.index >= startSysIndex && system.index < endSysIndex;\n\t\t\tconst pages = this.pages\n\t\t\t\t.filter((page) => page.systems.some(sysInRange))\n\t\t\t\t.map((page) => {\n\t\t\t\t\tconst { systems, ...fields } = page;\n\t\t\t\t\treturn new Page({ ...fields, systems: systems.filter(sysInRange).map((system) => new System({ ...system })) });\n\t\t\t\t});\n\n\t\t\tconst newScore = templateScore.deepCopy();\n\t\t\tnewScore.headers.SubScoreSystem = `${startSysIndex}-${endSysIndex - 1}`;\n\t\t\tnewScore.headers.SubScorePage = `${pages[0].index}-${pages[pages.length - 1].index}`;\n\n\t\t\t//newScore.pages = pages.map((page) => page.deepCopy());\n\t\t\tnewScore.pages = pages;\n\t\t\tnewScore.assemble();\n\t\t\tnewScore.inferenceStaffLayout();\n\n\t\t\tstartSysIndex = endSysIndex;\n\n\t\t\tyield newScore;\n\t\t}\n\t}\n\n\tsplitToSingleScores(): Score[] {\n\t\treturn [...this.splitToSingleScoresGen()];\n\t}\n}\n\nexport { PaperOptions, Score, Page, System, Staff, Measure, MeasureValidation };\nexport type { SemanticPointInMeasure };\n","import { RegulationSolution, RegulationSolutionEvent, EventPredisposition } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport { argmax, frac } from './utils';\nimport { WHOLE_DURATION, StemBeam } from './term';\nimport { Logger, DummyLogger } from './logger';\n\ninterface BeadPicker {\n\tn_seq: number;\n\tquota: number;\n\tcost: number; // duration in milliseconds\n\n\tpredictCluster(cluster: EventCluster, tip: number): Promise;\n}\n\nenum BeadType {\n\tPass = 'i',\n\tDivision = 'd',\n\tDots = 'o',\n}\n\nconst DIVISION_NAMES = ['whole', 'half', 'quarter', 'eighth', 'sixteenth', 'thirtysecond', 'sixtyfourth', '128th', '256th'];\n\ninterface BeadNodeInitData {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n}\n\nconst RESIDUE_LOSS_WEIGHT = 0.2;\nconst VOICEN_LOSS_WEIGHT = 0.002;\nconst SPACE_LOSS_WEIGHT = 0.4 / WHOLE_DURATION;\nconst PRETENTIOUSNESS_LOSS_WEIGHT = 0.02;\n\nconst POSSIBILITY_LOW_BOUNDARY = 1e-12;\n\nconst PRETENTIOUSNESS_CLIP = 100;\n\ninterface ClusterEvaluation {\n\ttickErr: number;\n\ttwist: number;\n\tresidue: number;\n\tendTick: number;\n\tfatalError: boolean;\n\tvoiceN: number;\n\tspaceDuration: number;\n\tpretentiousness: number;\n\tloss: number;\n}\n\ninterface ElementState {\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tbeam: StemBeam;\n\tstemDirection: string;\n\tgrace: boolean;\n\ttimeWarped: boolean;\n\tfullMeasure: boolean; // full measure rest\n\tfake: boolean;\n\torder: number;\n\tpredisposition: EventPredisposition;\n}\n\ninterface ClusterState {\n\telements: ElementState[];\n}\n\nconst STEM_DIRECTION_OPTIONS = [undefined, 'u', 'd'];\n\nconst BEAM_OPTIONS = [undefined, StemBeam.Open, StemBeam.Continue, StemBeam.Close];\n\nconst saveClusterState = (cluster: EventCluster): ClusterState => ({\n\telements: cluster.elements.map((elem) => ({\n\t\ttick: elem.tick!,\n\t\tdivision: elem.division!,\n\t\tdots: elem.dots!,\n\t\tbeam: elem.beam!,\n\t\tstemDirection: elem.stemDirection!,\n\t\tgrace: elem.grace!,\n\t\ttimeWarped: elem.timeWarped!,\n\t\tfullMeasure: elem.fullMeasure!,\n\t\tfake: elem.fake!,\n\t\torder: elem.order!,\n\t\tpredisposition: elem.predisposition!,\n\t})),\n});\n\nconst restoreClusterState = (cluster: EventCluster, state: ClusterState): void => cluster.elements.forEach((elem, i) => Object.assign(elem, state.elements[i]));\n\nconst measurePretentious = (p) => Math.min(PRETENTIOUSNESS_CLIP, -Math.log(p));\n\ninterface BeadDeductionContext {\n\tpicker: BeadPicker;\n\tlogger: Logger;\n\tptFactor: number; // pretentiousness tolerance factor\n}\n\nclass BeadNode {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n\n\tchildren: Record;\n\taccessCount: number;\n\n\tconstructor(data: BeadNodeInitData) {\n\t\tObject.assign(this, data);\n\n\t\t//this.possibilities = this.possibilities.map((x, i) => (this.type === BeadType.Pass && !i) ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\n\t\tthis.children = {};\n\t\tthis.accessCount = 0;\n\t}\n\n\tnextBranch(): number | null {\n\t\tconst ps = this.possibilities.map((p, i) => p / (this.children[i] ? this.children[i].accessCount + 1 : 1));\n\t\t//const ps = this.possibilities.map((p, i) => p * (this.children[i] ? (2 ** -this.children[i].accessCount) : 1));\n\n\t\tif (ps.every((p) => !p)) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn argmax(ps);\n\t}\n\n\tget currentElem(): EventElement {\n\t\treturn this.cluster.elements[this.elemIndex];\n\t}\n\n\tbranchID(ni: number): string {\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\treturn `i_${ni}`;\n\t\t\tcase BeadType.Division:\n\t\t\t\treturn DIVISION_NAMES[ni];\n\t\t\tcase BeadType.Dots:\n\t\t\t\treturn 'o' + '.'.repeat(ni);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tasync deduce({ picker, logger, ptFactor }: BeadDeductionContext, deep: number = 0): Promise {\n\t\t++this.accessCount;\n\n\t\tconst ni = this.nextBranch()!;\n\t\tlogger.debug(String.fromCodePoint(0x1f349) + ' '.repeat(deep), this.branchID(ni), this.accessCount > 1 ? `[${this.accessCount}]` : '');\n\n\t\tif (!Number.isInteger(ni) || ni < 0) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tthis.pretentiousness += measurePretentious(this.possibilities[ni]);\n\t\tif (this.pretentiousness > PRETENTIOUSNESS_CLIP * ptFactor) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tlet selfEval: null | ClusterEvaluation = null;\n\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\t{\n\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\tconst element = this.cluster.elements[ni];\n\t\t\t\t\tconsole.assert(element, 'null element:', ni, this.cluster.elements.length);\n\t\t\t\t\tif (element.type === EventElementType.EOS) {\n\t\t\t\t\t\tselfEval = evaluateCluster(this.cluster, tip, this.pretentiousness);\n\t\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.cluster.elements[0].order = tip;\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip + 1)).map((x, i) =>\n\t\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 || i === this.cluster.elements.length - 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: 0,\n\t\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.order = tip;\n\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tconsole.assert(element.predisposition, 'no predisposition:', ni, this.possibilities);\n\t\t\t\t\t\t\tconst possibilities = element.predisposition!.divisionVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: ni,\n\t\t\t\t\t\t\t\ttype: BeadType.Division,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Division:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.division = ni;\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tconst possibilities = this.currentElem.predisposition!.dotsVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Dots,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Dots:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.dots = ni;\n\n\t\t\t\t\tselfEval = evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip)).map((x, i) =>\n\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst evaluation = await this.children[ni].deduce({ picker, logger, ptFactor }, deep + 1);\n\t\tif (selfEval && evaluation.fatalError) {\n\t\t\tconst tip = this.currentElem.order!;\n\t\t\tthis.cluster.elements.forEach((elem) => {\n\t\t\t\tif (elem.order! > tip) elem.order = undefined;\n\t\t\t});\n\n\t\t\t// clear children data\n\t\t\tthis.cluster.elements.forEach((elem) => (elem.order = elem.order! > this.currentElem.order! ? undefined : elem.order));\n\t\t\tthis.cluster.elements[this.cluster.elements.length - 1].tick = selfEval.endTick;\n\n\t\t\treturn selfEval;\n\t\t}\n\n\t\treturn evaluation;\n\t}\n}\n\nconst estimateElementDuration = (elem: EventElement) => WHOLE_DURATION * 2 ** -elem.division! * (2 - 2 ** -elem.dots!);\n\nconst evaluateCluster = (cluster: EventCluster, tip: number, pretentiousness: number): ClusterEvaluation => {\n\tconst events = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order) && elem.order! < tip\n\t);\n\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\tconst eos = cluster.elements[cluster.elements.length - 1];\n\n\tlet tick = 0;\n\tlet lastOrder = 0;\n\tlet endTick = 0;\n\tlet voiceN = 1;\n\n\t// [x, tick, estimated tick]\n\tconst scales: [number, number, number][] = [[eos.x, cluster.signatureDuration, cluster.signatureDuration]];\n\n\tlet totalDuration = 0;\n\n\t// assign tick for events\n\tevents.forEach((event) => {\n\t\tif (event.order! > lastOrder + 1) {\n\t\t\ttick = 0;\n\t\t\t++voiceN;\n\t\t}\n\n\t\tconst referenceScale = scales.find((s) => s[1] >= tick);\n\t\tif (referenceScale && event.x > referenceScale[0] + 3) {\n\t\t\tconst nearScale = scales.reduce((n, s) => (Math.abs(event.predisposition!.tick - s[2]) < Math.abs(event.predisposition!.tick - n[2]) ? s : n));\n\t\t\tif (Math.abs(nearScale[0] - event.x) < 2) tick = Math.max(tick, nearScale[1]);\n\t\t}\n\n\t\tevent.tick = tick;\n\n\t\tconst si = Math.max(\n\t\t\t0,\n\t\t\tscales.findIndex((s) => s[0] > event.x)\n\t\t);\n\t\tscales.splice(si, 0, [event.x, event.tick, event.predisposition!.tick]);\n\n\t\t//let duration = WHOLE_DURATION * (2 ** -event.division!) * (2 - 2 ** -event.dots!);\n\t\tlet duration = estimateElementDuration(event);\n\t\tif (event.predisposition!.timeWarped > 0.5) duration = (duration * 2) / 3;\n\n\t\ttick += duration;\n\t\ttotalDuration += duration;\n\t\tendTick = Math.max(endTick, tick);\n\t\tlastOrder = event.order!;\n\t});\n\n\t/*const pretentiousness = events.reduce((p, event) => p +\n\t\tmeasurePretentious(event.predisposition!.divisionVector![event.division!]) +\n\t\tmeasurePretentious(event.predisposition!.dotsVector![event.dots!]), 0);*/\n\n\tif (endTick > 0) cluster.elements[cluster.elements.length - 1].tick = endTick;\n\n\tconst xSpan = cluster.elements[cluster.elements.length - 1].pivotX! - cluster.elements[1].pivotX!;\n\tconst tickSpan = Math.max(...events.map((e) => e.tick!), endTick);\n\n\t// tick twist loss\n\tconst eventsXOrder = [...events].sort((e1, e2) => e1.pivotX! - e2.pivotX!);\n\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\tconst e1 = eventsXOrder[i];\n\t\tconst dx = e2.pivotX! - e1.pivotX!;\n\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\tif (!dt) return dx / xSpan;\n\n\t\tconst rate = Math.atan2(dt / tickSpan, dx / xSpan);\n\n\t\t//if (dt < 0)\n\t\t//\tconsole.log(\"minus dt:\", dt, dx, rate);\n\n\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t});\n\t//console.debug(\"tickTwists:\", tickTwists, eventsXOrder);\n\n\tconst twist = Math.max(...tickTwists, 0);\n\n\tconst tickMSE = events.map((event) => (event.tick! - event.predisposition!.tick) ** 2);\n\t//console.debug(\"tickMSE:\", tickMSE.map(Math.sqrt));\n\tconst tickErr = tickMSE.length ? Math.sqrt(tickMSE.reduce((sum, mse) => sum + mse, 0) / tickMSE.length) : 0;\n\t//console.debug(\"tick/twist:\", tickErr / WHOLE_DURATION, twist);\n\n\tconst residueElements = cluster.elements.filter(\n\t\t(elem) =>\n\t\t\t[EventElementType.CHORD, EventElementType.REST].includes(elem.type) &&\n\t\t\t!(Number.isInteger(elem.order) && elem.order! < tip) &&\n\t\t\t!(elem.predisposition && elem.predisposition.fakeP > 0.5)\n\t);\n\tconst residue = residueElements.length;\n\n\tconst fatalError = twist >= 1 || endTick > cluster.signatureDuration;\n\n\t//const spaceDuration = Math.max(0, cluster.signatureDuration - endTick);\n\tconst spaceDuration = Math.max(0, cluster.signatureDuration - totalDuration / voiceN);\n\n\tconst loss =\n\t\ttickErr / WHOLE_DURATION +\n\t\ttwist +\n\t\tresidue * RESIDUE_LOSS_WEIGHT +\n\t\tvoiceN * VOICEN_LOSS_WEIGHT +\n\t\tspaceDuration * SPACE_LOSS_WEIGHT +\n\t\tpretentiousness * PRETENTIOUSNESS_LOSS_WEIGHT;\n\n\treturn {\n\t\ttickErr,\n\t\ttwist,\n\t\tresidue,\n\t\tendTick,\n\t\tfatalError,\n\t\tvoiceN,\n\t\tspaceDuration,\n\t\tpretentiousness,\n\t\tloss,\n\t};\n};\n\nconst solveCluster = async (\n\tcluster: EventCluster,\n\tpicker: BeadPicker,\n\tlogger: Logger,\n\tquota: number = 200,\n\tstopLoss: number = 0,\n\tptFactor: number = 1\n): Promise => {\n\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\tconst suc0 = await picker.predictCluster(cluster, 1);\n\n\tconst root = new BeadNode({ cluster, elemIndex: 0, pretentiousness: 0, type: BeadType.Pass, possibilities: suc0 });\n\n\tlet bestEvaluation: ClusterEvaluation | null = null;\n\tlet bestState: ClusterState | null = null;\n\n\tpicker.quota = quota;\n\twhile (picker.quota) {\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\n\t\tconst evaluation = await root.deduce({ picker, logger, ptFactor });\n\n\t\tlogger.debug('loss:', evaluation);\n\n\t\tif (!bestEvaluation || evaluation.loss < bestEvaluation.loss) {\n\t\t\tbestEvaluation = evaluation;\n\n\t\t\tcluster.duration = bestEvaluation.endTick;\n\t\t\tbestState = saveClusterState(cluster);\n\n\t\t\tif (Number.isFinite(stopLoss) && bestEvaluation.loss <= stopLoss!) break;\n\t\t}\n\n\t\tif (!Number.isFinite(root.accessCount)) break;\n\t}\n\tlogger.debug('bestEvaluation:', bestEvaluation);\n\n\trestoreClusterState(cluster, bestState!);\n\n\t// solve residue elements\n\tconst fixedEvents = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\tconst pendingEvents = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !Number.isInteger(elem.order)\n\t);\n\tif (fixedEvents.length) {\n\t\tpendingEvents.forEach((event) => {\n\t\t\t// exclude fake events (includes grace, fullMeasure) from voices\n\t\t\tevent.tick = undefined;\n\n\t\t\tif (event.predisposition!.fakeP < 0.5) {\n\t\t\t\t//const near = fixedEvents.reduce((n, e) => Math.abs(e.predisposition!.tick - event.predisposition!.tick) < Math.abs(n.predisposition!.tick - event.predisposition!.tick) ? e : n);\n\t\t\t\tconst duration = estimateElementDuration(event);\n\t\t\t\tconst candidates = fixedEvents.filter((e) => e.tick! + duration <= bestEvaluation!.endTick);\n\t\t\t\tif (candidates.length) {\n\t\t\t\t\tconst near = candidates.reduce((n, e) => (Math.abs(e.x - event.x) < Math.abs(n.x - event.x) ? e : n));\n\t\t\t\t\tevent.tick = near.tick;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfixedEvents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t// properties\n\t[...fixedEvents, ...pendingEvents].forEach((event) => {\n\t\tevent.grace = !Number.isFinite(event.tick) && event.predisposition!.grace;\n\t\tevent.timeWarped = event.predisposition!.timeWarped > 0.5;\n\t\tevent.fullMeasure = event.predisposition!.fullMeasure > 0.5;\n\t\tevent.stemDirection = STEM_DIRECTION_OPTIONS[argmax(event.predisposition!.stemDirectionVector)];\n\t\tevent.beam = BEAM_OPTIONS[argmax(event.predisposition!.beamVector)];\n\t});\n\n\t// construct matrixH\n\tconst ids = cluster.elements.map((e) => e.index);\n\tconst idx = (id: number): number => ids.indexOf(id);\n\tcluster.matrixH = cluster.elements.map(() => Array(cluster.elements.length).fill(0));\n\tfixedEvents.forEach((event, i) => {\n\t\tconst lastEvent = fixedEvents[i - 1];\n\t\tif (!lastEvent || lastEvent.order! < event.order! - 1) {\n\t\t\tcluster.matrixH![idx(event.index!)][0] = 1;\n\t\t\tif (lastEvent) cluster.matrixH![cluster.elements.length - 1][idx(lastEvent.index!)] = 1;\n\t\t} else {\n\t\t\tconsole.assert(\n\t\t\t\tcluster.matrixH![idx(event.index!)] && Number.isFinite(cluster.matrixH![idx(event.index!)][idx(lastEvent.index!)]),\n\t\t\t\t'matrixH out of range:',\n\t\t\t\tevent.index,\n\t\t\t\tlastEvent.index,\n\t\t\t\tcluster.matrixH!.length\n\t\t\t);\n\n\t\t\tcluster.matrixH![idx(event.index!)][idx(lastEvent.index!)] = 1;\n\t\t}\n\t});\n\tif (!pendingEvents.length && fixedEvents.length) cluster.matrixH![cluster.elements.length - 1][idx(fixedEvents[fixedEvents.length - 1].index!)] = 1;\n\n\treturn bestEvaluation!;\n};\n\ninterface BeadSolverOptions {\n\tpicker: BeadPicker;\n\tstopLoss?: number;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tptFactor?: number;\n\tlogger?: Logger;\n}\n\nconst solveMeasure = async (measure: SpartitoMeasure, options: BeadSolverOptions): Promise => {\n\tconst { stopLoss = 0.09, quotaMax = 1000, quotaFactor = 5, ptFactor = 1, logger = new DummyLogger() } = options;\n\n\tlet worstLoss = 0;\n\n\tconst clusters = measure.createClusters();\n\tfor (const cluster of clusters) {\n\t\tconst quota = Math.min(quotaMax, Math.ceil(cluster.elements.length * quotaFactor));\n\t\tlogger.info(`[measure-${measure.measureIndex}]`, quota);\n\t\tconst { loss } = await solveCluster(cluster, options.picker, logger, quota, stopLoss, ptFactor);\n\t\tworstLoss = Math.max(worstLoss, loss);\n\t}\n\n\tconst voices = [] as number[][];\n\n\tconst durations = [] as number[];\n\n\tconst solutionEvents = [] as RegulationSolutionEvent[];\n\n\tclusters.forEach((cluster) => {\n\t\tconst events = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\t\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t\tif (!events.length) return;\n\n\t\tlet voice = [] as number[];\n\t\tvoices.push(voice);\n\t\tlet lastOrder = 0;\n\t\tevents.forEach((event) => {\n\t\t\tif (event.fullMeasure || event.grace || event.tremoloCatcher) return;\n\n\t\t\tif (event.order! > lastOrder + 1) {\n\t\t\t\tvoice = [event.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t} else voice.push(event.index!);\n\n\t\t\tlastOrder = event.order!;\n\t\t});\n\n\t\tlet tipElem = events[events.length - 1];\n\n\t\t// complete voices from pending events\n\t\tconst pendingEvents = cluster.elements.filter(\n\t\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isFinite(elem.tick) && !Number.isInteger(elem.order)\n\t\t);\n\t\twhile (pendingEvents.length) {\n\t\t\tconst ei = pendingEvents.findIndex((e) => e.tick! >= tipElem.tick! + estimateElementDuration(tipElem));\n\t\t\tif (ei >= 0) voice.push(pendingEvents.splice(ei, 1)[0].index!);\n\t\t\telse {\n\t\t\t\ttipElem = pendingEvents.splice(0, 1)[0];\n\t\t\t\tvoice = [tipElem.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\t\t}\n\n\t\tif (events.some((elem) => !elem.fullMeasure && Number.isInteger(elem.order))) {\n\t\t\tconst eos = cluster.elements.find((elem) => elem.type === EventElementType.EOS);\n\t\t\tdurations.push(eos!.tick!);\n\t\t}\n\n\t\tconst eventMap = measure.eventMap;\n\n\t\tconst tickSet = cluster.elements.reduce((set, elem) => {\n\t\t\tif (Number.isFinite(elem.tick)) set.add(elem.tick!);\n\t\t\treturn set;\n\t\t}, new Set());\n\t\tconst ticks = Array.from(tickSet).sort((t1, t2) => t1 - t2);\n\n\t\t// fill solutionEvents\n\t\tevents.forEach((elem) => {\n\t\t\tconst event = eventMap[elem.index!];\n\t\t\tif (event) {\n\t\t\t\tsolutionEvents.push({\n\t\t\t\t\tid: event.id!,\n\t\t\t\t\ttick: elem.tick!,\n\t\t\t\t\ttickGroup: ticks.indexOf(elem.tick!),\n\t\t\t\t\tdivision: elem.division !== event.division ? elem.division : undefined,\n\t\t\t\t\tdots: elem.dots !== event.dots ? elem.dots : undefined,\n\t\t\t\t\ttimeWarp: elem.timeWarped ? frac(2, 3) : undefined, // TODO:\n\t\t\t\t\tbeam: elem.beam !== event.beam ? elem.beam : undefined,\n\t\t\t\t\tgrace: elem.grace !== !!event.grace ? elem.grace : undefined,\n\t\t\t\t\tfullMeasure: elem.fullMeasure || undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\tconst estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n\n\treturn {\n\t\tvoices: voices.filter((voice) => voice.length),\n\t\tduration: Math.max(...durations),\n\t\tevents: solutionEvents,\n\t\tpriority: -worstLoss,\n\t\testimatedDuration,\n\t};\n};\n\ninterface GlimpseMeasureOptions {\n\tpicker: BeadPicker;\n\tresetSignatureForDoubtfulOnly?: boolean;\n}\n\nconst glimpseMeasure = async (measure: SpartitoMeasure, { picker, resetSignatureForDoubtfulOnly }: GlimpseMeasureOptions): Promise => {\n\tconst clusters = measure.createClusters();\n\tconst eventMap = measure.eventMap;\n\n\tfor (const cluster of clusters) {\n\t\tif (!resetSignatureForDoubtfulOnly || measure.doubtfulTimesig) cluster.signatureDuration = 0; // re-estimate measure duration\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\t\tawait picker.predictCluster(cluster, 1);\n\n\t\tcluster.elements\n\t\t\t.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type))\n\t\t\t.forEach((elem) => {\n\t\t\t\tconst event = eventMap[elem.index!];\n\t\t\t\tevent.predisposition = elem.predisposition!;\n\t\t\t});\n\t}\n\n\tmeasure.estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n};\n\nconst estimateMeasure = async (measure: SpartitoMeasure, picker: BeadPicker): Promise =>\n\tglimpseMeasure(measure, { picker, resetSignatureForDoubtfulOnly: true });\n\nexport { BeadPicker, solveCluster, solveMeasure, estimateMeasure, glimpseMeasure };\n","import { EventTerm } from './term';\nimport type { SpartitoMeasure } from './spartitoMeasure';\n\ninterface EventRectification {\n\tid: number;\n\tdivision?: number;\n\tdots?: number;\n}\n\n// Here suppose sum of pvals equal to 1.\nconst multinomial_1 = (pvals: number[]): number => {\n\tconst n = Math.random();\n\n\tlet s = 0;\n\tfor (let i = 0; i < pvals.length; ++i) {\n\t\ts += pvals[i];\n\t\tif (s > n) return i;\n\t}\n\n\treturn pvals.length - 1;\n};\n\nconst looseVector = (ns: number[], factor = 0.9): number[] => {\n\tconst logits = ns.map((n) => Math.log(n) * factor);\n\tconst n2 = logits.map(Math.exp);\n\n\tconst sum = n2.reduce((sum, x) => sum + x, 0);\n\n\treturn n2.map((x) => x / sum);\n};\n\nconst looseEvent = (event: EventTerm): EventTerm => {\n\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return event;\n\n\tconst divisionVector = event.predisposition?.divisionVector ? looseVector(event.predisposition.divisionVector) : null;\n\tconst dotsVector = event.predisposition?.dotsVector ? looseVector(event.predisposition.dotsVector) : null;\n\n\treturn new EventTerm({\n\t\t...event,\n\t\tpredisposition: {\n\t\t\t...event.predisposition,\n\t\t\tdivisionVector,\n\t\t\tdotsVector,\n\t\t},\n\t});\n};\n\nclass MeasureRectification {\n\tevents: EventRectification[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\ttoString(): string {\n\t\treturn this.events\n\t\t\t.map((event) => {\n\t\t\t\tif (!event) return '';\n\n\t\t\t\tconst { division = '', dots = '' } = event;\n\t\t\t\treturn `${division}|${dots}`;\n\t\t\t})\n\t\t\t.join(',');\n\t}\n\n\tstatic default(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tconst division = event.predisposition.divisionVector ? event.division : undefined;\n\t\t\t\tconst dots = event.predisposition.dotsVector ? event.dots : undefined;\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n\n\tstatic roll(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tlet division = undefined;\n\t\t\t\tlet dots = undefined;\n\n\t\t\t\tif (event.predisposition.divisionVector) division = multinomial_1(event.predisposition.divisionVector);\n\n\t\t\t\tif (event.predisposition.dotsVector) dots = multinomial_1(event.predisposition.dotsVector);\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n}\n\nconst genMeasureRectifications = function* (measure: SpartitoMeasure): Generator {\n\tconst keys = new Set();\n\n\tconst origin = MeasureRectification.default(measure.events);\n\tkeys.add(origin.toString());\n\n\tyield origin;\n\n\tlet stale = 0;\n\tlet events = measure.events;\n\n\twhile (stale < 100) {\n\t\tif (stale && stale % 10 === 0) events = events.map(looseEvent);\n\n\t\tconst rectification = MeasureRectification.roll(events);\n\t\tconst key = rectification.toString();\n\n\t\tif (keys.has(key)) {\n\t\t\t++stale;\n\t\t\tcontinue;\n\t\t}\n\n\t\tstale = 0;\n\n\t\tkeys.add(key);\n\t\tyield rectification;\n\t}\n};\n\nexport { MeasureRectification, genMeasureRectifications };\n","import { WeakLRUCache } from 'weak-lru-cache';\n\nimport { RegulationSolution, SpartitoMeasure } from '../../src/starry';\n\nconst lruCache = new WeakLRUCache();\n\ninterface SolutionStore {\n\tget: (key: string) => Promise;\n\tset: (key: string, val: RegulationSolution) => Promise;\n\tbatchGet: (keys: string[]) => Promise;\n}\n\n// 默认store\nconst DefaultSolutionStore: SolutionStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as RegulationSolution;\n\t},\n\tasync set(key: string, val: RegulationSolution) {\n\t\tlruCache.setValue(key, val);\n\t},\n\tasync batchGet(keys: string[]) {\n\t\treturn keys.map((key) => lruCache.getValue(key) as RegulationSolution);\n\t},\n};\n\nconst enum MeasureStatus {\n\tDiscard = -1,\n\tSolved = 0,\n\tIssue = 1,\n\tFatal = 2,\n}\n\ninterface IssueMeasure {\n\tscoreId: string;\n\tmeasureIndex: number;\n\tmeasure: SpartitoMeasure;\n\tstatus: MeasureStatus;\n}\n\ntype SaveIssueMeasure = (data: Omit) => void;\n\nexport { SolutionStore, DefaultSolutionStore, MeasureStatus, IssueMeasure, SaveIssueMeasure };\n","import * as starry from '../../src/starry';\nimport { Logger } from './ZeroClient';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure, MeasureStatus } from './store';\n\ninterface BeadRegulationCounting {\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface RegulationBeadStat {\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tmeasures: BeadRegulationCounting;\n\tqualityScore: number;\n}\n\ninterface RegulationBeadSummary {\n\tscoreN: number;\n\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tcostPerMeasure: number | null; // in milliseconds\n\tcostPerTime: number | null; // in milliseconds\n\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface ProgressInfo {\n\tpass: number;\n\tremaining: number;\n\ttotal: number;\n}\n\ninterface RegulateBeadOption {\n\tlogger?: Logger;\n\tpickers: starry.BeadPicker[];\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tfreshOnly?: boolean;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n\tonProgress?: (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => void;\n\tonPassStart?: (pass: number, conditionName: string, pendingCount: number) => void;\n}\n\ninterface MeasureReord {\n\torigin: starry.SpartitoMeasure;\n\tcurrent: starry.SpartitoMeasure;\n\tevaluation?: starry.MeasureEvaluation;\n\tbaseQuality: number;\n\tpicker: starry.BeadPicker;\n}\n\ninterface BeadSolverOptions {\n\tstopLoss: number;\n\tquotaMax: number;\n\tquotaFactor: number;\n\tptFactor: number;\n}\n\nenum PendingCondition {\n\tErrorOnly,\n\tNotFine,\n\tImperfect,\n}\n\nconst isPending = (evaluation: starry.MeasureEvaluation, condition: PendingCondition) => {\n\tswitch (condition) {\n\t\tcase PendingCondition.ErrorOnly:\n\t\t\treturn evaluation.error;\n\n\t\tcase PendingCondition.Imperfect:\n\t\t\treturn !evaluation.perfect;\n\t}\n\n\treturn !evaluation.fine;\n};\n\ntype OnUpdate = (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean) => void;\n\nconst solveMeasureRecords = async (\n\trecords: MeasureReord[],\n\tonUpdate: OnUpdate,\n\tstdout: NodeJS.WritableStream | null,\n\toptions: Partial,\n\tpendingCondition: PendingCondition = PendingCondition.NotFine,\n\tpass: number = 0,\n\tonProgress?: RegulateBeadOption['onProgress']\n): Promise => {\n\tconst pendingRecords = records.filter(({ evaluation }) => !evaluation || isPending(evaluation, pendingCondition));\n\tstdout?.write('.'.repeat(pendingRecords.length));\n\tstdout?.write('\\b'.repeat(pendingRecords.length));\n\n\tconst total = pendingRecords.length;\n\tlet done = 0;\n\n\tfor (const record of pendingRecords) {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tconst solution = await starry.beadSolver.solveMeasure(measure, { picker: record.picker, ...options });\n\t\tmeasure.applySolution(solution);\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better =\n\t\t\t!record.evaluation ||\n\t\t\tevaluation.fine > record.evaluation.fine ||\n\t\t\t(evaluation.qualityScore > record.evaluation.qualityScore && evaluation.fine === record.evaluation.fine);\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\t\t}\n\n\t\tonUpdate(record.current, evaluation, better);\n\n\t\tdone++;\n\t\tonProgress?.(record.current, evaluation, better, { pass, remaining: total - done, total });\n\t}\n\n\tif (pendingRecords.length) stdout?.write('\\n');\n\n\treturn pendingRecords.length;\n};\n\nconst regulateWithBeadSolver = async (\n\tscore: starry.Score,\n\t{ logger, pickers, solutionStore = DefaultSolutionStore, ignoreCache, freshOnly, onSaveIssueMeasure, onProgress, onPassStart }: RegulateBeadOption\n): Promise => {\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\tlogger?.info(`[regulateWithBeadSolver] begin, measure total: ${spartito.measures.length}.`, ignoreCache ? 'ignoreCache' : '', freshOnly ? 'freshOnly' : '');\n\n\tconst records = spartito.measures\n\t\t.filter((measure) => measure.events?.length && !measure.patched)\n\t\t.map(\n\t\t\t(measure) =>\n\t\t\t\t({\n\t\t\t\t\torigin: measure.deepCopy(),\n\t\t\t\t\tcurrent: measure,\n\t\t\t\t\tevaluation: undefined,\n\t\t\t\t\tbaseQuality: 0,\n\t\t\t\t} as MeasureReord)\n\t\t);\n\n\t// rectify time signature\n\tfor (const measure of spartito.measures.filter((measure) => measure.events?.length)) {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > measure.events.length + 1);\n\t\tif (picker) await starry.beadSolver.estimateMeasure(measure, picker);\n\t}\n\tspartito.rectifyTimeSignatures(logger as any);\n\n\t// zero pickers' cost\n\tpickers.forEach((picker) => (picker.cost = 0));\n\n\tconst counting = {\n\t\tcached: 0,\n\t\tsimple: 0,\n\t\tcomputed: 0,\n\t\ttryTimes: 0,\n\t\tsolved: 0,\n\t\tissue: 0,\n\t\tfatal: 0,\n\t};\n\n\tlogger?.info(`[regulateWithBeadSolver] measures estimation finished.`);\n\n\t// apply solutions\n\tif (solutionStore && !ignoreCache)\n\t\tfor (const record of records) {\n\t\t\tconst solution = await solutionStore.get(record.origin.regulationHash0);\n\t\t\tif (solution) {\n\t\t\t\trecord.current.applySolution(solution);\n\t\t\t\t++counting.cached;\n\n\t\t\t\trecord.evaluation = starry.evaluateMeasure(record.current);\n\t\t\t\trecord.baseQuality = record.evaluation.qualityScore;\n\t\t\t}\n\t\t}\n\n\tlogger?.info('[regulateWithBeadSolver]', `${counting.cached}/${records.length}`, 'solutions loaded.');\n\n\tconst stdout = logger ? null : process.stdout;\n\tif (counting.cached) stdout?.write(`${counting.cached}c`);\n\n\trecords.forEach((record) => {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > record.current.events.length + 1);\n\t\tif (!picker) {\n\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] size out of range:`, record.current.events.length);\n\t\t} else record.picker = picker;\n\t});\n\n\tconst pendingRecords = records.filter((record) => record.picker && (!record.evaluation || (!record.evaluation.fine && !freshOnly))) as (MeasureReord & {\n\t\tevaluation: starry.MeasureEvaluation;\n\t})[];\n\n\t// solve by simple policy\n\tpendingRecords.forEach((record) => {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tmeasure.regulate({ policy: 'simple' });\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better = !record.evaluation || evaluation.qualityScore > record.evaluation.qualityScore;\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\n\t\t\tif (evaluation.perfect) {\n\t\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] regulated by simple policy.`);\n\t\t\t\t++counting.simple;\n\t\t\t}\n\t\t}\n\t});\n\tcounting.computed = pendingRecords.length - counting.simple;\n\n\tif (counting.simple) stdout?.write(`${counting.simple}s`);\n\n\tconst onUpdate = (measure, evaluation, better) => {\n\t\tlogger?.info(\n\t\t\t`[regulateWithBeadSolver] measure[${measure.measureIndex}/${spartito.measures.length}] regulated${\n\t\t\t\tbetter ? '+' : '-'\n\t\t\t}: ${evaluation.qualityScore.toFixed(3)}, ${evaluation.fine ? 'solved' : evaluation.error ? 'error' : 'issue'}, ${measure.regulationHash}`\n\t\t);\n\n\t\tstdout?.write(`\\x1b[${evaluation.fine ? '32' : evaluation.error ? '31' : '33'}m${better ? '+' : '-'}\\x1b[0m`);\n\t};\n\n\t// Global progress: total = all measures, remaining = non-fine measures across all passes\n\tconst totalMeasures = spartito.measures.length;\n\tconst computeRemaining = () => pendingRecords.filter((r) => !r.evaluation?.fine).length;\n\tconst wrappedOnProgress = onProgress\n\t\t? (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => {\n\t\t\t\tonProgress(measure, evaluation, better, { pass: progress.pass, remaining: computeRemaining(), total: totalMeasures });\n\t\t }\n\t\t: undefined;\n\n\tonPassStart?.(1, 'Imperfect', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.05, quotaMax: 200, quotaFactor: 3, ptFactor: 1 },\n\t\tPendingCondition.Imperfect,\n\t\t1,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(2, 'NotFine', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 20, ptFactor: 1.6 },\n\t\tPendingCondition.NotFine,\n\t\t2,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(3, 'ErrorOnly', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 40, ptFactor: 3 },\n\t\tPendingCondition.ErrorOnly,\n\t\t3,\n\t\twrappedOnProgress\n\t);\n\n\tpendingRecords.forEach(({ evaluation, baseQuality, current, origin }) => {\n\t\tif (evaluation.fine) ++counting.solved;\n\t\telse if (evaluation.error) ++counting.fatal;\n\t\telse ++counting.issue;\n\n\t\tif (evaluation.qualityScore > baseQuality || !baseQuality) {\n\t\t\tsolutionStore.set(origin.regulationHash0, { ...current.asSolution(origin), priority: -current?.solutionStat?.loss! });\n\t\t\tif (current.regulationHash !== origin.regulationHash0)\n\t\t\t\tsolutionStore.set(current.regulationHash, { ...current.asSolution(), priority: -current?.solutionStat?.loss! });\n\t\t\t//console.log('better:', current.measureIndex, evaluation.qualityScore, baseQuality);\n\t\t}\n\n\t\tif (!evaluation.fine) {\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: current.measureIndex,\n\t\t\t\tmeasure: new starry.EditableMeasure(current),\n\t\t\t\tstatus: evaluation.error ? MeasureStatus.Fatal : MeasureStatus.Issue,\n\t\t\t});\n\t\t}\n\t});\n\n\tconst t1 = Date.now();\n\tconst pickerCost = pickers.reduce((cost, picker) => cost + picker.cost, 0);\n\n\tconst qualityScore = spartito.qualityScore;\n\tconst totalCost = t1 - t0;\n\n\tlogger?.info('[regulateWithBeadSolver] done in ', totalCost, 'ms, qualityScore:', qualityScore);\n\n\t// zero 'cached' statistics for freshOnly mode\n\tif (freshOnly) counting.cached = 0;\n\n\treturn {\n\t\ttotalCost: t1 - t0,\n\t\tpickerCost,\n\t\tmeasures: counting,\n\t\tqualityScore,\n\t};\n};\n\nconst abstractRegulationBeadStats = (stats: RegulationBeadStat[]): RegulationBeadSummary => {\n\tconst { totalCost, pickerCost, measureN, timeN } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\ttotalCost: sum.totalCost + stat.totalCost,\n\t\t\tpickerCost: sum.pickerCost + stat.pickerCost,\n\t\t\tmeasureN: sum.measureN + stat.measures.computed,\n\t\t\ttimeN: sum.timeN + stat.measures.tryTimes,\n\t\t}),\n\t\t{\n\t\t\ttotalCost: 0,\n\t\t\tpickerCost: 0,\n\t\t\tmeasureN: 0,\n\t\t\ttimeN: 0,\n\t\t}\n\t);\n\n\tconst costPerMeasure = measureN > 0 ? totalCost / measureN : null;\n\tconst costPerTime = timeN > 0 ? totalCost / timeN : null;\n\n\tconst { cached, simple, computed, tryTimes, solved, issue, fatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.measures.cached,\n\t\t\tsimple: sum.simple + stat.measures.simple,\n\t\t\tcomputed: sum.computed + stat.measures.computed,\n\t\t\ttryTimes: sum.tryTimes + stat.measures.tryTimes,\n\t\t\tsolved: sum.solved + stat.measures.solved,\n\t\t\tissue: sum.issue + stat.measures.issue,\n\t\t\tfatal: sum.fatal + stat.measures.fatal,\n\t\t}),\n\t\t{ cached: 0, simple: 0, computed: 0, tryTimes: 0, solved: 0, issue: 0, fatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\ttotalCost,\n\t\tpickerCost,\n\t\tcostPerMeasure,\n\t\tcostPerTime,\n\t\tcached,\n\t\tsimple,\n\t\tcomputed,\n\t\ttryTimes,\n\t\tsolved,\n\t\tissue,\n\t\tfatal,\n\t};\n};\n\nexport { regulateWithBeadSolver, abstractRegulationBeadStats, RegulationBeadStat, ProgressInfo };\n","import * as starry from '../../src/starry';\nimport { PyClients } from './predictors';\nimport { Logger } from './ZeroClient';\nimport { SpartitoMeasure, EditableMeasure, evaluateMeasure } from '../../src/starry';\nimport { EquationPolicy } from '../../src/starry/spartitoMeasure';\nimport { genMeasureRectifications } from '../../src/starry/measureRectification';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure } from './store';\nexport * from './regulationBead';\n\nglobalThis.btoa = globalThis.btoa || ((str) => Buffer.from(str, 'binary').toString('base64'));\n\nconst RECTIFICATION_SEARCH_ITERATIONS = parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS || '30');\nconst BASE_QUOTA_FACTOR = parseInt(process.env.BASE_QUOTA_FACTOR || '40');\nconst RECTIFICATION_QUOTA_FACTOR = parseInt(process.env.RECTIFICATION_QUOTA_FACTOR || '80');\n\nconst MATRIXH_INTERPOLATION_K = 0.9;\n\ninterface SolveMeasureOptions {\n\tsolver?: (...args: any[]) => any;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tlogger?: Logger;\n}\n\nconst computeQuota = (n: number, factor: number, limit: number) =>\n\tMath.min(Math.ceil((n + 1) * factor * Math.log(n + 2)), Math.ceil(limit * Math.min(1, (24 / (n + 1)) ** 2)));\n\ninterface BaseRegulationStat {\n\tcached: number;\n\tcomputed: number;\n\tsolved: number;\n}\n\nasync function solveMeasures(\n\tmeasures: SpartitoMeasure[],\n\t{ solver, quotaMax = 1000, quotaFactor = BASE_QUOTA_FACTOR, solutionStore = DefaultSolutionStore, ignoreCache = false, logger }: SolveMeasureOptions = {}\n): Promise {\n\tlet cached = 0;\n\tlet solved = 0;\n\n\tlogger?.info(`[solveMeasures] begin, measure total: ${measures.length}.`);\n\n\tawait Promise.all(\n\t\tmeasures.map(async (measure) => {\n\t\t\tif (!ignoreCache) {\n\t\t\t\tconst solution = await solutionStore.get(measure.regulationHash);\n\t\t\t\tif (solution) {\n\t\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\t\t++cached;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst quota = computeQuota(measure.events.length, quotaFactor, quotaMax);\n\n\t\t\tawait measure.regulate({\n\t\t\t\tpolicy: 'equations',\n\t\t\t\tquota,\n\t\t\t\tsolver,\n\t\t\t});\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tif (!stat.error) solutionStore.set(measure.regulationHash0, { ...measure.asSolution(), priority: -measure?.solutionStat?.loss! });\n\t\t\tif (stat.perfect) ++solved;\n\n\t\t\tlogger?.info(\n\t\t\t\t`[solveMeasures] measure[${measure.measureIndex}/${measures.length}] regulated: ${stat.perfect ? 'solved' : stat.error ? 'error' : 'issue'}, ${\n\t\t\t\t\tmeasure.regulationHash\n\t\t\t\t}`\n\t\t\t);\n\t\t})\n\t);\n\n\tlogger?.info(`[solveMeasures] ${cached}/${measures.length} cache hit, ${solved} solved.`);\n\n\treturn {\n\t\tcached,\n\t\tcomputed: measures.length - cached,\n\t\tsolved,\n\t};\n}\n\nconst solveMeasuresWithRectifications = async (\n\tmeasure: SpartitoMeasure,\n\t{ solver, quotaMax = 4000 }: SolveMeasureOptions\n): Promise => {\n\tlet best = evaluateMeasure(measure);\n\tlet bestSolution: starry.RegulationSolution = measure.asSolution();\n\tconst quota = computeQuota(measure.events.length, RECTIFICATION_QUOTA_FACTOR, quotaMax);\n\tlet n_rec = 0;\n\n\t// @ts-ignore\n\tfor (const rec of genMeasureRectifications(measure)) {\n\t\tconst solution = await EquationPolicy.regulateMeasureWithRectification(measure, rec, { solver, quota });\n\n\t\tconst testMeasure = measure.deepCopy() as SpartitoMeasure;\n\t\ttestMeasure.applySolution(solution);\n\t\tconst result = evaluateMeasure(testMeasure);\n\n\t\tif (\n\t\t\tresult.perfect > best.perfect ||\n\t\t\tresult.error < best.error ||\n\t\t\t(!result.error && result.perfect >= best.perfect && solution.priority! > bestSolution.priority!)\n\t\t) {\n\t\t\tbest = result;\n\t\t\tbestSolution = solution;\n\t\t}\n\n\t\tif (result.perfect) break;\n\n\t\t++n_rec;\n\t\tif (n_rec > RECTIFICATION_SEARCH_ITERATIONS) break;\n\t}\n\n\treturn bestSolution;\n};\n\ninterface RegulateWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateMaybeWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients?: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateSimpleOption {\n\tsolutionStore: SolutionStore;\n\tsolver: (...args: any[]) => any;\n\tlogger?: Logger;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n}\n\ninterface TopoRegulationStat {\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\nasync function doRegulateWithTopo(\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateWithTopoOption\n): Promise {\n\tpyClients.logger.info(`[RegulateWithTopo] regulate score: ${score.title}, measures: ${score.spartito!.measures.length}`);\n\n\tconst issueMeasures = score.spartito!.measures.filter((measure) => {\n\t\tconst stat = evaluateMeasure(measure);\n\t\treturn !stat.perfect;\n\t});\n\tpyClients.logger.info(`[RegulateWithTopo] basic issues: ${issueMeasures.length}`);\n\n\tif (issueMeasures.length === 0) {\n\t\treturn {\n\t\t\tsolved: 0,\n\t\t\tissue: 0,\n\t\t\tfatal: 0,\n\t\t};\n\t}\n\n\tconst clusters = ([] as starry.EventCluster[]).concat(...issueMeasures.map((measure) => measure.createClusters()));\n\tconst results = await pyClients.predictScoreImages('topo', { clusters });\n\tconsole.assert(results.length === clusters.length, 'prediction number mismatch:', clusters.length, results.length);\n\n\tclusters.forEach((cluster, index) => {\n\t\tconst result = results[index];\n\t\tconsole.assert(result, 'no result for cluster:', cluster.index);\n\n\t\tcluster.assignPrediction(result);\n\t});\n\n\tissueMeasures.forEach((measure) => {\n\t\tconst cs = clusters.filter((c) => c.index === measure.measureIndex);\n\t\tmeasure.applyClusters(cs);\n\n\t\t// intepolate matrixH\n\t\tconst { matrixH } = EquationPolicy.estiamteMeasure(measure);\n\t\tmatrixH.forEach((row, i) =>\n\t\t\trow.forEach((v, j) => {\n\t\t\t\tmeasure.matrixH[i][j] = measure.matrixH[i][j] * MATRIXH_INTERPOLATION_K + v * (1 - MATRIXH_INTERPOLATION_K);\n\t\t\t})\n\t\t);\n\t});\n\n\tconst solvedIndices: number[] = [];\n\tconst errorIndices: number[] = [];\n\n\t// rectification search\n\tawait Promise.all(\n\t\tissueMeasures.map(async (measure) => {\n\t\t\tconst hash = measure.regulationHash0;\n\t\t\tconst solution = await solveMeasuresWithRectifications(measure, { solver });\n\t\t\tif (solution) {\n\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\tsolutionStore.set(hash, solution);\n\t\t\t\tsolutionStore.set(measure.regulationHash, measure.asSolution());\n\t\t\t\tpyClients.logger.info(`[RegulateWithTopo] solutionStore set: ${measure.measureIndex}, ${hash}, ${measure.regulationHash}`);\n\t\t\t}\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\tmeasure: new EditableMeasure(measure),\n\t\t\t\tstatus: stat.error ? 2 : 1,\n\t\t\t});\n\t\t\tif (stat.perfect) solvedIndices.push(measure.measureIndex);\n\t\t\telse if (stat.error) errorIndices.push(measure.measureIndex);\n\t\t})\n\t);\n\n\tconst n_issues = issueMeasures.length - solvedIndices.length - errorIndices.length;\n\tpyClients.logger.info(`[RegulateWithTopo] score: ${score.title}, solved/issue/fatal: ${solvedIndices.length}/${n_issues}/${errorIndices.length}`);\n\tif (solvedIndices.length) pyClients.logger.info(`[RegulateWithTopo] solved measures: ${solvedIndices.join(', ')}`);\n\tif (errorIndices.length) pyClients.logger.info(`[RegulateWithTopo] error measures: ${errorIndices.join(', ')}`);\n\n\treturn {\n\t\tsolved: solvedIndices.length,\n\t\tissue: n_issues,\n\t\tfatal: errorIndices.length,\n\t};\n}\n\ninterface RegulationStat {\n\tbaseCost: number; // in milliseconds\n\ttopoCost: number; // in milliseconds\n\tbaseMeasures: BaseRegulationStat;\n\ttopoMeasures?: TopoRegulationStat;\n\tqualityScore: number;\n}\n\nconst doRegulate = async (\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateMaybeWithTopoOption\n): Promise => {\n\tpyClients?.logger?.info(`[doRegulate] score: ${score.title}`);\n\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\n\tconst baseMeasures = await solveMeasures(spartito.measures, { solver, quotaMax: 1000, solutionStore, logger: pyClients?.logger });\n\n\tconst t1 = Date.now();\n\n\tconst topoMeasures = pyClients ? await doRegulateWithTopo(score, { pyClients, solver, solutionStore, onSaveIssueMeasure }) : undefined;\n\n\tconst t2 = Date.now();\n\n\treturn {\n\t\tbaseCost: t1 - t0,\n\t\ttopoCost: t2 - t1,\n\t\tbaseMeasures,\n\t\ttopoMeasures,\n\t\tqualityScore: spartito.qualityScore,\n\t};\n};\n\nconst doSimpleRegulate = async (\n\tscore: starry.Score,\n\t{ solver, solutionStore = DefaultSolutionStore, logger, quotaMax = 240, quotaFactor = 16 }: RegulateSimpleOption\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\tconst measures = spartito.measures.filter((measure) => !measure.regulated);\n\n\tawait solveMeasures(measures, { solver, quotaMax, quotaFactor, solutionStore, logger });\n\n\tconsole.assert(score.spartito?.regulated, 'doSimpleRegulate: regulation incomplete:', spartito.measures.filter((measure) => !measure.regulated).length);\n};\n\nconst evaluateScoreQuality = async (score: starry.Score, options: RegulateSimpleOption): Promise => {\n\tif (!score.spartito?.regulated) await doSimpleRegulate(score, options);\n\n\treturn score.spartito!.regulated ? score.spartito!.qualityScore : null;\n};\n\ninterface RegulationSummary {\n\tscoreN: number;\n\n\tbaseCostTotal: number; // in milliseconds\n\ttopoCostTotal: number; // in milliseconds\n\tbaseCostPerMeasure: number | null; // in milliseconds\n\ttopoCostPerMeasure: number | null; // in milliseconds\n\n\tcached: number;\n\tbaseComputed: number;\n\tbaseSolved: number;\n\ttopoSolved: number;\n\ttopoIssue: number;\n\ttopoFatal: number;\n}\n\nconst abstractRegulationStats = (stats: RegulationStat[]): RegulationSummary => {\n\tconst { baseCostTotal, topoCostTotal, baseMeasures, topoMeasures } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tbaseCostTotal: sum.baseCostTotal + stat.baseCost,\n\t\t\ttopoCostTotal: sum.topoCostTotal + stat.topoCost,\n\t\t\tbaseMeasures: sum.baseMeasures + stat.baseMeasures.computed,\n\t\t\ttopoMeasures: sum.topoMeasures + (stat.topoMeasures!.solved + stat.topoMeasures!.issue + stat.topoMeasures!.fatal),\n\t\t}),\n\t\t{\n\t\t\tbaseCostTotal: 0,\n\t\t\ttopoCostTotal: 0,\n\t\t\tbaseMeasures: 0,\n\t\t\ttopoMeasures: 0,\n\t\t}\n\t);\n\n\tconst baseCostPerMeasure = baseMeasures > 0 ? baseCostTotal / baseMeasures : null;\n\tconst topoCostPerMeasure = topoMeasures > 0 ? topoCostTotal / topoMeasures : null;\n\n\tconst { cached, baseComputed, baseSolved, topoSolved, topoIssue, topoFatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.baseMeasures.cached,\n\t\t\tbaseComputed: sum.baseComputed + stat.baseMeasures.computed,\n\t\t\tbaseSolved: sum.baseSolved + stat.baseMeasures.solved,\n\t\t\ttopoSolved: sum.topoSolved + stat.topoMeasures!.solved,\n\t\t\ttopoIssue: sum.topoIssue + stat.topoMeasures!.issue,\n\t\t\ttopoFatal: sum.topoFatal + stat.topoMeasures!.fatal,\n\t\t}),\n\t\t{ cached: 0, baseComputed: 0, baseSolved: 0, topoSolved: 0, topoIssue: 0, topoFatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\tbaseCostTotal,\n\t\ttopoCostTotal,\n\t\tbaseCostPerMeasure,\n\t\ttopoCostPerMeasure,\n\t\tcached,\n\t\tbaseComputed,\n\t\tbaseSolved,\n\t\ttopoSolved,\n\t\ttopoIssue,\n\t\ttopoFatal,\n\t};\n};\n\nexport { doRegulate, doSimpleRegulate, evaluateScoreQuality, abstractRegulationStats };\n","import SparkMD5 from 'spark-md5';\n//import JSZip from 'jszip';\nimport * as starry from '../../src/starry';\n//import { encodeFindResource } from '../../src/isomorphic/converter';\nimport sharp, { FormatEnum } from 'sharp';\nimport got from 'got';\n//import { Logger } from './ZeroClient';\nimport type { SolutionStore, SaveIssueMeasure } from './store';\nimport { ScoreJSON } from '../../src/isomorphic/types';\n\nconst SYSTEM_MARGIN = 4;\n\nexport const constructSystem = ({ page, backgroundImage, detection, imageSize, position }) => {\n\tconst systemWidth = (detection.phi2 - detection.phi1) / detection.interval;\n\tconst systemHeight = imageSize.height / detection.interval;\n\n\tconst lastSystem = page.systems[page.systems.length - 1];\n\tconst top = position ? position.y : (lastSystem ? lastSystem.top + lastSystem.height : 0) + SYSTEM_MARGIN;\n\tconst left = position ? position.x : SYSTEM_MARGIN;\n\n\tconst stavesTops = [\n\t\t0,\n\t\t...Array(detection.middleRhos.length - 1)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => (detection.middleRhos[i] + detection.middleRhos[i + 1]) / 2 / detection.interval),\n\t];\n\n\tconst measureBars = [systemWidth];\n\n\tconst staves = stavesTops.map(\n\t\t(top, i) =>\n\t\t\tnew starry.Staff({\n\t\t\t\ttop,\n\t\t\t\theight: (stavesTops[i + 1] || systemHeight) - top,\n\t\t\t\tstaffY: detection.middleRhos[i] / detection.interval - top,\n\t\t\t\tmeasureBars,\n\t\t\t})\n\t);\n\n\t//console.log(\"detection:\", detection, options, stavesTops);\n\n\tconst imagePosition = {\n\t\tx: -detection.phi1 / detection.interval,\n\t\ty: 0,\n\t\twidth: imageSize.width / detection.interval,\n\t\theight: imageSize.height / detection.interval,\n\t};\n\n\treturn new starry.System({\n\t\tstaves,\n\t\tleft,\n\t\ttop,\n\t\twidth: systemWidth,\n\t\tbackgroundImage,\n\t\timagePosition,\n\t\tmeasureBars,\n\t});\n};\n\nexport interface ConvertOption {\n\tformat?: keyof FormatEnum;\n\tquality?: number;\n\tmaxHeight?: number;\n}\n\nconst toBuffer = async (url: string | Buffer): Promise => {\n\tif (typeof url === 'string') {\n\t\tif (/^https?:\\/\\//.test(url)) {\n\t\t\treturn (await got(url, { responseType: 'buffer', decompress: true, https: { rejectUnauthorized: false } })).body;\n\t\t}\n\n\t\tif (/^data:image\\//.test(url)) {\n\t\t\treturn Buffer.from(url.split(',')[1], 'base64');\n\t\t}\n\n\t\treturn Buffer.from(url);\n\t}\n\n\treturn url;\n};\n\n/**\n * 转换图片格式,默认webp、最大高度1080,高度小于1080自动不做尺寸变换\n * @param url\n * @param format\n * @param maxHeight\n * @param quality\n */\nexport async function convertImage(url: string | Buffer, { format = 'webp', maxHeight = 1080, quality = 80 }: ConvertOption = {}) {\n\tlet buf = await toBuffer(url);\n\n\tconst webpBuffer = await new Promise((resolve) => {\n\t\tsharp(buf)\n\t\t\t.resize({\n\t\t\t\twidth: maxHeight,\n\t\t\t\theight: maxHeight,\n\t\t\t\tfit: 'inside',\n\t\t\t\twithoutEnlargement: true,\n\t\t\t})\n\t\t\t.toFormat(format, { quality })\n\t\t\t.toBuffer((err, buf) => {\n\t\t\t\tresolve(buf);\n\t\t\t});\n\t});\n\n\tconst md5 = SparkMD5.ArrayBuffer.hash(webpBuffer);\n\n\treturn {\n\t\tbuffer: webpBuffer,\n\t\tfilename: `${md5}.${format}`,\n\t};\n}\n\n/**\n * 替换scoreJson图片地址\n * @param scoreJson\n * @param onReplaceImage\n */\nexport const replaceScoreJsonImages = (scoreJson: ScoreJSON, onReplaceImage: (src: string) => string = (src) => src) => {\n\tconst json = JSON.parse(JSON.stringify(scoreJson));\n\n\tjson.pages.forEach((page) => {\n\t\tpage?.src && (page.src = onReplaceImage(page?.src));\n\t});\n\n\tjson.lines.forEach((system) => {\n\t\tsystem.lineStaves.forEach((line) => {\n\t\t\tline.imgs.forEach((staff) => {\n\t\t\t\tstaff?.src && (staff.src = onReplaceImage(staff.src));\n\t\t\t});\n\t\t});\n\t});\n\n\treturn json;\n};\n\n/**\n * 获取scoreJson图片资源列表\n * @param scoreJson\n */\nexport const getScoreJsonImages = (scoreJson: ScoreJSON) => {\n\treturn [\n\t\t...scoreJson.pages.map((page) => page?.src),\n\t\t...scoreJson.lines\n\t\t\t.map((system) => system.lineStaves.map((staff) => staff.imgs))\n\t\t\t.flat(2)\n\t\t\t.map((staff) => staff?.src)\n\t\t\t.filter(Boolean),\n\t];\n};\n\ninterface ScorePatchesUpdateOptions {\n\tsolutionStore?: SolutionStore;\n}\n\nexport const updateScorePatches = (score: starry.Score, measures: starry.SpartitoMeasure[], options: ScorePatchesUpdateOptions = {}): void => {\n\tconsole.assert(\n\t\tmeasures.every((measure) => measure.validRegulated),\n\t\t'[updateScorePatches] some measures not valid regulated:',\n\t\tmeasures.filter((measure) => !measure.validRegulated)\n\t);\n\n\tscore.patches = measures.map((measure) => measure.createPatch());\n\n\tif (options?.solutionStore) {\n\t\tscore.assemble();\n\t\tconst spartito = score.makeSpartito();\n\n\t\tmeasures.forEach((measure) => {\n\t\t\toptions.solutionStore!.set(measure.regulationHash, { ...measure.asSolution(), priority: 1 });\n\t\t\tif (measure.regulationHash0 !== measure.regulationHash) {\n\t\t\t\tconst originMeasure = spartito.measures.find((m) => m.measureIndex === measure.measureIndex);\n\t\t\t\toptions.solutionStore!.set(measure.regulationHash0, { ...measure.asSolution(originMeasure), priority: 1 });\n\t\t\t}\n\t\t});\n\t}\n};\n\ninterface EditableMeasuresSaveOptions {\n\tstatus?: number;\n\tsolutionStore?: SolutionStore;\n}\n\nexport const saveEditableMeasures = async (\n\tscore: starry.Score,\n\tmeasureIndices: number[],\n\tsaveMeasure: SaveIssueMeasure,\n\t{ status = 2, solutionStore }: EditableMeasuresSaveOptions = {}\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\n\tconst measures = measureIndices\n\t\t.map((index) => spartito.measures.find((measure) => measure.measureIndex === index))\n\t\t.filter(Boolean) as starry.SpartitoMeasure[];\n\n\tif (solutionStore) {\n\t\tconst solutions = await solutionStore.batchGet(measures.map((measure) => measure.regulationHash0));\n\t\tmeasures.forEach((measure, i) => {\n\t\t\tconst solution = solutions[i];\n\t\t\tif (solution) measure.applySolution(solution);\n\t\t});\n\t}\n\n\tmeasures.forEach((measure) => {\n\t\tsaveMeasure({\n\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\tmeasure: new starry.EditableMeasure(measure),\n\t\t\tstatus,\n\t\t});\n\t});\n};\n","console.info(`%cstarry-omr%c v1.0.0 2026-05-05T14:47:04.294Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../libs/browserComponents';\n\nexport * from '../../libs/predictors';\nexport * from '../../libs/regulation';\nexport * from '../../libs/util';\nexport * as starry from '../../../src/starry';\n"],"names":["eventsModule","events","EventEmitter","Request","pack","unpack","getPortPromise","defaultsDeep","PythonShell","inherits_browserModule","inheritsModule","require$$0","require$$1","util","getPort","pick","sha1","GROUP_N_TO_PITCH","MIDDLE_C","mod7","argmax","Token.TokenClefs","Token.TokenOctshifts","Token.TokenTimesigsC","Token.TokenTimesigsN","EquationSolver.Solver","erf","parser","parse","parseCode","grammar","MIDI","MidiSequence","Notation","MusicNotation","MidiPlayer","Config","Node","Navigator","Matcher","MidiUtils","require$$2","require$$3","require$$4","undefined","require","staffLayout.parseCode","measureLayout.parseCode","WeakLRUCache","starry.beadSolver.solveMeasure","starry.evaluateMeasure","starry.beadSolver.estimateMeasure","starry.EditableMeasure","starry.Staff","starry.System","got","sharp","SparkMD5"],"mappings":"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E,EAAE,CAAC,EAAE;AACd,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACb,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACnJ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACxG,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACnJ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACf,YAAA,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YAC7F,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACb,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EA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"} \ No newline at end of file diff --git a/backend/omr/dist/worker.js b/backend/omr/dist/worker.js index 4e5bb9fa0bc126d920c353928313c2efe1a9d63a..9b62da6b330ac8896f7f3108a4d2809e3ad45869 100644 --- a/backend/omr/dist/worker.js +++ b/backend/omr/dist/worker.js @@ -7,5 +7,5 @@ * @copyright Chen, Yi-Cyuan 2014-2017 * @license MIT */ -(function(module){(function(){var root="object"==typeof window?window:{},NODE_JS=!root.JS_SHA1_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS&&(root=global);var COMMON_JS=!root.JS_SHA1_NO_COMMON_JS&&module.exports,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[-2147483648,8388608,32768,128],SHIFT=[24,16,8,0],OUTPUT_TYPES=["hex","array","digest","arrayBuffer"],blocks=[],createOutputMethod=function(t){return function(e){return new Sha1(!0).update(e)[t]()}},createMethod=function(){var t=createOutputMethod("hex");NODE_JS&&(t=nodeWrap(t)),t.create=function(){return new Sha1},t.update=function(e){return t.create().update(e)};for(var e=0;e>2]|=t[n]<>2]|=s<>2]|=(192|s>>6)<>2]|=(128|63&s)<=57344?(o[i>>2]|=(224|s>>12)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<>2]|=(240|s>>18)<>2]|=(128|s>>12&63)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<=64?(this.block=o[16],this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this}},Sha1.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,e=this.lastByteIndex;t[16]=this.block,t[e>>2]|=EXTRA[3&e],this.block=t[16],e>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},Sha1.prototype.hash=function(){var t,e,s=this.h0,i=this.h1,n=this.h2,r=this.h3,o=this.h4,a=this.blocks;for(t=16;t<80;++t)e=a[t-3]^a[t-8]^a[t-14]^a[t-16],a[t]=e<<1|e>>>31;for(t=0;t<20;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i&n|~i&r)+o+1518500249+a[t]|0)<<5|o>>>27)+(s&(i=i<<30|i>>>2)|~s&n)+r+1518500249+a[t+1]|0)<<5|r>>>27)+(o&(s=s<<30|s>>>2)|~o&i)+n+1518500249+a[t+2]|0)<<5|n>>>27)+(r&(o=o<<30|o>>>2)|~r&s)+i+1518500249+a[t+3]|0)<<5|i>>>27)+(n&(r=r<<30|r>>>2)|~n&o)+s+1518500249+a[t+4]|0,n=n<<30|n>>>2;for(;t<40;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i^n^r)+o+1859775393+a[t]|0)<<5|o>>>27)+(s^(i=i<<30|i>>>2)^n)+r+1859775393+a[t+1]|0)<<5|r>>>27)+(o^(s=s<<30|s>>>2)^i)+n+1859775393+a[t+2]|0)<<5|n>>>27)+(r^(o=o<<30|o>>>2)^s)+i+1859775393+a[t+3]|0)<<5|i>>>27)+(n^(r=r<<30|r>>>2)^o)+s+1859775393+a[t+4]|0,n=n<<30|n>>>2;for(;t<60;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i&n|i&r|n&r)+o-1894007588+a[t]|0)<<5|o>>>27)+(s&(i=i<<30|i>>>2)|s&n|i&n)+r-1894007588+a[t+1]|0)<<5|r>>>27)+(o&(s=s<<30|s>>>2)|o&i|s&i)+n-1894007588+a[t+2]|0)<<5|n>>>27)+(r&(o=o<<30|o>>>2)|r&s|o&s)+i-1894007588+a[t+3]|0)<<5|i>>>27)+(n&(r=r<<30|r>>>2)|n&o|r&o)+s-1894007588+a[t+4]|0,n=n<<30|n>>>2;for(;t<80;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i^n^r)+o-899497514+a[t]|0)<<5|o>>>27)+(s^(i=i<<30|i>>>2)^n)+r-899497514+a[t+1]|0)<<5|r>>>27)+(o^(s=s<<30|s>>>2)^i)+n-899497514+a[t+2]|0)<<5|n>>>27)+(r^(o=o<<30|o>>>2)^s)+i-899497514+a[t+3]|0)<<5|i>>>27)+(n^(r=r<<30|r>>>2)^o)+s-899497514+a[t+4]|0,n=n<<30|n>>>2;this.h0=this.h0+s|0,this.h1=this.h1+i|0,this.h2=this.h2+n|0,this.h3=this.h3+r|0,this.h4=this.h4+o|0},Sha1.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,s=this.h2,i=this.h3,n=this.h4;return HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[s>>28&15]+HEX_CHARS[s>>24&15]+HEX_CHARS[s>>20&15]+HEX_CHARS[s>>16&15]+HEX_CHARS[s>>12&15]+HEX_CHARS[s>>8&15]+HEX_CHARS[s>>4&15]+HEX_CHARS[15&s]+HEX_CHARS[i>>28&15]+HEX_CHARS[i>>24&15]+HEX_CHARS[i>>20&15]+HEX_CHARS[i>>16&15]+HEX_CHARS[i>>12&15]+HEX_CHARS[i>>8&15]+HEX_CHARS[i>>4&15]+HEX_CHARS[15&i]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]},Sha1.prototype.toString=Sha1.prototype.hex,Sha1.prototype.digest=function(){this.finalize();var t=this.h0,e=this.h1,s=this.h2,i=this.h3,n=this.h4;return[t>>24&255,t>>16&255,t>>8&255,255&t,e>>24&255,e>>16&255,e>>8&255,255&e,s>>24&255,s>>16&255,s>>8&255,255&s,i>>24&255,i>>16&255,i>>8&255,255&i,n>>24&255,n>>16&255,n>>8&255,255&n]},Sha1.prototype.array=Sha1.prototype.digest,Sha1.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(20),e=new DataView(t);return e.setUint32(0,this.h0),e.setUint32(4,this.h1),e.setUint32(8,this.h2),e.setUint32(12,this.h3),e.setUint32(16,this.h4),t};var exports=createMethod();COMMON_JS?module.exports=exports:root.sha1=exports})()})(sha1),function(t){t.ClefG="ClefG",t.ClefF="ClefF",t.ClefC="ClefC",t.NoteheadS0="NoteheadS0",t.NoteheadS1="NoteheadS1",t.NoteheadS2="NoteheadS2",t.NoteheadS1stemU="NoteheadS1stemU",t.NoteheadS1stemD="NoteheadS1stemD",t.NoteheadS2stemU="NoteheadS2stemU",t.NoteheadS2stemD="NoteheadS2stemD",t.vline_Stem="vline_Stem",t.Flag3="Flag3",t.BeamLeft="BeamLeft",t.BeamContinue="BeamContinue",t.BeamRight="BeamRight",t.TremoloLeft="TremoloLeft",t.TremoloRight="TremoloRight",t.TremoloMiddle="TremoloMiddle",t.Dot="Dot",t.Rest0="Rest0",t.Rest1="Rest1",t.Rest2="Rest2",t.Rest3="Rest3",t.Rest4="Rest4",t.Rest5="Rest5",t.Rest6="Rest6",t.Rest0W="Rest0W",t.RestM1="RestM1",t.AccNatural="AccNatural",t.AccSharp="AccSharp",t.AccDoublesharp="AccDoublesharp",t.AccFlat="AccFlat",t.AccFlatflat="AccFlatflat",t.vline_VoltaLeft="vline_VoltaLeft",t.vline_VoltaRight="vline_VoltaRight",t.VoltaLeft="VoltaLeft",t.VoltaRight="VoltaRight",t.VoltaAlternativeBegin="VoltaAlternativeBegin",t.BarMeasure="BarMeasure",t.vline_BarMeasure="vline_BarMeasure",t.vline_BarTerminal="vline_BarTerminal",t.vline_BarSegment="vline_BarSegment",t.SlurBegin="SlurBegin",t.SlurEnd="SlurEnd",t.TimesigC44="TimesigC44",t.TimesigC22="TimesigC22",t.TimesigZero="TimesigZero",t.TimesigOne="TimesigOne",t.TimesigTwo="TimesigTwo",t.TimesigThree="TimesigThree",t.TimesigFour="TimesigFour",t.TimesigFive="TimesigFive",t.TimesigSix="TimesigSix",t.TimesigSeven="TimesigSeven",t.TimesigEight="TimesigEight",t.TimesigNine="TimesigNine",t.OctaveShift8va="OctaveShift8va",t.OctaveShift8vb="OctaveShift8vb",t.OctaveShift8="OctaveShift8",t.OctaveShift0="OctaveShift0",t.Zero="Zero",t.One="One",t.Two="Two",t.Three="Three",t.Four="Four",t.Five="Five",t.Six="Six",t.Seven="Seven",t.Eight="Eight",t.Nine="Nine",t.f="f",t.p="p",t.m="m",t.n="n",t.r="r",t.s="s",t.z="z",t.CrescendoBegin="CrescendoBegin",t.CrescendoEnd="CrescendoEnd",t.DecrescendoBegin="DecrescendoBegin",t.DecrescendoEnd="DecrescendoEnd",t.ScriptFermata="ScriptFermata",t.ScriptShortFermata="ScriptShortFermata",t.ScriptSforzato="ScriptSforzato",t.ScriptStaccato="ScriptStaccato",t.ScriptStaccatissimo="ScriptStaccatissimo",t.ScriptTurn="ScriptTurn",t.ScriptTrill="ScriptTrill",t.ScriptSegno="ScriptSegno",t.ScriptCoda="ScriptCoda",t.ScriptArpeggio="ScriptArpeggio",t.ScriptPrall="ScriptPrall",t.ScriptMordent="ScriptMordent",t.ScriptMarcato="ScriptMarcato",t.ScriptTenuto="ScriptTenuto",t.ScriptPortato="ScriptPortato",t.PedalStar="PedalStar",t.PedalPed="PedalPed",t.KeyAcc="KeyAcc",t.TempoNotehead="TempoNotehead",t.GraceNotehead="GraceNotehead",t.SignLined="SignLined",t.SignInterval="SignInterval",t.rect_Text="rect_Text",t.rect_Lyric="rect_Lyric"}(SemanticType||(SemanticType={})),SemanticType.BarMeasure,SemanticType.vline_BarMeasure,SemanticType.vline_BarTerminal,SemanticType.vline_BarSegment,SemanticType.vline_VoltaLeft,SemanticType.vline_VoltaRight,SemanticType.VoltaAlternativeBegin;const st=SemanticType;st.NoteheadS0,st.NoteheadS1,st.NoteheadS2,st.Zero,st.One,st.Two,st.Three,st.Four,st.Five,st.Six,st.Seven,st.Eight,st.Nine,st.ScriptStaccatissimo,st.TimesigZero,st.TimesigOne,st.TimesigTwo,st.TimesigThree,st.TimesigFour,st.TimesigFive,st.TimesigSix,st.TimesigSeven,st.TimesigEight,st.TimesigNine,st.Rest0,st.Rest1,st.Rest2,st.Rest3,st.Rest4,st.Rest5,st.Rest6,st.Rest0W,st.RestM1,st.SignInterval,st.SignLined,st.BeamLeft,st.BeamContinue,st.BeamRight,st.ClefG,st.ClefF,st.ClefC,st.NoteheadS0,st.NoteheadS1,st.NoteheadS2,st.Dot,st.Rest0,st.Rest1,st.Rest2,st.Rest3,st.Rest4,st.Rest5,st.Rest6,st.RestM1,st.AccNatural,st.AccSharp,st.AccDoublesharp,st.AccFlat,st.AccFlatflat,st.TimesigC44,st.TimesigC22,st.TimesigZero,st.TimesigOne,st.TimesigTwo,st.TimesigThree,st.TimesigFour,st.TimesigFive,st.TimesigSix,st.TimesigSeven,st.TimesigEight,st.TimesigNine,st.One,st.Two,st.Three,st.Four,st.Five,st.OctaveShift8,st.OctaveShift0,st.f,st.p,st.m,st.n,st.r,st.s,st.z,st.ScriptFermata,st.ScriptShortFermata,st.ScriptSforzato,st.ScriptStaccato,st.ScriptStaccatissimo,st.ScriptTurn,st.ScriptTrill,st.ScriptSegno,st.ScriptCoda,st.ScriptArpeggio,st.ScriptPrall,st.ScriptMordent,st.ScriptMarcato,st.ScriptTenuto,st.ScriptPortato,st.PedalStar,st.PedalPed;const roundNumber=(t,e,s=-1/0)=>Math.max(Math.round(t/e)*e,s),gcd=(t,e)=>Number.isInteger(t)&&Number.isInteger(e)?0===e?t:gcd(e,t%e):(console.error("non-integer gcd:",t,e),1),frac=(t,e)=>({numerator:t,denominator:e}),reducedFraction=(t,e)=>{t=Math.round(t),e=Math.round(e);const s=0!==t?gcd(t,e):e;return frac(t/s,e/s)},fractionMul=(t,e)=>e?t*e.numerator/e.denominator:t;class DummyLogger{debug(...t){}group(...t){}groupCollapsed(...t){}groupEnd(){}info(...t){}warn(...t){}assert(...t){}}const EOM=-1,GREAT_NUMBER=1920,DURATION_MULTIPLIER=1921920,floatToFrac=t=>{const e=Math.round(t*GREAT_NUMBER);return reducedFraction(e,GREAT_NUMBER)},floatToTimeWarp=t=>1===t?null:floatToFrac(t);var ActionType;!function(t){t[t.PLACE=0]="PLACE",t[t.VERTICAL=1]="VERTICAL",t[t.HORIZONTAL=2]="HORIZONTAL"}(ActionType||(ActionType={}));class Action{constructor(t){Object.assign(this,t)}static P(t){return new Action({type:ActionType.PLACE,e1:t})}static V(t,e,s=1){return new Action({type:ActionType.VERTICAL,e1:s>0?t:e,e2:s>0?e:t})}static H(t,e){return new Action({type:ActionType.HORIZONTAL,e1:t,e2:e})}get id(){switch(this.type){case ActionType.PLACE:return this.e1.toString();case ActionType.VERTICAL:return`${this.e1}|${this.e2}`;case ActionType.HORIZONTAL:return`${this.e1}-${this.e2>=0?this.e2:"."}`}}get events(){return[this.e1,this.e2].filter(Number.isFinite)}}class StageMatrix{static fromNode(t,e){const s=Array(t.stages.length).fill(null).map(()=>Array(t.stages.length).fill(null).map(()=>new Set));t.actions.filter(t=>t.type===ActionType.HORIZONTAL).forEach(e=>{const i=t.stages.findIndex(t=>t.events.includes(e.e1)),n=t.stages.findIndex(t=>t.events.includes(e.e2));console.assert(i>=0&&n>=0,"invalid stages for H action:",t.id,t.stages,e),s[i][n].add(e.e1)}),s[0][t.stages.length-1].add(0);const i=t.stagedEvents,n=e.matrixH[e.matrixH.length-1].filter((t,e)=>!i.has(e)),r=Math.max(0,Math.max(...n)-.01),o=t.actions.filter(t=>t.type===ActionType.HORIZONTAL),a=Object.keys(e.eventMap).map(Number).filter(t=>!o.find(e=>e.e2===t));return t.stages.forEach(i=>{i.events.forEach(n=>{if(n>0){!o.find(t=>t.e1===n)&&e.matrixH[e.matrixH.length-1][n]>=r&&(a.some(t=>e.matrixH[t][n]>0)||s[i.index][t.stages.length-1].add(n))}})}),new StageMatrix({matrix:s})}constructor(t){Object.assign(this,t)}pathOf(t,e,s,i=0){if(this.matrix[t][e].size){const n=[...this.matrix[t][e]][i];if(e===s)return[n];for(let t=e+1;t<=s;++t){const i=this.pathOf(e,t,s);if(i)return[n,...i]}}return null}findDoublePath(t,e){const s=[];for(let i=e;i>=t+1;--i)for(let n=0;ne.forEach(e=>t.forEach(t=>e.delete(t))))}toEquations(t){const e=[];for(let s=1;sr[t]=1),n.forEach(t=>r[t]=-1),e.push(r),this.reducePath(i.length>n.length?i:n)}}}return e}}class PathNode{constructor(t){Object.assign(this,t),console.assert(this.logger,"logger is null:",t)}get actions(){const t=this.parent?this.parent.actions:[];return this.action?[...t,this.action]:t}get id(){return this.actions.map(t=>t.id).sort().join(" ")}get stagedEvents(){const t=new Set;return this.stages&&this.stages.forEach(e=>e.events.forEach(e=>e>=0&&t.add(e))),t}like(t){return t.split(" ").sort().join(" ")===this.id}constructStages(t){this.stages=[{events:[EOM]}];for(const e of this.actions)switch(e.type){case ActionType.PLACE:this.stages.unshift({events:[e.e1]});break;case ActionType.VERTICAL:{const t=this.stages.find(t=>t.events.includes(e.e1)),s=this.stages.find(t=>t.events.includes(e.e2));console.assert(t||s,"invalid V action:",this.stages,e),t&&s?(t.events.push(...s.events),s.events=null,this.stages=this.stages.filter(t=>t.events)):t?s||t.events.push(e.e2):s.events.unshift(e.e1)}break;case ActionType.HORIZONTAL:{const s=this.stages.find(t=>t.events.includes(e.e1)),i=this.stages.find(t=>t.events.includes(e.e2));console.assert(s||i,"invalid H action:",this.stages,e);const n=s=>{console.assert(t.eventMap[s],"invalid event id:",e.id,s,t.eventMap);const i=t.eventMap[s].x,n=this.stages.find(e=>e.events.some(e=>e>0&&t.eventMap[e].x<=i)&&e.events.some(e=>e>0&&t.eventMap[e].x>=i));if(n)n.events.push(s);else{const e={events:[s]},n=this.stages.findIndex(e=>e.events[0]===EOM||t.eventMap[e.events[0]].x>=i);this.stages.splice(n,0,e)}};s||n(e.e1),i||n(e.e2)}}this.stages.forEach((t,e)=>t.index=e)}constructConstraints(t){const e=Object.keys(t.eventMap).length,s=StageMatrix.fromNode(this,t).toEquations(e),i=Array(e).fill(null).map((e,s)=>t.eventMap[s].duration);this.constraints=s.map(t=>t.map((t,e)=>t*i[e]))}inbalancesConstraints(t){console.assert(this.constraints,"constraints not constructed.");const e=Object.keys(t.eventMap).length,s=Array(e).fill(!0),i=Array(e).fill(!1),n=[];for(const t of this.constraints){const e=t.reduce((t,e)=>t+e,0);if(0!==e){const r=e<0?t.map(t=>-t):t;if(r[0]>0)continue;n.push(r),r.forEach((t,e)=>{i[e]=i[e]||t<0,t&&(s[e]=t<0||i[e])})}}return this.constraints.forEach(t=>{0!==t.reduce((t,e)=>t+e,0)||t[0]||t.some((t,e)=>t&&!s[e])&&(t.forEach((t,e)=>t&&(s[e]=!1)),n.push(t))}),{ones:s,inbalances:n}}solveEquations({ones:t,inbalances:e}){if(!e.length)return t.map(()=>1);const s=t.map((t,e)=>({fixed:t,i:e})).filter(({fixed:t})=>!t).map(({i:t})=>t).filter(t=>e.some(e=>0!==e[t]));if(!s.length)return t.map(()=>1);const i=s.map(t=>Math.abs(e.find(e=>0!==e[t])[t])),n=new Map;let r=!1;const o=e.map(t=>({line:t.filter((t,e)=>s.includes(e)),bias:-t.reduce((t,e,i)=>t+(s.includes(i)?0:e),0)})).filter(({line:t,bias:e})=>{if(t.every(t=>0===t))return!1;const s=t.join(",");return n.has(s)?(r=n.get(s)!==e,!1):(n.set(s,e),!0)});if(r)return null;const a=o.slice(0,s.length),c=o.slice(s.length);if(a.lengths===e?1:s===n?-1:0),bias:0,prior:(i[e]+i[n])/DURATION_MULTIPLIER};a.some(t=>t.line[e]&&t.line[n])&&(r.prior-=10),a.some(t=>1===t.line.filter(Number).length&&(t.line[e]||t.line[n]))&&(r.prior+=1),t.push(r)}t.sort((t,e)=>t.prior-e.prior),a.push(...t.slice(0,s.length-a.length))}const h=a.map(({line:t})=>t),l=a.map(({bias:t})=>t),u=matrixInverse(h);if(!u)return this.logger.warn("null invert:",h),null;const d=u.map(t=>t.reduce((t,e,s)=>t+e*l[s],0));if(c.length&&c.some(t=>Math.abs(t.line.reduce((t,e,s)=>t+e*d[s],0))>.001))return null;const f=t.map(()=>1);return s.forEach((t,e)=>f[t]=d[e]),f}optimallySolve(t){const{ones:e,inbalances:s}=this.inbalancesConstraints(t),i=e.map((e,s)=>e?-1:roundNumber(t.eventMap[s].shrinkness,.01)).reduce((t,e,s)=>(e>=0&&(t[e]=t[e]||[],t[e].push(s)),t),{}),n=Object.entries(i).sort((t,e)=>Number(e[0])-Number(t[0])).map(t=>t[1]);for(let i=1;i!r.includes(e)),a=this.solveEquations({ones:o,inbalances:s});if(a&&a.every((e,s)=>e<=1&&e>t.eventMap[s].lowWarp))return a}return this.solveEquations({ones:e,inbalances:s})}isConflicted(t){const{ones:e,inbalances:s}=this.inbalancesConstraints(t);for(const i of s){if(i.reduce((s,i,n)=>s+i*(e[n]||i<=0?1:t.eventMap[n].lowWarp),0)>=0)return i.forEach((e,s)=>{e&&(t.eventTendencies[s]+=e>0?1:-1)}),!0}if(!s.length)return!1;const i=this.solveEquations({ones:e,inbalances:s});return!i||!i.every((e,s)=>e>t.eventMap[s].lowWarp&&e<=1)}getSolution(t){const e=e=>t.eventMap[e.e2]?t.eventMap[e.e2].x+.06*Math.abs(t.eventMap[e.e2].x-t.eventMap[e.e1].x):t.eventMap[e.e1].x+1e4,s=this.actions.filter(t=>t.type===ActionType.HORIZONTAL).sort((t,s)=>e(t)-e(s)),i=s.reduce((t,e)=>({...t,[e.e1]:e.e2}),{}),n=new Set([...Object.keys(i)].map(Number));s.forEach(t=>n.delete(t.e2)),this.stages[0].events.forEach(t=>t>0&&n.add(t));let r=[...n].map(t=>{const e=[t];let s=t;for(;i[s]&&(s=i[s],!(s<0||e.includes(s)));)e.push(s);return e});const o=Object.values(t.eventMap).filter(t=>t.id>0).map(t=>({id:t.id,tick:null,endTick:null,tickGroup:null,timeWarp:null})),a=o.filter(t=>r.some(e=>e.includes(t.id))||s.some(e=>[e.e1,e.e2].includes(t.id))).reduce((t,e)=>({...t,[e.id]:e}),{});this.stages.forEach((t,e)=>t.events.forEach(t=>a[t]&&(a[t].tickGroup=e))),this.stages[0].tick=0,this.stages[0].events.forEach(t=>a[t]&&(a[t].tick=0));const c=this.optimallySolve(t);o.forEach(t=>t.timeWarp=floatToTimeWarp(c[t.id]));const h=this.stages.slice(0,this.stages.length-1),l=()=>{if(h.every(t=>Number.isFinite(t.tick)))return!1;let e=!1;return s.forEach(s=>{const i=this.stages.find(t=>t.events.includes(s.e1)),n=this.stages.find(t=>t.events.includes(s.e2));Number.isFinite(i.tick)&&!Number.isFinite(n.tick)&&(n.tick=i.tick+fractionMul(t.eventMap[s.e1].duration,a[s.e1].timeWarp),n.events.forEach(t=>a[t]&&(a[t].tick=n.tick)),e=!0)}),[...s].reverse().forEach(s=>{const i=this.stages.find(t=>t.events.includes(s.e1)),n=this.stages.find(t=>t.events.includes(s.e2));!Number.isFinite(i.tick)&&Number.isFinite(n.tick)&&(i.tick=n.tick-fractionMul(t.eventMap[s.e1].duration,a[s.e1].timeWarp),i.events.forEach(t=>a[t]&&(a[t].tick=i.tick)),e=!0)}),e};for(;l(););console.assert(h.every(t=>Number.isFinite(t.tick)),"stage ticks not all solved:",this.stages,this.id),o.filter(t=>Number.isFinite(t.tick)).forEach(e=>e.endTick=e.tick+fractionMul(t.eventMap[e.id].duration,e.timeWarp));const u=t.eventMap[0].duration;r.forEach(t=>{const e=t.findIndex(t=>a[t].endTick>u);if(e>=0){t.splice(e,t.length-e).forEach(t=>{a[t].tick=null,a[t].endTick=null})}}),r=r.filter(t=>t.length);const d=Math.max(0,...o.map(t=>t.endTick).filter(Number.isFinite));return this.logger.debug(String.fromCodePoint(127822),this.id,c),{voices:r,events:o,duration:d,actions:this.actions.map(t=>t.id).join(" ")}}deduce(t,e){this.stages||this.constructStages(t);const s=t.actionAccessing.get(this.id)||{times:0};if(++s.times,t.actionAccessing.set(this.id,s),this.constructConstraints(t),this.isConflicted(t))return s.closed=!0,this.logger.info(this.action.id,"❌"),null;if(this.logger.group(this.action&&this.action.id),e.credits>0){if(--e.credits,this.children||this.expand(t),this.children=this.children.filter(e=>!t.actionAccessing.get(e.id)||!t.actionAccessing.get(e.id).closed),this.children.length){const s=e=>e.possibility/((t.actionAccessing.get(e.id)||{times:0}).times+1);this.children.sort((t,e)=>s(e)-s(t));for(const s of this.children){const i=s.deduce(t,e);if(i)return this.logger.groupEnd(),i;if(e.credits<=0)break}}}else this.logger.debug("quota exhausted.");return this.logger.groupEnd(),s.closed=!0,this.getSolution(t)}expand(t){this.constructStages(t);const{eventMap:e,matrixV:s,matrixH:i}=t,n=this.stagedEvents,r=[],o=t=>{if(!this.actions.some(e=>e.id===t.action.id)&&!r.some(e=>e.action.id===t.action.id)){const e=this.stages.find(e=>e.events.includes(t.action.e1)),i=this.stages.find(e=>e.events.includes(t.action.e2));if(e===i||e&&i&&e.index>=i.index)return;if(e&&i)if(t.action.type===ActionType.VERTICAL){if(i.index-e.index>1)return;if(this.actions.some(t=>e.events.includes(t.e1)&&i.events.includes(t.e2)))return}else if(t.action.type===ActionType.HORIZONTAL&&e.index>i.index)return;if(t.action.type===ActionType.HORIZONTAL&&this.actions.some(e=>e.type===ActionType.HORIZONTAL&&(e.e1===t.action.e1||e.e2===t.action.e2||e.e1===t.action.e2&&e.e2===t.action.e1)))return;if(t.action.type===ActionType.VERTICAL){if(e&&(t.possibility=Math.min(t.possibility,...e.events.map(e=>s[t.action.e2][e])),t.possibility<=0))return;if(i&&(t.possibility=Math.min(t.possibility,...i.events.map(e=>s[e][t.action.e1])),t.possibility<=0))return}r.push(t)}};for(const t of n)t<0||(s[t].forEach((e,s)=>{e>0&&t!==s&&o({action:Action.V(s,t),possibility:e})}),s.forEach((e,s)=>{const i=e[t];i>0&&o({action:Action.V(t,s),possibility:i})}),i[t].forEach((e,s)=>{e>0&&o({action:Action.H(s,t),possibility:e})}),i.forEach((s,i)=>{i=i>=Object.keys(e).length?-1:i;const n=s[t];n>0&&o({action:Action.H(t,i),possibility:n})}));r.some(t=>[ActionType.HORIZONTAL,ActionType.PLACE].includes(t.action.type)||!n.has(t.action.e1)||!n.has(t.action.e2))?this.children=r.map(t=>new PathNode({logger:this.logger,parent:this,...t})):this.children=[]}}class Solver{constructor(t,{quota:e=1e3,logger:s=new DummyLogger}={}){this.quota=e,this.logger=s;const i={id:0,x:0,confidence:1,shrinkness:t.measureShrinkness,duration:t.expectedDuration,lowWarp:0};this.events=[i,...t.events.map(t=>({id:t.id,x:t.x,confidence:t.confidence,shrinkness:t.shrinkness,staff:t.staff,duration:t.duration,lowWarp:.5}))],this.eventMap=this.events.reduce((t,e)=>({...t,[e.id]:e}),{}),this.matrixH=t.matrixH,this.matrixV=t.matrixV,this.xSpan=t.endX-Math.min(t.endX-1,...t.events.map(t=>t.x)),this.actionAccessing=new Map}solve(){this.pathRoot=new PathNode({logger:this.logger,action:null}),this.pathRoot.children=this.events.slice(1).map(t=>new PathNode({logger:this.logger,parent:this.pathRoot,action:Action.P(t.id),possibility:this.matrixV[t.id].reduce((t,e)=>t+e,0)}));let t=null;this.logger.groupCollapsed("solve");const e=Array(this.events.length).fill(0),s={credits:this.quota,times:0};for(;s.credits>0;){++s.times;const i={eventMap:this.eventMap,matrixH:this.matrixH,matrixV:this.matrixV,actionAccessing:this.actionAccessing,eventTendencies:e},n=this.pathRoot.deduce(i,s);if(n.credits=this.quota-s.credits,n.times=s.times,this.evaluateSolution(n),this.logger.debug("loss:",n.loss),t=!t||n.losst/s.times)),t}evaluateSolution(t){t.loss=0;const e=t.events.reduce((t,e)=>({...t,[e.id]:{...e,...this.eventMap[e.id]}}),{}),s=t.events.filter(t=>Number.isFinite(t.tick)).map(t=>e[t.id]),i=s.reduce((t,e)=>(t[e.staff]=t[e.staff]||[],t[e.staff].push(e),t),{});Object.values(i).forEach(e=>{e.sort((t,e)=>t.x-e.x).slice(0,e.length-1).forEach((s,i)=>{e[i+1].tick{if(Number.isFinite(s.tick)&&!t.voices.every(t=>!t.includes(s.id))||(t.loss+=100*e[s.id].confidence),s.timeWarp){const{numerator:t,denominator:i}=s.timeWarp,r=e[s.id].shrinkness;n.set(t,Math.max(n.get(t)||0,1-r)),n.set(i,Math.max(n.get(i)||0,1-r))}});const r=reducedFraction(t.duration,this.eventMap[0].duration);n.set(r.numerator,Math.max(n.get(r.numerator)||0,1-this.eventMap[0].shrinkness)),n.set(r.denominator,Math.max(n.get(r.denominator)||0,1-this.eventMap[0].shrinkness));for(const[e,s]of n.entries())e>1&&(t.loss+=Math.log(e)*s);let o=0,a=0;t.voices.forEach(s=>{console.assert(e[s[0]],"invalid voice:",s,Object.keys(e));const i=Math.abs(e[s[0]].tick),n=e[s[s.length-1]].endTick;o+=Math.max(0,i+t.duration-n);let r=null;s.forEach(t=>{const s=e[t];s.staff!==r&&(null!==r&&++a,r=s.staff)})}),t.loss+=10*o/DURATION_MULTIPLIER,t.loss+=5**a-1;const c=[...s].sort((t,e)=>t.x-e.x),h=c.slice(1).map((e,s)=>{const i=c[s],n=e.x-i.x,r=e.tick-i.tick;if(!r)return n/this.xSpan;return(4*Math.atan2(r/t.duration,n/this.xSpan)/Math.PI-1)**2}),l=Math.max(...h,0);t.loss+=l**2,console.assert(t.loss>=0,"Invalid solution loss!!!",t.loss,n,o,a),t.loss<0&&(t.loss=1/0)}}const solveStaffGroup=(t,e)=>{if(!t.events.length)return{events:[],voices:[],duration:0};return new Solver(t,e).solve()};self.onmessage=t=>{const{id:e,args:s}=t.data;try{const t=solveStaffGroup(s[0],s[1]);self.postMessage({id:e,result:t})}catch(t){self.postMessage({id:e,error:t.message})}},console.info("%cstarry-omr%c v1.0.0 2026-05-05T13:56:42.068Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;")})(); +(function(module){(function(){var root="object"==typeof window?window:{},NODE_JS=!root.JS_SHA1_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS&&(root=global);var COMMON_JS=!root.JS_SHA1_NO_COMMON_JS&&module.exports,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[-2147483648,8388608,32768,128],SHIFT=[24,16,8,0],OUTPUT_TYPES=["hex","array","digest","arrayBuffer"],blocks=[],createOutputMethod=function(t){return function(e){return new Sha1(!0).update(e)[t]()}},createMethod=function(){var t=createOutputMethod("hex");NODE_JS&&(t=nodeWrap(t)),t.create=function(){return new Sha1},t.update=function(e){return t.create().update(e)};for(var e=0;e>2]|=t[n]<>2]|=s<>2]|=(192|s>>6)<>2]|=(128|63&s)<=57344?(o[i>>2]|=(224|s>>12)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<>2]|=(240|s>>18)<>2]|=(128|s>>12&63)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<=64?(this.block=o[16],this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this}},Sha1.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,e=this.lastByteIndex;t[16]=this.block,t[e>>2]|=EXTRA[3&e],this.block=t[16],e>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},Sha1.prototype.hash=function(){var t,e,s=this.h0,i=this.h1,n=this.h2,r=this.h3,o=this.h4,a=this.blocks;for(t=16;t<80;++t)e=a[t-3]^a[t-8]^a[t-14]^a[t-16],a[t]=e<<1|e>>>31;for(t=0;t<20;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i&n|~i&r)+o+1518500249+a[t]|0)<<5|o>>>27)+(s&(i=i<<30|i>>>2)|~s&n)+r+1518500249+a[t+1]|0)<<5|r>>>27)+(o&(s=s<<30|s>>>2)|~o&i)+n+1518500249+a[t+2]|0)<<5|n>>>27)+(r&(o=o<<30|o>>>2)|~r&s)+i+1518500249+a[t+3]|0)<<5|i>>>27)+(n&(r=r<<30|r>>>2)|~n&o)+s+1518500249+a[t+4]|0,n=n<<30|n>>>2;for(;t<40;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i^n^r)+o+1859775393+a[t]|0)<<5|o>>>27)+(s^(i=i<<30|i>>>2)^n)+r+1859775393+a[t+1]|0)<<5|r>>>27)+(o^(s=s<<30|s>>>2)^i)+n+1859775393+a[t+2]|0)<<5|n>>>27)+(r^(o=o<<30|o>>>2)^s)+i+1859775393+a[t+3]|0)<<5|i>>>27)+(n^(r=r<<30|r>>>2)^o)+s+1859775393+a[t+4]|0,n=n<<30|n>>>2;for(;t<60;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i&n|i&r|n&r)+o-1894007588+a[t]|0)<<5|o>>>27)+(s&(i=i<<30|i>>>2)|s&n|i&n)+r-1894007588+a[t+1]|0)<<5|r>>>27)+(o&(s=s<<30|s>>>2)|o&i|s&i)+n-1894007588+a[t+2]|0)<<5|n>>>27)+(r&(o=o<<30|o>>>2)|r&s|o&s)+i-1894007588+a[t+3]|0)<<5|i>>>27)+(n&(r=r<<30|r>>>2)|n&o|r&o)+s-1894007588+a[t+4]|0,n=n<<30|n>>>2;for(;t<80;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i^n^r)+o-899497514+a[t]|0)<<5|o>>>27)+(s^(i=i<<30|i>>>2)^n)+r-899497514+a[t+1]|0)<<5|r>>>27)+(o^(s=s<<30|s>>>2)^i)+n-899497514+a[t+2]|0)<<5|n>>>27)+(r^(o=o<<30|o>>>2)^s)+i-899497514+a[t+3]|0)<<5|i>>>27)+(n^(r=r<<30|r>>>2)^o)+s-899497514+a[t+4]|0,n=n<<30|n>>>2;this.h0=this.h0+s|0,this.h1=this.h1+i|0,this.h2=this.h2+n|0,this.h3=this.h3+r|0,this.h4=this.h4+o|0},Sha1.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,s=this.h2,i=this.h3,n=this.h4;return HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[s>>28&15]+HEX_CHARS[s>>24&15]+HEX_CHARS[s>>20&15]+HEX_CHARS[s>>16&15]+HEX_CHARS[s>>12&15]+HEX_CHARS[s>>8&15]+HEX_CHARS[s>>4&15]+HEX_CHARS[15&s]+HEX_CHARS[i>>28&15]+HEX_CHARS[i>>24&15]+HEX_CHARS[i>>20&15]+HEX_CHARS[i>>16&15]+HEX_CHARS[i>>12&15]+HEX_CHARS[i>>8&15]+HEX_CHARS[i>>4&15]+HEX_CHARS[15&i]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]},Sha1.prototype.toString=Sha1.prototype.hex,Sha1.prototype.digest=function(){this.finalize();var t=this.h0,e=this.h1,s=this.h2,i=this.h3,n=this.h4;return[t>>24&255,t>>16&255,t>>8&255,255&t,e>>24&255,e>>16&255,e>>8&255,255&e,s>>24&255,s>>16&255,s>>8&255,255&s,i>>24&255,i>>16&255,i>>8&255,255&i,n>>24&255,n>>16&255,n>>8&255,255&n]},Sha1.prototype.array=Sha1.prototype.digest,Sha1.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(20),e=new DataView(t);return e.setUint32(0,this.h0),e.setUint32(4,this.h1),e.setUint32(8,this.h2),e.setUint32(12,this.h3),e.setUint32(16,this.h4),t};var exports=createMethod();COMMON_JS?module.exports=exports:root.sha1=exports})()})(sha1),function(t){t.ClefG="ClefG",t.ClefF="ClefF",t.ClefC="ClefC",t.NoteheadS0="NoteheadS0",t.NoteheadS1="NoteheadS1",t.NoteheadS2="NoteheadS2",t.NoteheadS1stemU="NoteheadS1stemU",t.NoteheadS1stemD="NoteheadS1stemD",t.NoteheadS2stemU="NoteheadS2stemU",t.NoteheadS2stemD="NoteheadS2stemD",t.vline_Stem="vline_Stem",t.Flag3="Flag3",t.BeamLeft="BeamLeft",t.BeamContinue="BeamContinue",t.BeamRight="BeamRight",t.TremoloLeft="TremoloLeft",t.TremoloRight="TremoloRight",t.TremoloMiddle="TremoloMiddle",t.Dot="Dot",t.Rest0="Rest0",t.Rest1="Rest1",t.Rest2="Rest2",t.Rest3="Rest3",t.Rest4="Rest4",t.Rest5="Rest5",t.Rest6="Rest6",t.Rest0W="Rest0W",t.RestM1="RestM1",t.AccNatural="AccNatural",t.AccSharp="AccSharp",t.AccDoublesharp="AccDoublesharp",t.AccFlat="AccFlat",t.AccFlatflat="AccFlatflat",t.vline_VoltaLeft="vline_VoltaLeft",t.vline_VoltaRight="vline_VoltaRight",t.VoltaLeft="VoltaLeft",t.VoltaRight="VoltaRight",t.VoltaAlternativeBegin="VoltaAlternativeBegin",t.BarMeasure="BarMeasure",t.vline_BarMeasure="vline_BarMeasure",t.vline_BarTerminal="vline_BarTerminal",t.vline_BarSegment="vline_BarSegment",t.SlurBegin="SlurBegin",t.SlurEnd="SlurEnd",t.TimesigC44="TimesigC44",t.TimesigC22="TimesigC22",t.TimesigZero="TimesigZero",t.TimesigOne="TimesigOne",t.TimesigTwo="TimesigTwo",t.TimesigThree="TimesigThree",t.TimesigFour="TimesigFour",t.TimesigFive="TimesigFive",t.TimesigSix="TimesigSix",t.TimesigSeven="TimesigSeven",t.TimesigEight="TimesigEight",t.TimesigNine="TimesigNine",t.OctaveShift8va="OctaveShift8va",t.OctaveShift8vb="OctaveShift8vb",t.OctaveShift8="OctaveShift8",t.OctaveShift0="OctaveShift0",t.Zero="Zero",t.One="One",t.Two="Two",t.Three="Three",t.Four="Four",t.Five="Five",t.Six="Six",t.Seven="Seven",t.Eight="Eight",t.Nine="Nine",t.f="f",t.p="p",t.m="m",t.n="n",t.r="r",t.s="s",t.z="z",t.CrescendoBegin="CrescendoBegin",t.CrescendoEnd="CrescendoEnd",t.DecrescendoBegin="DecrescendoBegin",t.DecrescendoEnd="DecrescendoEnd",t.ScriptFermata="ScriptFermata",t.ScriptShortFermata="ScriptShortFermata",t.ScriptSforzato="ScriptSforzato",t.ScriptStaccato="ScriptStaccato",t.ScriptStaccatissimo="ScriptStaccatissimo",t.ScriptTurn="ScriptTurn",t.ScriptTrill="ScriptTrill",t.ScriptSegno="ScriptSegno",t.ScriptCoda="ScriptCoda",t.ScriptArpeggio="ScriptArpeggio",t.ScriptPrall="ScriptPrall",t.ScriptMordent="ScriptMordent",t.ScriptMarcato="ScriptMarcato",t.ScriptTenuto="ScriptTenuto",t.ScriptPortato="ScriptPortato",t.PedalStar="PedalStar",t.PedalPed="PedalPed",t.KeyAcc="KeyAcc",t.TempoNotehead="TempoNotehead",t.GraceNotehead="GraceNotehead",t.SignLined="SignLined",t.SignInterval="SignInterval",t.rect_Text="rect_Text",t.rect_Lyric="rect_Lyric"}(SemanticType||(SemanticType={})),SemanticType.BarMeasure,SemanticType.vline_BarMeasure,SemanticType.vline_BarTerminal,SemanticType.vline_BarSegment,SemanticType.vline_VoltaLeft,SemanticType.vline_VoltaRight,SemanticType.VoltaAlternativeBegin;const st=SemanticType;st.NoteheadS0,st.NoteheadS1,st.NoteheadS2,st.Zero,st.One,st.Two,st.Three,st.Four,st.Five,st.Six,st.Seven,st.Eight,st.Nine,st.ScriptStaccatissimo,st.TimesigZero,st.TimesigOne,st.TimesigTwo,st.TimesigThree,st.TimesigFour,st.TimesigFive,st.TimesigSix,st.TimesigSeven,st.TimesigEight,st.TimesigNine,st.Rest0,st.Rest1,st.Rest2,st.Rest3,st.Rest4,st.Rest5,st.Rest6,st.Rest0W,st.RestM1,st.SignInterval,st.SignLined,st.BeamLeft,st.BeamContinue,st.BeamRight,st.ClefG,st.ClefF,st.ClefC,st.NoteheadS0,st.NoteheadS1,st.NoteheadS2,st.Dot,st.Rest0,st.Rest1,st.Rest2,st.Rest3,st.Rest4,st.Rest5,st.Rest6,st.RestM1,st.AccNatural,st.AccSharp,st.AccDoublesharp,st.AccFlat,st.AccFlatflat,st.TimesigC44,st.TimesigC22,st.TimesigZero,st.TimesigOne,st.TimesigTwo,st.TimesigThree,st.TimesigFour,st.TimesigFive,st.TimesigSix,st.TimesigSeven,st.TimesigEight,st.TimesigNine,st.One,st.Two,st.Three,st.Four,st.Five,st.OctaveShift8,st.OctaveShift0,st.f,st.p,st.m,st.n,st.r,st.s,st.z,st.ScriptFermata,st.ScriptShortFermata,st.ScriptSforzato,st.ScriptStaccato,st.ScriptStaccatissimo,st.ScriptTurn,st.ScriptTrill,st.ScriptSegno,st.ScriptCoda,st.ScriptArpeggio,st.ScriptPrall,st.ScriptMordent,st.ScriptMarcato,st.ScriptTenuto,st.ScriptPortato,st.PedalStar,st.PedalPed;const roundNumber=(t,e,s=-1/0)=>Math.max(Math.round(t/e)*e,s),gcd=(t,e)=>Number.isInteger(t)&&Number.isInteger(e)?0===e?t:gcd(e,t%e):(console.error("non-integer gcd:",t,e),1),frac=(t,e)=>({numerator:t,denominator:e}),reducedFraction=(t,e)=>{t=Math.round(t),e=Math.round(e);const s=0!==t?gcd(t,e):e;return frac(t/s,e/s)},fractionMul=(t,e)=>e?t*e.numerator/e.denominator:t;class DummyLogger{debug(...t){}group(...t){}groupCollapsed(...t){}groupEnd(){}info(...t){}warn(...t){}assert(...t){}}const EOM=-1,GREAT_NUMBER=1920,DURATION_MULTIPLIER=1921920,floatToFrac=t=>{const e=Math.round(t*GREAT_NUMBER);return reducedFraction(e,GREAT_NUMBER)},floatToTimeWarp=t=>1===t?null:floatToFrac(t);var ActionType;!function(t){t[t.PLACE=0]="PLACE",t[t.VERTICAL=1]="VERTICAL",t[t.HORIZONTAL=2]="HORIZONTAL"}(ActionType||(ActionType={}));class Action{constructor(t){Object.assign(this,t)}static P(t){return new Action({type:ActionType.PLACE,e1:t})}static V(t,e,s=1){return new Action({type:ActionType.VERTICAL,e1:s>0?t:e,e2:s>0?e:t})}static H(t,e){return new Action({type:ActionType.HORIZONTAL,e1:t,e2:e})}get id(){switch(this.type){case ActionType.PLACE:return this.e1.toString();case ActionType.VERTICAL:return`${this.e1}|${this.e2}`;case ActionType.HORIZONTAL:return`${this.e1}-${this.e2>=0?this.e2:"."}`}}get events(){return[this.e1,this.e2].filter(Number.isFinite)}}class StageMatrix{static fromNode(t,e){const s=Array(t.stages.length).fill(null).map(()=>Array(t.stages.length).fill(null).map(()=>new Set));t.actions.filter(t=>t.type===ActionType.HORIZONTAL).forEach(e=>{const i=t.stages.findIndex(t=>t.events.includes(e.e1)),n=t.stages.findIndex(t=>t.events.includes(e.e2));console.assert(i>=0&&n>=0,"invalid stages for H action:",t.id,t.stages,e),s[i][n].add(e.e1)}),s[0][t.stages.length-1].add(0);const i=t.stagedEvents,n=e.matrixH[e.matrixH.length-1].filter((t,e)=>!i.has(e)),r=Math.max(0,Math.max(...n)-.01),o=t.actions.filter(t=>t.type===ActionType.HORIZONTAL),a=Object.keys(e.eventMap).map(Number).filter(t=>!o.find(e=>e.e2===t));return t.stages.forEach(i=>{i.events.forEach(n=>{if(n>0){!o.find(t=>t.e1===n)&&e.matrixH[e.matrixH.length-1][n]>=r&&(a.some(t=>e.matrixH[t][n]>0)||s[i.index][t.stages.length-1].add(n))}})}),new StageMatrix({matrix:s})}constructor(t){Object.assign(this,t)}pathOf(t,e,s,i=0){if(this.matrix[t][e].size){const n=[...this.matrix[t][e]][i];if(e===s)return[n];for(let t=e+1;t<=s;++t){const i=this.pathOf(e,t,s);if(i)return[n,...i]}}return null}findDoublePath(t,e){const s=[];for(let i=e;i>=t+1;--i)for(let n=0;ne.forEach(e=>t.forEach(t=>e.delete(t))))}toEquations(t){const e=[];for(let s=1;sr[t]=1),n.forEach(t=>r[t]=-1),e.push(r),this.reducePath(i.length>n.length?i:n)}}}return e}}class PathNode{constructor(t){Object.assign(this,t),console.assert(this.logger,"logger is null:",t)}get actions(){const t=this.parent?this.parent.actions:[];return this.action?[...t,this.action]:t}get id(){return this.actions.map(t=>t.id).sort().join(" ")}get stagedEvents(){const t=new Set;return this.stages&&this.stages.forEach(e=>e.events.forEach(e=>e>=0&&t.add(e))),t}like(t){return t.split(" ").sort().join(" ")===this.id}constructStages(t){this.stages=[{events:[EOM]}];for(const e of this.actions)switch(e.type){case ActionType.PLACE:this.stages.unshift({events:[e.e1]});break;case ActionType.VERTICAL:{const t=this.stages.find(t=>t.events.includes(e.e1)),s=this.stages.find(t=>t.events.includes(e.e2));console.assert(t||s,"invalid V action:",this.stages,e),t&&s?(t.events.push(...s.events),s.events=null,this.stages=this.stages.filter(t=>t.events)):t?s||t.events.push(e.e2):s.events.unshift(e.e1)}break;case ActionType.HORIZONTAL:{const s=this.stages.find(t=>t.events.includes(e.e1)),i=this.stages.find(t=>t.events.includes(e.e2));console.assert(s||i,"invalid H action:",this.stages,e);const n=s=>{console.assert(t.eventMap[s],"invalid event id:",e.id,s,t.eventMap);const i=t.eventMap[s].x,n=this.stages.find(e=>e.events.some(e=>e>0&&t.eventMap[e].x<=i)&&e.events.some(e=>e>0&&t.eventMap[e].x>=i));if(n)n.events.push(s);else{const e={events:[s]},n=this.stages.findIndex(e=>e.events[0]===EOM||t.eventMap[e.events[0]].x>=i);this.stages.splice(n,0,e)}};s||n(e.e1),i||n(e.e2)}}this.stages.forEach((t,e)=>t.index=e)}constructConstraints(t){const e=Object.keys(t.eventMap).length,s=StageMatrix.fromNode(this,t).toEquations(e),i=Array(e).fill(null).map((e,s)=>t.eventMap[s].duration);this.constraints=s.map(t=>t.map((t,e)=>t*i[e]))}inbalancesConstraints(t){console.assert(this.constraints,"constraints not constructed.");const e=Object.keys(t.eventMap).length,s=Array(e).fill(!0),i=Array(e).fill(!1),n=[];for(const t of this.constraints){const e=t.reduce((t,e)=>t+e,0);if(0!==e){const r=e<0?t.map(t=>-t):t;if(r[0]>0)continue;n.push(r),r.forEach((t,e)=>{i[e]=i[e]||t<0,t&&(s[e]=t<0||i[e])})}}return this.constraints.forEach(t=>{0!==t.reduce((t,e)=>t+e,0)||t[0]||t.some((t,e)=>t&&!s[e])&&(t.forEach((t,e)=>t&&(s[e]=!1)),n.push(t))}),{ones:s,inbalances:n}}solveEquations({ones:t,inbalances:e}){if(!e.length)return t.map(()=>1);const s=t.map((t,e)=>({fixed:t,i:e})).filter(({fixed:t})=>!t).map(({i:t})=>t).filter(t=>e.some(e=>0!==e[t]));if(!s.length)return t.map(()=>1);const i=s.map(t=>Math.abs(e.find(e=>0!==e[t])[t])),n=new Map;let r=!1;const o=e.map(t=>({line:t.filter((t,e)=>s.includes(e)),bias:-t.reduce((t,e,i)=>t+(s.includes(i)?0:e),0)})).filter(({line:t,bias:e})=>{if(t.every(t=>0===t))return!1;const s=t.join(",");return n.has(s)?(r=n.get(s)!==e,!1):(n.set(s,e),!0)});if(r)return null;const a=o.slice(0,s.length),c=o.slice(s.length);if(a.lengths===e?1:s===n?-1:0),bias:0,prior:(i[e]+i[n])/DURATION_MULTIPLIER};a.some(t=>t.line[e]&&t.line[n])&&(r.prior-=10),a.some(t=>1===t.line.filter(Number).length&&(t.line[e]||t.line[n]))&&(r.prior+=1),t.push(r)}t.sort((t,e)=>t.prior-e.prior),a.push(...t.slice(0,s.length-a.length))}const h=a.map(({line:t})=>t),l=a.map(({bias:t})=>t),u=matrixInverse(h);if(!u)return this.logger.warn("null invert:",h),null;const d=u.map(t=>t.reduce((t,e,s)=>t+e*l[s],0));if(c.length&&c.some(t=>Math.abs(t.line.reduce((t,e,s)=>t+e*d[s],0))>.001))return null;const f=t.map(()=>1);return s.forEach((t,e)=>f[t]=d[e]),f}optimallySolve(t){const{ones:e,inbalances:s}=this.inbalancesConstraints(t),i=e.map((e,s)=>e?-1:roundNumber(t.eventMap[s].shrinkness,.01)).reduce((t,e,s)=>(e>=0&&(t[e]=t[e]||[],t[e].push(s)),t),{}),n=Object.entries(i).sort((t,e)=>Number(e[0])-Number(t[0])).map(t=>t[1]);for(let i=1;i!r.includes(e)),a=this.solveEquations({ones:o,inbalances:s});if(a&&a.every((e,s)=>e<=1&&e>t.eventMap[s].lowWarp))return a}return this.solveEquations({ones:e,inbalances:s})}isConflicted(t){const{ones:e,inbalances:s}=this.inbalancesConstraints(t);for(const i of s){if(i.reduce((s,i,n)=>s+i*(e[n]||i<=0?1:t.eventMap[n].lowWarp),0)>=0)return i.forEach((e,s)=>{e&&(t.eventTendencies[s]+=e>0?1:-1)}),!0}if(!s.length)return!1;const i=this.solveEquations({ones:e,inbalances:s});return!i||!i.every((e,s)=>e>t.eventMap[s].lowWarp&&e<=1)}getSolution(t){const e=e=>t.eventMap[e.e2]?t.eventMap[e.e2].x+.06*Math.abs(t.eventMap[e.e2].x-t.eventMap[e.e1].x):t.eventMap[e.e1].x+1e4,s=this.actions.filter(t=>t.type===ActionType.HORIZONTAL).sort((t,s)=>e(t)-e(s)),i=s.reduce((t,e)=>({...t,[e.e1]:e.e2}),{}),n=new Set([...Object.keys(i)].map(Number));s.forEach(t=>n.delete(t.e2)),this.stages[0].events.forEach(t=>t>0&&n.add(t));let r=[...n].map(t=>{const e=[t];let s=t;for(;i[s]&&(s=i[s],!(s<0||e.includes(s)));)e.push(s);return e});const o=Object.values(t.eventMap).filter(t=>t.id>0).map(t=>({id:t.id,tick:null,endTick:null,tickGroup:null,timeWarp:null})),a=o.filter(t=>r.some(e=>e.includes(t.id))||s.some(e=>[e.e1,e.e2].includes(t.id))).reduce((t,e)=>({...t,[e.id]:e}),{});this.stages.forEach((t,e)=>t.events.forEach(t=>a[t]&&(a[t].tickGroup=e))),this.stages[0].tick=0,this.stages[0].events.forEach(t=>a[t]&&(a[t].tick=0));const c=this.optimallySolve(t);o.forEach(t=>t.timeWarp=floatToTimeWarp(c[t.id]));const h=this.stages.slice(0,this.stages.length-1),l=()=>{if(h.every(t=>Number.isFinite(t.tick)))return!1;let e=!1;return s.forEach(s=>{const i=this.stages.find(t=>t.events.includes(s.e1)),n=this.stages.find(t=>t.events.includes(s.e2));Number.isFinite(i.tick)&&!Number.isFinite(n.tick)&&(n.tick=i.tick+fractionMul(t.eventMap[s.e1].duration,a[s.e1].timeWarp),n.events.forEach(t=>a[t]&&(a[t].tick=n.tick)),e=!0)}),[...s].reverse().forEach(s=>{const i=this.stages.find(t=>t.events.includes(s.e1)),n=this.stages.find(t=>t.events.includes(s.e2));!Number.isFinite(i.tick)&&Number.isFinite(n.tick)&&(i.tick=n.tick-fractionMul(t.eventMap[s.e1].duration,a[s.e1].timeWarp),i.events.forEach(t=>a[t]&&(a[t].tick=i.tick)),e=!0)}),e};for(;l(););console.assert(h.every(t=>Number.isFinite(t.tick)),"stage ticks not all solved:",this.stages,this.id),o.filter(t=>Number.isFinite(t.tick)).forEach(e=>e.endTick=e.tick+fractionMul(t.eventMap[e.id].duration,e.timeWarp));const u=t.eventMap[0].duration;r.forEach(t=>{const e=t.findIndex(t=>a[t].endTick>u);if(e>=0){t.splice(e,t.length-e).forEach(t=>{a[t].tick=null,a[t].endTick=null})}}),r=r.filter(t=>t.length);const d=Math.max(0,...o.map(t=>t.endTick).filter(Number.isFinite));return this.logger.debug(String.fromCodePoint(127822),this.id,c),{voices:r,events:o,duration:d,actions:this.actions.map(t=>t.id).join(" ")}}deduce(t,e){this.stages||this.constructStages(t);const s=t.actionAccessing.get(this.id)||{times:0};if(++s.times,t.actionAccessing.set(this.id,s),this.constructConstraints(t),this.isConflicted(t))return s.closed=!0,this.logger.info(this.action.id,"❌"),null;if(this.logger.group(this.action&&this.action.id),e.credits>0){if(--e.credits,this.children||this.expand(t),this.children=this.children.filter(e=>!t.actionAccessing.get(e.id)||!t.actionAccessing.get(e.id).closed),this.children.length){const s=e=>e.possibility/((t.actionAccessing.get(e.id)||{times:0}).times+1);this.children.sort((t,e)=>s(e)-s(t));for(const s of this.children){const i=s.deduce(t,e);if(i)return this.logger.groupEnd(),i;if(e.credits<=0)break}}}else this.logger.debug("quota exhausted.");return this.logger.groupEnd(),s.closed=!0,this.getSolution(t)}expand(t){this.constructStages(t);const{eventMap:e,matrixV:s,matrixH:i}=t,n=this.stagedEvents,r=[],o=t=>{if(!this.actions.some(e=>e.id===t.action.id)&&!r.some(e=>e.action.id===t.action.id)){const e=this.stages.find(e=>e.events.includes(t.action.e1)),i=this.stages.find(e=>e.events.includes(t.action.e2));if(e===i||e&&i&&e.index>=i.index)return;if(e&&i)if(t.action.type===ActionType.VERTICAL){if(i.index-e.index>1)return;if(this.actions.some(t=>e.events.includes(t.e1)&&i.events.includes(t.e2)))return}else if(t.action.type===ActionType.HORIZONTAL&&e.index>i.index)return;if(t.action.type===ActionType.HORIZONTAL&&this.actions.some(e=>e.type===ActionType.HORIZONTAL&&(e.e1===t.action.e1||e.e2===t.action.e2||e.e1===t.action.e2&&e.e2===t.action.e1)))return;if(t.action.type===ActionType.VERTICAL){if(e&&(t.possibility=Math.min(t.possibility,...e.events.map(e=>s[t.action.e2][e])),t.possibility<=0))return;if(i&&(t.possibility=Math.min(t.possibility,...i.events.map(e=>s[e][t.action.e1])),t.possibility<=0))return}r.push(t)}};for(const t of n)t<0||(s[t].forEach((e,s)=>{e>0&&t!==s&&o({action:Action.V(s,t),possibility:e})}),s.forEach((e,s)=>{const i=e[t];i>0&&o({action:Action.V(t,s),possibility:i})}),i[t].forEach((e,s)=>{e>0&&o({action:Action.H(s,t),possibility:e})}),i.forEach((s,i)=>{i=i>=Object.keys(e).length?-1:i;const n=s[t];n>0&&o({action:Action.H(t,i),possibility:n})}));r.some(t=>[ActionType.HORIZONTAL,ActionType.PLACE].includes(t.action.type)||!n.has(t.action.e1)||!n.has(t.action.e2))?this.children=r.map(t=>new PathNode({logger:this.logger,parent:this,...t})):this.children=[]}}class Solver{constructor(t,{quota:e=1e3,logger:s=new DummyLogger}={}){this.quota=e,this.logger=s;const i={id:0,x:0,confidence:1,shrinkness:t.measureShrinkness,duration:t.expectedDuration,lowWarp:0};this.events=[i,...t.events.map(t=>({id:t.id,x:t.x,confidence:t.confidence,shrinkness:t.shrinkness,staff:t.staff,duration:t.duration,lowWarp:.5}))],this.eventMap=this.events.reduce((t,e)=>({...t,[e.id]:e}),{}),this.matrixH=t.matrixH,this.matrixV=t.matrixV,this.xSpan=t.endX-Math.min(t.endX-1,...t.events.map(t=>t.x)),this.actionAccessing=new Map}solve(){this.pathRoot=new PathNode({logger:this.logger,action:null}),this.pathRoot.children=this.events.slice(1).map(t=>new PathNode({logger:this.logger,parent:this.pathRoot,action:Action.P(t.id),possibility:this.matrixV[t.id].reduce((t,e)=>t+e,0)}));let t=null;this.logger.groupCollapsed("solve");const e=Array(this.events.length).fill(0),s={credits:this.quota,times:0};for(;s.credits>0;){++s.times;const i={eventMap:this.eventMap,matrixH:this.matrixH,matrixV:this.matrixV,actionAccessing:this.actionAccessing,eventTendencies:e},n=this.pathRoot.deduce(i,s);if(n.credits=this.quota-s.credits,n.times=s.times,this.evaluateSolution(n),this.logger.debug("loss:",n.loss),t=!t||n.losst/s.times)),t}evaluateSolution(t){t.loss=0;const e=t.events.reduce((t,e)=>({...t,[e.id]:{...e,...this.eventMap[e.id]}}),{}),s=t.events.filter(t=>Number.isFinite(t.tick)).map(t=>e[t.id]),i=s.reduce((t,e)=>(t[e.staff]=t[e.staff]||[],t[e.staff].push(e),t),{});Object.values(i).forEach(e=>{e.sort((t,e)=>t.x-e.x).slice(0,e.length-1).forEach((s,i)=>{e[i+1].tick{if(Number.isFinite(s.tick)&&!t.voices.every(t=>!t.includes(s.id))||(t.loss+=100*e[s.id].confidence),s.timeWarp){const{numerator:t,denominator:i}=s.timeWarp,r=e[s.id].shrinkness;n.set(t,Math.max(n.get(t)||0,1-r)),n.set(i,Math.max(n.get(i)||0,1-r))}});const r=reducedFraction(t.duration,this.eventMap[0].duration);n.set(r.numerator,Math.max(n.get(r.numerator)||0,1-this.eventMap[0].shrinkness)),n.set(r.denominator,Math.max(n.get(r.denominator)||0,1-this.eventMap[0].shrinkness));for(const[e,s]of n.entries())e>1&&(t.loss+=Math.log(e)*s);let o=0,a=0;t.voices.forEach(s=>{console.assert(e[s[0]],"invalid voice:",s,Object.keys(e));const i=Math.abs(e[s[0]].tick),n=e[s[s.length-1]].endTick;o+=Math.max(0,i+t.duration-n);let r=null;s.forEach(t=>{const s=e[t];s.staff!==r&&(null!==r&&++a,r=s.staff)})}),t.loss+=10*o/DURATION_MULTIPLIER,t.loss+=5**a-1;const c=[...s].sort((t,e)=>t.x-e.x),h=c.slice(1).map((e,s)=>{const i=c[s],n=e.x-i.x,r=e.tick-i.tick;if(!r)return n/this.xSpan;return(4*Math.atan2(r/t.duration,n/this.xSpan)/Math.PI-1)**2}),l=Math.max(...h,0);t.loss+=l**2,console.assert(t.loss>=0,"Invalid solution loss!!!",t.loss,n,o,a),t.loss<0&&(t.loss=1/0)}}const solveStaffGroup=(t,e)=>{if(!t.events.length)return{events:[],voices:[],duration:0};return new Solver(t,e).solve()};self.onmessage=t=>{const{id:e,args:s}=t.data;try{const t=solveStaffGroup(s[0],s[1]);self.postMessage({id:e,result:t})}catch(t){self.postMessage({id:e,error:t.message})}},console.info("%cstarry-omr%c v1.0.0 2026-05-05T14:46:59.925Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;")})(); //# sourceMappingURL=worker.js.map diff --git a/backend/omr/dist/worker.js.map b/backend/omr/dist/worker.js.map index 0994c21cba8244ccf3f435d9c511de0ae67cff35..bafb255e52a48d602fa4d69adb72497cff21b95f 100644 --- a/backend/omr/dist/worker.js.map +++ b/backend/omr/dist/worker.js.map @@ -1 +1 @@ -{"version":3,"file":"worker.js","sources":["../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/semanticPoint.ts","../../../node_modules/js-sha1/src/sha1.js","../../../src/starry/utils.ts","../../../src/starry/logger.ts","../../../src/starry/equationSolver.ts","../../../src/starry/solveStaffGroup.worker.ts","../src/worker.ts"],"sourcesContent":["var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","/*\n * [js-sha1]{@link https://github.com/emn178/js-sha1}\n *\n * @version 0.6.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n/*jslint bitwise: true */\n(function() {\n 'use strict';\n\n var root = typeof window === 'object' ? window : {};\n var NODE_JS = !root.JS_SHA1_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n }\n var COMMON_JS = !root.JS_SHA1_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [-2147483648, 8388608, 32768, 128];\n var SHIFT = [24, 16, 8, 0];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\n\n var blocks = [];\n\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Sha1(true).update(message)[outputType]();\n };\n };\n\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Sha1();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('sha1').update(message, 'utf8').digest('hex');\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (message.length === undefined) {\n return method(message);\n }\n return crypto.createHash('sha1').update(new Buffer(message)).digest('hex');\n };\n return nodeMethod;\n };\n\n function Sha1(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n\n this.h0 = 0x67452301;\n this.h1 = 0xEFCDAB89;\n this.h2 = 0x98BADCFE;\n this.h3 = 0x10325476;\n this.h4 = 0xC3D2E1F0;\n\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n Sha1.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n var notString = typeof(message) !== 'string';\n if (notString && message.constructor === root.ArrayBuffer) {\n message = new Uint8Array(message);\n }\n var code, index = 0, i, length = message.length || 0, blocks = this.blocks;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if(notString) {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.block = blocks[16];\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Sha1.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[16] = this.block;\n blocks[i >> 2] |= EXTRA[i & 3];\n this.block = blocks[16];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n blocks[15] = this.bytes << 3;\n this.hash();\n };\n\n Sha1.prototype.hash = function () {\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4;\n var f, j, t, blocks = this.blocks;\n\n for(j = 16; j < 80; ++j) {\n t = blocks[j - 3] ^ blocks[j - 8] ^ blocks[j - 14] ^ blocks[j - 16];\n blocks[j] = (t << 1) | (t >>> 31);\n }\n\n for(j = 0; j < 20; j += 5) {\n f = (b & c) | ((~b) & d);\n t = (a << 5) | (a >>> 27);\n e = t + f + e + 1518500249 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = (a & b) | ((~a) & c);\n t = (e << 5) | (e >>> 27);\n d = t + f + d + 1518500249 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = (e & a) | ((~e) & b);\n t = (d << 5) | (d >>> 27);\n c = t + f + c + 1518500249 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = (d & e) | ((~d) & a);\n t = (c << 5) | (c >>> 27);\n b = t + f + b + 1518500249 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = (c & d) | ((~c) & e);\n t = (b << 5) | (b >>> 27);\n a = t + f + a + 1518500249 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 40; j += 5) {\n f = b ^ c ^ d;\n t = (a << 5) | (a >>> 27);\n e = t + f + e + 1859775393 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = a ^ b ^ c;\n t = (e << 5) | (e >>> 27);\n d = t + f + d + 1859775393 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = e ^ a ^ b;\n t = (d << 5) | (d >>> 27);\n c = t + f + c + 1859775393 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = d ^ e ^ a;\n t = (c << 5) | (c >>> 27);\n b = t + f + b + 1859775393 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = c ^ d ^ e;\n t = (b << 5) | (b >>> 27);\n a = t + f + a + 1859775393 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 60; j += 5) {\n f = (b & c) | (b & d) | (c & d);\n t = (a << 5) | (a >>> 27);\n e = t + f + e - 1894007588 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = (a & b) | (a & c) | (b & c);\n t = (e << 5) | (e >>> 27);\n d = t + f + d - 1894007588 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = (e & a) | (e & b) | (a & b);\n t = (d << 5) | (d >>> 27);\n c = t + f + c - 1894007588 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = (d & e) | (d & a) | (e & a);\n t = (c << 5) | (c >>> 27);\n b = t + f + b - 1894007588 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = (c & d) | (c & e) | (d & e);\n t = (b << 5) | (b >>> 27);\n a = t + f + a - 1894007588 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 80; j += 5) {\n f = b ^ c ^ d;\n t = (a << 5) | (a >>> 27);\n e = t + f + e - 899497514 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = a ^ b ^ c;\n t = (e << 5) | (e >>> 27);\n d = t + f + d - 899497514 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = e ^ a ^ b;\n t = (d << 5) | (d >>> 27);\n c = t + f + c - 899497514 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = d ^ e ^ a;\n t = (c << 5) | (c >>> 27);\n b = t + f + b - 899497514 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = c ^ d ^ e;\n t = (b << 5) | (b >>> 27);\n a = t + f + a - 899497514 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n this.h4 = this.h4 + e << 0;\n };\n\n Sha1.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n return HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\n HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\n HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\n HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F];\n };\n\n Sha1.prototype.toString = Sha1.prototype.hex;\n\n Sha1.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n return [\n (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\n (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\n (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\n (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\n (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF\n ];\n };\n\n Sha1.prototype.array = Sha1.prototype.digest;\n\n Sha1.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(20);\n var dataView = new DataView(buffer);\n dataView.setUint32(0, this.h0);\n dataView.setUint32(4, this.h1);\n dataView.setUint32(8, this.h2);\n dataView.setUint32(12, this.h3);\n dataView.setUint32(16, this.h4);\n return buffer;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n root.sha1 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import * as EquationSolver from './equationSolver';\nimport { EquationPolicy } from './spartitoMeasure';\n\nconst solveStaffGroup = (staffGroup: EquationPolicy.StaffGroup, options: EquationPolicy.RegulatorOptions): EquationPolicy.StaffGroupSolution => {\n\tif (!staffGroup.events.length) {\n\t\treturn {\n\t\t\tevents: [],\n\t\t\tvoices: [],\n\t\t\tduration: 0,\n\t\t};\n\t}\n\n\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\treturn solver.solve();\n};\n\n// Plain postMessage worker (Vite-compatible, no workerpool dependency)\nself.onmessage = (e: MessageEvent) => {\n\tconst { id, args } = e.data;\n\ttry {\n\t\tconst result = solveStaffGroup(args[0], args[1]);\n\t\tself.postMessage({ id, result });\n\t} catch (error: any) {\n\t\tself.postMessage({ id, error: error.message });\n\t}\n};\n","console.info(`%cstarry-omr%c v1.0.0 2026-05-05T13:56:42.068Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../../src/starry/solveStaffGroup.worker';\n"],"names":["Sylvester","Matrix","create","elements","setElements","I","n","j","els","i","prototype","dup","this","isSquare","cols","length","toRightTriangular","p","M","np","push","multiplier","determinant","det","isSingular","augment","matrix","T","nj","inverse","divisor","new_element","inverse_elements","matrixInverse","mat","SemanticType","root","window","NODE_JS","JS_SHA1_NO_NODE_JS","process","versions","node","global","COMMON_JS","JS_SHA1_NO_COMMON_JS","module","exports","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","blocks","createOutputMethod","outputType","message","Sha1","update","createMethod","method","nodeWrap","type","crypto","eval","Buffer","nodeMethod","createHash","digest","constructor","ArrayBuffer","Uint8Array","undefined","sharedMemory","h0","h1","h2","h3","h4","block","start","bytes","hBytes","finalized","hashed","first","notString","code","index","charCodeAt","lastByteIndex","hash","finalize","t","a","b","c","d","e","hex","toString","array","arrayBuffer","buffer","dataView","DataView","setUint32","sha1","BarMeasure","vline_BarMeasure","vline_BarTerminal","vline_BarSegment","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","st","NoteheadS0","NoteheadS1","NoteheadS2","Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","ScriptStaccatissimo","TimesigZero","TimesigOne","TimesigTwo","TimesigThree","TimesigFour","TimesigFive","TimesigSix","TimesigSeven","TimesigEight","TimesigNine","Rest0","Rest1","Rest2","Rest3","Rest4","Rest5","Rest6","Rest0W","RestM1","SignInterval","SignLined","BeamLeft","BeamContinue","BeamRight","ClefG","ClefF","ClefC","Dot","AccNatural","AccSharp","AccDoublesharp","AccFlat","AccFlatflat","TimesigC44","TimesigC22","OctaveShift8","OctaveShift0","f","m","r","s","z","ScriptFermata","ScriptShortFermata","ScriptSforzato","ScriptStaccato","ScriptTurn","ScriptTrill","ScriptSegno","ScriptCoda","ScriptArpeggio","ScriptPrall","ScriptMordent","ScriptMarcato","ScriptTenuto","ScriptPortato","PedalStar","PedalPed","roundNumber","x","precision","min","Infinity","Math","max","round","gcd","Number","isInteger","console","error","frac","numerator","denominator","reducedFraction","g","fractionMul","value","fraction","DummyLogger","debug","_","group","groupCollapsed","groupEnd","info","warn","assert","EOM","GREAT_NUMBER","DURATION_MULTIPLIER","floatToFrac","floatToTimeWarp","ActionType","Action","data","Object","assign","P","PLACE","e1","V","e2","order","VERTICAL","H","HORIZONTAL","id","events","filter","isFinite","StageMatrix","fromNode","status","Array","stages","fill","map","Set","actions","action","forEach","stage1","findIndex","stage","includes","stage2","add","stagedEvents","endHs","matrixH","has","endHP","hActions","pendingHeads","keys","eventMap","eid","find","some","pathOf","y","target","ei","size","yy","sub","findDoublePath","s1","s2","paths","path","reducePath","column","set","delete","toEquations","eventCount","equations","path1","path2","equation","PathNode","logger","last","parent","sort","join","like","ids","constructStages","unshift","newStage","si","splice","constructConstraints","factors","duration","constraints","it","inbalancesConstraints","ones","fixed","inbalances","constraint","sum","reduce","solveEquations","xis","items","abs","equationMap","Map","conflicted","lines","line","bias","every","get","squareLines","slice","restLines","candidateLines","i1","i2","prior","sl","c1","c2","invert","solution","row","result","xi","optimallySolve","shrinkMap","shrinkness","groups","entries","p1","p2","pair","released","releasedIds","concat","warps","lowWarp","isConflicted","eventTendencies","timeWarps","getSolution","actionKey","hacts","a1","a2","hmap","act","startEs","voices","se","voice","values","tick","endTick","tickGroup","timeWarp","estages","solveStages","changed","reverse","event","measureDuration","outEI","String","fromCodePoint","deduce","quota","access","actionAccessing","times","closed","credits","children","expand","possibility","n1","n2","child","matrixV","branches","appendBranch","branch","ps","Solver","env","event0","confidence","measureShrinkness","expectedDuration","staff","xSpan","endX","solve","pathRoot","bestSolution","evaluateSolution","loss","sevents","es","partialFrac","weight","log","spaceTime","staffAlters","end","eventsXOrder","tickTwists","dx","dt","atan2","PI","tickTwist","solveStaffGroup","staffGroup","options","EquationSolver.Solver","self","onmessage","args","postMessage"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"worker.js","sources":["../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/semanticPoint.ts","../../../node_modules/js-sha1/src/sha1.js","../../../src/starry/utils.ts","../../../src/starry/logger.ts","../../../src/starry/equationSolver.ts","../../../src/starry/solveStaffGroup.worker.ts","../src/worker.ts"],"sourcesContent":["var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","/*\n * [js-sha1]{@link https://github.com/emn178/js-sha1}\n *\n * @version 0.6.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n/*jslint bitwise: true */\n(function() {\n 'use strict';\n\n var root = typeof window === 'object' ? window : {};\n var NODE_JS = !root.JS_SHA1_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n }\n var COMMON_JS = !root.JS_SHA1_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [-2147483648, 8388608, 32768, 128];\n var SHIFT = [24, 16, 8, 0];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\n\n var blocks = [];\n\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Sha1(true).update(message)[outputType]();\n };\n };\n\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Sha1();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('sha1').update(message, 'utf8').digest('hex');\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (message.length === undefined) {\n return method(message);\n }\n return crypto.createHash('sha1').update(new Buffer(message)).digest('hex');\n };\n return nodeMethod;\n };\n\n function Sha1(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n\n this.h0 = 0x67452301;\n this.h1 = 0xEFCDAB89;\n this.h2 = 0x98BADCFE;\n this.h3 = 0x10325476;\n this.h4 = 0xC3D2E1F0;\n\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n Sha1.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n var notString = typeof(message) !== 'string';\n if (notString && message.constructor === root.ArrayBuffer) {\n message = new Uint8Array(message);\n }\n var code, index = 0, i, length = message.length || 0, blocks = this.blocks;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if(notString) {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.block = blocks[16];\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Sha1.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[16] = this.block;\n blocks[i >> 2] |= EXTRA[i & 3];\n this.block = blocks[16];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n blocks[15] = this.bytes << 3;\n this.hash();\n };\n\n Sha1.prototype.hash = function () {\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4;\n var f, j, t, blocks = this.blocks;\n\n for(j = 16; j < 80; ++j) {\n t = blocks[j - 3] ^ blocks[j - 8] ^ blocks[j - 14] ^ blocks[j - 16];\n blocks[j] = (t << 1) | (t >>> 31);\n }\n\n for(j = 0; j < 20; j += 5) {\n f = (b & c) | ((~b) & d);\n t = (a << 5) | (a >>> 27);\n e = t + f + e + 1518500249 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = (a & b) | ((~a) & c);\n t = (e << 5) | (e >>> 27);\n d = t + f + d + 1518500249 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = (e & a) | ((~e) & b);\n t = (d << 5) | (d >>> 27);\n c = t + f + c + 1518500249 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = (d & e) | ((~d) & a);\n t = (c << 5) | (c >>> 27);\n b = t + f + b + 1518500249 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = (c & d) | ((~c) & e);\n t = (b << 5) | (b >>> 27);\n a = t + f + a + 1518500249 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 40; j += 5) {\n f = b ^ c ^ d;\n t = (a << 5) | (a >>> 27);\n e = t + f + e + 1859775393 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = a ^ b ^ c;\n t = (e << 5) | (e >>> 27);\n d = t + f + d + 1859775393 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = e ^ a ^ b;\n t = (d << 5) | (d >>> 27);\n c = t + f + c + 1859775393 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = d ^ e ^ a;\n t = (c << 5) | (c >>> 27);\n b = t + f + b + 1859775393 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = c ^ d ^ e;\n t = (b << 5) | (b >>> 27);\n a = t + f + a + 1859775393 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 60; j += 5) {\n f = (b & c) | (b & d) | (c & d);\n t = (a << 5) | (a >>> 27);\n e = t + f + e - 1894007588 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = (a & b) | (a & c) | (b & c);\n t = (e << 5) | (e >>> 27);\n d = t + f + d - 1894007588 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = (e & a) | (e & b) | (a & b);\n t = (d << 5) | (d >>> 27);\n c = t + f + c - 1894007588 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = (d & e) | (d & a) | (e & a);\n t = (c << 5) | (c >>> 27);\n b = t + f + b - 1894007588 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = (c & d) | (c & e) | (d & e);\n t = (b << 5) | (b >>> 27);\n a = t + f + a - 1894007588 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 80; j += 5) {\n f = b ^ c ^ d;\n t = (a << 5) | (a >>> 27);\n e = t + f + e - 899497514 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = a ^ b ^ c;\n t = (e << 5) | (e >>> 27);\n d = t + f + d - 899497514 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = e ^ a ^ b;\n t = (d << 5) | (d >>> 27);\n c = t + f + c - 899497514 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = d ^ e ^ a;\n t = (c << 5) | (c >>> 27);\n b = t + f + b - 899497514 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = c ^ d ^ e;\n t = (b << 5) | (b >>> 27);\n a = t + f + a - 899497514 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n this.h4 = this.h4 + e << 0;\n };\n\n Sha1.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n return HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\n HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\n HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\n HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F];\n };\n\n Sha1.prototype.toString = Sha1.prototype.hex;\n\n Sha1.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n return [\n (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\n (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\n (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\n (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\n (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF\n ];\n };\n\n Sha1.prototype.array = Sha1.prototype.digest;\n\n Sha1.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(20);\n var dataView = new DataView(buffer);\n dataView.setUint32(0, this.h0);\n dataView.setUint32(4, this.h1);\n dataView.setUint32(8, this.h2);\n dataView.setUint32(12, this.h3);\n dataView.setUint32(16, this.h4);\n return buffer;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n root.sha1 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import * as EquationSolver from './equationSolver';\nimport { EquationPolicy } from './spartitoMeasure';\n\nconst solveStaffGroup = (staffGroup: EquationPolicy.StaffGroup, options: EquationPolicy.RegulatorOptions): EquationPolicy.StaffGroupSolution => {\n\tif (!staffGroup.events.length) {\n\t\treturn {\n\t\t\tevents: [],\n\t\t\tvoices: [],\n\t\t\tduration: 0,\n\t\t};\n\t}\n\n\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\treturn solver.solve();\n};\n\n// Plain postMessage worker (Vite-compatible, no workerpool dependency)\nself.onmessage = (e: MessageEvent) => {\n\tconst { id, args } = e.data;\n\ttry {\n\t\tconst result = solveStaffGroup(args[0], args[1]);\n\t\tself.postMessage({ id, result });\n\t} catch (error: any) {\n\t\tself.postMessage({ id, error: error.message });\n\t}\n};\n","console.info(`%cstarry-omr%c v1.0.0 2026-05-05T14:46:59.925Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../../src/starry/solveStaffGroup.worker';\n"],"names":["Sylvester","Matrix","create","elements","setElements","I","n","j","els","i","prototype","dup","this","isSquare","cols","length","toRightTriangular","p","M","np","push","multiplier","determinant","det","isSingular","augment","matrix","T","nj","inverse","divisor","new_element","inverse_elements","matrixInverse","mat","SemanticType","root","window","NODE_JS","JS_SHA1_NO_NODE_JS","process","versions","node","global","COMMON_JS","JS_SHA1_NO_COMMON_JS","module","exports","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","blocks","createOutputMethod","outputType","message","Sha1","update","createMethod","method","nodeWrap","type","crypto","eval","Buffer","nodeMethod","createHash","digest","constructor","ArrayBuffer","Uint8Array","undefined","sharedMemory","h0","h1","h2","h3","h4","block","start","bytes","hBytes","finalized","hashed","first","notString","code","index","charCodeAt","lastByteIndex","hash","finalize","t","a","b","c","d","e","hex","toString","array","arrayBuffer","buffer","dataView","DataView","setUint32","sha1","BarMeasure","vline_BarMeasure","vline_BarTerminal","vline_BarSegment","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","st","NoteheadS0","NoteheadS1","NoteheadS2","Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","ScriptStaccatissimo","TimesigZero","TimesigOne","TimesigTwo","TimesigThree","TimesigFour","TimesigFive","TimesigSix","TimesigSeven","TimesigEight","TimesigNine","Rest0","Rest1","Rest2","Rest3","Rest4","Rest5","Rest6","Rest0W","RestM1","SignInterval","SignLined","BeamLeft","BeamContinue","BeamRight","ClefG","ClefF","ClefC","Dot","AccNatural","AccSharp","AccDoublesharp","AccFlat","AccFlatflat","TimesigC44","TimesigC22","OctaveShift8","OctaveShift0","f","m","r","s","z","ScriptFermata","ScriptShortFermata","ScriptSforzato","ScriptStaccato","ScriptTurn","ScriptTrill","ScriptSegno","ScriptCoda","ScriptArpeggio","ScriptPrall","ScriptMordent","ScriptMarcato","ScriptTenuto","ScriptPortato","PedalStar","PedalPed","roundNumber","x","precision","min","Infinity","Math","max","round","gcd","Number","isInteger","console","error","frac","numerator","denominator","reducedFraction","g","fractionMul","value","fraction","DummyLogger","debug","_","group","groupCollapsed","groupEnd","info","warn","assert","EOM","GREAT_NUMBER","DURATION_MULTIPLIER","floatToFrac","floatToTimeWarp","ActionType","Action","data","Object","assign","P","PLACE","e1","V","e2","order","VERTICAL","H","HORIZONTAL","id","events","filter","isFinite","StageMatrix","fromNode","status","Array","stages","fill","map","Set","actions","action","forEach","stage1","findIndex","stage","includes","stage2","add","stagedEvents","endHs","matrixH","has","endHP","hActions","pendingHeads","keys","eventMap","eid","find","some","pathOf","y","target","ei","size","yy","sub","findDoublePath","s1","s2","paths","path","reducePath","column","set","delete","toEquations","eventCount","equations","path1","path2","equation","PathNode","logger","last","parent","sort","join","like","ids","constructStages","unshift","newStage","si","splice","constructConstraints","factors","duration","constraints","it","inbalancesConstraints","ones","fixed","inbalances","constraint","sum","reduce","solveEquations","xis","items","abs","equationMap","Map","conflicted","lines","line","bias","every","get","squareLines","slice","restLines","candidateLines","i1","i2","prior","sl","c1","c2","invert","solution","row","result","xi","optimallySolve","shrinkMap","shrinkness","groups","entries","p1","p2","pair","released","releasedIds","concat","warps","lowWarp","isConflicted","eventTendencies","timeWarps","getSolution","actionKey","hacts","a1","a2","hmap","act","startEs","voices","se","voice","values","tick","endTick","tickGroup","timeWarp","estages","solveStages","changed","reverse","event","measureDuration","outEI","String","fromCodePoint","deduce","quota","access","actionAccessing","times","closed","credits","children","expand","possibility","n1","n2","child","matrixV","branches","appendBranch","branch","ps","Solver","env","event0","confidence","measureShrinkness","expectedDuration","staff","xSpan","endX","solve","pathRoot","bestSolution","evaluateSolution","loss","sevents","es","partialFrac","weight","log","spaceTime","staffAlters","end","eventsXOrder","tickTwists","dx","dt","atan2","PI","tickTwist","solveStaffGroup","staffGroup","options","EquationSolver.Solver","self","onmessage","args","postMessage"],"mappings":"yBAAA,IAAIA,UAAY,CAEhBA,OAAmB,WAAc,GAEjCA,UAAUC,OAAOC,OAAS,SAAUC,GAElC,OADQ,IAAIH,UAAUC,QACbG,YAAYD,EACvB,EAEAH,UAAUC,OAAOI,EAAI,SAAUC,GAI7B,IAHA,IAEEC,EAFEC,EAAM,GACRC,EAAIH,EAECG,KAGL,IAFAF,EAAID,EACJE,EAAIC,GAAK,GACFF,KACLC,EAAIC,GAAGF,GAAKE,IAAMF,EAAI,EAAI,EAG9B,OAAOP,UAAUC,OAAOC,OAAOM,EACjC,EAEAR,UAAUC,OAAOS,UAAY,CAC3BC,IAAK,WACH,OAAOX,UAAUC,OAAOC,OAAOU,KAAKT,SACrC,EAEDU,SAAU,WACR,IAAIC,EAAgC,IAAzBF,KAAKT,SAASY,OAAe,EAAIH,KAAKT,SAAS,GAAGY,OAC7D,OAAOH,KAAKT,SAASY,SAAWD,CACjC,EAEDE,kBAAmB,WACjB,GAA6B,IAAzBJ,KAAKT,SAASY,OAAc,OAAOf,UAAUC,OAAOC,OAAO,IAC/D,IACEM,EAEAC,EACAF,EAEAU,EANEC,EAAIN,KAAKD,MAETL,EAAIM,KAAKT,SAASY,OAGpBI,EAAKP,KAAKT,SAAS,GAAGY,OAExB,IAAKN,EAAI,EAAGA,EAAIH,EAAGG,IAAK,CACtB,GAAyB,IAArBS,EAAEf,SAASM,GAAGA,GAChB,IAAKF,EAAIE,EAAI,EAAGF,EAAID,EAAGC,IACrB,GAAyB,IAArBW,EAAEf,SAASI,GAAGE,GAAU,CAE1B,IADAD,EAAM,GACDS,EAAI,EAAGA,EAAIE,EAAIF,IAClBT,EAAIY,KAAKF,EAAEf,SAASM,GAAGQ,GAAKC,EAAEf,SAASI,GAAGU,IAE5CC,EAAEf,SAASM,GAAKD,EAChB,KACD,CAGL,GAAyB,IAArBU,EAAEf,SAASM,GAAGA,GAChB,IAAKF,EAAIE,EAAI,EAAGF,EAAID,EAAGC,IAAK,CAC1B,IAAIc,EAAaH,EAAEf,SAASI,GAAGE,GAAKS,EAAEf,SAASM,GAAGA,GAElD,IADAD,EAAM,GACDS,EAAI,EAAGA,EAAIE,EAAIF,IAKlBT,EAAIY,KACFH,GAAKR,EAAI,EAAIS,EAAEf,SAASI,GAAGU,GAAKC,EAAEf,SAASM,GAAGQ,GAAKI,GAGvDH,EAAEf,SAASI,GAAKC,CACjB,CAEJ,CACD,OAAOU,CACR,EAEDI,YAAa,WACX,GAA6B,IAAzBV,KAAKT,SAASY,OAChB,OAAO,EAET,IAAKH,KAAKC,WACR,OAAO,KAKT,IAHA,IAAIK,EAAIN,KAAKI,oBACTO,EAAML,EAAEf,SAAS,GAAG,GACtBG,EAAIY,EAAEf,SAASY,OACRN,EAAI,EAAGA,EAAIH,EAAGG,IACrBc,GAAYL,EAAEf,SAASM,GAAGA,GAE5B,OAAOc,CACR,EAEDC,WAAY,WACV,OAAOZ,KAAKC,YAAqC,IAAvBD,KAAKU,aAChC,EAEDG,QAAS,SAAUC,GACjB,GAA6B,IAAzBd,KAAKT,SAASY,OAChB,OAAOH,KAAKD,MAEd,IAAIO,EAAIQ,EAAOvB,UAAYuB,OACJ,IAAZR,EAAE,GAAG,KACdA,EAAIlB,UAAUC,OAAOC,OAAOgB,GAAGf,UAEjC,IAIEI,EAJEoB,EAAIf,KAAKD,MACXG,EAAOa,EAAExB,SAAS,GAAGY,OACnBN,EAAIkB,EAAExB,SAASY,OACjBa,EAAKV,EAAE,GAAGH,OAEZ,GAAIN,IAAMS,EAAEH,OACV,OAAO,KAET,KAAON,KAEL,IADAF,EAAIqB,EACGrB,KACLoB,EAAExB,SAASM,GAAGK,EAAOP,GAAKW,EAAET,GAAGF,GAGnC,OAAOoB,CACR,EAEDE,QAAS,WACP,GAA6B,IAAzBjB,KAAKT,SAASY,OAChB,OAAO,KAET,IAAKH,KAAKC,YAAcD,KAAKY,aAC3B,OAAO,KAcT,IAZA,IAEEjB,EAGAU,EACAT,EACAsB,EAEAC,EATEzB,EAAIM,KAAKT,SAASY,OACpBN,EAAIH,EAEFY,EAAIN,KAAKa,QAAQzB,UAAUC,OAAOI,EAAEC,IAAIU,oBACxCG,EAAKD,EAAEf,SAAS,GAAGY,OAInBiB,EAAmB,GAIhBvB,KAAK,CAKV,IAHAD,EAAM,GACNwB,EAAiBvB,GAAK,GACtBqB,EAAUZ,EAAEf,SAASM,GAAGA,GACnBQ,EAAI,EAAGA,EAAIE,EAAIF,IAClBc,EAAcb,EAAEf,SAASM,GAAGQ,GAAKa,EACjCtB,EAAIY,KAAKW,GAGLd,GAAKX,GACP0B,EAAiBvB,GAAGW,KAAKW,GAO7B,IAJAb,EAAEf,SAASM,GAAKD,EAGhBD,EAAIE,EACGF,KAAK,CAEV,IADAC,EAAM,GACDS,EAAI,EAAGA,EAAIE,EAAIF,IAClBT,EAAIY,KAAKF,EAAEf,SAASI,GAAGU,GAAKC,EAAEf,SAASM,GAAGQ,GAAKC,EAAEf,SAASI,GAAGE,IAE/DS,EAAEf,SAASI,GAAKC,CACjB,CACF,CACD,OAAOR,UAAUC,OAAOC,OAAO8B,EAChC,EAED5B,YAAa,SAAUI,GACrB,IAAIC,EACFF,EACAJ,EAAWK,EAAIL,UAAYK,EAC7B,GAAIL,EAAS,SAAgC,IAAnBA,EAAS,GAAG,GAAoB,CAGxD,IAFAM,EAAIN,EAASY,OACbH,KAAKT,SAAW,GACTM,KAGL,IAFAF,EAAIJ,EAASM,GAAGM,OAChBH,KAAKT,SAASM,GAAK,GACZF,KACLK,KAAKT,SAASM,GAAGF,GAAKJ,EAASM,GAAGF,GAGtC,OAAOK,IACR,CACD,IAAIN,EAAIH,EAASY,OAEjB,IADAH,KAAKT,SAAW,GACXM,EAAI,EAAGA,EAAIH,EAAGG,IACjBG,KAAKT,SAASiB,KAAK,CAACjB,EAASM,KAE/B,OAAOG,IACR,OAGHqB,cAAiB,SAAU9B,GACzB,MAAM+B,EAAMlC,UAAUC,OAAOC,OAAOC,GAAU0B,UAC9C,OAAY,OAARK,EACKA,EAAI/B,SAEJ,IAEX,oBCtMKgC;;;;;;;;;mBCOL,WAGE,IAAIC,KAAyB,iBAAXC,OAAsBA,OAAS,CAAA,EAC7CC,SAAWF,KAAKG,oBAAyC,iBAAZC,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,KAC1GJ,UACFF,KAAOO,QAET,IAAIC,WAAaR,KAAKS,sBAAsDC,OAAOC,QAE/EC,UAAY,mBAAmBC,MAAM,IACrCC,MAAQ,EAAE,WAAY,QAAS,MAAO,KACtCC,MAAQ,CAAC,GAAI,GAAI,EAAG,GACpBC,aAAe,CAAC,MAAO,QAAS,SAAU,eAE1CC,OAAS,GAETC,mBAAqB,SAAUC,GACjC,OAAO,SAAUC,GACf,OAAO,IAAIC,MAAK,GAAMC,OAAOF,GAASD,IAC5C,CACA,EAEMI,aAAe,WACjB,IAAIC,EAASN,mBAAmB,OAC5BhB,UACFsB,EAASC,SAASD,IAEpBA,EAAO1D,OAAS,WACd,OAAO,IAAIuD,IACjB,EACIG,EAAOF,OAAS,SAAUF,GACxB,OAAOI,EAAO1D,SAASwD,OAAOF,EACpC,EACI,IAAK,IAAI/C,EAAI,EAAGA,EAAI2C,aAAarC,SAAUN,EAAG,CAC5C,IAAIqD,EAAOV,aAAa3C,GACxBmD,EAAOE,GAAQR,mBAAmBQ,EACnC,CACD,OAAOF,CACX,EAEMC,SAAW,SAAUD,QACvB,IAAIG,OAASC,KAAK,qBACdC,OAASD,KAAK,4BACdE,WAAa,SAAUV,GACzB,GAAuB,iBAAZA,EACT,OAAOO,OAAOI,WAAW,QAAQT,OAAOF,EAAS,QAAQY,OAAO,OAC3D,GAAIZ,EAAQa,cAAgBC,YACjCd,EAAU,IAAIe,WAAWf,QACpB,QAAuBgB,IAAnBhB,EAAQzC,OACjB,OAAO6C,OAAOJ,GAEhB,OAAOO,OAAOI,WAAW,QAAQT,OAAO,IAAIO,OAAOT,IAAUY,OAAO,MAC1E,EACI,OAAOF,UACX,EAEE,SAAST,KAAKgB,GACRA,GACFpB,OAAO,GAAKA,OAAO,IAAMA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GACxDA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GAC3CA,OAAO,GAAKA,OAAO,GAAKA,OAAO,IAAMA,OAAO,IAC5CA,OAAO,IAAMA,OAAO,IAAMA,OAAO,IAAMA,OAAO,IAAM,EACpDzC,KAAKyC,OAASA,QAEdzC,KAAKyC,OAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGjEzC,KAAK8D,GAAK,WACV9D,KAAK+D,GAAK,WACV/D,KAAKgE,GAAK,WACVhE,KAAKiE,GAAK,UACVjE,KAAKkE,GAAK,WAEVlE,KAAKmE,MAAQnE,KAAKoE,MAAQpE,KAAKqE,MAAQrE,KAAKsE,OAAS,EACrDtE,KAAKuE,UAAYvE,KAAKwE,QAAS,EAC/BxE,KAAKyE,OAAQ,CACd,CAED5B,KAAK/C,UAAUgD,OAAS,SAAUF,GAChC,IAAI5C,KAAKuE,UAAT,CAGA,IAAIG,EAAgC,iBAApB,EACZA,GAAa9B,EAAQa,cAAgBjC,KAAKkC,cAC5Cd,EAAU,IAAIe,WAAWf,IAI3B,IAFA,IAAI+B,EAAiB9E,EAAX+E,EAAQ,EAAMzE,EAASyC,EAAQzC,QAAU,EAAGsC,EAASzC,KAAKyC,OAE7DmC,EAAQzE,GAAQ,CAUrB,GATIH,KAAKwE,SACPxE,KAAKwE,QAAS,EACd/B,EAAO,GAAKzC,KAAKmE,MACjB1B,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC5CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC3CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAMA,EAAO,IAC5CA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAM,GAGnDiC,EACD,IAAK7E,EAAIG,KAAKoE,MAAOQ,EAAQzE,GAAUN,EAAI,KAAM+E,EAC/CnC,EAAO5C,GAAK,IAAM+C,EAAQgC,IAAUrC,MAAY,EAAN1C,UAG5C,IAAKA,EAAIG,KAAKoE,MAAOQ,EAAQzE,GAAUN,EAAI,KAAM+E,GAC/CD,EAAO/B,EAAQiC,WAAWD,IACf,IACTnC,EAAO5C,GAAK,IAAM8E,GAAQpC,MAAY,EAAN1C,KACvB8E,EAAO,MAChBlC,EAAO5C,GAAK,KAAO,IAAQ8E,GAAQ,IAAOpC,MAAY,EAAN1C,KAChD4C,EAAO5C,GAAK,KAAO,IAAe,GAAP8E,IAAiBpC,MAAY,EAAN1C,MACzC8E,EAAO,OAAUA,GAAQ,OAClClC,EAAO5C,GAAK,KAAO,IAAQ8E,GAAQ,KAAQpC,MAAY,EAAN1C,KACjD4C,EAAO5C,GAAK,KAAO,IAAS8E,GAAQ,EAAK,KAAUpC,MAAY,EAAN1C,KACzD4C,EAAO5C,GAAK,KAAO,IAAe,GAAP8E,IAAiBpC,MAAY,EAAN1C,OAElD8E,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9B/B,EAAQiC,aAAaD,IACjEnC,EAAO5C,GAAK,KAAO,IAAQ8E,GAAQ,KAAQpC,MAAY,EAAN1C,KACjD4C,EAAO5C,GAAK,KAAO,IAAS8E,GAAQ,GAAM,KAAUpC,MAAY,EAAN1C,KAC1D4C,EAAO5C,GAAK,KAAO,IAAS8E,GAAQ,EAAK,KAAUpC,MAAY,EAAN1C,KACzD4C,EAAO5C,GAAK,KAAO,IAAe,GAAP8E,IAAiBpC,MAAY,EAAN1C,MAKxDG,KAAK8E,cAAgBjF,EACrBG,KAAKqE,OAASxE,EAAIG,KAAKoE,MACnBvE,GAAK,IACPG,KAAKmE,MAAQ1B,EAAO,IACpBzC,KAAKoE,MAAQvE,EAAI,GACjBG,KAAK+E,OACL/E,KAAKwE,QAAS,GAEdxE,KAAKoE,MAAQvE,CAEhB,CAKD,OAJIG,KAAKqE,MAAQ,aACfrE,KAAKsE,QAAUtE,KAAKqE,MAAQ,WAAc,EAC1CrE,KAAKqE,MAAQrE,KAAKqE,MAAQ,YAErBrE,IA1DN,CA2DL,EAEE6C,KAAK/C,UAAUkF,SAAW,WACxB,IAAIhF,KAAKuE,UAAT,CAGAvE,KAAKuE,WAAY,EACjB,IAAI9B,EAASzC,KAAKyC,OAAQ5C,EAAIG,KAAK8E,cACnCrC,EAAO,IAAMzC,KAAKmE,MAClB1B,EAAO5C,GAAK,IAAMyC,MAAU,EAAJzC,GACxBG,KAAKmE,MAAQ1B,EAAO,IAChB5C,GAAK,KACFG,KAAKwE,QACRxE,KAAK+E,OAEPtC,EAAO,GAAKzC,KAAKmE,MACjB1B,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC5CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC3CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAMA,EAAO,IAC5CA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAM,GAEtDA,EAAO,IAAMzC,KAAKsE,QAAU,EAAItE,KAAKqE,QAAU,GAC/C5B,EAAO,IAAMzC,KAAKqE,OAAS,EAC3BrE,KAAK+E,MAlBJ,CAmBL,EAEElC,KAAK/C,UAAUiF,KAAO,WACpB,IACOpF,EAAGsF,EADNC,EAAIlF,KAAK8D,GAAIqB,EAAInF,KAAK+D,GAAIqB,EAAIpF,KAAKgE,GAAIqB,EAAIrF,KAAKiE,GAAIqB,EAAItF,KAAKkE,GACpDzB,EAASzC,KAAKyC,OAE3B,IAAI9C,EAAI,GAAIA,EAAI,KAAMA,EACpBsF,EAAIxC,EAAO9C,EAAI,GAAK8C,EAAO9C,EAAI,GAAK8C,EAAO9C,EAAI,IAAM8C,EAAO9C,EAAI,IAChE8C,EAAO9C,GAAOsF,GAAK,EAAMA,IAAM,GAGjC,IAAItF,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAuBtBuF,GADAD,GAJAE,GADAF,GAJAG,GADAH,GAJAI,GADAJ,GAJAK,GADAL,EAAKC,GAAK,EAAMA,IAAM,KADjBC,EAAIC,GAAQD,EAAKE,GAEVC,EAAI,WAAa7C,EAAO9C,GAAM,IAIhC,EAAM2F,IAAM,KADjBJ,GAFLC,EAAKA,GAAK,GAAOA,IAAM,IAEND,EAAKE,GAEVC,EAAI,WAAa5C,EAAO9C,EAAI,GAAM,IAIpC,EAAM0F,IAAM,KADjBC,GAFLJ,EAAKA,GAAK,GAAOA,IAAM,IAENI,EAAKH,GAEVC,EAAI,WAAa3C,EAAO9C,EAAI,GAAM,IAIpC,EAAMyF,IAAM,KADjBC,GAFLC,EAAKA,GAAK,GAAOA,IAAM,IAEND,EAAKH,GAEVC,EAAI,WAAa1C,EAAO9C,EAAI,GAAM,IAIpC,EAAMwF,IAAM,KADjBC,GAFLC,EAAKA,GAAK,GAAOA,IAAM,IAEND,EAAKE,GAEVJ,EAAI,WAAazC,EAAO9C,EAAI,GAAM,EAC9CyF,EAAKA,GAAK,GAAOA,IAAM,EAGzB,KAAMzF,EAAI,GAAIA,GAAK,EAuBjBuF,GADAD,GAJAE,GADAF,GAJAG,GADAH,GAJAI,GADAJ,GAJAK,GADAL,EAAKC,GAAK,EAAMA,IAAM,KADlBC,EAAIC,EAAIC,GAEAC,EAAI,WAAa7C,EAAO9C,GAAM,IAIhC,EAAM2F,IAAM,KADlBJ,GAFJC,EAAKA,GAAK,GAAOA,IAAM,GAEXC,GAEAC,EAAI,WAAa5C,EAAO9C,EAAI,GAAM,IAIpC,EAAM0F,IAAM,KADlBC,GAFJJ,EAAKA,GAAK,GAAOA,IAAM,GAEXC,GAEAC,EAAI,WAAa3C,EAAO9C,EAAI,GAAM,IAIpC,EAAMyF,IAAM,KADlBC,GAFJC,EAAKA,GAAK,GAAOA,IAAM,GAEXJ,GAEAC,EAAI,WAAa1C,EAAO9C,EAAI,GAAM,IAIpC,EAAMwF,IAAM,KADlBC,GAFJC,EAAKA,GAAK,GAAOA,IAAM,GAEXC,GAEAJ,EAAI,WAAazC,EAAO9C,EAAI,GAAM,EAC9CyF,EAAKA,GAAK,GAAOA,IAAM,EAGzB,KAAMzF,EAAI,GAAIA,GAAK,EAuBjBuF,GADAD,GAJAE,GADAF,GAJAG,GADAH,GAJAI,GADAJ,GAJAK,GADAL,EAAKC,GAAK,EAAMA,IAAM,KADjBC,EAAIC,EAAMD,EAAIE,EAAMD,EAAIC,GAEjBC,EAAI,WAAa7C,EAAO9C,GAAM,IAIhC,EAAM2F,IAAM,KADjBJ,GAFLC,EAAKA,GAAK,GAAOA,IAAM,GAERD,EAAIE,EAAMD,EAAIC,GAEjBC,EAAI,WAAa5C,EAAO9C,EAAI,GAAM,IAIpC,EAAM0F,IAAM,KADjBC,GAFLJ,EAAKA,GAAK,GAAOA,IAAM,GAERI,EAAIH,EAAMD,EAAIC,GAEjBC,EAAI,WAAa3C,EAAO9C,EAAI,GAAM,IAIpC,EAAMyF,IAAM,KADjBC,GAFLC,EAAKA,GAAK,GAAOA,IAAM,GAERD,EAAIH,EAAMI,EAAIJ,GAEjBC,EAAI,WAAa1C,EAAO9C,EAAI,GAAM,IAIpC,EAAMwF,IAAM,KADjBC,GAFLC,EAAKA,GAAK,GAAOA,IAAM,GAERD,EAAIE,EAAMD,EAAIC,GAEjBJ,EAAI,WAAazC,EAAO9C,EAAI,GAAM,EAC9CyF,EAAKA,GAAK,GAAOA,IAAM,EAGzB,KAAMzF,EAAI,GAAIA,GAAK,EAuBjBuF,GADAD,GAJAE,GADAF,GAJAG,GADAH,GAJAI,GADAJ,GAJAK,GADAL,EAAKC,GAAK,EAAMA,IAAM,KADlBC,EAAIC,EAAIC,GAEAC,EAAI,UAAY7C,EAAO9C,GAAM,IAI/B,EAAM2F,IAAM,KADlBJ,GAFJC,EAAKA,GAAK,GAAOA,IAAM,GAEXC,GAEAC,EAAI,UAAY5C,EAAO9C,EAAI,GAAM,IAInC,EAAM0F,IAAM,KADlBC,GAFJJ,EAAKA,GAAK,GAAOA,IAAM,GAEXC,GAEAC,EAAI,UAAY3C,EAAO9C,EAAI,GAAM,IAInC,EAAMyF,IAAM,KADlBC,GAFJC,EAAKA,GAAK,GAAOA,IAAM,GAEXJ,GAEAC,EAAI,UAAY1C,EAAO9C,EAAI,GAAM,IAInC,EAAMwF,IAAM,KADlBC,GAFJC,EAAKA,GAAK,GAAOA,IAAM,GAEXC,GAEAJ,EAAI,UAAYzC,EAAO9C,EAAI,GAAM,EAC7CyF,EAAKA,GAAK,GAAOA,IAAM,EAGzBpF,KAAK8D,GAAK9D,KAAK8D,GAAKoB,EAAK,EACzBlF,KAAK+D,GAAK/D,KAAK+D,GAAKoB,EAAK,EACzBnF,KAAKgE,GAAKhE,KAAKgE,GAAKoB,EAAK,EACzBpF,KAAKiE,GAAKjE,KAAKiE,GAAKoB,EAAK,EACzBrF,KAAKkE,GAAKlE,KAAKkE,GAAKoB,EAAK,CAC7B,EAEEzC,KAAK/C,UAAUyF,IAAM,WACnBvF,KAAKgF,WAEL,IAAIlB,EAAK9D,KAAK8D,GAAIC,EAAK/D,KAAK+D,GAAIC,EAAKhE,KAAKgE,GAAIC,EAAKjE,KAAKiE,GAAIC,EAAKlE,KAAKkE,GAEtE,OAAO9B,UAAW0B,GAAM,GAAM,IAAQ1B,UAAW0B,GAAM,GAAM,IACtD1B,UAAW0B,GAAM,GAAM,IAAQ1B,UAAW0B,GAAM,GAAM,IACtD1B,UAAW0B,GAAM,GAAM,IAAQ1B,UAAW0B,GAAM,EAAK,IACrD1B,UAAW0B,GAAM,EAAK,IAAQ1B,UAAe,GAAL0B,GACxC1B,UAAW2B,GAAM,GAAM,IAAQ3B,UAAW2B,GAAM,GAAM,IACtD3B,UAAW2B,GAAM,GAAM,IAAQ3B,UAAW2B,GAAM,GAAM,IACtD3B,UAAW2B,GAAM,GAAM,IAAQ3B,UAAW2B,GAAM,EAAK,IACrD3B,UAAW2B,GAAM,EAAK,IAAQ3B,UAAe,GAAL2B,GACxC3B,UAAW4B,GAAM,GAAM,IAAQ5B,UAAW4B,GAAM,GAAM,IACtD5B,UAAW4B,GAAM,GAAM,IAAQ5B,UAAW4B,GAAM,GAAM,IACtD5B,UAAW4B,GAAM,GAAM,IAAQ5B,UAAW4B,GAAM,EAAK,IACrD5B,UAAW4B,GAAM,EAAK,IAAQ5B,UAAe,GAAL4B,GACxC5B,UAAW6B,GAAM,GAAM,IAAQ7B,UAAW6B,GAAM,GAAM,IACtD7B,UAAW6B,GAAM,GAAM,IAAQ7B,UAAW6B,GAAM,GAAM,IACtD7B,UAAW6B,GAAM,GAAM,IAAQ7B,UAAW6B,GAAM,EAAK,IACrD7B,UAAW6B,GAAM,EAAK,IAAQ7B,UAAe,GAAL6B,GACxC7B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,GAAM,IACtD9B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,GAAM,IACtD9B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,EAAK,IACrD9B,UAAW8B,GAAM,EAAK,IAAQ9B,UAAe,GAAL8B,EACnD,EAEErB,KAAK/C,UAAU0F,SAAW3C,KAAK/C,UAAUyF,IAEzC1C,KAAK/C,UAAU0D,OAAS,WACtBxD,KAAKgF,WAEL,IAAIlB,EAAK9D,KAAK8D,GAAIC,EAAK/D,KAAK+D,GAAIC,EAAKhE,KAAKgE,GAAIC,EAAKjE,KAAKiE,GAAIC,EAAKlE,KAAKkE,GAEtE,MAAO,CACJJ,GAAM,GAAM,IAAOA,GAAM,GAAM,IAAOA,GAAM,EAAK,IAAW,IAALA,EACvDC,GAAM,GAAM,IAAOA,GAAM,GAAM,IAAOA,GAAM,EAAK,IAAW,IAALA,EACvDC,GAAM,GAAM,IAAOA,GAAM,GAAM,IAAOA,GAAM,EAAK,IAAW,IAALA,EACvDC,GAAM,GAAM,IAAOA,GAAM,GAAM,IAAOA,GAAM,EAAK,IAAW,IAALA,EACvDC,GAAM,GAAM,IAAOA,GAAM,GAAM,IAAOA,GAAM,EAAK,IAAW,IAALA,EAE9D,EAEErB,KAAK/C,UAAU2F,MAAQ5C,KAAK/C,UAAU0D,OAEtCX,KAAK/C,UAAU4F,YAAc,WAC3B1F,KAAKgF,WAEL,IAAIW,EAAS,IAAIjC,YAAY,IACzBkC,EAAW,IAAIC,SAASF,GAM5B,OALAC,EAASE,UAAU,EAAG9F,KAAK8D,IAC3B8B,EAASE,UAAU,EAAG9F,KAAK+D,IAC3B6B,EAASE,UAAU,EAAG9F,KAAKgE,IAC3B4B,EAASE,UAAU,GAAI9F,KAAKiE,IAC5B2B,EAASE,UAAU,GAAI9F,KAAKkE,IACrByB,CACX,EAEE,IAAIxD,QAAUY,eAEVf,UACFE,OAAAC,QAAiBA,QAEjBX,KAAKuE,KAAO5D,OAOf,EAzWD,WDPA,SAAKZ,GAEJA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QAGAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,kBAEAA,EAAA,WAAA,aAGAA,EAAA,MAAA,QAGAA,EAAA,SAAA,WACAA,EAAA,aAAA,eACAA,EAAA,UAAA,YAGAA,EAAA,YAAA,cACAA,EAAA,aAAA,eACAA,EAAA,cAAA,gBAGAA,EAAA,IAAA,MAGAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,OAAA,SACAA,EAAA,OAAA,SAGAA,EAAA,WAAA,aACAA,EAAA,SAAA,WACAA,EAAA,eAAA,iBACAA,EAAA,QAAA,UACAA,EAAA,YAAA,cAGAA,EAAA,gBAAA,kBACAA,EAAA,iBAAA,mBACAA,EAAA,UAAA,YACAA,EAAA,WAAA,aAEAA,EAAA,sBAAA,wBAIAA,EAAA,WAAA,aACAA,EAAA,iBAAA,mBACAA,EAAA,kBAAA,oBACAA,EAAA,iBAAA,mBAGAA,EAAA,UAAA,YACAA,EAAA,QAAA,UAGAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,YAAA,cACAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,aAAA,eACAA,EAAA,YAAA,cACAA,EAAA,YAAA,cACAA,EAAA,WAAA,aACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eACAA,EAAA,YAAA,cAGAA,EAAA,eAAA,iBACAA,EAAA,eAAA,iBACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eAGAA,EAAA,KAAA,OACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,MAAA,QACAA,EAAA,KAAA,OACAA,EAAA,KAAA,OACAA,EAAA,IAAA,MACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,KAAA,OAGAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IAEAA,EAAA,eAAA,iBACAA,EAAA,aAAA,eACAA,EAAA,iBAAA,mBACAA,EAAA,eAAA,iBAGAA,EAAA,cAAA,gBACAA,EAAA,mBAAA,qBACAA,EAAA,eAAA,iBACAA,EAAA,eAAA,iBACAA,EAAA,oBAAA,sBACAA,EAAA,WAAA,aACAA,EAAA,YAAA,cACAA,EAAA,YAAA,cACAA,EAAA,WAAA,aACAA,EAAA,eAAA,iBACAA,EAAA,YAAA,cACAA,EAAA,cAAA,gBACAA,EAAA,cAAA,gBACAA,EAAA,aAAA,eACAA,EAAA,cAAA,gBAGAA,EAAA,UAAA,YACAA,EAAA,SAAA,WAGAA,EAAA,OAAA,SACAA,EAAA,cAAA,gBACAA,EAAA,cAAA,gBACAA,EAAA,UAAA,YACAA,EAAA,aAAA,eAEAA,EAAA,UAAA,YACAA,EAAA,WAAA,YACA,CAlJD,CAAKA,eAAAA,aAkJJ,CAAA,IA+QAA,aAAayE,WACbzE,aAAa0E,iBACb1E,aAAa2E,kBACb3E,aAAa4E,iBACb5E,aAAa6E,gBACb7E,aAAa8E,iBACb9E,aAAa+E,sBAGd,MAAMC,GAAKhF,aAETgF,GAAGC,WAAYD,GAAGE,WAAYF,GAAGG,WACjCH,GAAGI,KAAMJ,GAAGK,IAAKL,GAAGM,IAAKN,GAAGO,MAAOP,GAAGQ,KAAMR,GAAGS,KAAMT,GAAGU,IAAKV,GAAGW,MAAOX,GAAGY,MAAOZ,GAAGa,KAAMb,GAAGc,oBAE7Fd,GAAGe,YACHf,GAAGgB,WACHhB,GAAGiB,WACHjB,GAAGkB,aACHlB,GAAGmB,YACHnB,GAAGoB,YACHpB,GAAGqB,WACHrB,GAAGsB,aACHtB,GAAGuB,aACHvB,GAAGwB,YAEHxB,GAAGyB,MAAOzB,GAAG0B,MAAO1B,GAAG2B,MAAO3B,GAAG4B,MAAO5B,GAAG6B,MAAO7B,GAAG8B,MAAO9B,GAAG+B,MAAO/B,GAAGgC,OAAQhC,GAAGiC,OACpFjC,GAAGkC,aAAclC,GAAGmC,UACpBnC,GAAGoC,SAAUpC,GAAGqC,aAAcrC,GAAGsC,UAIlCtC,GAAGuC,MACHvC,GAAGwC,MACHxC,GAAGyC,MACHzC,GAAGC,WACHD,GAAGE,WACHF,GAAGG,WACHH,GAAG0C,IACH1C,GAAGyB,MACHzB,GAAG0B,MACH1B,GAAG2B,MACH3B,GAAG4B,MACH5B,GAAG6B,MACH7B,GAAG8B,MACH9B,GAAG+B,MACH/B,GAAGiC,OACHjC,GAAG2C,WACH3C,GAAG4C,SACH5C,GAAG6C,eACH7C,GAAG8C,QACH9C,GAAG+C,YACH/C,GAAGgD,WACHhD,GAAGiD,WACHjD,GAAGe,YACHf,GAAGgB,WACHhB,GAAGiB,WACHjB,GAAGkB,aACHlB,GAAGmB,YACHnB,GAAGoB,YACHpB,GAAGqB,WACHrB,GAAGsB,aACHtB,GAAGuB,aACHvB,GAAGwB,YACHxB,GAAGK,IACHL,GAAGM,IACHN,GAAGO,MACHP,GAAGQ,KACHR,GAAGS,KACHT,GAAGkD,aAEHlD,GAAGmD,aACHnD,GAAGoD,EACHpD,GAAGlG,EACHkG,GAAGqD,EACHrD,GAAG7G,EACH6G,GAAGsD,EACHtD,GAAGuD,EACHvD,GAAGwD,EACHxD,GAAGyD,cACHzD,GAAG0D,mBACH1D,GAAG2D,eACH3D,GAAG4D,eACH5D,GAAGc,oBACHd,GAAG6D,WACH7D,GAAG8D,YACH9D,GAAG+D,YACH/D,GAAGgE,WACHhE,GAAGiE,eACHjE,GAAGkE,YACHlE,GAAGmE,cACHnE,GAAGoE,cACHpE,GAAGqE,aACHrE,GAAGsE,cACHtE,GAAGuE,UACHvE,GAAGwE,SEzfJ,MAAMC,YAAc,CAACC,EAAWC,EAAmBC,GAAOC,MAAqBC,KAAKC,IAAID,KAAKE,MAAMN,EAAIC,GAAaA,EAAWC,GAczHK,IAAM,CAACtG,EAAWC,IACjBsG,OAAOC,UAAUxG,IAAMuG,OAAOC,UAAUvG,GAKjC,IAANA,EAAUD,EAAIsG,IAAIrG,EAAGD,EAAIC,IAJ/BwG,QAAQC,MAAM,mBAAoB1G,EAAGC,GAC9B,GAMH0G,KAAO,CAACC,EAAmBC,KAAmC,CAAED,YAAWC,gBAE3EC,gBAAkB,CAACtM,EAAW2F,KACnC3F,EAAI2L,KAAKE,MAAM7L,GACf2F,EAAIgG,KAAKE,MAAMlG,GAEf,MAAM4G,EAAU,IAANvM,EAAU8L,IAAI9L,EAAG2F,GAAKA,EAEhC,OAAOwG,KAAKnM,EAAIuM,EAAG5G,EAAI4G,IAKlBC,YAAc,CAACC,EAAeC,IAAgCA,EAAYD,EAAQC,EAASN,UAAaM,EAASL,YAAcI,EClCrI,MAAME,YACL,KAAAC,IAASC,GAAkB,CAC3B,KAAAC,IAASD,GAAkB,CAC3B,cAAAE,IAAkBF,GAAkB,CACpC,QAAAG,GAAmB,CACnB,IAAAC,IAAQJ,GAAkB,CAC1B,IAAAK,IAAQL,GAAkB,CAC1B,MAAAM,IAAUN,GAAkB,ECL7B,MAAMO,KAAO,EAGPC,aAAe,KAEfC,oBAAsB,QAEtBC,YAAehC,IACpB,MAAMvL,EAAI2L,KAAKE,MAAMN,EAAI8B,cAEzB,OAAOf,gBAAgBtM,EAAGqN,eAGrBG,gBAAmBjC,GACd,IAANA,EAAgB,KAEbgC,YAAYhC,GASpB,IAAKkC,YAAL,SAAKA,GACJA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,SAAA,GAAA,WACAA,EAAAA,EAAA,WAAA,GAAA,YACA,CAJD,CAAKA,aAAAA,WAIJ,CAAA,IAED,MAAMC,OAKL,WAAA3J,CAAY4J,GACXC,OAAOC,OAAOvN,KAAMqN,EACpB,CAED,QAAOG,CAAElI,GACR,OAAO,IAAI8H,OAAO,CACjBlK,KAAMiK,WAAWM,MACjBC,GAAIpI,GAEL,CAED,QAAOqI,CAAED,EAAaE,EAAaC,EAAgB,GAClD,OAAO,IAAIT,OAAO,CACjBlK,KAAMiK,WAAWW,SACjBJ,GAAIG,EAAQ,EAAIH,EAAKE,EACrBA,GAAIC,EAAQ,EAAID,EAAKF,GAEtB,CAED,QAAOK,CAAEL,EAAaE,GACrB,OAAO,IAAIR,OAAO,CACjBlK,KAAMiK,WAAWa,WACjBN,KACAE,MAED,CAED,MAAIK,GACH,OAAQjO,KAAKkD,MACZ,KAAKiK,WAAWM,MACf,OAAOzN,KAAK0N,GAAGlI,WAEhB,KAAK2H,WAAWW,SACf,MAAO,GAAG9N,KAAK0N,MAAM1N,KAAK4N,KAE3B,KAAKT,WAAWa,WACf,MAAO,GAAGhO,KAAK0N,MAAM1N,KAAK4N,IAAM,EAAI5N,KAAK4N,GAAK,MAEhD,CAED,UAAIM,GACH,MAAO,CAAClO,KAAK0N,GAAI1N,KAAK4N,IAAIO,OAAO1C,OAAO2C,SACxC,EAyEF,MAAMC,YAGL,eAAOC,CAASxM,EAAgByM,GAC/B,MAAMzN,EAAS0N,MAAM1M,EAAK2M,OAAOtO,QAC/BuO,KAAK,MACLC,IAAI,IACJH,MAAM1M,EAAK2M,OAAOtO,QAChBuO,KAAK,MACLC,IAAI,IAAM,IAAIC,MAGlB9M,EAAK+M,QACHV,OAAQW,GAAWA,EAAO5L,OAASiK,WAAWa,YAC9Ce,QAASD,IACT,MAAME,EAASlN,EAAK2M,OAAOQ,UAAWC,GAAUA,EAAMhB,OAAOiB,SAASL,EAAOpB,KACvE0B,EAAStN,EAAK2M,OAAOQ,UAAWC,GAAUA,EAAMhB,OAAOiB,SAASL,EAAOlB,KAC7EjC,QAAQkB,OAAOmC,GAAU,GAAKI,GAAU,EAAG,+BAAgCtN,EAAKmM,GAAInM,EAAK2M,OAAQK,GAEjGhO,EAAOkO,GAAQI,GAAQC,IAAIP,EAAOpB,MAEpC5M,EAAO,GAAGgB,EAAK2M,OAAOtO,OAAS,GAAGkP,IAAI,GAEtC,MAAMC,EAAexN,EAAKwN,aACpBC,EAAQhB,EAAOiB,QAAQjB,EAAOiB,QAAQrP,OAAS,GAAGgO,OAAO,CAAC5B,EAAG1M,KAAOyP,EAAaG,IAAI5P,IACrF6P,EAAQrE,KAAKC,IAAI,EAAGD,KAAKC,OAAOiE,GAAS,KAEzCI,EAAW7N,EAAK+M,QAAQV,OAAQW,GAAWA,EAAO5L,OAASiK,WAAWa,YAEtE4B,EAAetC,OAAOuC,KAAKtB,EAAOuB,UACtCnB,IAAIlD,QACJ0C,OAAQ4B,IAASJ,EAASK,KAAMlB,GAAWA,EAAOlB,KAAOmC,IAc3D,OAXAjO,EAAK2M,OAAOM,QAASG,IACpBA,EAAMhB,OAAOa,QAASgB,IACrB,GAAIA,EAAM,EAAG,EACAJ,EAASK,KAAMlB,GAAWA,EAAOpB,KAAOqC,IACxCxB,EAAOiB,QAAQjB,EAAOiB,QAAQrP,OAAS,GAAG4P,IAAQL,IACxDE,EAAaK,KAAMhC,GAAOM,EAAOiB,QAAQvB,GAAI8B,GAAO,IAAIjP,EAAOoO,EAAMtK,OAAO9C,EAAK2M,OAAOtO,OAAS,GAAGkP,IAAIU,GAE9G,MAII,IAAI1B,YAAY,CAAEvN,UACzB,CAED,WAAA2C,CAAY4J,GACXC,OAAOC,OAAOvN,KAAMqN,EACpB,CAED,MAAA6C,CAAOjF,EAAWkF,EAAWC,EAAgBC,EAAa,GACzD,GAAIrQ,KAAKc,OAAOmK,GAAGkF,GAAGG,KAAM,CAC3B,MAAMP,EAAM,IAAI/P,KAAKc,OAAOmK,GAAGkF,IAAIE,GACnC,GAAIF,IAAMC,EAAQ,MAAO,CAACL,GAE1B,IAAK,IAAIQ,EAAKJ,EAAI,EAAGI,GAAMH,IAAUG,EAAI,CACxC,MAAMC,EAAMxQ,KAAKkQ,OAAOC,EAAGI,EAAIH,GAC/B,GAAII,EAAK,MAAO,CAACT,KAAQS,EACzB,CACD,CAED,OAAO,IACP,CAED,cAAAC,CAAeC,EAAYC,GAC1B,MAAMC,EAAQ,GACd,IAAK,IAAI3L,EAAI0L,EAAI1L,GAAKyL,EAAK,IAAKzL,EAC/B,IAAK,IAAIoL,EAAK,EAAGA,EAAKrQ,KAAKc,OAAO4P,GAAIzL,GAAGqL,OAAQD,EAAI,CACpD,MAAMQ,EAAO7Q,KAAKkQ,OAAOQ,EAAIzL,EAAG0L,EAAIN,GACpC,GAAIQ,IACHD,EAAMpQ,KAAKqQ,GACU,IAAjBD,EAAMzQ,QAAc,MAAO,CAACyQ,EAAM,GAAIA,EAAM,GAEjD,CAGF,OAAO,IACP,CAED,UAAAE,CAAWD,GACV7Q,KAAKc,OAAOiO,QAASgC,GAAWA,EAAOhC,QAASiC,GAAQH,EAAK9B,QAASd,GAAO+C,EAAIC,OAAOhD,KACxF,CAED,WAAAiD,CAAYC,GACX,MAAMC,EAAwB,GAE9B,IAAK,IAAI/L,EAAI,EAAGA,EAAIrF,KAAKc,OAAOX,OAAQkF,IACvC,IAAK,IAAIqL,EAAK,EAAGA,EAAK1Q,KAAKc,OAAOX,OAASkF,EAAGqL,IAAM,CACnD,MAAMC,EAAKD,EAAKrL,EAEhB,OAAa,CAEZ,MAAMuL,EAAQ5Q,KAAKyQ,eAAeC,EAAIC,GACtC,IAAIC,EAQG,MARI,CACV,MAAOS,EAAOC,GAASV,EACjBW,EAAW/C,MAAM2C,GAAYzC,KAAK,GACxC2C,EAAMtC,QAASgB,GAASwB,EAASxB,GAAO,GACxCuB,EAAMvC,QAASgB,GAASwB,EAASxB,IAAQ,GACzCqB,EAAU5Q,KAAK+Q,GAEfvR,KAAK8Q,WAAWO,EAAMlR,OAASmR,EAAMnR,OAASkR,EAAQC,EACtD,CACD,CACD,CAGF,OAAOF,CACP,EAGF,MAAMI,SAYL,WAAA/N,CAAY4J,GACXC,OAAOC,OAAOvN,KAAMqN,GAEpB1B,QAAQkB,OAAO7M,KAAKyR,OAAQ,kBAAmBpE,EAC/C,CAED,WAAIwB,GACH,MAAM6C,EAAO1R,KAAK2R,OAAS3R,KAAK2R,OAAO9C,QAAU,GACjD,OAAO7O,KAAK8O,OAAS,IAAI4C,EAAM1R,KAAK8O,QAAU4C,CAC9C,CAED,MAAIzD,GAEH,OADkBjO,KAAK6O,QAAQF,IAAKG,GAAWA,EAAOb,IAAI2D,OACzCC,KAAK,IACtB,CAED,gBAAIvC,GACH,MAAM0B,EAAM,IAAIpC,IAGhB,OAFI5O,KAAKyO,QAAQzO,KAAKyO,OAAOM,QAASG,GAAUA,EAAMhB,OAAOa,QAASgB,GAAQA,GAAO,GAAKiB,EAAI3B,IAAIU,KAE3FiB,CACP,CAED,IAAAc,CAAKC,GAEJ,OADkBA,EAAI1P,MAAM,KAAKuP,OAChBC,KAAK,OAAS7R,KAAKiO,EACpC,CAED,eAAA+D,CAAgBzD,GACfvO,KAAKyO,OAAS,CAAC,CAAEP,OAAQ,CAACpB,OAE1B,IAAK,MAAMgC,KAAU9O,KAAK6O,QACzB,OAAQC,EAAO5L,MACd,KAAKiK,WAAWM,MACfzN,KAAKyO,OAAOwD,QAAQ,CAAE/D,OAAQ,CAACY,EAAOpB,MAEtC,MACD,KAAKP,WAAWW,SACf,CACC,MAAMkB,EAAShP,KAAKyO,OAAOuB,KAAMd,GAAUA,EAAMhB,OAAOiB,SAASL,EAAOpB,KAClE0B,EAASpP,KAAKyO,OAAOuB,KAAMd,GAAUA,EAAMhB,OAAOiB,SAASL,EAAOlB,KACxEjC,QAAQkB,OAAOmC,GAAUI,EAAQ,oBAAqBpP,KAAKyO,OAAQK,GAE/DE,GAAUI,GACbJ,EAAOd,OAAO1N,QAAQ4O,EAAOlB,QAC7BkB,EAAOlB,OAAS,KAChBlO,KAAKyO,OAASzO,KAAKyO,OAAON,OAAQe,GAAUA,EAAMhB,SACvCc,EACFI,GAAQJ,EAAOd,OAAO1N,KAAKsO,EAAOlB,IADxBwB,EAAOlB,OAAO+D,QAAQnD,EAAOpB,GAEjD,CAED,MACD,KAAKP,WAAWa,WACf,CACC,MAAMgB,EAAShP,KAAKyO,OAAOuB,KAAMd,GAAUA,EAAMhB,OAAOiB,SAASL,EAAOpB,KAClE0B,EAASpP,KAAKyO,OAAOuB,KAAMd,GAAUA,EAAMhB,OAAOiB,SAASL,EAAOlB,KACxEjC,QAAQkB,OAAOmC,GAAUI,EAAQ,oBAAqBpP,KAAKyO,OAAQK,GAEnE,MAAMoD,EAAYnC,IACjBpE,QAAQkB,OAAO0B,EAAOuB,SAASC,GAAM,oBAAqBjB,EAAOb,GAAI8B,EAAKxB,EAAOuB,UACjF,MAAM7E,EAAIsD,EAAOuB,SAASC,GAAK9E,EAEzBiE,EAAQlP,KAAKyO,OAAOuB,KACxBlG,GAAMA,EAAEoE,OAAO+B,KAAM3K,GAAMA,EAAI,GAAKiJ,EAAOuB,SAASxK,GAAG2F,GAAKA,IAAMnB,EAAEoE,OAAO+B,KAAM3K,GAAMA,EAAI,GAAKiJ,EAAOuB,SAASxK,GAAG2F,GAAKA,IAE1H,GAAIiE,EAAOA,EAAMhB,OAAO1N,KAAKuP,OACxB,CACJ,MAAMmC,EAAW,CAAEhE,OAAQ,CAAC6B,IACtBoC,EAAKnS,KAAKyO,OAAOQ,UAAWnF,GAAMA,EAAEoE,OAAO,KAAOpB,KAAOyB,EAAOuB,SAAShG,EAAEoE,OAAO,IAAIjD,GAAKA,GACjGjL,KAAKyO,OAAO2D,OAAOD,EAAI,EAAGD,EAC1B,GAEGlD,GAAQkD,EAASpD,EAAOpB,IACxB0B,GAAQ8C,EAASpD,EAAOlB,GAK7B,EAMJ5N,KAAKyO,OAAOM,QAAQ,CAACG,EAAOrP,IAAOqP,EAAMtK,MAAQ/E,EACjD,CAED,oBAAAwS,CAAqB9D,GACpB,MAAM4C,EAAa7D,OAAOuC,KAAKtB,EAAOuB,UAAU3P,OAE1CiR,EADc/C,YAAYC,SAAStO,KAAMuO,GACjB2C,YAAYC,GAEpCmB,EAAU9D,MAAM2C,GACpBzC,KAAK,MACLC,IAAI,CAACpC,EAAG0B,IAAOM,EAAOuB,SAAS7B,GAAIsE,UACrCvS,KAAKwS,YAAcpB,EAAUzC,IAAK4C,GAAaA,EAAS5C,IAAI,CAAC8D,EAAI5S,IAAM4S,EAAKH,EAAQzS,IACpF,CAED,qBAAA6S,CAAsBnE,GACrB5C,QAAQkB,OAAO7M,KAAKwS,YAAa,gCAEjC,MAAMrB,EAAa7D,OAAOuC,KAAKtB,EAAOuB,UAAU3P,OAC1CwS,EAAOnE,MAAM2C,GAAYzC,MAAK,GAC9BkE,EAAQpE,MAAM2C,GAAYzC,MAAK,GAE/BmE,EAAyB,GAE/B,IAAK,MAAMC,KAAc9S,KAAKwS,YAAa,CAC1C,MAAMO,EAAMD,EAAWE,OAAO,CAACD,EAAKN,IAAOM,EAAMN,EAAI,GACrD,GAAY,IAARM,EAAW,CACd,MAAM3N,EAAI2N,EAAM,EAAID,EAAWnE,IAAK8D,IAAQA,GAAMK,EAClD,GAAI1N,EAAE,GAAK,EAAG,SAEdyN,EAAWrS,KAAK4E,GAGhBA,EAAE2J,QAAQ,CAAC0D,EAAI5S,KACd+S,EAAM/S,GAAK+S,EAAM/S,IAAM4S,EAAK,EACxBA,IAAIE,EAAK9S,GAAK4S,EAAK,GAAKG,EAAM/S,KAEnC,CACD,CAaD,OAVAG,KAAKwS,YAAYzD,QAAS+D,IAEb,IADAA,EAAWE,OAAO,CAACD,EAAKN,IAAOM,EAAMN,EAAI,IACnCK,EAAW,IACxBA,EAAW7C,KAAK,CAACwC,EAAI5S,IAAM4S,IAAOE,EAAK9S,MAC1CiT,EAAW/D,QAAQ,CAAC0D,EAAI5S,IAAM4S,IAAOE,EAAK9S,IAAK,IAC/CgT,EAAWrS,KAAKsS,MAKZ,CAAEH,OAAME,aACf,CAED,cAAAI,EAAeN,KAAEA,EAAIE,WAAEA,IACtB,IAAKA,EAAW1S,OAAQ,OAAOwS,EAAKhE,IAAI,IAAM,GAE9C,MAAMuE,EAAMP,EACVhE,IAAI,CAACiE,EAAO/S,KAAO,CAAE+S,QAAO/S,OAC5BsO,OAAO,EAAGyE,YAAaA,GACvBjE,IAAI,EAAG9O,OAAQA,GACfsO,OAAQtO,GAAMgT,EAAW5C,KAAMkD,GAAuB,IAAbA,EAAMtT,KACjD,IAAKqT,EAAI/S,OAAQ,OAAOwS,EAAKhE,IAAI,IAAM,GAEvC,MAAM2D,EAAUY,EAAIvE,IAAK9O,GAAMwL,KAAK+H,IAAIP,EAAW7C,KAAMmD,GAAuB,IAAbA,EAAMtT,IAAUA,KAI7EwT,EAAc,IAAIC,IACxB,IAAIC,GAAa,EAEjB,MAAMC,EAAgBX,EACpBlE,IAAKwE,IAIE,CAAEM,KAHIN,EAAMhF,OAAO,CAAC5B,EAAG1M,IAAMqT,EAAI/D,SAAStP,IAGlC6T,MAFDP,EAAMH,OAAO,CAACD,EAAKN,EAAI5S,IAAMkT,GAAOG,EAAI/D,SAAStP,GAAK,EAAI4S,GAAK,MAK7EtE,OAAO,EAAGsF,OAAMC,WAChB,GAAID,EAAKE,MAAOlB,GAAc,IAAPA,GAAW,OAAO,EAEzC,MAAMxE,EAAKwF,EAAK5B,KAAK,KACrB,OAAIwB,EAAY5D,IAAIxB,IACnBsF,EAAaF,EAAYO,IAAI3F,KAAQyF,GAC9B,IAERL,EAAYrC,IAAI/C,EAAIyF,IAEb,KAGT,GAAIH,EAAY,OAAO,KAEvB,MAAMM,EAAcL,EAAMM,MAAM,EAAGZ,EAAI/S,QACjC4T,EAAYP,EAAMM,MAAMZ,EAAI/S,QAClC,GAAI0T,EAAY1T,OAAS+S,EAAI/S,OAAQ,CACpC,MAAM6T,EAAiB,GACvB,IAAK,IAAIC,EAAK,EAAGA,EAAKf,EAAI/S,OAAS,IAAK8T,EAAI,CAC3C,MAAMC,EAAKD,EAAK,EACVR,EAAO,CACZA,KAAMP,EAAIvE,IAAI,CAACpC,EAAG1M,IAAOA,IAAMoU,EAAK,EAAIpU,IAAMqU,GAAM,EAAI,GACxDR,KAAM,EACNS,OAAQ7B,EAAQ2B,GAAM3B,EAAQ4B,IAAOlH,qBAElC6G,EAAY5D,KAAMmE,GAAOA,EAAGX,KAAKQ,IAAOG,EAAGX,KAAKS,MAAMT,EAAKU,OAAS,IACpEN,EAAY5D,KAAMmE,GAAyC,IAAlCA,EAAGX,KAAKtF,OAAO1C,QAAQtL,SAAiBiU,EAAGX,KAAKQ,IAAOG,EAAGX,KAAKS,OAAOT,EAAKU,OAAS,GACjHH,EAAexT,KAAKiT,EACpB,CACDO,EAAepC,KAAK,CAACyC,EAAIC,IAAOD,EAAGF,MAAQG,EAAGH,OAE9CN,EAAYrT,QAAQwT,EAAeF,MAAM,EAAGZ,EAAI/S,OAAS0T,EAAY1T,QACrE,CAGD,MAAMW,EAAS+S,EAAYlF,IAAI,EAAG8E,UAAWA,GACvCC,EAAOG,EAAYlF,IAAI,EAAG+E,UAAWA,GAErCa,EAASlT,cAAcP,GAC7B,IAAKyT,EAGJ,OAFAvU,KAAKyR,OAAO7E,KAAK,eAAgB9L,GAE1B,KAER,MAAM0T,EAAWD,EAAO5F,IAAK8F,GAAQA,EAAIzB,OAAO,CAACD,EAAKN,EAAI5S,IAAMkT,EAAMN,EAAKiB,EAAK7T,GAAI,IAGpF,GAAIkU,EAAU5T,QACT4T,EAAU9D,KAAMwD,GAASpI,KAAK+H,IAAIK,EAAKA,KAAKT,OAAO,CAACD,EAAKN,EAAI5S,IAAMkT,EAAMN,EAAK+B,EAAS3U,GAAI,IAAM,MAEpG,OAAO,KAIT,MAAM6U,EAAS/B,EAAKhE,IAAI,IAAM,GAG9B,OAFAuE,EAAInE,QAAQ,CAAC4F,EAAI9U,IAAO6U,EAAOC,GAAMH,EAAS3U,IAEvC6U,CACP,CAED,cAAAE,CAAerG,GACd,MAAMoE,KAAEA,EAAIE,WAAEA,GAAe7S,KAAK0S,sBAAsBnE,GAMlDsG,EADelC,EAAKhE,IAAI,CAACiE,EAAO3E,IAAQ2E,GAAS,EAAI5H,YAAYuD,EAAOuB,SAAS7B,GAAI6G,WAAY,MACxE9B,OAAO,CAACrE,EAAKmG,EAAY7G,KACnD6G,GAAc,IACjBnG,EAAImG,GAAcnG,EAAImG,IAAe,GACrCnG,EAAImG,GAAYtU,KAAKyN,IAGfU,GACL,CAAE,GACCoG,EAASzH,OAAO0H,QAAQH,GAC5BjD,KAAK,CAACqD,EAAIC,IAAOzJ,OAAOyJ,EAAG,IAAMzJ,OAAOwJ,EAAG,KAC3CtG,IAAKwG,GAASA,EAAK,IAGrB,IAAK,IAAIC,EAAW,EAAGA,EAAWL,EAAO5U,SAAUiV,EAAU,CAC5D,MAAMC,EAAc,GAAGC,UAAUP,EAAOjB,MAAM,EAAGsB,IAC3CxC,EAAQD,EAAKhE,IAAI,CAACpC,EAAG0B,KAAQoH,EAAYlG,SAASlB,IAClDsH,EAAQvV,KAAKiT,eAAe,CAAEN,KAAMC,EAAOC,eAEjD,GAAI0C,GAASA,EAAM5B,MAAM,CAAClB,EAAI5S,IAAM4S,GAAM,GAAKA,EAAKlE,EAAOuB,SAASjQ,GAAG2V,SAAU,OAAOD,CACxF,CAED,OAAOvV,KAAKiT,eAAe,CAAEN,OAAME,cACnC,CAED,YAAA4C,CAAalH,GACZ,MAAMoE,KAAEA,EAAIE,WAAEA,GAAe7S,KAAK0S,sBAAsBnE,GAKxD,IAAK,MAAMnJ,KAAKyN,EAAY,CAI3B,GAFezN,EAAE4N,OAAO,CAACD,EAAKN,EAAI5S,IAAMkT,EAAMN,GAAME,EAAK9S,IAAM4S,GAAM,EAAI,EAAIlE,EAAOuB,SAASjQ,GAAG2V,SAAU,IAE5F,EAMb,OAJApQ,EAAE2J,QAAQ,CAAC0D,EAAI5S,KACV4S,IAAIlE,EAAOmH,gBAAgB7V,IAAM4S,EAAK,EAAI,GAAK,MAG7C,CAER,CAED,IAAKI,EAAW1S,OAAQ,OAAO,EAE/B,MAAMwV,EAAY3V,KAAKiT,eAAe,CAAEN,OAAME,eAC9C,OAAK8C,IAEGA,EAAUhC,MAAM,CAAClB,EAAI5S,IAAM4S,EAAKlE,EAAOuB,SAASjQ,GAAG2V,SAAW/C,GAAM,EAC5E,CAED,WAAAmD,CAAYrH,GACX,MAAMsH,EAAa/G,GAClBP,EAAOuB,SAAShB,EAAOlB,IACpBW,EAAOuB,SAAShB,EAAOlB,IAAI3C,EAA4E,IAAxEI,KAAK+H,IAAI7E,EAAOuB,SAAShB,EAAOlB,IAAI3C,EAAIsD,EAAOuB,SAAShB,EAAOpB,IAAIzC,GAClGsD,EAAOuB,SAAShB,EAAOpB,IAAIzC,EAAI,IAC7B6K,EAAQ9V,KAAK6O,QAAQV,OAAQW,GAAWA,EAAO5L,OAASiK,WAAWa,YAAY4D,KAAK,CAACmE,EAAIC,IAAOH,EAAUE,GAAMF,EAAUG,IAC1HC,EAAOH,EAAM9C,OAAO,CAACrE,EAAKuH,KAAG,IAAWvH,EAAK,CAACuH,EAAIxI,IAAKwI,EAAItI,KAAO,CAAA,GAClEuI,EAAU,IAAIvH,IAAa,IAAItB,OAAOuC,KAAKoG,IAAOtH,IAAIlD,SAC5DqK,EAAM/G,QAASmH,GAAQC,EAAQlF,OAAOiF,EAAItI,KAC1C5N,KAAKyO,OAAO,GAAGP,OAAOa,QAASgB,GAAQA,EAAM,GAAKoG,EAAQ9G,IAAIU,IAE9D,IAAIqG,EAAS,IAAID,GAASxH,IAAK0H,IAC9B,MAAMC,EAAQ,CAACD,GAEf,IAAIpL,EAAIoL,EACR,KAAOJ,EAAKhL,KACXA,EAAIgL,EAAKhL,KACLA,EAAI,GAAKqL,EAAMnH,SAASlE,MAE5BqL,EAAM9V,KAAKyK,GAGZ,OAAOqL,IAGR,MAAMpI,EAAwBZ,OAAOiJ,OAAOhI,EAAOuB,UACjD3B,OAAQ7I,GAAMA,EAAE2I,GAAK,GACrBU,IAAKrJ,IAAO,CACZ2I,GAAI3I,EAAE2I,GACNuI,KAAM,KACNC,QAAS,KACTC,UAAW,KACXC,SAAU,QAEN7G,EAA0C5B,EAC9CC,OAAQ7I,GAAM8Q,EAAOnG,KAAMqG,GAAUA,EAAMnH,SAAS7J,EAAE2I,MAAQ6H,EAAM7F,KAAMiG,GAAQ,CAACA,EAAIxI,GAAIwI,EAAItI,IAAIuB,SAAS7J,EAAE2I,MAC9G+E,OAAO,CAACrE,EAAKrJ,KAAC,IAAWqJ,EAAK,CAACrJ,EAAE2I,IAAK3I,IAAM,CAAE,GAEhDtF,KAAKyO,OAAOM,QAAQ,CAACG,EAAOiD,IAAOjD,EAAMhB,OAAOa,QAASgB,GAAQD,EAASC,KAASD,EAASC,GAAK2G,UAAYvE,KAE7GnS,KAAKyO,OAAO,GAAG+H,KAAO,EACtBxW,KAAKyO,OAAO,GAAGP,OAAOa,QAASgB,GAAQD,EAASC,KAASD,EAASC,GAAKyG,KAAO,IAG9E,MAAMb,EAAY3V,KAAK4U,eAAerG,GACtCL,EAAOa,QAASzJ,GAAOA,EAAEqR,SAAWzJ,gBAAgByI,EAAUrQ,EAAE2I,MAMhE,MAAM2I,EAAU5W,KAAKyO,OAAOqF,MAAM,EAAG9T,KAAKyO,OAAOtO,OAAS,GACpD0W,EAAc,KACnB,GAAID,EAAQjD,MAAOzE,GAAUzD,OAAO2C,SAASc,EAAMsH,OAAQ,OAAO,EAElE,IAAIM,GAAU,EA0Bd,OAvBAhB,EAAM/G,QAASmH,IACd,MAAMlH,EAAShP,KAAKyO,OAAOuB,KAAMd,GAAUA,EAAMhB,OAAOiB,SAAS+G,EAAIxI,KAC/D0B,EAASpP,KAAKyO,OAAOuB,KAAMd,GAAUA,EAAMhB,OAAOiB,SAAS+G,EAAItI,KACjEnC,OAAO2C,SAASY,EAAOwH,QAAU/K,OAAO2C,SAASgB,EAAOoH,QAC3DpH,EAAOoH,KAAOxH,EAAOwH,KAAOtK,YAAYqC,EAAOuB,SAASoG,EAAIxI,IAAI6E,SAAUzC,EAASoG,EAAIxI,IAAIiJ,UAC3FvH,EAAOlB,OAAOa,QAASgB,GAAQD,EAASC,KAASD,EAASC,GAAKyG,KAAOpH,EAAOoH,OAE7EM,GAAU,KAKZ,IAAIhB,GAAOiB,UAAUhI,QAASmH,IAC7B,MAAMlH,EAAShP,KAAKyO,OAAOuB,KAAMd,GAAUA,EAAMhB,OAAOiB,SAAS+G,EAAIxI,KAC/D0B,EAASpP,KAAKyO,OAAOuB,KAAMd,GAAUA,EAAMhB,OAAOiB,SAAS+G,EAAItI,MAChEnC,OAAO2C,SAASY,EAAOwH,OAAS/K,OAAO2C,SAASgB,EAAOoH,QAC3DxH,EAAOwH,KAAOpH,EAAOoH,KAAOtK,YAAYqC,EAAOuB,SAASoG,EAAIxI,IAAI6E,SAAUzC,EAASoG,EAAIxI,IAAIiJ,UAC3F3H,EAAOd,OAAOa,QAASgB,GAAQD,EAASC,KAASD,EAASC,GAAKyG,KAAOxH,EAAOwH,OAE7EM,GAAU,KAILA,GAER,KAAOD,MAEPlL,QAAQkB,OACP+J,EAAQjD,MAAOzE,GAAUzD,OAAO2C,SAASc,EAAMsH,OAC/C,8BACAxW,KAAKyO,OACLzO,KAAKiO,IAENC,EACEC,OAAQ6I,GAAUvL,OAAO2C,SAAS4I,EAAMR,OACxCzH,QAASiI,GAAWA,EAAMP,QAAUO,EAAMR,KAAOtK,YAAYqC,EAAOuB,SAASkH,EAAM/I,IAAIsE,SAAUyE,EAAML,WAGzG,MAAMM,EAAkB1I,EAAOuB,SAAS,GAAGyC,SAC3C6D,EAAOrH,QAASuH,IACf,MAAMY,EAAQZ,EAAMrH,UAAWc,GAAQD,EAASC,GAAK0G,QAAUQ,GAC/D,GAAIC,GAAS,EAAG,CACJZ,EAAMlE,OAAO8E,EAAOZ,EAAMnW,OAAS+W,GAC3CnI,QAASgB,IACXD,EAASC,GAAKyG,KAAO,KACrB1G,EAASC,GAAK0G,QAAU,MAEzB,IAEFL,EAASA,EAAOjI,OAAQmI,GAAUA,EAAMnW,QAExC,MAAMoS,EAAWlH,KAAKC,IAAI,KAAM4C,EAAOS,IAAKrJ,GAAMA,EAAEmR,SAAStI,OAAO1C,OAAO2C,WAI3E,OAFApO,KAAKyR,OAAOnF,MAAM6K,OAAOC,cAAc,QAAUpX,KAAKiO,GAAI0H,GAEnD,CACNS,SACAlI,SACAqE,WACA1D,QAAS7O,KAAK6O,QAAQF,IAAKG,GAAWA,EAAOb,IAAI4D,KAAK,KAEvD,CAED,MAAAwF,CAAO9I,EAAgB+I,GACjBtX,KAAKyO,QAAQzO,KAAKgS,gBAAgBzD,GAIvC,MAAMgJ,EAAShJ,EAAOiJ,gBAAgB5D,IAAI5T,KAAKiO,KAAO,CAAEwJ,MAAO,GAO/D,KANEF,EAAOE,MACTlJ,EAAOiJ,gBAAgBxG,IAAIhR,KAAKiO,GAAIsJ,GAEpCvX,KAAKqS,qBAAqB9D,GAGtBvO,KAAKyV,aAAalH,GAGrB,OAFAgJ,EAAOG,QAAS,EAChB1X,KAAKyR,OAAO9E,KAAK3M,KAAK8O,OAAOb,GAAI,KAC1B,KAMR,GAFAjO,KAAKyR,OAAOjF,MAAMxM,KAAK8O,QAAU9O,KAAK8O,OAAOb,IAEzCqJ,EAAMK,QAAU,GAMnB,KALEL,EAAMK,QAEH3X,KAAK4X,UAAU5X,KAAK6X,OAAOtJ,GAEhCvO,KAAK4X,SAAW5X,KAAK4X,SAASzJ,OAAQrM,IAAUyM,EAAOiJ,gBAAgB5D,IAAI9R,EAAKmM,MAAQM,EAAOiJ,gBAAgB5D,IAAI9R,EAAKmM,IAAIyJ,QACxH1X,KAAK4X,SAASzX,OAAQ,CACzB,MAAME,EAAKyB,GAA2BA,EAAKgW,cAAgBvJ,EAAOiJ,gBAAgB5D,IAAI9R,EAAKmM,KAAO,CAAEwJ,MAAO,IAAKA,MAAQ,GACxHzX,KAAK4X,SAAShG,KAAK,CAACmG,EAAIC,IAAO3X,EAAE2X,GAAM3X,EAAE0X,IAEzC,IAAK,MAAME,KAASjY,KAAK4X,SAAU,CAClC,MAAMpD,EAAWyD,EAAMZ,OAAO9I,EAAQ+I,GACtC,GAAI9C,EAEH,OADAxU,KAAKyR,OAAO/E,WACL8H,EAGR,GAAI8C,EAAMK,SAAW,EAAG,KACxB,CACD,OAGK3X,KAAKyR,OAAOnF,MAAM,oBAMzB,OAJAtM,KAAKyR,OAAO/E,WAEZ6K,EAAOG,QAAS,EAET1X,KAAK4V,YAAYrH,EACxB,CAED,MAAAsJ,CAAOtJ,GAENvO,KAAKgS,gBAAgBzD,GAErB,MAAMuB,SAAEA,EAAQoI,QAAEA,EAAO1I,QAAEA,GAAYjB,EACjCe,EAAetP,KAAKsP,aAEpB6I,EAAyB,GACzBC,EAAgBC,IACrB,IAAKrY,KAAK6O,QAAQoB,KAAM/K,GAAMA,EAAE+I,KAAOoK,EAAOvJ,OAAOb,MAAQkK,EAASlI,KAAM9K,GAAMA,EAAE2J,OAAOb,KAAOoK,EAAOvJ,OAAOb,IAAK,CACpH,MAAMe,EAAShP,KAAKyO,OAAOuB,KAAMd,GAAUA,EAAMhB,OAAOiB,SAASkJ,EAAOvJ,OAAOpB,KACzE0B,EAASpP,KAAKyO,OAAOuB,KAAMd,GAAUA,EAAMhB,OAAOiB,SAASkJ,EAAOvJ,OAAOlB,KAC/E,GAAIoB,IAAWI,GAAWJ,GAAUI,GAAUJ,EAAOpK,OAASwK,EAAOxK,MAAQ,OAE7E,GAAIoK,GAAUI,EACb,GAAIiJ,EAAOvJ,OAAO5L,OAASiK,WAAWW,SAAU,CAC/C,GAAIsB,EAAOxK,MAAQoK,EAAOpK,MAAQ,EAAG,OACrC,GAAI5E,KAAK6O,QAAQoB,KAAM/K,GAAM8J,EAAOd,OAAOiB,SAASjK,EAAEwI,KAAO0B,EAAOlB,OAAOiB,SAASjK,EAAE0I,KAAM,MAC5F,MAAM,GAAIyK,EAAOvJ,OAAO5L,OAASiK,WAAWa,YACxCgB,EAAOpK,MAAQwK,EAAOxK,MAAO,OAInC,GACCyT,EAAOvJ,OAAO5L,OAASiK,WAAWa,YAClChO,KAAK6O,QAAQoB,KACX/K,GACAA,EAAEhC,OAASiK,WAAWa,aACrB9I,EAAEwI,KAAO2K,EAAOvJ,OAAOpB,IAAMxI,EAAE0I,KAAOyK,EAAOvJ,OAAOlB,IAAO1I,EAAEwI,KAAO2K,EAAOvJ,OAAOlB,IAAM1I,EAAE0I,KAAOyK,EAAOvJ,OAAOpB,KAGlH,OAGD,GAAI2K,EAAOvJ,OAAO5L,OAASiK,WAAWW,SAAU,CAC/C,GAAIkB,IACHqJ,EAAOP,YAAczM,KAAKF,IAAIkN,EAAOP,eAAgB9I,EAAOd,OAAOS,IAAKrJ,GAAM4S,EAAQG,EAAOvJ,OAAOlB,IAAItI,KACpG+S,EAAOP,aAAe,GAAG,OAG9B,GAAI1I,IACHiJ,EAAOP,YAAczM,KAAKF,IAAIkN,EAAOP,eAAgB1I,EAAOlB,OAAOS,IAAKrJ,GAAM4S,EAAQ5S,GAAG+S,EAAOvJ,OAAOpB,MACnG2K,EAAOP,aAAe,GAAG,MAE9B,CAEDK,EAAS3X,KAAK6X,EACd,GAGF,IAAK,MAAMtI,KAAOT,EACbS,EAAM,IAEVmI,EAAQnI,GAAKhB,QAAQ,CAAC1O,EAAG4N,KACpB5N,EAAI,GAAK0P,IAAQ9B,GAAImK,EAAa,CAAEtJ,OAAQ1B,OAAOO,EAAEM,EAAI8B,GAAM+H,YAAazX,MAGjF6X,EAAQnJ,QAAQ,CAACuJ,EAAIrK,KACpB,MAAM5N,EAAIiY,EAAGvI,GACT1P,EAAI,GAAG+X,EAAa,CAAEtJ,OAAQ1B,OAAOO,EAAEoC,EAAK9B,GAAK6J,YAAazX,MAGnEmP,EAAQO,GAAKhB,QAAQ,CAAC1O,EAAG4N,KACpB5N,EAAI,GAAG+X,EAAa,CAAEtJ,OAAQ1B,OAAOW,EAAEE,EAAI8B,GAAM+H,YAAazX,MAGnEmP,EAAQT,QAAQ,CAACuJ,EAAIrK,KACpBA,EAAKA,GAAMX,OAAOuC,KAAKC,GAAU3P,QAAU,EAAI8N,EAC/C,MAAM5N,EAAIiY,EAAGvI,GACT1P,EAAI,GAAG+X,EAAa,CAAEtJ,OAAQ1B,OAAOW,EAAEgC,EAAK9B,GAAK6J,YAAazX,OAOlE8X,EAASlI,KACRoI,GACA,CAAClL,WAAWa,WAAYb,WAAWM,OAAO0B,SAASkJ,EAAOvJ,OAAO5L,QAChEoM,EAAaG,IAAI4I,EAAOvJ,OAAOpB,MAC/B4B,EAAaG,IAAI4I,EAAOvJ,OAAOlB,KASnC5N,KAAK4X,SAAWO,EAASxJ,IAAK0J,GAAW,IAAI7G,SAAS,CAAEC,OAAQzR,KAAKyR,OAAQE,OAAQ3R,QAASqY,KAN7FrY,KAAK4X,SAAW,EAOjB,EAGF,MAAMW,OAcL,WAAA9U,CAAY+U,GAAkBlB,MAAEA,EAAQ,IAAI7F,OAAEA,EAAS,IAAIpF,aAAiC,IAC3FrM,KAAKsX,MAAQA,EACbtX,KAAKyR,OAASA,EAEd,MAAMgH,EAAS,CACdxK,GAAI,EACJhD,EAAG,EACHyN,WAAY,EACZ5D,WAAY0D,EAAIG,kBAChBpG,SAAUiG,EAAII,iBACdpD,QAAS,GAGVxV,KAAKkO,OAAS,CACbuK,KACGD,EAAItK,OAAOS,IAAKrJ,IAAO,CACzB2I,GAAI3I,EAAE2I,GACNhD,EAAG3F,EAAE2F,EACLyN,WAAYpT,EAAEoT,WACd5D,WAAYxP,EAAEwP,WACd+D,MAAOvT,EAAEuT,MACTtG,SAAUjN,EAAEiN,SACZiD,QAAS,OAGXxV,KAAK8P,SAAW9P,KAAKkO,OAAO8E,OAAO,CAACrE,EAAKrJ,KAAC,IAAWqJ,EAAK,CAACrJ,EAAE2I,IAAK3I,IAAM,CAAA,GAExEtF,KAAKwP,QAAUgJ,EAAIhJ,QACnBxP,KAAKkY,QAAUM,EAAIN,QAEnBlY,KAAK8Y,MAAQN,EAAIO,KAAO1N,KAAKF,IAAIqN,EAAIO,KAAO,KAAMP,EAAItK,OAAOS,IAAKrJ,GAAMA,EAAE2F,IAE1EjL,KAAKwX,gBAAkB,IAAIlE,GAC3B,CAED,KAAA0F,GAEChZ,KAAKiZ,SAAW,IAAIzH,SAAS,CAC5BC,OAAQzR,KAAKyR,OACb3C,OAAQ,OAET9O,KAAKiZ,SAASrB,SAAW5X,KAAKkO,OAAO4F,MAAM,GAAGnF,IAC5CqI,GACA,IAAIxF,SAAS,CACZC,OAAQzR,KAAKyR,OACbE,OAAQ3R,KAAKiZ,SACbnK,OAAQ1B,OAAOI,EAAEwJ,EAAM/I,IACvB6J,YAAa9X,KAAKkY,QAAQlB,EAAM/I,IAAI+E,OAAO,CAACD,EAAK1S,IAAM0S,EAAM1S,EAAG,MAInE,IAAI6Y,EAAyB,KAE7BlZ,KAAKyR,OAAOhF,eAAe,SAE3B,MAAMiJ,EAAkBlH,MAAMxO,KAAKkO,OAAO/N,QAAQuO,KAAK,GAEjD4I,EAAQ,CAAEK,QAAS3X,KAAKsX,MAAOG,MAAO,GAC5C,KAAOH,EAAMK,QAAU,GAAG,GACvBL,EAAMG,MAER,MAAMlJ,EAAS,CACduB,SAAU9P,KAAK8P,SACfN,QAASxP,KAAKwP,QACd0I,QAASlY,KAAKkY,QACdV,gBAAiBxX,KAAKwX,gBACtB9B,mBAGKlB,EAAWxU,KAAKiZ,SAAS5B,OAAO9I,EAAQ+I,GAO9C,GANA9C,EAASmD,QAAU3X,KAAKsX,MAAQA,EAAMK,QACtCnD,EAASiD,MAAQH,EAAMG,MACvBzX,KAAKmZ,iBAAiB3E,GACtBxU,KAAKyR,OAAOnF,MAAM,QAASkI,EAAS4E,MAEpCF,GAAgBA,GAAgB1E,EAAS4E,KAAOF,EAAaE,KAAO5E,EAAW0E,GAC1EA,EAAaE,KAAM,MAGxB,GAAIpZ,KAAKwX,gBAAgB5D,IAAI,IAAI8D,OAAQ,KACzC,CAWD,OATA1X,KAAKyR,OAAO/E,WACZ1M,KAAKyR,OAAOnF,MAAM,WAAY4M,GAAgBA,EAAaE,KAAMF,GACjElZ,KAAKyR,OAAOnF,MAAM,QAAStM,KAAKsX,MAAQA,EAAMK,SAE9C3X,KAAKyR,OAAOnF,MACX,mBACAoJ,EAAgB/G,IAAK1J,GAAMA,EAAIqS,EAAMG,QAG/ByB,CACP,CAED,gBAAAC,CAAiB3E,GAChBA,EAAS4E,KAAO,EAGhB,MAAMtJ,EAAmC0E,EAAStG,OAAO8E,OAAO,CAACrE,EAAKrJ,KAAO,IAAKqJ,EAAK,CAACrJ,EAAE2I,IAAK,IAAK3I,KAAMtF,KAAK8P,SAASxK,EAAE2I,OAAU,CAAA,GAO9HC,EAASsG,EAAStG,OAAOC,OAAQ6I,GAAUvL,OAAO2C,SAAS4I,EAAMR,OAAO7H,IAAKqI,GAAUlH,EAASkH,EAAM/I,KACtGoL,EAAoCnL,EAAO8E,OAAO,CAACrE,EAAKqI,KAC7DrI,EAAIqI,EAAM6B,OAASlK,EAAIqI,EAAM6B,QAAU,GACvClK,EAAIqI,EAAM6B,OAAOrY,KAAKwW,GACfrI,GACL,CAAE,GACLrB,OAAOiJ,OAAO8C,GAAStK,QAASuK,IACnBA,EAAG1H,KAAK,CAAClE,EAAIE,IAAOF,EAAGzC,EAAI2C,EAAG3C,GAAG6I,MAAM,EAAGwF,EAAGnZ,OAAS,GAC9D4O,QAAQ,CAACrB,EAAI7N,KACLyZ,EAAGzZ,EAAI,GACX2W,KAAO9I,EAAG8I,OAAMhC,EAAS4E,MAAQ,SAI1C,MAAM3B,EAAQ,IAAInE,IAClBkB,EAAStG,OAAOa,QAASiI,IAIxB,GAHKvL,OAAO2C,SAAS4I,EAAMR,QAAShC,EAAS4B,OAAOzC,MAAO2C,IAAWA,EAAMnH,SAAS6H,EAAM/I,OAC1FuG,EAAS4E,MAAQ,IAAMtJ,EAASkH,EAAM/I,IAAIyK,YAEvC1B,EAAML,SAAU,CACnB,MAAM7K,UAAEA,EAASC,YAAEA,GAAgBiL,EAAML,SACnC7B,EAAahF,EAASkH,EAAM/I,IAAI6G,WACtC2C,EAAMzG,IAAIlF,EAAWT,KAAKC,IAAImM,EAAM7D,IAAI9H,IAAc,EAAG,EAAIgJ,IAC7D2C,EAAMzG,IAAIjF,EAAaV,KAAKC,IAAImM,EAAM7D,IAAI7H,IAAgB,EAAG,EAAI+I,GACjE,IAIF,MAAMyE,EAAcvN,gBAAgBwI,EAASjC,SAAUvS,KAAK8P,SAAS,GAAGyC,UACxEkF,EAAMzG,IAAIuI,EAAYzN,UAAWT,KAAKC,IAAImM,EAAM7D,IAAI2F,EAAYzN,YAAc,EAAG,EAAI9L,KAAK8P,SAAS,GAAGgF,aACtG2C,EAAMzG,IAAIuI,EAAYxN,YAAaV,KAAKC,IAAImM,EAAM7D,IAAI2F,EAAYxN,cAAgB,EAAG,EAAI/L,KAAK8P,SAAS,GAAGgF,aAE1G,IAAK,MAAOpV,EAAG8Z,KAAW/B,EAAMzC,UAC3BtV,EAAI,IAAG8U,EAAS4E,MAAQ/N,KAAKoO,IAAI/Z,GAAK8Z,GAG3C,IAAIE,EAAY,EACZC,EAAc,EAClBnF,EAAS4B,OAAOrH,QAASuH,IACxB3K,QAAQkB,OAAOiD,EAASwG,EAAM,IAAK,iBAAkBA,EAAOhJ,OAAOuC,KAAKC,IAExE,MAAM1L,EAAQiH,KAAK+H,IAAItD,EAASwG,EAAM,IAAIE,MACpCoD,EAAM9J,EAASwG,EAAMA,EAAMnW,OAAS,IAAIsW,QAE9CiD,GAAarO,KAAKC,IAAI,EAAGlH,EAAQoQ,EAASjC,SAAWqH,GAGrD,IAAIf,EAAQ,KACZvC,EAAMvH,QAASd,IACd,MAAM+I,EAAQlH,EAAS7B,GACnB+I,EAAM6B,QAAUA,IACL,OAAVA,KAAkBc,EACtBd,EAAQ7B,EAAM6B,WAKjBrE,EAAS4E,MAAqB,GAAZM,EAAkB1M,oBACpCwH,EAAS4E,MAAQ,GAAKO,EAAc,EAGpC,MAAME,EAAe,IAAI3L,GAAQ0D,KAAK,CAAClE,EAAIE,IAAOF,EAAGzC,EAAI2C,EAAG3C,GACtD6O,EAAaD,EAAa/F,MAAM,GAAGnF,IAAI,CAACf,EAAI/N,KACjD,MAAM6N,EAAKmM,EAAaha,GAClBka,EAAKnM,EAAG3C,EAAIyC,EAAGzC,EACf+O,EAAKpM,EAAG4I,KAAO9I,EAAG8I,KAExB,IAAKwD,EAAI,OAAOD,EAAK/Z,KAAK8Y,MAI1B,OAAgB,EAFHzN,KAAK4O,MAAMD,EAAKxF,EAASjC,SAAUwH,EAAK/Z,KAAK8Y,OAErCzN,KAAK6O,GAAK,IAAM,IAEhCC,EAAY9O,KAAKC,OAAOwO,EAAY,GAC1CtF,EAAS4E,MAAQe,GAAa,EAE9BxO,QAAQkB,OAAO2H,EAAS4E,MAAQ,EAAG,2BAA4B5E,EAAS4E,KAAM3B,EAAOiC,EAAWC,GAC5FnF,EAAS4E,KAAO,IAAG5E,EAAS4E,KAAOhO,IACvC,ECrgCF,MAAMgP,gBAAkB,CAACC,EAAuCC,KAC/D,IAAKD,EAAWnM,OAAO/N,OACtB,MAAO,CACN+N,OAAQ,GACRkI,OAAQ,GACR7D,SAAU,GAMZ,OAFe,IAAIgI,OAAsBF,EAAYC,GAEvCtB,SAIfwB,KAAKC,UAAanV,IACjB,MAAM2I,GAAEA,EAAEyM,KAAEA,GAASpV,EAAE+H,KACvB,IACC,MAAMqH,EAAS0F,gBAAgBM,EAAK,GAAIA,EAAK,IAC7CF,KAAKG,YAAY,CAAE1M,KAAIyG,UACvB,CAAC,MAAO9I,GACR4O,KAAKG,YAAY,CAAE1M,KAAIrC,MAAOA,EAAMhJ,SACpC,GCzBF+I,QAAQgB,KAAK,kDAAmD,8EAA+E"} \ No newline at end of file diff --git a/dist/assets/DeleteOutlined-0f1ef15a.js b/dist/assets/DeleteOutlined-a45fceaa.js similarity index 81% rename from dist/assets/DeleteOutlined-0f1ef15a.js rename to dist/assets/DeleteOutlined-a45fceaa.js index 2157eced6b54ac0d8f5be669b8e31fb9d591ec55..833eabbd23b23805651e5fe69363802f1845f060 100644 --- a/dist/assets/DeleteOutlined-0f1ef15a.js +++ b/dist/assets/DeleteOutlined-a45fceaa.js @@ -1 +1 @@ -import{A as l,f as e}from"./_setToString-397d22bb.js";import{r as t}from"./umi-91f9d113.js";var a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"}}]},name:"delete",theme:"outlined"};const n=a;var o=function(c,r){return t.createElement(l,e(e({},c),{},{ref:r,icon:n}))},v=t.forwardRef(o);const h=v;export{h as D}; +import{A as l,f as e}from"./_setToString-dbbee35a.js";import{r as t}from"./umi-37873494.js";var a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"}}]},name:"delete",theme:"outlined"};const n=a;var o=function(c,r){return t.createElement(l,e(e({},c),{},{ref:r,icon:n}))},v=t.forwardRef(o);const h=v;export{h as D}; diff --git a/dist/assets/DownloadOutlined-f081b8de.js b/dist/assets/DownloadOutlined-80f8a347.js similarity index 80% rename from dist/assets/DownloadOutlined-f081b8de.js rename to dist/assets/DownloadOutlined-80f8a347.js index c5708e6ca938bfdb62e76272d4cc07f7569bccdf..df049af764820cda80f47f03b23ba20bd2f85d3e 100644 --- a/dist/assets/DownloadOutlined-f081b8de.js +++ b/dist/assets/DownloadOutlined-80f8a347.js @@ -1 +1 @@ -import{A as n,f as o}from"./_setToString-397d22bb.js";import{r as t}from"./umi-91f9d113.js";var c={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};const r=c;var d=function(a,e){return t.createElement(n,o(o({},a),{},{ref:e,icon:r}))},l=t.forwardRef(d);const u=l;export{u as D}; +import{A as n,f as o}from"./_setToString-dbbee35a.js";import{r as t}from"./umi-37873494.js";var c={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};const r=c;var d=function(a,e){return t.createElement(n,o(o({},a),{},{ref:e,icon:r}))},l=t.forwardRef(d);const u=l;export{u as D}; diff --git a/dist/assets/Dropdown-d5fff39b.js b/dist/assets/Dropdown-ba03bf54.js similarity index 99% rename from dist/assets/Dropdown-d5fff39b.js rename to dist/assets/Dropdown-ba03bf54.js index f382fd4393de96522ef27cd953d62f945791b18c..e5b80375e314ffec2eb83f13cd34bb975dcdb409 100644 --- a/dist/assets/Dropdown-d5fff39b.js +++ b/dist/assets/Dropdown-ba03bf54.js @@ -1 +1 @@ -import{A as $t,f as N,u as Y,y as _n,_ as pe,w as Re,b as w,a as F,z as Dt,aG as An,c as oe,q as kn,B as Ln,p as $n,l as Dn,o as Tt,j as Tn,d as Vn}from"./_setToString-397d22bb.js";import{r as t,_ as B,e as Fn}from"./umi-91f9d113.js";import{d as Vt,i as zn,K as te,u as Xe,G as Te,c as Ft}from"./TextArea-3bdaceca.js";import{t as Un}from"./button-909b3565.js";var Wn={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z"}}]},name:"edit",theme:"outlined"};const Hn=Wn;var jn=function(n,a){return t.createElement($t,N(N({},n),{},{ref:a,icon:Hn}))},Gn=t.forwardRef(jn);const Wr=Gn;var qn={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M176 511a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"ellipsis",theme:"outlined"};const Bn=qn;var Yn=function(n,a){return t.createElement($t,N(N({},n),{},{ref:a,icon:Bn}))},Xn=t.forwardRef(Yn);const Hr=Xn;var zt=t.createContext(null);function ft(e,n){return e===void 0?null:"".concat(e,"-").concat(n)}function Ut(e){var n=t.useContext(zt);return ft(n,e)}var Jn=["children","locked"],ee=t.createContext(null);function Zn(e,n){var a=N({},e);return Object.keys(n).forEach(function(o){var r=n[o];r!==void 0&&(a[o]=r)}),a}function Ve(e){var n=e.children,a=e.locked,o=Y(e,Jn),r=t.useContext(ee),l=_n(function(){return Zn(r,o)},[r,o],function(i,u){return!a&&(i[0]!==u[0]||!Vt(i[1],u[1],!0))});return t.createElement(ee.Provider,{value:l},n)}var Qn=[],Wt=t.createContext(null);function et(){return t.useContext(Wt)}var Ht=t.createContext(Qn);function Fe(e){var n=t.useContext(Ht);return t.useMemo(function(){return e!==void 0?[].concat(pe(n),[e]):n},[n,e])}var jt=t.createContext(null),mt=t.createContext({});function Ot(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(zn(e)){var a=e.nodeName.toLowerCase(),o=["input","select","textarea","button"].includes(a)||e.isContentEditable||a==="a"&&!!e.getAttribute("href"),r=e.getAttribute("tabindex"),l=Number(r),i=null;return r&&!Number.isNaN(l)?i=l:o&&i===null&&(i=0),o&&e.disabled&&(i=null),i!==null&&(i>=0||n&&i<0)}return!1}function Gt(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,a=pe(e.querySelectorAll("*")).filter(function(o){return Ot(o,n)});return Ot(e,n)&&a.unshift(e),a}var ut=te.LEFT,st=te.RIGHT,ct=te.UP,Je=te.DOWN,Ze=te.ENTER,qt=te.ESC,$e=te.HOME,De=te.END,_t=[ct,Je,ut,st];function er(e,n,a,o){var r,l,i,u,s="prev",c="next",m="children",g="parent";if(e==="inline"&&o===Ze)return{inlineTrigger:!0};var d=(r={},w(r,ct,s),w(r,Je,c),r),h=(l={},w(l,ut,a?c:s),w(l,st,a?s:c),w(l,Je,m),w(l,Ze,m),l),v=(i={},w(i,ct,s),w(i,Je,c),w(i,Ze,m),w(i,qt,g),w(i,ut,a?m:g),w(i,st,a?g:m),i),y={inline:d,horizontal:h,vertical:v,inlineSub:d,horizontalSub:v,verticalSub:v},M=(u=y["".concat(e).concat(n?"":"Sub")])===null||u===void 0?void 0:u[o];switch(M){case s:return{offset:-1,sibling:!0};case c:return{offset:1,sibling:!0};case g:return{offset:-1,sibling:!1};case m:return{offset:1,sibling:!1};default:return null}}function tr(e){for(var n=e;n;){if(n.getAttribute("data-menu-list"))return n;n=n.parentElement}return null}function nr(e,n){for(var a=e||document.activeElement;a;){if(n.has(a))return a;a=a.parentElement}return null}function Bt(e,n){var a=Gt(e,!0);return a.filter(function(o){return n.has(o)})}function At(e,n,a){var o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1;if(!e)return null;var r=Bt(e,n),l=r.length,i=r.findIndex(function(u){return a===u});return o<0?i===-1?i=l-1:i-=1:o>0&&(i+=1),i=(i+l)%l,r[i]}function rr(e,n,a,o,r,l,i,u,s,c){var m=t.useRef(),g=t.useRef();g.current=n;var d=function(){Re.cancel(m.current)};return t.useEffect(function(){return function(){d()}},[]),function(h){var v=h.which;if([].concat(_t,[Ze,qt,$e,De]).includes(v)){var y,M,S,O=function(){y=new Set,M=new Map,S=new Map;var V=l();return V.forEach(function(k){var A=document.querySelector("[data-menu-id='".concat(ft(o,k),"']"));A&&(y.add(A),S.set(A,k),M.set(k,A))}),y};O();var C=M.get(n),p=nr(C,y),b=S.get(p),f=er(e,i(b,!0).length===1,a,v);if(!f&&v!==$e&&v!==De)return;(_t.includes(v)||[$e,De].includes(v))&&h.preventDefault();var U=function(V){if(V){var k=V,A=V.querySelector("a");A!=null&&A.getAttribute("href")&&(k=A);var ne=S.get(V);u(ne),d(),m.current=Re(function(){g.current===ne&&k.focus()})}};if([$e,De].includes(v)||f.sibling||!p){var P;!p||e==="inline"?P=r.current:P=tr(p);var W,T=Bt(P,y);v===$e?W=T[0]:v===De?W=T[T.length-1]:W=At(P,y,p,f.offset),U(W)}else if(f.inlineTrigger)s(b);else if(f.offset>0)s(b,!0),d(),m.current=Re(function(){O();var D=p.getAttribute("aria-controls"),V=document.getElementById(D),k=At(V,y);U(k)},5);else if(f.offset<0){var _=i(b,!0),$=_[_.length-2],Z=M.get($);s($,!1),U(Z)}}c==null||c(h)}}function ar(e){Promise.resolve().then(e)}var pt="__RC_UTIL_PATH_SPLIT__",kt=function(n){return n.join(pt)},ir=function(n){return n.split(pt)},dt="rc-menu-more";function or(){var e=t.useState({}),n=F(e,2),a=n[1],o=t.useRef(new Map),r=t.useRef(new Map),l=t.useState([]),i=F(l,2),u=i[0],s=i[1],c=t.useRef(0),m=t.useRef(!1),g=function(){m.current||a({})},d=t.useCallback(function(C,p){var b=kt(p);r.current.set(b,C),o.current.set(C,b),c.current+=1;var f=c.current;ar(function(){f===c.current&&g()})},[]),h=t.useCallback(function(C,p){var b=kt(p);r.current.delete(b),o.current.delete(C)},[]),v=t.useCallback(function(C){s(C)},[]),y=t.useCallback(function(C,p){var b=o.current.get(C)||"",f=ir(b);return p&&u.includes(f[0])&&f.unshift(dt),f},[u]),M=t.useCallback(function(C,p){return C.some(function(b){var f=y(b,!0);return f.includes(p)})},[y]),S=function(){var p=pe(o.current.keys());return u.length&&p.push(dt),p},O=t.useCallback(function(C){var p="".concat(o.current.get(C)).concat(pt),b=new Set;return pe(r.current.keys()).forEach(function(f){f.startsWith(p)&&b.add(r.current.get(f))}),b},[]);return t.useEffect(function(){return function(){m.current=!0}},[]),{registerPath:d,unregisterPath:h,refreshOverflowKeys:v,isSubPathKey:M,getKeyPath:y,getKeys:S,getSubPathKeys:O}}function Ee(e){var n=t.useRef(e);n.current=e;var a=t.useCallback(function(){for(var o,r=arguments.length,l=new Array(r),i=0;i1&&(O.motionAppear=!1);var C=O.onVisibleChanged;return O.onVisibleChanged=function(p){return!d.current&&!p&&M(!0),C==null?void 0:C(p)},y?null:t.createElement(Ve,{mode:l,locked:!d.current},t.createElement(Vn,B({visible:S},O,{forceRender:s,removeOnLeave:!1,leavedClassName:"".concat(u,"-hidden")}),function(p){var b=p.className,f=p.style;return t.createElement(ht,{id:n,className:b,style:f},r)}))}var Rr=["style","className","title","eventKey","warnKey","disabled","internalPopupClose","children","itemIcon","expandIcon","popupClassName","popupOffset","onClick","onMouseEnter","onMouseLeave","onTitleClick","onTitleMouseEnter","onTitleMouseLeave"],Pr=["active"],xr=function(n){var a,o=n.style,r=n.className,l=n.title,i=n.eventKey;n.warnKey;var u=n.disabled,s=n.internalPopupClose,c=n.children,m=n.itemIcon,g=n.expandIcon,d=n.popupClassName,h=n.popupOffset,v=n.onClick,y=n.onMouseEnter,M=n.onMouseLeave,S=n.onTitleClick,O=n.onTitleMouseEnter,C=n.onTitleMouseLeave,p=Y(n,Rr),b=Ut(i),f=t.useContext(ee),U=f.prefixCls,P=f.mode,W=f.openKeys,T=f.disabled,_=f.overflowDisabled,$=f.activeKey,Z=f.selectedKeys,D=f.itemIcon,V=f.expandIcon,k=f.onItemClick,A=f.onOpenChange,ne=f.onActive,le=t.useContext(mt),re=le._internalRenderSubMenuItem,Q=t.useContext(jt),L=Q.isSubPathKey,I=Fe(),R="".concat(U,"-submenu"),H=T||u,ge=t.useRef(),he=t.useRef(),de=m||D,ue=g||V,j=W.includes(i),z=!_&&j,ze=L(Z,i),Ue=Yt(i,H,O,C),Pe=Ue.active,xe=Y(Ue,Pr),we=t.useState(!1),We=F(we,2),Ne=We[0],He=We[1],je=function(J){H||He(J)},ae=function(J){je(!0),y==null||y({key:i,domEvent:J})},nt=function(J){je(!1),M==null||M({key:i,domEvent:J})},Ke=t.useMemo(function(){return Pe||(P!=="inline"?Ne||L([$],i):!1)},[P,Pe,$,Ne,i,L]),Ge=Xt(I.length),rt=function(J){H||(S==null||S({key:i,domEvent:J}),P==="inline"&&A(i,!j))},Ce=Ee(function(ie){v==null||v(Qe(ie)),k(ie)}),Oe=function(J){P!=="inline"&&A(i,J)},_e=function(){ne(i)},Ae=b&&"".concat(b,"-popup"),be=t.createElement("div",B({role:"menuitem",style:Ge,className:"".concat(R,"-title"),tabIndex:H?null:-1,ref:ge,title:typeof l=="string"?l:null,"data-menu-id":_&&b?null:b,"aria-expanded":z,"aria-haspopup":!0,"aria-controls":Ae,"aria-disabled":H,onClick:rt,onFocus:_e},xe),l,t.createElement(Jt,{icon:P!=="horizontal"?ue:null,props:N(N({},n),{},{isOpen:z,isSubMenu:!0})},t.createElement("i",{className:"".concat(R,"-arrow")}))),X=t.useRef(P);if(P!=="inline"&&I.length>1?X.current="vertical":X.current=P,!_){var ye=X.current;be=t.createElement(Sr,{mode:ye,prefixCls:R,visible:!s&&z&&P!=="inline",popupClassName:d,popupOffset:h,popup:t.createElement(Ve,{mode:ye==="horizontal"?"vertical":ye},t.createElement(ht,{id:Ae,ref:he},c)),disabled:H,onVisibleChange:Oe},be)}var ve=t.createElement(Te.Item,B({role:"none"},p,{component:"li",style:o,className:oe(R,"".concat(R,"-").concat(P),r,(a={},w(a,"".concat(R,"-open"),z),w(a,"".concat(R,"-active"),Ke),w(a,"".concat(R,"-selected"),ze),w(a,"".concat(R,"-disabled"),H),a)),onMouseEnter:ae,onMouseLeave:nt}),be,!_&&t.createElement(Er,{id:Ae,open:z,keyPath:I},c));return re&&(ve=re(ve,n,{selected:ze,active:Ke,open:z,disabled:H})),t.createElement(Ve,{onItemClick:Ce,mode:P==="horizontal"?"vertical":P,itemIcon:de,expandIcon:ue},ve)};function bt(e){var n=e.eventKey,a=e.children,o=Fe(n),r=Ct(a,o),l=et();t.useEffect(function(){if(l)return l.registerPath(n,o),function(){l.unregisterPath(n,o)}},[o]);var i;return l?i=r:i=t.createElement(xr,e,r),t.createElement(Ht.Provider,{value:o},i)}var wr=["prefixCls","rootClassName","style","className","tabIndex","items","children","direction","id","mode","inlineCollapsed","disabled","disabledOverflow","subMenuOpenDelay","subMenuCloseDelay","forceSubMenuRender","defaultOpenKeys","openKeys","activeKey","defaultActiveFirst","selectable","multiple","defaultSelectedKeys","selectedKeys","onSelect","onDeselect","inlineIndent","motion","defaultMotions","triggerSubMenuAction","builtinPlacements","itemIcon","expandIcon","overflowedIndicator","overflowedIndicatorPopupClassName","getPopupContainer","onClick","onOpenChange","onKeyDown","openAnimation","openTransitionName","_internalRenderMenuItem","_internalRenderSubMenuItem"],Ie=[],Nr=t.forwardRef(function(e,n){var a,o,r=e,l=r.prefixCls,i=l===void 0?"rc-menu":l,u=r.rootClassName,s=r.style,c=r.className,m=r.tabIndex,g=m===void 0?0:m,d=r.items,h=r.children,v=r.direction,y=r.id,M=r.mode,S=M===void 0?"vertical":M,O=r.inlineCollapsed,C=r.disabled,p=r.disabledOverflow,b=r.subMenuOpenDelay,f=b===void 0?.1:b,U=r.subMenuCloseDelay,P=U===void 0?.1:U,W=r.forceSubMenuRender,T=r.defaultOpenKeys,_=r.openKeys,$=r.activeKey,Z=r.defaultActiveFirst,D=r.selectable,V=D===void 0?!0:D,k=r.multiple,A=k===void 0?!1:k,ne=r.defaultSelectedKeys,le=r.selectedKeys,re=r.onSelect,Q=r.onDeselect,L=r.inlineIndent,I=L===void 0?24:L,R=r.motion,H=r.defaultMotions,ge=r.triggerSubMenuAction,he=ge===void 0?"hover":ge,de=r.builtinPlacements,ue=r.itemIcon,j=r.expandIcon,z=r.overflowedIndicator,ze=z===void 0?"...":z,Ue=r.overflowedIndicatorPopupClassName,Pe=r.getPopupContainer,xe=r.onClick,we=r.onOpenChange,We=r.onKeyDown;r.openAnimation,r.openTransitionName;var Ne=r._internalRenderMenuItem,He=r._internalRenderSubMenuItem,je=Y(r,wr),ae=t.useMemo(function(){return br(h,d,Ie)},[h,d]),nt=t.useState(!1),Ke=F(nt,2),Ge=Ke[0],rt=Ke[1],Ce=t.useRef(),Oe=ur(y),_e=v==="rtl",Ae=Xe(T,{value:_,postState:function(E){return E||Ie}}),be=F(Ae,2),X=be[0],ye=be[1],ve=function(E){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;function G(){ye(E),we==null||we(E)}x?Fn.flushSync(G):G()},ie=t.useState(X),J=F(ie,2),tn=J[0],nn=J[1],at=t.useRef(!1),rn=t.useMemo(function(){return(S==="inline"||S==="vertical")&&O?["vertical",O]:[S,!1]},[S,O]),yt=F(rn,2),qe=yt[0],it=yt[1],It=qe==="inline",an=t.useState(qe),Mt=F(an,2),se=Mt[0],on=Mt[1],ln=t.useState(it),St=F(ln,2),un=St[0],sn=St[1];t.useEffect(function(){on(qe),sn(it),at.current&&(It?ye(tn):ve(Ie))},[qe,it]);var cn=t.useState(0),Et=F(cn,2),Be=Et[0],dn=Et[1],ot=Be>=ae.length-1||se!=="horizontal"||p;t.useEffect(function(){It&&nn(X)},[X]),t.useEffect(function(){return at.current=!0,function(){at.current=!1}},[]);var fe=or(),Rt=fe.registerPath,Pt=fe.unregisterPath,vn=fe.refreshOverflowKeys,xt=fe.isSubPathKey,fn=fe.getKeyPath,mn=fe.getKeys,pn=fe.getSubPathKeys,gn=t.useMemo(function(){return{registerPath:Rt,unregisterPath:Pt}},[Rt,Pt]),hn=t.useMemo(function(){return{isSubPathKey:xt}},[xt]);t.useEffect(function(){vn(ot?Ie:ae.slice(Be+1).map(function(K){return K.key}))},[Be,ot]);var Cn=Xe($||Z&&((a=ae[0])===null||a===void 0?void 0:a.key),{value:$}),wt=F(Cn,2),ke=wt[0],lt=wt[1],bn=Ee(function(K){lt(K)}),yn=Ee(function(){lt(void 0)});t.useImperativeHandle(n,function(){return{list:Ce.current,focus:function(E){var x,G=ke??((x=ae.find(function(On){return!On.props.disabled}))===null||x===void 0?void 0:x.key);if(G){var q,me,Le;(q=Ce.current)===null||q===void 0||(me=q.querySelector("li[data-menu-id='".concat(ft(Oe,G),"']")))===null||me===void 0||(Le=me.focus)===null||Le===void 0||Le.call(me,E)}}}});var In=Xe(ne||[],{value:le,postState:function(E){return Array.isArray(E)?E:E==null?Ie:[E]}}),Nt=F(In,2),Ye=Nt[0],Mn=Nt[1],Sn=function(E){if(V){var x=E.key,G=Ye.includes(x),q;A?G?q=Ye.filter(function(Le){return Le!==x}):q=[].concat(pe(Ye),[x]):q=[x],Mn(q);var me=N(N({},E),{},{selectedKeys:q});G?Q==null||Q(me):re==null||re(me)}!A&&X.length&&se!=="inline"&&ve(Ie)},En=Ee(function(K){xe==null||xe(Qe(K)),Sn(K)}),Kt=Ee(function(K,E){var x=X.filter(function(q){return q!==K});if(E)x.push(K);else if(se!=="inline"){var G=pn(K);x=x.filter(function(q){return!G.has(q)})}Vt(X,x,!0)||ve(x,!0)}),Rn=Ee(Pe),Pn=function(E,x){var G=x??!X.includes(E);Kt(E,G)},xn=rr(se,ke,_e,Oe,Ce,mn,fn,lt,Pn,We);t.useEffect(function(){rt(!0)},[]);var wn=t.useMemo(function(){return{_internalRenderMenuItem:Ne,_internalRenderSubMenuItem:He}},[Ne,He]),Nn=se!=="horizontal"||p?ae:ae.map(function(K,E){return t.createElement(Ve,{key:K.key,overflowDisabled:E>Be},K)}),Kn=t.createElement(Te,B({id:y,ref:Ce,prefixCls:"".concat(i,"-overflow"),component:"ul",itemComponent:gt,className:oe(i,"".concat(i,"-root"),"".concat(i,"-").concat(se),c,(o={},w(o,"".concat(i,"-inline-collapsed"),un),w(o,"".concat(i,"-rtl"),_e),o),u),dir:v,style:s,role:"menu",tabIndex:g,data:Nn,renderRawItem:function(E){return E},renderRawRest:function(E){var x=E.length,G=x?ae.slice(-x):null;return t.createElement(bt,{eventKey:dt,title:ze,disabled:ot,internalPopupClose:x===0,popupClassName:Ue},G)},maxCount:se!=="horizontal"||p?Te.INVALIDATE:Te.RESPONSIVE,ssr:"full","data-menu-list":!0,onVisibleChange:function(E){dn(E)},onKeyDown:xn},je));return t.createElement(mt.Provider,{value:wn},t.createElement(zt.Provider,{value:Oe},t.createElement(Ve,{prefixCls:i,rootClassName:u,mode:se,openKeys:X,rtl:_e,disabled:C,motion:Ge?R:null,defaultMotions:Ge?H:null,activeKey:ke,onActive:bn,onInactive:yn,selectedKeys:Ye,inlineIndent:I,subMenuOpenDelay:f,subMenuCloseDelay:P,forceSubMenuRender:W,builtinPlacements:de,triggerSubMenuAction:he,getPopupContainer:Rn,itemIcon:ue,expandIcon:j,onItemClick:En,onOpenChange:Kt},t.createElement(jt.Provider,{value:hn},Kn),t.createElement("div",{style:{display:"none"},"aria-hidden":!0},t.createElement(Wt.Provider,{value:gn},ae)))))}),Kr=["className","title","eventKey","children"],Or=["children"],_r=function(n){var a=n.className,o=n.title;n.eventKey;var r=n.children,l=Y(n,Kr),i=t.useContext(ee),u=i.prefixCls,s="".concat(u,"-item-group");return t.createElement("li",B({role:"presentation"},l,{onClick:function(m){return m.stopPropagation()},className:oe(s,a)}),t.createElement("div",{role:"presentation",className:"".concat(s,"-title"),title:typeof o=="string"?o:void 0},o),t.createElement("ul",{role:"group",className:"".concat(s,"-list")},r))};function Qt(e){var n=e.children,a=Y(e,Or),o=Fe(a.eventKey),r=Ct(n,o),l=et();return l?r:t.createElement(_r,Tt(a,["warnKey"]),r)}function en(e){var n=e.className,a=e.style,o=t.useContext(ee),r=o.prefixCls,l=et();return l?null:t.createElement("li",{className:oe("".concat(r,"-item-divider"),n),style:a})}var tt=Nr;tt.Item=gt;tt.SubMenu=bt;tt.ItemGroup=Qt;tt.Divider=en;var Me={adjustX:1,adjustY:1},Se=[0,0],Ar={topLeft:{points:["bl","tl"],overflow:Me,offset:[0,-4],targetOffset:Se},topCenter:{points:["bc","tc"],overflow:Me,offset:[0,-4],targetOffset:Se},topRight:{points:["br","tr"],overflow:Me,offset:[0,-4],targetOffset:Se},bottomLeft:{points:["tl","bl"],overflow:Me,offset:[0,4],targetOffset:Se},bottomCenter:{points:["tc","bc"],overflow:Me,offset:[0,4],targetOffset:Se},bottomRight:{points:["tr","br"],overflow:Me,offset:[0,4],targetOffset:Se}},kr=te.ESC,Lr=te.TAB;function $r(e){var n=e.visible,a=e.setTriggerVisible,o=e.triggerRef,r=e.onVisibleChange,l=e.autoFocus,i=t.useRef(!1),u=function(){if(n&&o.current){var g,d,h,v;(g=o.current)===null||g===void 0||(d=g.triggerRef)===null||d===void 0||(h=d.current)===null||h===void 0||(v=h.focus)===null||v===void 0||v.call(h),a(!1),typeof r=="function"&&r(!1)}},s=function(){var g,d,h,v,y=Gt((g=o.current)===null||g===void 0||(d=g.popupRef)===null||d===void 0||(h=d.current)===null||h===void 0||(v=h.getElement)===null||v===void 0?void 0:v.call(h)),M=y[0];return M!=null&&M.focus?(M.focus(),i.current=!0,!0):!1},c=function(g){switch(g.keyCode){case kr:u();break;case Lr:{var d=!1;i.current||(d=s()),d?g.preventDefault():u();break}}};t.useEffect(function(){return n?(window.addEventListener("keydown",c),l&&Re(s,3),function(){window.removeEventListener("keydown",c),i.current=!1}):function(){i.current=!1}},[n])}var Dr=["arrow","prefixCls","transitionName","animation","align","placement","placements","getPopupContainer","showAction","hideAction","overlayClassName","overlayStyle","visible","trigger","autoFocus"];function Tr(e,n){var a=e.arrow,o=a===void 0?!1:a,r=e.prefixCls,l=r===void 0?"rc-dropdown":r,i=e.transitionName,u=e.animation,s=e.align,c=e.placement,m=c===void 0?"bottomLeft":c,g=e.placements,d=g===void 0?Ar:g,h=e.getPopupContainer,v=e.showAction,y=e.hideAction,M=e.overlayClassName,S=e.overlayStyle,O=e.visible,C=e.trigger,p=C===void 0?["hover"]:C,b=e.autoFocus,f=Y(e,Dr),U=t.useState(),P=F(U,2),W=P[0],T=P[1],_="visible"in e?O:W,$=t.useRef(null);t.useImperativeHandle(n,function(){return $.current}),$r({visible:_,setTriggerVisible:T,triggerRef:$,onVisibleChange:e.onVisibleChange,autoFocus:b});var Z=function(){var I=e.overlay,R;return typeof I=="function"?R=I():R=I,R},D=function(I){var R=e.onOverlayClick;T(!1),R&&R(I)},V=function(I){var R=e.onVisibleChange;T(I),typeof R=="function"&&R(I)},k=function(){var I=Z();return t.createElement(t.Fragment,null,o&&t.createElement("div",{className:"".concat(l,"-arrow")}),I)},A=function(){var I=e.overlay;return typeof I=="function"?k:k()},ne=function(){var I=e.minOverlayWidthMatchTrigger,R=e.alignPoint;return"minOverlayWidthMatchTrigger"in e?I:!R},le=function(){var I=e.openClassName;return I!==void 0?I:"".concat(l,"-open")},re=function(){var I=e.children,R=I.props?I.props:{},H=oe(R.className,le());return _&&I?t.cloneElement(I,{className:H}):I},Q=y;return!Q&&p.indexOf("contextMenu")!==-1&&(Q=["click"]),t.createElement(Ft,N(N({builtinPlacements:d},f),{},{prefixCls:l,ref:$,popupClassName:oe(M,w({},"".concat(l,"-show-arrow"),o)),popupStyle:S,action:p,showAction:v,hideAction:Q||[],popupPlacement:m,popupAlign:s,popupTransitionName:i,popupAnimation:u,popupVisible:_,stretch:ne()?"minWidth":"",popup:A(),onPopupVisibleChange:V,onPopupClick:D,getPopupContainer:h}),re())}const jr=t.forwardRef(Tr);export{en as D,Wr as E,gt as M,bt as S,Qt as a,tt as b,Hr as c,jr as d,Fe as u}; +import{A as $t,f as N,u as Y,y as _n,_ as pe,w as Re,b as w,a as F,z as Dt,aG as An,c as oe,q as kn,B as Ln,p as $n,l as Dn,o as Tt,j as Tn,d as Vn}from"./_setToString-dbbee35a.js";import{r as t,_ as B,e as Fn}from"./umi-37873494.js";import{d as Vt,i as zn,K as te,u as Xe,G as Te,c as Ft}from"./TextArea-27ba039d.js";import{t as Un}from"./button-1ef38c18.js";var Wn={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z"}}]},name:"edit",theme:"outlined"};const Hn=Wn;var jn=function(n,a){return t.createElement($t,N(N({},n),{},{ref:a,icon:Hn}))},Gn=t.forwardRef(jn);const Wr=Gn;var qn={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M176 511a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"ellipsis",theme:"outlined"};const Bn=qn;var Yn=function(n,a){return t.createElement($t,N(N({},n),{},{ref:a,icon:Bn}))},Xn=t.forwardRef(Yn);const Hr=Xn;var zt=t.createContext(null);function ft(e,n){return e===void 0?null:"".concat(e,"-").concat(n)}function Ut(e){var n=t.useContext(zt);return ft(n,e)}var Jn=["children","locked"],ee=t.createContext(null);function Zn(e,n){var a=N({},e);return Object.keys(n).forEach(function(o){var r=n[o];r!==void 0&&(a[o]=r)}),a}function Ve(e){var n=e.children,a=e.locked,o=Y(e,Jn),r=t.useContext(ee),l=_n(function(){return Zn(r,o)},[r,o],function(i,u){return!a&&(i[0]!==u[0]||!Vt(i[1],u[1],!0))});return t.createElement(ee.Provider,{value:l},n)}var Qn=[],Wt=t.createContext(null);function et(){return t.useContext(Wt)}var Ht=t.createContext(Qn);function Fe(e){var n=t.useContext(Ht);return t.useMemo(function(){return e!==void 0?[].concat(pe(n),[e]):n},[n,e])}var jt=t.createContext(null),mt=t.createContext({});function Ot(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(zn(e)){var a=e.nodeName.toLowerCase(),o=["input","select","textarea","button"].includes(a)||e.isContentEditable||a==="a"&&!!e.getAttribute("href"),r=e.getAttribute("tabindex"),l=Number(r),i=null;return r&&!Number.isNaN(l)?i=l:o&&i===null&&(i=0),o&&e.disabled&&(i=null),i!==null&&(i>=0||n&&i<0)}return!1}function Gt(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,a=pe(e.querySelectorAll("*")).filter(function(o){return Ot(o,n)});return Ot(e,n)&&a.unshift(e),a}var ut=te.LEFT,st=te.RIGHT,ct=te.UP,Je=te.DOWN,Ze=te.ENTER,qt=te.ESC,$e=te.HOME,De=te.END,_t=[ct,Je,ut,st];function er(e,n,a,o){var r,l,i,u,s="prev",c="next",m="children",g="parent";if(e==="inline"&&o===Ze)return{inlineTrigger:!0};var d=(r={},w(r,ct,s),w(r,Je,c),r),h=(l={},w(l,ut,a?c:s),w(l,st,a?s:c),w(l,Je,m),w(l,Ze,m),l),v=(i={},w(i,ct,s),w(i,Je,c),w(i,Ze,m),w(i,qt,g),w(i,ut,a?m:g),w(i,st,a?g:m),i),y={inline:d,horizontal:h,vertical:v,inlineSub:d,horizontalSub:v,verticalSub:v},M=(u=y["".concat(e).concat(n?"":"Sub")])===null||u===void 0?void 0:u[o];switch(M){case s:return{offset:-1,sibling:!0};case c:return{offset:1,sibling:!0};case g:return{offset:-1,sibling:!1};case m:return{offset:1,sibling:!1};default:return null}}function tr(e){for(var n=e;n;){if(n.getAttribute("data-menu-list"))return n;n=n.parentElement}return null}function nr(e,n){for(var a=e||document.activeElement;a;){if(n.has(a))return a;a=a.parentElement}return null}function Bt(e,n){var a=Gt(e,!0);return a.filter(function(o){return n.has(o)})}function At(e,n,a){var o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1;if(!e)return null;var r=Bt(e,n),l=r.length,i=r.findIndex(function(u){return a===u});return o<0?i===-1?i=l-1:i-=1:o>0&&(i+=1),i=(i+l)%l,r[i]}function rr(e,n,a,o,r,l,i,u,s,c){var m=t.useRef(),g=t.useRef();g.current=n;var d=function(){Re.cancel(m.current)};return t.useEffect(function(){return function(){d()}},[]),function(h){var v=h.which;if([].concat(_t,[Ze,qt,$e,De]).includes(v)){var y,M,S,O=function(){y=new Set,M=new Map,S=new Map;var V=l();return V.forEach(function(k){var A=document.querySelector("[data-menu-id='".concat(ft(o,k),"']"));A&&(y.add(A),S.set(A,k),M.set(k,A))}),y};O();var C=M.get(n),p=nr(C,y),b=S.get(p),f=er(e,i(b,!0).length===1,a,v);if(!f&&v!==$e&&v!==De)return;(_t.includes(v)||[$e,De].includes(v))&&h.preventDefault();var U=function(V){if(V){var k=V,A=V.querySelector("a");A!=null&&A.getAttribute("href")&&(k=A);var ne=S.get(V);u(ne),d(),m.current=Re(function(){g.current===ne&&k.focus()})}};if([$e,De].includes(v)||f.sibling||!p){var P;!p||e==="inline"?P=r.current:P=tr(p);var W,T=Bt(P,y);v===$e?W=T[0]:v===De?W=T[T.length-1]:W=At(P,y,p,f.offset),U(W)}else if(f.inlineTrigger)s(b);else if(f.offset>0)s(b,!0),d(),m.current=Re(function(){O();var D=p.getAttribute("aria-controls"),V=document.getElementById(D),k=At(V,y);U(k)},5);else if(f.offset<0){var _=i(b,!0),$=_[_.length-2],Z=M.get($);s($,!1),U(Z)}}c==null||c(h)}}function ar(e){Promise.resolve().then(e)}var pt="__RC_UTIL_PATH_SPLIT__",kt=function(n){return n.join(pt)},ir=function(n){return n.split(pt)},dt="rc-menu-more";function or(){var e=t.useState({}),n=F(e,2),a=n[1],o=t.useRef(new Map),r=t.useRef(new Map),l=t.useState([]),i=F(l,2),u=i[0],s=i[1],c=t.useRef(0),m=t.useRef(!1),g=function(){m.current||a({})},d=t.useCallback(function(C,p){var b=kt(p);r.current.set(b,C),o.current.set(C,b),c.current+=1;var f=c.current;ar(function(){f===c.current&&g()})},[]),h=t.useCallback(function(C,p){var b=kt(p);r.current.delete(b),o.current.delete(C)},[]),v=t.useCallback(function(C){s(C)},[]),y=t.useCallback(function(C,p){var b=o.current.get(C)||"",f=ir(b);return p&&u.includes(f[0])&&f.unshift(dt),f},[u]),M=t.useCallback(function(C,p){return C.some(function(b){var f=y(b,!0);return f.includes(p)})},[y]),S=function(){var p=pe(o.current.keys());return u.length&&p.push(dt),p},O=t.useCallback(function(C){var p="".concat(o.current.get(C)).concat(pt),b=new Set;return pe(r.current.keys()).forEach(function(f){f.startsWith(p)&&b.add(r.current.get(f))}),b},[]);return t.useEffect(function(){return function(){m.current=!0}},[]),{registerPath:d,unregisterPath:h,refreshOverflowKeys:v,isSubPathKey:M,getKeyPath:y,getKeys:S,getSubPathKeys:O}}function Ee(e){var n=t.useRef(e);n.current=e;var a=t.useCallback(function(){for(var o,r=arguments.length,l=new Array(r),i=0;i1&&(O.motionAppear=!1);var C=O.onVisibleChanged;return O.onVisibleChanged=function(p){return!d.current&&!p&&M(!0),C==null?void 0:C(p)},y?null:t.createElement(Ve,{mode:l,locked:!d.current},t.createElement(Vn,B({visible:S},O,{forceRender:s,removeOnLeave:!1,leavedClassName:"".concat(u,"-hidden")}),function(p){var b=p.className,f=p.style;return t.createElement(ht,{id:n,className:b,style:f},r)}))}var Rr=["style","className","title","eventKey","warnKey","disabled","internalPopupClose","children","itemIcon","expandIcon","popupClassName","popupOffset","onClick","onMouseEnter","onMouseLeave","onTitleClick","onTitleMouseEnter","onTitleMouseLeave"],Pr=["active"],xr=function(n){var a,o=n.style,r=n.className,l=n.title,i=n.eventKey;n.warnKey;var u=n.disabled,s=n.internalPopupClose,c=n.children,m=n.itemIcon,g=n.expandIcon,d=n.popupClassName,h=n.popupOffset,v=n.onClick,y=n.onMouseEnter,M=n.onMouseLeave,S=n.onTitleClick,O=n.onTitleMouseEnter,C=n.onTitleMouseLeave,p=Y(n,Rr),b=Ut(i),f=t.useContext(ee),U=f.prefixCls,P=f.mode,W=f.openKeys,T=f.disabled,_=f.overflowDisabled,$=f.activeKey,Z=f.selectedKeys,D=f.itemIcon,V=f.expandIcon,k=f.onItemClick,A=f.onOpenChange,ne=f.onActive,le=t.useContext(mt),re=le._internalRenderSubMenuItem,Q=t.useContext(jt),L=Q.isSubPathKey,I=Fe(),R="".concat(U,"-submenu"),H=T||u,ge=t.useRef(),he=t.useRef(),de=m||D,ue=g||V,j=W.includes(i),z=!_&&j,ze=L(Z,i),Ue=Yt(i,H,O,C),Pe=Ue.active,xe=Y(Ue,Pr),we=t.useState(!1),We=F(we,2),Ne=We[0],He=We[1],je=function(J){H||He(J)},ae=function(J){je(!0),y==null||y({key:i,domEvent:J})},nt=function(J){je(!1),M==null||M({key:i,domEvent:J})},Ke=t.useMemo(function(){return Pe||(P!=="inline"?Ne||L([$],i):!1)},[P,Pe,$,Ne,i,L]),Ge=Xt(I.length),rt=function(J){H||(S==null||S({key:i,domEvent:J}),P==="inline"&&A(i,!j))},Ce=Ee(function(ie){v==null||v(Qe(ie)),k(ie)}),Oe=function(J){P!=="inline"&&A(i,J)},_e=function(){ne(i)},Ae=b&&"".concat(b,"-popup"),be=t.createElement("div",B({role:"menuitem",style:Ge,className:"".concat(R,"-title"),tabIndex:H?null:-1,ref:ge,title:typeof l=="string"?l:null,"data-menu-id":_&&b?null:b,"aria-expanded":z,"aria-haspopup":!0,"aria-controls":Ae,"aria-disabled":H,onClick:rt,onFocus:_e},xe),l,t.createElement(Jt,{icon:P!=="horizontal"?ue:null,props:N(N({},n),{},{isOpen:z,isSubMenu:!0})},t.createElement("i",{className:"".concat(R,"-arrow")}))),X=t.useRef(P);if(P!=="inline"&&I.length>1?X.current="vertical":X.current=P,!_){var ye=X.current;be=t.createElement(Sr,{mode:ye,prefixCls:R,visible:!s&&z&&P!=="inline",popupClassName:d,popupOffset:h,popup:t.createElement(Ve,{mode:ye==="horizontal"?"vertical":ye},t.createElement(ht,{id:Ae,ref:he},c)),disabled:H,onVisibleChange:Oe},be)}var ve=t.createElement(Te.Item,B({role:"none"},p,{component:"li",style:o,className:oe(R,"".concat(R,"-").concat(P),r,(a={},w(a,"".concat(R,"-open"),z),w(a,"".concat(R,"-active"),Ke),w(a,"".concat(R,"-selected"),ze),w(a,"".concat(R,"-disabled"),H),a)),onMouseEnter:ae,onMouseLeave:nt}),be,!_&&t.createElement(Er,{id:Ae,open:z,keyPath:I},c));return re&&(ve=re(ve,n,{selected:ze,active:Ke,open:z,disabled:H})),t.createElement(Ve,{onItemClick:Ce,mode:P==="horizontal"?"vertical":P,itemIcon:de,expandIcon:ue},ve)};function bt(e){var n=e.eventKey,a=e.children,o=Fe(n),r=Ct(a,o),l=et();t.useEffect(function(){if(l)return l.registerPath(n,o),function(){l.unregisterPath(n,o)}},[o]);var i;return l?i=r:i=t.createElement(xr,e,r),t.createElement(Ht.Provider,{value:o},i)}var wr=["prefixCls","rootClassName","style","className","tabIndex","items","children","direction","id","mode","inlineCollapsed","disabled","disabledOverflow","subMenuOpenDelay","subMenuCloseDelay","forceSubMenuRender","defaultOpenKeys","openKeys","activeKey","defaultActiveFirst","selectable","multiple","defaultSelectedKeys","selectedKeys","onSelect","onDeselect","inlineIndent","motion","defaultMotions","triggerSubMenuAction","builtinPlacements","itemIcon","expandIcon","overflowedIndicator","overflowedIndicatorPopupClassName","getPopupContainer","onClick","onOpenChange","onKeyDown","openAnimation","openTransitionName","_internalRenderMenuItem","_internalRenderSubMenuItem"],Ie=[],Nr=t.forwardRef(function(e,n){var a,o,r=e,l=r.prefixCls,i=l===void 0?"rc-menu":l,u=r.rootClassName,s=r.style,c=r.className,m=r.tabIndex,g=m===void 0?0:m,d=r.items,h=r.children,v=r.direction,y=r.id,M=r.mode,S=M===void 0?"vertical":M,O=r.inlineCollapsed,C=r.disabled,p=r.disabledOverflow,b=r.subMenuOpenDelay,f=b===void 0?.1:b,U=r.subMenuCloseDelay,P=U===void 0?.1:U,W=r.forceSubMenuRender,T=r.defaultOpenKeys,_=r.openKeys,$=r.activeKey,Z=r.defaultActiveFirst,D=r.selectable,V=D===void 0?!0:D,k=r.multiple,A=k===void 0?!1:k,ne=r.defaultSelectedKeys,le=r.selectedKeys,re=r.onSelect,Q=r.onDeselect,L=r.inlineIndent,I=L===void 0?24:L,R=r.motion,H=r.defaultMotions,ge=r.triggerSubMenuAction,he=ge===void 0?"hover":ge,de=r.builtinPlacements,ue=r.itemIcon,j=r.expandIcon,z=r.overflowedIndicator,ze=z===void 0?"...":z,Ue=r.overflowedIndicatorPopupClassName,Pe=r.getPopupContainer,xe=r.onClick,we=r.onOpenChange,We=r.onKeyDown;r.openAnimation,r.openTransitionName;var Ne=r._internalRenderMenuItem,He=r._internalRenderSubMenuItem,je=Y(r,wr),ae=t.useMemo(function(){return br(h,d,Ie)},[h,d]),nt=t.useState(!1),Ke=F(nt,2),Ge=Ke[0],rt=Ke[1],Ce=t.useRef(),Oe=ur(y),_e=v==="rtl",Ae=Xe(T,{value:_,postState:function(E){return E||Ie}}),be=F(Ae,2),X=be[0],ye=be[1],ve=function(E){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;function G(){ye(E),we==null||we(E)}x?Fn.flushSync(G):G()},ie=t.useState(X),J=F(ie,2),tn=J[0],nn=J[1],at=t.useRef(!1),rn=t.useMemo(function(){return(S==="inline"||S==="vertical")&&O?["vertical",O]:[S,!1]},[S,O]),yt=F(rn,2),qe=yt[0],it=yt[1],It=qe==="inline",an=t.useState(qe),Mt=F(an,2),se=Mt[0],on=Mt[1],ln=t.useState(it),St=F(ln,2),un=St[0],sn=St[1];t.useEffect(function(){on(qe),sn(it),at.current&&(It?ye(tn):ve(Ie))},[qe,it]);var cn=t.useState(0),Et=F(cn,2),Be=Et[0],dn=Et[1],ot=Be>=ae.length-1||se!=="horizontal"||p;t.useEffect(function(){It&&nn(X)},[X]),t.useEffect(function(){return at.current=!0,function(){at.current=!1}},[]);var fe=or(),Rt=fe.registerPath,Pt=fe.unregisterPath,vn=fe.refreshOverflowKeys,xt=fe.isSubPathKey,fn=fe.getKeyPath,mn=fe.getKeys,pn=fe.getSubPathKeys,gn=t.useMemo(function(){return{registerPath:Rt,unregisterPath:Pt}},[Rt,Pt]),hn=t.useMemo(function(){return{isSubPathKey:xt}},[xt]);t.useEffect(function(){vn(ot?Ie:ae.slice(Be+1).map(function(K){return K.key}))},[Be,ot]);var Cn=Xe($||Z&&((a=ae[0])===null||a===void 0?void 0:a.key),{value:$}),wt=F(Cn,2),ke=wt[0],lt=wt[1],bn=Ee(function(K){lt(K)}),yn=Ee(function(){lt(void 0)});t.useImperativeHandle(n,function(){return{list:Ce.current,focus:function(E){var x,G=ke??((x=ae.find(function(On){return!On.props.disabled}))===null||x===void 0?void 0:x.key);if(G){var q,me,Le;(q=Ce.current)===null||q===void 0||(me=q.querySelector("li[data-menu-id='".concat(ft(Oe,G),"']")))===null||me===void 0||(Le=me.focus)===null||Le===void 0||Le.call(me,E)}}}});var In=Xe(ne||[],{value:le,postState:function(E){return Array.isArray(E)?E:E==null?Ie:[E]}}),Nt=F(In,2),Ye=Nt[0],Mn=Nt[1],Sn=function(E){if(V){var x=E.key,G=Ye.includes(x),q;A?G?q=Ye.filter(function(Le){return Le!==x}):q=[].concat(pe(Ye),[x]):q=[x],Mn(q);var me=N(N({},E),{},{selectedKeys:q});G?Q==null||Q(me):re==null||re(me)}!A&&X.length&&se!=="inline"&&ve(Ie)},En=Ee(function(K){xe==null||xe(Qe(K)),Sn(K)}),Kt=Ee(function(K,E){var x=X.filter(function(q){return q!==K});if(E)x.push(K);else if(se!=="inline"){var G=pn(K);x=x.filter(function(q){return!G.has(q)})}Vt(X,x,!0)||ve(x,!0)}),Rn=Ee(Pe),Pn=function(E,x){var G=x??!X.includes(E);Kt(E,G)},xn=rr(se,ke,_e,Oe,Ce,mn,fn,lt,Pn,We);t.useEffect(function(){rt(!0)},[]);var wn=t.useMemo(function(){return{_internalRenderMenuItem:Ne,_internalRenderSubMenuItem:He}},[Ne,He]),Nn=se!=="horizontal"||p?ae:ae.map(function(K,E){return t.createElement(Ve,{key:K.key,overflowDisabled:E>Be},K)}),Kn=t.createElement(Te,B({id:y,ref:Ce,prefixCls:"".concat(i,"-overflow"),component:"ul",itemComponent:gt,className:oe(i,"".concat(i,"-root"),"".concat(i,"-").concat(se),c,(o={},w(o,"".concat(i,"-inline-collapsed"),un),w(o,"".concat(i,"-rtl"),_e),o),u),dir:v,style:s,role:"menu",tabIndex:g,data:Nn,renderRawItem:function(E){return E},renderRawRest:function(E){var x=E.length,G=x?ae.slice(-x):null;return t.createElement(bt,{eventKey:dt,title:ze,disabled:ot,internalPopupClose:x===0,popupClassName:Ue},G)},maxCount:se!=="horizontal"||p?Te.INVALIDATE:Te.RESPONSIVE,ssr:"full","data-menu-list":!0,onVisibleChange:function(E){dn(E)},onKeyDown:xn},je));return t.createElement(mt.Provider,{value:wn},t.createElement(zt.Provider,{value:Oe},t.createElement(Ve,{prefixCls:i,rootClassName:u,mode:se,openKeys:X,rtl:_e,disabled:C,motion:Ge?R:null,defaultMotions:Ge?H:null,activeKey:ke,onActive:bn,onInactive:yn,selectedKeys:Ye,inlineIndent:I,subMenuOpenDelay:f,subMenuCloseDelay:P,forceSubMenuRender:W,builtinPlacements:de,triggerSubMenuAction:he,getPopupContainer:Rn,itemIcon:ue,expandIcon:j,onItemClick:En,onOpenChange:Kt},t.createElement(jt.Provider,{value:hn},Kn),t.createElement("div",{style:{display:"none"},"aria-hidden":!0},t.createElement(Wt.Provider,{value:gn},ae)))))}),Kr=["className","title","eventKey","children"],Or=["children"],_r=function(n){var a=n.className,o=n.title;n.eventKey;var r=n.children,l=Y(n,Kr),i=t.useContext(ee),u=i.prefixCls,s="".concat(u,"-item-group");return t.createElement("li",B({role:"presentation"},l,{onClick:function(m){return m.stopPropagation()},className:oe(s,a)}),t.createElement("div",{role:"presentation",className:"".concat(s,"-title"),title:typeof o=="string"?o:void 0},o),t.createElement("ul",{role:"group",className:"".concat(s,"-list")},r))};function Qt(e){var n=e.children,a=Y(e,Or),o=Fe(a.eventKey),r=Ct(n,o),l=et();return l?r:t.createElement(_r,Tt(a,["warnKey"]),r)}function en(e){var n=e.className,a=e.style,o=t.useContext(ee),r=o.prefixCls,l=et();return l?null:t.createElement("li",{className:oe("".concat(r,"-item-divider"),n),style:a})}var tt=Nr;tt.Item=gt;tt.SubMenu=bt;tt.ItemGroup=Qt;tt.Divider=en;var Me={adjustX:1,adjustY:1},Se=[0,0],Ar={topLeft:{points:["bl","tl"],overflow:Me,offset:[0,-4],targetOffset:Se},topCenter:{points:["bc","tc"],overflow:Me,offset:[0,-4],targetOffset:Se},topRight:{points:["br","tr"],overflow:Me,offset:[0,-4],targetOffset:Se},bottomLeft:{points:["tl","bl"],overflow:Me,offset:[0,4],targetOffset:Se},bottomCenter:{points:["tc","bc"],overflow:Me,offset:[0,4],targetOffset:Se},bottomRight:{points:["tr","br"],overflow:Me,offset:[0,4],targetOffset:Se}},kr=te.ESC,Lr=te.TAB;function $r(e){var n=e.visible,a=e.setTriggerVisible,o=e.triggerRef,r=e.onVisibleChange,l=e.autoFocus,i=t.useRef(!1),u=function(){if(n&&o.current){var g,d,h,v;(g=o.current)===null||g===void 0||(d=g.triggerRef)===null||d===void 0||(h=d.current)===null||h===void 0||(v=h.focus)===null||v===void 0||v.call(h),a(!1),typeof r=="function"&&r(!1)}},s=function(){var g,d,h,v,y=Gt((g=o.current)===null||g===void 0||(d=g.popupRef)===null||d===void 0||(h=d.current)===null||h===void 0||(v=h.getElement)===null||v===void 0?void 0:v.call(h)),M=y[0];return M!=null&&M.focus?(M.focus(),i.current=!0,!0):!1},c=function(g){switch(g.keyCode){case kr:u();break;case Lr:{var d=!1;i.current||(d=s()),d?g.preventDefault():u();break}}};t.useEffect(function(){return n?(window.addEventListener("keydown",c),l&&Re(s,3),function(){window.removeEventListener("keydown",c),i.current=!1}):function(){i.current=!1}},[n])}var Dr=["arrow","prefixCls","transitionName","animation","align","placement","placements","getPopupContainer","showAction","hideAction","overlayClassName","overlayStyle","visible","trigger","autoFocus"];function Tr(e,n){var a=e.arrow,o=a===void 0?!1:a,r=e.prefixCls,l=r===void 0?"rc-dropdown":r,i=e.transitionName,u=e.animation,s=e.align,c=e.placement,m=c===void 0?"bottomLeft":c,g=e.placements,d=g===void 0?Ar:g,h=e.getPopupContainer,v=e.showAction,y=e.hideAction,M=e.overlayClassName,S=e.overlayStyle,O=e.visible,C=e.trigger,p=C===void 0?["hover"]:C,b=e.autoFocus,f=Y(e,Dr),U=t.useState(),P=F(U,2),W=P[0],T=P[1],_="visible"in e?O:W,$=t.useRef(null);t.useImperativeHandle(n,function(){return $.current}),$r({visible:_,setTriggerVisible:T,triggerRef:$,onVisibleChange:e.onVisibleChange,autoFocus:b});var Z=function(){var I=e.overlay,R;return typeof I=="function"?R=I():R=I,R},D=function(I){var R=e.onOverlayClick;T(!1),R&&R(I)},V=function(I){var R=e.onVisibleChange;T(I),typeof R=="function"&&R(I)},k=function(){var I=Z();return t.createElement(t.Fragment,null,o&&t.createElement("div",{className:"".concat(l,"-arrow")}),I)},A=function(){var I=e.overlay;return typeof I=="function"?k:k()},ne=function(){var I=e.minOverlayWidthMatchTrigger,R=e.alignPoint;return"minOverlayWidthMatchTrigger"in e?I:!R},le=function(){var I=e.openClassName;return I!==void 0?I:"".concat(l,"-open")},re=function(){var I=e.children,R=I.props?I.props:{},H=oe(R.className,le());return _&&I?t.cloneElement(I,{className:H}):I},Q=y;return!Q&&p.indexOf("contextMenu")!==-1&&(Q=["click"]),t.createElement(Ft,N(N({builtinPlacements:d},f),{},{prefixCls:l,ref:$,popupClassName:oe(M,w({},"".concat(l,"-show-arrow"),o)),popupStyle:S,action:p,showAction:v,hideAction:Q||[],popupPlacement:m,popupAlign:s,popupTransitionName:i,popupAnimation:u,popupVisible:_,stretch:ne()?"minWidth":"",popup:A(),onPopupVisibleChange:V,onPopupClick:D,getPopupContainer:h}),re())}const jr=t.forwardRef(Tr);export{en as D,Wr as E,gt as M,bt as S,Qt as a,tt as b,Hr as c,jr as d,Fe as u}; diff --git a/dist/assets/PlaySquareOutlined-f3c772fe.js b/dist/assets/PlaySquareOutlined-04ce0d9a.js similarity index 89% rename from dist/assets/PlaySquareOutlined-f3c772fe.js rename to dist/assets/PlaySquareOutlined-04ce0d9a.js index b1075533b2eedaa34b8202e5f28dc15b982617f1..168ee0ce70e104697123c75ba8c97159207c9c7d 100644 --- a/dist/assets/PlaySquareOutlined-f3c772fe.js +++ b/dist/assets/PlaySquareOutlined-04ce0d9a.js @@ -1 +1 @@ -import{A as c,f as e}from"./_setToString-397d22bb.js";import{r as a}from"./umi-91f9d113.js";var l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm-88-532h-48c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zm224 0h-48c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"}}]},name:"pause-circle",theme:"outlined"};const i=l;var s=function(t,r){return a.createElement(c,e(e({},t),{},{ref:r,icon:i}))},u=a.forwardRef(s);const P=u;var o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M442.3 677.6l199.4-156.7a11.3 11.3 0 000-17.7L442.3 346.4c-7.4-5.8-18.3-.6-18.3 8.8v313.5c0 9.4 10.9 14.7 18.3 8.9z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"play-square",theme:"outlined"};const d=o;var f=function(t,r){return a.createElement(c,e(e({},t),{},{ref:r,icon:d}))},v=a.forwardRef(f);const p=v;export{p as P,P as a}; +import{A as c,f as e}from"./_setToString-dbbee35a.js";import{r as a}from"./umi-37873494.js";var l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm-88-532h-48c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zm224 0h-48c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"}}]},name:"pause-circle",theme:"outlined"};const i=l;var s=function(t,r){return a.createElement(c,e(e({},t),{},{ref:r,icon:i}))},u=a.forwardRef(s);const P=u;var o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M442.3 677.6l199.4-156.7a11.3 11.3 0 000-17.7L442.3 346.4c-7.4-5.8-18.3-.6-18.3 8.8v313.5c0 9.4 10.9 14.7 18.3 8.9z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"play-square",theme:"outlined"};const d=o;var f=function(t,r){return a.createElement(c,e(e({},t),{},{ref:r,icon:d}))},v=a.forwardRef(f);const p=v;export{p as P,P as a}; diff --git a/dist/assets/ScoreEncoder-96e90be0.js b/dist/assets/ScoreEncoder-15dcb3c3.js similarity index 99% rename from dist/assets/ScoreEncoder-96e90be0.js rename to dist/assets/ScoreEncoder-15dcb3c3.js index fd003066f9fb7010cc70463ce0c2ac0038f1a558..4e9787ffcba7303e95f344978b6ae09a5211a521 100644 --- a/dist/assets/ScoreEncoder-96e90be0.js +++ b/dist/assets/ScoreEncoder-15dcb3c3.js @@ -1,4 +1,4 @@ -import{r as bo,s as Uo,g as qo,c as R,j as D,R as Wo}from"./umi-91f9d113.js";import"./parser-f1e7dbfb.js";import{W as Vo,a as O,b as Qo,E as $o,A as be}from"./index-4514925e.js";const gl=Vo/4,Ho=40;var yl={exports:{}},Kt={},vl={exports:{}},F={};/** +import{r as bo,s as Uo,g as qo,c as R,j as D,R as Wo}from"./umi-37873494.js";import"./parser-c740d6a8.js";import{W as Vo,a as O,b as Qo,E as $o,A as be}from"./index-a475ddbb.js";const gl=Vo/4,Ho=40;var yl={exports:{}},Kt={},vl={exports:{}},F={};/** * @license React * scheduler-unstable_mock.production.min.js * diff --git a/dist/assets/Table-571fc4c0.js b/dist/assets/Table-2396b2d2.js similarity index 99% rename from dist/assets/Table-571fc4c0.js rename to dist/assets/Table-2396b2d2.js index 87b25311972145a36c44e6340cee6630168dff33..eadd0d05dd38ea5b90c2f0678d9756397a3ac5f2 100644 --- a/dist/assets/Table-571fc4c0.js +++ b/dist/assets/Table-2396b2d2.js @@ -1,4 +1,4 @@ -import{A as Ft,f as p,w as ho,a as ee,v as dp,C as Ut,j as Ve,c as pe,b as B,e as po,d as Xs,x as en,_ as De,y as Zs,z as rn,q as yn,B as bn,p as Cn,l as xn,u as Le,o as qi,S as Fo,D as Xi,L as Na,E as Qs,F as wf,G as Js,H as fp,h as eu,I as es,J as vp,K as mp,M as hp,N as pp,t as zn,O as gp,P as yp,Q as bp,R as Yu,T as tu,U as Pf,V as Ef,W as ea,X as kf,Y as nu,Z as Rf,$ as ir,a0 as Zi,a1 as Ff,a2 as ta,a3 as Cp,a4 as Mf,a5 as Nf,a6 as Tf,a7 as Qi,a8 as xp,i as Gu,a9 as $f,aa as Sp,ab as rt,ac as Df,ad as pt,ae as $e,m as Dl,af as hn,ag as pn,ah as ru,ai as Mr,aj as Of,ak as wp,al as If,am as _f,an as Pp,ao as Lf,ap as jf,aq as Ep,ar as kp}from"./_setToString-397d22bb.js";import{r as s,_ as ne,k as kt,R as G,g as Ta,j as C,c as fi,e as Af}from"./umi-91f9d113.js";import{b as Kf,R as Mo,P as Rp,K as Ye,i as Vf,u as xt,c as Fp,d as qu,F as Ji,g as el,e as Rr,f as zf,h as tl,a as nr,E as Bf,T as un,j as nl,p as au,k as Mp,C as pa,l as Np,S as Gt}from"./TextArea-3bdaceca.js";import{i as Tp,a as $p,T as ga,C as Hf}from"./index-f8b1789b.js";import{T as Dp,s as ou,a as ao,F as _t,I as Zr,b as Op,D as Wf,S as Uf,R as Ip}from"./useDebounce-e1e8dc3b.js";import{d as Xu,r as _p,e as iu,f as No,P as Lp,D as jp,g as Zu,h as Qu,I as En,S as Yf,E as Ju,R as Bn,C as qt,j as Ap}from"./util-b514be53.js";import{t as lr,u as rl,B as On}from"./button-909b3565.js";import{u as al,b as Gf,B as qf,d as lu,g as Xf,a as Nr,L as Kp,c as go,S as Vp,D as zp}from"./index-dc40c6e7.js";import{S as Fr,a as Bp,d as Hp}from"./index-37861f16.js";import{_ as To,D as $o,a as Wp,O as Up,P as Yp,M as Gp}from"./index-3fb79805.js";import{D as Zf}from"./DeleteOutlined-0f1ef15a.js";import{C as qp,P as Qf,a as Xp}from"./progress-f968a1fe.js";import{A as Zp}from"./index-81cb47f8.js";var Qp={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 184H712v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H384v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H144c-17.7 0-32 14.3-32 32v664c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V216c0-17.7-14.3-32-32-32zm-40 656H184V460h656v380zM184 392V256h128v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h256v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h128v136H184z"}}]},name:"calendar",theme:"outlined"};const Jp=Qp;var eg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Jp}))},tg=s.forwardRef(eg);const Jf=tg;var ng={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"}}]},name:"caret-down",theme:"filled"};const rg=ng;var ag=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:rg}))},og=s.forwardRef(ag);const ig=og;var lg={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"}}]},name:"caret-down",theme:"outlined"};const sg=lg;var ug=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:sg}))},cg=s.forwardRef(ug);const dg=cg;var fg={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M858.9 689L530.5 308.2c-9.4-10.9-27.5-10.9-37 0L165.1 689c-12.2 14.2-1.2 35 18.5 35h656.8c19.7 0 30.7-20.8 18.5-35z"}}]},name:"caret-up",theme:"outlined"};const vg=fg;var mg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:vg}))},hg=s.forwardRef(mg);const pg=hg;var gg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"}}]},name:"clock-circle",theme:"outlined"};const yg=gg;var bg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:yg}))},Cg=s.forwardRef(bg);const ev=Cg;var xg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M840 836H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm0-724H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zM610.8 378c6 0 9.4-7 5.7-11.7L515.7 238.7a7.14 7.14 0 00-11.3 0L403.6 366.3a7.23 7.23 0 005.7 11.7H476v268h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.5c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H548V378h62.8z"}}]},name:"column-height",theme:"outlined"};const Sg=xg;var wg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Sg}))},Pg=s.forwardRef(wg);const Eg=Pg;var kg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M272.9 512l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L186.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H532c6.7 0 10.4-7.7 6.3-12.9L272.9 512zm304 0l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L490.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H836c6.7 0 10.4-7.7 6.3-12.9L576.9 512z"}}]},name:"double-left",theme:"outlined"};const Rg=kg;var Fg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Rg}))},Mg=s.forwardRef(Fg);const Ng=Mg;var Tg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M533.2 492.3L277.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H188c-6.7 0-10.4 7.7-6.3 12.9L447.1 512 181.7 851.1A7.98 7.98 0 00188 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5zm304 0L581.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H492c-6.7 0-10.4 7.7-6.3 12.9L751.1 512 485.7 851.1A7.98 7.98 0 00492 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5z"}}]},name:"double-right",theme:"outlined"};const $g=Tg;var Dg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:$g}))},Og=s.forwardRef(Dg);const Ig=Og;var _g={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z"}}]},name:"file",theme:"outlined"};const Lg=_g;var jg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Lg}))},Ag=s.forwardRef(jg);const tv=Ag;var Kg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M349 838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V642H349v196zm531.1-684H143.9c-24.5 0-39.8 26.7-27.5 48l221.3 376h348.8l221.3-376c12.1-21.3-3.2-48-27.7-48z"}}]},name:"filter",theme:"filled"};const Vg=Kg;var zg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Vg}))},Bg=s.forwardRef(zg);const Hg=Bg;var Wg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880.1 154H143.9c-24.5 0-39.8 26.7-27.5 48L349 597.4V838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V597.4L907.7 202c12.2-21.3-3.1-48-27.6-48zM603.4 798H420.6V642h182.9v156zm9.6-236.6l-9.5 16.6h-183l-9.5-16.6L212.7 226h598.6L613 561.4z"}}]},name:"filter",theme:"outlined"};const Ug=Wg;var Yg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Ug}))},Gg=s.forwardRef(Yg);const qg=Gg;var Xg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 444H820V330.4c0-17.7-14.3-32-32-32H473L355.7 186.2a8.15 8.15 0 00-5.5-2.2H96c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h698c13 0 24.8-7.9 29.7-20l134-332c1.5-3.8 2.3-7.9 2.3-12 0-17.7-14.3-32-32-32zM136 256h188.5l119.6 114.4H748V444H238c-13 0-24.8 7.9-29.7 20L136 643.2V256zm635.3 512H159l103.3-256h612.4L771.3 768z"}}]},name:"folder-open",theme:"outlined"};const Zg=Xg;var Qg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Zg}))},Jg=s.forwardRef(Qg);const e0=Jg;var t0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 298.4H521L403.7 186.2a8.15 8.15 0 00-5.5-2.2H144c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V330.4c0-17.7-14.3-32-32-32zM840 768H184V256h188.5l119.6 114.4H840V768z"}}]},name:"folder",theme:"outlined"};const n0=t0;var r0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:n0}))},a0=s.forwardRef(r0);const o0=a0;var i0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M391 240.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3a8.03 8.03 0 00-11.3 0l-42.4 42.3a8.03 8.03 0 000 11.3L280 333.6l-43.9 43.9a8.01 8.01 0 004.7 13.6L401 410c5.1.6 9.5-3.7 8.9-8.9L391 240.9zm10.1 373.2L240.8 633c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824a8.03 8.03 0 000 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7A8.01 8.01 0 00391 783l18.9-160.1c.6-5.1-3.7-9.4-8.8-8.8zm221.8-204.2L783.2 391c6.6-.8 9.4-8.9 4.7-13.6L744 333.6 877.7 200c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.3a8.03 8.03 0 00-11.3 0L690.3 279.9l-43.7-43.7a8.01 8.01 0 00-13.6 4.7L614.1 401c-.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9a8.01 8.01 0 00-4.7-13.6L623 614c-5.1-.6-9.5 3.7-8.9 8.9L633 783.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z"}}]},name:"fullscreen-exit",theme:"outlined"};const l0=i0;var s0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:l0}))},u0=s.forwardRef(s0);const c0=u0;var d0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M290 236.4l43.9-43.9a8.01 8.01 0 00-4.7-13.6L169 160c-5.1-.6-9.5 3.7-8.9 8.9L179 329.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zm352.7 187.3c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7a8.01 8.01 0 0013.6-4.7L863.9 169c.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370a8.03 8.03 0 000 11.3l42.4 42.4zM845 694.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3a8.03 8.03 0 00-11.3 0l-42.4 42.3a8.03 8.03 0 000 11.3L734 787.6l-43.9 43.9a8.01 8.01 0 004.7 13.6L855 864c5.1.6 9.5-3.7 8.9-8.9L845 694.9zm-463.7-94.6a8.03 8.03 0 00-11.3 0L236.3 733.9l-43.7-43.7a8.01 8.01 0 00-13.6 4.7L160.1 855c-.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z"}}]},name:"fullscreen",theme:"outlined"};const f0=d0;var v0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:f0}))},m0=s.forwardRef(v0);const h0=m0;var p0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M300 276.5a56 56 0 1056-97 56 56 0 00-56 97zm0 284a56 56 0 1056-97 56 56 0 00-56 97zM640 228a56 56 0 10112 0 56 56 0 00-112 0zm0 284a56 56 0 10112 0 56 56 0 00-112 0zM300 844.5a56 56 0 1056-97 56 56 0 00-56 97zM640 796a56 56 0 10112 0 56 56 0 00-112 0z"}}]},name:"holder",theme:"outlined"};const g0=p0;var y0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:g0}))},b0=s.forwardRef(y0);const C0=b0;var x0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"minus-square",theme:"outlined"};const S0=x0;var w0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:S0}))},P0=s.forwardRef(w0);const E0=P0;var k0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"plus-square",theme:"outlined"};const R0=k0;var F0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:R0}))},M0=s.forwardRef(F0);const N0=M0;var T0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M672 418H144c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H188V494h440v326z"}},{tag:"path",attrs:{d:"M819.3 328.5c-78.8-100.7-196-153.6-314.6-154.2l-.2-64c0-6.5-7.6-10.1-12.6-6.1l-128 101c-4 3.1-3.9 9.1 0 12.3L492 318.6c5.1 4 12.7.4 12.6-6.1v-63.9c12.9.1 25.9.9 38.8 2.5 42.1 5.2 82.1 18.2 119 38.7 38.1 21.2 71.2 49.7 98.4 84.3 27.1 34.7 46.7 73.7 58.1 115.8a325.95 325.95 0 016.5 140.9h74.9c14.8-103.6-11.3-213-81-302.3z"}}]},name:"rotate-left",theme:"outlined"};const $0=T0;var D0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:$0}))},O0=s.forwardRef(D0);const I0=O0;var _0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M480.5 251.2c13-1.6 25.9-2.4 38.8-2.5v63.9c0 6.5 7.5 10.1 12.6 6.1L660 217.6c4-3.2 4-9.2 0-12.3l-128-101c-5.1-4-12.6-.4-12.6 6.1l-.2 64c-118.6.5-235.8 53.4-314.6 154.2A399.75 399.75 0 00123.5 631h74.9c-.9-5.3-1.7-10.7-2.4-16.1-5.1-42.1-2.1-84.1 8.9-124.8 11.4-42.2 31-81.1 58.1-115.8 27.2-34.7 60.3-63.2 98.4-84.3 37-20.6 76.9-33.6 119.1-38.8z"}},{tag:"path",attrs:{d:"M880 418H352c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H396V494h440v326z"}}]},name:"rotate-right",theme:"outlined"};const L0=_0;var j0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:L0}))},A0=s.forwardRef(j0);const K0=A0;var V0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M908.1 353.1l-253.9-36.9L540.7 86.1c-3.1-6.3-8.2-11.4-14.5-14.5-15.8-7.8-35-1.3-42.9 14.5L369.8 316.2l-253.9 36.9c-7 1-13.4 4.3-18.3 9.3a32.05 32.05 0 00.6 45.3l183.7 179.1-43.4 252.9a31.95 31.95 0 0046.4 33.7L512 754l227.1 119.4c6.2 3.3 13.4 4.4 20.3 3.2 17.4-3 29.1-19.5 26.1-36.9l-43.4-252.9 183.7-179.1c5-4.9 8.3-11.3 9.3-18.3 2.7-17.5-9.5-33.7-27-36.3z"}}]},name:"star",theme:"filled"};const z0=V0;var B0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:z0}))},H0=s.forwardRef(B0);const W0=H0;var U0={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M873.1 596.2l-164-208A32 32 0 00684 376h-64.8c-6.7 0-10.4 7.7-6.3 13l144.3 183H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h695.9c26.8 0 41.7-30.8 25.2-51.8z"}}]},name:"swap-right",theme:"outlined"};const Y0=U0;var G0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Y0}))},q0=s.forwardRef(G0);const X0=q0;var Z0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 780H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zM505.7 669a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V176c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8z"}}]},name:"vertical-align-bottom",theme:"outlined"};const Q0=Z0;var J0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Q0}))},e1=s.forwardRef(J0);const t1=e1;var n1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 474H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zm-353.6-74.7c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H550V104c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v156h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.6zm11.4 225.4a7.14 7.14 0 00-11.3 0L405.6 752.3a7.23 7.23 0 005.7 11.7H474v156c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V764h62.8c6 0 9.4-7 5.7-11.7L517.7 624.7z"}}]},name:"vertical-align-middle",theme:"outlined"};const r1=n1;var a1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:r1}))},o1=s.forwardRef(a1);const i1=o1;var l1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 168H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zM518.3 355a8 8 0 00-12.6 0l-112 141.7a7.98 7.98 0 006.3 12.9h73.9V848c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V509.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 355z"}}]},name:"vertical-align-top",theme:"outlined"};const s1=l1;var u1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:s1}))},c1=s.forwardRef(u1);const d1=c1;var f1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zM480 416c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v184c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V416zm32 352a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"warning",theme:"filled"};const v1=f1;var m1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:v1}))},h1=s.forwardRef(m1);const p1=h1;var g1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M637 443H519V309c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v134H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h118v134c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V519h118c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z"}}]},name:"zoom-in",theme:"outlined"};const y1=g1;var b1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:y1}))},C1=s.forwardRef(b1);const x1=C1;var S1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M637 443H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h312c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z"}}]},name:"zoom-out",theme:"outlined"};const w1=S1;var P1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:w1}))},E1=s.forwardRef(P1);const k1=E1;function ts(t){return t!=null&&t===t.window}function R1(t,e){var r,n;if(typeof window>"u")return 0;var a=e?"scrollTop":"scrollLeft",o=0;return ts(t)?o=t[e?"pageYOffset":"pageXOffset"]:t instanceof Document?o=t.documentElement[a]:(t instanceof HTMLElement||t)&&(o=t[a]),t&&!ts(t)&&typeof o!="number"&&(o=(n=((r=t.ownerDocument)!==null&&r!==void 0?r:t).documentElement)===null||n===void 0?void 0:n[a]),o}function F1(t,e,r,n){var a=r-e;return t/=n/2,t<1?a/2*t*t*t+e:a/2*((t-=2)*t*t+2)+e}function M1(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=e.getContainer,n=r===void 0?function(){return window}:r,a=e.callback,o=e.duration,l=o===void 0?450:o,i=n(),u=R1(i,!0),c=Date.now(),d=function f(){var v=Date.now(),m=v-c,h=F1(m>l?l:m,u,t,l);ts(i)?i.scrollTo(window.pageXOffset,h):i instanceof Document||i.constructor.name==="HTMLDocument"?i.documentElement.scrollTop=h:i.scrollTop=h,m0&&arguments[0]!==void 0?arguments[0]:!0,e=s.useRef({}),r=Kf();return s.useEffect(function(){var n=Xu.subscribe(function(a){e.current=a,t&&r()});return function(){return Xu.unsubscribe(n)}},[]),e.current}var ns=s.createContext("default"),ec=function(e){var r=e.children,n=e.size;return s.createElement(ns.Consumer,null,function(a){return s.createElement(ns.Provider,{value:n||a},r)})},N1=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);af?"".concat(f,"+"):c,$=O==="0"||O===0,F=c===null||$&&!E,N=(o!=null||i!=null)&&F,R=m&&!$,I=R?"":O,L=s.useMemo(function(){var ue=I==null||I==="";return(ue||$&&!E)&&!R},[I,$,E,R]),j=s.useRef(c);L||(j.current=c);var _=j.current,A=s.useRef(I);L||(A.current=I);var K=A.current,z=s.useRef(R);L||(z.current=R);var V=s.useMemo(function(){if(!b)return ne({},x);var ue={marginTop:b[1]};return k==="rtl"?ue.left=parseInt(b[0],10):ue.right=-parseInt(b[0],10),ne(ne({},ue),x)},[k,b,x]),X=g??(typeof _=="string"||typeof _=="number"?_:void 0),W=L||!l?null:s.createElement("span",{className:"".concat(D,"-status-text")},l),Z=!_||Ve(_)!=="object"?void 0:po(_,function(ue){return{style:ne(ne({},V),ue.style)}}),U=pe(B(B(B({},"".concat(D,"-status-dot"),N),"".concat(D,"-status-").concat(o),!!o),"".concat(D,"-status-").concat(i),eo(i))),ae={};i&&!eo(i)&&(ae.background=i);var q=pe(D,B(B(B({},"".concat(D,"-status"),N),"".concat(D,"-not-a-wrapper"),!a),"".concat(D,"-rtl"),k==="rtl"),S);if(!a&&N){var te=V.color;return s.createElement("span",ne({},P,{className:q,style:V}),s.createElement("span",{className:U,style:ae}),l&&s.createElement("span",{style:{color:te},className:"".concat(D,"-status-text")},l))}return s.createElement("span",ne({},P,{className:q}),a,s.createElement(Xs,{visible:!L,motionName:"".concat(D,"-zoom"),motionAppear:!1,motionDeadline:1e3},function(ue){var Y=ue.className,J=M("scroll-number",n),Q=z.current,ie=pe(B(B(B(B(B(B({},"".concat(D,"-dot"),Q),"".concat(D,"-count"),!Q),"".concat(D,"-count-sm"),y==="small"),"".concat(D,"-multiple-words"),!Q&&K&&K.toString().length>1),"".concat(D,"-status-").concat(o),!!o),"".concat(D,"-status-").concat(i),eo(i))),le=ne({},V);return i&&!eo(i)&&(le=le||{},le.background=i),s.createElement(z1,{prefixCls:J,show:!L,motionClassName:Y,className:ie,count:K,title:X,style:le,key:"scrollNumber"},Z)}),W)};av.Ribbon=L1;const Nn=av;var H1={getNow:function(){return kt()},getFixedDate:function(e){return kt(e,"YYYY-MM-DD")},getEndDate:function(e){var r=e.clone();return r.endOf("month")},getWeekDay:function(e){var r=e.clone().locale("en_US");return r.weekday()+r.localeData().firstDayOfWeek()},getYear:function(e){return e.year()},getMonth:function(e){return e.month()},getDate:function(e){return e.date()},getHour:function(e){return e.hour()},getMinute:function(e){return e.minute()},getSecond:function(e){return e.second()},addYear:function(e,r){var n=e.clone();return n.add(r,"year")},addMonth:function(e,r){var n=e.clone();return n.add(r,"month")},addDate:function(e,r){var n=e.clone();return n.add(r,"day")},setYear:function(e,r){var n=e.clone();return n.year(r)},setMonth:function(e,r){var n=e.clone();return n.month(r)},setDate:function(e,r){var n=e.clone();return n.date(r)},setHour:function(e,r){var n=e.clone();return n.hour(r)},setMinute:function(e,r){var n=e.clone();return n.minute(r)},setSecond:function(e,r){var n=e.clone();return n.second(r)},isAfter:function(e,r){return e.isAfter(r)},isValidate:function(e){return e.isValid()},locale:{getWeekFirstDay:function(e){var r=kt().locale(e);return r.localeData().firstDayOfWeek()},getWeekFirstDate:function(e,r){var n=r.clone(),a=n.locale(e);return a.weekday(0)},getWeek:function(e,r){var n=r.clone(),a=n.locale(e);return a.week()},getShortWeekDays:function(e){var r=kt().locale(e);return r.localeData().weekdaysMin()},getShortMonths:function(e){var r=kt().locale(e);return r.localeData().monthsShort()},format:function(e,r,n){var a=r.clone(),o=a.locale(e);return o.format(n)},parse:function(e,r,n){for(var a=[],o=0;o1&&(l=e.addDate(l,-7)),l}function io(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1;switch(e){case"year":return r.addYear(t,n*10);case"quarter":case"month":return r.addYear(t,n);default:return r.addMonth(t,n)}}function Jt(t,e){var r=e.generateConfig,n=e.locale,a=e.format;return typeof a=="function"?a(t):r.locale.format(n.locale,t,a)}function fv(t,e){var r=e.generateConfig,n=e.locale,a=e.formatList;return!t||typeof a[0]=="function"?null:r.locale.parse(n.locale,t,a)}function is(t){var e=t.cellDate,r=t.mode,n=t.disabledDate,a=t.generateConfig;if(!n)return!1;var o=function(h,y,g){for(var b=y;b<=g;){var x=void 0;switch(h){case"date":{if(x=a.setDate(e,b),!n(x))return!1;break}case"month":{if(x=a.setMonth(e,b),!is({cellDate:x,mode:"month",generateConfig:a,disabledDate:n}))return!1;break}case"year":{if(x=a.setYear(e,b),!is({cellDate:x,mode:"year",generateConfig:a,disabledDate:n}))return!1;break}}b+=1}return!0};switch(r){case"date":case"week":return n(e);case"month":{var l=1,i=a.getDate(a.getEndDate(e));return o("date",l,i)}case"quarter":{var u=Math.floor(a.getMonth(e)/3)*3,c=u+2;return o("month",u,c)}case"year":return o("month",0,11);case"decade":{var d=a.getYear(e),f=Math.floor(d/$n)*$n,v=f+$n-1;return o("year",f,v)}}}function uy(t){var e=s.useContext(gn),r=e.hideHeader;if(r)return null;var n=t.prefixCls,a=t.generateConfig,o=t.locale,l=t.value,i=t.format,u="".concat(n,"-header");return s.createElement($a,{prefixCls:u},l?Jt(l,{locale:o,format:i,generateConfig:a}):" ")}function cy(t){var e=t.value,r=t.generateConfig,n=t.disabledMinutes,a=t.disabledSeconds,o=t.minutes,l=t.seconds,i=t.use12Hours,u=function(d,f,v,m){var h=e||r.getNow(),y=Math.max(0,f),g=Math.max(0,v),b=Math.max(0,m),x=n&&n(y);if(x!=null&&x.includes(g)){var S=o.find(function(P){return!x.includes(P.value)});if(S)g=S.value;else return null}var w=a&&a(y,g);if(w!=null&&w.includes(b)){var E=l.find(function(P){return!w.includes(P.value)});if(E)b=E.value;else return null}return h=ov(r,h,!i||!d?y:y+12,g,b),h};return u}function vv(t,e){for(var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"0",n=String(t);n.length=1?r|0:1,l=t;l<=e;l+=o)a.push({label:vv(l,2),value:l,disabled:(n||[]).includes(l)});return a}function vy(t){var e=t.generateConfig,r=t.prefixCls,n=t.operationRef,a=t.activeColumnIndex,o=t.value,l=t.showHour,i=t.showMinute,u=t.showSecond,c=t.use12Hours,d=t.hourStep,f=d===void 0?1:d,v=t.minuteStep,m=v===void 0?1:v,h=t.secondStep,y=h===void 0?1:h,g=t.disabledHours,b=t.disabledMinutes,x=t.disabledSeconds,S=t.disabledTime,w=t.hideDisabledOptions,E=t.onSelect,P=[],T="".concat(r,"-content"),M="".concat(r,"-time-panel"),k,D=o?e.getHour(o):-1,O=D,$=o?e.getMinute(o):-1,F=o?e.getSecond(o):-1,N=e.getNow(),R=s.useMemo(function(){if(S){var Y=S(N);return[Y.disabledHours,Y.disabledMinutes,Y.disabledSeconds]}return[g,b,x]},[g,b,x,S,N]),I=ee(R,3),L=I[0],j=I[1],_=I[2],A=Ol(0,23,f,L&&L()),K=Zs(function(){return A},A,fy);c&&(k=O>=12,O%=12);var z=s.useMemo(function(){if(!c)return[!1,!1];var Y=[!0,!0];return K.forEach(function(J){var Q=J.disabled,ie=J.value;Q||(ie>=12?Y[1]=!1:Y[0]=!1)}),Y},[c,K]),V=ee(z,2),X=V[0],W=V[1],Z=s.useMemo(function(){return c?K.filter(k?function(Y){return Y.value>=12}:function(Y){return Y.value<12}).map(function(Y){var J=Y.value%12,Q=J===0?"12":vv(J,2);return p(p({},Y),{},{label:Q,value:J})}):K},[c,k,K]),U=Ol(0,59,m,j&&j(D)),ae=Ol(0,59,y,_&&_(D,$)),q=cy({value:o,generateConfig:e,disabledMinutes:j,disabledSeconds:_,minutes:U,seconds:ae,use12Hours:c});n.current={onUpDown:function(J){var Q=P[a];if(Q)for(var ie=Q.units.findIndex(function(ve){return ve.value===Q.value}),le=Q.units.length,ge=1;ge2&&arguments[2]!==void 0?arguments[2]:!1;(we===y||it)&&(fe(xe),T&&T(xe),ae&&ae(xe,qe),M&&!ya(i,xe,ce)&&!(v!=null&&v(xe))&&M(xe))},ot=function(xe){if($y.includes(we)){var qe,it,ft=we==="date";switch(xe===Ye.PAGE_UP||xe===Ye.PAGE_DOWN?it=ft?i.addMonth:i.addYear:it=ft?i.addDate:i.addMonth,xe){case Ye.LEFT:case Ye.PAGE_UP:qe=it(he,-1);break;case Ye.RIGHT:case Ye.PAGE_DOWN:qe=it(he,1);break;case Ye.UP:case Ye.DOWN:qe=it(he,Number("".concat(xe===Ye.UP?"-":"").concat(ft?oo:cu)));break}if(qe)return!(v!=null&&v(qe))}return!0},Je=function(xe){if(le.current&&le.current.onKeyDown){var qe=!0,it=xe.which;if([Ye.LEFT,Ye.RIGHT,Ye.UP,Ye.DOWN,Ye.PAGE_UP,Ye.PAGE_DOWN,Ye.ENTER].includes(it)&&(xe.preventDefault(),it!==Ye.ENTER&&b===0&&(qe=ot(it))),qe)return le.current.onKeyDown(xe)}return rn(!1,"Panel not correct handle keyDown event. Please help to fire issue about this."),!1},Se=function(xe){le.current&&le.current.onBlur&&le.current.onBlur(xe)};Z&&J!=="right"&&(Z.current={onKeyDown:Je,onClose:function(){le.current&&le.current.onClose&&le.current.onClose()}}),s.useEffect(function(){u&&!ge.current&&be(u)},[u]),s.useEffect(function(){ge.current=!1},[]);var He,je=p(p({},t),{},{operationRef:le,prefixCls:n,viewDate:he,value:ce,onViewDateChange:Re,sourceMode:dt,onPanelChange:We,disabledDate:v});switch(delete je.onChange,delete je.onSelect,we){case"decade":He=s.createElement(oy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"year":He=s.createElement(Ty,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"month":He=s.createElement(wy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"quarter":He=s.createElement(Fy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"week":He=s.createElement(by,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"time":delete je.showTime,He=s.createElement(pv,ne({},je,Ve(S)==="object"?S:null,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;default:S?He=s.createElement(yy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}})):He=s.createElement(uu,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}))}var ze,ye,de=function(){var xe=i.getNow(),qe=G1(i.getHour(xe),i.getMinute(xe),i.getSecond(xe),z?I:1,V?j:1,X?A:1),it=ov(i,xe,qe[0],qe[1],qe[2]);Oe(it,"submit")};q||(ze=gv(n,we,E),ye=yv({prefixCls:n,components:F,needConfirmButton:K,okDisabled:!ce||v&&v(ce),locale:l,showNow:x,onNow:K&&de,onOk:function(){ce&&(Oe(ce,"submit",!0),$&&$(ce))}}));var Ce;if(w&&we==="date"&&y==="date"&&!S){var Me=i.getNow(),Be="".concat(n,"-today-btn"),nt=v&&v(Me);Ce=s.createElement("a",{className:pe(Be,nt&&"".concat(Be,"-disabled")),"aria-disabled":nt,onClick:function(){nt||Oe(Me,"mouse",!0)}},l.today)}return s.createElement(gn.Provider,{value:p(p({},W),{},{mode:we,hideHeader:"hideHeader"in t?P:W.hideHeader,hidePrevBtn:Y&&J==="right",hideNextBtn:Y&&J==="left"})},s.createElement("div",{tabIndex:b,className:pe("".concat(n,"-panel"),a,(e={},B(e,"".concat(n,"-panel-has-range"),Q&&Q[0]&&Q[1]),B(e,"".concat(n,"-panel-has-range-hover"),ie&&ie[0]&&ie[1]),B(e,"".concat(n,"-panel-rtl"),N==="rtl"),e)),style:o,onKeyDown:Je,onBlur:Se,onMouseDown:D,ref:U},He,ze||ye||Ce?s.createElement("div",{className:"".concat(n,"-footer")},ze,ye,Ce):null))}var Dy={bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:1,adjustY:1}},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:1,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:0,adjustY:1}},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:0,adjustY:1}}};function Cv(t){var e,r=t.prefixCls,n=t.popupElement,a=t.popupStyle,o=t.visible,l=t.dropdownClassName,i=t.dropdownAlign,u=t.transitionName,c=t.getPopupContainer,d=t.children,f=t.range,v=t.popupPlacement,m=t.direction,h="".concat(r,"-dropdown"),y=function(){return v!==void 0?v:m==="rtl"?"bottomRight":"bottomLeft"};return s.createElement(Fp,{showAction:[],hideAction:[],popupPlacement:y(),builtinPlacements:Dy,prefixCls:h,popupTransitionName:u,popup:n,popupAlign:i,popupVisible:o,popupClassName:pe(l,(e={},B(e,"".concat(h,"-range"),f),B(e,"".concat(h,"-rtl"),m==="rtl"),e)),popupStyle:a,getPopupContainer:c},d)}function ss(t){var e=t.open,r=t.value,n=t.isClickOutside,a=t.triggerOpen,o=t.forwardKeyDown,l=t.onKeyDown,i=t.blurToCancel,u=t.onSubmit,c=t.onCancel,d=t.onFocus,f=t.onBlur,v=t.currentFocusedKey,m=t.key,h=m===void 0?"start":m,y=s.useState(!1),g=ee(y,2),b=g[0],x=g[1],S=s.useState(!1),w=ee(S,2),E=w[0],P=w[1],T=s.useRef(),M=s.useRef(!1),k=s.useRef(!1),D=s.useRef(!1),O={onMouseDown:function(){x(!0),a(!0)},onKeyDown:function(F){var N=function(){D.current=!0};if(l(F,N),!D.current){switch(F.which){case Ye.ENTER:{e?u()!==!1&&x(!0):a(!0),F.preventDefault();return}case Ye.TAB:{b&&e&&!F.shiftKey?(x(!1),F.preventDefault()):!b&&e&&!o(F)&&F.shiftKey&&(x(!0),F.preventDefault());return}case Ye.ESC:{x(!0),c();return}}!e&&![Ye.SHIFT].includes(F.which)?a(!0):b||o(F)}},onFocus:function(F){x(!0),P(!0),v&&(v.current=h),clearTimeout(T.current),d&&d(F)},onBlur:function(F){if(M.current||!n(document.activeElement)){M.current=!1;return}i?setTimeout(function(){for(var N=document,R=N.activeElement;R&&R.shadowRoot;)R=R.shadowRoot.activeElement;n(R)&&c()},0):e&&(a(!1),k.current&&u()),P(!1),v?(v.current="",T.current=setTimeout(function(){v.current||f==null||f(F)},100)):f==null||f(F)}};return s.useEffect(function(){k.current=!1},[e]),s.useEffect(function(){k.current=!0},[r]),s.useEffect(function(){return Q1(function($){var F=J1($),N=n(F);e?N?(!E||N)&&a(!1):(M.current=!0,requestAnimationFrame(function(){M.current=!1})):E&&!N&&(M.current=!0)})}),s.useEffect(function(){return function(){return clearTimeout(T.current)}},[]),[O,{focused:E,typing:b}]}function us(t){var e=t.valueTexts,r=t.onTextChange,n=s.useState(""),a=ee(n,2),o=a[0],l=a[1],i=s.useRef([]);i.current=e;function u(d){l(d),r(d)}function c(){l(i.current[0])}return s.useEffect(function(){e.every(function(d){return d!==o})&&c()},[e.join("||")]),[o,u,c]}function Ni(t,e){var r=e.formatList,n=e.generateConfig,a=e.locale;return Zs(function(){if(!t)return[[""],""];for(var o="",l=[],i=0;i1&&arguments[1]!==void 0?arguments[1]:!1;if(cancelAnimationFrame(c.current),b){u(g);return}c.current=requestAnimationFrame(function(){u(g)})}var f=Ni(i,{formatList:r,generateConfig:n,locale:a}),v=ee(f,2),m=v[1];function h(g){d(g)}function y(){var g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;d(null,g)}return s.useEffect(function(){y(!0)},[t]),s.useEffect(function(){return function(){return cancelAnimationFrame(c.current)}},[]),[m,h,y]}function Oy(t){var e,r=t.prefixCls,n=r===void 0?"rc-picker":r,a=t.id,o=t.tabIndex,l=t.style,i=t.className,u=t.dropdownClassName,c=t.dropdownAlign,d=t.popupStyle,f=t.transitionName,v=t.generateConfig,m=t.locale,h=t.inputReadOnly,y=t.allowClear,g=t.autoFocus,b=t.showTime,x=t.picker,S=x===void 0?"date":x,w=t.format,E=t.use12Hours,P=t.value,T=t.defaultValue,M=t.open,k=t.defaultOpen,D=t.defaultOpenValue,O=t.suffixIcon,$=t.clearIcon,F=t.disabled,N=t.disabledDate,R=t.placeholder,I=t.getPopupContainer,L=t.pickerRef,j=t.panelRender,_=t.onChange,A=t.onOpenChange,K=t.onFocus,z=t.onBlur,V=t.onMouseDown,X=t.onMouseUp,W=t.onMouseEnter,Z=t.onMouseLeave,U=t.onContextMenu,ae=t.onClick,q=t.onKeyDown,te=t.onSelect,ue=t.direction,Y=t.autoComplete,J=Y===void 0?"off":Y,Q=t.inputRender,ie=s.useRef(null),le=S==="date"&&!!b||S==="time",ge=mv(lv(w,S,b,E)),Pe=s.useRef(null),ve=s.useRef(null),ce=s.useRef(null),fe=xt(null,{value:P,defaultValue:T}),oe=ee(fe,2),se=oe[0],he=oe[1],be=s.useState(se),Re=ee(be,2),Fe=Re[0],Ee=Re[1],ke=s.useRef(null),we=xt(!1,{value:M,defaultValue:k,postState:function(_e){return F?!1:_e},onChange:function(_e){A&&A(_e),!_e&&ke.current&&ke.current.onClose&&ke.current.onClose()}}),Ge=ee(we,2),Qe=Ge[0],ct=Ge[1],dt=Ni(Fe,{formatList:ge,generateConfig:v,locale:m}),mt=ee(dt,2),We=mt[0],Oe=mt[1],ot=us({valueTexts:We,onTextChange:function(_e){var at=fv(_e,{locale:m,formatList:ge,generateConfig:v});at&&(!N||!N(at))&&Ee(at)}}),Je=ee(ot,3),Se=Je[0],He=Je[1],je=Je[2],ze=function(_e){Ee(_e),he(_e),_&&!ya(v,se,_e)&&_(_e,_e?Jt(_e,{generateConfig:v,locale:m,format:ge[0]}):"")},ye=function(_e){F&&_e||ct(_e)},de=function(_e){return Qe&&ke.current&&ke.current.onKeyDown?ke.current.onKeyDown(_e):(rn(!1,"Picker not correct forward KeyDown operation. Please help to fire issue about this."),!1)},Ce=function(){for(var _e=arguments.length,at=new Array(_e),Ot=0;Ot<_e;Ot++)at[Ot]=arguments[Ot];ae==null||ae.apply(void 0,at),ie.current&&(ie.current.focus(),ye(!0))},Me=ss({blurToCancel:le,open:Qe,value:Se,triggerOpen:ye,forwardKeyDown:de,isClickOutside:function(_e){return!uv([Pe.current,ve.current,ce.current],_e)},onSubmit:function(){return!Fe||N&&N(Fe)?!1:(ze(Fe),ye(!1),je(),!0)},onCancel:function(){ye(!1),Ee(se),je()},onKeyDown:function(_e,at){q==null||q(_e,at)},onFocus:K,onBlur:z}),Be=ee(Me,2),nt=Be[0],Ne=Be[1],xe=Ne.focused,qe=Ne.typing;s.useEffect(function(){Qe||(Ee(se),!We.length||We[0]===""?He(""):Oe!==Se&&je())},[Qe,We]),s.useEffect(function(){Qe||je()},[S]),s.useEffect(function(){Ee(se)},[se]),L&&(L.current={focus:function(){ie.current&&ie.current.focus()},blur:function(){ie.current&&ie.current.blur()}});var it=cs(Se,{formatList:ge,generateConfig:v,locale:m}),ft=ee(it,3),At=ft[0],Kt=ft[1],Rt=ft[2],zt=p(p({},t),{},{className:void 0,style:void 0,pickerValue:void 0,onPickerValueChange:void 0,onChange:null}),et=s.createElement(bv,ne({},zt,{generateConfig:v,className:pe(B({},"".concat(n,"-panel-focused"),!qe)),value:Fe,locale:m,tabIndex:-1,onSelect:function(_e){te==null||te(_e),Ee(_e)},direction:ue,onPanelChange:function(_e,at){var Ot=t.onPanelChange;Rt(!0),Ot==null||Ot(_e,at)}}));j&&(et=j(et));var tt=s.createElement("div",{className:"".concat(n,"-panel-container"),onMouseDown:function(_e){_e.preventDefault()}},et),lt;O&&(lt=s.createElement("span",{className:"".concat(n,"-suffix")},O));var ut;y&&se&&!F&&(ut=s.createElement("span",{onMouseDown:function(_e){_e.preventDefault(),_e.stopPropagation()},onMouseUp:function(_e){_e.preventDefault(),_e.stopPropagation(),ze(null),ye(!1)},className:"".concat(n,"-clear"),role:"button"},$||s.createElement("span",{className:"".concat(n,"-clear-btn")})));var wt=p(p(p({id:a,tabIndex:o,disabled:F,readOnly:h||typeof ge[0]=="function"||!qe,value:At||Se,onChange:function(_e){He(_e.target.value)},autoFocus:g,placeholder:R,ref:ie,title:Se},nt),{},{size:sv(S,ge[0],v)},hv(t)),{},{autoComplete:J}),St=Q?Q(wt):s.createElement("input",wt),Ae=function(_e,at){(at==="submit"||at!=="key"&&!le)&&(ze(_e),ye(!1))},Ue=ue==="rtl"?"bottomRight":"bottomLeft";return s.createElement(gn.Provider,{value:{operationRef:ke,hideHeader:S==="time",panelRef:Pe,onSelect:Ae,open:Qe,defaultOpenValue:D,onDateMouseEnter:Kt,onDateMouseLeave:Rt}},s.createElement(Cv,{visible:Qe,popupElement:tt,popupStyle:d,prefixCls:n,dropdownClassName:u,dropdownAlign:c,getPopupContainer:I,transitionName:f,popupPlacement:Ue,direction:ue},s.createElement("div",{ref:ce,className:pe(n,i,(e={},B(e,"".concat(n,"-disabled"),F),B(e,"".concat(n,"-focused"),xe),B(e,"".concat(n,"-rtl"),ue==="rtl"),e)),style:l,onMouseDown:V,onMouseUp:X,onMouseEnter:W,onMouseLeave:Z,onContextMenu:U,onClick:Ce},s.createElement("div",{className:pe("".concat(n,"-input"),B({},"".concat(n,"-input-placeholder"),!!At)),ref:ve},St,lt,ut))))}var Iy=function(t){yn(r,t);var e=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),l=0;lm(d);case"month":return v(g)>v(d);case"week":return f(g)>f(d);default:return!ar(u,g,d)&&u.isAfter(g,d)}return!1},[l,i[1],d,e]),y=s.useCallback(function(g){if(l&&l(g))return!0;if(i[0]&&c)return!ar(u,g,d)&&u.isAfter(c,g);if(r&&c)switch(n){case"quarter":return m(g)0&&arguments[0]!==void 0?arguments[0]:!1,Te=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Xe=null;Ie&&Rn&&Rn[0]&&Rn[1]&&h.isAfter(Rn[1],Rn[0])&&(Xe=Rn);var yt=P;if(P&&Ve(P)==="object"&&P.defaultValue){var Bt=P.defaultValue;yt=p(p({},P),{},{defaultValue:Ct(Bt,Se)||void 0})}var Br=null;return L&&(Br=function(Mn,jn){return L(Mn,jn,{range:Se?"end":"start"})}),s.createElement(Oa.Provider,{value:{inRange:!0,panelPosition:vt,rangedValue:mr||ft,hoverRangedValue:Xe}},s.createElement(bv,ne({},t,Te,{dateRender:Br,showTime:yt,mode:zt[Se],generateConfig:h,style:void 0,direction:se,disabledDate:Se===0?wt:St,disabledTime:function(Mn){return I?I(Mn,Se===0?"start":"end"):!1},className:pe(B({},"".concat(o,"-panel-focused"),Se===0?!Ke:!an)),value:Ct(ft,Se),locale:y,tabIndex:-1,onPanelChange:function(Mn,jn){Se===0&&Vr(!0),Se===1&&ua(!0),tt(Sn(zt,jn,Se),Sn(ft,Mn,Se));var Qn=Mn;vt==="right"&&zt[Se]===jn&&(Qn=io(Qn,jn,h,-1)),xe(Qn,Se)},onOk:null,onSelect:void 0,onChange:void 0,defaultValue:Se===0?Ct(ft,1):Ct(ft,0)})))}var yr=0,Bu=0;if(Se&&Ge.current&&ct.current&&we.current){yr=Ge.current.offsetWidth+ct.current.offsetWidth;var op=We.current.offsetLeft>yr?We.current.offsetLeft-yr:We.current.offsetLeft;we.current.offsetWidth&&We.current.offsetWidth&&yr>we.current.offsetWidth-We.current.offsetWidth-(se==="rtl"?0:op)&&(Bu=yr)}var ip=se==="rtl"?{right:yr}:{left:yr};function lp(){var vt,Te=gv(o,zt[Se],U),Xe=yv({prefixCls:o,components:fe,needConfirmButton:Fe,okDisabled:!Ct(ft,Se)||R&&R(ft[Se]),locale:y,rangeList:ap,onOk:function(){Ct(ft,Se)&&(qn(ft,Se),ve&&ve(ft))}});if(E!=="time"&&!P){var yt=Ne(Se),Bt=io(yt,E,h),Br=zt[Se],Zn=Br===E,Mn=Nl(Zn?"left":!1,{pickerValue:yt,onPickerValueChange:function(dn){xe(dn,Se)}}),jn=Nl("right",{pickerValue:Bt,onPickerValueChange:function(dn){xe(io(dn,E,h,-1),Se)}});se==="rtl"?vt=s.createElement(s.Fragment,null,jn,Zn&&Mn):vt=s.createElement(s.Fragment,null,Mn,Zn&&jn)}else vt=Nl();var Qn=s.createElement(s.Fragment,null,s.createElement("div",{className:"".concat(o,"-panels")},vt),(Te||Xe)&&s.createElement("div",{className:"".concat(o,"-footer")},Te,Xe));return j&&(Qn=j(Qn)),s.createElement("div",{className:"".concat(o,"-panel-container"),style:{marginLeft:Bu},ref:we,onMouseDown:function(dn){dn.preventDefault()}},Qn)}var sp=s.createElement("div",{className:pe("".concat(o,"-range-wrapper"),"".concat(o,"-").concat(E,"-range-wrapper")),style:{minWidth:sn}},s.createElement("div",{ref:We,className:"".concat(o,"-range-arrow"),style:ip}),lp()),Hu;z&&(Hu=s.createElement("span",{className:"".concat(o,"-suffix")},z));var Wu;K&&(Ct(Ce,0)&&!ze[0]||Ct(Ce,1)&&!ze[1])&&(Wu=s.createElement("span",{onMouseDown:function(Te){Te.preventDefault(),Te.stopPropagation()},onMouseUp:function(Te){Te.preventDefault(),Te.stopPropagation();var Xe=Ce;ze[0]||(Xe=Sn(Xe,null,0)),ze[1]||(Xe=Sn(Xe,null,1)),qn(Xe,null),_n(!1,Se)},className:"".concat(o,"-clear")},V||s.createElement("span",{className:"".concat(o,"-clear-btn")})));var Uu={size:sv(E,Oe[0],h)},Tl=0,$l=0;Ge.current&&Qe.current&&ct.current&&(Se===0?$l=Ge.current.offsetWidth:(Tl=yr,$l=Qe.current.offsetWidth));var up=se==="rtl"?{right:Tl}:{left:Tl},cp=function(Te,Xe){var yt=Sn(ft,Te,Se);Xe==="submit"||Xe!=="key"&&!Fe?(qn(yt,Se),Se===0?Vr():ua()):At(yt)};return s.createElement(gn.Provider,{value:{operationRef:je,hideHeader:E==="time",onDateMouseEnter:Ml,onDateMouseLeave:ii,hideRanges:!0,onSelect:cp,open:Ie}},s.createElement(Cv,{visible:Ie,popupElement:sp,popupStyle:c,prefixCls:o,dropdownClassName:d,dropdownAlign:v,getPopupContainer:m,transitionName:f,range:!0,direction:se},s.createElement("div",ne({ref:ke,className:pe(o,"".concat(o,"-range"),u,(e={},B(e,"".concat(o,"-disabled"),ze[0]&&ze[1]),B(e,"".concat(o,"-focused"),Se===0?me:Mt),B(e,"".concat(o,"-rtl"),se==="rtl"),e)),style:i,onClick:on,onMouseEnter:le,onMouseLeave:ge,onMouseDown:zr,onMouseUp:ie},hv(t)),s.createElement("div",{className:pe("".concat(o,"-input"),(r={},B(r,"".concat(o,"-input-active"),Se===0),B(r,"".concat(o,"-input-placeholder"),!!ri),r)),ref:Ge},s.createElement("input",ne({id:l,disabled:ze[0],readOnly:W||typeof Oe[0]=="function"||!Ke,value:ri||vr,onChange:function(Te){la(Te.target.value)},autoFocus:b,placeholder:Ct(g,0)||"",ref:dt},H,Uu,{autoComplete:Re}))),s.createElement("div",{className:"".concat(o,"-range-separator"),ref:ct},k),s.createElement("div",{className:pe("".concat(o,"-input"),(n={},B(n,"".concat(o,"-input-active"),Se===1),B(n,"".concat(o,"-input-placeholder"),!!gr),n)),ref:Qe},s.createElement("input",ne({disabled:ze[1],readOnly:W||typeof Oe[0]=="function"||!an,value:gr||ht,onChange:function(Te){Nt(Te.target.value)},placeholder:Ct(g,1)||"",ref:mt},Tt,Uu,{autoComplete:Re}))),s.createElement("div",{className:"".concat(o,"-active-bar"),style:p(p({},up),{},{width:$l,position:"absolute"})}),Hu,Wu)))}var Vy=function(t){yn(r,t);var e=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),l=0;l=0;c-=1){var d=e.get(c)||new Set;d.forEach(function(f){var v=f.parent,m=f.node;if(!(n(m)||!f.parent||u.has(f.parent.key))){if(n(f.parent.node)){u.add(v.key);return}var h=!0,y=!1;(v.children||[]).filter(function(g){return!n(g.node)}).forEach(function(g){var b=g.key,x=a.has(b);h&&!x&&(h=!1),!y&&(x||o.has(b))&&(y=!0)}),h&&a.add(v.key),y&&o.add(v.key),u.add(v.key)}})}return{checkedKeys:Array.from(a),halfCheckedKeys:Array.from(xv(o,a))}}function Hy(t,e,r,n,a){for(var o=new Set(t),l=new Set(e),i=0;i<=n;i+=1){var u=r.get(i)||new Set;u.forEach(function(v){var m=v.key,h=v.node,y=v.children,g=y===void 0?[]:y;!o.has(m)&&!l.has(m)&&!a(h)&&g.filter(function(b){return!a(b.node)}).forEach(function(b){o.delete(b.key)})})}l=new Set;for(var c=new Set,d=n;d>=0;d-=1){var f=r.get(d)||new Set;f.forEach(function(v){var m=v.parent,h=v.node;if(!(a(h)||!v.parent||c.has(v.parent.key))){if(a(v.parent.node)){c.add(m.key);return}var y=!0,g=!1;(m.children||[]).filter(function(b){return!a(b.node)}).forEach(function(b){var x=b.key,S=o.has(x);y&&!S&&(y=!1),!g&&(S||l.has(x))&&(g=!0)}),y||o.delete(m.key),g&&l.add(m.key),c.add(m.key)}})}return{checkedKeys:Array.from(o),halfCheckedKeys:Array.from(xv(l,o))}}function Pn(t,e,r,n){var a=[],o;n?o=n:o=zy;var l=new Set(t.filter(function(d){var f=!!mn(r,d);return f||a.push(d),f})),i=new Map,u=0;Object.keys(r).forEach(function(d){var f=r[d],v=f.level,m=i.get(v);m||(m=new Set,i.set(v,m)),m.add(f),u=Math.max(u,v)}),rn(!a.length,"Tree missing follow keys: ".concat(a.slice(0,100).map(function(d){return"'".concat(d,"'")}).join(", ")));var c;return e===!0?c=By(l,i,u,o):c=Hy(l,e.halfCheckedKeys,i,u,o),c}var _o=s.createContext(null),du="__RC_CASCADER_SPLIT__",Sv="SHOW_PARENT",wv="SHOW_CHILD";function Pr(t){return t.join(du)}function fa(t){return t.map(Pr)}function Wy(t){return t.split(du)}function Uy(t){var e=t||{},r=e.label,n=e.value,a=e.children,o=n||"value";return{label:r||"label",value:o,key:o,children:a||"children"}}function to(t,e){var r,n;return(r=t.isLeaf)!==null&&r!==void 0?r:!(!((n=t[e.children])===null||n===void 0)&&n.length)}function Yy(t){var e=t.parentElement;if(e){var r=t.offsetTop-e.offsetTop;r-e.scrollTop<0?e.scrollTo({top:r}):r+t.offsetHeight-e.scrollTop>e.offsetHeight&&e.scrollTo({top:r+t.offsetHeight-e.offsetHeight})}}function lc(t,e,r){var n=new Set(t),a=e();return t.filter(function(o){var l=a[o],i=l?l.parent:null,u=l?l.children:null;return r===wv?!(u&&u.some(function(c){return c.key&&n.has(c.key)})):!(i&&!i.node.disabled&&n.has(i.key))})}function yo(t,e,r){for(var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,a=e,o=[],l=function(){var c,d,f,v=t[i],m=(c=a)===null||c===void 0?void 0:c.findIndex(function(y){var g=y[r.value];return n?String(g)===String(v):g===v}),h=m!==-1?(d=a)===null||d===void 0?void 0:d[m]:null;o.push({value:(f=h==null?void 0:h[r.value])!==null&&f!==void 0?f:v,index:m,option:h}),a=h==null?void 0:h[r.children]},i=0;i1&&arguments[1]!==void 0?arguments[1]:null;return d.map(function(v,m){for(var h=Pv(f?f.pos:"0",m),y=Lo(v[o],h),g,b=0;b1&&arguments[1]!==void 0?arguments[1]:{},r=e.initWrapper,n=e.processEntity,a=e.onProcessFinished,o=e.externalGetKey,l=e.childrenPropName,i=e.fieldNames,u=arguments.length>2?arguments[2]:void 0,c=o||u,d={},f={},v={posEntities:d,keyEntities:f};return r&&(v=r(v)||v),Zy(t,function(m){var h=m.node,y=m.index,g=m.pos,b=m.key,x=m.parentPos,S=m.level,w=m.nodes,E={node:h,nodes:w,index:y,key:b,pos:g,level:S},P=Lo(b,g);d[g]=E,f[P]=E,E.parent=d[x],E.parent&&(E.parent.children=E.parent.children||[],E.parent.children.push(E)),n&&n(E,v)},{externalGetKey:c,childrenPropName:l,fieldNames:i}),a&&a(v),v}function lo(t,e){var r=e.expandedKeys,n=e.selectedKeys,a=e.loadedKeys,o=e.loadingKeys,l=e.checkedKeys,i=e.halfCheckedKeys,u=e.dragOverNodeKey,c=e.dropPosition,d=e.keyEntities,f=mn(d,t),v={eventKey:t,expanded:r.indexOf(t)!==-1,selected:n.indexOf(t)!==-1,loaded:a.indexOf(t)!==-1,loading:o.indexOf(t)!==-1,checked:l.indexOf(t)!==-1,halfChecked:i.indexOf(t)!==-1,pos:String(f?f.pos:""),dragOver:u===t&&c===0,dragOverGapTop:u===t&&c===-1,dragOverGapBottom:u===t&&c===1};return v}function Wt(t){var e=t.data,r=t.expanded,n=t.selected,a=t.checked,o=t.loaded,l=t.loading,i=t.halfChecked,u=t.dragOver,c=t.dragOverGapTop,d=t.dragOverGapBottom,f=t.pos,v=t.active,m=t.eventKey,h=p(p({},e),{},{expanded:r,selected:n,checked:a,loaded:o,loading:l,halfChecked:i,dragOver:u,dragOverGapTop:c,dragOverGapBottom:d,pos:f,active:v,key:m});return"props"in h||Object.defineProperty(h,"props",{get:function(){return rn(!1,"Second param return from event is node data instead of TreeNode instance. Please read value directly instead of reading from `props`."),t}}),h}const Qy=function(t,e){var r=s.useRef({options:null,info:null}),n=s.useCallback(function(){return r.current.options!==t&&(r.current.options=t,r.current.info=jo(t,{fieldNames:e,initWrapper:function(o){return p(p({},o),{},{pathKeyEntities:{}})},processEntity:function(o,l){var i=o.nodes.map(function(u){return u[e.value]}).join(du);l.pathKeyEntities[i]=o,o.key=i}})),r.current.info.pathKeyEntities},[e,t]);return n},Jy=function(t,e){return s.useCallback(function(r){var n=[],a=[];return r.forEach(function(o){var l=yo(o,t,e);l.every(function(i){return i.option})?a.push(o):n.push(o)}),[a,n]},[t,e])};function sc(t){var e=s.useRef();e.current=t;var r=s.useCallback(function(){return e.current.apply(e,arguments)},[]);return r}function eb(t){return s.useMemo(function(){if(!t)return[!1,{}];var e={matchInputWidth:!0,limit:50};return t&&Ve(t)==="object"&&(e=p(p({},e),t)),e.limit<=0&&delete e.limit,[!0,e]},[t])}var so="__rc_cascader_search_mark__",tb=function(e,r,n){var a=n.label;return r.some(function(o){return String(o[a]).toLowerCase().includes(e.toLowerCase())})},nb=function(e,r,n,a){return r.map(function(o){return o[a.label]}).join(" / ")};const rb=function(t,e,r,n,a,o){var l=a.filter,i=l===void 0?tb:l,u=a.render,c=u===void 0?nb:u,d=a.limit,f=d===void 0?50:d,v=a.sort;return s.useMemo(function(){var m=[];if(!t)return[];function h(y,g){y.forEach(function(b){if(!(!v&&f>0&&m.length>=f)){var x=[].concat(De(g),[b]),S=b[r.children];if((!S||S.length===0||o)&&i(t,x,{label:r.label})){var w;m.push(p(p({},b),{},(w={},B(w,r.label,c(t,x,n,r)),B(w,so,x),B(w,r.children,void 0),w)))}S&&h(b[r.children],x)}})}return h(e,[]),v&&m.sort(function(y,g){return v(y[so],g[so],t,r)}),f>0?m.slice(0,f):m},[t,e,r,n,c,o,i,v,f])};function ab(t){var e,r=t.prefixCls,n=t.checked,a=t.halfChecked,o=t.disabled,l=t.onClick,i=s.useContext(_o),u=i.checkable,c=typeof u!="boolean"?u:null;return s.createElement("span",{className:pe("".concat(r),(e={},B(e,"".concat(r,"-checked"),n),B(e,"".concat(r,"-indeterminate"),!n&&a),B(e,"".concat(r,"-disabled"),o),e)),onClick:l},c)}var kv="__cascader_fix_label__";function ob(t){var e=t.prefixCls,r=t.multiple,n=t.options,a=t.activeValue,o=t.prevValuePath,l=t.onToggleOpen,i=t.onSelect,u=t.onActive,c=t.checkedSet,d=t.halfCheckedSet,f=t.loadingKeys,v=t.isSelectable,m="".concat(e,"-menu"),h="".concat(e,"-menu-item"),y=s.useContext(_o),g=y.fieldNames,b=y.changeOnSelect,x=y.expandTrigger,S=y.expandIcon,w=y.loadingIcon,E=y.dropdownMenuColumnStyle,P=x==="hover",T=s.useMemo(function(){return n.map(function(M){var k,D=M.disabled,O=M[so],$=(k=M[kv])!==null&&k!==void 0?k:M[g.label],F=M[g.value],N=to(M,g),R=O?O.map(function(A){return A[g.value]}):[].concat(De(o),[F]),I=Pr(R),L=f.includes(I),j=c.has(I),_=d.has(I);return{disabled:D,label:$,value:F,isLeaf:N,isLoading:L,checked:j,halfChecked:_,option:M,fullPath:R,fullPathKey:I}})},[n,c,g,d,f,o]);return s.createElement("ul",{className:m,role:"menu"},T.map(function(M){var k,D=M.disabled,O=M.label,$=M.value,F=M.isLeaf,N=M.isLoading,R=M.checked,I=M.halfChecked,L=M.option,j=M.fullPath,_=M.fullPathKey,A=function(){if(!D){var X=De(j);P&&F&&X.pop(),u(X)}},K=function(){v(L)&&i(j,F)},z;return typeof L.title=="string"?z=L.title:typeof O=="string"&&(z=O),s.createElement("li",{key:_,className:pe(h,(k={},B(k,"".concat(h,"-expand"),!F),B(k,"".concat(h,"-active"),a===$),B(k,"".concat(h,"-disabled"),D),B(k,"".concat(h,"-loading"),N),k)),style:E,role:"menuitemcheckbox",title:z,"aria-checked":R,"data-path-key":_,onClick:function(){A(),(!r||F)&&K()},onDoubleClick:function(){b&&l(!1)},onMouseEnter:function(){P&&A()},onMouseDown:function(X){X.preventDefault()}},r&&s.createElement(ab,{prefixCls:"".concat(e,"-checkbox"),checked:R,halfChecked:I,disabled:D,onClick:function(X){X.stopPropagation(),K()}}),s.createElement("div",{className:"".concat(h,"-content")},O),!N&&S&&!F&&s.createElement("div",{className:"".concat(h,"-expand-icon")},S),N&&w&&s.createElement("div",{className:"".concat(h,"-loading-icon")},w))}))}const ib=function(){var t=al(),e=t.multiple,r=t.open,n=s.useContext(_o),a=n.values,o=s.useState([]),l=ee(o,2),i=l[0],u=l[1];return s.useEffect(function(){if(r&&!e){var c=a[0];u(c||[])}},[r]),[i,u]},lb=function(t,e,r,n,a,o){var l=al(),i=l.direction,u=l.searchValue,c=l.toggleOpen,d=l.open,f=i==="rtl",v=s.useMemo(function(){for(var E=-1,P=e,T=[],M=[],k=n.length,D=function(I){var L=P.findIndex(function(j){return j[r.value]===n[I]});if(L===-1)return"break";E=L,T.push(E),M.push(n[I]),P=P[E][r.children]},O=0;O1){var P=h.slice(0,-1);b(P)}else c(!1)},w=function(){var P,T=((P=g[y])===null||P===void 0?void 0:P[r.children])||[],M=T.find(function(D){return!D.disabled});if(M){var k=[].concat(De(h),[M[r.value]]);b(k)}};s.useImperativeHandle(t,function(){return{onKeyDown:function(P){var T=P.which;switch(T){case Ye.UP:case Ye.DOWN:{var M=0;T===Ye.UP?M=-1:T===Ye.DOWN&&(M=1),M!==0&&x(M);break}case Ye.LEFT:{if(u)break;f?w():S();break}case Ye.RIGHT:{if(u)break;f?S():w();break}case Ye.BACKSPACE:{u||S();break}case Ye.ENTER:{if(h.length){var k=g[y],D=(k==null?void 0:k[so])||[];D.length?o(D.map(function(O){return O[r.value]}),D[D.length-1]):o(h,g[y])}break}case Ye.ESC:c(!1),d&&P.stopPropagation()}},onKeyUp:function(){}}})};var sb=s.forwardRef(function(t,e){var r,n,a,o,l=al(),i=l.prefixCls,u=l.multiple,c=l.searchValue,d=l.toggleOpen,f=l.notFoundContent,v=l.direction,m=s.useRef(),h=v==="rtl",y=s.useContext(_o),g=y.options,b=y.values,x=y.halfValues,S=y.fieldNames,w=y.changeOnSelect,E=y.onSelect,P=y.searchOptions,T=y.dropdownPrefixCls,M=y.loadData,k=y.expandTrigger,D=T||i,O=s.useState([]),$=ee(O,2),F=$[0],N=$[1],R=function(Q){if(!(!M||c)){var ie=yo(Q,g,S),le=ie.map(function(ve){var ce=ve.option;return ce}),ge=le[le.length-1];if(ge&&!to(ge,S)){var Pe=Pr(Q);N(function(ve){return[].concat(De(ve),[Pe])}),M(le)}}};s.useEffect(function(){F.length&&F.forEach(function(J){var Q=Wy(J),ie=yo(Q,g,S,!0).map(function(ge){var Pe=ge.option;return Pe}),le=ie[ie.length-1];(!le||le[S.children]||to(le,S))&&N(function(ge){return ge.filter(function(Pe){return Pe!==J})})})},[g,F,S]);var I=s.useMemo(function(){return new Set(fa(b))},[b]),L=s.useMemo(function(){return new Set(fa(x))},[x]),j=ib(),_=ee(j,2),A=_[0],K=_[1],z=function(Q){K(Q),R(Q)},V=function(Q){var ie=Q.disabled,le=to(Q,S);return!ie&&(le||w||u)},X=function(Q,ie){var le=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;E(Q),!u&&(ie||w&&(k==="hover"||le))&&d(!1)},W=s.useMemo(function(){return c?P:g},[c,P,g]),Z=s.useMemo(function(){for(var J=[{options:W}],Q=W,ie=function(){var ve=A[le],ce=Q.find(function(oe){return oe[S.value]===ve}),fe=ce==null?void 0:ce[S.children];if(!(fe!=null&&fe.length))return"break";Q=fe,J.push({options:fe})},le=0;le":$,N=t.loadingIcon,R=t.children,I=t.dropdownMatchSelectWidth,L=I===void 0?!1:I,j=t.showCheckedStrategy,_=j===void 0?Sv:j,A=Le(t,ub),K=Gf(r),z=!!f,V=xt(l,{value:i,postState:uc}),X=ee(V,2),W=X[0],Z=X[1],U=s.useMemo(function(){return Uy(o)},[JSON.stringify(o)]),ae=s.useMemo(function(){return g||[]},[g]),q=Qy(ae,U),te=s.useCallback(function(Je){var Se=q();return Je.map(function(He){var je=Se[He].nodes;return je.map(function(ze){return ze[U.value]})})},[q,U]),ue=xt("",{value:v,postState:function(Se){return Se||""}}),Y=ee(ue,2),J=Y[0],Q=Y[1],ie=function(Se,He){Q(Se),He.source!=="blur"&&m&&m(Se)},le=eb(h),ge=ee(le,2),Pe=ge[0],ve=ge[1],ce=rb(J,ae,U,b||a,ve,u),fe=Jy(ae,U),oe=s.useMemo(function(){var Je=fe(W),Se=ee(Je,2),He=Se[0],je=Se[1];if(!z||!W.length)return[He,[],je];var ze=fa(He),ye=q(),de=Pn(ze,!0,ye),Ce=de.checkedKeys,Me=de.halfCheckedKeys;return[te(Ce),te(Me),je]},[z,W,q,te,fe]),se=ee(oe,3),he=se[0],be=se[1],Re=se[2],Fe=s.useMemo(function(){var Je=fa(he),Se=lc(Je,q,_);return[].concat(De(Re),De(te(Se)))},[he,q,te,Re,_]),Ee=Gy(Fe,ae,U,z,d),ke=sc(function(Je){if(Z(Je),c){var Se=uc(Je),He=Se.map(function(ye){return yo(ye,ae,U).map(function(de){return de.option})}),je=z?Se:Se[0],ze=z?He:He[0];c(je,ze)}}),we=sc(function(Je){if(Q(""),!z)ke(Je);else{var Se=Pr(Je),He=fa(he),je=fa(be),ze=He.includes(Se),ye=Re.some(function(it){return Pr(it)===Se}),de=he,Ce=Re;if(ye&&!ze)Ce=Re.filter(function(it){return Pr(it)!==Se});else{var Me=ze?He.filter(function(it){return it!==Se}):[].concat(De(He),[Se]),Be=q(),nt;if(ze){var Ne=Pn(Me,{checked:!1,halfCheckedKeys:je},Be);nt=Ne.checkedKeys}else{var xe=Pn(Me,!0,Be);nt=xe.checkedKeys}var qe=lc(nt,q,_);de=te(qe)}ke([].concat(De(Ce),De(de)))}}),Ge=function(Se,He){if(He.type==="clear"){ke([]);return}var je=He.values[0].valueCells;we(je)},Qe=w!==void 0?w:S,ct=P||E,dt=k||M,mt=function(Se){D==null||D(Se),O==null||O(Se)},We=s.useMemo(function(){return{options:ae,fieldNames:U,values:he,halfValues:be,changeOnSelect:u,onSelect:we,checkable:f,searchOptions:ce,dropdownPrefixCls:b,loadData:x,expandTrigger:y,expandIcon:F,loadingIcon:N,dropdownMenuColumnStyle:T}},[ae,U,he,be,u,we,f,ce,b,x,y,F,N,T]),Oe=!(J?ce:ae).length,ot=J&&ve.matchInputWidth||Oe?{}:{minWidth:"auto"};return s.createElement(_o.Provider,{value:We},s.createElement(qf,ne({},A,{ref:e,id:K,prefixCls:a,dropdownMatchSelectWidth:L,dropdownStyle:ot,displayValues:Ee,onDisplayValuesChange:Ge,mode:z?"multiple":void 0,searchValue:J,onSearch:ie,showSearch:Pe,OptionList:sb,emptyOptions:Oe,open:Qe,dropdownClassName:ct,placement:dt,onDropdownVisibleChange:mt,getRawInputElement:function(){return R}})))});Ao.SHOW_PARENT=Sv;Ao.SHOW_CHILD=wv;var db=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a2&&arguments[2]!==void 0?arguments[2]:!0,te=function(){T(function(Y){var J=new Map(Y),Q=J.delete(U);return Q?J:Y})};return T(function(ue){return new Map(ue).set(U,{url:ae,canPreview:q})}),te},W=function(U){U.stopPropagation(),R(!1),_(null)};return s.useEffect(function(){O(z)},[z]),s.useEffect(function(){!N&&A&&O(z)},[z,A,N]),s.createElement(Tb,{value:{isPreviewGroup:!0,previewUrls:V,setPreviewUrls:T,current:D,setCurrent:O,setShowPreview:R,setMousePosition:_,registerImage:X}},a,s.createElement(Nv,ne({"aria-hidden":!N,visible:N,prefixCls:n,onClose:W,mousePosition:j,src:V.get(D),icons:l,getContainer:h,countRender:x},S)))},wi=1,Pi=50,Xa=1,Db=.2,Ob=function(e){var r,n=e.visible,a=e.maskTransitionName,o=e.getContainer,l=e.prefixCls,i=e.rootClassName,u=e.icons,c=e.countRender,d=e.showSwitch,f=e.showProgress,v=e.current,m=e.count,h=e.scale,y=e.onSwitchLeft,g=e.onSwitchRight,b=e.onClose,x=e.onZoomIn,S=e.onZoomOut,w=e.onRotateRight,E=e.onRotateLeft,P=u.rotateLeft,T=u.rotateRight,M=u.zoomIn,k=u.zoomOut,D=u.close,O=u.left,$=u.right,F="".concat(l,"-operations-operation"),N="".concat(l,"-operations-icon"),R=[{icon:D,onClick:b,type:"close"},{icon:M,onClick:x,type:"zoomIn",disabled:h===Pi},{icon:k,onClick:S,type:"zoomOut",disabled:h===wi},{icon:T,onClick:w,type:"rotateRight"},{icon:P,onClick:E,type:"rotateLeft"}],I=s.createElement(s.Fragment,null,d&&s.createElement(s.Fragment,null,s.createElement("div",{className:pe("".concat(l,"-switch-left"),B({},"".concat(l,"-switch-left-disabled"),v===0)),onClick:y},O),s.createElement("div",{className:pe("".concat(l,"-switch-right"),B({},"".concat(l,"-switch-right-disabled"),v===m-1)),onClick:g},$)),s.createElement("ul",{className:"".concat(l,"-operations")},f&&s.createElement("li",{className:"".concat(l,"-operations-progress")},(r=c==null?void 0:c(v+1,m))!==null&&r!==void 0?r:"".concat(v+1," / ").concat(m)),R.map(function(L){var j,_=L.icon,A=L.onClick,K=L.type,z=L.disabled;return s.createElement("li",{className:pe(F,(j={},B(j,"".concat(l,"-operations-operation-").concat(K),!0),B(j,"".concat(l,"-operations-operation-disabled"),!!z),j)),onClick:A,key:K},s.isValidElement(_)?s.cloneElement(_,{className:N}):_)})));return s.createElement(Xs,{visible:n,motionName:a},function(L){var j=L.className,_=L.style;return s.createElement(Lp,{open:!0,getContainer:o??document.body},s.createElement("div",{className:pe("".concat(l,"-operations-wrapper"),j,i),style:_},I))})},cc={x:0,y:0,rotate:0,scale:1};function Ib(t){var e=s.useRef(null),r=s.useRef([]),n=s.useState(cc),a=ee(n,2),o=a[0],l=a[1],i=function(){l(cc)},u=function(f){e.current===null&&(r.current=[],e.current=ho(function(){l(function(v){var m=v;return r.current.forEach(function(h){m=p(p({},m),h)}),e.current=null,m})})),r.current.push(p(p({},o),f))},c=function(f,v,m){var h=t.current,y=h.width,g=h.height,b=h.offsetWidth,x=h.offsetHeight,S=h.offsetLeft,w=h.offsetTop,E=f,P=o.scale*f;P>Pi?(E=Pi/o.scale,P=Pi):Pn){if(e>0)return B({},t,o);if(e<0&&an)return B({},t,e<0?o:-o);return{}}function _b(t,e,r,n){var a=Mv(),o=a.width,l=a.height,i=null;return t<=o&&e<=l?i={x:0,y:0}:(t>o||e>l)&&(i=p(p({},dc("x",r,t,o)),dc("y",n,e,l))),i}var Lb=["prefixCls","src","alt","onClose","afterClose","visible","icons","rootClassName","getContainer","countRender","scaleStep","transitionName","maskTransitionName"],Nv=function(e){var r=e.prefixCls,n=e.src,a=e.alt,o=e.onClose;e.afterClose;var l=e.visible,i=e.icons,u=i===void 0?{}:i,c=e.rootClassName,d=e.getContainer,f=e.countRender,v=e.scaleStep,m=v===void 0?.5:v,h=e.transitionName,y=h===void 0?"zoom":h,g=e.maskTransitionName,b=g===void 0?"fade":g,x=Le(e,Lb),S=s.useRef(),w=s.useRef({deltaX:0,deltaY:0,transformX:0,transformY:0}),E=s.useState(!1),P=ee(E,2),T=P[0],M=P[1],k=s.useContext(vu),D=k.previewUrls,O=k.current,$=k.isPreviewGroup,F=k.setCurrent,N=D.size,R=Array.from(D.keys()),I=R.indexOf(O),L=$?D.get(O):n,j=$&&N>1,_=$&&N>=1,A=Ib(S),K=A.transform,z=A.resetTransform,V=A.updateTransform,X=A.dispatchZoonChange,W=K.rotate,Z=K.scale,U=pe(B({},"".concat(r,"-moving"),T)),ae=function(){z()},q=function(){X(Xa+m)},te=function(){X(Xa-m)},ue=function(){V({rotate:W+90})},Y=function(){V({rotate:W-90})},J=function(oe){oe.preventDefault(),oe.stopPropagation(),I>0&&F(R[I-1])},Q=function(oe){oe.preventDefault(),oe.stopPropagation(),I0&&(be=Xa/be),X(be,oe.clientX,oe.clientY)}},ve=s.useCallback(function(fe){!l||!j||(fe.keyCode===Ye.LEFT?I>0&&F(R[I-1]):fe.keyCode===Ye.RIGHT&&I=0||i.relatedTarget.className.indexOf("".concat(f,"-item"))>=0))&&d(n.getValidValue()))},n.go=function(i){var u=n.state.goInputText;u!==""&&(i.keyCode===Hr.ENTER||i.type==="click")&&(n.setState({goInputText:""}),n.props.quickGo(n.getValidValue()))},n}return xn(r,[{key:"getValidValue",value:function(){var a=this.state.goInputText;return!a||isNaN(a)?void 0:Number(a)}},{key:"getPageSizeOptions",value:function(){var a=this.props,o=a.pageSize,l=a.pageSizeOptions;return l.some(function(i){return i.toString()===o.toString()})?l:l.concat([o.toString()]).sort(function(i,u){var c=isNaN(Number(i))?0:Number(i),d=isNaN(Number(u))?0:Number(u);return c-d})}},{key:"render",value:function(){var a=this,o=this.props,l=o.pageSize,i=o.locale,u=o.rootPrefixCls,c=o.changeSize,d=o.quickGo,f=o.goButton,v=o.selectComponentClass,m=o.buildOptionText,h=o.selectPrefixCls,y=o.disabled,g=this.state.goInputText,b="".concat(u,"-options"),x=v,S=null,w=null,E=null;if(!c&&!d)return null;var P=this.getPageSizeOptions();if(c&&x){var T=P.map(function(M,k){return G.createElement(x.Option,{key:k,value:M.toString()},(m||a.buildOptionText)(M))});S=G.createElement(x,{disabled:y,prefixCls:h,showSearch:!1,className:"".concat(b,"-size-changer"),optionLabelProp:"children",dropdownMatchSelectWidth:!1,value:(l||P[0]).toString(),onChange:this.changeSize,getPopupContainer:function(k){return k.parentNode},"aria-label":i.page_size,defaultOpen:!1},T)}return d&&(f&&(E=typeof f=="boolean"?G.createElement("button",{type:"button",onClick:this.go,onKeyUp:this.go,disabled:y,className:"".concat(b,"-quick-jumper-button")},i.jump_to_confirm):G.createElement("span",{onClick:this.go,onKeyUp:this.go},f)),w=G.createElement("div",{className:"".concat(b,"-quick-jumper")},i.jump_to,G.createElement("input",{disabled:y,type:"text",value:g,onChange:this.handleChange,onKeyUp:this.go,onBlur:this.handleBlur,"aria-label":i.page}),i.page,E)),G.createElement("li",{className:"".concat(b)},S,w)}}]),r}(G.Component);Dv.defaultProps={pageSizeOptions:["10","20","50","100"]};const Ov={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页",page_size:"页码"};function fs(){}function mc(t){var e=Number(t);return typeof e=="number"&&!isNaN(e)&&isFinite(e)&&Math.floor(e)===e}function Hb(t,e,r){return r}function br(t,e,r){var n=typeof t>"u"?e.pageSize:t;return Math.floor((r.total-1)/n)+1}var Iv=function(t){yn(r,t);var e=bn(r);function r(n){var a;Cn(this,r),a=e.call(this,n),a.getJumpPrevPage=function(){return Math.max(1,a.state.current-(a.props.showLessItems?3:5))},a.getJumpNextPage=function(){return Math.min(br(void 0,a.state,a.props),a.state.current+(a.props.showLessItems?3:5))},a.getItemIcon=function(c,d){var f=a.props.prefixCls,v=c||G.createElement("button",{type:"button","aria-label":d,className:"".concat(f,"-item-link")});return typeof c=="function"&&(v=G.createElement(c,p({},a.props))),v},a.savePaginationNode=function(c){a.paginationNode=c},a.isValid=function(c){var d=a.props.total;return mc(c)&&c!==a.state.current&&mc(d)&&d>0},a.shouldDisplayQuickJumper=function(){var c=a.props,d=c.showQuickJumper,f=c.total,v=a.state.pageSize;return f<=v?!1:d},a.handleKeyDown=function(c){(c.keyCode===Hr.ARROW_UP||c.keyCode===Hr.ARROW_DOWN)&&c.preventDefault()},a.handleKeyUp=function(c){var d=a.getValidValue(c),f=a.state.currentInputValue;d!==f&&a.setState({currentInputValue:d}),c.keyCode===Hr.ENTER?a.handleChange(d):c.keyCode===Hr.ARROW_UP?a.handleChange(d-1):c.keyCode===Hr.ARROW_DOWN&&a.handleChange(d+1)},a.handleBlur=function(c){var d=a.getValidValue(c);a.handleChange(d)},a.changePageSize=function(c){var d=a.state.current,f=br(c,a.state,a.props);d=d>f?f:d,f===0&&(d=a.state.current),typeof c=="number"&&("pageSize"in a.props||a.setState({pageSize:c}),"current"in a.props||a.setState({current:d,currentInputValue:d})),a.props.onShowSizeChange(d,c),"onChange"in a.props&&a.props.onChange&&a.props.onChange(d,c)},a.handleChange=function(c){var d=a.props,f=d.disabled,v=d.onChange,m=a.state,h=m.pageSize,y=m.current,g=m.currentInputValue;if(a.isValid(c)&&!f){var b=br(void 0,a.state,a.props),x=c;return c>b?x=b:c<1&&(x=1),"current"in a.props||a.setState({current:x}),x!==g&&a.setState({currentInputValue:x}),v(x,h),x}return y},a.prev=function(){a.hasPrev()&&a.handleChange(a.state.current-1)},a.next=function(){a.hasNext()&&a.handleChange(a.state.current+1)},a.jumpPrev=function(){a.handleChange(a.getJumpPrevPage())},a.jumpNext=function(){a.handleChange(a.getJumpNextPage())},a.hasPrev=function(){return a.state.current>1},a.hasNext=function(){return a.state.current2?f-2:0),m=2;m=l?u=l:u=Number(o),u}},{key:"getShowSizeChanger",value:function(){var a=this.props,o=a.showSizeChanger,l=a.total,i=a.totalBoundaryShowSizeChanger;return typeof o<"u"?o:l>i}},{key:"renderPrev",value:function(a){var o=this.props,l=o.prevIcon,i=o.itemRender,u=i(a,"prev",this.getItemIcon(l,"prev page")),c=!this.hasPrev();return s.isValidElement(u)?s.cloneElement(u,{disabled:c}):u}},{key:"renderNext",value:function(a){var o=this.props,l=o.nextIcon,i=o.itemRender,u=i(a,"next",this.getItemIcon(l,"next page")),c=!this.hasNext();return s.isValidElement(u)?s.cloneElement(u,{disabled:c}):u}},{key:"render",value:function(){var a=this,o=this.props,l=o.prefixCls,i=o.className,u=o.style,c=o.disabled,d=o.hideOnSinglePage,f=o.total,v=o.locale,m=o.showQuickJumper,h=o.showLessItems,y=o.showTitle,g=o.showTotal,b=o.simple,x=o.itemRender,S=o.showPrevNextJumpers,w=o.jumpPrevIcon,E=o.jumpNextIcon,P=o.selectComponentClass,T=o.selectPrefixCls,M=o.pageSizeOptions,k=this.state,D=k.current,O=k.pageSize,$=k.currentInputValue;if(d===!0&&f<=O)return null;var F=br(void 0,this.state,this.props),N=[],R=null,I=null,L=null,j=null,_=null,A=m&&m.goButton,K=h?1:2,z=D-1>0?D-1:0,V=D+1f?f:D*O]));if(b)return A&&(typeof A=="boolean"?_=G.createElement("button",{type:"button",onClick:this.handleGoTO,onKeyUp:this.handleGoTO},v.jump_to_confirm):_=G.createElement("span",{onClick:this.handleGoTO,onKeyUp:this.handleGoTO},A),_=G.createElement("li",{title:y?"".concat(v.jump_to).concat(D,"/").concat(F):null,className:"".concat(l,"-simple-pager")},_)),G.createElement("ul",ne({className:pe(l,"".concat(l,"-simple"),B({},"".concat(l,"-disabled"),c),i),style:u,ref:this.savePaginationNode},X),W,G.createElement("li",{title:y?v.prev_page:null,onClick:this.prev,tabIndex:this.hasPrev()?0:null,onKeyPress:this.runIfEnterPrev,className:pe("".concat(l,"-prev"),B({},"".concat(l,"-disabled"),!this.hasPrev())),"aria-disabled":!this.hasPrev()},this.renderPrev(z)),G.createElement("li",{title:y?"".concat(D,"/").concat(F):null,className:"".concat(l,"-simple-pager")},G.createElement("input",{type:"text",value:$,disabled:c,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onChange:this.handleKeyUp,onBlur:this.handleBlur,size:"3"}),G.createElement("span",{className:"".concat(l,"-slash")},"/"),F),G.createElement("li",{title:y?v.next_page:null,onClick:this.next,tabIndex:this.hasPrev()?0:null,onKeyPress:this.runIfEnterNext,className:pe("".concat(l,"-next"),B({},"".concat(l,"-disabled"),!this.hasNext())),"aria-disabled":!this.hasNext()},this.renderNext(V)),_);if(F<=3+K*2){var Z={locale:v,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,showTitle:y,itemRender:x};F||N.push(G.createElement(Za,ne({},Z,{key:"noPager",page:1,className:"".concat(l,"-item-disabled")})));for(var U=1;U<=F;U+=1){var ae=D===U;N.push(G.createElement(Za,ne({},Z,{key:U,page:U,active:ae})))}}else{var q=h?v.prev_3:v.prev_5,te=h?v.next_3:v.next_5;S&&(R=G.createElement("li",{title:y?q:null,key:"prev",onClick:this.jumpPrev,tabIndex:"0",onKeyPress:this.runIfEnterJumpPrev,className:pe("".concat(l,"-jump-prev"),B({},"".concat(l,"-jump-prev-custom-icon"),!!w))},x(this.getJumpPrevPage(),"jump-prev",this.getItemIcon(w,"prev page"))),I=G.createElement("li",{title:y?te:null,key:"next",tabIndex:"0",onClick:this.jumpNext,onKeyPress:this.runIfEnterJumpNext,className:pe("".concat(l,"-jump-next"),B({},"".concat(l,"-jump-next-custom-icon"),!!E))},x(this.getJumpNextPage(),"jump-next",this.getItemIcon(E,"next page")))),j=G.createElement(Za,{locale:v,last:!0,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:F,page:F,active:!1,showTitle:y,itemRender:x}),L=G.createElement(Za,{locale:v,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:1,page:1,active:!1,showTitle:y,itemRender:x});var ue=Math.max(1,D-K),Y=Math.min(D+K,F);D-1<=K&&(Y=1+K*2),F-D<=K&&(ue=F-K*2);for(var J=ue;J<=Y;J+=1){var Q=D===J;N.push(G.createElement(Za,{locale:v,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:J,page:J,active:Q,showTitle:y,itemRender:x}))}D-1>=K*2&&D!==1+2&&(N[0]=s.cloneElement(N[0],{className:"".concat(l,"-item-after-jump-prev")}),N.unshift(R)),F-D>=K*2&&D!==F-2&&(N[N.length-1]=s.cloneElement(N[N.length-1],{className:"".concat(l,"-item-before-jump-next")}),N.push(I)),ue!==1&&N.unshift(L),Y!==F&&N.push(j)}var ie=!this.hasPrev()||!F,le=!this.hasNext()||!F;return G.createElement("ul",ne({className:pe(l,i,B({},"".concat(l,"-disabled"),c)),style:u,ref:this.savePaginationNode},X),W,G.createElement("li",{title:y?v.prev_page:null,onClick:this.prev,tabIndex:ie?null:0,onKeyPress:this.runIfEnterPrev,className:pe("".concat(l,"-prev"),B({},"".concat(l,"-disabled"),ie)),"aria-disabled":ie},this.renderPrev(z)),N,G.createElement("li",{title:y?v.next_page:null,onClick:this.next,tabIndex:le?null:0,onKeyPress:this.runIfEnterNext,className:pe("".concat(l,"-next"),B({},"".concat(l,"-disabled"),le)),"aria-disabled":le},this.renderNext(V)),G.createElement(Dv,{disabled:c,locale:v,rootPrefixCls:l,selectComponentClass:P,selectPrefixCls:T,changeSize:this.getShowSizeChanger()?this.changePageSize:null,current:D,pageSize:O,pageSizeOptions:M,quickGo:this.shouldDisplayQuickJumper()?this.handleChange:null,goButton:A}))}}],[{key:"getDerivedStateFromProps",value:function(a,o){var l={};if("current"in a&&(l.current=a.current,a.current!==o.current&&(l.currentInputValue=l.current)),"pageSize"in a&&a.pageSize!==o.pageSize){var i=o.current,u=br(a.pageSize,o,a);i=i>u?u:i,"current"in a||(l.current=i,l.currentInputValue=i),l.pageSize=a.pageSize}return l}}]),r}(G.Component);Iv.defaultProps={defaultCurrent:1,total:0,defaultPageSize:10,onChange:fs,className:"",selectPrefixCls:"rc-select",prefixCls:"rc-pagination",selectComponentClass:null,hideOnSinglePage:!1,showPrevNextJumpers:!0,showQuickJumper:!1,showLessItems:!1,showTitle:!0,onShowSizeChange:fs,locale:Ov,style:{},itemRender:Hb,totalBoundaryShowSizeChanger:50};var _v=function(e){return s.createElement(Nr,ne({},e,{size:"small"}))},Lv=function(e){return s.createElement(Nr,ne({},e,{size:"middle"}))};_v.Option=Nr.Option;Lv.Option=Nr.Option;var Wb=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a=d&&iv?"true":"false","aria-posinset":v+1,"aria-setsize":m,tabIndex:u?-1:0},G.createElement("div",{className:"".concat(c,"-first")},y),G.createElement("div",{className:"".concat(c,"-second")},y)));return f&&(g=f(g,this.props)),g}}]),r}(G.Component);function hc(){}var jv=function(t){yn(r,t);var e=bn(r);function r(n){var a;Cn(this,r),a=e.call(this,n),a.stars=void 0,a.rate=void 0,a.onHover=function(l,i){var u=a.props.onHoverChange,c=a.getStarValue(i,l.pageX),d=a.state.cleanedValue;c!==d&&a.setState({hoverValue:c,cleanedValue:null}),u(c)},a.onMouseLeave=function(){var l=a.props.onHoverChange;a.setState({hoverValue:void 0,cleanedValue:null}),l(void 0)},a.onClick=function(l,i){var u=a.props.allowClear,c=a.state.value,d=a.getStarValue(i,l.pageX),f=!1;u&&(f=d===c),a.onMouseLeave(),a.changeValue(f?0:d),a.setState({cleanedValue:f?d:null})},a.onFocus=function(){var l=a.props.onFocus;a.setState({focused:!0}),l&&l()},a.onBlur=function(){var l=a.props.onBlur;a.setState({focused:!1}),l&&l()},a.onKeyDown=function(l){var i=l.keyCode,u=a.props,c=u.count,d=u.allowHalf,f=u.onKeyDown,v=u.direction,m=v==="rtl",h=a.state.value;i===Ye.RIGHT&&h0&&!m||i===Ye.RIGHT&&h>0&&m?(d?h-=.5:h-=1,a.changeValue(h),l.preventDefault()):i===Ye.LEFT&&hm/2||!c&&o-v=r}function wC(t){return t&&Ve(t)==="object"&&!Array.isArray(t)&&!s.isValidElement(t)}function PC(t){return typeof t=="string"?!0:yp(t)}var EC=function(e){var r=e.ellipsis,n=e.rowType,a=e.children,o,l=r===!0?{showTitle:!0}:r;return l&&(l.showTitle||n==="header")&&(typeof a=="string"||typeof a=="number"?o=a.toString():s.isValidElement(a)&&typeof a.props.children=="string"&&(o=a.props.children)),o};function kC(t,e){var r,n,a,o=t.prefixCls,l=t.className,i=t.record,u=t.index,c=t.renderIndex,d=t.dataIndex,f=t.render,v=t.children,m=t.component,h=m===void 0?"td":m,y=t.colSpan,g=t.rowSpan,b=t.fixLeft,x=t.fixRight,S=t.firstFixLeft,w=t.lastFixLeft,E=t.firstFixRight,P=t.lastFixRight,T=t.appendNode,M=t.additionalProps,k=M===void 0?{}:M,D=t.ellipsis,O=t.align,$=t.rowType,F=t.isSticky,N=t.hovering,R=t.onHover,I="".concat(o,"-cell"),L=s.useContext(Wv),j=s.useContext(Bv),_=s.useContext(cl),A=_.allColumnsFixedLeft,K=s.useMemo(function(){if(vs(v))return[v];var oe=zv(i,d),se=oe,he=void 0;if(f){var be=f(oe,i,c);wC(be)?(se=be.children,he=be.props,L.renderWithProps=!0):se=be}return[se,he]},[L.renderWithProps?Math.random():0,v,d,L,i,f,c]),z=ee(K,2),V=z[0],X=z[1],W=V;Ve(W)==="object"&&!Array.isArray(W)&&!s.isValidElement(W)&&(W=null),D&&(w||E)&&(W=s.createElement("span",{className:"".concat(I,"-content")},W));var Z=X||{},U=Z.colSpan,ae=Z.rowSpan,q=Z.style,te=Z.className,ue=Le(Z,xC),Y=(r=U!==void 0?U:y)!==null&&r!==void 0?r:1,J=(n=ae!==void 0?ae:g)!==null&&n!==void 0?n:1;if(Y===0||J===0)return null;var Q={},ie=typeof b=="number"&&j,le=typeof x=="number"&&j;ie&&(Q.position="sticky",Q.left=b),le&&(Q.position="sticky",Q.right=x);var ge={};O&&(ge.textAlign=O);var Pe=function(se){var he;i&&R(u,u+J-1),k==null||(he=k.onMouseEnter)===null||he===void 0||he.call(k,se)},ve=function(se){var he;i&&R(-1,-1),k==null||(he=k.onMouseLeave)===null||he===void 0||he.call(k,se)},ce=EC({rowType:$,ellipsis:D,children:V}),fe=p(p(p({title:ce},ue),k),{},{colSpan:Y!==1?Y:null,rowSpan:J!==1?J:null,className:pe(I,l,(a={},B(a,"".concat(I,"-fix-left"),ie&&j),B(a,"".concat(I,"-fix-left-first"),S&&j),B(a,"".concat(I,"-fix-left-last"),w&&j),B(a,"".concat(I,"-fix-left-all"),w&&A&&j),B(a,"".concat(I,"-fix-right"),le&&j),B(a,"".concat(I,"-fix-right-first"),E&&j),B(a,"".concat(I,"-fix-right-last"),P&&j),B(a,"".concat(I,"-ellipsis"),D),B(a,"".concat(I,"-with-append"),T),B(a,"".concat(I,"-fix-sticky"),(ie||le)&&F&&j),B(a,"".concat(I,"-row-hover"),!X&&N),a),k.className,te),style:p(p(p(p({},k.style),ge),Q),q),onMouseEnter:Pe,onMouseLeave:ve,ref:PC(h)?e:null});return s.createElement(h,fe,T,W)}var Uv=s.forwardRef(kC);Uv.displayName="Cell";var RC=["expanded","className","hovering"],FC=s.memo(Uv,function(t,e){return e.shouldCellUpdate?RC.every(function(r){return t[r]===e[r]})&&!e.shouldCellUpdate(e.record,t.record):ou(t,e)}),Vo=s.forwardRef(function(t,e){var r=t.index,n=t.additionalProps,a=n===void 0?{}:n,o=t.colSpan,l=t.rowSpan,i=a.colSpan,u=a.rowSpan,c=o??i,d=l??u,f=CC(Hv,function(h){var y=SC(r,d||1,h==null?void 0:h.startRow,h==null?void 0:h.endRow);return{onHover:h==null?void 0:h.onHover,hovering:y}}),v=f.onHover,m=f.hovering;return s.createElement(FC,ne({},t,{colSpan:c,rowSpan:d,hovering:m,ref:e,onHover:v}))});Vo.displayName="WrappedCell";var Yn=s.createContext(null);function mu(t,e,r,n,a){var o=r[t]||{},l=r[e]||{},i,u;o.fixed==="left"?i=n.left[t]:l.fixed==="right"&&(u=n.right[e]);var c=!1,d=!1,f=!1,v=!1,m=r[e+1],h=r[t-1];if(a==="rtl"){if(i!==void 0){var y=h&&h.fixed==="left";v=!y}else if(u!==void 0){var g=m&&m.fixed==="right";f=!g}}else if(i!==void 0){var b=m&&m.fixed==="left";c=!b}else if(u!==void 0){var x=h&&h.fixed==="right";d=!x}return{fixLeft:i,fixRight:u,lastFixLeft:c,firstFixRight:d,lastFixRight:f,firstFixLeft:v,isSticky:n.isSticky}}function Yv(t){var e=t.cells,r=t.stickyOffsets,n=t.flattenColumns,a=t.rowComponent,o=t.cellComponent,l=t.onHeaderRow,i=t.index,u=s.useContext(Yn),c=u.prefixCls,d=u.direction,f;l&&(f=l(e.map(function(m){return m.column}),i));var v=ul(e.map(function(m){return m.column}));return s.createElement(a,f,e.map(function(m,h){var y=m.column,g=mu(m.colStart,m.colEnd,n,r,d),b;return y&&y.onHeaderCell&&(b=m.column.onHeaderCell(y)),s.createElement(Vo,ne({},m,{ellipsis:y.ellipsis,align:y.align,component:o,prefixCls:c,key:v[h]},g,{additionalProps:b,rowType:"header"}))}))}Yv.displayName="HeaderRow";function MC(t){var e=[];function r(l,i){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;e[u]=e[u]||[];var c=i,d=l.filter(Boolean).map(function(f){var v={key:f.key,className:f.className||"",children:f.title,column:f,colStart:c},m=1,h=f.children;return h&&h.length>0&&(m=r(h,c,u+1).reduce(function(y,g){return y+g},0),v.hasSubColumns=!0),"colSpan"in f&&(m=f.colSpan),"rowSpan"in f&&(v.rowSpan=f.rowSpan),v.colSpan=m,v.colEnd=v.colStart+m-1,e[u].push(v),c+=m,m});return d}r(t,0);for(var n=e.length,a=function(i){e[i].forEach(function(u){!("rowSpan"in u)&&!u.hasSubColumns&&(u.rowSpan=n-i)})},o=0;o1?ie-1:0),ge=1;ge0?[].concat(De(e),De(ms(o).map(function(l){return p({fixed:a},l)}))):[].concat(De(e),[p(p({},r),{},{fixed:a})])},[])}function jC(t){return t.map(function(e){var r=e.fixed,n=Le(e,LC),a=r;return r==="left"?a="right":r==="right"&&(a="left"),p({fixed:a},n)})}function AC(t,e){var r=t.prefixCls,n=t.columns,a=t.children,o=t.expandable,l=t.expandedKeys,i=t.columnTitle,u=t.getRowKey,c=t.onTriggerExpand,d=t.expandIcon,f=t.rowExpandable,v=t.expandIconColumnIndex,m=t.direction,h=t.expandRowByClick,y=t.columnWidth,g=t.fixed,b=s.useMemo(function(){return n||hu(a)},[n,a]),x=s.useMemo(function(){if(o){var E,P=b.slice();if(!P.includes(Wr)){var T=v||0;T>=0&&P.splice(T,0,Wr)}var M=P.indexOf(Wr);P=P.filter(function($,F){return $!==Wr||F===M});var k=b[M],D;(g==="left"||g)&&!v?D="left":(g==="right"||g)&&v===b.length?D="right":D=k?k.fixed:null;var O=(E={},B(E,uo,{className:"".concat(r,"-expand-icon-col"),columnType:"EXPAND_COLUMN"}),B(E,"title",i),B(E,"fixed",D),B(E,"className","".concat(r,"-row-expand-icon-cell")),B(E,"width",y),B(E,"render",function(F,N,R){var I=u(N,R),L=l.has(I),j=f?f(N):!0,_=d({prefixCls:r,expanded:L,expandable:j,record:N,onExpand:c});return h?s.createElement("span",{onClick:function(K){return K.stopPropagation()}},_):_}),E);return P.map(function($){return $===Wr?O:$})}return b.filter(function($){return $!==Wr})},[o,b,u,l,d,m]),S=s.useMemo(function(){var E=x;return e&&(E=e(E)),E.length||(E=[{render:function(){return null}}]),E},[e,x,m]),w=s.useMemo(function(){return m==="rtl"?jC(ms(S)):ms(S)},[S,m]);return[S,w]}function em(t){var e=s.useRef(t),r=s.useState({}),n=ee(r,2),a=n[1],o=s.useRef(null),l=s.useRef([]);function i(u){l.current.push(u);var c=Promise.resolve();o.current=c,c.then(function(){if(o.current===c){var d=l.current,f=e.current;l.current=[],d.forEach(function(v){e.current=v(e.current)}),o.current=null,f!==e.current&&a({})}})}return s.useEffect(function(){return function(){o.current=null}},[]),[e.current,i]}function KC(t){var e=s.useRef(t||null),r=s.useRef();function n(){window.clearTimeout(r.current)}function a(l){e.current=l,n(),r.current=window.setTimeout(function(){e.current=null,r.current=void 0},100)}function o(){return e.current}return s.useEffect(function(){return n},[]),[a,o]}function VC(t,e,r){var n=s.useMemo(function(){for(var a=[],o=[],l=0,i=0,u=0;u=0;i-=1){var u=e[i],c=r&&r[i],d=c&&c[uo];if(u||d||l){var f=d||{};f.columnType;var v=Le(f,zC);a.unshift(s.createElement("col",ne({key:i,style:{width:u}},v))),l=!0}}return s.createElement("colgroup",null,a)}function Cc(t){var e=t.className,r=t.children;return s.createElement("div",{className:e},r)}var nm=s.createContext({});function BC(t){var e=t.className,r=t.index,n=t.children,a=t.colSpan,o=a===void 0?1:a,l=t.rowSpan,i=t.align,u=s.useContext(Yn),c=u.prefixCls,d=u.direction,f=s.useContext(nm),v=f.scrollColumnIndex,m=f.stickyOffsets,h=f.flattenColumns,y=r+o-1,g=y+1===v?o+1:o,b=mu(r,r+g-1,h,m,d);return s.createElement(Vo,ne({className:e,index:r,component:"td",prefixCls:c,record:null,dataIndex:null,align:i,colSpan:g,rowSpan:l,render:function(){return n}},b))}var HC=["children"];function WC(t){var e=t.children,r=Le(t,HC);return s.createElement("tr",r,e)}function dl(t){var e=t.children;return e}dl.Row=WC;dl.Cell=BC;function yi(t){var e=t.children,r=t.stickyOffsets,n=t.flattenColumns,a=s.useContext(Yn),o=a.prefixCls,l=n.length-1,i=n[l],u=s.useMemo(function(){return{stickyOffsets:r,flattenColumns:n,scrollColumnIndex:i!=null&&i.scrollbar?l:null}},[i,n,l,r]);return s.createElement(nm.Provider,{value:u},s.createElement("tfoot",{className:"".concat(o,"-summary")},e))}var rm=dl;function UC(t){var e,r=t.prefixCls,n=t.record,a=t.onExpand,o=t.expanded,l=t.expandable,i="".concat(r,"-row-expand-icon");if(!l)return s.createElement("span",{className:pe(i,"".concat(r,"-row-spaced"))});var u=function(d){a(n,d),d.stopPropagation()};return s.createElement("span",{className:pe(i,(e={},B(e,"".concat(r,"-row-expanded"),o),B(e,"".concat(r,"-row-collapsed"),!o),e)),onClick:u})}function YC(t,e,r){var n=[];function a(o){(o||[]).forEach(function(l,i){n.push(e(l,i)),a(l[r])})}return a(t),n}var GC=function(e,r){var n,a,o=e.scrollBodyRef,l=e.onScroll,i=e.offsetScroll,u=e.container,c=s.useContext(Yn),d=c.prefixCls,f=((n=o.current)===null||n===void 0?void 0:n.scrollWidth)||0,v=((a=o.current)===null||a===void 0?void 0:a.clientWidth)||0,m=f&&v*(v/f),h=s.useRef(),y=em({scrollLeft:0,isHiddenScrollBar:!1}),g=ee(y,2),b=g[0],x=g[1],S=s.useRef({delta:0,x:0}),w=s.useState(!1),E=ee(w,2),P=E[0],T=E[1],M=function(){T(!1)},k=function(N){N.persist(),S.current.delta=N.pageX-b.scrollLeft,S.current.x=0,T(!0),N.preventDefault()},D=function(N){var R,I=N||((R=window)===null||R===void 0?void 0:R.event),L=I.buttons;if(!P||L===0){P&&T(!1);return}var j=S.current.x+N.pageX-S.current.x-S.current.delta;j<=0&&(j=0),j+m>=v&&(j=v-m),l({scrollLeft:j/v*(f+2)}),S.current.x=N.pageX},O=function(){if(o.current){var N=ds(o.current).top,R=N+o.current.offsetHeight,I=u===window?document.documentElement.scrollTop+window.innerHeight:ds(u).top+u.clientHeight;R-Zu()<=I||N>=I-i?x(function(L){return p(p({},L),{},{isHiddenScrollBar:!0})}):x(function(L){return p(p({},L),{},{isHiddenScrollBar:!1})})}},$=function(N){x(function(R){return p(p({},R),{},{scrollLeft:N/f*v||0})})};return s.useImperativeHandle(r,function(){return{setScrollLeft:$}}),s.useEffect(function(){var F=nr(document.body,"mouseup",M,!1),N=nr(document.body,"mousemove",D,!1);return O(),function(){F.remove(),N.remove()}},[m,P]),s.useEffect(function(){var F=nr(u,"scroll",O,!1),N=nr(window,"resize",O,!1);return function(){F.remove(),N.remove()}},[u]),s.useEffect(function(){b.isHiddenScrollBar||x(function(F){var N=o.current;return N?p(p({},F),{},{scrollLeft:N.scrollLeft/N.scrollWidth*N.clientWidth}):F})},[b.isHiddenScrollBar]),f<=v||!m||b.isHiddenScrollBar?null:s.createElement("div",{style:{height:Zu(),width:v,bottom:i},className:"".concat(d,"-sticky-scroll")},s.createElement("div",{onMouseDown:k,ref:h,className:pe("".concat(d,"-sticky-scroll-bar"),B({},"".concat(d,"-sticky-scroll-bar-active"),P)),style:{width:"".concat(m,"px"),transform:"translate3d(".concat(b.scrollLeft,"px, 0, 0)")}}))};const qC=s.forwardRef(GC);var xc=bp()?window:null;function XC(t,e){var r=Ve(t)==="object"?t:{},n=r.offsetHeader,a=n===void 0?0:n,o=r.offsetSummary,l=o===void 0?0:o,i=r.offsetScroll,u=i===void 0?0:i,c=r.getContainer,d=c===void 0?function(){return xc}:c,f=d()||xc;return s.useMemo(function(){var v=!!t;return{isSticky:v,stickyClassName:v?"".concat(e,"-sticky-holder"):"",offsetHeader:a,offsetSummary:l,offsetScroll:u,container:f}},[u,a,l,e,f])}var ZC=["className","noData","columns","flattenColumns","colWidths","columCount","stickyOffsets","direction","fixHeader","stickyTopOffset","stickyBottomOffset","stickyClassName","onScroll","maxContentScroll","children"];function QC(t,e){return s.useMemo(function(){for(var r=[],n=0;n=0})},[o]),D=o[o.length-1],O={fixed:D?D.fixed:null,scrollbar:!0,onHeaderCell:function(){return{className:"".concat(S,"-cell-scrollbar")}}},$=s.useMemo(function(){return P?[].concat(De(a),[O]):a},[P,a]),F=s.useMemo(function(){return P?[].concat(De(o),[O]):o},[P,o]),N=s.useMemo(function(){var I=u.right,L=u.left;return p(p({},u),{},{left:c==="rtl"?[].concat(De(L.map(function(j){return j+P})),[0]):L,right:c==="rtl"?I:[].concat(De(I.map(function(j){return j+P})),[0]),isSticky:E})},[P,u,E]),R=QC(l,i);return s.createElement("div",{style:p({overflow:"hidden"},E?{top:f,bottom:v}:{}),ref:M,className:pe(r,B({},m,!!m))},s.createElement("table",{style:{tableLayout:"fixed",visibility:n||R?null:"hidden"}},(!n||!y||k)&&s.createElement(tm,{colWidths:R?[].concat(De(R),[P]):[],columCount:i+1,columns:F}),g(p(p({},b),{},{stickyOffsets:N,columns:$,flattenColumns:F}))))});hs.displayName="FixedHolder";var JC=[],e2={},Ei="rc-table-internal-hook",t2=s.memo(function(t){var e=t.children;return e},function(t,e){return ou(t.props,e.props)?t.pingLeft!==e.pingLeft||t.pingRight!==e.pingRight:!1});function ra(t){var e,r=t.prefixCls,n=t.className,a=t.rowClassName,o=t.style,l=t.data,i=t.rowKey,u=t.scroll,c=t.tableLayout,d=t.direction,f=t.title,v=t.footer,m=t.summary,h=t.id,y=t.showHeader,g=t.components,b=t.emptyText,x=t.onRow,S=t.onHeaderRow,w=t.internalHooks,E=t.transformColumns,P=t.internalRefs,T=t.sticky,M=l||JC,k=!!M.length,D=s.useCallback(function(st,ht){return zv(g||{},st)||ht},[g]),O=s.useMemo(function(){return typeof i=="function"?i:function(st){var ht=st&&st[i];return ht}},[i]),$=IC(t),F=$.expandIcon,N=$.expandedRowKeys,R=$.defaultExpandedRowKeys,I=$.defaultExpandAllRows,L=$.expandedRowRender,j=$.columnTitle,_=$.onExpand,A=$.onExpandedRowsChange,K=$.expandRowByClick,z=$.rowExpandable,V=$.expandIconColumnIndex,X=$.expandedRowClassName,W=$.childrenColumnName,Z=$.indentSize,U=F||UC,ae=W||"children",q=s.useMemo(function(){return L?"row":t.expandable&&w===Ei&&t.expandable.__PARENT_RENDER_ICON__||M.some(function(st){return st&&Ve(st)==="object"&&st[ae]})?"nest":!1},[!!L,M]),te=s.useState(function(){return R||(I?YC(M,O,ae):[])}),ue=ee(te,2),Y=ue[0],J=ue[1],Q=s.useMemo(function(){return new Set(N||Y||[])},[N,Y]),ie=s.useCallback(function(st){var ht=O(st,M.indexOf(st)),Nt,Zt=Q.has(ht);Zt?(Q.delete(ht),Nt=De(Q)):Nt=[].concat(De(Q),[ht]),J(Nt),_&&_(!Zt,st),A&&A(Nt)},[O,Q,M,_,A]),le=s.useState(0),ge=ee(le,2),Pe=ge[0],ve=ge[1],ce=AC(p(p(p({},t),$),{},{expandable:!!L,columnTitle:j,expandedKeys:Q,getRowKey:O,onTriggerExpand:ie,expandIcon:U,expandIconColumnIndex:V,direction:d}),w===Ei?E:null),fe=ee(ce,2),oe=fe[0],se=fe[1],he=s.useMemo(function(){return{columns:oe,flattenColumns:se}},[oe,se]),be=s.useRef(),Re=s.useRef(),Fe=s.useRef(),Ee=s.useRef(),ke=s.useRef(),we=s.useState(!1),Ge=ee(we,2),Qe=Ge[0],ct=Ge[1],dt=s.useState(!1),mt=ee(dt,2),We=mt[0],Oe=mt[1],ot=em(new Map),Je=ee(ot,2),Se=Je[0],He=Je[1],je=ul(se),ze=je.map(function(st){return Se.get(st)}),ye=s.useMemo(function(){return ze},[ze.join("_")]),de=VC(ye,se.length,d),Ce=u&&vs(u.y),Me=u&&vs(u.x)||!!$.fixed,Be=Me&&se.some(function(st){var ht=st.fixed;return ht}),nt=s.useRef(),Ne=XC(T,r),xe=Ne.isSticky,qe=Ne.offsetHeader,it=Ne.offsetSummary,ft=Ne.offsetScroll,At=Ne.stickyClassName,Kt=Ne.container,Rt=m==null?void 0:m(M),zt=(Ce||xe)&&s.isValidElement(Rt)&&Rt.type===dl&&Rt.props.fixed,et,tt,lt;Ce&&(tt={overflowY:"scroll",maxHeight:u.y}),Me&&(et={overflowX:"auto"},Ce||(tt={overflowY:"hidden"}),lt={width:(u==null?void 0:u.x)===!0?"auto":u==null?void 0:u.x,minWidth:"100%"});var ut=s.useCallback(function(st,ht){Vf(be.current)&&He(function(Nt){if(Nt.get(st)!==ht){var Zt=new Map(Nt);return Zt.set(st,ht),Zt}return Nt})},[]),wt=KC(null),St=ee(wt,2),Ae=St[0],Ue=St[1];function Ie(st,ht){ht&&(typeof ht=="function"?ht(st):ht.scrollLeft!==st&&(ht.scrollLeft=st))}var _e=function(ht){var Nt=ht.currentTarget,Zt=ht.scrollLeft,Ha=d==="rtl",cn=typeof Zt=="number"?Zt:Nt.scrollLeft,mr=Nt||e2;if(!Ue()||Ue()===mr){var hr;Ae(mr),Ie(cn,Re.current),Ie(cn,Fe.current),Ie(cn,ke.current),Ie(cn,(hr=nt.current)===null||hr===void 0?void 0:hr.setScrollLeft)}if(Nt){var Ar=Nt.scrollWidth,pr=Nt.clientWidth;if(Ar===pr){ct(!1),Oe(!1);return}Ha?(ct(-cn0)):(ct(cn>0),Oe(cni))return!1;var c=o.get(t),d=o.get(e);if(c&&d)return c==e&&d==t;var f=-1,v=!0,m=r&H2?new K2:void 0;for(o.set(t,e),o.set(e,t);++f0&&arguments[0]!==void 0?arguments[0]:[],e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=t.length,n=e.length;if(Math.abs(r-n)!==1)return{add:!1,key:null};function a(o,l){var i=new Map;o.forEach(function(c){i.set(c,!0)});var u=l.filter(function(c){return!i.has(c)});return u.length===1?u[0]:null}return r ").concat(e);return e}var pm=s.forwardRef(function(t,e){var r=t.prefixCls,n=t.data;t.selectable,t.checkable;var a=t.expandedKeys,o=t.selectedKeys,l=t.checkedKeys,i=t.loadedKeys,u=t.loadingKeys,c=t.halfCheckedKeys,d=t.keyEntities,f=t.disabled,v=t.dragging,m=t.dragOverNodeKey,h=t.dropPosition,y=t.motion,g=t.height,b=t.itemHeight,x=t.virtual,S=t.focusable,w=t.activeItem,E=t.focused,P=t.tabIndex,T=t.onKeyDown,M=t.onFocus,k=t.onBlur,D=t.onActiveChange,O=t.onListChangeStart,$=t.onListChangeEnd,F=Le(t,j4),N=s.useRef(null),R=s.useRef(null);s.useImperativeHandle(e,function(){return{scrollTo:function(fe){N.current.scrollTo(fe)},getIndentWidth:function(){return R.current.offsetWidth}}});var I=s.useState(a),L=ee(I,2),j=L[0],_=L[1],A=s.useState(n),K=ee(A,2),z=K[0],V=K[1],X=s.useState(n),W=ee(X,2),Z=W[0],U=W[1],ae=s.useState([]),q=ee(ae,2),te=q[0],ue=q[1],Y=s.useState(null),J=ee(Y,2),Q=J[0],ie=J[1],le=s.useRef(n);le.current=n;function ge(){var ce=le.current;V(ce),U(ce),ue([]),ie(null),$()}nl(function(){_(a);var ce=L4(j,a);if(ce.key!==null)if(ce.add){var fe=z.findIndex(function(Fe){var Ee=Fe.key;return Ee===ce.key}),oe=Yc(Hc(z,n,ce.key),x,g,b),se=z.slice();se.splice(fe+1,0,Uc),U(se),ue(oe),ie("show")}else{var he=n.findIndex(function(Fe){var Ee=Fe.key;return Ee===ce.key}),be=Yc(Hc(n,z,ce.key),x,g,b),Re=n.slice();Re.splice(he+1,0,Uc),U(Re),ue(be),ie("hide")}else z!==n&&(V(n),U(n))},[a,n]),s.useEffect(function(){v||ge()},[v]);var Pe=y?Z:n,ve={expandedKeys:a,selectedKeys:o,loadedKeys:i,loadingKeys:u,checkedKeys:l,halfCheckedKeys:c,dragOverNodeKey:m,dropPosition:h,keyEntities:d};return s.createElement(s.Fragment,null,E&&w&&s.createElement("span",{style:Wc,"aria-live":"assertive"},K4(w)),s.createElement("div",null,s.createElement("input",{style:Wc,disabled:S===!1||f,tabIndex:S!==!1?P:null,onKeyDown:T,onFocus:M,onBlur:k,value:"",onChange:A4,"aria-label":"for screen reader"})),s.createElement("div",{className:"".concat(r,"-treenode"),"aria-hidden":!0,style:{position:"absolute",pointerEvents:"none",visibility:"hidden",height:0,overflow:"hidden",border:0,padding:0}},s.createElement("div",{className:"".concat(r,"-indent")},s.createElement("div",{ref:R,className:"".concat(r,"-indent-unit")}))),s.createElement(Kp,ne({},F,{data:Pe,itemKey:Gc,height:g,fullHeight:!1,virtual:x,itemHeight:b,prefixCls:"".concat(r,"-list"),ref:N,onVisibleChange:function(fe,oe){var se=new Set(fe),he=oe.filter(function(be){return!se.has(be)});he.some(function(be){return Gc(be)===Jr})&&ge()}}),function(ce){var fe=ce.pos,oe=ne({},(vm(ce.data),ce.data)),se=ce.title,he=ce.key,be=ce.isStart,Re=ce.isEnd,Fe=Lo(he,fe);delete oe.key,delete oe.children;var Ee=lo(Fe,ve);return s.createElement(_4,ne({},oe,Ee,{title:se,active:!!w&&he===w.key,pos:fe,data:ce.data,isStart:be,isEnd:Re,motion:y,motionNodes:he===Jr?te:null,motionType:Q,onMotionStart:O,onMotionEnd:ge,treeNodeRequiredProps:ve,onMouseMove:function(){D(null)}}))}))});pm.displayName="NodeList";function Kn(t,e){if(!t)return[];var r=t.slice(),n=r.indexOf(e);return n>=0&&r.splice(n,1),r}function er(t,e){var r=(t||[]).slice();return r.indexOf(e)===-1&&r.push(e),r}function wu(t){return t.split("-")}function V4(t,e){var r=[],n=mn(e,t);function a(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];o.forEach(function(l){var i=l.key,u=l.children;r.push(i),a(u)})}return a(n.children),r}function z4(t){if(t.parent){var e=wu(t.pos);return Number(e[e.length-1])===t.parent.children.length-1}return!1}function B4(t){var e=wu(t.pos);return Number(e[e.length-1])===0}function qc(t,e,r,n,a,o,l,i,u,c){var d,f=t.clientX,v=t.clientY,m=t.target.getBoundingClientRect(),h=m.top,y=m.height,g=(c==="rtl"?-1:1)*(((a==null?void 0:a.x)||0)-f),b=(g-12)/n,x=mn(i,r.props.eventKey);if(v-1.5?o({dragNode:$,dropNode:F,dropPosition:1})?k=1:N=!1:o({dragNode:$,dropNode:F,dropPosition:0})?k=0:o({dragNode:$,dropNode:F,dropPosition:1})?k=1:N=!1:o({dragNode:$,dropNode:F,dropPosition:1})?k=1:N=!1,{dropPosition:k,dropLevelOffset:D,dropTargetKey:x.key,dropTargetPos:x.pos,dragOverNodeKey:M,dropContainerKey:k===0?null:((d=x.parent)===null||d===void 0?void 0:d.key)||null,dropAllowed:N}}function Xc(t,e){if(t){var r=e.multiple;return r?t.slice():t.length?[t[0]]:t}}function jl(t){if(!t)return null;var e;if(Array.isArray(t))e={checkedKeys:t,halfCheckedKeys:void 0};else if(Ve(t)==="object")e={checkedKeys:t.checked||void 0,halfCheckedKeys:t.halfChecked||void 0};else return rn(!1,"`checkedKeys` is not an array or an object"),null;return e}function Ss(t,e){var r=new Set;function n(a){if(!r.has(a)){var o=mn(e,a);if(o){r.add(a);var l=o.parent,i=o.node;i.disabled||l&&n(l.key)}}}return(t||[]).forEach(function(a){n(a)}),De(r)}var H4=10,gl=function(t){yn(r,t);var e=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),l=0;l2&&arguments[2]!==void 0?arguments[2]:!1,f=n.state,v=f.dragChildrenKeys,m=f.dropPosition,h=f.dropTargetKey,y=f.dropTargetPos,g=f.dropAllowed;if(g){var b=n.props.onDrop;if(n.setState({dragOverNodeKey:null}),n.cleanDragState(),h!==null){var x=p(p({},lo(h,n.getTreeNodeRequiredProps())),{},{active:((c=n.getActiveItem())===null||c===void 0?void 0:c.key)===h,data:mn(n.state.keyEntities,h).node}),S=v.indexOf(h)!==-1;rn(!S,"Can not drop to dragNode's children node. This is a bug of rc-tree. Please report an issue.");var w=wu(y),E={event:i,node:Wt(x),dragNode:n.dragNode?Wt(n.dragNode.props):null,dragNodesKeys:[n.dragNode.props.eventKey].concat(v),dropToGap:m!==0,dropPosition:m+Number(w[w.length-1])};d||b==null||b(E),n.dragNode=null}}},n.cleanDragState=function(){var i=n.state.draggingNodeKey;i!==null&&n.setState({draggingNodeKey:null,dropPosition:null,dropContainerKey:null,dropTargetKey:null,dropLevelOffset:null,dropAllowed:!0,dragOverNodeKey:null}),n.dragStartMousePosition=null,n.currentMouseOverDroppableNodeKey=null},n.triggerExpandActionExpand=function(i,u){var c=n.state,d=c.expandedKeys,f=c.flattenNodes,v=u.expanded,m=u.key,h=u.isLeaf;if(!(h||i.shiftKey||i.metaKey||i.ctrlKey)){var y=f.filter(function(b){return b.key===m})[0],g=Wt(p(p({},lo(m,n.getTreeNodeRequiredProps())),{},{data:y.data}));n.setExpandedKeys(v?Kn(d,m):er(d,m)),n.onNodeExpand(i,g)}},n.onNodeClick=function(i,u){var c=n.props,d=c.onClick,f=c.expandAction;f==="click"&&n.triggerExpandActionExpand(i,u),d==null||d(i,u)},n.onNodeDoubleClick=function(i,u){var c=n.props,d=c.onDoubleClick,f=c.expandAction;f==="doubleClick"&&n.triggerExpandActionExpand(i,u),d==null||d(i,u)},n.onNodeSelect=function(i,u){var c=n.state.selectedKeys,d=n.state,f=d.keyEntities,v=d.fieldNames,m=n.props,h=m.onSelect,y=m.multiple,g=u.selected,b=u[v.key],x=!g;x?y?c=er(c,b):c=[b]:c=Kn(c,b);var S=c.map(function(w){var E=mn(f,w);return E?E.node:null}).filter(function(w){return w});n.setUncontrolledState({selectedKeys:c}),h==null||h(c,{event:"select",selected:x,node:u,selectedNodes:S,nativeEvent:i.nativeEvent})},n.onNodeCheck=function(i,u,c){var d=n.state,f=d.keyEntities,v=d.checkedKeys,m=d.halfCheckedKeys,h=n.props,y=h.checkStrictly,g=h.onCheck,b=u.key,x,S={event:"check",node:u,checked:c,nativeEvent:i.nativeEvent};if(y){var w=c?er(v,b):Kn(v,b),E=Kn(m,b);x={checked:w,halfChecked:E},S.checkedNodes=w.map(function(O){return mn(f,O)}).filter(function(O){return O}).map(function(O){return O.node}),n.setUncontrolledState({checkedKeys:w})}else{var P=Pn([].concat(De(v),[b]),!0,f),T=P.checkedKeys,M=P.halfCheckedKeys;if(!c){var k=new Set(T);k.delete(b);var D=Pn(Array.from(k),{checked:!1,halfCheckedKeys:M},f);T=D.checkedKeys,M=D.halfCheckedKeys}x=T,S.checkedNodes=[],S.checkedNodesPositions=[],S.halfCheckedKeys=M,T.forEach(function(O){var $=mn(f,O);if($){var F=$.node,N=$.pos;S.checkedNodes.push(F),S.checkedNodesPositions.push({node:F,pos:N})}}),n.setUncontrolledState({checkedKeys:T},!1,{halfCheckedKeys:M})}g==null||g(x,S)},n.onNodeLoad=function(i){var u=i.key,c=new Promise(function(d,f){n.setState(function(v){var m=v.loadedKeys,h=m===void 0?[]:m,y=v.loadingKeys,g=y===void 0?[]:y,b=n.props,x=b.loadData,S=b.onLoad;if(!x||h.indexOf(u)!==-1||g.indexOf(u)!==-1)return null;var w=x(i);return w.then(function(){var E=n.state.loadedKeys,P=er(E,u);S==null||S(P,{event:"load",node:i}),n.setUncontrolledState({loadedKeys:P}),n.setState(function(T){return{loadingKeys:Kn(T.loadingKeys,u)}}),d()}).catch(function(E){if(n.setState(function(T){return{loadingKeys:Kn(T.loadingKeys,u)}}),n.loadingRetryTimes[u]=(n.loadingRetryTimes[u]||0)+1,n.loadingRetryTimes[u]>=H4){var P=n.state.loadedKeys;rn(!1,"Retry for `loadData` many times but still failed. No more retry."),n.setUncontrolledState({loadedKeys:er(P,u)}),d()}f(E)}),{loadingKeys:er(g,u)}})});return c.catch(function(){}),c},n.onNodeMouseEnter=function(i,u){var c=n.props.onMouseEnter;c==null||c({event:i,node:u})},n.onNodeMouseLeave=function(i,u){var c=n.props.onMouseLeave;c==null||c({event:i,node:u})},n.onNodeContextMenu=function(i,u){var c=n.props.onRightClick;c&&(i.preventDefault(),c({event:i,node:u}))},n.onFocus=function(){var i=n.props.onFocus;n.setState({focused:!0});for(var u=arguments.length,c=new Array(u),d=0;d1&&arguments[1]!==void 0?arguments[1]:!1,c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null;if(!n.destroyed){var d=!1,f=!0,v={};Object.keys(i).forEach(function(m){if(m in n.props){f=!1;return}d=!0,v[m]=i[m]}),d&&(!u||f)&&n.setState(p(p({},v),c))}},n.scrollTo=function(i){n.listRef.current.scrollTo(i)},n}return xn(r,[{key:"componentDidMount",value:function(){this.destroyed=!1,this.onUpdated()}},{key:"componentDidUpdate",value:function(){this.onUpdated()}},{key:"onUpdated",value:function(){var a=this.props.activeKey;a!==void 0&&a!==this.state.activeKey&&(this.setState({activeKey:a}),a!==null&&this.scrollTo({key:a}))}},{key:"componentWillUnmount",value:function(){window.removeEventListener("dragend",this.onWindowDragEnd),this.destroyed=!0}},{key:"resetDragState",value:function(){this.setState({dragOverNodeKey:null,dropPosition:null,dropLevelOffset:null,dropTargetKey:null,dropContainerKey:null,dropTargetPos:null,dropAllowed:!1})}},{key:"render",value:function(){var a,o=this.state,l=o.focused,i=o.flattenNodes,u=o.keyEntities,c=o.draggingNodeKey,d=o.activeKey,f=o.dropLevelOffset,v=o.dropContainerKey,m=o.dropTargetKey,h=o.dropPosition,y=o.dragOverNodeKey,g=o.indent,b=this.props,x=b.prefixCls,S=b.className,w=b.style,E=b.showLine,P=b.focusable,T=b.tabIndex,M=T===void 0?0:T,k=b.selectable,D=b.showIcon,O=b.icon,$=b.switcherIcon,F=b.draggable,N=b.checkable,R=b.checkStrictly,I=b.disabled,L=b.motion,j=b.loadData,_=b.filterTreeNode,A=b.height,K=b.itemHeight,z=b.virtual,V=b.titleRender,X=b.dropIndicatorRender,W=b.onContextMenu,Z=b.onScroll,U=b.direction,ae=b.rootClassName,q=b.rootStyle,te=au(this.props,{aria:!0,data:!0}),ue;return F&&(Ve(F)==="object"?ue=F:typeof F=="function"?ue={nodeDraggable:F}:ue={}),s.createElement(Su.Provider,{value:{prefixCls:x,selectable:k,showIcon:D,icon:O,switcherIcon:$,draggable:ue,draggingNodeKey:c,checkable:N,checkStrictly:R,disabled:I,keyEntities:u,dropLevelOffset:f,dropContainerKey:v,dropTargetKey:m,dropPosition:h,dragOverNodeKey:y,indent:g,direction:U,dropIndicatorRender:X,loadData:j,filterTreeNode:_,titleRender:V,onNodeClick:this.onNodeClick,onNodeDoubleClick:this.onNodeDoubleClick,onNodeExpand:this.onNodeExpand,onNodeSelect:this.onNodeSelect,onNodeCheck:this.onNodeCheck,onNodeLoad:this.onNodeLoad,onNodeMouseEnter:this.onNodeMouseEnter,onNodeMouseLeave:this.onNodeMouseLeave,onNodeContextMenu:this.onNodeContextMenu,onNodeDragStart:this.onNodeDragStart,onNodeDragEnter:this.onNodeDragEnter,onNodeDragOver:this.onNodeDragOver,onNodeDragLeave:this.onNodeDragLeave,onNodeDragEnd:this.onNodeDragEnd,onNodeDrop:this.onNodeDrop}},s.createElement("div",{role:"tree",className:pe(x,S,ae,(a={},B(a,"".concat(x,"-show-line"),E),B(a,"".concat(x,"-focused"),l),B(a,"".concat(x,"-active-focused"),d!==null),a)),style:q},s.createElement(pm,ne({ref:this.listRef,prefixCls:x,style:w,data:i,disabled:I,selectable:k,checkable:!!N,motion:L,dragging:c!==null,height:A,itemHeight:K,virtual:z,focusable:P,focused:l,tabIndex:M,activeItem:this.getActiveItem(),onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.onKeyDown,onActiveChange:this.onActiveChange,onListChangeStart:this.onListChangeStart,onListChangeEnd:this.onListChangeEnd,onContextMenu:W,onScroll:Z},this.getTreeNodeRequiredProps(),te))))}}],[{key:"getDerivedStateFromProps",value:function(a,o){var l=o.prevProps,i={prevProps:a};function u(P){return!l&&P in a||l&&l[P]!==a[P]}var c,d=o.fieldNames;if(u("fieldNames")&&(d=Ti(a.fieldNames),i.fieldNames=d),u("treeData")?c=a.treeData:u("children")&&(rn(!1,"`children` of Tree is deprecated. Please use `treeData` instead."),c=Ev(a.children)),c){i.treeData=c;var f=jo(c,{fieldNames:d});i.keyEntities=p(B({},Jr,hm),f.keyEntities)}var v=i.keyEntities||o.keyEntities;if(u("expandedKeys")||l&&u("autoExpandParent"))i.expandedKeys=a.autoExpandParent||!l&&a.defaultExpandParent?Ss(a.expandedKeys,v):a.expandedKeys;else if(!l&&a.defaultExpandAll){var m=p({},v);delete m[Jr],i.expandedKeys=Object.keys(m).map(function(P){return m[P].key})}else!l&&a.defaultExpandedKeys&&(i.expandedKeys=a.autoExpandParent||a.defaultExpandParent?Ss(a.defaultExpandedKeys,v):a.defaultExpandedKeys);if(i.expandedKeys||delete i.expandedKeys,c||i.expandedKeys){var h=Il(c||o.treeData,i.expandedKeys||o.expandedKeys,d);i.flattenNodes=h}if(a.selectable&&(u("selectedKeys")?i.selectedKeys=Xc(a.selectedKeys,a):!l&&a.defaultSelectedKeys&&(i.selectedKeys=Xc(a.defaultSelectedKeys,a))),a.checkable){var y;if(u("checkedKeys")?y=jl(a.checkedKeys)||{}:!l&&a.defaultCheckedKeys?y=jl(a.defaultCheckedKeys)||{}:c&&(y=jl(a.checkedKeys)||{checkedKeys:o.checkedKeys,halfCheckedKeys:o.halfCheckedKeys}),y){var g=y,b=g.checkedKeys,x=b===void 0?[]:b,S=g.halfCheckedKeys,w=S===void 0?[]:S;if(!a.checkStrictly){var E=Pn(x,!0,v);x=E.checkedKeys,w=E.halfCheckedKeys}i.checkedKeys=x,i.halfCheckedKeys=w}}return u("loadedKeys")&&(i.loadedKeys=a.loadedKeys),i}}]),r}(s.Component);gl.defaultProps={prefixCls:"rc-tree",showLine:!1,showIcon:!0,selectable:!0,multiple:!1,checkable:!1,disabled:!1,checkStrictly:!1,draggable:!1,defaultExpandParent:!0,autoExpandParent:!1,defaultExpandAll:!1,defaultExpandedKeys:[],defaultCheckedKeys:[],defaultSelectedKeys:[],dropIndicatorRender:F4,allowDrop:function(){return!0},expandAction:!1};gl.TreeNode=Ca;var Zc=4;function W4(t){var e=t.dropPosition,r=t.dropLevelOffset,n=t.prefixCls,a=t.indent,o=t.direction,l=o===void 0?"ltr":o,i=l==="ltr"?"left":"right",u=l==="ltr"?"right":"left",c=B(B({},i,-r*a+Zc),u,0);switch(e){case-1:c.top=-3;break;case 1:c.bottom=-3;break;default:c.bottom=-3,c[i]=a+Zc;break}return G.createElement("div",{style:c,className:"".concat(n,"-drop-indicator")})}function gm(t,e,r,n){var a=n.isLeaf,o=n.expanded,l=n.loading;if(l)return s.createElement(Na,{className:"".concat(t,"-switcher-loading-icon")});var i;if(r&&Ve(r)==="object"&&(i=r.showLeafIcon),a){if(!r)return null;if(typeof i!="boolean"&&i){var u=typeof i=="function"?i(n):i,c="".concat(t,"-switcher-line-custom-icon");return Gu(u)?po(u,{className:pe(u.props.className||"",c)}):u}return i?s.createElement(tv,{className:"".concat(t,"-switcher-line-icon")}):s.createElement("span",{className:"".concat(t,"-switcher-leaf-line")})}var d="".concat(t,"-switcher-icon"),f=typeof e=="function"?e(n):e;return Gu(f)?po(f,{className:pe(f.props.className||"",d)}):f||(r?o?s.createElement(E0,{className:"".concat(t,"-switcher-line-icon")}):s.createElement(N0,{className:"".concat(t,"-switcher-line-icon")}):s.createElement(ig,{className:d}))}var U4=s.forwardRef(function(t,e){var r=s.useContext(Ut),n=r.getPrefixCls,a=r.direction,o=r.virtual,l=t.prefixCls,i=t.className,u=t.showIcon,c=u===void 0?!1:u,d=t.showLine,f=t.switcherIcon,v=t.blockNode,m=v===void 0?!1:v,h=t.children,y=t.checkable,g=y===void 0?!1:y,b=t.selectable,x=b===void 0?!0:b,S=t.draggable,w=t.motion,E=w===void 0?ne(ne({},Mp),{motionAppear:!1}):w,P=n("tree",l),T=ne(ne({},t),{checkable:g,selectable:x,showIcon:c,motion:E,blockNode:m,showLine:!!d,dropIndicatorRender:W4}),M=s.useMemo(function(){if(!S)return!1;var k={};switch(Ve(S)){case"function":k.nodeDraggable=S;break;case"object":k=ne({},S);break}return k.icon!==!1&&(k.icon=k.icon||s.createElement(C0,null)),k},[S]);return s.createElement(gl,ne({itemHeight:20,ref:e,virtual:o},T,{prefixCls:P,className:pe(B(B(B(B({},"".concat(P,"-icon-hide"),!c),"".concat(P,"-block-node"),m),"".concat(P,"-unselectable"),!x),"".concat(P,"-rtl"),a==="rtl"),i),direction:a,checkable:g&&s.createElement("span",{className:"".concat(P,"-checkbox-inner")}),selectable:x,switcherIcon:function(D){return gm(P,f,d,D)},draggable:M}),h)});const ym=U4;var tr;(function(t){t[t.None=0]="None",t[t.Start=1]="Start",t[t.End=2]="End"})(tr||(tr={}));function Pu(t,e){function r(n){var a=n.key,o=n.children;e(a,n)!==!1&&Pu(o||[],e)}t.forEach(r)}function Y4(t){var e=t.treeData,r=t.expandedKeys,n=t.startKey,a=t.endKey,o=[],l=tr.None;if(n&&n===a)return[n];if(!n||!a)return[];function i(u){return u===n||u===a}return Pu(e,function(u){if(l===tr.End)return!1;if(i(u)){if(o.push(u),l===tr.None)l=tr.Start;else if(l===tr.Start)return l=tr.End,!1}else l===tr.Start&&o.push(u);return r.includes(u)}),o}function Al(t,e){var r=De(e),n=[];return Pu(t,function(a,o){var l=r.indexOf(a);return l!==-1&&(n.push(o),r.splice(l,1)),!!r.length}),n}var Qc=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a0&&arguments[0]!==void 0?arguments[0]:{confirm:!1,closeDropdown:!1},we=ke.confirm,Ge=ke.closeDropdown;we&&ue([]),Ge&&$(!1),q(""),j(E?(P||[]).map(function(Qe){return String(Qe)}):[])},Q=function(){var ke=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{closeDropdown:!0},we=ke.closeDropdown;we&&$(!1),ue(L())},ie=function(ke){ke&&N!==void 0&&j(Kl(N)),$(ke),!ke&&!a.filterDropdown&&Y()},le=pe(B({},"".concat(o,"-menu-without-submenu"),!n3(a.filters||[]))),ge=function(ke){if(ke.target.checked){var we=ma(a==null?void 0:a.filters).map(function(Ge){return String(Ge)});j(we)}else j([])},Pe=function Ee(ke){var we=ke.filters;return(we||[]).map(function(Ge,Qe){var ct=String(Ge.value),dt={title:Ge.text,key:Ge.value!==void 0?ct:String(Qe)};return Ge.children&&(dt.children=Ee({filters:Ge.children})),dt})},ve=function Ee(ke){var we;return ne(ne({},ke),{text:ke.title,value:ke.key,children:((we=ke.children)===null||we===void 0?void 0:we.map(function(Ge){return Ee(Ge)}))||[]})},ce;if(typeof a.filterDropdown=="function")ce=a.filterDropdown({prefixCls:"".concat(o,"-custom"),setSelectedKeys:function(ke){return _({selectedKeys:ke})},selectedKeys:L(),confirm:Q,clearFilters:J,filters:a.filters,visible:F,close:function(){$(!1)}});else if(a.filterDropdown)ce=a.filterDropdown;else{var fe=L()||[],oe=function(){return(a.filters||[]).length===0?s.createElement(Ju,{image:Ju.PRESENTED_IMAGE_SIMPLE,description:h.filterEmptyText,imageStyle:{height:24},style:{margin:0,padding:"16px 0"}}):c==="tree"?s.createElement(s.Fragment,null,s.createElement(ed,{filterSearch:f,value:ae,onChange:te,tablePrefixCls:r,locale:h}),s.createElement("div",{className:"".concat(r,"-filter-dropdown-tree")},i?s.createElement(pa,{checked:fe.length===ma(a.filters).length,indeterminate:fe.length>0&&fe.length0?o:t}),v=Math.ceil((o||t)/f.pageSize);f.current>v&&(f.current=v||1);var m=function(g,b){d({current:g??1,pageSize:b||f.pageSize})},h=function(g,b){var x;e&&((x=e.onChange)===null||x===void 0||x.call(e,g,b)),m(g,b),r(g,b||(f==null?void 0:f.pageSize))};return e===!1?[{},function(){}]:[ne(ne({},f),{onChange:h}),m]}var Cr={},Ps="SELECT_ALL",Es="SELECT_INVERT",ks="SELECT_NONE",rd=[];function Em(t,e){var r=[];return(t||[]).forEach(function(n){r.push(n),n&&Ve(n)==="object"&&e in n&&(r=[].concat(De(r),De(Em(n[e],e))))}),r}function u3(t,e){var r=t||{},n=r.preserveSelectedRowKeys,a=r.selectedRowKeys,o=r.defaultSelectedRowKeys,l=r.getCheckboxProps,i=r.onChange,u=r.onSelect,c=r.onSelectAll,d=r.onSelectInvert,f=r.onSelectNone,v=r.onSelectMultiple,m=r.columnWidth,h=r.type,y=r.selections,g=r.fixed,b=r.renderCell,x=r.hideSelectAll,S=r.checkStrictly,w=S===void 0?!0:S,E=e.prefixCls,P=e.data,T=e.pageData,M=e.getRecordByKey,k=e.getRowKey,D=e.expandType,O=e.childrenColumnName,$=e.locale,F=e.getPopupContainer,N=xt(a||o||rd,{value:a}),R=ee(N,2),I=R[0],L=R[1],j=s.useRef(new Map),_=s.useCallback(function(ve){if(n){var ce=new Map;ve.forEach(function(fe){var oe=M(fe);!oe&&j.current.has(fe)&&(oe=j.current.get(fe)),ce.set(fe,oe)}),j.current=ce}},[M,n]);s.useEffect(function(){_(I)},[I]);var A=s.useMemo(function(){return w?{keyEntities:null}:jo(P,{externalGetKey:k,childrenPropName:O})},[P,k,w,O]),K=A.keyEntities,z=s.useMemo(function(){return Em(T,O)},[T,O]),V=s.useMemo(function(){var ve=new Map;return z.forEach(function(ce,fe){var oe=k(ce,fe),se=(l?l(ce):null)||{};ve.set(oe,se)}),ve},[z,k,l]),X=s.useCallback(function(ve){var ce;return!!(!((ce=V.get(k(ve)))===null||ce===void 0)&&ce.disabled)},[V,k]),W=s.useMemo(function(){if(w)return[I||[],[]];var ve=Pn(I,!0,K,X),ce=ve.checkedKeys,fe=ve.halfCheckedKeys;return[ce||[],fe]},[I,w,K,X]),Z=ee(W,2),U=Z[0],ae=Z[1],q=s.useMemo(function(){var ve=h==="radio"?U.slice(0,1):U;return new Set(ve)},[U,h]),te=s.useMemo(function(){return h==="radio"?new Set:new Set(ae)},[ae,h]),ue=s.useState(null),Y=ee(ue,2),J=Y[0],Q=Y[1];s.useEffect(function(){t||L(rd)},[!!t]);var ie=s.useCallback(function(ve,ce){var fe,oe;_(ve),n?(fe=ve,oe=ve.map(function(se){return j.current.get(se)})):(fe=[],oe=[],ve.forEach(function(se){var he=M(se);he!==void 0&&(fe.push(se),oe.push(he))})),L(fe),i==null||i(fe,oe,{type:ce})},[L,M,i,n]),le=s.useCallback(function(ve,ce,fe,oe){if(u){var se=fe.map(function(he){return M(he)});u(M(ve),ce,se,oe)}ie(fe,"single")},[u,M,ie]),ge=s.useMemo(function(){if(!y||x)return null;var ve=y===!0?[Ps,Es,ks]:y;return ve.map(function(ce){return ce===Ps?{key:"all",text:$.selectionAll,onSelect:function(){ie(P.map(function(oe,se){return k(oe,se)}).filter(function(oe){var se=V.get(oe);return!(se!=null&&se.disabled)||q.has(oe)}),"all")}}:ce===Es?{key:"invert",text:$.selectInvert,onSelect:function(){var oe=new Set(q);T.forEach(function(he,be){var Re=k(he,be),Fe=V.get(Re);Fe!=null&&Fe.disabled||(oe.has(Re)?oe.delete(Re):oe.add(Re))});var se=Array.from(oe);d&&d(se),ie(se,"invert")}}:ce===ks?{key:"none",text:$.selectNone,onSelect:function(){f==null||f(),ie(Array.from(q).filter(function(oe){var se=V.get(oe);return se==null?void 0:se.disabled}),"none")}}:ce}).map(function(ce){return ne(ne({},ce),{onSelect:function(){for(var oe,se,he=arguments.length,be=new Array(he),Re=0;Re2&&arguments[2]!==void 0?arguments[2]:!1,at=ne(ne({},fe),Ue);_e&&(fe.resetPagination(),at.pagination.current&&(at.pagination.current=1),c&&c.onChange&&c.onChange(1,at.pagination.pageSize)),k&&k.scrollToFirstRowOnChange!==!1&&le.body.current&&M1(0,{getContainer:function(){return le.body.current}}),b==null||b(at.pagination,at.filters,at.sorter,{currentDataSource:nd(Fs(U,at.sorterStates,Q),at.filterStates),action:Ie})},se=function(Ue,Ie){oe({sorter:Ue,sorterStates:Ie},"sort",!1)},he=d3({prefixCls:te,mergedColumns:L,onSorterChange:se,sortDirections:D||["ascend","descend"],tableLocale:Z,showSorterTooltip:F}),be=ee(he,4),Re=be[0],Fe=be[1],Ee=be[2],ke=be[3],we=s.useMemo(function(){return Fs(U,Fe,Q)},[U,Fe]);fe.sorter=ke(),fe.sorterStates=Fe;var Ge=function(Ue,Ie){oe({filters:Ue,filterStates:Ie},"filter",!0)},Qe=a3({prefixCls:te,locale:Z,dropdownPrefixCls:ue,mergedColumns:L,onFilterChange:Ge,getPopupContainer:x}),ct=ee(Qe,3),dt=ct[0],mt=ct[1],We=ct[2],Oe=nd(we,mt);fe.filters=We,fe.filterStates=mt;var ot=s.useMemo(function(){var Ae={};return Object.keys(We).forEach(function(Ue){We[Ue]!==null&&(Ae[Ue]=We[Ue])}),ne(ne({},Ee),{filters:Ae})},[Ee,We]),Je=f3(ot),Se=ee(Je,1),He=Se[0],je=function(Ue,Ie){oe({pagination:ne(ne({},fe.pagination),{current:Ue,pageSize:Ie})},"paginate")},ze=s3(Oe.length,c,je),ye=ee(ze,2),de=ye[0],Ce=ye[1];fe.pagination=c===!1?{}:i3(c,de),fe.resetPagination=Ce;var Me=s.useMemo(function(){if(c===!1||!de.pageSize)return Oe;var Ae=de.current,Ue=Ae===void 0?1:Ae,Ie=de.total,_e=de.pageSize,at=_e===void 0?Pm:_e;return Oe.lengthat?Oe.slice((Ue-1)*at,Ue*at):Oe:Oe.slice((Ue-1)*at,Ue*at)},[!!c,Oe,de&&de.current,de&&de.pageSize,de&&de.total]),Be=u3(d,{prefixCls:te,data:Oe,pageData:Me,getRowKey:ge,getRecordByKey:ce,expandType:ie,childrenColumnName:Q,locale:Z,getPopupContainer:x}),nt=ee(Be,2),Ne=nt[0],xe=nt[1],qe=function(Ue,Ie,_e){var at;return typeof m=="function"?at=pe(m(Ue,Ie,_e)):at=pe(m),pe(B({},"".concat(te,"-row-selected"),xe.has(ge(Ue,Ie))),at)};Y.__PARENT_RENDER_ICON__=Y.expandIcon,Y.expandIcon=Y.expandIcon||w||a2(Z),ie==="nest"&&Y.expandIconColumnIndex===void 0?Y.expandIconColumnIndex=d?1:0:Y.expandIconColumnIndex>0&&d&&(Y.expandIconColumnIndex-=1),typeof Y.indentSize!="number"&&(Y.indentSize=typeof M=="number"?M:15);var it=s.useCallback(function(Ae){return He(Ne(dt(Re(Ae))))},[Re,dt,Ne]),ft,At;if(c!==!1&&(de!=null&&de.total)){var Kt;de.size?Kt=de.size:Kt=W==="small"||W==="middle"?"small":void 0;var Rt=function(Ue){return s.createElement(Yb,ne({},de,{className:pe("".concat(te,"-pagination ").concat(te,"-pagination-").concat(Ue),de.className),size:Kt}))},zt=X==="rtl"?"left":"right",et=de.position;if(et!==null&&Array.isArray(et)){var tt=et.find(function(Ae){return Ae.includes("top")}),lt=et.find(function(Ae){return Ae.includes("bottom")}),ut=et.every(function(Ae){return"".concat(Ae)==="none"});!tt&&!lt&&!ut&&(At=Rt(zt)),tt&&(ft=Rt(tt.toLowerCase().replace("top",""))),lt&&(At=Rt(lt.toLowerCase().replace("bottom","")))}else At=Rt(zt)}var wt;typeof S=="boolean"?wt={spinning:S}:Ve(S)==="object"&&(wt=ne({spinning:!0},S));var St=pe("".concat(te,"-wrapper"),B({},"".concat(te,"-wrapper-rtl"),X==="rtl"),n);return s.createElement("div",{ref:e,className:St,style:a},s.createElement(Fr,ne({spinning:!1},wt),ft,s.createElement(ra,ne({},j,{columns:L,direction:X,expandable:Y,prefixCls:te,className:pe(B(B(B(B({},"".concat(te,"-middle"),W==="middle"),"".concat(te,"-small"),W==="small"),"".concat(te,"-bordered"),l),"".concat(te,"-empty"),U.length===0)),data:Me,rowKey:ge,rowClassName:qe,emptyText:O&&O.emptyText||(V||lu)("Table"),internalHooks:Ei,internalRefs:le,transformColumns:it})),At))}var h3=s.forwardRef(m3),sr=h3;sr.SELECTION_COLUMN=Cr;sr.EXPAND_COLUMN=ra.EXPAND_COLUMN;sr.SELECTION_ALL=Ps;sr.SELECTION_INVERT=Es;sr.SELECTION_NONE=ks;sr.Column=n2;sr.ColumnGroup=r2;sr.Summary=rm;const xa=sr;var p3=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a1&&arguments[1]!==void 0?arguments[1]:"0",v=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return d.map(function(m,h){var y="".concat(f,"-").concat(h),g=m[o.value],b=r.includes(g),x=c(m[o.children]||[],y,b),S=s.createElement(ku,m,x.map(function(E){return E.node}));if(e===g&&(l=S),b){var w={pos:y,node:S,children:x};return v||i.push(w),w}return null}).filter(function(m){return m})}i||(i=[],c(n),i.sort(function(d,f){var v=d.node.props.value,m=f.node.props.value,h=r.indexOf(v),y=r.indexOf(m);return h-y}))}Object.defineProperty(t,"triggerNode",{get:function(){return rn(!1,"`triggerNode` is deprecated. Please consider decoupling data with node."),u(),l}}),Object.defineProperty(t,"allCheckedNodes",{get:function(){return rn(!1,"`allCheckedNodes` is deprecated. Please consider decoupling data with node."),u(),a?i:i.map(function(d){var f=d.node;return f})}})}function R3(t,e){var r=e.id,n=e.pId,a=e.rootPId,o={},l=[],i=t.map(function(u){var c=p({},u),d=c[r];return o[d]=c,c.key=c.key||d,c});return i.forEach(function(u){var c=u[n],d=o[c];d&&(d.children=d.children||[],d.children.push(u)),(c===a||!d&&a===null)&&l.push(u)}),l}function F3(t,e,r){return s.useMemo(function(){return t?r?R3(t,p({id:"id",pId:"pId",rootPId:null},r!==!0?r:{})):t:Om(e)},[e,r,t])}const M3=function(t){var e=s.useRef({valueLabels:new Map});return s.useMemo(function(){var r=e.current.valueLabels,n=new Map,a=t.map(function(o){var l,i=o.value,u=(l=o.label)!==null&&l!==void 0?l:r.get(i);return n.set(i,u),p(p({},o),{},{label:u})});return e.current.valueLabels=n,[a]},[t])};function ud(t){var e=s.useRef();e.current=t;var r=s.useCallback(function(){return e.current.apply(e,arguments)},[]);return r}const N3=function(t,e){return s.useMemo(function(){var r=jo(t,{fieldNames:e,initWrapper:function(a){return p(p({},a),{},{valueEntities:new Map})},processEntity:function(a,o){var l=a.node[e.value];o.valueEntities.set(l,a)}});return r},[t,e])},T3=function(t,e,r,n){return s.useMemo(function(){var a=t.map(function(u){var c=u.value;return c}),o=e.map(function(u){var c=u.value;return c}),l=a.filter(function(u){return!n[u]});if(r){var i=Pn(a,!0,n);a=i.checkedKeys,o=i.halfCheckedKeys}return[Array.from(new Set([].concat(De(l),De(a)))),o]},[t,e,r,n])},$3=function(t,e,r){var n=r.treeNodeFilterProp,a=r.filterTreeNode,o=r.fieldNames,l=o.children;return s.useMemo(function(){if(!e||a===!1)return t;var i;if(typeof a=="function")i=a;else{var u=e.toUpperCase();i=function(f,v){var m=v[n];return String(m).toUpperCase().includes(u)}}function c(d){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return d.map(function(v){var m=v[l],h=f||i(e,Ns(v)),y=c(m||[],h);return h||y.length?p(p({},v),{},B({isLeaf:void 0},l,y)):null}).filter(function(v){return v})}return c(t)},[t,e,l,n,a])};var D3=["id","prefixCls","value","defaultValue","onChange","onSelect","onDeselect","searchValue","inputValue","onSearch","autoClearSearchValue","filterTreeNode","treeNodeFilterProp","showCheckedStrategy","treeNodeLabelProp","multiple","treeCheckable","treeCheckStrictly","labelInValue","fieldNames","treeDataSimpleMode","treeData","children","loadData","treeLoadedKeys","onTreeLoad","treeDefaultExpandAll","treeExpandedKeys","treeDefaultExpandedKeys","onTreeExpand","treeExpandAction","virtual","listHeight","listItemHeight","onDropdownVisibleChange","dropdownMatchSelectWidth","treeLine","treeIcon","showTreeIcon","switcherIcon","treeMotion"];function O3(t){return!t||Ve(t)!=="object"}var I3=s.forwardRef(function(t,e){var r=t.id,n=t.prefixCls,a=n===void 0?"rc-tree-select":n,o=t.value,l=t.defaultValue,i=t.onChange,u=t.onSelect,c=t.onDeselect,d=t.searchValue,f=t.inputValue,v=t.onSearch,m=t.autoClearSearchValue,h=m===void 0?!0:m,y=t.filterTreeNode,g=t.treeNodeFilterProp,b=g===void 0?"value":g,x=t.showCheckedStrategy,S=x===void 0?yl:x,w=t.treeNodeLabelProp,E=t.multiple,P=t.treeCheckable,T=t.treeCheckStrictly,M=t.labelInValue,k=t.fieldNames,D=t.treeDataSimpleMode,O=t.treeData,$=t.children,F=t.loadData,N=t.treeLoadedKeys,R=t.onTreeLoad,I=t.treeDefaultExpandAll,L=t.treeExpandedKeys,j=t.treeDefaultExpandedKeys,_=t.onTreeExpand,A=t.treeExpandAction,K=t.virtual,z=t.listHeight,V=z===void 0?200:z,X=t.listItemHeight,W=X===void 0?20:X,Z=t.onDropdownVisibleChange,U=t.dropdownMatchSelectWidth,ae=U===void 0?!0:U,q=t.treeLine,te=t.treeIcon,ue=t.showTreeIcon,Y=t.switcherIcon,J=t.treeMotion,Q=Le(t,D3),ie=Gf(r),le=P&&!T,ge=P||T,Pe=T||M,ve=ge||E,ce=xt(l,{value:o}),fe=ee(ce,2),oe=fe[0],se=fe[1],he=s.useMemo(function(){return x3(k)},[JSON.stringify(k)]),be=xt("",{value:d!==void 0?d:f,postState:function(tt){return tt||""}}),Re=ee(be,2),Fe=Re[0],Ee=Re[1],ke=function(tt){Ee(tt),v==null||v(tt)},we=F3(O,$,D),Ge=N3(we,he),Qe=Ge.keyEntities,ct=Ge.valueEntities,dt=s.useCallback(function(et){var tt=[],lt=[];return et.forEach(function(ut){ct.has(ut)?lt.push(ut):tt.push(ut)}),{missingRawValues:tt,existRawValues:lt}},[ct]),mt=$3(we,Fe,{fieldNames:he,treeNodeFilterProp:b,filterTreeNode:y}),We=s.useCallback(function(et){if(et){if(w)return et[w];for(var tt=he._title,lt=0;lt=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(c){throw c},f:a}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +import{A as Ft,f as p,w as ho,a as ee,v as dp,C as Ut,j as Ve,c as pe,b as B,e as po,d as Xs,x as en,_ as De,y as Zs,z as rn,q as yn,B as bn,p as Cn,l as xn,u as Le,o as qi,S as Fo,D as Xi,L as Na,E as Qs,F as wf,G as Js,H as fp,h as eu,I as es,J as vp,K as mp,M as hp,N as pp,t as zn,O as gp,P as yp,Q as bp,R as Yu,T as tu,U as Pf,V as Ef,W as ea,X as kf,Y as nu,Z as Rf,$ as ir,a0 as Zi,a1 as Ff,a2 as ta,a3 as Cp,a4 as Mf,a5 as Nf,a6 as Tf,a7 as Qi,a8 as xp,i as Gu,a9 as $f,aa as Sp,ab as rt,ac as Df,ad as pt,ae as $e,m as Dl,af as hn,ag as pn,ah as ru,ai as Mr,aj as Of,ak as wp,al as If,am as _f,an as Pp,ao as Lf,ap as jf,aq as Ep,ar as kp}from"./_setToString-dbbee35a.js";import{r as s,_ as ne,k as kt,R as G,g as Ta,j as C,c as fi,e as Af}from"./umi-37873494.js";import{b as Kf,R as Mo,P as Rp,K as Ye,i as Vf,u as xt,c as Fp,d as qu,F as Ji,g as el,e as Rr,f as zf,h as tl,a as nr,E as Bf,T as un,j as nl,p as au,k as Mp,C as pa,l as Np,S as Gt}from"./TextArea-27ba039d.js";import{i as Tp,a as $p,T as ga,C as Hf}from"./index-da399111.js";import{T as Dp,s as ou,a as ao,F as _t,I as Zr,b as Op,D as Wf,S as Uf,R as Ip}from"./useDebounce-2fd3a0bc.js";import{d as Xu,r as _p,e as iu,f as No,P as Lp,D as jp,g as Zu,h as Qu,I as En,S as Yf,E as Ju,R as Bn,C as qt,j as Ap}from"./util-2d38567b.js";import{t as lr,u as rl,B as On}from"./button-1ef38c18.js";import{u as al,b as Gf,B as qf,d as lu,g as Xf,a as Nr,L as Kp,c as go,S as Vp,D as zp}from"./index-2899652d.js";import{S as Fr,a as Bp,d as Hp}from"./index-abb14cca.js";import{_ as To,D as $o,a as Wp,O as Up,P as Yp,M as Gp}from"./index-54683183.js";import{D as Zf}from"./DeleteOutlined-a45fceaa.js";import{C as qp,P as Qf,a as Xp}from"./progress-096a2c96.js";import{A as Zp}from"./index-cc0634fc.js";var Qp={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 184H712v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H384v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H144c-17.7 0-32 14.3-32 32v664c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V216c0-17.7-14.3-32-32-32zm-40 656H184V460h656v380zM184 392V256h128v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h256v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h128v136H184z"}}]},name:"calendar",theme:"outlined"};const Jp=Qp;var eg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Jp}))},tg=s.forwardRef(eg);const Jf=tg;var ng={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"}}]},name:"caret-down",theme:"filled"};const rg=ng;var ag=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:rg}))},og=s.forwardRef(ag);const ig=og;var lg={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"}}]},name:"caret-down",theme:"outlined"};const sg=lg;var ug=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:sg}))},cg=s.forwardRef(ug);const dg=cg;var fg={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M858.9 689L530.5 308.2c-9.4-10.9-27.5-10.9-37 0L165.1 689c-12.2 14.2-1.2 35 18.5 35h656.8c19.7 0 30.7-20.8 18.5-35z"}}]},name:"caret-up",theme:"outlined"};const vg=fg;var mg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:vg}))},hg=s.forwardRef(mg);const pg=hg;var gg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"}}]},name:"clock-circle",theme:"outlined"};const yg=gg;var bg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:yg}))},Cg=s.forwardRef(bg);const ev=Cg;var xg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M840 836H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm0-724H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zM610.8 378c6 0 9.4-7 5.7-11.7L515.7 238.7a7.14 7.14 0 00-11.3 0L403.6 366.3a7.23 7.23 0 005.7 11.7H476v268h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.5c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H548V378h62.8z"}}]},name:"column-height",theme:"outlined"};const Sg=xg;var wg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Sg}))},Pg=s.forwardRef(wg);const Eg=Pg;var kg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M272.9 512l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L186.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H532c6.7 0 10.4-7.7 6.3-12.9L272.9 512zm304 0l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L490.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H836c6.7 0 10.4-7.7 6.3-12.9L576.9 512z"}}]},name:"double-left",theme:"outlined"};const Rg=kg;var Fg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Rg}))},Mg=s.forwardRef(Fg);const Ng=Mg;var Tg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M533.2 492.3L277.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H188c-6.7 0-10.4 7.7-6.3 12.9L447.1 512 181.7 851.1A7.98 7.98 0 00188 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5zm304 0L581.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H492c-6.7 0-10.4 7.7-6.3 12.9L751.1 512 485.7 851.1A7.98 7.98 0 00492 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5z"}}]},name:"double-right",theme:"outlined"};const $g=Tg;var Dg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:$g}))},Og=s.forwardRef(Dg);const Ig=Og;var _g={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z"}}]},name:"file",theme:"outlined"};const Lg=_g;var jg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Lg}))},Ag=s.forwardRef(jg);const tv=Ag;var Kg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M349 838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V642H349v196zm531.1-684H143.9c-24.5 0-39.8 26.7-27.5 48l221.3 376h348.8l221.3-376c12.1-21.3-3.2-48-27.7-48z"}}]},name:"filter",theme:"filled"};const Vg=Kg;var zg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Vg}))},Bg=s.forwardRef(zg);const Hg=Bg;var Wg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880.1 154H143.9c-24.5 0-39.8 26.7-27.5 48L349 597.4V838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V597.4L907.7 202c12.2-21.3-3.1-48-27.6-48zM603.4 798H420.6V642h182.9v156zm9.6-236.6l-9.5 16.6h-183l-9.5-16.6L212.7 226h598.6L613 561.4z"}}]},name:"filter",theme:"outlined"};const Ug=Wg;var Yg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Ug}))},Gg=s.forwardRef(Yg);const qg=Gg;var Xg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 444H820V330.4c0-17.7-14.3-32-32-32H473L355.7 186.2a8.15 8.15 0 00-5.5-2.2H96c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h698c13 0 24.8-7.9 29.7-20l134-332c1.5-3.8 2.3-7.9 2.3-12 0-17.7-14.3-32-32-32zM136 256h188.5l119.6 114.4H748V444H238c-13 0-24.8 7.9-29.7 20L136 643.2V256zm635.3 512H159l103.3-256h612.4L771.3 768z"}}]},name:"folder-open",theme:"outlined"};const Zg=Xg;var Qg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Zg}))},Jg=s.forwardRef(Qg);const e0=Jg;var t0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 298.4H521L403.7 186.2a8.15 8.15 0 00-5.5-2.2H144c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V330.4c0-17.7-14.3-32-32-32zM840 768H184V256h188.5l119.6 114.4H840V768z"}}]},name:"folder",theme:"outlined"};const n0=t0;var r0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:n0}))},a0=s.forwardRef(r0);const o0=a0;var i0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M391 240.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3a8.03 8.03 0 00-11.3 0l-42.4 42.3a8.03 8.03 0 000 11.3L280 333.6l-43.9 43.9a8.01 8.01 0 004.7 13.6L401 410c5.1.6 9.5-3.7 8.9-8.9L391 240.9zm10.1 373.2L240.8 633c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824a8.03 8.03 0 000 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7A8.01 8.01 0 00391 783l18.9-160.1c.6-5.1-3.7-9.4-8.8-8.8zm221.8-204.2L783.2 391c6.6-.8 9.4-8.9 4.7-13.6L744 333.6 877.7 200c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.3a8.03 8.03 0 00-11.3 0L690.3 279.9l-43.7-43.7a8.01 8.01 0 00-13.6 4.7L614.1 401c-.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9a8.01 8.01 0 00-4.7-13.6L623 614c-5.1-.6-9.5 3.7-8.9 8.9L633 783.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z"}}]},name:"fullscreen-exit",theme:"outlined"};const l0=i0;var s0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:l0}))},u0=s.forwardRef(s0);const c0=u0;var d0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M290 236.4l43.9-43.9a8.01 8.01 0 00-4.7-13.6L169 160c-5.1-.6-9.5 3.7-8.9 8.9L179 329.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zm352.7 187.3c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7a8.01 8.01 0 0013.6-4.7L863.9 169c.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370a8.03 8.03 0 000 11.3l42.4 42.4zM845 694.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3a8.03 8.03 0 00-11.3 0l-42.4 42.3a8.03 8.03 0 000 11.3L734 787.6l-43.9 43.9a8.01 8.01 0 004.7 13.6L855 864c5.1.6 9.5-3.7 8.9-8.9L845 694.9zm-463.7-94.6a8.03 8.03 0 00-11.3 0L236.3 733.9l-43.7-43.7a8.01 8.01 0 00-13.6 4.7L160.1 855c-.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z"}}]},name:"fullscreen",theme:"outlined"};const f0=d0;var v0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:f0}))},m0=s.forwardRef(v0);const h0=m0;var p0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M300 276.5a56 56 0 1056-97 56 56 0 00-56 97zm0 284a56 56 0 1056-97 56 56 0 00-56 97zM640 228a56 56 0 10112 0 56 56 0 00-112 0zm0 284a56 56 0 10112 0 56 56 0 00-112 0zM300 844.5a56 56 0 1056-97 56 56 0 00-56 97zM640 796a56 56 0 10112 0 56 56 0 00-112 0z"}}]},name:"holder",theme:"outlined"};const g0=p0;var y0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:g0}))},b0=s.forwardRef(y0);const C0=b0;var x0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"minus-square",theme:"outlined"};const S0=x0;var w0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:S0}))},P0=s.forwardRef(w0);const E0=P0;var k0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"plus-square",theme:"outlined"};const R0=k0;var F0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:R0}))},M0=s.forwardRef(F0);const N0=M0;var T0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M672 418H144c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H188V494h440v326z"}},{tag:"path",attrs:{d:"M819.3 328.5c-78.8-100.7-196-153.6-314.6-154.2l-.2-64c0-6.5-7.6-10.1-12.6-6.1l-128 101c-4 3.1-3.9 9.1 0 12.3L492 318.6c5.1 4 12.7.4 12.6-6.1v-63.9c12.9.1 25.9.9 38.8 2.5 42.1 5.2 82.1 18.2 119 38.7 38.1 21.2 71.2 49.7 98.4 84.3 27.1 34.7 46.7 73.7 58.1 115.8a325.95 325.95 0 016.5 140.9h74.9c14.8-103.6-11.3-213-81-302.3z"}}]},name:"rotate-left",theme:"outlined"};const $0=T0;var D0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:$0}))},O0=s.forwardRef(D0);const I0=O0;var _0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M480.5 251.2c13-1.6 25.9-2.4 38.8-2.5v63.9c0 6.5 7.5 10.1 12.6 6.1L660 217.6c4-3.2 4-9.2 0-12.3l-128-101c-5.1-4-12.6-.4-12.6 6.1l-.2 64c-118.6.5-235.8 53.4-314.6 154.2A399.75 399.75 0 00123.5 631h74.9c-.9-5.3-1.7-10.7-2.4-16.1-5.1-42.1-2.1-84.1 8.9-124.8 11.4-42.2 31-81.1 58.1-115.8 27.2-34.7 60.3-63.2 98.4-84.3 37-20.6 76.9-33.6 119.1-38.8z"}},{tag:"path",attrs:{d:"M880 418H352c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H396V494h440v326z"}}]},name:"rotate-right",theme:"outlined"};const L0=_0;var j0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:L0}))},A0=s.forwardRef(j0);const K0=A0;var V0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M908.1 353.1l-253.9-36.9L540.7 86.1c-3.1-6.3-8.2-11.4-14.5-14.5-15.8-7.8-35-1.3-42.9 14.5L369.8 316.2l-253.9 36.9c-7 1-13.4 4.3-18.3 9.3a32.05 32.05 0 00.6 45.3l183.7 179.1-43.4 252.9a31.95 31.95 0 0046.4 33.7L512 754l227.1 119.4c6.2 3.3 13.4 4.4 20.3 3.2 17.4-3 29.1-19.5 26.1-36.9l-43.4-252.9 183.7-179.1c5-4.9 8.3-11.3 9.3-18.3 2.7-17.5-9.5-33.7-27-36.3z"}}]},name:"star",theme:"filled"};const z0=V0;var B0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:z0}))},H0=s.forwardRef(B0);const W0=H0;var U0={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M873.1 596.2l-164-208A32 32 0 00684 376h-64.8c-6.7 0-10.4 7.7-6.3 13l144.3 183H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h695.9c26.8 0 41.7-30.8 25.2-51.8z"}}]},name:"swap-right",theme:"outlined"};const Y0=U0;var G0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Y0}))},q0=s.forwardRef(G0);const X0=q0;var Z0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 780H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zM505.7 669a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V176c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8z"}}]},name:"vertical-align-bottom",theme:"outlined"};const Q0=Z0;var J0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Q0}))},e1=s.forwardRef(J0);const t1=e1;var n1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 474H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zm-353.6-74.7c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H550V104c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v156h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.6zm11.4 225.4a7.14 7.14 0 00-11.3 0L405.6 752.3a7.23 7.23 0 005.7 11.7H474v156c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V764h62.8c6 0 9.4-7 5.7-11.7L517.7 624.7z"}}]},name:"vertical-align-middle",theme:"outlined"};const r1=n1;var a1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:r1}))},o1=s.forwardRef(a1);const i1=o1;var l1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 168H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zM518.3 355a8 8 0 00-12.6 0l-112 141.7a7.98 7.98 0 006.3 12.9h73.9V848c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V509.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 355z"}}]},name:"vertical-align-top",theme:"outlined"};const s1=l1;var u1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:s1}))},c1=s.forwardRef(u1);const d1=c1;var f1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zM480 416c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v184c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V416zm32 352a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"warning",theme:"filled"};const v1=f1;var m1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:v1}))},h1=s.forwardRef(m1);const p1=h1;var g1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M637 443H519V309c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v134H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h118v134c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V519h118c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z"}}]},name:"zoom-in",theme:"outlined"};const y1=g1;var b1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:y1}))},C1=s.forwardRef(b1);const x1=C1;var S1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M637 443H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h312c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z"}}]},name:"zoom-out",theme:"outlined"};const w1=S1;var P1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:w1}))},E1=s.forwardRef(P1);const k1=E1;function ts(t){return t!=null&&t===t.window}function R1(t,e){var r,n;if(typeof window>"u")return 0;var a=e?"scrollTop":"scrollLeft",o=0;return ts(t)?o=t[e?"pageYOffset":"pageXOffset"]:t instanceof Document?o=t.documentElement[a]:(t instanceof HTMLElement||t)&&(o=t[a]),t&&!ts(t)&&typeof o!="number"&&(o=(n=((r=t.ownerDocument)!==null&&r!==void 0?r:t).documentElement)===null||n===void 0?void 0:n[a]),o}function F1(t,e,r,n){var a=r-e;return t/=n/2,t<1?a/2*t*t*t+e:a/2*((t-=2)*t*t+2)+e}function M1(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=e.getContainer,n=r===void 0?function(){return window}:r,a=e.callback,o=e.duration,l=o===void 0?450:o,i=n(),u=R1(i,!0),c=Date.now(),d=function f(){var v=Date.now(),m=v-c,h=F1(m>l?l:m,u,t,l);ts(i)?i.scrollTo(window.pageXOffset,h):i instanceof Document||i.constructor.name==="HTMLDocument"?i.documentElement.scrollTop=h:i.scrollTop=h,m0&&arguments[0]!==void 0?arguments[0]:!0,e=s.useRef({}),r=Kf();return s.useEffect(function(){var n=Xu.subscribe(function(a){e.current=a,t&&r()});return function(){return Xu.unsubscribe(n)}},[]),e.current}var ns=s.createContext("default"),ec=function(e){var r=e.children,n=e.size;return s.createElement(ns.Consumer,null,function(a){return s.createElement(ns.Provider,{value:n||a},r)})},N1=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);af?"".concat(f,"+"):c,$=O==="0"||O===0,F=c===null||$&&!E,N=(o!=null||i!=null)&&F,R=m&&!$,I=R?"":O,L=s.useMemo(function(){var ue=I==null||I==="";return(ue||$&&!E)&&!R},[I,$,E,R]),j=s.useRef(c);L||(j.current=c);var _=j.current,A=s.useRef(I);L||(A.current=I);var K=A.current,z=s.useRef(R);L||(z.current=R);var V=s.useMemo(function(){if(!b)return ne({},x);var ue={marginTop:b[1]};return k==="rtl"?ue.left=parseInt(b[0],10):ue.right=-parseInt(b[0],10),ne(ne({},ue),x)},[k,b,x]),X=g??(typeof _=="string"||typeof _=="number"?_:void 0),W=L||!l?null:s.createElement("span",{className:"".concat(D,"-status-text")},l),Z=!_||Ve(_)!=="object"?void 0:po(_,function(ue){return{style:ne(ne({},V),ue.style)}}),U=pe(B(B(B({},"".concat(D,"-status-dot"),N),"".concat(D,"-status-").concat(o),!!o),"".concat(D,"-status-").concat(i),eo(i))),ae={};i&&!eo(i)&&(ae.background=i);var q=pe(D,B(B(B({},"".concat(D,"-status"),N),"".concat(D,"-not-a-wrapper"),!a),"".concat(D,"-rtl"),k==="rtl"),S);if(!a&&N){var te=V.color;return s.createElement("span",ne({},P,{className:q,style:V}),s.createElement("span",{className:U,style:ae}),l&&s.createElement("span",{style:{color:te},className:"".concat(D,"-status-text")},l))}return s.createElement("span",ne({},P,{className:q}),a,s.createElement(Xs,{visible:!L,motionName:"".concat(D,"-zoom"),motionAppear:!1,motionDeadline:1e3},function(ue){var Y=ue.className,J=M("scroll-number",n),Q=z.current,ie=pe(B(B(B(B(B(B({},"".concat(D,"-dot"),Q),"".concat(D,"-count"),!Q),"".concat(D,"-count-sm"),y==="small"),"".concat(D,"-multiple-words"),!Q&&K&&K.toString().length>1),"".concat(D,"-status-").concat(o),!!o),"".concat(D,"-status-").concat(i),eo(i))),le=ne({},V);return i&&!eo(i)&&(le=le||{},le.background=i),s.createElement(z1,{prefixCls:J,show:!L,motionClassName:Y,className:ie,count:K,title:X,style:le,key:"scrollNumber"},Z)}),W)};av.Ribbon=L1;const Nn=av;var H1={getNow:function(){return kt()},getFixedDate:function(e){return kt(e,"YYYY-MM-DD")},getEndDate:function(e){var r=e.clone();return r.endOf("month")},getWeekDay:function(e){var r=e.clone().locale("en_US");return r.weekday()+r.localeData().firstDayOfWeek()},getYear:function(e){return e.year()},getMonth:function(e){return e.month()},getDate:function(e){return e.date()},getHour:function(e){return e.hour()},getMinute:function(e){return e.minute()},getSecond:function(e){return e.second()},addYear:function(e,r){var n=e.clone();return n.add(r,"year")},addMonth:function(e,r){var n=e.clone();return n.add(r,"month")},addDate:function(e,r){var n=e.clone();return n.add(r,"day")},setYear:function(e,r){var n=e.clone();return n.year(r)},setMonth:function(e,r){var n=e.clone();return n.month(r)},setDate:function(e,r){var n=e.clone();return n.date(r)},setHour:function(e,r){var n=e.clone();return n.hour(r)},setMinute:function(e,r){var n=e.clone();return n.minute(r)},setSecond:function(e,r){var n=e.clone();return n.second(r)},isAfter:function(e,r){return e.isAfter(r)},isValidate:function(e){return e.isValid()},locale:{getWeekFirstDay:function(e){var r=kt().locale(e);return r.localeData().firstDayOfWeek()},getWeekFirstDate:function(e,r){var n=r.clone(),a=n.locale(e);return a.weekday(0)},getWeek:function(e,r){var n=r.clone(),a=n.locale(e);return a.week()},getShortWeekDays:function(e){var r=kt().locale(e);return r.localeData().weekdaysMin()},getShortMonths:function(e){var r=kt().locale(e);return r.localeData().monthsShort()},format:function(e,r,n){var a=r.clone(),o=a.locale(e);return o.format(n)},parse:function(e,r,n){for(var a=[],o=0;o1&&(l=e.addDate(l,-7)),l}function io(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1;switch(e){case"year":return r.addYear(t,n*10);case"quarter":case"month":return r.addYear(t,n);default:return r.addMonth(t,n)}}function Jt(t,e){var r=e.generateConfig,n=e.locale,a=e.format;return typeof a=="function"?a(t):r.locale.format(n.locale,t,a)}function fv(t,e){var r=e.generateConfig,n=e.locale,a=e.formatList;return!t||typeof a[0]=="function"?null:r.locale.parse(n.locale,t,a)}function is(t){var e=t.cellDate,r=t.mode,n=t.disabledDate,a=t.generateConfig;if(!n)return!1;var o=function(h,y,g){for(var b=y;b<=g;){var x=void 0;switch(h){case"date":{if(x=a.setDate(e,b),!n(x))return!1;break}case"month":{if(x=a.setMonth(e,b),!is({cellDate:x,mode:"month",generateConfig:a,disabledDate:n}))return!1;break}case"year":{if(x=a.setYear(e,b),!is({cellDate:x,mode:"year",generateConfig:a,disabledDate:n}))return!1;break}}b+=1}return!0};switch(r){case"date":case"week":return n(e);case"month":{var l=1,i=a.getDate(a.getEndDate(e));return o("date",l,i)}case"quarter":{var u=Math.floor(a.getMonth(e)/3)*3,c=u+2;return o("month",u,c)}case"year":return o("month",0,11);case"decade":{var d=a.getYear(e),f=Math.floor(d/$n)*$n,v=f+$n-1;return o("year",f,v)}}}function uy(t){var e=s.useContext(gn),r=e.hideHeader;if(r)return null;var n=t.prefixCls,a=t.generateConfig,o=t.locale,l=t.value,i=t.format,u="".concat(n,"-header");return s.createElement($a,{prefixCls:u},l?Jt(l,{locale:o,format:i,generateConfig:a}):" ")}function cy(t){var e=t.value,r=t.generateConfig,n=t.disabledMinutes,a=t.disabledSeconds,o=t.minutes,l=t.seconds,i=t.use12Hours,u=function(d,f,v,m){var h=e||r.getNow(),y=Math.max(0,f),g=Math.max(0,v),b=Math.max(0,m),x=n&&n(y);if(x!=null&&x.includes(g)){var S=o.find(function(P){return!x.includes(P.value)});if(S)g=S.value;else return null}var w=a&&a(y,g);if(w!=null&&w.includes(b)){var E=l.find(function(P){return!w.includes(P.value)});if(E)b=E.value;else return null}return h=ov(r,h,!i||!d?y:y+12,g,b),h};return u}function vv(t,e){for(var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"0",n=String(t);n.length=1?r|0:1,l=t;l<=e;l+=o)a.push({label:vv(l,2),value:l,disabled:(n||[]).includes(l)});return a}function vy(t){var e=t.generateConfig,r=t.prefixCls,n=t.operationRef,a=t.activeColumnIndex,o=t.value,l=t.showHour,i=t.showMinute,u=t.showSecond,c=t.use12Hours,d=t.hourStep,f=d===void 0?1:d,v=t.minuteStep,m=v===void 0?1:v,h=t.secondStep,y=h===void 0?1:h,g=t.disabledHours,b=t.disabledMinutes,x=t.disabledSeconds,S=t.disabledTime,w=t.hideDisabledOptions,E=t.onSelect,P=[],T="".concat(r,"-content"),M="".concat(r,"-time-panel"),k,D=o?e.getHour(o):-1,O=D,$=o?e.getMinute(o):-1,F=o?e.getSecond(o):-1,N=e.getNow(),R=s.useMemo(function(){if(S){var Y=S(N);return[Y.disabledHours,Y.disabledMinutes,Y.disabledSeconds]}return[g,b,x]},[g,b,x,S,N]),I=ee(R,3),L=I[0],j=I[1],_=I[2],A=Ol(0,23,f,L&&L()),K=Zs(function(){return A},A,fy);c&&(k=O>=12,O%=12);var z=s.useMemo(function(){if(!c)return[!1,!1];var Y=[!0,!0];return K.forEach(function(J){var Q=J.disabled,ie=J.value;Q||(ie>=12?Y[1]=!1:Y[0]=!1)}),Y},[c,K]),V=ee(z,2),X=V[0],W=V[1],Z=s.useMemo(function(){return c?K.filter(k?function(Y){return Y.value>=12}:function(Y){return Y.value<12}).map(function(Y){var J=Y.value%12,Q=J===0?"12":vv(J,2);return p(p({},Y),{},{label:Q,value:J})}):K},[c,k,K]),U=Ol(0,59,m,j&&j(D)),ae=Ol(0,59,y,_&&_(D,$)),q=cy({value:o,generateConfig:e,disabledMinutes:j,disabledSeconds:_,minutes:U,seconds:ae,use12Hours:c});n.current={onUpDown:function(J){var Q=P[a];if(Q)for(var ie=Q.units.findIndex(function(ve){return ve.value===Q.value}),le=Q.units.length,ge=1;ge2&&arguments[2]!==void 0?arguments[2]:!1;(we===y||it)&&(fe(xe),T&&T(xe),ae&&ae(xe,qe),M&&!ya(i,xe,ce)&&!(v!=null&&v(xe))&&M(xe))},ot=function(xe){if($y.includes(we)){var qe,it,ft=we==="date";switch(xe===Ye.PAGE_UP||xe===Ye.PAGE_DOWN?it=ft?i.addMonth:i.addYear:it=ft?i.addDate:i.addMonth,xe){case Ye.LEFT:case Ye.PAGE_UP:qe=it(he,-1);break;case Ye.RIGHT:case Ye.PAGE_DOWN:qe=it(he,1);break;case Ye.UP:case Ye.DOWN:qe=it(he,Number("".concat(xe===Ye.UP?"-":"").concat(ft?oo:cu)));break}if(qe)return!(v!=null&&v(qe))}return!0},Je=function(xe){if(le.current&&le.current.onKeyDown){var qe=!0,it=xe.which;if([Ye.LEFT,Ye.RIGHT,Ye.UP,Ye.DOWN,Ye.PAGE_UP,Ye.PAGE_DOWN,Ye.ENTER].includes(it)&&(xe.preventDefault(),it!==Ye.ENTER&&b===0&&(qe=ot(it))),qe)return le.current.onKeyDown(xe)}return rn(!1,"Panel not correct handle keyDown event. Please help to fire issue about this."),!1},Se=function(xe){le.current&&le.current.onBlur&&le.current.onBlur(xe)};Z&&J!=="right"&&(Z.current={onKeyDown:Je,onClose:function(){le.current&&le.current.onClose&&le.current.onClose()}}),s.useEffect(function(){u&&!ge.current&&be(u)},[u]),s.useEffect(function(){ge.current=!1},[]);var He,je=p(p({},t),{},{operationRef:le,prefixCls:n,viewDate:he,value:ce,onViewDateChange:Re,sourceMode:dt,onPanelChange:We,disabledDate:v});switch(delete je.onChange,delete je.onSelect,we){case"decade":He=s.createElement(oy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"year":He=s.createElement(Ty,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"month":He=s.createElement(wy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"quarter":He=s.createElement(Fy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"week":He=s.createElement(by,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"time":delete je.showTime,He=s.createElement(pv,ne({},je,Ve(S)==="object"?S:null,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;default:S?He=s.createElement(yy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}})):He=s.createElement(uu,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}))}var ze,ye,de=function(){var xe=i.getNow(),qe=G1(i.getHour(xe),i.getMinute(xe),i.getSecond(xe),z?I:1,V?j:1,X?A:1),it=ov(i,xe,qe[0],qe[1],qe[2]);Oe(it,"submit")};q||(ze=gv(n,we,E),ye=yv({prefixCls:n,components:F,needConfirmButton:K,okDisabled:!ce||v&&v(ce),locale:l,showNow:x,onNow:K&&de,onOk:function(){ce&&(Oe(ce,"submit",!0),$&&$(ce))}}));var Ce;if(w&&we==="date"&&y==="date"&&!S){var Me=i.getNow(),Be="".concat(n,"-today-btn"),nt=v&&v(Me);Ce=s.createElement("a",{className:pe(Be,nt&&"".concat(Be,"-disabled")),"aria-disabled":nt,onClick:function(){nt||Oe(Me,"mouse",!0)}},l.today)}return s.createElement(gn.Provider,{value:p(p({},W),{},{mode:we,hideHeader:"hideHeader"in t?P:W.hideHeader,hidePrevBtn:Y&&J==="right",hideNextBtn:Y&&J==="left"})},s.createElement("div",{tabIndex:b,className:pe("".concat(n,"-panel"),a,(e={},B(e,"".concat(n,"-panel-has-range"),Q&&Q[0]&&Q[1]),B(e,"".concat(n,"-panel-has-range-hover"),ie&&ie[0]&&ie[1]),B(e,"".concat(n,"-panel-rtl"),N==="rtl"),e)),style:o,onKeyDown:Je,onBlur:Se,onMouseDown:D,ref:U},He,ze||ye||Ce?s.createElement("div",{className:"".concat(n,"-footer")},ze,ye,Ce):null))}var Dy={bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:1,adjustY:1}},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:1,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:0,adjustY:1}},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:0,adjustY:1}}};function Cv(t){var e,r=t.prefixCls,n=t.popupElement,a=t.popupStyle,o=t.visible,l=t.dropdownClassName,i=t.dropdownAlign,u=t.transitionName,c=t.getPopupContainer,d=t.children,f=t.range,v=t.popupPlacement,m=t.direction,h="".concat(r,"-dropdown"),y=function(){return v!==void 0?v:m==="rtl"?"bottomRight":"bottomLeft"};return s.createElement(Fp,{showAction:[],hideAction:[],popupPlacement:y(),builtinPlacements:Dy,prefixCls:h,popupTransitionName:u,popup:n,popupAlign:i,popupVisible:o,popupClassName:pe(l,(e={},B(e,"".concat(h,"-range"),f),B(e,"".concat(h,"-rtl"),m==="rtl"),e)),popupStyle:a,getPopupContainer:c},d)}function ss(t){var e=t.open,r=t.value,n=t.isClickOutside,a=t.triggerOpen,o=t.forwardKeyDown,l=t.onKeyDown,i=t.blurToCancel,u=t.onSubmit,c=t.onCancel,d=t.onFocus,f=t.onBlur,v=t.currentFocusedKey,m=t.key,h=m===void 0?"start":m,y=s.useState(!1),g=ee(y,2),b=g[0],x=g[1],S=s.useState(!1),w=ee(S,2),E=w[0],P=w[1],T=s.useRef(),M=s.useRef(!1),k=s.useRef(!1),D=s.useRef(!1),O={onMouseDown:function(){x(!0),a(!0)},onKeyDown:function(F){var N=function(){D.current=!0};if(l(F,N),!D.current){switch(F.which){case Ye.ENTER:{e?u()!==!1&&x(!0):a(!0),F.preventDefault();return}case Ye.TAB:{b&&e&&!F.shiftKey?(x(!1),F.preventDefault()):!b&&e&&!o(F)&&F.shiftKey&&(x(!0),F.preventDefault());return}case Ye.ESC:{x(!0),c();return}}!e&&![Ye.SHIFT].includes(F.which)?a(!0):b||o(F)}},onFocus:function(F){x(!0),P(!0),v&&(v.current=h),clearTimeout(T.current),d&&d(F)},onBlur:function(F){if(M.current||!n(document.activeElement)){M.current=!1;return}i?setTimeout(function(){for(var N=document,R=N.activeElement;R&&R.shadowRoot;)R=R.shadowRoot.activeElement;n(R)&&c()},0):e&&(a(!1),k.current&&u()),P(!1),v?(v.current="",T.current=setTimeout(function(){v.current||f==null||f(F)},100)):f==null||f(F)}};return s.useEffect(function(){k.current=!1},[e]),s.useEffect(function(){k.current=!0},[r]),s.useEffect(function(){return Q1(function($){var F=J1($),N=n(F);e?N?(!E||N)&&a(!1):(M.current=!0,requestAnimationFrame(function(){M.current=!1})):E&&!N&&(M.current=!0)})}),s.useEffect(function(){return function(){return clearTimeout(T.current)}},[]),[O,{focused:E,typing:b}]}function us(t){var e=t.valueTexts,r=t.onTextChange,n=s.useState(""),a=ee(n,2),o=a[0],l=a[1],i=s.useRef([]);i.current=e;function u(d){l(d),r(d)}function c(){l(i.current[0])}return s.useEffect(function(){e.every(function(d){return d!==o})&&c()},[e.join("||")]),[o,u,c]}function Ni(t,e){var r=e.formatList,n=e.generateConfig,a=e.locale;return Zs(function(){if(!t)return[[""],""];for(var o="",l=[],i=0;i1&&arguments[1]!==void 0?arguments[1]:!1;if(cancelAnimationFrame(c.current),b){u(g);return}c.current=requestAnimationFrame(function(){u(g)})}var f=Ni(i,{formatList:r,generateConfig:n,locale:a}),v=ee(f,2),m=v[1];function h(g){d(g)}function y(){var g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;d(null,g)}return s.useEffect(function(){y(!0)},[t]),s.useEffect(function(){return function(){return cancelAnimationFrame(c.current)}},[]),[m,h,y]}function Oy(t){var e,r=t.prefixCls,n=r===void 0?"rc-picker":r,a=t.id,o=t.tabIndex,l=t.style,i=t.className,u=t.dropdownClassName,c=t.dropdownAlign,d=t.popupStyle,f=t.transitionName,v=t.generateConfig,m=t.locale,h=t.inputReadOnly,y=t.allowClear,g=t.autoFocus,b=t.showTime,x=t.picker,S=x===void 0?"date":x,w=t.format,E=t.use12Hours,P=t.value,T=t.defaultValue,M=t.open,k=t.defaultOpen,D=t.defaultOpenValue,O=t.suffixIcon,$=t.clearIcon,F=t.disabled,N=t.disabledDate,R=t.placeholder,I=t.getPopupContainer,L=t.pickerRef,j=t.panelRender,_=t.onChange,A=t.onOpenChange,K=t.onFocus,z=t.onBlur,V=t.onMouseDown,X=t.onMouseUp,W=t.onMouseEnter,Z=t.onMouseLeave,U=t.onContextMenu,ae=t.onClick,q=t.onKeyDown,te=t.onSelect,ue=t.direction,Y=t.autoComplete,J=Y===void 0?"off":Y,Q=t.inputRender,ie=s.useRef(null),le=S==="date"&&!!b||S==="time",ge=mv(lv(w,S,b,E)),Pe=s.useRef(null),ve=s.useRef(null),ce=s.useRef(null),fe=xt(null,{value:P,defaultValue:T}),oe=ee(fe,2),se=oe[0],he=oe[1],be=s.useState(se),Re=ee(be,2),Fe=Re[0],Ee=Re[1],ke=s.useRef(null),we=xt(!1,{value:M,defaultValue:k,postState:function(_e){return F?!1:_e},onChange:function(_e){A&&A(_e),!_e&&ke.current&&ke.current.onClose&&ke.current.onClose()}}),Ge=ee(we,2),Qe=Ge[0],ct=Ge[1],dt=Ni(Fe,{formatList:ge,generateConfig:v,locale:m}),mt=ee(dt,2),We=mt[0],Oe=mt[1],ot=us({valueTexts:We,onTextChange:function(_e){var at=fv(_e,{locale:m,formatList:ge,generateConfig:v});at&&(!N||!N(at))&&Ee(at)}}),Je=ee(ot,3),Se=Je[0],He=Je[1],je=Je[2],ze=function(_e){Ee(_e),he(_e),_&&!ya(v,se,_e)&&_(_e,_e?Jt(_e,{generateConfig:v,locale:m,format:ge[0]}):"")},ye=function(_e){F&&_e||ct(_e)},de=function(_e){return Qe&&ke.current&&ke.current.onKeyDown?ke.current.onKeyDown(_e):(rn(!1,"Picker not correct forward KeyDown operation. Please help to fire issue about this."),!1)},Ce=function(){for(var _e=arguments.length,at=new Array(_e),Ot=0;Ot<_e;Ot++)at[Ot]=arguments[Ot];ae==null||ae.apply(void 0,at),ie.current&&(ie.current.focus(),ye(!0))},Me=ss({blurToCancel:le,open:Qe,value:Se,triggerOpen:ye,forwardKeyDown:de,isClickOutside:function(_e){return!uv([Pe.current,ve.current,ce.current],_e)},onSubmit:function(){return!Fe||N&&N(Fe)?!1:(ze(Fe),ye(!1),je(),!0)},onCancel:function(){ye(!1),Ee(se),je()},onKeyDown:function(_e,at){q==null||q(_e,at)},onFocus:K,onBlur:z}),Be=ee(Me,2),nt=Be[0],Ne=Be[1],xe=Ne.focused,qe=Ne.typing;s.useEffect(function(){Qe||(Ee(se),!We.length||We[0]===""?He(""):Oe!==Se&&je())},[Qe,We]),s.useEffect(function(){Qe||je()},[S]),s.useEffect(function(){Ee(se)},[se]),L&&(L.current={focus:function(){ie.current&&ie.current.focus()},blur:function(){ie.current&&ie.current.blur()}});var it=cs(Se,{formatList:ge,generateConfig:v,locale:m}),ft=ee(it,3),At=ft[0],Kt=ft[1],Rt=ft[2],zt=p(p({},t),{},{className:void 0,style:void 0,pickerValue:void 0,onPickerValueChange:void 0,onChange:null}),et=s.createElement(bv,ne({},zt,{generateConfig:v,className:pe(B({},"".concat(n,"-panel-focused"),!qe)),value:Fe,locale:m,tabIndex:-1,onSelect:function(_e){te==null||te(_e),Ee(_e)},direction:ue,onPanelChange:function(_e,at){var Ot=t.onPanelChange;Rt(!0),Ot==null||Ot(_e,at)}}));j&&(et=j(et));var tt=s.createElement("div",{className:"".concat(n,"-panel-container"),onMouseDown:function(_e){_e.preventDefault()}},et),lt;O&&(lt=s.createElement("span",{className:"".concat(n,"-suffix")},O));var ut;y&&se&&!F&&(ut=s.createElement("span",{onMouseDown:function(_e){_e.preventDefault(),_e.stopPropagation()},onMouseUp:function(_e){_e.preventDefault(),_e.stopPropagation(),ze(null),ye(!1)},className:"".concat(n,"-clear"),role:"button"},$||s.createElement("span",{className:"".concat(n,"-clear-btn")})));var wt=p(p(p({id:a,tabIndex:o,disabled:F,readOnly:h||typeof ge[0]=="function"||!qe,value:At||Se,onChange:function(_e){He(_e.target.value)},autoFocus:g,placeholder:R,ref:ie,title:Se},nt),{},{size:sv(S,ge[0],v)},hv(t)),{},{autoComplete:J}),St=Q?Q(wt):s.createElement("input",wt),Ae=function(_e,at){(at==="submit"||at!=="key"&&!le)&&(ze(_e),ye(!1))},Ue=ue==="rtl"?"bottomRight":"bottomLeft";return s.createElement(gn.Provider,{value:{operationRef:ke,hideHeader:S==="time",panelRef:Pe,onSelect:Ae,open:Qe,defaultOpenValue:D,onDateMouseEnter:Kt,onDateMouseLeave:Rt}},s.createElement(Cv,{visible:Qe,popupElement:tt,popupStyle:d,prefixCls:n,dropdownClassName:u,dropdownAlign:c,getPopupContainer:I,transitionName:f,popupPlacement:Ue,direction:ue},s.createElement("div",{ref:ce,className:pe(n,i,(e={},B(e,"".concat(n,"-disabled"),F),B(e,"".concat(n,"-focused"),xe),B(e,"".concat(n,"-rtl"),ue==="rtl"),e)),style:l,onMouseDown:V,onMouseUp:X,onMouseEnter:W,onMouseLeave:Z,onContextMenu:U,onClick:Ce},s.createElement("div",{className:pe("".concat(n,"-input"),B({},"".concat(n,"-input-placeholder"),!!At)),ref:ve},St,lt,ut))))}var Iy=function(t){yn(r,t);var e=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),l=0;lm(d);case"month":return v(g)>v(d);case"week":return f(g)>f(d);default:return!ar(u,g,d)&&u.isAfter(g,d)}return!1},[l,i[1],d,e]),y=s.useCallback(function(g){if(l&&l(g))return!0;if(i[0]&&c)return!ar(u,g,d)&&u.isAfter(c,g);if(r&&c)switch(n){case"quarter":return m(g)0&&arguments[0]!==void 0?arguments[0]:!1,Te=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Xe=null;Ie&&Rn&&Rn[0]&&Rn[1]&&h.isAfter(Rn[1],Rn[0])&&(Xe=Rn);var yt=P;if(P&&Ve(P)==="object"&&P.defaultValue){var Bt=P.defaultValue;yt=p(p({},P),{},{defaultValue:Ct(Bt,Se)||void 0})}var Br=null;return L&&(Br=function(Mn,jn){return L(Mn,jn,{range:Se?"end":"start"})}),s.createElement(Oa.Provider,{value:{inRange:!0,panelPosition:vt,rangedValue:mr||ft,hoverRangedValue:Xe}},s.createElement(bv,ne({},t,Te,{dateRender:Br,showTime:yt,mode:zt[Se],generateConfig:h,style:void 0,direction:se,disabledDate:Se===0?wt:St,disabledTime:function(Mn){return I?I(Mn,Se===0?"start":"end"):!1},className:pe(B({},"".concat(o,"-panel-focused"),Se===0?!Ke:!an)),value:Ct(ft,Se),locale:y,tabIndex:-1,onPanelChange:function(Mn,jn){Se===0&&Vr(!0),Se===1&&ua(!0),tt(Sn(zt,jn,Se),Sn(ft,Mn,Se));var Qn=Mn;vt==="right"&&zt[Se]===jn&&(Qn=io(Qn,jn,h,-1)),xe(Qn,Se)},onOk:null,onSelect:void 0,onChange:void 0,defaultValue:Se===0?Ct(ft,1):Ct(ft,0)})))}var yr=0,Bu=0;if(Se&&Ge.current&&ct.current&&we.current){yr=Ge.current.offsetWidth+ct.current.offsetWidth;var op=We.current.offsetLeft>yr?We.current.offsetLeft-yr:We.current.offsetLeft;we.current.offsetWidth&&We.current.offsetWidth&&yr>we.current.offsetWidth-We.current.offsetWidth-(se==="rtl"?0:op)&&(Bu=yr)}var ip=se==="rtl"?{right:yr}:{left:yr};function lp(){var vt,Te=gv(o,zt[Se],U),Xe=yv({prefixCls:o,components:fe,needConfirmButton:Fe,okDisabled:!Ct(ft,Se)||R&&R(ft[Se]),locale:y,rangeList:ap,onOk:function(){Ct(ft,Se)&&(qn(ft,Se),ve&&ve(ft))}});if(E!=="time"&&!P){var yt=Ne(Se),Bt=io(yt,E,h),Br=zt[Se],Zn=Br===E,Mn=Nl(Zn?"left":!1,{pickerValue:yt,onPickerValueChange:function(dn){xe(dn,Se)}}),jn=Nl("right",{pickerValue:Bt,onPickerValueChange:function(dn){xe(io(dn,E,h,-1),Se)}});se==="rtl"?vt=s.createElement(s.Fragment,null,jn,Zn&&Mn):vt=s.createElement(s.Fragment,null,Mn,Zn&&jn)}else vt=Nl();var Qn=s.createElement(s.Fragment,null,s.createElement("div",{className:"".concat(o,"-panels")},vt),(Te||Xe)&&s.createElement("div",{className:"".concat(o,"-footer")},Te,Xe));return j&&(Qn=j(Qn)),s.createElement("div",{className:"".concat(o,"-panel-container"),style:{marginLeft:Bu},ref:we,onMouseDown:function(dn){dn.preventDefault()}},Qn)}var sp=s.createElement("div",{className:pe("".concat(o,"-range-wrapper"),"".concat(o,"-").concat(E,"-range-wrapper")),style:{minWidth:sn}},s.createElement("div",{ref:We,className:"".concat(o,"-range-arrow"),style:ip}),lp()),Hu;z&&(Hu=s.createElement("span",{className:"".concat(o,"-suffix")},z));var Wu;K&&(Ct(Ce,0)&&!ze[0]||Ct(Ce,1)&&!ze[1])&&(Wu=s.createElement("span",{onMouseDown:function(Te){Te.preventDefault(),Te.stopPropagation()},onMouseUp:function(Te){Te.preventDefault(),Te.stopPropagation();var Xe=Ce;ze[0]||(Xe=Sn(Xe,null,0)),ze[1]||(Xe=Sn(Xe,null,1)),qn(Xe,null),_n(!1,Se)},className:"".concat(o,"-clear")},V||s.createElement("span",{className:"".concat(o,"-clear-btn")})));var Uu={size:sv(E,Oe[0],h)},Tl=0,$l=0;Ge.current&&Qe.current&&ct.current&&(Se===0?$l=Ge.current.offsetWidth:(Tl=yr,$l=Qe.current.offsetWidth));var up=se==="rtl"?{right:Tl}:{left:Tl},cp=function(Te,Xe){var yt=Sn(ft,Te,Se);Xe==="submit"||Xe!=="key"&&!Fe?(qn(yt,Se),Se===0?Vr():ua()):At(yt)};return s.createElement(gn.Provider,{value:{operationRef:je,hideHeader:E==="time",onDateMouseEnter:Ml,onDateMouseLeave:ii,hideRanges:!0,onSelect:cp,open:Ie}},s.createElement(Cv,{visible:Ie,popupElement:sp,popupStyle:c,prefixCls:o,dropdownClassName:d,dropdownAlign:v,getPopupContainer:m,transitionName:f,range:!0,direction:se},s.createElement("div",ne({ref:ke,className:pe(o,"".concat(o,"-range"),u,(e={},B(e,"".concat(o,"-disabled"),ze[0]&&ze[1]),B(e,"".concat(o,"-focused"),Se===0?me:Mt),B(e,"".concat(o,"-rtl"),se==="rtl"),e)),style:i,onClick:on,onMouseEnter:le,onMouseLeave:ge,onMouseDown:zr,onMouseUp:ie},hv(t)),s.createElement("div",{className:pe("".concat(o,"-input"),(r={},B(r,"".concat(o,"-input-active"),Se===0),B(r,"".concat(o,"-input-placeholder"),!!ri),r)),ref:Ge},s.createElement("input",ne({id:l,disabled:ze[0],readOnly:W||typeof Oe[0]=="function"||!Ke,value:ri||vr,onChange:function(Te){la(Te.target.value)},autoFocus:b,placeholder:Ct(g,0)||"",ref:dt},H,Uu,{autoComplete:Re}))),s.createElement("div",{className:"".concat(o,"-range-separator"),ref:ct},k),s.createElement("div",{className:pe("".concat(o,"-input"),(n={},B(n,"".concat(o,"-input-active"),Se===1),B(n,"".concat(o,"-input-placeholder"),!!gr),n)),ref:Qe},s.createElement("input",ne({disabled:ze[1],readOnly:W||typeof Oe[0]=="function"||!an,value:gr||ht,onChange:function(Te){Nt(Te.target.value)},placeholder:Ct(g,1)||"",ref:mt},Tt,Uu,{autoComplete:Re}))),s.createElement("div",{className:"".concat(o,"-active-bar"),style:p(p({},up),{},{width:$l,position:"absolute"})}),Hu,Wu)))}var Vy=function(t){yn(r,t);var e=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),l=0;l=0;c-=1){var d=e.get(c)||new Set;d.forEach(function(f){var v=f.parent,m=f.node;if(!(n(m)||!f.parent||u.has(f.parent.key))){if(n(f.parent.node)){u.add(v.key);return}var h=!0,y=!1;(v.children||[]).filter(function(g){return!n(g.node)}).forEach(function(g){var b=g.key,x=a.has(b);h&&!x&&(h=!1),!y&&(x||o.has(b))&&(y=!0)}),h&&a.add(v.key),y&&o.add(v.key),u.add(v.key)}})}return{checkedKeys:Array.from(a),halfCheckedKeys:Array.from(xv(o,a))}}function Hy(t,e,r,n,a){for(var o=new Set(t),l=new Set(e),i=0;i<=n;i+=1){var u=r.get(i)||new Set;u.forEach(function(v){var m=v.key,h=v.node,y=v.children,g=y===void 0?[]:y;!o.has(m)&&!l.has(m)&&!a(h)&&g.filter(function(b){return!a(b.node)}).forEach(function(b){o.delete(b.key)})})}l=new Set;for(var c=new Set,d=n;d>=0;d-=1){var f=r.get(d)||new Set;f.forEach(function(v){var m=v.parent,h=v.node;if(!(a(h)||!v.parent||c.has(v.parent.key))){if(a(v.parent.node)){c.add(m.key);return}var y=!0,g=!1;(m.children||[]).filter(function(b){return!a(b.node)}).forEach(function(b){var x=b.key,S=o.has(x);y&&!S&&(y=!1),!g&&(S||l.has(x))&&(g=!0)}),y||o.delete(m.key),g&&l.add(m.key),c.add(m.key)}})}return{checkedKeys:Array.from(o),halfCheckedKeys:Array.from(xv(l,o))}}function Pn(t,e,r,n){var a=[],o;n?o=n:o=zy;var l=new Set(t.filter(function(d){var f=!!mn(r,d);return f||a.push(d),f})),i=new Map,u=0;Object.keys(r).forEach(function(d){var f=r[d],v=f.level,m=i.get(v);m||(m=new Set,i.set(v,m)),m.add(f),u=Math.max(u,v)}),rn(!a.length,"Tree missing follow keys: ".concat(a.slice(0,100).map(function(d){return"'".concat(d,"'")}).join(", ")));var c;return e===!0?c=By(l,i,u,o):c=Hy(l,e.halfCheckedKeys,i,u,o),c}var _o=s.createContext(null),du="__RC_CASCADER_SPLIT__",Sv="SHOW_PARENT",wv="SHOW_CHILD";function Pr(t){return t.join(du)}function fa(t){return t.map(Pr)}function Wy(t){return t.split(du)}function Uy(t){var e=t||{},r=e.label,n=e.value,a=e.children,o=n||"value";return{label:r||"label",value:o,key:o,children:a||"children"}}function to(t,e){var r,n;return(r=t.isLeaf)!==null&&r!==void 0?r:!(!((n=t[e.children])===null||n===void 0)&&n.length)}function Yy(t){var e=t.parentElement;if(e){var r=t.offsetTop-e.offsetTop;r-e.scrollTop<0?e.scrollTo({top:r}):r+t.offsetHeight-e.scrollTop>e.offsetHeight&&e.scrollTo({top:r+t.offsetHeight-e.offsetHeight})}}function lc(t,e,r){var n=new Set(t),a=e();return t.filter(function(o){var l=a[o],i=l?l.parent:null,u=l?l.children:null;return r===wv?!(u&&u.some(function(c){return c.key&&n.has(c.key)})):!(i&&!i.node.disabled&&n.has(i.key))})}function yo(t,e,r){for(var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,a=e,o=[],l=function(){var c,d,f,v=t[i],m=(c=a)===null||c===void 0?void 0:c.findIndex(function(y){var g=y[r.value];return n?String(g)===String(v):g===v}),h=m!==-1?(d=a)===null||d===void 0?void 0:d[m]:null;o.push({value:(f=h==null?void 0:h[r.value])!==null&&f!==void 0?f:v,index:m,option:h}),a=h==null?void 0:h[r.children]},i=0;i1&&arguments[1]!==void 0?arguments[1]:null;return d.map(function(v,m){for(var h=Pv(f?f.pos:"0",m),y=Lo(v[o],h),g,b=0;b1&&arguments[1]!==void 0?arguments[1]:{},r=e.initWrapper,n=e.processEntity,a=e.onProcessFinished,o=e.externalGetKey,l=e.childrenPropName,i=e.fieldNames,u=arguments.length>2?arguments[2]:void 0,c=o||u,d={},f={},v={posEntities:d,keyEntities:f};return r&&(v=r(v)||v),Zy(t,function(m){var h=m.node,y=m.index,g=m.pos,b=m.key,x=m.parentPos,S=m.level,w=m.nodes,E={node:h,nodes:w,index:y,key:b,pos:g,level:S},P=Lo(b,g);d[g]=E,f[P]=E,E.parent=d[x],E.parent&&(E.parent.children=E.parent.children||[],E.parent.children.push(E)),n&&n(E,v)},{externalGetKey:c,childrenPropName:l,fieldNames:i}),a&&a(v),v}function lo(t,e){var r=e.expandedKeys,n=e.selectedKeys,a=e.loadedKeys,o=e.loadingKeys,l=e.checkedKeys,i=e.halfCheckedKeys,u=e.dragOverNodeKey,c=e.dropPosition,d=e.keyEntities,f=mn(d,t),v={eventKey:t,expanded:r.indexOf(t)!==-1,selected:n.indexOf(t)!==-1,loaded:a.indexOf(t)!==-1,loading:o.indexOf(t)!==-1,checked:l.indexOf(t)!==-1,halfChecked:i.indexOf(t)!==-1,pos:String(f?f.pos:""),dragOver:u===t&&c===0,dragOverGapTop:u===t&&c===-1,dragOverGapBottom:u===t&&c===1};return v}function Wt(t){var e=t.data,r=t.expanded,n=t.selected,a=t.checked,o=t.loaded,l=t.loading,i=t.halfChecked,u=t.dragOver,c=t.dragOverGapTop,d=t.dragOverGapBottom,f=t.pos,v=t.active,m=t.eventKey,h=p(p({},e),{},{expanded:r,selected:n,checked:a,loaded:o,loading:l,halfChecked:i,dragOver:u,dragOverGapTop:c,dragOverGapBottom:d,pos:f,active:v,key:m});return"props"in h||Object.defineProperty(h,"props",{get:function(){return rn(!1,"Second param return from event is node data instead of TreeNode instance. Please read value directly instead of reading from `props`."),t}}),h}const Qy=function(t,e){var r=s.useRef({options:null,info:null}),n=s.useCallback(function(){return r.current.options!==t&&(r.current.options=t,r.current.info=jo(t,{fieldNames:e,initWrapper:function(o){return p(p({},o),{},{pathKeyEntities:{}})},processEntity:function(o,l){var i=o.nodes.map(function(u){return u[e.value]}).join(du);l.pathKeyEntities[i]=o,o.key=i}})),r.current.info.pathKeyEntities},[e,t]);return n},Jy=function(t,e){return s.useCallback(function(r){var n=[],a=[];return r.forEach(function(o){var l=yo(o,t,e);l.every(function(i){return i.option})?a.push(o):n.push(o)}),[a,n]},[t,e])};function sc(t){var e=s.useRef();e.current=t;var r=s.useCallback(function(){return e.current.apply(e,arguments)},[]);return r}function eb(t){return s.useMemo(function(){if(!t)return[!1,{}];var e={matchInputWidth:!0,limit:50};return t&&Ve(t)==="object"&&(e=p(p({},e),t)),e.limit<=0&&delete e.limit,[!0,e]},[t])}var so="__rc_cascader_search_mark__",tb=function(e,r,n){var a=n.label;return r.some(function(o){return String(o[a]).toLowerCase().includes(e.toLowerCase())})},nb=function(e,r,n,a){return r.map(function(o){return o[a.label]}).join(" / ")};const rb=function(t,e,r,n,a,o){var l=a.filter,i=l===void 0?tb:l,u=a.render,c=u===void 0?nb:u,d=a.limit,f=d===void 0?50:d,v=a.sort;return s.useMemo(function(){var m=[];if(!t)return[];function h(y,g){y.forEach(function(b){if(!(!v&&f>0&&m.length>=f)){var x=[].concat(De(g),[b]),S=b[r.children];if((!S||S.length===0||o)&&i(t,x,{label:r.label})){var w;m.push(p(p({},b),{},(w={},B(w,r.label,c(t,x,n,r)),B(w,so,x),B(w,r.children,void 0),w)))}S&&h(b[r.children],x)}})}return h(e,[]),v&&m.sort(function(y,g){return v(y[so],g[so],t,r)}),f>0?m.slice(0,f):m},[t,e,r,n,c,o,i,v,f])};function ab(t){var e,r=t.prefixCls,n=t.checked,a=t.halfChecked,o=t.disabled,l=t.onClick,i=s.useContext(_o),u=i.checkable,c=typeof u!="boolean"?u:null;return s.createElement("span",{className:pe("".concat(r),(e={},B(e,"".concat(r,"-checked"),n),B(e,"".concat(r,"-indeterminate"),!n&&a),B(e,"".concat(r,"-disabled"),o),e)),onClick:l},c)}var kv="__cascader_fix_label__";function ob(t){var e=t.prefixCls,r=t.multiple,n=t.options,a=t.activeValue,o=t.prevValuePath,l=t.onToggleOpen,i=t.onSelect,u=t.onActive,c=t.checkedSet,d=t.halfCheckedSet,f=t.loadingKeys,v=t.isSelectable,m="".concat(e,"-menu"),h="".concat(e,"-menu-item"),y=s.useContext(_o),g=y.fieldNames,b=y.changeOnSelect,x=y.expandTrigger,S=y.expandIcon,w=y.loadingIcon,E=y.dropdownMenuColumnStyle,P=x==="hover",T=s.useMemo(function(){return n.map(function(M){var k,D=M.disabled,O=M[so],$=(k=M[kv])!==null&&k!==void 0?k:M[g.label],F=M[g.value],N=to(M,g),R=O?O.map(function(A){return A[g.value]}):[].concat(De(o),[F]),I=Pr(R),L=f.includes(I),j=c.has(I),_=d.has(I);return{disabled:D,label:$,value:F,isLeaf:N,isLoading:L,checked:j,halfChecked:_,option:M,fullPath:R,fullPathKey:I}})},[n,c,g,d,f,o]);return s.createElement("ul",{className:m,role:"menu"},T.map(function(M){var k,D=M.disabled,O=M.label,$=M.value,F=M.isLeaf,N=M.isLoading,R=M.checked,I=M.halfChecked,L=M.option,j=M.fullPath,_=M.fullPathKey,A=function(){if(!D){var X=De(j);P&&F&&X.pop(),u(X)}},K=function(){v(L)&&i(j,F)},z;return typeof L.title=="string"?z=L.title:typeof O=="string"&&(z=O),s.createElement("li",{key:_,className:pe(h,(k={},B(k,"".concat(h,"-expand"),!F),B(k,"".concat(h,"-active"),a===$),B(k,"".concat(h,"-disabled"),D),B(k,"".concat(h,"-loading"),N),k)),style:E,role:"menuitemcheckbox",title:z,"aria-checked":R,"data-path-key":_,onClick:function(){A(),(!r||F)&&K()},onDoubleClick:function(){b&&l(!1)},onMouseEnter:function(){P&&A()},onMouseDown:function(X){X.preventDefault()}},r&&s.createElement(ab,{prefixCls:"".concat(e,"-checkbox"),checked:R,halfChecked:I,disabled:D,onClick:function(X){X.stopPropagation(),K()}}),s.createElement("div",{className:"".concat(h,"-content")},O),!N&&S&&!F&&s.createElement("div",{className:"".concat(h,"-expand-icon")},S),N&&w&&s.createElement("div",{className:"".concat(h,"-loading-icon")},w))}))}const ib=function(){var t=al(),e=t.multiple,r=t.open,n=s.useContext(_o),a=n.values,o=s.useState([]),l=ee(o,2),i=l[0],u=l[1];return s.useEffect(function(){if(r&&!e){var c=a[0];u(c||[])}},[r]),[i,u]},lb=function(t,e,r,n,a,o){var l=al(),i=l.direction,u=l.searchValue,c=l.toggleOpen,d=l.open,f=i==="rtl",v=s.useMemo(function(){for(var E=-1,P=e,T=[],M=[],k=n.length,D=function(I){var L=P.findIndex(function(j){return j[r.value]===n[I]});if(L===-1)return"break";E=L,T.push(E),M.push(n[I]),P=P[E][r.children]},O=0;O1){var P=h.slice(0,-1);b(P)}else c(!1)},w=function(){var P,T=((P=g[y])===null||P===void 0?void 0:P[r.children])||[],M=T.find(function(D){return!D.disabled});if(M){var k=[].concat(De(h),[M[r.value]]);b(k)}};s.useImperativeHandle(t,function(){return{onKeyDown:function(P){var T=P.which;switch(T){case Ye.UP:case Ye.DOWN:{var M=0;T===Ye.UP?M=-1:T===Ye.DOWN&&(M=1),M!==0&&x(M);break}case Ye.LEFT:{if(u)break;f?w():S();break}case Ye.RIGHT:{if(u)break;f?S():w();break}case Ye.BACKSPACE:{u||S();break}case Ye.ENTER:{if(h.length){var k=g[y],D=(k==null?void 0:k[so])||[];D.length?o(D.map(function(O){return O[r.value]}),D[D.length-1]):o(h,g[y])}break}case Ye.ESC:c(!1),d&&P.stopPropagation()}},onKeyUp:function(){}}})};var sb=s.forwardRef(function(t,e){var r,n,a,o,l=al(),i=l.prefixCls,u=l.multiple,c=l.searchValue,d=l.toggleOpen,f=l.notFoundContent,v=l.direction,m=s.useRef(),h=v==="rtl",y=s.useContext(_o),g=y.options,b=y.values,x=y.halfValues,S=y.fieldNames,w=y.changeOnSelect,E=y.onSelect,P=y.searchOptions,T=y.dropdownPrefixCls,M=y.loadData,k=y.expandTrigger,D=T||i,O=s.useState([]),$=ee(O,2),F=$[0],N=$[1],R=function(Q){if(!(!M||c)){var ie=yo(Q,g,S),le=ie.map(function(ve){var ce=ve.option;return ce}),ge=le[le.length-1];if(ge&&!to(ge,S)){var Pe=Pr(Q);N(function(ve){return[].concat(De(ve),[Pe])}),M(le)}}};s.useEffect(function(){F.length&&F.forEach(function(J){var Q=Wy(J),ie=yo(Q,g,S,!0).map(function(ge){var Pe=ge.option;return Pe}),le=ie[ie.length-1];(!le||le[S.children]||to(le,S))&&N(function(ge){return ge.filter(function(Pe){return Pe!==J})})})},[g,F,S]);var I=s.useMemo(function(){return new Set(fa(b))},[b]),L=s.useMemo(function(){return new Set(fa(x))},[x]),j=ib(),_=ee(j,2),A=_[0],K=_[1],z=function(Q){K(Q),R(Q)},V=function(Q){var ie=Q.disabled,le=to(Q,S);return!ie&&(le||w||u)},X=function(Q,ie){var le=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;E(Q),!u&&(ie||w&&(k==="hover"||le))&&d(!1)},W=s.useMemo(function(){return c?P:g},[c,P,g]),Z=s.useMemo(function(){for(var J=[{options:W}],Q=W,ie=function(){var ve=A[le],ce=Q.find(function(oe){return oe[S.value]===ve}),fe=ce==null?void 0:ce[S.children];if(!(fe!=null&&fe.length))return"break";Q=fe,J.push({options:fe})},le=0;le":$,N=t.loadingIcon,R=t.children,I=t.dropdownMatchSelectWidth,L=I===void 0?!1:I,j=t.showCheckedStrategy,_=j===void 0?Sv:j,A=Le(t,ub),K=Gf(r),z=!!f,V=xt(l,{value:i,postState:uc}),X=ee(V,2),W=X[0],Z=X[1],U=s.useMemo(function(){return Uy(o)},[JSON.stringify(o)]),ae=s.useMemo(function(){return g||[]},[g]),q=Qy(ae,U),te=s.useCallback(function(Je){var Se=q();return Je.map(function(He){var je=Se[He].nodes;return je.map(function(ze){return ze[U.value]})})},[q,U]),ue=xt("",{value:v,postState:function(Se){return Se||""}}),Y=ee(ue,2),J=Y[0],Q=Y[1],ie=function(Se,He){Q(Se),He.source!=="blur"&&m&&m(Se)},le=eb(h),ge=ee(le,2),Pe=ge[0],ve=ge[1],ce=rb(J,ae,U,b||a,ve,u),fe=Jy(ae,U),oe=s.useMemo(function(){var Je=fe(W),Se=ee(Je,2),He=Se[0],je=Se[1];if(!z||!W.length)return[He,[],je];var ze=fa(He),ye=q(),de=Pn(ze,!0,ye),Ce=de.checkedKeys,Me=de.halfCheckedKeys;return[te(Ce),te(Me),je]},[z,W,q,te,fe]),se=ee(oe,3),he=se[0],be=se[1],Re=se[2],Fe=s.useMemo(function(){var Je=fa(he),Se=lc(Je,q,_);return[].concat(De(Re),De(te(Se)))},[he,q,te,Re,_]),Ee=Gy(Fe,ae,U,z,d),ke=sc(function(Je){if(Z(Je),c){var Se=uc(Je),He=Se.map(function(ye){return yo(ye,ae,U).map(function(de){return de.option})}),je=z?Se:Se[0],ze=z?He:He[0];c(je,ze)}}),we=sc(function(Je){if(Q(""),!z)ke(Je);else{var Se=Pr(Je),He=fa(he),je=fa(be),ze=He.includes(Se),ye=Re.some(function(it){return Pr(it)===Se}),de=he,Ce=Re;if(ye&&!ze)Ce=Re.filter(function(it){return Pr(it)!==Se});else{var Me=ze?He.filter(function(it){return it!==Se}):[].concat(De(He),[Se]),Be=q(),nt;if(ze){var Ne=Pn(Me,{checked:!1,halfCheckedKeys:je},Be);nt=Ne.checkedKeys}else{var xe=Pn(Me,!0,Be);nt=xe.checkedKeys}var qe=lc(nt,q,_);de=te(qe)}ke([].concat(De(Ce),De(de)))}}),Ge=function(Se,He){if(He.type==="clear"){ke([]);return}var je=He.values[0].valueCells;we(je)},Qe=w!==void 0?w:S,ct=P||E,dt=k||M,mt=function(Se){D==null||D(Se),O==null||O(Se)},We=s.useMemo(function(){return{options:ae,fieldNames:U,values:he,halfValues:be,changeOnSelect:u,onSelect:we,checkable:f,searchOptions:ce,dropdownPrefixCls:b,loadData:x,expandTrigger:y,expandIcon:F,loadingIcon:N,dropdownMenuColumnStyle:T}},[ae,U,he,be,u,we,f,ce,b,x,y,F,N,T]),Oe=!(J?ce:ae).length,ot=J&&ve.matchInputWidth||Oe?{}:{minWidth:"auto"};return s.createElement(_o.Provider,{value:We},s.createElement(qf,ne({},A,{ref:e,id:K,prefixCls:a,dropdownMatchSelectWidth:L,dropdownStyle:ot,displayValues:Ee,onDisplayValuesChange:Ge,mode:z?"multiple":void 0,searchValue:J,onSearch:ie,showSearch:Pe,OptionList:sb,emptyOptions:Oe,open:Qe,dropdownClassName:ct,placement:dt,onDropdownVisibleChange:mt,getRawInputElement:function(){return R}})))});Ao.SHOW_PARENT=Sv;Ao.SHOW_CHILD=wv;var db=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a2&&arguments[2]!==void 0?arguments[2]:!0,te=function(){T(function(Y){var J=new Map(Y),Q=J.delete(U);return Q?J:Y})};return T(function(ue){return new Map(ue).set(U,{url:ae,canPreview:q})}),te},W=function(U){U.stopPropagation(),R(!1),_(null)};return s.useEffect(function(){O(z)},[z]),s.useEffect(function(){!N&&A&&O(z)},[z,A,N]),s.createElement(Tb,{value:{isPreviewGroup:!0,previewUrls:V,setPreviewUrls:T,current:D,setCurrent:O,setShowPreview:R,setMousePosition:_,registerImage:X}},a,s.createElement(Nv,ne({"aria-hidden":!N,visible:N,prefixCls:n,onClose:W,mousePosition:j,src:V.get(D),icons:l,getContainer:h,countRender:x},S)))},wi=1,Pi=50,Xa=1,Db=.2,Ob=function(e){var r,n=e.visible,a=e.maskTransitionName,o=e.getContainer,l=e.prefixCls,i=e.rootClassName,u=e.icons,c=e.countRender,d=e.showSwitch,f=e.showProgress,v=e.current,m=e.count,h=e.scale,y=e.onSwitchLeft,g=e.onSwitchRight,b=e.onClose,x=e.onZoomIn,S=e.onZoomOut,w=e.onRotateRight,E=e.onRotateLeft,P=u.rotateLeft,T=u.rotateRight,M=u.zoomIn,k=u.zoomOut,D=u.close,O=u.left,$=u.right,F="".concat(l,"-operations-operation"),N="".concat(l,"-operations-icon"),R=[{icon:D,onClick:b,type:"close"},{icon:M,onClick:x,type:"zoomIn",disabled:h===Pi},{icon:k,onClick:S,type:"zoomOut",disabled:h===wi},{icon:T,onClick:w,type:"rotateRight"},{icon:P,onClick:E,type:"rotateLeft"}],I=s.createElement(s.Fragment,null,d&&s.createElement(s.Fragment,null,s.createElement("div",{className:pe("".concat(l,"-switch-left"),B({},"".concat(l,"-switch-left-disabled"),v===0)),onClick:y},O),s.createElement("div",{className:pe("".concat(l,"-switch-right"),B({},"".concat(l,"-switch-right-disabled"),v===m-1)),onClick:g},$)),s.createElement("ul",{className:"".concat(l,"-operations")},f&&s.createElement("li",{className:"".concat(l,"-operations-progress")},(r=c==null?void 0:c(v+1,m))!==null&&r!==void 0?r:"".concat(v+1," / ").concat(m)),R.map(function(L){var j,_=L.icon,A=L.onClick,K=L.type,z=L.disabled;return s.createElement("li",{className:pe(F,(j={},B(j,"".concat(l,"-operations-operation-").concat(K),!0),B(j,"".concat(l,"-operations-operation-disabled"),!!z),j)),onClick:A,key:K},s.isValidElement(_)?s.cloneElement(_,{className:N}):_)})));return s.createElement(Xs,{visible:n,motionName:a},function(L){var j=L.className,_=L.style;return s.createElement(Lp,{open:!0,getContainer:o??document.body},s.createElement("div",{className:pe("".concat(l,"-operations-wrapper"),j,i),style:_},I))})},cc={x:0,y:0,rotate:0,scale:1};function Ib(t){var e=s.useRef(null),r=s.useRef([]),n=s.useState(cc),a=ee(n,2),o=a[0],l=a[1],i=function(){l(cc)},u=function(f){e.current===null&&(r.current=[],e.current=ho(function(){l(function(v){var m=v;return r.current.forEach(function(h){m=p(p({},m),h)}),e.current=null,m})})),r.current.push(p(p({},o),f))},c=function(f,v,m){var h=t.current,y=h.width,g=h.height,b=h.offsetWidth,x=h.offsetHeight,S=h.offsetLeft,w=h.offsetTop,E=f,P=o.scale*f;P>Pi?(E=Pi/o.scale,P=Pi):Pn){if(e>0)return B({},t,o);if(e<0&&an)return B({},t,e<0?o:-o);return{}}function _b(t,e,r,n){var a=Mv(),o=a.width,l=a.height,i=null;return t<=o&&e<=l?i={x:0,y:0}:(t>o||e>l)&&(i=p(p({},dc("x",r,t,o)),dc("y",n,e,l))),i}var Lb=["prefixCls","src","alt","onClose","afterClose","visible","icons","rootClassName","getContainer","countRender","scaleStep","transitionName","maskTransitionName"],Nv=function(e){var r=e.prefixCls,n=e.src,a=e.alt,o=e.onClose;e.afterClose;var l=e.visible,i=e.icons,u=i===void 0?{}:i,c=e.rootClassName,d=e.getContainer,f=e.countRender,v=e.scaleStep,m=v===void 0?.5:v,h=e.transitionName,y=h===void 0?"zoom":h,g=e.maskTransitionName,b=g===void 0?"fade":g,x=Le(e,Lb),S=s.useRef(),w=s.useRef({deltaX:0,deltaY:0,transformX:0,transformY:0}),E=s.useState(!1),P=ee(E,2),T=P[0],M=P[1],k=s.useContext(vu),D=k.previewUrls,O=k.current,$=k.isPreviewGroup,F=k.setCurrent,N=D.size,R=Array.from(D.keys()),I=R.indexOf(O),L=$?D.get(O):n,j=$&&N>1,_=$&&N>=1,A=Ib(S),K=A.transform,z=A.resetTransform,V=A.updateTransform,X=A.dispatchZoonChange,W=K.rotate,Z=K.scale,U=pe(B({},"".concat(r,"-moving"),T)),ae=function(){z()},q=function(){X(Xa+m)},te=function(){X(Xa-m)},ue=function(){V({rotate:W+90})},Y=function(){V({rotate:W-90})},J=function(oe){oe.preventDefault(),oe.stopPropagation(),I>0&&F(R[I-1])},Q=function(oe){oe.preventDefault(),oe.stopPropagation(),I0&&(be=Xa/be),X(be,oe.clientX,oe.clientY)}},ve=s.useCallback(function(fe){!l||!j||(fe.keyCode===Ye.LEFT?I>0&&F(R[I-1]):fe.keyCode===Ye.RIGHT&&I=0||i.relatedTarget.className.indexOf("".concat(f,"-item"))>=0))&&d(n.getValidValue()))},n.go=function(i){var u=n.state.goInputText;u!==""&&(i.keyCode===Hr.ENTER||i.type==="click")&&(n.setState({goInputText:""}),n.props.quickGo(n.getValidValue()))},n}return xn(r,[{key:"getValidValue",value:function(){var a=this.state.goInputText;return!a||isNaN(a)?void 0:Number(a)}},{key:"getPageSizeOptions",value:function(){var a=this.props,o=a.pageSize,l=a.pageSizeOptions;return l.some(function(i){return i.toString()===o.toString()})?l:l.concat([o.toString()]).sort(function(i,u){var c=isNaN(Number(i))?0:Number(i),d=isNaN(Number(u))?0:Number(u);return c-d})}},{key:"render",value:function(){var a=this,o=this.props,l=o.pageSize,i=o.locale,u=o.rootPrefixCls,c=o.changeSize,d=o.quickGo,f=o.goButton,v=o.selectComponentClass,m=o.buildOptionText,h=o.selectPrefixCls,y=o.disabled,g=this.state.goInputText,b="".concat(u,"-options"),x=v,S=null,w=null,E=null;if(!c&&!d)return null;var P=this.getPageSizeOptions();if(c&&x){var T=P.map(function(M,k){return G.createElement(x.Option,{key:k,value:M.toString()},(m||a.buildOptionText)(M))});S=G.createElement(x,{disabled:y,prefixCls:h,showSearch:!1,className:"".concat(b,"-size-changer"),optionLabelProp:"children",dropdownMatchSelectWidth:!1,value:(l||P[0]).toString(),onChange:this.changeSize,getPopupContainer:function(k){return k.parentNode},"aria-label":i.page_size,defaultOpen:!1},T)}return d&&(f&&(E=typeof f=="boolean"?G.createElement("button",{type:"button",onClick:this.go,onKeyUp:this.go,disabled:y,className:"".concat(b,"-quick-jumper-button")},i.jump_to_confirm):G.createElement("span",{onClick:this.go,onKeyUp:this.go},f)),w=G.createElement("div",{className:"".concat(b,"-quick-jumper")},i.jump_to,G.createElement("input",{disabled:y,type:"text",value:g,onChange:this.handleChange,onKeyUp:this.go,onBlur:this.handleBlur,"aria-label":i.page}),i.page,E)),G.createElement("li",{className:"".concat(b)},S,w)}}]),r}(G.Component);Dv.defaultProps={pageSizeOptions:["10","20","50","100"]};const Ov={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页",page_size:"页码"};function fs(){}function mc(t){var e=Number(t);return typeof e=="number"&&!isNaN(e)&&isFinite(e)&&Math.floor(e)===e}function Hb(t,e,r){return r}function br(t,e,r){var n=typeof t>"u"?e.pageSize:t;return Math.floor((r.total-1)/n)+1}var Iv=function(t){yn(r,t);var e=bn(r);function r(n){var a;Cn(this,r),a=e.call(this,n),a.getJumpPrevPage=function(){return Math.max(1,a.state.current-(a.props.showLessItems?3:5))},a.getJumpNextPage=function(){return Math.min(br(void 0,a.state,a.props),a.state.current+(a.props.showLessItems?3:5))},a.getItemIcon=function(c,d){var f=a.props.prefixCls,v=c||G.createElement("button",{type:"button","aria-label":d,className:"".concat(f,"-item-link")});return typeof c=="function"&&(v=G.createElement(c,p({},a.props))),v},a.savePaginationNode=function(c){a.paginationNode=c},a.isValid=function(c){var d=a.props.total;return mc(c)&&c!==a.state.current&&mc(d)&&d>0},a.shouldDisplayQuickJumper=function(){var c=a.props,d=c.showQuickJumper,f=c.total,v=a.state.pageSize;return f<=v?!1:d},a.handleKeyDown=function(c){(c.keyCode===Hr.ARROW_UP||c.keyCode===Hr.ARROW_DOWN)&&c.preventDefault()},a.handleKeyUp=function(c){var d=a.getValidValue(c),f=a.state.currentInputValue;d!==f&&a.setState({currentInputValue:d}),c.keyCode===Hr.ENTER?a.handleChange(d):c.keyCode===Hr.ARROW_UP?a.handleChange(d-1):c.keyCode===Hr.ARROW_DOWN&&a.handleChange(d+1)},a.handleBlur=function(c){var d=a.getValidValue(c);a.handleChange(d)},a.changePageSize=function(c){var d=a.state.current,f=br(c,a.state,a.props);d=d>f?f:d,f===0&&(d=a.state.current),typeof c=="number"&&("pageSize"in a.props||a.setState({pageSize:c}),"current"in a.props||a.setState({current:d,currentInputValue:d})),a.props.onShowSizeChange(d,c),"onChange"in a.props&&a.props.onChange&&a.props.onChange(d,c)},a.handleChange=function(c){var d=a.props,f=d.disabled,v=d.onChange,m=a.state,h=m.pageSize,y=m.current,g=m.currentInputValue;if(a.isValid(c)&&!f){var b=br(void 0,a.state,a.props),x=c;return c>b?x=b:c<1&&(x=1),"current"in a.props||a.setState({current:x}),x!==g&&a.setState({currentInputValue:x}),v(x,h),x}return y},a.prev=function(){a.hasPrev()&&a.handleChange(a.state.current-1)},a.next=function(){a.hasNext()&&a.handleChange(a.state.current+1)},a.jumpPrev=function(){a.handleChange(a.getJumpPrevPage())},a.jumpNext=function(){a.handleChange(a.getJumpNextPage())},a.hasPrev=function(){return a.state.current>1},a.hasNext=function(){return a.state.current2?f-2:0),m=2;m=l?u=l:u=Number(o),u}},{key:"getShowSizeChanger",value:function(){var a=this.props,o=a.showSizeChanger,l=a.total,i=a.totalBoundaryShowSizeChanger;return typeof o<"u"?o:l>i}},{key:"renderPrev",value:function(a){var o=this.props,l=o.prevIcon,i=o.itemRender,u=i(a,"prev",this.getItemIcon(l,"prev page")),c=!this.hasPrev();return s.isValidElement(u)?s.cloneElement(u,{disabled:c}):u}},{key:"renderNext",value:function(a){var o=this.props,l=o.nextIcon,i=o.itemRender,u=i(a,"next",this.getItemIcon(l,"next page")),c=!this.hasNext();return s.isValidElement(u)?s.cloneElement(u,{disabled:c}):u}},{key:"render",value:function(){var a=this,o=this.props,l=o.prefixCls,i=o.className,u=o.style,c=o.disabled,d=o.hideOnSinglePage,f=o.total,v=o.locale,m=o.showQuickJumper,h=o.showLessItems,y=o.showTitle,g=o.showTotal,b=o.simple,x=o.itemRender,S=o.showPrevNextJumpers,w=o.jumpPrevIcon,E=o.jumpNextIcon,P=o.selectComponentClass,T=o.selectPrefixCls,M=o.pageSizeOptions,k=this.state,D=k.current,O=k.pageSize,$=k.currentInputValue;if(d===!0&&f<=O)return null;var F=br(void 0,this.state,this.props),N=[],R=null,I=null,L=null,j=null,_=null,A=m&&m.goButton,K=h?1:2,z=D-1>0?D-1:0,V=D+1f?f:D*O]));if(b)return A&&(typeof A=="boolean"?_=G.createElement("button",{type:"button",onClick:this.handleGoTO,onKeyUp:this.handleGoTO},v.jump_to_confirm):_=G.createElement("span",{onClick:this.handleGoTO,onKeyUp:this.handleGoTO},A),_=G.createElement("li",{title:y?"".concat(v.jump_to).concat(D,"/").concat(F):null,className:"".concat(l,"-simple-pager")},_)),G.createElement("ul",ne({className:pe(l,"".concat(l,"-simple"),B({},"".concat(l,"-disabled"),c),i),style:u,ref:this.savePaginationNode},X),W,G.createElement("li",{title:y?v.prev_page:null,onClick:this.prev,tabIndex:this.hasPrev()?0:null,onKeyPress:this.runIfEnterPrev,className:pe("".concat(l,"-prev"),B({},"".concat(l,"-disabled"),!this.hasPrev())),"aria-disabled":!this.hasPrev()},this.renderPrev(z)),G.createElement("li",{title:y?"".concat(D,"/").concat(F):null,className:"".concat(l,"-simple-pager")},G.createElement("input",{type:"text",value:$,disabled:c,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onChange:this.handleKeyUp,onBlur:this.handleBlur,size:"3"}),G.createElement("span",{className:"".concat(l,"-slash")},"/"),F),G.createElement("li",{title:y?v.next_page:null,onClick:this.next,tabIndex:this.hasPrev()?0:null,onKeyPress:this.runIfEnterNext,className:pe("".concat(l,"-next"),B({},"".concat(l,"-disabled"),!this.hasNext())),"aria-disabled":!this.hasNext()},this.renderNext(V)),_);if(F<=3+K*2){var Z={locale:v,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,showTitle:y,itemRender:x};F||N.push(G.createElement(Za,ne({},Z,{key:"noPager",page:1,className:"".concat(l,"-item-disabled")})));for(var U=1;U<=F;U+=1){var ae=D===U;N.push(G.createElement(Za,ne({},Z,{key:U,page:U,active:ae})))}}else{var q=h?v.prev_3:v.prev_5,te=h?v.next_3:v.next_5;S&&(R=G.createElement("li",{title:y?q:null,key:"prev",onClick:this.jumpPrev,tabIndex:"0",onKeyPress:this.runIfEnterJumpPrev,className:pe("".concat(l,"-jump-prev"),B({},"".concat(l,"-jump-prev-custom-icon"),!!w))},x(this.getJumpPrevPage(),"jump-prev",this.getItemIcon(w,"prev page"))),I=G.createElement("li",{title:y?te:null,key:"next",tabIndex:"0",onClick:this.jumpNext,onKeyPress:this.runIfEnterJumpNext,className:pe("".concat(l,"-jump-next"),B({},"".concat(l,"-jump-next-custom-icon"),!!E))},x(this.getJumpNextPage(),"jump-next",this.getItemIcon(E,"next page")))),j=G.createElement(Za,{locale:v,last:!0,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:F,page:F,active:!1,showTitle:y,itemRender:x}),L=G.createElement(Za,{locale:v,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:1,page:1,active:!1,showTitle:y,itemRender:x});var ue=Math.max(1,D-K),Y=Math.min(D+K,F);D-1<=K&&(Y=1+K*2),F-D<=K&&(ue=F-K*2);for(var J=ue;J<=Y;J+=1){var Q=D===J;N.push(G.createElement(Za,{locale:v,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:J,page:J,active:Q,showTitle:y,itemRender:x}))}D-1>=K*2&&D!==1+2&&(N[0]=s.cloneElement(N[0],{className:"".concat(l,"-item-after-jump-prev")}),N.unshift(R)),F-D>=K*2&&D!==F-2&&(N[N.length-1]=s.cloneElement(N[N.length-1],{className:"".concat(l,"-item-before-jump-next")}),N.push(I)),ue!==1&&N.unshift(L),Y!==F&&N.push(j)}var ie=!this.hasPrev()||!F,le=!this.hasNext()||!F;return G.createElement("ul",ne({className:pe(l,i,B({},"".concat(l,"-disabled"),c)),style:u,ref:this.savePaginationNode},X),W,G.createElement("li",{title:y?v.prev_page:null,onClick:this.prev,tabIndex:ie?null:0,onKeyPress:this.runIfEnterPrev,className:pe("".concat(l,"-prev"),B({},"".concat(l,"-disabled"),ie)),"aria-disabled":ie},this.renderPrev(z)),N,G.createElement("li",{title:y?v.next_page:null,onClick:this.next,tabIndex:le?null:0,onKeyPress:this.runIfEnterNext,className:pe("".concat(l,"-next"),B({},"".concat(l,"-disabled"),le)),"aria-disabled":le},this.renderNext(V)),G.createElement(Dv,{disabled:c,locale:v,rootPrefixCls:l,selectComponentClass:P,selectPrefixCls:T,changeSize:this.getShowSizeChanger()?this.changePageSize:null,current:D,pageSize:O,pageSizeOptions:M,quickGo:this.shouldDisplayQuickJumper()?this.handleChange:null,goButton:A}))}}],[{key:"getDerivedStateFromProps",value:function(a,o){var l={};if("current"in a&&(l.current=a.current,a.current!==o.current&&(l.currentInputValue=l.current)),"pageSize"in a&&a.pageSize!==o.pageSize){var i=o.current,u=br(a.pageSize,o,a);i=i>u?u:i,"current"in a||(l.current=i,l.currentInputValue=i),l.pageSize=a.pageSize}return l}}]),r}(G.Component);Iv.defaultProps={defaultCurrent:1,total:0,defaultPageSize:10,onChange:fs,className:"",selectPrefixCls:"rc-select",prefixCls:"rc-pagination",selectComponentClass:null,hideOnSinglePage:!1,showPrevNextJumpers:!0,showQuickJumper:!1,showLessItems:!1,showTitle:!0,onShowSizeChange:fs,locale:Ov,style:{},itemRender:Hb,totalBoundaryShowSizeChanger:50};var _v=function(e){return s.createElement(Nr,ne({},e,{size:"small"}))},Lv=function(e){return s.createElement(Nr,ne({},e,{size:"middle"}))};_v.Option=Nr.Option;Lv.Option=Nr.Option;var Wb=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a=d&&iv?"true":"false","aria-posinset":v+1,"aria-setsize":m,tabIndex:u?-1:0},G.createElement("div",{className:"".concat(c,"-first")},y),G.createElement("div",{className:"".concat(c,"-second")},y)));return f&&(g=f(g,this.props)),g}}]),r}(G.Component);function hc(){}var jv=function(t){yn(r,t);var e=bn(r);function r(n){var a;Cn(this,r),a=e.call(this,n),a.stars=void 0,a.rate=void 0,a.onHover=function(l,i){var u=a.props.onHoverChange,c=a.getStarValue(i,l.pageX),d=a.state.cleanedValue;c!==d&&a.setState({hoverValue:c,cleanedValue:null}),u(c)},a.onMouseLeave=function(){var l=a.props.onHoverChange;a.setState({hoverValue:void 0,cleanedValue:null}),l(void 0)},a.onClick=function(l,i){var u=a.props.allowClear,c=a.state.value,d=a.getStarValue(i,l.pageX),f=!1;u&&(f=d===c),a.onMouseLeave(),a.changeValue(f?0:d),a.setState({cleanedValue:f?d:null})},a.onFocus=function(){var l=a.props.onFocus;a.setState({focused:!0}),l&&l()},a.onBlur=function(){var l=a.props.onBlur;a.setState({focused:!1}),l&&l()},a.onKeyDown=function(l){var i=l.keyCode,u=a.props,c=u.count,d=u.allowHalf,f=u.onKeyDown,v=u.direction,m=v==="rtl",h=a.state.value;i===Ye.RIGHT&&h0&&!m||i===Ye.RIGHT&&h>0&&m?(d?h-=.5:h-=1,a.changeValue(h),l.preventDefault()):i===Ye.LEFT&&hm/2||!c&&o-v=r}function wC(t){return t&&Ve(t)==="object"&&!Array.isArray(t)&&!s.isValidElement(t)}function PC(t){return typeof t=="string"?!0:yp(t)}var EC=function(e){var r=e.ellipsis,n=e.rowType,a=e.children,o,l=r===!0?{showTitle:!0}:r;return l&&(l.showTitle||n==="header")&&(typeof a=="string"||typeof a=="number"?o=a.toString():s.isValidElement(a)&&typeof a.props.children=="string"&&(o=a.props.children)),o};function kC(t,e){var r,n,a,o=t.prefixCls,l=t.className,i=t.record,u=t.index,c=t.renderIndex,d=t.dataIndex,f=t.render,v=t.children,m=t.component,h=m===void 0?"td":m,y=t.colSpan,g=t.rowSpan,b=t.fixLeft,x=t.fixRight,S=t.firstFixLeft,w=t.lastFixLeft,E=t.firstFixRight,P=t.lastFixRight,T=t.appendNode,M=t.additionalProps,k=M===void 0?{}:M,D=t.ellipsis,O=t.align,$=t.rowType,F=t.isSticky,N=t.hovering,R=t.onHover,I="".concat(o,"-cell"),L=s.useContext(Wv),j=s.useContext(Bv),_=s.useContext(cl),A=_.allColumnsFixedLeft,K=s.useMemo(function(){if(vs(v))return[v];var oe=zv(i,d),se=oe,he=void 0;if(f){var be=f(oe,i,c);wC(be)?(se=be.children,he=be.props,L.renderWithProps=!0):se=be}return[se,he]},[L.renderWithProps?Math.random():0,v,d,L,i,f,c]),z=ee(K,2),V=z[0],X=z[1],W=V;Ve(W)==="object"&&!Array.isArray(W)&&!s.isValidElement(W)&&(W=null),D&&(w||E)&&(W=s.createElement("span",{className:"".concat(I,"-content")},W));var Z=X||{},U=Z.colSpan,ae=Z.rowSpan,q=Z.style,te=Z.className,ue=Le(Z,xC),Y=(r=U!==void 0?U:y)!==null&&r!==void 0?r:1,J=(n=ae!==void 0?ae:g)!==null&&n!==void 0?n:1;if(Y===0||J===0)return null;var Q={},ie=typeof b=="number"&&j,le=typeof x=="number"&&j;ie&&(Q.position="sticky",Q.left=b),le&&(Q.position="sticky",Q.right=x);var ge={};O&&(ge.textAlign=O);var Pe=function(se){var he;i&&R(u,u+J-1),k==null||(he=k.onMouseEnter)===null||he===void 0||he.call(k,se)},ve=function(se){var he;i&&R(-1,-1),k==null||(he=k.onMouseLeave)===null||he===void 0||he.call(k,se)},ce=EC({rowType:$,ellipsis:D,children:V}),fe=p(p(p({title:ce},ue),k),{},{colSpan:Y!==1?Y:null,rowSpan:J!==1?J:null,className:pe(I,l,(a={},B(a,"".concat(I,"-fix-left"),ie&&j),B(a,"".concat(I,"-fix-left-first"),S&&j),B(a,"".concat(I,"-fix-left-last"),w&&j),B(a,"".concat(I,"-fix-left-all"),w&&A&&j),B(a,"".concat(I,"-fix-right"),le&&j),B(a,"".concat(I,"-fix-right-first"),E&&j),B(a,"".concat(I,"-fix-right-last"),P&&j),B(a,"".concat(I,"-ellipsis"),D),B(a,"".concat(I,"-with-append"),T),B(a,"".concat(I,"-fix-sticky"),(ie||le)&&F&&j),B(a,"".concat(I,"-row-hover"),!X&&N),a),k.className,te),style:p(p(p(p({},k.style),ge),Q),q),onMouseEnter:Pe,onMouseLeave:ve,ref:PC(h)?e:null});return s.createElement(h,fe,T,W)}var Uv=s.forwardRef(kC);Uv.displayName="Cell";var RC=["expanded","className","hovering"],FC=s.memo(Uv,function(t,e){return e.shouldCellUpdate?RC.every(function(r){return t[r]===e[r]})&&!e.shouldCellUpdate(e.record,t.record):ou(t,e)}),Vo=s.forwardRef(function(t,e){var r=t.index,n=t.additionalProps,a=n===void 0?{}:n,o=t.colSpan,l=t.rowSpan,i=a.colSpan,u=a.rowSpan,c=o??i,d=l??u,f=CC(Hv,function(h){var y=SC(r,d||1,h==null?void 0:h.startRow,h==null?void 0:h.endRow);return{onHover:h==null?void 0:h.onHover,hovering:y}}),v=f.onHover,m=f.hovering;return s.createElement(FC,ne({},t,{colSpan:c,rowSpan:d,hovering:m,ref:e,onHover:v}))});Vo.displayName="WrappedCell";var Yn=s.createContext(null);function mu(t,e,r,n,a){var o=r[t]||{},l=r[e]||{},i,u;o.fixed==="left"?i=n.left[t]:l.fixed==="right"&&(u=n.right[e]);var c=!1,d=!1,f=!1,v=!1,m=r[e+1],h=r[t-1];if(a==="rtl"){if(i!==void 0){var y=h&&h.fixed==="left";v=!y}else if(u!==void 0){var g=m&&m.fixed==="right";f=!g}}else if(i!==void 0){var b=m&&m.fixed==="left";c=!b}else if(u!==void 0){var x=h&&h.fixed==="right";d=!x}return{fixLeft:i,fixRight:u,lastFixLeft:c,firstFixRight:d,lastFixRight:f,firstFixLeft:v,isSticky:n.isSticky}}function Yv(t){var e=t.cells,r=t.stickyOffsets,n=t.flattenColumns,a=t.rowComponent,o=t.cellComponent,l=t.onHeaderRow,i=t.index,u=s.useContext(Yn),c=u.prefixCls,d=u.direction,f;l&&(f=l(e.map(function(m){return m.column}),i));var v=ul(e.map(function(m){return m.column}));return s.createElement(a,f,e.map(function(m,h){var y=m.column,g=mu(m.colStart,m.colEnd,n,r,d),b;return y&&y.onHeaderCell&&(b=m.column.onHeaderCell(y)),s.createElement(Vo,ne({},m,{ellipsis:y.ellipsis,align:y.align,component:o,prefixCls:c,key:v[h]},g,{additionalProps:b,rowType:"header"}))}))}Yv.displayName="HeaderRow";function MC(t){var e=[];function r(l,i){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;e[u]=e[u]||[];var c=i,d=l.filter(Boolean).map(function(f){var v={key:f.key,className:f.className||"",children:f.title,column:f,colStart:c},m=1,h=f.children;return h&&h.length>0&&(m=r(h,c,u+1).reduce(function(y,g){return y+g},0),v.hasSubColumns=!0),"colSpan"in f&&(m=f.colSpan),"rowSpan"in f&&(v.rowSpan=f.rowSpan),v.colSpan=m,v.colEnd=v.colStart+m-1,e[u].push(v),c+=m,m});return d}r(t,0);for(var n=e.length,a=function(i){e[i].forEach(function(u){!("rowSpan"in u)&&!u.hasSubColumns&&(u.rowSpan=n-i)})},o=0;o1?ie-1:0),ge=1;ge0?[].concat(De(e),De(ms(o).map(function(l){return p({fixed:a},l)}))):[].concat(De(e),[p(p({},r),{},{fixed:a})])},[])}function jC(t){return t.map(function(e){var r=e.fixed,n=Le(e,LC),a=r;return r==="left"?a="right":r==="right"&&(a="left"),p({fixed:a},n)})}function AC(t,e){var r=t.prefixCls,n=t.columns,a=t.children,o=t.expandable,l=t.expandedKeys,i=t.columnTitle,u=t.getRowKey,c=t.onTriggerExpand,d=t.expandIcon,f=t.rowExpandable,v=t.expandIconColumnIndex,m=t.direction,h=t.expandRowByClick,y=t.columnWidth,g=t.fixed,b=s.useMemo(function(){return n||hu(a)},[n,a]),x=s.useMemo(function(){if(o){var E,P=b.slice();if(!P.includes(Wr)){var T=v||0;T>=0&&P.splice(T,0,Wr)}var M=P.indexOf(Wr);P=P.filter(function($,F){return $!==Wr||F===M});var k=b[M],D;(g==="left"||g)&&!v?D="left":(g==="right"||g)&&v===b.length?D="right":D=k?k.fixed:null;var O=(E={},B(E,uo,{className:"".concat(r,"-expand-icon-col"),columnType:"EXPAND_COLUMN"}),B(E,"title",i),B(E,"fixed",D),B(E,"className","".concat(r,"-row-expand-icon-cell")),B(E,"width",y),B(E,"render",function(F,N,R){var I=u(N,R),L=l.has(I),j=f?f(N):!0,_=d({prefixCls:r,expanded:L,expandable:j,record:N,onExpand:c});return h?s.createElement("span",{onClick:function(K){return K.stopPropagation()}},_):_}),E);return P.map(function($){return $===Wr?O:$})}return b.filter(function($){return $!==Wr})},[o,b,u,l,d,m]),S=s.useMemo(function(){var E=x;return e&&(E=e(E)),E.length||(E=[{render:function(){return null}}]),E},[e,x,m]),w=s.useMemo(function(){return m==="rtl"?jC(ms(S)):ms(S)},[S,m]);return[S,w]}function em(t){var e=s.useRef(t),r=s.useState({}),n=ee(r,2),a=n[1],o=s.useRef(null),l=s.useRef([]);function i(u){l.current.push(u);var c=Promise.resolve();o.current=c,c.then(function(){if(o.current===c){var d=l.current,f=e.current;l.current=[],d.forEach(function(v){e.current=v(e.current)}),o.current=null,f!==e.current&&a({})}})}return s.useEffect(function(){return function(){o.current=null}},[]),[e.current,i]}function KC(t){var e=s.useRef(t||null),r=s.useRef();function n(){window.clearTimeout(r.current)}function a(l){e.current=l,n(),r.current=window.setTimeout(function(){e.current=null,r.current=void 0},100)}function o(){return e.current}return s.useEffect(function(){return n},[]),[a,o]}function VC(t,e,r){var n=s.useMemo(function(){for(var a=[],o=[],l=0,i=0,u=0;u=0;i-=1){var u=e[i],c=r&&r[i],d=c&&c[uo];if(u||d||l){var f=d||{};f.columnType;var v=Le(f,zC);a.unshift(s.createElement("col",ne({key:i,style:{width:u}},v))),l=!0}}return s.createElement("colgroup",null,a)}function Cc(t){var e=t.className,r=t.children;return s.createElement("div",{className:e},r)}var nm=s.createContext({});function BC(t){var e=t.className,r=t.index,n=t.children,a=t.colSpan,o=a===void 0?1:a,l=t.rowSpan,i=t.align,u=s.useContext(Yn),c=u.prefixCls,d=u.direction,f=s.useContext(nm),v=f.scrollColumnIndex,m=f.stickyOffsets,h=f.flattenColumns,y=r+o-1,g=y+1===v?o+1:o,b=mu(r,r+g-1,h,m,d);return s.createElement(Vo,ne({className:e,index:r,component:"td",prefixCls:c,record:null,dataIndex:null,align:i,colSpan:g,rowSpan:l,render:function(){return n}},b))}var HC=["children"];function WC(t){var e=t.children,r=Le(t,HC);return s.createElement("tr",r,e)}function dl(t){var e=t.children;return e}dl.Row=WC;dl.Cell=BC;function yi(t){var e=t.children,r=t.stickyOffsets,n=t.flattenColumns,a=s.useContext(Yn),o=a.prefixCls,l=n.length-1,i=n[l],u=s.useMemo(function(){return{stickyOffsets:r,flattenColumns:n,scrollColumnIndex:i!=null&&i.scrollbar?l:null}},[i,n,l,r]);return s.createElement(nm.Provider,{value:u},s.createElement("tfoot",{className:"".concat(o,"-summary")},e))}var rm=dl;function UC(t){var e,r=t.prefixCls,n=t.record,a=t.onExpand,o=t.expanded,l=t.expandable,i="".concat(r,"-row-expand-icon");if(!l)return s.createElement("span",{className:pe(i,"".concat(r,"-row-spaced"))});var u=function(d){a(n,d),d.stopPropagation()};return s.createElement("span",{className:pe(i,(e={},B(e,"".concat(r,"-row-expanded"),o),B(e,"".concat(r,"-row-collapsed"),!o),e)),onClick:u})}function YC(t,e,r){var n=[];function a(o){(o||[]).forEach(function(l,i){n.push(e(l,i)),a(l[r])})}return a(t),n}var GC=function(e,r){var n,a,o=e.scrollBodyRef,l=e.onScroll,i=e.offsetScroll,u=e.container,c=s.useContext(Yn),d=c.prefixCls,f=((n=o.current)===null||n===void 0?void 0:n.scrollWidth)||0,v=((a=o.current)===null||a===void 0?void 0:a.clientWidth)||0,m=f&&v*(v/f),h=s.useRef(),y=em({scrollLeft:0,isHiddenScrollBar:!1}),g=ee(y,2),b=g[0],x=g[1],S=s.useRef({delta:0,x:0}),w=s.useState(!1),E=ee(w,2),P=E[0],T=E[1],M=function(){T(!1)},k=function(N){N.persist(),S.current.delta=N.pageX-b.scrollLeft,S.current.x=0,T(!0),N.preventDefault()},D=function(N){var R,I=N||((R=window)===null||R===void 0?void 0:R.event),L=I.buttons;if(!P||L===0){P&&T(!1);return}var j=S.current.x+N.pageX-S.current.x-S.current.delta;j<=0&&(j=0),j+m>=v&&(j=v-m),l({scrollLeft:j/v*(f+2)}),S.current.x=N.pageX},O=function(){if(o.current){var N=ds(o.current).top,R=N+o.current.offsetHeight,I=u===window?document.documentElement.scrollTop+window.innerHeight:ds(u).top+u.clientHeight;R-Zu()<=I||N>=I-i?x(function(L){return p(p({},L),{},{isHiddenScrollBar:!0})}):x(function(L){return p(p({},L),{},{isHiddenScrollBar:!1})})}},$=function(N){x(function(R){return p(p({},R),{},{scrollLeft:N/f*v||0})})};return s.useImperativeHandle(r,function(){return{setScrollLeft:$}}),s.useEffect(function(){var F=nr(document.body,"mouseup",M,!1),N=nr(document.body,"mousemove",D,!1);return O(),function(){F.remove(),N.remove()}},[m,P]),s.useEffect(function(){var F=nr(u,"scroll",O,!1),N=nr(window,"resize",O,!1);return function(){F.remove(),N.remove()}},[u]),s.useEffect(function(){b.isHiddenScrollBar||x(function(F){var N=o.current;return N?p(p({},F),{},{scrollLeft:N.scrollLeft/N.scrollWidth*N.clientWidth}):F})},[b.isHiddenScrollBar]),f<=v||!m||b.isHiddenScrollBar?null:s.createElement("div",{style:{height:Zu(),width:v,bottom:i},className:"".concat(d,"-sticky-scroll")},s.createElement("div",{onMouseDown:k,ref:h,className:pe("".concat(d,"-sticky-scroll-bar"),B({},"".concat(d,"-sticky-scroll-bar-active"),P)),style:{width:"".concat(m,"px"),transform:"translate3d(".concat(b.scrollLeft,"px, 0, 0)")}}))};const qC=s.forwardRef(GC);var xc=bp()?window:null;function XC(t,e){var r=Ve(t)==="object"?t:{},n=r.offsetHeader,a=n===void 0?0:n,o=r.offsetSummary,l=o===void 0?0:o,i=r.offsetScroll,u=i===void 0?0:i,c=r.getContainer,d=c===void 0?function(){return xc}:c,f=d()||xc;return s.useMemo(function(){var v=!!t;return{isSticky:v,stickyClassName:v?"".concat(e,"-sticky-holder"):"",offsetHeader:a,offsetSummary:l,offsetScroll:u,container:f}},[u,a,l,e,f])}var ZC=["className","noData","columns","flattenColumns","colWidths","columCount","stickyOffsets","direction","fixHeader","stickyTopOffset","stickyBottomOffset","stickyClassName","onScroll","maxContentScroll","children"];function QC(t,e){return s.useMemo(function(){for(var r=[],n=0;n=0})},[o]),D=o[o.length-1],O={fixed:D?D.fixed:null,scrollbar:!0,onHeaderCell:function(){return{className:"".concat(S,"-cell-scrollbar")}}},$=s.useMemo(function(){return P?[].concat(De(a),[O]):a},[P,a]),F=s.useMemo(function(){return P?[].concat(De(o),[O]):o},[P,o]),N=s.useMemo(function(){var I=u.right,L=u.left;return p(p({},u),{},{left:c==="rtl"?[].concat(De(L.map(function(j){return j+P})),[0]):L,right:c==="rtl"?I:[].concat(De(I.map(function(j){return j+P})),[0]),isSticky:E})},[P,u,E]),R=QC(l,i);return s.createElement("div",{style:p({overflow:"hidden"},E?{top:f,bottom:v}:{}),ref:M,className:pe(r,B({},m,!!m))},s.createElement("table",{style:{tableLayout:"fixed",visibility:n||R?null:"hidden"}},(!n||!y||k)&&s.createElement(tm,{colWidths:R?[].concat(De(R),[P]):[],columCount:i+1,columns:F}),g(p(p({},b),{},{stickyOffsets:N,columns:$,flattenColumns:F}))))});hs.displayName="FixedHolder";var JC=[],e2={},Ei="rc-table-internal-hook",t2=s.memo(function(t){var e=t.children;return e},function(t,e){return ou(t.props,e.props)?t.pingLeft!==e.pingLeft||t.pingRight!==e.pingRight:!1});function ra(t){var e,r=t.prefixCls,n=t.className,a=t.rowClassName,o=t.style,l=t.data,i=t.rowKey,u=t.scroll,c=t.tableLayout,d=t.direction,f=t.title,v=t.footer,m=t.summary,h=t.id,y=t.showHeader,g=t.components,b=t.emptyText,x=t.onRow,S=t.onHeaderRow,w=t.internalHooks,E=t.transformColumns,P=t.internalRefs,T=t.sticky,M=l||JC,k=!!M.length,D=s.useCallback(function(st,ht){return zv(g||{},st)||ht},[g]),O=s.useMemo(function(){return typeof i=="function"?i:function(st){var ht=st&&st[i];return ht}},[i]),$=IC(t),F=$.expandIcon,N=$.expandedRowKeys,R=$.defaultExpandedRowKeys,I=$.defaultExpandAllRows,L=$.expandedRowRender,j=$.columnTitle,_=$.onExpand,A=$.onExpandedRowsChange,K=$.expandRowByClick,z=$.rowExpandable,V=$.expandIconColumnIndex,X=$.expandedRowClassName,W=$.childrenColumnName,Z=$.indentSize,U=F||UC,ae=W||"children",q=s.useMemo(function(){return L?"row":t.expandable&&w===Ei&&t.expandable.__PARENT_RENDER_ICON__||M.some(function(st){return st&&Ve(st)==="object"&&st[ae]})?"nest":!1},[!!L,M]),te=s.useState(function(){return R||(I?YC(M,O,ae):[])}),ue=ee(te,2),Y=ue[0],J=ue[1],Q=s.useMemo(function(){return new Set(N||Y||[])},[N,Y]),ie=s.useCallback(function(st){var ht=O(st,M.indexOf(st)),Nt,Zt=Q.has(ht);Zt?(Q.delete(ht),Nt=De(Q)):Nt=[].concat(De(Q),[ht]),J(Nt),_&&_(!Zt,st),A&&A(Nt)},[O,Q,M,_,A]),le=s.useState(0),ge=ee(le,2),Pe=ge[0],ve=ge[1],ce=AC(p(p(p({},t),$),{},{expandable:!!L,columnTitle:j,expandedKeys:Q,getRowKey:O,onTriggerExpand:ie,expandIcon:U,expandIconColumnIndex:V,direction:d}),w===Ei?E:null),fe=ee(ce,2),oe=fe[0],se=fe[1],he=s.useMemo(function(){return{columns:oe,flattenColumns:se}},[oe,se]),be=s.useRef(),Re=s.useRef(),Fe=s.useRef(),Ee=s.useRef(),ke=s.useRef(),we=s.useState(!1),Ge=ee(we,2),Qe=Ge[0],ct=Ge[1],dt=s.useState(!1),mt=ee(dt,2),We=mt[0],Oe=mt[1],ot=em(new Map),Je=ee(ot,2),Se=Je[0],He=Je[1],je=ul(se),ze=je.map(function(st){return Se.get(st)}),ye=s.useMemo(function(){return ze},[ze.join("_")]),de=VC(ye,se.length,d),Ce=u&&vs(u.y),Me=u&&vs(u.x)||!!$.fixed,Be=Me&&se.some(function(st){var ht=st.fixed;return ht}),nt=s.useRef(),Ne=XC(T,r),xe=Ne.isSticky,qe=Ne.offsetHeader,it=Ne.offsetSummary,ft=Ne.offsetScroll,At=Ne.stickyClassName,Kt=Ne.container,Rt=m==null?void 0:m(M),zt=(Ce||xe)&&s.isValidElement(Rt)&&Rt.type===dl&&Rt.props.fixed,et,tt,lt;Ce&&(tt={overflowY:"scroll",maxHeight:u.y}),Me&&(et={overflowX:"auto"},Ce||(tt={overflowY:"hidden"}),lt={width:(u==null?void 0:u.x)===!0?"auto":u==null?void 0:u.x,minWidth:"100%"});var ut=s.useCallback(function(st,ht){Vf(be.current)&&He(function(Nt){if(Nt.get(st)!==ht){var Zt=new Map(Nt);return Zt.set(st,ht),Zt}return Nt})},[]),wt=KC(null),St=ee(wt,2),Ae=St[0],Ue=St[1];function Ie(st,ht){ht&&(typeof ht=="function"?ht(st):ht.scrollLeft!==st&&(ht.scrollLeft=st))}var _e=function(ht){var Nt=ht.currentTarget,Zt=ht.scrollLeft,Ha=d==="rtl",cn=typeof Zt=="number"?Zt:Nt.scrollLeft,mr=Nt||e2;if(!Ue()||Ue()===mr){var hr;Ae(mr),Ie(cn,Re.current),Ie(cn,Fe.current),Ie(cn,ke.current),Ie(cn,(hr=nt.current)===null||hr===void 0?void 0:hr.setScrollLeft)}if(Nt){var Ar=Nt.scrollWidth,pr=Nt.clientWidth;if(Ar===pr){ct(!1),Oe(!1);return}Ha?(ct(-cn0)):(ct(cn>0),Oe(cni))return!1;var c=o.get(t),d=o.get(e);if(c&&d)return c==e&&d==t;var f=-1,v=!0,m=r&H2?new K2:void 0;for(o.set(t,e),o.set(e,t);++f0&&arguments[0]!==void 0?arguments[0]:[],e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=t.length,n=e.length;if(Math.abs(r-n)!==1)return{add:!1,key:null};function a(o,l){var i=new Map;o.forEach(function(c){i.set(c,!0)});var u=l.filter(function(c){return!i.has(c)});return u.length===1?u[0]:null}return r ").concat(e);return e}var pm=s.forwardRef(function(t,e){var r=t.prefixCls,n=t.data;t.selectable,t.checkable;var a=t.expandedKeys,o=t.selectedKeys,l=t.checkedKeys,i=t.loadedKeys,u=t.loadingKeys,c=t.halfCheckedKeys,d=t.keyEntities,f=t.disabled,v=t.dragging,m=t.dragOverNodeKey,h=t.dropPosition,y=t.motion,g=t.height,b=t.itemHeight,x=t.virtual,S=t.focusable,w=t.activeItem,E=t.focused,P=t.tabIndex,T=t.onKeyDown,M=t.onFocus,k=t.onBlur,D=t.onActiveChange,O=t.onListChangeStart,$=t.onListChangeEnd,F=Le(t,j4),N=s.useRef(null),R=s.useRef(null);s.useImperativeHandle(e,function(){return{scrollTo:function(fe){N.current.scrollTo(fe)},getIndentWidth:function(){return R.current.offsetWidth}}});var I=s.useState(a),L=ee(I,2),j=L[0],_=L[1],A=s.useState(n),K=ee(A,2),z=K[0],V=K[1],X=s.useState(n),W=ee(X,2),Z=W[0],U=W[1],ae=s.useState([]),q=ee(ae,2),te=q[0],ue=q[1],Y=s.useState(null),J=ee(Y,2),Q=J[0],ie=J[1],le=s.useRef(n);le.current=n;function ge(){var ce=le.current;V(ce),U(ce),ue([]),ie(null),$()}nl(function(){_(a);var ce=L4(j,a);if(ce.key!==null)if(ce.add){var fe=z.findIndex(function(Fe){var Ee=Fe.key;return Ee===ce.key}),oe=Yc(Hc(z,n,ce.key),x,g,b),se=z.slice();se.splice(fe+1,0,Uc),U(se),ue(oe),ie("show")}else{var he=n.findIndex(function(Fe){var Ee=Fe.key;return Ee===ce.key}),be=Yc(Hc(n,z,ce.key),x,g,b),Re=n.slice();Re.splice(he+1,0,Uc),U(Re),ue(be),ie("hide")}else z!==n&&(V(n),U(n))},[a,n]),s.useEffect(function(){v||ge()},[v]);var Pe=y?Z:n,ve={expandedKeys:a,selectedKeys:o,loadedKeys:i,loadingKeys:u,checkedKeys:l,halfCheckedKeys:c,dragOverNodeKey:m,dropPosition:h,keyEntities:d};return s.createElement(s.Fragment,null,E&&w&&s.createElement("span",{style:Wc,"aria-live":"assertive"},K4(w)),s.createElement("div",null,s.createElement("input",{style:Wc,disabled:S===!1||f,tabIndex:S!==!1?P:null,onKeyDown:T,onFocus:M,onBlur:k,value:"",onChange:A4,"aria-label":"for screen reader"})),s.createElement("div",{className:"".concat(r,"-treenode"),"aria-hidden":!0,style:{position:"absolute",pointerEvents:"none",visibility:"hidden",height:0,overflow:"hidden",border:0,padding:0}},s.createElement("div",{className:"".concat(r,"-indent")},s.createElement("div",{ref:R,className:"".concat(r,"-indent-unit")}))),s.createElement(Kp,ne({},F,{data:Pe,itemKey:Gc,height:g,fullHeight:!1,virtual:x,itemHeight:b,prefixCls:"".concat(r,"-list"),ref:N,onVisibleChange:function(fe,oe){var se=new Set(fe),he=oe.filter(function(be){return!se.has(be)});he.some(function(be){return Gc(be)===Jr})&&ge()}}),function(ce){var fe=ce.pos,oe=ne({},(vm(ce.data),ce.data)),se=ce.title,he=ce.key,be=ce.isStart,Re=ce.isEnd,Fe=Lo(he,fe);delete oe.key,delete oe.children;var Ee=lo(Fe,ve);return s.createElement(_4,ne({},oe,Ee,{title:se,active:!!w&&he===w.key,pos:fe,data:ce.data,isStart:be,isEnd:Re,motion:y,motionNodes:he===Jr?te:null,motionType:Q,onMotionStart:O,onMotionEnd:ge,treeNodeRequiredProps:ve,onMouseMove:function(){D(null)}}))}))});pm.displayName="NodeList";function Kn(t,e){if(!t)return[];var r=t.slice(),n=r.indexOf(e);return n>=0&&r.splice(n,1),r}function er(t,e){var r=(t||[]).slice();return r.indexOf(e)===-1&&r.push(e),r}function wu(t){return t.split("-")}function V4(t,e){var r=[],n=mn(e,t);function a(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];o.forEach(function(l){var i=l.key,u=l.children;r.push(i),a(u)})}return a(n.children),r}function z4(t){if(t.parent){var e=wu(t.pos);return Number(e[e.length-1])===t.parent.children.length-1}return!1}function B4(t){var e=wu(t.pos);return Number(e[e.length-1])===0}function qc(t,e,r,n,a,o,l,i,u,c){var d,f=t.clientX,v=t.clientY,m=t.target.getBoundingClientRect(),h=m.top,y=m.height,g=(c==="rtl"?-1:1)*(((a==null?void 0:a.x)||0)-f),b=(g-12)/n,x=mn(i,r.props.eventKey);if(v-1.5?o({dragNode:$,dropNode:F,dropPosition:1})?k=1:N=!1:o({dragNode:$,dropNode:F,dropPosition:0})?k=0:o({dragNode:$,dropNode:F,dropPosition:1})?k=1:N=!1:o({dragNode:$,dropNode:F,dropPosition:1})?k=1:N=!1,{dropPosition:k,dropLevelOffset:D,dropTargetKey:x.key,dropTargetPos:x.pos,dragOverNodeKey:M,dropContainerKey:k===0?null:((d=x.parent)===null||d===void 0?void 0:d.key)||null,dropAllowed:N}}function Xc(t,e){if(t){var r=e.multiple;return r?t.slice():t.length?[t[0]]:t}}function jl(t){if(!t)return null;var e;if(Array.isArray(t))e={checkedKeys:t,halfCheckedKeys:void 0};else if(Ve(t)==="object")e={checkedKeys:t.checked||void 0,halfCheckedKeys:t.halfChecked||void 0};else return rn(!1,"`checkedKeys` is not an array or an object"),null;return e}function Ss(t,e){var r=new Set;function n(a){if(!r.has(a)){var o=mn(e,a);if(o){r.add(a);var l=o.parent,i=o.node;i.disabled||l&&n(l.key)}}}return(t||[]).forEach(function(a){n(a)}),De(r)}var H4=10,gl=function(t){yn(r,t);var e=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),l=0;l2&&arguments[2]!==void 0?arguments[2]:!1,f=n.state,v=f.dragChildrenKeys,m=f.dropPosition,h=f.dropTargetKey,y=f.dropTargetPos,g=f.dropAllowed;if(g){var b=n.props.onDrop;if(n.setState({dragOverNodeKey:null}),n.cleanDragState(),h!==null){var x=p(p({},lo(h,n.getTreeNodeRequiredProps())),{},{active:((c=n.getActiveItem())===null||c===void 0?void 0:c.key)===h,data:mn(n.state.keyEntities,h).node}),S=v.indexOf(h)!==-1;rn(!S,"Can not drop to dragNode's children node. This is a bug of rc-tree. Please report an issue.");var w=wu(y),E={event:i,node:Wt(x),dragNode:n.dragNode?Wt(n.dragNode.props):null,dragNodesKeys:[n.dragNode.props.eventKey].concat(v),dropToGap:m!==0,dropPosition:m+Number(w[w.length-1])};d||b==null||b(E),n.dragNode=null}}},n.cleanDragState=function(){var i=n.state.draggingNodeKey;i!==null&&n.setState({draggingNodeKey:null,dropPosition:null,dropContainerKey:null,dropTargetKey:null,dropLevelOffset:null,dropAllowed:!0,dragOverNodeKey:null}),n.dragStartMousePosition=null,n.currentMouseOverDroppableNodeKey=null},n.triggerExpandActionExpand=function(i,u){var c=n.state,d=c.expandedKeys,f=c.flattenNodes,v=u.expanded,m=u.key,h=u.isLeaf;if(!(h||i.shiftKey||i.metaKey||i.ctrlKey)){var y=f.filter(function(b){return b.key===m})[0],g=Wt(p(p({},lo(m,n.getTreeNodeRequiredProps())),{},{data:y.data}));n.setExpandedKeys(v?Kn(d,m):er(d,m)),n.onNodeExpand(i,g)}},n.onNodeClick=function(i,u){var c=n.props,d=c.onClick,f=c.expandAction;f==="click"&&n.triggerExpandActionExpand(i,u),d==null||d(i,u)},n.onNodeDoubleClick=function(i,u){var c=n.props,d=c.onDoubleClick,f=c.expandAction;f==="doubleClick"&&n.triggerExpandActionExpand(i,u),d==null||d(i,u)},n.onNodeSelect=function(i,u){var c=n.state.selectedKeys,d=n.state,f=d.keyEntities,v=d.fieldNames,m=n.props,h=m.onSelect,y=m.multiple,g=u.selected,b=u[v.key],x=!g;x?y?c=er(c,b):c=[b]:c=Kn(c,b);var S=c.map(function(w){var E=mn(f,w);return E?E.node:null}).filter(function(w){return w});n.setUncontrolledState({selectedKeys:c}),h==null||h(c,{event:"select",selected:x,node:u,selectedNodes:S,nativeEvent:i.nativeEvent})},n.onNodeCheck=function(i,u,c){var d=n.state,f=d.keyEntities,v=d.checkedKeys,m=d.halfCheckedKeys,h=n.props,y=h.checkStrictly,g=h.onCheck,b=u.key,x,S={event:"check",node:u,checked:c,nativeEvent:i.nativeEvent};if(y){var w=c?er(v,b):Kn(v,b),E=Kn(m,b);x={checked:w,halfChecked:E},S.checkedNodes=w.map(function(O){return mn(f,O)}).filter(function(O){return O}).map(function(O){return O.node}),n.setUncontrolledState({checkedKeys:w})}else{var P=Pn([].concat(De(v),[b]),!0,f),T=P.checkedKeys,M=P.halfCheckedKeys;if(!c){var k=new Set(T);k.delete(b);var D=Pn(Array.from(k),{checked:!1,halfCheckedKeys:M},f);T=D.checkedKeys,M=D.halfCheckedKeys}x=T,S.checkedNodes=[],S.checkedNodesPositions=[],S.halfCheckedKeys=M,T.forEach(function(O){var $=mn(f,O);if($){var F=$.node,N=$.pos;S.checkedNodes.push(F),S.checkedNodesPositions.push({node:F,pos:N})}}),n.setUncontrolledState({checkedKeys:T},!1,{halfCheckedKeys:M})}g==null||g(x,S)},n.onNodeLoad=function(i){var u=i.key,c=new Promise(function(d,f){n.setState(function(v){var m=v.loadedKeys,h=m===void 0?[]:m,y=v.loadingKeys,g=y===void 0?[]:y,b=n.props,x=b.loadData,S=b.onLoad;if(!x||h.indexOf(u)!==-1||g.indexOf(u)!==-1)return null;var w=x(i);return w.then(function(){var E=n.state.loadedKeys,P=er(E,u);S==null||S(P,{event:"load",node:i}),n.setUncontrolledState({loadedKeys:P}),n.setState(function(T){return{loadingKeys:Kn(T.loadingKeys,u)}}),d()}).catch(function(E){if(n.setState(function(T){return{loadingKeys:Kn(T.loadingKeys,u)}}),n.loadingRetryTimes[u]=(n.loadingRetryTimes[u]||0)+1,n.loadingRetryTimes[u]>=H4){var P=n.state.loadedKeys;rn(!1,"Retry for `loadData` many times but still failed. No more retry."),n.setUncontrolledState({loadedKeys:er(P,u)}),d()}f(E)}),{loadingKeys:er(g,u)}})});return c.catch(function(){}),c},n.onNodeMouseEnter=function(i,u){var c=n.props.onMouseEnter;c==null||c({event:i,node:u})},n.onNodeMouseLeave=function(i,u){var c=n.props.onMouseLeave;c==null||c({event:i,node:u})},n.onNodeContextMenu=function(i,u){var c=n.props.onRightClick;c&&(i.preventDefault(),c({event:i,node:u}))},n.onFocus=function(){var i=n.props.onFocus;n.setState({focused:!0});for(var u=arguments.length,c=new Array(u),d=0;d1&&arguments[1]!==void 0?arguments[1]:!1,c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null;if(!n.destroyed){var d=!1,f=!0,v={};Object.keys(i).forEach(function(m){if(m in n.props){f=!1;return}d=!0,v[m]=i[m]}),d&&(!u||f)&&n.setState(p(p({},v),c))}},n.scrollTo=function(i){n.listRef.current.scrollTo(i)},n}return xn(r,[{key:"componentDidMount",value:function(){this.destroyed=!1,this.onUpdated()}},{key:"componentDidUpdate",value:function(){this.onUpdated()}},{key:"onUpdated",value:function(){var a=this.props.activeKey;a!==void 0&&a!==this.state.activeKey&&(this.setState({activeKey:a}),a!==null&&this.scrollTo({key:a}))}},{key:"componentWillUnmount",value:function(){window.removeEventListener("dragend",this.onWindowDragEnd),this.destroyed=!0}},{key:"resetDragState",value:function(){this.setState({dragOverNodeKey:null,dropPosition:null,dropLevelOffset:null,dropTargetKey:null,dropContainerKey:null,dropTargetPos:null,dropAllowed:!1})}},{key:"render",value:function(){var a,o=this.state,l=o.focused,i=o.flattenNodes,u=o.keyEntities,c=o.draggingNodeKey,d=o.activeKey,f=o.dropLevelOffset,v=o.dropContainerKey,m=o.dropTargetKey,h=o.dropPosition,y=o.dragOverNodeKey,g=o.indent,b=this.props,x=b.prefixCls,S=b.className,w=b.style,E=b.showLine,P=b.focusable,T=b.tabIndex,M=T===void 0?0:T,k=b.selectable,D=b.showIcon,O=b.icon,$=b.switcherIcon,F=b.draggable,N=b.checkable,R=b.checkStrictly,I=b.disabled,L=b.motion,j=b.loadData,_=b.filterTreeNode,A=b.height,K=b.itemHeight,z=b.virtual,V=b.titleRender,X=b.dropIndicatorRender,W=b.onContextMenu,Z=b.onScroll,U=b.direction,ae=b.rootClassName,q=b.rootStyle,te=au(this.props,{aria:!0,data:!0}),ue;return F&&(Ve(F)==="object"?ue=F:typeof F=="function"?ue={nodeDraggable:F}:ue={}),s.createElement(Su.Provider,{value:{prefixCls:x,selectable:k,showIcon:D,icon:O,switcherIcon:$,draggable:ue,draggingNodeKey:c,checkable:N,checkStrictly:R,disabled:I,keyEntities:u,dropLevelOffset:f,dropContainerKey:v,dropTargetKey:m,dropPosition:h,dragOverNodeKey:y,indent:g,direction:U,dropIndicatorRender:X,loadData:j,filterTreeNode:_,titleRender:V,onNodeClick:this.onNodeClick,onNodeDoubleClick:this.onNodeDoubleClick,onNodeExpand:this.onNodeExpand,onNodeSelect:this.onNodeSelect,onNodeCheck:this.onNodeCheck,onNodeLoad:this.onNodeLoad,onNodeMouseEnter:this.onNodeMouseEnter,onNodeMouseLeave:this.onNodeMouseLeave,onNodeContextMenu:this.onNodeContextMenu,onNodeDragStart:this.onNodeDragStart,onNodeDragEnter:this.onNodeDragEnter,onNodeDragOver:this.onNodeDragOver,onNodeDragLeave:this.onNodeDragLeave,onNodeDragEnd:this.onNodeDragEnd,onNodeDrop:this.onNodeDrop}},s.createElement("div",{role:"tree",className:pe(x,S,ae,(a={},B(a,"".concat(x,"-show-line"),E),B(a,"".concat(x,"-focused"),l),B(a,"".concat(x,"-active-focused"),d!==null),a)),style:q},s.createElement(pm,ne({ref:this.listRef,prefixCls:x,style:w,data:i,disabled:I,selectable:k,checkable:!!N,motion:L,dragging:c!==null,height:A,itemHeight:K,virtual:z,focusable:P,focused:l,tabIndex:M,activeItem:this.getActiveItem(),onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.onKeyDown,onActiveChange:this.onActiveChange,onListChangeStart:this.onListChangeStart,onListChangeEnd:this.onListChangeEnd,onContextMenu:W,onScroll:Z},this.getTreeNodeRequiredProps(),te))))}}],[{key:"getDerivedStateFromProps",value:function(a,o){var l=o.prevProps,i={prevProps:a};function u(P){return!l&&P in a||l&&l[P]!==a[P]}var c,d=o.fieldNames;if(u("fieldNames")&&(d=Ti(a.fieldNames),i.fieldNames=d),u("treeData")?c=a.treeData:u("children")&&(rn(!1,"`children` of Tree is deprecated. Please use `treeData` instead."),c=Ev(a.children)),c){i.treeData=c;var f=jo(c,{fieldNames:d});i.keyEntities=p(B({},Jr,hm),f.keyEntities)}var v=i.keyEntities||o.keyEntities;if(u("expandedKeys")||l&&u("autoExpandParent"))i.expandedKeys=a.autoExpandParent||!l&&a.defaultExpandParent?Ss(a.expandedKeys,v):a.expandedKeys;else if(!l&&a.defaultExpandAll){var m=p({},v);delete m[Jr],i.expandedKeys=Object.keys(m).map(function(P){return m[P].key})}else!l&&a.defaultExpandedKeys&&(i.expandedKeys=a.autoExpandParent||a.defaultExpandParent?Ss(a.defaultExpandedKeys,v):a.defaultExpandedKeys);if(i.expandedKeys||delete i.expandedKeys,c||i.expandedKeys){var h=Il(c||o.treeData,i.expandedKeys||o.expandedKeys,d);i.flattenNodes=h}if(a.selectable&&(u("selectedKeys")?i.selectedKeys=Xc(a.selectedKeys,a):!l&&a.defaultSelectedKeys&&(i.selectedKeys=Xc(a.defaultSelectedKeys,a))),a.checkable){var y;if(u("checkedKeys")?y=jl(a.checkedKeys)||{}:!l&&a.defaultCheckedKeys?y=jl(a.defaultCheckedKeys)||{}:c&&(y=jl(a.checkedKeys)||{checkedKeys:o.checkedKeys,halfCheckedKeys:o.halfCheckedKeys}),y){var g=y,b=g.checkedKeys,x=b===void 0?[]:b,S=g.halfCheckedKeys,w=S===void 0?[]:S;if(!a.checkStrictly){var E=Pn(x,!0,v);x=E.checkedKeys,w=E.halfCheckedKeys}i.checkedKeys=x,i.halfCheckedKeys=w}}return u("loadedKeys")&&(i.loadedKeys=a.loadedKeys),i}}]),r}(s.Component);gl.defaultProps={prefixCls:"rc-tree",showLine:!1,showIcon:!0,selectable:!0,multiple:!1,checkable:!1,disabled:!1,checkStrictly:!1,draggable:!1,defaultExpandParent:!0,autoExpandParent:!1,defaultExpandAll:!1,defaultExpandedKeys:[],defaultCheckedKeys:[],defaultSelectedKeys:[],dropIndicatorRender:F4,allowDrop:function(){return!0},expandAction:!1};gl.TreeNode=Ca;var Zc=4;function W4(t){var e=t.dropPosition,r=t.dropLevelOffset,n=t.prefixCls,a=t.indent,o=t.direction,l=o===void 0?"ltr":o,i=l==="ltr"?"left":"right",u=l==="ltr"?"right":"left",c=B(B({},i,-r*a+Zc),u,0);switch(e){case-1:c.top=-3;break;case 1:c.bottom=-3;break;default:c.bottom=-3,c[i]=a+Zc;break}return G.createElement("div",{style:c,className:"".concat(n,"-drop-indicator")})}function gm(t,e,r,n){var a=n.isLeaf,o=n.expanded,l=n.loading;if(l)return s.createElement(Na,{className:"".concat(t,"-switcher-loading-icon")});var i;if(r&&Ve(r)==="object"&&(i=r.showLeafIcon),a){if(!r)return null;if(typeof i!="boolean"&&i){var u=typeof i=="function"?i(n):i,c="".concat(t,"-switcher-line-custom-icon");return Gu(u)?po(u,{className:pe(u.props.className||"",c)}):u}return i?s.createElement(tv,{className:"".concat(t,"-switcher-line-icon")}):s.createElement("span",{className:"".concat(t,"-switcher-leaf-line")})}var d="".concat(t,"-switcher-icon"),f=typeof e=="function"?e(n):e;return Gu(f)?po(f,{className:pe(f.props.className||"",d)}):f||(r?o?s.createElement(E0,{className:"".concat(t,"-switcher-line-icon")}):s.createElement(N0,{className:"".concat(t,"-switcher-line-icon")}):s.createElement(ig,{className:d}))}var U4=s.forwardRef(function(t,e){var r=s.useContext(Ut),n=r.getPrefixCls,a=r.direction,o=r.virtual,l=t.prefixCls,i=t.className,u=t.showIcon,c=u===void 0?!1:u,d=t.showLine,f=t.switcherIcon,v=t.blockNode,m=v===void 0?!1:v,h=t.children,y=t.checkable,g=y===void 0?!1:y,b=t.selectable,x=b===void 0?!0:b,S=t.draggable,w=t.motion,E=w===void 0?ne(ne({},Mp),{motionAppear:!1}):w,P=n("tree",l),T=ne(ne({},t),{checkable:g,selectable:x,showIcon:c,motion:E,blockNode:m,showLine:!!d,dropIndicatorRender:W4}),M=s.useMemo(function(){if(!S)return!1;var k={};switch(Ve(S)){case"function":k.nodeDraggable=S;break;case"object":k=ne({},S);break}return k.icon!==!1&&(k.icon=k.icon||s.createElement(C0,null)),k},[S]);return s.createElement(gl,ne({itemHeight:20,ref:e,virtual:o},T,{prefixCls:P,className:pe(B(B(B(B({},"".concat(P,"-icon-hide"),!c),"".concat(P,"-block-node"),m),"".concat(P,"-unselectable"),!x),"".concat(P,"-rtl"),a==="rtl"),i),direction:a,checkable:g&&s.createElement("span",{className:"".concat(P,"-checkbox-inner")}),selectable:x,switcherIcon:function(D){return gm(P,f,d,D)},draggable:M}),h)});const ym=U4;var tr;(function(t){t[t.None=0]="None",t[t.Start=1]="Start",t[t.End=2]="End"})(tr||(tr={}));function Pu(t,e){function r(n){var a=n.key,o=n.children;e(a,n)!==!1&&Pu(o||[],e)}t.forEach(r)}function Y4(t){var e=t.treeData,r=t.expandedKeys,n=t.startKey,a=t.endKey,o=[],l=tr.None;if(n&&n===a)return[n];if(!n||!a)return[];function i(u){return u===n||u===a}return Pu(e,function(u){if(l===tr.End)return!1;if(i(u)){if(o.push(u),l===tr.None)l=tr.Start;else if(l===tr.Start)return l=tr.End,!1}else l===tr.Start&&o.push(u);return r.includes(u)}),o}function Al(t,e){var r=De(e),n=[];return Pu(t,function(a,o){var l=r.indexOf(a);return l!==-1&&(n.push(o),r.splice(l,1)),!!r.length}),n}var Qc=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a0&&arguments[0]!==void 0?arguments[0]:{confirm:!1,closeDropdown:!1},we=ke.confirm,Ge=ke.closeDropdown;we&&ue([]),Ge&&$(!1),q(""),j(E?(P||[]).map(function(Qe){return String(Qe)}):[])},Q=function(){var ke=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{closeDropdown:!0},we=ke.closeDropdown;we&&$(!1),ue(L())},ie=function(ke){ke&&N!==void 0&&j(Kl(N)),$(ke),!ke&&!a.filterDropdown&&Y()},le=pe(B({},"".concat(o,"-menu-without-submenu"),!n3(a.filters||[]))),ge=function(ke){if(ke.target.checked){var we=ma(a==null?void 0:a.filters).map(function(Ge){return String(Ge)});j(we)}else j([])},Pe=function Ee(ke){var we=ke.filters;return(we||[]).map(function(Ge,Qe){var ct=String(Ge.value),dt={title:Ge.text,key:Ge.value!==void 0?ct:String(Qe)};return Ge.children&&(dt.children=Ee({filters:Ge.children})),dt})},ve=function Ee(ke){var we;return ne(ne({},ke),{text:ke.title,value:ke.key,children:((we=ke.children)===null||we===void 0?void 0:we.map(function(Ge){return Ee(Ge)}))||[]})},ce;if(typeof a.filterDropdown=="function")ce=a.filterDropdown({prefixCls:"".concat(o,"-custom"),setSelectedKeys:function(ke){return _({selectedKeys:ke})},selectedKeys:L(),confirm:Q,clearFilters:J,filters:a.filters,visible:F,close:function(){$(!1)}});else if(a.filterDropdown)ce=a.filterDropdown;else{var fe=L()||[],oe=function(){return(a.filters||[]).length===0?s.createElement(Ju,{image:Ju.PRESENTED_IMAGE_SIMPLE,description:h.filterEmptyText,imageStyle:{height:24},style:{margin:0,padding:"16px 0"}}):c==="tree"?s.createElement(s.Fragment,null,s.createElement(ed,{filterSearch:f,value:ae,onChange:te,tablePrefixCls:r,locale:h}),s.createElement("div",{className:"".concat(r,"-filter-dropdown-tree")},i?s.createElement(pa,{checked:fe.length===ma(a.filters).length,indeterminate:fe.length>0&&fe.length0?o:t}),v=Math.ceil((o||t)/f.pageSize);f.current>v&&(f.current=v||1);var m=function(g,b){d({current:g??1,pageSize:b||f.pageSize})},h=function(g,b){var x;e&&((x=e.onChange)===null||x===void 0||x.call(e,g,b)),m(g,b),r(g,b||(f==null?void 0:f.pageSize))};return e===!1?[{},function(){}]:[ne(ne({},f),{onChange:h}),m]}var Cr={},Ps="SELECT_ALL",Es="SELECT_INVERT",ks="SELECT_NONE",rd=[];function Em(t,e){var r=[];return(t||[]).forEach(function(n){r.push(n),n&&Ve(n)==="object"&&e in n&&(r=[].concat(De(r),De(Em(n[e],e))))}),r}function u3(t,e){var r=t||{},n=r.preserveSelectedRowKeys,a=r.selectedRowKeys,o=r.defaultSelectedRowKeys,l=r.getCheckboxProps,i=r.onChange,u=r.onSelect,c=r.onSelectAll,d=r.onSelectInvert,f=r.onSelectNone,v=r.onSelectMultiple,m=r.columnWidth,h=r.type,y=r.selections,g=r.fixed,b=r.renderCell,x=r.hideSelectAll,S=r.checkStrictly,w=S===void 0?!0:S,E=e.prefixCls,P=e.data,T=e.pageData,M=e.getRecordByKey,k=e.getRowKey,D=e.expandType,O=e.childrenColumnName,$=e.locale,F=e.getPopupContainer,N=xt(a||o||rd,{value:a}),R=ee(N,2),I=R[0],L=R[1],j=s.useRef(new Map),_=s.useCallback(function(ve){if(n){var ce=new Map;ve.forEach(function(fe){var oe=M(fe);!oe&&j.current.has(fe)&&(oe=j.current.get(fe)),ce.set(fe,oe)}),j.current=ce}},[M,n]);s.useEffect(function(){_(I)},[I]);var A=s.useMemo(function(){return w?{keyEntities:null}:jo(P,{externalGetKey:k,childrenPropName:O})},[P,k,w,O]),K=A.keyEntities,z=s.useMemo(function(){return Em(T,O)},[T,O]),V=s.useMemo(function(){var ve=new Map;return z.forEach(function(ce,fe){var oe=k(ce,fe),se=(l?l(ce):null)||{};ve.set(oe,se)}),ve},[z,k,l]),X=s.useCallback(function(ve){var ce;return!!(!((ce=V.get(k(ve)))===null||ce===void 0)&&ce.disabled)},[V,k]),W=s.useMemo(function(){if(w)return[I||[],[]];var ve=Pn(I,!0,K,X),ce=ve.checkedKeys,fe=ve.halfCheckedKeys;return[ce||[],fe]},[I,w,K,X]),Z=ee(W,2),U=Z[0],ae=Z[1],q=s.useMemo(function(){var ve=h==="radio"?U.slice(0,1):U;return new Set(ve)},[U,h]),te=s.useMemo(function(){return h==="radio"?new Set:new Set(ae)},[ae,h]),ue=s.useState(null),Y=ee(ue,2),J=Y[0],Q=Y[1];s.useEffect(function(){t||L(rd)},[!!t]);var ie=s.useCallback(function(ve,ce){var fe,oe;_(ve),n?(fe=ve,oe=ve.map(function(se){return j.current.get(se)})):(fe=[],oe=[],ve.forEach(function(se){var he=M(se);he!==void 0&&(fe.push(se),oe.push(he))})),L(fe),i==null||i(fe,oe,{type:ce})},[L,M,i,n]),le=s.useCallback(function(ve,ce,fe,oe){if(u){var se=fe.map(function(he){return M(he)});u(M(ve),ce,se,oe)}ie(fe,"single")},[u,M,ie]),ge=s.useMemo(function(){if(!y||x)return null;var ve=y===!0?[Ps,Es,ks]:y;return ve.map(function(ce){return ce===Ps?{key:"all",text:$.selectionAll,onSelect:function(){ie(P.map(function(oe,se){return k(oe,se)}).filter(function(oe){var se=V.get(oe);return!(se!=null&&se.disabled)||q.has(oe)}),"all")}}:ce===Es?{key:"invert",text:$.selectInvert,onSelect:function(){var oe=new Set(q);T.forEach(function(he,be){var Re=k(he,be),Fe=V.get(Re);Fe!=null&&Fe.disabled||(oe.has(Re)?oe.delete(Re):oe.add(Re))});var se=Array.from(oe);d&&d(se),ie(se,"invert")}}:ce===ks?{key:"none",text:$.selectNone,onSelect:function(){f==null||f(),ie(Array.from(q).filter(function(oe){var se=V.get(oe);return se==null?void 0:se.disabled}),"none")}}:ce}).map(function(ce){return ne(ne({},ce),{onSelect:function(){for(var oe,se,he=arguments.length,be=new Array(he),Re=0;Re2&&arguments[2]!==void 0?arguments[2]:!1,at=ne(ne({},fe),Ue);_e&&(fe.resetPagination(),at.pagination.current&&(at.pagination.current=1),c&&c.onChange&&c.onChange(1,at.pagination.pageSize)),k&&k.scrollToFirstRowOnChange!==!1&&le.body.current&&M1(0,{getContainer:function(){return le.body.current}}),b==null||b(at.pagination,at.filters,at.sorter,{currentDataSource:nd(Fs(U,at.sorterStates,Q),at.filterStates),action:Ie})},se=function(Ue,Ie){oe({sorter:Ue,sorterStates:Ie},"sort",!1)},he=d3({prefixCls:te,mergedColumns:L,onSorterChange:se,sortDirections:D||["ascend","descend"],tableLocale:Z,showSorterTooltip:F}),be=ee(he,4),Re=be[0],Fe=be[1],Ee=be[2],ke=be[3],we=s.useMemo(function(){return Fs(U,Fe,Q)},[U,Fe]);fe.sorter=ke(),fe.sorterStates=Fe;var Ge=function(Ue,Ie){oe({filters:Ue,filterStates:Ie},"filter",!0)},Qe=a3({prefixCls:te,locale:Z,dropdownPrefixCls:ue,mergedColumns:L,onFilterChange:Ge,getPopupContainer:x}),ct=ee(Qe,3),dt=ct[0],mt=ct[1],We=ct[2],Oe=nd(we,mt);fe.filters=We,fe.filterStates=mt;var ot=s.useMemo(function(){var Ae={};return Object.keys(We).forEach(function(Ue){We[Ue]!==null&&(Ae[Ue]=We[Ue])}),ne(ne({},Ee),{filters:Ae})},[Ee,We]),Je=f3(ot),Se=ee(Je,1),He=Se[0],je=function(Ue,Ie){oe({pagination:ne(ne({},fe.pagination),{current:Ue,pageSize:Ie})},"paginate")},ze=s3(Oe.length,c,je),ye=ee(ze,2),de=ye[0],Ce=ye[1];fe.pagination=c===!1?{}:i3(c,de),fe.resetPagination=Ce;var Me=s.useMemo(function(){if(c===!1||!de.pageSize)return Oe;var Ae=de.current,Ue=Ae===void 0?1:Ae,Ie=de.total,_e=de.pageSize,at=_e===void 0?Pm:_e;return Oe.lengthat?Oe.slice((Ue-1)*at,Ue*at):Oe:Oe.slice((Ue-1)*at,Ue*at)},[!!c,Oe,de&&de.current,de&&de.pageSize,de&&de.total]),Be=u3(d,{prefixCls:te,data:Oe,pageData:Me,getRowKey:ge,getRecordByKey:ce,expandType:ie,childrenColumnName:Q,locale:Z,getPopupContainer:x}),nt=ee(Be,2),Ne=nt[0],xe=nt[1],qe=function(Ue,Ie,_e){var at;return typeof m=="function"?at=pe(m(Ue,Ie,_e)):at=pe(m),pe(B({},"".concat(te,"-row-selected"),xe.has(ge(Ue,Ie))),at)};Y.__PARENT_RENDER_ICON__=Y.expandIcon,Y.expandIcon=Y.expandIcon||w||a2(Z),ie==="nest"&&Y.expandIconColumnIndex===void 0?Y.expandIconColumnIndex=d?1:0:Y.expandIconColumnIndex>0&&d&&(Y.expandIconColumnIndex-=1),typeof Y.indentSize!="number"&&(Y.indentSize=typeof M=="number"?M:15);var it=s.useCallback(function(Ae){return He(Ne(dt(Re(Ae))))},[Re,dt,Ne]),ft,At;if(c!==!1&&(de!=null&&de.total)){var Kt;de.size?Kt=de.size:Kt=W==="small"||W==="middle"?"small":void 0;var Rt=function(Ue){return s.createElement(Yb,ne({},de,{className:pe("".concat(te,"-pagination ").concat(te,"-pagination-").concat(Ue),de.className),size:Kt}))},zt=X==="rtl"?"left":"right",et=de.position;if(et!==null&&Array.isArray(et)){var tt=et.find(function(Ae){return Ae.includes("top")}),lt=et.find(function(Ae){return Ae.includes("bottom")}),ut=et.every(function(Ae){return"".concat(Ae)==="none"});!tt&&!lt&&!ut&&(At=Rt(zt)),tt&&(ft=Rt(tt.toLowerCase().replace("top",""))),lt&&(At=Rt(lt.toLowerCase().replace("bottom","")))}else At=Rt(zt)}var wt;typeof S=="boolean"?wt={spinning:S}:Ve(S)==="object"&&(wt=ne({spinning:!0},S));var St=pe("".concat(te,"-wrapper"),B({},"".concat(te,"-wrapper-rtl"),X==="rtl"),n);return s.createElement("div",{ref:e,className:St,style:a},s.createElement(Fr,ne({spinning:!1},wt),ft,s.createElement(ra,ne({},j,{columns:L,direction:X,expandable:Y,prefixCls:te,className:pe(B(B(B(B({},"".concat(te,"-middle"),W==="middle"),"".concat(te,"-small"),W==="small"),"".concat(te,"-bordered"),l),"".concat(te,"-empty"),U.length===0)),data:Me,rowKey:ge,rowClassName:qe,emptyText:O&&O.emptyText||(V||lu)("Table"),internalHooks:Ei,internalRefs:le,transformColumns:it})),At))}var h3=s.forwardRef(m3),sr=h3;sr.SELECTION_COLUMN=Cr;sr.EXPAND_COLUMN=ra.EXPAND_COLUMN;sr.SELECTION_ALL=Ps;sr.SELECTION_INVERT=Es;sr.SELECTION_NONE=ks;sr.Column=n2;sr.ColumnGroup=r2;sr.Summary=rm;const xa=sr;var p3=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a1&&arguments[1]!==void 0?arguments[1]:"0",v=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return d.map(function(m,h){var y="".concat(f,"-").concat(h),g=m[o.value],b=r.includes(g),x=c(m[o.children]||[],y,b),S=s.createElement(ku,m,x.map(function(E){return E.node}));if(e===g&&(l=S),b){var w={pos:y,node:S,children:x};return v||i.push(w),w}return null}).filter(function(m){return m})}i||(i=[],c(n),i.sort(function(d,f){var v=d.node.props.value,m=f.node.props.value,h=r.indexOf(v),y=r.indexOf(m);return h-y}))}Object.defineProperty(t,"triggerNode",{get:function(){return rn(!1,"`triggerNode` is deprecated. Please consider decoupling data with node."),u(),l}}),Object.defineProperty(t,"allCheckedNodes",{get:function(){return rn(!1,"`allCheckedNodes` is deprecated. Please consider decoupling data with node."),u(),a?i:i.map(function(d){var f=d.node;return f})}})}function R3(t,e){var r=e.id,n=e.pId,a=e.rootPId,o={},l=[],i=t.map(function(u){var c=p({},u),d=c[r];return o[d]=c,c.key=c.key||d,c});return i.forEach(function(u){var c=u[n],d=o[c];d&&(d.children=d.children||[],d.children.push(u)),(c===a||!d&&a===null)&&l.push(u)}),l}function F3(t,e,r){return s.useMemo(function(){return t?r?R3(t,p({id:"id",pId:"pId",rootPId:null},r!==!0?r:{})):t:Om(e)},[e,r,t])}const M3=function(t){var e=s.useRef({valueLabels:new Map});return s.useMemo(function(){var r=e.current.valueLabels,n=new Map,a=t.map(function(o){var l,i=o.value,u=(l=o.label)!==null&&l!==void 0?l:r.get(i);return n.set(i,u),p(p({},o),{},{label:u})});return e.current.valueLabels=n,[a]},[t])};function ud(t){var e=s.useRef();e.current=t;var r=s.useCallback(function(){return e.current.apply(e,arguments)},[]);return r}const N3=function(t,e){return s.useMemo(function(){var r=jo(t,{fieldNames:e,initWrapper:function(a){return p(p({},a),{},{valueEntities:new Map})},processEntity:function(a,o){var l=a.node[e.value];o.valueEntities.set(l,a)}});return r},[t,e])},T3=function(t,e,r,n){return s.useMemo(function(){var a=t.map(function(u){var c=u.value;return c}),o=e.map(function(u){var c=u.value;return c}),l=a.filter(function(u){return!n[u]});if(r){var i=Pn(a,!0,n);a=i.checkedKeys,o=i.halfCheckedKeys}return[Array.from(new Set([].concat(De(l),De(a)))),o]},[t,e,r,n])},$3=function(t,e,r){var n=r.treeNodeFilterProp,a=r.filterTreeNode,o=r.fieldNames,l=o.children;return s.useMemo(function(){if(!e||a===!1)return t;var i;if(typeof a=="function")i=a;else{var u=e.toUpperCase();i=function(f,v){var m=v[n];return String(m).toUpperCase().includes(u)}}function c(d){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return d.map(function(v){var m=v[l],h=f||i(e,Ns(v)),y=c(m||[],h);return h||y.length?p(p({},v),{},B({isLeaf:void 0},l,y)):null}).filter(function(v){return v})}return c(t)},[t,e,l,n,a])};var D3=["id","prefixCls","value","defaultValue","onChange","onSelect","onDeselect","searchValue","inputValue","onSearch","autoClearSearchValue","filterTreeNode","treeNodeFilterProp","showCheckedStrategy","treeNodeLabelProp","multiple","treeCheckable","treeCheckStrictly","labelInValue","fieldNames","treeDataSimpleMode","treeData","children","loadData","treeLoadedKeys","onTreeLoad","treeDefaultExpandAll","treeExpandedKeys","treeDefaultExpandedKeys","onTreeExpand","treeExpandAction","virtual","listHeight","listItemHeight","onDropdownVisibleChange","dropdownMatchSelectWidth","treeLine","treeIcon","showTreeIcon","switcherIcon","treeMotion"];function O3(t){return!t||Ve(t)!=="object"}var I3=s.forwardRef(function(t,e){var r=t.id,n=t.prefixCls,a=n===void 0?"rc-tree-select":n,o=t.value,l=t.defaultValue,i=t.onChange,u=t.onSelect,c=t.onDeselect,d=t.searchValue,f=t.inputValue,v=t.onSearch,m=t.autoClearSearchValue,h=m===void 0?!0:m,y=t.filterTreeNode,g=t.treeNodeFilterProp,b=g===void 0?"value":g,x=t.showCheckedStrategy,S=x===void 0?yl:x,w=t.treeNodeLabelProp,E=t.multiple,P=t.treeCheckable,T=t.treeCheckStrictly,M=t.labelInValue,k=t.fieldNames,D=t.treeDataSimpleMode,O=t.treeData,$=t.children,F=t.loadData,N=t.treeLoadedKeys,R=t.onTreeLoad,I=t.treeDefaultExpandAll,L=t.treeExpandedKeys,j=t.treeDefaultExpandedKeys,_=t.onTreeExpand,A=t.treeExpandAction,K=t.virtual,z=t.listHeight,V=z===void 0?200:z,X=t.listItemHeight,W=X===void 0?20:X,Z=t.onDropdownVisibleChange,U=t.dropdownMatchSelectWidth,ae=U===void 0?!0:U,q=t.treeLine,te=t.treeIcon,ue=t.showTreeIcon,Y=t.switcherIcon,J=t.treeMotion,Q=Le(t,D3),ie=Gf(r),le=P&&!T,ge=P||T,Pe=T||M,ve=ge||E,ce=xt(l,{value:o}),fe=ee(ce,2),oe=fe[0],se=fe[1],he=s.useMemo(function(){return x3(k)},[JSON.stringify(k)]),be=xt("",{value:d!==void 0?d:f,postState:function(tt){return tt||""}}),Re=ee(be,2),Fe=Re[0],Ee=Re[1],ke=function(tt){Ee(tt),v==null||v(tt)},we=F3(O,$,D),Ge=N3(we,he),Qe=Ge.keyEntities,ct=Ge.valueEntities,dt=s.useCallback(function(et){var tt=[],lt=[];return et.forEach(function(ut){ct.has(ut)?lt.push(ut):tt.push(ut)}),{missingRawValues:tt,existRawValues:lt}},[ct]),mt=$3(we,Fe,{fieldNames:he,treeNodeFilterProp:b,filterTreeNode:y}),We=s.useCallback(function(et){if(et){if(w)return et[w];for(var tt=he._title,lt=0;lt=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(c){throw c},f:a}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o,l=!0,i=!1;return{s:function(){r=r.call(t)},n:function(){var c=r.next();return l=c.done,c},e:function(c){i=!0,o=c},f:function(){try{l||r.return==null||r.return()}finally{if(i)throw o}}}}var K3={locale:"zh_CN",today:"今天",now:"此刻",backToToday:"返回今天",ok:"确定",timeSelect:"选择时间",dateSelect:"选择日期",weekSelect:"选择周",clear:"清除",month:"月",year:"年",previousMonth:"上个月 (翻页上键)",nextMonth:"下个月 (翻页下键)",monthSelect:"选择月份",yearSelect:"选择年份",decadeSelect:"选择年代",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH时mm分ss秒",previousYear:"上一年 (Control键加左方向键)",nextYear:"下一年 (Control键加右方向键)",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世纪",nextCentury:"下一世纪"},V3={placeholder:"请选择时间",rangePlaceholder:["开始时间","结束时间"]};const Im=V3;var _m={lang:ne({placeholder:"请选择日期",yearPlaceholder:"请选择年份",quarterPlaceholder:"请选择季度",monthPlaceholder:"请选择月份",weekPlaceholder:"请选择周",rangePlaceholder:["开始日期","结束日期"],rangeYearPlaceholder:["开始年份","结束年份"],rangeMonthPlaceholder:["开始月份","结束月份"],rangeQuarterPlaceholder:["开始季度","结束季度"],rangeWeekPlaceholder:["开始周","结束周"]},K3),timePickerLocale:ne({},Im)};_m.lang.ok="确定";const cd=_m;var fn="${label}不是一个有效的${type}",Lm={locale:"zh-cn",Pagination:Ov,DatePicker:cd,TimePicker:Im,Calendar:cd,global:{placeholder:"请选择"},Table:{filterTitle:"筛选",filterConfirm:"确定",filterReset:"重置",filterEmptyText:"无筛选项",filterCheckall:"全选",filterSearchPlaceholder:"在筛选项中搜索",selectAll:"全选当页",selectInvert:"反选当页",selectNone:"清空所有",selectionAll:"全选所有",sortTitle:"排序",expand:"展开行",collapse:"关闭行",triggerDesc:"点击降序",triggerAsc:"点击升序",cancelSort:"取消排序"},Modal:{okText:"确定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{cancelText:"取消",okText:"确定"},Transfer:{titles:["",""],searchPlaceholder:"请输入搜索内容",itemUnit:"项",itemsUnit:"项",remove:"删除",selectCurrent:"全选当页",removeCurrent:"删除当页",selectAll:"全选所有",removeAll:"删除全部",selectInvert:"反选当页"},Upload:{uploading:"文件上传中",removeFile:"删除文件",uploadError:"上传错误",previewFile:"预览文件",downloadFile:"下载文件"},Empty:{description:"暂无数据"},Icon:{icon:"图标"},Text:{edit:"编辑",copy:"复制",copied:"复制成功",expand:"展开"},PageHeader:{back:"返回"},Form:{optional:"(可选)",defaultValidateMessages:{default:"字段验证错误${label}",required:"请输入${label}",enum:"${label}必须是其中一个[${enum}]",whitespace:"${label}不能为空字符",date:{format:"${label}日期格式无效",parse:"${label}不能转换为日期",invalid:"${label}是一个无效日期"},types:{string:fn,method:fn,array:fn,object:fn,number:fn,date:fn,boolean:fn,integer:fn,float:fn,regexp:fn,email:fn,url:fn,hex:fn},string:{len:"${label}须为${len}个字符",min:"${label}最少${min}个字符",max:"${label}最多${max}个字符",range:"${label}须在${min}-${max}字符之间"},number:{len:"${label}必须等于${len}",min:"${label}最小值为${min}",max:"${label}最大值为${max}",range:"${label}须在${min}-${max}之间"},array:{len:"须为${len}个${label}",min:"最少${min}个${label}",max:"最多${max}个${label}",range:"${label}数量须在${min}-${max}之间"},pattern:{mismatch:"${label}与模式不匹配${pattern}"}}},Image:{preview:"预览"}};/*! ***************************************************************************** Copyright (c) Microsoft Corporation. diff --git a/dist/assets/Tags-2166e5ed.js b/dist/assets/Tags-ad5c77b1.js similarity index 92% rename from dist/assets/Tags-2166e5ed.js rename to dist/assets/Tags-ad5c77b1.js index 641874df106aa9b87c366fe86e3f723aea1876ef..2d1357cea47bed3bc4c58e3de7f1cea3ed92a621 100644 --- a/dist/assets/Tags-2166e5ed.js +++ b/dist/assets/Tags-ad5c77b1.js @@ -1 +1 @@ -import{A as L,f as E,i as b,a as J,j as G,k as H,o as q,c as K}from"./_setToString-397d22bb.js";import{r as s,_ as U,j as o}from"./umi-91f9d113.js";import{t as X,B as w}from"./button-909b3565.js";import{a as j,D as F}from"./index-dc40c6e7.js";import{T as R}from"./useDebounce-e1e8dc3b.js";import{r as T}from"./index-b284aaac.js";import{i as Q,n as _}from"./util-b514be53.js";import{u as W}from"./useAsyncFn-4bca5482.js";import{E as Y}from"./Dropdown-d5fff39b.js";import{a as Z}from"./progress-f968a1fe.js";var V={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"plus-circle",theme:"outlined"};const ee=V;var te=function(n,r){return s.createElement(L,E(E({},n),{},{ref:r,icon:ee}))},se=s.forwardRef(te);const Te=se;var ae={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M938 458.8l-29.6-312.6c-1.5-16.2-14.4-29-30.6-30.6L565.2 86h-.4c-3.2 0-5.7 1-7.6 2.9L88.9 557.2a9.96 9.96 0 000 14.1l363.8 363.8c1.9 1.9 4.4 2.9 7.1 2.9s5.2-1 7.1-2.9l468.3-468.3c2-2.1 3-5 2.8-8zM459.7 834.7L189.3 564.3 589 164.6 836 188l23.4 247-399.7 399.7zM680 256c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm0 120c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"}}]},name:"tag",theme:"outlined"};const re=ae;var ne=function(n,r){return s.createElement(L,E(E({},n),{},{ref:r,icon:re}))},ie=s.forwardRef(ne);const ce=ie;var z=j.Option;function I(a){return a&&a.type&&(a.type.isSelectOption||a.type.isSelectOptGroup)}var oe=function(n,r){var C=n.prefixCls,p=n.className,x=n.popupClassName,g=n.dropdownClassName,l=n.children,O=n.dataSource,u=X(l),i;if(u.length===1&&b(u[0])&&!I(u[0])){var f=J(u,1);i=f[0]}var c=i?function(){return i}:void 0,v;return u.length&&I(u[0])?v=l:v=O?O.map(function(m){if(b(m))return m;switch(G(m)){case"string":return s.createElement(z,{key:m,value:m},m);case"object":{var S=m.value;return s.createElement(z,{key:S,value:S},m.text)}default:return}}):[],s.createElement(H,null,function(m){var S=m.getPrefixCls,y=S("select",C);return s.createElement(j,U({ref:r},q(n,["dataSource"]),{prefixCls:y,popupClassName:x||g,className:K("".concat(y,"-auto-complete"),p),mode:j.SECRET_COMBOBOX_MODE_DO_NOT_USE},{getInputElement:c}),v)})},$=s.forwardRef(oe);$.Option=z;const le=$;var ue=function(a,n,r){if(!Q)return[n,_,_];if(!a)throw new Error("useLocalStorage key may not be falsy");var C=r?r.raw?function(i){return i}:r.deserializer:JSON.parse,p=s.useRef(function(i){try{var f=r?r.raw?String:r.serializer:JSON.stringify,c=localStorage.getItem(i);return c!==null?C(c):(n&&localStorage.setItem(i,f(n)),n)}catch{return n}}),x=s.useState(function(){return p.current(a)}),g=x[0],l=x[1];s.useLayoutEffect(function(){return l(p.current(a))},[a]);var O=s.useCallback(function(i){try{var f=typeof i=="function"?i(g):i;if(typeof f>"u")return;var c=void 0;r?r.raw?typeof f=="string"?c=f:c=JSON.stringify(f):r.serializer?c=r.serializer(f):c=JSON.stringify(f):c=JSON.stringify(f),localStorage.setItem(a,c),l(C(c))}catch{}},[a,l]),u=s.useCallback(function(){try{localStorage.removeItem(a),l(void 0)}catch{}},[a,l]);return[g,O,u]};const fe=ue,me=({id:a,tagList:n,onChange:r,preview:C})=>{const[p,x]=s.useState(""),g=s.useRef(null),[l,O]=fe("TAG_PRIORITIES",{}),[u,i]=s.useState(!1),[f,c]=s.useState(null),[v,m]=s.useState(!1),[S,y]=W(async()=>T.get("/api/tags"),[]);s.useLayoutEffect(()=>{var e;u&&((e=g.current)==null||e.focus())},[u]);const h=f||n,A=s.useMemo(()=>{var e;return((e=S.value)==null?void 0:e.filter(t=>!h.some(d=>d.id===t.id)).sort((t,d)=>(l[d.id]||0)-(l[t.id]||0)).filter(t=>t.name.indexOf(p)>-1).map(t=>({value:t.name})))??[]},[h,S.value,l,p]),P=async e=>{const t=await T.post("/api/tags",{data:{name:e}});return{name:e,id:t.id}},B=async(e,t)=>{O({...l,[t]:Date.now()});const d=await T.post(`/api/musicSets/${e}/tags/${t}`);return!!(d!=null&&d.success)},M=async(e,t)=>{const d=await T.delete(`/api/musicSets/${e}/tags/${t}`);return!!(d!=null&&d.success)},k=async()=>{if(!p){i(!1);return}const e=await P(p);if(a&&await B(a,e.id),p&&!h.some(t=>t.id===e.id)){const t=[...h,e];c(t),r&&r(t)}i(!1),x("")},D=async e=>{a&&await M(a,e.id);const t=h.filter(d=>d.id!==e.id);c(t),r&&r(t)},N=s.useCallback(async()=>{await y(),m(!v)},[]);return o.jsxs(o.Fragment,{children:[C?o.jsx("div",{onClick:N,children:h.length?h.map(e=>o.jsx(R,{style:{display:"inline-block",fontSize:"12px",marginRight:"5px",marginBottom:"5px"},children:e.name},e.id)):o.jsx(w,{type:"dashed",icon:o.jsx(Y,{}),size:"small"})}):o.jsx(w,{title:"标签",icon:o.jsx(ce,{}),onClick:N}),o.jsx(F,{title:"标签管理",placement:"right",onClose:()=>m(!1),open:v,mask:!0,style:{marginTop:"64px",height:"calc(100vh - 64px)"},children:o.jsxs("div",{className:"score-tags",children:[o.jsx("div",{className:"list",children:h.map(e=>o.jsx(R,{closable:!0,onClose:()=>D(e),style:{display:"inline-block",marginRight:"5px",marginBottom:"5px"},children:e.name},e.id))}),u&&o.jsx(le,{ref:g,size:"small",backfill:!0,options:A,style:{width:100},onChange:e=>{x(e)},placeholder:"输入",onBlur:()=>k(),onSelect:()=>{setTimeout(()=>{var e;(e=g.current)==null||e.blur()},0)},onKeyDown:e=>{e.key==="Enter"&&g.current.blur()}}),!u&&o.jsx(w,{className:"site-tag-plus",size:"small",onClick:()=>i(!0),children:o.jsx(Z,{})})]})})]})},Ee=me;export{le as A,Te as P,Ee as S,ce as T,fe as u}; +import{A as L,f as E,i as b,a as J,j as G,k as H,o as q,c as K}from"./_setToString-dbbee35a.js";import{r as s,_ as U,j as o}from"./umi-37873494.js";import{t as X,B as w}from"./button-1ef38c18.js";import{a as j,D as F}from"./index-2899652d.js";import{T as R}from"./useDebounce-2fd3a0bc.js";import{r as T}from"./index-92da7081.js";import{i as Q,n as _}from"./util-2d38567b.js";import{u as W}from"./useAsyncFn-ffd323fd.js";import{E as Y}from"./Dropdown-ba03bf54.js";import{a as Z}from"./progress-096a2c96.js";var V={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"plus-circle",theme:"outlined"};const ee=V;var te=function(n,r){return s.createElement(L,E(E({},n),{},{ref:r,icon:ee}))},se=s.forwardRef(te);const Te=se;var ae={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M938 458.8l-29.6-312.6c-1.5-16.2-14.4-29-30.6-30.6L565.2 86h-.4c-3.2 0-5.7 1-7.6 2.9L88.9 557.2a9.96 9.96 0 000 14.1l363.8 363.8c1.9 1.9 4.4 2.9 7.1 2.9s5.2-1 7.1-2.9l468.3-468.3c2-2.1 3-5 2.8-8zM459.7 834.7L189.3 564.3 589 164.6 836 188l23.4 247-399.7 399.7zM680 256c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm0 120c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"}}]},name:"tag",theme:"outlined"};const re=ae;var ne=function(n,r){return s.createElement(L,E(E({},n),{},{ref:r,icon:re}))},ie=s.forwardRef(ne);const ce=ie;var z=j.Option;function I(a){return a&&a.type&&(a.type.isSelectOption||a.type.isSelectOptGroup)}var oe=function(n,r){var C=n.prefixCls,p=n.className,x=n.popupClassName,g=n.dropdownClassName,l=n.children,O=n.dataSource,u=X(l),i;if(u.length===1&&b(u[0])&&!I(u[0])){var f=J(u,1);i=f[0]}var c=i?function(){return i}:void 0,v;return u.length&&I(u[0])?v=l:v=O?O.map(function(m){if(b(m))return m;switch(G(m)){case"string":return s.createElement(z,{key:m,value:m},m);case"object":{var S=m.value;return s.createElement(z,{key:S,value:S},m.text)}default:return}}):[],s.createElement(H,null,function(m){var S=m.getPrefixCls,y=S("select",C);return s.createElement(j,U({ref:r},q(n,["dataSource"]),{prefixCls:y,popupClassName:x||g,className:K("".concat(y,"-auto-complete"),p),mode:j.SECRET_COMBOBOX_MODE_DO_NOT_USE},{getInputElement:c}),v)})},$=s.forwardRef(oe);$.Option=z;const le=$;var ue=function(a,n,r){if(!Q)return[n,_,_];if(!a)throw new Error("useLocalStorage key may not be falsy");var C=r?r.raw?function(i){return i}:r.deserializer:JSON.parse,p=s.useRef(function(i){try{var f=r?r.raw?String:r.serializer:JSON.stringify,c=localStorage.getItem(i);return c!==null?C(c):(n&&localStorage.setItem(i,f(n)),n)}catch{return n}}),x=s.useState(function(){return p.current(a)}),g=x[0],l=x[1];s.useLayoutEffect(function(){return l(p.current(a))},[a]);var O=s.useCallback(function(i){try{var f=typeof i=="function"?i(g):i;if(typeof f>"u")return;var c=void 0;r?r.raw?typeof f=="string"?c=f:c=JSON.stringify(f):r.serializer?c=r.serializer(f):c=JSON.stringify(f):c=JSON.stringify(f),localStorage.setItem(a,c),l(C(c))}catch{}},[a,l]),u=s.useCallback(function(){try{localStorage.removeItem(a),l(void 0)}catch{}},[a,l]);return[g,O,u]};const fe=ue,me=({id:a,tagList:n,onChange:r,preview:C})=>{const[p,x]=s.useState(""),g=s.useRef(null),[l,O]=fe("TAG_PRIORITIES",{}),[u,i]=s.useState(!1),[f,c]=s.useState(null),[v,m]=s.useState(!1),[S,y]=W(async()=>T.get("/api/tags"),[]);s.useLayoutEffect(()=>{var e;u&&((e=g.current)==null||e.focus())},[u]);const h=f||n,A=s.useMemo(()=>{var e;return((e=S.value)==null?void 0:e.filter(t=>!h.some(d=>d.id===t.id)).sort((t,d)=>(l[d.id]||0)-(l[t.id]||0)).filter(t=>t.name.indexOf(p)>-1).map(t=>({value:t.name})))??[]},[h,S.value,l,p]),P=async e=>{const t=await T.post("/api/tags",{data:{name:e}});return{name:e,id:t.id}},B=async(e,t)=>{O({...l,[t]:Date.now()});const d=await T.post(`/api/musicSets/${e}/tags/${t}`);return!!(d!=null&&d.success)},M=async(e,t)=>{const d=await T.delete(`/api/musicSets/${e}/tags/${t}`);return!!(d!=null&&d.success)},k=async()=>{if(!p){i(!1);return}const e=await P(p);if(a&&await B(a,e.id),p&&!h.some(t=>t.id===e.id)){const t=[...h,e];c(t),r&&r(t)}i(!1),x("")},D=async e=>{a&&await M(a,e.id);const t=h.filter(d=>d.id!==e.id);c(t),r&&r(t)},N=s.useCallback(async()=>{await y(),m(!v)},[]);return o.jsxs(o.Fragment,{children:[C?o.jsx("div",{onClick:N,children:h.length?h.map(e=>o.jsx(R,{style:{display:"inline-block",fontSize:"12px",marginRight:"5px",marginBottom:"5px"},children:e.name},e.id)):o.jsx(w,{type:"dashed",icon:o.jsx(Y,{}),size:"small"})}):o.jsx(w,{title:"标签",icon:o.jsx(ce,{}),onClick:N}),o.jsx(F,{title:"标签管理",placement:"right",onClose:()=>m(!1),open:v,mask:!0,style:{marginTop:"64px",height:"calc(100vh - 64px)"},children:o.jsxs("div",{className:"score-tags",children:[o.jsx("div",{className:"list",children:h.map(e=>o.jsx(R,{closable:!0,onClose:()=>D(e),style:{display:"inline-block",marginRight:"5px",marginBottom:"5px"},children:e.name},e.id))}),u&&o.jsx(le,{ref:g,size:"small",backfill:!0,options:A,style:{width:100},onChange:e=>{x(e)},placeholder:"输入",onBlur:()=>k(),onSelect:()=>{setTimeout(()=>{var e;(e=g.current)==null||e.blur()},0)},onKeyDown:e=>{e.key==="Enter"&&g.current.blur()}}),!u&&o.jsx(w,{className:"site-tag-plus",size:"small",onClick:()=>i(!0),children:o.jsx(Z,{})})]})})]})},Ee=me;export{le as A,Te as P,Ee as S,ce as T,fe as u}; diff --git a/dist/assets/TextArea-3bdaceca.js b/dist/assets/TextArea-27ba039d.js similarity index 99% rename from dist/assets/TextArea-3bdaceca.js rename to dist/assets/TextArea-27ba039d.js index f04bb8e0814c81a75370d02109a3bc268ecdd5c7..937620fa5c68cb8d1cb090dd00b34dd2b38fbfba 100644 --- a/dist/assets/TextArea-3bdaceca.js +++ b/dist/assets/TextArea-27ba039d.js @@ -1,4 +1,4 @@ -import{A as zi,f as k,q as Et,B as Bt,p as Ke,l as Ge,P as Gr,aG as Li,K as kt,j as ge,Q as $n,ax as bn,a as q,O as wn,u as Ce,c as ee,w as Ae,d as zn,z as Ve,bb as It,v as Ln,ad as it,ae as Oe,b as h,t as _,_ as Z,bd as vt,af as $e,ag as De,o as qt,H as xt,C as at,i as Hi,be as Wi,e as zt,D as Hn,S as Yr,G as Xr,r as ir,s as ji,ay as Ui}from"./_setToString-397d22bb.js";import{r as f,_ as L,o as Lt,e as Bi,R as G}from"./umi-91f9d113.js";import{t as Wn,C as qi,u as Ki,N as ar}from"./button-909b3565.js";var Gi={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"}}]},name:"eye",theme:"outlined"};const Yi=Gi;var Xi=function(t,n){return f.createElement(zi,k(k({},t),{},{ref:n,icon:Yi}))},Zi=f.forwardRef(Xi);const Ou=Zi;var Cn=f.createContext(null);function Qi(e){var t=e.children,n=e.onBatchResize,r=f.useRef(0),i=f.useRef([]),o=f.useContext(Cn),a=f.useCallback(function(u,s,l){r.current+=1;var c=r.current;i.current.push({size:u,element:s,data:l}),Promise.resolve().then(function(){c===r.current&&(n==null||n(i.current),i.current=[])}),o==null||o(u,s,l)},[n,o]);return f.createElement(Cn.Provider,{value:a},t)}var Zr=function(){if(typeof Map<"u")return Map;function e(t,n){var r=-1;return t.some(function(i,o){return i[0]===n?(r=o,!0):!1}),r}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(n){var r=e(this.__entries__,n),i=this.__entries__[r];return i&&i[1]},t.prototype.set=function(n,r){var i=e(this.__entries__,n);~i?this.__entries__[i][1]=r:this.__entries__.push([n,r])},t.prototype.delete=function(n){var r=this.__entries__,i=e(r,n);~i&&r.splice(i,1)},t.prototype.has=function(n){return!!~e(this.__entries__,n)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(n,r){r===void 0&&(r=null);for(var i=0,o=this.__entries__;i0},e.prototype.connect_=function(){!En||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),ia?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!En||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var n=t.propertyName,r=n===void 0?"":n,i=ra.some(function(o){return!!~r.indexOf(o)});i&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Qr=function(e,t){for(var n=0,r=Object.keys(t);n"u"||!(Element instanceof Object))){if(!(t instanceof nt(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(t)||(n.set(t,new va(t)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(t instanceof nt(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(t)&&(n.delete(t),n.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(n){n.isActive()&&t.activeObservations_.push(n)})},e.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,n=this.activeObservations_.map(function(r){return new pa(r.target,r.broadcastRect())});this.callback_.call(t,n,t),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),ei=typeof WeakMap<"u"?new WeakMap:new Zr,ti=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=aa.getInstance(),r=new ha(t,n,this);ei.set(this,r)}return e}();["observe","unobserve","disconnect"].forEach(function(e){ti.prototype[e]=function(){var t;return(t=ei.get(this))[e].apply(t,arguments)}});var ni=function(){return typeof Ht.ResizeObserver<"u"?Ht.ResizeObserver:ti}(),ze=new Map;function ga(e){e.forEach(function(t){var n,r=t.target;(n=ze.get(r))===null||n===void 0||n.forEach(function(i){return i(r)})})}var ri=new ni(ga);function ma(e,t){ze.has(e)||(ze.set(e,new Set),ri.observe(e)),ze.get(e).add(t)}function ya(e,t){ze.has(e)&&(ze.get(e).delete(t),ze.get(e).size||(ri.unobserve(e),ze.delete(e)))}var ba=function(e){Et(n,e);var t=Bt(n);function n(){return Ke(this,n),t.apply(this,arguments)}return Ge(n,[{key:"render",value:function(){return this.props.children}}]),n}(f.Component);function wa(e,t){var n=e.children,r=e.disabled,i=f.useRef(null),o=f.useRef(null),a=f.useContext(Cn),u=typeof n=="function",s=u?n(i):n,l=f.useRef({width:-1,height:-1,offsetWidth:-1,offsetHeight:-1}),c=!u&&f.isValidElement(s)&&Gr(s),d=c?s.ref:null,v=Li(d,i),m=function(){var p;return kt(i.current)||(i.current&&ge(i.current)==="object"?kt((p=i.current)===null||p===void 0?void 0:p.nativeElement):null)||kt(o.current)};f.useImperativeHandle(t,function(){return m()});var y=f.useRef(e);y.current=e;var g=f.useCallback(function(b){var p=y.current,C=p.onResize,w=p.data,x=b.getBoundingClientRect(),E=x.width,P=x.height,S=b.offsetWidth,N=b.offsetHeight,F=Math.floor(E),R=Math.floor(P);if(l.current.width!==F||l.current.height!==R||l.current.offsetWidth!==S||l.current.offsetHeight!==N){var O={width:F,height:R,offsetWidth:S,offsetHeight:N};l.current=O;var T=S===Math.round(E)?E:S,M=N===Math.round(P)?P:N,I=k(k({},O),{},{offsetWidth:T,offsetHeight:M});a==null||a(I,b,w),C&&Promise.resolve().then(function(){C(I,b)})}},[]);return f.useEffect(function(){var b=m();return b&&!r&&ma(b,g),function(){return ya(b,g)}},[i.current,r]),f.createElement(ba,{ref:o},c?f.cloneElement(s,{ref:v}):s)}var Ca=f.forwardRef(wa),Ea="rc-observer-key";function xa(e,t){var n=e.children,r=typeof n=="function"?[n]:Wn(n);return r.map(function(i,o){var a=(i==null?void 0:i.key)||"".concat(Ea,"-").concat(o);return f.createElement(Ca,L({},e,{key:a,ref:o===0?t:void 0}),i)})}var Gt=f.forwardRef(xa);Gt.Collection=Qi;var sr=$n()?f.useLayoutEffect:f.useEffect,Be=function(t,n){var r=f.useRef(!0);sr(function(){return t(r.current)},n),sr(function(){return r.current=!1,function(){r.current=!0}},[])},ur=function(t,n){Be(function(r){if(!r)return t()},n)};function rn(e){return e!==void 0}function St(e,t){var n=t||{},r=n.defaultValue,i=n.value,o=n.onChange,a=n.postState,u=bn(function(){return rn(i)?i:rn(r)?typeof r=="function"?r():r:typeof e=="function"?e():e}),s=q(u,2),l=s[0],c=s[1],d=i!==void 0?i:l,v=a?a(d):d,m=wn(o),y=bn([d]),g=q(y,2),b=g[0],p=g[1];ur(function(){var w=b[0];l!==w&&m(l,w)},[b]),ur(function(){rn(i)||c(i)},[i]);var C=wn(function(w,x){c(w,x),p([d],x)});return[v,C]}function pt(e,t,n,r){var i=Lt.unstable_batchedUpdates?function(a){Lt.unstable_batchedUpdates(n,a)}:n;return e!=null&&e.addEventListener&&e.addEventListener(t,i,r),{remove:function(){e!=null&&e.removeEventListener&&e.removeEventListener(t,i,r)}}}const Sa=function(){if(typeof navigator>"u"||typeof window>"u")return!1;var e=navigator.userAgent||navigator.vendor||window.opera;return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e==null?void 0:e.substr(0,4))};var H={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(t){var n=t.keyCode;if(t.altKey&&!t.ctrlKey||t.metaKey||n>=H.F1&&n<=H.F12)return!1;switch(n){case H.ALT:case H.CAPS_LOCK:case H.CONTEXT_MENU:case H.CTRL:case H.DOWN:case H.END:case H.ESC:case H.HOME:case H.INSERT:case H.LEFT:case H.MAC_FF_META:case H.META:case H.NUMLOCK:case H.NUM_CENTER:case H.PAGE_DOWN:case H.PAGE_UP:case H.PAUSE:case H.PRINT_SCREEN:case H.RIGHT:case H.SHIFT:case H.UP:case H.WIN_KEY:case H.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(t){if(t>=H.ZERO&&t<=H.NINE||t>=H.NUM_ZERO&&t<=H.NUM_MULTIPLY||t>=H.A&&t<=H.Z||window.navigator.userAgent.indexOf("WebKit")!==-1&&t===0)return!0;switch(t){case H.SPACE:case H.QUESTION_MARK:case H.NUM_PLUS:case H.NUM_MINUS:case H.NUM_PERIOD:case H.NUM_DIVISION:case H.SEMICOLON:case H.DASH:case H.EQUALS:case H.COMMA:case H.PERIOD:case H.SLASH:case H.APOSTROPHE:case H.SINGLE_QUOTE:case H.OPEN_SQUARE_BRACKET:case H.BACKSLASH:case H.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}},Pa=`accept acceptCharset accessKey action allowFullScreen allowTransparency +import{A as zi,f as k,q as Et,B as Bt,p as Ke,l as Ge,P as Gr,aG as Li,K as kt,j as ge,Q as $n,ax as bn,a as q,O as wn,u as Ce,c as ee,w as Ae,d as zn,z as Ve,bb as It,v as Ln,ad as it,ae as Oe,b as h,t as _,_ as Z,bd as vt,af as $e,ag as De,o as qt,H as xt,C as at,i as Hi,be as Wi,e as zt,D as Hn,S as Yr,G as Xr,r as ir,s as ji,ay as Ui}from"./_setToString-dbbee35a.js";import{r as f,_ as L,o as Lt,e as Bi,R as G}from"./umi-37873494.js";import{t as Wn,C as qi,u as Ki,N as ar}from"./button-1ef38c18.js";var Gi={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"}}]},name:"eye",theme:"outlined"};const Yi=Gi;var Xi=function(t,n){return f.createElement(zi,k(k({},t),{},{ref:n,icon:Yi}))},Zi=f.forwardRef(Xi);const Ou=Zi;var Cn=f.createContext(null);function Qi(e){var t=e.children,n=e.onBatchResize,r=f.useRef(0),i=f.useRef([]),o=f.useContext(Cn),a=f.useCallback(function(u,s,l){r.current+=1;var c=r.current;i.current.push({size:u,element:s,data:l}),Promise.resolve().then(function(){c===r.current&&(n==null||n(i.current),i.current=[])}),o==null||o(u,s,l)},[n,o]);return f.createElement(Cn.Provider,{value:a},t)}var Zr=function(){if(typeof Map<"u")return Map;function e(t,n){var r=-1;return t.some(function(i,o){return i[0]===n?(r=o,!0):!1}),r}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(n){var r=e(this.__entries__,n),i=this.__entries__[r];return i&&i[1]},t.prototype.set=function(n,r){var i=e(this.__entries__,n);~i?this.__entries__[i][1]=r:this.__entries__.push([n,r])},t.prototype.delete=function(n){var r=this.__entries__,i=e(r,n);~i&&r.splice(i,1)},t.prototype.has=function(n){return!!~e(this.__entries__,n)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(n,r){r===void 0&&(r=null);for(var i=0,o=this.__entries__;i0},e.prototype.connect_=function(){!En||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),ia?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!En||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var n=t.propertyName,r=n===void 0?"":n,i=ra.some(function(o){return!!~r.indexOf(o)});i&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Qr=function(e,t){for(var n=0,r=Object.keys(t);n"u"||!(Element instanceof Object))){if(!(t instanceof nt(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(t)||(n.set(t,new va(t)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(t instanceof nt(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(t)&&(n.delete(t),n.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(n){n.isActive()&&t.activeObservations_.push(n)})},e.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,n=this.activeObservations_.map(function(r){return new pa(r.target,r.broadcastRect())});this.callback_.call(t,n,t),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),ei=typeof WeakMap<"u"?new WeakMap:new Zr,ti=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=aa.getInstance(),r=new ha(t,n,this);ei.set(this,r)}return e}();["observe","unobserve","disconnect"].forEach(function(e){ti.prototype[e]=function(){var t;return(t=ei.get(this))[e].apply(t,arguments)}});var ni=function(){return typeof Ht.ResizeObserver<"u"?Ht.ResizeObserver:ti}(),ze=new Map;function ga(e){e.forEach(function(t){var n,r=t.target;(n=ze.get(r))===null||n===void 0||n.forEach(function(i){return i(r)})})}var ri=new ni(ga);function ma(e,t){ze.has(e)||(ze.set(e,new Set),ri.observe(e)),ze.get(e).add(t)}function ya(e,t){ze.has(e)&&(ze.get(e).delete(t),ze.get(e).size||(ri.unobserve(e),ze.delete(e)))}var ba=function(e){Et(n,e);var t=Bt(n);function n(){return Ke(this,n),t.apply(this,arguments)}return Ge(n,[{key:"render",value:function(){return this.props.children}}]),n}(f.Component);function wa(e,t){var n=e.children,r=e.disabled,i=f.useRef(null),o=f.useRef(null),a=f.useContext(Cn),u=typeof n=="function",s=u?n(i):n,l=f.useRef({width:-1,height:-1,offsetWidth:-1,offsetHeight:-1}),c=!u&&f.isValidElement(s)&&Gr(s),d=c?s.ref:null,v=Li(d,i),m=function(){var p;return kt(i.current)||(i.current&&ge(i.current)==="object"?kt((p=i.current)===null||p===void 0?void 0:p.nativeElement):null)||kt(o.current)};f.useImperativeHandle(t,function(){return m()});var y=f.useRef(e);y.current=e;var g=f.useCallback(function(b){var p=y.current,C=p.onResize,w=p.data,x=b.getBoundingClientRect(),E=x.width,P=x.height,S=b.offsetWidth,N=b.offsetHeight,F=Math.floor(E),R=Math.floor(P);if(l.current.width!==F||l.current.height!==R||l.current.offsetWidth!==S||l.current.offsetHeight!==N){var O={width:F,height:R,offsetWidth:S,offsetHeight:N};l.current=O;var T=S===Math.round(E)?E:S,M=N===Math.round(P)?P:N,I=k(k({},O),{},{offsetWidth:T,offsetHeight:M});a==null||a(I,b,w),C&&Promise.resolve().then(function(){C(I,b)})}},[]);return f.useEffect(function(){var b=m();return b&&!r&&ma(b,g),function(){return ya(b,g)}},[i.current,r]),f.createElement(ba,{ref:o},c?f.cloneElement(s,{ref:v}):s)}var Ca=f.forwardRef(wa),Ea="rc-observer-key";function xa(e,t){var n=e.children,r=typeof n=="function"?[n]:Wn(n);return r.map(function(i,o){var a=(i==null?void 0:i.key)||"".concat(Ea,"-").concat(o);return f.createElement(Ca,L({},e,{key:a,ref:o===0?t:void 0}),i)})}var Gt=f.forwardRef(xa);Gt.Collection=Qi;var sr=$n()?f.useLayoutEffect:f.useEffect,Be=function(t,n){var r=f.useRef(!0);sr(function(){return t(r.current)},n),sr(function(){return r.current=!1,function(){r.current=!0}},[])},ur=function(t,n){Be(function(r){if(!r)return t()},n)};function rn(e){return e!==void 0}function St(e,t){var n=t||{},r=n.defaultValue,i=n.value,o=n.onChange,a=n.postState,u=bn(function(){return rn(i)?i:rn(r)?typeof r=="function"?r():r:typeof e=="function"?e():e}),s=q(u,2),l=s[0],c=s[1],d=i!==void 0?i:l,v=a?a(d):d,m=wn(o),y=bn([d]),g=q(y,2),b=g[0],p=g[1];ur(function(){var w=b[0];l!==w&&m(l,w)},[b]),ur(function(){rn(i)||c(i)},[i]);var C=wn(function(w,x){c(w,x),p([d],x)});return[v,C]}function pt(e,t,n,r){var i=Lt.unstable_batchedUpdates?function(a){Lt.unstable_batchedUpdates(n,a)}:n;return e!=null&&e.addEventListener&&e.addEventListener(t,i,r),{remove:function(){e!=null&&e.removeEventListener&&e.removeEventListener(t,i,r)}}}const Sa=function(){if(typeof navigator>"u"||typeof window>"u")return!1;var e=navigator.userAgent||navigator.vendor||window.opera;return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e==null?void 0:e.substr(0,4))};var H={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(t){var n=t.keyCode;if(t.altKey&&!t.ctrlKey||t.metaKey||n>=H.F1&&n<=H.F12)return!1;switch(n){case H.ALT:case H.CAPS_LOCK:case H.CONTEXT_MENU:case H.CTRL:case H.DOWN:case H.END:case H.ESC:case H.HOME:case H.INSERT:case H.LEFT:case H.MAC_FF_META:case H.META:case H.NUMLOCK:case H.NUM_CENTER:case H.PAGE_DOWN:case H.PAGE_UP:case H.PAUSE:case H.PRINT_SCREEN:case H.RIGHT:case H.SHIFT:case H.UP:case H.WIN_KEY:case H.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(t){if(t>=H.ZERO&&t<=H.NINE||t>=H.NUM_ZERO&&t<=H.NUM_MULTIPLY||t>=H.A&&t<=H.Z||window.navigator.userAgent.indexOf("WebKit")!==-1&&t===0)return!0;switch(t){case H.SPACE:case H.QUESTION_MARK:case H.NUM_PLUS:case H.NUM_MINUS:case H.NUM_PERIOD:case H.NUM_DIVISION:case H.SEMICOLON:case H.DASH:case H.EQUALS:case H.COMMA:case H.PERIOD:case H.SLASH:case H.APOSTROPHE:case H.SINGLE_QUOTE:case H.OPEN_SQUARE_BRACKET:case H.BACKSLASH:case H.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}},Pa=`accept acceptCharset accessKey action allowFullScreen allowTransparency alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge charSet checked classID className colSpan cols content contentEditable contextMenu controls coords crossOrigin data dateTime default defer dir disabled download draggable diff --git a/dist/assets/_setToString-397d22bb.js b/dist/assets/_setToString-dbbee35a.js similarity index 99% rename from dist/assets/_setToString-397d22bb.js rename to dist/assets/_setToString-dbbee35a.js index 5ffcc422906873b349cbc5bc69344ad30d41f6c5..e4d3f705c5cefeb197c370d9eae14567600d613e 100644 --- a/dist/assets/_setToString-397d22bb.js +++ b/dist/assets/_setToString-dbbee35a.js @@ -1,4 +1,4 @@ -import{r as u,g as Sn,c as Fe,R as Lt,o as jt,_ as R,F as mo}from"./umi-91f9d113.js";var go=u.createContext({});const ur=go;function H(e){"@babel/helpers - typeof";return H=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},H(e)}function yo(e,t){if(H(e)!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||"default");if(H(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function En(e){var t=yo(e,"string");return H(t)=="symbol"?t:t+""}function L(e,t,r){return(t=En(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Mr(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),r.push.apply(r,n)}return r}function b(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);re.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:{},n=[];return S.Children.forEach(a,function(e){e==null&&!t.keepEmpty||(Array.isArray(e)?n=n.concat(H(e)):$e(e)&&e.props?n=n.concat(H(e.props.children,t)):n.push(e))}),n}var ye=globalThis&&globalThis.__rest||function(a,t){var n={};for(var e in a)Object.prototype.hasOwnProperty.call(a,e)&&t.indexOf(e)<0&&(n[e]=a[e]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,e=Object.getOwnPropertySymbols(a);r1&&arguments[1]!==void 0?arguments[1]:1,n=tt++,e=t;function r(){e-=1,e<=0?(a(),delete k[n]):k[n]=V(r)}return k[n]=V(r),n}z.cancel=function(t){t!==void 0&&(V.cancel(k[t]),delete k[t])};z.ids=k;function nt(a,t,n){return t=ve(t),Ue(a,Ve()?Reflect.construct(t,n||[],ve(a).constructor):t.apply(a,n))}var F;function Ce(a){return!a||a.offsetParent===null||a.hidden}function at(a){return a instanceof Document?a.body:Array.from(a.childNodes).find(function(t){return(t==null?void 0:t.nodeType)===Node.ELEMENT_NODE})}function rt(a){var t=(a||"").match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/);return t&&t[1]&&t[2]&&t[3]?!(t[1]===t[2]&&t[2]===t[3]):!0}var xe=function(a){Ae(t,a);function t(){var n;return De(this,t),n=nt(this,t,arguments),n.containerRef=i.createRef(),n.animationStart=!1,n.destroyed=!1,n.onClick=function(e,r){var o,c,s=n.props,l=s.insertExtraNode,v=s.disabled;if(!(v||!e||Ce(e)||e.className.includes("-leave"))){n.extraNode=document.createElement("div");var p=We(n),g=p.extraNode,b=n.context.getPrefixCls;g.className="".concat(b(""),"-click-animating-node");var C=n.getAttributeName();if(e.setAttribute(C,"true"),r&&r!=="#fff"&&r!=="#ffffff"&&r!=="rgb(255, 255, 255)"&&r!=="rgba(255, 255, 255, 1)"&&rt(r)&&!/rgba\((?:\d*, ){3}0\)/.test(r)&&r!=="transparent"){g.style.borderColor=r;var x=((o=e.getRootNode)===null||o===void 0?void 0:o.call(e))||e.ownerDocument,f=(c=at(x))!==null&&c!==void 0?c:x;F=je(` +import{R as S,r as i,_ as O}from"./umi-37873494.js";import{bg as $e,C as w,c as R,b as u,w as V,q as Ae,p as De,t as We,b9 as je,P as Be,v as Fe,e as be,l as Me,k as Ge,r as ve,s as Ue,ay as Ve,L as pe,d as He,H as J,S as qe,D as Je,a as ge,o as Ke,j as Qe,be as Xe}from"./_setToString-dbbee35a.js";function H(a){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=[];return S.Children.forEach(a,function(e){e==null&&!t.keepEmpty||(Array.isArray(e)?n=n.concat(H(e)):$e(e)&&e.props?n=n.concat(H(e.props.children,t)):n.push(e))}),n}var ye=globalThis&&globalThis.__rest||function(a,t){var n={};for(var e in a)Object.prototype.hasOwnProperty.call(a,e)&&t.indexOf(e)<0&&(n[e]=a[e]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,e=Object.getOwnPropertySymbols(a);r1&&arguments[1]!==void 0?arguments[1]:1,n=tt++,e=t;function r(){e-=1,e<=0?(a(),delete k[n]):k[n]=V(r)}return k[n]=V(r),n}z.cancel=function(t){t!==void 0&&(V.cancel(k[t]),delete k[t])};z.ids=k;function nt(a,t,n){return t=ve(t),Ue(a,Ve()?Reflect.construct(t,n||[],ve(a).constructor):t.apply(a,n))}var F;function Ce(a){return!a||a.offsetParent===null||a.hidden}function at(a){return a instanceof Document?a.body:Array.from(a.childNodes).find(function(t){return(t==null?void 0:t.nodeType)===Node.ELEMENT_NODE})}function rt(a){var t=(a||"").match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/);return t&&t[1]&&t[2]&&t[3]?!(t[1]===t[2]&&t[2]===t[3]):!0}var xe=function(a){Ae(t,a);function t(){var n;return De(this,t),n=nt(this,t,arguments),n.containerRef=i.createRef(),n.animationStart=!1,n.destroyed=!1,n.onClick=function(e,r){var o,c,s=n.props,l=s.insertExtraNode,v=s.disabled;if(!(v||!e||Ce(e)||e.className.includes("-leave"))){n.extraNode=document.createElement("div");var p=We(n),g=p.extraNode,b=n.context.getPrefixCls;g.className="".concat(b(""),"-click-animating-node");var C=n.getAttributeName();if(e.setAttribute(C,"true"),r&&r!=="#fff"&&r!=="#ffffff"&&r!=="rgb(255, 255, 255)"&&r!=="rgba(255, 255, 255, 1)"&&rt(r)&&!/rgba\((?:\d*, ){3}0\)/.test(r)&&r!=="transparent"){g.style.borderColor=r;var x=((o=e.getRootNode)===null||o===void 0?void 0:o.call(e))||e.ownerDocument,f=(c=at(x))!==null&&c!==void 0?c:x;F=je(` [`.concat(b(""),"-click-animating-without-extra-node='true']::after, .").concat(b(""),`-click-animating-node { --antd-wave-shadow-color: `).concat(r,`; }`),"antd-wave",{csp:n.csp,attachTo:f})}l&&e.appendChild(g),["transition","animation"].forEach(function(m){e.addEventListener("".concat(m,"start"),n.onTransitionStart),e.addEventListener("".concat(m,"end"),n.onTransitionEnd)})}},n.onTransitionStart=function(e){if(!n.destroyed){var r=n.containerRef.current;!e||e.target!==r||n.animationStart||n.resetEffect(r)}},n.onTransitionEnd=function(e){!e||e.animationName!=="fadeEffect"||n.resetEffect(e.target)},n.bindAnimationEvent=function(e){if(!(!e||!e.getAttribute||e.getAttribute("disabled")||e.className.includes("disabled"))){var r=function(c){if(!(c.target.tagName==="INPUT"||Ce(c.target))){n.resetEffect(e);var s=getComputedStyle(e).getPropertyValue("border-top-color")||getComputedStyle(e).getPropertyValue("border-color")||getComputedStyle(e).getPropertyValue("background-color");n.clickWaveTimeoutId=window.setTimeout(function(){return n.onClick(e,s)},0),z.cancel(n.animationStartId),n.animationStart=!0,n.animationStartId=z(function(){n.animationStart=!1},10)}};return e.addEventListener("click",r,!0),{cancel:function(){e.removeEventListener("click",r,!0)}}}},n.renderWave=function(e){var r=e.csp,o=n.props.children;if(n.csp=r,!i.isValidElement(o))return o;var c=n.containerRef;return Be(o)&&(c=Fe(o.ref,n.containerRef)),be(o,{ref:c})},n}return Me(t,[{key:"componentDidMount",value:function(){this.destroyed=!1;var e=this.containerRef.current;!e||e.nodeType!==1||(this.instance=this.bindAnimationEvent(e))}},{key:"componentWillUnmount",value:function(){this.instance&&this.instance.cancel(),this.clickWaveTimeoutId&&clearTimeout(this.clickWaveTimeoutId),this.destroyed=!0}},{key:"getAttributeName",value:function(){var e=this.context.getPrefixCls,r=this.props.insertExtraNode;return r?"".concat(e(""),"-click-animating"):"".concat(e(""),"-click-animating-without-extra-node")}},{key:"resetEffect",value:function(e){var r=this;if(!(!e||e===this.extraNode||!(e instanceof Element))){var o=this.props.insertExtraNode,c=this.getAttributeName();e.setAttribute(c,"false"),F&&(F.innerHTML=""),o&&this.extraNode&&e.contains(this.extraNode)&&e.removeChild(this.extraNode),["transition","animation"].forEach(function(s){e.removeEventListener("".concat(s,"start"),r.onTransitionStart),e.removeEventListener("".concat(s,"end"),r.onTransitionEnd)})}}},{key:"render",value:function(){return i.createElement(Ge,null,this.renderWave)}}]),t}(i.Component);xe.contextType=w;const it=xe;var ot=globalThis&&globalThis.__rest||function(a,t){var n={};for(var e in a)Object.prototype.hasOwnProperty.call(a,e)&&t.indexOf(e)<0&&(n[e]=a[e]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,e=Object.getOwnPropertySymbols(a);r=4.5;case"AAlarge":return o>=3;case"AAAsmall":return o>=7;default:return!1}}function Ya(e,r,t){t===void 0&&(t={includeFallbackColors:!1,level:"AA",size:"small"});for(var n=null,a=0,o=t.includeFallbackColors,u=t.level,f=t.size,y=0,s=r;ya&&(a=h,n=new De(E))}return Ga(e,n,{level:u,size:f})||!o?n:(t.includeFallbackColors=!1,Ya(e,["#fff","#000"],t))}function Qu(e,r){var t=new De(e),n="#"+Vr(t.r,t.g,t.b,t.a),a=n,o=t.gradientType?"GradientType = 1, ":"";if(r){var u=new De(r);a="#"+Vr(u.r,u.g,u.b,u.a)}return"progid:DXImageTransform.Microsoft.gradient(".concat(o,"startColorstr=").concat(n,",endColorstr=").concat(a,")")}function Xu(e,r){var t={r:Dr(e.r),g:Dr(e.g),b:Dr(e.b)};return e.a!==void 0&&(t.a=Number(e.a)),new De(t,r)}function Ju(){return new De({r:Math.random(),g:Math.random(),b:Math.random()})}function Ha(e){if(e===void 0&&(e={}),e.count!==void 0&&e.count!==null){var r=e.count,t=[];for(e.count=void 0;r>t.length;)e.count=null,e.seed&&(e.seed+=1),t.push(Ha(e));return e.count=r,t}var n=Zu(e.hue,e.seed),a=el(n,e),o=tl(n,a,e),u={h:n,s:a,v:o};return e.alpha!==void 0&&(u.a=e.alpha),new De(u)}function Zu(e,r){var t=nl(e),n=Zt(t,r);return n<0&&(n=360+n),n}function el(e,r){if(r.hue==="monochrome")return 0;if(r.luminosity==="random")return Zt([0,100],r.seed);var t=Ka(e).saturationRange,n=t[0],a=t[1];switch(r.luminosity){case"bright":n=55;break;case"dark":n=a-10;break;case"light":a=55;break}return Zt([n,a],r.seed)}function tl(e,r,t){var n=rl(e,r),a=100;switch(t.luminosity){case"dark":a=n+20;break;case"light":n=(a+n)/2;break;case"random":n=0,a=100;break}return Zt([n,a],t.seed)}function rl(e,r){for(var t=Ka(e).lowerBounds,n=0;n=a&&r<=u){var y=(f-o)/(u-a),s=o-y*a;return y*r+s}}return 0}function nl(e){var r=parseInt(e,10);if(!Number.isNaN(r)&&r<360&&r>0)return[r,r];if(typeof e=="string"){var t=mn.find(function(u){return u.name===e});if(t){var n=Va(t);if(n.hueRange)return n.hueRange}var a=new De(e);if(a.isValid){var o=a.toHsv().h;return[o,o]}}return[0,360]}function Ka(e){e>=334&&e<=360&&(e-=360);for(var r=0,t=mn;r=a.hueRange[0]&&e<=a.hueRange[1])return a}throw Error("Color not found")}function Zt(e,r){if(r===void 0)return Math.floor(e[0]+Math.random()*(e[1]+1-e[0]));var t=e[1]||1,n=e[0]||0;r=(r*9301+49297)%233280;var a=r/233280;return Math.floor(n+a*(t-n))}function Va(e){var r=e.lowerBounds[0][0],t=e.lowerBounds[e.lowerBounds.length-1][0],n=e.lowerBounds[e.lowerBounds.length-1][1],a=e.lowerBounds[0][1];return{name:e.name,hueRange:e.hueRange,lowerBounds:e.lowerBounds,saturationRange:[r,t],brightnessRange:[n,a]}}var mn=[{name:"monochrome",hueRange:null,lowerBounds:[[0,0],[100,0]]},{name:"red",hueRange:[-26,18],lowerBounds:[[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]},{name:"orange",hueRange:[19,46],lowerBounds:[[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]},{name:"yellow",hueRange:[47,62],lowerBounds:[[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]},{name:"green",hueRange:[63,178],lowerBounds:[[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]},{name:"blue",hueRange:[179,257],lowerBounds:[[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]},{name:"purple",hueRange:[258,282],lowerBounds:[[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]},{name:"pink",hueRange:[283,334],lowerBounds:[[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]]}];const al=Object.freeze(Object.defineProperty({__proto__:null,TinyColor:De,bounds:mn,convertDecimalToHex:Ru,convertHexToDecimal:Ou,default:ta,fromRatio:Xu,hslToRgb:Eu,hsvToRgb:Su,inputToRGB:Iu,isReadable:Ga,isValidCSSUnit:Tu,legacyRandom:Ju,mostReadable:Ya,names:Mu,numberInputToObject:Nu,parseIntFromHex:$u,random:Ha,readability:pn,rgbToHex:ku,rgbToHsl:Au,rgbToHsv:Du,rgbToRgb:ju,rgbaToArgbHex:Vr,rgbaToHex:Lu,stringInputToObject:qu,tinycolor:ta,toMsFilter:Qu},Symbol.toStringTag,{value:"Module"})),ol=Object.freeze(Object.defineProperty({__proto__:null,CSSMotionList:Fu,Provider:Bu,default:Wu},Symbol.toStringTag,{value:"Module"})),il=Object.freeze(Object.defineProperty({__proto__:null,default:zu},Symbol.toStringTag,{value:"Module"})),ul=Object.freeze(Object.defineProperty({__proto__:null,Panel:Ku,default:Hu},Symbol.toStringTag,{value:"Module"}));var Qa={exports:{}};(function(e){function r(){return e.exports=r=Object.assign?Object.assign.bind():function(t){for(var n=1;n=4.5;case"AAlarge":return o>=3;case"AAAsmall":return o>=7;default:return!1}}function Ya(e,r,t){t===void 0&&(t={includeFallbackColors:!1,level:"AA",size:"small"});for(var n=null,a=0,o=t.includeFallbackColors,u=t.level,f=t.size,y=0,s=r;ya&&(a=h,n=new De(E))}return Ga(e,n,{level:u,size:f})||!o?n:(t.includeFallbackColors=!1,Ya(e,["#fff","#000"],t))}function Qu(e,r){var t=new De(e),n="#"+Vr(t.r,t.g,t.b,t.a),a=n,o=t.gradientType?"GradientType = 1, ":"";if(r){var u=new De(r);a="#"+Vr(u.r,u.g,u.b,u.a)}return"progid:DXImageTransform.Microsoft.gradient(".concat(o,"startColorstr=").concat(n,",endColorstr=").concat(a,")")}function Xu(e,r){var t={r:Dr(e.r),g:Dr(e.g),b:Dr(e.b)};return e.a!==void 0&&(t.a=Number(e.a)),new De(t,r)}function Ju(){return new De({r:Math.random(),g:Math.random(),b:Math.random()})}function Ha(e){if(e===void 0&&(e={}),e.count!==void 0&&e.count!==null){var r=e.count,t=[];for(e.count=void 0;r>t.length;)e.count=null,e.seed&&(e.seed+=1),t.push(Ha(e));return e.count=r,t}var n=Zu(e.hue,e.seed),a=el(n,e),o=tl(n,a,e),u={h:n,s:a,v:o};return e.alpha!==void 0&&(u.a=e.alpha),new De(u)}function Zu(e,r){var t=nl(e),n=Zt(t,r);return n<0&&(n=360+n),n}function el(e,r){if(r.hue==="monochrome")return 0;if(r.luminosity==="random")return Zt([0,100],r.seed);var t=Ka(e).saturationRange,n=t[0],a=t[1];switch(r.luminosity){case"bright":n=55;break;case"dark":n=a-10;break;case"light":a=55;break}return Zt([n,a],r.seed)}function tl(e,r,t){var n=rl(e,r),a=100;switch(t.luminosity){case"dark":a=n+20;break;case"light":n=(a+n)/2;break;case"random":n=0,a=100;break}return Zt([n,a],t.seed)}function rl(e,r){for(var t=Ka(e).lowerBounds,n=0;n=a&&r<=u){var y=(f-o)/(u-a),s=o-y*a;return y*r+s}}return 0}function nl(e){var r=parseInt(e,10);if(!Number.isNaN(r)&&r<360&&r>0)return[r,r];if(typeof e=="string"){var t=mn.find(function(u){return u.name===e});if(t){var n=Va(t);if(n.hueRange)return n.hueRange}var a=new De(e);if(a.isValid){var o=a.toHsv().h;return[o,o]}}return[0,360]}function Ka(e){e>=334&&e<=360&&(e-=360);for(var r=0,t=mn;r=a.hueRange[0]&&e<=a.hueRange[1])return a}throw Error("Color not found")}function Zt(e,r){if(r===void 0)return Math.floor(e[0]+Math.random()*(e[1]+1-e[0]));var t=e[1]||1,n=e[0]||0;r=(r*9301+49297)%233280;var a=r/233280;return Math.floor(n+a*(t-n))}function Va(e){var r=e.lowerBounds[0][0],t=e.lowerBounds[e.lowerBounds.length-1][0],n=e.lowerBounds[e.lowerBounds.length-1][1],a=e.lowerBounds[0][1];return{name:e.name,hueRange:e.hueRange,lowerBounds:e.lowerBounds,saturationRange:[r,t],brightnessRange:[n,a]}}var mn=[{name:"monochrome",hueRange:null,lowerBounds:[[0,0],[100,0]]},{name:"red",hueRange:[-26,18],lowerBounds:[[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]},{name:"orange",hueRange:[19,46],lowerBounds:[[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]},{name:"yellow",hueRange:[47,62],lowerBounds:[[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]},{name:"green",hueRange:[63,178],lowerBounds:[[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]},{name:"blue",hueRange:[179,257],lowerBounds:[[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]},{name:"purple",hueRange:[258,282],lowerBounds:[[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]},{name:"pink",hueRange:[283,334],lowerBounds:[[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]]}];const al=Object.freeze(Object.defineProperty({__proto__:null,TinyColor:De,bounds:mn,convertDecimalToHex:Ru,convertHexToDecimal:Ou,default:ta,fromRatio:Xu,hslToRgb:Eu,hsvToRgb:Su,inputToRGB:Iu,isReadable:Ga,isValidCSSUnit:Tu,legacyRandom:Ju,mostReadable:Ya,names:Mu,numberInputToObject:Nu,parseIntFromHex:$u,random:Ha,readability:pn,rgbToHex:ku,rgbToHsl:Au,rgbToHsv:Du,rgbToRgb:ju,rgbaToArgbHex:Vr,rgbaToHex:Lu,stringInputToObject:qu,tinycolor:ta,toMsFilter:Qu},Symbol.toStringTag,{value:"Module"})),ol=Object.freeze(Object.defineProperty({__proto__:null,CSSMotionList:Fu,Provider:Bu,default:Wu},Symbol.toStringTag,{value:"Module"})),il=Object.freeze(Object.defineProperty({__proto__:null,default:zu},Symbol.toStringTag,{value:"Module"})),ul=Object.freeze(Object.defineProperty({__proto__:null,Panel:Ku,default:Hu},Symbol.toStringTag,{value:"Module"}));var Qa={exports:{}};(function(e){function r(){return e.exports=r=Object.assign?Object.assign.bind():function(t){for(var n=1;n1024*1024*1.999&&a!==h)e=U(e),i=e.type||l;else return navigator.msSaveBlob?navigator.msSaveBlob(U(e),c):p(e);else if(/([\x80-\xff])/.test(e)){var u=0,v=new Uint8Array(e.length),A=v.length;for(u;u1024*1024*1.999&&a!==h)e=U(e),i=e.type||l;else return navigator.msSaveBlob?navigator.msSaveBlob(U(e),c):p(e);else if(/([\x80-\xff])/.test(e)){var u=0,v=new Uint8Array(e.length),A=v.length;for(u;u{document.fonts.ready.then(()=>{u(document.fonts.check("40px Emmentaler-26"))})},[]);const c=Object.keys(l);return e.jsxs("div",{className:"font-test-page",children:[e.jsxs("div",{className:"font-test-header",children:[e.jsx("h1",{children:"Emmentaler-26 Font Glyphs"}),e.jsxs("div",{className:"font-test-status",children:["Font status: ",e.jsx("span",{className:o?"loaded":"not-loaded",children:o?"Loaded":"Not loaded"}),e.jsxs("span",{className:"glyph-count",children:[Object.values(l).reduce((s,n)=>s+n.length,0)," glyphs"]})]}),e.jsxs("div",{className:"font-test-controls",children:[e.jsx("input",{type:"text",placeholder:"Filter glyphs...",value:E,onChange:s=>h(s.target.value)}),e.jsxs("label",{children:["Size:",e.jsx("input",{type:"range",min:20,max:80,value:r,onChange:s=>m(Number(s.target.value))}),r,"px"]})]}),e.jsx("div",{className:"font-test-toc",children:c.map(s=>e.jsxs("a",{href:`#cat-${s}`,children:[i[s]||s," (",l[s].length,")"]},s))})]}),c.map(s=>{const n=l[s].filter(([a,t])=>!E||a.toLowerCase().includes(E.toLowerCase())||t.toLowerCase().includes(E.toLowerCase()));return n.length===0?null:e.jsxs("div",{id:`cat-${s}`,className:"font-test-category",children:[e.jsxs("h2",{children:[i[s]||s," ",e.jsxs("span",{children:["(",n.length,")"]})]}),e.jsx("div",{className:"glyph-grid",children:n.map(([a,t])=>e.jsxs("div",{className:"glyph-cell",title:a,children:[e.jsx("div",{className:"glyph-render",style:{fontSize:r},children:e.jsx("i",{className:`emmentaler glyph-${a}`})}),e.jsx("div",{className:"glyph-unicode",style:{fontSize:r},children:String.fromCodePoint(parseInt(t,16))}),e.jsx("div",{className:"glyph-name",children:a}),e.jsxs("div",{className:"glyph-code",children:["U+",t]})]},`${a}-${t}`))})]},s)})]})}export{f as default}; +import{r as d,j as e}from"./umi-37873494.js";const l={rests:[["rests-0","E000"],["rests-1","E001"],["rests-0o","E002"],["rests-1o","E003"],["rests-M3","E004"],["rests-M2","E005"],["rests-M1","E006"],["rests-M1o","E007"],["rests-2","E008"],["rests-2classical","E009"],["rests-2z","E00A"],["rests-3","E00B"],["rests-4","E00C"],["rests-5","E00D"],["rests-6","E00E"],["rests-7","E00F"],["rests-8","E010"],["rests-9","E011"],["rests-10","E012"],["rests-M3neomensural","E144"],["rests-M2neomensural","E145"],["rests-M1neomensural","E146"],["rests-0neomensural","E147"],["rests-1neomensural","E148"],["rests-2neomensural","E149"],["rests-3neomensural","E14A"],["rests-4neomensural","E14B"],["rests-M3mensural","E14C"],["rests-M2mensural","E14D"],["rests-M1mensural","E14E"],["rests-0mensural","E14F"],["rests-1mensural","E150"],["rests-2mensural","E151"],["rests-3mensural","E152"],["rests-4mensural","E153"]],accidentals:[["accidentals-sharp","E013"],["accidentals-sharp-arrowup","E014"],["accidentals-sharp-arrowdown","E015"],["accidentals-sharp-arrowboth","E016"],["accidentals-sharp-slashslash-stem","E017"],["accidentals-sharp-slashslashslash-stemstem","E018"],["accidentals-sharp-slashslashslash-stem","E019"],["accidentals-sharp-slash-stem","E01A"],["accidentals-sharp-slashslash-stemstemstem","E01B"],["accidentals-doublesharp","E01C"],["accidentals-natural","E01D"],["accidentals-natural-arrowup","E01E"],["accidentals-natural-arrowdown","E01F"],["accidentals-natural-arrowboth","E020"],["accidentals-flat","E021"],["accidentals-flat-arrowup","E022"],["accidentals-flat-arrowdown","E023"],["accidentals-flat-arrowboth","E024"],["accidentals-flat-slash","E025"],["accidentals-flat-slashslash","E026"],["accidentals-mirroredflat-flat","E027"],["accidentals-mirroredflat","E028"],["accidentals-mirroredflat-backslash","E029"],["accidentals-flatflat","E02A"],["accidentals-flatflat-slash","E02B"],["accidentals-rightparen","E02C"],["accidentals-leftparen","E02D"],["accidentals-medicaeaM1","E194"],["accidentals-vaticanaM1","E195"],["accidentals-vaticana0","E196"],["accidentals-mensural1","E197"],["accidentals-mensuralM1","E198"],["accidentals-hufnagelM1","E199"],["accidentals-kievan1","E19A"],["accidentals-kievanM1","E19B"]],arrowheads:[["arrowheads-open-01","E02E"],["arrowheads-open-0M1","E02F"],["arrowheads-open-11","E030"],["arrowheads-open-1M1","E031"],["arrowheads-close-01","E032"],["arrowheads-close-0M1","E033"],["arrowheads-close-11","E034"],["arrowheads-close-1M1","E035"]],dot:[["dot","E036"]],scripts:[["scripts-ufermata","E037"],["scripts-dfermata","E038"],["scripts-uhenzeshortfermata","E039"],["scripts-dhenzeshortfermata","E03A"],["scripts-uhenzelongfermata","E03B"],["scripts-dhenzelongfermata","E03C"],["scripts-ushortfermata","E03D"],["scripts-dshortfermata","E03E"],["scripts-uveryshortfermata","E03F"],["scripts-dveryshortfermata","E040"],["scripts-ulongfermata","E041"],["scripts-dlongfermata","E042"],["scripts-uverylongfermata","E043"],["scripts-dverylongfermata","E044"],["scripts-thumb","E045"],["scripts-sforzato","E046"],["scripts-espr","E047"],["scripts-staccato","E048"],["scripts-ustaccatissimo","E049"],["scripts-dstaccatissimo","E04A"],["scripts-tenuto","E04B"],["scripts-uportato","E04C"],["scripts-dportato","E04D"],["scripts-umarcato","E04E"],["scripts-dmarcato","E04F"],["scripts-open","E050"],["scripts-halfopen","E051"],["scripts-halfopenvertical","E052"],["scripts-stopped","E053"],["scripts-upbow","E054"],["scripts-downbow","E055"],["scripts-reverseturn","E056"],["scripts-turn","E057"],["scripts-slashturn","E058"],["scripts-haydnturn","E059"],["scripts-trill","E05A"],["scripts-upedalheel","E05B"],["scripts-dpedalheel","E05C"],["scripts-upedaltoe","E05D"],["scripts-dpedaltoe","E05E"],["scripts-flageolet","E05F"],["scripts-segno","E060"],["scripts-varsegno","E061"],["scripts-coda","E062"],["scripts-varcoda","E063"],["scripts-rcomma","E064"],["scripts-lcomma","E065"],["scripts-rvarcomma","E066"],["scripts-lvarcomma","E067"],["scripts-arpeggio","E068"],["scripts-trill_element","E069"],["scripts-arpeggio-arrow-M1","E06A"],["scripts-arpeggio-arrow-1","E06B"],["scripts-trillelement","E06C"],["scripts-prall","E06D"],["scripts-mordent","E06E"],["scripts-prallprall","E06F"],["scripts-prallmordent","E070"],["scripts-upprall","E071"],["scripts-upmordent","E072"],["scripts-prallup","E073"],["scripts-downprall","E074"],["scripts-downmordent","E075"],["scripts-pralldown","E076"],["scripts-lineprall","E077"],["scripts-caesura-curved","E078"],["scripts-caesura-straight","E079"],["scripts-tickmark","E07A"],["scripts-snappizzicato","E07B"],["scripts-ictus","E1CA"],["scripts-uaccentus","E1CB"],["scripts-daccentus","E1CC"],["scripts-usemicirculus","E1CD"],["scripts-dsemicirculus","E1CE"],["scripts-circulus","E1CF"],["scripts-augmentum","E1D0"],["scripts-usignumcongruentiae","E1D1"],["scripts-dsignumcongruentiae","E1D2"],["scripts-barline-kievan","E1D3"]],clefs:[["clefs-C","E07C"],["clefs-C_change","E07D"],["clefs-varC","E07E"],["clefs-varC_change","E07F"],["clefs-F","E080"],["clefs-F_change","E081"],["clefs-G","E082"],["clefs-G_change","E083"],["clefs-GG","E084"],["clefs-GG_change","E085"],["clefs-tenorG","E086"],["clefs-tenorG_change","E087"],["clefs-percussion","E088"],["clefs-percussion_change","E089"],["clefs-varpercussion","E08A"],["clefs-varpercussion_change","E08B"],["clefs-tab","E08C"],["clefs-tab_change","E08D"],["clefs-vaticana-do","E154"],["clefs-vaticana-do_change","E155"],["clefs-vaticana-fa","E156"],["clefs-vaticana-fa_change","E157"],["clefs-medicaea-do","E158"],["clefs-medicaea-do_change","E159"],["clefs-medicaea-fa","E15A"],["clefs-medicaea-fa_change","E15B"],["clefs-neomensural-c","E15C"],["clefs-neomensural-c_change","E15D"],["clefs-petrucci-c1","E15E"],["clefs-petrucci-c1_change","E15F"],["clefs-petrucci-c2","E160"],["clefs-petrucci-c2_change","E161"],["clefs-petrucci-c3","E162"],["clefs-petrucci-c3_change","E163"],["clefs-petrucci-c4","E164"],["clefs-petrucci-c4_change","E165"],["clefs-petrucci-c5","E166"],["clefs-petrucci-c5_change","E167"],["clefs-mensural-c","E168"],["clefs-mensural-c_change","E169"],["clefs-blackmensural-c","E16A"],["clefs-blackmensural-c_change","E16B"],["clefs-petrucci-f","E16C"],["clefs-petrucci-f_change","E16D"],["clefs-mensural-f","E16E"],["clefs-mensural-f_change","E16F"],["clefs-petrucci-g","E170"],["clefs-petrucci-g_change","E171"],["clefs-mensural-g","E172"],["clefs-mensural-g_change","E173"],["clefs-hufnagel-do","E174"],["clefs-hufnagel-do_change","E175"],["clefs-hufnagel-fa","E176"],["clefs-hufnagel-fa_change","E177"],["clefs-hufnagel-do-fa","E178"],["clefs-hufnagel-do-fa_change","E179"],["clefs-kievan-do","E17A"],["clefs-kievan-do_change","E17B"]],timesig:[["timesig-C44","E08E"],["timesig-C22","E08F"],["timesig-mensural44","E1B4"],["timesig-mensural22","E1B5"],["timesig-mensural32","E1B6"],["timesig-mensural64","E1B7"],["timesig-mensural94","E1B8"],["timesig-mensural34","E1B9"],["timesig-mensural68","E1BA"],["timesig-mensural98","E1BB"],["timesig-mensural48","E1BC"],["timesig-mensural68alt","E1BD"],["timesig-mensural24","E1BE"],["timesig-neomensural44","E1BF"],["timesig-neomensural22","E1C0"],["timesig-neomensural32","E1C1"],["timesig-neomensural64","E1C2"],["timesig-neomensural94","E1C3"],["timesig-neomensural34","E1C4"],["timesig-neomensural68","E1C5"],["timesig-neomensural98","E1C6"],["timesig-neomensural48","E1C7"],["timesig-neomensural68alt","E1C8"],["timesig-neomensural24","E1C9"]],pedal:[["pedal-star","E090"],["pedal-M","E091"],["pedal--","E092"],["pedal-P","E093"],["pedal-d","E094"],["pedal-e","E095"],["pedal-Ped","E096"]],brackettips:[["brackettips-up","E097"],["brackettips-down","E098"]],accordion:[["accordion-discant","E099"],["accordion-dot","E09A"],["accordion-freebass","E09B"],["accordion-stdbass","E09C"],["accordion-bayanbass","E09D"],["accordion-oldEE","E09E"],["accordion-push","E09F"],["accordion-pull","E0A0"]],ties:[["ties-lyric-short","E0A1"],["ties-lyric-default","E0A2"]],noteheads:[["noteheads-uM2","E0A3"],["noteheads-dM2","E0A4"],["noteheads-sM1","E0A5"],["noteheads-sM1double","E0A6"],["noteheads-s0","E0A7"],["noteheads-s1","E0A8"],["noteheads-s2","E0A9"],["noteheads-s0diamond","E0AA"],["noteheads-s1diamond","E0AB"],["noteheads-s2diamond","E0AC"],["noteheads-s0triangle","E0AD"],["noteheads-d1triangle","E0AE"],["noteheads-u1triangle","E0AF"],["noteheads-u2triangle","E0B0"],["noteheads-d2triangle","E0B1"],["noteheads-s0slash","E0B2"],["noteheads-s1slash","E0B3"],["noteheads-s2slash","E0B4"],["noteheads-s0cross","E0B5"],["noteheads-s1cross","E0B6"],["noteheads-s2cross","E0B7"],["noteheads-s2xcircle","E0B8"],["noteheads-s0do","E0B9"],["noteheads-d1do","E0BA"],["noteheads-u1do","E0BB"],["noteheads-d2do","E0BC"],["noteheads-u2do","E0BD"],["noteheads-s0doThin","E0BE"],["noteheads-d1doThin","E0BF"],["noteheads-u1doThin","E0C0"],["noteheads-d2doThin","E0C1"],["noteheads-u2doThin","E0C2"],["noteheads-s0re","E0C3"],["noteheads-u1re","E0C4"],["noteheads-d1re","E0C5"],["noteheads-u2re","E0C6"],["noteheads-d2re","E0C7"],["noteheads-s0reThin","E0C8"],["noteheads-u1reThin","E0C9"],["noteheads-d1reThin","E0CA"],["noteheads-u2reThin","E0CB"],["noteheads-d2reThin","E0CC"],["noteheads-s0mi","E0CD"],["noteheads-s1mi","E0CE"],["noteheads-s2mi","E0CF"],["noteheads-s0miMirror","E0D0"],["noteheads-s1miMirror","E0D1"],["noteheads-s2miMirror","E0D2"],["noteheads-s0miThin","E0D3"],["noteheads-s1miThin","E0D4"],["noteheads-s2miThin","E0D5"],["noteheads-u0fa","E0D6"],["noteheads-d0fa","E0D7"],["noteheads-u1fa","E0D8"],["noteheads-d1fa","E0D9"],["noteheads-u2fa","E0DA"],["noteheads-d2fa","E0DB"],["noteheads-u0faThin","E0DC"],["noteheads-d0faThin","E0DD"],["noteheads-u1faThin","E0DE"],["noteheads-d1faThin","E0DF"],["noteheads-u2faThin","E0E0"],["noteheads-d2faThin","E0E1"],["noteheads-s0sol","E0E2"],["noteheads-s1sol","E0E3"],["noteheads-s2sol","E0E4"],["noteheads-s0la","E0E5"],["noteheads-s1la","E0E6"],["noteheads-s2la","E0E7"],["noteheads-s0laThin","E0E8"],["noteheads-s1laThin","E0E9"],["noteheads-s2laThin","E0EA"],["noteheads-s0ti","E0EB"],["noteheads-u1ti","E0EC"],["noteheads-d1ti","E0ED"],["noteheads-u2ti","E0EE"],["noteheads-d2ti","E0EF"],["noteheads-s0tiThin","E0F0"],["noteheads-u1tiThin","E0F1"],["noteheads-d1tiThin","E0F2"],["noteheads-u2tiThin","E0F3"],["noteheads-d2tiThin","E0F4"],["noteheads-u0doFunk","E0F5"],["noteheads-d0doFunk","E0F6"],["noteheads-u1doFunk","E0F7"],["noteheads-d1doFunk","E0F8"],["noteheads-u2doFunk","E0F9"],["noteheads-d2doFunk","E0FA"],["noteheads-u0reFunk","E0FB"],["noteheads-d0reFunk","E0FC"],["noteheads-u1reFunk","E0FD"],["noteheads-d1reFunk","E0FE"],["noteheads-u2reFunk","E0FF"],["noteheads-d2reFunk","E100"],["noteheads-u0miFunk","E101"],["noteheads-d0miFunk","E102"],["noteheads-u1miFunk","E103"],["noteheads-d1miFunk","E104"],["noteheads-s2miFunk","E105"],["noteheads-u0faFunk","E106"],["noteheads-d0faFunk","E107"],["noteheads-u1faFunk","E108"],["noteheads-d1faFunk","E109"],["noteheads-u2faFunk","E10A"],["noteheads-d2faFunk","E10B"],["noteheads-s0solFunk","E10C"],["noteheads-s1solFunk","E10D"],["noteheads-s2solFunk","E10E"],["noteheads-s0laFunk","E10F"],["noteheads-s1laFunk","E110"],["noteheads-s2laFunk","E111"],["noteheads-u0tiFunk","E112"],["noteheads-d0tiFunk","E113"],["noteheads-u1tiFunk","E114"],["noteheads-d1tiFunk","E115"],["noteheads-u2tiFunk","E116"],["noteheads-d2tiFunk","E117"],["noteheads-s0doWalker","E118"],["noteheads-u1doWalker","E119"],["noteheads-d1doWalker","E11A"],["noteheads-u2doWalker","E11B"],["noteheads-d2doWalker","E11C"],["noteheads-s0reWalker","E11D"],["noteheads-u1reWalker","E11E"],["noteheads-d1reWalker","E11F"],["noteheads-u2reWalker","E120"],["noteheads-d2reWalker","E121"],["noteheads-s0miWalker","E122"],["noteheads-s1miWalker","E123"],["noteheads-s2miWalker","E124"],["noteheads-s0faWalker","E125"],["noteheads-u1faWalker","E126"],["noteheads-d1faWalker","E127"],["noteheads-u2faWalker","E128"],["noteheads-d2faWalker","E129"],["noteheads-s0laWalker","E12A"],["noteheads-s1laWalker","E12B"],["noteheads-s2laWalker","E12C"],["noteheads-s0tiWalker","E12D"],["noteheads-u1tiWalker","E12E"],["noteheads-d1tiWalker","E12F"],["noteheads-u2tiWalker","E130"],["noteheads-d2tiWalker","E131"],["noteheads-uM3neomensural","E1D6"],["noteheads-dM3neomensural","E1D7"],["noteheads-uM2neomensural","E1D8"],["noteheads-dM2neomensural","E1D9"],["noteheads-sM1neomensural","E1DA"],["noteheads-urM3neomensural","E1DB"],["noteheads-drM3neomensural","E1DC"],["noteheads-urM2neomensural","E1DD"],["noteheads-drM2neomensural","E1DE"],["noteheads-srM1neomensural","E1DF"],["noteheads-s0neomensural","E1E0"],["noteheads-s1neomensural","E1E1"],["noteheads-s2neomensural","E1E2"],["noteheads-s0harmonic","E1E3"],["noteheads-s2harmonic","E1E4"],["noteheads-uM3mensural","E1E5"],["noteheads-dM3mensural","E1E6"],["noteheads-sM3ligmensural","E1E7"],["noteheads-uM2mensural","E1E8"],["noteheads-dM2mensural","E1E9"],["noteheads-sM2ligmensural","E1EA"],["noteheads-sM1mensural","E1EB"],["noteheads-urM3mensural","E1EC"],["noteheads-drM3mensural","E1ED"],["noteheads-srM3ligmensural","E1EE"],["noteheads-urM2mensural","E1EF"],["noteheads-drM2mensural","E1F0"],["noteheads-srM2ligmensural","E1F1"],["noteheads-srM1mensural","E1F2"],["noteheads-uM3semimensural","E1F3"],["noteheads-dM3semimensural","E1F4"],["noteheads-sM3semiligmensural","E1F5"],["noteheads-uM2semimensural","E1F6"],["noteheads-dM2semimensural","E1F7"],["noteheads-sM2semiligmensural","E1F8"],["noteheads-sM1semimensural","E1F9"],["noteheads-urM3semimensural","E1FA"],["noteheads-drM3semimensural","E1FB"],["noteheads-srM3semiligmensural","E1FC"],["noteheads-urM2semimensural","E1FD"],["noteheads-drM2semimensural","E1FE"],["noteheads-srM2semiligmensural","E1FF"],["noteheads-srM1semimensural","E200"],["noteheads-uM3blackmensural","E201"],["noteheads-dM3blackmensural","E202"],["noteheads-sM3blackligmensural","E203"],["noteheads-uM2blackmensural","E204"],["noteheads-dM2blackmensural","E205"],["noteheads-sM2blackligmensural","E206"],["noteheads-sM1blackmensural","E207"],["noteheads-s0mensural","E208"],["noteheads-s1mensural","E209"],["noteheads-s2mensural","E20A"],["noteheads-s0blackmensural","E20B"],["noteheads-s0petrucci","E20C"],["noteheads-s1petrucci","E20D"],["noteheads-s2petrucci","E20E"],["noteheads-s0blackpetrucci","E20F"],["noteheads-s1blackpetrucci","E210"],["noteheads-s2blackpetrucci","E211"],["noteheads-svaticana-punctum","E212"],["noteheads-svaticana-punctum-cavum","E213"],["noteheads-svaticana-linea-punctum","E214"],["noteheads-svaticana-linea-punctum-cavum","E215"],["noteheads-svaticana-inclinatum","E216"],["noteheads-svaticana-lpes","E217"],["noteheads-svaticana-vlpes","E218"],["noteheads-svaticana-upes","E219"],["noteheads-svaticana-vupes","E21A"],["noteheads-svaticana-plica","E21B"],["noteheads-svaticana-vplica","E21C"],["noteheads-svaticana-epiphonus","E21D"],["noteheads-svaticana-vepiphonus","E21E"],["noteheads-svaticana-reverse-plica","E21F"],["noteheads-svaticana-reverse-vplica","E220"],["noteheads-svaticana-inner-cephalicus","E221"],["noteheads-svaticana-cephalicus","E222"],["noteheads-svaticana-quilisma","E223"],["noteheads-ssolesmes-incl-parvum","E224"],["noteheads-ssolesmes-auct-asc","E225"],["noteheads-ssolesmes-auct-desc","E226"],["noteheads-ssolesmes-incl-auctum","E227"],["noteheads-ssolesmes-stropha","E228"],["noteheads-ssolesmes-stropha-aucta","E229"],["noteheads-ssolesmes-oriscus","E22A"],["noteheads-smedicaea-inclinatum","E22B"],["noteheads-smedicaea-punctum","E22C"],["noteheads-smedicaea-rvirga","E22D"],["noteheads-smedicaea-virga","E22E"],["noteheads-shufnagel-punctum","E22F"],["noteheads-shufnagel-virga","E230"],["noteheads-shufnagel-lpes","E231"],["noteheads-sM2kievan","E232"],["noteheads-sM1kievan","E233"],["noteheads-s0kievan","E234"],["noteheads-d2kievan","E235"],["noteheads-u2kievan","E236"],["noteheads-s1kievan","E237"],["noteheads-sr1kievan","E238"],["noteheads-d3kievan","E239"],["noteheads-u3kievan","E23A"]],flags:[["flags-u3","E132"],["flags-u4","E133"],["flags-u5","E134"],["flags-u6","E135"],["flags-u7","E136"],["flags-u8","E137"],["flags-u9","E138"],["flags-u10","E139"],["flags-d3","E13A"],["flags-d4","E13B"],["flags-d5","E13C"],["flags-d6","E13D"],["flags-d7","E13E"],["flags-d8","E13F"],["flags-d9","E140"],["flags-d10","E141"],["flags-ugrace","E142"],["flags-dgrace","E143"],["flags-mensuralu03","E19C"],["flags-mensuralu13","E19D"],["flags-mensuralu23","E19E"],["flags-mensurald03","E19F"],["flags-mensurald13","E1A0"],["flags-mensurald23","E1A1"],["flags-mensuralu04","E1A2"],["flags-mensuralu14","E1A3"],["flags-mensuralu24","E1A4"],["flags-mensurald04","E1A5"],["flags-mensurald14","E1A6"],["flags-mensurald24","E1A7"],["flags-mensuralu05","E1A8"],["flags-mensuralu15","E1A9"],["flags-mensuralu25","E1AA"],["flags-mensurald05","E1AB"],["flags-mensurald15","E1AC"],["flags-mensurald25","E1AD"],["flags-mensuralu06","E1AE"],["flags-mensuralu16","E1AF"],["flags-mensuralu26","E1B0"],["flags-mensurald06","E1B1"],["flags-mensurald16","E1B2"],["flags-mensurald26","E1B3"]],custodes:[["custodes-hufnagel-u0","E17C"],["custodes-hufnagel-u1","E17D"],["custodes-hufnagel-u2","E17E"],["custodes-hufnagel-d0","E17F"],["custodes-hufnagel-d1","E180"],["custodes-hufnagel-d2","E181"],["custodes-medicaea-u0","E182"],["custodes-medicaea-u1","E183"],["custodes-medicaea-u2","E184"],["custodes-medicaea-d0","E185"],["custodes-medicaea-d1","E186"],["custodes-medicaea-d2","E187"],["custodes-vaticana-u0","E188"],["custodes-vaticana-u1","E189"],["custodes-vaticana-u2","E18A"],["custodes-vaticana-d0","E18B"],["custodes-vaticana-d1","E18C"],["custodes-vaticana-d2","E18D"],["custodes-mensural-u0","E18E"],["custodes-mensural-u1","E18F"],["custodes-mensural-u2","E190"],["custodes-mensural-d0","E191"],["custodes-mensural-d1","E192"],["custodes-mensural-d2","E193"]],dots:[["dots-dotvaticana","E1D4"],["dots-dotkievan","E1D5"]]},i={rests:"Rests",accidentals:"Accidentals",arrowheads:"Arrowheads",dot:"Dot",scripts:"Scripts & Articulations",clefs:"Clefs",timesig:"Time Signatures",pedal:"Pedal",brackettips:"Bracket Tips",accordion:"Accordion",ties:"Ties",noteheads:"Noteheads",flags:"Flags",custodes:"Custodes",dots:"Dots"};function f(){const[o,u]=d.useState(!1),[E,h]=d.useState(""),[r,m]=d.useState(40);d.useEffect(()=>{document.fonts.ready.then(()=>{u(document.fonts.check("40px Emmentaler-26"))})},[]);const c=Object.keys(l);return e.jsxs("div",{className:"font-test-page",children:[e.jsxs("div",{className:"font-test-header",children:[e.jsx("h1",{children:"Emmentaler-26 Font Glyphs"}),e.jsxs("div",{className:"font-test-status",children:["Font status: ",e.jsx("span",{className:o?"loaded":"not-loaded",children:o?"Loaded":"Not loaded"}),e.jsxs("span",{className:"glyph-count",children:[Object.values(l).reduce((s,n)=>s+n.length,0)," glyphs"]})]}),e.jsxs("div",{className:"font-test-controls",children:[e.jsx("input",{type:"text",placeholder:"Filter glyphs...",value:E,onChange:s=>h(s.target.value)}),e.jsxs("label",{children:["Size:",e.jsx("input",{type:"range",min:20,max:80,value:r,onChange:s=>m(Number(s.target.value))}),r,"px"]})]}),e.jsx("div",{className:"font-test-toc",children:c.map(s=>e.jsxs("a",{href:`#cat-${s}`,children:[i[s]||s," (",l[s].length,")"]},s))})]}),c.map(s=>{const n=l[s].filter(([a,t])=>!E||a.toLowerCase().includes(E.toLowerCase())||t.toLowerCase().includes(E.toLowerCase()));return n.length===0?null:e.jsxs("div",{id:`cat-${s}`,className:"font-test-category",children:[e.jsxs("h2",{children:[i[s]||s," ",e.jsxs("span",{children:["(",n.length,")"]})]}),e.jsx("div",{className:"glyph-grid",children:n.map(([a,t])=>e.jsxs("div",{className:"glyph-cell",title:a,children:[e.jsx("div",{className:"glyph-render",style:{fontSize:r},children:e.jsx("i",{className:`emmentaler glyph-${a}`})}),e.jsx("div",{className:"glyph-unicode",style:{fontSize:r},children:String.fromCodePoint(parseInt(t,16))}),e.jsx("div",{className:"glyph-name",children:a}),e.jsxs("div",{className:"glyph-code",children:["U+",t]})]},`${a}-${t}`))})]},s)})]})}export{f as default}; diff --git a/dist/assets/gauge-79e4e524.js b/dist/assets/gauge-d8f53ae9.js similarity index 91% rename from dist/assets/gauge-79e4e524.js rename to dist/assets/gauge-d8f53ae9.js index 09895499cdb3c0f8a07ce08ad0cbafe658ec9c48..70631747ad71a5375b25411d345a1c7a925d60f2 100644 --- a/dist/assets/gauge-79e4e524.js +++ b/dist/assets/gauge-d8f53ae9.js @@ -1 +1 @@ -import{r as e,j as r}from"./umi-91f9d113.js";import{G as d}from"./gaugeRendererGL-41abf4c6.js";const a=[["source1.png","gauge1.png"],["source2.png","gauge2.png"]];function l(){const n=e.useRef(),t=e.useRef(),s=e.useRef(),[c,o]=e.useState(),[u,g]=e.useState(0);return e.useEffect(()=>{o(new d({source:n.current,gauge:t.current,canvas:s.current}))},[n.current,t.current,s.current]),r.jsxs("div",{children:[r.jsx("img",{ref:n,src:`/test.local/${a[u][0]}`}),r.jsx("img",{ref:t,src:`/test.local/${a[u][1]}`}),r.jsx("canvas",{ref:s}),r.jsx("button",{onClick:()=>g((u+1)%a.length),children:"change"}),r.jsx("button",{onClick:()=>{c.updateMaterial({width:t.current.width}),c.updateGeometry(),c.render()},children:"render"})]})}export{l as default}; +import{r as e,j as r}from"./umi-37873494.js";import{G as d}from"./gaugeRendererGL-41abf4c6.js";const a=[["source1.png","gauge1.png"],["source2.png","gauge2.png"]];function l(){const n=e.useRef(),t=e.useRef(),s=e.useRef(),[c,o]=e.useState(),[u,g]=e.useState(0);return e.useEffect(()=>{o(new d({source:n.current,gauge:t.current,canvas:s.current}))},[n.current,t.current,s.current]),r.jsxs("div",{children:[r.jsx("img",{ref:n,src:`/test.local/${a[u][0]}`}),r.jsx("img",{ref:t,src:`/test.local/${a[u][1]}`}),r.jsx("canvas",{ref:s}),r.jsx("button",{onClick:()=>g((u+1)%a.length),children:"change"}),r.jsx("button",{onClick:()=>{c.updateMaterial({width:t.current.width}),c.updateGeometry(),c.render()},children:"render"})]})}export{l as default}; diff --git a/dist/assets/index-52b475a0.js b/dist/assets/index-039cd1e1.js similarity index 91% rename from dist/assets/index-52b475a0.js rename to dist/assets/index-039cd1e1.js index 4ad190278c90e1e10faf0d4bdaaf69432a62b029..9d8ff4c5660bc70505223626277501c52aa4de04 100644 --- a/dist/assets/index-52b475a0.js +++ b/dist/assets/index-039cd1e1.js @@ -1 +1 @@ -import{r as S,j as t}from"./umi-91f9d113.js";import{M as ee}from"./index-6dffb190.js";import{S as se}from"./index-11479954.js";import{I as j,u as te,m as ae,P as oe}from"./tiny-invariant-023fafff.js";import{A as ne,r as re}from"./confirm-34976587.js";import{k as N,l as ie,t as le,q as ce,P as ue,r as V,s as X,z as de,B as A,D as me}from"./index-4514925e.js";import{q as he,r as fe}from"./index-b284aaac.js";import{a as Q,R as pe,C as G,L as ge}from"./util-b514be53.js";import{B as W}from"./button-909b3565.js";import{D as xe,S as Ie}from"./index-dc40c6e7.js";import{m as Se}from"./_setToString-397d22bb.js";import{S as _}from"./TextArea-3bdaceca.js";import{U as Z,a as ye,I as we}from"./index-0298c320.js";import"./parser-f1e7dbfb.js";import{D as je}from"./DownloadOutlined-f081b8de.js";import"./index-1fa256e9.js";import"./download-e05f9890.js";import"./jszip.min-21813277.js";import"./schedulePool-cc4538c2.js";import"./index-37861f16.js";import"./progress-f968a1fe.js";import"./DeleteOutlined-0f1ef15a.js";const E={normal:"#7776",issue:"#d8f436",ill:"#f4b836",error:"#f44336"},Me={[j.Discard]:"RosyBrown",[j.Solved]:"GreenYellow",[j.Issue]:"orange",[j.Fatal]:"red"},be={[j.Discard]:"-",[j.Issue]:"*",[j.Fatal]:"**"};function ke(a,n){if(n)return Me[n.status]??E.normal;if(!a)return E.normal;const l=a.tickTwist,r=a.tickRatesInStaves;if(r!=null&&r.some(d=>d<0)||l>=1)return E.error;try{if(a.hasIllEvent||l>.36)return E.ill}catch{}return E.normal}function Ce(a){return a?be[a.status]??"":""}const ve=S.memo(({stand:a,spartito:n,issueMeasures:l,onMeasureClick:r,selectedMeasureIndex:d})=>{if(!a||a.systems.length===0)return null;const g=2,i=a.maxWidth+g*2,x=a.totalHeight+g*2,p=n==null?void 0:n.measures,u=S.useMemo(()=>{const o=new Map;if(l)for(const s of l)o.set(s.measureIndex,s);return o},[l]);return t.jsx("svg",{className:"spartito-stand",viewBox:`${-g} ${-g} ${i} ${x}`,style:{width:"100%",height:"auto"},children:a.systems.map(o=>{const s=o.staffImages.length>0?o.staffImages[0].position.y:0;return t.jsxs("g",{transform:`translate(0, ${o.y})`,children:[o.staffImages.map((e,m)=>t.jsx("image",{href:e.url,x:e.position.x,y:e.position.y,width:e.position.width,height:e.position.height,preserveAspectRatio:"none"},m)),o.measures.map(e=>{const m=e.measureIndex===d,c=p==null?void 0:p[e.measureIndex],h=u.get(e.measureIndex),k=ke(c,h),U=c&&c.regulationHash!=c.regulationHash0,v=s-1;return t.jsxs("g",{onClick:()=>r(e.measureIndex),children:[t.jsx("rect",{className:`spartito-measure-rect ${m?"selected":""}`,x:e.left,y:0,width:e.right-e.left,height:o.height}),t.jsxs("text",{className:"spartito-measure-index",x:e.left+.5,y:v,fontSize:2.6,fontWeight:"bold",fill:k,children:[Ce(h),e.measureIndex+1,h!=null&&h.annotator?t.jsx("tspan",{dy:"-1",fontSize:"1.6px",fill:"DodgerBlue",children:"★"}):null,U?t.jsx("tspan",{y:v-.8,fontSize:"2px",children:"⚠"}):null]})]},e.measureIndex)})]},o.systemIndex)})})}),q=5;function J(a){var g;const n=new Map;for(const i of a.measures){const x=i.position.systemIndex;n.has(x)||n.set(x,[]),n.get(x).push(i)}const l=[];let r=0;const d=Array.from(n.keys()).sort((i,x)=>i-x);for(const i of d){const x=n.get(i),p=x[0],u=p.backgroundImages||[];let o=0,s=0;if(u.length>0)s=Math.min(...u.map(h=>h.position.y)),o=Math.max(...u.map(h=>h.position.y+h.position.height))-s;else if((g=p.position.staffYs)!=null&&g.length){const c=p.position.staffYs;o=c[c.length-1]-c[0]+24}const e=u.map(c=>({...c,position:{...c.position,y:c.position.y-s}})),m=Math.max(...x.map(c=>c.position.right));l.push({systemIndex:i,y:r,height:o,width:m,staffImages:e,measures:x.map(c=>({measureIndex:c.measureIndex,left:c.position.left,right:c.position.right}))}),r+=o+q}return{systems:l,totalHeight:r-(l.length>0?q:0),maxWidth:Math.max(...l.map(i=>i.width),0)}}function Ue(a){var p;const n=new Map;for(const u of a.measures){const o=u.position.systemIndex;n.has(o)||n.set(o,[]),n.get(o).push(u)}const r=Array.from(n.keys()).sort((u,o)=>u-o).map(u=>{const o=n.get(u),s=o[0],e=s.backgroundImages||[],m=Math.max(...o.map(I=>I.position.right)),c=e.filter(I=>I.original!==!1),h=s.position.staffYs||[],k=h.length||a.stavesCount||0,U=o.map(I=>I.position.right);let v,B,b;return c.length>=k&&k>0?b=c.map(I=>new N({backgroundImage:I.url,imagePosition:I.position,top:0,height:I.position.height,staffY:I.position.y+I.position.height/2,maskImage:null,measureCount:o.length})):c.length>0&&k>c.length&&(v=c[0].url,B=c[0].position,h.length>=k&&(b=h.map((I,O)=>new N({top:I-10/2,height:10,staffY:10/2,maskImage:null,measureBars:U})))),new ie({stavesCount:(b==null?void 0:b.length)||k||a.stavesCount,staves:(b==null?void 0:b.length)>0?b:void 0,backgroundImage:v,imagePosition:B,width:m,left:0,top:0,measureCount:o.length,measureBars:U,semantics:[],sidBlackList:[],sidWhiteList:[]})}),d=new le({width:794,height:1122,systems:r,semantics:[]}),g=new ce({title:"Spartito",pages:[d],staffLayoutCode:((p=a.staffGroups)==null?void 0:p.map(u=>u.length>1?`{${u.map(()=>"-").join("")}}`:"-").join(","))||"",settings:{enabledGauge:!0,pageLayoutMethod:ue.ByLines,semanticConfidenceThreshold:1}}),i=g.staffLayout,x=i.standaloneGroups.map(u=>u.map(o=>i.staffIds.indexOf(o)));return a.staffGroups=x,a.measures.forEach(u=>u.staffGroups=x),g.spartito=a,g.patches=[],g}const{Header:$e,Content:Be}=Q,{Dragger:Le}=Z,De=async a=>{let n=null;try{const l=await he();n=l==null?void 0:l.omrDomain}catch{}for(const l of a.measures)if(l.backgroundImages)for(const r of l.backgroundImages)r.url.startsWith("md5:")&&(r.url=`/uploads/${r.url.replace("md5:","")}`)},K=a=>{const n=[];for(const l of a.measures){if(!l.regulated)continue;const r=de(l);(!r||r.error||!r.fine)&&n.push({scoreId:null,status:r!=null&&r.error?j.Fatal:j.Issue,measureIndex:l.measureIndex,hash:l.regulationHash0,lastUpdate:null,measure:new A(l)})}return n},Ee=async(a,n,l)=>{if(!l)return a;try{const r=await fe.get(`/api/scores/${l}/issueMeasures`,{params:{limit:1e3}}),d=r==null?void 0:r.rows;if(console.log("[spartito] fetchAndMerge: scoreId=%s, resp=%o, fetched=%d, localIssues=%d",l,r,(d==null?void 0:d.length)??0,a.length),!(d!=null&&d.length))return a;const g=new Map;for(const s of d)s.hash&&g.set(s.hash,s);const i=new Map;for(const[s,e]of g)e.measure&&i.set(s,V(e.measure,X));const x=(s,e)=>{var h;const m=i.get(s);if(!m)return;const c=(h=n.measures[e])==null?void 0:h.backgroundImages;n.measures[e]=new me(m),c&&(n.measures[e].backgroundImages=c)},p=new Set,u=a.map(s=>{const e=s.hash?g.get(s.hash):null;return e?(p.add(s.hash),x(s.hash,s.measureIndex),{...s,status:e.status,annotator:e.annotator,lastUpdate:e.lastUpdate,id:e.id,measure:new A(n.measures[s.measureIndex])}):s}),o=new Set(u.map(s=>s.measureIndex));for(const[s,e]of g)if(!p.has(s))for(const m of n.measures)m.regulationHash0===s&&!o.has(m.measureIndex)&&(x(s,m.measureIndex),u.push({scoreId:e.scoreId,status:e.status,measureIndex:m.measureIndex,hash:e.hash,lastUpdate:e.lastUpdate,measure:new A(n.measures[m.measureIndex]),annotator:e.annotator,id:e.id}),o.add(m.measureIndex));return console.log("[spartito] merged:",u.map(s=>`m${s.measureIndex}:status=${s.status},ann=${s.annotator||"-"}`)),u}catch(r){return console.warn("Failed to fetch annotations for score:",r),a}},ts=()=>{var P,R,F,T;const[a,n]=S.useState(null),[l,r]=S.useState(null),[d,g]=S.useState(null),[i,x]=te(),[[p,u],[o,s],e]=ae(),[m,c]=S.useState("mask"),h=S.useRef(!1),k=S.useMemo(()=>(d==null?void 0:d.replace(/\.spartito\.json$/i,"").replace(/\.json$/i,""))||null,[d]),U=S.useMemo(()=>({edit:!0,id:k}),[k]),v=S.useMemo(()=>new ne,[]),B=S.useCallback(async y=>{try{const M=await y.text(),w=V(M,X);await De(w);const L=K(w),H=y.name.replace(/\.spartito\.json$/i,"").replace(/\.json$/i,""),Y=await Ee(L,w,H),$=Ue(w);await re($,{solutionStore:v,onlyFetchCache:!0}),h.current=!0,x($),n(w),r(J(w)),u(Y),s(null),g(y.name)}catch(M){console.error("Failed to load spartito:",M),Se.error(`Failed to load spartito: ${M.message}`)}return!1},[v]);S.useEffect(()=>{var y,M;if(h.current){h.current=!1;return}((M=(y=i==null?void 0:i.spartito)==null?void 0:y.measures)==null?void 0:M.length)>0&&d&&(n(i.spartito),r(J(i.spartito)),u(w=>{const L=new Map,H=new Map;if(w)for(const f of w)f.hash&&!L.has(f.hash)&&L.set(f.hash,f),H.set(f.measureIndex,f);const Y=K(i.spartito),$=new Set,z=Y.map(f=>{$.add(f.measureIndex);const D=H.get(f.measureIndex)||(f.hash?L.get(f.hash):null);return D?{...f,status:D.status,annotator:D.annotator,id:D.id,lastUpdate:D.lastUpdate}:f});if(w)for(const f of w)!$.has(f.measureIndex)&&(f.annotator||f.status===j.Solved||f.status===j.Discard||f.id)&&(z.push(f),$.add(f.measureIndex));return z}))},[i]);const b=S.useCallback(y=>{s(y)},[]),I=S.useCallback(()=>{s(null)},[]),O=S.useCallback(()=>{if(!(i!=null&&i.spartito))return;const y=JSON.stringify(i.spartito.toJSON(),null," "),M=new Blob([y],{type:"application/json"}),w=document.createElement("a");w.href=URL.createObjectURL(M),w.download=(d==null?void 0:d.replace(".json","-annotated.json"))||"annotated.spartito.json",w.click()},[i,d]),C=S.useMemo(()=>{if(!(p!=null&&p.length))return null;const y={issue:0,fatal:0,solved:0};for(const M of p)M.status===j.Issue?y.issue++:M.status===j.Fatal?y.fatal++:M.status===j.Solved&&y.solved++;return y},[p]);return t.jsxs(oe.Provider,{value:U,children:[t.jsx("svg",{width:"0",height:"0",style:{position:"absolute",visibility:"hidden"},children:t.jsx(se,{})}),t.jsxs(Q,{className:"spartito-page",children:[t.jsx($e,{className:"spartito-header",children:t.jsxs(pe,{style:{width:"100%",display:"flex",justifyContent:"space-between"},gutter:16,children:[t.jsxs(G,{style:{display:"flex",alignItems:"center"},children:[t.jsx(ge,{to:"/",className:"spartito-logo",children:"STARRY"}),t.jsx("span",{style:{fontSize:14,color:"#666"},children:d||"Spartito"})]}),a&&t.jsx(G,{style:{display:"flex",alignItems:"center"},children:t.jsxs(_,{size:16,children:[t.jsxs("span",{style:{fontSize:13,color:"#999"},children:[a.measures.length," measures",C&&C.issue>0&&` · ${C.issue} issue`,C&&C.fatal>0&&` · ${C.fatal} fatal`,C&&C.solved>0&&` · ${C.solved} solved`]}),t.jsx(W,{size:"small",icon:t.jsx(je,{}),onClick:O,children:"Download"}),t.jsx(Z,{accept:".json",showUploadList:!1,beforeUpload:B,children:t.jsx(W,{size:"small",icon:t.jsx(ye,{}),children:"Re-upload"})})]})})]})}),t.jsx(Be,{className:"spartito-content",children:a?t.jsx(ve,{stand:l,spartito:a,issueMeasures:p,onMeasureClick:b,selectedMeasureIndex:o}):t.jsx("div",{style:{padding:48,maxWidth:600,margin:"80px auto 0"},children:t.jsxs(Le,{accept:".json",showUploadList:!1,beforeUpload:B,children:[t.jsx("p",{className:"ant-upload-drag-icon",children:t.jsx(we,{})}),t.jsx("p",{className:"ant-upload-text",children:"Click or drag a .spartito.json file"})]})})}),((R=(P=i.spartito)==null?void 0:P.measures)==null?void 0:R.length)>0&&t.jsx(xe,{title:e?t.jsxs(_,{size:20,children:[t.jsxs("div",{children:["Measure #",e.measureIndex+1]}),(T=(F=e.measure.basics)==null?void 0:F[0])!=null&&T.timeSignature?t.jsxs("div",{style:{display:"inline-flex",flexDirection:"column",alignItems:"center",lineHeight:1.1,fontWeight:"bold"},children:[t.jsx("span",{children:e.measure.basics[0].timeSignature.numerator}),t.jsx("span",{children:e.measure.basics[0].timeSignature.denominator})]}):null,t.jsx(Ie,{checked:m==="mask",onChange:()=>c(m==="mask"?"origin":"mask"),checkedChildren:"Background",unCheckedChildren:"Original"})]}):null,open:!!e,closable:!0,destroyOnClose:!0,footer:null,mask:!0,width:"98vw",onClose:I,children:e?t.jsx(ee,{bgMode:m,style:{width:"300px"},score:i,record:e,onClose:I}):null})]})]})};export{ts as default}; +import{r as S,j as t}from"./umi-37873494.js";import{M as ee}from"./index-55bfb99e.js";import{S as se}from"./index-6cc9bc74.js";import{I as j,u as te,m as ae,P as oe}from"./tiny-invariant-5c4293b4.js";import{A as ne,r as re}from"./confirm-19f7e7d5.js";import{k as N,l as ie,t as le,q as ce,P as ue,r as V,s as X,z as de,B as A,D as me}from"./index-a475ddbb.js";import{q as he,r as fe}from"./index-92da7081.js";import{a as Q,R as pe,C as G,L as ge}from"./util-2d38567b.js";import{B as W}from"./button-1ef38c18.js";import{D as xe,S as Ie}from"./index-2899652d.js";import{m as Se}from"./_setToString-dbbee35a.js";import{S as _}from"./TextArea-27ba039d.js";import{U as Z,a as ye,I as we}from"./index-19199d65.js";import"./parser-c740d6a8.js";import{D as je}from"./DownloadOutlined-80f8a347.js";import"./index-03b68134.js";import"./download-5fc3c841.js";import"./jszip.min-ed3d3f78.js";import"./schedulePool-cc4538c2.js";import"./index-abb14cca.js";import"./progress-096a2c96.js";import"./DeleteOutlined-a45fceaa.js";const E={normal:"#7776",issue:"#d8f436",ill:"#f4b836",error:"#f44336"},Me={[j.Discard]:"RosyBrown",[j.Solved]:"GreenYellow",[j.Issue]:"orange",[j.Fatal]:"red"},be={[j.Discard]:"-",[j.Issue]:"*",[j.Fatal]:"**"};function ke(a,n){if(n)return Me[n.status]??E.normal;if(!a)return E.normal;const l=a.tickTwist,r=a.tickRatesInStaves;if(r!=null&&r.some(d=>d<0)||l>=1)return E.error;try{if(a.hasIllEvent||l>.36)return E.ill}catch{}return E.normal}function Ce(a){return a?be[a.status]??"":""}const ve=S.memo(({stand:a,spartito:n,issueMeasures:l,onMeasureClick:r,selectedMeasureIndex:d})=>{if(!a||a.systems.length===0)return null;const g=2,i=a.maxWidth+g*2,x=a.totalHeight+g*2,p=n==null?void 0:n.measures,u=S.useMemo(()=>{const o=new Map;if(l)for(const s of l)o.set(s.measureIndex,s);return o},[l]);return t.jsx("svg",{className:"spartito-stand",viewBox:`${-g} ${-g} ${i} ${x}`,style:{width:"100%",height:"auto"},children:a.systems.map(o=>{const s=o.staffImages.length>0?o.staffImages[0].position.y:0;return t.jsxs("g",{transform:`translate(0, ${o.y})`,children:[o.staffImages.map((e,m)=>t.jsx("image",{href:e.url,x:e.position.x,y:e.position.y,width:e.position.width,height:e.position.height,preserveAspectRatio:"none"},m)),o.measures.map(e=>{const m=e.measureIndex===d,c=p==null?void 0:p[e.measureIndex],h=u.get(e.measureIndex),k=ke(c,h),U=c&&c.regulationHash!=c.regulationHash0,v=s-1;return t.jsxs("g",{onClick:()=>r(e.measureIndex),children:[t.jsx("rect",{className:`spartito-measure-rect ${m?"selected":""}`,x:e.left,y:0,width:e.right-e.left,height:o.height}),t.jsxs("text",{className:"spartito-measure-index",x:e.left+.5,y:v,fontSize:2.6,fontWeight:"bold",fill:k,children:[Ce(h),e.measureIndex+1,h!=null&&h.annotator?t.jsx("tspan",{dy:"-1",fontSize:"1.6px",fill:"DodgerBlue",children:"★"}):null,U?t.jsx("tspan",{y:v-.8,fontSize:"2px",children:"⚠"}):null]})]},e.measureIndex)})]},o.systemIndex)})})}),q=5;function J(a){var g;const n=new Map;for(const i of a.measures){const x=i.position.systemIndex;n.has(x)||n.set(x,[]),n.get(x).push(i)}const l=[];let r=0;const d=Array.from(n.keys()).sort((i,x)=>i-x);for(const i of d){const x=n.get(i),p=x[0],u=p.backgroundImages||[];let o=0,s=0;if(u.length>0)s=Math.min(...u.map(h=>h.position.y)),o=Math.max(...u.map(h=>h.position.y+h.position.height))-s;else if((g=p.position.staffYs)!=null&&g.length){const c=p.position.staffYs;o=c[c.length-1]-c[0]+24}const e=u.map(c=>({...c,position:{...c.position,y:c.position.y-s}})),m=Math.max(...x.map(c=>c.position.right));l.push({systemIndex:i,y:r,height:o,width:m,staffImages:e,measures:x.map(c=>({measureIndex:c.measureIndex,left:c.position.left,right:c.position.right}))}),r+=o+q}return{systems:l,totalHeight:r-(l.length>0?q:0),maxWidth:Math.max(...l.map(i=>i.width),0)}}function Ue(a){var p;const n=new Map;for(const u of a.measures){const o=u.position.systemIndex;n.has(o)||n.set(o,[]),n.get(o).push(u)}const r=Array.from(n.keys()).sort((u,o)=>u-o).map(u=>{const o=n.get(u),s=o[0],e=s.backgroundImages||[],m=Math.max(...o.map(I=>I.position.right)),c=e.filter(I=>I.original!==!1),h=s.position.staffYs||[],k=h.length||a.stavesCount||0,U=o.map(I=>I.position.right);let v,B,b;return c.length>=k&&k>0?b=c.map(I=>new N({backgroundImage:I.url,imagePosition:I.position,top:0,height:I.position.height,staffY:I.position.y+I.position.height/2,maskImage:null,measureCount:o.length})):c.length>0&&k>c.length&&(v=c[0].url,B=c[0].position,h.length>=k&&(b=h.map((I,O)=>new N({top:I-10/2,height:10,staffY:10/2,maskImage:null,measureBars:U})))),new ie({stavesCount:(b==null?void 0:b.length)||k||a.stavesCount,staves:(b==null?void 0:b.length)>0?b:void 0,backgroundImage:v,imagePosition:B,width:m,left:0,top:0,measureCount:o.length,measureBars:U,semantics:[],sidBlackList:[],sidWhiteList:[]})}),d=new le({width:794,height:1122,systems:r,semantics:[]}),g=new ce({title:"Spartito",pages:[d],staffLayoutCode:((p=a.staffGroups)==null?void 0:p.map(u=>u.length>1?`{${u.map(()=>"-").join("")}}`:"-").join(","))||"",settings:{enabledGauge:!0,pageLayoutMethod:ue.ByLines,semanticConfidenceThreshold:1}}),i=g.staffLayout,x=i.standaloneGroups.map(u=>u.map(o=>i.staffIds.indexOf(o)));return a.staffGroups=x,a.measures.forEach(u=>u.staffGroups=x),g.spartito=a,g.patches=[],g}const{Header:$e,Content:Be}=Q,{Dragger:Le}=Z,De=async a=>{let n=null;try{const l=await he();n=l==null?void 0:l.omrDomain}catch{}for(const l of a.measures)if(l.backgroundImages)for(const r of l.backgroundImages)r.url.startsWith("md5:")&&(r.url=`/uploads/${r.url.replace("md5:","")}`)},K=a=>{const n=[];for(const l of a.measures){if(!l.regulated)continue;const r=de(l);(!r||r.error||!r.fine)&&n.push({scoreId:null,status:r!=null&&r.error?j.Fatal:j.Issue,measureIndex:l.measureIndex,hash:l.regulationHash0,lastUpdate:null,measure:new A(l)})}return n},Ee=async(a,n,l)=>{if(!l)return a;try{const r=await fe.get(`/api/scores/${l}/issueMeasures`,{params:{limit:1e3}}),d=r==null?void 0:r.rows;if(console.log("[spartito] fetchAndMerge: scoreId=%s, resp=%o, fetched=%d, localIssues=%d",l,r,(d==null?void 0:d.length)??0,a.length),!(d!=null&&d.length))return a;const g=new Map;for(const s of d)s.hash&&g.set(s.hash,s);const i=new Map;for(const[s,e]of g)e.measure&&i.set(s,V(e.measure,X));const x=(s,e)=>{var h;const m=i.get(s);if(!m)return;const c=(h=n.measures[e])==null?void 0:h.backgroundImages;n.measures[e]=new me(m),c&&(n.measures[e].backgroundImages=c)},p=new Set,u=a.map(s=>{const e=s.hash?g.get(s.hash):null;return e?(p.add(s.hash),x(s.hash,s.measureIndex),{...s,status:e.status,annotator:e.annotator,lastUpdate:e.lastUpdate,id:e.id,measure:new A(n.measures[s.measureIndex])}):s}),o=new Set(u.map(s=>s.measureIndex));for(const[s,e]of g)if(!p.has(s))for(const m of n.measures)m.regulationHash0===s&&!o.has(m.measureIndex)&&(x(s,m.measureIndex),u.push({scoreId:e.scoreId,status:e.status,measureIndex:m.measureIndex,hash:e.hash,lastUpdate:e.lastUpdate,measure:new A(n.measures[m.measureIndex]),annotator:e.annotator,id:e.id}),o.add(m.measureIndex));return console.log("[spartito] merged:",u.map(s=>`m${s.measureIndex}:status=${s.status},ann=${s.annotator||"-"}`)),u}catch(r){return console.warn("Failed to fetch annotations for score:",r),a}},ts=()=>{var P,R,F,T;const[a,n]=S.useState(null),[l,r]=S.useState(null),[d,g]=S.useState(null),[i,x]=te(),[[p,u],[o,s],e]=ae(),[m,c]=S.useState("mask"),h=S.useRef(!1),k=S.useMemo(()=>(d==null?void 0:d.replace(/\.spartito\.json$/i,"").replace(/\.json$/i,""))||null,[d]),U=S.useMemo(()=>({edit:!0,id:k}),[k]),v=S.useMemo(()=>new ne,[]),B=S.useCallback(async y=>{try{const M=await y.text(),w=V(M,X);await De(w);const L=K(w),H=y.name.replace(/\.spartito\.json$/i,"").replace(/\.json$/i,""),Y=await Ee(L,w,H),$=Ue(w);await re($,{solutionStore:v,onlyFetchCache:!0}),h.current=!0,x($),n(w),r(J(w)),u(Y),s(null),g(y.name)}catch(M){console.error("Failed to load spartito:",M),Se.error(`Failed to load spartito: ${M.message}`)}return!1},[v]);S.useEffect(()=>{var y,M;if(h.current){h.current=!1;return}((M=(y=i==null?void 0:i.spartito)==null?void 0:y.measures)==null?void 0:M.length)>0&&d&&(n(i.spartito),r(J(i.spartito)),u(w=>{const L=new Map,H=new Map;if(w)for(const f of w)f.hash&&!L.has(f.hash)&&L.set(f.hash,f),H.set(f.measureIndex,f);const Y=K(i.spartito),$=new Set,z=Y.map(f=>{$.add(f.measureIndex);const D=H.get(f.measureIndex)||(f.hash?L.get(f.hash):null);return D?{...f,status:D.status,annotator:D.annotator,id:D.id,lastUpdate:D.lastUpdate}:f});if(w)for(const f of w)!$.has(f.measureIndex)&&(f.annotator||f.status===j.Solved||f.status===j.Discard||f.id)&&(z.push(f),$.add(f.measureIndex));return z}))},[i]);const b=S.useCallback(y=>{s(y)},[]),I=S.useCallback(()=>{s(null)},[]),O=S.useCallback(()=>{if(!(i!=null&&i.spartito))return;const y=JSON.stringify(i.spartito.toJSON(),null," "),M=new Blob([y],{type:"application/json"}),w=document.createElement("a");w.href=URL.createObjectURL(M),w.download=(d==null?void 0:d.replace(".json","-annotated.json"))||"annotated.spartito.json",w.click()},[i,d]),C=S.useMemo(()=>{if(!(p!=null&&p.length))return null;const y={issue:0,fatal:0,solved:0};for(const M of p)M.status===j.Issue?y.issue++:M.status===j.Fatal?y.fatal++:M.status===j.Solved&&y.solved++;return y},[p]);return t.jsxs(oe.Provider,{value:U,children:[t.jsx("svg",{width:"0",height:"0",style:{position:"absolute",visibility:"hidden"},children:t.jsx(se,{})}),t.jsxs(Q,{className:"spartito-page",children:[t.jsx($e,{className:"spartito-header",children:t.jsxs(pe,{style:{width:"100%",display:"flex",justifyContent:"space-between"},gutter:16,children:[t.jsxs(G,{style:{display:"flex",alignItems:"center"},children:[t.jsx(ge,{to:"/",className:"spartito-logo",children:"STARRY"}),t.jsx("span",{style:{fontSize:14,color:"#666"},children:d||"Spartito"})]}),a&&t.jsx(G,{style:{display:"flex",alignItems:"center"},children:t.jsxs(_,{size:16,children:[t.jsxs("span",{style:{fontSize:13,color:"#999"},children:[a.measures.length," measures",C&&C.issue>0&&` · ${C.issue} issue`,C&&C.fatal>0&&` · ${C.fatal} fatal`,C&&C.solved>0&&` · ${C.solved} solved`]}),t.jsx(W,{size:"small",icon:t.jsx(je,{}),onClick:O,children:"Download"}),t.jsx(Z,{accept:".json",showUploadList:!1,beforeUpload:B,children:t.jsx(W,{size:"small",icon:t.jsx(ye,{}),children:"Re-upload"})})]})})]})}),t.jsx(Be,{className:"spartito-content",children:a?t.jsx(ve,{stand:l,spartito:a,issueMeasures:p,onMeasureClick:b,selectedMeasureIndex:o}):t.jsx("div",{style:{padding:48,maxWidth:600,margin:"80px auto 0"},children:t.jsxs(Le,{accept:".json",showUploadList:!1,beforeUpload:B,children:[t.jsx("p",{className:"ant-upload-drag-icon",children:t.jsx(we,{})}),t.jsx("p",{className:"ant-upload-text",children:"Click or drag a .spartito.json file"})]})})}),((R=(P=i.spartito)==null?void 0:P.measures)==null?void 0:R.length)>0&&t.jsx(xe,{title:e?t.jsxs(_,{size:20,children:[t.jsxs("div",{children:["Measure #",e.measureIndex+1]}),(T=(F=e.measure.basics)==null?void 0:F[0])!=null&&T.timeSignature?t.jsxs("div",{style:{display:"inline-flex",flexDirection:"column",alignItems:"center",lineHeight:1.1,fontWeight:"bold"},children:[t.jsx("span",{children:e.measure.basics[0].timeSignature.numerator}),t.jsx("span",{children:e.measure.basics[0].timeSignature.denominator})]}):null,t.jsx(Ie,{checked:m==="mask",onChange:()=>c(m==="mask"?"origin":"mask"),checkedChildren:"Background",unCheckedChildren:"Original"})]}):null,open:!!e,closable:!0,destroyOnClose:!0,footer:null,mask:!0,width:"98vw",onClose:I,children:e?t.jsx(ee,{bgMode:m,style:{width:"300px"},score:i,record:e,onClose:I}):null})]})]})};export{ts as default}; diff --git a/dist/assets/index-1fa256e9.js b/dist/assets/index-03b68134.js similarity index 98% rename from dist/assets/index-1fa256e9.js rename to dist/assets/index-03b68134.js index 410968916a5ff9beb59b8927fe1fd4824b05db88..e724046f8efafda2ef2d53ccbf6e91865a532d63 100644 --- a/dist/assets/index-1fa256e9.js +++ b/dist/assets/index-03b68134.js @@ -1,3 +1,3 @@ -import{p as ae}from"./parser-f1e7dbfb.js";import{a as j,T as ue,q as fe,P as K,r as G,s as X}from"./index-4514925e.js";import{p as me,w as de,y as pe,v as he,x as ne,S as se}from"./index-b284aaac.js";import{g as ge,q as ye}from"./umi-91f9d113.js";import{d as re}from"./download-e05f9890.js";import{J as q}from"./jszip.min-21813277.js";const Q=[j.ClefG,j.ClefF,j.ClefC],Z=e=>{let t=null;switch(e.tokenType){case j.ClefG:t="Treble";break;case j.ClefF:t="Bass";break;case j.ClefC:e.y===-1?t="Tenor":t="Alto";break}return t};function be(e){const t=e.spartito.perform(),n=e.systems.map(i=>i.staves.map(f=>f==null?void 0:f.maskImage)).flat(),l=n.filter(Boolean).length>n.length/2,s={},d=new Map,p=new Map,h=new Map;s.unitSize=e.unitSize,s.title={title:e.title};const o=e.pages[0].tokens;if(Array.isArray(o)&&o.length>0){const[i,...f]=o.filter(u=>u.type===j.Text&&u.textType==="Title").sort((u,g)=>g.fontSize-u.fontSize);i&&(s.title.title=i.text,s.title.t={size:i.fontSize}),(f==null?void 0:f.length)>0&&(f.sort((u,g)=>u.y-g.y),s.title.subtitle=f.map(u=>u.text).join(` +import{p as ae}from"./parser-c740d6a8.js";import{a as j,T as ue,q as fe,P as K,r as G,s as X}from"./index-a475ddbb.js";import{p as me,w as de,y as pe,v as he,x as ne,S as se}from"./index-92da7081.js";import{g as ge,q as ye}from"./umi-37873494.js";import{d as re}from"./download-5fc3c841.js";import{J as q}from"./jszip.min-ed3d3f78.js";const Q=[j.ClefG,j.ClefF,j.ClefC],Z=e=>{let t=null;switch(e.tokenType){case j.ClefG:t="Treble";break;case j.ClefF:t="Bass";break;case j.ClefC:e.y===-1?t="Tenor":t="Alto";break}return t};function be(e){const t=e.spartito.perform(),n=e.systems.map(i=>i.staves.map(f=>f==null?void 0:f.maskImage)).flat(),l=n.filter(Boolean).length>n.length/2,s={},d=new Map,p=new Map,h=new Map;s.unitSize=e.unitSize,s.title={title:e.title};const o=e.pages[0].tokens;if(Array.isArray(o)&&o.length>0){const[i,...f]=o.filter(u=>u.type===j.Text&&u.textType==="Title").sort((u,g)=>g.fontSize-u.fontSize);i&&(s.title.title=i.text,s.title.t={size:i.fontSize}),(f==null?void 0:f.length)>0&&(f.sort((u,g)=>u.y-g.y),s.title.subtitle=f.map(u=>u.text).join(` `),s.title.s={size:f.reduce((u,g)=>u+g.fontSize,0)/f.length});const m=o.filter(u=>u.type===j.Text&&u.textType==="Author"&&u.x>e.pages[0].width/2);m.length>0&&(s.title.composer=m.map(u=>u.text).join(` `),s.title.c={size:m.reduce((u,g)=>u+g.fontSize,0)/m.length})}if(s.page={w:e.pages[0].width,h:e.pages[0].height},s.pages=e.pages.map(i=>{const f=i.source.dimensions.width/i.source.interval,m=i.source.dimensions.height/i.source.interval,[u,g,k,r]=i.source.matrix;return{src:i.source.url,w:f,h:m,x:0,y:0,l1:e.systems.indexOf(i.systems[0]),ls:i.systems.length,matrix:[u,g,k,r,-1/2*u*f+-1/2*m*k+1/2*i.width||0,-1/2*g*f+-1/2*m*r+1/2*i.height||0]}}),s.parts=[],s.lines=[],l){const i=e.staffLayout.partGroups.map(r=>r.range[0]===r.range[1]?[r.range[0]]:r.range),f=e.getTokenMap(),m=[];for(const[r,P]of i.entries()){const F=i.slice(0,r).flat().length,y={measures:[]};e.systems.forEach((a,x)=>{const I=a.staves.slice(),M=i.flat().map(b=>1<b+1&&(T[b+1]=T[b]);continue}const L=[];for(const O of P){const E=M[O];E&&L.push(...E.measures[b].getChords().map(D=>({chord:D,staffIndexInPart:O-F})))}let z=0;const A=T[b],_=[];L.forEach(({staffIndexInPart:O,chord:E})=>{const D=[];let v=E.tip?E.tip.x:E.right-E.left/2;E.noteIds.forEach((U,Y)=>{const C=f.get(U),w=`n_${i.length>1?r+"_":""}${B}_${z}`;z++,d.set(C.id,w),p.set(C.id,(C.left+C.right)/2-A),h.set(C.id,O+1),D.push({line:-E.ys[Y]*2,id:w,staff:O+1,x:(C.left+C.right)/2-v})}),m[B]=m[B]||[],m[B].push(v-A);const W=e.spartito.measures[a.headMeasureIndex+b].events.filter(U=>U.noteIds.some(Y=>E.noteIds.includes(Y)));_.push({elems:D,x:v-A,type:2**E.division,...W.some(U=>U.grace)?{grace:{}}:{}})}),y.measures[B]={w:T[b+1]-T[b],staves:P.length,notes:_}}});let S=null;e.spartito.measures.forEach((a,x)=>{const I=e.spartito.measureIndexMapping[x],T=a.contexts.flat().filter(B=>Q.includes(B.tokenType)&&P.includes(B.staff)).map(B=>{const L=i.find(z=>z.includes(B.staff));return{x:B.x,clef:Z(B),staff:L.indexOf(B.staff)+1,tick:B.tick}});T.length>0&&y.measures[I]&&(y.measures[I].clefs=T);const b=a.basics.filter((B,L)=>1<0&&(s.parts[r]=y)}e.systems.forEach((r,P)=>{var B;const F=[],y=r.staves[0],S=r.staves[r.staves.length-1],a=y.top+y.staffY-2,x=S.top+S.staffY-2,I=r.staves.slice(),M=i.flat().map(L=>1<M.find(N=>(N==null?void 0:N.index)===w)||null),_=A.map((w,N)=>[N,!w]).filter(w=>w[1]);let O=null;_.length>0&&(O=Object.fromEntries(_.map(w=>[w[0]+1,{hide:w[1]}])));let E=0,D=0;const v=A.filter(w=>!!w);if(v.length>0){const w=v[0],N=v[v.length-1],R=w.top+w.staffY-2,le=N.top+N.staffY-2;E=R-a,D=le-R+4}const{list:W,last:U}=A.reduce((w,N,R)=>(w.last===null||N===null?R===0&&E>0?w.list.push(E-4):w.list.push(0):w.list.push(N.top+N.staffY-(w.last.top+w.last.staffY)-4),w.last=N||w.last,w),{last:T,list:[]});T=U;const Y=A.map(w=>{if(w!=null&&w.maskImage){const N=w.imagePosition;return{src:w.maskImage,x:N.x,y:r.top+w.top+N.y-(r.top+w.top+w.staffY-2),w:N.width,h:N.height}}return null}),C=e.spartito.measures[r.headMeasureIndex];F.push({distances:W,imgs:Y,y:E,staves:z.length,parti:L,height:D,...O?{details:O}:{},clef:Object.fromEntries((B=e.spartito.measures[r.headMeasureIndex])==null?void 0:B.contexts.flat().filter(w=>Q.includes(w.tokenType)&&z.includes(w.staff)).map(w=>[w.staff,Z(w)])),fifths:C.basics.filter((w,N)=>1<e.spartito.measureIndexMapping[r.headMeasureIndex+z]).filter(L=>Number.isFinite(L));s.lines[P]={m1:b[0],m2:b.length>0?b[b.length-1]+1:void 0,x:r.left,y:r.top+a,w:r.measureBars[r.measureBars.length-1],h:x-a+4,lineStaves:F}});const u={0:"default",1:"brace",2:"bracket",3:"square"},g=ae(e.staffLayoutCode),k=g.partGroups.map(r=>({sort:r.range[0],part:r})).sort((r,P)=>r.sort-P.sort).map(r=>r.part);s.groups=g.groups.filter(r=>r.group.type!==0).map((r,P)=>({type:u[r.group.type],p1:k.findIndex(F=>F.range.includes(r.range[0])),p2:k.findIndex(F=>F.range.includes(r.range[r.range.length-1]))})).filter(r=>r.type!=="default")}t&&(s.measInfo=t.notation.measures.map((i,f)=>{const m=new Map;return i.notes.forEach(u=>{m.set(u.tick,[...m.get(u.tick)||[],p.get(u.id)])}),Array.from(m.entries()).sort((u,g)=>+u[0]-g[0]).reduce((u,g,k)=>{const r=g[1].find(P=>P>u.last)||g[1][0];return u.list.push(r),u.last=r,u},{last:null,list:[]}).list.filter(Number.isFinite)}));let c;if(t){c={};const i=new Map;let f,m;t.notation.measures.forEach((y,S)=>{const{numerator:a,denominator:x}=y.timeSignature;!c.beats&&!c.beatsUnit&&(c.beats=a,c.beatsUnit=x,f=a,m=x),c.beatInfos=c.beatInfos||[],(f!==a||m!==x)&&(f=a,m=x,c.beatInfos.push({tick:y.tick,beats:a,beatsUnit:x})),c.tempos=c.tempos||[],y.events.forEach(I=>{I.data.type==="meta"&&I.data.subtype==="setTempo"&&c.tempos.push({tick:y.tick,tempo:I.data.microsecondsPerBeat})})}),c.measures=t.notation.measures.reduce((y,S,a)=>{const x=Array.from(new Set(S.notes.map(I=>I.tick))).sort((I,M)=>I-M);return S.notes.forEach(I=>{i.set(I.id,x.indexOf(I.tick))}),y[S.tick]={measure:a,duration:S.duration,note_ticks:x},y},{}),c.measureInfos=t.notation.measures.map((y,S)=>({number:String(S+1),fifths:y.keySignature,beats:y.timeSignature.numerator,beatUnit:y.timeSignature.denominator}));const g=t.notation.toPerformingMIDI(t.notation.measures.map((y,S)=>S+1)).tracks,{partGroups:k}=e.staffLayout;let r=g.map((y,S)=>{const a=k[S].key;let x;switch(a){case"vi":case"vi1":case"vi2":x=40;break;case"viola":x=42;break;case"vo":x=55;break;case"basso":x=71;break;default:x=0;break}return{program:x,channel:S,name:e.instrumentDict[a]??"Piano",track:y}});if(k.some(y=>y.group.grand)){const y=/l\.?h\.?|左手|left hand/i,S=/r\.?h\.?|右手|right hand/i,a=Object.entries(e.instrumentDict).filter(([M,T])=>y.test(T)||S.test(T)).map(([M,T])=>({key:M,hand:y.test(T)?"left":"right"}));let x=null,I;if(a.length===2&&a[0].hand!==a[1].hand){const M=a.find(b=>b.hand==="left"),T=a.find(b=>b.hand==="right");x=[e.staffLayout.staffIds.findIndex(b=>b===(T==null?void 0:T.key)),e.staffLayout.staffIds.findIndex(b=>b===(M==null?void 0:M.key))],I=k.findIndex(b=>b.range[0]<=Math.min(...x)&&b.range[1]>=Math.max(...x))}if(Number.isFinite(I)&&I>-1){const M=r[I],T=[];M.track.forEach(b=>{Number.isFinite(b.staff)&&(T[b.staff]||(T[b.staff]=[]),T[b.staff].push(b)),b.type==="meta"&&T.forEach(B=>{B.push(b)})}),r.splice(I,1,T.filter(Boolean).map(b=>({...M,track:b}))),r=r.flat(),c.rightHandTrack=x[0],c.leftHandTrack=x[1]}else r.sort((M,T)=>M===r[I]?-1:0)}c.tracks=r.map(({program:y,channel:S,name:a})=>({program:y,channel:S,name:a}));const P=r.map(({track:y})=>{const S=new Map;return y.map(a=>{if(a.subtype==="noteOn"&&S.set(a.noteNumber,a),a.subtype==="noteOff"){const x=S.get(a.noteNumber);(x==null?void 0:x.noteNumber)===a.noteNumber&&(x.duration=a.ticks-x.ticks)}return a})}),F=new Map(Object.entries(c.measures).map(([y,S])=>[S.measure,+y]));c.events=P.map((y,S)=>y.filter(a=>a.type==="channel").map(a=>{var I,M;(I=a==null?void 0:a.ids)!=null&&I[0]&&(a.numId=d.get(a.ids[0]));let x=[0,0,0];switch(a.subtype){case"noteOn":x=[144|a.channel,a.noteNumber,a.velocity];break;case"noteOff":x=[128|a.channel,a.noteNumber,a.velocity?a.velocity:0];break;case"noteAftertouch":x=[160|a.channel,a.noteNumber,a.amount];break;case"controller":x=[176|a.channel,a.controllerType,a.value];break;case"programChange":x=[192|a.channel,a.programNumber,0];break;case"channelAftertouch":x=[208|a.channel,a.amount,0];break;case"pitchBend":x=[224|a.channel,a.value&255,a.value>>7&255];break;default:throw new Error("unhandled event subtype:"+a.subtype)}return{...a.subtype==="noteOn"?{id:d.get((M=a==null?void 0:a.ids)==null?void 0:M[0])}:{},tick:a.ticks,channel:a.channel,duration:a.duration,track:S,event:x,elem_ids:a==null?void 0:a.ids.map(T=>d.get(T)),measure:a.measure-1,meas_start_tick:F.get(a.measure-1),staff:h.get(a.ids[0]),note:i.get(a.ids[0])}})).flat(1).sort((y,S)=>{for(const a of["tick","measure","track"])if(y[a]!==S[a])return y[a]-S[a];return 0})}return{scoreJson:s,midiJson:c}}const we=480,xe=new Set(["Title","Author","PageMargin","Other"]),Se=e=>typeof(e==null?void 0:e.typeId)=="string"?e.typeId:typeof(e==null?void 0:e.type)=="string"?e.type.split("|").reverse()[0]:"",$=e=>typeof e=="string"||typeof e=="number"?e:void 0,ee=e=>{if(!(!(e!=null&&e.url)||!(e!=null&&e.dimensions)))return{url:e.url,w:e.dimensions.width,h:e.dimensions.height,...Number.isFinite(e.interval)?{interval:e.interval}:{},...Array.isArray(e.matrix)?{matrix:e.matrix}:{}}},te=e=>{const t=(e==null?void 0:e.maskImage)||(e==null?void 0:e.backgroundImage),n=e==null?void 0:e.imagePosition;if(!(!t||!n))return{url:t.toString(),x:n.x,y:n.y,width:n.width,height:n.height}},Te=e=>{const t=Se(e);return t?{...$(e.id)!==void 0?{id:$(e.id)}:{},t,x:e.x,y:e.y}:null},Ie=e=>!xe.has(e==null?void 0:e.textType)||typeof(e==null?void 0:e.text)!="string"||!Number.isFinite(e==null?void 0:e.fontSize)?null:{...$(e.id)!==void 0?{id:$(e.id)}:{},textType:e.textType,text:e.text,fontSize:e.fontSize,x:e.x,y:e.y},ke=e=>{switch(e.subtype){case"programChange":return"program";case"noteOn":return"note-on";case"noteOff":return"note-off";case"controller":return"control";case"pitchBend":return"pitch-bend";case"channelAftertouch":case"noteAftertouch":return"aftertouch";default:return null}},Me=(e,t)=>{if(e.type!=="channel")return null;const n=ke(e);return n?{tick:e.ticks,type:n,track:t,...Number.isFinite(e.channel)?{channel:e.channel}:{},...Number.isFinite(e.noteNumber)?{note:e.noteNumber}:{},...Number.isFinite(e.velocity)?{velocity:e.velocity}:{},...Number.isFinite(e.programNumber)?{program:e.programNumber}:{},...Number.isFinite(e.controllerType)?{controller:e.controllerType}:{},...Number.isFinite(e.value)?{value:e.value}:{},...Array.isArray(e.ids)?{ids:e.ids.filter(l=>$(l)!==void 0)}:{}}:null},Be=e=>Array.from(e.entries()).map(([t,n])=>({id:t,system:n.system,measure:n.measure,x:n.x,...Number.isFinite(n.endX)?{endX:n.endX}:{}})),Ne=e=>{var o,c,i,f,m;const t=(c=(o=e.spartito)==null?void 0:o.perform)==null?void 0:c.call(o);if(!((f=(i=t==null?void 0:t.notation)==null?void 0:i.measures)!=null&&f.length))return;const n=t.notation.measures.map((u,g)=>g+1),l=t.notation.toPerformingMIDI(n);if(!l)return;const s=l.tracks.flatMap((u,g)=>u.map(k=>Me(k,g))).filter(Boolean).sort((u,g)=>u.tick-g.tick||(u.track??0)-(g.track??0));let d=l.zeroTick||0;const p=t.notation.measures.map((u,g)=>{const k=d;return d+=u.duration,{i:g,t1:k,t2:d}}),h=t.notation.measures.flatMap(u=>u.events.filter(g=>{var k,r;return((k=g.data)==null?void 0:k.type)==="meta"&&((r=g.data)==null?void 0:r.subtype)==="setTempo"}).map(g=>({tick:u.tick+g.ticks,tempo:g.data.microsecondsPerBeat})));return{ticksPerBeat:((m=l.header)==null?void 0:m.ticksPerBeat)||we,endTick:d,...h.length?{tempos:h}:{tempos:[{tick:0,tempo:5e5}]},measures:p,events:s,positions:Be(t.tokenMap)}},Pe=e=>{var l,s;const t=Ne(e),n=new Map;return(l=t==null?void 0:t.measures)==null||l.forEach(d=>n.set(d.i,d)),{format:"LiveScore",version:1,metadata:{title:e.title,...(s=e.headers)!=null&&s.composer?{composer:String(e.headers.composer)}:{}},...e.staffLayoutCode?{staffLayout:e.staffLayoutCode}:{},pages:e.pages.map(d=>{var h;const p=(h=d.tokens)==null?void 0:h.map(Ie).filter(Boolean);return{w:d.width,h:d.height,...ee(d.source)?{source:ee(d.source)}:{},...p!=null&&p.length?{tokens:p}:{},systems:d.systems.map(o=>({x:o.left,y:o.top,w:o.width,staffMask:o.staffMask,bars:o.measureBars,measures:o.measureBars.map((c,i)=>{const f=o.headMeasureIndex+i,m=n.get(f);return{i:f,x1:i?o.measureBars[i-1]:0,x2:c,...m?{t1:m.t1,t2:m.t2}:{}}}),staves:o.staves.map(c=>{var i;return{y:c.top,staffY:c.staffY,...te(c)?{image:te(c)}:{},...(i=c.additionalLines)!=null&&i.length?{additionalLines:c.additionalLines}:{},measures:c.measures.map(f=>({tokens:(f.tokens||[]).filter(m=>ue.includes(m.type)).map(Te).filter(Boolean)}))}})}))}}),...t?{playback:t}:{}}};var H={exports:{}};function Ee(e,t){var n=t&&t.cache?t.cache:Ae,l=t&&t.serializer?t.serializer:Oe,s=t&&t.strategy?t.strategy:Le;return s(e,{cache:n,serializer:l})}function Fe(e){return e==null||typeof e=="number"||typeof e=="boolean"}function ie(e,t,n,l){var s=Fe(l)?l:n(l),d=t.get(s);return typeof d>"u"&&(d=e.call(this,l),t.set(s,d)),d}function oe(e,t,n){var l=Array.prototype.slice.call(arguments,3),s=n(l),d=t.get(s);return typeof d>"u"&&(d=e.apply(this,l),t.set(s,d)),d}function V(e,t,n,l,s){return n.bind(t,e,l,s)}function Le(e,t){var n=e.length===1?ie:oe;return V(e,this,n,t.cache.create(),t.serializer)}function ze(e,t){var n=oe;return V(e,this,n,t.cache.create(),t.serializer)}function Ce(e,t){var n=ie;return V(e,this,n,t.cache.create(),t.serializer)}function Oe(){return JSON.stringify(arguments)}function J(){this.cache=Object.create(null)}J.prototype.has=function(e){return e in this.cache};J.prototype.get=function(e){return this.cache[e]};J.prototype.set=function(e,t){this.cache[e]=t};var Ae={create:function(){return new J}};H.exports=Ee;H.exports.strategies={variadic:ze,monadic:Ce};var ve=H.exports;const je=ge(ve),De=me(async({file:e,key:t,uploadUrl:n})=>(await de(e,{key:t,uploadUrl:n}),t),{cacheKey:e=>e[0].key}),Ue=async e=>Promise.all(e.filter(Boolean).map(async t=>{const n=await he(t);return await De({file:t,key:n.key,uploadUrl:n.uploadUrl}),{key:n.key,url:n.url}}));async function Qe(e){var l;if(typeof e!="string"||e.startsWith("md5"))return null;if(e.startsWith("http")||e.startsWith("/uploads/"))return e;const t=pe(e,"file");return t?((l=(await Ue([t]))[0])==null?void 0:l.url)??null:null}async function _e(e){if(typeof e!="string")return null;if(e.startsWith("http")){const t=await(await fetch(e)).blob();return new Promise(n=>{const l=new FileReader;l.onloadend=function(){n(l.result)},l.readAsDataURL(t)})}return e}async function Ze(e){try{return await _e(e)}catch(t){return console.warn("toDataUrl error:",t),e}}async function et(e){var s,d;const t=e.find(p=>p.name==="index.json");if(!t){console.warn("no index.json file found in package.");return}const n=G(await t.text(),X);n.settings=n.settings||{semanticConfidenceThreshold:1,enabledGauge:!0,pageLayoutMethod:K.ByLines},(d=(s=n.systems)==null?void 0:s.forEach)==null||d.call(s,p=>{var h,o;return(o=(h=p.staves)==null?void 0:h.forEach)==null?void 0:o.call(h,c=>{var i,f;return(f=(i=c.semantics)==null?void 0:i.forEach)==null?void 0:f.call(i,m=>{m.confidence=Number.isFinite(m.confidence)?m.confidence:1})})});const l=(await Promise.all(e.map(async p=>/^[0-9a-f]+\.?(png|gif)$/.test(p.name)?new Promise(h=>{let o=new FileReader;o.readAsDataURL(p),o.onload=function(){h({[p.name]:o.result})}}):{}))).reduce((p,h)=>({...p,...h}),{});return await n.replaceImageKeys(async p=>p&&/^md5:/.test(p)?l[p.replace("md5:","")]:p&&!/^\w+:/.test(p)?l[p]:p),n}async function tt(e){var t,n;switch(e.type){case"application/zip":case"application/x-zip-compressed":{const l=await q.loadAsync(e),s=l.files["index.json"];if(!s){console.warn("no index.json file found in package.");return}const d=await s.async("text"),p=G(d,X);p.settings=p.settings||{semanticConfidenceThreshold:1,enabledGauge:!0,pageLayoutMethod:K.ByLines},(n=(t=p.systems)==null?void 0:t.forEach)==null||n.call(t,o=>{var c,i;return(i=(c=o.staves)==null?void 0:c.forEach)==null?void 0:i.call(c,f=>{var m,u;return(u=(m=f.semantics)==null?void 0:m.forEach)==null?void 0:u.call(m,g=>{g.confidence=Number.isFinite(g.confidence)?g.confidence:1})})});const h=(await Promise.all(Object.keys(l.files).map(async o=>{if(/^[0-9a-f]+\.?(png|gif)$/.test(o)){const c=await l.files[o].async("arraybuffer"),i=new Blob([c],{type:"image/png"});return new Promise(f=>{const m=new FileReader;m.onload=()=>{f({[o]:m.result})},m.readAsDataURL(i)})}}))).reduce((o,c)=>({...o,...c}),{});return await p.replaceImageKeys(async o=>o&&/^md5:/.test(o)?h[o.replace("md5:","")]:o&&!/^\w+:/.test(o)?h[o]:o),p}case"application/json":return new Promise(l=>{const s=new FileReader;s.onload=()=>{l(G(s.result,X))},s.readAsText(e)});default:return console.warn("unsupported file type:",e.type),null}}function at(e){return new fe({title:(e==null?void 0:e.title)||ye().formatMessage({id:"playground.newScore"}),stavesCount:2,paperOptions:{raggedLast:!0,raggedLastBottom:!0},headers:{},instrumentDict:{},settings:{enabledGauge:!0,pageLayoutMethod:K.ByLines,semanticConfidenceThreshold:1}})}function nt(e,t,n=1){return Math.sqrt((e.x-t.x)**2+(e.y-t.y)**2)<=n}function st(e,{modify:t=!1}={}){return!t&&!e.modified?delete e.modified:e.modified=e.modified||t,e.deepCopy()}const rt=je(ae);function Ye(e,t){return t(e)?e:e.parentNode?Ye(e.parentNode,t):null}const $e=async e=>{const t=URL.createObjectURL(e);try{const n=await new Promise((h,o)=>{const c=new Image;c.onload=()=>h(c),c.onerror=()=>o(new Error("Failed to load LiveScore image for WebP conversion.")),c.src=t}),l=n.naturalWidth||n.width,s=n.naturalHeight||n.height,d=new OffscreenCanvas(l,s),p=d.getContext("2d");return p.imageSmoothingEnabled=!0,p.imageSmoothingQuality="high",p.drawImage(n,0,0,l,s),d.convertToBlob({type:"image/webp",quality:.86})}finally{URL.revokeObjectURL(t)}},Re=async(e,t)=>{const n=await(await fetch(t)).blob(),l=await $e(n),d=`assets/${se.ArrayBuffer.hash(await l.arrayBuffer())}.webp`;return e.file(d,l,{binary:!0,createFolders:!0}),d},Je=e=>[...e.pages.map(t=>{var n;return(n=t.source)==null?void 0:n.url}),...e.pages.flatMap(t=>t.systems.flatMap(n=>n.staves.map(l=>{var s;return(s=l.image)==null?void 0:s.url})))].filter(Boolean),it=async e=>{const t=Pe(e),n=new q,l=Array.from(new Set(Je(t))),s=new Map;await Promise.all(l.map(async h=>{try{s.set(h,await Re(n,h))}catch(o){console.warn("failed to pack LiveScore image:",h,o)}})),t.pages.forEach(h=>{var o;(o=h.source)!=null&&o.url&&s.has(h.source.url)&&(h.source.url=s.get(h.source.url)),h.systems.forEach(c=>{c.staves.forEach(i=>{var f;(f=i.image)!=null&&f.url&&s.has(i.image.url)&&(i.image.url=s.get(i.image.url))})})}),n.file("index.json",JSON.stringify(t));const d=await n.generateAsync({type:"blob"}),p=ne(d,`${e.title||"score"}-${Date.now()}.livescore.zip`);re(p,p.name,p.type)},ot=async e=>{const{scoreJson:t,midiJson:n}=be(e);async function l(h,{type:o="image/webp",maxHeight:c=1680,quality:i=.8}={}){const f=await new Promise((y,S)=>{const a=new globalThis.Image;a.crossOrigin="anonymous",a.src=h,a.onload=()=>{y(a)},a.onerror=()=>{S(a)}}),{naturalWidth:m,naturalHeight:u}=f;let g=m,k=u;u>=c&&(k=c,g=m*c/u);const r=new globalThis.OffscreenCanvas(g,k),P=r.getContext("2d");P.imageSmoothingEnabled=!0,P.imageSmoothingQuality="high",P.drawImage(f,0,0,g,k);const F=await r.convertToBlob({type:o,quality:i});return{blob:F,md5:se.ArrayBuffer.hash(await F.arrayBuffer()),suffix:o.split("/")[1]}}const s=new q;s.file("scoreimg_url.json",JSON.stringify(t,null,0)),await Promise.all([...t.pages.map(async h=>{const{blob:o,md5:c,suffix:i}=await l(h.src),f=`${c}.${i}`;h.src=f,await s.file("scoreimgs/"+f,o,{binary:!0,createFolders:!0})}),...t.lines.map(h=>h.lineStaves.map(o=>o.imgs)).flat(2).map(async h=>{const o=h==null?void 0:h.src;if(o){const{blob:c,md5:i,suffix:f}=await l(o),m=`${i}.${f}`;h.src=m,await s.file("scoreimgs/"+m,c,{binary:!0,createFolders:!0})}})]),s.file("scoreimg.json",JSON.stringify(t,null,0)),s.file("scoremidi.json",JSON.stringify(n,null,0));const d=await s.generateAsync({type:"blob"}),p=ne(d,`find-omr-${e.title}-${Date.now()}.zip`);re(p,p.name,p.type)},ce=(e,t)=>Number.isInteger(e)&&Number.isInteger(t)?t===0?e:ce(t,e%t):NaN,We=e=>e.reduce((t,n)=>ce(t,n)),ct=e=>{const t=e.map(s=>s.mainDuration),n=t.reduce((s,d)=>s+d,0),l=We(t);return{sum:n,gcdDuration:l}};export{ot as a,et as b,st as c,it as d,tt as e,ct as f,nt as i,Ye as m,at as n,rt as p,Ze as s,_e as t,Qe as u}; diff --git a/dist/assets/index-0298c320.js b/dist/assets/index-19199d65.js similarity index 98% rename from dist/assets/index-0298c320.js rename to dist/assets/index-19199d65.js index 78d03a83f419e303e1412e364cdff9f702ab9087..190e41075d38e22ac79854e2a6ea51342a09ebca 100644 --- a/dist/assets/index-0298c320.js +++ b/dist/assets/index-19199d65.js @@ -1 +1 @@ -import{A as Ue,f as X,z as it,q as Xe,B as Je,p as Ye,_ as ue,l as Ze,u as lt,c as _,b as P,ad as st,ae as Se,j as Qe,a as Fe,C as je,d as et,as as ct,e as _e,i as He,L as qe,D as ut,E as dt,I as pt}from"./_setToString-397d22bb.js";import{r as i,R as Me,_ as w,e as We}from"./umi-91f9d113.js";import{p as ft,E as vt,T as mt,k as ht,b as gt,u as wt}from"./TextArea-3bdaceca.js";import{B as Ke}from"./button-909b3565.js";import{D as yt}from"./DeleteOutlined-0f1ef15a.js";import{D as bt}from"./DownloadOutlined-f081b8de.js";import{P as It}from"./progress-f968a1fe.js";var Ct={icon:function(e,a){return{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M534 352V136H232v752h560V394H576a42 42 0 01-42-42z",fill:a}},{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM602 137.8L790.2 326H602V137.8zM792 888H232V136h302v216a42 42 0 0042 42h216v494z",fill:e}}]}},name:"file",theme:"twotone"};const Et=Ct;var Rt=function(e,a){return i.createElement(Ue,X(X({},e),{},{ref:a,icon:Et}))},Pt=i.forwardRef(Rt);const Ft=Pt;var Ut={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M885.2 446.3l-.2-.8-112.2-285.1c-5-16.1-19.9-27.2-36.8-27.2H281.2c-17 0-32.1 11.3-36.9 27.6L139.4 443l-.3.7-.2.8c-1.3 4.9-1.7 9.9-1 14.8-.1 1.6-.2 3.2-.2 4.8V830a60.9 60.9 0 0060.8 60.8h627.2c33.5 0 60.8-27.3 60.9-60.8V464.1c0-1.3 0-2.6-.1-3.7.4-4.9 0-9.6-1.3-14.1zm-295.8-43l-.3 15.7c-.8 44.9-31.8 75.1-77.1 75.1-22.1 0-41.1-7.1-54.8-20.6S436 441.2 435.6 419l-.3-15.7H229.5L309 210h399.2l81.7 193.3H589.4zm-375 76.8h157.3c24.3 57.1 76 90.8 140.4 90.8 33.7 0 65-9.4 90.3-27.2 22.2-15.6 39.5-37.4 50.7-63.6h156.5V814H214.4V480.1z"}}]},name:"inbox",theme:"outlined"};const Dt=Ut;var kt=function(e,a){return i.createElement(Ue,X(X({},e),{},{ref:a,icon:Dt}))},St=i.forwardRef(kt);const Cn=St;var Lt={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 00174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z"}}]},name:"paper-clip",theme:"outlined"};const xt=Lt;var $t=function(e,a){return i.createElement(Ue,X(X({},e),{},{ref:a,icon:xt}))},Nt=i.forwardRef($t);const Ot=Nt;var Tt={icon:function(e,a){return{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 632H136v-39.9l138.5-164.3 150.1 178L658.1 489 888 761.6V792zm0-129.8L664.2 396.8c-3.2-3.8-9-3.8-12.2 0L424.6 666.4l-144-170.7c-3.2-3.8-9-3.8-12.2 0L136 652.7V232h752v430.2z",fill:e}},{tag:"path",attrs:{d:"M424.6 765.8l-150.1-178L136 752.1V792h752v-30.4L658.1 489z",fill:a}},{tag:"path",attrs:{d:"M136 652.7l132.4-157c3.2-3.8 9-3.8 12.2 0l144 170.7L652 396.8c3.2-3.8 9-3.8 12.2 0L888 662.2V232H136v420.7zM304 280a88 88 0 110 176 88 88 0 010-176z",fill:a}},{tag:"path",attrs:{d:"M276 368a28 28 0 1056 0 28 28 0 10-56 0z",fill:a}},{tag:"path",attrs:{d:"M304 456a88 88 0 100-176 88 88 0 000 176zm0-116c15.5 0 28 12.5 28 28s-12.5 28-28 28-28-12.5-28-28 12.5-28 28-28z",fill:e}}]}},name:"picture",theme:"twotone"};const Mt=Tt;var At=function(e,a){return i.createElement(Ue,X(X({},e),{},{ref:a,icon:Mt}))},jt=i.forwardRef(At);const zt=jt;var Bt={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"upload",theme:"outlined"};const Vt=Bt;var _t=function(e,a){return i.createElement(Ue,X(X({},e),{},{ref:a,icon:Vt}))},Ht=i.forwardRef(_t);const En=Ht;function qt(t,e){var a="cannot ".concat(t.method," ").concat(t.action," ").concat(e.status,"'"),n=new Error(a);return n.status=e.status,n.method=t.method,n.url=t.action,n}function Ge(t){var e=t.responseText||t.response;if(!e)return e;try{return JSON.parse(e)}catch{return e}}function Wt(t){var e=new XMLHttpRequest;t.onProgress&&e.upload&&(e.upload.onprogress=function(l){l.total>0&&(l.percent=l.loaded/l.total*100),t.onProgress(l)});var a=new FormData;t.data&&Object.keys(t.data).forEach(function(o){var l=t.data[o];if(Array.isArray(l)){l.forEach(function(s){a.append("".concat(o,"[]"),s)});return}a.append(o,l)}),t.file instanceof Blob?a.append(t.filename,t.file,t.file.name):a.append(t.filename,t.file),e.onerror=function(l){t.onError(l)},e.onload=function(){return e.status<200||e.status>=300?t.onError(qt(t,e),Ge(e)):t.onSuccess(Ge(e),e)},e.open(t.method,t.action,!0),t.withCredentials&&"withCredentials"in e&&(e.withCredentials=!0);var n=t.headers||{};return n["X-Requested-With"]!==null&&e.setRequestHeader("X-Requested-With","XMLHttpRequest"),Object.keys(n).forEach(function(o){n[o]!==null&&e.setRequestHeader(o,n[o])}),e.send(a),{abort:function(){e.abort()}}}var Kt=+new Date,Gt=0;function $e(){return"rc-upload-".concat(Kt,"-").concat(++Gt)}const Ne=function(t,e){if(t&&e){var a=Array.isArray(e)?e:e.split(","),n=t.name||"",o=t.type||"",l=o.replace(/\/.*$/,"");return a.some(function(s){var r=s.trim();if(/^\*(\/\*)?$/.test(s))return!0;if(r.charAt(0)==="."){var d=n.toLowerCase(),c=r.toLowerCase(),u=[c];return(c===".jpg"||c===".jpeg")&&(u=[".jpg",".jpeg"]),u.some(function(h){return d.endsWith(h)})}return/\/\*$/.test(r)?l===r.replace(/\/.*$/,""):o===r?!0:/^\w+$/.test(r)?(it(!1,"Upload takes an invalidate 'accept' type '".concat(r,"'.Skip for check.")),!0):!1})}return!0};function Xt(t,e){var a=t.createReader(),n=[];function o(){a.readEntries(function(l){var s=Array.prototype.slice.apply(l);n=n.concat(s);var r=!s.length;r?e(n):o()})}o()}var Jt=function(e,a,n){var o=function l(s,r){s&&(s.path=r||"",s.isFile?s.file(function(d){n(d)&&(s.fullPath&&!d.webkitRelativePath&&(Object.defineProperties(d,{webkitRelativePath:{writable:!0}}),d.webkitRelativePath=s.fullPath.replace(/^\//,""),Object.defineProperties(d,{webkitRelativePath:{writable:!1}})),a([d]))}):s.isDirectory&&Xt(s,function(d){d.forEach(function(c){l(c,"".concat(r).concat(s.name,"/"))})}))};e.forEach(function(l){o(l.webkitGetAsEntry())})},Yt=["component","prefixCls","className","disabled","id","style","multiple","accept","capture","children","directory","openFileDialogOnClick","onMouseEnter","onMouseLeave"],Zt=function(t){Xe(a,t);var e=Je(a);function a(){var n;Ye(this,a);for(var o=arguments.length,l=new Array(o),s=0;s0&&arguments[0]!==void 0?arguments[0]:"",a=e.split("/"),n=a[a.length-1],o=n.split(/#|\?/)[0];return(/\.[^./\\]*$/.exec(o)||[""])[0]},tt=function(e){return e.indexOf("image/")===0},tn=function(e){if(e.type&&!e.thumbUrl)return tt(e.type);var a=e.thumbUrl||e.url||"",n=en(a);return/^data:image\//.test(a)||/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico|heic|heif)$/i.test(n)?!0:!(/^data:/.test(a)||n)},oe=200;function nn(t){return new Promise(function(e){if(!t.type||!tt(t.type)){e("");return}var a=document.createElement("canvas");a.width=oe,a.height=oe,a.style.cssText="position: fixed; left: 0; top: 0; width: ".concat(oe,"px; height: ").concat(oe,"px; z-index: 9999; display: none;"),document.body.appendChild(a);var n=a.getContext("2d"),o=new Image;if(o.onload=function(){var r=o.width,d=o.height,c=oe,u=oe,h=0,m=0;r>d?(u=d*(oe/r),m=-(u-c)/2):(c=r*(oe/d),h=-(c-u)/2),n.drawImage(o,h,m,c,u);var y=a.toDataURL();document.body.removeChild(a),window.URL.revokeObjectURL(o.src),e(y)},o.crossOrigin="anonymous",t.type.startsWith("image/svg+xml")){var l=new FileReader;l.onload=function(){l.result&&(o.src=l.result)},l.readAsDataURL(t)}else if(t.type.startsWith("image/gif")){var s=new FileReader;s.onload=function(){s.result&&e(s.result)},s.readAsDataURL(t)}else o.src=window.URL.createObjectURL(t)})}var rn=i.forwardRef(function(t,e){var a=t.prefixCls,n=t.className,o=t.style,l=t.locale,s=t.listType,r=t.file,d=t.items,c=t.progress,u=t.iconRender,h=t.actionIconRender,m=t.itemRender,y=t.isImgUrl,O=t.showPreviewIcon,S=t.showRemoveIcon,L=t.showDownloadIcon,U=t.previewIcon,T=t.removeIcon,$=t.downloadIcon,M=t.onPreview,p=t.onDownload,x=t.onClose,N,H,Q=r.status,de=i.useState(Q),ee=Fe(de,2),A=ee[0],pe=ee[1];i.useEffect(function(){Q!=="removed"&&pe(Q)},[Q]);var fe=i.useState(!1),ve=Fe(fe,2),me=ve[0],Ce=ve[1],te=i.useRef(null);i.useEffect(function(){return te.current=setTimeout(function(){Ce(!0)},300),function(){te.current&&clearTimeout(te.current)}},[]);var he="".concat(a,"-span"),ne=u(r),ie=i.createElement("div",{className:"".concat(a,"-text-icon")},ne);if(s==="picture"||s==="picture-card")if(A==="uploading"||!r.thumbUrl&&!r.url){var ge=_(P(P({},"".concat(a,"-list-item-thumbnail"),!0),"".concat(a,"-list-item-file"),A!=="uploading"));ie=i.createElement("div",{className:ge},ne)}else{var q=y!=null&&y(r)?i.createElement("img",{src:r.thumbUrl||r.url,alt:r.name,className:"".concat(a,"-list-item-image"),crossOrigin:r.crossOrigin}):ne,Ee=_(P(P({},"".concat(a,"-list-item-thumbnail"),!0),"".concat(a,"-list-item-file"),y&&!y(r)));ie=i.createElement("a",{className:Ee,onClick:function(I){return M(r,I)},href:r.url||r.thumbUrl,target:"_blank",rel:"noopener noreferrer"},q)}var we=_(P(P(P({},"".concat(a,"-list-item"),!0),"".concat(a,"-list-item-").concat(A),!0),"".concat(a,"-list-item-list-type-").concat(s),!0)),D=typeof r.linkProps=="string"?JSON.parse(r.linkProps):r.linkProps,le=S?h((typeof T=="function"?T(r):T)||i.createElement(yt,null),function(){return x(r)},a,l.removeFile):null,ye=L&&A==="done"?h((typeof $=="function"?$(r):$)||i.createElement(bt,null),function(){return p(r)},a,l.downloadFile):null,se=s!=="picture-card"&&i.createElement("span",{key:"download-delete",className:_("".concat(a,"-list-item-card-actions"),{picture:s==="picture"})},ye,le),G=_("".concat(a,"-list-item-name")),Re=r.url?[i.createElement("a",w({key:"view",target:"_blank",rel:"noopener noreferrer",className:G,title:r.name},D,{href:r.url,onClick:function(I){return M(r,I)}}),r.name),se]:[i.createElement("span",{key:"view",className:G,onClick:function(I){return M(r,I)},title:r.name},r.name),se],re={pointerEvents:"none",opacity:.5},J=O?i.createElement("a",{href:r.url||r.thumbUrl,target:"_blank",rel:"noopener noreferrer",style:r.url||r.thumbUrl?void 0:re,onClick:function(I){return M(r,I)},title:l.previewFile},typeof U=="function"?U(r):U||i.createElement(vt,null)):null,ae=s==="picture-card"&&A!=="uploading"&&i.createElement("span",{className:"".concat(a,"-list-item-actions")},J,A==="done"&&ye,le),b;r.response&&typeof r.response=="string"?b=r.response:b=((N=r.error)===null||N===void 0?void 0:N.statusText)||((H=r.error)===null||H===void 0?void 0:H.message)||l.uploadError;var g=i.createElement("span",{className:he},ie,Re),k=i.useContext(je),j=k.getPrefixCls,W=j(),Y=i.createElement("div",{className:we},i.createElement("div",{className:"".concat(a,"-list-item-info")},g),ae,me&&i.createElement(et,{motionName:"".concat(W,"-fade"),visible:A==="uploading",motionDeadline:2e3},function(K){var I=K.className,ce="percent"in r?i.createElement(It,w({},c,{type:"line",percent:r.percent})):null;return i.createElement("div",{className:_("".concat(a,"-list-item-progress"),I)},ce)})),be=_("".concat(a,"-list-").concat(s,"-container"),n),Ie=A==="error"?i.createElement(mt,{title:b,getPopupContainer:function(I){return I.parentNode}},Y):Y;return i.createElement("div",{className:be,style:o,ref:e},m?m(Ie,r,d,{download:p.bind(null,r),preview:M.bind(null,r),remove:x.bind(null,r)}):Ie)});const an=rn;var Le=w({},ht);delete Le.onAppearEnd;delete Le.onEnterEnd;delete Le.onLeaveEnd;var on=function(e,a){var n=e.listType,o=n===void 0?"text":n,l=e.previewFile,s=l===void 0?nn:l,r=e.onPreview,d=e.onDownload,c=e.onRemove,u=e.locale,h=e.iconRender,m=e.isImageUrl,y=m===void 0?tn:m,O=e.prefixCls,S=e.items,L=S===void 0?[]:S,U=e.showPreviewIcon,T=U===void 0?!0:U,$=e.showRemoveIcon,M=$===void 0?!0:$,p=e.showDownloadIcon,x=p===void 0?!1:p,N=e.removeIcon,H=e.previewIcon,Q=e.downloadIcon,de=e.progress,ee=de===void 0?{strokeWidth:2,showInfo:!1}:de,A=e.appendAction,pe=e.appendActionVisible,fe=pe===void 0?!0:pe,ve=e.itemRender,me=e.disabled,Ce=gt(),te=i.useState(!1),he=Fe(te,2),ne=he[0],ie=he[1];i.useEffect(function(){o!=="picture"&&o!=="picture-card"||(L||[]).forEach(function(b){typeof document>"u"||typeof window>"u"||!window.FileReader||!window.File||!(b.originFileObj instanceof File||b.originFileObj instanceof Blob)||b.thumbUrl!==void 0||(b.thumbUrl="",s&&s(b.originFileObj).then(function(g){b.thumbUrl=g||"",Ce()}))})},[o,L,s]),i.useEffect(function(){ie(!0)},[]);var ge=function(g,k){if(r)return k==null||k.preventDefault(),r(g)},q=function(g){typeof d=="function"?d(g):g.url&&window.open(g.url)},Ee=function(g){c==null||c(g)},we=function(g){if(h)return h(g,o);var k=g.status==="uploading",j=y&&y(g)?i.createElement(zt,null):i.createElement(Ft,null),W=k?i.createElement(qe,null):i.createElement(Ot,null);return o==="picture"?W=k?i.createElement(qe,null):j:o==="picture-card"&&(W=k?u.uploading:j),W},D=function(g,k,j,W){var Y={type:"text",size:"small",title:W,disabled:me,onClick:function(K){k(),He(g)&&g.props.onClick&&g.props.onClick(K)},className:"".concat(j,"-list-item-card-actions-btn")};if(He(g)){var be=_e(g,w(w({},g.props),{onClick:function(){}}));return i.createElement(Ke,w({},Y,{icon:be}))}return i.createElement(Ke,w({},Y),i.createElement("span",null,g))};i.useImperativeHandle(a,function(){return{handlePreview:ge,handleDownload:q}});var le=i.useContext(je),ye=le.getPrefixCls,se=le.direction,G=ye("upload",O),Re=_(P(P(P({},"".concat(G,"-list"),!0),"".concat(G,"-list-").concat(o),!0),"".concat(G,"-list-rtl"),se==="rtl")),re=ue(L.map(function(b){return{key:b.uid,file:b}})),J=o==="picture-card"?"animate-inline":"animate",ae={motionDeadline:2e3,motionName:"".concat(G,"-").concat(J),keys:re,motionAppear:ne};return o!=="picture-card"&&(ae=w(w({},Le),ae)),i.createElement("div",{className:Re},i.createElement(ct,w({},ae,{component:!1}),function(b){var g=b.key,k=b.file,j=b.className,W=b.style;return i.createElement(an,{key:g,locale:u,prefixCls:G,className:j,style:W,file:k,items:L,progress:ee,listType:o,isImgUrl:y,showPreviewIcon:T,showRemoveIcon:M,showDownloadIcon:x,removeIcon:N,previewIcon:H,downloadIcon:Q,iconRender:we,actionIconRender:D,itemRender:ve,onPreview:ge,onDownload:q,onClose:Ee})}),A&&i.createElement(et,w({},ae,{visible:fe,forceRender:!0}),function(b){var g=b.className,k=b.style;return _e(A,function(j){return{className:_(j.className,g),style:w(w(w({},k),{pointerEvents:g?"none":void 0}),j.style)}})}))},ln=i.forwardRef(on);const sn=ln;var cn=globalThis&&globalThis.__awaiter||function(t,e,a,n){function o(l){return l instanceof a?l:new a(function(s){s(l)})}return new(a||(a=Promise))(function(l,s){function r(u){try{c(n.next(u))}catch(h){s(h)}}function d(u){try{c(n.throw(u))}catch(h){s(h)}}function c(u){u.done?l(u.value):o(u.value).then(r,d)}c((n=n.apply(t,e||[])).next())})},Pe="__LIST_IGNORE_".concat(Date.now(),"__"),un=function(e,a){var n=e.fileList,o=e.defaultFileList,l=e.onRemove,s=e.showUploadList,r=s===void 0?!0:s,d=e.listType,c=d===void 0?"text":d,u=e.onPreview,h=e.onDownload,m=e.onChange,y=e.onDrop,O=e.previewFile,S=e.disabled,L=e.locale,U=e.iconRender,T=e.isImageUrl,$=e.progress,M=e.prefixCls,p=e.className,x=e.type,N=x===void 0?"select":x,H=e.children,Q=e.style,de=e.itemRender,ee=e.maxCount,A=e.data,pe=A===void 0?{}:A,fe=e.multiple,ve=fe===void 0?!1:fe,me=e.action,Ce=me===void 0?"":me,te=e.accept,he=te===void 0?"":te,ne=e.supportServerRender,ie=ne===void 0?!0:ne,ge=i.useContext(ut),q=S??ge,Ee=wt(o||[],{value:n,postState:function(v){return v??[]}}),we=Fe(Ee,2),D=we[0],le=we[1],ye=i.useState("drop"),se=Fe(ye,2),G=se[0],Re=se[1],re=i.useRef(null);i.useMemo(function(){var z=Date.now();(n||[]).forEach(function(v,E){!v.uid&&!Object.isFrozen(v)&&(v.uid="__AUTO__".concat(z,"_").concat(E,"__"))})},[n]);var J=function(v,E,F){var f=ue(E);ee===1?f=f.slice(-1):ee&&(f=f.slice(0,ee)),We.flushSync(function(){le(f)});var C={file:v,fileList:f};F&&(C.event=F),We.flushSync(function(){m==null||m(C)})},ae=function(v,E){return cn(void 0,void 0,void 0,Se().mark(function F(){var f,C,B,V;return Se().wrap(function(R){for(;;)switch(R.prev=R.next){case 0:if(f=e.beforeUpload,C=e.transformFile,B=v,!f){R.next=13;break}return R.next=5,f(v,E);case 5:if(V=R.sent,V!==!1){R.next=8;break}return R.abrupt("return",!1);case 8:if(delete v[Pe],V!==Pe){R.next=12;break}return Object.defineProperty(v,Pe,{value:!0,configurable:!0}),R.abrupt("return",!1);case 12:Qe(V)==="object"&&V&&(B=V);case 13:if(!C){R.next=17;break}return R.next=16,C(B);case 16:B=R.sent;case 17:return R.abrupt("return",B);case 18:case"end":return R.stop()}},F)}))},b=function(v){var E=v.filter(function(C){return!C.file[Pe]});if(E.length){var F=E.map(function(C){return De(C.file)}),f=ue(D);F.forEach(function(C){f=ke(C,f)}),F.forEach(function(C,B){var V=C;if(E[B].parsedFile)C.status="uploading";else{var Z=C.originFileObj,R;try{R=new File([Z],Z.name,{type:Z.type})}catch{R=new Blob([Z],{type:Z.type}),R.name=Z.name,R.lastModifiedDate=new Date,R.lastModified=new Date().getTime()}R.uid=C.uid,V=R}J(V,f)})}},g=function(v,E,F){try{typeof v=="string"&&(v=JSON.parse(v))}catch{}if(Te(E,D)){var f=De(E);f.status="done",f.percent=100,f.response=v,f.xhr=F;var C=ke(f,D);J(f,C)}},k=function(v,E){if(Te(E,D)){var F=De(E);F.status="uploading",F.percent=v.percent;var f=ke(F,D);J(F,f,v)}},j=function(v,E,F){if(Te(F,D)){var f=De(F);f.error=v,f.response=E,f.status="error";var C=ke(f,D);J(f,C)}},W=function(v){var E;Promise.resolve(typeof l=="function"?l(v):l).then(function(F){var f;if(F!==!1){var C=Qt(v,D);C&&(E=w(w({},v),{status:"removed"}),D==null||D.forEach(function(B){var V=E.uid!==void 0?"uid":"name";B[V]===E[V]&&!Object.isFrozen(B)&&(B.status="removed")}),(f=re.current)===null||f===void 0||f.abort(E),J(E,C))}})},Y=function(v){Re(v.type),v.type==="drop"&&(y==null||y(v))};i.useImperativeHandle(a,function(){return{onBatchStart:b,onSuccess:g,onProgress:k,onError:j,fileList:D,upload:re.current}});var be=i.useContext(je),Ie=be.getPrefixCls,K=be.direction,I=Ie("upload",M),ce=w(w({onBatchStart:b,onError:j,onProgress:k,onSuccess:g},e),{data:pe,multiple:ve,action:Ce,accept:he,supportServerRender:ie,prefixCls:I,disabled:q,beforeUpload:ae,onChange:void 0});delete ce.className,delete ce.style,(!H||q)&&delete ce.id;var xe=function(v,E){return r?i.createElement(dt,{componentName:"Upload",defaultLocale:pt.Upload},function(F){var f=typeof r=="boolean"?{}:r,C=f.showRemoveIcon,B=f.showPreviewIcon,V=f.showDownloadIcon,Z=f.removeIcon,R=f.previewIcon,Ve=f.downloadIcon;return i.createElement(sn,{prefixCls:I,listType:c,items:D,previewFile:O,onPreview:u,onDownload:h,onRemove:W,showRemoveIcon:!q&&C,showPreviewIcon:B,showDownloadIcon:V,removeIcon:Z,previewIcon:R,downloadIcon:Ve,iconRender:U,locale:w(w({},F),L),isImageUrl:T,progress:$,appendAction:v,appendActionVisible:E,itemRender:de,disabled:q})}):v};if(N==="drag"){var rt=_(I,P(P(P(P(P({},"".concat(I,"-drag"),!0),"".concat(I,"-drag-uploading"),D.some(function(z){return z.status==="uploading"})),"".concat(I,"-drag-hover"),G==="dragover"),"".concat(I,"-disabled"),q),"".concat(I,"-rtl"),K==="rtl"),p);return i.createElement("span",null,i.createElement("div",{className:rt,onDrop:Y,onDragOver:Y,onDragLeave:Y,style:Q},i.createElement(Ae,w({},ce,{ref:re,className:"".concat(I,"-btn")}),i.createElement("div",{className:"".concat(I,"-drag-container")},H))),xe())}var at=_(I,P(P(P(P({},"".concat(I,"-select"),!0),"".concat(I,"-select-").concat(c),!0),"".concat(I,"-disabled"),q),"".concat(I,"-rtl"),K==="rtl")),ot=function(v){return i.createElement("div",{className:at,style:v},i.createElement(Ae,w({},ce,{ref:re})))},Be=ot(H?void 0:{display:"none"});return c==="picture-card"?i.createElement("span",{className:_("".concat(I,"-picture-card-wrapper"),p)},xe(Be,!!H)):i.createElement("span",{className:p},Be,xe())},dn=i.forwardRef(un);const nt=dn;var pn=globalThis&&globalThis.__rest||function(t,e){var a={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(a[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(t);o0&&(l.percent=l.loaded/l.total*100),t.onProgress(l)});var a=new FormData;t.data&&Object.keys(t.data).forEach(function(o){var l=t.data[o];if(Array.isArray(l)){l.forEach(function(s){a.append("".concat(o,"[]"),s)});return}a.append(o,l)}),t.file instanceof Blob?a.append(t.filename,t.file,t.file.name):a.append(t.filename,t.file),e.onerror=function(l){t.onError(l)},e.onload=function(){return e.status<200||e.status>=300?t.onError(qt(t,e),Ge(e)):t.onSuccess(Ge(e),e)},e.open(t.method,t.action,!0),t.withCredentials&&"withCredentials"in e&&(e.withCredentials=!0);var n=t.headers||{};return n["X-Requested-With"]!==null&&e.setRequestHeader("X-Requested-With","XMLHttpRequest"),Object.keys(n).forEach(function(o){n[o]!==null&&e.setRequestHeader(o,n[o])}),e.send(a),{abort:function(){e.abort()}}}var Kt=+new Date,Gt=0;function $e(){return"rc-upload-".concat(Kt,"-").concat(++Gt)}const Ne=function(t,e){if(t&&e){var a=Array.isArray(e)?e:e.split(","),n=t.name||"",o=t.type||"",l=o.replace(/\/.*$/,"");return a.some(function(s){var r=s.trim();if(/^\*(\/\*)?$/.test(s))return!0;if(r.charAt(0)==="."){var d=n.toLowerCase(),c=r.toLowerCase(),u=[c];return(c===".jpg"||c===".jpeg")&&(u=[".jpg",".jpeg"]),u.some(function(h){return d.endsWith(h)})}return/\/\*$/.test(r)?l===r.replace(/\/.*$/,""):o===r?!0:/^\w+$/.test(r)?(it(!1,"Upload takes an invalidate 'accept' type '".concat(r,"'.Skip for check.")),!0):!1})}return!0};function Xt(t,e){var a=t.createReader(),n=[];function o(){a.readEntries(function(l){var s=Array.prototype.slice.apply(l);n=n.concat(s);var r=!s.length;r?e(n):o()})}o()}var Jt=function(e,a,n){var o=function l(s,r){s&&(s.path=r||"",s.isFile?s.file(function(d){n(d)&&(s.fullPath&&!d.webkitRelativePath&&(Object.defineProperties(d,{webkitRelativePath:{writable:!0}}),d.webkitRelativePath=s.fullPath.replace(/^\//,""),Object.defineProperties(d,{webkitRelativePath:{writable:!1}})),a([d]))}):s.isDirectory&&Xt(s,function(d){d.forEach(function(c){l(c,"".concat(r).concat(s.name,"/"))})}))};e.forEach(function(l){o(l.webkitGetAsEntry())})},Yt=["component","prefixCls","className","disabled","id","style","multiple","accept","capture","children","directory","openFileDialogOnClick","onMouseEnter","onMouseLeave"],Zt=function(t){Xe(a,t);var e=Je(a);function a(){var n;Ye(this,a);for(var o=arguments.length,l=new Array(o),s=0;s0&&arguments[0]!==void 0?arguments[0]:"",a=e.split("/"),n=a[a.length-1],o=n.split(/#|\?/)[0];return(/\.[^./\\]*$/.exec(o)||[""])[0]},tt=function(e){return e.indexOf("image/")===0},tn=function(e){if(e.type&&!e.thumbUrl)return tt(e.type);var a=e.thumbUrl||e.url||"",n=en(a);return/^data:image\//.test(a)||/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico|heic|heif)$/i.test(n)?!0:!(/^data:/.test(a)||n)},oe=200;function nn(t){return new Promise(function(e){if(!t.type||!tt(t.type)){e("");return}var a=document.createElement("canvas");a.width=oe,a.height=oe,a.style.cssText="position: fixed; left: 0; top: 0; width: ".concat(oe,"px; height: ").concat(oe,"px; z-index: 9999; display: none;"),document.body.appendChild(a);var n=a.getContext("2d"),o=new Image;if(o.onload=function(){var r=o.width,d=o.height,c=oe,u=oe,h=0,m=0;r>d?(u=d*(oe/r),m=-(u-c)/2):(c=r*(oe/d),h=-(c-u)/2),n.drawImage(o,h,m,c,u);var y=a.toDataURL();document.body.removeChild(a),window.URL.revokeObjectURL(o.src),e(y)},o.crossOrigin="anonymous",t.type.startsWith("image/svg+xml")){var l=new FileReader;l.onload=function(){l.result&&(o.src=l.result)},l.readAsDataURL(t)}else if(t.type.startsWith("image/gif")){var s=new FileReader;s.onload=function(){s.result&&e(s.result)},s.readAsDataURL(t)}else o.src=window.URL.createObjectURL(t)})}var rn=i.forwardRef(function(t,e){var a=t.prefixCls,n=t.className,o=t.style,l=t.locale,s=t.listType,r=t.file,d=t.items,c=t.progress,u=t.iconRender,h=t.actionIconRender,m=t.itemRender,y=t.isImgUrl,O=t.showPreviewIcon,S=t.showRemoveIcon,L=t.showDownloadIcon,U=t.previewIcon,T=t.removeIcon,$=t.downloadIcon,M=t.onPreview,p=t.onDownload,x=t.onClose,N,H,Q=r.status,de=i.useState(Q),ee=Fe(de,2),A=ee[0],pe=ee[1];i.useEffect(function(){Q!=="removed"&&pe(Q)},[Q]);var fe=i.useState(!1),ve=Fe(fe,2),me=ve[0],Ce=ve[1],te=i.useRef(null);i.useEffect(function(){return te.current=setTimeout(function(){Ce(!0)},300),function(){te.current&&clearTimeout(te.current)}},[]);var he="".concat(a,"-span"),ne=u(r),ie=i.createElement("div",{className:"".concat(a,"-text-icon")},ne);if(s==="picture"||s==="picture-card")if(A==="uploading"||!r.thumbUrl&&!r.url){var ge=_(P(P({},"".concat(a,"-list-item-thumbnail"),!0),"".concat(a,"-list-item-file"),A!=="uploading"));ie=i.createElement("div",{className:ge},ne)}else{var q=y!=null&&y(r)?i.createElement("img",{src:r.thumbUrl||r.url,alt:r.name,className:"".concat(a,"-list-item-image"),crossOrigin:r.crossOrigin}):ne,Ee=_(P(P({},"".concat(a,"-list-item-thumbnail"),!0),"".concat(a,"-list-item-file"),y&&!y(r)));ie=i.createElement("a",{className:Ee,onClick:function(I){return M(r,I)},href:r.url||r.thumbUrl,target:"_blank",rel:"noopener noreferrer"},q)}var we=_(P(P(P({},"".concat(a,"-list-item"),!0),"".concat(a,"-list-item-").concat(A),!0),"".concat(a,"-list-item-list-type-").concat(s),!0)),D=typeof r.linkProps=="string"?JSON.parse(r.linkProps):r.linkProps,le=S?h((typeof T=="function"?T(r):T)||i.createElement(yt,null),function(){return x(r)},a,l.removeFile):null,ye=L&&A==="done"?h((typeof $=="function"?$(r):$)||i.createElement(bt,null),function(){return p(r)},a,l.downloadFile):null,se=s!=="picture-card"&&i.createElement("span",{key:"download-delete",className:_("".concat(a,"-list-item-card-actions"),{picture:s==="picture"})},ye,le),G=_("".concat(a,"-list-item-name")),Re=r.url?[i.createElement("a",w({key:"view",target:"_blank",rel:"noopener noreferrer",className:G,title:r.name},D,{href:r.url,onClick:function(I){return M(r,I)}}),r.name),se]:[i.createElement("span",{key:"view",className:G,onClick:function(I){return M(r,I)},title:r.name},r.name),se],re={pointerEvents:"none",opacity:.5},J=O?i.createElement("a",{href:r.url||r.thumbUrl,target:"_blank",rel:"noopener noreferrer",style:r.url||r.thumbUrl?void 0:re,onClick:function(I){return M(r,I)},title:l.previewFile},typeof U=="function"?U(r):U||i.createElement(vt,null)):null,ae=s==="picture-card"&&A!=="uploading"&&i.createElement("span",{className:"".concat(a,"-list-item-actions")},J,A==="done"&&ye,le),b;r.response&&typeof r.response=="string"?b=r.response:b=((N=r.error)===null||N===void 0?void 0:N.statusText)||((H=r.error)===null||H===void 0?void 0:H.message)||l.uploadError;var g=i.createElement("span",{className:he},ie,Re),k=i.useContext(je),j=k.getPrefixCls,W=j(),Y=i.createElement("div",{className:we},i.createElement("div",{className:"".concat(a,"-list-item-info")},g),ae,me&&i.createElement(et,{motionName:"".concat(W,"-fade"),visible:A==="uploading",motionDeadline:2e3},function(K){var I=K.className,ce="percent"in r?i.createElement(It,w({},c,{type:"line",percent:r.percent})):null;return i.createElement("div",{className:_("".concat(a,"-list-item-progress"),I)},ce)})),be=_("".concat(a,"-list-").concat(s,"-container"),n),Ie=A==="error"?i.createElement(mt,{title:b,getPopupContainer:function(I){return I.parentNode}},Y):Y;return i.createElement("div",{className:be,style:o,ref:e},m?m(Ie,r,d,{download:p.bind(null,r),preview:M.bind(null,r),remove:x.bind(null,r)}):Ie)});const an=rn;var Le=w({},ht);delete Le.onAppearEnd;delete Le.onEnterEnd;delete Le.onLeaveEnd;var on=function(e,a){var n=e.listType,o=n===void 0?"text":n,l=e.previewFile,s=l===void 0?nn:l,r=e.onPreview,d=e.onDownload,c=e.onRemove,u=e.locale,h=e.iconRender,m=e.isImageUrl,y=m===void 0?tn:m,O=e.prefixCls,S=e.items,L=S===void 0?[]:S,U=e.showPreviewIcon,T=U===void 0?!0:U,$=e.showRemoveIcon,M=$===void 0?!0:$,p=e.showDownloadIcon,x=p===void 0?!1:p,N=e.removeIcon,H=e.previewIcon,Q=e.downloadIcon,de=e.progress,ee=de===void 0?{strokeWidth:2,showInfo:!1}:de,A=e.appendAction,pe=e.appendActionVisible,fe=pe===void 0?!0:pe,ve=e.itemRender,me=e.disabled,Ce=gt(),te=i.useState(!1),he=Fe(te,2),ne=he[0],ie=he[1];i.useEffect(function(){o!=="picture"&&o!=="picture-card"||(L||[]).forEach(function(b){typeof document>"u"||typeof window>"u"||!window.FileReader||!window.File||!(b.originFileObj instanceof File||b.originFileObj instanceof Blob)||b.thumbUrl!==void 0||(b.thumbUrl="",s&&s(b.originFileObj).then(function(g){b.thumbUrl=g||"",Ce()}))})},[o,L,s]),i.useEffect(function(){ie(!0)},[]);var ge=function(g,k){if(r)return k==null||k.preventDefault(),r(g)},q=function(g){typeof d=="function"?d(g):g.url&&window.open(g.url)},Ee=function(g){c==null||c(g)},we=function(g){if(h)return h(g,o);var k=g.status==="uploading",j=y&&y(g)?i.createElement(zt,null):i.createElement(Ft,null),W=k?i.createElement(qe,null):i.createElement(Ot,null);return o==="picture"?W=k?i.createElement(qe,null):j:o==="picture-card"&&(W=k?u.uploading:j),W},D=function(g,k,j,W){var Y={type:"text",size:"small",title:W,disabled:me,onClick:function(K){k(),He(g)&&g.props.onClick&&g.props.onClick(K)},className:"".concat(j,"-list-item-card-actions-btn")};if(He(g)){var be=_e(g,w(w({},g.props),{onClick:function(){}}));return i.createElement(Ke,w({},Y,{icon:be}))}return i.createElement(Ke,w({},Y),i.createElement("span",null,g))};i.useImperativeHandle(a,function(){return{handlePreview:ge,handleDownload:q}});var le=i.useContext(je),ye=le.getPrefixCls,se=le.direction,G=ye("upload",O),Re=_(P(P(P({},"".concat(G,"-list"),!0),"".concat(G,"-list-").concat(o),!0),"".concat(G,"-list-rtl"),se==="rtl")),re=ue(L.map(function(b){return{key:b.uid,file:b}})),J=o==="picture-card"?"animate-inline":"animate",ae={motionDeadline:2e3,motionName:"".concat(G,"-").concat(J),keys:re,motionAppear:ne};return o!=="picture-card"&&(ae=w(w({},Le),ae)),i.createElement("div",{className:Re},i.createElement(ct,w({},ae,{component:!1}),function(b){var g=b.key,k=b.file,j=b.className,W=b.style;return i.createElement(an,{key:g,locale:u,prefixCls:G,className:j,style:W,file:k,items:L,progress:ee,listType:o,isImgUrl:y,showPreviewIcon:T,showRemoveIcon:M,showDownloadIcon:x,removeIcon:N,previewIcon:H,downloadIcon:Q,iconRender:we,actionIconRender:D,itemRender:ve,onPreview:ge,onDownload:q,onClose:Ee})}),A&&i.createElement(et,w({},ae,{visible:fe,forceRender:!0}),function(b){var g=b.className,k=b.style;return _e(A,function(j){return{className:_(j.className,g),style:w(w(w({},k),{pointerEvents:g?"none":void 0}),j.style)}})}))},ln=i.forwardRef(on);const sn=ln;var cn=globalThis&&globalThis.__awaiter||function(t,e,a,n){function o(l){return l instanceof a?l:new a(function(s){s(l)})}return new(a||(a=Promise))(function(l,s){function r(u){try{c(n.next(u))}catch(h){s(h)}}function d(u){try{c(n.throw(u))}catch(h){s(h)}}function c(u){u.done?l(u.value):o(u.value).then(r,d)}c((n=n.apply(t,e||[])).next())})},Pe="__LIST_IGNORE_".concat(Date.now(),"__"),un=function(e,a){var n=e.fileList,o=e.defaultFileList,l=e.onRemove,s=e.showUploadList,r=s===void 0?!0:s,d=e.listType,c=d===void 0?"text":d,u=e.onPreview,h=e.onDownload,m=e.onChange,y=e.onDrop,O=e.previewFile,S=e.disabled,L=e.locale,U=e.iconRender,T=e.isImageUrl,$=e.progress,M=e.prefixCls,p=e.className,x=e.type,N=x===void 0?"select":x,H=e.children,Q=e.style,de=e.itemRender,ee=e.maxCount,A=e.data,pe=A===void 0?{}:A,fe=e.multiple,ve=fe===void 0?!1:fe,me=e.action,Ce=me===void 0?"":me,te=e.accept,he=te===void 0?"":te,ne=e.supportServerRender,ie=ne===void 0?!0:ne,ge=i.useContext(ut),q=S??ge,Ee=wt(o||[],{value:n,postState:function(v){return v??[]}}),we=Fe(Ee,2),D=we[0],le=we[1],ye=i.useState("drop"),se=Fe(ye,2),G=se[0],Re=se[1],re=i.useRef(null);i.useMemo(function(){var z=Date.now();(n||[]).forEach(function(v,E){!v.uid&&!Object.isFrozen(v)&&(v.uid="__AUTO__".concat(z,"_").concat(E,"__"))})},[n]);var J=function(v,E,F){var f=ue(E);ee===1?f=f.slice(-1):ee&&(f=f.slice(0,ee)),We.flushSync(function(){le(f)});var C={file:v,fileList:f};F&&(C.event=F),We.flushSync(function(){m==null||m(C)})},ae=function(v,E){return cn(void 0,void 0,void 0,Se().mark(function F(){var f,C,B,V;return Se().wrap(function(R){for(;;)switch(R.prev=R.next){case 0:if(f=e.beforeUpload,C=e.transformFile,B=v,!f){R.next=13;break}return R.next=5,f(v,E);case 5:if(V=R.sent,V!==!1){R.next=8;break}return R.abrupt("return",!1);case 8:if(delete v[Pe],V!==Pe){R.next=12;break}return Object.defineProperty(v,Pe,{value:!0,configurable:!0}),R.abrupt("return",!1);case 12:Qe(V)==="object"&&V&&(B=V);case 13:if(!C){R.next=17;break}return R.next=16,C(B);case 16:B=R.sent;case 17:return R.abrupt("return",B);case 18:case"end":return R.stop()}},F)}))},b=function(v){var E=v.filter(function(C){return!C.file[Pe]});if(E.length){var F=E.map(function(C){return De(C.file)}),f=ue(D);F.forEach(function(C){f=ke(C,f)}),F.forEach(function(C,B){var V=C;if(E[B].parsedFile)C.status="uploading";else{var Z=C.originFileObj,R;try{R=new File([Z],Z.name,{type:Z.type})}catch{R=new Blob([Z],{type:Z.type}),R.name=Z.name,R.lastModifiedDate=new Date,R.lastModified=new Date().getTime()}R.uid=C.uid,V=R}J(V,f)})}},g=function(v,E,F){try{typeof v=="string"&&(v=JSON.parse(v))}catch{}if(Te(E,D)){var f=De(E);f.status="done",f.percent=100,f.response=v,f.xhr=F;var C=ke(f,D);J(f,C)}},k=function(v,E){if(Te(E,D)){var F=De(E);F.status="uploading",F.percent=v.percent;var f=ke(F,D);J(F,f,v)}},j=function(v,E,F){if(Te(F,D)){var f=De(F);f.error=v,f.response=E,f.status="error";var C=ke(f,D);J(f,C)}},W=function(v){var E;Promise.resolve(typeof l=="function"?l(v):l).then(function(F){var f;if(F!==!1){var C=Qt(v,D);C&&(E=w(w({},v),{status:"removed"}),D==null||D.forEach(function(B){var V=E.uid!==void 0?"uid":"name";B[V]===E[V]&&!Object.isFrozen(B)&&(B.status="removed")}),(f=re.current)===null||f===void 0||f.abort(E),J(E,C))}})},Y=function(v){Re(v.type),v.type==="drop"&&(y==null||y(v))};i.useImperativeHandle(a,function(){return{onBatchStart:b,onSuccess:g,onProgress:k,onError:j,fileList:D,upload:re.current}});var be=i.useContext(je),Ie=be.getPrefixCls,K=be.direction,I=Ie("upload",M),ce=w(w({onBatchStart:b,onError:j,onProgress:k,onSuccess:g},e),{data:pe,multiple:ve,action:Ce,accept:he,supportServerRender:ie,prefixCls:I,disabled:q,beforeUpload:ae,onChange:void 0});delete ce.className,delete ce.style,(!H||q)&&delete ce.id;var xe=function(v,E){return r?i.createElement(dt,{componentName:"Upload",defaultLocale:pt.Upload},function(F){var f=typeof r=="boolean"?{}:r,C=f.showRemoveIcon,B=f.showPreviewIcon,V=f.showDownloadIcon,Z=f.removeIcon,R=f.previewIcon,Ve=f.downloadIcon;return i.createElement(sn,{prefixCls:I,listType:c,items:D,previewFile:O,onPreview:u,onDownload:h,onRemove:W,showRemoveIcon:!q&&C,showPreviewIcon:B,showDownloadIcon:V,removeIcon:Z,previewIcon:R,downloadIcon:Ve,iconRender:U,locale:w(w({},F),L),isImageUrl:T,progress:$,appendAction:v,appendActionVisible:E,itemRender:de,disabled:q})}):v};if(N==="drag"){var rt=_(I,P(P(P(P(P({},"".concat(I,"-drag"),!0),"".concat(I,"-drag-uploading"),D.some(function(z){return z.status==="uploading"})),"".concat(I,"-drag-hover"),G==="dragover"),"".concat(I,"-disabled"),q),"".concat(I,"-rtl"),K==="rtl"),p);return i.createElement("span",null,i.createElement("div",{className:rt,onDrop:Y,onDragOver:Y,onDragLeave:Y,style:Q},i.createElement(Ae,w({},ce,{ref:re,className:"".concat(I,"-btn")}),i.createElement("div",{className:"".concat(I,"-drag-container")},H))),xe())}var at=_(I,P(P(P(P({},"".concat(I,"-select"),!0),"".concat(I,"-select-").concat(c),!0),"".concat(I,"-disabled"),q),"".concat(I,"-rtl"),K==="rtl")),ot=function(v){return i.createElement("div",{className:at,style:v},i.createElement(Ae,w({},ce,{ref:re})))},Be=ot(H?void 0:{display:"none"});return c==="picture-card"?i.createElement("span",{className:_("".concat(I,"-picture-card-wrapper"),p)},xe(Be,!!H)):i.createElement("span",{className:p},Be,xe())},dn=i.forwardRef(un);const nt=dn;var pn=globalThis&&globalThis.__rest||function(t,e){var a={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(a[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(t);o":20,syllable:21,accidental:22,decorators:23,notations:24,V:25,ACC:26,DECORATOR:27,NOTATION:28,N:29,$accept:0,$end:1},terminals_:{2:"error",4:"EOF",12:"|",13:"{",15:"}",19:"<",20:">",25:"V",26:"ACC",27:"DECORATOR",28:"NOTATION",29:"N"},productions_:[0,[3,1],[3,2],[5,1],[6,1],[6,2],[7,1],[7,1],[8,1],[8,3],[8,3],[11,3],[14,1],[14,2],[10,3],[16,0],[16,2],[18,0],[18,2],[17,1],[17,2],[17,2],[17,2],[17,2],[17,2],[22,1],[22,2],[23,1],[23,2],[24,1],[24,2],[21,1],[9,1]],performAction:function(u,p,g,f,j,k,ce){var I=k.length-1;switch(j){case 1:return null;case 2:return k[I-1];case 3:this.$=m(k[I]);break;case 4:case 12:case 27:case 29:this.$=[k[I]];break;case 5:case 13:case 28:case 30:this.$=[...k[I-1],k[I]];break;case 9:this.$={...k[I],grace:k[I-2]};break;case 10:this.$={...k[I-2],postGrace:k[I]};break;case 11:case 24:this.$=k[I-1];break;case 14:this.$={ldiv:k[I-2],...T(k[I-1]),rdiv:k[I]};break;case 15:case 17:this.$=0;break;case 16:case 18:this.$=k[I-1]+1;break;case 19:this.$={syllable:k[I]};break;case 20:this.$={acc:k[I-1],...k[I]};break;case 21:this.$={...k[I-1],decorators:[...k[I-1].decorators||[],...k[I]]};break;case 22:this.$={...k[I-1],notations:[...k[I-1].notations||[],...k[I]]};break;case 23:case 25:this.$=k[I];break;case 26:this.$=k[I-1]+k[I];break}},table:[s(e,r,{3:1,5:3,6:4,7:5,8:6,9:7,10:8,11:9,16:11,4:[1,2],13:t,25:i}),{1:[3]},{1:[2,1]},{4:[1,13]},s(e,r,{8:6,9:7,10:8,11:9,16:11,7:14,4:[2,3],13:t,25:i}),s(a,[2,4]),s(a,[2,6],{12:n}),s(a,[2,7]),s(l,[2,8]),{12:[1,16]},s(a,[2,32]),{17:17,19:[1,18],21:19,22:20,25:y,26:S,29:d},s(v,r,{16:11,14:24,10:25}),{1:[2,2]},s(a,[2,5]),{11:26,13:t},s(v,r,{10:8,11:9,16:11,8:27,13:t}),s(w,[2,17],{18:28,23:29,24:30,25:M,27:W,28:B}),s(v,[2,16]),s(N,[2,19]),{17:34,21:19,22:20,25:y,26:[1,35],29:d},{17:36,21:19,22:20,25:y,26:S,29:d},s(N,[2,31]),s(H,[2,25]),s(v,r,{16:11,10:38,15:[1,37]}),s(V,[2,12]),s(l,[2,10]),s(a,[2,9],{12:n}),s([4,12,13,15,19,25,26,29],[2,14],{20:[1,39]}),s([4,12,13,15,19,20,25,26,28,29],[2,21],{27:[1,40]}),s([4,12,13,15,19,20,25,26,27,29],[2,22],{28:[1,41]}),s(N,[2,24]),s(N,[2,27]),s(N,[2,29]),s(w,[2,20],{23:29,24:30,25:M,27:W,28:B}),s(H,[2,26]),s(w,[2,23],{23:29,24:30,25:M,27:W,28:B}),s(l,[2,11]),s(V,[2,13]),s([4,12,13,15,19,20,25,26,29],[2,18]),s(N,[2,28]),s(N,[2,30])],defaultActions:{2:[2,1],13:[2,2]},parseError:function(u,p){if(p.recoverable)this.trace(u);else{var g=new Error(u);throw g.hash=p,g}},parse:function(u){var p=this,g=[0],f=[null],j=[],k=this.table,ce="",I=0,pe=0,q=2,ge=1,fe=j.slice.call(arguments,1),U=Object.create(this.lexer),X={yy:{}};for(var ae in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ae)&&(X.yy[ae]=this.yy[ae]);U.setInput(u,X.yy),X.yy.lexer=U,X.yy.parser=this,typeof U.yylloc>"u"&&(U.yylloc={});var ue=U.yylloc;j.push(ue);var we=U.options&&U.options.ranges;typeof X.yy.parseError=="function"?this.parseError=X.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var he=function(){var R;return R=U.lex()||ge,typeof R!="number"&&(R=p.symbols_[R]||R),R},z,Q,J,oe,te={},o,b,O,x;;){if(Q=g[g.length-1],this.defaultActions[Q]?J=this.defaultActions[Q]:((z===null||typeof z>"u")&&(z=he()),J=k[Q]&&k[Q][z]),typeof J>"u"||!J.length||!J[0]){var P="";x=[];for(o in k[Q])this.terminals_[o]&&o>q&&x.push("'"+this.terminals_[o]+"'");U.showPosition?P="Parse error on line "+(I+1)+`: +import{r as F,j as c,a as Ge}from"./umi-37873494.js";import{q as ze,L as He,P as Je,Q as Ye}from"./index-54683183.js";import{u as Ke,c as qe,d as Xe,b as Qe,E as Ze,S as et,s as ye,P as tt,e as st,f as nt,A as rt,a as it}from"./index.less_used_.module-bc4fc13c.js";import{d as Le,j as at,p as ot}from"./tiny-invariant-5c4293b4.js";import{u as lt,e as ct}from"./index-03b68134.js";import{m as ie}from"./parser-c740d6a8.js";import{S as ut}from"./scheduler-a7fa9c3c.js";import{v as ne,M as ht,r as le,W as mt,w as Ee,x as dt,y as pt}from"./index-a475ddbb.js";import{u as gt,r as be,n as Ie,q as ft,x as yt,v as Pe,w as Ce,y as bt}from"./index-92da7081.js";import{S as xt}from"./schedulePool-cc4538c2.js";import{a as vt,H as kt,R as wt,C as Se,L as St,c as _t,E as jt}from"./util-2d38567b.js";import{B as ee}from"./button-1ef38c18.js";import{c as Me,m as _e,n as Mt}from"./_setToString-dbbee35a.js";import{b as Nt,S as xe,T as je}from"./TextArea-27ba039d.js";import{S as Et}from"./index-abb14cca.js";import{u as Oe}from"./useAsync-6c98bbac.js";import{u as It}from"./useAsyncFn-ffd323fd.js";import{P as Pt,a as Ct}from"./PlaySquareOutlined-04ce0d9a.js";import{E as Ot}from"./Dropdown-ba03bf54.js";import"./download-5fc3c841.js";import"./jszip.min-ed3d3f78.js";var ke={},ve=function(){var s=function(_,u,p,g){for(p=p||{},g=_.length;g--;p[_[g]]=u);return p},e=[19,26,29],r=[2,15],t=[1,12],i=[1,10],a=[4,13,19,25,26,29],n=[1,15],l=[4,12,13,19,25,26,29],y=[1,21],S=[1,23],d=[1,22],v=[19,25,26,29],w=[4,12,13,15,19,20,26,29],M=[1,31],W=[1,32],B=[1,33],N=[4,12,13,15,19,20,25,26,27,28,29],H=[25,26,29],V=[15,19,25,26,29],E={trace:function(){},yy:{},symbols_:{error:2,start_symbol:3,EOF:4,measure:5,music_events:6,music_event:7,event:8,music_breath:9,note:10,grace:11,"|":12,"{":13,note_list:14,"}":15,left_divisions:16,pitch:17,right_divisions:18,"<":19,">":20,syllable:21,accidental:22,decorators:23,notations:24,V:25,ACC:26,DECORATOR:27,NOTATION:28,N:29,$accept:0,$end:1},terminals_:{2:"error",4:"EOF",12:"|",13:"{",15:"}",19:"<",20:">",25:"V",26:"ACC",27:"DECORATOR",28:"NOTATION",29:"N"},productions_:[0,[3,1],[3,2],[5,1],[6,1],[6,2],[7,1],[7,1],[8,1],[8,3],[8,3],[11,3],[14,1],[14,2],[10,3],[16,0],[16,2],[18,0],[18,2],[17,1],[17,2],[17,2],[17,2],[17,2],[17,2],[22,1],[22,2],[23,1],[23,2],[24,1],[24,2],[21,1],[9,1]],performAction:function(u,p,g,f,j,k,ce){var I=k.length-1;switch(j){case 1:return null;case 2:return k[I-1];case 3:this.$=m(k[I]);break;case 4:case 12:case 27:case 29:this.$=[k[I]];break;case 5:case 13:case 28:case 30:this.$=[...k[I-1],k[I]];break;case 9:this.$={...k[I],grace:k[I-2]};break;case 10:this.$={...k[I-2],postGrace:k[I]};break;case 11:case 24:this.$=k[I-1];break;case 14:this.$={ldiv:k[I-2],...T(k[I-1]),rdiv:k[I]};break;case 15:case 17:this.$=0;break;case 16:case 18:this.$=k[I-1]+1;break;case 19:this.$={syllable:k[I]};break;case 20:this.$={acc:k[I-1],...k[I]};break;case 21:this.$={...k[I-1],decorators:[...k[I-1].decorators||[],...k[I]]};break;case 22:this.$={...k[I-1],notations:[...k[I-1].notations||[],...k[I]]};break;case 23:case 25:this.$=k[I];break;case 26:this.$=k[I-1]+k[I];break}},table:[s(e,r,{3:1,5:3,6:4,7:5,8:6,9:7,10:8,11:9,16:11,4:[1,2],13:t,25:i}),{1:[3]},{1:[2,1]},{4:[1,13]},s(e,r,{8:6,9:7,10:8,11:9,16:11,7:14,4:[2,3],13:t,25:i}),s(a,[2,4]),s(a,[2,6],{12:n}),s(a,[2,7]),s(l,[2,8]),{12:[1,16]},s(a,[2,32]),{17:17,19:[1,18],21:19,22:20,25:y,26:S,29:d},s(v,r,{16:11,14:24,10:25}),{1:[2,2]},s(a,[2,5]),{11:26,13:t},s(v,r,{10:8,11:9,16:11,8:27,13:t}),s(w,[2,17],{18:28,23:29,24:30,25:M,27:W,28:B}),s(v,[2,16]),s(N,[2,19]),{17:34,21:19,22:20,25:y,26:[1,35],29:d},{17:36,21:19,22:20,25:y,26:S,29:d},s(N,[2,31]),s(H,[2,25]),s(v,r,{16:11,10:38,15:[1,37]}),s(V,[2,12]),s(l,[2,10]),s(a,[2,9],{12:n}),s([4,12,13,15,19,25,26,29],[2,14],{20:[1,39]}),s([4,12,13,15,19,20,25,26,28,29],[2,21],{27:[1,40]}),s([4,12,13,15,19,20,25,26,27,29],[2,22],{28:[1,41]}),s(N,[2,24]),s(N,[2,27]),s(N,[2,29]),s(w,[2,20],{23:29,24:30,25:M,27:W,28:B}),s(H,[2,26]),s(w,[2,23],{23:29,24:30,25:M,27:W,28:B}),s(l,[2,11]),s(V,[2,13]),s([4,12,13,15,19,20,25,26,29],[2,18]),s(N,[2,28]),s(N,[2,30])],defaultActions:{2:[2,1],13:[2,2]},parseError:function(u,p){if(p.recoverable)this.trace(u);else{var g=new Error(u);throw g.hash=p,g}},parse:function(u){var p=this,g=[0],f=[null],j=[],k=this.table,ce="",I=0,pe=0,q=2,ge=1,fe=j.slice.call(arguments,1),U=Object.create(this.lexer),X={yy:{}};for(var ae in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ae)&&(X.yy[ae]=this.yy[ae]);U.setInput(u,X.yy),X.yy.lexer=U,X.yy.parser=this,typeof U.yylloc>"u"&&(U.yylloc={});var ue=U.yylloc;j.push(ue);var we=U.options&&U.options.ranges;typeof X.yy.parseError=="function"?this.parseError=X.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var he=function(){var R;return R=U.lex()||ge,typeof R!="number"&&(R=p.symbols_[R]||R),R},z,Q,J,oe,te={},o,b,O,x;;){if(Q=g[g.length-1],this.defaultActions[Q]?J=this.defaultActions[Q]:((z===null||typeof z>"u")&&(z=he()),J=k[Q]&&k[Q][z]),typeof J>"u"||!J.length||!J[0]){var P="";x=[];for(o in k[Q])this.terminals_[o]&&o>q&&x.push("'"+this.terminals_[o]+"'");U.showPosition?P="Parse error on line "+(I+1)+`: `+U.showPosition()+` Expecting `+x.join(", ")+", got '"+(this.terminals_[z]||z)+"'":P="Parse error on line "+(I+1)+": Unexpected "+(z==ge?"end of input":"'"+(this.terminals_[z]||z)+"'"),this.parseError(P,{text:U.match,token:this.terminals_[z]||z,line:U.yylineno,loc:ue,expected:x})}if(J[0]instanceof Array&&J.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Q+", token: "+z);switch(J[0]){case 1:g.push(z),f.push(U.yytext),j.push(U.yylloc),g.push(J[1]),z=null,pe=U.yyleng,ce=U.yytext,I=U.yylineno,ue=U.yylloc;break;case 2:if(b=this.productions_[J[1]][1],te.$=f[f.length-b],te._$={first_line:j[j.length-(b||1)].first_line,last_line:j[j.length-1].last_line,first_column:j[j.length-(b||1)].first_column,last_column:j[j.length-1].last_column},we&&(te._$.range=[j[j.length-(b||1)].range[0],j[j.length-1].range[1]]),oe=this.performAction.apply(te,[ce,pe,I,X.yy,J[1],f,j].concat(fe)),typeof oe<"u")return oe;b&&(g=g.slice(0,-1*b*2),f=f.slice(0,-1*b),j=j.slice(0,-1*b)),g.push(this.productions_[J[1]][0]),f.push(te.$),j.push(te._$),O=k[g[g.length-2]][g[g.length-1]],g.push(O);break;case 3:return!0}}return!0}};const m=_=>{const u=_.filter(f=>f!=="V"&&f.syllable!=="-");let p=0;for(let f of u)p+=f.ldiv,f.underline=p,p-=f.rdiv,f.grace&&(f.grace=m(f.grace)),f.postGrace&&(f.postGrace=m(f.postGrace)),delete f.ldiv,delete f.rdiv;let g=[];for(let f of u)f.ltuplet&&g.push(f),g.length>0&&!f.ltuplet&&!f.rtuplet&&g.push(f),f.rtuplet&&(g.push(f),g.forEach(j=>{const k=g.length;j.timeWarp={numerator:k-1,denominator:k}}),g=[]),delete f.ltuplet,delete f.rtuplet;return _},T=_=>{if(_.octaves=0,_.dots=0,_.ltuplet=0,_.rtuplet=0,_.decorators){for(let u=0;u<_.decorators.length;u++)switch(_.decorators[u]){case"'":_.octaves+=1;break;case",":_.octaves-=1;break;case".":_.dots+=1;break;case"[":_.ltuplet=1;break;case"]":_.rtuplet=1;break}delete _.decorators}return _.notations&&(_.notations=_.notations.map(u=>u.replace(/[^a-z]/g,""))),_};var A=function(){var _={EOF:1,parseError:function(p,g){if(this.yy.parser)this.yy.parser.parseError(p,g);else throw new Error(p)},setInput:function(u,p){return this.yy=p||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var p=u.match(/(?:\r\n?|\n).*/g);return p?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},unput:function(u){var p=u.length,g=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-p),this.offset-=p;var f=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var j=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===f.length?this.yylloc.first_column:0)+f[f.length-g.length].length-g[0].length:this.yylloc.first_column-p},this.options.ranges&&(this.yylloc.range=[j[0],j[0]+this.yyleng-p]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(u){this.unput(this.match.slice(u))},pastInput:function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var u=this.pastInput(),p=new Array(u.length+1).join("-");return u+this.upcomingInput()+` diff --git a/dist/assets/index-dc40c6e7.js b/dist/assets/index-2899652d.js similarity index 99% rename from dist/assets/index-dc40c6e7.js rename to dist/assets/index-2899652d.js index 4ca641671aa4a6a4b3b864c8adf889810adb3446..a5997b9f4e2773ede234e231a2886741068afb02 100644 --- a/dist/assets/index-dc40c6e7.js +++ b/dist/assets/index-2899652d.js @@ -1,3 +1,3 @@ -import{A as _n,f as G,a as ne,c as ye,b8 as Ln,v as Vn,j as gt,b as H,u as ut,z as cn,a9 as Fn,_ as je,aG as An,Q as Kn,w as Ze,l as $n,p as zn,K as Hn,O as jt,y as Wn,o as sn,k as Bn,G as jn,h as fn,L as dn,C as At,S as vn,D as mn,d as Ut,H as Un}from"./_setToString-397d22bb.js";import{r as n,_ as Re,e as Yt}from"./umi-91f9d113.js";import{p as Rt,G as Yn,K as Z,c as Xn,x as Gn,u as Dt,j as lt,R as hn,F as Qn,g as Jn,e as Lt,f as Zn,h as qn,z as ea}from"./TextArea-3bdaceca.js";import{t as ta,u as na,N as aa,W as ra}from"./button-909b3565.js";import{E as It,S as oa,P as ia}from"./util-b514be53.js";import{C as la}from"./progress-f968a1fe.js";var ua={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"}}]},name:"down",theme:"outlined"};const ca=ua;var sa=function(t,r){return n.createElement(_n,G(G({},t),{},{ref:r,icon:ca}))},fa=n.forwardRef(sa);const da=fa;var gn=n.createContext(null);function va(){return n.useContext(gn)}function ma(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:10,t=n.useState(!1),r=ne(t,2),a=r[0],o=r[1],i=n.useRef(null),l=function(){window.clearTimeout(i.current)};n.useEffect(function(){return l},[]);var s=function(v,h){l(),i.current=window.setTimeout(function(){o(v),h&&h()},e)};return[a,s,l]}function pn(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:250,t=n.useRef(null),r=n.useRef(null);n.useEffect(function(){return function(){window.clearTimeout(r.current)}},[]);function a(o){(o||t.current===null)&&(t.current=o),window.clearTimeout(r.current),r.current=window.setTimeout(function(){t.current=null},e)}return[function(){return t.current},a]}function ha(e,t,r,a){var o=n.useRef(null);o.current={open:t,triggerOpen:r,customizedTrigger:a},n.useEffect(function(){function i(l){var s;if(!((s=o.current)!==null&&s!==void 0&&s.customizedTrigger)){var d=l.target;d.shadowRoot&&l.composed&&(d=l.composedPath()[0]||d),o.current.open&&e().filter(function(v){return v}).every(function(v){return!v.contains(d)&&v!==d})&&o.current.triggerOpen(!1)}}return window.addEventListener("mousedown",i),function(){return window.removeEventListener("mousedown",i)}},[])}var Nt=function(t){var r=t.className,a=t.customizeIcon,o=t.customizeIconProps,i=t.onMouseDown,l=t.onClick,s=t.children,d;return typeof a=="function"?d=a(o):d=a,n.createElement("span",{className:r,onMouseDown:function(h){h.preventDefault(),i&&i(h)},style:{userSelect:"none",WebkitUserSelect:"none"},unselectable:"on",onClick:l,"aria-hidden":!0},d!==void 0?d:n.createElement("span",{className:ye(r.split(/\s+/).map(function(v){return"".concat(v,"-icon")}))},s))},ga=function(t,r){var a,o,i=t.prefixCls,l=t.id,s=t.inputElement,d=t.disabled,v=t.tabIndex,h=t.autoFocus,u=t.autoComplete,f=t.editable,c=t.activeDescendantId,g=t.value,m=t.maxLength,S=t.onKeyDown,C=t.onMouseDown,p=t.onChange,b=t.onPaste,y=t.onCompositionStart,Q=t.onCompositionEnd,U=t.open,T=t.attrs,E=s||n.createElement("input",null),D=E,Y=D.ref,q=D.props,ae=q.onKeyDown,_=q.onChange,X=q.onMouseDown,te=q.onCompositionStart,M=q.onCompositionEnd,K=q.style;return Ln(!("maxLength"in E.props)),E=n.cloneElement(E,G(G(G({type:"search"},q),{},{id:l,ref:Vn(r,Y),disabled:d,tabIndex:v,autoComplete:u||"off",autoFocus:h,className:ye("".concat(i,"-selection-search-input"),(a=E)===null||a===void 0||(o=a.props)===null||o===void 0?void 0:o.className),role:"combobox","aria-expanded":U,"aria-haspopup":"listbox","aria-owns":"".concat(l,"_list"),"aria-autocomplete":"list","aria-controls":"".concat(l,"_list"),"aria-activedescendant":c},T),{},{value:f?g:"",maxLength:m,readOnly:!f,unselectable:f?null:"on",style:G(G({},K),{},{opacity:f?null:0}),onKeyDown:function(w){S(w),ae&&ae(w)},onMouseDown:function(w){C(w),X&&X(w)},onChange:function(w){p(w),_&&_(w)},onCompositionStart:function(w){y(w),te&&te(w)},onCompositionEnd:function(w){Q(w),M&&M(w)},onPaste:b})),E},Kt=n.forwardRef(ga);Kt.displayName="Input";function Sn(e){return Array.isArray(e)?e:e!==void 0?[e]:[]}var pa=typeof window<"u"&&window.document&&window.document.documentElement,Sa=pa;function Ca(e){return e!=null}function Xt(e){return["string","number"].includes(gt(e))}function Cn(e){var t=void 0;return e&&(Xt(e.title)?t=e.title.toString():Xt(e.label)&&(t=e.label.toString())),t}function ba(e,t){Sa?n.useLayoutEffect(e,t):n.useEffect(e,t)}function wa(e){var t;return(t=e.key)!==null&&t!==void 0?t:e.value}var Gt=function(t){t.preventDefault(),t.stopPropagation()},ya=function(t){var r=t.id,a=t.prefixCls,o=t.values,i=t.open,l=t.searchValue,s=t.autoClearSearchValue,d=t.inputRef,v=t.placeholder,h=t.disabled,u=t.mode,f=t.showSearch,c=t.autoFocus,g=t.autoComplete,m=t.activeDescendantId,S=t.tabIndex,C=t.removeIcon,p=t.maxTagCount,b=t.maxTagTextLength,y=t.maxTagPlaceholder,Q=y===void 0?function(se){return"+ ".concat(se.length," ...")}:y,U=t.tagRender,T=t.onToggleOpen,E=t.onRemove,D=t.onInputChange,Y=t.onInputPaste,q=t.onInputKeyDown,ae=t.onInputMouseDown,_=t.onInputCompositionStart,X=t.onInputCompositionEnd,te=n.useRef(null),M=n.useState(0),K=ne(M,2),O=K[0],w=K[1],ce=n.useState(!1),$=ne(ce,2),de=$[0],oe=$[1],L="".concat(a,"-selection"),I=i||u==="multiple"&&s===!1||u==="tags"?l:"",W=u==="tags"||u==="multiple"&&s===!1||f&&(i||de);ba(function(){w(te.current.scrollWidth)},[I]);function N(se,ve,fe,me,Ce){return n.createElement("span",{className:ye("".concat(L,"-item"),H({},"".concat(L,"-item-disabled"),fe)),title:Cn(se)},n.createElement("span",{className:"".concat(L,"-item-content")},ve),me&&n.createElement(Nt,{className:"".concat(L,"-item-remove"),onMouseDown:Gt,onClick:Ce,customizeIcon:C},"×"))}function P(se,ve,fe,me,Ce){var Ee=function(R){Gt(R),T(!i)};return n.createElement("span",{onMouseDown:Ee},U({label:ve,value:se,disabled:fe,closable:me,onClose:Ce}))}function k(se){var ve=se.disabled,fe=se.label,me=se.value,Ce=!h&&!ve,Ee=fe;if(typeof b=="number"&&(typeof fe=="string"||typeof fe=="number")){var ge=String(Ee);ge.length>b&&(Ee="".concat(ge.slice(0,b),"..."))}var R=function(pe){pe&&pe.stopPropagation(),E(se)};return typeof U=="function"?P(me,Ee,ve,Ce,R):N(se,Ee,ve,Ce,R)}function x(se){var ve=typeof Q=="function"?Q(se):Q;return N({title:ve},ve,!1)}var z=n.createElement("div",{className:"".concat(L,"-search"),style:{width:O},onFocus:function(){oe(!0)},onBlur:function(){oe(!1)}},n.createElement(Kt,{ref:d,open:i,prefixCls:a,id:r,inputElement:null,disabled:h,autoFocus:c,autoComplete:g,editable:W,activeDescendantId:m,value:I,onKeyDown:q,onMouseDown:ae,onChange:D,onPaste:Y,onCompositionStart:_,onCompositionEnd:X,tabIndex:S,attrs:Rt(t,!0)}),n.createElement("span",{ref:te,className:"".concat(L,"-search-mirror"),"aria-hidden":!0},I," ")),le=n.createElement(Yn,{prefixCls:"".concat(L,"-overflow"),data:o,renderItem:k,renderRest:x,suffix:z,itemKey:wa,maxCount:p});return n.createElement(n.Fragment,null,le,!o.length&&!I&&n.createElement("span",{className:"".concat(L,"-placeholder")},v))},Ea=function(t){var r=t.inputElement,a=t.prefixCls,o=t.id,i=t.inputRef,l=t.disabled,s=t.autoFocus,d=t.autoComplete,v=t.activeDescendantId,h=t.mode,u=t.open,f=t.values,c=t.placeholder,g=t.tabIndex,m=t.showSearch,S=t.searchValue,C=t.activeValue,p=t.maxLength,b=t.onInputKeyDown,y=t.onInputMouseDown,Q=t.onInputChange,U=t.onInputPaste,T=t.onInputCompositionStart,E=t.onInputCompositionEnd,D=n.useState(!1),Y=ne(D,2),q=Y[0],ae=Y[1],_=h==="combobox",X=_||m,te=f[0],M=S||"";_&&C&&!q&&(M=C),n.useEffect(function(){_&&ae(!1)},[_,C]);var K=h!=="combobox"&&!u&&!m?!1:!!M,O=Cn(te),w=function(){if(te)return null;var $=K?{visibility:"hidden"}:void 0;return n.createElement("span",{className:"".concat(a,"-selection-placeholder"),style:$},c)};return n.createElement(n.Fragment,null,n.createElement("span",{className:"".concat(a,"-selection-search")},n.createElement(Kt,{ref:i,prefixCls:a,id:o,open:u,inputElement:r,disabled:l,autoFocus:s,autoComplete:d,editable:X,activeDescendantId:v,value:M,onKeyDown:b,onMouseDown:y,onChange:function($){ae(!0),Q($)},onPaste:U,onCompositionStart:T,onCompositionEnd:E,tabIndex:g,attrs:Rt(t,!0),maxLength:_?p:void 0})),!_&&te?n.createElement("span",{className:"".concat(a,"-selection-item"),title:O,style:K?{visibility:"hidden"}:void 0},te.label):null,w())};function Ia(e){return![Z.ESC,Z.SHIFT,Z.BACKSPACE,Z.TAB,Z.WIN_KEY,Z.ALT,Z.META,Z.WIN_KEY_RIGHT,Z.CTRL,Z.SEMICOLON,Z.EQUALS,Z.CAPS_LOCK,Z.CONTEXT_MENU,Z.F1,Z.F2,Z.F3,Z.F4,Z.F5,Z.F6,Z.F7,Z.F8,Z.F9,Z.F10,Z.F11,Z.F12].includes(e)}var Ra=function(t,r){var a=n.useRef(null),o=n.useRef(!1),i=t.prefixCls,l=t.open,s=t.mode,d=t.showSearch,v=t.tokenWithEnter,h=t.autoClearSearchValue,u=t.onSearch,f=t.onSearchSubmit,c=t.onToggleOpen,g=t.onInputKeyDown,m=t.domRef;n.useImperativeHandle(r,function(){return{focus:function(){a.current.focus()},blur:function(){a.current.blur()}}});var S=pn(0),C=ne(S,2),p=C[0],b=C[1],y=function(K){var O=K.which;(O===Z.UP||O===Z.DOWN)&&K.preventDefault(),g&&g(K),O===Z.ENTER&&s==="tags"&&!o.current&&!l&&(f==null||f(K.target.value)),Ia(O)&&c(!0)},Q=function(){b(!0)},U=n.useRef(null),T=function(K){u(K,!0,o.current)!==!1&&c(!0)},E=function(){o.current=!0},D=function(K){o.current=!1,s!=="combobox"&&T(K.target.value)},Y=function(K){var O=K.target.value;if(v&&U.current&&/[\r\n]/.test(U.current)){var w=U.current.replace(/[\r\n]+$/,"").replace(/\r\n/g," ").replace(/[\r\n]/g," ");O=O.replace(w,U.current)}U.current=null,T(O)},q=function(K){var O=K.clipboardData,w=O.getData("text");U.current=w},ae=function(K){var O=K.target;if(O!==a.current){var w=document.body.style.msTouchAction!==void 0;w?setTimeout(function(){a.current.focus()}):a.current.focus()}},_=function(K){var O=p();K.target!==a.current&&!O&&s!=="combobox"&&K.preventDefault(),(s!=="combobox"&&(!d||!O)||!l)&&(l&&h!==!1&&u("",!0,!1),c())},X={inputRef:a,onInputKeyDown:y,onInputMouseDown:Q,onInputChange:Y,onInputPaste:q,onInputCompositionStart:E,onInputCompositionEnd:D},te=s==="multiple"||s==="tags"?n.createElement(ya,Re({},t,X)):n.createElement(Ea,Re({},t,X));return n.createElement("div",{ref:m,className:"".concat(i,"-selector"),onClick:ae,onMouseDown:_},te)},bn=n.forwardRef(Ra);bn.displayName="Selector";var xa=["prefixCls","disabled","visible","children","popupElement","containerWidth","animation","transitionName","dropdownStyle","dropdownClassName","direction","placement","dropdownMatchSelectWidth","dropdownRender","dropdownAlign","getPopupContainer","empty","getTriggerDOMNode","onPopupVisibleChange","onPopupMouseEnter"],Ma=function(t){var r=t===!0?0:1;return{bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:r,adjustY:1}},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:r,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:r,adjustY:1}},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:r,adjustY:1}}}},Oa=function(t,r){var a=t.prefixCls;t.disabled;var o=t.visible,i=t.children,l=t.popupElement,s=t.containerWidth,d=t.animation,v=t.transitionName,h=t.dropdownStyle,u=t.dropdownClassName,f=t.direction,c=f===void 0?"ltr":f,g=t.placement,m=t.dropdownMatchSelectWidth,S=t.dropdownRender,C=t.dropdownAlign,p=t.getPopupContainer,b=t.empty,y=t.getTriggerDOMNode,Q=t.onPopupVisibleChange,U=t.onPopupMouseEnter,T=ut(t,xa),E="".concat(a,"-dropdown"),D=l;S&&(D=S(l));var Y=n.useMemo(function(){return Ma(m)},[m]),q=d?"".concat(E,"-").concat(d):v,ae=n.useRef(null);n.useImperativeHandle(r,function(){return{getPopupElement:function(){return ae.current}}});var _=G({minWidth:s},h);return typeof m=="number"?_.width=m:m&&(_.width=s),n.createElement(Xn,Re({},T,{showAction:Q?["click"]:[],hideAction:Q?["click"]:[],popupPlacement:g||(c==="rtl"?"bottomRight":"bottomLeft"),builtinPlacements:Y,prefixCls:E,popupTransitionName:q,popup:n.createElement("div",{ref:ae,onMouseEnter:U},D),popupAlign:C,popupVisible:o,getPopupContainer:p,popupClassName:ye(u,H({},"".concat(E,"-empty"),b)),popupStyle:_,getTriggerDOMNode:y,onPopupVisibleChange:Q}),i)},wn=n.forwardRef(Oa);wn.displayName="SelectTrigger";function Qt(e,t){var r=e.key,a;return"value"in e&&(a=e.value),r??(a!==void 0?a:"rc-index-key-".concat(t))}function yn(e,t){var r=e||{},a=r.label,o=r.value,i=r.options;return{label:a||(t?"children":"label"),value:o||"value",options:i||"options"}}function Da(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=t.fieldNames,a=t.childrenAsData,o=[],i=yn(r,!1),l=i.label,s=i.value,d=i.options;function v(h,u){h.forEach(function(f){var c=f[l];if(u||!(d in f)){var g=f[s];o.push({key:Qt(f,o.length),groupOption:u,data:f,label:c,value:g})}else{var m=c;m===void 0&&a&&(m=f.label),o.push({key:Qt(f,o.length),group:!0,data:f,label:m}),v(f[d],!0)}})}return v(e,!1),o}function Vt(e){var t=G({},e);return"props"in t||Object.defineProperty(t,"props",{get:function(){return cn(!1,"Return type is option instead of Option instance. Please read value directly instead of reading from `props`."),t}}),t}function Na(e,t){if(!t||!t.length)return null;var r=!1;function a(i,l){var s=Fn(l),d=s[0],v=s.slice(1);if(!d)return[i];var h=i.split(d);return r=r||h.length>1,h.reduce(function(u,f){return[].concat(je(u),je(a(f,v)))},[]).filter(function(u){return u})}var o=a(e,t);return r?o:null}var Pa=["id","prefixCls","className","showSearch","tagRender","direction","omitDomProps","displayValues","onDisplayValuesChange","emptyOptions","notFoundContent","onClear","mode","disabled","loading","getInputElement","getRawInputElement","open","defaultOpen","onDropdownVisibleChange","activeValue","onActiveValueChange","activeDescendantId","searchValue","autoClearSearchValue","onSearch","onSearchSplit","tokenSeparators","allowClear","showArrow","inputIcon","clearIcon","OptionList","animation","transitionName","dropdownStyle","dropdownClassName","dropdownMatchSelectWidth","dropdownRender","dropdownAlign","placement","getPopupContainer","showAction","onFocus","onBlur","onKeyUp","onKeyDown","onMouseDown"],ka=["value","onChange","removeIcon","placeholder","autoFocus","maxTagCount","maxTagTextLength","maxTagPlaceholder","choiceTransitionName","onInputKeyDown","onPopupScroll","tabIndex"];function Ft(e){return e==="tags"||e==="multiple"}var Ta=n.forwardRef(function(e,t){var r,a,o=e.id,i=e.prefixCls,l=e.className,s=e.showSearch,d=e.tagRender,v=e.direction,h=e.omitDomProps,u=e.displayValues,f=e.onDisplayValuesChange,c=e.emptyOptions,g=e.notFoundContent,m=g===void 0?"Not Found":g,S=e.onClear,C=e.mode,p=e.disabled,b=e.loading,y=e.getInputElement,Q=e.getRawInputElement,U=e.open,T=e.defaultOpen,E=e.onDropdownVisibleChange,D=e.activeValue,Y=e.onActiveValueChange,q=e.activeDescendantId,ae=e.searchValue,_=e.autoClearSearchValue,X=e.onSearch,te=e.onSearchSplit,M=e.tokenSeparators,K=e.allowClear,O=e.showArrow,w=e.inputIcon,ce=e.clearIcon,$=e.OptionList,de=e.animation,oe=e.transitionName,L=e.dropdownStyle,I=e.dropdownClassName,W=e.dropdownMatchSelectWidth,N=e.dropdownRender,P=e.dropdownAlign,k=e.placement,x=e.getPopupContainer,z=e.showAction,le=z===void 0?[]:z,se=e.onFocus,ve=e.onBlur,fe=e.onKeyUp,me=e.onKeyDown,Ce=e.onMouseDown,Ee=ut(e,Pa),ge=Ft(C),R=(s!==void 0?s:ge)||C==="combobox",ie=G({},Ee);ka.forEach(function(re){delete ie[re]}),h==null||h.forEach(function(re){delete ie[re]});var pe=n.useState(!1),Ie=ne(pe,2),De=Ie[0],Ae=Ie[1];n.useEffect(function(){Ae(Gn())},[]);var be=n.useRef(null),Ne=n.useRef(null),Ve=n.useRef(null),ke=n.useRef(null),Te=n.useRef(null),pt=ma(),qe=ne(pt,3),_e=qe[0],Qe=qe[1],St=qe[2];n.useImperativeHandle(t,function(){var re,J;return{focus:(re=ke.current)===null||re===void 0?void 0:re.focus,blur:(J=ke.current)===null||J===void 0?void 0:J.blur,scrollTo:function(Fe){var Oe;return(Oe=Te.current)===null||Oe===void 0?void 0:Oe.scrollTo(Fe)}}});var Le=n.useMemo(function(){var re;if(C!=="combobox")return ae;var J=(re=u[0])===null||re===void 0?void 0:re.value;return typeof J=="string"||typeof J=="number"?String(J):""},[ae,C,u]),ct=C==="combobox"&&typeof y=="function"&&y()||null,ze=typeof Q=="function"&&Q(),vt=An(Ne,ze==null||(r=ze.props)===null||r===void 0?void 0:r.ref),tt=Dt(void 0,{defaultValue:T,value:U}),Ue=ne(tt,2),st=Ue[0],nt=Ue[1],we=st,ft=!m&&c;(p||ft&&we&&C==="combobox")&&(we=!1);var Ye=ft?!1:we,F=n.useCallback(function(re){var J=re!==void 0?re:!we;p||(nt(J),we!==J&&(E==null||E(J)))},[p,we,nt,E]),B=n.useMemo(function(){return(M||[]).some(function(re){return[` +import{A as _n,f as G,a as ne,c as ye,b8 as Ln,v as Vn,j as gt,b as H,u as ut,z as cn,a9 as Fn,_ as je,aG as An,Q as Kn,w as Ze,l as $n,p as zn,K as Hn,O as jt,y as Wn,o as sn,k as Bn,G as jn,h as fn,L as dn,C as At,S as vn,D as mn,d as Ut,H as Un}from"./_setToString-dbbee35a.js";import{r as n,_ as Re,e as Yt}from"./umi-37873494.js";import{p as Rt,G as Yn,K as Z,c as Xn,x as Gn,u as Dt,j as lt,R as hn,F as Qn,g as Jn,e as Lt,f as Zn,h as qn,z as ea}from"./TextArea-27ba039d.js";import{t as ta,u as na,N as aa,W as ra}from"./button-1ef38c18.js";import{E as It,S as oa,P as ia}from"./util-2d38567b.js";import{C as la}from"./progress-096a2c96.js";var ua={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"}}]},name:"down",theme:"outlined"};const ca=ua;var sa=function(t,r){return n.createElement(_n,G(G({},t),{},{ref:r,icon:ca}))},fa=n.forwardRef(sa);const da=fa;var gn=n.createContext(null);function va(){return n.useContext(gn)}function ma(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:10,t=n.useState(!1),r=ne(t,2),a=r[0],o=r[1],i=n.useRef(null),l=function(){window.clearTimeout(i.current)};n.useEffect(function(){return l},[]);var s=function(v,h){l(),i.current=window.setTimeout(function(){o(v),h&&h()},e)};return[a,s,l]}function pn(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:250,t=n.useRef(null),r=n.useRef(null);n.useEffect(function(){return function(){window.clearTimeout(r.current)}},[]);function a(o){(o||t.current===null)&&(t.current=o),window.clearTimeout(r.current),r.current=window.setTimeout(function(){t.current=null},e)}return[function(){return t.current},a]}function ha(e,t,r,a){var o=n.useRef(null);o.current={open:t,triggerOpen:r,customizedTrigger:a},n.useEffect(function(){function i(l){var s;if(!((s=o.current)!==null&&s!==void 0&&s.customizedTrigger)){var d=l.target;d.shadowRoot&&l.composed&&(d=l.composedPath()[0]||d),o.current.open&&e().filter(function(v){return v}).every(function(v){return!v.contains(d)&&v!==d})&&o.current.triggerOpen(!1)}}return window.addEventListener("mousedown",i),function(){return window.removeEventListener("mousedown",i)}},[])}var Nt=function(t){var r=t.className,a=t.customizeIcon,o=t.customizeIconProps,i=t.onMouseDown,l=t.onClick,s=t.children,d;return typeof a=="function"?d=a(o):d=a,n.createElement("span",{className:r,onMouseDown:function(h){h.preventDefault(),i&&i(h)},style:{userSelect:"none",WebkitUserSelect:"none"},unselectable:"on",onClick:l,"aria-hidden":!0},d!==void 0?d:n.createElement("span",{className:ye(r.split(/\s+/).map(function(v){return"".concat(v,"-icon")}))},s))},ga=function(t,r){var a,o,i=t.prefixCls,l=t.id,s=t.inputElement,d=t.disabled,v=t.tabIndex,h=t.autoFocus,u=t.autoComplete,f=t.editable,c=t.activeDescendantId,g=t.value,m=t.maxLength,S=t.onKeyDown,C=t.onMouseDown,p=t.onChange,b=t.onPaste,y=t.onCompositionStart,Q=t.onCompositionEnd,U=t.open,T=t.attrs,E=s||n.createElement("input",null),D=E,Y=D.ref,q=D.props,ae=q.onKeyDown,_=q.onChange,X=q.onMouseDown,te=q.onCompositionStart,M=q.onCompositionEnd,K=q.style;return Ln(!("maxLength"in E.props)),E=n.cloneElement(E,G(G(G({type:"search"},q),{},{id:l,ref:Vn(r,Y),disabled:d,tabIndex:v,autoComplete:u||"off",autoFocus:h,className:ye("".concat(i,"-selection-search-input"),(a=E)===null||a===void 0||(o=a.props)===null||o===void 0?void 0:o.className),role:"combobox","aria-expanded":U,"aria-haspopup":"listbox","aria-owns":"".concat(l,"_list"),"aria-autocomplete":"list","aria-controls":"".concat(l,"_list"),"aria-activedescendant":c},T),{},{value:f?g:"",maxLength:m,readOnly:!f,unselectable:f?null:"on",style:G(G({},K),{},{opacity:f?null:0}),onKeyDown:function(w){S(w),ae&&ae(w)},onMouseDown:function(w){C(w),X&&X(w)},onChange:function(w){p(w),_&&_(w)},onCompositionStart:function(w){y(w),te&&te(w)},onCompositionEnd:function(w){Q(w),M&&M(w)},onPaste:b})),E},Kt=n.forwardRef(ga);Kt.displayName="Input";function Sn(e){return Array.isArray(e)?e:e!==void 0?[e]:[]}var pa=typeof window<"u"&&window.document&&window.document.documentElement,Sa=pa;function Ca(e){return e!=null}function Xt(e){return["string","number"].includes(gt(e))}function Cn(e){var t=void 0;return e&&(Xt(e.title)?t=e.title.toString():Xt(e.label)&&(t=e.label.toString())),t}function ba(e,t){Sa?n.useLayoutEffect(e,t):n.useEffect(e,t)}function wa(e){var t;return(t=e.key)!==null&&t!==void 0?t:e.value}var Gt=function(t){t.preventDefault(),t.stopPropagation()},ya=function(t){var r=t.id,a=t.prefixCls,o=t.values,i=t.open,l=t.searchValue,s=t.autoClearSearchValue,d=t.inputRef,v=t.placeholder,h=t.disabled,u=t.mode,f=t.showSearch,c=t.autoFocus,g=t.autoComplete,m=t.activeDescendantId,S=t.tabIndex,C=t.removeIcon,p=t.maxTagCount,b=t.maxTagTextLength,y=t.maxTagPlaceholder,Q=y===void 0?function(se){return"+ ".concat(se.length," ...")}:y,U=t.tagRender,T=t.onToggleOpen,E=t.onRemove,D=t.onInputChange,Y=t.onInputPaste,q=t.onInputKeyDown,ae=t.onInputMouseDown,_=t.onInputCompositionStart,X=t.onInputCompositionEnd,te=n.useRef(null),M=n.useState(0),K=ne(M,2),O=K[0],w=K[1],ce=n.useState(!1),$=ne(ce,2),de=$[0],oe=$[1],L="".concat(a,"-selection"),I=i||u==="multiple"&&s===!1||u==="tags"?l:"",W=u==="tags"||u==="multiple"&&s===!1||f&&(i||de);ba(function(){w(te.current.scrollWidth)},[I]);function N(se,ve,fe,me,Ce){return n.createElement("span",{className:ye("".concat(L,"-item"),H({},"".concat(L,"-item-disabled"),fe)),title:Cn(se)},n.createElement("span",{className:"".concat(L,"-item-content")},ve),me&&n.createElement(Nt,{className:"".concat(L,"-item-remove"),onMouseDown:Gt,onClick:Ce,customizeIcon:C},"×"))}function P(se,ve,fe,me,Ce){var Ee=function(R){Gt(R),T(!i)};return n.createElement("span",{onMouseDown:Ee},U({label:ve,value:se,disabled:fe,closable:me,onClose:Ce}))}function k(se){var ve=se.disabled,fe=se.label,me=se.value,Ce=!h&&!ve,Ee=fe;if(typeof b=="number"&&(typeof fe=="string"||typeof fe=="number")){var ge=String(Ee);ge.length>b&&(Ee="".concat(ge.slice(0,b),"..."))}var R=function(pe){pe&&pe.stopPropagation(),E(se)};return typeof U=="function"?P(me,Ee,ve,Ce,R):N(se,Ee,ve,Ce,R)}function x(se){var ve=typeof Q=="function"?Q(se):Q;return N({title:ve},ve,!1)}var z=n.createElement("div",{className:"".concat(L,"-search"),style:{width:O},onFocus:function(){oe(!0)},onBlur:function(){oe(!1)}},n.createElement(Kt,{ref:d,open:i,prefixCls:a,id:r,inputElement:null,disabled:h,autoFocus:c,autoComplete:g,editable:W,activeDescendantId:m,value:I,onKeyDown:q,onMouseDown:ae,onChange:D,onPaste:Y,onCompositionStart:_,onCompositionEnd:X,tabIndex:S,attrs:Rt(t,!0)}),n.createElement("span",{ref:te,className:"".concat(L,"-search-mirror"),"aria-hidden":!0},I," ")),le=n.createElement(Yn,{prefixCls:"".concat(L,"-overflow"),data:o,renderItem:k,renderRest:x,suffix:z,itemKey:wa,maxCount:p});return n.createElement(n.Fragment,null,le,!o.length&&!I&&n.createElement("span",{className:"".concat(L,"-placeholder")},v))},Ea=function(t){var r=t.inputElement,a=t.prefixCls,o=t.id,i=t.inputRef,l=t.disabled,s=t.autoFocus,d=t.autoComplete,v=t.activeDescendantId,h=t.mode,u=t.open,f=t.values,c=t.placeholder,g=t.tabIndex,m=t.showSearch,S=t.searchValue,C=t.activeValue,p=t.maxLength,b=t.onInputKeyDown,y=t.onInputMouseDown,Q=t.onInputChange,U=t.onInputPaste,T=t.onInputCompositionStart,E=t.onInputCompositionEnd,D=n.useState(!1),Y=ne(D,2),q=Y[0],ae=Y[1],_=h==="combobox",X=_||m,te=f[0],M=S||"";_&&C&&!q&&(M=C),n.useEffect(function(){_&&ae(!1)},[_,C]);var K=h!=="combobox"&&!u&&!m?!1:!!M,O=Cn(te),w=function(){if(te)return null;var $=K?{visibility:"hidden"}:void 0;return n.createElement("span",{className:"".concat(a,"-selection-placeholder"),style:$},c)};return n.createElement(n.Fragment,null,n.createElement("span",{className:"".concat(a,"-selection-search")},n.createElement(Kt,{ref:i,prefixCls:a,id:o,open:u,inputElement:r,disabled:l,autoFocus:s,autoComplete:d,editable:X,activeDescendantId:v,value:M,onKeyDown:b,onMouseDown:y,onChange:function($){ae(!0),Q($)},onPaste:U,onCompositionStart:T,onCompositionEnd:E,tabIndex:g,attrs:Rt(t,!0),maxLength:_?p:void 0})),!_&&te?n.createElement("span",{className:"".concat(a,"-selection-item"),title:O,style:K?{visibility:"hidden"}:void 0},te.label):null,w())};function Ia(e){return![Z.ESC,Z.SHIFT,Z.BACKSPACE,Z.TAB,Z.WIN_KEY,Z.ALT,Z.META,Z.WIN_KEY_RIGHT,Z.CTRL,Z.SEMICOLON,Z.EQUALS,Z.CAPS_LOCK,Z.CONTEXT_MENU,Z.F1,Z.F2,Z.F3,Z.F4,Z.F5,Z.F6,Z.F7,Z.F8,Z.F9,Z.F10,Z.F11,Z.F12].includes(e)}var Ra=function(t,r){var a=n.useRef(null),o=n.useRef(!1),i=t.prefixCls,l=t.open,s=t.mode,d=t.showSearch,v=t.tokenWithEnter,h=t.autoClearSearchValue,u=t.onSearch,f=t.onSearchSubmit,c=t.onToggleOpen,g=t.onInputKeyDown,m=t.domRef;n.useImperativeHandle(r,function(){return{focus:function(){a.current.focus()},blur:function(){a.current.blur()}}});var S=pn(0),C=ne(S,2),p=C[0],b=C[1],y=function(K){var O=K.which;(O===Z.UP||O===Z.DOWN)&&K.preventDefault(),g&&g(K),O===Z.ENTER&&s==="tags"&&!o.current&&!l&&(f==null||f(K.target.value)),Ia(O)&&c(!0)},Q=function(){b(!0)},U=n.useRef(null),T=function(K){u(K,!0,o.current)!==!1&&c(!0)},E=function(){o.current=!0},D=function(K){o.current=!1,s!=="combobox"&&T(K.target.value)},Y=function(K){var O=K.target.value;if(v&&U.current&&/[\r\n]/.test(U.current)){var w=U.current.replace(/[\r\n]+$/,"").replace(/\r\n/g," ").replace(/[\r\n]/g," ");O=O.replace(w,U.current)}U.current=null,T(O)},q=function(K){var O=K.clipboardData,w=O.getData("text");U.current=w},ae=function(K){var O=K.target;if(O!==a.current){var w=document.body.style.msTouchAction!==void 0;w?setTimeout(function(){a.current.focus()}):a.current.focus()}},_=function(K){var O=p();K.target!==a.current&&!O&&s!=="combobox"&&K.preventDefault(),(s!=="combobox"&&(!d||!O)||!l)&&(l&&h!==!1&&u("",!0,!1),c())},X={inputRef:a,onInputKeyDown:y,onInputMouseDown:Q,onInputChange:Y,onInputPaste:q,onInputCompositionStart:E,onInputCompositionEnd:D},te=s==="multiple"||s==="tags"?n.createElement(ya,Re({},t,X)):n.createElement(Ea,Re({},t,X));return n.createElement("div",{ref:m,className:"".concat(i,"-selector"),onClick:ae,onMouseDown:_},te)},bn=n.forwardRef(Ra);bn.displayName="Selector";var xa=["prefixCls","disabled","visible","children","popupElement","containerWidth","animation","transitionName","dropdownStyle","dropdownClassName","direction","placement","dropdownMatchSelectWidth","dropdownRender","dropdownAlign","getPopupContainer","empty","getTriggerDOMNode","onPopupVisibleChange","onPopupMouseEnter"],Ma=function(t){var r=t===!0?0:1;return{bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:r,adjustY:1}},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:r,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:r,adjustY:1}},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:r,adjustY:1}}}},Oa=function(t,r){var a=t.prefixCls;t.disabled;var o=t.visible,i=t.children,l=t.popupElement,s=t.containerWidth,d=t.animation,v=t.transitionName,h=t.dropdownStyle,u=t.dropdownClassName,f=t.direction,c=f===void 0?"ltr":f,g=t.placement,m=t.dropdownMatchSelectWidth,S=t.dropdownRender,C=t.dropdownAlign,p=t.getPopupContainer,b=t.empty,y=t.getTriggerDOMNode,Q=t.onPopupVisibleChange,U=t.onPopupMouseEnter,T=ut(t,xa),E="".concat(a,"-dropdown"),D=l;S&&(D=S(l));var Y=n.useMemo(function(){return Ma(m)},[m]),q=d?"".concat(E,"-").concat(d):v,ae=n.useRef(null);n.useImperativeHandle(r,function(){return{getPopupElement:function(){return ae.current}}});var _=G({minWidth:s},h);return typeof m=="number"?_.width=m:m&&(_.width=s),n.createElement(Xn,Re({},T,{showAction:Q?["click"]:[],hideAction:Q?["click"]:[],popupPlacement:g||(c==="rtl"?"bottomRight":"bottomLeft"),builtinPlacements:Y,prefixCls:E,popupTransitionName:q,popup:n.createElement("div",{ref:ae,onMouseEnter:U},D),popupAlign:C,popupVisible:o,getPopupContainer:p,popupClassName:ye(u,H({},"".concat(E,"-empty"),b)),popupStyle:_,getTriggerDOMNode:y,onPopupVisibleChange:Q}),i)},wn=n.forwardRef(Oa);wn.displayName="SelectTrigger";function Qt(e,t){var r=e.key,a;return"value"in e&&(a=e.value),r??(a!==void 0?a:"rc-index-key-".concat(t))}function yn(e,t){var r=e||{},a=r.label,o=r.value,i=r.options;return{label:a||(t?"children":"label"),value:o||"value",options:i||"options"}}function Da(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=t.fieldNames,a=t.childrenAsData,o=[],i=yn(r,!1),l=i.label,s=i.value,d=i.options;function v(h,u){h.forEach(function(f){var c=f[l];if(u||!(d in f)){var g=f[s];o.push({key:Qt(f,o.length),groupOption:u,data:f,label:c,value:g})}else{var m=c;m===void 0&&a&&(m=f.label),o.push({key:Qt(f,o.length),group:!0,data:f,label:m}),v(f[d],!0)}})}return v(e,!1),o}function Vt(e){var t=G({},e);return"props"in t||Object.defineProperty(t,"props",{get:function(){return cn(!1,"Return type is option instead of Option instance. Please read value directly instead of reading from `props`."),t}}),t}function Na(e,t){if(!t||!t.length)return null;var r=!1;function a(i,l){var s=Fn(l),d=s[0],v=s.slice(1);if(!d)return[i];var h=i.split(d);return r=r||h.length>1,h.reduce(function(u,f){return[].concat(je(u),je(a(f,v)))},[]).filter(function(u){return u})}var o=a(e,t);return r?o:null}var Pa=["id","prefixCls","className","showSearch","tagRender","direction","omitDomProps","displayValues","onDisplayValuesChange","emptyOptions","notFoundContent","onClear","mode","disabled","loading","getInputElement","getRawInputElement","open","defaultOpen","onDropdownVisibleChange","activeValue","onActiveValueChange","activeDescendantId","searchValue","autoClearSearchValue","onSearch","onSearchSplit","tokenSeparators","allowClear","showArrow","inputIcon","clearIcon","OptionList","animation","transitionName","dropdownStyle","dropdownClassName","dropdownMatchSelectWidth","dropdownRender","dropdownAlign","placement","getPopupContainer","showAction","onFocus","onBlur","onKeyUp","onKeyDown","onMouseDown"],ka=["value","onChange","removeIcon","placeholder","autoFocus","maxTagCount","maxTagTextLength","maxTagPlaceholder","choiceTransitionName","onInputKeyDown","onPopupScroll","tabIndex"];function Ft(e){return e==="tags"||e==="multiple"}var Ta=n.forwardRef(function(e,t){var r,a,o=e.id,i=e.prefixCls,l=e.className,s=e.showSearch,d=e.tagRender,v=e.direction,h=e.omitDomProps,u=e.displayValues,f=e.onDisplayValuesChange,c=e.emptyOptions,g=e.notFoundContent,m=g===void 0?"Not Found":g,S=e.onClear,C=e.mode,p=e.disabled,b=e.loading,y=e.getInputElement,Q=e.getRawInputElement,U=e.open,T=e.defaultOpen,E=e.onDropdownVisibleChange,D=e.activeValue,Y=e.onActiveValueChange,q=e.activeDescendantId,ae=e.searchValue,_=e.autoClearSearchValue,X=e.onSearch,te=e.onSearchSplit,M=e.tokenSeparators,K=e.allowClear,O=e.showArrow,w=e.inputIcon,ce=e.clearIcon,$=e.OptionList,de=e.animation,oe=e.transitionName,L=e.dropdownStyle,I=e.dropdownClassName,W=e.dropdownMatchSelectWidth,N=e.dropdownRender,P=e.dropdownAlign,k=e.placement,x=e.getPopupContainer,z=e.showAction,le=z===void 0?[]:z,se=e.onFocus,ve=e.onBlur,fe=e.onKeyUp,me=e.onKeyDown,Ce=e.onMouseDown,Ee=ut(e,Pa),ge=Ft(C),R=(s!==void 0?s:ge)||C==="combobox",ie=G({},Ee);ka.forEach(function(re){delete ie[re]}),h==null||h.forEach(function(re){delete ie[re]});var pe=n.useState(!1),Ie=ne(pe,2),De=Ie[0],Ae=Ie[1];n.useEffect(function(){Ae(Gn())},[]);var be=n.useRef(null),Ne=n.useRef(null),Ve=n.useRef(null),ke=n.useRef(null),Te=n.useRef(null),pt=ma(),qe=ne(pt,3),_e=qe[0],Qe=qe[1],St=qe[2];n.useImperativeHandle(t,function(){var re,J;return{focus:(re=ke.current)===null||re===void 0?void 0:re.focus,blur:(J=ke.current)===null||J===void 0?void 0:J.blur,scrollTo:function(Fe){var Oe;return(Oe=Te.current)===null||Oe===void 0?void 0:Oe.scrollTo(Fe)}}});var Le=n.useMemo(function(){var re;if(C!=="combobox")return ae;var J=(re=u[0])===null||re===void 0?void 0:re.value;return typeof J=="string"||typeof J=="number"?String(J):""},[ae,C,u]),ct=C==="combobox"&&typeof y=="function"&&y()||null,ze=typeof Q=="function"&&Q(),vt=An(Ne,ze==null||(r=ze.props)===null||r===void 0?void 0:r.ref),tt=Dt(void 0,{defaultValue:T,value:U}),Ue=ne(tt,2),st=Ue[0],nt=Ue[1],we=st,ft=!m&&c;(p||ft&&we&&C==="combobox")&&(we=!1);var Ye=ft?!1:we,F=n.useCallback(function(re){var J=re!==void 0?re:!we;p||(nt(J),we!==J&&(E==null||E(J)))},[p,we,nt,E]),B=n.useMemo(function(){return(M||[]).some(function(re){return[` `,`\r `].includes(re)})},[M]),A=function(J,Pe,Fe){var Oe=!0,$e=J;Y==null||Y(null);var Ge=Fe?null:Na(J,M);return C!=="combobox"&&Ge&&($e="",te==null||te(Ge),F(!1),Oe=!1),X&&Le!==$e&&X($e,{source:Pe?"typing":"effect"}),Oe},ee=function(J){!J||!J.trim()||X(J,{source:"submit"})};n.useEffect(function(){!we&&!ge&&C!=="combobox"&&A("",!1,!1)},[we]),n.useEffect(function(){st&&p&&nt(!1),p&&Qe(!1)},[p]);var he=pn(),Se=ne(he,2),Ke=Se[0],He=Se[1],et=function(J){var Pe=Ke(),Fe=J.which;if(Fe===Z.ENTER&&(C!=="combobox"&&J.preventDefault(),we||F(!0)),He(!!Le),Fe===Z.BACKSPACE&&!Pe&&ge&&!Le&&u.length){for(var Oe=je(u),$e=null,Ge=Oe.length-1;Ge>=0;Ge-=1){var Et=Oe[Ge];if(!Et.disabled){Oe.splice(Ge,1),$e=Et;break}}$e&&f(Oe,{type:"remove",values:[$e]})}for(var ot=arguments.length,ht=new Array(ot>1?ot-1:0),it=1;it1?Pe-1:0),Oe=1;Oe1?Ge-1:0),ot=1;ot1&&arguments[1]!==void 0?arguments[1]:!1;return ta(e).map(function(r,a){if(!n.isValidElement(r)||!r.type)return null;var o=r,i=o.type.isSelectOptGroup,l=o.key,s=o.props,d=s.children,v=ut(s,$a);return t||!i?za(r):G(G({key:"__RC_SELECT_GRP__".concat(l===null?a:l,"__"),label:l},v),{},{options:En(d)})}).filter(function(r){return r})}function Ha(e,t,r,a,o){return n.useMemo(function(){var i=e,l=!e;l&&(i=En(t));var s=new Map,d=new Map,v=function(f,c,g){g&&typeof g=="string"&&f.set(c[g],c)};function h(u){for(var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,c=0;c"u"?"undefined":gt(navigator))==="object"&&/Firefox/i.test(navigator.userAgent);const Rn=function(e,t,r,a){var o=n.useRef(!1),i=n.useRef(null);function l(){clearTimeout(i.current),o.current=!0,i.current=setTimeout(function(){o.current=!1},50)}var s=n.useRef({top:e,bottom:t,left:r,right:a});return s.current.top=e,s.current.bottom=t,s.current.left=r,s.current.right=a,function(d,v){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,u=d?v<0&&s.current.left||v>0&&s.current.right:v<0&&s.current.top||v>0&&s.current.bottom;return h&&u?(clearTimeout(i.current),o.current=!1):(!u||o.current)&&l(),!o.current&&u}};function Ya(e,t,r,a,o,i,l){var s=n.useRef(0),d=n.useRef(null),v=n.useRef(null),h=n.useRef(!1),u=Rn(t,r,a,o);function f(p,b){Ze.cancel(d.current),s.current+=b,v.current=b,!u(!1,b)&&(qt||p.preventDefault(),d.current=Ze(function(){var y=h.current?10:1;l(s.current*y),s.current=0}))}function c(p,b){l(b,!0),qt||p.preventDefault()}var g=n.useRef(null),m=n.useRef(null);function S(p){if(e){Ze.cancel(m.current),m.current=Ze(function(){g.current=null},2);var b=p.deltaX,y=p.deltaY,Q=p.shiftKey,U=b,T=y;(g.current==="sx"||!g.current&&Q&&y&&!b)&&(U=y,T=0,g.current="sx");var E=Math.abs(U),D=Math.abs(T);g.current===null&&(g.current=i&&E>D?"x":"y"),g.current==="y"?f(p,T):c(p,U)}}function C(p){e&&(h.current=p.detail===v.current)}return[S,C]}function Xa(e,t,r,a){var o=n.useMemo(function(){return[new Map,[]]},[e,r.id,a]),i=ne(o,2),l=i[0],s=i[1],d=function(h){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:h,f=l.get(h),c=l.get(u);if(f===void 0||c===void 0)for(var g=e.length,m=s.length;m0&&arguments[0]!==void 0?arguments[0]:!1;h();var g=function(){s.current.forEach(function(S,C){if(S&&S.offsetParent){var p=Hn(S),b=p.offsetHeight;d.current.get(C)!==b&&d.current.set(C,p.offsetHeight)}}),l(function(S){return S+1})};c?g():v.current=Ze(g)}function f(c,g){var m=e(c),S=s.current.get(m);g?(s.current.set(m,g),u()):s.current.delete(m),!S!=!g&&(g?t==null||t(c):r==null||r(c))}return n.useEffect(function(){return h},[]),[f,u,d.current,i]}var en=14/15;function Ja(e,t,r){var a=n.useRef(!1),o=n.useRef(0),i=n.useRef(0),l=n.useRef(null),s=n.useRef(null),d,v=function(c){if(a.current){var g=Math.ceil(c.touches[0].pageX),m=Math.ceil(c.touches[0].pageY),S=o.current-g,C=i.current-m,p=Math.abs(S)>Math.abs(C);p?o.current=g:i.current=m,r(p,p?S:C)&&c.preventDefault(),clearInterval(s.current),s.current=setInterval(function(){p?S*=en:C*=en;var b=Math.floor(p?S:C);(!r(p,b,!0)||Math.abs(b)<=.1)&&clearInterval(s.current)},16)}},h=function(){a.current=!1,d()},u=function(c){d(),c.touches.length===1&&!a.current&&(a.current=!0,o.current=Math.ceil(c.touches[0].pageX),i.current=Math.ceil(c.touches[0].pageY),l.current=c.target,l.current.addEventListener("touchmove",v,{passive:!1}),l.current.addEventListener("touchend",h,{passive:!0}))};d=function(){l.current&&(l.current.removeEventListener("touchmove",v),l.current.removeEventListener("touchend",h))},lt(function(){return e&&t.current.addEventListener("touchstart",u,{passive:!0}),function(){var f;(f=t.current)===null||f===void 0||f.removeEventListener("touchstart",u),d(),clearInterval(s.current)}},[e])}var Za=10;function qa(e,t,r,a,o,i,l,s){var d=n.useRef(),v=n.useState(null),h=ne(v,2),u=h[0],f=h[1];return lt(function(){if(u&&u.times=0;X-=1){var te=o(t[X]),M=r.get(te);if(M===void 0){p=!0;break}if(_-=M,_<=0)break}switch(Q){case"top":y=T-S;break;case"bottom":y=E-C+S;break;default:{var K=e.current.scrollTop,O=K+C;TO&&(b="bottom")}}y!==null&&l(y),y!==u.lastTop&&(p=!0)}p&&f(G(G({},u),{},{times:u.times+1,targetAlign:b,lastTop:y}))}},[u,e.current]),function(c){if(c==null){s();return}if(Ze.cancel(d.current),typeof c=="number")l(c);else if(c&>(c)==="object"){var g,m=c.align;"index"in c?g=c.index:g=t.findIndex(function(p){return o(p)===c.key});var S=c.offset,C=S===void 0?0:S;f({times:0,index:g,offset:C,originAlign:m})}}}function tn(e,t){var r="touches"in e?e.touches[0]:e;return r[t?"pageX":"pageY"]}var nn=n.forwardRef(function(e,t){var r=e.prefixCls,a=e.rtl,o=e.scrollOffset,i=e.scrollRange,l=e.onStartMove,s=e.onStopMove,d=e.onScroll,v=e.horizontal,h=e.spinSize,u=e.containerSize,f=e.style,c=e.thumbStyle,g=n.useState(!1),m=ne(g,2),S=m[0],C=m[1],p=n.useState(null),b=ne(p,2),y=b[0],Q=b[1],U=n.useState(null),T=ne(U,2),E=T[0],D=T[1],Y=!a,q=n.useRef(),ae=n.useRef(),_=n.useState(!1),X=ne(_,2),te=X[0],M=X[1],K=n.useRef(),O=function(){clearTimeout(K.current),M(!0),K.current=setTimeout(function(){M(!1)},3e3)},w=i-u||0,ce=u-h||0,$=n.useMemo(function(){if(o===0||w===0)return 0;var x=o/w;return x*ce},[o,w,ce]),de=function(z){z.stopPropagation(),z.preventDefault()},oe=n.useRef({top:$,dragging:S,pageY:y,startTop:E});oe.current={top:$,dragging:S,pageY:y,startTop:E};var L=function(z){C(!0),Q(tn(z,v)),D(oe.current.top),l(),z.stopPropagation(),z.preventDefault()};n.useEffect(function(){var x=function(ve){ve.preventDefault()},z=q.current,le=ae.current;return z.addEventListener("touchstart",x,{passive:!1}),le.addEventListener("touchstart",L,{passive:!1}),function(){z.removeEventListener("touchstart",x),le.removeEventListener("touchstart",L)}},[]);var I=n.useRef();I.current=w;var W=n.useRef();W.current=ce,n.useEffect(function(){if(S){var x,z=function(ve){var fe=oe.current,me=fe.dragging,Ce=fe.pageY,Ee=fe.startTop;Ze.cancel(x);var ge=q.current.getBoundingClientRect(),R=u/(v?ge.width:ge.height);if(me){var ie=(tn(ve,v)-Ce)*R,pe=Ee;!Y&&v?pe-=ie:pe+=ie;var Ie=I.current,De=W.current,Ae=De?pe/De:0,be=Math.ceil(Ae*Ie);be=Math.max(be,0),be=Math.min(be,Ie),x=Ze(function(){d(be,v)})}},le=function(){C(!1),s()};return window.addEventListener("mousemove",z,{passive:!0}),window.addEventListener("touchmove",z,{passive:!0}),window.addEventListener("mouseup",le,{passive:!0}),window.addEventListener("touchend",le,{passive:!0}),function(){window.removeEventListener("mousemove",z),window.removeEventListener("touchmove",z),window.removeEventListener("mouseup",le),window.removeEventListener("touchend",le),Ze.cancel(x)}}},[S]),n.useEffect(function(){return O(),function(){clearTimeout(K.current)}},[o]),n.useImperativeHandle(t,function(){return{delayHidden:O}});var N="".concat(r,"-scrollbar"),P={position:"absolute",visibility:te?null:"hidden"},k={position:"absolute",background:"rgba(0, 0, 0, 0.5)",borderRadius:99,cursor:"pointer",userSelect:"none"};return v?(P.height=8,P.left=0,P.right=0,P.bottom=0,k.height="100%",k.width=h,Y?k.left=$:k.right=$):(P.width=8,P.top=0,P.bottom=0,Y?P.right=0:P.left=0,k.width="100%",k.height=h,k.top=$),n.createElement("div",{ref:q,className:ye(N,H(H(H({},"".concat(N,"-horizontal"),v),"".concat(N,"-vertical"),!v),"".concat(N,"-visible"),te)),style:G(G({},P),f),onMouseDown:de,onMouseMove:O},n.createElement("div",{ref:ae,className:ye("".concat(N,"-thumb"),H({},"".concat(N,"-thumb-moving"),S)),style:G(G({},k),c),onMouseDown:L}))}),er=20;function an(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=e/t*e;return isNaN(r)&&(r=0),r=Math.max(r,er),Math.floor(r)}var tr=["prefixCls","className","height","itemHeight","fullHeight","style","data","children","itemKey","virtual","direction","scrollWidth","component","onScroll","onVirtualScroll","onVisibleChange","innerProps","extraRender","styles"],nr=[],ar={overflowY:"auto",overflowAnchor:"none"};function rr(e,t){var r=e.prefixCls,a=r===void 0?"rc-virtual-list":r,o=e.className,i=e.height,l=e.itemHeight,s=e.fullHeight,d=s===void 0?!0:s,v=e.style,h=e.data,u=e.children,f=e.itemKey,c=e.virtual,g=e.direction,m=e.scrollWidth,S=e.component,C=S===void 0?"div":S,p=e.onScroll,b=e.onVirtualScroll,y=e.onVisibleChange,Q=e.innerProps,U=e.extraRender,T=e.styles,E=ut(e,tr),D=n.useCallback(function(j){return typeof f=="function"?f(j):j==null?void 0:j[f]},[f]),Y=Qa(D,null,null),q=ne(Y,4),ae=q[0],_=q[1],X=q[2],te=q[3],M=!!(c!==!1&&i&&l),K=n.useMemo(function(){return Object.values(X.maps).reduce(function(j,V){return j+V},0)},[X.id,X.maps]),O=M&&h&&(Math.max(l*h.length,K)>i||!!m),w=g==="rtl",ce=ye(a,H({},"".concat(a,"-rtl"),w),o),$=h||nr,de=n.useRef(),oe=n.useRef(),L=n.useRef(),I=n.useState(0),W=ne(I,2),N=W[0],P=W[1],k=n.useState(0),x=ne(k,2),z=x[0],le=x[1],se=n.useState(!1),ve=ne(se,2),fe=ve[0],me=ve[1],Ce=function(){me(!0)},Ee=function(){me(!1)},ge={getKey:D};function R(j){P(function(V){var ue;typeof j=="function"?ue=j(V):ue=j;var Me=st(ue);return de.current.scrollTop=Me,Me})}var ie=n.useRef({start:0,end:$.length}),pe=n.useRef(),Ie=Ua($,D),De=ne(Ie,1),Ae=De[0];pe.current=Ae;var be=n.useMemo(function(){if(!M)return{scrollHeight:void 0,start:0,end:$.length-1,offset:void 0};if(!O){var j;return{scrollHeight:((j=oe.current)===null||j===void 0?void 0:j.offsetHeight)||0,start:0,end:$.length-1,offset:void 0}}for(var V=0,ue,Me,Je,xt=$.length,dt=0;dt=N&&ue===void 0&&(ue=dt,Me=V),yt>N+i&&Je===void 0&&(Je=dt),V=yt}return ue===void 0&&(ue=0,Me=0,Je=Math.ceil(i/l)),Je===void 0&&(Je=$.length-1),Je=Math.min(Je+1,$.length-1),{scrollHeight:V,start:ue,end:Je,offset:Me}},[O,M,N,$,te,i]),Ne=be.scrollHeight,Ve=be.start,ke=be.end,Te=be.offset;ie.current.start=Ve,ie.current.end=ke;var pt=n.useState({width:0,height:i}),qe=ne(pt,2),_e=qe[0],Qe=qe[1],St=function(V){Qe({width:V.offsetWidth,height:V.offsetHeight})},Le=n.useRef(),ct=n.useRef(),ze=n.useMemo(function(){return an(_e.width,m)},[_e.width,m]),vt=n.useMemo(function(){return an(_e.height,Ne)},[_e.height,Ne]),tt=Ne-i,Ue=n.useRef(tt);Ue.current=tt;function st(j){var V=j;return Number.isNaN(Ue.current)||(V=Math.min(V,Ue.current)),V=Math.max(V,0),V}var nt=N<=0,we=N>=tt,ft=z<=0,Ye=z>=m,F=Rn(nt,we,ft,Ye),B=function(){return{x:w?-z:z,y:N}},A=n.useRef(B()),ee=jt(function(j){if(b){var V=G(G({},B()),j);(A.current.x!==V.x||A.current.y!==V.y)&&(b(V),A.current=V)}});function he(j,V){var ue=j;V?(Yt.flushSync(function(){le(ue)}),ee()):R(ue)}function Se(j){var V=j.currentTarget.scrollTop;V!==N&&R(V),p==null||p(j),ee()}var Ke=function(V){var ue=V,Me=m?m-_e.width:0;return ue=Math.max(ue,0),ue=Math.min(ue,Me),ue},He=jt(function(j,V){V?(Yt.flushSync(function(){le(function(ue){var Me=ue+(w?-j:j);return Ke(Me)})}),ee()):R(function(ue){var Me=ue+j;return Me})}),et=Ya(M,nt,we,ft,Ye,!!m,He),xe=ne(et,2),We=xe[0],at=xe[1];Ja(M,de,function(j,V,ue){return F(j,V,ue)?!1:(We({preventDefault:function(){},deltaX:j?V:0,deltaY:j?0:V}),!0)}),lt(function(){function j(ue){M&&ue.preventDefault()}var V=de.current;return V.addEventListener("wheel",We,{passive:!1}),V.addEventListener("DOMMouseScroll",at,{passive:!0}),V.addEventListener("MozMousePixelScroll",j,{passive:!1}),function(){V.removeEventListener("wheel",We),V.removeEventListener("DOMMouseScroll",at),V.removeEventListener("MozMousePixelScroll",j)}},[M]),lt(function(){if(m){var j=Ke(z);le(j),ee({x:j})}},[_e.width,m]);var mt=function(){var V,ue;(V=Le.current)===null||V===void 0||V.delayHidden(),(ue=ct.current)===null||ue===void 0||ue.delayHidden()},Ct=qa(de,$,X,l,D,function(){return _(!0)},R,mt);n.useImperativeHandle(t,function(){return{nativeElement:L.current,getScrollInfo:B,scrollTo:function(V){function ue(Me){return Me&>(Me)==="object"&&("left"in Me||"top"in Me)}ue(V)?(V.left!==void 0&&le(Ke(V.left)),Ct(V.top)):Ct(V)}}}),lt(function(){if(y){var j=$.slice(Ve,ke+1);y(j,$)}},[Ve,ke,$]);var Be=Xa($,D,X,l),Xe=U==null?void 0:U({start:Ve,end:ke,virtual:O,offsetX:z,offsetY:Te,rtl:w,getSize:Be}),kt=Ba($,Ve,ke,m,z,ae,u,ge),rt=null;i&&(rt=G(H({},d?"height":"maxHeight",i),ar),M&&(rt.overflowY="hidden",m&&(rt.overflowX="hidden"),fe&&(rt.pointerEvents="none")));var bt={};return w&&(bt.dir="rtl"),n.createElement("div",Re({ref:L,style:G(G({},v),{},{position:"relative"}),className:ce},bt,E),n.createElement(hn,{onResize:St},n.createElement(C,{className:"".concat(a,"-holder"),style:rt,ref:de,onScroll:Se,onMouseEnter:mt},n.createElement(In,{prefixCls:a,height:Ne,offsetX:z,offsetY:Te,scrollWidth:m,onInnerResize:_,ref:oe,innerProps:Q,rtl:w,extra:Xe},kt))),O&&Ne>i&&n.createElement(nn,{ref:Le,prefixCls:a,scrollOffset:N,scrollRange:Ne,rtl:w,onScroll:he,onStartMove:Ce,onStopMove:Ee,spinSize:vt,containerSize:_e.height,style:T==null?void 0:T.verticalScrollBar,thumbStyle:T==null?void 0:T.verticalScrollBarThumb}),O&&m>_e.width&&n.createElement(nn,{ref:ct,prefixCls:a,scrollOffset:z,scrollRange:m,rtl:w,onScroll:he,onStartMove:Ce,onStopMove:Ee,spinSize:ze,containerSize:_e.width,horizontal:!0,style:T==null?void 0:T.horizontalScrollBar,thumbStyle:T==null?void 0:T.horizontalScrollBarThumb}))}var xn=n.forwardRef(rr);xn.displayName="List";function or(){return/(mac\sos|macintosh)/i.test(navigator.appVersion)}var Mn=n.createContext(null),ir=["disabled","title","children","style","className"];function rn(e){return typeof e=="string"||typeof e=="number"}var lr=function(t,r){var a=va(),o=a.prefixCls,i=a.id,l=a.open,s=a.multiple,d=a.mode,v=a.searchValue,h=a.toggleOpen,u=a.notFoundContent,f=a.onPopupScroll,c=n.useContext(Mn),g=c.flattenOptions,m=c.onActiveValue,S=c.defaultActiveFirstOption,C=c.onSelect,p=c.menuItemSelectedIcon,b=c.rawValues,y=c.fieldNames,Q=c.virtual,U=c.listHeight,T=c.listItemHeight,E="".concat(o,"-item"),D=Wn(function(){return g},[l,g],function(L,I){return I[0]&&L[1]!==I[1]}),Y=n.useRef(null),q=function(I){I.preventDefault()},ae=function(I){Y.current&&Y.current.scrollTo(typeof I=="number"?{index:I}:I)},_=function(I){for(var W=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,N=D.length,P=0;P1&&arguments[1]!==void 0?arguments[1]:!1;K(I);var N={source:W?"keyboard":"mouse"},P=D[I];if(!P){m(null,-1,N);return}m(P.value,I,N)};n.useEffect(function(){O(S!==!1?_(0):-1)},[D.length,v]);var w=n.useCallback(function(L){return b.has(L)&&d!=="combobox"},[d,je(b).toString(),b.size]);n.useEffect(function(){var L=setTimeout(function(){if(!s&&l&&b.size===1){var W=Array.from(b)[0],N=D.findIndex(function(P){var k=P.data;return k.value===W});N!==-1&&(O(N),ae(N))}});if(l){var I;(I=Y.current)===null||I===void 0||I.scrollTo(void 0)}return function(){return clearTimeout(L)}},[l,v]);var ce=function(I){I!==void 0&&C(I,{selected:!b.has(I)}),s||h(!1)};if(n.useImperativeHandle(r,function(){return{onKeyDown:function(I){var W=I.which,N=I.ctrlKey;switch(W){case Z.N:case Z.P:case Z.UP:case Z.DOWN:{var P=0;if(W===Z.UP?P=-1:W===Z.DOWN?P=1:or()&&N&&(W===Z.N?P=1:W===Z.P&&(P=-1)),P!==0){var k=_(M+P,P);ae(k),O(k,!0)}break}case Z.ENTER:{var x=D[M];x&&!x.data.disabled?ce(x.value):ce(void 0),l&&I.preventDefault();break}case Z.ESC:h(!1),l&&I.stopPropagation()}},onKeyUp:function(){},scrollTo:function(I){ae(I)}}}),D.length===0)return n.createElement("div",{role:"listbox",id:"".concat(i,"_list"),className:"".concat(E,"-empty"),onMouseDown:q},u);var $=Object.keys(y).map(function(L){return y[L]}),de=function(I){return I.label},oe=function(I){var W=D[I];if(!W)return null;var N=W.data||{},P=N.value,k=W.group,x=Rt(N,!0),z=de(W);return W?n.createElement("div",Re({"aria-label":typeof z=="string"&&!k?z:null},x,{key:I,role:k?"presentation":"option",id:"".concat(i,"_list_").concat(I),"aria-selected":w(P)}),P):null};return n.createElement(n.Fragment,null,n.createElement("div",{role:"listbox",id:"".concat(i,"_list"),style:{height:0,width:0,overflow:"hidden"}},oe(M-1),oe(M),oe(M+1)),n.createElement(xn,{itemKey:"key",ref:Y,data:D,height:U,itemHeight:T,fullHeight:!1,onMouseDown:q,onScroll:f,virtual:Q},function(L,I){var W,N=L.group,P=L.groupOption,k=L.data,x=L.label,z=L.value,le=k.key;if(N){var se,ve=(se=k.title)!==null&&se!==void 0?se:rn(x)?x.toString():void 0;return n.createElement("div",{className:ye(E,"".concat(E,"-group")),title:ve},x!==void 0?x:le)}var fe=k.disabled,me=k.title;k.children;var Ce=k.style,Ee=k.className,ge=ut(k,ir),R=sn(ge,$),ie=w(z),pe="".concat(E,"-option"),Ie=ye(E,pe,Ee,(W={},H(W,"".concat(pe,"-grouped"),P),H(W,"".concat(pe,"-active"),M===I&&!fe),H(W,"".concat(pe,"-disabled"),fe),H(W,"".concat(pe,"-selected"),ie),W)),De=de(L),Ae=!p||typeof p=="function"||ie,be=typeof De=="number"?De:De||z,Ne=rn(be)?be.toString():void 0;return me!==void 0&&(Ne=me),n.createElement("div",Re({},Rt(R),{"aria-selected":ie,className:Ie,title:Ne,onMouseMove:function(){M===I||fe||O(I)},onClick:function(){fe||ce(z)},style:Ce}),n.createElement("div",{className:"".concat(pe,"-content")},be),n.isValidElement(p)||ie,Ae&&n.createElement(Nt,{className:"".concat(E,"-option-state"),customizeIcon:p,customizeIconProps:{isSelected:ie}},ie?"✓":null))}))},On=n.forwardRef(lr);On.displayName="OptionList";var ur=["id","mode","prefixCls","backfill","fieldNames","inputValue","searchValue","onSearch","autoClearSearchValue","onSelect","onDeselect","dropdownMatchSelectWidth","filterOption","filterSort","optionFilterProp","optionLabelProp","options","children","defaultActiveFirstOption","menuItemSelectedIcon","virtual","listHeight","listItemHeight","value","defaultValue","labelInValue","onChange"],cr=["inputValue"];function sr(e){return!e||gt(e)!=="object"}var fr=n.forwardRef(function(e,t){var r=e.id,a=e.mode,o=e.prefixCls,i=o===void 0?"rc-select":o,l=e.backfill,s=e.fieldNames,d=e.inputValue,v=e.searchValue,h=e.onSearch,u=e.autoClearSearchValue,f=u===void 0?!0:u,c=e.onSelect,g=e.onDeselect,m=e.dropdownMatchSelectWidth,S=m===void 0?!0:m,C=e.filterOption,p=e.filterSort,b=e.optionFilterProp,y=e.optionLabelProp,Q=e.options,U=e.children,T=e.defaultActiveFirstOption,E=e.menuItemSelectedIcon,D=e.virtual,Y=e.listHeight,q=Y===void 0?200:Y,ae=e.listItemHeight,_=ae===void 0?20:ae,X=e.value,te=e.defaultValue,M=e.labelInValue,K=e.onChange,O=ut(e,ur),w=Aa(r),ce=Ft(a),$=!!(!Q&&U),de=n.useMemo(function(){return C===void 0&&a==="combobox"?!1:C},[C,a]),oe=n.useMemo(function(){return yn(s,$)},[JSON.stringify(s),$]),L=Dt("",{value:v!==void 0?v:d,postState:function(B){return B||""}}),I=ne(L,2),W=I[0],N=I[1],P=Ha(Q,U,oe,b,y),k=P.valueOptions,x=P.labelOptions,z=P.options,le=n.useCallback(function(F){var B=Sn(F);return B.map(function(A){var ee,he,Se,Ke,He;if(sr(A))ee=A;else{var et;Se=A.key,he=A.label,ee=(et=A.value)!==null&&et!==void 0?et:Se}var xe=k.get(ee);if(xe){var We;he===void 0&&(he=xe==null?void 0:xe[y||oe.label]),Se===void 0&&(Se=(We=xe==null?void 0:xe.key)!==null&&We!==void 0?We:ee),Ke=xe==null?void 0:xe.disabled,He=xe==null?void 0:xe.title}return{label:he,value:ee,key:Se,disabled:Ke,title:He}})},[oe,y,k]),se=Dt(te,{value:X}),ve=ne(se,2),fe=ve[0],me=ve[1],Ce=n.useMemo(function(){var F,B=le(fe);return a==="combobox"&&!((F=B[0])!==null&&F!==void 0&&F.value)?[]:B},[fe,le,a]),Ee=_a(Ce,k),ge=ne(Ee,2),R=ge[0],ie=ge[1],pe=n.useMemo(function(){if(!a&&R.length===1){var F=R[0];if(F.value===null&&(F.label===null||F.label===void 0))return[]}return R.map(function(B){var A;return G(G({},B),{},{label:(A=B.label)!==null&&A!==void 0?A:B.value})})},[a,R]),Ie=n.useMemo(function(){return new Set(R.map(function(F){return F.value}))},[R]);n.useEffect(function(){if(a==="combobox"){var F,B=(F=R[0])===null||F===void 0?void 0:F.value;N(Ca(B)?String(B):"")}},[R]);var De=Zt(function(F,B){var A,ee=B??F;return A={},H(A,oe.value,F),H(A,oe.label,ee),A}),Ae=n.useMemo(function(){if(a!=="tags")return z;var F=je(z),B=function(ee){return k.has(ee)};return je(R).sort(function(A,ee){return A.value2&&arguments[2]!==void 0?arguments[2]:{},ee=A.source,he=ee===void 0?"keyboard":ee;ze(B),l&&a==="combobox"&&F!==null&&he==="keyboard"&&Qe(String(F))},[l,a]),Ue=function(B,A,ee){var he=function(){var Be,Xe=ie(B);return[M?{label:Xe==null?void 0:Xe[oe.label],value:B,key:(Be=Xe==null?void 0:Xe.key)!==null&&Be!==void 0?Be:B}:B,Vt(Xe)]};if(A&&c){var Se=he(),Ke=ne(Se,2),He=Ke[0],et=Ke[1];c(He,et)}else if(!A&&g&&ee!=="clear"){var xe=he(),We=ne(xe,2),at=We[0],mt=We[1];g(at,mt)}},st=Zt(function(F,B){var A,ee=ce?B.selected:!0;ee?A=ce?[].concat(je(R),[F]):[F]:A=R.filter(function(he){return he.value!==F}),Te(A),Ue(F,ee),a==="combobox"?Qe(""):(!Ft||f)&&(N(""),Qe(""))}),nt=function(B,A){Te(B);var ee=A.type,he=A.values;(ee==="remove"||ee==="clear")&&he.forEach(function(Se){Ue(Se.value,!1,ee)})},we=function(B,A){if(N(B),Qe(null),A.source==="submit"){var ee=(B||"").trim();if(ee){var he=Array.from(new Set([].concat(je(Ie),[ee])));Te(he),Ue(ee,!0),N("")}return}A.source!=="blur"&&(a==="combobox"&&Te(B),h==null||h(B))},ft=function(B){var A=B;a!=="tags"&&(A=B.map(function(he){var Se=x.get(he);return Se==null?void 0:Se.value}).filter(function(he){return he!==void 0}));var ee=Array.from(new Set([].concat(je(Ie),je(A))));Te(ee),ee.forEach(function(he){Ue(he,!0)})},Ye=n.useMemo(function(){var F=D!==!1&&S!==!1;return G(G({},P),{},{flattenOptions:ke,onActiveValue:tt,defaultActiveFirstOption:vt,onSelect:st,menuItemSelectedIcon:E,rawValues:Ie,fieldNames:oe,virtual:F,listHeight:q,listItemHeight:_,childrenAsData:$})},[P,ke,tt,vt,st,E,Ie,oe,D,S,q,_,$]);return n.createElement(Mn.Provider,{value:Ye},n.createElement(Ta,Re({},O,{id:w,prefixCls:i,ref:t,omitDomProps:cr,mode:a,displayValues:pe,onDisplayValuesChange:nt,searchValue:W,onSearch:we,autoClearSearchValue:f,onSearchSplit:ft,dropdownMatchSelectWidth:S,OptionList:On,emptyOptions:!ke.length,activeValue:_e,activeDescendantId:"".concat(w,"_list_").concat(ct)})))}),Ht=fr;Ht.Option=zt;Ht.OptGroup=$t;var dr=function(t){return n.createElement(Bn,null,function(r){var a=r.getPrefixCls,o=a("empty");switch(t){case"Table":case"List":return n.createElement(It,{image:It.PRESENTED_IMAGE_SIMPLE});case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return n.createElement(It,{image:It.PRESENTED_IMAGE_SIMPLE,className:"".concat(o,"-small")});default:return n.createElement(It,null)}})};const vr=dr;function mr(e){var t=e.suffixIcon,r=e.clearIcon,a=e.menuItemSelectedIcon,o=e.removeIcon,i=e.loading,l=e.multiple,s=e.hasFeedback,d=e.prefixCls,v=e.showArrow,h=e.feedbackIcon,u=r??n.createElement(jn,null),f=function(p){return n.createElement(n.Fragment,null,v!==!1&&p,s&&h)},c=null;if(t!==void 0)c=f(t);else if(i)c=f(n.createElement(dn,{spin:!0}));else{var g="".concat(d,"-suffix");c=function(p){var b=p.open,y=p.showSearch;return f(b&&y?n.createElement(oa,{className:g}):n.createElement(da,{className:g}))}}var m=null;a!==void 0?m=a:l?m=n.createElement(la,null):m=null;var S=null;return o!==void 0?S=o:S=n.createElement(fn,null),{clearIcon:u,suffixIcon:c,itemIcon:m,removeIcon:S}}var hr=globalThis&&globalThis.__rest||function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,a=Object.getOwnPropertySymbols(e);o"u"?s=g?N:"":x===!1&&(s="");var c={title:s};!o&&!y&&(c.title=null,c.open=!1);var u=jt(N).length,b=l.createElement(Dt,p({},i,{className:L(V(V({},"".concat(v,"-item-danger"),a),"".concat(v,"-item-only-child"),(P?u+1:u)===1),E),title:typeof x=="string"?x:void 0}),ee(P,{className:L(ie(P)?(f=P.props)===null||f===void 0?void 0:f.className:"","".concat(v,"-item-icon"))}),r.renderItemChildren(y));return C||(b=l.createElement(Ae,p({},c,{placement:m==="rtl"?"left":"right",overlayClassName:"".concat(v,"-inline-collapsed-tooltip")}),b)),b},r}return Se(e,[{key:"renderItemChildren",value:function(n){var o=this.context,f=o.prefixCls,d=o.firstLevel,v=this.props,g=v.icon,y=v.children,m=l.createElement("span",{className:"".concat(f,"-title-content")},y);return(!g||ie(y)&&y.type==="span")&&y&&n&&d&&typeof y=="string"?l.createElement("div",{className:"".concat(f,"-inline-collapsed-noicon")},y.charAt(0)):m}},{key:"render",value:function(){return l.createElement(Le.Consumer,null,this.renderItem)}}]),e}(l.Component);be.contextType=se;function qe(t){var e,r=t.popupClassName,n=t.icon,o=t.title,f=t.theme,d=l.useContext(se),v=d.prefixCls,g=d.inlineCollapsed,y=d.antdMenuTheme,m=At(),C;if(!n)C=g&&!m.length&&o&&typeof o=="string"?l.createElement("div",{className:"".concat(v,"-inline-collapsed-noicon")},o.charAt(0)):l.createElement("span",{className:"".concat(v,"-title-content")},o);else{var O=ie(o)&&o.type==="span";C=l.createElement(l.Fragment,null,ee(n,{className:L(ie(n)?(e=n.props)===null||e===void 0?void 0:e.className:"","".concat(v,"-item-icon"))}),O?o:l.createElement("span",{className:"".concat(v,"-title-content")},o))}var E=l.useMemo(function(){return p(p({},d),{firstLevel:!1})},[d]);return l.createElement(se.Provider,{value:E},l.createElement(zt,p({},Fe(t,["icon"]),{title:C,popupClassName:L(v,"".concat(v,"-").concat(f||y),r)})))}var ln=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(t);ojn.includes(t)?t:"en-US",Jn=()=>fe.jsx(Ke,{menu:{items:Mn,selectedKeys:[Rn(Pt())],onClick:({key:t})=>Et(t,!1)},children:fe.jsx(q,{icon:fe.jsx(Qt,{}),size:"small",style:{marginLeft:12}})});var at={},Dn=t=>encodeURIComponent(t).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`),ot="%[a-f0-9]{2}",Ee=new RegExp("("+ot+")|([^%]+?)","gi"),Ne=new RegExp("("+ot+")+","gi");function ge(t,e){try{return[decodeURIComponent(t.join(""))]}catch{}if(t.length===1)return t;e=e||1;var r=t.slice(0,e),n=t.slice(e);return Array.prototype.concat.call([],ge(r),ge(n))}function An(t){try{return decodeURIComponent(t)}catch{for(var e=t.match(Ee)||[],r=1;r{if(!(typeof t=="string"&&typeof e=="string"))throw new TypeError("Expected the arguments to be of type `string`");if(e==="")return[t];const r=t.indexOf(e);return r===-1?[t]:[t.slice(0,r),t.slice(r+e.length)]},Vn=function(t,e){for(var r={},n=Object.keys(t),o=Array.isArray(e),f=0;fa==null,d=Symbol("encodeFragmentIdentifier");function v(a){switch(a.arrayFormat){case"index":return i=>(s,c)=>{const u=s.length;return c===void 0||a.skipNull&&c===null||a.skipEmptyString&&c===""?s:c===null?[...s,[m(i,a),"[",u,"]"].join("")]:[...s,[m(i,a),"[",m(u,a),"]=",m(c,a)].join("")]};case"bracket":return i=>(s,c)=>c===void 0||a.skipNull&&c===null||a.skipEmptyString&&c===""?s:c===null?[...s,[m(i,a),"[]"].join("")]:[...s,[m(i,a),"[]=",m(c,a)].join("")];case"colon-list-separator":return i=>(s,c)=>c===void 0||a.skipNull&&c===null||a.skipEmptyString&&c===""?s:c===null?[...s,[m(i,a),":list="].join("")]:[...s,[m(i,a),":list=",m(c,a)].join("")];case"comma":case"separator":case"bracket-separator":{const i=a.arrayFormat==="bracket-separator"?"[]=":"=";return s=>(c,u)=>u===void 0||a.skipNull&&u===null||a.skipEmptyString&&u===""?c:(u=u===null?"":u,c.length===0?[[m(s,a),i,m(u,a)].join("")]:[[c,m(u,a)].join(a.arrayFormatSeparator)])}default:return i=>(s,c)=>c===void 0||a.skipNull&&c===null||a.skipEmptyString&&c===""?s:c===null?[...s,m(i,a)]:[...s,[m(i,a),"=",m(c,a)].join("")]}}function g(a){let i;switch(a.arrayFormat){case"index":return(s,c,u)=>{if(i=/\[(\d*)\]$/.exec(s),s=s.replace(/\[\d*\]$/,""),!i){u[s]=c;return}u[s]===void 0&&(u[s]={}),u[s][i[1]]=c};case"bracket":return(s,c,u)=>{if(i=/(\[\])$/.exec(s),s=s.replace(/\[\]$/,""),!i){u[s]=c;return}if(u[s]===void 0){u[s]=[c];return}u[s]=[].concat(u[s],c)};case"colon-list-separator":return(s,c,u)=>{if(i=/(:list)$/.exec(s),s=s.replace(/:list$/,""),!i){u[s]=c;return}if(u[s]===void 0){u[s]=[c];return}u[s]=[].concat(u[s],c)};case"comma":case"separator":return(s,c,u)=>{const b=typeof c=="string"&&c.includes(a.arrayFormatSeparator),h=typeof c=="string"&&!b&&C(c,a).includes(a.arrayFormatSeparator);c=h?C(c,a):c;const k=b||h?c.split(a.arrayFormatSeparator).map(A=>C(A,a)):c===null?c:C(c,a);u[s]=k};case"bracket-separator":return(s,c,u)=>{const b=/(\[\])$/.test(s);if(s=s.replace(/\[\]$/,""),!b){u[s]=c&&C(c,a);return}const h=c===null?[]:c.split(a.arrayFormatSeparator).map(k=>C(k,a));if(u[s]===void 0){u[s]=h;return}u[s]=[].concat(u[s],h)};default:return(s,c,u)=>{if(u[s]===void 0){u[s]=c;return}u[s]=[].concat(u[s],c)}}}function y(a){if(typeof a!="string"||a.length!==1)throw new TypeError("arrayFormatSeparator must be single character string")}function m(a,i){return i.encode?i.strict?e(a):encodeURIComponent(a):a}function C(a,i){return i.decode?r(a):a}function O(a){return Array.isArray(a)?a.sort():typeof a=="object"?O(Object.keys(a)).sort((i,s)=>Number(i)-Number(s)).map(i=>a[i]):a}function E(a){const i=a.indexOf("#");return i!==-1&&(a=a.slice(0,i)),a}function N(a){let i="";const s=a.indexOf("#");return s!==-1&&(i=a.slice(s)),i}function w(a){a=E(a);const i=a.indexOf("?");return i===-1?"":a.slice(i+1)}function x(a,i){return i.parseNumbers&&!Number.isNaN(Number(a))&&typeof a=="string"&&a.trim()!==""?a=Number(a):i.parseBooleans&&a!==null&&(a.toLowerCase()==="true"||a.toLowerCase()==="false")&&(a=a.toLowerCase()==="true"),a}function P(a,i){i=Object.assign({decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1},i),y(i.arrayFormatSeparator);const s=g(i),c=Object.create(null);if(typeof a!="string"||(a=a.trim().replace(/^[?#&]/,""),!a))return c;for(const u of a.split("&")){if(u==="")continue;let[b,h]=n(i.decode?u.replace(/\+/g," "):u,"=");h=h===void 0?null:["comma","separator","bracket-separator"].includes(i.arrayFormat)?h:C(h,i),s(C(b,i),h,c)}for(const u of Object.keys(c)){const b=c[u];if(typeof b=="object"&&b!==null)for(const h of Object.keys(b))b[h]=x(b[h],i);else c[u]=x(b,i)}return i.sort===!1?c:(i.sort===!0?Object.keys(c).sort():Object.keys(c).sort(i.sort)).reduce((u,b)=>{const h=c[b];return h&&typeof h=="object"&&!Array.isArray(h)?u[b]=O(h):u[b]=h,u},Object.create(null))}t.extract=w,t.parse=P,t.stringify=(a,i)=>{if(!a)return"";i=Object.assign({encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:","},i),y(i.arrayFormatSeparator);const s=h=>i.skipNull&&f(a[h])||i.skipEmptyString&&a[h]==="",c=v(i),u={};for(const h of Object.keys(a))s(h)||(u[h]=a[h]);const b=Object.keys(u);return i.sort!==!1&&b.sort(i.sort),b.map(h=>{const k=a[h];return k===void 0?"":k===null?m(h,i):Array.isArray(k)?k.length===0&&i.arrayFormat==="bracket-separator"?m(h,i)+"[]":k.reduce(c(h),[]).join("&"):m(h,i)+"="+m(k,i)}).filter(h=>h.length>0).join("&")},t.parseUrl=(a,i)=>{i=Object.assign({decode:!0},i);const[s,c]=n(a,"#");return Object.assign({url:s.split("?")[0]||"",query:P(w(a),i)},i&&i.parseFragmentIdentifier&&c?{fragmentIdentifier:C(c,i)}:{})},t.stringifyUrl=(a,i)=>{i=Object.assign({encode:!0,strict:!0,[d]:!0},i);const s=E(a.url).split("?")[0]||"",c=t.extract(a.url),u=t.parse(c,{sort:!1}),b=Object.assign(u,a.query);let h=t.stringify(b,i);h&&(h=`?${h}`);let k=N(a.url);return a.fragmentIdentifier&&(k=`#${i[d]?m(a.fragmentIdentifier,i):a.fragmentIdentifier}`),`${s}${h}${k}`},t.pick=(a,i,s)=>{s=Object.assign({parseFragmentIdentifier:!0,[d]:!1},s);const{url:c,query:u,fragmentIdentifier:b}=t.parseUrl(a,s);return t.stringifyUrl({url:c,query:o(u,i),fragmentIdentifier:b},s)},t.exclude=(a,i,s)=>{const c=Array.isArray(i)?u=>!i.includes(u):(u,b)=>!i(u,b);return t.pick(a,c,s)}})(at);const Zn=Nt(at);export{Ke as D,Jn as L,Xn as M,un as O,Yn as P,Wn as Q,en as _,vn as a,Zn as q}; +import{A as we,f as le,C as U,c as L,b as V,q as _e,p as Te,e as ee,i as ie,l as Se,r as ce,s as ke,ay as $e,o as Fe,j as Ie,O as je,a as H,H as dt,ax as mt,E as ye,az as Me,h as vt,ab as Ct,_ as X,aA as gt,aB as yt,aC as Re,ac as ht,aD as bt,aE as xt,aF as pt,I as De,N as Ot}from"./_setToString-dbbee35a.js";import{r as l,_ as p,j as fe,l as Pt,m as Et,g as Nt}from"./umi-37873494.js";import{T as Ae,e as Z,k as wt,S as _t,u as ze,A as Tt,B as St,z as kt,K as $t}from"./TextArea-27ba039d.js";import{k as Le,f as Ft,D as It}from"./util-2d38567b.js";import{t as jt,u as Mt,B as q,N as Be,c as he}from"./button-1ef38c18.js";import{D as Rt,M as Dt,u as At,S as zt,a as Ve,b as Lt,c as He,d as Bt}from"./Dropdown-ba03bf54.js";var Vt={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M854.4 800.9c.2-.3.5-.6.7-.9C920.6 722.1 960 621.7 960 512s-39.4-210.1-104.8-288c-.2-.3-.5-.5-.7-.8-1.1-1.3-2.1-2.5-3.2-3.7-.4-.5-.8-.9-1.2-1.4l-4.1-4.7-.1-.1c-1.5-1.7-3.1-3.4-4.6-5.1l-.1-.1c-3.2-3.4-6.4-6.8-9.7-10.1l-.1-.1-4.8-4.8-.3-.3c-1.5-1.5-3-2.9-4.5-4.3-.5-.5-1-1-1.6-1.5-1-1-2-1.9-3-2.8-.3-.3-.7-.6-1-1C736.4 109.2 629.5 64 512 64s-224.4 45.2-304.3 119.2c-.3.3-.7.6-1 1-1 .9-2 1.9-3 2.9-.5.5-1 1-1.6 1.5-1.5 1.4-3 2.9-4.5 4.3l-.3.3-4.8 4.8-.1.1c-3.3 3.3-6.5 6.7-9.7 10.1l-.1.1c-1.6 1.7-3.1 3.4-4.6 5.1l-.1.1c-1.4 1.5-2.8 3.1-4.1 4.7-.4.5-.8.9-1.2 1.4-1.1 1.2-2.1 2.5-3.2 3.7-.2.3-.5.5-.7.8C103.4 301.9 64 402.3 64 512s39.4 210.1 104.8 288c.2.3.5.6.7.9l3.1 3.7c.4.5.8.9 1.2 1.4l4.1 4.7c0 .1.1.1.1.2 1.5 1.7 3 3.4 4.6 5l.1.1c3.2 3.4 6.4 6.8 9.6 10.1l.1.1c1.6 1.6 3.1 3.2 4.7 4.7l.3.3c3.3 3.3 6.7 6.5 10.1 9.6 80.1 74 187 119.2 304.5 119.2s224.4-45.2 304.3-119.2a300 300 0 0010-9.6l.3-.3c1.6-1.6 3.2-3.1 4.7-4.7l.1-.1c3.3-3.3 6.5-6.7 9.6-10.1l.1-.1c1.5-1.7 3.1-3.3 4.6-5 0-.1.1-.1.1-.2 1.4-1.5 2.8-3.1 4.1-4.7.4-.5.8-.9 1.2-1.4a99 99 0 003.3-3.7zm4.1-142.6c-13.8 32.6-32 62.8-54.2 90.2a444.07 444.07 0 00-81.5-55.9c11.6-46.9 18.8-98.4 20.7-152.6H887c-3 40.9-12.6 80.6-28.5 118.3zM887 484H743.5c-1.9-54.2-9.1-105.7-20.7-152.6 29.3-15.6 56.6-34.4 81.5-55.9A373.86 373.86 0 01887 484zM658.3 165.5c39.7 16.8 75.8 40 107.6 69.2a394.72 394.72 0 01-59.4 41.8c-15.7-45-35.8-84.1-59.2-115.4 3.7 1.4 7.4 2.9 11 4.4zm-90.6 700.6c-9.2 7.2-18.4 12.7-27.7 16.4V697a389.1 389.1 0 01115.7 26.2c-8.3 24.6-17.9 47.3-29 67.8-17.4 32.4-37.8 58.3-59 75.1zm59-633.1c11 20.6 20.7 43.3 29 67.8A389.1 389.1 0 01540 327V141.6c9.2 3.7 18.5 9.1 27.7 16.4 21.2 16.7 41.6 42.6 59 75zM540 640.9V540h147.5c-1.6 44.2-7.1 87.1-16.3 127.8l-.3 1.2A445.02 445.02 0 00540 640.9zm0-156.9V383.1c45.8-2.8 89.8-12.5 130.9-28.1l.3 1.2c9.2 40.7 14.7 83.5 16.3 127.8H540zm-56 56v100.9c-45.8 2.8-89.8 12.5-130.9 28.1l-.3-1.2c-9.2-40.7-14.7-83.5-16.3-127.8H484zm-147.5-56c1.6-44.2 7.1-87.1 16.3-127.8l.3-1.2c41.1 15.6 85 25.3 130.9 28.1V484H336.5zM484 697v185.4c-9.2-3.7-18.5-9.1-27.7-16.4-21.2-16.7-41.7-42.7-59.1-75.1-11-20.6-20.7-43.3-29-67.8 37.2-14.6 75.9-23.3 115.8-26.1zm0-370a389.1 389.1 0 01-115.7-26.2c8.3-24.6 17.9-47.3 29-67.8 17.4-32.4 37.8-58.4 59.1-75.1 9.2-7.2 18.4-12.7 27.7-16.4V327zM365.7 165.5c3.7-1.5 7.3-3 11-4.4-23.4 31.3-43.5 70.4-59.2 115.4-21-12-40.9-26-59.4-41.8 31.8-29.2 67.9-52.4 107.6-69.2zM165.5 365.7c13.8-32.6 32-62.8 54.2-90.2 24.9 21.5 52.2 40.3 81.5 55.9-11.6 46.9-18.8 98.4-20.7 152.6H137c3-40.9 12.6-80.6 28.5-118.3zM137 540h143.5c1.9 54.2 9.1 105.7 20.7 152.6a444.07 444.07 0 00-81.5 55.9A373.86 373.86 0 01137 540zm228.7 318.5c-39.7-16.8-75.8-40-107.6-69.2 18.5-15.8 38.4-29.7 59.4-41.8 15.7 45 35.8 84.1 59.2 115.4-3.7-1.4-7.4-2.9-11-4.4zm292.6 0c-3.7 1.5-7.3 3-11 4.4 23.4-31.3 43.5-70.4 59.2-115.4 21 12 40.9 26 59.4 41.8a373.81 373.81 0 01-107.6 69.2z"}}]},name:"global",theme:"outlined"};const Ht=Vt;var Ut=function(e,r){return l.createElement(we,le(le({},e),{},{ref:r,icon:Ht}))},qt=l.forwardRef(Ut);const Qt=qt;var Gt={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"question-circle",theme:"outlined"};const Kt=Gt;var Wt=function(e,r){return l.createElement(we,le(le({},e),{},{ref:r,icon:Kt}))},Xt=l.forwardRef(Wt);const Wn=Xt;var de=function(e){return e?typeof e=="function"?e():e:null},Yt=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(t);o"u"?s=g?N:"":x===!1&&(s="");var c={title:s};!o&&!y&&(c.title=null,c.open=!1);var u=jt(N).length,b=l.createElement(Dt,p({},i,{className:L(V(V({},"".concat(v,"-item-danger"),a),"".concat(v,"-item-only-child"),(P?u+1:u)===1),E),title:typeof x=="string"?x:void 0}),ee(P,{className:L(ie(P)?(f=P.props)===null||f===void 0?void 0:f.className:"","".concat(v,"-item-icon"))}),r.renderItemChildren(y));return C||(b=l.createElement(Ae,p({},c,{placement:m==="rtl"?"left":"right",overlayClassName:"".concat(v,"-inline-collapsed-tooltip")}),b)),b},r}return Se(e,[{key:"renderItemChildren",value:function(n){var o=this.context,f=o.prefixCls,d=o.firstLevel,v=this.props,g=v.icon,y=v.children,m=l.createElement("span",{className:"".concat(f,"-title-content")},y);return(!g||ie(y)&&y.type==="span")&&y&&n&&d&&typeof y=="string"?l.createElement("div",{className:"".concat(f,"-inline-collapsed-noicon")},y.charAt(0)):m}},{key:"render",value:function(){return l.createElement(Le.Consumer,null,this.renderItem)}}]),e}(l.Component);be.contextType=se;function qe(t){var e,r=t.popupClassName,n=t.icon,o=t.title,f=t.theme,d=l.useContext(se),v=d.prefixCls,g=d.inlineCollapsed,y=d.antdMenuTheme,m=At(),C;if(!n)C=g&&!m.length&&o&&typeof o=="string"?l.createElement("div",{className:"".concat(v,"-inline-collapsed-noicon")},o.charAt(0)):l.createElement("span",{className:"".concat(v,"-title-content")},o);else{var O=ie(o)&&o.type==="span";C=l.createElement(l.Fragment,null,ee(n,{className:L(ie(n)?(e=n.props)===null||e===void 0?void 0:e.className:"","".concat(v,"-item-icon"))}),O?o:l.createElement("span",{className:"".concat(v,"-title-content")},o))}var E=l.useMemo(function(){return p(p({},d),{firstLevel:!1})},[d]);return l.createElement(se.Provider,{value:E},l.createElement(zt,p({},Fe(t,["icon"]),{title:C,popupClassName:L(v,"".concat(v,"-").concat(f||y),r)})))}var ln=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(t);ojn.includes(t)?t:"en-US",Jn=()=>fe.jsx(Ke,{menu:{items:Mn,selectedKeys:[Rn(Pt())],onClick:({key:t})=>Et(t,!1)},children:fe.jsx(q,{icon:fe.jsx(Qt,{}),size:"small",style:{marginLeft:12}})});var at={},Dn=t=>encodeURIComponent(t).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`),ot="%[a-f0-9]{2}",Ee=new RegExp("("+ot+")|([^%]+?)","gi"),Ne=new RegExp("("+ot+")+","gi");function ge(t,e){try{return[decodeURIComponent(t.join(""))]}catch{}if(t.length===1)return t;e=e||1;var r=t.slice(0,e),n=t.slice(e);return Array.prototype.concat.call([],ge(r),ge(n))}function An(t){try{return decodeURIComponent(t)}catch{for(var e=t.match(Ee)||[],r=1;r{if(!(typeof t=="string"&&typeof e=="string"))throw new TypeError("Expected the arguments to be of type `string`");if(e==="")return[t];const r=t.indexOf(e);return r===-1?[t]:[t.slice(0,r),t.slice(r+e.length)]},Vn=function(t,e){for(var r={},n=Object.keys(t),o=Array.isArray(e),f=0;fa==null,d=Symbol("encodeFragmentIdentifier");function v(a){switch(a.arrayFormat){case"index":return i=>(s,c)=>{const u=s.length;return c===void 0||a.skipNull&&c===null||a.skipEmptyString&&c===""?s:c===null?[...s,[m(i,a),"[",u,"]"].join("")]:[...s,[m(i,a),"[",m(u,a),"]=",m(c,a)].join("")]};case"bracket":return i=>(s,c)=>c===void 0||a.skipNull&&c===null||a.skipEmptyString&&c===""?s:c===null?[...s,[m(i,a),"[]"].join("")]:[...s,[m(i,a),"[]=",m(c,a)].join("")];case"colon-list-separator":return i=>(s,c)=>c===void 0||a.skipNull&&c===null||a.skipEmptyString&&c===""?s:c===null?[...s,[m(i,a),":list="].join("")]:[...s,[m(i,a),":list=",m(c,a)].join("")];case"comma":case"separator":case"bracket-separator":{const i=a.arrayFormat==="bracket-separator"?"[]=":"=";return s=>(c,u)=>u===void 0||a.skipNull&&u===null||a.skipEmptyString&&u===""?c:(u=u===null?"":u,c.length===0?[[m(s,a),i,m(u,a)].join("")]:[[c,m(u,a)].join(a.arrayFormatSeparator)])}default:return i=>(s,c)=>c===void 0||a.skipNull&&c===null||a.skipEmptyString&&c===""?s:c===null?[...s,m(i,a)]:[...s,[m(i,a),"=",m(c,a)].join("")]}}function g(a){let i;switch(a.arrayFormat){case"index":return(s,c,u)=>{if(i=/\[(\d*)\]$/.exec(s),s=s.replace(/\[\d*\]$/,""),!i){u[s]=c;return}u[s]===void 0&&(u[s]={}),u[s][i[1]]=c};case"bracket":return(s,c,u)=>{if(i=/(\[\])$/.exec(s),s=s.replace(/\[\]$/,""),!i){u[s]=c;return}if(u[s]===void 0){u[s]=[c];return}u[s]=[].concat(u[s],c)};case"colon-list-separator":return(s,c,u)=>{if(i=/(:list)$/.exec(s),s=s.replace(/:list$/,""),!i){u[s]=c;return}if(u[s]===void 0){u[s]=[c];return}u[s]=[].concat(u[s],c)};case"comma":case"separator":return(s,c,u)=>{const b=typeof c=="string"&&c.includes(a.arrayFormatSeparator),h=typeof c=="string"&&!b&&C(c,a).includes(a.arrayFormatSeparator);c=h?C(c,a):c;const k=b||h?c.split(a.arrayFormatSeparator).map(A=>C(A,a)):c===null?c:C(c,a);u[s]=k};case"bracket-separator":return(s,c,u)=>{const b=/(\[\])$/.test(s);if(s=s.replace(/\[\]$/,""),!b){u[s]=c&&C(c,a);return}const h=c===null?[]:c.split(a.arrayFormatSeparator).map(k=>C(k,a));if(u[s]===void 0){u[s]=h;return}u[s]=[].concat(u[s],h)};default:return(s,c,u)=>{if(u[s]===void 0){u[s]=c;return}u[s]=[].concat(u[s],c)}}}function y(a){if(typeof a!="string"||a.length!==1)throw new TypeError("arrayFormatSeparator must be single character string")}function m(a,i){return i.encode?i.strict?e(a):encodeURIComponent(a):a}function C(a,i){return i.decode?r(a):a}function O(a){return Array.isArray(a)?a.sort():typeof a=="object"?O(Object.keys(a)).sort((i,s)=>Number(i)-Number(s)).map(i=>a[i]):a}function E(a){const i=a.indexOf("#");return i!==-1&&(a=a.slice(0,i)),a}function N(a){let i="";const s=a.indexOf("#");return s!==-1&&(i=a.slice(s)),i}function w(a){a=E(a);const i=a.indexOf("?");return i===-1?"":a.slice(i+1)}function x(a,i){return i.parseNumbers&&!Number.isNaN(Number(a))&&typeof a=="string"&&a.trim()!==""?a=Number(a):i.parseBooleans&&a!==null&&(a.toLowerCase()==="true"||a.toLowerCase()==="false")&&(a=a.toLowerCase()==="true"),a}function P(a,i){i=Object.assign({decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1},i),y(i.arrayFormatSeparator);const s=g(i),c=Object.create(null);if(typeof a!="string"||(a=a.trim().replace(/^[?#&]/,""),!a))return c;for(const u of a.split("&")){if(u==="")continue;let[b,h]=n(i.decode?u.replace(/\+/g," "):u,"=");h=h===void 0?null:["comma","separator","bracket-separator"].includes(i.arrayFormat)?h:C(h,i),s(C(b,i),h,c)}for(const u of Object.keys(c)){const b=c[u];if(typeof b=="object"&&b!==null)for(const h of Object.keys(b))b[h]=x(b[h],i);else c[u]=x(b,i)}return i.sort===!1?c:(i.sort===!0?Object.keys(c).sort():Object.keys(c).sort(i.sort)).reduce((u,b)=>{const h=c[b];return h&&typeof h=="object"&&!Array.isArray(h)?u[b]=O(h):u[b]=h,u},Object.create(null))}t.extract=w,t.parse=P,t.stringify=(a,i)=>{if(!a)return"";i=Object.assign({encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:","},i),y(i.arrayFormatSeparator);const s=h=>i.skipNull&&f(a[h])||i.skipEmptyString&&a[h]==="",c=v(i),u={};for(const h of Object.keys(a))s(h)||(u[h]=a[h]);const b=Object.keys(u);return i.sort!==!1&&b.sort(i.sort),b.map(h=>{const k=a[h];return k===void 0?"":k===null?m(h,i):Array.isArray(k)?k.length===0&&i.arrayFormat==="bracket-separator"?m(h,i)+"[]":k.reduce(c(h),[]).join("&"):m(h,i)+"="+m(k,i)}).filter(h=>h.length>0).join("&")},t.parseUrl=(a,i)=>{i=Object.assign({decode:!0},i);const[s,c]=n(a,"#");return Object.assign({url:s.split("?")[0]||"",query:P(w(a),i)},i&&i.parseFragmentIdentifier&&c?{fragmentIdentifier:C(c,i)}:{})},t.stringifyUrl=(a,i)=>{i=Object.assign({encode:!0,strict:!0,[d]:!0},i);const s=E(a.url).split("?")[0]||"",c=t.extract(a.url),u=t.parse(c,{sort:!1}),b=Object.assign(u,a.query);let h=t.stringify(b,i);h&&(h=`?${h}`);let k=N(a.url);return a.fragmentIdentifier&&(k=`#${i[d]?m(a.fragmentIdentifier,i):a.fragmentIdentifier}`),`${s}${h}${k}`},t.pick=(a,i,s)=>{s=Object.assign({parseFragmentIdentifier:!0,[d]:!1},s);const{url:c,query:u,fragmentIdentifier:b}=t.parseUrl(a,s);return t.stringifyUrl({url:c,query:o(u,i),fragmentIdentifier:b},s)},t.exclude=(a,i,s)=>{const c=Array.isArray(i)?u=>!i.includes(u):(u,b)=>!i(u,b);return t.pick(a,c,s)}})(at);const Zn=Nt(at);export{Ke as D,Jn as L,Xn as M,un as O,Yn as P,Wn as Q,en as _,vn as a,Zn as q}; diff --git a/dist/assets/index-6dffb190.js b/dist/assets/index-55bfb99e.js similarity index 99% rename from dist/assets/index-6dffb190.js rename to dist/assets/index-55bfb99e.js index 37ca9264db5d089c4f841c06281bce6dd3fd382e..bf2bad37248da21e697ff26c74e4f1a4fb22425a 100644 --- a/dist/assets/index-6dffb190.js +++ b/dist/assets/index-55bfb99e.js @@ -1,4 +1,4 @@ -import{r as xe,g as as,j as Re,R as et,_ as je,n as Ui,e as ls,o as cs}from"./umi-91f9d113.js";import{m as Rt}from"./parser-f1e7dbfb.js";import{f as Qi,D as ds,F as ei,z as us,B as hs}from"./index-4514925e.js";import{A as pn,f as At,aK as ps,g as Mn,c as Bt,m as ti}from"./_setToString-397d22bb.js";import{t as gs,w as fs,u as ms,P as vs,x as Cs,I as ni}from"./tiny-invariant-023fafff.js";import{f as ys,c as bs}from"./index-1fa256e9.js";import{c as Is,d as qi,g as As}from"./confirm-34976587.js";import{A as ws,_ as er,u as Hr,r as tr}from"./index-b284aaac.js";import{S as xs}from"./schedulePool-cc4538c2.js";import{B as $t}from"./button-909b3565.js";import{o as Ss,b as Es,i as ks,n as Rs,I as Ts}from"./util-b514be53.js";import{a as Rn}from"./index-dc40c6e7.js";import{C as Ls,S as ii}from"./TextArea-3bdaceca.js";import{S as $s}from"./index-37861f16.js";import{a as Bs}from"./progress-f968a1fe.js";var Ds={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 112c17.7 0 32 14.3 32 32v736c0 17.7-14.3 32-32 32H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32zm-40 72H184v656h656V184zM640.01 338.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-square",theme:"outlined"};const Ns=Ds;var _s=function(f,S){return xe.createElement(pn,At(At({},f),{},{ref:S,icon:Ns}))},Ms=xe.forwardRef(_s);const Ps=Ms;var Fs={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M180 176h-60c-4.4 0-8 3.6-8 8v656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V184c0-4.4-3.6-8-8-8zm724 0h-60c-4.4 0-8 3.6-8 8v656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V184c0-4.4-3.6-8-8-8zM785.3 504.3L657.7 403.6a7.23 7.23 0 00-11.7 5.7V476H378v-62.8c0-6-7-9.4-11.7-5.7L238.7 508.3a7.14 7.14 0 000 11.3l127.5 100.8c4.7 3.7 11.7.4 11.7-5.7V548h268v62.8c0 6 7 9.4 11.7 5.7l127.5-100.8c3.8-2.9 3.8-8.5.2-11.4z"}}]},name:"column-width",theme:"outlined"};const Ws=Fs;var Os=function(f,S){return xe.createElement(pn,At(At({},f),{},{ref:S,icon:Ws}))},Gs=xe.forwardRef(Os);const Hs=Gs;var Vs={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-80 600c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V360c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v304zm224 0c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V360c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v304z"}}]},name:"pause-circle",theme:"filled"};const Zs=Vs;var js=function(f,S){return xe.createElement(pn,At(At({},f),{},{ref:S,icon:Zs}))},Ks=xe.forwardRef(js);const zs=Ks;var Xs={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm144.1 454.9L437.7 677.8a8.02 8.02 0 01-12.7-6.5V353.7a8 8 0 0112.7-6.5L656.1 506a7.9 7.9 0 010 12.9z"}}]},name:"play-circle",theme:"filled"};const Ys=Xs;var Js=function(f,S){return xe.createElement(pn,At(At({},f),{},{ref:S,icon:Ys}))},Us=xe.forwardRef(Js);const Qs=Us;var qs={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M926.8 397.1l-396-288a31.81 31.81 0 00-37.6 0l-396 288a31.99 31.99 0 00-11.6 35.8l151.3 466a32 32 0 0030.4 22.1h489.5c13.9 0 26.1-8.9 30.4-22.1l151.3-466c4.2-13.2-.5-27.6-11.7-35.8zM838.6 417l-98.5 32-200-144.7V199.9L838.6 417zM466 567.2l-89.1 122.3-55.2-169.2L466 567.2zm-116.3-96.8L484 373.3v140.8l-134.3-43.7zM512 599.2l93.9 128.9H418.1L512 599.2zm28.1-225.9l134.2 97.1L540.1 514V373.3zM558 567.2l144.3-46.9-55.2 169.2L558 567.2zm-74-367.3v104.4L283.9 449l-98.5-32L484 199.9zM169.3 470.8l86.5 28.1 80.4 246.4-53.8 73.9-113.1-348.4zM327.1 853l50.3-69h269.3l50.3 69H327.1zm414.5-33.8l-53.8-73.9 80.4-246.4 86.5-28.1-113.1 348.4z"}}]},name:"radar-chart",theme:"outlined"};const ea=qs;var ta=function(f,S){return xe.createElement(pn,At(At({},f),{},{ref:S,icon:ea}))},na=xe.forwardRef(ta);const ia=na;function ra(){var p=xe.useRef(!0);return p.current?(p.current=!1,!0):p.current}var oa=function(p,f){var S=xe.useState(f),W=S[0],J=S[1];return W==null?[p,J]:[W,J]};const sa=oa;var aa=ks?window:null,nr=function(p){return!!p.addEventListener},ir=function(p){return!!p.on},la=function(p,f,S,W){S===void 0&&(S=aa),xe.useEffect(function(){if(f&&S)return nr(S)?Ss(S,p,f,W):ir(S)&&S.on(p,f,W),function(){nr(S)?Es(S,p,f,W):ir(S)&&S.off(p,f,W)}},[p,f,S,JSON.stringify(W)])};const ca=la;var da=function(p){return typeof p=="function"?p:typeof p=="string"?function(f){return f.key===p}:p?function(){return!0}:function(){return!1}},ua=function(p,f,S,W){f===void 0&&(f=Rs),S===void 0&&(S={}),W===void 0&&(W=[p]);var J=S.event,N=J===void 0?"keydown":J,s=S.target,E=S.options,Z=xe.useMemo(function(){var b=da(p),R=function($){if(b($))return f($)};return R},W);ca(N,Z,s,E)};const Tn=ua;function ha(p,f,S){if(f===void 0&&(f=10),f<1)throw new Error("Capacity has to be greater than 1, got '"+f+"'");var W=ra(),J=xe.useState(p),N=J[0],s=J[1],E=xe.useRef(S??[]),Z=xe.useRef(0);W&&(E.current.length?(E.current[E.current.length-1]!==p&&E.current.push(p),E.current.length>f&&(E.current=E.current.slice(E.current.length-f))):E.current.push(p),Z.current=E.current.length&&E.current.length-1);var b=xe.useCallback(function($){s(function(F){return $=gs($,F),$!==F&&(Z.currentf&&(E.current=E.current.slice(E.current.length-f))),$})},[N,f]),R=xe.useMemo(function(){return{history:E.current,position:Z.current,capacity:f,back:function($){$===void 0&&($=1),Z.current&&s(function(){return Z.current-=Math.min($,Z.current),E.current[Z.current]})},forward:function($){$===void 0&&($=1),Z.current!==E.current.length-1&&s(function(){return Z.current=Math.min(Z.current+$,E.current.length-1),E.current[Z.current]})},go:function($){$!==Z.current&&s(function(){return Z.current=$<0?Math.max(E.current.length+$,0):Math.min(E.current.length-1,$),E.current[Z.current]})}}},[N]);return[N,b,R]}var pa=function(p){p===void 0&&(p=new Set);var f=xe.useState(p),S=f[0],W=f[1],J=xe.useMemo(function(){var s=function(b){return W(function(R){return new Set(er(Array.from(R),[b]))})},E=function(b){return W(function(R){return new Set(Array.from(R).filter(function($){return $!==b}))})},Z=function(b){return W(function(R){return R.has(b)?new Set(Array.from(R).filter(function($){return $!==b})):new Set(er(Array.from(R),[b]))})};return{add:s,remove:E,toggle:Z,reset:function(){return W(p)},clear:function(){return W(new Set)}}},[W]),N=ws({has:xe.useCallback(function(s){return S.has(s)},[S])},J);return[S,N]};const ga=pa,Vr=["#ff4d4e","#52c41a","#1990ff","#faad13","#9932CD","#871F78","#6B238E","#2F4F4F","#97694F","#B22222","#D9D919","#A67D3D","#8C7853","#A67D3D","#5F9F9F","#D98719","#B87333","#FF7F00","#42426F","#5C4033","#2F4F2F","#4A766E","#4F4F2F","#7093DB","#855E42","#545454","#856363","#D19275","#8E2323","#238E23","#CD7F32","#DBDB70","#C0C0C0","#527F76","#93DB70","#215E21","#4E2F2F","#9F9F5F","#C0D9D9","#A8A8A8","#8F8FBD","#E9C2A6","#32CD32","#E47833","#8E236B","#32CD99","#3232CD","#6B8E23","#EAEAAE","#9370DB","#426F42","#7F00FF","#7FFF00","#70DBDB","#DB7093","#A68064","#2F2F4F","#23238E","#4D4DFF","#FF6EC7","#00009C","#EBC79E","#CFB53B","#FF7F00","#FF2400","#DB70DB","#8FBC8F","#BC8F8F","#EAADEA","#D9D9F3","#5959AB","#6F4242","#BC1717","#238E68","#6B4226","#8E6B23","#E6E8FA","#3299CC","#007FFF","#FF1CAE","#00FF7F","#236B8E","#38B0DE","#DB9370","#D8BFD8","#ADEAEA","#5C4033","#CDCDCD","#4F2F4F","#CC3299","#D8D8BF","#99CC32","#FFB6C1","#FFC0CB","#DC143C","#FFF0F5","#FF69B4","#DA70D6","#FF1493","#D8BFD8","#DDA0DD","#FF00FF","#FF00FF","#8B008B","#800080","#BA55D3","#9400D3","#9932CC","#4B0082","#8A2BE2","#9370DB","#7B68EE","#6A5ACD","#483D8B","#E6E6FA","#F8F8FF","#0000FF","#0000CD","#191970","#00008B","#000080","#4169E1","#6495ED","#B0C4DE","#778899","#708090","#1E90FF","#F0F8FF","#4682B4","#87CEFA","#87CEEB","#00BFFF","#ADD8E6","#B0E0E6","#5F9EA0","#F0FFFF","#E1FFFF","#AFEEEE","#00FFFF","#00FFFF","#00CED1","#2F4F4F","#008B8B","#008080","#48D1CC","#20B2AA","#40E0D0","#7FFFAA","#00FA9A","#F5FFFA","#00FF7F","#3CB371","#2E8B57","#F0FFF0","#90EE90","#98FB98","#8FBC8F","#32CD32","#00FF00","#228B22","#008000","#006400","#7FFF00","#7CFC00","#ADFF2F","#556B2F","#6B8E23","#FAFAD2","#FFFFF0","#FFFFE0","#FFFF00","#808000","#BDB76B","#FFFACD","#EEE8AA","#F0E68C","#FFD700","#FFF8DC","#DAA520","#FFFAF0","#FDF5E6","#F5DEB3","#FFE4B5","#FFA500","#FFEFD5","#FFEBCD","#FAEBD7","#D2B48C","#DEB887","#FFE4C4","#FF8C00","#FAF0E6","#CD853F","#FFDAB9","#F4A460","#D2691E","#8B4513","#FFF5EE","#A0522D","#FFA07A","#FF7F50","#FF4500","#FF6347","#FFE4E1","#FFFAFA","#F08080","#BC8F8F","#CD5C5C","#FF0000","#A52A2A","#DCDCDC","#8B0000","#800000","#F5F5F5","#D3D3D3","#C0C0C0","#A9A9A9","#808080","#696969","#FFFFFF","#FF0000","#00FF00","#0000FF","#FF00FF","#00FFFF","#FFFF00","#000000"];var Zr={exports:{}};/*! +import{r as xe,g as as,j as Re,R as et,_ as je,n as Ui,e as ls,o as cs}from"./umi-37873494.js";import{m as Rt}from"./parser-c740d6a8.js";import{f as Qi,D as ds,F as ei,z as us,B as hs}from"./index-a475ddbb.js";import{A as pn,f as At,aK as ps,g as Mn,c as Bt,m as ti}from"./_setToString-dbbee35a.js";import{t as gs,w as fs,u as ms,P as vs,x as Cs,I as ni}from"./tiny-invariant-5c4293b4.js";import{f as ys,c as bs}from"./index-03b68134.js";import{c as Is,d as qi,g as As}from"./confirm-19f7e7d5.js";import{A as ws,_ as er,u as Hr,r as tr}from"./index-92da7081.js";import{S as xs}from"./schedulePool-cc4538c2.js";import{B as $t}from"./button-1ef38c18.js";import{o as Ss,b as Es,i as ks,n as Rs,I as Ts}from"./util-2d38567b.js";import{a as Rn}from"./index-2899652d.js";import{C as Ls,S as ii}from"./TextArea-27ba039d.js";import{S as $s}from"./index-abb14cca.js";import{a as Bs}from"./progress-096a2c96.js";var Ds={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 112c17.7 0 32 14.3 32 32v736c0 17.7-14.3 32-32 32H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32zm-40 72H184v656h656V184zM640.01 338.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-square",theme:"outlined"};const Ns=Ds;var _s=function(f,S){return xe.createElement(pn,At(At({},f),{},{ref:S,icon:Ns}))},Ms=xe.forwardRef(_s);const Ps=Ms;var Fs={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M180 176h-60c-4.4 0-8 3.6-8 8v656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V184c0-4.4-3.6-8-8-8zm724 0h-60c-4.4 0-8 3.6-8 8v656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V184c0-4.4-3.6-8-8-8zM785.3 504.3L657.7 403.6a7.23 7.23 0 00-11.7 5.7V476H378v-62.8c0-6-7-9.4-11.7-5.7L238.7 508.3a7.14 7.14 0 000 11.3l127.5 100.8c4.7 3.7 11.7.4 11.7-5.7V548h268v62.8c0 6 7 9.4 11.7 5.7l127.5-100.8c3.8-2.9 3.8-8.5.2-11.4z"}}]},name:"column-width",theme:"outlined"};const Ws=Fs;var Os=function(f,S){return xe.createElement(pn,At(At({},f),{},{ref:S,icon:Ws}))},Gs=xe.forwardRef(Os);const Hs=Gs;var Vs={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-80 600c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V360c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v304zm224 0c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V360c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v304z"}}]},name:"pause-circle",theme:"filled"};const Zs=Vs;var js=function(f,S){return xe.createElement(pn,At(At({},f),{},{ref:S,icon:Zs}))},Ks=xe.forwardRef(js);const zs=Ks;var Xs={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm144.1 454.9L437.7 677.8a8.02 8.02 0 01-12.7-6.5V353.7a8 8 0 0112.7-6.5L656.1 506a7.9 7.9 0 010 12.9z"}}]},name:"play-circle",theme:"filled"};const Ys=Xs;var Js=function(f,S){return xe.createElement(pn,At(At({},f),{},{ref:S,icon:Ys}))},Us=xe.forwardRef(Js);const Qs=Us;var qs={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M926.8 397.1l-396-288a31.81 31.81 0 00-37.6 0l-396 288a31.99 31.99 0 00-11.6 35.8l151.3 466a32 32 0 0030.4 22.1h489.5c13.9 0 26.1-8.9 30.4-22.1l151.3-466c4.2-13.2-.5-27.6-11.7-35.8zM838.6 417l-98.5 32-200-144.7V199.9L838.6 417zM466 567.2l-89.1 122.3-55.2-169.2L466 567.2zm-116.3-96.8L484 373.3v140.8l-134.3-43.7zM512 599.2l93.9 128.9H418.1L512 599.2zm28.1-225.9l134.2 97.1L540.1 514V373.3zM558 567.2l144.3-46.9-55.2 169.2L558 567.2zm-74-367.3v104.4L283.9 449l-98.5-32L484 199.9zM169.3 470.8l86.5 28.1 80.4 246.4-53.8 73.9-113.1-348.4zM327.1 853l50.3-69h269.3l50.3 69H327.1zm414.5-33.8l-53.8-73.9 80.4-246.4 86.5-28.1-113.1 348.4z"}}]},name:"radar-chart",theme:"outlined"};const ea=qs;var ta=function(f,S){return xe.createElement(pn,At(At({},f),{},{ref:S,icon:ea}))},na=xe.forwardRef(ta);const ia=na;function ra(){var p=xe.useRef(!0);return p.current?(p.current=!1,!0):p.current}var oa=function(p,f){var S=xe.useState(f),W=S[0],J=S[1];return W==null?[p,J]:[W,J]};const sa=oa;var aa=ks?window:null,nr=function(p){return!!p.addEventListener},ir=function(p){return!!p.on},la=function(p,f,S,W){S===void 0&&(S=aa),xe.useEffect(function(){if(f&&S)return nr(S)?Ss(S,p,f,W):ir(S)&&S.on(p,f,W),function(){nr(S)?Es(S,p,f,W):ir(S)&&S.off(p,f,W)}},[p,f,S,JSON.stringify(W)])};const ca=la;var da=function(p){return typeof p=="function"?p:typeof p=="string"?function(f){return f.key===p}:p?function(){return!0}:function(){return!1}},ua=function(p,f,S,W){f===void 0&&(f=Rs),S===void 0&&(S={}),W===void 0&&(W=[p]);var J=S.event,N=J===void 0?"keydown":J,s=S.target,E=S.options,Z=xe.useMemo(function(){var b=da(p),R=function($){if(b($))return f($)};return R},W);ca(N,Z,s,E)};const Tn=ua;function ha(p,f,S){if(f===void 0&&(f=10),f<1)throw new Error("Capacity has to be greater than 1, got '"+f+"'");var W=ra(),J=xe.useState(p),N=J[0],s=J[1],E=xe.useRef(S??[]),Z=xe.useRef(0);W&&(E.current.length?(E.current[E.current.length-1]!==p&&E.current.push(p),E.current.length>f&&(E.current=E.current.slice(E.current.length-f))):E.current.push(p),Z.current=E.current.length&&E.current.length-1);var b=xe.useCallback(function($){s(function(F){return $=gs($,F),$!==F&&(Z.currentf&&(E.current=E.current.slice(E.current.length-f))),$})},[N,f]),R=xe.useMemo(function(){return{history:E.current,position:Z.current,capacity:f,back:function($){$===void 0&&($=1),Z.current&&s(function(){return Z.current-=Math.min($,Z.current),E.current[Z.current]})},forward:function($){$===void 0&&($=1),Z.current!==E.current.length-1&&s(function(){return Z.current=Math.min(Z.current+$,E.current.length-1),E.current[Z.current]})},go:function($){$!==Z.current&&s(function(){return Z.current=$<0?Math.max(E.current.length+$,0):Math.min(E.current.length-1,$),E.current[Z.current]})}}},[N]);return[N,b,R]}var pa=function(p){p===void 0&&(p=new Set);var f=xe.useState(p),S=f[0],W=f[1],J=xe.useMemo(function(){var s=function(b){return W(function(R){return new Set(er(Array.from(R),[b]))})},E=function(b){return W(function(R){return new Set(Array.from(R).filter(function($){return $!==b}))})},Z=function(b){return W(function(R){return R.has(b)?new Set(Array.from(R).filter(function($){return $!==b})):new Set(er(Array.from(R),[b]))})};return{add:s,remove:E,toggle:Z,reset:function(){return W(p)},clear:function(){return W(new Set)}}},[W]),N=ws({has:xe.useCallback(function(s){return S.has(s)},[S])},J);return[S,N]};const ga=pa,Vr=["#ff4d4e","#52c41a","#1990ff","#faad13","#9932CD","#871F78","#6B238E","#2F4F4F","#97694F","#B22222","#D9D919","#A67D3D","#8C7853","#A67D3D","#5F9F9F","#D98719","#B87333","#FF7F00","#42426F","#5C4033","#2F4F2F","#4A766E","#4F4F2F","#7093DB","#855E42","#545454","#856363","#D19275","#8E2323","#238E23","#CD7F32","#DBDB70","#C0C0C0","#527F76","#93DB70","#215E21","#4E2F2F","#9F9F5F","#C0D9D9","#A8A8A8","#8F8FBD","#E9C2A6","#32CD32","#E47833","#8E236B","#32CD99","#3232CD","#6B8E23","#EAEAAE","#9370DB","#426F42","#7F00FF","#7FFF00","#70DBDB","#DB7093","#A68064","#2F2F4F","#23238E","#4D4DFF","#FF6EC7","#00009C","#EBC79E","#CFB53B","#FF7F00","#FF2400","#DB70DB","#8FBC8F","#BC8F8F","#EAADEA","#D9D9F3","#5959AB","#6F4242","#BC1717","#238E68","#6B4226","#8E6B23","#E6E8FA","#3299CC","#007FFF","#FF1CAE","#00FF7F","#236B8E","#38B0DE","#DB9370","#D8BFD8","#ADEAEA","#5C4033","#CDCDCD","#4F2F4F","#CC3299","#D8D8BF","#99CC32","#FFB6C1","#FFC0CB","#DC143C","#FFF0F5","#FF69B4","#DA70D6","#FF1493","#D8BFD8","#DDA0DD","#FF00FF","#FF00FF","#8B008B","#800080","#BA55D3","#9400D3","#9932CC","#4B0082","#8A2BE2","#9370DB","#7B68EE","#6A5ACD","#483D8B","#E6E6FA","#F8F8FF","#0000FF","#0000CD","#191970","#00008B","#000080","#4169E1","#6495ED","#B0C4DE","#778899","#708090","#1E90FF","#F0F8FF","#4682B4","#87CEFA","#87CEEB","#00BFFF","#ADD8E6","#B0E0E6","#5F9EA0","#F0FFFF","#E1FFFF","#AFEEEE","#00FFFF","#00FFFF","#00CED1","#2F4F4F","#008B8B","#008080","#48D1CC","#20B2AA","#40E0D0","#7FFFAA","#00FA9A","#F5FFFA","#00FF7F","#3CB371","#2E8B57","#F0FFF0","#90EE90","#98FB98","#8FBC8F","#32CD32","#00FF00","#228B22","#008000","#006400","#7FFF00","#7CFC00","#ADFF2F","#556B2F","#6B8E23","#FAFAD2","#FFFFF0","#FFFFE0","#FFFF00","#808000","#BDB76B","#FFFACD","#EEE8AA","#F0E68C","#FFD700","#FFF8DC","#DAA520","#FFFAF0","#FDF5E6","#F5DEB3","#FFE4B5","#FFA500","#FFEFD5","#FFEBCD","#FAEBD7","#D2B48C","#DEB887","#FFE4C4","#FF8C00","#FAF0E6","#CD853F","#FFDAB9","#F4A460","#D2691E","#8B4513","#FFF5EE","#A0522D","#FFA07A","#FF7F50","#FF4500","#FF6347","#FFE4E1","#FFFAFA","#F08080","#BC8F8F","#CD5C5C","#FF0000","#A52A2A","#DCDCDC","#8B0000","#800000","#F5F5F5","#D3D3D3","#C0C0C0","#A9A9A9","#808080","#696969","#FFFFFF","#FF0000","#00FF00","#0000FF","#FF00FF","#00FFFF","#FFFF00","#000000"];var Zr={exports:{}};/*! * jsoneditor.js * * @brief diff --git a/dist/assets/index-07fc0d1f.js b/dist/assets/index-5cf0ced5.js similarity index 96% rename from dist/assets/index-07fc0d1f.js rename to dist/assets/index-5cf0ced5.js index 87035aafc79f97f0d54964a8d87e44f579dc195a..95d3e34ccc26c8743afdd0e01283d23b499682d0 100644 --- a/dist/assets/index-07fc0d1f.js +++ b/dist/assets/index-5cf0ced5.js @@ -1 +1 @@ -import{r as c,j as t}from"./umi-91f9d113.js";const p=({layout:e,positions:o,nameDict:n={},...l})=>{const m=c.useMemo(()=>e.groups.filter(s=>o[s.range[0]]&&o[s.range[1]]).map(s=>{const r=o[s.range[0]],a=o[s.range[1]];return{key:s.key,type:s.group.type,level:s.group.level||0,top:r.y-r.radius,bottom:a.y+a.radius,name:n[s.key]}}),[e,o,n]);return t.jsx("g",{...l,className:"staff-brackets",onClick:()=>{debugger},children:m.map(s=>t.jsxs("g",{className:"group",transform:`translate(${s.level*-1.2}, 0)`,children:[s.type===2&&t.jsxs("g",{className:"bracket",children:[t.jsx("rect",{x:"-1.2",y:s.top,width:"0.45",height:s.bottom-s.top}),t.jsx("g",{transform:`translate(-1.2, ${s.top-.21})`,children:t.jsx("path",{transform:"scale(0.0040, -0.0040)",d:"M0 -56v91c0 12 10 21 22 21h43c164 0 281 136 377 272c10 14 32 -1 22 -15c-103 -145 -222 -369 -399 -369h-65z"})}),t.jsx("g",{transform:`translate(-1.2, ${s.bottom+.21})`,children:t.jsx("path",{transform:"scale(0.0040, -0.0040)",d:"M0 56h65c177 0 296 -224 399 -369c10 -14 -12 -29 -22 -15c-96 136 -213 272 -377 272h-43c-12 0 -22 9 -22 21v91z"})})]}),s.type===3&&t.jsxs("g",{className:"square",children:[t.jsx("line",{x1:"-0.9",x2:"-0.9",y1:s.top,y2:s.bottom,strokeWidth:"0.1"}),t.jsx("line",{x1:"-0.9",x2:"0",y1:s.top,y2:s.top,strokeWidth:"0.1"}),t.jsx("line",{x1:"-0.9",x2:"0",y1:s.bottom,y2:s.bottom,strokeWidth:"0.1"})]}),s.type===1&&t.jsx("g",{className:"brace",transform:`translate(-0.2, ${(s.top+s.bottom)/2})`,children:t.jsx("path",{transform:`scale(0.0040, ${-.004*(s.bottom-s.top)/15.1825})`,d:"M-208 -1336c0 312 124 616 124 912c0 156 -36 300 -144 416c0 4 -4 4 -4 8s4 4 4 8c108 116 144 260 144 416c0 296 -124 600 -124 912c0 212 52 420 196 576c16 16 40 -8 24 -24c-108 -120 -144 -264 -144 -420c0 -292 116 -588 116 -896c0 -212 -48 -416 -188 -572c140 -156 188 -360 188 -572c0 -308 -116 -604 -116 -896c0 -156 36 -300 144 -420c16 -16 -8 -40 -24 -24c-144 156 -196 364 -196 576z"})}),s.name&&t.jsx("g",{className:"name",transform:`translate(-2, ${(s.top+s.bottom)/2+1})`,children:t.jsx("text",{fontSize:2,children:s.name})})]},s.key))})};export{p as S}; +import{r as c,j as t}from"./umi-37873494.js";const p=({layout:e,positions:o,nameDict:n={},...l})=>{const m=c.useMemo(()=>e.groups.filter(s=>o[s.range[0]]&&o[s.range[1]]).map(s=>{const r=o[s.range[0]],a=o[s.range[1]];return{key:s.key,type:s.group.type,level:s.group.level||0,top:r.y-r.radius,bottom:a.y+a.radius,name:n[s.key]}}),[e,o,n]);return t.jsx("g",{...l,className:"staff-brackets",onClick:()=>{debugger},children:m.map(s=>t.jsxs("g",{className:"group",transform:`translate(${s.level*-1.2}, 0)`,children:[s.type===2&&t.jsxs("g",{className:"bracket",children:[t.jsx("rect",{x:"-1.2",y:s.top,width:"0.45",height:s.bottom-s.top}),t.jsx("g",{transform:`translate(-1.2, ${s.top-.21})`,children:t.jsx("path",{transform:"scale(0.0040, -0.0040)",d:"M0 -56v91c0 12 10 21 22 21h43c164 0 281 136 377 272c10 14 32 -1 22 -15c-103 -145 -222 -369 -399 -369h-65z"})}),t.jsx("g",{transform:`translate(-1.2, ${s.bottom+.21})`,children:t.jsx("path",{transform:"scale(0.0040, -0.0040)",d:"M0 56h65c177 0 296 -224 399 -369c10 -14 -12 -29 -22 -15c-96 136 -213 272 -377 272h-43c-12 0 -22 9 -22 21v91z"})})]}),s.type===3&&t.jsxs("g",{className:"square",children:[t.jsx("line",{x1:"-0.9",x2:"-0.9",y1:s.top,y2:s.bottom,strokeWidth:"0.1"}),t.jsx("line",{x1:"-0.9",x2:"0",y1:s.top,y2:s.top,strokeWidth:"0.1"}),t.jsx("line",{x1:"-0.9",x2:"0",y1:s.bottom,y2:s.bottom,strokeWidth:"0.1"})]}),s.type===1&&t.jsx("g",{className:"brace",transform:`translate(-0.2, ${(s.top+s.bottom)/2})`,children:t.jsx("path",{transform:`scale(0.0040, ${-.004*(s.bottom-s.top)/15.1825})`,d:"M-208 -1336c0 312 124 616 124 912c0 156 -36 300 -144 416c0 4 -4 4 -4 8s4 4 4 8c108 116 144 260 144 416c0 296 -124 600 -124 912c0 212 52 420 196 576c16 16 40 -8 24 -24c-108 -120 -144 -264 -144 -420c0 -292 116 -588 116 -896c0 -212 -48 -416 -188 -572c140 -156 188 -360 188 -572c0 -308 -116 -604 -116 -896c0 -156 36 -300 144 -420c16 -16 -8 -40 -24 -24c-144 156 -196 364 -196 576z"})}),s.name&&t.jsx("g",{className:"name",transform:`translate(-2, ${(s.top+s.bottom)/2+1})`,children:t.jsx("text",{fontSize:2,children:s.name})})]},s.key))})};export{p as S}; diff --git a/dist/assets/index-5f31a7de.js b/dist/assets/index-678de628.js similarity index 96% rename from dist/assets/index-5f31a7de.js rename to dist/assets/index-678de628.js index 9649a4038ff6b0275a7573f00f73cb1dcfc61366..4527f0e4f3e8a8e72cb70a19e3f788a3c5a05bab 100644 --- a/dist/assets/index-5f31a7de.js +++ b/dist/assets/index-678de628.js @@ -1 +1 @@ -import{r as i,_ as P,j as v}from"./umi-91f9d113.js";import{p as pe,m as D}from"./parser-f1e7dbfb.js";import{S as be}from"./scheduler-a7fa9c3c.js";import{S as Ce}from"./schedulePool-cc4538c2.js";import{A as Ne}from"./index-81cb47f8.js";import{B as fe}from"./button-909b3565.js";import{A as ke,f as de,c as $,b,C as q,o as Q,_ as Ee,j as we,k as xe,S as Pe,m as Se}from"./_setToString-397d22bb.js";import{T as je,a as Oe}from"./index-f8b1789b.js";import{S as ve,C as Te}from"./TextArea-3bdaceca.js";import{S as $e}from"./index-37861f16.js";import{I as ze,U as he,a as Me}from"./index-0298c320.js";import{J as Le}from"./jszip.min-21813277.js";import{S as _e}from"./index-11479954.js";import{S as Ae}from"./index-07fc0d1f.js";import{a as Re,P as Be}from"./PlaySquareOutlined-f3c772fe.js";import"./Dropdown-d5fff39b.js";import"./progress-f968a1fe.js";import"./DeleteOutlined-0f1ef15a.js";import"./DownloadOutlined-f081b8de.js";var Ie={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM288 604a64 64 0 10128 0 64 64 0 10-128 0zm118-224a48 48 0 1096 0 48 48 0 10-96 0zm158 228a96 96 0 10192 0 96 96 0 10-192 0zm148-314a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"dot-chart",theme:"outlined"};const Fe=Ie;var De=function(t,r){return i.createElement(ke,de(de({},t),{},{ref:r,icon:Fe}))},Ue=i.forwardRef(De);const qe=Ue;var Ye=function(t){var r=t.prefixCls,a=t.className,s=t.style,o=t.size,l=t.shape,n=$(b(b({},"".concat(r,"-lg"),o==="large"),"".concat(r,"-sm"),o==="small")),u=$(b(b(b({},"".concat(r,"-circle"),l==="circle"),"".concat(r,"-square"),l==="square"),"".concat(r,"-round"),l==="round")),c=i.useMemo(function(){return typeof o=="number"?{width:o,height:o,lineHeight:"".concat(o,"px")}:{}},[o]);return i.createElement("span",{className:$(r,n,u,a),style:P(P({},c),s)})};const ee=Ye;var Ke=function(t){var r=t.prefixCls,a=t.className,s=t.active,o=t.shape,l=o===void 0?"circle":o,n=t.size,u=n===void 0?"default":n,c=i.useContext(q),m=c.getPrefixCls,h=m("skeleton",r),p=Q(t,["prefixCls","className"]),C=$(h,"".concat(h,"-element"),b({},"".concat(h,"-active"),s),a);return i.createElement("div",{className:C},i.createElement(ee,P({prefixCls:"".concat(h,"-avatar"),shape:l,size:u},p)))};const We=Ke;var Ge=function(t){var r=t.prefixCls,a=t.className,s=t.active,o=t.block,l=o===void 0?!1:o,n=t.size,u=n===void 0?"default":n,c=i.useContext(q),m=c.getPrefixCls,h=m("skeleton",r),p=Q(t,["prefixCls"]),C=$(h,"".concat(h,"-element"),b(b({},"".concat(h,"-active"),s),"".concat(h,"-block"),l),a);return i.createElement("div",{className:C},i.createElement(ee,P({prefixCls:"".concat(h,"-button"),size:u},p)))};const Je=Ge;var Xe=function(t){var r=t.prefixCls,a=t.className,s=t.style,o=t.active,l=t.children,n=i.useContext(q),u=n.getPrefixCls,c=u("skeleton",r),m=$(c,"".concat(c,"-element"),b({},"".concat(c,"-active"),o),a),h=l??i.createElement(qe,null);return i.createElement("div",{className:m},i.createElement("div",{className:$("".concat(c,"-image"),a),style:s},h))};const He=Xe;var Ze="M365.714286 329.142857q0 45.714286-32.036571 77.677714t-77.677714 32.036571-77.677714-32.036571-32.036571-77.677714 32.036571-77.677714 77.677714-32.036571 77.677714 32.036571 32.036571 77.677714zM950.857143 548.571429l0 256-804.571429 0 0-109.714286 182.857143-182.857143 91.428571 91.428571 292.571429-292.571429zM1005.714286 146.285714l-914.285714 0q-7.460571 0-12.873143 5.412571t-5.412571 12.873143l0 694.857143q0 7.460571 5.412571 12.873143t12.873143 5.412571l914.285714 0q7.460571 0 12.873143-5.412571t5.412571-12.873143l0-694.857143q0-7.460571-5.412571-12.873143t-12.873143-5.412571zM1097.142857 164.571429l0 694.857143q0 37.741714-26.843429 64.585143t-64.585143 26.843429l-914.285714 0q-37.741714 0-64.585143-26.843429t-26.843429-64.585143l0-694.857143q0-37.741714 26.843429-64.585143t64.585143-26.843429l914.285714 0q37.741714 0 64.585143 26.843429t26.843429 64.585143z",Ve=function(t){var r=t.prefixCls,a=t.className,s=t.style,o=t.active,l=i.useContext(q),n=l.getPrefixCls,u=n("skeleton",r),c=$(u,"".concat(u,"-element"),b({},"".concat(u,"-active"),o),a);return i.createElement("div",{className:c},i.createElement("div",{className:$("".concat(u,"-image"),a),style:s},i.createElement("svg",{viewBox:"0 0 1098 1024",xmlns:"http://www.w3.org/2000/svg",className:"".concat(u,"-image-svg")},i.createElement("path",{d:Ze,className:"".concat(u,"-image-path")}))))};const Qe=Ve;var et=function(t){var r=t.prefixCls,a=t.className,s=t.active,o=t.block,l=t.size,n=l===void 0?"default":l,u=i.useContext(q),c=u.getPrefixCls,m=c("skeleton",r),h=Q(t,["prefixCls"]),p=$(m,"".concat(m,"-element"),b(b({},"".concat(m,"-active"),s),"".concat(m,"-block"),o),a);return i.createElement("div",{className:p},i.createElement(ee,P({prefixCls:"".concat(m,"-input"),size:n},h)))};const tt=et;var at=function(t){var r=function(c){var m=t.width,h=t.rows,p=h===void 0?2:h;if(Array.isArray(m))return m[c];if(p-1===c)return m},a=t.prefixCls,s=t.className,o=t.style,l=t.rows,n=Ee(Array(l)).map(function(u,c){return i.createElement("li",{key:c,style:{width:r(c)}})});return i.createElement("ul",{className:$(a,s),style:o},n)};const rt=at;var st=function(t){var r=t.prefixCls,a=t.className,s=t.width,o=t.style;return i.createElement("h3",{className:$(r,a),style:P({width:s},o)})};const nt=st;function ce(e){return e&&we(e)==="object"?e:{}}function it(e,t){return e&&!t?{size:"large",shape:"square"}:{size:"large",shape:"circle"}}function ct(e,t){return!e&&t?{width:"38%"}:e&&t?{width:"50%"}:{}}function ot(e,t){var r={};return(!e||!t)&&(r.width="61%"),!e&&t?r.rows=3:r.rows=2,r}var W=function(t){var r=t.prefixCls,a=t.loading,s=t.className,o=t.style,l=t.children,n=t.avatar,u=n===void 0?!1:n,c=t.title,m=c===void 0?!0:c,h=t.paragraph,p=h===void 0?!0:h,C=t.active,T=t.round,z=i.useContext(q),I=z.getPrefixCls,_=z.direction,S=I("skeleton",r);if(a||!("loading"in t)){var M=!!u,f=!!m,j=!!p,E;if(M){var w=P(P({prefixCls:"".concat(S,"-avatar")},it(f,j)),ce(u));E=i.createElement("div",{className:"".concat(S,"-header")},i.createElement(ee,P({},w)))}var O;if(f||j){var N;if(f){var A=P(P({prefixCls:"".concat(S,"-title")},ct(M,j)),ce(m));N=i.createElement(nt,P({},A))}var R;if(j){var B=P(P({prefixCls:"".concat(S,"-paragraph")},ot(M,f)),ce(p));R=i.createElement(rt,P({},B))}O=i.createElement("div",{className:"".concat(S,"-content")},N,R)}var F=$(S,b(b(b(b({},"".concat(S,"-with-avatar"),M),"".concat(S,"-active"),C),"".concat(S,"-rtl"),_==="rtl"),"".concat(S,"-round"),T),s);return i.createElement("div",{className:F,style:o},E,O)}return typeof l<"u"?l:null};W.Button=Je;W.Avatar=We;W.Input=tt;W.Image=Qe;W.Node=He;const lt=W;var ut=globalThis&&globalThis.__rest||function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,a=Object.getOwnPropertySymbols(e);s((e==null?void 0:e.pages.slice(0,t).reduce((a,s)=>a+s.systems.length,0))||0)+r,Ct=e=>{const t=e.source;if(!(t!=null&&t.w)||!(t!=null&&t.h))return"";const r=t.interval||1,a=t.matrix||[1,0,0,1,0,0];return`translate(${e.w/2} ${e.h/2}) matrix(${a.join(" ")}) scale(${1/r}) translate(${-t.w/2} ${-t.h/2})`},Nt=e=>[...e.pages.map(t=>{var r;return(r=t.source)==null?void 0:r.url}),...e.pages.flatMap(t=>t.systems.flatMap(r=>r.staves.map(a=>{var s;return(s=a.image)==null?void 0:s.url})))].filter(Boolean),oe=e=>{if((e==null?void 0:e.format)!=="LiveScore"||(e==null?void 0:e.version)!==1||!Array.isArray(e==null?void 0:e.pages))throw new Error("Invalid LiveScore file.");return e},kt=async(e,t)=>{const r=[];return await Promise.all(Nt(e).map(async a=>{if(!a||/^\w+:/.test(a)||a.startsWith("/"))return;const s=t.files[a];if(!s)throw new Error(`Missing asset: ${a}`);const o=await s.async("blob"),l=URL.createObjectURL(o);r.push(l),e.pages.forEach(n=>{var u;((u=n.source)==null?void 0:u.url)===a&&(n.source.url=l),n.systems.forEach(c=>{c.staves.forEach(m=>{var h;((h=m.image)==null?void 0:h.url)===a&&(m.image.url=l)})})})})),r},Et=async e=>{if(/\.json$/i.test(e.name)||e.type==="application/json")return{liveScore:oe(JSON.parse(await e.text())),objectUrls:[]};const t=await Le.loadAsync(e),r=t.files["index.json"];if(!r)throw new Error("No index.json found in LiveScore package.");const a=oe(JSON.parse(await r.async("text"))),s=await kt(a,t);return{liveScore:a,objectUrls:s}},wt=(e,t)=>{var a;const r=JSON.parse(JSON.stringify(t));(a=r.pages)==null||a.forEach(s=>{var o,l;(l=(o=s.source)==null?void 0:o.url)!=null&&l.startsWith("blob:")&&(s.source.url=""),s.systems.forEach(n=>{n.staves.forEach(u=>{var c,m;(m=(c=u.image)==null?void 0:c.url)!=null&&m.startsWith("blob:")&&(u.image.url="")})})}),sessionStorage.setItem(ue,JSON.stringify({fileName:e,liveScore:r}))},Pt=()=>{const e=sessionStorage.getItem(ue);if(!e)return null;const t=JSON.parse(e);return{fileName:t.fileName||"Restored LiveScore",liveScore:oe(t.liveScore)}},St=e=>{switch(e){case"program":return"programChange";case"note-on":return"noteOn";case"note-off":return"noteOff";case"control":return"controller";case"pitch-bend":return"pitchBend";case"aftertouch":return"channelAftertouch";default:return e}},jt=e=>{var s,o,l;if(!((s=e==null?void 0:e.events)!=null&&s.length))return null;const t=Math.max(1,...e.events.map(n=>Number.isFinite(n.track)?n.track+1:1)),r=Array(t).fill(null).map(()=>[]);e.events.forEach(n=>{var c;const u=Number.isFinite(n.track)?n.track:0;r[u].push({ticks:n.tick,type:"channel",subtype:St(n.type),...Number.isFinite(n.channel)?{channel:n.channel}:{},...Number.isFinite(n.note)?{noteNumber:n.note}:{},...Number.isFinite(n.velocity)?{velocity:n.velocity}:{},...Number.isFinite(n.program)?{programNumber:n.program}:{},...Number.isFinite(n.controller)?{controllerType:n.controller}:{},...Number.isFinite(n.value)?{value:n.value}:{},...(c=n.ids)!=null&&c.length?{ids:n.ids.map(String)}:{}})}),(o=e.tempos)==null||o.forEach(n=>{r[0].push({ticks:n.tick,type:"meta",subtype:"setTempo",microsecondsPerBeat:n.tempo})}),r.forEach(n=>{n.sort((c,m)=>c.ticks-m.ticks||(c.subtype==="noteOff"?-1:0));let u=0;n.forEach(c=>{c.deltaTime=Math.max(c.ticks-u,0),u=c.ticks}),n.push({deltaTime:Math.max((e.endTick||u)-u,0),type:"meta",subtype:"endOfTrack"})});const a=D.MusicNotation.Notation.parseMidi({header:{formatType:1,ticksPerBeat:e.ticksPerBeat||480},tracks:r});return a.measures=(l=e.measures)==null?void 0:l.map(n=>({index:n.i,startTick:n.t1,endTick:n.t2})),a},Ot=e=>{const t=new Map;return e==null||e.pages.forEach((r,a)=>{r.systems.forEach((s,o)=>{const l=me(e,a,o);s.staves.forEach(n=>{var u;(u=n.measures)==null||u.forEach((c,m)=>{var p,C;const h=((p=s.bars)==null?void 0:p[m])??s.w;(C=c.tokens)==null||C.forEach(T=>{T.id!==void 0&&t.set(String(T.id),{system:l,measure:m,x:T.x,endX:h})})})})})}),t},Tt=e=>{var r;const t=(r=e==null?void 0:e.playback)==null?void 0:r.positions;return t!=null&&t.length?new Map(t.map(a=>[String(a.id),{system:a.system,measure:a.measure,x:a.x,endX:a.endX}])):Ot(e)},$t=e=>{var a,s;const t=Tt(e),r={};return(s=(a=e==null?void 0:e.playback)==null?void 0:a.events)==null||s.forEach(o=>{var n;if(o.type!=="note-on"||!((n=o.ids)!=null&&n.length))return;const l=o.ids.map(u=>t.get(String(u))).filter(Boolean);l.length&&(r[o.tick]=r[o.tick]||[],r[o.tick].push(...l))}),Object.keys(r).length?be.createFromTokenTable(r,e.playback.endTick):null},zt=(e,t)=>{if(!e)return 0;let r=0;for(let a=0;a=r&&t{var r;if(!e)return null;for(let a=0;an.x1<=t.x&&n.x2>=t.x);return!l||!Number.isFinite(l.t1)||!Number.isFinite(l.t2)||l.x2===l.x1?null:l.t1+(t.x-l.x1)*(l.t2-l.t1)/(l.x2-l.x1)}}return null},Lt=(e,t,r)=>{const a=e==null?void 0:e.lookupTick(r);if(Number.isFinite(a))return{position:e.lookupPosition(a),tick:a};const o=((e==null?void 0:e.tickTable.filter(n=>n.system===r.system))||[]).flatMap(n=>[n.x,n.endX]).filter(Number.isFinite);if(o.length){const n=o.reduce((m,h)=>Math.abs(h-r.x){var n,u;return v.jsxs("svg",{className:"live-score-page",viewBox:`0 0 ${t.w} ${t.h}`,children:[v.jsx(_e,{}),a&&((n=t.source)==null?void 0:n.url)&&v.jsx("image",{href:t.source.url,width:t.source.w,height:t.source.h,transform:Ct(t),opacity:.35,preserveAspectRatio:"none"}),!a&&((u=t.tokens)==null?void 0:u.map((c,m)=>v.jsx("text",{className:`live-score-page-token ${c.textType}`,x:c.x,y:c.y,dominantBaseline:"hanging",textAnchor:"middle",style:{fontSize:c.fontSize},children:c.text},c.id??m))),t.systems.map((c,m)=>{var M;const h=me(e,r,m),p=c.staves[0],C=c.staves.at(-1),T=((p==null?void 0:p.y)??0)+((p==null?void 0:p.staffY)??0)-2,z=((C==null?void 0:C.y)??0)+((C==null?void 0:C.staffY)??0)+2,I=c.staves.map(f=>({y:f.y+f.staffY,radius:2})),_=s&&c.staffMask!==void 0?s.mask(c.staffMask):null,S=f=>{const j=f.currentTarget,E=j.getBoundingClientRect(),w=j.getBBox(),O=(f.clientX-E.left)/E.width*w.width;l({system:h,x:O})};return v.jsxs("g",{className:"live-score-system",transform:`translate(${c.x}, ${c.y})`,children:[c.staves.map((f,j)=>{var E,w,O;return v.jsxs("g",{className:"live-score-staff",transform:`translate(0, ${f.y})`,children:[!a&&((E=f.image)==null?void 0:E.url)&&v.jsx("image",{className:"background",href:f.image.url,x:f.image.x,y:f.image.y,width:f.image.width,height:f.image.height}),[-2,-1,0,1,2].map(N=>v.jsx("line",{x1:"0",x2:c.w,y1:f.staffY+N,y2:f.staffY+N},N)),(w=f.additionalLines)==null?void 0:w.map((N,A)=>v.jsx("line",{x1:N.left,x2:N.right,y1:f.staffY+N.n,y2:f.staffY+N.n},A)),(O=f.measures)==null?void 0:O.map((N,A)=>{var R;return v.jsx("g",{children:(R=N.tokens)==null?void 0:R.map((B,F)=>v.jsx("use",{id:B.id!==void 0?String(B.id):void 0,href:`#score-token-def-${B.t}`,x:B.x,y:f.staffY+B.y},F))},A)})]},j)}),!a&&((M=c.bars)==null?void 0:M.flatMap((f,j)=>[...c.staves.map((E,w)=>v.jsx("line",{className:"bar",x1:f,x2:f,y1:E.y+E.staffY-2,y2:E.y+E.staffY+2},`${j}-staff-${w}`)),...((_==null?void 0:_.conjunctions)||[]).map((E,w)=>{const O=c.staves[w],N=c.staves[w+1];return!O||!N?null:v.jsx("line",{className:`bar staff-layout-measure-bar${E===1?" dashed":""}${E===0?" blank":""}`,x1:f,x2:f,y1:O.y+O.staffY+2,y2:N.y+N.staffY-2},`${j}-conjunction-${w}`)})])),!a&&s&&c.staffMask!==void 0&&v.jsxs(v.Fragment,{children:[c.staves.length>=2&&v.jsx("line",{className:"connection",x1:0,x2:0,y1:T,y2:z}),v.jsx(Ae,{layout:s.mask(c.staffMask),positions:I})]}),(o==null?void 0:o.system)===h&&v.jsx("line",{className:"cursor",x1:o.x,x2:o.x,y1:T,y2:z}),v.jsx("rect",{className:"live-score-system-hit",x:0,y:T,width:c.w,height:z-T,onClick:S})]},m)})]})},At=()=>{const[e,t]=i.useState(),[r,a]=i.useState(""),[s,o]=i.useState([]),[l,n]=i.useState(!0),[u,c]=i.useState(!1),[m,h]=i.useState(!1),[p,C]=i.useState(!1),[T,z]=i.useState(!1),[I,_]=i.useState(0),[S,M]=i.useState(null),f=i.useRef(null),j=i.useRef(null),E=i.useRef(new Ce(performance)),w=i.useRef([]),O=i.useRef(null),N=i.useRef(0),A=i.useMemo(()=>jt(e==null?void 0:e.playback),[e]),R=i.useMemo(()=>$t(e),[e]),B=i.useMemo(()=>e!=null&&e.staffLayout?pe(e.staffLayout):null,[e==null?void 0:e.staffLayout]),F=!!(e!=null&&e.pages.some(d=>{var y;return(y=d.source)==null?void 0:y.url})),te=!!(e!=null&&e.pages.some(d=>d.systems.some(y=>y.staves.some(x=>{var g;return(g=x.image)==null?void 0:g.url})))),G=(S==null?void 0:S.tick)===I?S:(R==null?void 0:R.lookupPosition(I))||null,k=G?zt(e,G.system):null;i.useEffect(()=>{j.current=R},[R]),i.useEffect(()=>{var d;k===null||k===O.current||(O.current=k,(d=w.current[k])==null||d.scrollIntoView({behavior:"smooth",inline:"center",block:"nearest"}))},[k]),i.useEffect(()=>{try{const d=Pt();if(!d)return;t(d.liveScore),a(d.fileName)}catch{sessionStorage.removeItem(ue)}},[]),i.useEffect(()=>{D.MidiAudio.WebAudio.empty()?D.MidiAudio.loadPlugin({soundfontUrl:"/soundfont/",api:"webaudio"}).then(()=>z(!0)):z(!0)},[]),i.useEffect(()=>()=>s.forEach(d=>URL.revokeObjectURL(d)),[s]),i.useEffect(()=>{var y,x;if(!A)return;const d=((y=f.current)==null?void 0:y.progressTicks)||0;return(x=f.current)==null||x.dispose(),f.current=new D.MidiPlayer(A,{cacheSpan:200,onMidi:(g,L)=>{let Y;g.subtype==="noteOn"?(D.MidiAudio.noteOn(g.channel,g.noteNumber,g.velocity,L),Y=()=>{var U;return(U=g.ids)==null?void 0:U.forEach(K=>{var X;return(X=document.getElementById(K))==null?void 0:X.classList.add("notePlayOn")})}):g.subtype==="noteOff"&&(D.MidiAudio.noteOff(g.channel,g.noteNumber,L),Y=()=>{var U;return(U=g.ids)==null?void 0:U.forEach(K=>{var X;return(X=document.getElementById(K))==null?void 0:X.classList.remove("notePlayOn")})}),Y&&E.current.appendTask(L,Y)},onPlayFinish:()=>{C(!1),M(null),_(0),document.querySelectorAll(".notePlayOn").forEach(g=>g.classList.remove("notePlayOn"))}}),f.current.progressTicks=d,()=>{var g;return(g=f.current)==null?void 0:g.dispose()}},[A]);const ae=async d=>(await Z(d),he.LIST_IGNORE),H=async d=>{const y=Lt(j.current,e,d);if(!y||!f.current)return;const x=f.current.isPlaying;x&&(f.current.pause(),await new Promise(g=>setTimeout(g,0))),document.querySelectorAll(".notePlayOn").forEach(g=>g.classList.remove("notePlayOn")),f.current.progressTicks=y.tick,M({...y.position,tick:y.tick}),_(y.tick),x&&J()},Z=async d=>{var y;c(!0);try{const x=await Et(d);s.forEach(g=>URL.revokeObjectURL(g)),(y=f.current)==null||y.pause(),document.querySelectorAll(".notePlayOn").forEach(g=>g.classList.remove("notePlayOn")),o(x.objectUrls),t(x.liveScore),a(d.name),wt(d.name,x.liveScore),O.current=null,C(!1),M(null),_(0)}catch(x){Se.error((x==null?void 0:x.message)||"Failed to load LiveScore.")}finally{c(!1)}},J=async()=>{var d,y,x,g,L;(d=f.current)!=null&&d.isPlaying?(f.current.pause(),C(!1)):((x=(y=D.MidiAudio.WebAudio).needsWarmup)!=null&&x.call(y)&&await((L=(g=D.MidiAudio.WebAudio).awaitWarmup)==null?void 0:L.call(g)),f.current.play({nextFrame:()=>new Promise(Y=>requestAnimationFrame(()=>{var K;const U=((K=f.current)==null?void 0:K.progressTicks)||0;M(null),_(U),Y()}))}),C(!0))},V=d=>d.dataTransfer.types.includes("Files"),re=d=>{d.preventDefault(),V(d)&&(N.current+=1,h(!0))},se=d=>{d.preventDefault()},ne=d=>{d.preventDefault(),N.current=Math.max(N.current-1,0),N.current===0&&h(!1)},ie=async d=>{var x;d.preventDefault(),N.current=0,h(!1);const y=(x=d.dataTransfer.files)==null?void 0:x[0];y&&await Z(y)};return v.jsxs("div",{className:"live-score-viewer",onDragEnter:re,onDragOver:se,onDragLeave:ne,onDrop:ie,children:[m&&v.jsxs("div",{className:"live-score-drop-mask",children:[v.jsx(ze,{}),v.jsx("div",{children:"Drop LiveScore ZIP/JSON to open"})]}),v.jsx(ge,{className:"live-score-controls",children:v.jsxs(ve,{direction:"vertical",size:"middle",style:{width:"100%"},children:[v.jsxs(ve,{wrap:!0,align:"center",children:[v.jsx(bt,{level:4,style:{margin:0},children:"LiveScore"}),v.jsx(he,{accept:".livescore.zip,.zip,.json,application/json,application/zip",showUploadList:!1,beforeUpload:ae,multiple:!1,children:v.jsx(fe,{icon:v.jsx(Me,{}),children:"Open file"})}),v.jsx(fe,{icon:p?v.jsx(Re,{}):v.jsx(Be,{}),onClick:J,disabled:!A||!T,children:p?"Pause":"Play"}),v.jsx(Te,{checked:l,onChange:d=>n(d.target.checked),disabled:!F&&!te,children:"Original image"}),v.jsx(pt,{type:"secondary",children:r||"Drop a LiveScore ZIP/JSON anywhere"})]}),e&&!A&&v.jsx(Ne,{type:"info",showIcon:!0,message:"This LiveScore has no playback events."})]})}),v.jsx("div",{className:"live-score-stage-wrap",children:v.jsx($e,{spinning:u,wrapperClassName:"live-score-spin",children:v.jsx(ge,{className:"live-score-stage",children:e?v.jsx("div",{className:"live-score-pages",children:e.pages.map((d,y)=>v.jsx("div",{className:"live-score-page-frame",ref:x=>{x&&(w.current[y]=x)},children:v.jsx(_t,{liveScore:e,page:d,pageIndex:y,showSource:l,staffLayout:B,cursor:G,onSeekPosition:H})},y))}):v.jsx("div",{className:"live-score-empty",children:"Upload a LiveScore package to preview display and playback."})})})})]})},aa=i.memo(At);export{aa as default}; +import{r as i,_ as P,j as v}from"./umi-37873494.js";import{p as pe,m as D}from"./parser-c740d6a8.js";import{S as be}from"./scheduler-a7fa9c3c.js";import{S as Ce}from"./schedulePool-cc4538c2.js";import{A as Ne}from"./index-cc0634fc.js";import{B as fe}from"./button-1ef38c18.js";import{A as ke,f as de,c as $,b,C as q,o as Q,_ as Ee,j as we,k as xe,S as Pe,m as Se}from"./_setToString-dbbee35a.js";import{T as je,a as Oe}from"./index-da399111.js";import{S as ve,C as Te}from"./TextArea-27ba039d.js";import{S as $e}from"./index-abb14cca.js";import{I as ze,U as he,a as Me}from"./index-19199d65.js";import{J as Le}from"./jszip.min-ed3d3f78.js";import{S as _e}from"./index-6cc9bc74.js";import{S as Ae}from"./index-5cf0ced5.js";import{a as Re,P as Be}from"./PlaySquareOutlined-04ce0d9a.js";import"./Dropdown-ba03bf54.js";import"./progress-096a2c96.js";import"./DeleteOutlined-a45fceaa.js";import"./DownloadOutlined-80f8a347.js";var Ie={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM288 604a64 64 0 10128 0 64 64 0 10-128 0zm118-224a48 48 0 1096 0 48 48 0 10-96 0zm158 228a96 96 0 10192 0 96 96 0 10-192 0zm148-314a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"dot-chart",theme:"outlined"};const Fe=Ie;var De=function(t,r){return i.createElement(ke,de(de({},t),{},{ref:r,icon:Fe}))},Ue=i.forwardRef(De);const qe=Ue;var Ye=function(t){var r=t.prefixCls,a=t.className,s=t.style,o=t.size,l=t.shape,n=$(b(b({},"".concat(r,"-lg"),o==="large"),"".concat(r,"-sm"),o==="small")),u=$(b(b(b({},"".concat(r,"-circle"),l==="circle"),"".concat(r,"-square"),l==="square"),"".concat(r,"-round"),l==="round")),c=i.useMemo(function(){return typeof o=="number"?{width:o,height:o,lineHeight:"".concat(o,"px")}:{}},[o]);return i.createElement("span",{className:$(r,n,u,a),style:P(P({},c),s)})};const ee=Ye;var Ke=function(t){var r=t.prefixCls,a=t.className,s=t.active,o=t.shape,l=o===void 0?"circle":o,n=t.size,u=n===void 0?"default":n,c=i.useContext(q),m=c.getPrefixCls,h=m("skeleton",r),p=Q(t,["prefixCls","className"]),C=$(h,"".concat(h,"-element"),b({},"".concat(h,"-active"),s),a);return i.createElement("div",{className:C},i.createElement(ee,P({prefixCls:"".concat(h,"-avatar"),shape:l,size:u},p)))};const We=Ke;var Ge=function(t){var r=t.prefixCls,a=t.className,s=t.active,o=t.block,l=o===void 0?!1:o,n=t.size,u=n===void 0?"default":n,c=i.useContext(q),m=c.getPrefixCls,h=m("skeleton",r),p=Q(t,["prefixCls"]),C=$(h,"".concat(h,"-element"),b(b({},"".concat(h,"-active"),s),"".concat(h,"-block"),l),a);return i.createElement("div",{className:C},i.createElement(ee,P({prefixCls:"".concat(h,"-button"),size:u},p)))};const Je=Ge;var Xe=function(t){var r=t.prefixCls,a=t.className,s=t.style,o=t.active,l=t.children,n=i.useContext(q),u=n.getPrefixCls,c=u("skeleton",r),m=$(c,"".concat(c,"-element"),b({},"".concat(c,"-active"),o),a),h=l??i.createElement(qe,null);return i.createElement("div",{className:m},i.createElement("div",{className:$("".concat(c,"-image"),a),style:s},h))};const He=Xe;var Ze="M365.714286 329.142857q0 45.714286-32.036571 77.677714t-77.677714 32.036571-77.677714-32.036571-32.036571-77.677714 32.036571-77.677714 77.677714-32.036571 77.677714 32.036571 32.036571 77.677714zM950.857143 548.571429l0 256-804.571429 0 0-109.714286 182.857143-182.857143 91.428571 91.428571 292.571429-292.571429zM1005.714286 146.285714l-914.285714 0q-7.460571 0-12.873143 5.412571t-5.412571 12.873143l0 694.857143q0 7.460571 5.412571 12.873143t12.873143 5.412571l914.285714 0q7.460571 0 12.873143-5.412571t5.412571-12.873143l0-694.857143q0-7.460571-5.412571-12.873143t-12.873143-5.412571zM1097.142857 164.571429l0 694.857143q0 37.741714-26.843429 64.585143t-64.585143 26.843429l-914.285714 0q-37.741714 0-64.585143-26.843429t-26.843429-64.585143l0-694.857143q0-37.741714 26.843429-64.585143t64.585143-26.843429l914.285714 0q37.741714 0 64.585143 26.843429t26.843429 64.585143z",Ve=function(t){var r=t.prefixCls,a=t.className,s=t.style,o=t.active,l=i.useContext(q),n=l.getPrefixCls,u=n("skeleton",r),c=$(u,"".concat(u,"-element"),b({},"".concat(u,"-active"),o),a);return i.createElement("div",{className:c},i.createElement("div",{className:$("".concat(u,"-image"),a),style:s},i.createElement("svg",{viewBox:"0 0 1098 1024",xmlns:"http://www.w3.org/2000/svg",className:"".concat(u,"-image-svg")},i.createElement("path",{d:Ze,className:"".concat(u,"-image-path")}))))};const Qe=Ve;var et=function(t){var r=t.prefixCls,a=t.className,s=t.active,o=t.block,l=t.size,n=l===void 0?"default":l,u=i.useContext(q),c=u.getPrefixCls,m=c("skeleton",r),h=Q(t,["prefixCls"]),p=$(m,"".concat(m,"-element"),b(b({},"".concat(m,"-active"),s),"".concat(m,"-block"),o),a);return i.createElement("div",{className:p},i.createElement(ee,P({prefixCls:"".concat(m,"-input"),size:n},h)))};const tt=et;var at=function(t){var r=function(c){var m=t.width,h=t.rows,p=h===void 0?2:h;if(Array.isArray(m))return m[c];if(p-1===c)return m},a=t.prefixCls,s=t.className,o=t.style,l=t.rows,n=Ee(Array(l)).map(function(u,c){return i.createElement("li",{key:c,style:{width:r(c)}})});return i.createElement("ul",{className:$(a,s),style:o},n)};const rt=at;var st=function(t){var r=t.prefixCls,a=t.className,s=t.width,o=t.style;return i.createElement("h3",{className:$(r,a),style:P({width:s},o)})};const nt=st;function ce(e){return e&&we(e)==="object"?e:{}}function it(e,t){return e&&!t?{size:"large",shape:"square"}:{size:"large",shape:"circle"}}function ct(e,t){return!e&&t?{width:"38%"}:e&&t?{width:"50%"}:{}}function ot(e,t){var r={};return(!e||!t)&&(r.width="61%"),!e&&t?r.rows=3:r.rows=2,r}var W=function(t){var r=t.prefixCls,a=t.loading,s=t.className,o=t.style,l=t.children,n=t.avatar,u=n===void 0?!1:n,c=t.title,m=c===void 0?!0:c,h=t.paragraph,p=h===void 0?!0:h,C=t.active,T=t.round,z=i.useContext(q),I=z.getPrefixCls,_=z.direction,S=I("skeleton",r);if(a||!("loading"in t)){var M=!!u,f=!!m,j=!!p,E;if(M){var w=P(P({prefixCls:"".concat(S,"-avatar")},it(f,j)),ce(u));E=i.createElement("div",{className:"".concat(S,"-header")},i.createElement(ee,P({},w)))}var O;if(f||j){var N;if(f){var A=P(P({prefixCls:"".concat(S,"-title")},ct(M,j)),ce(m));N=i.createElement(nt,P({},A))}var R;if(j){var B=P(P({prefixCls:"".concat(S,"-paragraph")},ot(M,f)),ce(p));R=i.createElement(rt,P({},B))}O=i.createElement("div",{className:"".concat(S,"-content")},N,R)}var F=$(S,b(b(b(b({},"".concat(S,"-with-avatar"),M),"".concat(S,"-active"),C),"".concat(S,"-rtl"),_==="rtl"),"".concat(S,"-round"),T),s);return i.createElement("div",{className:F,style:o},E,O)}return typeof l<"u"?l:null};W.Button=Je;W.Avatar=We;W.Input=tt;W.Image=Qe;W.Node=He;const lt=W;var ut=globalThis&&globalThis.__rest||function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,a=Object.getOwnPropertySymbols(e);s((e==null?void 0:e.pages.slice(0,t).reduce((a,s)=>a+s.systems.length,0))||0)+r,Ct=e=>{const t=e.source;if(!(t!=null&&t.w)||!(t!=null&&t.h))return"";const r=t.interval||1,a=t.matrix||[1,0,0,1,0,0];return`translate(${e.w/2} ${e.h/2}) matrix(${a.join(" ")}) scale(${1/r}) translate(${-t.w/2} ${-t.h/2})`},Nt=e=>[...e.pages.map(t=>{var r;return(r=t.source)==null?void 0:r.url}),...e.pages.flatMap(t=>t.systems.flatMap(r=>r.staves.map(a=>{var s;return(s=a.image)==null?void 0:s.url})))].filter(Boolean),oe=e=>{if((e==null?void 0:e.format)!=="LiveScore"||(e==null?void 0:e.version)!==1||!Array.isArray(e==null?void 0:e.pages))throw new Error("Invalid LiveScore file.");return e},kt=async(e,t)=>{const r=[];return await Promise.all(Nt(e).map(async a=>{if(!a||/^\w+:/.test(a)||a.startsWith("/"))return;const s=t.files[a];if(!s)throw new Error(`Missing asset: ${a}`);const o=await s.async("blob"),l=URL.createObjectURL(o);r.push(l),e.pages.forEach(n=>{var u;((u=n.source)==null?void 0:u.url)===a&&(n.source.url=l),n.systems.forEach(c=>{c.staves.forEach(m=>{var h;((h=m.image)==null?void 0:h.url)===a&&(m.image.url=l)})})})})),r},Et=async e=>{if(/\.json$/i.test(e.name)||e.type==="application/json")return{liveScore:oe(JSON.parse(await e.text())),objectUrls:[]};const t=await Le.loadAsync(e),r=t.files["index.json"];if(!r)throw new Error("No index.json found in LiveScore package.");const a=oe(JSON.parse(await r.async("text"))),s=await kt(a,t);return{liveScore:a,objectUrls:s}},wt=(e,t)=>{var a;const r=JSON.parse(JSON.stringify(t));(a=r.pages)==null||a.forEach(s=>{var o,l;(l=(o=s.source)==null?void 0:o.url)!=null&&l.startsWith("blob:")&&(s.source.url=""),s.systems.forEach(n=>{n.staves.forEach(u=>{var c,m;(m=(c=u.image)==null?void 0:c.url)!=null&&m.startsWith("blob:")&&(u.image.url="")})})}),sessionStorage.setItem(ue,JSON.stringify({fileName:e,liveScore:r}))},Pt=()=>{const e=sessionStorage.getItem(ue);if(!e)return null;const t=JSON.parse(e);return{fileName:t.fileName||"Restored LiveScore",liveScore:oe(t.liveScore)}},St=e=>{switch(e){case"program":return"programChange";case"note-on":return"noteOn";case"note-off":return"noteOff";case"control":return"controller";case"pitch-bend":return"pitchBend";case"aftertouch":return"channelAftertouch";default:return e}},jt=e=>{var s,o,l;if(!((s=e==null?void 0:e.events)!=null&&s.length))return null;const t=Math.max(1,...e.events.map(n=>Number.isFinite(n.track)?n.track+1:1)),r=Array(t).fill(null).map(()=>[]);e.events.forEach(n=>{var c;const u=Number.isFinite(n.track)?n.track:0;r[u].push({ticks:n.tick,type:"channel",subtype:St(n.type),...Number.isFinite(n.channel)?{channel:n.channel}:{},...Number.isFinite(n.note)?{noteNumber:n.note}:{},...Number.isFinite(n.velocity)?{velocity:n.velocity}:{},...Number.isFinite(n.program)?{programNumber:n.program}:{},...Number.isFinite(n.controller)?{controllerType:n.controller}:{},...Number.isFinite(n.value)?{value:n.value}:{},...(c=n.ids)!=null&&c.length?{ids:n.ids.map(String)}:{}})}),(o=e.tempos)==null||o.forEach(n=>{r[0].push({ticks:n.tick,type:"meta",subtype:"setTempo",microsecondsPerBeat:n.tempo})}),r.forEach(n=>{n.sort((c,m)=>c.ticks-m.ticks||(c.subtype==="noteOff"?-1:0));let u=0;n.forEach(c=>{c.deltaTime=Math.max(c.ticks-u,0),u=c.ticks}),n.push({deltaTime:Math.max((e.endTick||u)-u,0),type:"meta",subtype:"endOfTrack"})});const a=D.MusicNotation.Notation.parseMidi({header:{formatType:1,ticksPerBeat:e.ticksPerBeat||480},tracks:r});return a.measures=(l=e.measures)==null?void 0:l.map(n=>({index:n.i,startTick:n.t1,endTick:n.t2})),a},Ot=e=>{const t=new Map;return e==null||e.pages.forEach((r,a)=>{r.systems.forEach((s,o)=>{const l=me(e,a,o);s.staves.forEach(n=>{var u;(u=n.measures)==null||u.forEach((c,m)=>{var p,C;const h=((p=s.bars)==null?void 0:p[m])??s.w;(C=c.tokens)==null||C.forEach(T=>{T.id!==void 0&&t.set(String(T.id),{system:l,measure:m,x:T.x,endX:h})})})})})}),t},Tt=e=>{var r;const t=(r=e==null?void 0:e.playback)==null?void 0:r.positions;return t!=null&&t.length?new Map(t.map(a=>[String(a.id),{system:a.system,measure:a.measure,x:a.x,endX:a.endX}])):Ot(e)},$t=e=>{var a,s;const t=Tt(e),r={};return(s=(a=e==null?void 0:e.playback)==null?void 0:a.events)==null||s.forEach(o=>{var n;if(o.type!=="note-on"||!((n=o.ids)!=null&&n.length))return;const l=o.ids.map(u=>t.get(String(u))).filter(Boolean);l.length&&(r[o.tick]=r[o.tick]||[],r[o.tick].push(...l))}),Object.keys(r).length?be.createFromTokenTable(r,e.playback.endTick):null},zt=(e,t)=>{if(!e)return 0;let r=0;for(let a=0;a=r&&t{var r;if(!e)return null;for(let a=0;an.x1<=t.x&&n.x2>=t.x);return!l||!Number.isFinite(l.t1)||!Number.isFinite(l.t2)||l.x2===l.x1?null:l.t1+(t.x-l.x1)*(l.t2-l.t1)/(l.x2-l.x1)}}return null},Lt=(e,t,r)=>{const a=e==null?void 0:e.lookupTick(r);if(Number.isFinite(a))return{position:e.lookupPosition(a),tick:a};const o=((e==null?void 0:e.tickTable.filter(n=>n.system===r.system))||[]).flatMap(n=>[n.x,n.endX]).filter(Number.isFinite);if(o.length){const n=o.reduce((m,h)=>Math.abs(h-r.x){var n,u;return v.jsxs("svg",{className:"live-score-page",viewBox:`0 0 ${t.w} ${t.h}`,children:[v.jsx(_e,{}),a&&((n=t.source)==null?void 0:n.url)&&v.jsx("image",{href:t.source.url,width:t.source.w,height:t.source.h,transform:Ct(t),opacity:.35,preserveAspectRatio:"none"}),!a&&((u=t.tokens)==null?void 0:u.map((c,m)=>v.jsx("text",{className:`live-score-page-token ${c.textType}`,x:c.x,y:c.y,dominantBaseline:"hanging",textAnchor:"middle",style:{fontSize:c.fontSize},children:c.text},c.id??m))),t.systems.map((c,m)=>{var M;const h=me(e,r,m),p=c.staves[0],C=c.staves.at(-1),T=((p==null?void 0:p.y)??0)+((p==null?void 0:p.staffY)??0)-2,z=((C==null?void 0:C.y)??0)+((C==null?void 0:C.staffY)??0)+2,I=c.staves.map(f=>({y:f.y+f.staffY,radius:2})),_=s&&c.staffMask!==void 0?s.mask(c.staffMask):null,S=f=>{const j=f.currentTarget,E=j.getBoundingClientRect(),w=j.getBBox(),O=(f.clientX-E.left)/E.width*w.width;l({system:h,x:O})};return v.jsxs("g",{className:"live-score-system",transform:`translate(${c.x}, ${c.y})`,children:[c.staves.map((f,j)=>{var E,w,O;return v.jsxs("g",{className:"live-score-staff",transform:`translate(0, ${f.y})`,children:[!a&&((E=f.image)==null?void 0:E.url)&&v.jsx("image",{className:"background",href:f.image.url,x:f.image.x,y:f.image.y,width:f.image.width,height:f.image.height}),[-2,-1,0,1,2].map(N=>v.jsx("line",{x1:"0",x2:c.w,y1:f.staffY+N,y2:f.staffY+N},N)),(w=f.additionalLines)==null?void 0:w.map((N,A)=>v.jsx("line",{x1:N.left,x2:N.right,y1:f.staffY+N.n,y2:f.staffY+N.n},A)),(O=f.measures)==null?void 0:O.map((N,A)=>{var R;return v.jsx("g",{children:(R=N.tokens)==null?void 0:R.map((B,F)=>v.jsx("use",{id:B.id!==void 0?String(B.id):void 0,href:`#score-token-def-${B.t}`,x:B.x,y:f.staffY+B.y},F))},A)})]},j)}),!a&&((M=c.bars)==null?void 0:M.flatMap((f,j)=>[...c.staves.map((E,w)=>v.jsx("line",{className:"bar",x1:f,x2:f,y1:E.y+E.staffY-2,y2:E.y+E.staffY+2},`${j}-staff-${w}`)),...((_==null?void 0:_.conjunctions)||[]).map((E,w)=>{const O=c.staves[w],N=c.staves[w+1];return!O||!N?null:v.jsx("line",{className:`bar staff-layout-measure-bar${E===1?" dashed":""}${E===0?" blank":""}`,x1:f,x2:f,y1:O.y+O.staffY+2,y2:N.y+N.staffY-2},`${j}-conjunction-${w}`)})])),!a&&s&&c.staffMask!==void 0&&v.jsxs(v.Fragment,{children:[c.staves.length>=2&&v.jsx("line",{className:"connection",x1:0,x2:0,y1:T,y2:z}),v.jsx(Ae,{layout:s.mask(c.staffMask),positions:I})]}),(o==null?void 0:o.system)===h&&v.jsx("line",{className:"cursor",x1:o.x,x2:o.x,y1:T,y2:z}),v.jsx("rect",{className:"live-score-system-hit",x:0,y:T,width:c.w,height:z-T,onClick:S})]},m)})]})},At=()=>{const[e,t]=i.useState(),[r,a]=i.useState(""),[s,o]=i.useState([]),[l,n]=i.useState(!0),[u,c]=i.useState(!1),[m,h]=i.useState(!1),[p,C]=i.useState(!1),[T,z]=i.useState(!1),[I,_]=i.useState(0),[S,M]=i.useState(null),f=i.useRef(null),j=i.useRef(null),E=i.useRef(new Ce(performance)),w=i.useRef([]),O=i.useRef(null),N=i.useRef(0),A=i.useMemo(()=>jt(e==null?void 0:e.playback),[e]),R=i.useMemo(()=>$t(e),[e]),B=i.useMemo(()=>e!=null&&e.staffLayout?pe(e.staffLayout):null,[e==null?void 0:e.staffLayout]),F=!!(e!=null&&e.pages.some(d=>{var y;return(y=d.source)==null?void 0:y.url})),te=!!(e!=null&&e.pages.some(d=>d.systems.some(y=>y.staves.some(x=>{var g;return(g=x.image)==null?void 0:g.url})))),G=(S==null?void 0:S.tick)===I?S:(R==null?void 0:R.lookupPosition(I))||null,k=G?zt(e,G.system):null;i.useEffect(()=>{j.current=R},[R]),i.useEffect(()=>{var d;k===null||k===O.current||(O.current=k,(d=w.current[k])==null||d.scrollIntoView({behavior:"smooth",inline:"center",block:"nearest"}))},[k]),i.useEffect(()=>{try{const d=Pt();if(!d)return;t(d.liveScore),a(d.fileName)}catch{sessionStorage.removeItem(ue)}},[]),i.useEffect(()=>{D.MidiAudio.WebAudio.empty()?D.MidiAudio.loadPlugin({soundfontUrl:"/soundfont/",api:"webaudio"}).then(()=>z(!0)):z(!0)},[]),i.useEffect(()=>()=>s.forEach(d=>URL.revokeObjectURL(d)),[s]),i.useEffect(()=>{var y,x;if(!A)return;const d=((y=f.current)==null?void 0:y.progressTicks)||0;return(x=f.current)==null||x.dispose(),f.current=new D.MidiPlayer(A,{cacheSpan:200,onMidi:(g,L)=>{let Y;g.subtype==="noteOn"?(D.MidiAudio.noteOn(g.channel,g.noteNumber,g.velocity,L),Y=()=>{var U;return(U=g.ids)==null?void 0:U.forEach(K=>{var X;return(X=document.getElementById(K))==null?void 0:X.classList.add("notePlayOn")})}):g.subtype==="noteOff"&&(D.MidiAudio.noteOff(g.channel,g.noteNumber,L),Y=()=>{var U;return(U=g.ids)==null?void 0:U.forEach(K=>{var X;return(X=document.getElementById(K))==null?void 0:X.classList.remove("notePlayOn")})}),Y&&E.current.appendTask(L,Y)},onPlayFinish:()=>{C(!1),M(null),_(0),document.querySelectorAll(".notePlayOn").forEach(g=>g.classList.remove("notePlayOn"))}}),f.current.progressTicks=d,()=>{var g;return(g=f.current)==null?void 0:g.dispose()}},[A]);const ae=async d=>(await Z(d),he.LIST_IGNORE),H=async d=>{const y=Lt(j.current,e,d);if(!y||!f.current)return;const x=f.current.isPlaying;x&&(f.current.pause(),await new Promise(g=>setTimeout(g,0))),document.querySelectorAll(".notePlayOn").forEach(g=>g.classList.remove("notePlayOn")),f.current.progressTicks=y.tick,M({...y.position,tick:y.tick}),_(y.tick),x&&J()},Z=async d=>{var y;c(!0);try{const x=await Et(d);s.forEach(g=>URL.revokeObjectURL(g)),(y=f.current)==null||y.pause(),document.querySelectorAll(".notePlayOn").forEach(g=>g.classList.remove("notePlayOn")),o(x.objectUrls),t(x.liveScore),a(d.name),wt(d.name,x.liveScore),O.current=null,C(!1),M(null),_(0)}catch(x){Se.error((x==null?void 0:x.message)||"Failed to load LiveScore.")}finally{c(!1)}},J=async()=>{var d,y,x,g,L;(d=f.current)!=null&&d.isPlaying?(f.current.pause(),C(!1)):((x=(y=D.MidiAudio.WebAudio).needsWarmup)!=null&&x.call(y)&&await((L=(g=D.MidiAudio.WebAudio).awaitWarmup)==null?void 0:L.call(g)),f.current.play({nextFrame:()=>new Promise(Y=>requestAnimationFrame(()=>{var K;const U=((K=f.current)==null?void 0:K.progressTicks)||0;M(null),_(U),Y()}))}),C(!0))},V=d=>d.dataTransfer.types.includes("Files"),re=d=>{d.preventDefault(),V(d)&&(N.current+=1,h(!0))},se=d=>{d.preventDefault()},ne=d=>{d.preventDefault(),N.current=Math.max(N.current-1,0),N.current===0&&h(!1)},ie=async d=>{var x;d.preventDefault(),N.current=0,h(!1);const y=(x=d.dataTransfer.files)==null?void 0:x[0];y&&await Z(y)};return v.jsxs("div",{className:"live-score-viewer",onDragEnter:re,onDragOver:se,onDragLeave:ne,onDrop:ie,children:[m&&v.jsxs("div",{className:"live-score-drop-mask",children:[v.jsx(ze,{}),v.jsx("div",{children:"Drop LiveScore ZIP/JSON to open"})]}),v.jsx(ge,{className:"live-score-controls",children:v.jsxs(ve,{direction:"vertical",size:"middle",style:{width:"100%"},children:[v.jsxs(ve,{wrap:!0,align:"center",children:[v.jsx(bt,{level:4,style:{margin:0},children:"LiveScore"}),v.jsx(he,{accept:".livescore.zip,.zip,.json,application/json,application/zip",showUploadList:!1,beforeUpload:ae,multiple:!1,children:v.jsx(fe,{icon:v.jsx(Me,{}),children:"Open file"})}),v.jsx(fe,{icon:p?v.jsx(Re,{}):v.jsx(Be,{}),onClick:J,disabled:!A||!T,children:p?"Pause":"Play"}),v.jsx(Te,{checked:l,onChange:d=>n(d.target.checked),disabled:!F&&!te,children:"Original image"}),v.jsx(pt,{type:"secondary",children:r||"Drop a LiveScore ZIP/JSON anywhere"})]}),e&&!A&&v.jsx(Ne,{type:"info",showIcon:!0,message:"This LiveScore has no playback events."})]})}),v.jsx("div",{className:"live-score-stage-wrap",children:v.jsx($e,{spinning:u,wrapperClassName:"live-score-spin",children:v.jsx(ge,{className:"live-score-stage",children:e?v.jsx("div",{className:"live-score-pages",children:e.pages.map((d,y)=>v.jsx("div",{className:"live-score-page-frame",ref:x=>{x&&(w.current[y]=x)},children:v.jsx(_t,{liveScore:e,page:d,pageIndex:y,showSource:l,staffLayout:B,cursor:G,onSeekPosition:H})},y))}):v.jsx("div",{className:"live-score-empty",children:"Upload a LiveScore package to preview display and playback."})})})})]})},aa=i.memo(At);export{aa as default}; diff --git a/dist/assets/index-ecbb8828.js b/dist/assets/index-6b7821d6.js similarity index 94% rename from dist/assets/index-ecbb8828.js rename to dist/assets/index-6b7821d6.js index 95542a6fc1e46c20cda1e42387ecc859b047c522..d0b95b5459f246baf1da9beb26dbe29d2340fb4b 100644 --- a/dist/assets/index-ecbb8828.js +++ b/dist/assets/index-6b7821d6.js @@ -1,4 +1,4 @@ -import{r as P,c as ft,g as Mt,j as b,p as wt,w as Ns,b as Os,d as Ts,e as Ke,f as ks,a as Is}from"./umi-91f9d113.js";import{g as Ps,S as Q5,a as Rs,m as a5}from"./parser-f1e7dbfb.js";import{A as _e,f as S0,m as oe,c as W1,g as Ds,n as ct,L as W4,h as js}from"./_setToString-397d22bb.js";import{A as Fs,a as $s,u as Bs,b as Us,c as Ws,d as qs,s as re,E as Ks,S as Gs,P as Ys,e as Xs,f as Qs,F as Zs}from"./index.less_used_.module-d14279ff.js";import{W as p2,C as r4,b as We,c as X3,E as m5,d as h5,m as Q3,a as F1,e as Z3,f as J3,g as Js,G as ec,h as tc,i as rc,j as nc,r as i5,s as s5,k as ac,l as ic,n as E0,o as q4,S as n4,p as K4,T as sc,P as cc,q as oc,t as G4,L as lc,u as hc}from"./index-4514925e.js";import{S as uc}from"./scheduler-a7fa9c3c.js";import{S as fc}from"./schedulePool-cc4538c2.js";import{M as Yt,Q as ea,D as ur,P as vc,q as dc,L as pc}from"./index-3fb79805.js";import{S as mc}from"./ScoreEncoder-96e90be0.js";import{u as Y4,S as gc,P as zc,A as X4}from"./Tags-2166e5ed.js";import{G as yc}from"./gaugeRendererGL-41abf4c6.js";import{t as ta,c as c0,p as a4,m as ot,i as Q4,n as P2,b as Mc,e as wc,u as Hc,s as bc,a as Cc,d as Vc}from"./index-1fa256e9.js";import{p as Lc,r as ce,u as M5,a as Sc,e as i4,s as Ec,b as m2,g as g2,c as ra,d as _c,f as Ac,h as xc,i as Nc,j as Oc,k as na,l as Tc,m as kc,o as Z4,n as R2,q as Ic,v as Pc,w as Rc,x as Dc}from"./index-b284aaac.js";import{_ as O5,a as _0,b as a0,i as jc,r as Z5,A as Fc}from"./confirm-34976587.js";import{u as F5,a as aa,b as s4,c as c4,d as ia,e as z2,f as o4,g as l4,h as sa,i as h4,j as u4,k as f4,l as ca,P as oa,m as la,n as ha,o as ua,p as $c,q as Bc,r as Uc,s as D2}from"./tiny-invariant-023fafff.js";import{B as i0}from"./button-909b3565.js";import{D as fr,S as vr}from"./index-dc40c6e7.js";import{I as J4,R as Wc,u as fa,D as J5,S as qc,F as X0,a as fe,b as Kc}from"./useDebounce-e1e8dc3b.js";import{P as dr,a as Gc}from"./progress-f968a1fe.js";import{S as C0,T as pr,b as Yc,C as va}from"./TextArea-3bdaceca.js";import{w as Xc,A as da}from"./index-81cb47f8.js";import{a as Qc,u as pa}from"./useAsyncFn-4bca5482.js";import{u as Zc,a as en,V as ma,b as Jc,_ as v4,c as eo,M as to,R as ro}from"./index-6dffb190.js";import{S as ga}from"./index-07fc0d1f.js";import{o as d4,b as p4,i as no,I as u5,R as y2,C as Pe,a as za,L as tn,E as ao}from"./util-b514be53.js";import{p as io}from"./processCompressedAESFile-0057a8e1.js";import{S as mr,d as so}from"./index-37861f16.js";import{d as at}from"./download-e05f9890.js";import{u as co}from"./useIntersection-44800be2.js";import{S as oo}from"./index-11479954.js";import{P as lo,a as ho}from"./PlaySquareOutlined-f3c772fe.js";import{D as uo}from"./DownloadOutlined-f081b8de.js";import{E as fo}from"./Dropdown-d5fff39b.js";import"./jszip.min-21813277.js";var vo={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M899.1 869.6l-53-305.6H864c14.4 0 26-11.6 26-26V346c0-14.4-11.6-26-26-26H618V138c0-14.4-11.6-26-26-26H432c-14.4 0-26 11.6-26 26v182H160c-14.4 0-26 11.6-26 26v192c0 14.4 11.6 26 26 26h17.9l-53 305.6a25.95 25.95 0 0025.6 30.4h723c1.5 0 3-.1 4.4-.4a25.88 25.88 0 0021.2-30zM204 390h272V182h72v208h272v104H204V390zm468 440V674c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v156H416V674c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v156H202.8l45.1-260H776l45.1 260H672z"}}]},name:"clear",theme:"outlined"};const po=vo;var mo=function(t,r){return P.createElement(_e,S0(S0({},t),{},{ref:r,icon:po}))},go=P.forwardRef(mo);const gr=go;var zo={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM770.87 199.13l-52.2-52.2a8.01 8.01 0 014.7-13.6l179.4-21c5.1-.6 9.5 3.7 8.9 8.9l-21 179.4c-.8 6.6-8.9 9.4-13.6 4.7l-52.4-52.4-256.2 256.2a8.03 8.03 0 01-11.3 0l-42.4-42.4a8.03 8.03 0 010-11.3l256.1-256.3z"}}]},name:"export",theme:"outlined"};const yo=zo;var Mo=function(t,r){return P.createElement(_e,S0(S0({},t),{},{ref:r,icon:yo}))},wo=P.forwardRef(Mo);const Ho=wo;var bo={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880.1 154H143.9c-24.5 0-39.8 26.7-27.5 48L349 607.4V838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V607.4L907.7 202c12.2-21.3-3.1-48-27.6-48zM603.4 798H420.6V650h182.9v148zm9.6-226.6l-8.4 14.6H419.3l-8.4-14.6L334.4 438h355.2L613 571.4zM726.3 374H297.7l-85-148h598.6l-85 148z"}}]},name:"funnel-plot",theme:"outlined"};const Co=bo;var Vo=function(t,r){return P.createElement(_e,S0(S0({},t),{},{ref:r,icon:Co}))},Lo=P.forwardRef(Vo);const So=Lo;var Eo={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 392c8.8 0 16-7.2 16-16V192c0-8.8-7.2-16-16-16H744c-8.8 0-16 7.2-16 16v56H296v-56c0-8.8-7.2-16-16-16H96c-8.8 0-16 7.2-16 16v184c0 8.8 7.2 16 16 16h56v240H96c-8.8 0-16 7.2-16 16v184c0 8.8 7.2 16 16 16h184c8.8 0 16-7.2 16-16v-56h432v56c0 8.8 7.2 16 16 16h184c8.8 0 16-7.2 16-16V648c0-8.8-7.2-16-16-16h-56V392h56zM792 240h88v88h-88v-88zm-648 88v-88h88v88h-88zm88 456h-88v-88h88v88zm648-88v88h-88v-88h88zm-80-64h-56c-8.8 0-16 7.2-16 16v56H296v-56c0-8.8-7.2-16-16-16h-56V392h56c8.8 0 16-7.2 16-16v-56h432v56c0 8.8 7.2 16 16 16h56v240z"}}]},name:"gateway",theme:"outlined"};const _o=Eo;var Ao=function(t,r){return P.createElement(_e,S0(S0({},t),{},{ref:r,icon:_o}))},xo=P.forwardRef(Ao);const ya=xo;var No={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"minus-circle",theme:"outlined"};const Oo=No;var To=function(t,r){return P.createElement(_e,S0(S0({},t),{},{ref:r,icon:Oo}))},ko=P.forwardRef(To);const rn=ko;var Io={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M843.5 737.4c-12.4-75.2-79.2-129.1-155.3-125.4S550.9 676 546 752c-153.5-4.8-208-40.7-199.1-113.7 3.3-27.3 19.8-41.9 50.1-49 18.4-4.3 38.8-4.9 57.3-3.2 1.7.2 3.5.3 5.2.5 11.3 2.7 22.8 5 34.3 6.8 34.1 5.6 68.8 8.4 101.8 6.6 92.8-5 156-45.9 159.2-132.7 3.1-84.1-54.7-143.7-147.9-183.6-29.9-12.8-61.6-22.7-93.3-30.2-14.3-3.4-26.3-5.7-35.2-7.2-7.9-75.9-71.5-133.8-147.8-134.4-76.3-.6-140.9 56.1-150.1 131.9s40 146.3 114.2 163.9c74.2 17.6 149.9-23.3 175.7-95.1 9.4 1.7 18.7 3.6 28 5.8 28.2 6.6 56.4 15.4 82.4 26.6 70.7 30.2 109.3 70.1 107.5 119.9-1.6 44.6-33.6 65.2-96.2 68.6-27.5 1.5-57.6-.9-87.3-5.8-8.3-1.4-15.9-2.8-22.6-4.3-3.9-.8-6.6-1.5-7.8-1.8l-3.1-.6c-2.2-.3-5.9-.8-10.7-1.3-25-2.3-52.1-1.5-78.5 4.6-55.2 12.9-93.9 47.2-101.1 105.8-15.7 126.2 78.6 184.7 276 188.9 29.1 70.4 106.4 107.9 179.6 87 73.3-20.9 119.3-93.4 106.9-168.6zM329.1 345.2a83.3 83.3 0 11.01-166.61 83.3 83.3 0 01-.01 166.61zM695.6 845a83.3 83.3 0 11.01-166.61A83.3 83.3 0 01695.6 845z"}}]},name:"node-index",theme:"outlined"};const Po=Io;var Ro=function(t,r){return P.createElement(_e,S0(S0({},t),{},{ref:r,icon:Po}))},Do=P.forwardRef(Ro);const nn=Do;var jo={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M864 736c0-111.6-65.4-208-160-252.9V317.3c0-15.1-5.3-29.7-15.1-41.2L536.5 95.4C530.1 87.8 521 84 512 84s-18.1 3.8-24.5 11.4L335.1 276.1a63.97 63.97 0 00-15.1 41.2v165.8C225.4 528 160 624.4 160 736h156.5c-2.3 7.2-3.5 15-3.5 23.8 0 22.1 7.6 43.7 21.4 60.8a97.2 97.2 0 0043.1 30.6c23.1 54 75.6 88.8 134.5 88.8 29.1 0 57.3-8.6 81.4-24.8 23.6-15.8 41.9-37.9 53-64a97 97 0 0043.1-30.5 97.52 97.52 0 0021.4-60.8c0-8.4-1.1-16.4-3.1-23.8H864zM762.3 621.4c9.4 14.6 17 30.3 22.5 46.6H700V558.7a211.6 211.6 0 0162.3 62.7zM388 483.1V318.8l124-147 124 147V668H388V483.1zM239.2 668c5.5-16.3 13.1-32 22.5-46.6 16.3-25.2 37.5-46.5 62.3-62.7V668h-84.8zm388.9 116.2c-5.2 3-11.2 4.2-17.1 3.4l-19.5-2.4-2.8 19.4c-5.4 37.9-38.4 66.5-76.7 66.5-38.3 0-71.3-28.6-76.7-66.5l-2.8-19.5-19.5 2.5a27.7 27.7 0 01-17.1-3.5c-8.7-5-14.1-14.3-14.1-24.4 0-10.6 5.9-19.4 14.6-23.8h231.3c8.8 4.5 14.6 13.3 14.6 23.8-.1 10.2-5.5 19.6-14.2 24.5zM464 400a48 48 0 1096 0 48 48 0 10-96 0z"}}]},name:"rocket",theme:"outlined"};const Fo=jo;var $o=function(t,r){return P.createElement(_e,S0(S0({},t),{},{ref:r,icon:Fo}))},Bo=P.forwardRef($o);const Ma=Bo;var Uo={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M567.1 512l318.5-319.3c5-5 1.5-13.7-5.6-13.7h-90.5c-2.1 0-4.2.8-5.6 2.3l-273.3 274-90.2-90.5c12.5-22.1 19.7-47.6 19.7-74.8 0-83.9-68.1-152-152-152s-152 68.1-152 152 68.1 152 152 152c27.7 0 53.6-7.4 75.9-20.3l90 90.3-90.1 90.3A151.04 151.04 0 00288 582c-83.9 0-152 68.1-152 152s68.1 152 152 152 152-68.1 152-152c0-27.2-7.2-52.7-19.7-74.8l90.2-90.5 273.3 274c1.5 1.5 3.5 2.3 5.6 2.3H880c7.1 0 10.7-8.6 5.6-13.7L567.1 512zM288 370c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm0 444c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"}}]},name:"scissor",theme:"outlined"};const Wo=Uo;var qo=function(t,r){return P.createElement(_e,S0(S0({},t),{},{ref:r,icon:Wo}))},Ko=P.forwardRef(qo);const Go=Ko;var Yo={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M839.6 433.8L749 150.5a9.24 9.24 0 00-8.9-6.5h-77.4c-4.1 0-7.6 2.6-8.9 6.5l-91.3 283.3c-.3.9-.5 1.9-.5 2.9 0 5.1 4.2 9.3 9.3 9.3h56.4c4.2 0 7.8-2.8 9-6.8l17.5-61.6h89l17.3 61.5c1.1 4 4.8 6.8 9 6.8h61.2c1 0 1.9-.1 2.8-.4 2.4-.8 4.3-2.4 5.5-4.6 1.1-2.2 1.3-4.7.6-7.1zM663.3 325.5l32.8-116.9h6.3l32.1 116.9h-71.2zm143.5 492.9H677.2v-.4l132.6-188.9c1.1-1.6 1.7-3.4 1.7-5.4v-36.4c0-5.1-4.2-9.3-9.3-9.3h-204c-5.1 0-9.3 4.2-9.3 9.3v43c0 5.1 4.2 9.3 9.3 9.3h122.6v.4L587.7 828.9a9.35 9.35 0 00-1.7 5.4v36.4c0 5.1 4.2 9.3 9.3 9.3h211.4c5.1 0 9.3-4.2 9.3-9.3v-43a9.2 9.2 0 00-9.2-9.3zM416 702h-76V172c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v530h-76c-6.7 0-10.5 7.8-6.3 13l112 141.9a8 8 0 0012.6 0l112-141.9c4.1-5.2.4-13-6.3-13z"}}]},name:"sort-ascending",theme:"outlined"};const Xo=Yo;var Qo=function(t,r){return P.createElement(_e,S0(S0({},t),{},{ref:r,icon:Xo}))},Zo=P.forwardRef(Qo);const Jo=Zo;var e9={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M168 504.2c1-43.7 10-86.1 26.9-126 17.3-41 42.1-77.7 73.7-109.4S337 212.3 378 195c42.4-17.9 87.4-27 133.9-27s91.5 9.1 133.8 27A341.5 341.5 0 01755 268.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.7 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c0-6.7-7.7-10.5-12.9-6.3l-56.4 44.1C765.8 155.1 646.2 92 511.8 92 282.7 92 96.3 275.6 92 503.8a8 8 0 008 8.2h60c4.4 0 7.9-3.5 8-7.8zm756 7.8h-60c-4.4 0-7.9 3.5-8 7.8-1 43.7-10 86.1-26.9 126-17.3 41-42.1 77.8-73.7 109.4A342.45 342.45 0 01512.1 856a342.24 342.24 0 01-243.2-100.8c-9.9-9.9-19.2-20.4-27.8-31.4l60.2-47a8 8 0 00-3-14.1l-175.7-43c-5-1.2-9.9 2.6-9.9 7.7l-.7 181c0 6.7 7.7 10.5 12.9 6.3l56.4-44.1C258.2 868.9 377.8 932 512.2 932c229.2 0 415.5-183.7 419.8-411.8a8 8 0 00-8-8.2z"}}]},name:"sync",theme:"outlined"};const t9=e9;var r9=function(t,r){return P.createElement(_e,S0(S0({},t),{},{ref:r,icon:t9}))},n9=P.forwardRef(r9);const an=n9;var a9=function(e,t){var r=Zc();P.useEffect(function(){if(!r)return e()},t)};const i9=a9;var s9=function(e){e===void 0&&(e={});var t=P.useState(e),r=t[0],n=t[1],a=P.useCallback(function(i){n(function(s){return Object.assign({},s,i instanceof Function?i(s):i)})},[]);return[r,a]};const c9=s9;var o9=function(e,t){e===void 0&&(e=!0);var r=P.useCallback(function(n){var a=typeof e=="function"?e():!0;if(a)return n.preventDefault(),t&&(n.returnValue=t),t},[e,t]);P.useEffect(function(){if(e)return d4(window,"beforeunload",r),function(){return p4(window,"beforeunload",r)}},[e,r])};const l9=o9;var h9=function(){var e=Qc(),t=c9({value:void 0,error:void 0,noUserInteraction:!0}),r=t[0],n=t[1],a=P.useCallback(function(i){if(e()){var s,c;try{if(typeof i!="string"&&typeof i!="number"){var h=new Error("Cannot copy typeof "+typeof i+" to clipboard, must be a string");n({value:i,error:h,noUserInteraction:!0});return}else if(i===""){var h=new Error("Cannot copy empty string to clipboard.");n({value:i,error:h,noUserInteraction:!0});return}c=i.toString(),s=Xc(c),n({value:c,error:void 0,noUserInteraction:s})}catch(u){n({value:c,error:u,noUserInteraction:s})}}},[]);return[r,a]};const u9=h9;var f9=function(e){var t=P.useState([!1,null]),r=t[0],n=t[1];return en(e,function(a){return n([!0,a])},{event:"keydown"},[r]),en(e,function(a){return n([!1,a])},{event:"keyup"},[r]),r};const g5=f9;var v9=function(e,t,r,n){n===void 0&&(n=g5);var a=n(e),i=a[0],s=a[1];i9(function(){!i&&r?r(s):i&&t&&t(s)},[i])};const sn=v9;var d9=function(e,t){P.useEffect(function(){return e&&e(),function(){t&&t()}},[])};const p9=d9;function zr(e){if(e){if(e.tagName==="BODY")return e;if(e.tagName==="IFRAME"){var t=e.contentDocument;return t?t.body:null}else if(!e.offsetParent)return null}else return null;return zr(e.offsetParent)}function cn(e){var t=e||window.event;return t.touches.length>1?!0:(t.preventDefault&&t.preventDefault(),!1)}var on=no&&window.navigator&&window.navigator.platform&&/iP(ad|hone|od)/.test(window.navigator.platform),V5=new Map,ln=typeof document=="object"?document:void 0,Nt=!1;const m9=ln?function(t,r){t===void 0&&(t=!0);var n=P.useRef(ln.body);r=r||n;var a=function(s){var c=V5.get(s);c?V5.set(s,{counter:c.counter+1,initialOverflow:c.initialOverflow}):(V5.set(s,{counter:1,initialOverflow:s.style.overflow}),on?Nt||(d4(document,"touchmove",cn,{passive:!1}),Nt=!0):s.style.overflow="hidden")},i=function(s){var c=V5.get(s);c&&(c.counter===1?(V5.delete(s),on?(s.ontouchmove=null,Nt&&(p4(document,"touchmove",cn),Nt=!1)):s.style.overflow=c.initialOverflow):V5.set(s,{counter:c.counter-1,initialOverflow:c.initialOverflow}))};P.useEffect(function(){var s=zr(r.current);s&&(t?a(s):i(s))},[t,r.current]),P.useEffect(function(){var s=zr(r.current);if(s)return function(){i(s)}},[])}:function(t,r){};var g9=function(){var e=P.useState(function(){return window.location.hash}),t=e[0],r=e[1],n=P.useCallback(function(){r(window.location.hash)},[]);p9(function(){d4(window,"hashchange",n)},function(){p4(window,"hashchange",n)});var a=P.useCallback(function(i){i!==t&&(window.location.hash=i)},[t]);return[t,a]},yr={exports:{}},hn={},un;function z9(){return un||(un=1),hn}(function(e,t){(function(r,n){n(t,z9())})(ft,function(r,n){n=n&&n.hasOwnProperty("default")?n.default:n;var a=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(B){return typeof B}:function(B){return B&&typeof Symbol=="function"&&B.constructor===Symbol&&B!==Symbol.prototype?"symbol":typeof B},i=function(B,p){if(!(B instanceof p))throw new TypeError("Cannot call a class as a function")},s=function(){function B(p,y){for(var z=0;z"u")return this.pipes[y];this.pipes[y]=L}if(y&&y.name){if(L=y,L.processor===this)return L;this.pipes[L.name]=L}return L.processor=this,L}},{key:"process",value:function(y,z){var L=y;L.options=this.options();for(var m=z||y.pipe||"default",w=void 0,E=void 0;m;)typeof L.nextAfterChildren<"u"&&(L.next=L.nextAfterChildren,L.nextAfterChildren=null),typeof m=="string"&&(m=this.pipe(m)),m.process(L),E=L,w=m,m=null,L&&L.next&&(L=L.next,m=E.nextPipe||L.pipe||w);return L.hasResult?L.result:void 0}}]),B}(),v=function(){function B(p){i(this,B),this.name=p,this.filters=[]}return s(B,[{key:"process",value:function(y){if(!this.processor)throw new Error("add this pipe to a processor before using it");for(var z=this.debug,L=this.filters.length,m=y,w=0;w"u"?"undefined":a(m))==="object"&&m.exiting){m.exiting=!1;break}}!m.next&&this.resultCheck&&this.resultCheck(m)}},{key:"log",value:function(y){console.log("[jsondiffpatch] "+this.name+" pipe, "+y)}},{key:"append",value:function(){var y;return(y=this.filters).push.apply(y,arguments),this}},{key:"prepend",value:function(){var y;return(y=this.filters).unshift.apply(y,arguments),this}},{key:"indexOf",value:function(y){if(!y)throw new Error("a filter name is required");for(var z=0;z"u"?"undefined":a(B))!=="object")return B;if(B===null)return null;if(d(B))return B.map(g);if(B instanceof Date)return new Date(B.getTime());if(B instanceof RegExp)return H(B);var p={};for(var y in B)Object.prototype.hasOwnProperty.call(B,y)&&(p[y]=g(B[y]));return p}var V=function(B){h(p,B);function p(y,z){i(this,p);var L=u(this,(p.__proto__||Object.getPrototypeOf(p)).call(this));return L.left=y,L.right=z,L.pipe="diff",L}return s(p,[{key:"setResult",value:function(z){if(this.options.cloneDiffValues&&(typeof z>"u"?"undefined":a(z))==="object"){var L=typeof this.options.cloneDiffValues=="function"?this.options.cloneDiffValues:g;a(z[0])==="object"&&(z[0]=L(z[0])),a(z[1])==="object"&&(z[1]=L(z[1]))}return M.prototype.setResult.apply(this,arguments)}}]),p}(M),C=function(B){h(p,B);function p(y,z){i(this,p);var L=u(this,(p.__proto__||Object.getPrototypeOf(p)).call(this));return L.left=y,L.delta=z,L.pipe="patch",L}return p}(M),x=function(B){h(p,B);function p(y){i(this,p);var z=u(this,(p.__proto__||Object.getPrototypeOf(p)).call(this));return z.delta=y,z.pipe="reverse",z}return p}(M),S=typeof Array.isArray=="function"?Array.isArray:function(B){return B instanceof Array},_=function(p){if(p.left===p.right){p.setResult(void 0).exit();return}if(typeof p.left>"u"){if(typeof p.right=="function")throw new Error("functions are not supported");p.setResult([p.right]).exit();return}if(typeof p.right>"u"){p.setResult([p.left,0,0]).exit();return}if(typeof p.left=="function"||typeof p.right=="function")throw new Error("functions are not supported");if(p.leftType=p.left===null?"null":a(p.left),p.rightType=p.right===null?"null":a(p.right),p.leftType!==p.rightType){p.setResult([p.left,p.right]).exit();return}if(p.leftType==="boolean"||p.leftType==="number"){p.setResult([p.left,p.right]).exit();return}if(p.leftType==="object"&&(p.leftIsArray=S(p.left)),p.rightType==="object"&&(p.rightIsArray=S(p.right)),p.leftIsArray!==p.rightIsArray){p.setResult([p.left,p.right]).exit();return}p.left instanceof RegExp&&(p.right instanceof RegExp?p.setResult([p.left.toString(),p.right.toString()]).exit():p.setResult([p.left,p.right]).exit())};_.filterName="trivial";var T=function(p){if(typeof p.delta>"u"){p.setResult(p.left).exit();return}if(p.nested=!S(p.delta),!p.nested){if(p.delta.length===1){p.setResult(p.delta[0]).exit();return}if(p.delta.length===2){if(p.left instanceof RegExp){var y=/^\/(.*)\/([gimyu]+)$/.exec(p.delta[1]);if(y){p.setResult(new RegExp(y[1],y[2])).exit();return}}p.setResult(p.delta[1]).exit();return}p.delta.length===3&&p.delta[2]===0&&p.setResult(void 0).exit()}};T.filterName="trivial";var O=function(p){if(typeof p.delta>"u"){p.setResult(p.delta).exit();return}if(p.nested=!S(p.delta),!p.nested){if(p.delta.length===1){p.setResult([p.delta[0],0,0]).exit();return}if(p.delta.length===2){p.setResult([p.delta[1],p.delta[0]]).exit();return}p.delta.length===3&&p.delta[2]===0&&p.setResult([p.delta[0]]).exit()}};O.filterName="trivial";function D(B){if(!(!B||!B.children)){for(var p=B.children.length,y=void 0,z=B.result,L=0;L"u")&&(z=z||{},z[y.childName]=y.result);z&&B.leftIsArray&&(z._t="a"),B.setResult(z).exit()}}D.filterName="collectChildren";function Y(B){if(!(B.leftIsArray||B.leftType!=="object")){var p=void 0,y=void 0,z=B.options.propertyFilter;for(p in B.left)Object.prototype.hasOwnProperty.call(B.left,p)&&(z&&!z(p,B)||(y=new V(B.left[p],B.right[p]),B.push(y,p)));for(p in B.right)Object.prototype.hasOwnProperty.call(B.right,p)&&(z&&!z(p,B)||typeof B.left[p]>"u"&&(y=new V(void 0,B.right[p]),B.push(y,p)));if(!B.children||B.children.length===0){B.setResult(void 0).exit();return}B.exit()}}Y.filterName="objects";var q=function(p){if(p.nested&&!p.delta._t){var y=void 0,z=void 0;for(y in p.delta)z=new C(p.left[y],p.delta[y]),p.push(z,y);p.exit()}};q.filterName="objects";var a1=function(p){if(!(!p||!p.children)&&!p.delta._t){for(var y=p.children.length,z=void 0,L=0;Lk?--w:--m}}return E},Z=function(p,y,z,L){var m=L||{},w=R(p,y,z||j,m),E=e1(w,p,y,m);return typeof p=="string"&&typeof y=="string"&&(E.sequence=E.sequence.join("")),E},i1={get:Z},X=3,n1=typeof Array.isArray=="function"?Array.isArray:function(B){return B instanceof Array},N=typeof Array.prototype.indexOf=="function"?function(B,p){return B.indexOf(p)}:function(B,p){for(var y=B.length,z=0;z"u"?"undefined":a(m))!=="object"||(typeof w>"u"?"undefined":a(w))!=="object")return!1;var E=L.objectHash;if(!E)return L.matchByPosition&&y===z;var A=void 0,I=void 0;return typeof y=="number"?(L.hashCache1=L.hashCache1||[],A=L.hashCache1[y],typeof A>"u"&&(L.hashCache1[y]=A=E(m,y))):A=E(m),typeof A>"u"||(typeof z=="number"?(L.hashCache2=L.hashCache2||[],I=L.hashCache2[z],typeof I>"u"&&(L.hashCache2[z]=I=E(w,z))):I=E(w),typeof I>"u")?!1:A===I}var V1=function(p){if(p.leftIsArray){var y={objectHash:p.options&&p.options.objectHash,matchByPosition:p.options&&p.options.matchByPosition},z=0,L=0,m=void 0,w=void 0,E=void 0,A=p.left,I=p.right,k=A.length,F=I.length,G=void 0;for(k>0&&F>0&&!y.objectHash&&typeof y.matchByPosition!="boolean"&&(y.matchByPosition=!W(A,I,k,F));z0){for(var S1=0;S1=0;y--){z=w[y];var I=L["_"+z],k=m.splice(z,1)[0];I[2]===X&&E.push({index:I[1],value:k})}E=E.sort(c1.numericallyBy("index"));var F=E.length;for(y=0;y0)for(y=0;yL?L++:E>=L&&A"u"&&(m=p1(B.delta,y.childName,y.result)),z[m]!==y.result&&(z[m]=y.result)}B.setResult(z).exit()}}b1.filterName="arraysCollectChildren";var _1=function(p){p.left instanceof Date?(p.right instanceof Date?p.left.getTime()!==p.right.getTime()?p.setResult([p.left,p.right]):p.setResult(void 0):p.setResult([p.left,p.right]),p.exit()):p.right instanceof Date&&p.setResult([p.left,p.right]).exit()};_1.filterName="dates";function z1(B,p){return p={exports:{}},B(p,p.exports),p.exports}var C1=z1(function(B){function p(){this.Diff_Timeout=1,this.Diff_EditCost=4,this.Match_Threshold=.5,this.Match_Distance=1e3,this.Patch_DeleteThreshold=.5,this.Patch_Margin=4,this.Match_MaxBits=32}var y=-1,z=1,L=0;p.prototype.diff_main=function(m,w,E,A){typeof A>"u"&&(this.Diff_Timeout<=0?A=Number.MAX_VALUE:A=new Date().getTime()+this.Diff_Timeout*1e3);var I=A;if(m==null||w==null)throw new Error("Null input. (diff_main)");if(m==w)return m?[[L,m]]:[];typeof E>"u"&&(E=!0);var k=E,F=this.diff_commonPrefix(m,w),G=m.substring(0,F);m=m.substring(F),w=w.substring(F),F=this.diff_commonSuffix(m,w);var t1=m.substring(m.length-F);m=m.substring(0,m.length-F),w=w.substring(0,w.length-F);var v1=this.diff_compute_(m,w,k,I);return G&&v1.unshift([L,G]),t1&&v1.push([L,t1]),this.diff_cleanupMerge(v1),v1},p.prototype.diff_compute_=function(m,w,E,A){var I;if(!m)return[[z,w]];if(!w)return[[y,m]];var k=m.length>w.length?m:w,F=m.length>w.length?w:m,G=k.indexOf(F);if(G!=-1)return I=[[z,k.substring(0,G)],[L,F],[z,k.substring(G+F.length)]],m.length>w.length&&(I[0][0]=I[2][0]=y),I;if(F.length==1)return[[y,m],[z,w]];var t1=this.diff_halfMatch_(m,w);if(t1){var v1=t1[0],w1=t1[1],N1=t1[2],K1=t1[3],U=t1[4],J=this.diff_main(v1,N1,E,A),h1=this.diff_main(w1,K1,E,A);return J.concat([[L,U]],h1)}return E&&m.length>100&&w.length>100?this.diff_lineMode_(m,w,A):this.diff_bisect_(m,w,A)},p.prototype.diff_lineMode_=function(m,w,E){var A=this.diff_linesToChars_(m,w);m=A.chars1,w=A.chars2;var I=A.lineArray,k=this.diff_main(m,w,!1,E);this.diff_charsToLines_(k,I),this.diff_cleanupSemantic(k),k.push([L,""]);for(var F=0,G=0,t1=0,v1="",w1="";F=1&&t1>=1){k.splice(F-G-t1,G+t1),F=F-G-t1;for(var A=this.diff_main(v1,w1,!1,E),N1=A.length-1;N1>=0;N1--)k.splice(F,0,A[N1]);F=F+A.length}t1=0,G=0,v1="",w1="";break}F++}return k.pop(),k},p.prototype.diff_bisect_=function(m,w,E){for(var A=m.length,I=w.length,k=Math.ceil((A+I)/2),F=k,G=2*k,t1=new Array(G),v1=new Array(G),w1=0;w1E);O1++){for(var S1=-O1+U;S1<=O1-J;S1+=2){var e0=F+S1,G1;S1==-O1||S1!=O1&&t1[e0-1]A)J+=2;else if(n0>I)U+=2;else if(K1){var j1=F+N1-S1;if(j1>=0&&j1=J1)return this.diff_bisectSplit_(m,w,G1,n0,E)}}}for(var U1=-O1+h1;U1<=O1-y1;U1+=2){var j1=F+U1,J1;U1==-O1||U1!=O1&&v1[j1-1]A)y1+=2;else if(t0>I)h1+=2;else if(!K1){var e0=F+N1-U1;if(e0>=0&&e0=J1)return this.diff_bisectSplit_(m,w,G1,n0,E)}}}}return[[y,m],[z,w]]},p.prototype.diff_bisectSplit_=function(m,w,E,A,I){var k=m.substring(0,E),F=w.substring(0,A),G=m.substring(E),t1=w.substring(A),v1=this.diff_main(k,F,!1,I),w1=this.diff_main(G,t1,!1,I);return v1.concat(w1)},p.prototype.diff_linesToChars_=function(m,w){var E=[],A={};E[0]="";function I(G){for(var t1="",v1=0,w1=-1,N1=E.length;w11?!0:(t.preventDefault&&t.preventDefault(),!1)}var on=no&&window.navigator&&window.navigator.platform&&/iP(ad|hone|od)/.test(window.navigator.platform),V5=new Map,ln=typeof document=="object"?document:void 0,Nt=!1;const m9=ln?function(t,r){t===void 0&&(t=!0);var n=P.useRef(ln.body);r=r||n;var a=function(s){var c=V5.get(s);c?V5.set(s,{counter:c.counter+1,initialOverflow:c.initialOverflow}):(V5.set(s,{counter:1,initialOverflow:s.style.overflow}),on?Nt||(d4(document,"touchmove",cn,{passive:!1}),Nt=!0):s.style.overflow="hidden")},i=function(s){var c=V5.get(s);c&&(c.counter===1?(V5.delete(s),on?(s.ontouchmove=null,Nt&&(p4(document,"touchmove",cn),Nt=!1)):s.style.overflow=c.initialOverflow):V5.set(s,{counter:c.counter-1,initialOverflow:c.initialOverflow}))};P.useEffect(function(){var s=zr(r.current);s&&(t?a(s):i(s))},[t,r.current]),P.useEffect(function(){var s=zr(r.current);if(s)return function(){i(s)}},[])}:function(t,r){};var g9=function(){var e=P.useState(function(){return window.location.hash}),t=e[0],r=e[1],n=P.useCallback(function(){r(window.location.hash)},[]);p9(function(){d4(window,"hashchange",n)},function(){p4(window,"hashchange",n)});var a=P.useCallback(function(i){i!==t&&(window.location.hash=i)},[t]);return[t,a]},yr={exports:{}},hn={},un;function z9(){return un||(un=1),hn}(function(e,t){(function(r,n){n(t,z9())})(ft,function(r,n){n=n&&n.hasOwnProperty("default")?n.default:n;var a=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(B){return typeof B}:function(B){return B&&typeof Symbol=="function"&&B.constructor===Symbol&&B!==Symbol.prototype?"symbol":typeof B},i=function(B,p){if(!(B instanceof p))throw new TypeError("Cannot call a class as a function")},s=function(){function B(p,y){for(var z=0;z"u")return this.pipes[y];this.pipes[y]=L}if(y&&y.name){if(L=y,L.processor===this)return L;this.pipes[L.name]=L}return L.processor=this,L}},{key:"process",value:function(y,z){var L=y;L.options=this.options();for(var m=z||y.pipe||"default",w=void 0,E=void 0;m;)typeof L.nextAfterChildren<"u"&&(L.next=L.nextAfterChildren,L.nextAfterChildren=null),typeof m=="string"&&(m=this.pipe(m)),m.process(L),E=L,w=m,m=null,L&&L.next&&(L=L.next,m=E.nextPipe||L.pipe||w);return L.hasResult?L.result:void 0}}]),B}(),v=function(){function B(p){i(this,B),this.name=p,this.filters=[]}return s(B,[{key:"process",value:function(y){if(!this.processor)throw new Error("add this pipe to a processor before using it");for(var z=this.debug,L=this.filters.length,m=y,w=0;w"u"?"undefined":a(m))==="object"&&m.exiting){m.exiting=!1;break}}!m.next&&this.resultCheck&&this.resultCheck(m)}},{key:"log",value:function(y){console.log("[jsondiffpatch] "+this.name+" pipe, "+y)}},{key:"append",value:function(){var y;return(y=this.filters).push.apply(y,arguments),this}},{key:"prepend",value:function(){var y;return(y=this.filters).unshift.apply(y,arguments),this}},{key:"indexOf",value:function(y){if(!y)throw new Error("a filter name is required");for(var z=0;z"u"?"undefined":a(B))!=="object")return B;if(B===null)return null;if(d(B))return B.map(g);if(B instanceof Date)return new Date(B.getTime());if(B instanceof RegExp)return H(B);var p={};for(var y in B)Object.prototype.hasOwnProperty.call(B,y)&&(p[y]=g(B[y]));return p}var V=function(B){h(p,B);function p(y,z){i(this,p);var L=u(this,(p.__proto__||Object.getPrototypeOf(p)).call(this));return L.left=y,L.right=z,L.pipe="diff",L}return s(p,[{key:"setResult",value:function(z){if(this.options.cloneDiffValues&&(typeof z>"u"?"undefined":a(z))==="object"){var L=typeof this.options.cloneDiffValues=="function"?this.options.cloneDiffValues:g;a(z[0])==="object"&&(z[0]=L(z[0])),a(z[1])==="object"&&(z[1]=L(z[1]))}return M.prototype.setResult.apply(this,arguments)}}]),p}(M),C=function(B){h(p,B);function p(y,z){i(this,p);var L=u(this,(p.__proto__||Object.getPrototypeOf(p)).call(this));return L.left=y,L.delta=z,L.pipe="patch",L}return p}(M),x=function(B){h(p,B);function p(y){i(this,p);var z=u(this,(p.__proto__||Object.getPrototypeOf(p)).call(this));return z.delta=y,z.pipe="reverse",z}return p}(M),S=typeof Array.isArray=="function"?Array.isArray:function(B){return B instanceof Array},_=function(p){if(p.left===p.right){p.setResult(void 0).exit();return}if(typeof p.left>"u"){if(typeof p.right=="function")throw new Error("functions are not supported");p.setResult([p.right]).exit();return}if(typeof p.right>"u"){p.setResult([p.left,0,0]).exit();return}if(typeof p.left=="function"||typeof p.right=="function")throw new Error("functions are not supported");if(p.leftType=p.left===null?"null":a(p.left),p.rightType=p.right===null?"null":a(p.right),p.leftType!==p.rightType){p.setResult([p.left,p.right]).exit();return}if(p.leftType==="boolean"||p.leftType==="number"){p.setResult([p.left,p.right]).exit();return}if(p.leftType==="object"&&(p.leftIsArray=S(p.left)),p.rightType==="object"&&(p.rightIsArray=S(p.right)),p.leftIsArray!==p.rightIsArray){p.setResult([p.left,p.right]).exit();return}p.left instanceof RegExp&&(p.right instanceof RegExp?p.setResult([p.left.toString(),p.right.toString()]).exit():p.setResult([p.left,p.right]).exit())};_.filterName="trivial";var T=function(p){if(typeof p.delta>"u"){p.setResult(p.left).exit();return}if(p.nested=!S(p.delta),!p.nested){if(p.delta.length===1){p.setResult(p.delta[0]).exit();return}if(p.delta.length===2){if(p.left instanceof RegExp){var y=/^\/(.*)\/([gimyu]+)$/.exec(p.delta[1]);if(y){p.setResult(new RegExp(y[1],y[2])).exit();return}}p.setResult(p.delta[1]).exit();return}p.delta.length===3&&p.delta[2]===0&&p.setResult(void 0).exit()}};T.filterName="trivial";var O=function(p){if(typeof p.delta>"u"){p.setResult(p.delta).exit();return}if(p.nested=!S(p.delta),!p.nested){if(p.delta.length===1){p.setResult([p.delta[0],0,0]).exit();return}if(p.delta.length===2){p.setResult([p.delta[1],p.delta[0]]).exit();return}p.delta.length===3&&p.delta[2]===0&&p.setResult([p.delta[0]]).exit()}};O.filterName="trivial";function D(B){if(!(!B||!B.children)){for(var p=B.children.length,y=void 0,z=B.result,L=0;L"u")&&(z=z||{},z[y.childName]=y.result);z&&B.leftIsArray&&(z._t="a"),B.setResult(z).exit()}}D.filterName="collectChildren";function Y(B){if(!(B.leftIsArray||B.leftType!=="object")){var p=void 0,y=void 0,z=B.options.propertyFilter;for(p in B.left)Object.prototype.hasOwnProperty.call(B.left,p)&&(z&&!z(p,B)||(y=new V(B.left[p],B.right[p]),B.push(y,p)));for(p in B.right)Object.prototype.hasOwnProperty.call(B.right,p)&&(z&&!z(p,B)||typeof B.left[p]>"u"&&(y=new V(void 0,B.right[p]),B.push(y,p)));if(!B.children||B.children.length===0){B.setResult(void 0).exit();return}B.exit()}}Y.filterName="objects";var q=function(p){if(p.nested&&!p.delta._t){var y=void 0,z=void 0;for(y in p.delta)z=new C(p.left[y],p.delta[y]),p.push(z,y);p.exit()}};q.filterName="objects";var a1=function(p){if(!(!p||!p.children)&&!p.delta._t){for(var y=p.children.length,z=void 0,L=0;Lk?--w:--m}}return E},Z=function(p,y,z,L){var m=L||{},w=R(p,y,z||j,m),E=e1(w,p,y,m);return typeof p=="string"&&typeof y=="string"&&(E.sequence=E.sequence.join("")),E},i1={get:Z},X=3,n1=typeof Array.isArray=="function"?Array.isArray:function(B){return B instanceof Array},N=typeof Array.prototype.indexOf=="function"?function(B,p){return B.indexOf(p)}:function(B,p){for(var y=B.length,z=0;z"u"?"undefined":a(m))!=="object"||(typeof w>"u"?"undefined":a(w))!=="object")return!1;var E=L.objectHash;if(!E)return L.matchByPosition&&y===z;var A=void 0,I=void 0;return typeof y=="number"?(L.hashCache1=L.hashCache1||[],A=L.hashCache1[y],typeof A>"u"&&(L.hashCache1[y]=A=E(m,y))):A=E(m),typeof A>"u"||(typeof z=="number"?(L.hashCache2=L.hashCache2||[],I=L.hashCache2[z],typeof I>"u"&&(L.hashCache2[z]=I=E(w,z))):I=E(w),typeof I>"u")?!1:A===I}var V1=function(p){if(p.leftIsArray){var y={objectHash:p.options&&p.options.objectHash,matchByPosition:p.options&&p.options.matchByPosition},z=0,L=0,m=void 0,w=void 0,E=void 0,A=p.left,I=p.right,k=A.length,F=I.length,G=void 0;for(k>0&&F>0&&!y.objectHash&&typeof y.matchByPosition!="boolean"&&(y.matchByPosition=!W(A,I,k,F));z0){for(var S1=0;S1=0;y--){z=w[y];var I=L["_"+z],k=m.splice(z,1)[0];I[2]===X&&E.push({index:I[1],value:k})}E=E.sort(c1.numericallyBy("index"));var F=E.length;for(y=0;y0)for(y=0;yL?L++:E>=L&&A"u"&&(m=p1(B.delta,y.childName,y.result)),z[m]!==y.result&&(z[m]=y.result)}B.setResult(z).exit()}}b1.filterName="arraysCollectChildren";var _1=function(p){p.left instanceof Date?(p.right instanceof Date?p.left.getTime()!==p.right.getTime()?p.setResult([p.left,p.right]):p.setResult(void 0):p.setResult([p.left,p.right]),p.exit()):p.right instanceof Date&&p.setResult([p.left,p.right]).exit()};_1.filterName="dates";function z1(B,p){return p={exports:{}},B(p,p.exports),p.exports}var C1=z1(function(B){function p(){this.Diff_Timeout=1,this.Diff_EditCost=4,this.Match_Threshold=.5,this.Match_Distance=1e3,this.Patch_DeleteThreshold=.5,this.Patch_Margin=4,this.Match_MaxBits=32}var y=-1,z=1,L=0;p.prototype.diff_main=function(m,w,E,A){typeof A>"u"&&(this.Diff_Timeout<=0?A=Number.MAX_VALUE:A=new Date().getTime()+this.Diff_Timeout*1e3);var I=A;if(m==null||w==null)throw new Error("Null input. (diff_main)");if(m==w)return m?[[L,m]]:[];typeof E>"u"&&(E=!0);var k=E,F=this.diff_commonPrefix(m,w),G=m.substring(0,F);m=m.substring(F),w=w.substring(F),F=this.diff_commonSuffix(m,w);var t1=m.substring(m.length-F);m=m.substring(0,m.length-F),w=w.substring(0,w.length-F);var v1=this.diff_compute_(m,w,k,I);return G&&v1.unshift([L,G]),t1&&v1.push([L,t1]),this.diff_cleanupMerge(v1),v1},p.prototype.diff_compute_=function(m,w,E,A){var I;if(!m)return[[z,w]];if(!w)return[[y,m]];var k=m.length>w.length?m:w,F=m.length>w.length?w:m,G=k.indexOf(F);if(G!=-1)return I=[[z,k.substring(0,G)],[L,F],[z,k.substring(G+F.length)]],m.length>w.length&&(I[0][0]=I[2][0]=y),I;if(F.length==1)return[[y,m],[z,w]];var t1=this.diff_halfMatch_(m,w);if(t1){var v1=t1[0],w1=t1[1],N1=t1[2],K1=t1[3],U=t1[4],J=this.diff_main(v1,N1,E,A),h1=this.diff_main(w1,K1,E,A);return J.concat([[L,U]],h1)}return E&&m.length>100&&w.length>100?this.diff_lineMode_(m,w,A):this.diff_bisect_(m,w,A)},p.prototype.diff_lineMode_=function(m,w,E){var A=this.diff_linesToChars_(m,w);m=A.chars1,w=A.chars2;var I=A.lineArray,k=this.diff_main(m,w,!1,E);this.diff_charsToLines_(k,I),this.diff_cleanupSemantic(k),k.push([L,""]);for(var F=0,G=0,t1=0,v1="",w1="";F=1&&t1>=1){k.splice(F-G-t1,G+t1),F=F-G-t1;for(var A=this.diff_main(v1,w1,!1,E),N1=A.length-1;N1>=0;N1--)k.splice(F,0,A[N1]);F=F+A.length}t1=0,G=0,v1="",w1="";break}F++}return k.pop(),k},p.prototype.diff_bisect_=function(m,w,E){for(var A=m.length,I=w.length,k=Math.ceil((A+I)/2),F=k,G=2*k,t1=new Array(G),v1=new Array(G),w1=0;w1E);O1++){for(var S1=-O1+U;S1<=O1-J;S1+=2){var e0=F+S1,G1;S1==-O1||S1!=O1&&t1[e0-1]A)J+=2;else if(n0>I)U+=2;else if(K1){var j1=F+N1-S1;if(j1>=0&&j1=J1)return this.diff_bisectSplit_(m,w,G1,n0,E)}}}for(var U1=-O1+h1;U1<=O1-y1;U1+=2){var j1=F+U1,J1;U1==-O1||U1!=O1&&v1[j1-1]A)y1+=2;else if(t0>I)h1+=2;else if(!K1){var e0=F+N1-U1;if(e0>=0&&e0=J1)return this.diff_bisectSplit_(m,w,G1,n0,E)}}}}return[[y,m],[z,w]]},p.prototype.diff_bisectSplit_=function(m,w,E,A,I){var k=m.substring(0,E),F=w.substring(0,A),G=m.substring(E),t1=w.substring(A),v1=this.diff_main(k,F,!1,I),w1=this.diff_main(G,t1,!1,I);return v1.concat(w1)},p.prototype.diff_linesToChars_=function(m,w){var E=[],A={};E[0]="";function I(G){for(var t1="",v1=0,w1=-1,N1=E.length;w1A?m=m.substring(E-A):Ew.length?m:w,A=m.length>w.length?w:m;if(E.length<4||A.length*2=J.length?[G1,n0,j1,J1,e0]:null}var F=k(E,A,Math.ceil(E.length/4)),G=k(E,A,Math.ceil(E.length/2)),t1;if(!F&&!G)return null;G?F?t1=F[4].length>G[4].length?F:G:t1=G:t1=F;var v1,w1,N1,K1;m.length>w.length?(v1=t1[0],w1=t1[1],N1=t1[2],K1=t1[3]):(N1=t1[0],K1=t1[1],v1=t1[2],w1=t1[3]);var U=t1[4];return[v1,w1,N1,K1,U]},p.prototype.diff_cleanupSemantic=function(m){for(var w=!1,E=[],A=0,I=null,k=0,F=0,G=0,t1=0,v1=0;k0?E[A-1]:-1,F=0,G=0,t1=0,v1=0,I=null,w=!0)),k++;for(w&&this.diff_cleanupMerge(m),this.diff_cleanupSemanticLossless(m),k=1;k=U?(K1>=w1.length/2||K1>=N1.length/2)&&(m.splice(k,0,[L,N1.substring(0,K1)]),m[k-1][1]=w1.substring(0,w1.length-K1),m[k+1][1]=N1.substring(K1),k++):(U>=w1.length/2||U>=N1.length/2)&&(m.splice(k,0,[L,w1.substring(0,U)]),m[k-1][0]=z,m[k-1][1]=N1.substring(0,N1.length-U),m[k+1][0]=y,m[k+1][1]=w1.substring(U),k++),k++}k++}},p.prototype.diff_cleanupSemanticLossless=function(m){function w(U,J){if(!U||!J)return 6;var h1=U.charAt(U.length-1),y1=J.charAt(0),O1=h1.match(p.nonAlphaNumericRegex_),S1=y1.match(p.nonAlphaNumericRegex_),e0=O1&&h1.match(p.whitespaceRegex_),G1=S1&&y1.match(p.whitespaceRegex_),n0=e0&&h1.match(p.linebreakRegex_),j1=G1&&y1.match(p.linebreakRegex_),J1=n0&&U.match(p.blanklineEndRegex_),U1=j1&&J.match(p.blanklineStartRegex_);return J1||U1?5:n0||j1?4:O1&&!e0&&G1?3:e0||G1?2:O1||S1?1:0}for(var E=1;E=N1&&(N1=K1,t1=A,v1=I,w1=k)}m[E-1][1]!=t1&&(t1?m[E-1][1]=t1:(m.splice(E-1,1),E--),m[E][1]=v1,w1?m[E+1][1]=w1:(m.splice(E+1,1),E--))}E++}},p.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/,p.whitespaceRegex_=/\s/,p.linebreakRegex_=/[\r\n]/,p.blanklineEndRegex_=/\n\r?\n$/,p.blanklineStartRegex_=/^\r?\n\r?\n/,p.prototype.diff_cleanupEfficiency=function(m){for(var w=!1,E=[],A=0,I=null,k=0,F=!1,G=!1,t1=!1,v1=!1;k0?E[A-1]:-1,t1=v1=!1),w=!0)),k++;w&&this.diff_cleanupMerge(m)},p.prototype.diff_cleanupMerge=function(m){m.push([L,""]);for(var w=0,E=0,A=0,I="",k="",F;w1?(E!==0&&A!==0&&(F=this.diff_commonPrefix(k,I),F!==0&&(w-E-A>0&&m[w-E-A-1][0]==L?m[w-E-A-1][1]+=k.substring(0,F):(m.splice(0,0,[L,k.substring(0,F)]),w++),k=k.substring(F),I=I.substring(F)),F=this.diff_commonSuffix(k,I),F!==0&&(m[w][1]=k.substring(k.length-F)+m[w][1],k=k.substring(0,k.length-F),I=I.substring(0,I.length-F))),E===0?m.splice(w-A,E+A,[z,k]):A===0?m.splice(w-E,E+A,[y,I]):m.splice(w-E-A,E+A,[y,I],[z,k]),w=w-E-A+(E?1:0)+(A?1:0)+1):w!==0&&m[w-1][0]==L?(m[w-1][1]+=m[w][1],m.splice(w,1)):w++,A=0,E=0,I="",k="";break}m[m.length-1][1]===""&&m.pop();var G=!1;for(w=1;ww));F++)I=E,k=A;return m.length!=F&&m[F][0]===y?k:k+(w-I)},p.prototype.diff_prettyHtml=function(m){for(var w=[],E=/&/g,A=//g,k=/\n/g,F=0;F");switch(G){case z:w[F]=''+v1+"";break;case y:w[F]=''+v1+"";break;case L:w[F]=""+v1+"";break}}return w.join("")},p.prototype.diff_text1=function(m){for(var w=[],E=0;Ethis.Match_MaxBits)throw new Error("Pattern too long for this browser.");var A=this.match_alphabet_(w),I=this;function k(G1,n0){var j1=G1/w.length,J1=Math.abs(E-n0);return I.Match_Distance?j1+J1/I.Match_Distance:J1?1:j1}var F=this.Match_Threshold,G=m.indexOf(w,E);G!=-1&&(F=Math.min(k(0,G),F),G=m.lastIndexOf(w,E+w.length),G!=-1&&(F=Math.min(k(0,G),F)));var t1=1<=J;O1--){var S1=A[m.charAt(O1-1)];if(U===0?y1[O1]=(y1[O1+1]<<1|1)&S1:y1[O1]=(y1[O1+1]<<1|1)&S1|((K1[O1+1]|K1[O1])<<1|1)|K1[O1+1],y1[O1]&t1){var e0=k(U,O1-1);if(e0<=F)if(F=e0,G=O1-1,G>E)J=Math.max(1,2*E-G);else break}}if(k(U+1,E)>F)break;K1=y1}return G},p.prototype.match_alphabet_=function(m){for(var w={},E=0;E"u")A=m,I=this.diff_main(A,w,!0),I.length>2&&(this.diff_cleanupSemantic(I),this.diff_cleanupEfficiency(I));else if(m&&typeof m=="object"&&typeof w>"u"&&typeof E>"u")I=m,A=this.diff_text1(I);else if(typeof m=="string"&&w&&typeof w=="object"&&typeof E>"u")A=m,I=w;else if(typeof m=="string"&&typeof w=="string"&&E&&typeof E=="object")A=m,I=E;else throw new Error("Unknown call format to patch_make.");if(I.length===0)return[];for(var k=[],F=new p.patch_obj,G=0,t1=0,v1=0,w1=A,N1=A,K1=0;K1=2*this.Patch_Margin&&G&&(this.patch_addContext_(F,w1),k.push(F),F=new p.patch_obj,G=0,w1=N1,t1=v1);break}U!==z&&(t1+=J.length),U!==y&&(v1+=J.length)}return G&&(this.patch_addContext_(F,w1),k.push(F)),k},p.prototype.patch_deepCopy=function(m){for(var w=[],E=0;Ethis.Match_MaxBits?(t1=this.match_main(w,G.substring(0,this.Match_MaxBits),F),t1!=-1&&(v1=this.match_main(w,G.substring(G.length-this.Match_MaxBits),F+G.length-this.Match_MaxBits),(v1==-1||t1>=v1)&&(t1=-1))):t1=this.match_main(w,G,F),t1==-1)I[k]=!1,A-=m[k].length2-m[k].length1;else{I[k]=!0,A=t1-F;var w1;if(v1==-1?w1=w.substring(t1,t1+G.length):w1=w.substring(t1,v1+this.Match_MaxBits),G==w1)w=w.substring(0,t1)+this.diff_text2(m[k].diffs)+w.substring(t1+G.length);else{var N1=this.diff_main(G,w1,!1);if(G.length>this.Match_MaxBits&&this.diff_levenshtein(N1)/G.length>this.Patch_DeleteThreshold)I[k]=!1;else{this.diff_cleanupSemanticLossless(N1);for(var K1=0,U,J=0;Jk[0][1].length){var F=w-k[0][1].length;k[0][1]=E.substring(k[0][1].length)+k[0][1],I.start1-=F,I.start2-=F,I.length1+=F,I.length2+=F}if(I=m[m.length-1],k=I.diffs,k.length==0||k[k.length-1][0]!=L)k.push([L,E]),I.length1+=w,I.length2+=w;else if(w>k[k.length-1][1].length){var F=w-k[k.length-1][1].length;k[k.length-1][1]+=E.substring(0,F),I.length1+=F,I.length2+=F}return E},p.prototype.patch_splitMax=function(m){for(var w=this.Match_MaxBits,E=0;E2*w?(G.length1+=w1.length,I+=w1.length,t1=!1,G.diffs.push([v1,w1]),A.diffs.shift()):(w1=w1.substring(0,w-G.length1-this.Patch_Margin),G.length1+=w1.length,I+=w1.length,v1===L?(G.length2+=w1.length,k+=w1.length):t1=!1,G.diffs.push([v1,w1]),w1==A.diffs[0][1]?A.diffs.shift():A.diffs[0][1]=A.diffs[0][1].substring(w1.length))}F=this.diff_text2(G.diffs),F=F.substring(F.length-this.Patch_Margin);var N1=this.diff_text1(A.diffs).substring(0,this.Patch_Margin);N1!==""&&(G.length1+=N1.length,G.length2+=N1.length,G.diffs.length!==0&&G.diffs[G.diffs.length-1][0]===L?G.diffs[G.diffs.length-1][1]+=N1:G.diffs.push([L,N1])),t1||m.splice(++E,0,G)}}},p.prototype.patch_toText=function(m){for(var w=[],E=0;E1&&(t[r]=(t[r]||0)+1):t[e]=(t[e]||0)+1,t}var ne=function(e,t){var r=0,n=1,a=1,i=0,s=0,c=0,h=1,u=1,o=0,l=1,f=1,v=1,M=1e7,d;if(e!=null)if(t!==void 0){if(r=e,n=t,a=r*n,r%1!==0||n%1!==0)throw z6()}else switch(typeof e){case"object":{if("d"in e&&"n"in e)r=e.n,n=e.d,"s"in e&&(r*=e.s);else if(0 in e)r=e[0],1 in e&&(n=e[1]);else throw Qt();a=r*n;break}case"number":{if(e<0&&(a=e,e=-e),e%1===0)r=e;else if(e>0){for(e>=1&&(u=Math.pow(10,Math.floor(1+Math.log(e)/Math.LN10)),e/=u);l<=M&&v<=M;)if(d=(o+f)/(l+v),e===d){l+v<=M?(r=o+f,n=l+v):v>l?(r=f,n=v):(r=o,n=l);break}else e>d?(o+=f,l+=v):(f+=o,v+=l),l>M?(r=f,n=v):(r=o,n=l);r*=u}else(isNaN(e)||isNaN(t))&&(n=r=NaN);break}case"string":{if(l=e.match(/\d+|./g),l===null)throw Qt();if(l[o]==="-"?(a=-1,o++):l[o]==="+"&&o++,l.length===o+1?s=Oe(l[o++],a):l[o+1]==="."||l[o]==="."?(l[o]!=="."&&(i=Oe(l[o++],a)),o++,(o+1===l.length||l[o+1]==="("&&l[o+3]===")"||l[o+1]==="'"&&l[o+3]==="'")&&(s=Oe(l[o],a),h=Math.pow(10,l[o].length),o++),(l[o]==="("&&l[o+2]===")"||l[o]==="'"&&l[o+2]==="'")&&(c=Oe(l[o+1],a),u=Math.pow(10,l[o+1].length)-1,o+=3)):l[o+1]==="/"||l[o+1]===":"?(s=Oe(l[o],a),h=Oe(l[o+2],1),o+=3):l[o+3]==="/"&&l[o+1]===" "&&(i=Oe(l[o],a),s=Oe(l[o+2],a),h=Oe(l[o+4],1),o+=5),l.length<=o){n=h*u,a=r=c+n*i+u*s;break}}default:throw Qt()}if(n===0)throw V4();R1.s=a<0?-1:1,R1.n=Math.abs(r),R1.d=Math.abs(n)};function p6(e,t,r){for(var n=1;t>0;e=e*e%r,t>>=1)t&1&&(n=n*e%r);return n}function m6(e,t){for(;t%2===0;t/=2);for(;t%5===0;t/=5);if(t===1)return 0;for(var r=10%t,n=1;r!==1;n++)if(r=r*10%t,n>d6)return 0;return n}function g6(e,t,r){for(var n=1,a=p6(10,r,t),i=0;i<300;i++){if(n===a)return i;n=n*10%t,a=a*10%t}return 0}function N5(e,t){if(!e)return t;if(!t)return e;for(;;){if(e%=t,!e)return t;if(t%=e,!t)return e}}function ie(e,t){if(ne(e,t),this instanceof ie)e=N5(R1.d,R1.n),this.s=R1.s,this.n=R1.n/e,this.d=R1.d/e;else return y0(R1.s*R1.n,R1.d)}var V4=function(){return new Error("Division by Zero")},Qt=function(){return new Error("Invalid argument")},z6=function(){return new Error("Parameters must be integer")};ie.prototype={s:1,n:0,d:1,abs:function(){return y0(this.n,this.d)},neg:function(){return y0(-this.s*this.n,this.d)},add:function(e,t){return ne(e,t),y0(this.s*this.n*R1.d+R1.s*this.d*R1.n,this.d*R1.d)},sub:function(e,t){return ne(e,t),y0(this.s*this.n*R1.d-R1.s*this.d*R1.n,this.d*R1.d)},mul:function(e,t){return ne(e,t),y0(this.s*R1.s*this.n*R1.n,this.d*R1.d)},div:function(e,t){return ne(e,t),y0(this.s*R1.s*this.n*R1.d,this.d*R1.n)},clone:function(){return y0(this.s*this.n,this.d)},mod:function(e,t){if(isNaN(this.n)||isNaN(this.d))return new ie(NaN);if(e===void 0)return y0(this.s*this.n%this.d,1);if(ne(e,t),R1.n===0&&this.d===0)throw V4();return y0(this.s*(R1.d*this.n)%(R1.n*this.d),R1.d*this.d)},gcd:function(e,t){return ne(e,t),y0(N5(R1.n,this.n)*N5(R1.d,this.d),R1.d*this.d)},lcm:function(e,t){return ne(e,t),R1.n===0&&this.n===0?y0(0,1):y0(R1.n*this.n,N5(R1.n,this.n)*N5(R1.d,this.d))},ceil:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new ie(NaN):y0(Math.ceil(e*this.s*this.n/this.d),e)},floor:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new ie(NaN):y0(Math.floor(e*this.s*this.n/this.d),e)},round:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new ie(NaN):y0(Math.round(e*this.s*this.n/this.d),e)},roundTo:function(e,t){return ne(e,t),y0(this.s*Math.round(this.n*R1.d/(this.d*R1.n))*R1.n,R1.d)},inverse:function(){return y0(this.s*this.d,this.n)},pow:function(e,t){if(ne(e,t),R1.d===1)return R1.s<0?y0(Math.pow(this.s*this.d,R1.n),Math.pow(this.n,R1.n)):y0(Math.pow(this.s*this.n,R1.n),Math.pow(this.d,R1.n));if(this.s<0)return null;var r=Ln(this.n),n=Ln(this.d),a=1,i=1;for(var s in r)if(s!=="1"){if(s==="0"){a=0;break}if(r[s]*=R1.n,r[s]%R1.d===0)r[s]/=R1.d;else return null;a*=Math.pow(s,r[s])}for(var s in n)if(s!=="1"){if(n[s]*=R1.n,n[s]%R1.d===0)n[s]/=R1.d;else return null;i*=Math.pow(s,n[s])}return R1.s<0?y0(i,a):y0(a,i)},equals:function(e,t){return ne(e,t),this.s*this.n*R1.d===R1.s*R1.n*this.d},compare:function(e,t){ne(e,t);var r=this.s*this.n*R1.d-R1.s*R1.n*this.d;return(0=0;i--)a=a.inverse().add(r[i]);if(Math.abs(a.sub(t).valueOf())0&&(r+=t,r+=" ",n%=a),r+=n,r+="/",r+=a),r},toLatex:function(e){var t,r="",n=this.n,a=this.d;return this.s<0&&(r+="-"),a===1?r+=n:(e&&(t=Math.floor(n/a))>0&&(r+=t,n%=a),r+="\\frac{",r+=n,r+="}{",r+=a,r+="}"),r},toContinued:function(){var e,t=this.n,r=this.d,n=[];if(isNaN(t)||isNaN(r))return n;do n.push(Math.floor(t/r)),e=t%r,t=r,r=e;while(t!==1);return n},toString:function(e){var t=this.n,r=this.d;if(isNaN(t)||isNaN(r))return"NaN";e=e||15;var n=m6(t,r),a=g6(t,r,n),i=this.s<0?"-":"";if(i+=t/r|0,t%=r,t*=10,t&&(i+="."),n){for(var s=a;s--;)i+=t/r|0,t%=r,t*=10;i+="(";for(var s=n;s--;)i+=t/r|0,t%=r,t*=10;i+=")"}else for(var s=e;t&&s--;)i+=t/r|0,t%=r,t*=10;return i}};var y6="Fraction",M6=[],w6=O0(y6,M6,()=>(ie.prototype.type="Fraction",ie.prototype.isFraction=!0,ie.prototype.toJSON=function(){return{mathjs:"Fraction",n:this.s*this.n,d:this.d}},ie.fromJSON=function(e){return new ie(e)},ie),{isClass:!0}),H6="Matrix",b6=[],C6=O0(H6,b6,()=>{function e(){if(!(this instanceof e))throw new SyntaxError("Constructor must be called with the new operator")}return e.prototype.type="Matrix",e.prototype.isMatrix=!0,e.prototype.storage=function(){throw new Error("Cannot invoke storage on a Matrix interface")},e.prototype.datatype=function(){throw new Error("Cannot invoke datatype on a Matrix interface")},e.prototype.create=function(t,r){throw new Error("Cannot invoke create on a Matrix interface")},e.prototype.subset=function(t,r,n){throw new Error("Cannot invoke subset on a Matrix interface")},e.prototype.get=function(t){throw new Error("Cannot invoke get on a Matrix interface")},e.prototype.set=function(t,r,n){throw new Error("Cannot invoke set on a Matrix interface")},e.prototype.resize=function(t,r){throw new Error("Cannot invoke resize on a Matrix interface")},e.prototype.reshape=function(t,r){throw new Error("Cannot invoke reshape on a Matrix interface")},e.prototype.clone=function(){throw new Error("Cannot invoke clone on a Matrix interface")},e.prototype.size=function(){throw new Error("Cannot invoke size on a Matrix interface")},e.prototype.map=function(t,r){throw new Error("Cannot invoke map on a Matrix interface")},e.prototype.forEach=function(t){throw new Error("Cannot invoke forEach on a Matrix interface")},e.prototype[Symbol.iterator]=function(){throw new Error("Cannot iterate a Matrix interface")},e.prototype.toArray=function(){throw new Error("Cannot invoke toArray on a Matrix interface")},e.prototype.valueOf=function(){throw new Error("Cannot invoke valueOf on a Matrix interface")},e.prototype.format=function(t){throw new Error("Cannot invoke format on a Matrix interface")},e.prototype.toString=function(){throw new Error("Cannot invoke toString on a Matrix interface")},e},{isClass:!0}),V6="DenseMatrix",L6=["Matrix"],S6=O0(V6,L6,e=>{var{Matrix:t}=e;function r(o,l){if(!(this instanceof r))throw new SyntaxError("Constructor must be called with the new operator");if(l&&!ke(l))throw new Error("Invalid datatype: "+l);if(K0(o))o.type==="DenseMatrix"?(this._data=P0(o._data),this._size=P0(o._size),this._datatype=l||o._datatype):(this._data=o.toArray(),this._size=o.size(),this._datatype=l||o._datatype);else if(o&&M0(o.data)&&M0(o.size))this._data=o.data,this._size=o.size,wn(this._data,this._size),this._datatype=l||o.datatype;else if(M0(o))this._data=u(o),this._size=z5(this._data),wn(this._data,this._size),this._datatype=l;else{if(o)throw new TypeError("Unsupported type of data ("+lt(o)+")");this._data=[],this._size=[0],this._datatype=l}}r.prototype=new t,r.prototype.createDenseMatrix=function(o,l){return new r(o,l)},r.prototype.type="DenseMatrix",r.prototype.isDenseMatrix=!0,r.prototype.getDataType=function(){return n2(this._data,lt)},r.prototype.storage=function(){return"dense"},r.prototype.datatype=function(){return this._datatype},r.prototype.create=function(o,l){return new r(o,l)},r.prototype.subset=function(o,l,f){switch(arguments.length){case 1:return n(this,o);case 2:case 3:return i(this,o,l,f);default:throw new SyntaxError("Wrong number of arguments")}},r.prototype.get=function(o){if(!M0(o))throw new TypeError("Array expected");if(o.length!==this._size.length)throw new H0(o.length,this._size.length);for(var l=0;l");var C=l.max().map(function(_){return _+1});h(o,C,v);var x=M.length,S=0;s(o._data,l,f,x,S)}return o}function s(o,l,f,v,M){var d=M===v-1,H=l.dimension(M);d?H.forEach(function(g,V){w0(g),o[g]=f[V[0]]}):H.forEach(function(g,V){w0(g),s(o[g],l,f[V[0]],v,M+1)})}r.prototype.resize=function(o,l,f){if(!Sa(o))throw new TypeError("Array or Matrix expected");var v=o.valueOf().map(d=>Array.isArray(d)&&d.length===1?d[0]:d),M=f?this.clone():this;return c(M,v,l)};function c(o,l,f){if(l.length===0){for(var v=o._data;M0(v);)v=v[0];return v}return o._size=l.slice(0),o._data=Hn(o._data,o._size,f),o}r.prototype.reshape=function(o,l){var f=l?this.clone():this;f._data=Ql(f._data,o);var v=f._size.reduce((M,d)=>M*d);return f._size=b4(o,v),f};function h(o,l,f){for(var v=o._size.slice(0),M=!1;v.lengthv[d]&&(v[d]=l[d],M=!0);M&&c(o,v,f)}r.prototype.clone=function(){var o=new r({data:P0(this._data),size:P0(this._size),datatype:this._datatype});return o},r.prototype.size=function(){return this._size.slice(0)},r.prototype.map=function(o){var l=this,f=function d(H,g){return M0(H)?H.map(function(V,C){return d(V,g.concat(C))}):o(H,g,l)},v=f(this._data,[]),M=this._datatype!==void 0?n2(v,lt):void 0;return new r(v,M)},r.prototype.forEach=function(o){var l=this,f=function v(M,d){M0(M)?M.forEach(function(H,g){v(H,d.concat(g))}):o(M,d,l)};f(this._data,[])},r.prototype[Symbol.iterator]=function*(){var o=function*l(f,v){if(M0(f))for(var M=0;M[C[g]]);l.push(new r(V,o._datatype))},d=0;d0?o:0,f=o<0?-o:0,v=this._size[0],M=this._size[1],d=Math.min(v-f,M-l),H=[],g=0;g0?f:0,d=f<0?-f:0,H=o[0],g=o[1],V=Math.min(H-d,g-M),C;if(M0(l)){if(l.length!==V)throw new Error("Invalid value array length");C=function(O){return l[O]}}else if(K0(l)){var x=l.size();if(x.length!==1||x[0]!==V)throw new Error("Invalid matrix length");C=function(O){return l.get([O])}}else C=function(){return l};v||(v=ve(C(0))?C(0).mul(0):0);var S=[];if(o.length>0){S=Hn(S,o,v);for(var _=0;_{var{typed:t,config:r}=e;return t(c2,{"boolean, boolean":function(a,i){return a===i},"number, number":function(a,i){return r2(a,i,r.epsilon)},"BigNumber, BigNumber":function(a,i){return a.eq(i)||E6(a,i,r.epsilon)},"Fraction, Fraction":function(a,i){return a.equals(i)},"Complex, Complex":function(a,i){return _6(a,i,r.epsilon)},"Unit, Unit":function(a,i){if(!a.equalBase(i))throw new Error("Cannot compare units with different base");return this(a.value,i.value)}})});O0(c2,["typed","config"],e=>{var{typed:t,config:r}=e;return t(c2,{"number, number":function(a,i){return r2(a,i,r.epsilon)}})});var N6="SparseMatrix",O6=["typed","equalScalar","Matrix"],T6=O0(N6,O6,e=>{var{typed:t,equalScalar:r,Matrix:n}=e;function a(d,H){if(!(this instanceof a))throw new SyntaxError("Constructor must be called with the new operator");if(H&&!ke(H))throw new Error("Invalid datatype: "+H);if(K0(d))i(this,d,H);else if(d&&M0(d.index)&&M0(d.ptr)&&M0(d.size))this._values=d.values,this._index=d.index,this._ptr=d.ptr,this._size=d.size,this._datatype=H||d.datatype;else if(M0(d))s(this,d,H);else{if(d)throw new TypeError("Unsupported type of data ("+lt(d)+")");this._values=[],this._index=[],this._ptr=[0],this._size=[0,0],this._datatype=H}}function i(d,H,g){H.type==="SparseMatrix"?(d._values=H._values?P0(H._values):void 0,d._index=P0(H._index),d._ptr=P0(H._ptr),d._size=P0(H._size),d._datatype=g||H._datatype):s(d,H.valueOf(),g||H._datatype)}function s(d,H,g){d._values=[],d._index=[],d._ptr=[],d._datatype=g;var V=H.length,C=0,x=r,S=0;if(ke(g)&&(x=t.find(r,[g,g])||r,S=t.convert(0,g)),V>0){var _=0;do{d._ptr.push(d._index.length);for(var T=0;T");if(C.length===1){var O=H.dimension(0);O.forEach(function(q,a1){w0(q),d.set([q,0],g[a1[0]],V)})}else{var D=H.dimension(0),Y=H.dimension(1);D.forEach(function(q,a1){w0(q),Y.forEach(function(M1,s1){w0(M1),d.set([q,M1],g[a1[0]][s1[0]],V)})})}}return d}a.prototype.get=function(d){if(!M0(d))throw new TypeError("Array expected");if(d.length!==this._size.length)throw new H0(d.length,this._size.length);if(!this._values)throw new Error("Cannot invoke get on a Pattern only matrix");var H=d[0],g=d[1];w0(H,this._size[0]),w0(g,this._size[1]);var V=u(H,this._ptr[g],this._ptr[g+1],this._index);return Vx-1||C>S-1)&&(f(this,Math.max(V+1,x),Math.max(C+1,S),g),x=this._size[0],S=this._size[1]),w0(V,x),w0(C,S);var O=u(V,this._ptr[C],this._ptr[C+1],this._index);return OArray.isArray(x)&&x.length===1?x[0]:x);if(V.length!==2)throw new Error("Only two dimensions matrix are supported");V.forEach(function(x){if(!V0(x)||!R0(x)||x<0)throw new TypeError("Invalid size, must contain positive integers (size: "+J0(V)+")")});var C=g?this.clone():this;return f(C,V[0],V[1],H)};function f(d,H,g,V){var C=V||0,x=r,S=0;ke(d._datatype)&&(x=t.find(r,[d._datatype,d._datatype])||r,S=t.convert(0,d._datatype),C=t.convert(C,d._datatype));var _=!x(C,S),T=d._size[0],O=d._size[1],D,Y,q;if(g>O){for(Y=O;YT){if(_){var a1=0;for(Y=0;YH-1&&(d._values.splice(q,1),d._index.splice(q,1),s1++)}d._ptr[Y]=d._values.length}return d._size[0]=H,d._size[1]=g,d}a.prototype.reshape=function(d,H){if(!M0(d))throw new TypeError("Array expected");if(d.length!==2)throw new Error("Sparse matrices can only be reshaped in two dimensions");d.forEach(function(i1){if(!V0(i1)||!R0(i1)||i1<=-2||i1===0)throw new TypeError("Invalid size, must contain positive integers or -1 (size: "+J0(d)+")")});var g=this._size[0]*this._size[1];d=b4(d,g);var V=d[0]*d[1];if(g!==V)throw new Error("Reshaping sparse matrix will result in the wrong number of elements");var C=H?this.clone():this;if(this._size[0]===d[0]&&this._size[1]===d[1])return C;for(var x=[],S=0;S=H&&R<=g&&q(d._values[j],R-H,a1-V)}else{for(var e1={},Z=M1;Z "+(this._values?J0(this._values[T],d):"X")}return C},a.prototype.toString=function(){return J0(this.toArray())},a.prototype.toJSON=function(){return{mathjs:"SparseMatrix",values:this._values,index:this._index,ptr:this._ptr,size:this._size,datatype:this._datatype}},a.prototype.diagonal=function(d){if(d){if(ve(d)&&(d=d.toNumber()),!V0(d)||!R0(d))throw new TypeError("The parameter k must be an integer number")}else d=0;var H=d>0?d:0,g=d<0?-d:0,V=this._size[0],C=this._size[1],x=Math.min(V-g,C-H),S=[],_=[],T=[];T[0]=0;for(var O=H;O0?g:0,T=g<0?-g:0,O=d[0],D=d[1],Y=Math.min(O-T,D-_),q;if(M0(H)){if(H.length!==Y)throw new Error("Invalid value array length");q=function(X){return H[X]}}else if(K0(H)){var a1=H.size();if(a1.length!==1||a1[0]!==Y)throw new Error("Invalid matrix length");q=function(X){return H.get([X])}}else q=function(){return H};for(var M1=[],s1=[],j=[],R=0;R=0&&e1=T||C[D]!==H)){var q=V?V[O]:void 0;C.splice(D,0,H),V&&V.splice(D,0,q),C.splice(D<=O?O+1:O,1),V&&V.splice(D<=O?O+1:O,1);continue}if(D=T||C[O]!==d)){var a1=V?V[D]:void 0;C.splice(O,0,d),V&&V.splice(O,0,a1),C.splice(O<=D?D+1:D,1),V&&V.splice(O<=D?D+1:D,1)}}},a},{isClass:!0}),Sn="matrix",k6=["typed","Matrix","DenseMatrix","SparseMatrix"],I6=O0(Sn,k6,e=>{var{typed:t,Matrix:r,DenseMatrix:n,SparseMatrix:a}=e;return t(Sn,{"":function(){return i([])},string:function(c){return i([],c)},"string, string":function(c,h){return i([],c,h)},Array:function(c){return i(c)},Matrix:function(c){return i(c,c.storage())},"Array | Matrix, string":i,"Array | Matrix, string, string":i});function i(s,c,h){if(c==="dense"||c==="default"||c===void 0)return new n(s,h);if(c==="sparse")return new a(s,h);throw new TypeError("Unknown matrix type "+JSON.stringify(c)+".")}}),En="addScalar",P6=["typed"],R6=O0(En,P6,e=>{var{typed:t}=e;return t(En,{"number, number":ni,"Complex, Complex":function(n,a){return n.add(a)},"BigNumber, BigNumber":function(n,a){return n.plus(a)},"Fraction, Fraction":function(n,a){return n.add(a)},"Unit, Unit":function(n,a){if(n.value===null||n.value===void 0)throw new Error("Parameter x contains a unit with undefined value");if(a.value===null||a.value===void 0)throw new Error("Parameter y contains a unit with undefined value");if(!n.equalBase(a))throw new Error("Units do not match");var i=n.clone();return i.value=this(i.value,a.value),i.fixPrefix=!1,i}})}),D6="algorithm11",j6=["typed","equalScalar"],F6=O0(D6,j6,e=>{var{typed:t,equalScalar:r}=e;return function(a,i,s,c){var h=a._values,u=a._index,o=a._ptr,l=a._size,f=a._datatype;if(!h)throw new Error("Cannot perform operation on Pattern Sparse Matrix and Scalar value");var v=l[0],M=l[1],d,H=r,g=0,V=s;typeof f=="string"&&(d=f,H=t.find(r,[d,d]),g=t.convert(0,d),i=t.convert(i,d),V=t.find(s,[d,d]));for(var C=[],x=[],S=[],_=0;_{var{typed:t}=e;return function(a,i,s,c){var h=a._data,u=a._size,o=a._datatype,l,f=s;typeof o=="string"&&(l=o,i=t.convert(i,l),f=t.find(s,[l,l]));var v=u.length>0?r(f,0,u,u[0],h,i,c):[];return a.createDenseMatrix({data:v,size:P0(u),datatype:l})};function r(n,a,i,s,c,h,u){var o=[];if(a===i.length-1)for(var l=0;l{var{typed:t}=e;return t("multiplyScalar",{"number, number":ai,"Complex, Complex":function(n,a){return n.mul(a)},"BigNumber, BigNumber":function(n,a){return n.times(a)},"Fraction, Fraction":function(n,a){return n.mul(a)},"number | Fraction | BigNumber | Complex, Unit":function(n,a){var i=a.clone();return i.value=i.value===null?i._normalize(n):this(i.value,n),i},"Unit, number | Fraction | BigNumber | Complex":function(n,a){var i=n.clone();return i.value=i.value===null?i._normalize(a):this(i.value,a),i},"Unit, Unit":function(n,a){return n.multiply(a)}})}),_n="multiply",G6=["typed","matrix","addScalar","multiplyScalar","equalScalar","dot"],Y6=O0(_n,G6,e=>{var{typed:t,matrix:r,addScalar:n,multiplyScalar:a,equalScalar:i,dot:s}=e,c=F6({typed:t,equalScalar:i}),h=U6({typed:t});function u(S,_){switch(S.length){case 1:switch(_.length){case 1:if(S[0]!==_[0])throw new RangeError("Dimension mismatch in multiplication. Vectors must have the same length");break;case 2:if(S[0]!==_[0])throw new RangeError("Dimension mismatch in multiplication. Vector length ("+S[0]+") must match Matrix rows ("+_[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+_.length+" dimensions)")}break;case 2:switch(_.length){case 1:if(S[1]!==_[0])throw new RangeError("Dimension mismatch in multiplication. Matrix columns ("+S[1]+") must match Vector length ("+_[0]+")");break;case 2:if(S[1]!==_[0])throw new RangeError("Dimension mismatch in multiplication. Matrix A columns ("+S[1]+") must match Matrix B rows ("+_[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+_.length+" dimensions)")}break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix A has "+S.length+" dimensions)")}}function o(S,_,T){if(T===0)throw new Error("Cannot multiply two empty vectors");return s(S,_)}function l(S,_){if(_.storage()!=="dense")throw new Error("Support for SparseMatrix not implemented");return f(S,_)}function f(S,_){var T=S._data,O=S._size,D=S._datatype,Y=_._data,q=_._size,a1=_._datatype,M1=O[0],s1=q[1],j,R=n,e1=a;D&&a1&&D===a1&&typeof D=="string"&&(j=D,R=t.find(n,[j,j]),e1=t.find(a,[j,j]));for(var Z=[],i1=0;i1m1)for(var d1=0,p1=0;p1{var{typed:t}=e;return t(An,{number:function(n){return n},BigNumber:function(n){return n},Complex:function(n){return n.conjugate()},"Array | Matrix":function(n){return ti(n,this)}})});function Z6(){throw new Error('No "matrix" implementation available')}var xn="size",J6=["typed","config","?matrix"],e8=O0(xn,J6,e=>{var{typed:t,config:r,matrix:n}=e;return t(xn,{Matrix:function(i){return i.create(i.size())},Array:z5,string:function(i){return r.matrix==="Array"?[i.length]:n([i.length])},"number | Complex | BigNumber | Unit | boolean | null":function(i){return r.matrix==="Array"?[]:n?n([]):Z6()}})}),Nn="dot",t8=["typed","addScalar","multiplyScalar","conj","size"],r8=O0(Nn,t8,e=>{var{typed:t,addScalar:r,multiplyScalar:n,conj:a,size:i}=e;return t(Nn,{"Array | DenseMatrix, Array | DenseMatrix":c,"SparseMatrix, SparseMatrix":h});function s(o,l){var f=u(o),v=u(l),M,d;if(f.length===1)M=f[0];else if(f.length===2&&f[1]===1)M=f[0];else throw new RangeError("Expected a column vector, instead got a matrix of size ("+f.join(", ")+")");if(v.length===1)d=v[0];else if(v.length===2&&v[1]===1)d=v[0];else throw new RangeError("Expected a column vector, instead got a matrix of size ("+v.join(", ")+")");if(M!==d)throw new RangeError("Vectors must have equal length ("+M+" != "+d+")");if(M===0)throw new RangeError("Cannot calculate the dot product of empty vectors");return M}function c(o,l){var f=s(o,l),v=K0(o)?o._data:o,M=K0(o)?o._datatype:void 0,d=K0(l)?l._data:l,H=K0(l)?l._datatype:void 0,g=u(o).length===2,V=u(l).length===2,C=r,x=n;if(M&&H&&M===H&&typeof M=="string"){var S=M;C=t.find(r,[S,S]),x=t.find(n,[S,S])}if(!g&&!V){for(var _=x(a(v[0]),d[0]),T=1;T_){x++;continue}S===_&&(H=g(H,V(v[C],d[x])),C++,x++)}return H}function u(o){return K0(o)?o.size():i(o)}}),n8=l6({config:w2}),a8=v6({}),i8=w6({}),L4=C6({}),ii=S6({Matrix:L4}),Fe=f7({BigNumber:n8,Complex:a8,DenseMatrix:ii,Fraction:i8}),si=R6({typed:Fe}),s8=Q6({typed:Fe}),ci=x6({config:w2,typed:Fe}),oi=K6({typed:Fe}),c8=T6({Matrix:L4,equalScalar:ci,typed:Fe}),v5=I6({DenseMatrix:ii,Matrix:L4,SparseMatrix:c8,typed:Fe}),o8=e8({matrix:v5,config:w2,typed:Fe}),l8=r8({addScalar:si,conj:s8,multiplyScalar:oi,size:o8,typed:Fe}),_r=Y6({addScalar:si,dot:l8,equalScalar:ci,matrix:v5,multiplyScalar:oi,typed:Fe});const On=4,h8=600,S4=32;let Se={semantic:{viewportHeight:192,viewportUnit:8},gauge:{viewportHeight:256,viewportUnit:8}};const E4=Lc(async()=>{Object.assign(Se,await ce.get("/api/predict/viewport"))},{maxAge:10*60*60}),o2=async(e,t,{paddingLeft:r=0,scaling:n=1,spec:a=Se.semantic}={})=>{if(!e||!e.backgroundImage)return null;const i=e.staves[t];if(!i)return null;const s=a.viewportHeight/a.viewportUnit/2,c=e.imagePosition.width*a.viewportUnit,h=e.imagePosition.height*a.viewportUnit,u=e.imagePosition.x*a.viewportUnit+r,o=(e.imagePosition.y-(i.top+i.staffY-s))*a.viewportUnit,l=new Image(c*n,h*n);l.crossOrigin="anonymous",l.src=e.backgroundImage,await new Promise((M,d)=>{l.onload=M,l.onerror=d});const f=document.createElement("canvas");f.height=a.viewportHeight*n,f.width=Math.round(c+u)*n;const v=f.getContext("2d");return v.fillStyle="white",v.fillRect(0,0,f.width,f.height),v.drawImage(l,u*n,o*n,c*n,h*n),f.toDataURL("image/png")},li=async(e,t,r)=>{const n=e.staves[t];if(n.backgroundImage||(n.backgroundImage=await o2(e,t,r)),!n.backgroundImage.startsWith("data:")){const i=await(await fetch(n.backgroundImage)).blob();return new Promise((s,c)=>{const h=new FileReader;h.onload=u=>s(u.target.result),h.onerror=c,h.readAsDataURL(i)})}return n.backgroundImage},Ht=async(e,t)=>{const r=await ce.post(`/api/predict/${e}`,{data:{images:t.map(n=>n.split(",")[1])},timeout:3e5});return i5(r,s5)},Zt=new Image,Ar=new Image,u8=document.createElement("canvas"),et=new yc({canvas:u8,source:Zt,gauge:Ar}),f8=async(e,t,r=null)=>{Zt.src=e,Ar.src=t,await Promise.all([new Promise(i=>Zt.onload=()=>{et.updateMaterial({width:Zt.naturalWidth/2}),i(null)}),new Promise(i=>Ar.onload=async()=>{et.updateGeometry(r),i(null)})]);const n=et.render(),a={width:et.width,height:et.height};return console.draw(e,"变形矫正-小图"),console.draw(t,"变形矫正-热力图"),console.draw(n,"变形矫正-结果"),{dataURL:n,size:a}},v8=async({middleY:e,staff:t,sourceURL:r,gaugeURL:n,paddingLeft:a})=>{const i=(e-(t.top+t.staffY))*Se.gauge.viewportUnit+Se.gauge.viewportHeight/2,{dataURL:s,size:c}=await f8(r,n,i),h=Se.semantic;t.backgroundImage=s,t.imagePosition={x:-a/h.viewportUnit,y:t.staffY-h.viewportHeight/2/h.viewportUnit,width:c.width/h.viewportUnit,height:c.height/h.viewportUnit}},d8=({page:e,backgroundImage:t,detection:r,imageSize:n,position:a})=>{const i=(r.phi2-r.phi1)/r.interval,s=n.height/r.interval,c=e.systems[e.systems.length-1],h=a?a.y:(c?c.top+c.height:0)+On,u=a?a.x:On,o=[0,...Array(r.middleRhos.length-1).fill(0).map((M,d)=>(r.middleRhos[d]+r.middleRhos[d+1])/2/r.interval)],l=[i],f=o.map((M,d)=>new ac({top:M,height:(o[d+1]||s)-M,staffY:r.middleRhos[d]/r.interval-M,measureBars:l})),v={x:-r.phi1/r.interval,y:0,width:n.width/r.interval,height:n.height/r.interval};return new ic({staves:f,left:u,top:h,width:i,backgroundImage:t,imagePosition:v,measureBars:l})},p8=async(e,t=h8)=>{const r=c=>4*Math.round(c/4),n=t,a=r(e.height/e.width*t),i=document.createElement("canvas");i.width=n,i.height=a;const s=i.getContext("2d");return s.fillStyle="white",s.fillRect(0,0,n,a),s.drawImage(e,0,0,e.width,e.height,0,0,n,a),{dataURL:i.toDataURL(),width:n,height:a}},W2=(e,t,r=null)=>{e.width=t.naturalWidth,e.height=t.naturalHeight;const n=e.getContext("2d");Array.isArray(r)&&n.setTransform(...r),n.imageSmoothingQuality="high",n.imageSmoothingEnabled=!0,n.drawImage(t,0,0,t.naturalWidth,t.naturalHeight)},m8=(e,t,r,n,a)=>{const[i,s]=[t/2,r/2],[c,h]=[n/2,a/2],[u,o,l,f,v,M]=e,d=u*c-l*h+v-i,H=-o*c+f*h+M-s;return[u,o,l,f,d,H]},g8=async e=>{var h,u,o;if(!((h=e==null?void 0:e.source)!=null&&h.dimensions)||!((u=e==null?void 0:e.source)!=null&&u.url)||!Number.isFinite((o=e==null?void 0:e.source)==null?void 0:o.interval))return console.warn("[paintPageBackground] invalid page:",e.source),null;const t={width:Math.round(e.width*e.source.interval),height:Math.round(e.height*e.source.interval)},r=e.source.url;if(e.source.matrix.join(",")==="1,0,0,1,0,0"&&t.width===e.source.dimensions.width&&t.height===e.source.dimensions.height)return r;const n=new Image;n.crossOrigin="anonymous",n.src=r,await new Promise((l,f)=>{n.onload=l,n.onerror=f});const a=document.createElement("canvas");a.width=t.width,a.height=t.height;const i=a.getContext("2d");i.fillStyle="white",i.fillRect(0,0,a.width,a.height),i.imageSmoothingQuality="high",i.imageSmoothingEnabled=!0;const s=m8(e.source.matrix,e.source.dimensions.width,e.source.dimensions.height,t.width,t.height);return i.setTransform(...s),i.drawImage(n,0,0),a.toDataURL("image/png")},Tn=async({pageLayoutByBlock:e,sourceCanvas:t,targetSize:r,paintRect:n=null})=>{const[a]=await Ht("layout",[(await p8(t,r.width)).dataURL]);n=n||{x:0,y:0,...r};const i=1,s=a.interval*i*Math.cos(a.theta);console.debug("layout measure:",a.theta,s,a.interval),console.draw(a.image,"布局识别");const c=Math.cos(a.theta),h=Math.sin(a.theta),u=t.width/2,o=t.height/2,l=[c,h,-h,c,((1-c)*u+h*o)*i,(-h*u+(1-c)*o)*i];return{theta:a.theta,interval:s,detection:{...a.detection,pageSize:r},rotation:l,canvas:t}},z8=async({score:e,staves:t,withCache:r=!1})=>{var c,h,u;if(!e)return;const n=S4;await E4();const a=Se.semantic,i=t.map(([o,l,f])=>{var v,M,d,H,g;return(g=(H=(d=(M=(v=e.pages)==null?void 0:v[o])==null?void 0:M.systems)==null?void 0:d[l])==null?void 0:H.staves)==null?void 0:g[f]});if(r&&i.every(o=>o.maskImage))return;const s=[];for(const[o,l,f]of t){const v=(u=(h=(c=e.pages)==null?void 0:c[o])==null?void 0:h.systems)==null?void 0:u[l];s.push(await li(v,f,{paddingLeft:n}))}try{const o=await Ht("mask",s);console.assert(o.length===s.length,"prediction result length mismatch:",o.length,s.length),o.length!==s.length&&oe.error("前景分离错误");for(const[l,f]of i.entries()){if(r&&f.maskImage)continue;const v=o[l];console.draw(v.image,"前景分离结果");const M=await new Promise(d=>{const H=new Image;H.src=v.image,H.onload=()=>d({width:H.naturalWidth,height:H.naturalHeight})});f.maskImage=v.image,f.imagePosition={x:-n/a.viewportUnit,y:f.staffY-a.viewportHeight/2/a.viewportUnit,width:M.width/a.viewportUnit,height:M.height/a.viewportUnit}}}catch(o){console.warn("System mask predicting failed:",o)}},y8=async({score:e,staves:t})=>{var i,s,c,h,u,o,l;if(!e)return;const r=S4;await E4();const n=[],a=[];for(const[f,v,M]of t){const d=(c=(s=(i=e.pages)==null?void 0:i[f])==null?void 0:s.systems)==null?void 0:c[v];n.push(await o2(d,M,{paddingLeft:r,spec:Se.gauge})),a.push(await o2(d,M,{paddingLeft:r,scaling:2,spec:Se.gauge}))}try{const f=await Ht("gauge",n);console.assert(f.length===n.length,"prediction result length mismatch:",f.length,n.length),f.length!==n.length&&oe.error("变形矫正错误");for(const[v,[M,d,H]]of t.entries()){const g=(o=(u=(h=e.pages)==null?void 0:h[M])==null?void 0:u.systems)==null?void 0:o[d],V=(l=g==null?void 0:g.staves)==null?void 0:l[H],C=g.middleY,x=f[v],S=a[v],_=x.image;await v8({middleY:C,staff:V,sourceURL:S,gaugeURL:_,paddingLeft:r}),V.maskImage=null}}catch(f){f&&oe.error("System gauge predicting failed:"),console.warn("System gauge predicting failed:",f)}},M8=async({score:e,staves:t})=>{var i,s,c,h,u,o,l,f;if(!e)return;const r=S4,n=[],a=[];for(const[v,M,d]of t){const H=(c=(s=(i=e.pages)==null?void 0:i[v])==null?void 0:s.systems)==null?void 0:c[M];if(H&&H.staves.every(V=>V.backgroundImage)&&!H.backgroundImage){const V=await Promise.all(H.staves.map(async C=>ta(C.backgroundImage)));n.push(...V),a.push(...H.staves.map((C,x)=>[v,M,x]))}else{if(!(H!=null&&H.backgroundImage)){console.warn("not valid system:",v,M);continue}n.push(await li(H,d,{paddingLeft:r})),a.push([v,M,d])}}if(n.length!==0){await E4();try{const v=await Ht("semantic",n);console.assert(v.length===n.length,"prediction result length mismatch:",v.length,n.length),v.length!==n.length&&oe.error("语义点识别错误");const M=new Set(a.map(([d,H])=>{var g,V,C;return(C=(V=(g=e.pages)==null?void 0:g[d])==null?void 0:V.systems)==null?void 0:C[H]}).filter(Boolean));for(const d of M)d.clearTokens();for(const[d,[H,g,V]]of a.entries()){const C=(o=(u=(h=e.pages)==null?void 0:h[H])==null?void 0:u.systems)==null?void 0:o[g],x=(l=C==null?void 0:C.staves)==null?void 0:l[V],S=v[d];S.offset(-r/Se.semantic.viewportUnit,0),C.assignSemantics(V,S),x.assignSemantics(S),x.clearPredictedTokens(),e.assembleSystem(C,((f=e.settings)==null?void 0:f.semanticConfidenceThreshold)||1)}}catch(v){console.warn("System predicting failed:",v)}}};function It(e,t,r){r.forEach(([n,a,i])=>{e.splice(n,a,t[i])})}const kn=(e,t,r,n=1)=>{const a=v5([[1,0,t],[0,1,r],[0,0,1]]),i=v5([[1,0,-t],[0,1,-r],[0,0,1]]);let[s,c,h,u,o,l]=e;const f=v5([[s*n,h,o],[c,u*n,l],[0,0,1]]);return[[s,h,o],[c,u,l]]=_r(_r(a,f),i).toArray(),[s,c,h,u,o,l]},w8=(e,t)=>{const[r,n,a,i,s,c]=e,[h,u,o,l,f,v]=t,M=v5([[r,a,s],[n,i,c],[0,0,1]]),d=v5([[h,o,f],[u,l,v],[0,0,1]]),H=_r(M,d),[[g,V,C],[x,S,_]]=H.toArray();return[g,x,V,S,C,_]};async function H8(e,t,{sourceImage:r,croppedAreaCanvas:n,pageLayoutByBlock:a,clipPoints:i}){var v,M,d,H;const s=!!i;let c=e.pages[t],h=null;const u=[];let o=[];if(s){console.assert(Number.isFinite(c.source.interval),"the page source interval not initialized");const g=c.source.interval/e.unitSize,V={x:r.naturalWidth/2,y:r.naturalHeight/2},C={x:e.pageSize.width/2,y:e.pageSize.height/2},x={x:e.pageSize.width/100,y:e.pageSize.height/100},S={x:(i[0].x*x.x-C.x)*g+V.x,y:(i[0].y*x.y-C.y)*g+V.y,width:(i[2].x-i[0].x)*x.x*g,height:(i[2].y-i[0].y)*x.y*g},_=document.createElement("canvas");_.width=S.width,_.height=S.height;const T=_.getContext("2d");T.fillStyle="#fff",T.fillRect(0,0,S.width,S.height);const O=kn(c.source.matrix,V.x-S.x,V.y-S.y);T.setTransform(...O),T.imageSmoothingQuality="high",T.imageSmoothingEnabled=!0,T.drawImage(r,-S.x,-S.y),console.draw(_.toDataURL(),"partial canvas");const{detection:D,rotation:Y,interval:q}=await Tn({pageLayoutByBlock:a,sourceCanvas:_,targetSize:c.source.dimensions,paintRect:S}),a1=w8(kn(c.source.matrix,V.x,V.y),Y);c.systems.length||(c.source.interval=q);const M1=document.createElement("canvas");W2(M1,r,a1);const s1=(M=(v=e.pages[t])==null?void 0:v.layout)==null?void 0:M.areas,j=D.areas;h=M1,s1?(j.forEach((R,e1)=>{const Z=b8([{x:R.x,y:R.y},{x:R.x+R.width,y:R.y},{x:R.x+R.width,y:R.y+R.height},{x:R.x,y:R.y+R.height}]),i1=R.y+R.height/2,X=s1.reduce((n1,N,W)=>{const f1=C8(R,N)/Z;return f1>n1.ratio?{ratio:f1,index:W}:n1},{ratio:0,index:null});if(X.index!==null&&X.ratio>.6){const n1=[X.index,1,e1];u.push(n1),It(s1,j,[n1]),It(c.systems,j.map(()=>null),[n1])}else{const n1=s1.map((f1,V1)=>({centerY:f1.y+f1.height/2,index:V1}));let N=0;for(const f1 of n1)i1>f1.centerY&&(N=f1.index+1);const W=[N,0,e1];u.push(W),It(s1,j,[W]),It(c.systems,j.map(()=>null),[W])}}),c.layout=e.pages[t].layout,o=s1.map(R=>j.includes(R)).map((R,e1)=>R?e1:null).filter(R=>R!==null)):(c.layout=D,o=D.areas.map((R,e1)=>e1))}else{W2(n,r);const{detection:g,rotation:V,theta:C,interval:x}=await Tn({pageLayoutByBlock:a,sourceCanvas:n,targetSize:c.source.dimensions});h=n,W2(n,r,V),c.layout=g,c.source.matrix=[Math.cos(C),-Math.sin(C),Math.sin(C),Math.cos(C),0,0],c.source.interval=x}if(!((H=(d=c==null?void 0:c.layout)==null?void 0:d.areas)!=null&&H.length))return null;e.pages[t].layout=c.layout;const l=c.layout,f=c.source.interval;return Number.isFinite(e.unitSize)||(e.unitSize=e.pageSize.width/(l.pageSize.width/f)),c.width=e.pageSize.width/e.unitSize,c.height=e.pageSize.height/e.unitSize,l.areas.map((g,V)=>({systemIndex:V,area:g})).filter(({area:g})=>g.staves&&g.staves.middleRhos.length).forEach(({area:g,systemIndex:V})=>{if(!(g.staves&&g.staves.middleRhos.length)||s&&!o.includes(V))return;const S=h.getContext("2d").getImageData(g.x,g.y,g.width,g.height),_=document.createElement("canvas");_.width=g.width,_.height=g.height,_.getContext("2d").putImageData(S,0,0);const O=_.toDataURL(),D=g.staves,Y={width:g.width,height:g.height},q={x:c.source.dimensions.width/2/f,y:c.source.dimensions.height/2/f},a1={x:(g.x+g.staves.phi1)/f-q.x+c.width/2,y:g.y/f-q.y+c.height/2};c.systems[V]=d8({page:c,backgroundImage:O,detection:D,imageSize:Y,position:a1})}),{actions:u,changedSystems:o}}function b8(e){const t=e.length;let r=0;e.length>1&&(e=e.concat(e[0]));for(let n=0;n{const t=M5(),[r,n]=F5(),[a,i]=aa(),s=P.useRef(Array(E0.length).fill(null).map(()=>[])),[c,h]=P.useState(s.current),[u,o]=P.useState(!1),[l,f]=s4(),v=P.useRef(null),M=P.useRef(0),[d,H]=P.useState(!1),g=P.useRef(null),[V,C]=u9(),[x,S]=P.useState(null),[_,T]=P.useState(null),[O,D]=P.useState(null),[Y,q]=P.useState(new Set(E0.map((o1,d1)=>d1))),[a1,M1]=Y4("stampRowMax",120),[s1,j]=Y4("stampRowExportMax",10),R=()=>{i(!1)},e1=P.useRef({}),[Z,i1,X]=P.useMemo(()=>{if(!a)return[[],[],[]];const o1=[],d1=[],p1=E0.map(()=>[]);return r.pages.forEach((_1,z1)=>{_1.systems.forEach((C1,T1)=>{o1.push(...C1.sidWhiteList),d1.push(...C1.sidBlackList),C1.staves.forEach((L1,P1)=>{L1.semantics&&L1.semantics.forEach(q1=>{if(E0.includes(q1.semantic)){const o0=E0.indexOf(q1.semantic);p1[o0].push({point:q1,pageIndex:z1,systemIndex:T1,staffIndex:P1})}})})})}),[p1.map(_1=>{_1.sort((T1,L1)=>T1.point.confidence-L1.point.confidence);const z1=_1.filter(T1=>T1.point.confidence<1).reverse().filter((T1,L1)=>L1T1.point.confidence>=1).slice(0,a1);return[...z1,...C1]}),o1,d1]},[r,a]),n1=async()=>{var b1;o(!0),s.current=Array(E0.length).fill(null).map(()=>[]),h([]);const o1=r.systems.length;let d1=0;const p1=new Map([].concat(...Z.map(_1=>_1.map(z1=>[z1.point.id,z1]))));e:for(const _1 of r.systems){for(let z1=0;z1<_1.staves.length;++z1){if(!g.current)break e;const C1=_1.staves[z1];if(!C1.imagePosition)continue;const T1=new Image;if((b1=C1.semantics)==null?void 0:b1.some(q1=>p1.has(q1.id)&&!e1.current[q1.id])){const q1=C1.maskImage;if(!q1){console.warn("staff image missed:",C1);return}T1.crossOrigin="anonymous",T1.src=q1,await new Promise(o0=>T1.onload=o0)}const P1=T1.height/C1.imagePosition.height;C1.semantics.forEach(q1=>{if(p1.has(q1.id)){if(!e1.current[q1.id]){const[$,Q,r1,K]=q4[q1.semantic],g1=q1.x-C1.imagePosition.x+$,E1=q1.y+C1.staffY-C1.imagePosition.y+Q,x1={image:T1,x:(g1-r1/2)*P1,y:(E1-K/2)*P1,width:r1*P1,height:K*P1,cx:$*P1,cy:Q*P1},A1=.5*be.width-x1.width/2+x1.cx,H1=.5*be.height-x1.height/2+x1.cy;tt.drawImage(x1.image,x1.x,x1.y,x1.width,x1.height,A1*Z0,H1*Z0,x1.width*Z0,x1.height*Z0),e1.current[q1.id]=mt.toDataURL("image/png"),tt.clearRect(0,0,be.width*Z0,be.height*Z0)}const o0=p1.get(q1.id);s.current[E0.indexOf(q1.semantic)].push({image:e1.current[q1.id],pageIndex:o0.pageIndex,systemIndex:o0.systemIndex,staffIndex:o0.staffIndex,point:q1})}}),h(s.current.slice(0))}++d1,D(d1===o1?null:Math.ceil(d1/o1*100))}H(!0),o(!1)},N=async()=>{o(!0),T(1e-9),tt.imageSmoothingQuality="high";const o1=E0.map(()=>[]),d1=r.sidWhiteList,p1=r.sidBlackList,b1=new Map([].concat(...Z.map((C1,T1)=>Y.has(T1)?[...C1].sort((P1,q1)=>P1.point.confidence-q1.point.confidence).filter(P1=>d1.has(P1.point.id)||P1.point.confidence>=r.settings.semanticConfidenceThreshold&&!p1.has(P1.point.id)).filter((P1,q1)=>d1.has(P1.point.id)||q1[P1.point.id,P1]):[])));let _1=0;console.debug("Export begin:",b1.size,"in totoal."),await Promise.all(r.systems.map(async C1=>{for(let T1=0;T1b1.has(g1.id));if(!P1.length)continue;const q1=L1.backgroundImage||await o2(C1,T1,{paddingLeft:-L1.imagePosition.x*Se.semantic.viewportUnit}),o0=L1.maskImage;if(!q1||!o0){console.warn("staff image missed:",L1);return}const $=new Image;$.crossOrigin="anonymous",$.src=o0;const Q=new Image;Q.crossOrigin="anonymous",Q.src=q1,await Promise.all([new Promise(g1=>Q.onload=g1),new Promise(g1=>$.onload=g1)]);const r1=document.createElement("canvas");r1.width=Q.width,r1.height=Q.height;{const g1=cv.imread($),E1=cv.imread(Q),x1=new cv.MatVector;cv.split(g1,x1);const A1=new cv.MatVector;cv.split(E1,A1);const H1=new cv.Mat;x1.get(3).convertTo(H1,cv.CV_32FC1,1/255),cv.pow(H1,.6,H1),H1.convertTo(H1,cv.CV_8UC1,255);const k1=new cv.MatVector;k1.push_back(A1.get(0)),k1.push_back(A1.get(1)),k1.push_back(A1.get(2)),k1.push_back(H1),cv.merge(k1,E1),cv.imshow(r1,E1),g1.delete(),E1.delete(),k1.delete()}const K=$.height/L1.imagePosition.height;P1.forEach(g1=>{const E1=E0.indexOf(g1.semantic),[x1,A1,H1,k1]=q4[g1.semantic],l1=g1.x-L1.imagePosition.x+x1,I1=g1.y+L1.staffY-L1.imagePosition.y+A1,D1={image:r1,x:(l1-H1/2)*K,y:(I1-k1/2)*K,width:H1*K,height:k1*K,cx:x1*K,cy:A1*K},s0=.5*be.width-D1.width/2+D1.cx,Q1=.5*be.height-D1.height/2+D1.cy;tt.drawImage(D1.image,D1.x,D1.y,D1.width,D1.height,s0*Z0,Q1*Z0,D1.width*Z0,D1.height*Z0);const u0=b1.get(g1.id);o1[E1].push({image:mt.toDataURL("image/png"),pageIndex:u0.pageIndex,systemIndex:u0.systemIndex,staffIndex:u0.staffIndex,point:g1}),tt.clearRect(0,0,be.width*Z0,be.height*Z0),++_1,T(_1===b1.size?null:Math.ceil(_1/b1.size*100))})}})),T(null),o(!1);const z1={unitSize:{width:160,height:160},semantics:E0,stamps:o1.map(C1=>C1.map(T1=>({semantic:T1.point.semantic,id:T1.point.id,confidence:T1.point.confidence,image:T1.image})))};C(JSON.stringify(z1)),console.debug(JSON.stringify(z1)),oe.success(t.formatMessage({id:"common.copiedToClipboard"}))};P.useEffect(()=>{g.current=a,a?n1():(H(!1),f(null))},[a]),P.useLayoutEffect(()=>{const o1=document.getElementById(`anchor-${l==null?void 0:l.point.id}`);o1&&o1.scrollIntoView({block:"center",behavior:"smooth"})},[l]);const W=o1=>d1=>{var p1,b1,_1;if(d1.stopPropagation(),d1.shiftKey)f(o1);else{f(null);const z1=o1.point.confidence>=r.settings.semanticConfidenceThreshold?"sidBlackList":"sidWhiteList",C1=(_1=(b1=(p1=r.pages)==null?void 0:p1[o1.pageIndex])==null?void 0:b1.systems[o1.systemIndex])==null?void 0:_1[z1];if(C1){const T1=C1.indexOf(o1.point.id);T1>-1?C1.splice(T1,1):C1.push(o1.point.id)}n(c0(r,{modify:!0}))}},f1=o1=>()=>{var d1,p1;S(o1),!l&&((p1=(d1=document.getElementById(o1.point.id))==null?void 0:d1.classList)==null||p1.add("highlight"))},V1=o1=>()=>{var d1,p1;S(null),!l&&((p1=(d1=document.getElementById(o1.point.id))==null?void 0:d1.classList)==null||p1.remove("highlight"))},c1=o1=>{if(o1.buttons===4)switch(o1.type){case"mousedown":M.current=o1.currentTarget.scrollLeft,v.current=o1.clientX;break;case"mousemove":v.current!==null&&!/Windows/.test(navigator.userAgent)&&(o1.currentTarget.scrollLeft=M.current-o1.clientX+v.current);break;case"mouseup":v.current=null;break}},m1=()=>{H(!0)};return b.jsx(fr,{title:b.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginRight:"40px"},children:[b.jsxs(C0,{children:[t.formatMessage({id:"playground.marking.annotation"}),O!==null&&b.jsx(dr,{type:"circle",percent:O,width:20,strokeWidth:10,showInfo:!1})]}),b.jsxs(C0,{children:[b.jsx(pr,{title:"snapshot row width max",children:b.jsx(J4,{defaultValue:a1,onChange:o1=>M1(o1)})}),b.jsx(pr,{title:"export row width max",children:b.jsx(J4,{defaultValue:s1,onChange:o1=>j(o1)})}),b.jsx(i0,{onClick:async()=>{Y.sized1))):q(new Set([]))},children:Y.size{e1.current={},await n1()}}),b.jsx(i0,{icon:b.jsx(Jo,{}),onClick:m1,children:t.formatMessage({id:"playground.marking.sort"})}),b.jsx(i0,{onClick:N,disabled:_!==null||Y.size===0,children:b.jsxs(C0,{children:[_!==null?b.jsx(dr,{type:"circle",percent:_,strokeWidth:10,width:20,showInfo:!1}):b.jsx(Ho,{}),t.formatMessage({id:"playground.marking.export"})]})})]})]}),placement:"right",width:"50%",onClose:R,open:a,mask:!1,bodyStyle:{padding:0},style:{marginTop:"64px",height:"calc(100vh - 64px)"},...e,children:b.jsxs("div",{style:{position:"relative",width:"100%",height:"100%",overflow:"auto"},children:[b.jsxs("div",{className:"marking-body",children:[b.jsx("div",{className:"marking-col",style:{direction:"rtl"},onMouseDown:c1,onMouseMove:c1,onMouseUp:c1,onClick:o1=>f(null),children:E0.map(o1=>{var d1;return b.jsx("div",{style:{flex:1,flexShrink:0},className:"marking-item-row",children:(d1=c[E0.indexOf(o1)])==null?void 0:d1.filter(p1=>p1.point.confidenced?b1.point.confidence-p1.point.confidence:null).map((p1,b1)=>b.jsx("div",{className:W1("with-coord",{active:(l==null?void 0:l.point.id)===p1.point.id,white:i1.includes(p1.point.id)}),onClick:W(p1),onMouseEnter:f1(p1),onMouseLeave:V1(p1),children:b.jsx("img",{src:p1.image,style:{width:"50px",height:"50px"}})},b1))},o1)})}),b.jsx("div",{style:{display:"flex",flexDirection:"column",width:"50px",flexShrink:0},children:E0.map(o1=>F1[o1]||hi[o1]).map(o1=>o1&&o1.split("|").reverse()[0]).map((o1,d1)=>b.jsxs("svg",{viewBox:"0 0 10 10",className:W1("marking-tag",{checked:Y.has(d1)}),onClick:()=>{Y.has(d1)?Y.delete(d1):Y.add(d1),q(new Set(Y.values()))},children:[b.jsxs("g",{transform:"scale(0.8)",style:{transformOrigin:"center center"},children:[b.jsx("line",{x1:"5",x2:"5",y1:"0",y2:"10",stroke:"steelblue",strokeWidth:"0.06",strokeDasharray:"0.2 0.3"}),b.jsx("line",{x1:"0",x2:"10",y1:"5",y2:"5",stroke:"steelblue",strokeWidth:"0.06",strokeDasharray:"0.2 0.3"})]}),b.jsx("g",{transform:"translate(5, 5)",children:b.jsx("use",{color:"black",fill:"black",xlinkHref:`#score-token-def-${o1}`})}),b.jsx("title",{children:E0[d1]})]},o1))}),b.jsx("div",{className:"marking-col",onMouseDown:c1,onMouseMove:c1,onMouseUp:c1,onClick:o1=>f(null),children:E0.map(o1=>{var d1;return b.jsx("div",{style:{flex:1,flexShrink:0},children:(d1=c[E0.indexOf(o1)])==null?void 0:d1.filter(p1=>p1.point.confidence>=r.settings.semanticConfidenceThreshold).sort((p1,b1)=>d?p1.point.confidence-b1.point.confidence:null).map((p1,b1)=>b.jsx("div",{className:W1("with-coord",{active:(l==null?void 0:l.point.id)===p1.point.id,black:X.includes(p1.point.id)}),onClick:W(p1),onMouseEnter:f1(p1),onMouseLeave:V1(p1),children:b.jsx("img",{src:p1.image,style:{width:"50px",height:"50px"}})},b1))},o1)})})]}),x&&b.jsxs("div",{className:"zoom-box with-coord",children:[b.jsx("img",{src:x.image,alt:"",style:{width:"100%",height:"100%"}}),b.jsxs(C0,{direction:"vertical",size:20,children:[b.jsx("strong",{children:x.point.semantic}),b.jsx("em",{className:"id",children:x.point.id}),b.jsxs("span",{children:["c: ",b.jsx("em",{children:x.point.confidence.toFixed(3)})]})]})]})]})})},S8=P.memo(L8),we=8,E8=12,_8=2,Pt=18,A8=({staffLayoutCode:e,staffMask:t,onChange:r,nameDict:n={}})=>{const a=M5(),i=a4(e),s=typeof t<"u";typeof t>"u"&&(t=Array(i.stavesCount).fill(!0).reduce((o,l,f)=>o+(l?1<{h(t)},[t]);const u=Array(i.stavesCount).fill(null).map((o,l)=>!!(c&1<l).filter(o=>u[o]).map(o=>({y:o*we,radius:2})),nameDict:n}),i.stavesCount>1&&b.jsx("line",{stroke:"rgba(0, 0, 0, 1)",x1:"0",x2:"0",y1:"0",y2:(i.stavesCount-1)*we+4}),b.jsx("g",{children:i.conjunctions.map((o,l)=>b.jsx("line",{className:W1("staff-layout-measure-bar",{dashed:o===1,blank:o===0}),x1:Pt,x2:Pt,y1:l*we+4,y2:(l+1)*we},l))}),new Array(i.stavesCount).fill(null).map((o,l)=>b.jsxs("g",{className:W1("staff-rect",{active:!r||!!u[l]}),children:[b.jsx(ma,{translateX:0,translateY:l*we+2,width:20}),s&&b.jsx("text",{x:8,y:l*we+2.5,fontSize:1.8,children:u[l]?"":a.formatMessage({id:"playground.hidden"})}),b.jsx("text",{x:21,y:l*we+2.5,fontSize:1.8,children:i.staffIds[l]}),b.jsx("rect",{style:{cursor:s?"pointer":"initial"},x:0,y:l*we,width:20,height:4,onClick:()=>{if(s){u[l]=!u[l];const f=u.reduce((v,M,d)=>v+(M?1<{const n=M5(),[a,i]=P.useState(null),[s,c]=P.useState(""),[h,u]=P.useState({}),[o,l]=P.useState(""),[f,v]=c4();return P.useEffect(()=>{c(t),l(t)},[t]),P.useEffect(()=>{u(e)},[e]),fa(()=>{try{Rs.parse(s),i(null)}catch(M){i(M.toString());return}l(s),r&&r({staffLayoutCode:s,instrumentDict:h})},300,[s]),b.jsxs("div",{style:{width:"100%",display:"flex",flexDirection:"column"},children:[b.jsxs(C0,{direction:"vertical",children:[b.jsx(i0,{onClick:()=>{v(!0)},children:n.formatMessage({id:"playground.selectTemplate"})}),b.jsx(u5,{addonBefore:n.formatMessage({id:"playground.trackCode"}),value:s,onInput:M=>c(M.target.value)})]}),a&&b.jsx(da,{message:a,type:"error",showIcon:!0,style:{marginBottom:"10px"}}),!a&&b.jsxs(y2,{style:{width:"100%",marginTop:"20px"},children:[b.jsx(Pe,{span:12,children:b.jsx(_4,{staffLayoutCode:o,nameDict:h})}),b.jsx(Pe,{span:12,children:b.jsx("div",{style:{paddingLeft:"20px"},children:a4(o).groups.map((M,d)=>b.jsx(u5,{style:{marginBottom:"5px"},addonBefore:b.jsx("div",{children:M.key}),value:h==null?void 0:h[M.key],placeholder:`${n.formatMessage({id:"playground.instrumentName"})}-${M.key}`,onChange:H=>{h[M.key]=H.target.value;const g={...h,[M.key]:H.target.value};u(g),r&&r({staffLayoutCode:o,instrumentDict:g})}},d))})})]})]})};const ui=[{nameKey:"playground.preset.singleTrack",code:"",track:1},{nameKey:"playground.preset.grandStaff",code:"{-}",track:2},{nameKey:"playground.preset.piano",code:"{pr-pl}",track:2},{nameKey:"playground.preset.twoTrackDefault",code:",",track:2},{nameKey:"playground.preset.threeTrackDefault",code:",,",track:3},{nameKey:"playground.preset.fourTrackDefault",code:",,,",track:4},{nameKey:"playground.preset.fiveTrackDefault",code:",,,,",track:5},{nameKey:"playground.preset.sixTrackDefault",code:",,,,,",track:6},{nameKey:"playground.preset.sevenTrackDefault",code:",,,,,,",track:7},{nameKey:"playground.preset.eightTrackDefault",code:",,,,,,,",track:8},{nameKey:"playground.preset.nineTrackDefault",code:",,,,,,,,",track:9},{nameKey:"playground.preset.tenTrackDefault",code:",,,,,,,,,",track:10},{nameKey:"playground.preset.vocalPiano",code:"vo {pr-pl}",track:3},{nameKey:"playground.preset.violinPiano",code:"vi {pr-pl}",track:3},{nameKey:"playground.preset.pianoStrings",code:"{pr-pl} st",track:3},{nameKey:"playground.preset.twoPianos",code:"{p1r-p1l} {p2r-p2l}",track:4},{nameKey:"playground.preset.stringQuartet",code:"",track:4},{nameKey:"playground.preset.windBand",code:" <[cor1-cor2]-trombe-[tenori-basso]>",track:9}],In={"pr-pl":"Piano",vo:"Voice",vi:"Violin",st:"String","p1r-p1l":"Piano I","p2r-p2l":"Piano II",vi1:"Violin I",vi2:"Violin II",viola:"Viola",cello:"Cello",fl:"Flauti",ob:"Oboi",cl:"Clarinetti",fa:"Fagotti","cor1-cor2":"Corni",trombe:"Trombe",tenori:"Tenori",basso:"Basso",timpani:"Timpani","os1-os2":"Ossia",viole:"Viole",violoncelli:"Violoncelli",contrabassi:"Contrabassi"},N8=({score:e,showAll:t=!1,onChange:r})=>{const n=M5(),a=Math.max(...e.pages.map(s=>Math.max(...s.systems.map(c=>c.staves.length)))),i=ui.filter(s=>t||s.track===a);return t&&i.sort((s,c)=>s.track-c.track),b.jsx(C0,{direction:"vertical",style:{width:"100%"},children:i.map((s,c)=>b.jsxs(y2,{className:W1("staffTplRow",{current:s.code===e.staffLayoutCode}),onClick:()=>{r&&r({staffLayoutCode:s.code,instrumentDict:{...In}})},children:[b.jsx(Pe,{span:12,style:{display:"flex",alignItems:"center"},children:n.formatMessage({id:s.nameKey})}),b.jsx(Pe,{span:12,children:b.jsx(_4,{staffLayoutCode:s.code,nameDict:In})})]},c))})},rt={status:"idle",pass:0,remaining:0,total:0};class O8{ws=null;listeners=new Set;_state={...rt};totalMeasures=0;get state(){return this._state}setState(t){this._state={...this._state,...t};for(const r of this.listeners)r(this._state)}getWSUrl(){return`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/ws/regulate`}ensureConnection(){return new Promise((t,r)=>{if(this.ws&&this.ws.readyState===WebSocket.OPEN){t(this.ws);return}this.ws&&(this.ws.close(),this.ws=null);const n=this.getWSUrl();console.log("[regulationWS] connecting to",n);const a=new WebSocket(n);this.ws=a,a.onopen=()=>{console.log("[regulationWS] connected"),t(a)},a.onerror=i=>{console.error("[regulationWS] connection error:",i),r(new Error("WebSocket connection failed"))},a.onclose=()=>{this.ws===a&&(this.ws=null)},a.onmessage=i=>{try{const s=JSON.parse(i.data);this.handleMessage(s)}catch(s){console.error("[regulationWS] failed to parse message:",s)}}})}handleMessage(t){switch(console.log("[regulationWS] recv:",t.type,t.type==="progress"?`pass=${t.pass} ${t.remaining}/${t.total}`:""),t.type){case"started":this.totalMeasures=t.totalMeasures,this.setState({status:"regulating",scoreId:t.scoreId,total:t.totalMeasures,remaining:t.totalMeasures,pass:0});break;case"progress":this.setState({status:"regulating",pass:t.pass,remaining:t.remaining,total:t.total});break;case"completed":this.setState({status:"completed",stat:t.stat,remaining:0,total:this.totalMeasures});break;case"error":console.error("[regulationWS] server error:",t.message),this.setState({status:"error",errorMessage:t.message});break;case"status_response":t.regulating&&this.setState({status:"regulating",scoreId:t.scoreId,pass:t.pass||0,remaining:t.remaining||0,total:t.total||0});break}}prepare(t){this.totalMeasures=0,this.setState({...rt,status:"regulating",scoreId:t})}async startRegulation(t){this.setState({...rt,status:"connecting",scoreId:t}),this.totalMeasures=0;try{(await this.ensureConnection()).send(JSON.stringify({type:"regulate",scoreId:t})),this.setState({status:"regulating"})}catch(r){this.setState({status:"error",errorMessage:r.message})}}async queryStatus(t){try{(await this.ensureConnection()).send(JSON.stringify({type:"status",scoreId:t}))}catch{}}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}reset(){this.setState({...rt})}disconnect(){this.ws&&(this.ws.close(),this.ws=null),this.setState({...rt})}}const nt=new O8;var fi={exports:{}};(function(e,t){(function(r,n){e.exports=n(P)})(ft,function(r){return(()=>{var n={703:(c,h,u)=>{var o=u(414);function l(){}function f(){}f.resetWarningCache=l,c.exports=function(){function v(H,g,V,C,x,S){if(S!==o){var _=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw _.name="Invariant Violation",_}}function M(){return v}v.isRequired=v;var d={array:v,bool:v,func:v,number:v,object:v,string:v,symbol:v,any:v,arrayOf:M,element:v,elementType:v,instanceOf:M,node:v,objectOf:M,oneOf:M,oneOfType:M,shape:M,exact:M,checkPropTypes:f,resetWarningCache:l};return d.PropTypes=d,d}},697:(c,h,u)=>{c.exports=u(703)()},414:c=>{c.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},427:c=>{c.exports=r}},a={};function i(c){var h=a[c];if(h!==void 0)return h.exports;var u=a[c]={exports:{}};return n[c](u,u.exports,i),u.exports}i.n=c=>{var h=c&&c.__esModule?()=>c.default:()=>c;return i.d(h,{a:h}),h},i.d=(c,h)=>{for(var u in h)i.o(h,u)&&!i.o(c,u)&&Object.defineProperty(c,u,{enumerable:!0,get:h[u]})},i.o=(c,h)=>Object.prototype.hasOwnProperty.call(c,h),i.r=c=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(c,"__esModule",{value:!0})};var s={};return(()=>{i.r(s),i.d(s,{Component:()=>s1,containCrop:()=>a1,default:()=>s1,makeAspectCrop:()=>D});var c=i(427),h=i.n(c),u=i(697),o=i.n(u);function l(j){var R,e1,Z="";if(typeof j=="string"||typeof j=="number")Z+=j;else if(typeof j=="object")if(Array.isArray(j))for(R=0;Re1&&(Z.height=e1-Z.y,Z.width=Z.height*j.aspect),Z.x+Z.width>R&&(Z.width=R-Z.x,Z.height=Z.width/j.aspect),Z}function Y(j,R,e1){return j.unit==="%"?j:{unit:"%",aspect:j.aspect,x:j.x/R*100,y:j.y/e1*100,width:j.width/R*100,height:j.height/e1*100}}function q(j,R,e1){return j.unit?j.unit==="px"?j:{unit:"px",aspect:j.aspect,x:j.x*R/100,y:j.y*e1/100,width:j.width*R/100,height:j.height*e1/100}:x(x({},j),{},{unit:"px"})}function a1(j,R,e1,Z){var i1=q(R,e1,Z),X=q(j,e1,Z),n1=x({},i1);if(!i1.aspect)return i1.x<0?(n1.x=0,n1.width+=i1.x):i1.x+i1.width>e1&&(n1.width=e1-i1.x),i1.y+i1.height>Z&&(n1.height=Z-i1.y),n1;var N=!1;i1.x<0?(n1.x=0,n1.width+=i1.x,n1.height=n1.width/i1.aspect,N=!0):i1.x+i1.width>e1&&(n1.width=e1-i1.x,n1.height=n1.width/i1.aspect,N=!0),N&&X.y>n1.y&&(n1.y=i1.y+(i1.height-n1.height));var W=!1;return n1.y+n1.height>Z&&(n1.height=Z-i1.y,n1.width=n1.height*i1.aspect,W=!0),W&&X.x>n1.x&&(n1.x=i1.x+(i1.width-n1.width)),n1}var M1={capture:!0,passive:!1},s1=function(j){(function(N,W){if(typeof W!="function"&&W!==null)throw new TypeError("Super expression must either be null or a function");N.prototype=Object.create(W&&W.prototype,{constructor:{value:N,writable:!0,configurable:!0}}),W&&d(N,W)})(n1,j);var R,e1,Z,i1,X=(Z=n1,i1=function(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}(),function(){var N,W=V(Z);if(i1){var f1=V(this).constructor;N=Reflect.construct(W,arguments,f1)}else N=W.apply(this,arguments);return H(this,N)});function n1(){var N;v(this,n1);for(var W=arguments.length,f1=new Array(W),V1=0;V1-1?(W.x=b1.x,W.y=b1.y,W.width=b1.width,W.height=b1.height):n1.xOrds.indexOf(f1)>-1?(W.x=b1.x,W.width=b1.width):n1.yOrds.indexOf(f1)>-1&&(W.y=b1.y,W.height=b1.height),N.lastYCrossover=N.yCrossOver,this.crossOverCheck(),W.width0&&arguments[0]!==void 0?arguments[0]:"px",W=x(x({},n1.defaultCrop),this.props.crop||{}),f1=this.mediaDimensions,V1=f1.width,c1=f1.height;return N==="px"?q(W,V1,c1):Y(W,V1,c1)}},{key:"crossOverCheck",value:function(){var N=this.evData,W=this.props,f1=W.minWidth,V1=W.minHeight;!f1&&(!N.xCrossOver&&-Math.abs(N.cropStartWidth)-N.xDiff>=0||N.xCrossOver&&-Math.abs(N.cropStartWidth)-N.xDiff<=0)&&(N.xCrossOver=!N.xCrossOver),!V1&&(!N.yCrossOver&&-Math.abs(N.cropStartHeight)-N.yDiff>=0||N.yCrossOver&&-Math.abs(N.cropStartHeight)-N.yDiff<=0)&&(N.yCrossOver=!N.yCrossOver);var c1=N.xCrossOver!==N.startXCrossOver,m1=N.yCrossOver!==N.startYCrossOver;N.inversedXOrd=!!c1&&O(N.ord),N.inversedYOrd=!!m1&&O(N.ord)}},{key:"render",value:function(){var N=this.props,W=N.children,f1=N.circularCrop,V1=N.className,c1=N.crossorigin,m1=N.crop,o1=N.disabled,d1=N.locked,p1=N.imageAlt,b1=N.onImageError,_1=N.renderComponent,z1=N.src,C1=N.style,T1=N.imageStyle,L1=N.ruleOfThirds,P1=this.state,q1=P1.cropIsActive,o0=P1.newCropIsBeingDrawn,$=T(m1)&&this.componentRef?this.createCropSelection():null,Q=function(){for(var r1,K,g1=0,E1="";g1{const[a]=ia(),i=P.useRef(null);let s=0;if(a){let c=0;for(const[h,u]of e.pages.entries()){if(a.system>=c-1&&a.system{i.current&&i.current.scrollIntoView({block:"center",behavior:"smooth"})},[i.current,s]),b.jsx("svg",{className:W1("graph"),style:{objectFit:"contain",position:"absolute",top:0,left:0},viewBox:`0 0 ${t==null?void 0:t.width} ${t==null?void 0:t.height}`,children:t.systems.map((c,h)=>{const u=e.pages.slice(0,r).reduce((o,l)=>o+l.systems.length,0)+h;return b.jsxs("g",{className:W1("system"),transform:`translate(${c.left}, ${c.top})`,children:[b.jsx("rect",{style:{opacity:0},x:0,y:c.noteRange.top,width:c.width,height:c.noteRange.bottom-c.noteRange.top,onClick:o=>{const l=o.target,f=l.getBoundingClientRect(),v=o.clientX-f.left,M=l.getBBox(),d=v/f.width*M.width;n({system:u,x:d})}}),(a==null?void 0:a.system)===u?b.jsx("line",{ref:i,transform:`translate(${a.x}, 0)`,x1:0,x2:0,y1:c.noteRange.top,y2:c.noteRange.bottom,style:{stroke:"lightblue",strokeWidth:1}}):null]},h)})})},P8=P.memo(I8);const Pn=Object.keys(n4).reduce((e,t,r)=>(e[t]=r,e),{}),R8={[-1]:"RosyBrown",0:"GreenYellow",1:"orange",2:"red"},vi=({score:e,page:t,pageIndex:r,system:n,systemIndex:a,staff:i,staffIndex:s,pointer:c,setPointer:h})=>{var R,e1,Z,i1;const[u,o]=F5();z2();const[l]=o4(),[f]=l4(),[v]=sa();h4();const[M,d]=P.useState(null),[H]=u4(),[g,V]=f4(),[C,x]=ca(),[S]=s4(),[_,T]=P.useState(null),[O]=g5("Shift");P.useContext(oa);const[[D,Y],[q,a1],M1]=la(),s1=n==null?void 0:n.headMeasureIndex,j=Number.isInteger(s1)&&((R=e==null?void 0:e.spartito)==null?void 0:R.measures.slice(s1));return b.jsx(b.Fragment,{children:b.jsxs("g",{className:W1("staff",{moving:O}),transform:`translate(0, ${i.top})`,onMouseEnter:()=>h([r,a,s]),onMouseLeave:()=>h([r,a,null]),onMouseDown:X=>{var n1,N;O&&(X.preventDefault(),T((N=(n1=ot(X.target,W=>{var f1;return!!((f1=W==null?void 0:W.dataset)!=null&&f1.id)}))==null?void 0:n1.dataset)==null?void 0:N.id))},onMouseUp:X=>{if(!O||!_)return;const n1=n.semantics.find(N=>N.id===_)||n.staves.map(N=>N.semantics).flat(1).find(N=>N.id===_);if(n1){const N=ot(X.currentTarget,o1=>o1.nodeName==="svg"),W=N.createSVGPoint();W.x=X.clientX,W.y=X.clientY;const f1=N.getScreenCTM(),V1=W.matrixTransform(f1.inverse()),c1=V1.x-n.left,m1=V1.y-(i.top+i.staffY+n.top);n1.x=c1,n1.y=m1,o(c0(e,{modify:!0})),T(null)}},children:[b.jsxs("g",{children:[b.jsx(ma,{translateY:i.staffY,width:n.width,additionalLines:i.additionalLines}),(e1=i==null?void 0:i.measures)==null?void 0:e1.map((X,n1)=>{var c1,m1,o1,d1,p1,b1,_1,z1,C1,T1;const N=s1+n1,W=D.find(L1=>L1.measureIndex===N),f1=!!W,V1=j&&j[n1]&&((c1=j[n1])==null?void 0:c1.regulationHash)!=((m1=j[n1])==null?void 0:m1.regulationHash0);return b.jsxs("g",{className:W1("measure",{focus:((o1=i==null?void 0:i.semantics)==null?void 0:o1.findIndex(L1=>L1.id===(C==null?void 0:C.id)))>-1}),onMouseEnter:()=>h([r,a,s,n1]),onMouseLeave:()=>h([r,a,s,null]),onClick:()=>a1(N),children:[b.jsx("rect",{className:W1("pad",{highlight:(S==null?void 0:S.pageIndex)===r&&(S==null?void 0:S.systemIndex)===a&&(S==null?void 0:S.staffIndex)===s,...v?{issue:X.timeWarped&&!((W==null?void 0:W.status)<=0),ill:j&&(((d1=j[n1])==null?void 0:d1.hasIllEvent)||((p1=j[n1])==null?void 0:p1.tickTwist)>.36)&&!((W==null?void 0:W.status)<=0),error:j&&(((b1=j[n1])==null?void 0:b1.tickRatesInStaves.some(L1=>L1<0))||((_1=j[n1])==null?void 0:_1.tickTwist)>=1)}:{}}),x:X.left,y:0,width:X.width,height:X.height}),s===0&&b.jsxs(b.Fragment,{children:[b.jsxs("text",{className:"measure-index",x:X.left,y:i.staffY-5,fontSize:2.6,fontWeight:"bold",fill:f1?R8[W==null?void 0:W.status]:"#7776",children:[(W==null?void 0:W.status)>0?"*".repeat(W.status):"",(W==null?void 0:W.status)==-1?"-":"",s1+n1+1,W!=null&&W.annotator?b.jsx("tspan",{dy:"-1",fontSize:"1.6px",fill:"DodgerBlue",children:"★"}):null,V1?b.jsx("tspan",{y:i.staffY-5.8,fontSize:"2px",children:"⚠"}):""]}),n1===0&&((z1=j==null?void 0:j[n1])==null?void 0:z1.measureNumber)>1&&b.jsx("text",{className:"measure-number",x:X.left,y:i.staffY-6,fontSize:1.6,fill:"#575",textAnchor:"end",children:(C1=j==null?void 0:j[n1])==null?void 0:C1.measureNumber})]}),b.jsxs("g",{transform:`translate(0, ${i.staffY})`,children:[(f||v)&&X.antiTokens&&b.jsx("g",{className:"anti tokens",children:X.antiTokens.map((L1,P1)=>b.jsx("g",{className:W1("token",{predicted:L1.isPredicted,"non-glyph":!K4.includes(L1.type),"octave-shift":L1.type.startsWith("octave-")}),transform:`translate(${L1.x}, ${L1.y})`,id:`anti-${L1.id}`,onClick:()=>console.log("anti-token:",L1),children:b.jsx("use",{xlinkHref:`#score-token-def-${L1.typeId}`})},P1))}),(f||v)&&b.jsx("g",{className:"tokens",children:(T1=X==null?void 0:X.tokens)==null?void 0:T1.filter(L1=>H==="edit"||H==="play"&&sc.includes(L1.type)).map((L1,P1)=>b.jsxs("g",{className:W1("token",{predicted:L1.isPredicted,"non-glyph":!K4.includes(L1.type),"octave-shift":L1.type.startsWith("octave-"),highlight:S&&L1.id===(S==null?void 0:S.point.id)}),style:v?{color:Number.isFinite(L1.voice)&&L1.voice?L1.voiceIndices.map(q1=>["",...Jc][q1])[0]:"#ccc"}:{},transform:`translate(${L1.x}, ${L1.y})`,id:L1.id,onClick:()=>console.log(L1),children:[L1.voice?b.jsxs("title",{children:["voice-",L1.voiceIndices.join(",")]}):null,b.jsx("use",{xlinkHref:`#score-token-def-${L1.typeId}`})]},P1))})]})]},n1)}),b.jsxs("g",{className:"semantics",children:[s===0&&b.jsx("g",{children:(Z=n==null?void 0:n.semantics)==null?void 0:Z.map((X,n1)=>{var N;return!l&&!g.some(W=>W.id===X.id)?null:b.jsxs("g",{className:W1("semantic",{vline:/^vline/.test(X.semantic),highlight:g.findIndex(W=>W.id===X.id)>-1,strong:(C==null?void 0:C.id)===X.id,hidden:!(!Number.isFinite(X.confidence)||X.confidence>=(((N=e.settings)==null?void 0:N.semanticConfidenceThreshold)??1)),moving:_===X.id}),"data-semantic-index":Pn[X.semantic],transform:`translate(${X.x}, ${X.y})`,onMouseEnter:()=>{d(X.semantic)},onMouseLeave:()=>d(null),"data-id":X.id,onClick:()=>console.log("sys",X),children:[b.jsx("circle",{}),/^vline/.test(X.semantic)&&b.jsxs("g",{children:[b.jsx("polygon",{className:"arrow",points:"-0.2,0 0.2,0 0,1.3"}),b.jsx("rect",{x:"-0.03",width:"0.06",y:X.extension.y1-X.y,height:X.extension.y2-X.extension.y1})]}),b.jsx("title",{children:X.semantic})]},`sys-${n1}`)})}),b.jsx("g",{transform:`translate(0, ${i.staffY})`,children:(i1=i==null?void 0:i.semantics)==null?void 0:i1.map((X,n1)=>{var N;return!l&&!g.some(W=>W.id===X.id)?null:b.jsxs("g",{className:W1("semantic",{vline:/^vline/.test(X.semantic),highlight:g.findIndex(W=>W.id===X.id)>-1,strong:(C==null?void 0:C.id)===X.id,hidden:!(!Number.isFinite(X.confidence)||X.confidence>=(((N=e.settings)==null?void 0:N.semanticConfidenceThreshold)??1)),moving:_===X.id}),"data-semantic-index":Pn[X.semantic],transform:`translate(${X.x}, ${X.y})`,onClick:()=>console.log(X),"data-id":X.id,children:[b.jsx("circle",{}),/^vline/.test(X.semantic)&&b.jsxs("g",{children:[b.jsx("polygon",{className:"arrow",points:"-0.2,0 0.2,0 0,1.3"}),b.jsx("rect",{x:"-0.03",width:"0.06",y:X.extension.y1-X.y,height:X.extension.y2-X.extension.y1})]}),/^rect/.test(X.semantic)&&b.jsx("g",{children:b.jsx("rect",{x:-X.extension.width/2,y:-X.extension.height/2,width:X.extension.width,height:X.extension.height})}),b.jsx("title",{children:X.semantic})]},n1)})})]})]}),b.jsx("g",{className:"measure-bars",children:n.measureBars.map((X,n1)=>b.jsx("g",{className:W1("measure-bar"),transform:`translate(${X}, ${i.staffY-2})`,children:b.jsx("line",{x1:0,x2:0,y1:0,y2:4})},n1))})]})})};P.memo(vi);const D8=e=>{var _,T;const t=M5(),{score:r,pageIndex:n,system:a,systemIndex:i}=e;if(a.staves.length===0)return b.jsx("g",{},i);const[s]=h4(),{pointer:c,setPointer:h}=e,[u,o]=P.useState(!1),[,l]=F5(),[f,v]=P.useState(0),M=a4(r.staffLayoutCode),[d,H]=ha();c4();const[g,V]=ua(),C=Array(M.stavesCount).fill(null).map((O,D)=>!!(f&1<x(a),[a]);return b.jsxs("g",{className:W1("system",{}),transform:`translate(${a.left}, ${a.top})`,children:[s&&a.backgroundImage&&!((_=a.staves[0])!=null&&_.backgroundImage)&&!((T=a.staves[0])!=null&&T.maskImage)&&b.jsx("image",{className:"background",href:a.backgroundImage,...a.imagePosition||{}}),a.staves.length>=2&&b.jsx("line",{className:"connection",x1:0,x2:0,y1:a.connectionLine.top,y2:a.connectionLine.bottom}),a.staves.map((O,D)=>b.jsxs("g",{className:W1("staff"),transform:`translate(0, ${O.top})`,onMouseEnter:()=>h([n,i,D]),onMouseLeave:()=>h([n,i,null]),children:[s&&!O.maskImage&&O.backgroundImage&&b.jsx("image",{className:"background",href:O.backgroundImage,...O.imagePosition||{}}),s&&O.maskImage&&b.jsx("image",{className:"background",style:{opacity:c.slice(0,3).join(",")===[n,i,D].join(",")||c[2]===null?1:.3},href:O.maskImage,...O.imagePosition||{}})]},"staff-"+D)),b.jsx("g",{className:"tick-line",children:new Array(a.measureCount).fill(null).map((O,D)=>{var q;return Object.entries(((q=g==null?void 0:g[S+D])==null?void 0:q.tickMap)||{}).sort((a1,M1)=>+a1[0]-+M1[0]).map((a1,M1)=>{var j;const s1=J3(+a1[0],1920);return c[0]===n&&c[1]===i&&c[3]===D?b.jsxs("g",{transform:`translate(${+a1[1]}, ${((j=a.staves[0])==null?void 0:j.top)+1})`,children:[b.jsxs("g",{className:"fraction",children:[b.jsx("text",{fontSize:1,textAnchor:"middle",transform:"translate(0, 1)",children:s1.numerator}),b.jsx("text",{textAnchor:"middle",transform:"translate(0, 2.2)",style:{textDecoration:"overline"},children:s1.denominator})]}),b.jsx("path",{transform:`translate(0, ${2.4})`,d:"M0 0.8 L -0.3 0 L 0.3 0",fill:"red"}),b.jsx("rect",{x:-.02,y:3,width:.04,height:a.height-6})]},M1):null})})}),a.staves.map((O,D)=>b.jsx(vi,{...e,staff:O,staffIndex:D},D)),b.jsx("g",{className:"measure-bars",children:a.measureBars.map((O,D)=>b.jsx("g",{transform:`translate(${O}, 0)`,children:M.mask(a.staffMask).conjunctions.map((Y,q)=>{const a1=a.staves[q],M1=a.staves[q+1];if(a1&&M1)return b.jsx("g",{transform:`translate(0, ${a1.top+a1.staffY+2})`,children:b.jsx("line",{className:W1("staff-layout-measure-bar",{dashed:Y===1,blank:Y===0}),x1:"0",x2:"0",y1:0,y2:M1.top+M1.staffY-(a1.top+a1.staffY)-4})},q)})},D))}),b.jsx(ga,{layout:M.mask(a.staffMask),positions:a.staffPositions,nameDict:(!a.prev||a.staffMask!==a.prev.staffMask)&&r.instrumentDict}),b.jsx("rect",{className:"brackets-area",x:-12,y:a.connectionLine.top,width:12,height:a.connectionLine.bottom-a.connectionLine.top,onClick:()=>{a.staves.lengthr.staffLayout.stavesCount&&b.jsxs("g",{transform:`translate(-6, ${a.connectionLine.top-2})`,children:[b.jsx("use",{xlinkHref:"#svg-icon-exclamation"}),b.jsx("title",{children:t.formatMessage({id:"playground.tooManyTracks"})})]}),a.staves.length{var O;a.staffMaskChanged=f!==((O=a==null?void 0:a.prev)==null?void 0:O.staffMask)?f:void 0,l(c0(r,{modify:!0})),o(!1)},onCancel:()=>{o(!1)},okButtonProps:{disabled:C.filter(Boolean).length!==a.staves.length},children:b.jsxs("div",{style:{width:"100%",display:"flex",flexDirection:"column"},children:[b.jsx(C0,{children:b.jsx(i0,{onClick:()=>{H(!0)},children:t.formatMessage({id:"playground.editTrackTitle"})})}),b.jsx(_4,{staffLayoutCode:r.staffLayoutCode,staffMask:f,onChange:v,nameDict:r.instrumentDict}),a.staffMaskChanged&&b.jsx(i0,{onClick:()=>{a.staffMaskChanged=void 0,v(a.staffMask),l(c0(r,{modify:!0}))},children:t.formatMessage({id:"playground.restoreDefault"})}),C.filter(Boolean).length!==a.staves.length&&b.jsx(da,{message:t.formatMessage({id:"playground.staffCountMismatch"}),type:"error",showIcon:!0})]})})]},i)},j8=P.memo(D8);const F8="_semanticSelectItem_12toc_1",$8="_semanticSelectItemActive_12toc_19",Rn={semanticSelectItem:F8,semanticSelectItemActive:$8};var bt={NONE:"none",PRIMARY:"primary",SUCCESS:"success",WARNING:"warning",DANGER:"danger"},ae={BOTTOM:"bottom",BOTTOM_LEFT:"bottom-left",BOTTOM_RIGHT:"bottom-right",LEFT:"left",LEFT_BOTTOM:"left-bottom",LEFT_TOP:"left-top",RIGHT:"right",RIGHT_BOTTOM:"right-bottom",RIGHT_TOP:"right-top",TOP:"top",TOP_LEFT:"top-left",TOP_RIGHT:"top-right"},q2,K2,G2,Y2,p0="bp3";typeof process<"u"&&(p0=(Y2=(K2=(q2=process.env)===null||q2===void 0?void 0:q2.BLUEPRINT_NAMESPACE)!==null&&K2!==void 0?K2:(G2=process.env)===null||G2===void 0?void 0:G2.REACT_APP_BLUEPRINT_NAMESPACE)!==null&&Y2!==void 0?Y2:p0);var di="".concat(p0,"-active"),Dn="".concat(p0,"-dark"),A4="".concat(p0,"-disabled"),x4="".concat(p0,"-fill"),pi="".concat(p0,"-large"),mi="".concat(p0,"-minimal"),B8="".concat(p0,"-round"),U8="".concat(p0,"-small"),W8=Ze(bt.PRIMARY);Ze(bt.SUCCESS);Ze(bt.WARNING);Ze(bt.DANGER);var q8="".concat(p0,"-text-overflow-ellipsis"),K8="".concat(p0,"-heading"),S2="".concat(p0,"-input"),G8="".concat(S2,"-group"),Y8="".concat(S2,"-left-container"),X8="".concat(S2,"-action"),E2="".concat(p0,"-menu"),gi="".concat(E2,"-item"),Q8="".concat(gi,"-label"),jn="".concat(p0,"-submenu"),Z8="".concat(E2,"-divider"),J8="".concat(E2,"-header"),Ye="".concat(p0,"-overlay"),eh="".concat(Ye,"-backdrop"),Fn="".concat(Ye,"-content"),th="".concat(Ye,"-inline"),X2="".concat(Ye,"-open"),$n="".concat(Ye,"-start-focus-trap"),Bn="".concat(Ye,"-end-focus-trap"),he="".concat(p0,"-popover"),Q2="".concat(he,"-arrow"),rh="".concat(he,"-backdrop"),Un="".concat(he,"-capturing-dismiss"),nh="".concat(he,"-content"),l2="".concat(he,"-dismiss"),ah="".concat(l2,"-override"),ih="".concat(he,"-open"),sh="".concat(he,"-out-of-boundaries"),ch="".concat(he,"-target"),oh="".concat(he,"-wrapper"),lh="".concat(p0,"-transition-container"),hh="".concat(p0,"-portal"),uh="".concat(p0,"-tooltip"),fh="".concat(p0,"-icon");function vh(){return p0}function dh(e){if(e!=null)return e.indexOf("".concat(p0,"-icon-"))===0?e:"".concat(p0,"-icon-").concat(e)}function Ze(e){if(!(e==null||e===bt.NONE))return"".concat(p0,"-intent-").concat(e.toLowerCase())}/*! ***************************************************************************** + (`+J0(O,d)+", "+J0(x,d)+") ==> "+(this._values?J0(this._values[T],d):"X")}return C},a.prototype.toString=function(){return J0(this.toArray())},a.prototype.toJSON=function(){return{mathjs:"SparseMatrix",values:this._values,index:this._index,ptr:this._ptr,size:this._size,datatype:this._datatype}},a.prototype.diagonal=function(d){if(d){if(ve(d)&&(d=d.toNumber()),!V0(d)||!R0(d))throw new TypeError("The parameter k must be an integer number")}else d=0;var H=d>0?d:0,g=d<0?-d:0,V=this._size[0],C=this._size[1],x=Math.min(V-g,C-H),S=[],_=[],T=[];T[0]=0;for(var O=H;O0?g:0,T=g<0?-g:0,O=d[0],D=d[1],Y=Math.min(O-T,D-_),q;if(M0(H)){if(H.length!==Y)throw new Error("Invalid value array length");q=function(X){return H[X]}}else if(K0(H)){var a1=H.size();if(a1.length!==1||a1[0]!==Y)throw new Error("Invalid matrix length");q=function(X){return H.get([X])}}else q=function(){return H};for(var M1=[],s1=[],j=[],R=0;R=0&&e1=T||C[D]!==H)){var q=V?V[O]:void 0;C.splice(D,0,H),V&&V.splice(D,0,q),C.splice(D<=O?O+1:O,1),V&&V.splice(D<=O?O+1:O,1);continue}if(D=T||C[O]!==d)){var a1=V?V[D]:void 0;C.splice(O,0,d),V&&V.splice(O,0,a1),C.splice(O<=D?D+1:D,1),V&&V.splice(O<=D?D+1:D,1)}}},a},{isClass:!0}),Sn="matrix",k6=["typed","Matrix","DenseMatrix","SparseMatrix"],I6=O0(Sn,k6,e=>{var{typed:t,Matrix:r,DenseMatrix:n,SparseMatrix:a}=e;return t(Sn,{"":function(){return i([])},string:function(c){return i([],c)},"string, string":function(c,h){return i([],c,h)},Array:function(c){return i(c)},Matrix:function(c){return i(c,c.storage())},"Array | Matrix, string":i,"Array | Matrix, string, string":i});function i(s,c,h){if(c==="dense"||c==="default"||c===void 0)return new n(s,h);if(c==="sparse")return new a(s,h);throw new TypeError("Unknown matrix type "+JSON.stringify(c)+".")}}),En="addScalar",P6=["typed"],R6=O0(En,P6,e=>{var{typed:t}=e;return t(En,{"number, number":ni,"Complex, Complex":function(n,a){return n.add(a)},"BigNumber, BigNumber":function(n,a){return n.plus(a)},"Fraction, Fraction":function(n,a){return n.add(a)},"Unit, Unit":function(n,a){if(n.value===null||n.value===void 0)throw new Error("Parameter x contains a unit with undefined value");if(a.value===null||a.value===void 0)throw new Error("Parameter y contains a unit with undefined value");if(!n.equalBase(a))throw new Error("Units do not match");var i=n.clone();return i.value=this(i.value,a.value),i.fixPrefix=!1,i}})}),D6="algorithm11",j6=["typed","equalScalar"],F6=O0(D6,j6,e=>{var{typed:t,equalScalar:r}=e;return function(a,i,s,c){var h=a._values,u=a._index,o=a._ptr,l=a._size,f=a._datatype;if(!h)throw new Error("Cannot perform operation on Pattern Sparse Matrix and Scalar value");var v=l[0],M=l[1],d,H=r,g=0,V=s;typeof f=="string"&&(d=f,H=t.find(r,[d,d]),g=t.convert(0,d),i=t.convert(i,d),V=t.find(s,[d,d]));for(var C=[],x=[],S=[],_=0;_{var{typed:t}=e;return function(a,i,s,c){var h=a._data,u=a._size,o=a._datatype,l,f=s;typeof o=="string"&&(l=o,i=t.convert(i,l),f=t.find(s,[l,l]));var v=u.length>0?r(f,0,u,u[0],h,i,c):[];return a.createDenseMatrix({data:v,size:P0(u),datatype:l})};function r(n,a,i,s,c,h,u){var o=[];if(a===i.length-1)for(var l=0;l{var{typed:t}=e;return t("multiplyScalar",{"number, number":ai,"Complex, Complex":function(n,a){return n.mul(a)},"BigNumber, BigNumber":function(n,a){return n.times(a)},"Fraction, Fraction":function(n,a){return n.mul(a)},"number | Fraction | BigNumber | Complex, Unit":function(n,a){var i=a.clone();return i.value=i.value===null?i._normalize(n):this(i.value,n),i},"Unit, number | Fraction | BigNumber | Complex":function(n,a){var i=n.clone();return i.value=i.value===null?i._normalize(a):this(i.value,a),i},"Unit, Unit":function(n,a){return n.multiply(a)}})}),_n="multiply",G6=["typed","matrix","addScalar","multiplyScalar","equalScalar","dot"],Y6=O0(_n,G6,e=>{var{typed:t,matrix:r,addScalar:n,multiplyScalar:a,equalScalar:i,dot:s}=e,c=F6({typed:t,equalScalar:i}),h=U6({typed:t});function u(S,_){switch(S.length){case 1:switch(_.length){case 1:if(S[0]!==_[0])throw new RangeError("Dimension mismatch in multiplication. Vectors must have the same length");break;case 2:if(S[0]!==_[0])throw new RangeError("Dimension mismatch in multiplication. Vector length ("+S[0]+") must match Matrix rows ("+_[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+_.length+" dimensions)")}break;case 2:switch(_.length){case 1:if(S[1]!==_[0])throw new RangeError("Dimension mismatch in multiplication. Matrix columns ("+S[1]+") must match Vector length ("+_[0]+")");break;case 2:if(S[1]!==_[0])throw new RangeError("Dimension mismatch in multiplication. Matrix A columns ("+S[1]+") must match Matrix B rows ("+_[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+_.length+" dimensions)")}break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix A has "+S.length+" dimensions)")}}function o(S,_,T){if(T===0)throw new Error("Cannot multiply two empty vectors");return s(S,_)}function l(S,_){if(_.storage()!=="dense")throw new Error("Support for SparseMatrix not implemented");return f(S,_)}function f(S,_){var T=S._data,O=S._size,D=S._datatype,Y=_._data,q=_._size,a1=_._datatype,M1=O[0],s1=q[1],j,R=n,e1=a;D&&a1&&D===a1&&typeof D=="string"&&(j=D,R=t.find(n,[j,j]),e1=t.find(a,[j,j]));for(var Z=[],i1=0;i1m1)for(var d1=0,p1=0;p1{var{typed:t}=e;return t(An,{number:function(n){return n},BigNumber:function(n){return n},Complex:function(n){return n.conjugate()},"Array | Matrix":function(n){return ti(n,this)}})});function Z6(){throw new Error('No "matrix" implementation available')}var xn="size",J6=["typed","config","?matrix"],e8=O0(xn,J6,e=>{var{typed:t,config:r,matrix:n}=e;return t(xn,{Matrix:function(i){return i.create(i.size())},Array:z5,string:function(i){return r.matrix==="Array"?[i.length]:n([i.length])},"number | Complex | BigNumber | Unit | boolean | null":function(i){return r.matrix==="Array"?[]:n?n([]):Z6()}})}),Nn="dot",t8=["typed","addScalar","multiplyScalar","conj","size"],r8=O0(Nn,t8,e=>{var{typed:t,addScalar:r,multiplyScalar:n,conj:a,size:i}=e;return t(Nn,{"Array | DenseMatrix, Array | DenseMatrix":c,"SparseMatrix, SparseMatrix":h});function s(o,l){var f=u(o),v=u(l),M,d;if(f.length===1)M=f[0];else if(f.length===2&&f[1]===1)M=f[0];else throw new RangeError("Expected a column vector, instead got a matrix of size ("+f.join(", ")+")");if(v.length===1)d=v[0];else if(v.length===2&&v[1]===1)d=v[0];else throw new RangeError("Expected a column vector, instead got a matrix of size ("+v.join(", ")+")");if(M!==d)throw new RangeError("Vectors must have equal length ("+M+" != "+d+")");if(M===0)throw new RangeError("Cannot calculate the dot product of empty vectors");return M}function c(o,l){var f=s(o,l),v=K0(o)?o._data:o,M=K0(o)?o._datatype:void 0,d=K0(l)?l._data:l,H=K0(l)?l._datatype:void 0,g=u(o).length===2,V=u(l).length===2,C=r,x=n;if(M&&H&&M===H&&typeof M=="string"){var S=M;C=t.find(r,[S,S]),x=t.find(n,[S,S])}if(!g&&!V){for(var _=x(a(v[0]),d[0]),T=1;T_){x++;continue}S===_&&(H=g(H,V(v[C],d[x])),C++,x++)}return H}function u(o){return K0(o)?o.size():i(o)}}),n8=l6({config:w2}),a8=v6({}),i8=w6({}),L4=C6({}),ii=S6({Matrix:L4}),Fe=f7({BigNumber:n8,Complex:a8,DenseMatrix:ii,Fraction:i8}),si=R6({typed:Fe}),s8=Q6({typed:Fe}),ci=x6({config:w2,typed:Fe}),oi=K6({typed:Fe}),c8=T6({Matrix:L4,equalScalar:ci,typed:Fe}),v5=I6({DenseMatrix:ii,Matrix:L4,SparseMatrix:c8,typed:Fe}),o8=e8({matrix:v5,config:w2,typed:Fe}),l8=r8({addScalar:si,conj:s8,multiplyScalar:oi,size:o8,typed:Fe}),_r=Y6({addScalar:si,dot:l8,equalScalar:ci,matrix:v5,multiplyScalar:oi,typed:Fe});const On=4,h8=600,S4=32;let Se={semantic:{viewportHeight:192,viewportUnit:8},gauge:{viewportHeight:256,viewportUnit:8}};const E4=Lc(async()=>{Object.assign(Se,await ce.get("/api/predict/viewport"))},{maxAge:10*60*60}),o2=async(e,t,{paddingLeft:r=0,scaling:n=1,spec:a=Se.semantic}={})=>{if(!e||!e.backgroundImage)return null;const i=e.staves[t];if(!i)return null;const s=a.viewportHeight/a.viewportUnit/2,c=e.imagePosition.width*a.viewportUnit,h=e.imagePosition.height*a.viewportUnit,u=e.imagePosition.x*a.viewportUnit+r,o=(e.imagePosition.y-(i.top+i.staffY-s))*a.viewportUnit,l=new Image(c*n,h*n);l.crossOrigin="anonymous",l.src=e.backgroundImage,await new Promise((M,d)=>{l.onload=M,l.onerror=d});const f=document.createElement("canvas");f.height=a.viewportHeight*n,f.width=Math.round(c+u)*n;const v=f.getContext("2d");return v.fillStyle="white",v.fillRect(0,0,f.width,f.height),v.drawImage(l,u*n,o*n,c*n,h*n),f.toDataURL("image/png")},li=async(e,t,r)=>{const n=e.staves[t];if(n.backgroundImage||(n.backgroundImage=await o2(e,t,r)),!n.backgroundImage.startsWith("data:")){const i=await(await fetch(n.backgroundImage)).blob();return new Promise((s,c)=>{const h=new FileReader;h.onload=u=>s(u.target.result),h.onerror=c,h.readAsDataURL(i)})}return n.backgroundImage},Ht=async(e,t)=>{const r=await ce.post(`/api/predict/${e}`,{data:{images:t.map(n=>n.split(",")[1])},timeout:3e5});return i5(r,s5)},Zt=new Image,Ar=new Image,u8=document.createElement("canvas"),et=new yc({canvas:u8,source:Zt,gauge:Ar}),f8=async(e,t,r=null)=>{Zt.src=e,Ar.src=t,await Promise.all([new Promise(i=>Zt.onload=()=>{et.updateMaterial({width:Zt.naturalWidth/2}),i(null)}),new Promise(i=>Ar.onload=async()=>{et.updateGeometry(r),i(null)})]);const n=et.render(),a={width:et.width,height:et.height};return console.draw(e,"变形矫正-小图"),console.draw(t,"变形矫正-热力图"),console.draw(n,"变形矫正-结果"),{dataURL:n,size:a}},v8=async({middleY:e,staff:t,sourceURL:r,gaugeURL:n,paddingLeft:a})=>{const i=(e-(t.top+t.staffY))*Se.gauge.viewportUnit+Se.gauge.viewportHeight/2,{dataURL:s,size:c}=await f8(r,n,i),h=Se.semantic;t.backgroundImage=s,t.imagePosition={x:-a/h.viewportUnit,y:t.staffY-h.viewportHeight/2/h.viewportUnit,width:c.width/h.viewportUnit,height:c.height/h.viewportUnit}},d8=({page:e,backgroundImage:t,detection:r,imageSize:n,position:a})=>{const i=(r.phi2-r.phi1)/r.interval,s=n.height/r.interval,c=e.systems[e.systems.length-1],h=a?a.y:(c?c.top+c.height:0)+On,u=a?a.x:On,o=[0,...Array(r.middleRhos.length-1).fill(0).map((M,d)=>(r.middleRhos[d]+r.middleRhos[d+1])/2/r.interval)],l=[i],f=o.map((M,d)=>new ac({top:M,height:(o[d+1]||s)-M,staffY:r.middleRhos[d]/r.interval-M,measureBars:l})),v={x:-r.phi1/r.interval,y:0,width:n.width/r.interval,height:n.height/r.interval};return new ic({staves:f,left:u,top:h,width:i,backgroundImage:t,imagePosition:v,measureBars:l})},p8=async(e,t=h8)=>{const r=c=>4*Math.round(c/4),n=t,a=r(e.height/e.width*t),i=document.createElement("canvas");i.width=n,i.height=a;const s=i.getContext("2d");return s.fillStyle="white",s.fillRect(0,0,n,a),s.drawImage(e,0,0,e.width,e.height,0,0,n,a),{dataURL:i.toDataURL(),width:n,height:a}},W2=(e,t,r=null)=>{e.width=t.naturalWidth,e.height=t.naturalHeight;const n=e.getContext("2d");Array.isArray(r)&&n.setTransform(...r),n.imageSmoothingQuality="high",n.imageSmoothingEnabled=!0,n.drawImage(t,0,0,t.naturalWidth,t.naturalHeight)},m8=(e,t,r,n,a)=>{const[i,s]=[t/2,r/2],[c,h]=[n/2,a/2],[u,o,l,f,v,M]=e,d=u*c-l*h+v-i,H=-o*c+f*h+M-s;return[u,o,l,f,d,H]},g8=async e=>{var h,u,o;if(!((h=e==null?void 0:e.source)!=null&&h.dimensions)||!((u=e==null?void 0:e.source)!=null&&u.url)||!Number.isFinite((o=e==null?void 0:e.source)==null?void 0:o.interval))return console.warn("[paintPageBackground] invalid page:",e.source),null;const t={width:Math.round(e.width*e.source.interval),height:Math.round(e.height*e.source.interval)},r=e.source.url;if(e.source.matrix.join(",")==="1,0,0,1,0,0"&&t.width===e.source.dimensions.width&&t.height===e.source.dimensions.height)return r;const n=new Image;n.crossOrigin="anonymous",n.src=r,await new Promise((l,f)=>{n.onload=l,n.onerror=f});const a=document.createElement("canvas");a.width=t.width,a.height=t.height;const i=a.getContext("2d");i.fillStyle="white",i.fillRect(0,0,a.width,a.height),i.imageSmoothingQuality="high",i.imageSmoothingEnabled=!0;const s=m8(e.source.matrix,e.source.dimensions.width,e.source.dimensions.height,t.width,t.height);return i.setTransform(...s),i.drawImage(n,0,0),a.toDataURL("image/png")},Tn=async({pageLayoutByBlock:e,sourceCanvas:t,targetSize:r,paintRect:n=null})=>{const[a]=await Ht("layout",[(await p8(t,r.width)).dataURL]);n=n||{x:0,y:0,...r};const i=1,s=a.interval*i*Math.cos(a.theta);console.debug("layout measure:",a.theta,s,a.interval),console.draw(a.image,"布局识别");const c=Math.cos(a.theta),h=Math.sin(a.theta),u=t.width/2,o=t.height/2,l=[c,h,-h,c,((1-c)*u+h*o)*i,(-h*u+(1-c)*o)*i];return{theta:a.theta,interval:s,detection:{...a.detection,pageSize:r},rotation:l,canvas:t}},z8=async({score:e,staves:t,withCache:r=!1})=>{var c,h,u;if(!e)return;const n=S4;await E4();const a=Se.semantic,i=t.map(([o,l,f])=>{var v,M,d,H,g;return(g=(H=(d=(M=(v=e.pages)==null?void 0:v[o])==null?void 0:M.systems)==null?void 0:d[l])==null?void 0:H.staves)==null?void 0:g[f]});if(r&&i.every(o=>o.maskImage))return;const s=[];for(const[o,l,f]of t){const v=(u=(h=(c=e.pages)==null?void 0:c[o])==null?void 0:h.systems)==null?void 0:u[l];s.push(await li(v,f,{paddingLeft:n}))}try{const o=await Ht("mask",s);console.assert(o.length===s.length,"prediction result length mismatch:",o.length,s.length),o.length!==s.length&&oe.error("前景分离错误");for(const[l,f]of i.entries()){if(r&&f.maskImage)continue;const v=o[l];console.draw(v.image,"前景分离结果");const M=await new Promise(d=>{const H=new Image;H.src=v.image,H.onload=()=>d({width:H.naturalWidth,height:H.naturalHeight})});f.maskImage=v.image,f.imagePosition={x:-n/a.viewportUnit,y:f.staffY-a.viewportHeight/2/a.viewportUnit,width:M.width/a.viewportUnit,height:M.height/a.viewportUnit}}}catch(o){console.warn("System mask predicting failed:",o)}},y8=async({score:e,staves:t})=>{var i,s,c,h,u,o,l;if(!e)return;const r=S4;await E4();const n=[],a=[];for(const[f,v,M]of t){const d=(c=(s=(i=e.pages)==null?void 0:i[f])==null?void 0:s.systems)==null?void 0:c[v];n.push(await o2(d,M,{paddingLeft:r,spec:Se.gauge})),a.push(await o2(d,M,{paddingLeft:r,scaling:2,spec:Se.gauge}))}try{const f=await Ht("gauge",n);console.assert(f.length===n.length,"prediction result length mismatch:",f.length,n.length),f.length!==n.length&&oe.error("变形矫正错误");for(const[v,[M,d,H]]of t.entries()){const g=(o=(u=(h=e.pages)==null?void 0:h[M])==null?void 0:u.systems)==null?void 0:o[d],V=(l=g==null?void 0:g.staves)==null?void 0:l[H],C=g.middleY,x=f[v],S=a[v],_=x.image;await v8({middleY:C,staff:V,sourceURL:S,gaugeURL:_,paddingLeft:r}),V.maskImage=null}}catch(f){f&&oe.error("System gauge predicting failed:"),console.warn("System gauge predicting failed:",f)}},M8=async({score:e,staves:t})=>{var i,s,c,h,u,o,l,f;if(!e)return;const r=S4,n=[],a=[];for(const[v,M,d]of t){const H=(c=(s=(i=e.pages)==null?void 0:i[v])==null?void 0:s.systems)==null?void 0:c[M];if(H&&H.staves.every(V=>V.backgroundImage)&&!H.backgroundImage){const V=await Promise.all(H.staves.map(async C=>ta(C.backgroundImage)));n.push(...V),a.push(...H.staves.map((C,x)=>[v,M,x]))}else{if(!(H!=null&&H.backgroundImage)){console.warn("not valid system:",v,M);continue}n.push(await li(H,d,{paddingLeft:r})),a.push([v,M,d])}}if(n.length!==0){await E4();try{const v=await Ht("semantic",n);console.assert(v.length===n.length,"prediction result length mismatch:",v.length,n.length),v.length!==n.length&&oe.error("语义点识别错误");const M=new Set(a.map(([d,H])=>{var g,V,C;return(C=(V=(g=e.pages)==null?void 0:g[d])==null?void 0:V.systems)==null?void 0:C[H]}).filter(Boolean));for(const d of M)d.clearTokens();for(const[d,[H,g,V]]of a.entries()){const C=(o=(u=(h=e.pages)==null?void 0:h[H])==null?void 0:u.systems)==null?void 0:o[g],x=(l=C==null?void 0:C.staves)==null?void 0:l[V],S=v[d];S.offset(-r/Se.semantic.viewportUnit,0),C.assignSemantics(V,S),x.assignSemantics(S),x.clearPredictedTokens(),e.assembleSystem(C,((f=e.settings)==null?void 0:f.semanticConfidenceThreshold)||1)}}catch(v){console.warn("System predicting failed:",v)}}};function It(e,t,r){r.forEach(([n,a,i])=>{e.splice(n,a,t[i])})}const kn=(e,t,r,n=1)=>{const a=v5([[1,0,t],[0,1,r],[0,0,1]]),i=v5([[1,0,-t],[0,1,-r],[0,0,1]]);let[s,c,h,u,o,l]=e;const f=v5([[s*n,h,o],[c,u*n,l],[0,0,1]]);return[[s,h,o],[c,u,l]]=_r(_r(a,f),i).toArray(),[s,c,h,u,o,l]},w8=(e,t)=>{const[r,n,a,i,s,c]=e,[h,u,o,l,f,v]=t,M=v5([[r,a,s],[n,i,c],[0,0,1]]),d=v5([[h,o,f],[u,l,v],[0,0,1]]),H=_r(M,d),[[g,V,C],[x,S,_]]=H.toArray();return[g,x,V,S,C,_]};async function H8(e,t,{sourceImage:r,croppedAreaCanvas:n,pageLayoutByBlock:a,clipPoints:i}){var v,M,d,H;const s=!!i;let c=e.pages[t],h=null;const u=[];let o=[];if(s){console.assert(Number.isFinite(c.source.interval),"the page source interval not initialized");const g=c.source.interval/e.unitSize,V={x:r.naturalWidth/2,y:r.naturalHeight/2},C={x:e.pageSize.width/2,y:e.pageSize.height/2},x={x:e.pageSize.width/100,y:e.pageSize.height/100},S={x:(i[0].x*x.x-C.x)*g+V.x,y:(i[0].y*x.y-C.y)*g+V.y,width:(i[2].x-i[0].x)*x.x*g,height:(i[2].y-i[0].y)*x.y*g},_=document.createElement("canvas");_.width=S.width,_.height=S.height;const T=_.getContext("2d");T.fillStyle="#fff",T.fillRect(0,0,S.width,S.height);const O=kn(c.source.matrix,V.x-S.x,V.y-S.y);T.setTransform(...O),T.imageSmoothingQuality="high",T.imageSmoothingEnabled=!0,T.drawImage(r,-S.x,-S.y),console.draw(_.toDataURL(),"partial canvas");const{detection:D,rotation:Y,interval:q}=await Tn({pageLayoutByBlock:a,sourceCanvas:_,targetSize:c.source.dimensions,paintRect:S}),a1=w8(kn(c.source.matrix,V.x,V.y),Y);c.systems.length||(c.source.interval=q);const M1=document.createElement("canvas");W2(M1,r,a1);const s1=(M=(v=e.pages[t])==null?void 0:v.layout)==null?void 0:M.areas,j=D.areas;h=M1,s1?(j.forEach((R,e1)=>{const Z=b8([{x:R.x,y:R.y},{x:R.x+R.width,y:R.y},{x:R.x+R.width,y:R.y+R.height},{x:R.x,y:R.y+R.height}]),i1=R.y+R.height/2,X=s1.reduce((n1,N,W)=>{const f1=C8(R,N)/Z;return f1>n1.ratio?{ratio:f1,index:W}:n1},{ratio:0,index:null});if(X.index!==null&&X.ratio>.6){const n1=[X.index,1,e1];u.push(n1),It(s1,j,[n1]),It(c.systems,j.map(()=>null),[n1])}else{const n1=s1.map((f1,V1)=>({centerY:f1.y+f1.height/2,index:V1}));let N=0;for(const f1 of n1)i1>f1.centerY&&(N=f1.index+1);const W=[N,0,e1];u.push(W),It(s1,j,[W]),It(c.systems,j.map(()=>null),[W])}}),c.layout=e.pages[t].layout,o=s1.map(R=>j.includes(R)).map((R,e1)=>R?e1:null).filter(R=>R!==null)):(c.layout=D,o=D.areas.map((R,e1)=>e1))}else{W2(n,r);const{detection:g,rotation:V,theta:C,interval:x}=await Tn({pageLayoutByBlock:a,sourceCanvas:n,targetSize:c.source.dimensions});h=n,W2(n,r,V),c.layout=g,c.source.matrix=[Math.cos(C),-Math.sin(C),Math.sin(C),Math.cos(C),0,0],c.source.interval=x}if(!((H=(d=c==null?void 0:c.layout)==null?void 0:d.areas)!=null&&H.length))return null;e.pages[t].layout=c.layout;const l=c.layout,f=c.source.interval;return Number.isFinite(e.unitSize)||(e.unitSize=e.pageSize.width/(l.pageSize.width/f)),c.width=e.pageSize.width/e.unitSize,c.height=e.pageSize.height/e.unitSize,l.areas.map((g,V)=>({systemIndex:V,area:g})).filter(({area:g})=>g.staves&&g.staves.middleRhos.length).forEach(({area:g,systemIndex:V})=>{if(!(g.staves&&g.staves.middleRhos.length)||s&&!o.includes(V))return;const S=h.getContext("2d").getImageData(g.x,g.y,g.width,g.height),_=document.createElement("canvas");_.width=g.width,_.height=g.height,_.getContext("2d").putImageData(S,0,0);const O=_.toDataURL(),D=g.staves,Y={width:g.width,height:g.height},q={x:c.source.dimensions.width/2/f,y:c.source.dimensions.height/2/f},a1={x:(g.x+g.staves.phi1)/f-q.x+c.width/2,y:g.y/f-q.y+c.height/2};c.systems[V]=d8({page:c,backgroundImage:O,detection:D,imageSize:Y,position:a1})}),{actions:u,changedSystems:o}}function b8(e){const t=e.length;let r=0;e.length>1&&(e=e.concat(e[0]));for(let n=0;n{const t=M5(),[r,n]=F5(),[a,i]=aa(),s=P.useRef(Array(E0.length).fill(null).map(()=>[])),[c,h]=P.useState(s.current),[u,o]=P.useState(!1),[l,f]=s4(),v=P.useRef(null),M=P.useRef(0),[d,H]=P.useState(!1),g=P.useRef(null),[V,C]=u9(),[x,S]=P.useState(null),[_,T]=P.useState(null),[O,D]=P.useState(null),[Y,q]=P.useState(new Set(E0.map((o1,d1)=>d1))),[a1,M1]=Y4("stampRowMax",120),[s1,j]=Y4("stampRowExportMax",10),R=()=>{i(!1)},e1=P.useRef({}),[Z,i1,X]=P.useMemo(()=>{if(!a)return[[],[],[]];const o1=[],d1=[],p1=E0.map(()=>[]);return r.pages.forEach((_1,z1)=>{_1.systems.forEach((C1,T1)=>{o1.push(...C1.sidWhiteList),d1.push(...C1.sidBlackList),C1.staves.forEach((L1,P1)=>{L1.semantics&&L1.semantics.forEach(q1=>{if(E0.includes(q1.semantic)){const o0=E0.indexOf(q1.semantic);p1[o0].push({point:q1,pageIndex:z1,systemIndex:T1,staffIndex:P1})}})})})}),[p1.map(_1=>{_1.sort((T1,L1)=>T1.point.confidence-L1.point.confidence);const z1=_1.filter(T1=>T1.point.confidence<1).reverse().filter((T1,L1)=>L1T1.point.confidence>=1).slice(0,a1);return[...z1,...C1]}),o1,d1]},[r,a]),n1=async()=>{var b1;o(!0),s.current=Array(E0.length).fill(null).map(()=>[]),h([]);const o1=r.systems.length;let d1=0;const p1=new Map([].concat(...Z.map(_1=>_1.map(z1=>[z1.point.id,z1]))));e:for(const _1 of r.systems){for(let z1=0;z1<_1.staves.length;++z1){if(!g.current)break e;const C1=_1.staves[z1];if(!C1.imagePosition)continue;const T1=new Image;if((b1=C1.semantics)==null?void 0:b1.some(q1=>p1.has(q1.id)&&!e1.current[q1.id])){const q1=C1.maskImage;if(!q1){console.warn("staff image missed:",C1);return}T1.crossOrigin="anonymous",T1.src=q1,await new Promise(o0=>T1.onload=o0)}const P1=T1.height/C1.imagePosition.height;C1.semantics.forEach(q1=>{if(p1.has(q1.id)){if(!e1.current[q1.id]){const[$,Q,r1,K]=q4[q1.semantic],g1=q1.x-C1.imagePosition.x+$,E1=q1.y+C1.staffY-C1.imagePosition.y+Q,x1={image:T1,x:(g1-r1/2)*P1,y:(E1-K/2)*P1,width:r1*P1,height:K*P1,cx:$*P1,cy:Q*P1},A1=.5*be.width-x1.width/2+x1.cx,H1=.5*be.height-x1.height/2+x1.cy;tt.drawImage(x1.image,x1.x,x1.y,x1.width,x1.height,A1*Z0,H1*Z0,x1.width*Z0,x1.height*Z0),e1.current[q1.id]=mt.toDataURL("image/png"),tt.clearRect(0,0,be.width*Z0,be.height*Z0)}const o0=p1.get(q1.id);s.current[E0.indexOf(q1.semantic)].push({image:e1.current[q1.id],pageIndex:o0.pageIndex,systemIndex:o0.systemIndex,staffIndex:o0.staffIndex,point:q1})}}),h(s.current.slice(0))}++d1,D(d1===o1?null:Math.ceil(d1/o1*100))}H(!0),o(!1)},N=async()=>{o(!0),T(1e-9),tt.imageSmoothingQuality="high";const o1=E0.map(()=>[]),d1=r.sidWhiteList,p1=r.sidBlackList,b1=new Map([].concat(...Z.map((C1,T1)=>Y.has(T1)?[...C1].sort((P1,q1)=>P1.point.confidence-q1.point.confidence).filter(P1=>d1.has(P1.point.id)||P1.point.confidence>=r.settings.semanticConfidenceThreshold&&!p1.has(P1.point.id)).filter((P1,q1)=>d1.has(P1.point.id)||q1[P1.point.id,P1]):[])));let _1=0;console.debug("Export begin:",b1.size,"in totoal."),await Promise.all(r.systems.map(async C1=>{for(let T1=0;T1b1.has(g1.id));if(!P1.length)continue;const q1=L1.backgroundImage||await o2(C1,T1,{paddingLeft:-L1.imagePosition.x*Se.semantic.viewportUnit}),o0=L1.maskImage;if(!q1||!o0){console.warn("staff image missed:",L1);return}const $=new Image;$.crossOrigin="anonymous",$.src=o0;const Q=new Image;Q.crossOrigin="anonymous",Q.src=q1,await Promise.all([new Promise(g1=>Q.onload=g1),new Promise(g1=>$.onload=g1)]);const r1=document.createElement("canvas");r1.width=Q.width,r1.height=Q.height;{const g1=cv.imread($),E1=cv.imread(Q),x1=new cv.MatVector;cv.split(g1,x1);const A1=new cv.MatVector;cv.split(E1,A1);const H1=new cv.Mat;x1.get(3).convertTo(H1,cv.CV_32FC1,1/255),cv.pow(H1,.6,H1),H1.convertTo(H1,cv.CV_8UC1,255);const k1=new cv.MatVector;k1.push_back(A1.get(0)),k1.push_back(A1.get(1)),k1.push_back(A1.get(2)),k1.push_back(H1),cv.merge(k1,E1),cv.imshow(r1,E1),g1.delete(),E1.delete(),k1.delete()}const K=$.height/L1.imagePosition.height;P1.forEach(g1=>{const E1=E0.indexOf(g1.semantic),[x1,A1,H1,k1]=q4[g1.semantic],l1=g1.x-L1.imagePosition.x+x1,I1=g1.y+L1.staffY-L1.imagePosition.y+A1,D1={image:r1,x:(l1-H1/2)*K,y:(I1-k1/2)*K,width:H1*K,height:k1*K,cx:x1*K,cy:A1*K},s0=.5*be.width-D1.width/2+D1.cx,Q1=.5*be.height-D1.height/2+D1.cy;tt.drawImage(D1.image,D1.x,D1.y,D1.width,D1.height,s0*Z0,Q1*Z0,D1.width*Z0,D1.height*Z0);const u0=b1.get(g1.id);o1[E1].push({image:mt.toDataURL("image/png"),pageIndex:u0.pageIndex,systemIndex:u0.systemIndex,staffIndex:u0.staffIndex,point:g1}),tt.clearRect(0,0,be.width*Z0,be.height*Z0),++_1,T(_1===b1.size?null:Math.ceil(_1/b1.size*100))})}})),T(null),o(!1);const z1={unitSize:{width:160,height:160},semantics:E0,stamps:o1.map(C1=>C1.map(T1=>({semantic:T1.point.semantic,id:T1.point.id,confidence:T1.point.confidence,image:T1.image})))};C(JSON.stringify(z1)),console.debug(JSON.stringify(z1)),oe.success(t.formatMessage({id:"common.copiedToClipboard"}))};P.useEffect(()=>{g.current=a,a?n1():(H(!1),f(null))},[a]),P.useLayoutEffect(()=>{const o1=document.getElementById(`anchor-${l==null?void 0:l.point.id}`);o1&&o1.scrollIntoView({block:"center",behavior:"smooth"})},[l]);const W=o1=>d1=>{var p1,b1,_1;if(d1.stopPropagation(),d1.shiftKey)f(o1);else{f(null);const z1=o1.point.confidence>=r.settings.semanticConfidenceThreshold?"sidBlackList":"sidWhiteList",C1=(_1=(b1=(p1=r.pages)==null?void 0:p1[o1.pageIndex])==null?void 0:b1.systems[o1.systemIndex])==null?void 0:_1[z1];if(C1){const T1=C1.indexOf(o1.point.id);T1>-1?C1.splice(T1,1):C1.push(o1.point.id)}n(c0(r,{modify:!0}))}},f1=o1=>()=>{var d1,p1;S(o1),!l&&((p1=(d1=document.getElementById(o1.point.id))==null?void 0:d1.classList)==null||p1.add("highlight"))},V1=o1=>()=>{var d1,p1;S(null),!l&&((p1=(d1=document.getElementById(o1.point.id))==null?void 0:d1.classList)==null||p1.remove("highlight"))},c1=o1=>{if(o1.buttons===4)switch(o1.type){case"mousedown":M.current=o1.currentTarget.scrollLeft,v.current=o1.clientX;break;case"mousemove":v.current!==null&&!/Windows/.test(navigator.userAgent)&&(o1.currentTarget.scrollLeft=M.current-o1.clientX+v.current);break;case"mouseup":v.current=null;break}},m1=()=>{H(!0)};return b.jsx(fr,{title:b.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginRight:"40px"},children:[b.jsxs(C0,{children:[t.formatMessage({id:"playground.marking.annotation"}),O!==null&&b.jsx(dr,{type:"circle",percent:O,width:20,strokeWidth:10,showInfo:!1})]}),b.jsxs(C0,{children:[b.jsx(pr,{title:"snapshot row width max",children:b.jsx(J4,{defaultValue:a1,onChange:o1=>M1(o1)})}),b.jsx(pr,{title:"export row width max",children:b.jsx(J4,{defaultValue:s1,onChange:o1=>j(o1)})}),b.jsx(i0,{onClick:async()=>{Y.sized1))):q(new Set([]))},children:Y.size{e1.current={},await n1()}}),b.jsx(i0,{icon:b.jsx(Jo,{}),onClick:m1,children:t.formatMessage({id:"playground.marking.sort"})}),b.jsx(i0,{onClick:N,disabled:_!==null||Y.size===0,children:b.jsxs(C0,{children:[_!==null?b.jsx(dr,{type:"circle",percent:_,strokeWidth:10,width:20,showInfo:!1}):b.jsx(Ho,{}),t.formatMessage({id:"playground.marking.export"})]})})]})]}),placement:"right",width:"50%",onClose:R,open:a,mask:!1,bodyStyle:{padding:0},style:{marginTop:"64px",height:"calc(100vh - 64px)"},...e,children:b.jsxs("div",{style:{position:"relative",width:"100%",height:"100%",overflow:"auto"},children:[b.jsxs("div",{className:"marking-body",children:[b.jsx("div",{className:"marking-col",style:{direction:"rtl"},onMouseDown:c1,onMouseMove:c1,onMouseUp:c1,onClick:o1=>f(null),children:E0.map(o1=>{var d1;return b.jsx("div",{style:{flex:1,flexShrink:0},className:"marking-item-row",children:(d1=c[E0.indexOf(o1)])==null?void 0:d1.filter(p1=>p1.point.confidenced?b1.point.confidence-p1.point.confidence:null).map((p1,b1)=>b.jsx("div",{className:W1("with-coord",{active:(l==null?void 0:l.point.id)===p1.point.id,white:i1.includes(p1.point.id)}),onClick:W(p1),onMouseEnter:f1(p1),onMouseLeave:V1(p1),children:b.jsx("img",{src:p1.image,style:{width:"50px",height:"50px"}})},b1))},o1)})}),b.jsx("div",{style:{display:"flex",flexDirection:"column",width:"50px",flexShrink:0},children:E0.map(o1=>F1[o1]||hi[o1]).map(o1=>o1&&o1.split("|").reverse()[0]).map((o1,d1)=>b.jsxs("svg",{viewBox:"0 0 10 10",className:W1("marking-tag",{checked:Y.has(d1)}),onClick:()=>{Y.has(d1)?Y.delete(d1):Y.add(d1),q(new Set(Y.values()))},children:[b.jsxs("g",{transform:"scale(0.8)",style:{transformOrigin:"center center"},children:[b.jsx("line",{x1:"5",x2:"5",y1:"0",y2:"10",stroke:"steelblue",strokeWidth:"0.06",strokeDasharray:"0.2 0.3"}),b.jsx("line",{x1:"0",x2:"10",y1:"5",y2:"5",stroke:"steelblue",strokeWidth:"0.06",strokeDasharray:"0.2 0.3"})]}),b.jsx("g",{transform:"translate(5, 5)",children:b.jsx("use",{color:"black",fill:"black",xlinkHref:`#score-token-def-${o1}`})}),b.jsx("title",{children:E0[d1]})]},o1))}),b.jsx("div",{className:"marking-col",onMouseDown:c1,onMouseMove:c1,onMouseUp:c1,onClick:o1=>f(null),children:E0.map(o1=>{var d1;return b.jsx("div",{style:{flex:1,flexShrink:0},children:(d1=c[E0.indexOf(o1)])==null?void 0:d1.filter(p1=>p1.point.confidence>=r.settings.semanticConfidenceThreshold).sort((p1,b1)=>d?p1.point.confidence-b1.point.confidence:null).map((p1,b1)=>b.jsx("div",{className:W1("with-coord",{active:(l==null?void 0:l.point.id)===p1.point.id,black:X.includes(p1.point.id)}),onClick:W(p1),onMouseEnter:f1(p1),onMouseLeave:V1(p1),children:b.jsx("img",{src:p1.image,style:{width:"50px",height:"50px"}})},b1))},o1)})})]}),x&&b.jsxs("div",{className:"zoom-box with-coord",children:[b.jsx("img",{src:x.image,alt:"",style:{width:"100%",height:"100%"}}),b.jsxs(C0,{direction:"vertical",size:20,children:[b.jsx("strong",{children:x.point.semantic}),b.jsx("em",{className:"id",children:x.point.id}),b.jsxs("span",{children:["c: ",b.jsx("em",{children:x.point.confidence.toFixed(3)})]})]})]})]})})},S8=P.memo(L8),we=8,E8=12,_8=2,Pt=18,A8=({staffLayoutCode:e,staffMask:t,onChange:r,nameDict:n={}})=>{const a=M5(),i=a4(e),s=typeof t<"u";typeof t>"u"&&(t=Array(i.stavesCount).fill(!0).reduce((o,l,f)=>o+(l?1<{h(t)},[t]);const u=Array(i.stavesCount).fill(null).map((o,l)=>!!(c&1<l).filter(o=>u[o]).map(o=>({y:o*we,radius:2})),nameDict:n}),i.stavesCount>1&&b.jsx("line",{stroke:"rgba(0, 0, 0, 1)",x1:"0",x2:"0",y1:"0",y2:(i.stavesCount-1)*we+4}),b.jsx("g",{children:i.conjunctions.map((o,l)=>b.jsx("line",{className:W1("staff-layout-measure-bar",{dashed:o===1,blank:o===0}),x1:Pt,x2:Pt,y1:l*we+4,y2:(l+1)*we},l))}),new Array(i.stavesCount).fill(null).map((o,l)=>b.jsxs("g",{className:W1("staff-rect",{active:!r||!!u[l]}),children:[b.jsx(ma,{translateX:0,translateY:l*we+2,width:20}),s&&b.jsx("text",{x:8,y:l*we+2.5,fontSize:1.8,children:u[l]?"":a.formatMessage({id:"playground.hidden"})}),b.jsx("text",{x:21,y:l*we+2.5,fontSize:1.8,children:i.staffIds[l]}),b.jsx("rect",{style:{cursor:s?"pointer":"initial"},x:0,y:l*we,width:20,height:4,onClick:()=>{if(s){u[l]=!u[l];const f=u.reduce((v,M,d)=>v+(M?1<{const n=M5(),[a,i]=P.useState(null),[s,c]=P.useState(""),[h,u]=P.useState({}),[o,l]=P.useState(""),[f,v]=c4();return P.useEffect(()=>{c(t),l(t)},[t]),P.useEffect(()=>{u(e)},[e]),fa(()=>{try{Rs.parse(s),i(null)}catch(M){i(M.toString());return}l(s),r&&r({staffLayoutCode:s,instrumentDict:h})},300,[s]),b.jsxs("div",{style:{width:"100%",display:"flex",flexDirection:"column"},children:[b.jsxs(C0,{direction:"vertical",children:[b.jsx(i0,{onClick:()=>{v(!0)},children:n.formatMessage({id:"playground.selectTemplate"})}),b.jsx(u5,{addonBefore:n.formatMessage({id:"playground.trackCode"}),value:s,onInput:M=>c(M.target.value)})]}),a&&b.jsx(da,{message:a,type:"error",showIcon:!0,style:{marginBottom:"10px"}}),!a&&b.jsxs(y2,{style:{width:"100%",marginTop:"20px"},children:[b.jsx(Pe,{span:12,children:b.jsx(_4,{staffLayoutCode:o,nameDict:h})}),b.jsx(Pe,{span:12,children:b.jsx("div",{style:{paddingLeft:"20px"},children:a4(o).groups.map((M,d)=>b.jsx(u5,{style:{marginBottom:"5px"},addonBefore:b.jsx("div",{children:M.key}),value:h==null?void 0:h[M.key],placeholder:`${n.formatMessage({id:"playground.instrumentName"})}-${M.key}`,onChange:H=>{h[M.key]=H.target.value;const g={...h,[M.key]:H.target.value};u(g),r&&r({staffLayoutCode:o,instrumentDict:g})}},d))})})]})]})};const ui=[{nameKey:"playground.preset.singleTrack",code:"",track:1},{nameKey:"playground.preset.grandStaff",code:"{-}",track:2},{nameKey:"playground.preset.piano",code:"{pr-pl}",track:2},{nameKey:"playground.preset.twoTrackDefault",code:",",track:2},{nameKey:"playground.preset.threeTrackDefault",code:",,",track:3},{nameKey:"playground.preset.fourTrackDefault",code:",,,",track:4},{nameKey:"playground.preset.fiveTrackDefault",code:",,,,",track:5},{nameKey:"playground.preset.sixTrackDefault",code:",,,,,",track:6},{nameKey:"playground.preset.sevenTrackDefault",code:",,,,,,",track:7},{nameKey:"playground.preset.eightTrackDefault",code:",,,,,,,",track:8},{nameKey:"playground.preset.nineTrackDefault",code:",,,,,,,,",track:9},{nameKey:"playground.preset.tenTrackDefault",code:",,,,,,,,,",track:10},{nameKey:"playground.preset.vocalPiano",code:"vo {pr-pl}",track:3},{nameKey:"playground.preset.violinPiano",code:"vi {pr-pl}",track:3},{nameKey:"playground.preset.pianoStrings",code:"{pr-pl} st",track:3},{nameKey:"playground.preset.twoPianos",code:"{p1r-p1l} {p2r-p2l}",track:4},{nameKey:"playground.preset.stringQuartet",code:"",track:4},{nameKey:"playground.preset.windBand",code:" <[cor1-cor2]-trombe-[tenori-basso]>",track:9}],In={"pr-pl":"Piano",vo:"Voice",vi:"Violin",st:"String","p1r-p1l":"Piano I","p2r-p2l":"Piano II",vi1:"Violin I",vi2:"Violin II",viola:"Viola",cello:"Cello",fl:"Flauti",ob:"Oboi",cl:"Clarinetti",fa:"Fagotti","cor1-cor2":"Corni",trombe:"Trombe",tenori:"Tenori",basso:"Basso",timpani:"Timpani","os1-os2":"Ossia",viole:"Viole",violoncelli:"Violoncelli",contrabassi:"Contrabassi"},N8=({score:e,showAll:t=!1,onChange:r})=>{const n=M5(),a=Math.max(...e.pages.map(s=>Math.max(...s.systems.map(c=>c.staves.length)))),i=ui.filter(s=>t||s.track===a);return t&&i.sort((s,c)=>s.track-c.track),b.jsx(C0,{direction:"vertical",style:{width:"100%"},children:i.map((s,c)=>b.jsxs(y2,{className:W1("staffTplRow",{current:s.code===e.staffLayoutCode}),onClick:()=>{r&&r({staffLayoutCode:s.code,instrumentDict:{...In}})},children:[b.jsx(Pe,{span:12,style:{display:"flex",alignItems:"center"},children:n.formatMessage({id:s.nameKey})}),b.jsx(Pe,{span:12,children:b.jsx(_4,{staffLayoutCode:s.code,nameDict:In})})]},c))})},rt={status:"idle",pass:0,remaining:0,total:0};class O8{ws=null;listeners=new Set;_state={...rt};totalMeasures=0;get state(){return this._state}setState(t){this._state={...this._state,...t};for(const r of this.listeners)r(this._state)}getWSUrl(){return`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/ws/regulate`}ensureConnection(){return new Promise((t,r)=>{if(this.ws&&this.ws.readyState===WebSocket.OPEN){t(this.ws);return}this.ws&&(this.ws.close(),this.ws=null);const n=this.getWSUrl();console.log("[regulationWS] connecting to",n);const a=new WebSocket(n);this.ws=a,a.onopen=()=>{console.log("[regulationWS] connected"),t(a)},a.onerror=i=>{console.error("[regulationWS] connection error:",i),r(new Error("WebSocket connection failed"))},a.onclose=()=>{this.ws===a&&(this.ws=null)},a.onmessage=i=>{try{const s=JSON.parse(i.data);this.handleMessage(s)}catch(s){console.error("[regulationWS] failed to parse message:",s)}}})}handleMessage(t){switch(console.log("[regulationWS] recv:",t.type,t.type==="progress"?`pass=${t.pass} ${t.remaining}/${t.total}`:""),t.type){case"started":this.totalMeasures=t.totalMeasures,this.setState({status:"regulating",scoreId:t.scoreId,total:t.totalMeasures,remaining:t.totalMeasures,pass:0});break;case"progress":this.setState({status:"regulating",pass:t.pass,remaining:t.remaining,total:t.total});break;case"completed":this.setState({status:"completed",stat:t.stat,remaining:0,total:this.totalMeasures});break;case"error":console.error("[regulationWS] server error:",t.message),this.setState({status:"error",errorMessage:t.message});break;case"status_response":t.regulating&&this.setState({status:"regulating",scoreId:t.scoreId,pass:t.pass||0,remaining:t.remaining||0,total:t.total||0});break}}prepare(t){this.totalMeasures=0,this.setState({...rt,status:"regulating",scoreId:t})}async startRegulation(t){this.setState({...rt,status:"connecting",scoreId:t}),this.totalMeasures=0;try{(await this.ensureConnection()).send(JSON.stringify({type:"regulate",scoreId:t})),this.setState({status:"regulating"})}catch(r){this.setState({status:"error",errorMessage:r.message})}}async queryStatus(t){try{(await this.ensureConnection()).send(JSON.stringify({type:"status",scoreId:t}))}catch{}}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}reset(){this.setState({...rt})}disconnect(){this.ws&&(this.ws.close(),this.ws=null),this.setState({...rt})}}const nt=new O8;var fi={exports:{}};(function(e,t){(function(r,n){e.exports=n(P)})(ft,function(r){return(()=>{var n={703:(c,h,u)=>{var o=u(414);function l(){}function f(){}f.resetWarningCache=l,c.exports=function(){function v(H,g,V,C,x,S){if(S!==o){var _=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw _.name="Invariant Violation",_}}function M(){return v}v.isRequired=v;var d={array:v,bool:v,func:v,number:v,object:v,string:v,symbol:v,any:v,arrayOf:M,element:v,elementType:v,instanceOf:M,node:v,objectOf:M,oneOf:M,oneOfType:M,shape:M,exact:M,checkPropTypes:f,resetWarningCache:l};return d.PropTypes=d,d}},697:(c,h,u)=>{c.exports=u(703)()},414:c=>{c.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},427:c=>{c.exports=r}},a={};function i(c){var h=a[c];if(h!==void 0)return h.exports;var u=a[c]={exports:{}};return n[c](u,u.exports,i),u.exports}i.n=c=>{var h=c&&c.__esModule?()=>c.default:()=>c;return i.d(h,{a:h}),h},i.d=(c,h)=>{for(var u in h)i.o(h,u)&&!i.o(c,u)&&Object.defineProperty(c,u,{enumerable:!0,get:h[u]})},i.o=(c,h)=>Object.prototype.hasOwnProperty.call(c,h),i.r=c=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(c,"__esModule",{value:!0})};var s={};return(()=>{i.r(s),i.d(s,{Component:()=>s1,containCrop:()=>a1,default:()=>s1,makeAspectCrop:()=>D});var c=i(427),h=i.n(c),u=i(697),o=i.n(u);function l(j){var R,e1,Z="";if(typeof j=="string"||typeof j=="number")Z+=j;else if(typeof j=="object")if(Array.isArray(j))for(R=0;Re1&&(Z.height=e1-Z.y,Z.width=Z.height*j.aspect),Z.x+Z.width>R&&(Z.width=R-Z.x,Z.height=Z.width/j.aspect),Z}function Y(j,R,e1){return j.unit==="%"?j:{unit:"%",aspect:j.aspect,x:j.x/R*100,y:j.y/e1*100,width:j.width/R*100,height:j.height/e1*100}}function q(j,R,e1){return j.unit?j.unit==="px"?j:{unit:"px",aspect:j.aspect,x:j.x*R/100,y:j.y*e1/100,width:j.width*R/100,height:j.height*e1/100}:x(x({},j),{},{unit:"px"})}function a1(j,R,e1,Z){var i1=q(R,e1,Z),X=q(j,e1,Z),n1=x({},i1);if(!i1.aspect)return i1.x<0?(n1.x=0,n1.width+=i1.x):i1.x+i1.width>e1&&(n1.width=e1-i1.x),i1.y+i1.height>Z&&(n1.height=Z-i1.y),n1;var N=!1;i1.x<0?(n1.x=0,n1.width+=i1.x,n1.height=n1.width/i1.aspect,N=!0):i1.x+i1.width>e1&&(n1.width=e1-i1.x,n1.height=n1.width/i1.aspect,N=!0),N&&X.y>n1.y&&(n1.y=i1.y+(i1.height-n1.height));var W=!1;return n1.y+n1.height>Z&&(n1.height=Z-i1.y,n1.width=n1.height*i1.aspect,W=!0),W&&X.x>n1.x&&(n1.x=i1.x+(i1.width-n1.width)),n1}var M1={capture:!0,passive:!1},s1=function(j){(function(N,W){if(typeof W!="function"&&W!==null)throw new TypeError("Super expression must either be null or a function");N.prototype=Object.create(W&&W.prototype,{constructor:{value:N,writable:!0,configurable:!0}}),W&&d(N,W)})(n1,j);var R,e1,Z,i1,X=(Z=n1,i1=function(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}(),function(){var N,W=V(Z);if(i1){var f1=V(this).constructor;N=Reflect.construct(W,arguments,f1)}else N=W.apply(this,arguments);return H(this,N)});function n1(){var N;v(this,n1);for(var W=arguments.length,f1=new Array(W),V1=0;V1-1?(W.x=b1.x,W.y=b1.y,W.width=b1.width,W.height=b1.height):n1.xOrds.indexOf(f1)>-1?(W.x=b1.x,W.width=b1.width):n1.yOrds.indexOf(f1)>-1&&(W.y=b1.y,W.height=b1.height),N.lastYCrossover=N.yCrossOver,this.crossOverCheck(),W.width0&&arguments[0]!==void 0?arguments[0]:"px",W=x(x({},n1.defaultCrop),this.props.crop||{}),f1=this.mediaDimensions,V1=f1.width,c1=f1.height;return N==="px"?q(W,V1,c1):Y(W,V1,c1)}},{key:"crossOverCheck",value:function(){var N=this.evData,W=this.props,f1=W.minWidth,V1=W.minHeight;!f1&&(!N.xCrossOver&&-Math.abs(N.cropStartWidth)-N.xDiff>=0||N.xCrossOver&&-Math.abs(N.cropStartWidth)-N.xDiff<=0)&&(N.xCrossOver=!N.xCrossOver),!V1&&(!N.yCrossOver&&-Math.abs(N.cropStartHeight)-N.yDiff>=0||N.yCrossOver&&-Math.abs(N.cropStartHeight)-N.yDiff<=0)&&(N.yCrossOver=!N.yCrossOver);var c1=N.xCrossOver!==N.startXCrossOver,m1=N.yCrossOver!==N.startYCrossOver;N.inversedXOrd=!!c1&&O(N.ord),N.inversedYOrd=!!m1&&O(N.ord)}},{key:"render",value:function(){var N=this.props,W=N.children,f1=N.circularCrop,V1=N.className,c1=N.crossorigin,m1=N.crop,o1=N.disabled,d1=N.locked,p1=N.imageAlt,b1=N.onImageError,_1=N.renderComponent,z1=N.src,C1=N.style,T1=N.imageStyle,L1=N.ruleOfThirds,P1=this.state,q1=P1.cropIsActive,o0=P1.newCropIsBeingDrawn,$=T(m1)&&this.componentRef?this.createCropSelection():null,Q=function(){for(var r1,K,g1=0,E1="";g1{const[a]=ia(),i=P.useRef(null);let s=0;if(a){let c=0;for(const[h,u]of e.pages.entries()){if(a.system>=c-1&&a.system{i.current&&i.current.scrollIntoView({block:"center",behavior:"smooth"})},[i.current,s]),b.jsx("svg",{className:W1("graph"),style:{objectFit:"contain",position:"absolute",top:0,left:0},viewBox:`0 0 ${t==null?void 0:t.width} ${t==null?void 0:t.height}`,children:t.systems.map((c,h)=>{const u=e.pages.slice(0,r).reduce((o,l)=>o+l.systems.length,0)+h;return b.jsxs("g",{className:W1("system"),transform:`translate(${c.left}, ${c.top})`,children:[b.jsx("rect",{style:{opacity:0},x:0,y:c.noteRange.top,width:c.width,height:c.noteRange.bottom-c.noteRange.top,onClick:o=>{const l=o.target,f=l.getBoundingClientRect(),v=o.clientX-f.left,M=l.getBBox(),d=v/f.width*M.width;n({system:u,x:d})}}),(a==null?void 0:a.system)===u?b.jsx("line",{ref:i,transform:`translate(${a.x}, 0)`,x1:0,x2:0,y1:c.noteRange.top,y2:c.noteRange.bottom,style:{stroke:"lightblue",strokeWidth:1}}):null]},h)})})},P8=P.memo(I8);const Pn=Object.keys(n4).reduce((e,t,r)=>(e[t]=r,e),{}),R8={[-1]:"RosyBrown",0:"GreenYellow",1:"orange",2:"red"},vi=({score:e,page:t,pageIndex:r,system:n,systemIndex:a,staff:i,staffIndex:s,pointer:c,setPointer:h})=>{var R,e1,Z,i1;const[u,o]=F5();z2();const[l]=o4(),[f]=l4(),[v]=sa();h4();const[M,d]=P.useState(null),[H]=u4(),[g,V]=f4(),[C,x]=ca(),[S]=s4(),[_,T]=P.useState(null),[O]=g5("Shift");P.useContext(oa);const[[D,Y],[q,a1],M1]=la(),s1=n==null?void 0:n.headMeasureIndex,j=Number.isInteger(s1)&&((R=e==null?void 0:e.spartito)==null?void 0:R.measures.slice(s1));return b.jsx(b.Fragment,{children:b.jsxs("g",{className:W1("staff",{moving:O}),transform:`translate(0, ${i.top})`,onMouseEnter:()=>h([r,a,s]),onMouseLeave:()=>h([r,a,null]),onMouseDown:X=>{var n1,N;O&&(X.preventDefault(),T((N=(n1=ot(X.target,W=>{var f1;return!!((f1=W==null?void 0:W.dataset)!=null&&f1.id)}))==null?void 0:n1.dataset)==null?void 0:N.id))},onMouseUp:X=>{if(!O||!_)return;const n1=n.semantics.find(N=>N.id===_)||n.staves.map(N=>N.semantics).flat(1).find(N=>N.id===_);if(n1){const N=ot(X.currentTarget,o1=>o1.nodeName==="svg"),W=N.createSVGPoint();W.x=X.clientX,W.y=X.clientY;const f1=N.getScreenCTM(),V1=W.matrixTransform(f1.inverse()),c1=V1.x-n.left,m1=V1.y-(i.top+i.staffY+n.top);n1.x=c1,n1.y=m1,o(c0(e,{modify:!0})),T(null)}},children:[b.jsxs("g",{children:[b.jsx(ma,{translateY:i.staffY,width:n.width,additionalLines:i.additionalLines}),(e1=i==null?void 0:i.measures)==null?void 0:e1.map((X,n1)=>{var c1,m1,o1,d1,p1,b1,_1,z1,C1,T1;const N=s1+n1,W=D.find(L1=>L1.measureIndex===N),f1=!!W,V1=j&&j[n1]&&((c1=j[n1])==null?void 0:c1.regulationHash)!=((m1=j[n1])==null?void 0:m1.regulationHash0);return b.jsxs("g",{className:W1("measure",{focus:((o1=i==null?void 0:i.semantics)==null?void 0:o1.findIndex(L1=>L1.id===(C==null?void 0:C.id)))>-1}),onMouseEnter:()=>h([r,a,s,n1]),onMouseLeave:()=>h([r,a,s,null]),onClick:()=>a1(N),children:[b.jsx("rect",{className:W1("pad",{highlight:(S==null?void 0:S.pageIndex)===r&&(S==null?void 0:S.systemIndex)===a&&(S==null?void 0:S.staffIndex)===s,...v?{issue:X.timeWarped&&!((W==null?void 0:W.status)<=0),ill:j&&(((d1=j[n1])==null?void 0:d1.hasIllEvent)||((p1=j[n1])==null?void 0:p1.tickTwist)>.36)&&!((W==null?void 0:W.status)<=0),error:j&&(((b1=j[n1])==null?void 0:b1.tickRatesInStaves.some(L1=>L1<0))||((_1=j[n1])==null?void 0:_1.tickTwist)>=1)}:{}}),x:X.left,y:0,width:X.width,height:X.height}),s===0&&b.jsxs(b.Fragment,{children:[b.jsxs("text",{className:"measure-index",x:X.left,y:i.staffY-5,fontSize:2.6,fontWeight:"bold",fill:f1?R8[W==null?void 0:W.status]:"#7776",children:[(W==null?void 0:W.status)>0?"*".repeat(W.status):"",(W==null?void 0:W.status)==-1?"-":"",s1+n1+1,W!=null&&W.annotator?b.jsx("tspan",{dy:"-1",fontSize:"1.6px",fill:"DodgerBlue",children:"★"}):null,V1?b.jsx("tspan",{y:i.staffY-5.8,fontSize:"2px",children:"⚠"}):""]}),n1===0&&((z1=j==null?void 0:j[n1])==null?void 0:z1.measureNumber)>1&&b.jsx("text",{className:"measure-number",x:X.left,y:i.staffY-6,fontSize:1.6,fill:"#575",textAnchor:"end",children:(C1=j==null?void 0:j[n1])==null?void 0:C1.measureNumber})]}),b.jsxs("g",{transform:`translate(0, ${i.staffY})`,children:[(f||v)&&X.antiTokens&&b.jsx("g",{className:"anti tokens",children:X.antiTokens.map((L1,P1)=>b.jsx("g",{className:W1("token",{predicted:L1.isPredicted,"non-glyph":!K4.includes(L1.type),"octave-shift":L1.type.startsWith("octave-")}),transform:`translate(${L1.x}, ${L1.y})`,id:`anti-${L1.id}`,onClick:()=>console.log("anti-token:",L1),children:b.jsx("use",{xlinkHref:`#score-token-def-${L1.typeId}`})},P1))}),(f||v)&&b.jsx("g",{className:"tokens",children:(T1=X==null?void 0:X.tokens)==null?void 0:T1.filter(L1=>H==="edit"||H==="play"&&sc.includes(L1.type)).map((L1,P1)=>b.jsxs("g",{className:W1("token",{predicted:L1.isPredicted,"non-glyph":!K4.includes(L1.type),"octave-shift":L1.type.startsWith("octave-"),highlight:S&&L1.id===(S==null?void 0:S.point.id)}),style:v?{color:Number.isFinite(L1.voice)&&L1.voice?L1.voiceIndices.map(q1=>["",...Jc][q1])[0]:"#ccc"}:{},transform:`translate(${L1.x}, ${L1.y})`,id:L1.id,onClick:()=>console.log(L1),children:[L1.voice?b.jsxs("title",{children:["voice-",L1.voiceIndices.join(",")]}):null,b.jsx("use",{xlinkHref:`#score-token-def-${L1.typeId}`})]},P1))})]})]},n1)}),b.jsxs("g",{className:"semantics",children:[s===0&&b.jsx("g",{children:(Z=n==null?void 0:n.semantics)==null?void 0:Z.map((X,n1)=>{var N;return!l&&!g.some(W=>W.id===X.id)?null:b.jsxs("g",{className:W1("semantic",{vline:/^vline/.test(X.semantic),highlight:g.findIndex(W=>W.id===X.id)>-1,strong:(C==null?void 0:C.id)===X.id,hidden:!(!Number.isFinite(X.confidence)||X.confidence>=(((N=e.settings)==null?void 0:N.semanticConfidenceThreshold)??1)),moving:_===X.id}),"data-semantic-index":Pn[X.semantic],transform:`translate(${X.x}, ${X.y})`,onMouseEnter:()=>{d(X.semantic)},onMouseLeave:()=>d(null),"data-id":X.id,onClick:()=>console.log("sys",X),children:[b.jsx("circle",{}),/^vline/.test(X.semantic)&&b.jsxs("g",{children:[b.jsx("polygon",{className:"arrow",points:"-0.2,0 0.2,0 0,1.3"}),b.jsx("rect",{x:"-0.03",width:"0.06",y:X.extension.y1-X.y,height:X.extension.y2-X.extension.y1})]}),b.jsx("title",{children:X.semantic})]},`sys-${n1}`)})}),b.jsx("g",{transform:`translate(0, ${i.staffY})`,children:(i1=i==null?void 0:i.semantics)==null?void 0:i1.map((X,n1)=>{var N;return!l&&!g.some(W=>W.id===X.id)?null:b.jsxs("g",{className:W1("semantic",{vline:/^vline/.test(X.semantic),highlight:g.findIndex(W=>W.id===X.id)>-1,strong:(C==null?void 0:C.id)===X.id,hidden:!(!Number.isFinite(X.confidence)||X.confidence>=(((N=e.settings)==null?void 0:N.semanticConfidenceThreshold)??1)),moving:_===X.id}),"data-semantic-index":Pn[X.semantic],transform:`translate(${X.x}, ${X.y})`,onClick:()=>console.log(X),"data-id":X.id,children:[b.jsx("circle",{}),/^vline/.test(X.semantic)&&b.jsxs("g",{children:[b.jsx("polygon",{className:"arrow",points:"-0.2,0 0.2,0 0,1.3"}),b.jsx("rect",{x:"-0.03",width:"0.06",y:X.extension.y1-X.y,height:X.extension.y2-X.extension.y1})]}),/^rect/.test(X.semantic)&&b.jsx("g",{children:b.jsx("rect",{x:-X.extension.width/2,y:-X.extension.height/2,width:X.extension.width,height:X.extension.height})}),b.jsx("title",{children:X.semantic})]},n1)})})]})]}),b.jsx("g",{className:"measure-bars",children:n.measureBars.map((X,n1)=>b.jsx("g",{className:W1("measure-bar"),transform:`translate(${X}, ${i.staffY-2})`,children:b.jsx("line",{x1:0,x2:0,y1:0,y2:4})},n1))})]})})};P.memo(vi);const D8=e=>{var _,T;const t=M5(),{score:r,pageIndex:n,system:a,systemIndex:i}=e;if(a.staves.length===0)return b.jsx("g",{},i);const[s]=h4(),{pointer:c,setPointer:h}=e,[u,o]=P.useState(!1),[,l]=F5(),[f,v]=P.useState(0),M=a4(r.staffLayoutCode),[d,H]=ha();c4();const[g,V]=ua(),C=Array(M.stavesCount).fill(null).map((O,D)=>!!(f&1<x(a),[a]);return b.jsxs("g",{className:W1("system",{}),transform:`translate(${a.left}, ${a.top})`,children:[s&&a.backgroundImage&&!((_=a.staves[0])!=null&&_.backgroundImage)&&!((T=a.staves[0])!=null&&T.maskImage)&&b.jsx("image",{className:"background",href:a.backgroundImage,...a.imagePosition||{}}),a.staves.length>=2&&b.jsx("line",{className:"connection",x1:0,x2:0,y1:a.connectionLine.top,y2:a.connectionLine.bottom}),a.staves.map((O,D)=>b.jsxs("g",{className:W1("staff"),transform:`translate(0, ${O.top})`,onMouseEnter:()=>h([n,i,D]),onMouseLeave:()=>h([n,i,null]),children:[s&&!O.maskImage&&O.backgroundImage&&b.jsx("image",{className:"background",href:O.backgroundImage,...O.imagePosition||{}}),s&&O.maskImage&&b.jsx("image",{className:"background",style:{opacity:c.slice(0,3).join(",")===[n,i,D].join(",")||c[2]===null?1:.3},href:O.maskImage,...O.imagePosition||{}})]},"staff-"+D)),b.jsx("g",{className:"tick-line",children:new Array(a.measureCount).fill(null).map((O,D)=>{var q;return Object.entries(((q=g==null?void 0:g[S+D])==null?void 0:q.tickMap)||{}).sort((a1,M1)=>+a1[0]-+M1[0]).map((a1,M1)=>{var j;const s1=J3(+a1[0],1920);return c[0]===n&&c[1]===i&&c[3]===D?b.jsxs("g",{transform:`translate(${+a1[1]}, ${((j=a.staves[0])==null?void 0:j.top)+1})`,children:[b.jsxs("g",{className:"fraction",children:[b.jsx("text",{fontSize:1,textAnchor:"middle",transform:"translate(0, 1)",children:s1.numerator}),b.jsx("text",{textAnchor:"middle",transform:"translate(0, 2.2)",style:{textDecoration:"overline"},children:s1.denominator})]}),b.jsx("path",{transform:`translate(0, ${2.4})`,d:"M0 0.8 L -0.3 0 L 0.3 0",fill:"red"}),b.jsx("rect",{x:-.02,y:3,width:.04,height:a.height-6})]},M1):null})})}),a.staves.map((O,D)=>b.jsx(vi,{...e,staff:O,staffIndex:D},D)),b.jsx("g",{className:"measure-bars",children:a.measureBars.map((O,D)=>b.jsx("g",{transform:`translate(${O}, 0)`,children:M.mask(a.staffMask).conjunctions.map((Y,q)=>{const a1=a.staves[q],M1=a.staves[q+1];if(a1&&M1)return b.jsx("g",{transform:`translate(0, ${a1.top+a1.staffY+2})`,children:b.jsx("line",{className:W1("staff-layout-measure-bar",{dashed:Y===1,blank:Y===0}),x1:"0",x2:"0",y1:0,y2:M1.top+M1.staffY-(a1.top+a1.staffY)-4})},q)})},D))}),b.jsx(ga,{layout:M.mask(a.staffMask),positions:a.staffPositions,nameDict:(!a.prev||a.staffMask!==a.prev.staffMask)&&r.instrumentDict}),b.jsx("rect",{className:"brackets-area",x:-12,y:a.connectionLine.top,width:12,height:a.connectionLine.bottom-a.connectionLine.top,onClick:()=>{a.staves.lengthr.staffLayout.stavesCount&&b.jsxs("g",{transform:`translate(-6, ${a.connectionLine.top-2})`,children:[b.jsx("use",{xlinkHref:"#svg-icon-exclamation"}),b.jsx("title",{children:t.formatMessage({id:"playground.tooManyTracks"})})]}),a.staves.length{var O;a.staffMaskChanged=f!==((O=a==null?void 0:a.prev)==null?void 0:O.staffMask)?f:void 0,l(c0(r,{modify:!0})),o(!1)},onCancel:()=>{o(!1)},okButtonProps:{disabled:C.filter(Boolean).length!==a.staves.length},children:b.jsxs("div",{style:{width:"100%",display:"flex",flexDirection:"column"},children:[b.jsx(C0,{children:b.jsx(i0,{onClick:()=>{H(!0)},children:t.formatMessage({id:"playground.editTrackTitle"})})}),b.jsx(_4,{staffLayoutCode:r.staffLayoutCode,staffMask:f,onChange:v,nameDict:r.instrumentDict}),a.staffMaskChanged&&b.jsx(i0,{onClick:()=>{a.staffMaskChanged=void 0,v(a.staffMask),l(c0(r,{modify:!0}))},children:t.formatMessage({id:"playground.restoreDefault"})}),C.filter(Boolean).length!==a.staves.length&&b.jsx(da,{message:t.formatMessage({id:"playground.staffCountMismatch"}),type:"error",showIcon:!0})]})})]},i)},j8=P.memo(D8);const F8="_semanticSelectItem_12toc_1",$8="_semanticSelectItemActive_12toc_19",Rn={semanticSelectItem:F8,semanticSelectItemActive:$8};var bt={NONE:"none",PRIMARY:"primary",SUCCESS:"success",WARNING:"warning",DANGER:"danger"},ae={BOTTOM:"bottom",BOTTOM_LEFT:"bottom-left",BOTTOM_RIGHT:"bottom-right",LEFT:"left",LEFT_BOTTOM:"left-bottom",LEFT_TOP:"left-top",RIGHT:"right",RIGHT_BOTTOM:"right-bottom",RIGHT_TOP:"right-top",TOP:"top",TOP_LEFT:"top-left",TOP_RIGHT:"top-right"},q2,K2,G2,Y2,p0="bp3";typeof process<"u"&&(p0=(Y2=(K2=(q2=process.env)===null||q2===void 0?void 0:q2.BLUEPRINT_NAMESPACE)!==null&&K2!==void 0?K2:(G2=process.env)===null||G2===void 0?void 0:G2.REACT_APP_BLUEPRINT_NAMESPACE)!==null&&Y2!==void 0?Y2:p0);var di="".concat(p0,"-active"),Dn="".concat(p0,"-dark"),A4="".concat(p0,"-disabled"),x4="".concat(p0,"-fill"),pi="".concat(p0,"-large"),mi="".concat(p0,"-minimal"),B8="".concat(p0,"-round"),U8="".concat(p0,"-small"),W8=Ze(bt.PRIMARY);Ze(bt.SUCCESS);Ze(bt.WARNING);Ze(bt.DANGER);var q8="".concat(p0,"-text-overflow-ellipsis"),K8="".concat(p0,"-heading"),S2="".concat(p0,"-input"),G8="".concat(S2,"-group"),Y8="".concat(S2,"-left-container"),X8="".concat(S2,"-action"),E2="".concat(p0,"-menu"),gi="".concat(E2,"-item"),Q8="".concat(gi,"-label"),jn="".concat(p0,"-submenu"),Z8="".concat(E2,"-divider"),J8="".concat(E2,"-header"),Ye="".concat(p0,"-overlay"),eh="".concat(Ye,"-backdrop"),Fn="".concat(Ye,"-content"),th="".concat(Ye,"-inline"),X2="".concat(Ye,"-open"),$n="".concat(Ye,"-start-focus-trap"),Bn="".concat(Ye,"-end-focus-trap"),he="".concat(p0,"-popover"),Q2="".concat(he,"-arrow"),rh="".concat(he,"-backdrop"),Un="".concat(he,"-capturing-dismiss"),nh="".concat(he,"-content"),l2="".concat(he,"-dismiss"),ah="".concat(l2,"-override"),ih="".concat(he,"-open"),sh="".concat(he,"-out-of-boundaries"),ch="".concat(he,"-target"),oh="".concat(he,"-wrapper"),lh="".concat(p0,"-transition-container"),hh="".concat(p0,"-portal"),uh="".concat(p0,"-tooltip"),fh="".concat(p0,"-icon");function vh(){return p0}function dh(e){if(e!=null)return e.indexOf("".concat(p0,"-icon-"))===0?e:"".concat(p0,"-icon-").concat(e)}function Ze(e){if(!(e==null||e===bt.NONE))return"".concat(p0,"-intent-").concat(e.toLowerCase())}/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any diff --git a/dist/assets/index-11479954.js b/dist/assets/index-6cc9bc74.js similarity index 99% rename from dist/assets/index-11479954.js rename to dist/assets/index-6cc9bc74.js index cc31191bde1cfa70dff6e6b60c4542c83440c2b6..6828a617b40097f7e8d6e7e85322b0b33f92e558 100644 --- a/dist/assets/index-11479954.js +++ b/dist/assets/index-6cc9bc74.js @@ -1 +1 @@ -import{r as s,j as e}from"./umi-91f9d113.js";const t=()=>e.jsxs("defs",{className:"score-token-defs",children:[e.jsx("g",{id:"score-token-def-clefs-G",className:"token",children:e.jsx("text",{x:"-1.3",children:""})}),e.jsx("g",{id:"score-token-def-clefs-F",className:"token",children:e.jsx("text",{x:"-1.06",children:""})}),e.jsx("g",{id:"score-token-def-clefs-C",className:"token",children:e.jsx("text",{x:"-1.06",children:""})}),e.jsx("g",{id:"score-token-def-timesig-C44",className:"token",children:e.jsx("text",{x:"-0.9",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-timesig-C22",className:"token",children:e.jsx("text",{x:"-0.9",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-timesig0",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"0"})}),e.jsx("g",{id:"score-token-def-timesig1",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"1"})}),e.jsx("g",{id:"score-token-def-timesig2",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"2"})}),e.jsx("g",{id:"score-token-def-timesig3",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"3"})}),e.jsx("g",{id:"score-token-def-timesig4",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"4"})}),e.jsx("g",{id:"score-token-def-timesig5",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"5"})}),e.jsx("g",{id:"score-token-def-timesig6",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"6"})}),e.jsx("g",{id:"score-token-def-timesig7",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"7"})}),e.jsx("g",{id:"score-token-def-timesig8",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"8"})}),e.jsx("g",{id:"score-token-def-timesig9",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"9"})}),e.jsx("g",{id:"score-token-def-octave-a",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"𝄶---"})}),e.jsx("g",{id:"score-token-def-octave-b",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"𝄷---"})}),e.jsx("g",{id:"score-token-def-octave-0",className:"token",children:e.jsx("text",{x:"-0.7",y:"0.6",className:"plain",children:"┐"})}),e.jsx("g",{id:"score-token-def-octave-8",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"8-----"})}),e.jsx("g",{id:"score-token-def-n0",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"0"})})}),e.jsx("g",{id:"score-token-def-n1",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"1"})})}),e.jsx("g",{id:"score-token-def-n2",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"2"})})}),e.jsx("g",{id:"score-token-def-n3",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"3"})})}),e.jsx("g",{id:"score-token-def-n4",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"4"})})}),e.jsx("g",{id:"score-token-def-n5",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"5"})})}),e.jsx("g",{id:"score-token-def-n6",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"6"})})}),e.jsx("g",{id:"score-token-def-n7",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"7"})})}),e.jsx("g",{id:"score-token-def-n8",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"8"})})}),e.jsx("g",{id:"score-token-def-n9",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"9"})})}),e.jsx("g",{id:"score-token-def-accidentals-sharp",className:"token",children:e.jsx("text",{x:"-0.55",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-doublesharp",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-natural",className:"token",children:e.jsx("text",{x:"-0.3",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-flat",className:"token",children:e.jsx("text",{x:"-0.3",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-flatflat",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsxs("g",{id:"score-token-def-key-sharp",className:"token",children:[e.jsx("text",{x:"-0.55",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsxs("g",{id:"score-token-def-key-natural",className:"token",children:[e.jsx("text",{x:"-0.3",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsxs("g",{id:"score-token-def-key-flat",className:"token",children:[e.jsx("text",{x:"-0.3",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsx("g",{id:"score-token-def-noteheads-s0",className:"token",children:e.jsx("text",{x:"-0.913",children:""})}),e.jsx("g",{id:"score-token-def-noteheads-s1",className:"token",children:e.jsx("text",{x:"-0.632",children:""})}),e.jsx("g",{id:"score-token-def-noteheads-s2",className:"token",children:e.jsx("text",{x:"-0.599",children:""})}),e.jsxs("g",{id:"score-token-def-noteheads-s1-u",className:"token",children:[e.jsx("text",{x:"-1.264",children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"-0.06",y2:"-3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s2-u",className:"token",children:[e.jsx("text",{x:"-1.198",children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"-0.06",y2:"-3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s1-d",className:"token",children:[e.jsx("text",{children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"0.16",y2:"3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s2-d",className:"token",children:[e.jsx("text",{children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"0.16",y2:"3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsx("g",{id:"score-token-def-rests-M1",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-0",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-0o",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-1o",className:"token",children:e.jsx("text",{x:"-0.75",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-rests-2",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-3",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-4",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-5",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-6",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-flags-u3",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u4",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u5",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u6",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u7",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u8",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-slur-begin",className:"token",children:e.jsx("path",{d:"M0 0C0.5 -0.5 1 -0.6 1.5 -0.6L1.5 -0.4C1 -0.4 0.5 -0.4 0 0z"})}),e.jsx("g",{id:"score-token-def-slur-end",className:"token",children:e.jsx("path",{d:"M0 0C-0.5 -0.5 -1 -0.6 -1.5 -0.6L-1.5 -0.4C-1 -0.4 -0.5 -0.4 0 0z"})}),e.jsxs("g",{id:"score-token-def-volta-left",className:"token",children:[e.jsx("text",{x:"-0.25",y:"-0.5",children:""}),e.jsx("text",{x:"-0.25",y:"0.5",children:""}),e.jsx("line",{x1:"-0.5",x2:"-0.5",y1:"-2",y2:"2"})]}),e.jsxs("g",{id:"score-token-def-volta-right",className:"token",children:[e.jsx("text",{x:"-0.25",y:"-0.5",children:""}),e.jsx("text",{x:"-0.25",y:"0.5",children:""}),e.jsx("line",{x1:"0.5",x2:"0.5",y1:"-2",y2:"2"})]}),e.jsxs("g",{id:"score-token-def-bar-terminal",className:"token",children:[e.jsx("rect",{x:"-0.064",y:"-2",width:"0.128",height:"4"}),e.jsx("rect",{x:"0.27",y:"-2",width:"0.4",height:"4"})]}),e.jsxs("g",{id:"score-token-def-bar-segment",className:"token",children:[e.jsx("rect",{x:"-0.359",y:"-2",width:"0.128",height:"4"}),e.jsx("rect",{x:"0.231",y:"-2",width:"0.128",height:"4"})]}),e.jsx("g",{id:"score-token-def-dot",className:"token",children:e.jsx("text",{children:""})}),e.jsxs("g",{id:"score-token-def-dotdot",className:"token",children:[e.jsx("text",{children:""}),e.jsx("text",{x:"0.8",children:""})]}),e.jsx("g",{id:"score-token-def-f",className:"token",children:e.jsx("text",{x:"-0.6",y:"0.5",children:"f"})}),e.jsx("g",{id:"score-token-def-m",className:"token",children:e.jsx("text",{x:"-0.9",y:"0.5",children:"m"})}),e.jsx("g",{id:"score-token-def-n",className:"token",children:e.jsx("text",{x:"-0.9",y:"0.5",children:"n"})}),e.jsx("g",{id:"score-token-def-p",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"p"})}),e.jsx("g",{id:"score-token-def-r",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"r"})}),e.jsx("g",{id:"score-token-def-s",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"s"})}),e.jsx("g",{id:"score-token-def-z",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"z"})}),e.jsx("g",{id:"score-token-def-scripts-ufermata",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-ushortfermata",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-sforzato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-staccato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-ustaccatissimo",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-turn",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-trill",className:"token",children:e.jsx("text",{y:"0.5",children:""})}),e.jsx("g",{id:"score-token-def-scripts-segno",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-coda",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-arpeggio",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:""})}),e.jsx("g",{id:"score-token-def-scripts-prall",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-mordent",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-umarcato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-tenuto",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-uportato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-pedal-star",className:"token",children:e.jsx("text",{x:"-0.78",y:"0.78",children:""})}),e.jsx("g",{id:"score-token-def-pedal-Ped",className:"token",children:e.jsx("text",{x:"-1.6",y:"0.7",children:""})}),e.jsx("g",{id:"score-token-def-BOS",className:"token",children:e.jsx("text",{x:"-3",y:"1.04",children:"▶"})}),e.jsx("g",{id:"score-token-def-BeamLeft",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"├"})}),e.jsx("g",{id:"score-token-def-BeamContinue",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"┼"})}),e.jsx("g",{id:"score-token-def-BeamRight",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"┤"})}),e.jsx("g",{id:"score-token-def-GraceNotehead",className:"token",children:e.jsx("text",{x:"-0.36",className:"s-grace",children:""})})]}),n=s.memo(t);export{n as S}; +import{r as s,j as e}from"./umi-37873494.js";const t=()=>e.jsxs("defs",{className:"score-token-defs",children:[e.jsx("g",{id:"score-token-def-clefs-G",className:"token",children:e.jsx("text",{x:"-1.3",children:""})}),e.jsx("g",{id:"score-token-def-clefs-F",className:"token",children:e.jsx("text",{x:"-1.06",children:""})}),e.jsx("g",{id:"score-token-def-clefs-C",className:"token",children:e.jsx("text",{x:"-1.06",children:""})}),e.jsx("g",{id:"score-token-def-timesig-C44",className:"token",children:e.jsx("text",{x:"-0.9",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-timesig-C22",className:"token",children:e.jsx("text",{x:"-0.9",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-timesig0",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"0"})}),e.jsx("g",{id:"score-token-def-timesig1",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"1"})}),e.jsx("g",{id:"score-token-def-timesig2",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"2"})}),e.jsx("g",{id:"score-token-def-timesig3",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"3"})}),e.jsx("g",{id:"score-token-def-timesig4",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"4"})}),e.jsx("g",{id:"score-token-def-timesig5",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"5"})}),e.jsx("g",{id:"score-token-def-timesig6",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"6"})}),e.jsx("g",{id:"score-token-def-timesig7",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"7"})}),e.jsx("g",{id:"score-token-def-timesig8",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"8"})}),e.jsx("g",{id:"score-token-def-timesig9",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"9"})}),e.jsx("g",{id:"score-token-def-octave-a",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"𝄶---"})}),e.jsx("g",{id:"score-token-def-octave-b",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"𝄷---"})}),e.jsx("g",{id:"score-token-def-octave-0",className:"token",children:e.jsx("text",{x:"-0.7",y:"0.6",className:"plain",children:"┐"})}),e.jsx("g",{id:"score-token-def-octave-8",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"8-----"})}),e.jsx("g",{id:"score-token-def-n0",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"0"})})}),e.jsx("g",{id:"score-token-def-n1",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"1"})})}),e.jsx("g",{id:"score-token-def-n2",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"2"})})}),e.jsx("g",{id:"score-token-def-n3",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"3"})})}),e.jsx("g",{id:"score-token-def-n4",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"4"})})}),e.jsx("g",{id:"score-token-def-n5",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"5"})})}),e.jsx("g",{id:"score-token-def-n6",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"6"})})}),e.jsx("g",{id:"score-token-def-n7",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"7"})})}),e.jsx("g",{id:"score-token-def-n8",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"8"})})}),e.jsx("g",{id:"score-token-def-n9",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"9"})})}),e.jsx("g",{id:"score-token-def-accidentals-sharp",className:"token",children:e.jsx("text",{x:"-0.55",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-doublesharp",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-natural",className:"token",children:e.jsx("text",{x:"-0.3",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-flat",className:"token",children:e.jsx("text",{x:"-0.3",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-flatflat",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsxs("g",{id:"score-token-def-key-sharp",className:"token",children:[e.jsx("text",{x:"-0.55",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsxs("g",{id:"score-token-def-key-natural",className:"token",children:[e.jsx("text",{x:"-0.3",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsxs("g",{id:"score-token-def-key-flat",className:"token",children:[e.jsx("text",{x:"-0.3",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsx("g",{id:"score-token-def-noteheads-s0",className:"token",children:e.jsx("text",{x:"-0.913",children:""})}),e.jsx("g",{id:"score-token-def-noteheads-s1",className:"token",children:e.jsx("text",{x:"-0.632",children:""})}),e.jsx("g",{id:"score-token-def-noteheads-s2",className:"token",children:e.jsx("text",{x:"-0.599",children:""})}),e.jsxs("g",{id:"score-token-def-noteheads-s1-u",className:"token",children:[e.jsx("text",{x:"-1.264",children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"-0.06",y2:"-3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s2-u",className:"token",children:[e.jsx("text",{x:"-1.198",children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"-0.06",y2:"-3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s1-d",className:"token",children:[e.jsx("text",{children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"0.16",y2:"3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s2-d",className:"token",children:[e.jsx("text",{children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"0.16",y2:"3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsx("g",{id:"score-token-def-rests-M1",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-0",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-0o",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-1o",className:"token",children:e.jsx("text",{x:"-0.75",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-rests-2",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-3",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-4",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-5",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-6",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-flags-u3",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u4",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u5",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u6",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u7",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u8",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-slur-begin",className:"token",children:e.jsx("path",{d:"M0 0C0.5 -0.5 1 -0.6 1.5 -0.6L1.5 -0.4C1 -0.4 0.5 -0.4 0 0z"})}),e.jsx("g",{id:"score-token-def-slur-end",className:"token",children:e.jsx("path",{d:"M0 0C-0.5 -0.5 -1 -0.6 -1.5 -0.6L-1.5 -0.4C-1 -0.4 -0.5 -0.4 0 0z"})}),e.jsxs("g",{id:"score-token-def-volta-left",className:"token",children:[e.jsx("text",{x:"-0.25",y:"-0.5",children:""}),e.jsx("text",{x:"-0.25",y:"0.5",children:""}),e.jsx("line",{x1:"-0.5",x2:"-0.5",y1:"-2",y2:"2"})]}),e.jsxs("g",{id:"score-token-def-volta-right",className:"token",children:[e.jsx("text",{x:"-0.25",y:"-0.5",children:""}),e.jsx("text",{x:"-0.25",y:"0.5",children:""}),e.jsx("line",{x1:"0.5",x2:"0.5",y1:"-2",y2:"2"})]}),e.jsxs("g",{id:"score-token-def-bar-terminal",className:"token",children:[e.jsx("rect",{x:"-0.064",y:"-2",width:"0.128",height:"4"}),e.jsx("rect",{x:"0.27",y:"-2",width:"0.4",height:"4"})]}),e.jsxs("g",{id:"score-token-def-bar-segment",className:"token",children:[e.jsx("rect",{x:"-0.359",y:"-2",width:"0.128",height:"4"}),e.jsx("rect",{x:"0.231",y:"-2",width:"0.128",height:"4"})]}),e.jsx("g",{id:"score-token-def-dot",className:"token",children:e.jsx("text",{children:""})}),e.jsxs("g",{id:"score-token-def-dotdot",className:"token",children:[e.jsx("text",{children:""}),e.jsx("text",{x:"0.8",children:""})]}),e.jsx("g",{id:"score-token-def-f",className:"token",children:e.jsx("text",{x:"-0.6",y:"0.5",children:"f"})}),e.jsx("g",{id:"score-token-def-m",className:"token",children:e.jsx("text",{x:"-0.9",y:"0.5",children:"m"})}),e.jsx("g",{id:"score-token-def-n",className:"token",children:e.jsx("text",{x:"-0.9",y:"0.5",children:"n"})}),e.jsx("g",{id:"score-token-def-p",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"p"})}),e.jsx("g",{id:"score-token-def-r",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"r"})}),e.jsx("g",{id:"score-token-def-s",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"s"})}),e.jsx("g",{id:"score-token-def-z",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"z"})}),e.jsx("g",{id:"score-token-def-scripts-ufermata",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-ushortfermata",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-sforzato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-staccato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-ustaccatissimo",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-turn",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-trill",className:"token",children:e.jsx("text",{y:"0.5",children:""})}),e.jsx("g",{id:"score-token-def-scripts-segno",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-coda",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-arpeggio",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:""})}),e.jsx("g",{id:"score-token-def-scripts-prall",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-mordent",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-umarcato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-tenuto",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-uportato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-pedal-star",className:"token",children:e.jsx("text",{x:"-0.78",y:"0.78",children:""})}),e.jsx("g",{id:"score-token-def-pedal-Ped",className:"token",children:e.jsx("text",{x:"-1.6",y:"0.7",children:""})}),e.jsx("g",{id:"score-token-def-BOS",className:"token",children:e.jsx("text",{x:"-3",y:"1.04",children:"▶"})}),e.jsx("g",{id:"score-token-def-BeamLeft",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"├"})}),e.jsx("g",{id:"score-token-def-BeamContinue",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"┼"})}),e.jsx("g",{id:"score-token-def-BeamRight",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"┤"})}),e.jsx("g",{id:"score-token-def-GraceNotehead",className:"token",children:e.jsx("text",{x:"-0.36",className:"s-grace",children:""})})]}),n=s.memo(t);export{n as S}; diff --git a/dist/assets/index-4e3b1371.js b/dist/assets/index-782123f7.js similarity index 89% rename from dist/assets/index-4e3b1371.js rename to dist/assets/index-782123f7.js index 7e2a8dfe1437f6eae649d6b61254f7f372e7719a..bf2ee799f60328b82f9499663f0bedc4ddf93192 100644 --- a/dist/assets/index-4e3b1371.js +++ b/dist/assets/index-782123f7.js @@ -1 +1 @@ -import{r as h,u as te,j as s,h as L}from"./umi-91f9d113.js";import{q,L as se}from"./index-3fb79805.js";import{S as ae}from"./ScoreEncoder-96e90be0.js";import{c as X,d as $,r as ne,A as ie}from"./confirm-34976587.js";import{r as H,s as U}from"./index-4514925e.js";import{A as E,B as oe,u as Z,r as _,x as D}from"./index-b284aaac.js";import{p as P}from"./processCompressedAESFile-0057a8e1.js";import{M as re,P as ce}from"./Table-571fc4c0.js";import{i as le,a as I,L as de,I as me}from"./util-b514be53.js";import{B as S}from"./button-909b3565.js";import{A as ue,f as W,m as x,L as pe}from"./_setToString-397d22bb.js";import{u as ge,a as R,R as fe}from"./useDebounce-e1e8dc3b.js";import{S as T}from"./TextArea-3bdaceca.js";import{d as C}from"./download-e05f9890.js";import{J as K}from"./jszip.min-21813277.js";import{u as he}from"./useAsyncFn-4bca5482.js";import{u as ye}from"./useAsync-ce2d9ddd.js";import{E as xe}from"./Dropdown-d5fff39b.js";import{D as M}from"./DownloadOutlined-f081b8de.js";import"./parser-f1e7dbfb.js";import"./index-f8b1789b.js";import"./progress-f968a1fe.js";import"./index-81cb47f8.js";import"./index-dc40c6e7.js";import"./index-37861f16.js";import"./DeleteOutlined-0f1ef15a.js";var we={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h360c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H184V184h656v320c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V144c0-17.7-14.3-32-32-32zM653.3 599.4l52.2-52.2a8.01 8.01 0 00-4.7-13.6l-179.4-21c-5.1-.6-9.5 3.7-8.9 8.9l21 179.4c.8 6.6 8.9 9.4 13.6 4.7l52.4-52.4 256.2 256.2c3.1 3.1 8.2 3.1 11.3 0l42.4-42.4c3.1-3.1 3.1-8.2 0-11.3L653.3 599.4z"}}]},name:"select",theme:"outlined"};const Se=we;var je=function(l,d){return h.createElement(ue,W(W({},l),{},{ref:d,icon:Se}))},ve=h.forwardRef(je);const _e=ve;var Me=function(a){a===void 0&&(a={});var l=h.useState(a),d=l[0],n=l[1],f=h.useMemo(function(){return{set:function(o,m){n(function(j){var p;return E(E({},j),(p={},p[o]=m,p))})},setAll:function(o){n(o)},remove:function(o){n(function(m){var j=m,p=o;j[p];var v=oe(j,[typeof p=="symbol"?p:p+""]);return v})},reset:function(){return n(a)}}},[n]),y=E({get:h.useCallback(function(o){return d[o]},[d])},f);return[d,y]};const Ie=Me;var be=function(a,l,d){if(!le)return[l,function(){}];var n=h.useState(function(){try{var o=sessionStorage.getItem(a);return typeof o!="string"?(sessionStorage.setItem(a,d?String(l):JSON.stringify(l)),l):d?o:JSON.parse(o||"null")}catch{return l}}),f=n[0],y=n[1];return h.useEffect(function(){try{var o=d?String(f):JSON.stringify(f);sessionStorage.setItem(a,o)}catch{}}),[f,y]};const $e=be;const Ce="_title_jd9ry_1",Oe="_header_jd9ry_4",ze="_logo_jd9ry_14",ke="_imageFastPreview_jd9ry_18",Le="_list_jd9ry_53",G={title:Ce,header:Oe,logo:ze,imageFastPreview:ke,"site-tag-plus":"_site-tag-plus_jd9ry_34","ant-table-row":"_ant-table-row_jd9ry_38","ant-tag":"_ant-tag_jd9ry_44",delete:"_delete_jd9ry_47","score-tags":"_score-tags_jd9ry_50",list:Le},Ee={recognized:"#1890ff",completed:"green",manual:"red",recognizing:"orange"},Re=({id:a,env:l})=>{var y;const d=Z(),n=ye(async()=>_(`/torch/musicSet/manage/${a}`,{params:{env:l}}),[]),f=async(o,m)=>{const j=await P(o),p=new Blob([j],{type:"application/json"}),v=D(p,`${m}-id_${a}-${Date.now()}.json`);C(v,`${m}-id_${a}-${Date.now()}.json`,v.type)};return n.loading?null:s.jsxs("div",{children:[n.value.preview?s.jsxs(T,{children:[s.jsx(S,{onClick:()=>f(n.value.preview,"preject"),icon:s.jsx(M,{}),children:"Starry Score"}),s.jsx(S,{onClick:()=>f(n.value.content,"score_json"),icon:s.jsx(M,{}),children:"Find Score"}),s.jsx(S,{onClick:()=>f(n.value.midi,"score_midi"),icon:s.jsx(M,{}),children:"Find MIDI"})]}):s.jsx("div",{children:d.formatMessage({id:"admin.noFiles"})}),n.value?s.jsx("div",{style:{width:"100%"},children:(y=n.value.sources)==null?void 0:y.map(o=>s.jsx("img",{src:o.url,style:{width:"100%"}},o.url))}):null]})};function rt(){var F,J;const a=Z(),l=h.useRef(),d=h.useRef(null),[n,f]=$e("admin-env","prod"),[y,o]=Ie(),[m,j]=h.useState([]),p=h.useRef({}),v=te(),u=h.useMemo(()=>{try{const t=q.parse(v.search),e=JSON.parse(decodeURIComponent(t.search))||{};return Y(e)}catch{return{}}},[v.search]),[O,A]=he(async()=>{try{const t=await _("/torch/musicSet/manage",{params:{limit:50,offset:0,...u,env:n}});return{data:t.rows,success:!0,total:t.count}}catch(t){console.error(t)}return{data:void 0,success:!1}},[u,n]);ge(()=>{A()},1e3,[u,n]);const z=(t,e)=>{L.push({pathname:"/playground",search:q.stringify({type:"admin",edit:e?"1":"0",env:n,id:t})})},B=(t,e,i,r=1e3)=>{if(!t.spartito||!t.spartito.regulated)return x.loading({content:a.formatMessage({id:"admin.regulation"},{title:i,pct:0}),key:e}),ne(t,{policy:"equations",quota:r,solutionStore:new ie,onProgress:c=>{x.loading({content:a.formatMessage({id:"admin.regulation"},{title:i,pct:c}),key:e}),c===100&&x.destroy(e)}})},N=async t=>{o.set(t.id,!0);const e=await _(`/torch/musicSet/manage/${t.id}`,{params:{env:n}}),i=await P(e.preview),r=H(i,U);await B(r,t.id,t.name);const c=new ae({score:r,...r.makeMusicSheet(),workTitle:t.name}).toString();return o.set(t.id,!1),c},Q=async t=>{o.set(t.id,!0);const e=await _(`/torch/musicSet/manage/${t.id}`,{params:{env:n}}),i=await P(e.preview),r=H(i,U),c=_.get("/torch/musicSet/manage/issueMeasure",{params:{env:n,offset:0,limit:1e3,status:[-1],scoreId:t.id}});await B(r,t.id,t.name,100),(await c).rows.forEach(b=>{if(b.status<0){const k=r.spartito.measures.find(ee=>ee.measureIndex===b.measureIndex);k&&(k.events=[],k.voices=[])}}),r.spartito.measures.forEach(b=>r.assignBackgroundForMeasure(b));const w=JSON.stringify(r.spartito);return o.set(t.id,!1),w},V=[{title:"#",render:(t,e,i)=>i,hideInSearch:!0},{title:a.formatMessage({id:"admin.column.name"}),dataIndex:"name",sorter:!0,initialValue:u.search,sortOrder:u.sortedBy==="name"&&u.sortedType?{asc:"ascend",desc:"descend"}[u.sortedType]:null,render:(t,e,i)=>s.jsx("a",{onClick:async()=>{if(x.loading({content:a.formatMessage({id:"common.loadingDetail"}),key:e.id,duration:0}),!(await _(`/torch/musicSet/manage/${e.id}`,{params:{...u,env:n}})).preview){x.destroy(),x.warn(a.formatMessage({id:"common.noPreviewContent"}));return}z(e.id,!1),x.destroy()},children:e.name||s.jsx("span",{style:{color:"#999999"},children:a.formatMessage({id:"common.untitled"})})})},{title:a.formatMessage({id:"admin.column.status"}),dataIndex:"status",valueEnum:{waitUpload:"waitUpload",upload:"upload",recognizing:"recognizing",recognized:"recognized",manual:"manual",completed:"completed",completing:"completing",systemError:"systemError",queue:"queue"},render:(t,e)=>s.jsx("span",{style:{color:Ee[e.status]},children:e.status})},{title:a.formatMessage({id:"admin.column.pages"}),render:(t,e)=>{var i;return(i=e.sources)==null?void 0:i.length},width:"4em",align:"center",hideInSearch:!0},{title:a.formatMessage({id:"admin.column.createTime"}),width:"12em",dataIndex:"createTime",sorter:!0,hideInSearch:!0},{title:"id",render:(t,e,i)=>e.id},{title:"userId",dataIndex:"userId",render:(t,e,i)=>e.userId},{title:a.formatMessage({id:"admin.column.quality"}),dataIndex:"quality",render:(t,e)=>Number.isFinite(e.quality)?`${(e.quality*100).toFixed(1)}%`:"N/A"},{title:a.formatMessage({id:"admin.column.actions"}),width:"8em",hideInSearch:!0,render:(t,e,i)=>[s.jsx(re,{trigger:s.jsx(S,{className:"download",type:"link",icon:s.jsx(_e,{})}),children:s.jsx(Re,{id:e.id,env:n})},1),s.jsx(S,{className:"download",type:"link",icon:s.jsx(xe,{}),onClick:async()=>{if(x.loading({content:a.formatMessage({id:"common.loadingDetail"}),key:e.id,duration:0}),!(await _(`/torch/musicSet/manage/${e.id}`,{params:{...u,env:n}})).preview){x.destroy(),x.warn(a.formatMessage({id:"common.noPreviewContent"}));return}z(e.id,!0),x.destroy()}},2),s.jsx(S,{disabled:e.status!=="recognized",icon:y[e.id]?s.jsx(pe,{}):s.jsx(M,{}),onClick:async r=>{if(!await new Promise(w=>{X($.withWarn($.withConfirm({title:a.formatMessage({id:"admin.musicXmlExport.title"}),content:a.formatMessage({id:"admin.musicXmlExport.confirm"}),okText:a.formatMessage({id:"common.confirm"}),cancelText:a.formatMessage({id:"common.cancel"}),onOk:()=>w(!0),onCancel:()=>w(!1)})))}))return;const g=await N(e);C(g,`${e.name}-id_${e.id}-${Date.now()}.xml`,"application/xml")}},3)]}];return s.jsxs(I,{children:[s.jsx(I.Header,{className:G.header,children:s.jsxs(T,{children:[s.jsx(de,{className:G.logo,to:"/",children:"STARRY✨"}),s.jsx(se,{})]})}),s.jsx(I,{style:{minHeight:"100vh"},children:s.jsxs(I.Content,{style:{padding:"0 50px 50px",marginTop:"66px",width:"unset"},children:[s.jsx("div",{style:{width:"100%",display:"flex",justifyContent:"center",margin:"10px 0"},children:s.jsxs(T,{size:60,children:[s.jsxs(R.Group,{defaultValue:n,buttonStyle:"solid",onChange:t=>{f(t.target.value),l.current.clearSelected()},children:[s.jsx(R.Button,{value:"prod",children:a.formatMessage({id:"admin.env.prod"})}),s.jsx(R.Button,{value:"test",children:a.formatMessage({id:"admin.env.test"})})]}),s.jsx(S,{icon:s.jsx(fe,{}),onClick:A}),s.jsx(me,{type:"number",step:1,min:256,style:{width:"8em"},placeholder:"ScoreID to go",onKeyDown:t=>{t.key==="Enter"&&z(t.target.value,!0)}})]})}),s.jsx(ce,{loading:O.loading,dataSource:(F=O.value)==null?void 0:F.data,style:{maxWidth:"100em",margin:"0 auto"},actionRef:l,formRef:d,columns:V,search:{filterType:"light"},size:"small",rowSelection:{onChange:(t,e)=>{j(e)}},pagination:{total:(J=O.value)==null?void 0:J.total,pageSize:50,current:+u.offset/+u.limit+1||1},onChange:(t,e,i,r)=>{var w;const c={ascend:"asc",descend:"desc"}[i.order],g={...u,offset:(t.current-1)*t.pageSize,limit:t.pageSize,tagIdList:e.tagIdList,search:u.search};i.order?(g.sortedBy=i.field,g.sortedType=c):(g.sortedBy=null,g.sortedType=null),((w=e.tagIdList)==null?void 0:w.length)>0?g.tagIdList=e.tagIdList:g.tagIdList=null,console.log("onChange"),L.push({search:`search=${encodeURIComponent(JSON.stringify(Y(g)))}`})},onSubmit:t=>{const e={...Object.fromEntries(Object.entries(u).filter(([i,r])=>!p.current[i])),...t};p.current=t,L.push({search:Object.values(e).filter(Boolean).length>0?`search=${encodeURIComponent(JSON.stringify(e))}`:""})},rowKey:"id",toolBarRender:()=>[s.jsx(S,{disabled:m.length===0,type:"primary",icon:s.jsx(M,{}),onClick:async()=>{if(!await new Promise(c=>{X($.withWarn($.withConfirm({title:a.formatMessage({id:"admin.musicXmlExport.title"}),content:(()=>{const g=m.filter(w=>w.status!=="recognized").length;return a.formatMessage({id:"admin.musicXmlExport.batchConfirm"},{count:m.length,skipped:g>0?a.formatMessage({id:"admin.musicXmlExport.skipped"},{count:g}):""})})(),okText:a.formatMessage({id:"common.confirm"}),cancelText:a.formatMessage({id:"common.cancel"}),onOk:()=>c(!0),onCancel:()=>c(!1)})))}))return;const e=new K;await Promise.all(m.filter(c=>c.status==="recognized").map(async c=>{e.file(`${c.name}-id_${c.id}-${Date.now()}.xml`,await N(c))}));const i=await e.generateAsync({type:"blob"}),r=D(i,`find-omr-pkg-${Date.now()}.zip`);C(r,r.name,r.type)},children:a.formatMessage({id:"admin.batchDownload.musicXml"})},"1"),s.jsx(S,{disabled:m.length===0,type:"primary",icon:s.jsx(M,{}),onClick:async()=>{const t=new K;await Promise.all(m.filter(r=>r.status==="recognized").map(async r=>Promise.race([t.file(`${r.id}.${r.name}-${Date.now()}.spartito.json`,await Q(r)),new Promise(c=>setTimeout(c,3e5))])));const e=await t.generateAsync({type:"blob"}),i=D(e,`StarrySpartito-${Date.now()}.zip`);C(i,i.name,i.type)},children:a.formatMessage({id:"admin.batchDownload.spartito"})},"2")]})]})}),s.jsx(I.Footer,{style:{textAlign:"center"},children:a.formatMessage({id:"common.footer"})})]})}function Y(a){return Object.entries(a).reduce((l,[d,n])=>{var y,o;return(d==="tagIdList"&&((o=(y=n==null?void 0:n.filter)==null?void 0:y.call(n,m=>/^\d+$/.test(String(n))))==null?void 0:o.length)>0||n)&&(l[d]=n),l},{})}export{rt as default}; +import{r as h,u as te,j as s,h as L}from"./umi-37873494.js";import{q,L as se}from"./index-54683183.js";import{S as ae}from"./ScoreEncoder-15dcb3c3.js";import{c as X,d as $,r as ne,A as ie}from"./confirm-19f7e7d5.js";import{r as H,s as U}from"./index-a475ddbb.js";import{A as E,B as oe,u as Z,r as _,x as D}from"./index-92da7081.js";import{p as P}from"./processCompressedAESFile-983b93dd.js";import{M as re,P as ce}from"./Table-2396b2d2.js";import{i as le,a as I,L as de,I as me}from"./util-2d38567b.js";import{B as S}from"./button-1ef38c18.js";import{A as ue,f as W,m as x,L as pe}from"./_setToString-dbbee35a.js";import{u as ge,a as R,R as fe}from"./useDebounce-2fd3a0bc.js";import{S as T}from"./TextArea-27ba039d.js";import{d as C}from"./download-5fc3c841.js";import{J as K}from"./jszip.min-ed3d3f78.js";import{u as he}from"./useAsyncFn-ffd323fd.js";import{u as ye}from"./useAsync-6c98bbac.js";import{E as xe}from"./Dropdown-ba03bf54.js";import{D as M}from"./DownloadOutlined-80f8a347.js";import"./parser-c740d6a8.js";import"./index-da399111.js";import"./progress-096a2c96.js";import"./index-cc0634fc.js";import"./index-2899652d.js";import"./index-abb14cca.js";import"./DeleteOutlined-a45fceaa.js";var we={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h360c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H184V184h656v320c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V144c0-17.7-14.3-32-32-32zM653.3 599.4l52.2-52.2a8.01 8.01 0 00-4.7-13.6l-179.4-21c-5.1-.6-9.5 3.7-8.9 8.9l21 179.4c.8 6.6 8.9 9.4 13.6 4.7l52.4-52.4 256.2 256.2c3.1 3.1 8.2 3.1 11.3 0l42.4-42.4c3.1-3.1 3.1-8.2 0-11.3L653.3 599.4z"}}]},name:"select",theme:"outlined"};const Se=we;var je=function(l,d){return h.createElement(ue,W(W({},l),{},{ref:d,icon:Se}))},ve=h.forwardRef(je);const _e=ve;var Me=function(a){a===void 0&&(a={});var l=h.useState(a),d=l[0],n=l[1],f=h.useMemo(function(){return{set:function(o,m){n(function(j){var p;return E(E({},j),(p={},p[o]=m,p))})},setAll:function(o){n(o)},remove:function(o){n(function(m){var j=m,p=o;j[p];var v=oe(j,[typeof p=="symbol"?p:p+""]);return v})},reset:function(){return n(a)}}},[n]),y=E({get:h.useCallback(function(o){return d[o]},[d])},f);return[d,y]};const Ie=Me;var be=function(a,l,d){if(!le)return[l,function(){}];var n=h.useState(function(){try{var o=sessionStorage.getItem(a);return typeof o!="string"?(sessionStorage.setItem(a,d?String(l):JSON.stringify(l)),l):d?o:JSON.parse(o||"null")}catch{return l}}),f=n[0],y=n[1];return h.useEffect(function(){try{var o=d?String(f):JSON.stringify(f);sessionStorage.setItem(a,o)}catch{}}),[f,y]};const $e=be;const Ce="_title_jd9ry_1",Oe="_header_jd9ry_4",ze="_logo_jd9ry_14",ke="_imageFastPreview_jd9ry_18",Le="_list_jd9ry_53",G={title:Ce,header:Oe,logo:ze,imageFastPreview:ke,"site-tag-plus":"_site-tag-plus_jd9ry_34","ant-table-row":"_ant-table-row_jd9ry_38","ant-tag":"_ant-tag_jd9ry_44",delete:"_delete_jd9ry_47","score-tags":"_score-tags_jd9ry_50",list:Le},Ee={recognized:"#1890ff",completed:"green",manual:"red",recognizing:"orange"},Re=({id:a,env:l})=>{var y;const d=Z(),n=ye(async()=>_(`/torch/musicSet/manage/${a}`,{params:{env:l}}),[]),f=async(o,m)=>{const j=await P(o),p=new Blob([j],{type:"application/json"}),v=D(p,`${m}-id_${a}-${Date.now()}.json`);C(v,`${m}-id_${a}-${Date.now()}.json`,v.type)};return n.loading?null:s.jsxs("div",{children:[n.value.preview?s.jsxs(T,{children:[s.jsx(S,{onClick:()=>f(n.value.preview,"preject"),icon:s.jsx(M,{}),children:"Starry Score"}),s.jsx(S,{onClick:()=>f(n.value.content,"score_json"),icon:s.jsx(M,{}),children:"Find Score"}),s.jsx(S,{onClick:()=>f(n.value.midi,"score_midi"),icon:s.jsx(M,{}),children:"Find MIDI"})]}):s.jsx("div",{children:d.formatMessage({id:"admin.noFiles"})}),n.value?s.jsx("div",{style:{width:"100%"},children:(y=n.value.sources)==null?void 0:y.map(o=>s.jsx("img",{src:o.url,style:{width:"100%"}},o.url))}):null]})};function rt(){var F,J;const a=Z(),l=h.useRef(),d=h.useRef(null),[n,f]=$e("admin-env","prod"),[y,o]=Ie(),[m,j]=h.useState([]),p=h.useRef({}),v=te(),u=h.useMemo(()=>{try{const t=q.parse(v.search),e=JSON.parse(decodeURIComponent(t.search))||{};return Y(e)}catch{return{}}},[v.search]),[O,A]=he(async()=>{try{const t=await _("/torch/musicSet/manage",{params:{limit:50,offset:0,...u,env:n}});return{data:t.rows,success:!0,total:t.count}}catch(t){console.error(t)}return{data:void 0,success:!1}},[u,n]);ge(()=>{A()},1e3,[u,n]);const z=(t,e)=>{L.push({pathname:"/playground",search:q.stringify({type:"admin",edit:e?"1":"0",env:n,id:t})})},B=(t,e,i,r=1e3)=>{if(!t.spartito||!t.spartito.regulated)return x.loading({content:a.formatMessage({id:"admin.regulation"},{title:i,pct:0}),key:e}),ne(t,{policy:"equations",quota:r,solutionStore:new ie,onProgress:c=>{x.loading({content:a.formatMessage({id:"admin.regulation"},{title:i,pct:c}),key:e}),c===100&&x.destroy(e)}})},N=async t=>{o.set(t.id,!0);const e=await _(`/torch/musicSet/manage/${t.id}`,{params:{env:n}}),i=await P(e.preview),r=H(i,U);await B(r,t.id,t.name);const c=new ae({score:r,...r.makeMusicSheet(),workTitle:t.name}).toString();return o.set(t.id,!1),c},Q=async t=>{o.set(t.id,!0);const e=await _(`/torch/musicSet/manage/${t.id}`,{params:{env:n}}),i=await P(e.preview),r=H(i,U),c=_.get("/torch/musicSet/manage/issueMeasure",{params:{env:n,offset:0,limit:1e3,status:[-1],scoreId:t.id}});await B(r,t.id,t.name,100),(await c).rows.forEach(b=>{if(b.status<0){const k=r.spartito.measures.find(ee=>ee.measureIndex===b.measureIndex);k&&(k.events=[],k.voices=[])}}),r.spartito.measures.forEach(b=>r.assignBackgroundForMeasure(b));const w=JSON.stringify(r.spartito);return o.set(t.id,!1),w},V=[{title:"#",render:(t,e,i)=>i,hideInSearch:!0},{title:a.formatMessage({id:"admin.column.name"}),dataIndex:"name",sorter:!0,initialValue:u.search,sortOrder:u.sortedBy==="name"&&u.sortedType?{asc:"ascend",desc:"descend"}[u.sortedType]:null,render:(t,e,i)=>s.jsx("a",{onClick:async()=>{if(x.loading({content:a.formatMessage({id:"common.loadingDetail"}),key:e.id,duration:0}),!(await _(`/torch/musicSet/manage/${e.id}`,{params:{...u,env:n}})).preview){x.destroy(),x.warn(a.formatMessage({id:"common.noPreviewContent"}));return}z(e.id,!1),x.destroy()},children:e.name||s.jsx("span",{style:{color:"#999999"},children:a.formatMessage({id:"common.untitled"})})})},{title:a.formatMessage({id:"admin.column.status"}),dataIndex:"status",valueEnum:{waitUpload:"waitUpload",upload:"upload",recognizing:"recognizing",recognized:"recognized",manual:"manual",completed:"completed",completing:"completing",systemError:"systemError",queue:"queue"},render:(t,e)=>s.jsx("span",{style:{color:Ee[e.status]},children:e.status})},{title:a.formatMessage({id:"admin.column.pages"}),render:(t,e)=>{var i;return(i=e.sources)==null?void 0:i.length},width:"4em",align:"center",hideInSearch:!0},{title:a.formatMessage({id:"admin.column.createTime"}),width:"12em",dataIndex:"createTime",sorter:!0,hideInSearch:!0},{title:"id",render:(t,e,i)=>e.id},{title:"userId",dataIndex:"userId",render:(t,e,i)=>e.userId},{title:a.formatMessage({id:"admin.column.quality"}),dataIndex:"quality",render:(t,e)=>Number.isFinite(e.quality)?`${(e.quality*100).toFixed(1)}%`:"N/A"},{title:a.formatMessage({id:"admin.column.actions"}),width:"8em",hideInSearch:!0,render:(t,e,i)=>[s.jsx(re,{trigger:s.jsx(S,{className:"download",type:"link",icon:s.jsx(_e,{})}),children:s.jsx(Re,{id:e.id,env:n})},1),s.jsx(S,{className:"download",type:"link",icon:s.jsx(xe,{}),onClick:async()=>{if(x.loading({content:a.formatMessage({id:"common.loadingDetail"}),key:e.id,duration:0}),!(await _(`/torch/musicSet/manage/${e.id}`,{params:{...u,env:n}})).preview){x.destroy(),x.warn(a.formatMessage({id:"common.noPreviewContent"}));return}z(e.id,!0),x.destroy()}},2),s.jsx(S,{disabled:e.status!=="recognized",icon:y[e.id]?s.jsx(pe,{}):s.jsx(M,{}),onClick:async r=>{if(!await new Promise(w=>{X($.withWarn($.withConfirm({title:a.formatMessage({id:"admin.musicXmlExport.title"}),content:a.formatMessage({id:"admin.musicXmlExport.confirm"}),okText:a.formatMessage({id:"common.confirm"}),cancelText:a.formatMessage({id:"common.cancel"}),onOk:()=>w(!0),onCancel:()=>w(!1)})))}))return;const g=await N(e);C(g,`${e.name}-id_${e.id}-${Date.now()}.xml`,"application/xml")}},3)]}];return s.jsxs(I,{children:[s.jsx(I.Header,{className:G.header,children:s.jsxs(T,{children:[s.jsx(de,{className:G.logo,to:"/",children:"STARRY✨"}),s.jsx(se,{})]})}),s.jsx(I,{style:{minHeight:"100vh"},children:s.jsxs(I.Content,{style:{padding:"0 50px 50px",marginTop:"66px",width:"unset"},children:[s.jsx("div",{style:{width:"100%",display:"flex",justifyContent:"center",margin:"10px 0"},children:s.jsxs(T,{size:60,children:[s.jsxs(R.Group,{defaultValue:n,buttonStyle:"solid",onChange:t=>{f(t.target.value),l.current.clearSelected()},children:[s.jsx(R.Button,{value:"prod",children:a.formatMessage({id:"admin.env.prod"})}),s.jsx(R.Button,{value:"test",children:a.formatMessage({id:"admin.env.test"})})]}),s.jsx(S,{icon:s.jsx(fe,{}),onClick:A}),s.jsx(me,{type:"number",step:1,min:256,style:{width:"8em"},placeholder:"ScoreID to go",onKeyDown:t=>{t.key==="Enter"&&z(t.target.value,!0)}})]})}),s.jsx(ce,{loading:O.loading,dataSource:(F=O.value)==null?void 0:F.data,style:{maxWidth:"100em",margin:"0 auto"},actionRef:l,formRef:d,columns:V,search:{filterType:"light"},size:"small",rowSelection:{onChange:(t,e)=>{j(e)}},pagination:{total:(J=O.value)==null?void 0:J.total,pageSize:50,current:+u.offset/+u.limit+1||1},onChange:(t,e,i,r)=>{var w;const c={ascend:"asc",descend:"desc"}[i.order],g={...u,offset:(t.current-1)*t.pageSize,limit:t.pageSize,tagIdList:e.tagIdList,search:u.search};i.order?(g.sortedBy=i.field,g.sortedType=c):(g.sortedBy=null,g.sortedType=null),((w=e.tagIdList)==null?void 0:w.length)>0?g.tagIdList=e.tagIdList:g.tagIdList=null,console.log("onChange"),L.push({search:`search=${encodeURIComponent(JSON.stringify(Y(g)))}`})},onSubmit:t=>{const e={...Object.fromEntries(Object.entries(u).filter(([i,r])=>!p.current[i])),...t};p.current=t,L.push({search:Object.values(e).filter(Boolean).length>0?`search=${encodeURIComponent(JSON.stringify(e))}`:""})},rowKey:"id",toolBarRender:()=>[s.jsx(S,{disabled:m.length===0,type:"primary",icon:s.jsx(M,{}),onClick:async()=>{if(!await new Promise(c=>{X($.withWarn($.withConfirm({title:a.formatMessage({id:"admin.musicXmlExport.title"}),content:(()=>{const g=m.filter(w=>w.status!=="recognized").length;return a.formatMessage({id:"admin.musicXmlExport.batchConfirm"},{count:m.length,skipped:g>0?a.formatMessage({id:"admin.musicXmlExport.skipped"},{count:g}):""})})(),okText:a.formatMessage({id:"common.confirm"}),cancelText:a.formatMessage({id:"common.cancel"}),onOk:()=>c(!0),onCancel:()=>c(!1)})))}))return;const e=new K;await Promise.all(m.filter(c=>c.status==="recognized").map(async c=>{e.file(`${c.name}-id_${c.id}-${Date.now()}.xml`,await N(c))}));const i=await e.generateAsync({type:"blob"}),r=D(i,`find-omr-pkg-${Date.now()}.zip`);C(r,r.name,r.type)},children:a.formatMessage({id:"admin.batchDownload.musicXml"})},"1"),s.jsx(S,{disabled:m.length===0,type:"primary",icon:s.jsx(M,{}),onClick:async()=>{const t=new K;await Promise.all(m.filter(r=>r.status==="recognized").map(async r=>Promise.race([t.file(`${r.id}.${r.name}-${Date.now()}.spartito.json`,await Q(r)),new Promise(c=>setTimeout(c,3e5))])));const e=await t.generateAsync({type:"blob"}),i=D(e,`StarrySpartito-${Date.now()}.zip`);C(i,i.name,i.type)},children:a.formatMessage({id:"admin.batchDownload.spartito"})},"2")]})]})}),s.jsx(I.Footer,{style:{textAlign:"center"},children:a.formatMessage({id:"common.footer"})})]})}function Y(a){return Object.entries(a).reduce((l,[d,n])=>{var y,o;return(d==="tagIdList"&&((o=(y=n==null?void 0:n.filter)==null?void 0:y.call(n,m=>/^\d+$/.test(String(n))))==null?void 0:o.length)>0||n)&&(l[d]=n),l},{})}export{rt as default}; diff --git a/dist/assets/index-da12207d.js b/dist/assets/index-924a53d5.js similarity index 94% rename from dist/assets/index-da12207d.js rename to dist/assets/index-924a53d5.js index 5b1918f8c16bee8047dfd4a9c5b71e7a2d0d89ad..9cccfa01a7685f9456592af9ad47c6e0bdb120e7 100644 --- a/dist/assets/index-da12207d.js +++ b/dist/assets/index-924a53d5.js @@ -1 +1 @@ -import{r as A,_ as H,g as Z,u as _,j as i,h as w}from"./umi-91f9d113.js";import{q as G,P as O,Q as q,L as V}from"./index-3fb79805.js";import{T as X,S as W,P as k}from"./Tags-2166e5ed.js";import{u as $,r as T,n as L}from"./index-b284aaac.js";import{s as ee,V as te,g as ae,I as M,P as ie}from"./Table-571fc4c0.js";import{L as R,a as S}from"./util-b514be53.js";import{w as z,_ as se,a as re,C as ne,c as Y,b as oe,o as le,d as ce,e as de,m as ge}from"./_setToString-397d22bb.js";import{u as Ae,a as me,S as ue}from"./TextArea-3bdaceca.js";import{B as J}from"./button-909b3565.js";import{u as U}from"./useAsyncFn-4bca5482.js";import{u as he}from"./useDebounce-e1e8dc3b.js";import{D as Ee}from"./DeleteOutlined-0f1ef15a.js";import"./Dropdown-d5fff39b.js";import"./index-dc40c6e7.js";import"./progress-f968a1fe.js";import"./index-f8b1789b.js";import"./index-81cb47f8.js";import"./index-37861f16.js";function fe(a){var e,o=function(l){return function(){e=null,a.apply(void 0,se(l))}},r=function(){if(e==null){for(var l=arguments.length,d=new Array(l),m=0;mC)}),n=function(){var x=e.target,C=x||v,I=C();m.current=me(I,"scroll",function(b){f(b)}),f({target:I})};A.useEffect(function(){return n(),function(){m.current&&m.current.remove(),f.cancel()}},[e.target]);var B=function(x){var C=e.onClick,I=e.target,b=e.duration,D=b===void 0?450:b;ee(0,{getContainer:I||v,duration:D}),typeof C=="function"&&C(x)},y=A.useContext(ne),p=y.getPrefixCls,N=y.direction,j=e.prefixCls,s=e.className,t=s===void 0?"":s,c=p("back-top",j),g=p(),Q=Y(c,oe({},"".concat(c,"-rtl"),N==="rtl"),t),u=le(e,["prefixCls","className","children","visibilityHeight","target","visible"]);return A.createElement("div",H({},u,{className:Q,onClick:B,ref:d}),A.createElement(Qe,{prefixCls:c,rootPrefixCls:g,visible:h},e.children))};const Be=A.memo(ve),ye=["B","kB","MB","GB","TB","PB","EB","ZB","YB"],xe=["B","kiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],Ce=["b","kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],Ie=["b","kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],K=(a,e,o)=>{let r=a;return typeof e=="string"||Array.isArray(e)?r=a.toLocaleString(e,o):(e===!0||o!==void 0)&&(r=a.toLocaleString(void 0,o)),r};var Se=(a,e)=>{if(!Number.isFinite(a))throw new TypeError(`Expected a finite number, got ${typeof a}: ${a}`);e=Object.assign({bits:!1,binary:!1},e);const o=e.bits?e.binary?Ie:Ce:e.binary?xe:ye;if(e.signed&&a===0)return` 0 ${o[0]}`;const r=a<0,h=r?"-":e.signed?"+":"";r&&(a=-a);let l;if(e.minimumFractionDigits!==void 0&&(l={minimumFractionDigits:e.minimumFractionDigits}),e.maximumFractionDigits!==void 0&&(l=Object.assign({maximumFractionDigits:e.maximumFractionDigits},l)),a<1){const f=K(a,e.locale,l);return h+f+" "+o[0]}const d=Math.min(Math.floor(e.binary?Math.log(a)/Math.log(1024):Math.log10(a)/3),o.length-1);a/=Math.pow(e.binary?1024:1e3,d),l||(a=a.toPrecision(3));const m=K(Number(a),e.locale,l),v=o[d];return h+m+" "+v};const pe=Z(Se);const Ne="_title_jd9ry_1",je="_header_jd9ry_4",be="_logo_jd9ry_14",we="_imageFastPreview_jd9ry_18",Te="_list_jd9ry_53",P={title:Ne,header:je,logo:be,imageFastPreview:we,"site-tag-plus":"_site-tag-plus_jd9ry_34","ant-table-row":"_ant-table-row_jd9ry_38","ant-tag":"_ant-tag_jd9ry_44",delete:"_delete_jd9ry_47","score-tags":"_score-tags_jd9ry_50",list:Te},Me=i.jsx("svg",{style:{width:"1.4em",height:"1.4em",margin:"0 10px"},viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg",width:"200",height:"200",children:i.jsx("path",{d:"M960 1024H64a64 64 0 0 1-64-64V64a64 64 0 0 1 64-64h896a64 64 0 0 1 64 64v896a64 64 0 0 1-64 64z m0-896a64 64 0 0 0-64-64H128a64 64 0 0 0-64 64v768a64 64 0 0 0 64 64h768a64 64 0 0 0 64-64V128z m-128 640h-128a64 64 0 0 1 0-128h64V576h-64a64 64 0 0 1 0-128h64V384h-64a64 64 0 0 1 0-128h128a64 64 0 0 1 64 64v384a64 64 0 0 1-64 64z m-320-128a64 64 0 0 1 0 128H384a64 64 0 0 1-64-64V512a64 64 0 0 1 64-64h64V384H384a64 64 0 0 1 0-128h128a64 64 0 0 1 64 64v192a64 64 0 0 1-64 64H448v64h64z m-320 128a64 64 0 0 1-64-64V320a64 64 0 0 1 128 0v384a64 64 0 0 1-64 64z"})}),Je=i.jsxs("svg",{style:{width:"1.5em",height:"1.5em",margin:"0 10px"},viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg",width:"200",height:"200",children:[i.jsx("path",{d:"M428.62 383.7l193.23-45.33v-31.94l-193.23 45.48zM374.7 656c-10.23-8.15-25.15-13.26-41.74-13.26-16.59 0-31.52 5.11-42.02 13.26-8.85 7.19-14.65 16.59-14.65 26.54 0 10.23 5.8 19.63 14.65 26.82 10.5 8.15 25.44 12.99 42.02 12.99 16.59 0 31.51-4.84 41.74-12.99 9.26-7.19 14.93-16.59 14.93-26.82 0.01-9.95-5.67-19.35-14.93-26.54zM607.2 602.65v-0.14c-10.5-8.15-25.44-13.14-42.02-13.14-16.59 0-31.51 4.98-42.02 13.14-8.85 7.05-14.65 16.59-14.65 26.68 0 9.95 5.8 19.49 14.65 26.54 10.52 8.29 25.44 13.26 42.02 13.26 16.59 0 31.52-4.97 42.02-13.26 8.85-6.78 14.38-16.32 14.65-25.99v-0.96c-0.14-9.97-5.8-19.22-14.65-26.13z",fill:"#000000"}),i.jsx("path",{d:"M512 64C264.58 64 64 264.58 64 512s200.58 448 448 448 448-200.58 448-448S759.42 64 512 64z m148.83 565.19v0.82c-0.28 22.26-11.61 42.3-29.85 56.4-17.14 13.55-40.37 21.56-65.8 21.56s-48.79-8.01-65.93-21.29c-18.39-14.51-29.72-34.69-29.72-57.49 0-22.67 11.34-42.86 29.72-57.23 17.14-13.4 40.35-21.57 65.93-21.57 21.02 0 40.64 5.68 56.67 15.34V362.27l-193.23 45.48V683.64c-0.28 22.13-11.75 42.03-29.87 56.41-17.14 13.26-40.35 21.43-65.79 21.43-25.43 0-48.79-8.17-65.8-21.43-18.51-14.65-29.99-34.69-29.99-57.51 0-22.39 11.48-42.84 29.99-57.23 17.01-13.26 40.37-21.29 65.8-21.29 21 0 40.78 5.53 56.67 15.07V333.94l0.27-0.68v-0.28l0.14-0.27V332.02l0.14-0.28 0.14-0.27v-0.55h0.13l0.14-0.7v-0.28c0.41-0.96 0.98-2.06 1.53-2.9v-0.27l0.27-0.14v-0.28l0.28-0.13 0.13-0.57 0.28-0.27 0.55-0.55v-0.55h0.28l0.13-0.28 0.28-0.27 0.27-0.14v-0.14l0.28-0.27 1.1-0.84v-0.27h0.14l0.41-0.28 0.14-0.27h0.14l0.82-0.84 0.28-0.14 0.27-0.14v-0.13l0.28-0.14 0.82-0.41v-0.14l0.69-0.41h0.14c0.84-0.42 1.66-0.7 2.63-0.98 0.82-0.55 1.78-0.82 2.9-0.82l230.83-54.32c10.23-2.35 20.18 3.6 23.23 13.26v0.28c0.82 2.07 1.1 4.15 1.1 6.49v346.11z",fill:"#000000"})]});function We(){var N,j;const a=$(),e=A.useRef(),[o,r]=A.useState(null),h=A.useRef(null),[l,d]=A.useState([]),[m,v]=U(async()=>await T.get("/api/tags"),[]),f=_(),n=A.useMemo(()=>{try{const s=G.parse(f.search),t=JSON.parse(decodeURIComponent(s.search))||{};return F(t)}catch{return{}}},[f.search]);A.useEffect(()=>{v()},[]);const[B,y]=U(async()=>{var s;try{const t=await T("/api/musicSets",{params:{total:(s=B.value)==null?void 0:s.total,limit:50,offset:0,...n}});return{data:t.rows,success:!0,total:t.count}}catch(t){console.error(t)}return{data:void 0,success:!1}},[n]);he(()=>{y()},1e3,[n]);const p=[{title:a.formatMessage({id:"home.column.preview"}),dataIndex:"content",width:54,hideInSearch:!0,render:(s,t,c)=>i.jsx(M,{width:40,height:40,preview:!1,onMouseEnter:()=>{var Q,u;const g=(u=(Q=t.content)==null?void 0:Q.images)==null?void 0:u[0];r(g?{...g,url:L(g.url)}:null)},onMouseLeave:()=>r(null),onClick:()=>{r(null),d(t.content.images.map(g=>L(g.url)))},style:{cursor:"pointer"},src:"data:image/png;base64,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"})},{title:a.formatMessage({id:"home.column.name"}),dataIndex:"name",sorter:!0,initialValue:n.search,sortOrder:n.sortedBy==="name"&&n.sortedType?{asc:"ascend",desc:"descend"}[n.sortedType]:null,render:(s,t,c)=>i.jsx(R,{style:{display:"flex"},to:`/${{stave:"playground",simple:"numbered"}[t.type]}/${t.id}`,children:`${t.name||a.formatMessage({id:"common.untitled"})}`})},{title:a.formatMessage({id:"home.column.type"}),dataIndex:"type",width:"6em",sorter:!0,initialValue:n.search,sortOrder:n.sortedBy==="type"&&n.sortedType?{asc:"ascend",desc:"descend"}[n.sortedType]:null,render:(s,t,c)=>({stave:Je,simple:Me})[t.type]},{title:i.jsx(X,{}),dataIndex:"tagIdList",width:"2em",valueType:"select",filters:!0,hideInSearch:!0,filteredValue:(n==null?void 0:n.tagIdList)||[],valueEnum:()=>{var s;return((s=m.value)==null?void 0:s.reduce((t,c)=>({...t,[c.id]:{text:c.name||" "}}),{}))||{}},render:(s,t,c)=>i.jsx(W,{preview:!0,id:t.id,tagList:t.tagList,onChange:g=>{console.log("tags",g),t.tagList=g}},t.id)},{title:a.formatMessage({id:"home.column.pages"}),render:(s,t)=>{var c,g;return(g=(c=t.content)==null?void 0:c.images)==null?void 0:g.length},width:"4em",align:"center",hideInSearch:!0},{title:a.formatMessage({id:"home.column.size"}),width:"6em",render:(s,t)=>{var c,g,Q;return((c=t.content)==null?void 0:c.images)&&pe((Q=(g=t.content)==null?void 0:g.images)==null?void 0:Q.reduce((u,E)=>u+((E==null?void 0:E.size)??0),0))},align:"center",hideInSearch:!0},{title:a.formatMessage({id:"home.column.lastUpdate"}),width:"12em",dataIndex:"lastUpdateAt",sorter:!0,sortOrder:n.sortedBy==="lastUpdateAt"&&n.sortedType?{asc:"ascend",desc:"descend"}[n.sortedType]:null,hideInSearch:!0},{title:a.formatMessage({id:"home.column.actions"}),width:"4em",hideInSearch:!0,render:(s,t,c)=>[(!t.tagList||!t.tagList.length)&&i.jsx(O,{title:a.formatMessage({id:"home.confirmDelete"}),okText:a.formatMessage({id:"common.confirm"}),cancelText:a.formatMessage({id:"common.cancel"}),icon:i.jsx(q,{}),onConfirm:async()=>{await T.delete(`/api/musicSets/${t.id}`)&&(ge.success(a.formatMessage({id:"home.deleteSuccess"})),await y())},children:i.jsx(J,{className:"delete",type:"link",children:i.jsx(Ee,{})})},"delete")]}];return i.jsxs(S,{children:[i.jsx(S.Header,{className:P.header,children:i.jsxs(ue,{children:[i.jsx(R,{className:P.logo,to:"/",children:"STARRY✨"}),i.jsxs(J,{onClick:()=>{w.push("/playground")},children:[i.jsx(k,{}),a.formatMessage({id:"home.createStave"})]}),i.jsxs(J,{onClick:()=>{w.push("/numbered")},children:[i.jsx(k,{}),a.formatMessage({id:"home.createNumbered"})]}),i.jsx(V,{})]})}),i.jsx(S,{style:{minHeight:"100vh"},children:i.jsx(S.Content,{style:{padding:"0 50px 50px",marginTop:"104px",width:"unset"},children:i.jsx(ie,{loading:B.loading,dataSource:(N=B.value)==null?void 0:N.data,style:{maxWidth:"100em",margin:"0 auto"},actionRef:e,formRef:h,columns:p,search:{filterType:"light"},size:"small",options:{density:!1,reload:y},pagination:{total:(j=B.value)==null?void 0:j.total,pageSize:50,current:+n.offset/+n.limit+1||1},onChange:(s,t,c,g)=>{var E;const Q={ascend:"asc",descend:"desc"}[c.order],u={...n,offset:(s.current-1)*s.pageSize,limit:s.pageSize,tagIdList:t.tagIdList,search:n.search};c.order?(u.sortedBy=c.field,u.sortedType=Q):(u.sortedBy=null,u.sortedType=null),((E=t.tagIdList)==null?void 0:E.length)>0?u.tagIdList=t.tagIdList:u.tagIdList=null,console.log("onChange"),w.push({search:`search=${encodeURIComponent(JSON.stringify(F(u)))}`})},beforeSearchSubmit:s=>{const t={...n,search:s.name};console.log("beforeSearchSubmit",t),w.push({search:Object.values(t).filter(Boolean).length>0?`search=${encodeURIComponent(JSON.stringify(t))}`:""})},rowKey:"id"})})}),i.jsx(S.Footer,{style:{textAlign:"center"},children:a.formatMessage({id:"common.footer"})}),o&&i.jsx("div",{className:P.imageFastPreview,children:i.jsx("img",{src:o.url,style:{objectFit:"contain",objectPosition:"center",maxHeight:"100%",maxWidth:"100%",backgroundColor:"#ffffff",boxShadow:"0 0 10px 0px rgba(0,0,0,0.5)"},alt:""})}),i.jsx(Be,{}),i.jsx(M.PreviewGroup,{preview:{open:l.length>0,destroyOnClose:!0,onOpenChange:s=>{s||d([])}},children:l.map((s,t)=>i.jsx(M,{wrapperStyle:{fontSize:"12px"},height:40,src:s},t))})]})}function F(a){return Object.entries(a).reduce((e,[o,r])=>{var l,d;return(o==="tagIdList"&&((d=(l=r==null?void 0:r.filter)==null?void 0:l.call(r,m=>/^\d+$/.test(String(r))))==null?void 0:d.length)>0||r)&&(e[o]=r),e},{})}export{We as default}; +import{r as A,_ as H,g as Z,u as _,j as i,h as w}from"./umi-37873494.js";import{q as G,P as O,Q as q,L as V}from"./index-54683183.js";import{T as X,S as W,P as k}from"./Tags-ad5c77b1.js";import{u as $,r as T,n as L}from"./index-92da7081.js";import{s as ee,V as te,g as ae,I as M,P as ie}from"./Table-2396b2d2.js";import{L as R,a as S}from"./util-2d38567b.js";import{w as z,_ as se,a as re,C as ne,c as Y,b as oe,o as le,d as ce,e as de,m as ge}from"./_setToString-dbbee35a.js";import{u as Ae,a as me,S as ue}from"./TextArea-27ba039d.js";import{B as J}from"./button-1ef38c18.js";import{u as U}from"./useAsyncFn-ffd323fd.js";import{u as he}from"./useDebounce-2fd3a0bc.js";import{D as Ee}from"./DeleteOutlined-a45fceaa.js";import"./Dropdown-ba03bf54.js";import"./index-2899652d.js";import"./progress-096a2c96.js";import"./index-da399111.js";import"./index-cc0634fc.js";import"./index-abb14cca.js";function fe(a){var e,o=function(l){return function(){e=null,a.apply(void 0,se(l))}},r=function(){if(e==null){for(var l=arguments.length,d=new Array(l),m=0;mC)}),n=function(){var x=e.target,C=x||v,I=C();m.current=me(I,"scroll",function(b){f(b)}),f({target:I})};A.useEffect(function(){return n(),function(){m.current&&m.current.remove(),f.cancel()}},[e.target]);var B=function(x){var C=e.onClick,I=e.target,b=e.duration,D=b===void 0?450:b;ee(0,{getContainer:I||v,duration:D}),typeof C=="function"&&C(x)},y=A.useContext(ne),p=y.getPrefixCls,N=y.direction,j=e.prefixCls,s=e.className,t=s===void 0?"":s,c=p("back-top",j),g=p(),Q=Y(c,oe({},"".concat(c,"-rtl"),N==="rtl"),t),u=le(e,["prefixCls","className","children","visibilityHeight","target","visible"]);return A.createElement("div",H({},u,{className:Q,onClick:B,ref:d}),A.createElement(Qe,{prefixCls:c,rootPrefixCls:g,visible:h},e.children))};const Be=A.memo(ve),ye=["B","kB","MB","GB","TB","PB","EB","ZB","YB"],xe=["B","kiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],Ce=["b","kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],Ie=["b","kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],K=(a,e,o)=>{let r=a;return typeof e=="string"||Array.isArray(e)?r=a.toLocaleString(e,o):(e===!0||o!==void 0)&&(r=a.toLocaleString(void 0,o)),r};var Se=(a,e)=>{if(!Number.isFinite(a))throw new TypeError(`Expected a finite number, got ${typeof a}: ${a}`);e=Object.assign({bits:!1,binary:!1},e);const o=e.bits?e.binary?Ie:Ce:e.binary?xe:ye;if(e.signed&&a===0)return` 0 ${o[0]}`;const r=a<0,h=r?"-":e.signed?"+":"";r&&(a=-a);let l;if(e.minimumFractionDigits!==void 0&&(l={minimumFractionDigits:e.minimumFractionDigits}),e.maximumFractionDigits!==void 0&&(l=Object.assign({maximumFractionDigits:e.maximumFractionDigits},l)),a<1){const f=K(a,e.locale,l);return h+f+" "+o[0]}const d=Math.min(Math.floor(e.binary?Math.log(a)/Math.log(1024):Math.log10(a)/3),o.length-1);a/=Math.pow(e.binary?1024:1e3,d),l||(a=a.toPrecision(3));const m=K(Number(a),e.locale,l),v=o[d];return h+m+" "+v};const pe=Z(Se);const Ne="_title_jd9ry_1",je="_header_jd9ry_4",be="_logo_jd9ry_14",we="_imageFastPreview_jd9ry_18",Te="_list_jd9ry_53",P={title:Ne,header:je,logo:be,imageFastPreview:we,"site-tag-plus":"_site-tag-plus_jd9ry_34","ant-table-row":"_ant-table-row_jd9ry_38","ant-tag":"_ant-tag_jd9ry_44",delete:"_delete_jd9ry_47","score-tags":"_score-tags_jd9ry_50",list:Te},Me=i.jsx("svg",{style:{width:"1.4em",height:"1.4em",margin:"0 10px"},viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg",width:"200",height:"200",children:i.jsx("path",{d:"M960 1024H64a64 64 0 0 1-64-64V64a64 64 0 0 1 64-64h896a64 64 0 0 1 64 64v896a64 64 0 0 1-64 64z m0-896a64 64 0 0 0-64-64H128a64 64 0 0 0-64 64v768a64 64 0 0 0 64 64h768a64 64 0 0 0 64-64V128z m-128 640h-128a64 64 0 0 1 0-128h64V576h-64a64 64 0 0 1 0-128h64V384h-64a64 64 0 0 1 0-128h128a64 64 0 0 1 64 64v384a64 64 0 0 1-64 64z m-320-128a64 64 0 0 1 0 128H384a64 64 0 0 1-64-64V512a64 64 0 0 1 64-64h64V384H384a64 64 0 0 1 0-128h128a64 64 0 0 1 64 64v192a64 64 0 0 1-64 64H448v64h64z m-320 128a64 64 0 0 1-64-64V320a64 64 0 0 1 128 0v384a64 64 0 0 1-64 64z"})}),Je=i.jsxs("svg",{style:{width:"1.5em",height:"1.5em",margin:"0 10px"},viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg",width:"200",height:"200",children:[i.jsx("path",{d:"M428.62 383.7l193.23-45.33v-31.94l-193.23 45.48zM374.7 656c-10.23-8.15-25.15-13.26-41.74-13.26-16.59 0-31.52 5.11-42.02 13.26-8.85 7.19-14.65 16.59-14.65 26.54 0 10.23 5.8 19.63 14.65 26.82 10.5 8.15 25.44 12.99 42.02 12.99 16.59 0 31.51-4.84 41.74-12.99 9.26-7.19 14.93-16.59 14.93-26.82 0.01-9.95-5.67-19.35-14.93-26.54zM607.2 602.65v-0.14c-10.5-8.15-25.44-13.14-42.02-13.14-16.59 0-31.51 4.98-42.02 13.14-8.85 7.05-14.65 16.59-14.65 26.68 0 9.95 5.8 19.49 14.65 26.54 10.52 8.29 25.44 13.26 42.02 13.26 16.59 0 31.52-4.97 42.02-13.26 8.85-6.78 14.38-16.32 14.65-25.99v-0.96c-0.14-9.97-5.8-19.22-14.65-26.13z",fill:"#000000"}),i.jsx("path",{d:"M512 64C264.58 64 64 264.58 64 512s200.58 448 448 448 448-200.58 448-448S759.42 64 512 64z m148.83 565.19v0.82c-0.28 22.26-11.61 42.3-29.85 56.4-17.14 13.55-40.37 21.56-65.8 21.56s-48.79-8.01-65.93-21.29c-18.39-14.51-29.72-34.69-29.72-57.49 0-22.67 11.34-42.86 29.72-57.23 17.14-13.4 40.35-21.57 65.93-21.57 21.02 0 40.64 5.68 56.67 15.34V362.27l-193.23 45.48V683.64c-0.28 22.13-11.75 42.03-29.87 56.41-17.14 13.26-40.35 21.43-65.79 21.43-25.43 0-48.79-8.17-65.8-21.43-18.51-14.65-29.99-34.69-29.99-57.51 0-22.39 11.48-42.84 29.99-57.23 17.01-13.26 40.37-21.29 65.8-21.29 21 0 40.78 5.53 56.67 15.07V333.94l0.27-0.68v-0.28l0.14-0.27V332.02l0.14-0.28 0.14-0.27v-0.55h0.13l0.14-0.7v-0.28c0.41-0.96 0.98-2.06 1.53-2.9v-0.27l0.27-0.14v-0.28l0.28-0.13 0.13-0.57 0.28-0.27 0.55-0.55v-0.55h0.28l0.13-0.28 0.28-0.27 0.27-0.14v-0.14l0.28-0.27 1.1-0.84v-0.27h0.14l0.41-0.28 0.14-0.27h0.14l0.82-0.84 0.28-0.14 0.27-0.14v-0.13l0.28-0.14 0.82-0.41v-0.14l0.69-0.41h0.14c0.84-0.42 1.66-0.7 2.63-0.98 0.82-0.55 1.78-0.82 2.9-0.82l230.83-54.32c10.23-2.35 20.18 3.6 23.23 13.26v0.28c0.82 2.07 1.1 4.15 1.1 6.49v346.11z",fill:"#000000"})]});function We(){var N,j;const a=$(),e=A.useRef(),[o,r]=A.useState(null),h=A.useRef(null),[l,d]=A.useState([]),[m,v]=U(async()=>await T.get("/api/tags"),[]),f=_(),n=A.useMemo(()=>{try{const s=G.parse(f.search),t=JSON.parse(decodeURIComponent(s.search))||{};return F(t)}catch{return{}}},[f.search]);A.useEffect(()=>{v()},[]);const[B,y]=U(async()=>{var s;try{const t=await T("/api/musicSets",{params:{total:(s=B.value)==null?void 0:s.total,limit:50,offset:0,...n}});return{data:t.rows,success:!0,total:t.count}}catch(t){console.error(t)}return{data:void 0,success:!1}},[n]);he(()=>{y()},1e3,[n]);const p=[{title:a.formatMessage({id:"home.column.preview"}),dataIndex:"content",width:54,hideInSearch:!0,render:(s,t,c)=>i.jsx(M,{width:40,height:40,preview:!1,onMouseEnter:()=>{var Q,u;const g=(u=(Q=t.content)==null?void 0:Q.images)==null?void 0:u[0];r(g?{...g,url:L(g.url)}:null)},onMouseLeave:()=>r(null),onClick:()=>{r(null),d(t.content.images.map(g=>L(g.url)))},style:{cursor:"pointer"},src:"data:image/png;base64,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"})},{title:a.formatMessage({id:"home.column.name"}),dataIndex:"name",sorter:!0,initialValue:n.search,sortOrder:n.sortedBy==="name"&&n.sortedType?{asc:"ascend",desc:"descend"}[n.sortedType]:null,render:(s,t,c)=>i.jsx(R,{style:{display:"flex"},to:`/${{stave:"playground",simple:"numbered"}[t.type]}/${t.id}`,children:`${t.name||a.formatMessage({id:"common.untitled"})}`})},{title:a.formatMessage({id:"home.column.type"}),dataIndex:"type",width:"6em",sorter:!0,initialValue:n.search,sortOrder:n.sortedBy==="type"&&n.sortedType?{asc:"ascend",desc:"descend"}[n.sortedType]:null,render:(s,t,c)=>({stave:Je,simple:Me})[t.type]},{title:i.jsx(X,{}),dataIndex:"tagIdList",width:"2em",valueType:"select",filters:!0,hideInSearch:!0,filteredValue:(n==null?void 0:n.tagIdList)||[],valueEnum:()=>{var s;return((s=m.value)==null?void 0:s.reduce((t,c)=>({...t,[c.id]:{text:c.name||" "}}),{}))||{}},render:(s,t,c)=>i.jsx(W,{preview:!0,id:t.id,tagList:t.tagList,onChange:g=>{console.log("tags",g),t.tagList=g}},t.id)},{title:a.formatMessage({id:"home.column.pages"}),render:(s,t)=>{var c,g;return(g=(c=t.content)==null?void 0:c.images)==null?void 0:g.length},width:"4em",align:"center",hideInSearch:!0},{title:a.formatMessage({id:"home.column.size"}),width:"6em",render:(s,t)=>{var c,g,Q;return((c=t.content)==null?void 0:c.images)&&pe((Q=(g=t.content)==null?void 0:g.images)==null?void 0:Q.reduce((u,E)=>u+((E==null?void 0:E.size)??0),0))},align:"center",hideInSearch:!0},{title:a.formatMessage({id:"home.column.lastUpdate"}),width:"12em",dataIndex:"lastUpdateAt",sorter:!0,sortOrder:n.sortedBy==="lastUpdateAt"&&n.sortedType?{asc:"ascend",desc:"descend"}[n.sortedType]:null,hideInSearch:!0},{title:a.formatMessage({id:"home.column.actions"}),width:"4em",hideInSearch:!0,render:(s,t,c)=>[(!t.tagList||!t.tagList.length)&&i.jsx(O,{title:a.formatMessage({id:"home.confirmDelete"}),okText:a.formatMessage({id:"common.confirm"}),cancelText:a.formatMessage({id:"common.cancel"}),icon:i.jsx(q,{}),onConfirm:async()=>{await T.delete(`/api/musicSets/${t.id}`)&&(ge.success(a.formatMessage({id:"home.deleteSuccess"})),await y())},children:i.jsx(J,{className:"delete",type:"link",children:i.jsx(Ee,{})})},"delete")]}];return i.jsxs(S,{children:[i.jsx(S.Header,{className:P.header,children:i.jsxs(ue,{children:[i.jsx(R,{className:P.logo,to:"/",children:"STARRY✨"}),i.jsxs(J,{onClick:()=>{w.push("/playground")},children:[i.jsx(k,{}),a.formatMessage({id:"home.createStave"})]}),i.jsxs(J,{onClick:()=>{w.push("/numbered")},children:[i.jsx(k,{}),a.formatMessage({id:"home.createNumbered"})]}),i.jsx(V,{})]})}),i.jsx(S,{style:{minHeight:"100vh"},children:i.jsx(S.Content,{style:{padding:"0 50px 50px",marginTop:"104px",width:"unset"},children:i.jsx(ie,{loading:B.loading,dataSource:(N=B.value)==null?void 0:N.data,style:{maxWidth:"100em",margin:"0 auto"},actionRef:e,formRef:h,columns:p,search:{filterType:"light"},size:"small",options:{density:!1,reload:y},pagination:{total:(j=B.value)==null?void 0:j.total,pageSize:50,current:+n.offset/+n.limit+1||1},onChange:(s,t,c,g)=>{var E;const Q={ascend:"asc",descend:"desc"}[c.order],u={...n,offset:(s.current-1)*s.pageSize,limit:s.pageSize,tagIdList:t.tagIdList,search:n.search};c.order?(u.sortedBy=c.field,u.sortedType=Q):(u.sortedBy=null,u.sortedType=null),((E=t.tagIdList)==null?void 0:E.length)>0?u.tagIdList=t.tagIdList:u.tagIdList=null,console.log("onChange"),w.push({search:`search=${encodeURIComponent(JSON.stringify(F(u)))}`})},beforeSearchSubmit:s=>{const t={...n,search:s.name};console.log("beforeSearchSubmit",t),w.push({search:Object.values(t).filter(Boolean).length>0?`search=${encodeURIComponent(JSON.stringify(t))}`:""})},rowKey:"id"})})}),i.jsx(S.Footer,{style:{textAlign:"center"},children:a.formatMessage({id:"common.footer"})}),o&&i.jsx("div",{className:P.imageFastPreview,children:i.jsx("img",{src:o.url,style:{objectFit:"contain",objectPosition:"center",maxHeight:"100%",maxWidth:"100%",backgroundColor:"#ffffff",boxShadow:"0 0 10px 0px rgba(0,0,0,0.5)"},alt:""})}),i.jsx(Be,{}),i.jsx(M.PreviewGroup,{preview:{open:l.length>0,destroyOnClose:!0,onOpenChange:s=>{s||d([])}},children:l.map((s,t)=>i.jsx(M,{wrapperStyle:{fontSize:"12px"},height:40,src:s},t))})]})}function F(a){return Object.entries(a).reduce((e,[o,r])=>{var l,d;return(o==="tagIdList"&&((d=(l=r==null?void 0:r.filter)==null?void 0:l.call(r,m=>/^\d+$/.test(String(r))))==null?void 0:d.length)>0||r)&&(e[o]=r),e},{})}export{We as default}; diff --git a/dist/assets/index-b284aaac.js b/dist/assets/index-92da7081.js similarity index 99% rename from dist/assets/index-b284aaac.js rename to dist/assets/index-92da7081.js index 3d90c10a4ed82a2406e88f2eeb293497fb1cbc2c..81d280b4079680ecbd26d20883ffe5e942bf1a59 100644 --- a/dist/assets/index-b284aaac.js +++ b/dist/assets/index-92da7081.js @@ -1,4 +1,4 @@ -import{r as En,D as Pn,E as $n,d as xn,c as ie,g as Cr}from"./umi-91f9d113.js";function Us(){const r=En.useContext(Pn);return $n(r),r}var kr=function(){return kr=Object.assign||function(e){for(var t,n=1,o=arguments.length;n-1e3&&r<1e3||Ft.call(/e/,e))return e;var t=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof r=="number"){var n=r<0?-tt(-r):tt(r);if(n!==r){var o=String(n),a=Mr.call(e,o.length+1);return J.call(o,t,"$&_")+"."+J.call(J.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return J.call(e,t,"$&_")}var Ar=In,at=Ar.custom,it=Dt(at)?at:null,Mt={__proto__:null,double:'"',single:"'"},Ln={__proto__:null,double:/(["\\])/g,single:/(['\\])/g},We=function r(e,t,n,o){var a=t||{};if(K(a,"quoteStyle")&&!K(Mt,a.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(K(a,"maxStringLength")&&(typeof a.maxStringLength=="number"?a.maxStringLength<0&&a.maxStringLength!==1/0:a.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var f=K(a,"customInspect")?a.customInspect:!0;if(typeof f!="boolean"&&f!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(K(a,"indent")&&a.indent!==null&&a.indent!==" "&&!(parseInt(a.indent,10)===a.indent&&a.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(K(a,"numericSeparator")&&typeof a.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var p=a.numericSeparator;if(typeof e>"u")return"undefined";if(e===null)return"null";if(typeof e=="boolean")return e?"true":"false";if(typeof e=="string")return jt(e,a);if(typeof e=="number"){if(e===0)return 1/0/e>0?"0":"-0";var c=String(e);return p?ot(e,c):c}if(typeof e=="bigint"){var y=String(e)+"n";return p?ot(e,y):y}var v=typeof a.depth>"u"?5:a.depth;if(typeof n>"u"&&(n=0),n>=v&&v>0&&typeof e=="object")return _r(e)?"[Array]":"[Object]";var g=ao(a,n);if(typeof o>"u")o=[];else if(Ut(o,e)>=0)return"[Circular]";function m(B,V,z){if(V&&(o=Nn.call(o),o.push(V)),z){var ye={depth:a.depth};return K(a,"quoteStyle")&&(ye.quoteStyle=a.quoteStyle),r(B,ye,n+1,o)}return r(B,a,n+1,o)}if(typeof e=="function"&&!st(e)){var S=kn(e),b=Te(e,m);return"[Function"+(S?": "+S:" (anonymous)")+"]"+(b.length>0?" { "+L.call(b,", ")+" }":"")}if(Dt(e)){var O=ue?J.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):Or.call(e);return typeof e=="object"&&!ue?de(O):O}if(to(e)){for(var w="<"+et.call(String(e.nodeName)),h=e.attributes||[],d=0;d",w}if(_r(e)){if(e.length===0)return"[]";var i=Te(e,m);return g&&!oo(i)?"["+Er(i,g)+"]":"[ "+L.call(i,", ")+" ]"}if(Gn(e)){var s=Te(e,m);return!("cause"in Error.prototype)&&"cause"in e&&!qt.call(e,"cause")?"{ ["+String(e)+"] "+L.call(rt.call("[cause]: "+m(e.cause),s),", ")+" }":s.length===0?"["+String(e)+"]":"{ ["+String(e)+"] "+L.call(s,", ")+" }"}if(typeof e=="object"&&f){if(it&&typeof e[it]=="function"&&Ar)return Ar(e,{depth:v-n});if(f!=="symbol"&&typeof e.inspect=="function")return e.inspect()}if(Xn(e)){var l=[];return Xr&&Xr.call(e,function(B,V){l.push(m(V,e,!0)+" => "+m(B,e))}),ft("Map",De.call(e),l,g)}if(eo(e)){var u=[];return Yr&&Yr.call(e,function(B){u.push(m(B,e))}),ft("Set",Ue.call(e),u,g)}if(Yn(e))return er("WeakMap");if(ro(e))return er("WeakSet");if(Zn(e))return er("WeakRef");if(Kn(e))return de(m(Number(e)));if(Jn(e))return de(m(Sr.call(e)));if(Vn(e))return de(Mn.call(e));if(zn(e))return de(m(String(e)));if(typeof window<"u"&&e===window)return"{ [object Window] }";if(typeof globalThis<"u"&&e===globalThis||typeof ie<"u"&&e===ie)return"{ [object globalThis] }";if(!Wn(e)&&!st(e)){var _=Te(e,m),T=nt?nt(e)===Object.prototype:e instanceof Object||e.constructor===Object,E=e instanceof Object?"":"null prototype",I=!T&&be&&Object(e)===e&&be in e?Mr.call(k(e),8,-1):E?"Object":"",U=T||typeof e.constructor!="function"?"":e.constructor.name?e.constructor.name+" ":"",M=U+(I||E?"["+L.call(rt.call([],I||[],E||[]),": ")+"] ":"");return _.length===0?M+"{}":g?M+"{"+Er(_,g)+"}":M+"{ "+L.call(_,", ")+" }"}return String(e)};function Bt(r,e,t){var n=t.quoteStyle||e,o=Mt[n];return o+r+o}function Hn(r){return J.call(String(r),/"/g,""")}function te(r){return!be||!(typeof r=="object"&&(be in r||typeof r[be]<"u"))}function _r(r){return k(r)==="[object Array]"&&te(r)}function Wn(r){return k(r)==="[object Date]"&&te(r)}function st(r){return k(r)==="[object RegExp]"&&te(r)}function Gn(r){return k(r)==="[object Error]"&&te(r)}function zn(r){return k(r)==="[object String]"&&te(r)}function Kn(r){return k(r)==="[object Number]"&&te(r)}function Vn(r){return k(r)==="[object Boolean]"&&te(r)}function Dt(r){if(ue)return r&&typeof r=="object"&&r instanceof Symbol;if(typeof r=="symbol")return!0;if(!r||typeof r!="object"||!Or)return!1;try{return Or.call(r),!0}catch{}return!1}function Jn(r){if(!r||typeof r!="object"||!Sr)return!1;try{return Sr.call(r),!0}catch{}return!1}var Qn=Object.prototype.hasOwnProperty||function(r){return r in this};function K(r,e){return Qn.call(r,e)}function k(r){return Bn.call(r)}function kn(r){if(r.name)return r.name;var e=Un.call(Dn.call(r),/^function\s*([\w$]+)/);return e?e[1]:null}function Ut(r,e){if(r.indexOf)return r.indexOf(e);for(var t=0,n=r.length;te.maxStringLength){var t=r.length-e.maxStringLength,n="... "+t+" more character"+(t>1?"s":"");return jt(Mr.call(r,0,e.maxStringLength),e)+n}var o=Ln[e.quoteStyle||"single"];o.lastIndex=0;var a=J.call(J.call(r,o,"\\$1"),/[\x00-\x1f]/g,no);return Bt(a,"single",e)}function no(r){var e=r.charCodeAt(0),t={8:"b",9:"t",10:"n",12:"f",13:"r"}[e];return t?"\\"+t:"\\x"+(e<16?"0":"")+jn.call(e.toString(16))}function de(r){return"Object("+r+")"}function er(r){return r+" { ? }"}function ft(r,e,t,n){var o=n?Er(t,n):L.call(t,", ");return r+" ("+e+") {"+o+"}"}function oo(r){for(var e=0;e-1e3&&r<1e3||Ft.call(/e/,e))return e;var t=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof r=="number"){var n=r<0?-tt(-r):tt(r);if(n!==r){var o=String(n),a=Mr.call(e,o.length+1);return J.call(o,t,"$&_")+"."+J.call(J.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return J.call(e,t,"$&_")}var Ar=In,at=Ar.custom,it=Dt(at)?at:null,Mt={__proto__:null,double:'"',single:"'"},Ln={__proto__:null,double:/(["\\])/g,single:/(['\\])/g},We=function r(e,t,n,o){var a=t||{};if(K(a,"quoteStyle")&&!K(Mt,a.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(K(a,"maxStringLength")&&(typeof a.maxStringLength=="number"?a.maxStringLength<0&&a.maxStringLength!==1/0:a.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var f=K(a,"customInspect")?a.customInspect:!0;if(typeof f!="boolean"&&f!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(K(a,"indent")&&a.indent!==null&&a.indent!==" "&&!(parseInt(a.indent,10)===a.indent&&a.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(K(a,"numericSeparator")&&typeof a.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var p=a.numericSeparator;if(typeof e>"u")return"undefined";if(e===null)return"null";if(typeof e=="boolean")return e?"true":"false";if(typeof e=="string")return jt(e,a);if(typeof e=="number"){if(e===0)return 1/0/e>0?"0":"-0";var c=String(e);return p?ot(e,c):c}if(typeof e=="bigint"){var y=String(e)+"n";return p?ot(e,y):y}var v=typeof a.depth>"u"?5:a.depth;if(typeof n>"u"&&(n=0),n>=v&&v>0&&typeof e=="object")return _r(e)?"[Array]":"[Object]";var g=ao(a,n);if(typeof o>"u")o=[];else if(Ut(o,e)>=0)return"[Circular]";function m(B,V,z){if(V&&(o=Nn.call(o),o.push(V)),z){var ye={depth:a.depth};return K(a,"quoteStyle")&&(ye.quoteStyle=a.quoteStyle),r(B,ye,n+1,o)}return r(B,a,n+1,o)}if(typeof e=="function"&&!st(e)){var S=kn(e),b=Te(e,m);return"[Function"+(S?": "+S:" (anonymous)")+"]"+(b.length>0?" { "+L.call(b,", ")+" }":"")}if(Dt(e)){var O=ue?J.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):Or.call(e);return typeof e=="object"&&!ue?de(O):O}if(to(e)){for(var w="<"+et.call(String(e.nodeName)),h=e.attributes||[],d=0;d",w}if(_r(e)){if(e.length===0)return"[]";var i=Te(e,m);return g&&!oo(i)?"["+Er(i,g)+"]":"[ "+L.call(i,", ")+" ]"}if(Gn(e)){var s=Te(e,m);return!("cause"in Error.prototype)&&"cause"in e&&!qt.call(e,"cause")?"{ ["+String(e)+"] "+L.call(rt.call("[cause]: "+m(e.cause),s),", ")+" }":s.length===0?"["+String(e)+"]":"{ ["+String(e)+"] "+L.call(s,", ")+" }"}if(typeof e=="object"&&f){if(it&&typeof e[it]=="function"&&Ar)return Ar(e,{depth:v-n});if(f!=="symbol"&&typeof e.inspect=="function")return e.inspect()}if(Xn(e)){var l=[];return Xr&&Xr.call(e,function(B,V){l.push(m(V,e,!0)+" => "+m(B,e))}),ft("Map",De.call(e),l,g)}if(eo(e)){var u=[];return Yr&&Yr.call(e,function(B){u.push(m(B,e))}),ft("Set",Ue.call(e),u,g)}if(Yn(e))return er("WeakMap");if(ro(e))return er("WeakSet");if(Zn(e))return er("WeakRef");if(Kn(e))return de(m(Number(e)));if(Jn(e))return de(m(Sr.call(e)));if(Vn(e))return de(Mn.call(e));if(zn(e))return de(m(String(e)));if(typeof window<"u"&&e===window)return"{ [object Window] }";if(typeof globalThis<"u"&&e===globalThis||typeof ie<"u"&&e===ie)return"{ [object globalThis] }";if(!Wn(e)&&!st(e)){var _=Te(e,m),T=nt?nt(e)===Object.prototype:e instanceof Object||e.constructor===Object,E=e instanceof Object?"":"null prototype",I=!T&&be&&Object(e)===e&&be in e?Mr.call(k(e),8,-1):E?"Object":"",U=T||typeof e.constructor!="function"?"":e.constructor.name?e.constructor.name+" ":"",M=U+(I||E?"["+L.call(rt.call([],I||[],E||[]),": ")+"] ":"");return _.length===0?M+"{}":g?M+"{"+Er(_,g)+"}":M+"{ "+L.call(_,", ")+" }"}return String(e)};function Bt(r,e,t){var n=t.quoteStyle||e,o=Mt[n];return o+r+o}function Hn(r){return J.call(String(r),/"/g,""")}function te(r){return!be||!(typeof r=="object"&&(be in r||typeof r[be]<"u"))}function _r(r){return k(r)==="[object Array]"&&te(r)}function Wn(r){return k(r)==="[object Date]"&&te(r)}function st(r){return k(r)==="[object RegExp]"&&te(r)}function Gn(r){return k(r)==="[object Error]"&&te(r)}function zn(r){return k(r)==="[object String]"&&te(r)}function Kn(r){return k(r)==="[object Number]"&&te(r)}function Vn(r){return k(r)==="[object Boolean]"&&te(r)}function Dt(r){if(ue)return r&&typeof r=="object"&&r instanceof Symbol;if(typeof r=="symbol")return!0;if(!r||typeof r!="object"||!Or)return!1;try{return Or.call(r),!0}catch{}return!1}function Jn(r){if(!r||typeof r!="object"||!Sr)return!1;try{return Sr.call(r),!0}catch{}return!1}var Qn=Object.prototype.hasOwnProperty||function(r){return r in this};function K(r,e){return Qn.call(r,e)}function k(r){return Bn.call(r)}function kn(r){if(r.name)return r.name;var e=Un.call(Dn.call(r),/^function\s*([\w$]+)/);return e?e[1]:null}function Ut(r,e){if(r.indexOf)return r.indexOf(e);for(var t=0,n=r.length;te.maxStringLength){var t=r.length-e.maxStringLength,n="... "+t+" more character"+(t>1?"s":"");return jt(Mr.call(r,0,e.maxStringLength),e)+n}var o=Ln[e.quoteStyle||"single"];o.lastIndex=0;var a=J.call(J.call(r,o,"\\$1"),/[\x00-\x1f]/g,no);return Bt(a,"single",e)}function no(r){var e=r.charCodeAt(0),t={8:"b",9:"t",10:"n",12:"f",13:"r"}[e];return t?"\\"+t:"\\x"+(e<16?"0":"")+jn.call(e.toString(16))}function de(r){return"Object("+r+")"}function er(r){return r+" { ? }"}function ft(r,e,t,n){var o=n?Er(t,n):L.call(t,", ");return r+" ("+e+") {"+o+"}"}function oo(r){for(var e=0;e=0)return!1;return!0}function ao(r,e){var t;if(r.indent===" ")t=" ";else if(typeof r.indent=="number"&&r.indent>0)t=L.call(Array(r.indent+1)," ");else return null;return{base:t,prev:L.call(Array(e+1),t)}}function Er(r,e){if(r.length===0)return"";var t=` `+e.prev+e.base;return t+L.call(r,","+t)+` `+e.prev}function Te(r,e){var t=_r(r),n=[];if(t){n.length=r.length;for(var o=0;o"u"||!R?A:R(Uint8Array),ee={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?A:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?A:ArrayBuffer,"%ArrayIteratorPrototype%":ne&&R?R([][Symbol.iterator]()):A,"%AsyncFromSyncIteratorPrototype%":A,"%AsyncFunction%":ae,"%AsyncGenerator%":ae,"%AsyncGeneratorFunction%":ae,"%AsyncIteratorPrototype%":ae,"%Atomics%":typeof Atomics>"u"?A:Atomics,"%BigInt%":typeof BigInt>"u"?A:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?A:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?A:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?A:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Jo,"%eval%":eval,"%EvalError%":Qo,"%Float16Array%":typeof Float16Array>"u"?A:Float16Array,"%Float32Array%":typeof Float32Array>"u"?A:Float32Array,"%Float64Array%":typeof Float64Array>"u"?A:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?A:FinalizationRegistry,"%Function%":Kt,"%GeneratorFunction%":ae,"%Int8Array%":typeof Int8Array>"u"?A:Int8Array,"%Int16Array%":typeof Int16Array>"u"?A:Int16Array,"%Int32Array%":typeof Int32Array>"u"?A:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":ne&&R?R(R([][Symbol.iterator]())):A,"%JSON%":typeof JSON=="object"?JSON:A,"%Map%":typeof Map>"u"?A:Map,"%MapIteratorPrototype%":typeof Map>"u"||!ne||!R?A:R(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Vo,"%Object.getOwnPropertyDescriptor%":Ae,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?A:Promise,"%Proxy%":typeof Proxy>"u"?A:Proxy,"%RangeError%":ko,"%ReferenceError%":Xo,"%Reflect%":typeof Reflect>"u"?A:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?A:Set,"%SetIteratorPrototype%":typeof Set>"u"||!ne||!R?A:R(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?A:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":ne&&R?R(""[Symbol.iterator]()):A,"%Symbol%":ne?Symbol:A,"%SyntaxError%":le,"%ThrowTypeError%":sa,"%TypedArray%":la,"%TypeError%":fe,"%Uint8Array%":typeof Uint8Array>"u"?A:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?A:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?A:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?A:Uint32Array,"%URIError%":Yo,"%WeakMap%":typeof WeakMap>"u"?A:WeakMap,"%WeakRef%":typeof WeakRef>"u"?A:WeakRef,"%WeakSet%":typeof WeakSet>"u"?A:WeakSet,"%Function.prototype.call%":Pe,"%Function.prototype.apply%":Vt,"%Object.defineProperty%":ia,"%Object.getPrototypeOf%":fa,"%Math.abs%":Zo,"%Math.floor%":ea,"%Math.max%":ra,"%Math.min%":ta,"%Math.pow%":na,"%Math.round%":oa,"%Math.sign%":aa,"%Reflect.getPrototypeOf%":ua};if(R)try{null.error}catch(r){var ca=R(R(r));ee["%Error.prototype%"]=ca}var pa=function r(e){var t;if(e==="%AsyncFunction%")t=pr("async function () {}");else if(e==="%GeneratorFunction%")t=pr("function* () {}");else if(e==="%AsyncGeneratorFunction%")t=pr("async function* () {}");else if(e==="%AsyncGenerator%"){var n=r("%AsyncGeneratorFunction%");n&&(t=n.prototype)}else if(e==="%AsyncIteratorPrototype%"){var o=r("%AsyncGenerator%");o&&R&&(t=R(o.prototype))}return ee[e]=t,t},wt={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},$e=ze(),je=Ko(),ya=$e.call(Pe,Array.prototype.concat),da=$e.call(Vt,Array.prototype.splice),St=$e.call(Pe,String.prototype.replace),Ne=$e.call(Pe,String.prototype.slice),ha=$e.call(Pe,RegExp.prototype.exec),va=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,ma=/\\(\\)?/g,ga=function(e){var t=Ne(e,0,1),n=Ne(e,-1);if(t==="%"&&n!=="%")throw new le("invalid intrinsic syntax, expected closing `%`");if(n==="%"&&t!=="%")throw new le("invalid intrinsic syntax, expected opening `%`");var o=[];return St(e,va,function(a,f,p,c){o[o.length]=p?St(c,ma,"$1"):f||a}),o},ba=function(e,t){var n=e,o;if(je(wt,n)&&(o=wt[n],n="%"+o[0]+"%"),je(ee,n)){var a=ee[n];if(a===ae&&(a=pa(n)),typeof a>"u"&&!t)throw new fe("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:o,name:n,value:a}}throw new le("intrinsic "+e+" does not exist!")},Dr=function(e,t){if(typeof e!="string"||e.length===0)throw new fe("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof t!="boolean")throw new fe('"allowMissing" argument must be a boolean');if(ha(/^%?[^%]*%?$/,e)===null)throw new le("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=ga(e),o=n.length>0?n[0]:"",a=ba("%"+o+"%",t),f=a.name,p=a.value,c=!1,y=a.alias;y&&(o=y[0],da(n,ya([0,1],y)));for(var v=1,g=!0;v=n.length){var O=Ae(p,m);g=!!O,g&&"get"in O&&!("originalValue"in O.get)?p=O.get:p=p[m]}else g=je(p,m),p=p[m];g&&!c&&(ee[f]=p)}}return p},Jt=Dr,Qt=zt,wa=Qt([Jt("%String.prototype.indexOf%")]),kt=function(e,t){var n=Jt(e,!!t);return typeof n=="function"&&wa(e,".prototype.")>-1?Qt([n]):n},Sa=Dr,xe=kt,Oa=We,Aa=ce,Ot=Sa("%Map%",!0),_a=xe("Map.prototype.get",!0),Ea=xe("Map.prototype.set",!0),Pa=xe("Map.prototype.has",!0),$a=xe("Map.prototype.delete",!0),xa=xe("Map.prototype.size",!0),Xt=!!Ot&&function(){var e,t={assert:function(n){if(!t.has(n))throw new Aa("Side channel does not contain "+Oa(n))},delete:function(n){if(e){var o=$a(e,n);return xa(e)===0&&(e=void 0),o}return!1},get:function(n){if(e)return _a(e,n)},has:function(n){return e?Pa(e,n):!1},set:function(n,o){e||(e=new Ot),Ea(e,n,o)}};return t},Ra=Dr,Ke=kt,Ta=We,Ie=Xt,Ia=ce,oe=Ra("%WeakMap%",!0),Ca=Ke("WeakMap.prototype.get",!0),Fa=Ke("WeakMap.prototype.set",!0),qa=Ke("WeakMap.prototype.has",!0),Ma=Ke("WeakMap.prototype.delete",!0),Ba=oe?function(){var e,t,n={assert:function(o){if(!n.has(o))throw new Ia("Side channel does not contain "+Ta(o))},delete:function(o){if(oe&&o&&(typeof o=="object"||typeof o=="function")){if(e)return Ma(e,o)}else if(Ie&&t)return t.delete(o);return!1},get:function(o){return oe&&o&&(typeof o=="object"||typeof o=="function")&&e?Ca(e,o):t&&t.get(o)},has:function(o){return oe&&o&&(typeof o=="object"||typeof o=="function")&&e?qa(e,o):!!t&&t.has(o)},set:function(o,a){oe&&o&&(typeof o=="object"||typeof o=="function")?(e||(e=new oe),Fa(e,o,a)):Ie&&(t||(t=Ie()),t.set(o,a))}};return n}:Ie,Da=ce,Ua=We,ja=po,Na=Xt,La=Ba,Ha=La||Na||ja,Yt=function(){var e,t={assert:function(n){if(!t.has(n))throw new Da("Side channel does not contain "+Ua(n))},delete:function(n){return!!e&&e.delete(n)},get:function(n){return e&&e.get(n)},has:function(n){return!!e&&e.has(n)},set:function(n,o){e||(e=Ha()),e.set(n,o)}};return t},Wa=String.prototype.replace,Ga=/%20/g,dr={RFC1738:"RFC1738",RFC3986:"RFC3986"},Ur={default:dr.RFC3986,formatters:{RFC1738:function(r){return Wa.call(r,Ga,"+")},RFC3986:function(r){return String(r)}},RFC1738:dr.RFC1738,RFC3986:dr.RFC3986},za=Ur,Ka=Yt,hr=Object.prototype.hasOwnProperty,X=Array.isArray,Ve=Ka(),se=function(e,t){return Ve.set(e,t),e},Y=function(e){return Ve.has(e)},he=function(e){return Ve.get(e)},Pr=function(e,t){Ve.set(e,t)},j=function(){for(var r=[],e=0;e<256;++e)r[r.length]="%"+((e<16?"0":"")+e.toString(16)).toUpperCase();return r}(),Va=function(e){for(;e.length>1;){var t=e.pop(),n=t.obj[t.prop];if(X(n)){for(var o=[],a=0;an.arrayLimit)return se(we(e.concat(t),n),o);e[o]=t}else if(e&&typeof e=="object")if(Y(e)){var a=he(e)+1;e[a]=t,Pr(e,a)}else(n&&(n.plainObjects||n.allowPrototypes)||!hr.call(Object.prototype,t))&&(e[t]=!0);else return[e,t];return e}if(!e||typeof e!="object"){if(Y(t)){for(var f=Object.keys(t),p=n&&n.plainObjects?{__proto__:null,0:e}:{0:e},c=0;cn.arrayLimit?se(we(v,n),v.length-1):v}var g=e;return X(e)&&!X(t)&&(g=we(e,n)),X(e)&&X(t)?(t.forEach(function(m,S){if(hr.call(e,S)){var b=e[S];b&&typeof b=="object"&&m&&typeof m=="object"?e[S]=r(b,m,n):e[e.length]=m}else e[S]=m}),e):Object.keys(t).reduce(function(m,S){var b=t[S];if(hr.call(m,S)?m[S]=r(m[S],b,n):m[S]=b,Y(t)&&!Y(m)&&se(m,he(t)),Y(m)){var O=parseInt(S,10);String(O)===S&&O>=0&&O>he(m)&&Pr(m,O)}return m},g)},Qa=function(e,t){return Object.keys(t).reduce(function(n,o){return n[o]=t[o],n},e)},ka=function(r,e,t){var n=r.replace(/\+/g," ");if(t==="iso-8859-1")return n.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(n)}catch{return n}},vr=1024,Xa=function(e,t,n,o,a){if(e.length===0)return e;var f=e;if(typeof e=="symbol"?f=Symbol.prototype.toString.call(e):typeof e!="string"&&(f=String(e)),n==="iso-8859-1")return escape(f).replace(/%u[0-9a-f]{4}/gi,function(S){return"%26%23"+parseInt(S.slice(2),16)+"%3B"});for(var p="",c=0;c=vr?f.slice(c,c+vr):f,v=[],g=0;g=48&&m<=57||m>=65&&m<=90||m>=97&&m<=122||a===za.RFC1738&&(m===40||m===41)){v[v.length]=y.charAt(g);continue}if(m<128){v[v.length]=j[m];continue}if(m<2048){v[v.length]=j[192|m>>6]+j[128|m&63];continue}if(m<55296||m>=57344){v[v.length]=j[224|m>>12]+j[128|m>>6&63]+j[128|m&63];continue}g+=1,m=65536+((m&1023)<<10|y.charCodeAt(g)&1023),v[v.length]=j[240|m>>18]+j[128|m>>12&63]+j[128|m>>6&63]+j[128|m&63]}p+=v.join("")}return p},Ya=function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],o=0;on?se(we(f,{plainObjects:o}),f.length-1):f},ti=function(e,t){if(X(e)){for(var n=[],o=0;o"u"&&(l=0)}if(typeof v=="function"?i=v(t,i):i instanceof Date?i=S(i):n==="comma"&&N(i)&&(i=qe.maybeMap(i,function(ke){return ke instanceof Date?S(ke):ke})),i===null){if(f)return y&&!w?y(t,$.encoder,h,"key",b):t;i=""}if(ii(i)||qe.isBuffer(i)){if(y){var T=w?t:y(t,$.encoder,h,"key",b);return[O(T)+"="+O(y(i,$.encoder,h,"value",b))]}return[O(t)+"="+O(String(i))]}var E=[];if(typeof i>"u")return E;var I;if(n==="comma"&&N(i))w&&y&&(i=qe.maybeMap(i,y)),I=[{value:i.length>0?i.join(",")||null:void 0}];else if(N(v))I=v;else{var U=Object.keys(i);I=g?U.sort(g):U}var M=c?String(t).replace(/\./g,"%2E"):String(t),B=o&&N(i)&&i.length===1?M+"[]":M;if(a&&N(i)&&i.length===0)return B+"[]";for(var V=0;V"u"?e.encodeDotInKeys===!0?!0:$.allowDots:!!e.allowDots;return{addQueryPrefix:typeof e.addQueryPrefix=="boolean"?e.addQueryPrefix:$.addQueryPrefix,allowDots:p,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:$.allowEmptyArrays,arrayFormat:f,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:$.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:typeof e.delimiter>"u"?$.delimiter:e.delimiter,encode:typeof e.encode=="boolean"?e.encode:$.encode,encodeDotInKeys:typeof e.encodeDotInKeys=="boolean"?e.encodeDotInKeys:$.encodeDotInKeys,encoder:typeof e.encoder=="function"?e.encoder:$.encoder,encodeValuesOnly:typeof e.encodeValuesOnly=="boolean"?e.encodeValuesOnly:$.encodeValuesOnly,filter:a,format:n,formatter:o,serializeDate:typeof e.serializeDate=="function"?e.serializeDate:$.serializeDate,skipNulls:typeof e.skipNulls=="boolean"?e.skipNulls:$.skipNulls,sort:typeof e.sort=="function"?e.sort:null,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:$.strictNullHandling}},ui=function(r,e){var t=r,n=fi(e),o,a;typeof n.filter=="function"?(a=n.filter,t=a("",t)):N(n.filter)&&(a=n.filter,o=a);var f=[];if(typeof t!="object"||t===null)return"";var p=rn[n.arrayFormat],c=p==="comma"&&n.commaRoundTrip;o||(o=Object.keys(t)),n.sort&&o.sort(n.sort);for(var y=en(),v=0;v0?b+S:""},W=Zt,Me=Object.prototype.hasOwnProperty,gr=Array.isArray,P={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:W.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictNullHandling:!1,throwOnLimitExceeded:!1},li=function(r){return r.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(parseInt(t,10))})},nn=function(r,e,t){if(r&&typeof r=="string"&&e.comma&&r.indexOf(",")>-1)return r.split(",");if(e.throwOnLimitExceeded&&t>=e.arrayLimit)throw new RangeError("Array limit exceeded. Only "+e.arrayLimit+" element"+(e.arrayLimit===1?"":"s")+" allowed in an array.");return r},ci="utf8=%26%2310003%3B",pi="utf8=%E2%9C%93",yi=function(e,t){var n={__proto__:null},o=t.ignoreQueryPrefix?e.replace(/^\?/,""):e;o=o.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var a=t.parameterLimit===1/0?void 0:t.parameterLimit,f=o.split(t.delimiter,t.throwOnLimitExceeded?a+1:a);if(t.throwOnLimitExceeded&&f.length>a)throw new RangeError("Parameter limit exceeded. Only "+a+" parameter"+(a===1?"":"s")+" allowed.");var p=-1,c,y=t.charset;if(t.charsetSentinel)for(c=0;c-1&&(b=gr(b)?[b]:b),t.comma&&gr(b)&&b.length>t.arrayLimit){if(t.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+t.arrayLimit+" element"+(t.arrayLimit===1?"":"s")+" allowed in an array.");b=W.combine([],b,t.arrayLimit,t.plainObjects)}if(S!==null){var O=Me.call(n,S);O&&t.duplicates==="combine"?n[S]=W.combine(n[S],b,t.arrayLimit,t.plainObjects):(!O||t.duplicates==="last")&&(n[S]=b)}}return n},di=function(r,e,t,n){var o=0;if(r.length>0&&r[r.length-1]==="[]"){var a=r.slice(0,-1).join("");o=Array.isArray(e)&&e[a]?e[a].length:0}for(var f=n?e:nn(e,t,o),p=r.length-1;p>=0;--p){var c,y=r[p];if(y==="[]"&&t.parseArrays)W.isOverflow(f)?c=f:c=t.allowEmptyArrays&&(f===""||t.strictNullHandling&&f===null)?[]:W.combine([],f,t.arrayLimit,t.plainObjects);else{c=t.plainObjects?{__proto__:null}:{};var v=y.charAt(0)==="["&&y.charAt(y.length-1)==="]"?y.slice(1,-1):y,g=t.decodeDotInKeys?v.replace(/%2E/g,"."):v,m=parseInt(g,10),S=!isNaN(m)&&y!==g&&String(m)===g&&m>=0&&t.parseArrays;if(!t.parseArrays&&g==="")c={0:f};else if(S&&m"u"?P.charset:e.charset,n=typeof e.duplicates>"u"?P.duplicates:e.duplicates;if(n!=="combine"&&n!=="first"&&n!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var o=typeof e.allowDots>"u"?e.decodeDotInKeys===!0?!0:P.allowDots:!!e.allowDots;return{allowDots:o,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:P.allowEmptyArrays,allowPrototypes:typeof e.allowPrototypes=="boolean"?e.allowPrototypes:P.allowPrototypes,allowSparse:typeof e.allowSparse=="boolean"?e.allowSparse:P.allowSparse,arrayLimit:typeof e.arrayLimit=="number"?e.arrayLimit:P.arrayLimit,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:P.charsetSentinel,comma:typeof e.comma=="boolean"?e.comma:P.comma,decodeDotInKeys:typeof e.decodeDotInKeys=="boolean"?e.decodeDotInKeys:P.decodeDotInKeys,decoder:typeof e.decoder=="function"?e.decoder:P.decoder,delimiter:typeof e.delimiter=="string"||W.isRegExp(e.delimiter)?e.delimiter:P.delimiter,depth:typeof e.depth=="number"||e.depth===!1?+e.depth:P.depth,duplicates:n,ignoreQueryPrefix:e.ignoreQueryPrefix===!0,interpretNumericEntities:typeof e.interpretNumericEntities=="boolean"?e.interpretNumericEntities:P.interpretNumericEntities,parameterLimit:typeof e.parameterLimit=="number"?e.parameterLimit:P.parameterLimit,parseArrays:e.parseArrays!==!1,plainObjects:typeof e.plainObjects=="boolean"?e.plainObjects:P.plainObjects,strictDepth:typeof e.strictDepth=="boolean"?!!e.strictDepth:P.strictDepth,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:P.strictNullHandling,throwOnLimitExceeded:typeof e.throwOnLimitExceeded=="boolean"?e.throwOnLimitExceeded:!1}},gi=function(r,e){var t=mi(e);if(r===""||r===null||typeof r>"u")return t.plainObjects?{__proto__:null}:{};for(var n=typeof r=="string"?yi(r,t):r,o=t.plainObjects?{__proto__:null}:{},a=Object.keys(n),f=0;f-1};function pe(r){if(typeof r!="string"&&(r=String(r)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(r)||r==="")throw new TypeError('Invalid character in header field name: "'+r+'"');return r.toLowerCase()}function Nr(r){return typeof r!="string"&&(r=String(r)),r}function Lr(r){var e={next:function(){var t=r.shift();return{done:t===void 0,value:t}}};return F.iterable&&(e[Symbol.iterator]=function(){return e}),e}function x(r){this.map={},r instanceof x?r.forEach(function(e,t){this.append(t,e)},this):Array.isArray(r)?r.forEach(function(e){if(e.length!=2)throw new TypeError("Headers constructor: expected name/value pair to be length 2, found"+e.length);this.append(e[0],e[1])},this):r&&Object.getOwnPropertyNames(r).forEach(function(e){this.append(e,r[e])},this)}x.prototype.append=function(r,e){r=pe(r),e=Nr(e);var t=this.map[r];this.map[r]=t?t+", "+e:e};x.prototype.delete=function(r){delete this.map[pe(r)]};x.prototype.get=function(r){return r=pe(r),this.has(r)?this.map[r]:null};x.prototype.has=function(r){return this.map.hasOwnProperty(pe(r))};x.prototype.set=function(r,e){this.map[pe(r)]=Nr(e)};x.prototype.forEach=function(r,e){for(var t in this.map)this.map.hasOwnProperty(t)&&r.call(e,this.map[t],t,this)};x.prototype.keys=function(){var r=[];return this.forEach(function(e,t){r.push(t)}),Lr(r)};x.prototype.values=function(){var r=[];return this.forEach(function(e){r.push(e)}),Lr(r)};x.prototype.entries=function(){var r=[];return this.forEach(function(e,t){r.push([t,e])}),Lr(r)};F.iterable&&(x.prototype[Symbol.iterator]=x.prototype.entries);function br(r){if(!r._noBody){if(r.bodyUsed)return Promise.reject(new TypeError("Already read"));r.bodyUsed=!0}}function on(r){return new Promise(function(e,t){r.onload=function(){e(r.result)},r.onerror=function(){t(r.error)}})}function Pi(r){var e=new FileReader,t=on(e);return e.readAsArrayBuffer(r),t}function $i(r){var e=new FileReader,t=on(e),n=/charset=([A-Za-z0-9_-]+)/.exec(r.type),o=n?n[1]:"utf-8";return e.readAsText(r,o),t}function xi(r){for(var e=new Uint8Array(r),t=new Array(e.length),n=0;n-1?e:r}function re(r,e){if(!(this instanceof re))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');e=e||{};var t=e.body;if(r instanceof re){if(r.bodyUsed)throw new TypeError("Already read");this.url=r.url,this.credentials=r.credentials,e.headers||(this.headers=new x(r.headers)),this.method=r.method,this.mode=r.mode,this.signal=r.signal,!t&&r._bodyInit!=null&&(t=r._bodyInit,r.bodyUsed=!0)}else this.url=String(r);if(this.credentials=e.credentials||this.credentials||"same-origin",(e.headers||!this.headers)&&(this.headers=new x(e.headers)),this.method=Ti(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal||function(){if("AbortController"in C){var a=new AbortController;return a.signal}}(),this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&t)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(t),(this.method==="GET"||this.method==="HEAD")&&(e.cache==="no-store"||e.cache==="no-cache")){var n=/([?&])_=[^&]*/;if(n.test(this.url))this.url=this.url.replace(n,"$1_="+new Date().getTime());else{var o=/\?/;this.url+=(o.test(this.url)?"&":"?")+"_="+new Date().getTime()}}}re.prototype.clone=function(){return new re(this,{body:this._bodyInit})};function Ii(r){var e=new FormData;return r.trim().split("&").forEach(function(t){if(t){var n=t.split("="),o=n.shift().replace(/\+/g," "),a=n.join("=").replace(/\+/g," ");e.append(decodeURIComponent(o),decodeURIComponent(a))}}),e}function Ci(r){var e=new x,t=r.replace(/\r?\n[\t ]+/g," ");return t.split("\r").map(function(n){return n.indexOf(` diff --git a/dist/assets/index-4514925e.js b/dist/assets/index-a475ddbb.js similarity index 99% rename from dist/assets/index-4514925e.js rename to dist/assets/index-a475ddbb.js index c4478b371f90227fa07b8c7c117e558a5cb4022b..74dc4895a707f2909c7d2a27d1c8ea884487bd84 100644 --- a/dist/assets/index-4514925e.js +++ b/dist/assets/index-a475ddbb.js @@ -1,4 +1,4 @@ -import{b as pick,m as musicWidgetsBrowser_umdExports,p as parseCode$1}from"./parser-f1e7dbfb.js";import{c as commonjsGlobal,g as getDefaultExportFromCjs,i as commonjsRequire}from"./umi-91f9d113.js";import{z as require$$5}from"./index-b284aaac.js";const WHOLE_DURATION_MAGNITUDE=1920,TICKS_PER_BEAT=WHOLE_DURATION_MAGNITUDE/4,EXTRA_NOTE_FIELDS=["rest","tied","overlapped","implicitType","afterGrace","contextIndex","staffTrack","chordPosition","division"],COMMON_NOTE_FIELDS=["id","ids","pitch","velocity","track","channel",...EXTRA_NOTE_FIELDS];class MetaNotation{measures;trackNames;idTrackMap;ripe=!1;static fromAbsoluteNotes(t,s,i){const n=new MetaNotation(i);return n.measures=Array(s.length).fill(null).map((r,a)=>{const c=s[a],o=s[a+1]?s[a+1]-c:0,h=t.filter(l=>l.measure===a+1).map(l=>({tick:l.startTick-c,duration:l.endTick-l.startTick,...pick(l,COMMON_NOTE_FIELDS),subNotes:[]}));return h.forEach(l=>["rest","tied","implicitType","afterGrace"].forEach(u=>{l[u]||delete l[u]})),{tick:c,duration:o,notes:h}}),n.idTrackMap=t.reduce((r,a)=>(a.id&&(r[a.id]=a.track),r),{}),n}static performAbsoluteNotes(t,{withRestTied:s=!1}={}){const n=t.filter(r=>(s||!r.rest&&!r.tied)&&!r.overlapped).map(r=>({measure:r.measure,channel:r.channel,track:r.track,start:r.start,startTick:r.startTick,endTick:r.endTick,pitch:r.pitch,duration:r.duration,velocity:r.velocity||127,id:r.id,ids:r.ids,staffTrack:r.staffTrack,contextIndex:r.contextIndex,implicitType:r.implicitType,chordPosition:r.chordPosition})).reduce((r,a)=>{const c=`${a.channel}|${a.start}|${a.pitch}`,o=r[c];return o?o.ids.push(...a.ids):r[c]=a,r},{});return Object.values(n)}constructor(t){t&&Object.assign(this,t)}get trackTickBias(){const t=this.measures[0];return this.trackNames.reduce((s,i,n)=>{if(s[i]=0,t){const r=t.notes.find(a=>a.track===n);r&&(s[i]=Math.min(r.tick,0))}return s},{})}get idSet(){return this.measures.reduce((t,s)=>(s.notes.filter(i=>!i.rest).forEach(i=>i.ids.forEach(n=>t.add(n))),t),new Set)}toJSON(){return{__prototype:"LilyNotation",measures:this.measures,idTrackMap:this.idTrackMap,trackNames:this.trackNames,ripe:this.ripe}}toAbsoluteNotes(t){let s=0;const i=t.map(n=>{const r=this.measures[n-1];console.assert(!!r,"invalid measure index:",n,this.measures.length);const a=r.notes.map(c=>({startTick:s+c.tick,endTick:s+c.tick+c.duration,start:s+c.tick,duration:c.duration,measure:n,...pick(c,COMMON_NOTE_FIELDS)}));return s+=r.duration,a});return[].concat(...i)}toPerformingNotation(t,s={}){const i=this.toAbsoluteNotes(t),n=MetaNotation.performAbsoluteNotes(i,s),r=Math.max(...n.map(o=>o.start+o.duration)),a=t.reduce((o,h)=>o+this.measures[h-1].duration,0);return new musicWidgetsBrowser_umdExports.MusicNotation.Notation({ticksPerBeat:TICKS_PER_BEAT,meta:{},tempos:[],channels:[n],endTime:r,endTick:a})}toPerformingMIDI(t,{trackList:s}={}){var h,l;if(!t.length)return null;const i=-Math.min(0,...((h=this.measures[0])==null?void 0:h.events.map(u=>u.ticks))||[],...((l=this.measures[0])==null?void 0:l.notes.map(u=>u.tick))||[]);let n=i;const r=t.map(u=>{const d=this.measures[u-1];console.assert(!!d,"invalid measure index:",u,this.measures.length);const y=d.events.map(f=>({ticks:n+f.ticks,track:f.track,data:{...f.data,measure:u}}));return n+=d.duration,y}),a=u=>u.ticks+(u.subtype==="noteOff"?-1e-8:0),c=[].concat(...r).reduce((u,d)=>(u[d.track]=u[d.track]||[],u[d.track].push({ticks:d.ticks,...d.data}),u),[]);c[0]=c[0]||[],n=i,t.map(u=>{const d=this.measures[u-1];console.assert(!!d,"invalid measure index:",u,this.measures.length),Number.isFinite(d.duration)&&(d.notes.forEach(y=>{if(s&&!s[y.track]||y.rest)return;const f=n+y.tick,p=c[y.track]=c[y.track]||[];y.subNotes.forEach(m=>{p.push({ticks:f+m.startTick,measure:u,ids:y.ids,type:"channel",subtype:"noteOn",channel:y.channel,noteNumber:m.pitch,velocity:m.velocity,staffTrack:y.staffTrack,staff:y.staff}),p.push({ticks:f+m.endTick,measure:u,ids:y.ids,type:"channel",subtype:"noteOff",channel:y.channel,noteNumber:m.pitch,velocity:0,staffTrack:y.staffTrack,staff:y.staff})})}),n+=d.duration)});const o=n;for(let u=0;u{u.sort((y,f)=>a(y)-a(f));let d=0;u.forEach(y=>{y.deltaTime=y.ticks-d,Number.isFinite(y.deltaTime)?d=y.ticks:y.deltaTime=0}),u.push({deltaTime:Math.max(o-d,0),type:"meta",subtype:"endOfTrack"})}),{header:{formatType:0,ticksPerBeat:TICKS_PER_BEAT},tracks:c,zeroTick:i}}toPerformingNotationWithEvents(t,s={}){if(!t.length)return null;const{zeroTick:i,...n}=this.toPerformingMIDI(t,s),r=musicWidgetsBrowser_umdExports.MusicNotation.Notation.parseMidi(n);assignNotationNoteDataFromEvents(r);let a=i;return r.measures=t.map(c=>{const o=a;return a+=this.measures[c-1].duration,{index:c,startTick:o,endTick:a}}),r}setTempo(t){let s=!1;for(const i of this.measures)for(const n of i.events)n.data.subtype==="setTempo"&&(n.data.microsecondsPerBeat=6e7/t,s=!0);return s}}const assignNotationNoteDataFromEvents=(e,t=["ids","measure","staffTrack"])=>{const s=(n,r,a)=>`${n}|${r}|${a}`,i=e.notes.reduce((n,r)=>(n[s(r.channel,r.pitch,r.startTick)]=r,n),{});e.events.forEach(n=>{if(n.data.subtype==="noteOn"){const r=s(n.data.channel,n.data.noteNumber,n.ticks),a=i[r];console.assert(!!a,"cannot find note of",r),a&&Object.assign(a,pick(n.data,t))}})},recoverJSON=(e,t)=>(typeof e=="object"&&(e=JSON.stringify(e)),JSON.parse(e,(s,i)=>{if(i&&typeof i=="object"&&i.__prototype){const n=t[i.__prototype];if(n){const{__prototype:r,...a}=i;return new n(a)}}return i})),deepCopy=(e,t=null)=>{if(t=t||new Map,t.get(e))return t.get(e);if(Array.isArray(e)){const s=[];return t.set(e,s),e.forEach(i=>s.push(deepCopy(i,t))),s}else if(e&&typeof e=="object"){const s={};return t.set(e,s),Object.entries(e).forEach(([i,n])=>s[i]=deepCopy(n,t)),Object.setPrototypeOf(s,e.__proto__),s}return e};class SimpleClass{assign(t){t&&Object.assign(this,t)}toJSON(){const t=this.constructor,s=t.serializedKeys||t.blackKeys&&Object.keys(this).filter(n=>!t.blackKeys.includes(n)),i=s?pick(this,s):this;return{__prototype:t.className,...i}}deepCopy(){return deepCopy(this)}}var LayoutType=(e=>(e.Ordinary="ordinary",e.Full="full",e.Conservative="conservative",e.Once="once",e))(LayoutType||{});const spreadMeasureSeq=(e,t="ordinary")=>[].concat(...e.map(s=>s.serialize(t))),seqToCode=(e,{withBrackets:t=!1}={})=>{let s="",i=!1;for(let n=0;n0&&!i&&(s+=", "),i=!1,s+=e[n].code);return t?`[${s}]`:s};class SingleMLayout extends SimpleClass{static className="SingleMLayout";measure;static from(t){const s=new SingleMLayout;return s.measure=t,s}constructor(t=void 0){super(),this.assign(t)}serialize(){return[this.measure]}get seq(){return[this]}get code(){return this.measure.toString()}}class BlockMLayout extends SimpleClass{static className="BlockMLayout";seq;static trimSeq(t){const s=[];for(const r of t)if(r instanceof BlockMLayout)for(const a of r.seq)s.push(a);else s.push(r);const i=[];let n=null;for(const r of s)r instanceof SingleMLayout?r.measure>n&&(i.push(r),n=r.measure):i.push(r);return i}static fromSeq(t){const s=new BlockMLayout;return s.seq=BlockMLayout.trimSeq(t),s}constructor(t=void 0){super(),this.assign(t)}serialize(t){return spreadMeasureSeq(this.seq,t)}get code(){return seqToCode(this.seq,{withBrackets:!0})}}class VoltaMLayout extends SimpleClass{static className="VoltaMLayout";times;body;alternates;constructor(t=void 0){super(),this.assign(t)}serialize(t){const s=spreadMeasureSeq(this.body);if(this.alternates){const i=this.alternates.map(r=>spreadMeasureSeq(r)),n=i[i.length-1];switch(t){case"ordinary":return s.concat(...i);case"conservative":case"full":return[...[].concat(...Array(this.times-1).fill(null).map((a,c)=>[...s,...i[c%(this.times-1)]])),...s,...n];case"once":return[...s,...n]}}else switch(t){case"ordinary":case"conservative":case"once":return s;case"full":return[].concat(...Array(this.times).fill(null).map(()=>s))}console.warn("the current case not handled:",t,this)}get seq(){const t=this.alternates?this.alternates[this.alternates.length-1]:[];return[...this.body,...t]}get code(){const t=seqToCode(this.body,{withBrackets:!0});let s=`${this.times}*${t}`;return this.alternates&&(s+="{"+this.alternates.map(i=>seqToCode(i,{withBrackets:i.length>1})).join(", ")+"}"),s}}class ABAMLayout extends SimpleClass{static className="ABAMLayout";main;rest;constructor(t=void 0){super(),this.assign(t)}serialize(t){const s=this.main.serialize(t),i=spreadMeasureSeq(this.main.seq,"once"),n=spreadMeasureSeq(this.rest,t);switch(t){case"ordinary":return[...s,...n];case"once":return[...n,...i];case"conservative":case"full":return[...s,...n,...i];default:console.warn("the current case not handled:",t,this)}}get seq(){return[this.main,...this.rest]}get code(){return"<"+this.main.code+", "+seqToCode(this.rest)+">"}}const measureLayout=Object.freeze(Object.defineProperty({__proto__:null,ABAMLayout,BlockMLayout,LayoutType,SingleMLayout,VoltaMLayout},Symbol.toStringTag,{value:"Module"}));var parser=function(){var e=function(M,N,C,I){for(C=C||{},I=M.length;I--;C[M[I]]=N);return C},t=[1,13],s=[1,16],i=[1,15],n=[1,26],r=[1,29],a=[1,28],c=[1,30],o=[5,13,22,27,29],h=[2,15],l=[1,32],u=[5,14,21,22,27,28,29],d={trace:function(){},yy:{},symbols_:{error:2,start_symbol:3,measure_layout:4,EOF:5,index_wise_measure_layout:6,"i:":7,"s:":8,segment_wise_measure_layout:9,iw_sequence:10,iw_item:11,range:12,",":13,UNSIGNED:14,"..":15,single:16,iw_block_item:17,iw_volta:18,iw_aba:19,iw_block:20,"[":21,"]":22,"*":23,iw_optional_alternates:24,iw_alternates:25,"{":26,"}":27,"<":28,">":29,sw_sequence:30,sw_item:31,segment:32,sw_block_item:33,sw_volta:34,sw_aba:35,sw_block:36,sw_optional_alternates:37,sw_alternates:38,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",7:"i:",8:"s:",13:",",14:"UNSIGNED",15:"..",21:"[",22:"]",23:"*",26:"{",27:"}",28:"<",29:">"},productions_:[0,[3,2],[4,1],[4,2],[4,2],[6,1],[10,1],[10,1],[10,3],[10,3],[12,3],[11,1],[11,1],[11,1],[11,1],[16,1],[17,1],[20,3],[18,4],[24,0],[24,1],[25,3],[19,5],[9,1],[30,1],[30,2],[31,1],[31,1],[31,1],[31,1],[32,1],[33,1],[36,3],[34,4],[37,0],[37,1],[38,3],[35,4]],performAction:function(N,C,I,b,R,D,L){var A=D.length-1;switch(R){case 1:return D[A-1];case 2:this.$=y(null,D[A]);break;case 3:this.$=y("index-wise",D[A]);break;case 4:this.$=y("segment-wise",v(D[A]));break;case 5:case 23:D[A].length===1&&D[A][0].__prototype==="BlockMLayout"?this.$=D[A][0]:this.$=p(D[A]);break;case 6:case 24:this.$=[D[A]];break;case 7:case 11:case 12:case 13:case 14:case 20:case 27:case 28:case 29:case 35:this.$=D[A];break;case 8:this.$=[...D[A-2],D[A]];break;case 9:this.$=[...D[A-2],...D[A]];break;case 10:this.$=k(D[A-2],D[A]);break;case 15:this.$=f(D[A]);break;case 16:case 31:this.$=p(D[A]);break;case 17:case 32:this.$=D[A-1];break;case 18:case 33:this.$=m(D[A-3],D[A-1],D[A]);break;case 19:case 34:this.$=null;break;case 21:case 36:this.$=g(D[A-1]);break;case 22:this.$=x(D[A-3],D[A-1]);break;case 25:this.$=[...D[A-1],D[A]];break;case 26:this.$=p([D[A]]);break;case 30:this.$=T(D[A]);break;case 37:this.$=x(D[A-2],D[A-1]);break}},table:[{3:1,4:2,6:3,7:[1,4],8:[1,5],10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[3]},{5:[1,17]},{5:[2,2]},{6:18,10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{9:19,14:n,21:r,28:a,30:20,31:21,32:22,33:23,34:24,35:25,36:27},{5:[2,5],13:c},e(o,[2,6]),e(o,[2,7]),e(o,[2,11]),e(o,[2,12]),e(o,[2,13]),e(o,[2,14]),e(o,h,{15:[1,31],23:l}),e(o,[2,16]),{11:33,14:[1,34],16:9,17:10,18:11,19:12,20:14,21:s,28:i},{10:35,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[2,1]},{5:[2,3]},{5:[2,4]},{5:[2,23],14:n,21:r,28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(u,[2,24]),e(u,[2,26]),e(u,[2,27]),e(u,[2,28]),e(u,[2,29]),e(u,[2,30],{23:[1,37]}),e(u,[2,31]),{14:n,21:r,28:a,31:38,32:22,33:23,34:24,35:25,36:27},{14:n,21:r,28:a,30:39,31:21,32:22,33:23,34:24,35:25,36:27},{11:40,12:41,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{14:[1,42]},{20:43,21:s},{13:[1,44]},{13:h,23:l},{13:c,22:[1,45]},e(u,[2,25]),{21:r,36:46},{14:n,21:r,28:a,30:47,31:21,32:22,33:23,34:24,35:25,36:27},{14:n,21:r,22:[1,48],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(o,[2,8]),e(o,[2,9]),e(o,[2,10]),e(o,[2,19],{24:49,25:50,26:[1,51]}),{10:52,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},e([5,13,22,26,27,29],[2,17]),e(u,[2,34],{37:53,38:54,26:[1,55]}),{14:n,21:r,28:a,29:[1,56],31:36,32:22,33:23,34:24,35:25,36:27},e([5,14,21,22,26,27,28,29],[2,32]),e(o,[2,18]),e(o,[2,20]),{10:57,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{13:c,29:[1,58]},e(u,[2,33]),e(u,[2,35]),{14:n,21:r,28:a,30:59,31:21,32:22,33:23,34:24,35:25,36:27},e(u,[2,37]),{13:c,27:[1,60]},e(o,[2,22]),{14:n,21:r,27:[1,61],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(o,[2,21]),e(u,[2,36])],defaultActions:{3:[2,2],17:[2,1],18:[2,3],19:[2,4]},parseError:function(N,C){if(C.recoverable)this.trace(N);else{var I=new Error(N);throw I.hash=C,I}},parse:function(N){var C=this,I=[0],b=[null],R=[],D=this.table,L="",A=0,w=0,_=2,F=1,B=R.slice.call(arguments,1),H=Object.create(this.lexer),W={yy:{}};for(var P in this.yy)Object.prototype.hasOwnProperty.call(this.yy,P)&&(W.yy[P]=this.yy[P]);H.setInput(N,W.yy),W.yy.lexer=H,W.yy.parser=this,typeof H.yylloc>"u"&&(H.yylloc={});var j=H.yylloc;R.push(j);var z=H.options&&H.options.ranges;typeof W.yy.parseError=="function"?this.parseError=W.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var it=function(){var $;return $=H.lex()||F,typeof $!="number"&&($=C.symbols_[$]||$),$},G,X,U,J,Y={},q,V,Z,K;;){if(X=I[I.length-1],this.defaultActions[X]?U=this.defaultActions[X]:((G===null||typeof G>"u")&&(G=it()),U=D[X]&&D[X][G]),typeof U>"u"||!U.length||!U[0]){var Q="";K=[];for(q in D[X])this.terminals_[q]&&q>_&&K.push("'"+this.terminals_[q]+"'");H.showPosition?Q="Parse error on line "+(A+1)+`: +import{b as pick,m as musicWidgetsBrowser_umdExports,p as parseCode$1}from"./parser-c740d6a8.js";import{c as commonjsGlobal,g as getDefaultExportFromCjs,i as commonjsRequire}from"./umi-37873494.js";import{z as require$$5}from"./index-92da7081.js";const WHOLE_DURATION_MAGNITUDE=1920,TICKS_PER_BEAT=WHOLE_DURATION_MAGNITUDE/4,EXTRA_NOTE_FIELDS=["rest","tied","overlapped","implicitType","afterGrace","contextIndex","staffTrack","chordPosition","division"],COMMON_NOTE_FIELDS=["id","ids","pitch","velocity","track","channel",...EXTRA_NOTE_FIELDS];class MetaNotation{measures;trackNames;idTrackMap;ripe=!1;static fromAbsoluteNotes(t,s,i){const n=new MetaNotation(i);return n.measures=Array(s.length).fill(null).map((r,a)=>{const c=s[a],o=s[a+1]?s[a+1]-c:0,h=t.filter(l=>l.measure===a+1).map(l=>({tick:l.startTick-c,duration:l.endTick-l.startTick,...pick(l,COMMON_NOTE_FIELDS),subNotes:[]}));return h.forEach(l=>["rest","tied","implicitType","afterGrace"].forEach(u=>{l[u]||delete l[u]})),{tick:c,duration:o,notes:h}}),n.idTrackMap=t.reduce((r,a)=>(a.id&&(r[a.id]=a.track),r),{}),n}static performAbsoluteNotes(t,{withRestTied:s=!1}={}){const n=t.filter(r=>(s||!r.rest&&!r.tied)&&!r.overlapped).map(r=>({measure:r.measure,channel:r.channel,track:r.track,start:r.start,startTick:r.startTick,endTick:r.endTick,pitch:r.pitch,duration:r.duration,velocity:r.velocity||127,id:r.id,ids:r.ids,staffTrack:r.staffTrack,contextIndex:r.contextIndex,implicitType:r.implicitType,chordPosition:r.chordPosition})).reduce((r,a)=>{const c=`${a.channel}|${a.start}|${a.pitch}`,o=r[c];return o?o.ids.push(...a.ids):r[c]=a,r},{});return Object.values(n)}constructor(t){t&&Object.assign(this,t)}get trackTickBias(){const t=this.measures[0];return this.trackNames.reduce((s,i,n)=>{if(s[i]=0,t){const r=t.notes.find(a=>a.track===n);r&&(s[i]=Math.min(r.tick,0))}return s},{})}get idSet(){return this.measures.reduce((t,s)=>(s.notes.filter(i=>!i.rest).forEach(i=>i.ids.forEach(n=>t.add(n))),t),new Set)}toJSON(){return{__prototype:"LilyNotation",measures:this.measures,idTrackMap:this.idTrackMap,trackNames:this.trackNames,ripe:this.ripe}}toAbsoluteNotes(t){let s=0;const i=t.map(n=>{const r=this.measures[n-1];console.assert(!!r,"invalid measure index:",n,this.measures.length);const a=r.notes.map(c=>({startTick:s+c.tick,endTick:s+c.tick+c.duration,start:s+c.tick,duration:c.duration,measure:n,...pick(c,COMMON_NOTE_FIELDS)}));return s+=r.duration,a});return[].concat(...i)}toPerformingNotation(t,s={}){const i=this.toAbsoluteNotes(t),n=MetaNotation.performAbsoluteNotes(i,s),r=Math.max(...n.map(o=>o.start+o.duration)),a=t.reduce((o,h)=>o+this.measures[h-1].duration,0);return new musicWidgetsBrowser_umdExports.MusicNotation.Notation({ticksPerBeat:TICKS_PER_BEAT,meta:{},tempos:[],channels:[n],endTime:r,endTick:a})}toPerformingMIDI(t,{trackList:s}={}){var h,l;if(!t.length)return null;const i=-Math.min(0,...((h=this.measures[0])==null?void 0:h.events.map(u=>u.ticks))||[],...((l=this.measures[0])==null?void 0:l.notes.map(u=>u.tick))||[]);let n=i;const r=t.map(u=>{const d=this.measures[u-1];console.assert(!!d,"invalid measure index:",u,this.measures.length);const y=d.events.map(f=>({ticks:n+f.ticks,track:f.track,data:{...f.data,measure:u}}));return n+=d.duration,y}),a=u=>u.ticks+(u.subtype==="noteOff"?-1e-8:0),c=[].concat(...r).reduce((u,d)=>(u[d.track]=u[d.track]||[],u[d.track].push({ticks:d.ticks,...d.data}),u),[]);c[0]=c[0]||[],n=i,t.map(u=>{const d=this.measures[u-1];console.assert(!!d,"invalid measure index:",u,this.measures.length),Number.isFinite(d.duration)&&(d.notes.forEach(y=>{if(s&&!s[y.track]||y.rest)return;const f=n+y.tick,p=c[y.track]=c[y.track]||[];y.subNotes.forEach(m=>{p.push({ticks:f+m.startTick,measure:u,ids:y.ids,type:"channel",subtype:"noteOn",channel:y.channel,noteNumber:m.pitch,velocity:m.velocity,staffTrack:y.staffTrack,staff:y.staff}),p.push({ticks:f+m.endTick,measure:u,ids:y.ids,type:"channel",subtype:"noteOff",channel:y.channel,noteNumber:m.pitch,velocity:0,staffTrack:y.staffTrack,staff:y.staff})})}),n+=d.duration)});const o=n;for(let u=0;u{u.sort((y,f)=>a(y)-a(f));let d=0;u.forEach(y=>{y.deltaTime=y.ticks-d,Number.isFinite(y.deltaTime)?d=y.ticks:y.deltaTime=0}),u.push({deltaTime:Math.max(o-d,0),type:"meta",subtype:"endOfTrack"})}),{header:{formatType:0,ticksPerBeat:TICKS_PER_BEAT},tracks:c,zeroTick:i}}toPerformingNotationWithEvents(t,s={}){if(!t.length)return null;const{zeroTick:i,...n}=this.toPerformingMIDI(t,s),r=musicWidgetsBrowser_umdExports.MusicNotation.Notation.parseMidi(n);assignNotationNoteDataFromEvents(r);let a=i;return r.measures=t.map(c=>{const o=a;return a+=this.measures[c-1].duration,{index:c,startTick:o,endTick:a}}),r}setTempo(t){let s=!1;for(const i of this.measures)for(const n of i.events)n.data.subtype==="setTempo"&&(n.data.microsecondsPerBeat=6e7/t,s=!0);return s}}const assignNotationNoteDataFromEvents=(e,t=["ids","measure","staffTrack"])=>{const s=(n,r,a)=>`${n}|${r}|${a}`,i=e.notes.reduce((n,r)=>(n[s(r.channel,r.pitch,r.startTick)]=r,n),{});e.events.forEach(n=>{if(n.data.subtype==="noteOn"){const r=s(n.data.channel,n.data.noteNumber,n.ticks),a=i[r];console.assert(!!a,"cannot find note of",r),a&&Object.assign(a,pick(n.data,t))}})},recoverJSON=(e,t)=>(typeof e=="object"&&(e=JSON.stringify(e)),JSON.parse(e,(s,i)=>{if(i&&typeof i=="object"&&i.__prototype){const n=t[i.__prototype];if(n){const{__prototype:r,...a}=i;return new n(a)}}return i})),deepCopy=(e,t=null)=>{if(t=t||new Map,t.get(e))return t.get(e);if(Array.isArray(e)){const s=[];return t.set(e,s),e.forEach(i=>s.push(deepCopy(i,t))),s}else if(e&&typeof e=="object"){const s={};return t.set(e,s),Object.entries(e).forEach(([i,n])=>s[i]=deepCopy(n,t)),Object.setPrototypeOf(s,e.__proto__),s}return e};class SimpleClass{assign(t){t&&Object.assign(this,t)}toJSON(){const t=this.constructor,s=t.serializedKeys||t.blackKeys&&Object.keys(this).filter(n=>!t.blackKeys.includes(n)),i=s?pick(this,s):this;return{__prototype:t.className,...i}}deepCopy(){return deepCopy(this)}}var LayoutType=(e=>(e.Ordinary="ordinary",e.Full="full",e.Conservative="conservative",e.Once="once",e))(LayoutType||{});const spreadMeasureSeq=(e,t="ordinary")=>[].concat(...e.map(s=>s.serialize(t))),seqToCode=(e,{withBrackets:t=!1}={})=>{let s="",i=!1;for(let n=0;n0&&!i&&(s+=", "),i=!1,s+=e[n].code);return t?`[${s}]`:s};class SingleMLayout extends SimpleClass{static className="SingleMLayout";measure;static from(t){const s=new SingleMLayout;return s.measure=t,s}constructor(t=void 0){super(),this.assign(t)}serialize(){return[this.measure]}get seq(){return[this]}get code(){return this.measure.toString()}}class BlockMLayout extends SimpleClass{static className="BlockMLayout";seq;static trimSeq(t){const s=[];for(const r of t)if(r instanceof BlockMLayout)for(const a of r.seq)s.push(a);else s.push(r);const i=[];let n=null;for(const r of s)r instanceof SingleMLayout?r.measure>n&&(i.push(r),n=r.measure):i.push(r);return i}static fromSeq(t){const s=new BlockMLayout;return s.seq=BlockMLayout.trimSeq(t),s}constructor(t=void 0){super(),this.assign(t)}serialize(t){return spreadMeasureSeq(this.seq,t)}get code(){return seqToCode(this.seq,{withBrackets:!0})}}class VoltaMLayout extends SimpleClass{static className="VoltaMLayout";times;body;alternates;constructor(t=void 0){super(),this.assign(t)}serialize(t){const s=spreadMeasureSeq(this.body);if(this.alternates){const i=this.alternates.map(r=>spreadMeasureSeq(r)),n=i[i.length-1];switch(t){case"ordinary":return s.concat(...i);case"conservative":case"full":return[...[].concat(...Array(this.times-1).fill(null).map((a,c)=>[...s,...i[c%(this.times-1)]])),...s,...n];case"once":return[...s,...n]}}else switch(t){case"ordinary":case"conservative":case"once":return s;case"full":return[].concat(...Array(this.times).fill(null).map(()=>s))}console.warn("the current case not handled:",t,this)}get seq(){const t=this.alternates?this.alternates[this.alternates.length-1]:[];return[...this.body,...t]}get code(){const t=seqToCode(this.body,{withBrackets:!0});let s=`${this.times}*${t}`;return this.alternates&&(s+="{"+this.alternates.map(i=>seqToCode(i,{withBrackets:i.length>1})).join(", ")+"}"),s}}class ABAMLayout extends SimpleClass{static className="ABAMLayout";main;rest;constructor(t=void 0){super(),this.assign(t)}serialize(t){const s=this.main.serialize(t),i=spreadMeasureSeq(this.main.seq,"once"),n=spreadMeasureSeq(this.rest,t);switch(t){case"ordinary":return[...s,...n];case"once":return[...n,...i];case"conservative":case"full":return[...s,...n,...i];default:console.warn("the current case not handled:",t,this)}}get seq(){return[this.main,...this.rest]}get code(){return"<"+this.main.code+", "+seqToCode(this.rest)+">"}}const measureLayout=Object.freeze(Object.defineProperty({__proto__:null,ABAMLayout,BlockMLayout,LayoutType,SingleMLayout,VoltaMLayout},Symbol.toStringTag,{value:"Module"}));var parser=function(){var e=function(M,N,C,I){for(C=C||{},I=M.length;I--;C[M[I]]=N);return C},t=[1,13],s=[1,16],i=[1,15],n=[1,26],r=[1,29],a=[1,28],c=[1,30],o=[5,13,22,27,29],h=[2,15],l=[1,32],u=[5,14,21,22,27,28,29],d={trace:function(){},yy:{},symbols_:{error:2,start_symbol:3,measure_layout:4,EOF:5,index_wise_measure_layout:6,"i:":7,"s:":8,segment_wise_measure_layout:9,iw_sequence:10,iw_item:11,range:12,",":13,UNSIGNED:14,"..":15,single:16,iw_block_item:17,iw_volta:18,iw_aba:19,iw_block:20,"[":21,"]":22,"*":23,iw_optional_alternates:24,iw_alternates:25,"{":26,"}":27,"<":28,">":29,sw_sequence:30,sw_item:31,segment:32,sw_block_item:33,sw_volta:34,sw_aba:35,sw_block:36,sw_optional_alternates:37,sw_alternates:38,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",7:"i:",8:"s:",13:",",14:"UNSIGNED",15:"..",21:"[",22:"]",23:"*",26:"{",27:"}",28:"<",29:">"},productions_:[0,[3,2],[4,1],[4,2],[4,2],[6,1],[10,1],[10,1],[10,3],[10,3],[12,3],[11,1],[11,1],[11,1],[11,1],[16,1],[17,1],[20,3],[18,4],[24,0],[24,1],[25,3],[19,5],[9,1],[30,1],[30,2],[31,1],[31,1],[31,1],[31,1],[32,1],[33,1],[36,3],[34,4],[37,0],[37,1],[38,3],[35,4]],performAction:function(N,C,I,b,R,D,L){var A=D.length-1;switch(R){case 1:return D[A-1];case 2:this.$=y(null,D[A]);break;case 3:this.$=y("index-wise",D[A]);break;case 4:this.$=y("segment-wise",v(D[A]));break;case 5:case 23:D[A].length===1&&D[A][0].__prototype==="BlockMLayout"?this.$=D[A][0]:this.$=p(D[A]);break;case 6:case 24:this.$=[D[A]];break;case 7:case 11:case 12:case 13:case 14:case 20:case 27:case 28:case 29:case 35:this.$=D[A];break;case 8:this.$=[...D[A-2],D[A]];break;case 9:this.$=[...D[A-2],...D[A]];break;case 10:this.$=k(D[A-2],D[A]);break;case 15:this.$=f(D[A]);break;case 16:case 31:this.$=p(D[A]);break;case 17:case 32:this.$=D[A-1];break;case 18:case 33:this.$=m(D[A-3],D[A-1],D[A]);break;case 19:case 34:this.$=null;break;case 21:case 36:this.$=g(D[A-1]);break;case 22:this.$=x(D[A-3],D[A-1]);break;case 25:this.$=[...D[A-1],D[A]];break;case 26:this.$=p([D[A]]);break;case 30:this.$=T(D[A]);break;case 37:this.$=x(D[A-2],D[A-1]);break}},table:[{3:1,4:2,6:3,7:[1,4],8:[1,5],10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[3]},{5:[1,17]},{5:[2,2]},{6:18,10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{9:19,14:n,21:r,28:a,30:20,31:21,32:22,33:23,34:24,35:25,36:27},{5:[2,5],13:c},e(o,[2,6]),e(o,[2,7]),e(o,[2,11]),e(o,[2,12]),e(o,[2,13]),e(o,[2,14]),e(o,h,{15:[1,31],23:l}),e(o,[2,16]),{11:33,14:[1,34],16:9,17:10,18:11,19:12,20:14,21:s,28:i},{10:35,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[2,1]},{5:[2,3]},{5:[2,4]},{5:[2,23],14:n,21:r,28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(u,[2,24]),e(u,[2,26]),e(u,[2,27]),e(u,[2,28]),e(u,[2,29]),e(u,[2,30],{23:[1,37]}),e(u,[2,31]),{14:n,21:r,28:a,31:38,32:22,33:23,34:24,35:25,36:27},{14:n,21:r,28:a,30:39,31:21,32:22,33:23,34:24,35:25,36:27},{11:40,12:41,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{14:[1,42]},{20:43,21:s},{13:[1,44]},{13:h,23:l},{13:c,22:[1,45]},e(u,[2,25]),{21:r,36:46},{14:n,21:r,28:a,30:47,31:21,32:22,33:23,34:24,35:25,36:27},{14:n,21:r,22:[1,48],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(o,[2,8]),e(o,[2,9]),e(o,[2,10]),e(o,[2,19],{24:49,25:50,26:[1,51]}),{10:52,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},e([5,13,22,26,27,29],[2,17]),e(u,[2,34],{37:53,38:54,26:[1,55]}),{14:n,21:r,28:a,29:[1,56],31:36,32:22,33:23,34:24,35:25,36:27},e([5,14,21,22,26,27,28,29],[2,32]),e(o,[2,18]),e(o,[2,20]),{10:57,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{13:c,29:[1,58]},e(u,[2,33]),e(u,[2,35]),{14:n,21:r,28:a,30:59,31:21,32:22,33:23,34:24,35:25,36:27},e(u,[2,37]),{13:c,27:[1,60]},e(o,[2,22]),{14:n,21:r,27:[1,61],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(o,[2,21]),e(u,[2,36])],defaultActions:{3:[2,2],17:[2,1],18:[2,3],19:[2,4]},parseError:function(N,C){if(C.recoverable)this.trace(N);else{var I=new Error(N);throw I.hash=C,I}},parse:function(N){var C=this,I=[0],b=[null],R=[],D=this.table,L="",A=0,w=0,_=2,F=1,B=R.slice.call(arguments,1),H=Object.create(this.lexer),W={yy:{}};for(var P in this.yy)Object.prototype.hasOwnProperty.call(this.yy,P)&&(W.yy[P]=this.yy[P]);H.setInput(N,W.yy),W.yy.lexer=H,W.yy.parser=this,typeof H.yylloc>"u"&&(H.yylloc={});var j=H.yylloc;R.push(j);var z=H.options&&H.options.ranges;typeof W.yy.parseError=="function"?this.parseError=W.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var it=function(){var $;return $=H.lex()||F,typeof $!="number"&&($=C.symbols_[$]||$),$},G,X,U,J,Y={},q,V,Z,K;;){if(X=I[I.length-1],this.defaultActions[X]?U=this.defaultActions[X]:((G===null||typeof G>"u")&&(G=it()),U=D[X]&&D[X][G]),typeof U>"u"||!U.length||!U[0]){var Q="";K=[];for(q in D[X])this.terminals_[q]&&q>_&&K.push("'"+this.terminals_[q]+"'");H.showPosition?Q="Parse error on line "+(A+1)+`: `+H.showPosition()+` Expecting `+K.join(", ")+", got '"+(this.terminals_[G]||G)+"'":Q="Parse error on line "+(A+1)+": Unexpected "+(G==F?"end of input":"'"+(this.terminals_[G]||G)+"'"),this.parseError(Q,{text:H.match,token:this.terminals_[G]||G,line:H.yylineno,loc:j,expected:K})}if(U[0]instanceof Array&&U.length>1)throw new Error("Parse Error: multiple actions possible at state: "+X+", token: "+G);switch(U[0]){case 1:I.push(G),b.push(H.yytext),R.push(H.yylloc),I.push(U[1]),G=null,w=H.yyleng,L=H.yytext,A=H.yylineno,j=H.yylloc;break;case 2:if(V=this.productions_[U[1]][1],Y.$=b[b.length-V],Y._$={first_line:R[R.length-(V||1)].first_line,last_line:R[R.length-1].last_line,first_column:R[R.length-(V||1)].first_column,last_column:R[R.length-1].last_column},z&&(Y._$.range=[R[R.length-(V||1)].range[0],R[R.length-1].range[1]]),J=this.performAction.apply(Y,[L,w,A,W.yy,U[1],b,R].concat(B)),typeof J<"u")return J;V&&(I=I.slice(0,-1*V*2),b=b.slice(0,-1*V),R=R.slice(0,-1*V)),I.push(this.productions_[U[1]][0]),b.push(Y.$),R.push(Y._$),Z=D[I[I.length-2]][I[I.length-1]],I.push(Z);break;case 3:return!0}}return!0}};const y=(M,N)=>({__prototype:"MesaureLayout",type:M,data:N}),f=M=>({__prototype:"SingleMLayout",measure:Number(M)}),p=M=>({__prototype:"BlockMLayout",seq:M}),m=(M,N,C)=>({__prototype:"VoltaMLayout",times:Number(M),body:N,alternates:C}),x=(M,N)=>({__prototype:"ABAMLayout",main:M,rest:N}),T=M=>({segment:!0,length:Number(M)}),g=M=>M.map(N=>N.__prototype==="BlockMLayout"?N.seq:[N]),k=(M,N)=>{if(M=Number(M),N=Number(N),!(N>=M))throw new Error(`invalid measure range: ${M}..${N}`);return Array(N+1-M).fill(0).map((C,I)=>f(M+I))},S=(M,N)=>{if(M.segment){const C=N.index;return N.index+=M.length,Array(M.length).fill(0).map((I,b)=>f(C+b))}return[v(M,N)]},v=(M,N={index:1})=>{const C=I=>[].concat(...I.map(b=>S(b,N)));switch(M.__prototype){case"BlockMLayout":M.seq=C(M.seq);break;case"VoltaMLayout":M.body=C(M.body),M.alternates=M.alternates&&M.alternates.map(C);break;case"ABAMLayout":M.main=v(M.main,N),M.rest=C(M.rest);break}return M};var E=function(){var M={EOF:1,parseError:function(C,I){if(this.yy.parser)this.yy.parser.parseError(C,I);else throw new Error(C)},setInput:function(N,C){return this.yy=C||this.yy||{},this._input=N,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var N=this._input[0];this.yytext+=N,this.yyleng++,this.offset++,this.match+=N,this.matched+=N;var C=N.match(/(?:\r\n?|\n).*/g);return C?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),N},unput:function(N){var C=N.length,I=N.split(/(?:\r\n?|\n)/g);this._input=N+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-C),this.offset-=C;var b=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),I.length-1&&(this.yylineno-=I.length-1);var R=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:I?(I.length===b.length?this.yylloc.first_column:0)+b[b.length-I.length].length-I[0].length:this.yylloc.first_column-C},this.options.ranges&&(this.yylloc.range=[R[0],R[0]+this.yyleng-C]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(N){this.unput(this.match.slice(N))},pastInput:function(){var N=this.matched.substr(0,this.matched.length-this.match.length);return(N.length>20?"...":"")+N.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var N=this.match;return N.length<20&&(N+=this._input.substr(0,20-N.length)),(N.substr(0,20)+(N.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var N=this.pastInput(),C=new Array(N.length+1).join("-");return N+this.upcomingInput()+` diff --git a/dist/assets/index-37861f16.js b/dist/assets/index-abb14cca.js similarity index 96% rename from dist/assets/index-37861f16.js rename to dist/assets/index-abb14cca.js index 5dabc48b3be9500e6f412b1b5f6d0e59d8bd8588..98b35469d7912b91a793626454661e3c5c281021 100644 --- a/dist/assets/index-37861f16.js +++ b/dist/assets/index-abb14cca.js @@ -1 +1 @@ -import{g as L,r as c,_ as S}from"./umi-91f9d113.js";import{ai as A,bf as M,W as B,H,C as U,a as V,k as X,c as E,b as x,o as q,i as j,e as w}from"./_setToString-397d22bb.js";var G=/\s/;function J(e){for(var n=e.length;n--&&G.test(e.charAt(n)););return n}var K=J,Q=K,Y=/^\s+/;function Z(e){return e&&e.slice(0,Q(e)+1).replace(Y,"")}var ee=Z,ne=ee,W=A,te=M,R=0/0,re=/^[-+]0x[0-9a-f]+$/i,ae=/^0b[01]+$/i,ie=/^0o[0-7]+$/i,se=parseInt;function ce(e){if(typeof e=="number")return e;if(te(e))return R;if(W(e)){var n=typeof e.valueOf=="function"?e.valueOf():e;e=W(n)?n+"":n}if(typeof e!="string")return e===0?e:+e;e=ne(e);var t=ae.test(e);return t||ie.test(e)?se(e.slice(2),t?2:8):re.test(e)?R:+e}var oe=ce,le=B,ue=function(){return le.Date.now()},de=ue,fe=A,k=de,z=oe,me="Expected a function",ve=Math.max,pe=Math.min;function ge(e,n,t){var r,i,o,l,s,u,f=0,h=!1,g=!1,y=!0;if(typeof e!="function")throw new TypeError(me);n=z(n)||0,fe(t)&&(h=!!t.leading,g="maxWait"in t,o=g?ve(z(t.maxWait)||0,n):o,y="trailing"in t?!!t.trailing:y);function C(a){var d=r,p=i;return r=i=void 0,f=a,l=e.apply(p,d),l}function O(a){return f=a,s=setTimeout(b,n),h?C(a):l}function T(a){var d=a-u,p=a-f,_=n-d;return g?pe(_,o-p):_}function N(a){var d=a-u,p=a-f;return u===void 0||d>=n||d<0||g&&p>=o}function b(){var a=k();if(N(a))return I(a);s=setTimeout(b,T(a))}function I(a){return s=void 0,y&&r?C(a):(r=i=void 0,l)}function $(){s!==void 0&&clearTimeout(s),f=0,r=u=i=s=void 0}function m(){return s===void 0?l:I(k())}function v(){var a=k(),d=N(a);if(r=arguments,i=this,u=a,d){if(s===void 0)return O(u);if(g)return clearTimeout(s),s=setTimeout(b,n),C(u)}return s===void 0&&(s=setTimeout(b,n)),l}return v.cancel=$,v.flush=m,v}var Ne=ge;const ye=L(Ne);var be=globalThis&&globalThis.__rest||function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i=n||d<0||g&&p>=o}function b(){var a=k();if(N(a))return I(a);s=setTimeout(b,T(a))}function I(a){return s=void 0,y&&r?C(a):(r=i=void 0,l)}function $(){s!==void 0&&clearTimeout(s),f=0,r=u=i=s=void 0}function m(){return s===void 0?l:I(k())}function v(){var a=k(),d=N(a);if(r=arguments,i=this,u=a,d){if(s===void 0)return O(u);if(g)return clearTimeout(s),s=setTimeout(b,n),C(u)}return s===void 0&&(s=setTimeout(b,n)),l}return v.cancel=$,v.flush=m,v}var Ne=ge;const ye=L(Ne);var be=globalThis&&globalThis.__rest||function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);ie.jsxs("g",{...o,className:"staff-lines",transform:`translate(${p}, ${y})`,children:[new Array(5).fill(null).map((i,n)=>e.jsx("line",{x1:0,x2:m,y1:n-2,y2:n-2},n)),s&&s.map((i,n)=>e.jsx("g",{children:Array(Math.abs(i.n)).fill(null).map((d,r)=>e.jsx("line",{x1:i.left,x2:i.right,y1:i.n>0?3+r:-3-r,y2:i.n>0?3+r:-3-r},r))},n))]}),ne=x.memo(se),O=({score:p,page:y,pageIndex:m,system:s,systemIndex:o,staff:i,staffIndex:n})=>{var d;return e.jsx(e.Fragment,{children:e.jsxs("g",{className:S("staff",{moving:!1}),transform:`translate(0, ${i.top})`,children:[e.jsxs("g",{children:[e.jsx(ne,{translateY:i.staffY,width:s.width,additionalLines:i.additionalLines}),(d=i==null?void 0:i.measures)==null?void 0:d.map((r,c)=>{var t;return e.jsxs("g",{children:[n===0&&e.jsx("text",{x:r.left,y:Math.min(5,i.staffY-3),fontSize:c===0?1.4:.9,fill:"#e65019",children:s.headMeasureIndex+c+1}),e.jsx("g",{transform:`translate(0, ${i.staffY})`,children:e.jsx("g",{className:"tokens",children:(t=r==null?void 0:r.tokens)==null?void 0:t.filter(a=>F.includes(a.type)).map((a,l)=>e.jsxs("g",{className:S("token",{}),transform:`translate(${a.x}, ${a.y})`,id:a.id,onClick:()=>console.log(a),children:[a.voice?e.jsxs("title",{children:["voice-",a.voiceIndices.join(",")]}):null,e.jsx("use",{xlinkHref:`#score-token-def-${a.typeId}`})]},l))})})]},c)})]}),e.jsx("g",{className:"measure-bars",children:s.measureBars.map((r,c)=>e.jsx("g",{className:S("measure-bar"),transform:`translate(${r}, ${i.staffY-2})`,children:e.jsx("line",{x1:0,x2:0,y1:0,y2:4})},c))})]})})};x.memo(O);const re=p=>{var n,d;const{score:y,pageIndex:m,system:s,systemIndex:o}=p;if(s.staves.length===0)return e.jsx("g",{},o);const i=K(y.staffLayoutCode);return e.jsxs("g",{className:S("system",{}),transform:`translate(${s.left}, ${s.top})`,children:[s.backgroundImage&&!((n=s.staves[0])!=null&&n.backgroundImage)&&!((d=s.staves[0])!=null&&d.maskImage)&&e.jsx("image",{className:"background",href:s.backgroundImage,...s.imagePosition||{}}),s.staves.length>=2&&e.jsx("line",{className:"connection",x1:0,x2:0,y1:s.connectionLine.top,y2:s.connectionLine.bottom}),s.staves.map((r,c)=>e.jsxs("g",{className:S("staff"),transform:`translate(0, ${r.top})`,children:[!r.maskImage&&r.backgroundImage&&e.jsx("image",{className:"background",href:r.backgroundImage,...r.imagePosition||{}}),r.maskImage&&e.jsx("image",{className:"background",href:r.maskImage,...r.imagePosition||{}})]},"staff-"+c)),s.staves.map((r,c)=>e.jsx(O,{...p,staff:r,staffIndex:c},c)),e.jsx("g",{className:"measure-bars",children:s.measureBars.map((r,c)=>e.jsx("g",{transform:`translate(${r}, 0)`,children:i.mask(s.staffMask).conjunctions.map((t,a)=>{const l=s.staves[a],f=s.staves[a+1];if(l&&f)return e.jsx("g",{transform:`translate(0, ${l.top+l.staffY+2})`,children:e.jsx("line",{className:S("staff-layout-measure-bar",{dashed:t===1,blank:t===0}),x1:"0",x2:"0",y1:0,y2:f.top+f.staffY-(l.top+l.staffY)-4})},a)})},c))}),e.jsx(X,{layout:i.mask(s.staffMask),positions:s.staffPositions,nameDict:(!s.prev||s.staffMask!==s.prev.staffMask)&&y.instrumentDict})]},o)},ae=x.memo(re),oe=({score:p,pageIndex:y,cursorPosition:m,onSeekPosition:s})=>{var d,r,c;const o=p.pages[y],i=x.useRef(null);if(!o)return null;const n=x.useMemo(()=>{let t=0;if(m){let a=0;for(const[l,f]of p.pages.entries()){if(m.system>=a-1&&m.system{i.current&&i.current.scrollIntoView({block:"center",behavior:"smooth"})},[i.current,n]),e.jsx("div",{children:e.jsxs("svg",{className:S("graph",{}),style:{objectFit:"contain"},viewBox:`0 0 ${o.width} ${o.height}`,children:[e.jsx(Q,{}),(d=o==null?void 0:o.systems)==null?void 0:d.map((t,a)=>e.jsx(ae,{score:p,page:o,pageIndex:y,system:t,systemIndex:a},a)),(o==null?void 0:o.semantics)&&e.jsx("g",{children:(r=o==null?void 0:o.semantics)==null?void 0:r.map((t,a)=>{var l,f,b,k,v,w;if(t.semantic===V.rect_Text)return e.jsx("g",{transform:`translate(${t.x}, ${t.y}) ${(l=t.extension)!=null&&l.theta?`rotate(${((f=t.extension)==null?void 0:f.theta)*180/Math.PI})`:""}`,color:"rgba(25, 175, 230, 0.6)",children:e.jsxs("text",{dominantBaseline:"hanging",x:0,y:-((b=t.extension)==null?void 0:b.height)/2,textAnchor:"middle",style:{fontSize:(k=t.extension)==null?void 0:k.height},children:[(v=t.extension)==null?void 0:v.text,e.jsx("title",{children:((w=t.extension)==null?void 0:w.type)||t.semantic})]})},a)})}),(o==null?void 0:o.tokens)&&e.jsx("g",{children:(c=o==null?void 0:o.tokens)==null?void 0:c.map((t,a)=>{if(t.type===W.Text)return e.jsx("g",{transform:`translate(${t.x}, ${t.y})`,color:"rgba(25, 175, 230, 0.6)",className:"token",children:e.jsxs("text",{dominantBaseline:"hanging",x:0,y:-t.fontSize/2,textAnchor:"middle",style:{fontSize:t.fontSize},className:S(t.textType),children:[t.text,e.jsx("title",{children:t.textType})]})},a)})}),o.systems.map((t,a)=>{const l=p.pages.slice(0,y).reduce((f,b)=>f+b.systems.length,0)+a;return e.jsxs("g",{className:S("system"),transform:`translate(${t.left}, ${t.top})`,children:[e.jsx("rect",{style:{opacity:0},x:0,y:t.noteRange.top,width:t.width,height:t.noteRange.bottom-t.noteRange.top,onClick:f=>{const b=f.target,k=b.getBoundingClientRect(),v=f.clientX-k.left,w=b.getBBox(),g=v/k.width*w.width;s({system:l,x:g})}}),(m==null?void 0:m.system)===l?e.jsx("line",{ref:i,transform:`translate(${m.x}, 0)`,x1:0,x2:0,y1:t.noteRange.top,y2:t.noteRange.bottom,style:{stroke:"lightblue",strokeWidth:1}}):null]},a)})]})})},ie=x.memo(oe),le=p=>{var w;const y=q(),m=E(),s=x.useRef(new H(performance)),[o,i]=x.useState(),n=x.useRef(null),d=x.useRef(null),[r,c]=x.useState(!1),[t,a]=x.useState(!1),l=Z(async()=>{var j,$,M,A;const g=(m==null?void 0:m.id)||(($=(j=p==null?void 0:p.match)==null?void 0:j.params)==null?void 0:$.id),u=await D.get(`/api/musicSets/${g}`);if((M=u==null?void 0:u.content)!=null&&M.scoreURL){const R=await(await fetch(G(u.content.scoreURL))).json(),T=Y(R,z);return T.assemble(((A=T.settings)==null?void 0:A.semanticConfidenceThreshold)??1),T}return u},[]);x.useEffect(()=>{N.MidiAudio.WebAudio.empty()&&N.MidiAudio.loadPlugin({soundfontUrl:"/soundfont/",api:"webaudio"}).then(()=>{a(!0),console.debug("Soundfont loaded.")}),v()},[]);const f=x.useCallback(async g=>{if(!n.current){console.log("please create midi player first");return}const u=n.current.isPlaying;u&&(n.current.pause(),await new Promise(j=>setTimeout(j,0)),document.querySelectorAll(".notePlayOn").forEach(j=>j.classList.remove("notePlayOn"))),n.current.progressTicks=d.current.lookupTick(g),u&&k()},[]),b=async()=>{var g,u,j,$;(u=(g=N.MidiAudio.WebAudio).needsWarmup)!=null&&u.call(g)&&await(($=(j=N.MidiAudio.WebAudio).awaitWarmup)==null?void 0:$.call(j))},k=async()=>{var g;(g=n.current)!=null&&g.isPlaying?(n.current.pause(),c(!1)):(await b(),v(),n.current.play({nextFrame:()=>(d.current&&i(d.current.lookupPosition(n.current.progressTicks)),new Promise(u=>requestAnimationFrame(()=>u())))}),c(!0))},v=()=>{var R,T;if(!((T=(R=l.value)==null?void 0:R.systems)!=null&&T.length))return;const{notation:g,tokenMap:u}=l.value.spartito.perform(),j=l.value.getMeasureLayout(),$=j?j.serialize(U.Full):Array(g.measures.length).fill(null).map((h,I)=>I+1),M=g.toPerformingNotationWithEvents($);Math.round(6e7/M.tempos[0].tempo),d.current=_.createFromNotation(M,u);const A=n.current?n.current.progressTicks:0;n.current&&n.current.dispose(),n.current=new N.MidiPlayer(M,{cacheSpan:200,onMidi:(h,I)=>{let B=null;switch(h.subtype){case"noteOn":N.MidiAudio.noteOn(h.channel,h.noteNumber,h.velocity,I),B=()=>{var L;return(L=h==null?void 0:h.ids)==null?void 0:L.map(C=>{const P=document.getElementById(C);P&&P.classList.add("notePlayOn")})};break;case"noteOff":N.MidiAudio.noteOff(h.channel,h.noteNumber,I),B=()=>{var L;return(L=h==null?void 0:h.ids)==null?void 0:L.map(C=>{const P=document.getElementById(C);P&&P.classList.remove("notePlayOn")})};break}B&&s.current.appendTask(I,B)},onPlayFinish(){n.current&&(n.current.progressTicks=0),c(!1)},onTurnCursor(){n.current&&d.current&&i(d.current.lookupPosition(n.current.progressTicks))}}),n.current.progressTicks=A};return e.jsxs("div",{className:"viewer",children:[e.jsx(J,{style:{position:"fixed",top:"10px",left:"10px"},icon:r?e.jsx(ee,{}):e.jsx(te,{}),onClick:k,disabled:!((w=l.value)!=null&&w.spartito)||!t,children:r?y.formatMessage({id:"common.pause"}):y.formatMessage({id:"common.play"})}),!l.loading&&l.value.pages.map((g,u)=>e.jsx(ie,{score:l.value,pageIndex:u,cursorPosition:o,onSeekPosition:f},u))]})},$e=x.memo(le);export{$e as default}; +import{r as x,j as e,a as E}from"./umi-37873494.js";import{T as F,S as V,a as W,r as Y,s as z,L as U}from"./index-a475ddbb.js";import{m as N}from"./parser-c740d6a8.js";import{S as _}from"./scheduler-a7fa9c3c.js";import{u as q,r as D,n as G}from"./index-92da7081.js";import{S as H}from"./schedulePool-cc4538c2.js";import{B as J}from"./button-1ef38c18.js";import{c as S}from"./_setToString-dbbee35a.js";import{S as X}from"./index-5cf0ced5.js";import{p as K}from"./index-03b68134.js";import{S as Q}from"./index-6cc9bc74.js";import{u as Z}from"./useAsync-6c98bbac.js";import{a as ee,P as te}from"./PlaySquareOutlined-04ce0d9a.js";import"./download-5fc3c841.js";import"./jszip.min-ed3d3f78.js";import"./useAsyncFn-ffd323fd.js";const se=({translateX:p=0,translateY:y,width:m,additionalLines:s,...o})=>e.jsxs("g",{...o,className:"staff-lines",transform:`translate(${p}, ${y})`,children:[new Array(5).fill(null).map((i,n)=>e.jsx("line",{x1:0,x2:m,y1:n-2,y2:n-2},n)),s&&s.map((i,n)=>e.jsx("g",{children:Array(Math.abs(i.n)).fill(null).map((d,r)=>e.jsx("line",{x1:i.left,x2:i.right,y1:i.n>0?3+r:-3-r,y2:i.n>0?3+r:-3-r},r))},n))]}),ne=x.memo(se),O=({score:p,page:y,pageIndex:m,system:s,systemIndex:o,staff:i,staffIndex:n})=>{var d;return e.jsx(e.Fragment,{children:e.jsxs("g",{className:S("staff",{moving:!1}),transform:`translate(0, ${i.top})`,children:[e.jsxs("g",{children:[e.jsx(ne,{translateY:i.staffY,width:s.width,additionalLines:i.additionalLines}),(d=i==null?void 0:i.measures)==null?void 0:d.map((r,c)=>{var t;return e.jsxs("g",{children:[n===0&&e.jsx("text",{x:r.left,y:Math.min(5,i.staffY-3),fontSize:c===0?1.4:.9,fill:"#e65019",children:s.headMeasureIndex+c+1}),e.jsx("g",{transform:`translate(0, ${i.staffY})`,children:e.jsx("g",{className:"tokens",children:(t=r==null?void 0:r.tokens)==null?void 0:t.filter(a=>F.includes(a.type)).map((a,l)=>e.jsxs("g",{className:S("token",{}),transform:`translate(${a.x}, ${a.y})`,id:a.id,onClick:()=>console.log(a),children:[a.voice?e.jsxs("title",{children:["voice-",a.voiceIndices.join(",")]}):null,e.jsx("use",{xlinkHref:`#score-token-def-${a.typeId}`})]},l))})})]},c)})]}),e.jsx("g",{className:"measure-bars",children:s.measureBars.map((r,c)=>e.jsx("g",{className:S("measure-bar"),transform:`translate(${r}, ${i.staffY-2})`,children:e.jsx("line",{x1:0,x2:0,y1:0,y2:4})},c))})]})})};x.memo(O);const re=p=>{var n,d;const{score:y,pageIndex:m,system:s,systemIndex:o}=p;if(s.staves.length===0)return e.jsx("g",{},o);const i=K(y.staffLayoutCode);return e.jsxs("g",{className:S("system",{}),transform:`translate(${s.left}, ${s.top})`,children:[s.backgroundImage&&!((n=s.staves[0])!=null&&n.backgroundImage)&&!((d=s.staves[0])!=null&&d.maskImage)&&e.jsx("image",{className:"background",href:s.backgroundImage,...s.imagePosition||{}}),s.staves.length>=2&&e.jsx("line",{className:"connection",x1:0,x2:0,y1:s.connectionLine.top,y2:s.connectionLine.bottom}),s.staves.map((r,c)=>e.jsxs("g",{className:S("staff"),transform:`translate(0, ${r.top})`,children:[!r.maskImage&&r.backgroundImage&&e.jsx("image",{className:"background",href:r.backgroundImage,...r.imagePosition||{}}),r.maskImage&&e.jsx("image",{className:"background",href:r.maskImage,...r.imagePosition||{}})]},"staff-"+c)),s.staves.map((r,c)=>e.jsx(O,{...p,staff:r,staffIndex:c},c)),e.jsx("g",{className:"measure-bars",children:s.measureBars.map((r,c)=>e.jsx("g",{transform:`translate(${r}, 0)`,children:i.mask(s.staffMask).conjunctions.map((t,a)=>{const l=s.staves[a],f=s.staves[a+1];if(l&&f)return e.jsx("g",{transform:`translate(0, ${l.top+l.staffY+2})`,children:e.jsx("line",{className:S("staff-layout-measure-bar",{dashed:t===1,blank:t===0}),x1:"0",x2:"0",y1:0,y2:f.top+f.staffY-(l.top+l.staffY)-4})},a)})},c))}),e.jsx(X,{layout:i.mask(s.staffMask),positions:s.staffPositions,nameDict:(!s.prev||s.staffMask!==s.prev.staffMask)&&y.instrumentDict})]},o)},ae=x.memo(re),oe=({score:p,pageIndex:y,cursorPosition:m,onSeekPosition:s})=>{var d,r,c;const o=p.pages[y],i=x.useRef(null);if(!o)return null;const n=x.useMemo(()=>{let t=0;if(m){let a=0;for(const[l,f]of p.pages.entries()){if(m.system>=a-1&&m.system{i.current&&i.current.scrollIntoView({block:"center",behavior:"smooth"})},[i.current,n]),e.jsx("div",{children:e.jsxs("svg",{className:S("graph",{}),style:{objectFit:"contain"},viewBox:`0 0 ${o.width} ${o.height}`,children:[e.jsx(Q,{}),(d=o==null?void 0:o.systems)==null?void 0:d.map((t,a)=>e.jsx(ae,{score:p,page:o,pageIndex:y,system:t,systemIndex:a},a)),(o==null?void 0:o.semantics)&&e.jsx("g",{children:(r=o==null?void 0:o.semantics)==null?void 0:r.map((t,a)=>{var l,f,b,k,v,w;if(t.semantic===V.rect_Text)return e.jsx("g",{transform:`translate(${t.x}, ${t.y}) ${(l=t.extension)!=null&&l.theta?`rotate(${((f=t.extension)==null?void 0:f.theta)*180/Math.PI})`:""}`,color:"rgba(25, 175, 230, 0.6)",children:e.jsxs("text",{dominantBaseline:"hanging",x:0,y:-((b=t.extension)==null?void 0:b.height)/2,textAnchor:"middle",style:{fontSize:(k=t.extension)==null?void 0:k.height},children:[(v=t.extension)==null?void 0:v.text,e.jsx("title",{children:((w=t.extension)==null?void 0:w.type)||t.semantic})]})},a)})}),(o==null?void 0:o.tokens)&&e.jsx("g",{children:(c=o==null?void 0:o.tokens)==null?void 0:c.map((t,a)=>{if(t.type===W.Text)return e.jsx("g",{transform:`translate(${t.x}, ${t.y})`,color:"rgba(25, 175, 230, 0.6)",className:"token",children:e.jsxs("text",{dominantBaseline:"hanging",x:0,y:-t.fontSize/2,textAnchor:"middle",style:{fontSize:t.fontSize},className:S(t.textType),children:[t.text,e.jsx("title",{children:t.textType})]})},a)})}),o.systems.map((t,a)=>{const l=p.pages.slice(0,y).reduce((f,b)=>f+b.systems.length,0)+a;return e.jsxs("g",{className:S("system"),transform:`translate(${t.left}, ${t.top})`,children:[e.jsx("rect",{style:{opacity:0},x:0,y:t.noteRange.top,width:t.width,height:t.noteRange.bottom-t.noteRange.top,onClick:f=>{const b=f.target,k=b.getBoundingClientRect(),v=f.clientX-k.left,w=b.getBBox(),g=v/k.width*w.width;s({system:l,x:g})}}),(m==null?void 0:m.system)===l?e.jsx("line",{ref:i,transform:`translate(${m.x}, 0)`,x1:0,x2:0,y1:t.noteRange.top,y2:t.noteRange.bottom,style:{stroke:"lightblue",strokeWidth:1}}):null]},a)})]})})},ie=x.memo(oe),le=p=>{var w;const y=q(),m=E(),s=x.useRef(new H(performance)),[o,i]=x.useState(),n=x.useRef(null),d=x.useRef(null),[r,c]=x.useState(!1),[t,a]=x.useState(!1),l=Z(async()=>{var j,$,M,A;const g=(m==null?void 0:m.id)||(($=(j=p==null?void 0:p.match)==null?void 0:j.params)==null?void 0:$.id),u=await D.get(`/api/musicSets/${g}`);if((M=u==null?void 0:u.content)!=null&&M.scoreURL){const R=await(await fetch(G(u.content.scoreURL))).json(),T=Y(R,z);return T.assemble(((A=T.settings)==null?void 0:A.semanticConfidenceThreshold)??1),T}return u},[]);x.useEffect(()=>{N.MidiAudio.WebAudio.empty()&&N.MidiAudio.loadPlugin({soundfontUrl:"/soundfont/",api:"webaudio"}).then(()=>{a(!0),console.debug("Soundfont loaded.")}),v()},[]);const f=x.useCallback(async g=>{if(!n.current){console.log("please create midi player first");return}const u=n.current.isPlaying;u&&(n.current.pause(),await new Promise(j=>setTimeout(j,0)),document.querySelectorAll(".notePlayOn").forEach(j=>j.classList.remove("notePlayOn"))),n.current.progressTicks=d.current.lookupTick(g),u&&k()},[]),b=async()=>{var g,u,j,$;(u=(g=N.MidiAudio.WebAudio).needsWarmup)!=null&&u.call(g)&&await(($=(j=N.MidiAudio.WebAudio).awaitWarmup)==null?void 0:$.call(j))},k=async()=>{var g;(g=n.current)!=null&&g.isPlaying?(n.current.pause(),c(!1)):(await b(),v(),n.current.play({nextFrame:()=>(d.current&&i(d.current.lookupPosition(n.current.progressTicks)),new Promise(u=>requestAnimationFrame(()=>u())))}),c(!0))},v=()=>{var R,T;if(!((T=(R=l.value)==null?void 0:R.systems)!=null&&T.length))return;const{notation:g,tokenMap:u}=l.value.spartito.perform(),j=l.value.getMeasureLayout(),$=j?j.serialize(U.Full):Array(g.measures.length).fill(null).map((h,I)=>I+1),M=g.toPerformingNotationWithEvents($);Math.round(6e7/M.tempos[0].tempo),d.current=_.createFromNotation(M,u);const A=n.current?n.current.progressTicks:0;n.current&&n.current.dispose(),n.current=new N.MidiPlayer(M,{cacheSpan:200,onMidi:(h,I)=>{let B=null;switch(h.subtype){case"noteOn":N.MidiAudio.noteOn(h.channel,h.noteNumber,h.velocity,I),B=()=>{var L;return(L=h==null?void 0:h.ids)==null?void 0:L.map(C=>{const P=document.getElementById(C);P&&P.classList.add("notePlayOn")})};break;case"noteOff":N.MidiAudio.noteOff(h.channel,h.noteNumber,I),B=()=>{var L;return(L=h==null?void 0:h.ids)==null?void 0:L.map(C=>{const P=document.getElementById(C);P&&P.classList.remove("notePlayOn")})};break}B&&s.current.appendTask(I,B)},onPlayFinish(){n.current&&(n.current.progressTicks=0),c(!1)},onTurnCursor(){n.current&&d.current&&i(d.current.lookupPosition(n.current.progressTicks))}}),n.current.progressTicks=A};return e.jsxs("div",{className:"viewer",children:[e.jsx(J,{style:{position:"fixed",top:"10px",left:"10px"},icon:r?e.jsx(ee,{}):e.jsx(te,{}),onClick:k,disabled:!((w=l.value)!=null&&w.spartito)||!t,children:r?y.formatMessage({id:"common.pause"}):y.formatMessage({id:"common.play"})}),!l.loading&&l.value.pages.map((g,u)=>e.jsx(ie,{score:l.value,pageIndex:u,cursorPosition:o,onSeekPosition:f},u))]})},$e=x.memo(le);export{$e as default}; diff --git a/dist/assets/index-81cb47f8.js b/dist/assets/index-cc0634fc.js similarity index 97% rename from dist/assets/index-81cb47f8.js rename to dist/assets/index-cc0634fc.js index 4b44cddf0ed13f0c8a1f62e9c5515cc231ce4673..61033634964886ed1846f59ecde47cbf043c268c 100644 --- a/dist/assets/index-81cb47f8.js +++ b/dist/assets/index-cc0634fc.js @@ -1 +1 @@ -import{r as c,_ as h,g as G}from"./umi-91f9d113.js";import{q as J,p as K,l as X,r as R,s as Q,ay as V,a as Y,C as Z,c as x,b as g,d as ee,aI as te,h as ae,M as ne,aJ as re,G as oe,N as ce,aD as se,ac as le,aE as ie,aC as ue}from"./_setToString-397d22bb.js";function de(a){return Object.keys(a).reduce(function(e,t){return(t.startsWith("data-")||t.startsWith("aria-")||t==="role")&&!t.startsWith("data-__")&&(e[t]=a[t]),e},{})}function fe(a,e,t){return e=R(e),Q(a,V()?Reflect.construct(e,t||[],R(a).constructor):e.apply(a,t))}var me=function(a){J(e,a);function e(){var t;return K(this,e),t=fe(this,e,arguments),t.state={error:void 0,info:{componentStack:""}},t}return X(e,[{key:"componentDidCatch",value:function(n,r){this.setState({error:n,info:r})}},{key:"render",value:function(){var n=this.props,r=n.message,s=n.description,l=n.children,o=this.state,d=o.error,m=o.info,i=m&&m.componentStack?m.componentStack:null,p=typeof r>"u"?(d||"").toString():r,b=typeof s>"u"?i:s;return d?c.createElement(he,{type:"error",message:p,description:c.createElement("pre",null,b)}):l}}]),e}(c.Component);const pe=me;var Ce=globalThis&&globalThis.__rest||function(a,e){var t={};for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&e.indexOf(n)<0&&(t[n]=a[n]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(a);r"u"){t&&console.warn("unable to use e.clipboardData"),t&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var p=A[e.format]||A.default;window.clipboardData.setData(p,a)}else i.clipboardData.clearData(),i.clipboardData.setData(e.format,a);e.onCopy&&(i.preventDefault(),e.onCopy(i.clipboardData))}),document.body.appendChild(o),s.selectNodeContents(o),l.addRange(s);var m=document.execCommand("copy");if(!m)throw new Error("copy command was unsuccessful");d=!0}catch(i){t&&console.error("unable to copy using execCommand: ",i),t&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(e.format||"text",a),e.onCopy&&e.onCopy(window.clipboardData),d=!0}catch(p){t&&console.error("unable to copy using clipboardData: ",p),t&&console.error("falling back to prompt"),n=Ne("message"in e?e.message:we),window.prompt(n,a)}}finally{l&&(typeof l.removeRange=="function"?l.removeRange(s):l.removeAllRanges()),o&&document.body.removeChild(o),r()}return d}var Ie=Se;const Oe=G(Ie);export{he as A,de as g,Oe as w}; +import{r as c,_ as h,g as G}from"./umi-37873494.js";import{q as J,p as K,l as X,r as R,s as Q,ay as V,a as Y,C as Z,c as x,b as g,d as ee,aI as te,h as ae,M as ne,aJ as re,G as oe,N as ce,aD as se,ac as le,aE as ie,aC as ue}from"./_setToString-dbbee35a.js";function de(a){return Object.keys(a).reduce(function(e,t){return(t.startsWith("data-")||t.startsWith("aria-")||t==="role")&&!t.startsWith("data-__")&&(e[t]=a[t]),e},{})}function fe(a,e,t){return e=R(e),Q(a,V()?Reflect.construct(e,t||[],R(a).constructor):e.apply(a,t))}var me=function(a){J(e,a);function e(){var t;return K(this,e),t=fe(this,e,arguments),t.state={error:void 0,info:{componentStack:""}},t}return X(e,[{key:"componentDidCatch",value:function(n,r){this.setState({error:n,info:r})}},{key:"render",value:function(){var n=this.props,r=n.message,s=n.description,l=n.children,o=this.state,d=o.error,m=o.info,i=m&&m.componentStack?m.componentStack:null,p=typeof r>"u"?(d||"").toString():r,b=typeof s>"u"?i:s;return d?c.createElement(he,{type:"error",message:p,description:c.createElement("pre",null,b)}):l}}]),e}(c.Component);const pe=me;var Ce=globalThis&&globalThis.__rest||function(a,e){var t={};for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&e.indexOf(n)<0&&(t[n]=a[n]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(a);r"u"){t&&console.warn("unable to use e.clipboardData"),t&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var p=A[e.format]||A.default;window.clipboardData.setData(p,a)}else i.clipboardData.clearData(),i.clipboardData.setData(e.format,a);e.onCopy&&(i.preventDefault(),e.onCopy(i.clipboardData))}),document.body.appendChild(o),s.selectNodeContents(o),l.addRange(s);var m=document.execCommand("copy");if(!m)throw new Error("copy command was unsuccessful");d=!0}catch(i){t&&console.error("unable to copy using execCommand: ",i),t&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(e.format||"text",a),e.onCopy&&e.onCopy(window.clipboardData),d=!0}catch(p){t&&console.error("unable to copy using clipboardData: ",p),t&&console.error("falling back to prompt"),n=Ne("message"in e?e.message:we),window.prompt(n,a)}}finally{l&&(typeof l.removeRange=="function"?l.removeRange(s):l.removeAllRanges()),o&&document.body.removeChild(o),r()}return d}var Ie=Se;const Oe=G(Ie);export{he as A,de as g,Oe as w}; diff --git a/dist/assets/index-9be53150.js b/dist/assets/index-d618a72b.js similarity index 97% rename from dist/assets/index-9be53150.js rename to dist/assets/index-d618a72b.js index 4677b1b37aa8202e84b75d0c01331090b1e26b96..f74d3674911f4fe18c455551db844bf38bd4f94a 100644 --- a/dist/assets/index-9be53150.js +++ b/dist/assets/index-d618a72b.js @@ -1 +1 @@ -import{r as d,j as e,a as G}from"./umi-91f9d113.js";import{p as q,m as L}from"./parser-f1e7dbfb.js";import{S as H}from"./scheduler-a7fa9c3c.js";import{p as J}from"./processCompressedAESFile-0057a8e1.js";import{S as U}from"./index-37861f16.js";import{T as X,S as K,a as Q,r as Z,L as ee,s as se}from"./index-4514925e.js";import{c as S}from"./_setToString-397d22bb.js";import{t as te,u as D}from"./index-b284aaac.js";import{u as ne}from"./useIntersection-44800be2.js";import{u as re}from"./useAsync-ce2d9ddd.js";import"./useAsyncFn-4bca5482.js";class ce{timer;tasks={};handlers={};constructor(o=Date){this.timer=o}clear(){Object.values(this.handlers).forEach(o=>clearTimeout(o)),this.tasks={},this.handlers={}}getTask(o){const i=Math.max(o-this.timer.now(),0);return this.tasks[o]||(this.tasks[o]=new Promise(c=>{this.handlers[o]=setTimeout(c,i)}).then(()=>{delete this.tasks[o],delete this.handlers[o]})),this.tasks[o]}appendTask(o,i){this.tasks[o]=this.getTask(o).then(i)}}const ie=({translateX:a=0,translateY:o,width:i,additionalLines:c,...k})=>e.jsxs("g",{...k,className:"staff-lines",transform:`translate(${a}, ${o})`,children:[new Array(5).fill(null).map((s,r)=>e.jsx("line",{x1:0,x2:i,y1:r-2,y2:r-2},r)),c&&c.map((s,r)=>e.jsx("g",{children:Array(Math.abs(s.n)).fill(null).map((x,n)=>e.jsx("line",{x1:s.left,x2:s.right,y1:s.n>0?3+n:-3-n,y2:s.n>0?3+n:-3-n},n))},r))]}),oe=d.memo(ie),_=({score:a,page:o,pageIndex:i,system:c,systemIndex:k,staff:s,staffIndex:r,showSource:x})=>{var l;const n=a.pages.reduce((g,f,p)=>p{var M,w;return j+(((w=(M=y.staves[0])==null?void 0:M.measures)==null?void 0:w.length)||0)},0):p===i?g+f.systems.reduce((j,y,C)=>{var M,w;return C{var p;return e.jsxs("g",{children:[!x&&r===0&&f===0&&e.jsx("text",{x:g.left,y:Math.min(5,s.staffY-3),fontSize:f===0?1.4:.9,fill:"#e65019",children:n+f+1}),e.jsx("g",{transform:`translate(0, ${s.staffY})`,children:e.jsx("g",{className:"tokens",children:(p=g==null?void 0:g.tokens)==null?void 0:p.filter(j=>X.includes(j.type)).map((j,y)=>e.jsx("g",{className:S("token",{}),style:x?{color:"transparent"}:{},transform:`translate(${j.x}, ${j.y})`,id:j.id,onClick:()=>console.log(j),children:e.jsx("use",{xlinkHref:`#score-token-def-${j.typeId}`})},y))})})]},f)})]}),x?null:e.jsx("g",{className:"measure-bars",children:c.measureBars.map((g,f)=>e.jsx("g",{className:S("measure-bar"),transform:`translate(${g}, ${s.staffY-2})`,children:e.jsx("line",{x1:0,x2:0,y1:0,y2:4})},f))})]})})};d.memo(_);const ae=({layout:a,positions:o,nameDict:i={},...c})=>{const k=d.useMemo(()=>a.groups.map(s=>{const r=o[s.range[0]],x=o[s.range[1]];return{key:s.key,type:s.group.type,level:s.group.level||0,top:r.y-r.radius,bottom:x.y+x.radius,name:i[s.key]}}),[a,o,i]);return e.jsx("g",{...c,className:"staff-brackets",onClick:()=>{},children:k.map(s=>e.jsxs("g",{className:"group",transform:`translate(${s.level*-1.2}, 0)`,children:[s.type===2&&e.jsxs("g",{className:"bracket",children:[e.jsx("rect",{x:"-1.2",y:s.top,width:"0.45",height:s.bottom-s.top}),e.jsx("g",{transform:`translate(-1.2, ${s.top-.21})`,children:e.jsx("path",{transform:"scale(0.0040, -0.0040)",d:"M0 -56v91c0 12 10 21 22 21h43c164 0 281 136 377 272c10 14 32 -1 22 -15c-103 -145 -222 -369 -399 -369h-65z"})}),e.jsx("g",{transform:`translate(-1.2, ${s.bottom+.21})`,children:e.jsx("path",{transform:"scale(0.0040, -0.0040)",d:"M0 56h65c177 0 296 -224 399 -369c10 -14 -12 -29 -22 -15c-96 136 -213 272 -377 272h-43c-12 0 -22 9 -22 21v91z"})})]}),s.type===3&&e.jsxs("g",{className:"square",children:[e.jsx("line",{x1:"-0.9",x2:"-0.9",y1:s.top,y2:s.bottom,strokeWidth:"0.1"}),e.jsx("line",{x1:"-0.9",x2:"0",y1:s.top,y2:s.top,strokeWidth:"0.1"}),e.jsx("line",{x1:"-0.9",x2:"0",y1:s.bottom,y2:s.bottom,strokeWidth:"0.1"})]}),s.type===1&&e.jsx("g",{className:"brace",transform:`translate(-0.2, ${(s.top+s.bottom)/2})`,children:e.jsx("path",{transform:`scale(0.0040, ${-.004*(s.bottom-s.top)/15.1825})`,d:"M-208 -1336c0 312 124 616 124 912c0 156 -36 300 -144 416c0 4 -4 4 -4 8s4 4 4 8c108 116 144 260 144 416c0 296 -124 600 -124 912c0 212 52 420 196 576c16 16 40 -8 24 -24c-108 -120 -144 -264 -144 -420c0 -292 116 -588 116 -896c0 -212 -48 -416 -188 -572c140 -156 188 -360 188 -572c0 -308 -116 -604 -116 -896c0 -156 36 -300 144 -420c16 -16 -8 -40 -24 -24c-144 156 -196 364 -196 576z"})}),s.name&&e.jsx("g",{className:"name",transform:`translate(-2, ${(s.top+s.bottom)/2+1})`,children:e.jsx("text",{fontSize:2,children:s.name})})]},s.key))})},le=a=>{var x,n;const{score:o,pageIndex:i,system:c,systemIndex:k,showSource:s}=a;if(c.staves.length===0)return e.jsx("g",{},k);const r=q(o.staffLayoutCode);return e.jsxs("g",{className:S("system",{}),transform:`translate(${c.left}, ${c.top})`,children:[!s&&c.backgroundImage&&!((x=c.staves[0])!=null&&x.backgroundImage)&&!((n=c.staves[0])!=null&&n.maskImage)&&e.jsx("image",{className:"background",href:c.backgroundImage,...c.imagePosition||{}}),!s&&c.staves.length>=2&&e.jsx("line",{className:"connection",x1:0,x2:0,y1:c.connectionLine.top,y2:c.connectionLine.bottom}),!s&&c.staves.map((l,g)=>e.jsxs("g",{className:S("staff"),transform:`translate(0, ${l.top})`,children:[!s&&!l.maskImage&&l.backgroundImage&&e.jsx("image",{className:"background",href:l.backgroundImage,...l.imagePosition||{}}),!s&&l.maskImage&&e.jsx("image",{className:"background",href:l.maskImage,...l.imagePosition||{}})]},"staff-"+g)),c.staves.map((l,g)=>e.jsx(_,{...a,staff:l,staffIndex:g,showSource:s},g)),s?null:e.jsx("g",{className:"measure-bars",children:c.measureBars.map((l,g)=>e.jsx("g",{transform:`translate(${l}, 0)`,children:r.mask(c.staffMask).conjunctions.map((f,p)=>{const j=c.staves[p],y=c.staves[p+1];if(j&&y)return e.jsx("g",{transform:`translate(0, ${j.top+j.staffY+2})`,children:e.jsx("line",{className:S("staff-layout-measure-bar",{dashed:f===1,blank:f===0}),x1:"0",x2:"0",y1:0,y2:y.top+y.staffY-(j.top+j.staffY)-4})},p)})},g))}),s?null:e.jsx(ae,{layout:r.mask(c.staffMask),positions:c.staffPositions,nameDict:!c.prev||c.staffMask!==c.prev.staffMask?o.instrumentDict:{}})]},k)},de=d.memo(le);const xe=()=>e.jsxs("defs",{className:"score-token-defs",children:[e.jsx("g",{id:"score-token-def-clefs-G",className:"token",children:e.jsx("text",{x:"-1.3",children:""})}),e.jsx("g",{id:"score-token-def-clefs-F",className:"token",children:e.jsx("text",{x:"-1.06",children:""})}),e.jsx("g",{id:"score-token-def-clefs-C",className:"token",children:e.jsx("text",{x:"-1.06",children:""})}),e.jsx("g",{id:"score-token-def-timesig-C44",className:"token",children:e.jsx("text",{x:"-0.9",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-timesig-C22",className:"token",children:e.jsx("text",{x:"-0.9",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-timesig0",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"0"})}),e.jsx("g",{id:"score-token-def-timesig1",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"1"})}),e.jsx("g",{id:"score-token-def-timesig2",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"2"})}),e.jsx("g",{id:"score-token-def-timesig3",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"3"})}),e.jsx("g",{id:"score-token-def-timesig4",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"4"})}),e.jsx("g",{id:"score-token-def-timesig5",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"5"})}),e.jsx("g",{id:"score-token-def-timesig6",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"6"})}),e.jsx("g",{id:"score-token-def-timesig7",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"7"})}),e.jsx("g",{id:"score-token-def-timesig8",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"8"})}),e.jsx("g",{id:"score-token-def-timesig9",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"9"})}),e.jsx("g",{id:"score-token-def-octave-a",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"𝄶---"})}),e.jsx("g",{id:"score-token-def-octave-b",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"𝄷---"})}),e.jsx("g",{id:"score-token-def-octave-0",className:"token",children:e.jsx("text",{x:"-0.7",y:"0.6",className:"plain",children:"┐"})}),e.jsx("g",{id:"score-token-def-octave-8",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"8-----"})}),e.jsx("g",{id:"score-token-def-n0",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"0"})})}),e.jsx("g",{id:"score-token-def-n1",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"1"})})}),e.jsx("g",{id:"score-token-def-n2",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"2"})})}),e.jsx("g",{id:"score-token-def-n3",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"3"})})}),e.jsx("g",{id:"score-token-def-n4",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"4"})})}),e.jsx("g",{id:"score-token-def-n5",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"5"})})}),e.jsx("g",{id:"score-token-def-n6",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"6"})})}),e.jsx("g",{id:"score-token-def-n7",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"7"})})}),e.jsx("g",{id:"score-token-def-n8",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"8"})})}),e.jsx("g",{id:"score-token-def-n9",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"9"})})}),e.jsx("g",{id:"score-token-def-accidentals-sharp",className:"token",children:e.jsx("text",{x:"-0.55",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-doublesharp",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-natural",className:"token",children:e.jsx("text",{x:"-0.3",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-flat",className:"token",children:e.jsx("text",{x:"-0.3",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-flatflat",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsxs("g",{id:"score-token-def-key-sharp",className:"token",children:[e.jsx("text",{x:"-0.55",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsxs("g",{id:"score-token-def-key-natural",className:"token",children:[e.jsx("text",{x:"-0.3",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsxs("g",{id:"score-token-def-key-flat",className:"token",children:[e.jsx("text",{x:"-0.3",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsx("g",{id:"score-token-def-noteheads-s0",className:"token",children:e.jsx("text",{x:"-0.913",children:""})}),e.jsx("g",{id:"score-token-def-noteheads-s1",className:"token",children:e.jsx("text",{x:"-0.632",children:""})}),e.jsx("g",{id:"score-token-def-noteheads-s2",className:"token",children:e.jsx("text",{x:"-0.599",children:""})}),e.jsxs("g",{id:"score-token-def-noteheads-s1-u",className:"token",children:[e.jsx("text",{x:"-1.264",children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"-0.06",y2:"-3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s2-u",className:"token",children:[e.jsx("text",{x:"-1.198",children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"-0.06",y2:"-3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s1-d",className:"token",children:[e.jsx("text",{children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"0.16",y2:"3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s2-d",className:"token",children:[e.jsx("text",{children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"0.16",y2:"3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsx("g",{id:"score-token-def-rests-M1",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-0",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-0o",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-1o",className:"token",children:e.jsx("text",{x:"-0.75",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-rests-2",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-3",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-4",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-5",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-6",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-flags-u3",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u4",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u5",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u6",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u7",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u8",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-slur-begin",className:"token",children:e.jsx("path",{d:"M0 0C0.5 -0.5 1 -0.6 1.5 -0.6L1.5 -0.4C1 -0.4 0.5 -0.4 0 0z"})}),e.jsx("g",{id:"score-token-def-slur-end",className:"token",children:e.jsx("path",{d:"M0 0C-0.5 -0.5 -1 -0.6 -1.5 -0.6L-1.5 -0.4C-1 -0.4 -0.5 -0.4 0 0z"})}),e.jsxs("g",{id:"score-token-def-volta-left",className:"token",children:[e.jsx("text",{x:"-0.25",y:"-0.5",children:""}),e.jsx("text",{x:"-0.25",y:"0.5",children:""}),e.jsx("line",{x1:"-0.5",x2:"-0.5",y1:"-2",y2:"2"})]}),e.jsxs("g",{id:"score-token-def-volta-right",className:"token",children:[e.jsx("text",{x:"-0.25",y:"-0.5",children:""}),e.jsx("text",{x:"-0.25",y:"0.5",children:""}),e.jsx("line",{x1:"0.5",x2:"0.5",y1:"-2",y2:"2"})]}),e.jsxs("g",{id:"score-token-def-bar-terminal",className:"token",children:[e.jsx("rect",{x:"-0.064",y:"-2",width:"0.128",height:"4"}),e.jsx("rect",{x:"0.27",y:"-2",width:"0.4",height:"4"})]}),e.jsxs("g",{id:"score-token-def-bar-segment",className:"token",children:[e.jsx("rect",{x:"-0.359",y:"-2",width:"0.128",height:"4"}),e.jsx("rect",{x:"0.231",y:"-2",width:"0.128",height:"4"})]}),e.jsx("g",{id:"score-token-def-dot",className:"token",children:e.jsx("text",{children:""})}),e.jsxs("g",{id:"score-token-def-dotdot",className:"token",children:[e.jsx("text",{children:""}),e.jsx("text",{x:"0.8",children:""})]}),e.jsx("g",{id:"score-token-def-f",className:"token",children:e.jsx("text",{x:"-0.6",y:"0.5",children:"f"})}),e.jsx("g",{id:"score-token-def-m",className:"token",children:e.jsx("text",{x:"-0.9",y:"0.5",children:"m"})}),e.jsx("g",{id:"score-token-def-n",className:"token",children:e.jsx("text",{x:"-0.9",y:"0.5",children:"n"})}),e.jsx("g",{id:"score-token-def-p",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"p"})}),e.jsx("g",{id:"score-token-def-r",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"r"})}),e.jsx("g",{id:"score-token-def-s",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"s"})}),e.jsx("g",{id:"score-token-def-z",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"z"})}),e.jsx("g",{id:"score-token-def-scripts-ufermata",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-ushortfermata",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-sforzato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-staccato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-ustaccatissimo",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-turn",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-trill",className:"token",children:e.jsx("text",{y:"0.5",children:""})}),e.jsx("g",{id:"score-token-def-scripts-segno",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-coda",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-arpeggio",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:""})}),e.jsx("g",{id:"score-token-def-scripts-prall",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-mordent",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-umarcato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-tenuto",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-uportato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-pedal-star",className:"token",children:e.jsx("text",{x:"-0.78",y:"0.78",children:""})}),e.jsx("g",{id:"score-token-def-pedal-Ped",className:"token",children:e.jsx("text",{x:"-1.6",y:"0.7",children:""})}),e.jsx("g",{id:"score-token-def-BOS",className:"token",children:e.jsx("text",{x:"-3",y:"1.04",children:"▶"})}),e.jsx("g",{id:"score-token-def-BeamLeft",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"├"})}),e.jsx("g",{id:"score-token-def-BeamContinue",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"┼"})}),e.jsx("g",{id:"score-token-def-BeamRight",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"┤"})}),e.jsx("g",{id:"score-token-def-GraceNotehead",className:"token",children:e.jsx("text",{x:"-0.36",className:"s-grace",children:""})})]}),he=d.memo(xe),me=({score:a,pageIndex:o,cursorPosition:i,onSeekPosition:c,getPage:k,showSource:s})=>{var W,I,u;const r=d.useRef(null),x=ne(r,{root:null,rootMargin:"100px",threshold:.1}),n=a.pages[o],l=d.useRef(null),[g]=d.useState(!1),[f,p]=d.useState(0),j=d.useMemo(()=>{let t=0;if(i){let h=0;for(const[b,N]of a.pages.entries()){if(i.system>=h-1&&i.system{l.current&&l.current.scrollIntoView({block:"center",behavior:"smooth"})},[l.current,j]),d.useEffect(()=>{k&&k(f)},[f]);const y=n.source.dimensions.width/n.source.interval,C=n.source.dimensions.height/n.source.interval,M=n.width,w=n.height,[P,O,z,A,F,E]=n.source.matrix,Y=[P,O,z,A,-1/2*P*y+-1/2*z*C+1/2*M+F,-1/2*O*y+-1/2*A*C+1/2*w+E];return n.systems.length>0?e.jsx("div",{ref:r,children:x!=null&&x.isIntersecting?e.jsxs("svg",{className:S("graph",{}),style:{objectFit:"contain"},viewBox:`0 0 ${n.width} ${n.height}`,children:[e.jsx(he,{}),s?e.jsx("image",{x:0,y:0,width:y,height:C,href:te(n.source.url,{width:414}),transform:`matrix(${Y.join(",")})`}):null,!s||s&&!a.pages.some(t=>t.source.needGauge)?(W=n==null?void 0:n.systems)==null?void 0:W.map((t,h)=>e.jsx(de,{score:a,page:n,pageIndex:o,system:t,systemIndex:h,showSource:s},h)):null,g&&(n==null?void 0:n.semantics)&&e.jsx("g",{children:(I=n==null?void 0:n.semantics)==null?void 0:I.map((t,h)=>{var b,N,$,m,v;if(t.semantic===K.rect_Text)return e.jsx("g",{transform:`translate(${t.x}, ${t.y}) ${(b=t.extension)!=null&&b.theta?`rotate(${((N=t.extension)==null?void 0:N.theta)*180/Math.PI})`:""}`,color:"rgba(25, 175, 230, 0.6)",children:e.jsxs("text",{dominantBaseline:"hanging",x:0,y:-t.extension.height/2,textAnchor:"middle",style:{fontSize:($=t.extension)==null?void 0:$.height},children:[(m=t.extension)==null?void 0:m.text,e.jsx("title",{children:((v=t.extension)==null?void 0:v.type)||t.semantic})]})},h)})}),!s&&(n==null?void 0:n.tokens)&&e.jsx("g",{children:(u=n==null?void 0:n.tokens)==null?void 0:u.map((t,h)=>{if(t.type===Q.Text)return e.jsx("g",{transform:`translate(${t.x}, ${t.y})`,color:"rgba(25, 175, 230, 0.6)",className:"token",children:e.jsxs("text",{dominantBaseline:"hanging",x:0,y:-t.fontSize/2,textAnchor:"middle",style:{fontSize:t.fontSize},className:S(t.textType),children:[t.text,e.jsx("title",{children:t.textType})]})},h)})}),n.systems.map((t,h)=>{const b=a.pages.slice(0,o).reduce((N,$)=>N+$.systems.length,0)+h;return e.jsxs("g",{className:S("system"),transform:`translate(${t.left}, ${t.top})`,children:[e.jsx("rect",{style:{opacity:0},x:0,y:t.noteRange.top,width:t.width,height:t.noteRange.bottom-t.noteRange.top,onClick:N=>{const $=N.target,m=$.getBoundingClientRect(),v=N.clientX-m.left,B=$.getBBox(),T=v/m.width*B.width;c({system:b,x:T})}}),(i==null?void 0:i.system)===b?e.jsx("line",{ref:l,transform:`translate(${i.x}, 0)`,x1:0,x2:0,y1:t.noteRange.top,y2:t.noteRange.bottom,style:{stroke:"rgb(173 216 230 / 80%)",strokeWidth:1}}):null]},h)})]}):e.jsx("svg",{className:"graph",style:{objectFit:"contain"},viewBox:`0 0 ${n.width} ${n.height}`})}):e.jsx("img",{src:n.source.url,alt:n.source.name,style:{width:"100%"}})},je=d.memo(me),ge=({score:a,bpmValue:o})=>{var W,I;const i=D(),c=d.useRef(new ce(performance)),[k,s]=d.useState(null),r=d.useRef(null),x=d.useRef(null),[n,l]=d.useState(!1),[g,f]=d.useState(!1),[p,j]=d.useState(o||((W=a==null?void 0:a.spartito)==null?void 0:W.headBPM)),[y,C]=d.useState(!1),[M,w]=d.useState(1),[P,O]=d.useState(!0);d.useEffect(()=>{Number.isFinite(o)&&j(o)},[o]),d.useEffect(()=>(L.MidiAudio.WebAudio.empty()?L.MidiAudio.loadPlugin({soundfontUrl:"/soundfont/",api:"webaudio"}).then(()=>{f(!0),console.debug("Soundfont loaded.")}):f(!0),()=>{r.current&&r.current.dispose()}),[]);const z=d.useCallback(async u=>{(!r.current||!x.current)&&E();const t=r.current.isPlaying;t&&(r.current.pause(),await new Promise(h=>setTimeout(h,0)),document.querySelectorAll(".notePlayOn").forEach(h=>h.classList.remove("notePlayOn"))),r.current.progressTicks=x.current.lookupTick(u),t&&F()},[x.current]),A=async()=>{var u,t,h,b;(t=(u=L.MidiAudio.WebAudio).needsWarmup)!=null&&t.call(u)&&await((b=(h=L.MidiAudio.WebAudio).awaitWarmup)==null?void 0:b.call(h))},F=async()=>{var u,t;!((u=a.systems)!=null&&u.length)||!((t=a.spartito)!=null&&t.regulated)||!g||((!r.current||y)&&(C(!1),E()),r.current?r.current.isPlaying?(r.current.pause(),l(!1)):(await A(),r.current.play({nextFrame:()=>(r.current&&x.current&&s(x.current.lookupPosition(r.current.progressTicks)),new Promise(h=>requestAnimationFrame(()=>h())))}),l(!0)):console.log("暂时无法播放"))},E=()=>{const{notation:u,tokenMap:t}=a.spartito.perform(),h=a.getMeasureLayout(),b=h?h.serialize(ee.Full):Array(u.measures.length).fill(null).map((m,v)=>v+1),N=u.toPerformingNotationWithEvents(b);N.scaleTempo({headTempo:6e7/p}),x.current=H.createFromNotation(N,t);const $=r.current?r.current.progressTicks:0;r.current&&r.current.dispose(),r.current=new L.MidiPlayer(N,{cacheSpan:200,onMidi:(m,v)=>{let B=null;switch(m.subtype){case"noteOn":m.channel!=null&&m.noteNumber!=null&&m.velocity!=null&&L.MidiAudio.noteOn(m.channel,m.noteNumber,m.velocity,v),B=()=>{var T;return(T=m==null?void 0:m.ids)==null?void 0:T.map(V=>{const R=document.getElementById(V);R&&R.classList.add("notePlayOn")})};break;case"noteOff":m.channel!=null&&m.noteNumber!=null&&L.MidiAudio.noteOff(m.channel,m.noteNumber,v),B=()=>{var T;return(T=m==null?void 0:m.ids)==null?void 0:T.map(V=>{const R=document.getElementById(V);R&&R.classList.remove("notePlayOn")})};break}B&&c.current.appendTask(v,B)},onPlayFinish(){r.current&&(r.current.progressTicks=0),l(!1)},onTurnCursor(){r.current&&x.current&&s(x.current.lookupPosition(r.current.progressTicks))}}),r.current.progressTicks=$},Y=u=>{w(u+1)};return e.jsx("div",{className:"viewer-page",children:e.jsx("div",{style:{overflowY:"hidden"},children:e.jsxs("div",{className:"score-viewer",children:[(I=a==null?void 0:a.pages)==null?void 0:I.map((u,t)=>e.jsx("div",{className:"viewer-page-container",children:e.jsx(je,{score:a,pageIndex:t,cursorPosition:k,onSeekPosition:z,getPage:h=>Y(h),showSource:!P},t)},t)),e.jsx("div",{className:"checkOriginImg fz26 fw4 fc33",onClick:u=>{r.current&&r.current.pause(),l(!1)},children:i.formatMessage({id:"editor.viewOriginal"})})]})})})},Ce=a=>{var r,x;const o=D(),i=G(),[c,k]=d.useState((i==null?void 0:i.id)||((x=(r=a==null?void 0:a.match)==null?void 0:r.params)==null?void 0:x.id));d.useEffect(()=>{i!=null&&i.id&&k(i.id)},[i==null?void 0:i.id]);const s=re(async()=>{const n=JSON.parse(decodeURIComponent(c)),l=Z(await J(n.url),se);return l.assemble(1),l},[]);return s.loading?e.jsx(U,{style:{width:"100vw",height:"100vh"},children:o.formatMessage({id:"common.loading"})}):e.jsx(ge,{score:s.value})};export{Ce as default}; +import{r as d,j as e,a as G}from"./umi-37873494.js";import{p as q,m as L}from"./parser-c740d6a8.js";import{S as H}from"./scheduler-a7fa9c3c.js";import{p as J}from"./processCompressedAESFile-983b93dd.js";import{S as U}from"./index-abb14cca.js";import{T as X,S as K,a as Q,r as Z,L as ee,s as se}from"./index-a475ddbb.js";import{c as S}from"./_setToString-dbbee35a.js";import{t as te,u as D}from"./index-92da7081.js";import{u as ne}from"./useIntersection-3ba689a0.js";import{u as re}from"./useAsync-6c98bbac.js";import"./useAsyncFn-ffd323fd.js";class ce{timer;tasks={};handlers={};constructor(o=Date){this.timer=o}clear(){Object.values(this.handlers).forEach(o=>clearTimeout(o)),this.tasks={},this.handlers={}}getTask(o){const i=Math.max(o-this.timer.now(),0);return this.tasks[o]||(this.tasks[o]=new Promise(c=>{this.handlers[o]=setTimeout(c,i)}).then(()=>{delete this.tasks[o],delete this.handlers[o]})),this.tasks[o]}appendTask(o,i){this.tasks[o]=this.getTask(o).then(i)}}const ie=({translateX:a=0,translateY:o,width:i,additionalLines:c,...k})=>e.jsxs("g",{...k,className:"staff-lines",transform:`translate(${a}, ${o})`,children:[new Array(5).fill(null).map((s,r)=>e.jsx("line",{x1:0,x2:i,y1:r-2,y2:r-2},r)),c&&c.map((s,r)=>e.jsx("g",{children:Array(Math.abs(s.n)).fill(null).map((x,n)=>e.jsx("line",{x1:s.left,x2:s.right,y1:s.n>0?3+n:-3-n,y2:s.n>0?3+n:-3-n},n))},r))]}),oe=d.memo(ie),_=({score:a,page:o,pageIndex:i,system:c,systemIndex:k,staff:s,staffIndex:r,showSource:x})=>{var l;const n=a.pages.reduce((g,f,p)=>p{var M,w;return j+(((w=(M=y.staves[0])==null?void 0:M.measures)==null?void 0:w.length)||0)},0):p===i?g+f.systems.reduce((j,y,C)=>{var M,w;return C{var p;return e.jsxs("g",{children:[!x&&r===0&&f===0&&e.jsx("text",{x:g.left,y:Math.min(5,s.staffY-3),fontSize:f===0?1.4:.9,fill:"#e65019",children:n+f+1}),e.jsx("g",{transform:`translate(0, ${s.staffY})`,children:e.jsx("g",{className:"tokens",children:(p=g==null?void 0:g.tokens)==null?void 0:p.filter(j=>X.includes(j.type)).map((j,y)=>e.jsx("g",{className:S("token",{}),style:x?{color:"transparent"}:{},transform:`translate(${j.x}, ${j.y})`,id:j.id,onClick:()=>console.log(j),children:e.jsx("use",{xlinkHref:`#score-token-def-${j.typeId}`})},y))})})]},f)})]}),x?null:e.jsx("g",{className:"measure-bars",children:c.measureBars.map((g,f)=>e.jsx("g",{className:S("measure-bar"),transform:`translate(${g}, ${s.staffY-2})`,children:e.jsx("line",{x1:0,x2:0,y1:0,y2:4})},f))})]})})};d.memo(_);const ae=({layout:a,positions:o,nameDict:i={},...c})=>{const k=d.useMemo(()=>a.groups.map(s=>{const r=o[s.range[0]],x=o[s.range[1]];return{key:s.key,type:s.group.type,level:s.group.level||0,top:r.y-r.radius,bottom:x.y+x.radius,name:i[s.key]}}),[a,o,i]);return e.jsx("g",{...c,className:"staff-brackets",onClick:()=>{},children:k.map(s=>e.jsxs("g",{className:"group",transform:`translate(${s.level*-1.2}, 0)`,children:[s.type===2&&e.jsxs("g",{className:"bracket",children:[e.jsx("rect",{x:"-1.2",y:s.top,width:"0.45",height:s.bottom-s.top}),e.jsx("g",{transform:`translate(-1.2, ${s.top-.21})`,children:e.jsx("path",{transform:"scale(0.0040, -0.0040)",d:"M0 -56v91c0 12 10 21 22 21h43c164 0 281 136 377 272c10 14 32 -1 22 -15c-103 -145 -222 -369 -399 -369h-65z"})}),e.jsx("g",{transform:`translate(-1.2, ${s.bottom+.21})`,children:e.jsx("path",{transform:"scale(0.0040, -0.0040)",d:"M0 56h65c177 0 296 -224 399 -369c10 -14 -12 -29 -22 -15c-96 136 -213 272 -377 272h-43c-12 0 -22 9 -22 21v91z"})})]}),s.type===3&&e.jsxs("g",{className:"square",children:[e.jsx("line",{x1:"-0.9",x2:"-0.9",y1:s.top,y2:s.bottom,strokeWidth:"0.1"}),e.jsx("line",{x1:"-0.9",x2:"0",y1:s.top,y2:s.top,strokeWidth:"0.1"}),e.jsx("line",{x1:"-0.9",x2:"0",y1:s.bottom,y2:s.bottom,strokeWidth:"0.1"})]}),s.type===1&&e.jsx("g",{className:"brace",transform:`translate(-0.2, ${(s.top+s.bottom)/2})`,children:e.jsx("path",{transform:`scale(0.0040, ${-.004*(s.bottom-s.top)/15.1825})`,d:"M-208 -1336c0 312 124 616 124 912c0 156 -36 300 -144 416c0 4 -4 4 -4 8s4 4 4 8c108 116 144 260 144 416c0 296 -124 600 -124 912c0 212 52 420 196 576c16 16 40 -8 24 -24c-108 -120 -144 -264 -144 -420c0 -292 116 -588 116 -896c0 -212 -48 -416 -188 -572c140 -156 188 -360 188 -572c0 -308 -116 -604 -116 -896c0 -156 36 -300 144 -420c16 -16 -8 -40 -24 -24c-144 156 -196 364 -196 576z"})}),s.name&&e.jsx("g",{className:"name",transform:`translate(-2, ${(s.top+s.bottom)/2+1})`,children:e.jsx("text",{fontSize:2,children:s.name})})]},s.key))})},le=a=>{var x,n;const{score:o,pageIndex:i,system:c,systemIndex:k,showSource:s}=a;if(c.staves.length===0)return e.jsx("g",{},k);const r=q(o.staffLayoutCode);return e.jsxs("g",{className:S("system",{}),transform:`translate(${c.left}, ${c.top})`,children:[!s&&c.backgroundImage&&!((x=c.staves[0])!=null&&x.backgroundImage)&&!((n=c.staves[0])!=null&&n.maskImage)&&e.jsx("image",{className:"background",href:c.backgroundImage,...c.imagePosition||{}}),!s&&c.staves.length>=2&&e.jsx("line",{className:"connection",x1:0,x2:0,y1:c.connectionLine.top,y2:c.connectionLine.bottom}),!s&&c.staves.map((l,g)=>e.jsxs("g",{className:S("staff"),transform:`translate(0, ${l.top})`,children:[!s&&!l.maskImage&&l.backgroundImage&&e.jsx("image",{className:"background",href:l.backgroundImage,...l.imagePosition||{}}),!s&&l.maskImage&&e.jsx("image",{className:"background",href:l.maskImage,...l.imagePosition||{}})]},"staff-"+g)),c.staves.map((l,g)=>e.jsx(_,{...a,staff:l,staffIndex:g,showSource:s},g)),s?null:e.jsx("g",{className:"measure-bars",children:c.measureBars.map((l,g)=>e.jsx("g",{transform:`translate(${l}, 0)`,children:r.mask(c.staffMask).conjunctions.map((f,p)=>{const j=c.staves[p],y=c.staves[p+1];if(j&&y)return e.jsx("g",{transform:`translate(0, ${j.top+j.staffY+2})`,children:e.jsx("line",{className:S("staff-layout-measure-bar",{dashed:f===1,blank:f===0}),x1:"0",x2:"0",y1:0,y2:y.top+y.staffY-(j.top+j.staffY)-4})},p)})},g))}),s?null:e.jsx(ae,{layout:r.mask(c.staffMask),positions:c.staffPositions,nameDict:!c.prev||c.staffMask!==c.prev.staffMask?o.instrumentDict:{}})]},k)},de=d.memo(le);const xe=()=>e.jsxs("defs",{className:"score-token-defs",children:[e.jsx("g",{id:"score-token-def-clefs-G",className:"token",children:e.jsx("text",{x:"-1.3",children:""})}),e.jsx("g",{id:"score-token-def-clefs-F",className:"token",children:e.jsx("text",{x:"-1.06",children:""})}),e.jsx("g",{id:"score-token-def-clefs-C",className:"token",children:e.jsx("text",{x:"-1.06",children:""})}),e.jsx("g",{id:"score-token-def-timesig-C44",className:"token",children:e.jsx("text",{x:"-0.9",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-timesig-C22",className:"token",children:e.jsx("text",{x:"-0.9",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-timesig0",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"0"})}),e.jsx("g",{id:"score-token-def-timesig1",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"1"})}),e.jsx("g",{id:"score-token-def-timesig2",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"2"})}),e.jsx("g",{id:"score-token-def-timesig3",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"3"})}),e.jsx("g",{id:"score-token-def-timesig4",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"4"})}),e.jsx("g",{id:"score-token-def-timesig5",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"5"})}),e.jsx("g",{id:"score-token-def-timesig6",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"6"})}),e.jsx("g",{id:"score-token-def-timesig7",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"7"})}),e.jsx("g",{id:"score-token-def-timesig8",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"8"})}),e.jsx("g",{id:"score-token-def-timesig9",className:"token",children:e.jsx("text",{x:"-0.7",y:"1",children:"9"})}),e.jsx("g",{id:"score-token-def-octave-a",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"𝄶---"})}),e.jsx("g",{id:"score-token-def-octave-b",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"𝄷---"})}),e.jsx("g",{id:"score-token-def-octave-0",className:"token",children:e.jsx("text",{x:"-0.7",y:"0.6",className:"plain",children:"┐"})}),e.jsx("g",{id:"score-token-def-octave-8",className:"token",children:e.jsx("text",{y:"0.5",className:"plain",children:"8-----"})}),e.jsx("g",{id:"score-token-def-n0",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"0"})})}),e.jsx("g",{id:"score-token-def-n1",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"1"})})}),e.jsx("g",{id:"score-token-def-n2",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"2"})})}),e.jsx("g",{id:"score-token-def-n3",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"3"})})}),e.jsx("g",{id:"score-token-def-n4",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"4"})})}),e.jsx("g",{id:"score-token-def-n5",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"5"})})}),e.jsx("g",{id:"score-token-def-n6",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"6"})})}),e.jsx("g",{id:"score-token-def-n7",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"7"})})}),e.jsx("g",{id:"score-token-def-n8",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"8"})})}),e.jsx("g",{id:"score-token-def-n9",className:"token",children:e.jsx("g",{className:"number",children:e.jsx("text",{x:"-0.35",y:"0.5",children:"9"})})}),e.jsx("g",{id:"score-token-def-accidentals-sharp",className:"token",children:e.jsx("text",{x:"-0.55",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-doublesharp",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-natural",className:"token",children:e.jsx("text",{x:"-0.3",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-flat",className:"token",children:e.jsx("text",{x:"-0.3",children:""})}),e.jsx("g",{id:"score-token-def-accidentals-flatflat",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsxs("g",{id:"score-token-def-key-sharp",className:"token",children:[e.jsx("text",{x:"-0.55",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsxs("g",{id:"score-token-def-key-natural",className:"token",children:[e.jsx("text",{x:"-0.3",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsxs("g",{id:"score-token-def-key-flat",className:"token",children:[e.jsx("text",{x:"-0.3",children:""}),e.jsx("line",{x1:"-1",x2:"-1",y1:"-1",y2:"1",stroke:"black",strokeWidth:"0.08"})]}),e.jsx("g",{id:"score-token-def-noteheads-s0",className:"token",children:e.jsx("text",{x:"-0.913",children:""})}),e.jsx("g",{id:"score-token-def-noteheads-s1",className:"token",children:e.jsx("text",{x:"-0.632",children:""})}),e.jsx("g",{id:"score-token-def-noteheads-s2",className:"token",children:e.jsx("text",{x:"-0.599",children:""})}),e.jsxs("g",{id:"score-token-def-noteheads-s1-u",className:"token",children:[e.jsx("text",{x:"-1.264",children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"-0.06",y2:"-3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s2-u",className:"token",children:[e.jsx("text",{x:"-1.198",children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"-0.06",y2:"-3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s1-d",className:"token",children:[e.jsx("text",{children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"0.16",y2:"3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsxs("g",{id:"score-token-def-noteheads-s2-d",className:"token",children:[e.jsx("text",{children:""}),e.jsx("line",{x1:"0",x2:"0",y1:"0.16",y2:"3.5",stroke:"currentColor",strokeWidth:"0.12",strokeLinecap:"round",className:"stem"})]}),e.jsx("g",{id:"score-token-def-rests-M1",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-0",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-0o",className:"token",children:e.jsx("text",{x:"-0.75",y:"-1",children:""})}),e.jsx("g",{id:"score-token-def-rests-1o",className:"token",children:e.jsx("text",{x:"-0.75",y:"0",children:""})}),e.jsx("g",{id:"score-token-def-rests-2",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-3",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-4",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-5",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-rests-6",className:"token",children:e.jsx("text",{x:"-0.5",children:""})}),e.jsx("g",{id:"score-token-def-flags-u3",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u4",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u5",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u6",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u7",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-flags-u8",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-slur-begin",className:"token",children:e.jsx("path",{d:"M0 0C0.5 -0.5 1 -0.6 1.5 -0.6L1.5 -0.4C1 -0.4 0.5 -0.4 0 0z"})}),e.jsx("g",{id:"score-token-def-slur-end",className:"token",children:e.jsx("path",{d:"M0 0C-0.5 -0.5 -1 -0.6 -1.5 -0.6L-1.5 -0.4C-1 -0.4 -0.5 -0.4 0 0z"})}),e.jsxs("g",{id:"score-token-def-volta-left",className:"token",children:[e.jsx("text",{x:"-0.25",y:"-0.5",children:""}),e.jsx("text",{x:"-0.25",y:"0.5",children:""}),e.jsx("line",{x1:"-0.5",x2:"-0.5",y1:"-2",y2:"2"})]}),e.jsxs("g",{id:"score-token-def-volta-right",className:"token",children:[e.jsx("text",{x:"-0.25",y:"-0.5",children:""}),e.jsx("text",{x:"-0.25",y:"0.5",children:""}),e.jsx("line",{x1:"0.5",x2:"0.5",y1:"-2",y2:"2"})]}),e.jsxs("g",{id:"score-token-def-bar-terminal",className:"token",children:[e.jsx("rect",{x:"-0.064",y:"-2",width:"0.128",height:"4"}),e.jsx("rect",{x:"0.27",y:"-2",width:"0.4",height:"4"})]}),e.jsxs("g",{id:"score-token-def-bar-segment",className:"token",children:[e.jsx("rect",{x:"-0.359",y:"-2",width:"0.128",height:"4"}),e.jsx("rect",{x:"0.231",y:"-2",width:"0.128",height:"4"})]}),e.jsx("g",{id:"score-token-def-dot",className:"token",children:e.jsx("text",{children:""})}),e.jsxs("g",{id:"score-token-def-dotdot",className:"token",children:[e.jsx("text",{children:""}),e.jsx("text",{x:"0.8",children:""})]}),e.jsx("g",{id:"score-token-def-f",className:"token",children:e.jsx("text",{x:"-0.6",y:"0.5",children:"f"})}),e.jsx("g",{id:"score-token-def-m",className:"token",children:e.jsx("text",{x:"-0.9",y:"0.5",children:"m"})}),e.jsx("g",{id:"score-token-def-n",className:"token",children:e.jsx("text",{x:"-0.9",y:"0.5",children:"n"})}),e.jsx("g",{id:"score-token-def-p",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"p"})}),e.jsx("g",{id:"score-token-def-r",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"r"})}),e.jsx("g",{id:"score-token-def-s",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"s"})}),e.jsx("g",{id:"score-token-def-z",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:"z"})}),e.jsx("g",{id:"score-token-def-scripts-ufermata",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-ushortfermata",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-sforzato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-staccato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-ustaccatissimo",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-turn",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-trill",className:"token",children:e.jsx("text",{y:"0.5",children:""})}),e.jsx("g",{id:"score-token-def-scripts-segno",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-coda",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-arpeggio",className:"token",children:e.jsx("text",{x:"-0.5",y:"0.5",children:""})}),e.jsx("g",{id:"score-token-def-scripts-prall",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-mordent",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-umarcato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-tenuto",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-scripts-uportato",className:"token",children:e.jsx("text",{children:""})}),e.jsx("g",{id:"score-token-def-pedal-star",className:"token",children:e.jsx("text",{x:"-0.78",y:"0.78",children:""})}),e.jsx("g",{id:"score-token-def-pedal-Ped",className:"token",children:e.jsx("text",{x:"-1.6",y:"0.7",children:""})}),e.jsx("g",{id:"score-token-def-BOS",className:"token",children:e.jsx("text",{x:"-3",y:"1.04",children:"▶"})}),e.jsx("g",{id:"score-token-def-BeamLeft",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"├"})}),e.jsx("g",{id:"score-token-def-BeamContinue",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"┼"})}),e.jsx("g",{id:"score-token-def-BeamRight",className:"token",children:e.jsx("text",{x:"-0.73",y:"0.66",className:"s-beam",children:"┤"})}),e.jsx("g",{id:"score-token-def-GraceNotehead",className:"token",children:e.jsx("text",{x:"-0.36",className:"s-grace",children:""})})]}),he=d.memo(xe),me=({score:a,pageIndex:o,cursorPosition:i,onSeekPosition:c,getPage:k,showSource:s})=>{var W,I,u;const r=d.useRef(null),x=ne(r,{root:null,rootMargin:"100px",threshold:.1}),n=a.pages[o],l=d.useRef(null),[g]=d.useState(!1),[f,p]=d.useState(0),j=d.useMemo(()=>{let t=0;if(i){let h=0;for(const[b,N]of a.pages.entries()){if(i.system>=h-1&&i.system{l.current&&l.current.scrollIntoView({block:"center",behavior:"smooth"})},[l.current,j]),d.useEffect(()=>{k&&k(f)},[f]);const y=n.source.dimensions.width/n.source.interval,C=n.source.dimensions.height/n.source.interval,M=n.width,w=n.height,[P,O,z,A,F,E]=n.source.matrix,Y=[P,O,z,A,-1/2*P*y+-1/2*z*C+1/2*M+F,-1/2*O*y+-1/2*A*C+1/2*w+E];return n.systems.length>0?e.jsx("div",{ref:r,children:x!=null&&x.isIntersecting?e.jsxs("svg",{className:S("graph",{}),style:{objectFit:"contain"},viewBox:`0 0 ${n.width} ${n.height}`,children:[e.jsx(he,{}),s?e.jsx("image",{x:0,y:0,width:y,height:C,href:te(n.source.url,{width:414}),transform:`matrix(${Y.join(",")})`}):null,!s||s&&!a.pages.some(t=>t.source.needGauge)?(W=n==null?void 0:n.systems)==null?void 0:W.map((t,h)=>e.jsx(de,{score:a,page:n,pageIndex:o,system:t,systemIndex:h,showSource:s},h)):null,g&&(n==null?void 0:n.semantics)&&e.jsx("g",{children:(I=n==null?void 0:n.semantics)==null?void 0:I.map((t,h)=>{var b,N,$,m,v;if(t.semantic===K.rect_Text)return e.jsx("g",{transform:`translate(${t.x}, ${t.y}) ${(b=t.extension)!=null&&b.theta?`rotate(${((N=t.extension)==null?void 0:N.theta)*180/Math.PI})`:""}`,color:"rgba(25, 175, 230, 0.6)",children:e.jsxs("text",{dominantBaseline:"hanging",x:0,y:-t.extension.height/2,textAnchor:"middle",style:{fontSize:($=t.extension)==null?void 0:$.height},children:[(m=t.extension)==null?void 0:m.text,e.jsx("title",{children:((v=t.extension)==null?void 0:v.type)||t.semantic})]})},h)})}),!s&&(n==null?void 0:n.tokens)&&e.jsx("g",{children:(u=n==null?void 0:n.tokens)==null?void 0:u.map((t,h)=>{if(t.type===Q.Text)return e.jsx("g",{transform:`translate(${t.x}, ${t.y})`,color:"rgba(25, 175, 230, 0.6)",className:"token",children:e.jsxs("text",{dominantBaseline:"hanging",x:0,y:-t.fontSize/2,textAnchor:"middle",style:{fontSize:t.fontSize},className:S(t.textType),children:[t.text,e.jsx("title",{children:t.textType})]})},h)})}),n.systems.map((t,h)=>{const b=a.pages.slice(0,o).reduce((N,$)=>N+$.systems.length,0)+h;return e.jsxs("g",{className:S("system"),transform:`translate(${t.left}, ${t.top})`,children:[e.jsx("rect",{style:{opacity:0},x:0,y:t.noteRange.top,width:t.width,height:t.noteRange.bottom-t.noteRange.top,onClick:N=>{const $=N.target,m=$.getBoundingClientRect(),v=N.clientX-m.left,B=$.getBBox(),T=v/m.width*B.width;c({system:b,x:T})}}),(i==null?void 0:i.system)===b?e.jsx("line",{ref:l,transform:`translate(${i.x}, 0)`,x1:0,x2:0,y1:t.noteRange.top,y2:t.noteRange.bottom,style:{stroke:"rgb(173 216 230 / 80%)",strokeWidth:1}}):null]},h)})]}):e.jsx("svg",{className:"graph",style:{objectFit:"contain"},viewBox:`0 0 ${n.width} ${n.height}`})}):e.jsx("img",{src:n.source.url,alt:n.source.name,style:{width:"100%"}})},je=d.memo(me),ge=({score:a,bpmValue:o})=>{var W,I;const i=D(),c=d.useRef(new ce(performance)),[k,s]=d.useState(null),r=d.useRef(null),x=d.useRef(null),[n,l]=d.useState(!1),[g,f]=d.useState(!1),[p,j]=d.useState(o||((W=a==null?void 0:a.spartito)==null?void 0:W.headBPM)),[y,C]=d.useState(!1),[M,w]=d.useState(1),[P,O]=d.useState(!0);d.useEffect(()=>{Number.isFinite(o)&&j(o)},[o]),d.useEffect(()=>(L.MidiAudio.WebAudio.empty()?L.MidiAudio.loadPlugin({soundfontUrl:"/soundfont/",api:"webaudio"}).then(()=>{f(!0),console.debug("Soundfont loaded.")}):f(!0),()=>{r.current&&r.current.dispose()}),[]);const z=d.useCallback(async u=>{(!r.current||!x.current)&&E();const t=r.current.isPlaying;t&&(r.current.pause(),await new Promise(h=>setTimeout(h,0)),document.querySelectorAll(".notePlayOn").forEach(h=>h.classList.remove("notePlayOn"))),r.current.progressTicks=x.current.lookupTick(u),t&&F()},[x.current]),A=async()=>{var u,t,h,b;(t=(u=L.MidiAudio.WebAudio).needsWarmup)!=null&&t.call(u)&&await((b=(h=L.MidiAudio.WebAudio).awaitWarmup)==null?void 0:b.call(h))},F=async()=>{var u,t;!((u=a.systems)!=null&&u.length)||!((t=a.spartito)!=null&&t.regulated)||!g||((!r.current||y)&&(C(!1),E()),r.current?r.current.isPlaying?(r.current.pause(),l(!1)):(await A(),r.current.play({nextFrame:()=>(r.current&&x.current&&s(x.current.lookupPosition(r.current.progressTicks)),new Promise(h=>requestAnimationFrame(()=>h())))}),l(!0)):console.log("暂时无法播放"))},E=()=>{const{notation:u,tokenMap:t}=a.spartito.perform(),h=a.getMeasureLayout(),b=h?h.serialize(ee.Full):Array(u.measures.length).fill(null).map((m,v)=>v+1),N=u.toPerformingNotationWithEvents(b);N.scaleTempo({headTempo:6e7/p}),x.current=H.createFromNotation(N,t);const $=r.current?r.current.progressTicks:0;r.current&&r.current.dispose(),r.current=new L.MidiPlayer(N,{cacheSpan:200,onMidi:(m,v)=>{let B=null;switch(m.subtype){case"noteOn":m.channel!=null&&m.noteNumber!=null&&m.velocity!=null&&L.MidiAudio.noteOn(m.channel,m.noteNumber,m.velocity,v),B=()=>{var T;return(T=m==null?void 0:m.ids)==null?void 0:T.map(V=>{const R=document.getElementById(V);R&&R.classList.add("notePlayOn")})};break;case"noteOff":m.channel!=null&&m.noteNumber!=null&&L.MidiAudio.noteOff(m.channel,m.noteNumber,v),B=()=>{var T;return(T=m==null?void 0:m.ids)==null?void 0:T.map(V=>{const R=document.getElementById(V);R&&R.classList.remove("notePlayOn")})};break}B&&c.current.appendTask(v,B)},onPlayFinish(){r.current&&(r.current.progressTicks=0),l(!1)},onTurnCursor(){r.current&&x.current&&s(x.current.lookupPosition(r.current.progressTicks))}}),r.current.progressTicks=$},Y=u=>{w(u+1)};return e.jsx("div",{className:"viewer-page",children:e.jsx("div",{style:{overflowY:"hidden"},children:e.jsxs("div",{className:"score-viewer",children:[(I=a==null?void 0:a.pages)==null?void 0:I.map((u,t)=>e.jsx("div",{className:"viewer-page-container",children:e.jsx(je,{score:a,pageIndex:t,cursorPosition:k,onSeekPosition:z,getPage:h=>Y(h),showSource:!P},t)},t)),e.jsx("div",{className:"checkOriginImg fz26 fw4 fc33",onClick:u=>{r.current&&r.current.pause(),l(!1)},children:i.formatMessage({id:"editor.viewOriginal"})})]})})})},Ce=a=>{var r,x;const o=D(),i=G(),[c,k]=d.useState((i==null?void 0:i.id)||((x=(r=a==null?void 0:a.match)==null?void 0:r.params)==null?void 0:x.id));d.useEffect(()=>{i!=null&&i.id&&k(i.id)},[i==null?void 0:i.id]);const s=re(async()=>{const n=JSON.parse(decodeURIComponent(c)),l=Z(await J(n.url),se);return l.assemble(1),l},[]);return s.loading?e.jsx(U,{style:{width:"100vw",height:"100vh"},children:o.formatMessage({id:"common.loading"})}):e.jsx(ge,{score:s.value})};export{Ce as default}; diff --git a/dist/assets/index-f8b1789b.js b/dist/assets/index-da399111.js similarity index 99% rename from dist/assets/index-f8b1789b.js rename to dist/assets/index-da399111.js index 90c74aefa05abe5c5469cc186683adc77d695820..cea461ebd86ee71e9c1e1fdc74519b06d65857e0 100644 --- a/dist/assets/index-f8b1789b.js +++ b/dist/assets/index-da399111.js @@ -1 +1 @@ -import{A as Ht,f as ne,Q as an,c as Z,b as H,u as vt,d as rn,a as E,j as Se,O as on,_ as Pt,w as Ot,aG as ln,C as wt,S as sn,h as cn,e as un,v as Ft,aw as dn,o as Gt,aH as fn}from"./_setToString-397d22bb.js";import{r as n,_}from"./umi-91f9d113.js";import{b as vn,M as pn,d as mn,c as bn,E as yn}from"./Dropdown-d5fff39b.js";import{a as gn,C as hn}from"./progress-f968a1fe.js";import{y as En,K as re,R as xt,x as Sn,u as Tt,e as Cn,D as xn,j as dt,T as Rt}from"./TextArea-3bdaceca.js";import{t as kt}from"./button-909b3565.js";import{w as Tn}from"./index-81cb47f8.js";var Rn={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"}}]},name:"copy",theme:"outlined"};const wn=Rn;var kn=function(a,r){return n.createElement(Ht,ne(ne({},a),{},{ref:r,icon:wn}))},Pn=n.forwardRef(kn);const On=Pn;var Nn={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M864 170h-60c-4.4 0-8 3.6-8 8v518H310v-73c0-6.7-7.8-10.5-13-6.3l-141.9 112a8 8 0 000 12.6l141.9 112c5.3 4.2 13 .4 13-6.3v-75h498c35.3 0 64-28.7 64-64V178c0-4.4-3.6-8-8-8z"}}]},name:"enter",theme:"outlined"};const In=Nn;var $n=function(a,r){return n.createElement(Ht,ne(ne({},a),{},{ref:r,icon:In}))},Mn=n.forwardRef($n);const Ln=Mn;var Jt=function(a){if(an()&&window.document.documentElement){var r=Array.isArray(a)?a:[a],t=window.document.documentElement;return r.some(function(o){return o in t.style})}return!1},An=function(a,r){if(!Jt(a))return!1;var t=document.createElement("div"),o=t.style[a];return t.style[a]=r,t.style[a]!==o};function Nt(e,a){return!Array.isArray(e)&&a!==void 0?An(e,a):Jt(e)}const pt=n.createContext(null);var Xt=n.forwardRef(function(e,a){var r=e.prefixCls,t=e.className,o=e.style,i=e.id,l=e.active,s=e.tabKey,c=e.children;return n.createElement("div",{id:i&&"".concat(i,"-panel-").concat(s),role:"tabpanel",tabIndex:l?0:-1,"aria-labelledby":i&&"".concat(i,"-tab-").concat(s),"aria-hidden":!l,style:o,className:Z(r,l&&"".concat(r,"-active"),t),ref:a},c)}),_n=["key","forceRender","style","className"];function zn(e){var a=e.id,r=e.activeKey,t=e.animated,o=e.tabPosition,i=e.destroyInactiveTabPane,l=n.useContext(pt),s=l.prefixCls,c=l.tabs,m=t.tabPane,u="".concat(s,"-tabpane");return n.createElement("div",{className:Z("".concat(s,"-content-holder"))},n.createElement("div",{className:Z("".concat(s,"-content"),"".concat(s,"-content-").concat(o),H({},"".concat(s,"-content-animated"),m))},c.map(function(d){var b=d.key,C=d.forceRender,T=d.style,R=d.className,z=vt(d,_n),I=b===r;return n.createElement(rn,_({key:b,visible:I,forceRender:C,removeOnLeave:!!i,leavedClassName:"".concat(u,"-hidden")},t.tabPaneMotion),function(S,k){var D=S.style,K=S.className;return n.createElement(Xt,_({},z,{prefixCls:u,id:a,tabKey:b,animated:m,active:I,style:ne(ne({},T),D),className:Z(R,K),ref:k}))})})))}var It={width:0,height:0,left:0,top:0};function Bn(e,a,r){return n.useMemo(function(){for(var t,o=new Map,i=a.get((t=e[0])===null||t===void 0?void 0:t.key)||It,l=i.left+i.width,s=0;sP?(v=x,N.current="x"):(v=f,N.current="y"),a(-v,-v)&&h.preventDefault()}var V=n.useRef(null);V.current={onTouchStart:k,onTouchMove:D,onTouchEnd:K,onWheel:y},n.useEffect(function(){function h(w){V.current.onTouchStart(w)}function x(w){V.current.onTouchMove(w)}function f(w){V.current.onTouchEnd(w)}function v(w){V.current.onWheel(w)}return document.addEventListener("touchmove",x,{passive:!1}),document.addEventListener("touchend",f,{passive:!1}),e.current.addEventListener("touchstart",h,{passive:!1}),e.current.addEventListener("wheel",v),function(){document.removeEventListener("touchmove",x),document.removeEventListener("touchend",f)}},[])}function Yt(e){var a=n.useState(0),r=E(a,2),t=r[0],o=r[1],i=n.useRef(0),l=n.useRef();return l.current=e,En(function(){var s;(s=l.current)===null||s===void 0||s.call(l)},[t]),function(){i.current===t&&(i.current+=1,o(i.current))}}function jn(e){var a=n.useRef([]),r=n.useState({}),t=E(r,2),o=t[1],i=n.useRef(typeof e=="function"?e():e),l=Yt(function(){var c=i.current;a.current.forEach(function(m){c=m(c)}),a.current=[],i.current=c,o({})});function s(c){a.current.push(c),l()}return[i.current,s]}var At={width:0,height:0,left:0,top:0,right:0};function Wn(e,a,r,t,o,i,l){var s=l.tabs,c=l.tabPosition,m=l.rtl,u,d,b;return["top","bottom"].includes(c)?(u="width",d=m?"right":"left",b=Math.abs(r)):(u="height",d="top",b=-r),n.useMemo(function(){if(!s.length)return[0,0];for(var C=s.length,T=C,R=0;Rb+a){T=R-1;break}}for(var I=0,S=C-1;S>=0;S-=1){var k=e.get(s[S].key)||At;if(k[d]L?"left":"right"})}),w=E(v,2),P=w[0],J=w[1],X=$t(0,function(M,L){!f&&k&&k({direction:M>L?"top":"bottom"})}),B=E(X,2),$=B[0],j=B[1],le=n.useState([0,0]),oe=E(le,2),g=oe[0],W=oe[1],ae=n.useState([0,0]),Y=E(ae,2),q=Y[0],Ce=Y[1],ve=n.useState([0,0]),pe=E(ve,2),Oe=pe[0],Ne=pe[1],Ie=n.useState([0,0]),xe=E(Ie,2),ze=xe[0],Be=xe[1],U=jn(new Map),ue=E(U,2),Re=ue[0],bt=ue[1],we=Bn(i,Re,q[0]),$e=st(g,f),ke=st(q,f),Ke=st(Oe,f),De=st(ze,f),Xe=$eme?me:M}var Ye=n.useRef(),Qe=n.useState(),We=E(Qe,2),Me=We[0],Ze=We[1];function Le(){Ze(Date.now())}function Ve(){window.clearTimeout(Ye.current)}Dn(y,function(M,L){function G(Q,ge){Q(function(ce){var O=je(ce+ge);return O})}return Xe?(f?G(J,M):G(j,L),Ve(),Le(),!0):!1}),n.useEffect(function(){return Ve(),Me&&(Ye.current=window.setTimeout(function(){Ze(0)},100)),Ve},[Me]);var gt=Wn(we,se,f?P:$,ke,Ke,De,ne(ne({},e),{},{tabs:i})),qe=E(gt,2),et=qe[0],be=qe[1],F=on(function(){var M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:u,L=we.get(M)||{width:0,height:0,left:0,right:0,top:0};if(f){var G=P;d?L.rightP+se&&(G=L.right+L.width-se):L.left<-P?G=-L.left:L.left+L.width>-P+se&&(G=-(L.left+L.width-se)),j(0),J(je(G))}else{var Q=$;L.top<-$?Q=-L.top:L.top+L.height>-$+se&&(Q=-(L.top+L.height-se)),J(0),j(je(Q))}}),ee={};R==="top"||R==="bottom"?ee[d?"marginRight":"marginLeft"]=z:ee.marginTop=z;var Ue=i.map(function(M,L){var G=M.key;return n.createElement(Gn,{id:c,prefixCls:o,key:G,tab:M,style:L===0?void 0:ee,closable:M.closable,editable:C,active:G===u,renderWrapper:I,removeAriaLabel:T==null?void 0:T.removeAriaLabel,onClick:function(ge){S(G,ge)},onFocus:function(){F(G),Le(),y.current&&(d||(y.current.scrollLeft=0),y.current.scrollTop=0)}})}),Ee=function(){return bt(function(){var L=new Map;return i.forEach(function(G){var Q,ge=G.key,ce=(Q=V.current)===null||Q===void 0?void 0:Q.querySelector('[data-node-key="'.concat(Qt(ge),'"]'));ce&&L.set(ge,{width:ce.offsetWidth,height:ce.offsetHeight,left:ce.offsetLeft,top:ce.offsetTop})}),L})};n.useEffect(function(){Ee()},[i.map(function(M){return M.key}).join("_")]);var Te=Yt(function(){var M=_e(D),L=_e(K),G=_e(N);W([M[0]-L[0]-G[0],M[1]-L[1]-G[1]]);var Q=_e(x);Ne(Q);var ge=_e(h);Be(ge);var ce=_e(V);Ce([ce[0]-Q[0],ce[1]-Q[1]]),Ee()}),ie=i.slice(0,et),tt=i.slice(be+1),nt=[].concat(Pt(ie),Pt(tt)),Ae=n.useState(),at=E(Ae,2),ht=at[0],rt=at[1],ye=we.get(u),ot=n.useRef();function it(){Ot.cancel(ot.current)}n.useEffect(function(){var M={};return ye&&(f?(d?M.right=ye.right:M.left=ye.left,M.width=ye.width):(M.top=ye.top,M.height=ye.height)),it(),ot.current=Ot(function(){rt(M)}),it},[ye,f,d]),n.useEffect(function(){F()},[u,de,me,_t(ye),_t(we),f]),n.useEffect(function(){Te()},[d]);var He=!!nt.length,Pe="".concat(o,"-nav-wrap"),Fe,Ge,lt,fe;return f?d?(Ge=P>0,Fe=P!==me):(Fe=P<0,Ge=P!==de):(lt=$<0,fe=$!==de),n.createElement(xt,{onResize:Te},n.createElement("div",{ref:ln(a,D),role:"tablist",className:Z("".concat(o,"-nav"),l),style:s,onKeyDown:function(){Le()}},n.createElement(zt,{ref:K,position:"left",extra:b,prefixCls:o}),n.createElement("div",{className:Z(Pe,(r={},H(r,"".concat(Pe,"-ping-left"),Fe),H(r,"".concat(Pe,"-ping-right"),Ge),H(r,"".concat(Pe,"-ping-top"),lt),H(r,"".concat(Pe,"-ping-bottom"),fe),r)),ref:y},n.createElement(xt,{onResize:Te},n.createElement("div",{ref:V,className:"".concat(o,"-nav-list"),style:{transform:"translate(".concat(P,"px, ").concat($,"px)"),transition:Me?"none":void 0}},Ue,n.createElement(Zt,{ref:x,prefixCls:o,locale:T,editable:C,style:ne(ne({},Ue.length===0?void 0:ee),{},{visibility:He?"hidden":null})}),n.createElement("div",{className:Z("".concat(o,"-ink-bar"),H({},"".concat(o,"-ink-bar-animated"),m.inkBar)),style:ht})))),n.createElement(Fn,_({},e,{removeAriaLabel:T==null?void 0:T.removeAriaLabel,ref:h,prefixCls:o,tabs:nt,className:!He&&yt,tabMoving:!!Me})),n.createElement(zt,{ref:N,position:"right",extra:b,prefixCls:o})))}const Bt=n.forwardRef(Jn);var Xn=["renderTabBar"],Yn=["label","key"];function Qn(e){var a=e.renderTabBar,r=vt(e,Xn),t=n.useContext(pt),o=t.tabs;if(a){var i=ne(ne({},r),{},{panes:o.map(function(l){var s=l.label,c=l.key,m=vt(l,Yn);return n.createElement(Xt,_({tab:s,key:c,tabKey:c},m))})});return a(i,Bt)}return n.createElement(Bt,r)}function Zn(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{inkBar:!0,tabPane:!1},a;return e===!1?a={inkBar:!1,tabPane:!1}:e===!0?a={inkBar:!0,tabPane:!1}:a=ne({inkBar:!0},Se(e)==="object"?e:{}),a.tabPaneMotion&&a.tabPane===void 0&&(a.tabPane=!0),!a.tabPaneMotion&&a.tabPane&&(a.tabPane=!1),a}var qn=["id","prefixCls","className","items","direction","activeKey","defaultActiveKey","editable","animated","tabPosition","tabBarGutter","tabBarStyle","tabBarExtraContent","locale","moreIcon","moreTransitionName","destroyInactiveTabPane","renderTabBar","onChange","onTabClick","onTabScroll","getPopupContainer","popupClassName"],Kt=0;function ea(e,a){var r,t=e.id,o=e.prefixCls,i=o===void 0?"rc-tabs":o,l=e.className,s=e.items,c=e.direction,m=e.activeKey,u=e.defaultActiveKey,d=e.editable,b=e.animated,C=e.tabPosition,T=C===void 0?"top":C,R=e.tabBarGutter,z=e.tabBarStyle,I=e.tabBarExtraContent,S=e.locale,k=e.moreIcon,D=e.moreTransitionName,K=e.destroyInactiveTabPane,N=e.renderTabBar,y=e.onChange,V=e.onTabClick,h=e.onTabScroll,x=e.getPopupContainer,f=e.popupClassName,v=vt(e,qn),w=n.useMemo(function(){return(s||[]).filter(function(U){return U&&Se(U)==="object"&&"key"in U})},[s]),P=c==="rtl",J=Zn(b),X=n.useState(!1),B=E(X,2),$=B[0],j=B[1];n.useEffect(function(){j(Sn())},[]);var le=Tt(function(){var U;return(U=w[0])===null||U===void 0?void 0:U.key},{value:m,defaultValue:u}),oe=E(le,2),g=oe[0],W=oe[1],ae=n.useState(function(){return w.findIndex(function(U){return U.key===g})}),Y=E(ae,2),q=Y[0],Ce=Y[1];n.useEffect(function(){var U=w.findIndex(function(Re){return Re.key===g});if(U===-1){var ue;U=Math.max(0,Math.min(q,w.length-1)),W((ue=w[U])===null||ue===void 0?void 0:ue.key)}Ce(U)},[w.map(function(U){return U.key}).join("_"),g,q]);var ve=Tt(null,{value:t}),pe=E(ve,2),Oe=pe[0],Ne=pe[1];n.useEffect(function(){t||(Ne("rc-tabs-".concat(Kt)),Kt+=1)},[]);function Ie(U,ue){V==null||V(U,ue);var Re=U!==g;W(U),Re&&(y==null||y(U))}var xe={id:Oe,activeKey:g,animated:J,tabPosition:T,rtl:P,mobile:$},ze,Be=ne(ne({},xe),{},{editable:d,locale:S,moreIcon:k,moreTransitionName:D,tabBarGutter:R,onTabClick:Ie,onTabScroll:h,extra:I,style:z,panes:null,getPopupContainer:x,popupClassName:f});return n.createElement(pt.Provider,{value:{tabs:w,prefixCls:i}},n.createElement("div",_({ref:a,id:t,className:Z(i,"".concat(i,"-").concat(T),(r={},H(r,"".concat(i,"-mobile"),$),H(r,"".concat(i,"-editable"),d),H(r,"".concat(i,"-rtl"),P),r),l)},v),ze,n.createElement(Qn,_({},Be,{renderTabBar:N})),n.createElement(zn,_({destroyInactiveTabPane:K},xe,{animated:J}))))}var ta=n.forwardRef(ea),na={motionAppear:!1,motionEnter:!0,motionLeave:!0};function aa(e){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{inkBar:!0,tabPane:!1},r;return a===!1?r={inkBar:!1,tabPane:!1}:a===!0?r={inkBar:!0,tabPane:!0}:r=_({inkBar:!0},Se(a)==="object"?a:{}),r.tabPane&&(r.tabPaneMotion=_(_({},na),{motionName:Cn(e,"switch")})),r}var ra=globalThis&&globalThis.__rest||function(e,a){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&a.indexOf(t)<0&&(r[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,t=Object.getOwnPropertySymbols(e);oa){var m=a-r;return t.push(String(i).slice(0,m)),t}t.push(i),r=c}return e}var Sa=0,ct=1,Wt=2,Ct=3,Vt=4,Ca=function(a){var r=a.enabledMeasure,t=a.children,o=a.text,i=a.width,l=a.fontSize,s=a.rows,c=a.onEllipsis,m=n.useState([0,0,0]),u=E(m,2),d=E(u[0],3),b=d[0],C=d[1],T=d[2],R=u[1],z=n.useState(Sa),I=E(z,2),S=I[0],k=I[1],D=n.useState(0),K=E(D,2),N=K[0],y=K[1],V=n.useRef(null),h=n.useRef(null),x=n.useMemo(function(){return kt(o)},[o]),f=n.useMemo(function(){return Ea(x)},[x]),v=n.useMemo(function(){return!r||S!==Ct?t(x,!1):t(jt(x,C),C1&&ie,at=function(p){var A;se(!0),(A=F.onExpand)===null||A===void 0||A.call(F,p)},ht=n.useState(0),rt=E(ht,2),ye=rt[0],ot=rt[1],it=n.useState(0),He=E(it,2),Pe=He[0],Fe=He[1],Ge=function(p,A){var te=p.offsetWidth,he;ot(te),Fe(parseInt((he=window.getComputedStyle)===null||he===void 0?void 0:he.call(window,A).fontSize,10)||0)},lt=function(p){var A;je(p),me!==p&&((A=F.onEllipsis)===null||A===void 0||A.call(F,p))};n.useEffect(function(){var O=K.current;if(be&&ie&&O){var p=Ae?O.offsetHeight"u"||!O||!ie||!ee)){var p=new IntersectionObserver(function(){gt(!!O.offsetParent)});return p.observe(O),function(){p.disconnect()}}},[ie,ee]);var fe={};F.tooltip===!0?fe={title:(r=v.text)!==null&&r!==void 0?r:u}:n.isValidElement(F.tooltip)?fe={title:F.tooltip}:Se(F.tooltip)==="object"?fe=_({title:(t=v.text)!==null&&t!==void 0?t:u},F.tooltip):fe={title:F.tooltip};var M=n.useMemo(function(){var O=function(A){return["string","number"].includes(Se(A))};if(!(!be||ie)){if(O(v.text))return v.text;if(O(u))return u;if(O(R))return R;if(O(fe.title))return fe.title}},[be,ie,R,fe.title,tt]);if(J)return n.createElement(ma,{value:(o=v.text)!==null&&o!==void 0?o:typeof u=="string"?u:"",onSave:oe,onCancel:g,onEnd:v.onEnd,prefixCls:y,className:l,style:s,direction:k,component:T,maxLength:v.maxLength,autoSize:v.autoSize,enterIcon:v.enterIcon});var L=function(){var p=F.expandable,A=F.symbol;if(!p)return null;var te;return A?te=A:te=D.expand,n.createElement("a",{key:"expand",className:"".concat(y,"-expand"),onClick:at,"aria-label":D.expand},te)},G=function(){if(f){var p=v.icon,A=v.tooltip,te=kt(A)[0]||D.edit,he=typeof te=="string"?te:"";return $.includes("icon")?n.createElement(Rt,{key:"edit",title:A===!1?"":te},n.createElement(Dt,{ref:N,className:"".concat(y,"-edit"),onClick:le,"aria-label":he},p||n.createElement(yn,{role:"button"}))):null}},Q=function(){if(Y){var p=q.tooltips,A=q.icon,te=Ut(p),he=Ut(A),Et=pe?ut(te[1],D.copied):ut(te[0],D.copy),tn=pe?D.copied:D.copy,nn=typeof Et=="string"?Et:tn;return n.createElement(Rt,{key:"copy",title:Et},n.createElement(Dt,{className:Z("".concat(y,"-copy"),pe&&"".concat(y,"-copy-success")),onClick:ze,"aria-label":nn},pe?ut(he[1],n.createElement(hn,null),!0):ut(he[0],n.createElement(On,null),!0)))}},ge=function(p){return[p&&L(),G(),Q()]},ce=function(p){return[p&&n.createElement("span",{"aria-hidden":!0,key:"ellipsis"},Pa),F.suffix,ge(p)]};return n.createElement(xt,{onResize:Ge,disabled:!ee||ie},function(O){return n.createElement(Ra,{tooltipProps:fe,enabledEllipsis:ee,isEllipsis:tt},n.createElement(qt,_({className:Z(H(H(H(H(H(H({},"".concat(y,"-").concat(c),c),"".concat(y,"-disabled"),m),"".concat(y,"-ellipsis"),be),"".concat(y,"-single-line"),ee&&Ee===1),"".concat(y,"-ellipsis-single-line"),nt),"".concat(y,"-ellipsis-multiple-line"),Ae),l),prefixCls:i,style:_(_({},s),{WebkitLineClamp:Ae?Ee:void 0}),component:T,ref:Ft(O,K,a),direction:k,onClick:$.includes("text")?le:void 0,"aria-label":M==null?void 0:M.toString(),title:R},V),n.createElement(xa,{enabledMeasure:ee&&!ie,text:u,rows:Ee,width:ye,fontSize:Pe,onEllipsis:lt},function(p,A){var te=p;p.length&&A&&M&&(te=n.createElement("span",{key:"show-content","aria-hidden":!0},te));var he=ka(e,n.createElement(n.Fragment,null,te,ce(A)));return he})))})});const mt=Oa;var Na=globalThis&&globalThis.__rest||function(e,a){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&a.indexOf(t)<0&&(r[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,t=Object.getOwnPropertySymbols(e);oP?(v=x,N.current="x"):(v=f,N.current="y"),a(-v,-v)&&h.preventDefault()}var V=n.useRef(null);V.current={onTouchStart:k,onTouchMove:D,onTouchEnd:K,onWheel:y},n.useEffect(function(){function h(w){V.current.onTouchStart(w)}function x(w){V.current.onTouchMove(w)}function f(w){V.current.onTouchEnd(w)}function v(w){V.current.onWheel(w)}return document.addEventListener("touchmove",x,{passive:!1}),document.addEventListener("touchend",f,{passive:!1}),e.current.addEventListener("touchstart",h,{passive:!1}),e.current.addEventListener("wheel",v),function(){document.removeEventListener("touchmove",x),document.removeEventListener("touchend",f)}},[])}function Yt(e){var a=n.useState(0),r=E(a,2),t=r[0],o=r[1],i=n.useRef(0),l=n.useRef();return l.current=e,En(function(){var s;(s=l.current)===null||s===void 0||s.call(l)},[t]),function(){i.current===t&&(i.current+=1,o(i.current))}}function jn(e){var a=n.useRef([]),r=n.useState({}),t=E(r,2),o=t[1],i=n.useRef(typeof e=="function"?e():e),l=Yt(function(){var c=i.current;a.current.forEach(function(m){c=m(c)}),a.current=[],i.current=c,o({})});function s(c){a.current.push(c),l()}return[i.current,s]}var At={width:0,height:0,left:0,top:0,right:0};function Wn(e,a,r,t,o,i,l){var s=l.tabs,c=l.tabPosition,m=l.rtl,u,d,b;return["top","bottom"].includes(c)?(u="width",d=m?"right":"left",b=Math.abs(r)):(u="height",d="top",b=-r),n.useMemo(function(){if(!s.length)return[0,0];for(var C=s.length,T=C,R=0;Rb+a){T=R-1;break}}for(var I=0,S=C-1;S>=0;S-=1){var k=e.get(s[S].key)||At;if(k[d]L?"left":"right"})}),w=E(v,2),P=w[0],J=w[1],X=$t(0,function(M,L){!f&&k&&k({direction:M>L?"top":"bottom"})}),B=E(X,2),$=B[0],j=B[1],le=n.useState([0,0]),oe=E(le,2),g=oe[0],W=oe[1],ae=n.useState([0,0]),Y=E(ae,2),q=Y[0],Ce=Y[1],ve=n.useState([0,0]),pe=E(ve,2),Oe=pe[0],Ne=pe[1],Ie=n.useState([0,0]),xe=E(Ie,2),ze=xe[0],Be=xe[1],U=jn(new Map),ue=E(U,2),Re=ue[0],bt=ue[1],we=Bn(i,Re,q[0]),$e=st(g,f),ke=st(q,f),Ke=st(Oe,f),De=st(ze,f),Xe=$eme?me:M}var Ye=n.useRef(),Qe=n.useState(),We=E(Qe,2),Me=We[0],Ze=We[1];function Le(){Ze(Date.now())}function Ve(){window.clearTimeout(Ye.current)}Dn(y,function(M,L){function G(Q,ge){Q(function(ce){var O=je(ce+ge);return O})}return Xe?(f?G(J,M):G(j,L),Ve(),Le(),!0):!1}),n.useEffect(function(){return Ve(),Me&&(Ye.current=window.setTimeout(function(){Ze(0)},100)),Ve},[Me]);var gt=Wn(we,se,f?P:$,ke,Ke,De,ne(ne({},e),{},{tabs:i})),qe=E(gt,2),et=qe[0],be=qe[1],F=on(function(){var M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:u,L=we.get(M)||{width:0,height:0,left:0,right:0,top:0};if(f){var G=P;d?L.rightP+se&&(G=L.right+L.width-se):L.left<-P?G=-L.left:L.left+L.width>-P+se&&(G=-(L.left+L.width-se)),j(0),J(je(G))}else{var Q=$;L.top<-$?Q=-L.top:L.top+L.height>-$+se&&(Q=-(L.top+L.height-se)),J(0),j(je(Q))}}),ee={};R==="top"||R==="bottom"?ee[d?"marginRight":"marginLeft"]=z:ee.marginTop=z;var Ue=i.map(function(M,L){var G=M.key;return n.createElement(Gn,{id:c,prefixCls:o,key:G,tab:M,style:L===0?void 0:ee,closable:M.closable,editable:C,active:G===u,renderWrapper:I,removeAriaLabel:T==null?void 0:T.removeAriaLabel,onClick:function(ge){S(G,ge)},onFocus:function(){F(G),Le(),y.current&&(d||(y.current.scrollLeft=0),y.current.scrollTop=0)}})}),Ee=function(){return bt(function(){var L=new Map;return i.forEach(function(G){var Q,ge=G.key,ce=(Q=V.current)===null||Q===void 0?void 0:Q.querySelector('[data-node-key="'.concat(Qt(ge),'"]'));ce&&L.set(ge,{width:ce.offsetWidth,height:ce.offsetHeight,left:ce.offsetLeft,top:ce.offsetTop})}),L})};n.useEffect(function(){Ee()},[i.map(function(M){return M.key}).join("_")]);var Te=Yt(function(){var M=_e(D),L=_e(K),G=_e(N);W([M[0]-L[0]-G[0],M[1]-L[1]-G[1]]);var Q=_e(x);Ne(Q);var ge=_e(h);Be(ge);var ce=_e(V);Ce([ce[0]-Q[0],ce[1]-Q[1]]),Ee()}),ie=i.slice(0,et),tt=i.slice(be+1),nt=[].concat(Pt(ie),Pt(tt)),Ae=n.useState(),at=E(Ae,2),ht=at[0],rt=at[1],ye=we.get(u),ot=n.useRef();function it(){Ot.cancel(ot.current)}n.useEffect(function(){var M={};return ye&&(f?(d?M.right=ye.right:M.left=ye.left,M.width=ye.width):(M.top=ye.top,M.height=ye.height)),it(),ot.current=Ot(function(){rt(M)}),it},[ye,f,d]),n.useEffect(function(){F()},[u,de,me,_t(ye),_t(we),f]),n.useEffect(function(){Te()},[d]);var He=!!nt.length,Pe="".concat(o,"-nav-wrap"),Fe,Ge,lt,fe;return f?d?(Ge=P>0,Fe=P!==me):(Fe=P<0,Ge=P!==de):(lt=$<0,fe=$!==de),n.createElement(xt,{onResize:Te},n.createElement("div",{ref:ln(a,D),role:"tablist",className:Z("".concat(o,"-nav"),l),style:s,onKeyDown:function(){Le()}},n.createElement(zt,{ref:K,position:"left",extra:b,prefixCls:o}),n.createElement("div",{className:Z(Pe,(r={},H(r,"".concat(Pe,"-ping-left"),Fe),H(r,"".concat(Pe,"-ping-right"),Ge),H(r,"".concat(Pe,"-ping-top"),lt),H(r,"".concat(Pe,"-ping-bottom"),fe),r)),ref:y},n.createElement(xt,{onResize:Te},n.createElement("div",{ref:V,className:"".concat(o,"-nav-list"),style:{transform:"translate(".concat(P,"px, ").concat($,"px)"),transition:Me?"none":void 0}},Ue,n.createElement(Zt,{ref:x,prefixCls:o,locale:T,editable:C,style:ne(ne({},Ue.length===0?void 0:ee),{},{visibility:He?"hidden":null})}),n.createElement("div",{className:Z("".concat(o,"-ink-bar"),H({},"".concat(o,"-ink-bar-animated"),m.inkBar)),style:ht})))),n.createElement(Fn,_({},e,{removeAriaLabel:T==null?void 0:T.removeAriaLabel,ref:h,prefixCls:o,tabs:nt,className:!He&&yt,tabMoving:!!Me})),n.createElement(zt,{ref:N,position:"right",extra:b,prefixCls:o})))}const Bt=n.forwardRef(Jn);var Xn=["renderTabBar"],Yn=["label","key"];function Qn(e){var a=e.renderTabBar,r=vt(e,Xn),t=n.useContext(pt),o=t.tabs;if(a){var i=ne(ne({},r),{},{panes:o.map(function(l){var s=l.label,c=l.key,m=vt(l,Yn);return n.createElement(Xt,_({tab:s,key:c,tabKey:c},m))})});return a(i,Bt)}return n.createElement(Bt,r)}function Zn(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{inkBar:!0,tabPane:!1},a;return e===!1?a={inkBar:!1,tabPane:!1}:e===!0?a={inkBar:!0,tabPane:!1}:a=ne({inkBar:!0},Se(e)==="object"?e:{}),a.tabPaneMotion&&a.tabPane===void 0&&(a.tabPane=!0),!a.tabPaneMotion&&a.tabPane&&(a.tabPane=!1),a}var qn=["id","prefixCls","className","items","direction","activeKey","defaultActiveKey","editable","animated","tabPosition","tabBarGutter","tabBarStyle","tabBarExtraContent","locale","moreIcon","moreTransitionName","destroyInactiveTabPane","renderTabBar","onChange","onTabClick","onTabScroll","getPopupContainer","popupClassName"],Kt=0;function ea(e,a){var r,t=e.id,o=e.prefixCls,i=o===void 0?"rc-tabs":o,l=e.className,s=e.items,c=e.direction,m=e.activeKey,u=e.defaultActiveKey,d=e.editable,b=e.animated,C=e.tabPosition,T=C===void 0?"top":C,R=e.tabBarGutter,z=e.tabBarStyle,I=e.tabBarExtraContent,S=e.locale,k=e.moreIcon,D=e.moreTransitionName,K=e.destroyInactiveTabPane,N=e.renderTabBar,y=e.onChange,V=e.onTabClick,h=e.onTabScroll,x=e.getPopupContainer,f=e.popupClassName,v=vt(e,qn),w=n.useMemo(function(){return(s||[]).filter(function(U){return U&&Se(U)==="object"&&"key"in U})},[s]),P=c==="rtl",J=Zn(b),X=n.useState(!1),B=E(X,2),$=B[0],j=B[1];n.useEffect(function(){j(Sn())},[]);var le=Tt(function(){var U;return(U=w[0])===null||U===void 0?void 0:U.key},{value:m,defaultValue:u}),oe=E(le,2),g=oe[0],W=oe[1],ae=n.useState(function(){return w.findIndex(function(U){return U.key===g})}),Y=E(ae,2),q=Y[0],Ce=Y[1];n.useEffect(function(){var U=w.findIndex(function(Re){return Re.key===g});if(U===-1){var ue;U=Math.max(0,Math.min(q,w.length-1)),W((ue=w[U])===null||ue===void 0?void 0:ue.key)}Ce(U)},[w.map(function(U){return U.key}).join("_"),g,q]);var ve=Tt(null,{value:t}),pe=E(ve,2),Oe=pe[0],Ne=pe[1];n.useEffect(function(){t||(Ne("rc-tabs-".concat(Kt)),Kt+=1)},[]);function Ie(U,ue){V==null||V(U,ue);var Re=U!==g;W(U),Re&&(y==null||y(U))}var xe={id:Oe,activeKey:g,animated:J,tabPosition:T,rtl:P,mobile:$},ze,Be=ne(ne({},xe),{},{editable:d,locale:S,moreIcon:k,moreTransitionName:D,tabBarGutter:R,onTabClick:Ie,onTabScroll:h,extra:I,style:z,panes:null,getPopupContainer:x,popupClassName:f});return n.createElement(pt.Provider,{value:{tabs:w,prefixCls:i}},n.createElement("div",_({ref:a,id:t,className:Z(i,"".concat(i,"-").concat(T),(r={},H(r,"".concat(i,"-mobile"),$),H(r,"".concat(i,"-editable"),d),H(r,"".concat(i,"-rtl"),P),r),l)},v),ze,n.createElement(Qn,_({},Be,{renderTabBar:N})),n.createElement(zn,_({destroyInactiveTabPane:K},xe,{animated:J}))))}var ta=n.forwardRef(ea),na={motionAppear:!1,motionEnter:!0,motionLeave:!0};function aa(e){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{inkBar:!0,tabPane:!1},r;return a===!1?r={inkBar:!1,tabPane:!1}:a===!0?r={inkBar:!0,tabPane:!0}:r=_({inkBar:!0},Se(a)==="object"?a:{}),r.tabPane&&(r.tabPaneMotion=_(_({},na),{motionName:Cn(e,"switch")})),r}var ra=globalThis&&globalThis.__rest||function(e,a){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&a.indexOf(t)<0&&(r[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,t=Object.getOwnPropertySymbols(e);oa){var m=a-r;return t.push(String(i).slice(0,m)),t}t.push(i),r=c}return e}var Sa=0,ct=1,Wt=2,Ct=3,Vt=4,Ca=function(a){var r=a.enabledMeasure,t=a.children,o=a.text,i=a.width,l=a.fontSize,s=a.rows,c=a.onEllipsis,m=n.useState([0,0,0]),u=E(m,2),d=E(u[0],3),b=d[0],C=d[1],T=d[2],R=u[1],z=n.useState(Sa),I=E(z,2),S=I[0],k=I[1],D=n.useState(0),K=E(D,2),N=K[0],y=K[1],V=n.useRef(null),h=n.useRef(null),x=n.useMemo(function(){return kt(o)},[o]),f=n.useMemo(function(){return Ea(x)},[x]),v=n.useMemo(function(){return!r||S!==Ct?t(x,!1):t(jt(x,C),C1&&ie,at=function(p){var A;se(!0),(A=F.onExpand)===null||A===void 0||A.call(F,p)},ht=n.useState(0),rt=E(ht,2),ye=rt[0],ot=rt[1],it=n.useState(0),He=E(it,2),Pe=He[0],Fe=He[1],Ge=function(p,A){var te=p.offsetWidth,he;ot(te),Fe(parseInt((he=window.getComputedStyle)===null||he===void 0?void 0:he.call(window,A).fontSize,10)||0)},lt=function(p){var A;je(p),me!==p&&((A=F.onEllipsis)===null||A===void 0||A.call(F,p))};n.useEffect(function(){var O=K.current;if(be&&ie&&O){var p=Ae?O.offsetHeight"u"||!O||!ie||!ee)){var p=new IntersectionObserver(function(){gt(!!O.offsetParent)});return p.observe(O),function(){p.disconnect()}}},[ie,ee]);var fe={};F.tooltip===!0?fe={title:(r=v.text)!==null&&r!==void 0?r:u}:n.isValidElement(F.tooltip)?fe={title:F.tooltip}:Se(F.tooltip)==="object"?fe=_({title:(t=v.text)!==null&&t!==void 0?t:u},F.tooltip):fe={title:F.tooltip};var M=n.useMemo(function(){var O=function(A){return["string","number"].includes(Se(A))};if(!(!be||ie)){if(O(v.text))return v.text;if(O(u))return u;if(O(R))return R;if(O(fe.title))return fe.title}},[be,ie,R,fe.title,tt]);if(J)return n.createElement(ma,{value:(o=v.text)!==null&&o!==void 0?o:typeof u=="string"?u:"",onSave:oe,onCancel:g,onEnd:v.onEnd,prefixCls:y,className:l,style:s,direction:k,component:T,maxLength:v.maxLength,autoSize:v.autoSize,enterIcon:v.enterIcon});var L=function(){var p=F.expandable,A=F.symbol;if(!p)return null;var te;return A?te=A:te=D.expand,n.createElement("a",{key:"expand",className:"".concat(y,"-expand"),onClick:at,"aria-label":D.expand},te)},G=function(){if(f){var p=v.icon,A=v.tooltip,te=kt(A)[0]||D.edit,he=typeof te=="string"?te:"";return $.includes("icon")?n.createElement(Rt,{key:"edit",title:A===!1?"":te},n.createElement(Dt,{ref:N,className:"".concat(y,"-edit"),onClick:le,"aria-label":he},p||n.createElement(yn,{role:"button"}))):null}},Q=function(){if(Y){var p=q.tooltips,A=q.icon,te=Ut(p),he=Ut(A),Et=pe?ut(te[1],D.copied):ut(te[0],D.copy),tn=pe?D.copied:D.copy,nn=typeof Et=="string"?Et:tn;return n.createElement(Rt,{key:"copy",title:Et},n.createElement(Dt,{className:Z("".concat(y,"-copy"),pe&&"".concat(y,"-copy-success")),onClick:ze,"aria-label":nn},pe?ut(he[1],n.createElement(hn,null),!0):ut(he[0],n.createElement(On,null),!0)))}},ge=function(p){return[p&&L(),G(),Q()]},ce=function(p){return[p&&n.createElement("span",{"aria-hidden":!0,key:"ellipsis"},Pa),F.suffix,ge(p)]};return n.createElement(xt,{onResize:Ge,disabled:!ee||ie},function(O){return n.createElement(Ra,{tooltipProps:fe,enabledEllipsis:ee,isEllipsis:tt},n.createElement(qt,_({className:Z(H(H(H(H(H(H({},"".concat(y,"-").concat(c),c),"".concat(y,"-disabled"),m),"".concat(y,"-ellipsis"),be),"".concat(y,"-single-line"),ee&&Ee===1),"".concat(y,"-ellipsis-single-line"),nt),"".concat(y,"-ellipsis-multiple-line"),Ae),l),prefixCls:i,style:_(_({},s),{WebkitLineClamp:Ae?Ee:void 0}),component:T,ref:Ft(O,K,a),direction:k,onClick:$.includes("text")?le:void 0,"aria-label":M==null?void 0:M.toString(),title:R},V),n.createElement(xa,{enabledMeasure:ee&&!ie,text:u,rows:Ee,width:ye,fontSize:Pe,onEllipsis:lt},function(p,A){var te=p;p.length&&A&&M&&(te=n.createElement("span",{key:"show-content","aria-hidden":!0},te));var he=ka(e,n.createElement(n.Fragment,null,te,ce(A)));return he})))})});const mt=Oa;var Na=globalThis&&globalThis.__rest||function(e,a){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&a.indexOf(t)<0&&(r[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,t=Object.getOwnPropertySymbols(e);o1){var a=e.shift();e[0]=a+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var i=0;i0&&(l=l.replace(/^[\/]+/,"")),i0?"?":"")+y.join("&"),c}return function(){var e;return typeof arguments[0]=="object"?e=arguments[0]:e=[].slice.call(arguments),n(e)}})})(urlJoin$1);var urlJoinExports=urlJoin$1.exports;const urlJoin=getDefaultExportFromCjs(urlJoinExports),editInput="_editInput_8tstc_1",editIcon="_editIcon_8tstc_9",editIconActive="_editIconActive_8tstc_15",styles$2={editInput,editIcon,editIconActive},EditableContent=({value:s,placeholder:n,defaultValue:e,style:t,onChange:a,...i})=>{const[l,c]=reactExports.useState(!1),[y,A]=reactExports.useState(!1),M=reactExports.useRef();return reactExports.useEffect(()=>{l&&M.current.focus({cursor:"end"})},[l]),jsxRuntimeExports.jsxs("div",{style:{...t,position:"relative",display:"flex",alignItems:"center"},onMouseEnter:()=>A(!0),onMouseLeave:()=>A(!1),children:[l?jsxRuntimeExports.jsx(Input,{...i,ref:M,placeholder:n,defaultValue:s,onBlur:D=>{c(!1),a(D)},onKeyUp:D=>{D.key==="Enter"&&(a(D),c(!1))}}):jsxRuntimeExports.jsx("div",{className:styles$2.editInput,children:s||e}),jsxRuntimeExports.jsx(FormOutlined$1,{className:classNames(styles$2.editIcon,{[styles$2.editIconActive]:!l&&y}),onClick:()=>{c(!0)}})]})},EditableContent$1=reactExports.memo(EditableContent);var pdf={exports:{}};(function(module,exports){(function(n,e){module.exports=e()})(commonjsGlobal,function(){return(()=>{var __webpack_modules__=[,(s,n,e)=>{function t(F){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?t=function(u){return typeof u}:t=function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},t(F)}Object.defineProperty(n,"__esModule",{value:!0}),n.StatTimer=n.RenderingCancelledException=n.PixelsPerInch=n.PageViewport=n.PDFDateString=n.LinkTarget=n.DOMStandardFontDataFactory=n.DOMSVGFactory=n.DOMCanvasFactory=n.DOMCMapReaderFactory=void 0,n.addLinkAttributes=Y,n.deprecated=be,n.getFilenameFromUrl=k,n.getPdfFilenameFromUrl=I,n.getXfaPageViewport=$,n.isDataScheme=E,n.isPdfFile=g,n.isValidFetchUrl=re,n.loadScript=X;var a=c(e(2)),i=e(4),l=e(135);function c(F){return F&&F.__esModule?F:{default:F}}function y(F,p){var u=typeof Symbol<"u"&&F[Symbol.iterator]||F["@@iterator"];if(!u){if(Array.isArray(F)||(u=A(F))||p&&F&&typeof F.length=="number"){u&&(F=u);var S=0,L=function(){};return{s:L,n:function(){return S>=F.length?{done:!0}:{done:!1,value:F[S++]}},e:function(ge){throw ge},f:L}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +import{A as AntdIcon,f as _objectSpread2,c as classNames,l as _createClass,p as _classCallCheck,a as _slicedToArray,_ as _toConsumableArray,j as _typeof,b as _defineProperty,q as _inherits,r as _getPrototypeOf,s as _possibleConstructorReturn,t as _assertThisInitialized,u as _objectWithoutProperties}from"./_setToString-dbbee35a.js";import{r as reactExports,c as commonjsGlobal,g as getDefaultExportFromCjs,j as jsxRuntimeExports,i as commonjsRequire,P as PropTypes,R as React,_ as _extends}from"./umi-37873494.js";import{t as resolveHookState,v as useEffectOnce,w as invariant}from"./tiny-invariant-5c4293b4.js";import{_ as __spreadArrays,z as require$$5,u as useIntl,y as base64toFile}from"./index-92da7081.js";import{o as on,b as off,n as noop,I as Input,R as Row}from"./util-2d38567b.js";import{B as Button}from"./button-1ef38c18.js";import{S as Space,C as Checkbox}from"./TextArea-27ba039d.js";import{M as Modal}from"./index-54683183.js";import{S as Spin}from"./index-abb14cca.js";import{a as useMountedState}from"./useAsyncFn-ffd323fd.js";var ArrowLeftOutlined$2={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M872 474H286.9l350.2-304c5.6-4.9 2.2-14-5.2-14h-88.5c-3.9 0-7.6 1.4-10.5 3.9L155 487.8a31.96 31.96 0 000 48.3L535.1 866c1.5 1.3 3.3 2 5.2 2h91.5c7.4 0 10.8-9.2 5.2-14L286.9 550H872c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z"}}]},name:"arrow-left",theme:"outlined"};const ArrowLeftOutlinedSvg=ArrowLeftOutlined$2;var ArrowLeftOutlined=function(n,e){return reactExports.createElement(AntdIcon,_objectSpread2(_objectSpread2({},n),{},{ref:e,icon:ArrowLeftOutlinedSvg}))},RefIcon$7=reactExports.forwardRef(ArrowLeftOutlined);const ArrowLeftOutlined$1=RefIcon$7;var ArrowRightOutlined$2={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M869 487.8L491.2 159.9c-2.9-2.5-6.6-3.9-10.5-3.9h-88.5c-7.4 0-10.8 9.2-5.2 14l350.2 304H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h585.1L386.9 854c-5.6 4.9-2.2 14 5.2 14h91.5c1.9 0 3.8-.7 5.2-2L869 536.2a32.07 32.07 0 000-48.4z"}}]},name:"arrow-right",theme:"outlined"};const ArrowRightOutlinedSvg=ArrowRightOutlined$2;var ArrowRightOutlined=function(n,e){return reactExports.createElement(AntdIcon,_objectSpread2(_objectSpread2({},n),{},{ref:e,icon:ArrowRightOutlinedSvg}))},RefIcon$6=reactExports.forwardRef(ArrowRightOutlined);const ArrowRightOutlined$1=RefIcon$6;var FileImageOutlined$2={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M553.1 509.1l-77.8 99.2-41.1-52.4a8 8 0 00-12.6 0l-99.8 127.2a7.98 7.98 0 006.3 12.9H696c6.7 0 10.4-7.7 6.3-12.9l-136.5-174a8.1 8.1 0 00-12.7 0zM360 442a40 40 0 1080 0 40 40 0 10-80 0zm494.6-153.4L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z"}}]},name:"file-image",theme:"outlined"};const FileImageOutlinedSvg=FileImageOutlined$2;var FileImageOutlined=function(n,e){return reactExports.createElement(AntdIcon,_objectSpread2(_objectSpread2({},n),{},{ref:e,icon:FileImageOutlinedSvg}))},RefIcon$5=reactExports.forwardRef(FileImageOutlined);const FileImageOutlined$1=RefIcon$5;var FilePdfOutlined$2={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M531.3 574.4l.3-1.4c5.8-23.9 13.1-53.7 7.4-80.7-3.8-21.3-19.5-29.6-32.9-30.2-15.8-.7-29.9 8.3-33.4 21.4-6.6 24-.7 56.8 10.1 98.6-13.6 32.4-35.3 79.5-51.2 107.5-29.6 15.3-69.3 38.9-75.2 68.7-1.2 5.5.2 12.5 3.5 18.8 3.7 7 9.6 12.4 16.5 15 3 1.1 6.6 2 10.8 2 17.6 0 46.1-14.2 84.1-79.4 5.8-1.9 11.8-3.9 17.6-5.9 27.2-9.2 55.4-18.8 80.9-23.1 28.2 15.1 60.3 24.8 82.1 24.8 21.6 0 30.1-12.8 33.3-20.5 5.6-13.5 2.9-30.5-6.2-39.6-13.2-13-45.3-16.4-95.3-10.2-24.6-15-40.7-35.4-52.4-65.8zM421.6 726.3c-13.9 20.2-24.4 30.3-30.1 34.7 6.7-12.3 19.8-25.3 30.1-34.7zm87.6-235.5c5.2 8.9 4.5 35.8.5 49.4-4.9-19.9-5.6-48.1-2.7-51.4.8.1 1.5.7 2.2 2zm-1.6 120.5c10.7 18.5 24.2 34.4 39.1 46.2-21.6 4.9-41.3 13-58.9 20.2-4.2 1.7-8.3 3.4-12.3 5 13.3-24.1 24.4-51.4 32.1-71.4zm155.6 65.5c.1.2.2.5-.4.9h-.2l-.2.3c-.8.5-9 5.3-44.3-8.6 40.6-1.9 45 7.3 45.1 7.4zm191.4-388.2L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z"}}]},name:"file-pdf",theme:"outlined"};const FilePdfOutlinedSvg=FilePdfOutlined$2;var FilePdfOutlined=function(n,e){return reactExports.createElement(AntdIcon,_objectSpread2(_objectSpread2({},n),{},{ref:e,icon:FilePdfOutlinedSvg}))},RefIcon$4=reactExports.forwardRef(FilePdfOutlined);const FilePdfOutlined$1=RefIcon$4;var FormOutlined$2={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M904 512h-56c-4.4 0-8 3.6-8 8v320H184V184h320c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V520c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M355.9 534.9L354 653.8c-.1 8.9 7.1 16.2 16 16.2h.4l118-2.9c2-.1 4-.9 5.4-2.3l415.9-415c3.1-3.1 3.1-8.2 0-11.3L785.4 114.3c-1.6-1.6-3.6-2.3-5.7-2.3s-4.1.8-5.7 2.3l-415.8 415a8.3 8.3 0 00-2.3 5.6zm63.5 23.6L779.7 199l45.2 45.1-360.5 359.7-45.7 1.1.7-46.4z"}}]},name:"form",theme:"outlined"};const FormOutlinedSvg=FormOutlined$2;var FormOutlined=function(n,e){return reactExports.createElement(AntdIcon,_objectSpread2(_objectSpread2({},n),{},{ref:e,icon:FormOutlinedSvg}))},RefIcon$3=reactExports.forwardRef(FormOutlined);const FormOutlined$1=RefIcon$3;var PlayCircleOutlined$2={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M719.4 499.1l-296.1-215A15.9 15.9 0 00398 297v430c0 13.1 14.8 20.5 25.3 12.9l296.1-215a15.9 15.9 0 000-25.8zm-257.6 134V390.9L628.5 512 461.8 633.1z"}}]},name:"play-circle",theme:"outlined"};const PlayCircleOutlinedSvg=PlayCircleOutlined$2;var PlayCircleOutlined=function(n,e){return reactExports.createElement(AntdIcon,_objectSpread2(_objectSpread2({},n),{},{ref:e,icon:PlayCircleOutlinedSvg}))},RefIcon$2=reactExports.forwardRef(PlayCircleOutlined);const PlayCircleOutlined$1=RefIcon$2;var SaveOutlined$2={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M893.3 293.3L730.7 130.7c-7.5-7.5-16.7-13-26.7-16V112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V338.5c0-17-6.7-33.2-18.7-45.2zM384 184h256v104H384V184zm456 656H184V184h136v136c0 17.7 14.3 32 32 32h320c17.7 0 32-14.3 32-32V205.8l136 136V840zM512 442c-79.5 0-144 64.5-144 144s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144zm0 224c-44.2 0-80-35.8-80-80s35.8-80 80-80 80 35.8 80 80-35.8 80-80 80z"}}]},name:"save",theme:"outlined"};const SaveOutlinedSvg=SaveOutlined$2;var SaveOutlined=function(n,e){return reactExports.createElement(AntdIcon,_objectSpread2(_objectSpread2({},n),{},{ref:e,icon:SaveOutlinedSvg}))},RefIcon$1=reactExports.forwardRef(SaveOutlined);const SaveOutlined$1=RefIcon$1;var StepBackwardOutlined$2={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M347.6 528.95l383.2 301.02c14.25 11.2 35.2 1.1 35.2-16.95V210.97c0-18.05-20.95-28.14-35.2-16.94L347.6 495.05a21.53 21.53 0 000 33.9M330 864h-64a8 8 0 01-8-8V168a8 8 0 018-8h64a8 8 0 018 8v688a8 8 0 01-8 8"}}]},name:"step-backward",theme:"outlined"};const StepBackwardOutlinedSvg=StepBackwardOutlined$2;var StepBackwardOutlined=function(n,e){return reactExports.createElement(AntdIcon,_objectSpread2(_objectSpread2({},n),{},{ref:e,icon:StepBackwardOutlinedSvg}))},RefIcon=reactExports.forwardRef(StepBackwardOutlined);const StepBackwardOutlined$1=RefIcon;var updateReducer=function(s){return(s+1)%1e6};function useUpdate(){var s=reactExports.useReducer(updateReducer,0),n=s[1];return n}function useGetSet(s){var n=reactExports.useRef(resolveHookState(s)),e=useUpdate();return reactExports.useMemo(function(){return[function(){return n.current},function(t){n.current=resolveHookState(t,n.current),e()}]},[])}function useCounter(s,n,e){s===void 0&&(s=0),n===void 0&&(n=null),e===void 0&&(e=null);var t=resolveHookState(s);typeof t!="number"&&console.error("initialValue has to be a number, got "+typeof s),typeof e=="number"?t=Math.max(t,e):e!==null&&console.error("min has to be a number, got "+typeof e),typeof n=="number"?t=Math.min(t,n):n!==null&&console.error("max has to be a number, got "+typeof n);var a=useGetSet(t),i=a[0],l=a[1];return[i(),reactExports.useMemo(function(){var c=function(y){var A=i(),M=resolveHookState(y,A);A!==M&&(typeof e=="number"&&(M=Math.max(M,e)),typeof n=="number"&&(M=Math.min(M,n)),A!==M&&l(M))};return{get:i,set:c,inc:function(y){y===void 0&&(y=1);var A=resolveHookState(y,i());typeof A!="number"&&console.error("delta has to be a number or function returning a number, got "+typeof A),c(function(M){return M+A})},dec:function(y){y===void 0&&(y=1);var A=resolveHookState(y,i());typeof A!="number"&&console.error("delta has to be a number or function returning a number, got "+typeof A),c(function(M){return M-A})},reset:function(y){y===void 0&&(y=t);var A=resolveHookState(y,i());typeof A!="number"&&console.error("value has to be a number or function returning a number, got "+typeof A),t=A,c(A)}}},[t,e,n])]}var createProcess$1=function(s){return function(n,e){var t=n.getData("text/uri-list");if(t){(s.onUri||noop)(t,e);return}if(n.files&&n.files.length){(s.onFiles||noop)(Array.from(n.files),e);return}if(e.clipboardData){var a=e.clipboardData.getData("text");(s.onText||noop)(a,e);return}}},useDrop=function(s,n){s===void 0&&(s={}),n===void 0&&(n=[]);var e=s.onFiles,t=s.onText,a=s.onUri,i=reactExports.useState(!1),l=i[0],c=i[1],y=reactExports.useCallback(c,[]),A=reactExports.useMemo(function(){return createProcess$1(s)},[e,t,a]);return reactExports.useEffect(function(){var M=function(P){P.preventDefault(),y(!0)},D=function(P){P.preventDefault(),y(!0)},U=function(){y(!1)},w=function(){y(!1)},T=function(P){P.preventDefault(),y(!1),A(P.dataTransfer,P)},O=function(P){A(P.clipboardData,P)};return on(document,"dragover",M),on(document,"dragenter",D),on(document,"dragleave",U),on(document,"dragexit",w),on(document,"drop",T),t&&on(document,"paste",O),function(){off(document,"dragover",M),off(document,"dragenter",D),off(document,"dragleave",U),off(document,"dragexit",w),off(document,"drop",T),off(document,"paste",O)}},__spreadArrays([A],n)),{over:l}};const useDrop$1=useDrop;var createProcess=function(s,n){return function(e,t){var a=e.getData("text/uri-list");if(a){(s.onUri||noop)(a,t);return}if(e.files&&e.files.length){(s.onFiles||noop)(Array.from(e.files),t);return}e.items&&e.items.length&&e.items[0].getAsString(function(i){n&&(s.onText||noop)(i,t)})}},createBond=function(s,n){return{onDragOver:function(e){e.preventDefault()},onDragEnter:function(e){e.preventDefault(),n(!0)},onDragLeave:function(){n(!1)},onDrop:function(e){e.preventDefault(),e.persist(),n(!1),s(e.dataTransfer,e)},onPaste:function(e){e.persist(),s(e.clipboardData,e)}}},useDropArea=function(s){s===void 0&&(s={});var n=s.onFiles,e=s.onText,t=s.onUri,a=useMountedState(),i=reactExports.useState(!1),l=i[0],c=i[1],y=reactExports.useMemo(function(){return createProcess(s,a())},[n,e,t]),A=reactExports.useMemo(function(){return createBond(y,c)},[y,c]);return[A,{over:l}]};const useDropArea$1=useDropArea;var useUnmount=function(s){var n=reactExports.useRef(s);n.current=s,useEffectOnce(function(){return function(){return n.current()}})};const useUnmount$1=useUnmount;var urlJoin$1={exports:{}};(function(s){(function(n,e,t){s.exports?s.exports=t():e[n]=t()})("urljoin",commonjsGlobal,function(){function n(e){var t=[];if(e.length===0)return"";if(typeof e[0]!="string")throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var a=e.shift();e[0]=a+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var i=0;i0&&(l=l.replace(/^[\/]+/,"")),i0?"?":"")+y.join("&"),c}return function(){var e;return typeof arguments[0]=="object"?e=arguments[0]:e=[].slice.call(arguments),n(e)}})})(urlJoin$1);var urlJoinExports=urlJoin$1.exports;const urlJoin=getDefaultExportFromCjs(urlJoinExports),editInput="_editInput_8tstc_1",editIcon="_editIcon_8tstc_9",editIconActive="_editIconActive_8tstc_15",styles$2={editInput,editIcon,editIconActive},EditableContent=({value:s,placeholder:n,defaultValue:e,style:t,onChange:a,...i})=>{const[l,c]=reactExports.useState(!1),[y,A]=reactExports.useState(!1),M=reactExports.useRef();return reactExports.useEffect(()=>{l&&M.current.focus({cursor:"end"})},[l]),jsxRuntimeExports.jsxs("div",{style:{...t,position:"relative",display:"flex",alignItems:"center"},onMouseEnter:()=>A(!0),onMouseLeave:()=>A(!1),children:[l?jsxRuntimeExports.jsx(Input,{...i,ref:M,placeholder:n,defaultValue:s,onBlur:D=>{c(!1),a(D)},onKeyUp:D=>{D.key==="Enter"&&(a(D),c(!1))}}):jsxRuntimeExports.jsx("div",{className:styles$2.editInput,children:s||e}),jsxRuntimeExports.jsx(FormOutlined$1,{className:classNames(styles$2.editIcon,{[styles$2.editIconActive]:!l&&y}),onClick:()=>{c(!0)}})]})},EditableContent$1=reactExports.memo(EditableContent);var pdf={exports:{}};(function(module,exports){(function(n,e){module.exports=e()})(commonjsGlobal,function(){return(()=>{var __webpack_modules__=[,(s,n,e)=>{function t(F){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?t=function(u){return typeof u}:t=function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},t(F)}Object.defineProperty(n,"__esModule",{value:!0}),n.StatTimer=n.RenderingCancelledException=n.PixelsPerInch=n.PageViewport=n.PDFDateString=n.LinkTarget=n.DOMStandardFontDataFactory=n.DOMSVGFactory=n.DOMCanvasFactory=n.DOMCMapReaderFactory=void 0,n.addLinkAttributes=Y,n.deprecated=be,n.getFilenameFromUrl=k,n.getPdfFilenameFromUrl=I,n.getXfaPageViewport=$,n.isDataScheme=E,n.isPdfFile=g,n.isValidFetchUrl=re,n.loadScript=X;var a=c(e(2)),i=e(4),l=e(135);function c(F){return F&&F.__esModule?F:{default:F}}function y(F,p){var u=typeof Symbol<"u"&&F[Symbol.iterator]||F["@@iterator"];if(!u){if(Array.isArray(F)||(u=A(F))||p&&F&&typeof F.length=="number"){u&&(F=u);var S=0,L=function(){};return{s:L,n:function(){return S>=F.length?{done:!0}:{done:!1,value:F[S++]}},e:function(ge){throw ge},f:L}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var j=!0,J=!1,le;return{s:function(){u=u.call(F)},n:function(){var ge=u.next();return j=ge.done,ge},e:function(ge){J=!0,le=ge},f:function(){try{!j&&u.return!=null&&u.return()}finally{if(J)throw le}}}}function A(F,p){if(F){if(typeof F=="string")return M(F,p);var u=Object.prototype.toString.call(F).slice(8,-1);if(u==="Object"&&F.constructor&&(u=F.constructor.name),u==="Map"||u==="Set")return Array.from(F);if(u==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u))return M(F,p)}}function M(F,p){(p==null||p>F.length)&&(p=F.length);for(var u=0,S=new Array(p);u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function f(F){return f=Object.setPrototypeOf?Object.getPrototypeOf:function(u){return u.__proto__||Object.getPrototypeOf(u)},f(F)}var b="noopener noreferrer nofollow",m="http://www.w3.org/2000/svg",v={CSS:96,PDF:72,get PDF_TO_CSS_UNITS(){return(0,i.shadow)(this,"PDF_TO_CSS_UNITS",this.CSS/this.PDF)}};n.PixelsPerInch=v;var _=function(F){P(u,F);var p=R(u);function u(){var S,L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},j=L.ownerDocument,J=j===void 0?globalThis.document:j;return w(this,u),S=p.call(this),S._document=J,S}return O(u,[{key:"_createCanvas",value:function(L,j){var J=this._document.createElement("canvas");return J.width=L,J.height=j,J}}]),u}(l.BaseCanvasFactory);n.DOMCanvasFactory=_;function x(F){return z.apply(this,arguments)}function z(){return z=U(a.default.mark(function F(p){var u,S,L=arguments;return a.default.wrap(function(J){for(;;)switch(J.prev=J.next){case 0:if(u=L.length>1&&L[1]!==void 0?L[1]:!1,!re(p,document.baseURI)){J.next=21;break}return J.next=4,fetch(p);case 4:if(S=J.sent,S.ok){J.next=7;break}throw new Error(S.statusText);case 7:if(!u){J.next=15;break}return J.t1=Uint8Array,J.next=11,S.arrayBuffer();case 11:J.t2=J.sent,J.t0=new J.t1(J.t2),J.next=20;break;case 15:return J.t3=i.stringToBytes,J.next=18,S.text();case 18:J.t4=J.sent,J.t0=(0,J.t3)(J.t4);case 20:return J.abrupt("return",J.t0);case 21:return J.abrupt("return",new Promise(function(le,ve){var ge=new XMLHttpRequest;ge.open("GET",p,!0),u&&(ge.responseType="arraybuffer"),ge.onreadystatechange=function(){if(ge.readyState===XMLHttpRequest.DONE){if(ge.status===200||ge.status===0){var pe;if(u&&ge.response?pe=new Uint8Array(ge.response):!u&&ge.responseText&&(pe=(0,i.stringToBytes)(ge.responseText)),pe){le(pe);return}}ve(new Error(ge.statusText))}},ge.send(null)}));case 22:case"end":return J.stop()}},F)})),z.apply(this,arguments)}var N=function(F){P(u,F);var p=R(u);function u(){return w(this,u),p.apply(this,arguments)}return O(u,[{key:"_fetchData",value:function(L,j){return x(L,this.isCompressed).then(function(J){return{cMapData:J,compressionType:j}})}}]),u}(l.BaseCMapReaderFactory);n.DOMCMapReaderFactory=N;var V=function(F){P(u,F);var p=R(u);function u(){return w(this,u),p.apply(this,arguments)}return O(u,[{key:"_fetchData",value:function(L){return x(L,!0)}}]),u}(l.BaseStandardFontDataFactory);n.DOMStandardFontDataFactory=V;var ee=function(F){P(u,F);var p=R(u);function u(){return w(this,u),p.apply(this,arguments)}return O(u,[{key:"_createSVG",value:function(L){return document.createElementNS(m,L)}}]),u}(l.BaseSVGFactory);n.DOMSVGFactory=ee;var Z=function(){function F(p){var u=p.viewBox,S=p.scale,L=p.rotation,j=p.offsetX,J=j===void 0?0:j,le=p.offsetY,ve=le===void 0?0:le,ge=p.dontFlip,pe=ge===void 0?!1:ge;w(this,F),this.viewBox=u,this.scale=S,this.rotation=L,this.offsetX=J,this.offsetY=ve;var _e=(u[2]+u[0])/2,ke=(u[3]+u[1])/2,Ee,Fe,Ie,We;switch(L%=360,L<0&&(L+=360),L){case 180:Ee=-1,Fe=0,Ie=0,We=1;break;case 90:Ee=0,Fe=1,Ie=1,We=0;break;case 270:Ee=0,Fe=-1,Ie=-1,We=0;break;case 0:Ee=1,Fe=0,Ie=0,We=-1;break;default:throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.")}pe&&(Ie=-Ie,We=-We);var je,fe,de,G;Ee===0?(je=Math.abs(ke-u[1])*S+J,fe=Math.abs(_e-u[0])*S+ve,de=Math.abs(u[3]-u[1])*S,G=Math.abs(u[2]-u[0])*S):(je=Math.abs(_e-u[0])*S+J,fe=Math.abs(ke-u[1])*S+ve,de=Math.abs(u[2]-u[0])*S,G=Math.abs(u[3]-u[1])*S),this.transform=[Ee*S,Fe*S,Ie*S,We*S,je-Ee*S*_e-Ie*S*ke,fe-Fe*S*_e-We*S*ke],this.width=de,this.height=G}return O(F,[{key:"clone",value:function(){var u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=u.scale,L=S===void 0?this.scale:S,j=u.rotation,J=j===void 0?this.rotation:j,le=u.offsetX,ve=le===void 0?this.offsetX:le,ge=u.offsetY,pe=ge===void 0?this.offsetY:ge,_e=u.dontFlip,ke=_e===void 0?!1:_e;return new F({viewBox:this.viewBox.slice(),scale:L,rotation:J,offsetX:ve,offsetY:pe,dontFlip:ke})}},{key:"convertToViewportPoint",value:function(u,S){return i.Util.applyTransform([u,S],this.transform)}},{key:"convertToViewportRectangle",value:function(u){var S=i.Util.applyTransform([u[0],u[1]],this.transform),L=i.Util.applyTransform([u[2],u[3]],this.transform);return[S[0],S[1],L[0],L[1]]}},{key:"convertToPdfPoint",value:function(u,S){return i.Util.applyInverseTransform([u,S],this.transform)}}]),F}();n.PageViewport=Z;var ie=function(F){P(u,F);var p=R(u);function u(S,L){var j;return w(this,u),j=p.call(this,S,"RenderingCancelledException"),j.type=L,j}return u}(i.BaseException);n.RenderingCancelledException=ie;var H={NONE:0,SELF:1,BLANK:2,PARENT:3,TOP:4};n.LinkTarget=H;function Y(F){var p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},u=p.url,S=p.target,L=p.rel,j=p.enabled,J=j===void 0?!0:j;(0,i.assert)(u&&typeof u=="string",'addLinkAttributes: A valid "url" parameter must provided.');var le=(0,i.removeNullCharacters)(u);J?F.href=F.title=le:(F.href="",F.title="Disabled: ".concat(le),F.onclick=function(){return!1});var ve="";switch(S){case H.NONE:break;case H.SELF:ve="_self";break;case H.BLANK:ve="_blank";break;case H.PARENT:ve="_parent";break;case H.TOP:ve="_top";break}F.target=ve,F.rel=typeof L=="string"?L:b}function E(F){for(var p=F.length,u=0;u0?p:F.length,u>0?u:F.length);return F.substring(F.lastIndexOf("/",S)+1,S)}function I(F){var p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"document.pdf";if(typeof F!="string")return p;if(E(F))return(0,i.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'),p;var u=/^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/,S=/[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i,L=u.exec(F),j=S.exec(L[1])||S.exec(L[2])||S.exec(L[3]);if(j&&(j=j[0],j.includes("%")))try{j=S.exec(decodeURIComponent(j))[0]}catch{}return j||p}var q=function(){function F(){w(this,F),this.started=Object.create(null),this.times=[]}return O(F,[{key:"time",value:function(u){u in this.started&&(0,i.warn)("Timer is already running for ".concat(u)),this.started[u]=Date.now()}},{key:"timeEnd",value:function(u){u in this.started||(0,i.warn)("Timer has not been started for ".concat(u)),this.times.push({name:u,start:this.started[u],end:Date.now()}),delete this.started[u]}},{key:"toString",value:function(){var u=[],S=0,L=y(this.times),j;try{for(L.s();!(j=L.n()).done;){var J=j.value,le=J.name;le.length>S&&(S=le.length)}}catch(ke){L.e(ke)}finally{L.f()}var ve=y(this.times),ge;try{for(ve.s();!(ge=ve.n()).done;){var pe=ge.value,_e=pe.end-pe.start;u.push("".concat(pe.name.padEnd(S)," ").concat(_e,`ms `))}}catch(ke){ve.e(ke)}finally{ve.f()}return u.join("")}}]),F}();n.StatTimer=q;function re(F,p){try{var u=p?new URL(F,p):new URL(F),S=u.protocol;return S==="http:"||S==="https:"}catch{return!1}}function X(F){var p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return new Promise(function(u,S){var L=document.createElement("script");L.src=F,L.onload=function(j){p&&L.remove(),u(j)},L.onerror=function(){S(new Error("Cannot load script at: ".concat(L.src)))},(document.head||document.documentElement).appendChild(L)})}function be(F){console.log("Deprecated API usage: "+F)}var Pe,we=function(){function F(){w(this,F)}return O(F,null,[{key:"toDateObject",value:function(u){if(!u||!(0,i.isString)(u))return null;Pe||(Pe=new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?"));var S=Pe.exec(u);if(!S)return null;var L=parseInt(S[1],10),j=parseInt(S[2],10);j=j>=1&&j<=12?j-1:0;var J=parseInt(S[3],10);J=J>=1&&J<=31?J:1;var le=parseInt(S[4],10);le=le>=0&&le<=23?le:0;var ve=parseInt(S[5],10);ve=ve>=0&&ve<=59?ve:0;var ge=parseInt(S[6],10);ge=ge>=0&&ge<=59?ge:0;var pe=S[7]||"Z",_e=parseInt(S[8],10);_e=_e>=0&&_e<=23?_e:0;var ke=parseInt(S[9],10)||0;return ke=ke>=0&&ke<=59?ke:0,pe==="-"?(le+=_e,ve+=ke):pe==="+"&&(le-=_e,ve-=ke),new Date(Date.UTC(L,j,J,le,ve,ge))}}]),F}();n.PDFDateString=we;function $(F,p){var u=p.scale,S=u===void 0?1:u,L=p.rotation,j=L===void 0?0:L,J=F.attributes.style,le=J.width,ve=J.height,ge=[0,0,parseInt(le),parseInt(ve)];return new Z({viewBox:ge,scale:S,rotation:j})}},(s,n,e)=>{s.exports=e(3)},(s,n,e)=>{s=e.nmd(s);function t(i){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?t=function(c){return typeof c}:t=function(c){return c&&typeof Symbol=="function"&&c.constructor===Symbol&&c!==Symbol.prototype?"symbol":typeof c},t(i)}var a=function(i){var l=Object.prototype,c=l.hasOwnProperty,y,A=typeof Symbol=="function"?Symbol:{},M=A.iterator||"@@iterator",D=A.asyncIterator||"@@asyncIterator",U=A.toStringTag||"@@toStringTag";function w(g,k,I){return Object.defineProperty(g,k,{value:I,enumerable:!0,configurable:!0,writable:!0}),g[k]}try{w({},"")}catch{w=function(I,q,re){return I[q]=re}}function T(g,k,I,q){var re=k&&k.prototype instanceof d?k:d,X=Object.create(re.prototype),be=new H(q||[]);return X._invoke=V(g,I,be),X}i.wrap=T;function O(g,k,I){try{return{type:"normal",arg:g.call(k,I)}}catch(q){return{type:"throw",arg:q}}}var P="suspendedStart",B="suspendedYield",R="executing",W="completed",h={};function d(){}function f(){}function b(){}var m={};w(m,M,function(){return this});var v=Object.getPrototypeOf,_=v&&v(v(Y([])));_&&_!==l&&c.call(_,M)&&(m=_);var x=b.prototype=d.prototype=Object.create(m);f.prototype=b,w(x,"constructor",b),w(b,"constructor",f),f.displayName=w(b,U,"GeneratorFunction");function z(g){["next","throw","return"].forEach(function(k){w(g,k,function(I){return this._invoke(k,I)})})}i.isGeneratorFunction=function(g){var k=typeof g=="function"&&g.constructor;return k?k===f||(k.displayName||k.name)==="GeneratorFunction":!1},i.mark=function(g){return Object.setPrototypeOf?Object.setPrototypeOf(g,b):(g.__proto__=b,w(g,U,"GeneratorFunction")),g.prototype=Object.create(x),g},i.awrap=function(g){return{__await:g}};function N(g,k){function I(X,be,Pe,we){var $=O(g[X],g,be);if($.type==="throw")we($.arg);else{var F=$.arg,p=F.value;return p&&t(p)==="object"&&c.call(p,"__await")?k.resolve(p.__await).then(function(u){I("next",u,Pe,we)},function(u){I("throw",u,Pe,we)}):k.resolve(p).then(function(u){F.value=u,Pe(F)},function(u){return I("throw",u,Pe,we)})}}var q;function re(X,be){function Pe(){return new k(function(we,$){I(X,be,we,$)})}return q=q?q.then(Pe,Pe):Pe()}this._invoke=re}z(N.prototype),w(N.prototype,D,function(){return this}),i.AsyncIterator=N,i.async=function(g,k,I,q,re){re===void 0&&(re=Promise);var X=new N(T(g,k,I,q),re);return i.isGeneratorFunction(k)?X:X.next().then(function(be){return be.done?be.value:X.next()})};function V(g,k,I){var q=P;return function(X,be){if(q===R)throw new Error("Generator is already running");if(q===W){if(X==="throw")throw be;return E()}for(I.method=X,I.arg=be;;){var Pe=I.delegate;if(Pe){var we=ee(Pe,I);if(we){if(we===h)continue;return we}}if(I.method==="next")I.sent=I._sent=I.arg;else if(I.method==="throw"){if(q===P)throw q=W,I.arg;I.dispatchException(I.arg)}else I.method==="return"&&I.abrupt("return",I.arg);q=R;var $=O(g,k,I);if($.type==="normal"){if(q=I.done?W:B,$.arg===h)continue;return{value:$.arg,done:I.done}}else $.type==="throw"&&(q=W,I.method="throw",I.arg=$.arg)}}}function ee(g,k){var I=g.iterator[k.method];if(I===y){if(k.delegate=null,k.method==="throw"){if(g.iterator.return&&(k.method="return",k.arg=y,ee(g,k),k.method==="throw"))return h;k.method="throw",k.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var q=O(I,g.iterator,k.arg);if(q.type==="throw")return k.method="throw",k.arg=q.arg,k.delegate=null,h;var re=q.arg;if(!re)return k.method="throw",k.arg=new TypeError("iterator result is not an object"),k.delegate=null,h;if(re.done)k[g.resultName]=re.value,k.next=g.nextLoc,k.method!=="return"&&(k.method="next",k.arg=y);else return re;return k.delegate=null,h}z(x),w(x,U,"Generator"),w(x,M,function(){return this}),w(x,"toString",function(){return"[object Generator]"});function Z(g){var k={tryLoc:g[0]};1 in g&&(k.catchLoc=g[1]),2 in g&&(k.finallyLoc=g[2],k.afterLoc=g[3]),this.tryEntries.push(k)}function ie(g){var k=g.completion||{};k.type="normal",delete k.arg,g.completion=k}function H(g){this.tryEntries=[{tryLoc:"root"}],g.forEach(Z,this),this.reset(!0)}i.keys=function(g){var k=[];for(var I in g)k.push(I);return k.reverse(),function q(){for(;k.length;){var re=k.pop();if(re in g)return q.value=re,q.done=!1,q}return q.done=!0,q}};function Y(g){if(g){var k=g[M];if(k)return k.call(g);if(typeof g.next=="function")return g;if(!isNaN(g.length)){var I=-1,q=function re(){for(;++I=0;--re){var X=this.tryEntries[re],be=X.completion;if(X.tryLoc==="root")return q("end");if(X.tryLoc<=this.prev){var Pe=c.call(X,"catchLoc"),we=c.call(X,"finallyLoc");if(Pe&&we){if(this.prev=0;--q){var re=this.tryEntries[q];if(re.tryLoc<=this.prev&&c.call(re,"finallyLoc")&&this.prev=0;--I){var q=this.tryEntries[I];if(q.finallyLoc===k)return this.complete(q.completion,q.afterLoc),ie(q),h}},catch:function(k){for(var I=this.tryEntries.length-1;I>=0;--I){var q=this.tryEntries[I];if(q.tryLoc===k){var re=q.completion;if(re.type==="throw"){var X=re.arg;ie(q)}return X}}throw new Error("illegal catch attempt")},delegateYield:function(k,I,q){return this.delegate={iterator:Y(k),resultName:I,nextLoc:q},this.method==="next"&&(this.arg=y),h}},i}(t(s)==="object"?s.exports:{});try{regeneratorRuntime=a}catch{(typeof globalThis>"u"?"undefined":t(globalThis))==="object"?globalThis.regeneratorRuntime=a:Function("r","regeneratorRuntime = r")(a)}},(s,n,e)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.VerbosityLevel=n.Util=n.UnknownErrorException=n.UnexpectedResponseException=n.UNSUPPORTED_FEATURES=n.TextRenderingMode=n.StreamType=n.RenderingIntentFlag=n.PermissionFlag=n.PasswordResponses=n.PasswordException=n.PageActionEventType=n.OPS=n.MissingPDFException=n.IsLittleEndianCached=n.IsEvalSupportedCached=n.InvalidPDFException=n.ImageKind=n.IDENTITY_MATRIX=n.FormatError=n.FontType=n.FONT_IDENTITY_MATRIX=n.DocumentActionEventType=n.CMapCompressionType=n.BaseException=n.AnnotationType=n.AnnotationStateModelType=n.AnnotationReviewState=n.AnnotationReplyType=n.AnnotationMode=n.AnnotationMarkedState=n.AnnotationFlag=n.AnnotationFieldFlag=n.AnnotationBorderStyleType=n.AnnotationActionEventType=n.AbortException=void 0,n.arrayByteLength=ce,n.arraysToBytes=Se,n.assert=ge,n.bytesToString=Q,n.createObjectURL=wt,n.createPromiseCapability=_t,n.createValidAbsoluteUrl=ke,n.escapeString=Je,n.getModificationDate=Yt,n.getVerbosityLevel=j,n.info=J,n.isArrayBuffer=Ot,n.isArrayEqual=Ft,n.isAscii=rt,n.isBool=Tt,n.isNum=Xt,n.isSameOrigin=pe,n.isString=xt,n.objectFromMap=Le,n.objectSize=De,n.removeNullCharacters=ne,n.setVerbosityLevel=L,n.shadow=Ee,n.string32=Te,n.stringToBytes=he,n.stringToPDFString=Ye,n.stringToUTF16BEString=it,n.stringToUTF8String=gt,n.unreachable=ve,n.utf8StringToString=ht,n.warn=le,e(5);function t(ue,Re){for(var se=0;se diff --git a/dist/assets/parser-f1e7dbfb.js b/dist/assets/parser-c740d6a8.js similarity index 99% rename from dist/assets/parser-f1e7dbfb.js rename to dist/assets/parser-c740d6a8.js index 6d123927e986d86bfb56966fcff94bfa08876d26..f215e7c522054884e4e4fcb4605b7532d4e81eda 100644 --- a/dist/assets/parser-f1e7dbfb.js +++ b/dist/assets/parser-c740d6a8.js @@ -1,4 +1,4 @@ -import{g as mg,c as xg}from"./umi-91f9d113.js";import{ao as wg,bh as Cu,a5 as Ag,ai as bg,am as Ig,aj as Sg,ak as Tg,X as Eg,a4 as Cg,$ as Og,Z as kg,aq as Mg,ar as Bg}from"./_setToString-397d22bb.js";var Pg=wg,qg=Cu,Rg=Ag,Su=bg,Ng=Ig;function Lg(x,Y,N,k){if(!Su(x))return x;Y=qg(Y,x);for(var b=-1,v=Y.length,B=v-1,O=x;O!=null&&++b0&&N(O)?Y>1?Ou(O,Y-1,N,k,b):$g(b,O):k||(b[b.length]=O)}return b}var t0=Ou,n0=t0;function e0(x){var Y=x==null?0:x.length;return Y?n0(x,1):[]}var r0=e0,i0=r0,s0=Mg,o0=Bg;function u0(x){return o0(s0(x,void 0,i0),x+"")}var a0=u0,f0=Vg,c0=a0,l0=c0(function(x,Y){return x==null?{}:f0(x,Y)}),h0=l0;const E0=mg(h0);var ku={exports:{}};(function(x,Y){(function(k,b){x.exports=b()})(typeof self<"u"?self:xg,function(){return function(N){var k={};function b(v){if(k[v])return k[v].exports;var B=k[v]={i:v,l:!1,exports:{}};return N[v].call(B.exports,B,B.exports,b),B.l=!0,B.exports}return b.m=N,b.c=k,b.d=function(v,B,O){b.o(v,B)||Object.defineProperty(v,B,{enumerable:!0,get:O})},b.r=function(v){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(v,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(v,"__esModule",{value:!0})},b.t=function(v,B){if(B&1&&(v=b(v)),B&8||B&4&&typeof v=="object"&&v&&v.__esModule)return v;var O=Object.create(null);if(b.r(O),Object.defineProperty(O,"default",{enumerable:!0,value:v}),B&2&&typeof v!="string")for(var u in v)b.d(O,u,function(d){return v[d]}.bind(null,u));return O},b.n=function(v){var B=v&&v.__esModule?function(){return v.default}:function(){return v};return b.d(B,"a",B),B},b.o=function(v,B){return Object.prototype.hasOwnProperty.call(v,B)},b.p="",b(b.s="fae3")}({"0241":function(N,k,b){const v=b("b37a"),B=b("33e9"),u=800*.24,d=c=>Math.tanh(c/u),_=function(c,m,{softIndexFactor:D=1}={}){m=Number(m);const T=c[m];if(m>0){const et=c[m-1];console.assert(T.start!=null,"note.start is null",T),console.assert(et.start!=null,"lastNote.start is null",et),T.deltaSi=d((T.start-et.start)*D),T.softIndex=et.softIndex+T.deltaSi,console.assert(!Number.isNaN(T.deltaSi),"note.deltaSi is NaN.",T.start,et.start)}else T.softIndex=0,T.deltaSi=0},M=function(c,m,D=v.zero()){c.matches=[];const T=m.pitchMap[c.pitch];if(T)for(const et of T){const Q=new v(c,et);D&&Q.evaluatePrev(D),c.matches.push(Q)}},q=function(c,{softIndexFactor:m=1}={}){for(let D=0;Dnew Promise(u=>requestAnimationFrame(u));class O{constructor(d,{cacheSpan:_=600,onMidi:M,onPlayFinish:q,onTurnCursor:g}={}){this.cacheSpan=_,this.onMidi=M,this.onPlayFinish=q,this.onTurnCursor=g;let c;d.notes&&Number.isFinite(d.endTime)?c=d:c=v.parseMidi(d),this.notation=c,this.events=c.events,this.isPlaying=!1,this.progressTime=0,this.startTime=performance.now(),this.duration=c.endTime,this.cursorTurnDelta=0,console.assert(c.tempos&&c.tempos.length,"[MidiPlayer] invalid notation, tempos is empty.")}dispose(){this.isPlaying=!1,this.progressTime=0}get progressTicks(){return this.notation.timeToTicks(this.progressTime)}set progressTicks(d){this.progressTime=this.notation.ticksToTime(d),this.onTurnCursor&&this.onTurnCursor(this.progressTime)}async play({nextFrame:d=B}={}){this.progressTime>=this.duration&&(this.progressTime=0);let _=performance.now();this.startTime=_-this.progressTime,this.isPlaying=!0;let M=this.events.findIndex(q=>q.time>=_-this.startTime);for(;this.isPlaying;){for(;Mthis.progressTime+this.cacheSpan)break;q.data.type==="channel"&&this.startTime+q.time>=_&&this.onMidi&&this.onMidi(q.data,this.startTime+q.time)}if(await d(),!this.isPlaying)break;if(this.cursorTurnDelta!==0){const q=this.cursorTurnDelta<0;if(this.startTime-=this.cursorTurnDelta,this.cursorTurnDelta=0,q)for(;M>0;--M){const g=this.events[M].time;if(this.startTime+g<_)break}}_=performance.now(),this.progressTime=_-this.startTime,this.progressTime>this.duration&&(this.isPlaying=!1,this.onPlayFinish&&this.onPlayFinish())}}pause(){this.isPlaying=!1}turnCursor(d){this.isPlaying?this.cursorTurnDelta+=d-this.progressTime:this.progressTime=d,this.onTurnCursor&&this.onTurnCursor(d)}}N.exports=O},"2ef0":function(N,k,b){(function(v,B){var O;/** +import{g as mg,c as xg}from"./umi-37873494.js";import{ao as wg,bh as Cu,a5 as Ag,ai as bg,am as Ig,aj as Sg,ak as Tg,X as Eg,a4 as Cg,$ as Og,Z as kg,aq as Mg,ar as Bg}from"./_setToString-dbbee35a.js";var Pg=wg,qg=Cu,Rg=Ag,Su=bg,Ng=Ig;function Lg(x,Y,N,k){if(!Su(x))return x;Y=qg(Y,x);for(var b=-1,v=Y.length,B=v-1,O=x;O!=null&&++b0&&N(O)?Y>1?Ou(O,Y-1,N,k,b):$g(b,O):k||(b[b.length]=O)}return b}var t0=Ou,n0=t0;function e0(x){var Y=x==null?0:x.length;return Y?n0(x,1):[]}var r0=e0,i0=r0,s0=Mg,o0=Bg;function u0(x){return o0(s0(x,void 0,i0),x+"")}var a0=u0,f0=Vg,c0=a0,l0=c0(function(x,Y){return x==null?{}:f0(x,Y)}),h0=l0;const E0=mg(h0);var ku={exports:{}};(function(x,Y){(function(k,b){x.exports=b()})(typeof self<"u"?self:xg,function(){return function(N){var k={};function b(v){if(k[v])return k[v].exports;var B=k[v]={i:v,l:!1,exports:{}};return N[v].call(B.exports,B,B.exports,b),B.l=!0,B.exports}return b.m=N,b.c=k,b.d=function(v,B,O){b.o(v,B)||Object.defineProperty(v,B,{enumerable:!0,get:O})},b.r=function(v){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(v,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(v,"__esModule",{value:!0})},b.t=function(v,B){if(B&1&&(v=b(v)),B&8||B&4&&typeof v=="object"&&v&&v.__esModule)return v;var O=Object.create(null);if(b.r(O),Object.defineProperty(O,"default",{enumerable:!0,value:v}),B&2&&typeof v!="string")for(var u in v)b.d(O,u,function(d){return v[d]}.bind(null,u));return O},b.n=function(v){var B=v&&v.__esModule?function(){return v.default}:function(){return v};return b.d(B,"a",B),B},b.o=function(v,B){return Object.prototype.hasOwnProperty.call(v,B)},b.p="",b(b.s="fae3")}({"0241":function(N,k,b){const v=b("b37a"),B=b("33e9"),u=800*.24,d=c=>Math.tanh(c/u),_=function(c,m,{softIndexFactor:D=1}={}){m=Number(m);const T=c[m];if(m>0){const et=c[m-1];console.assert(T.start!=null,"note.start is null",T),console.assert(et.start!=null,"lastNote.start is null",et),T.deltaSi=d((T.start-et.start)*D),T.softIndex=et.softIndex+T.deltaSi,console.assert(!Number.isNaN(T.deltaSi),"note.deltaSi is NaN.",T.start,et.start)}else T.softIndex=0,T.deltaSi=0},M=function(c,m,D=v.zero()){c.matches=[];const T=m.pitchMap[c.pitch];if(T)for(const et of T){const Q=new v(c,et);D&&Q.evaluatePrev(D),c.matches.push(Q)}},q=function(c,{softIndexFactor:m=1}={}){for(let D=0;Dnew Promise(u=>requestAnimationFrame(u));class O{constructor(d,{cacheSpan:_=600,onMidi:M,onPlayFinish:q,onTurnCursor:g}={}){this.cacheSpan=_,this.onMidi=M,this.onPlayFinish=q,this.onTurnCursor=g;let c;d.notes&&Number.isFinite(d.endTime)?c=d:c=v.parseMidi(d),this.notation=c,this.events=c.events,this.isPlaying=!1,this.progressTime=0,this.startTime=performance.now(),this.duration=c.endTime,this.cursorTurnDelta=0,console.assert(c.tempos&&c.tempos.length,"[MidiPlayer] invalid notation, tempos is empty.")}dispose(){this.isPlaying=!1,this.progressTime=0}get progressTicks(){return this.notation.timeToTicks(this.progressTime)}set progressTicks(d){this.progressTime=this.notation.ticksToTime(d),this.onTurnCursor&&this.onTurnCursor(this.progressTime)}async play({nextFrame:d=B}={}){this.progressTime>=this.duration&&(this.progressTime=0);let _=performance.now();this.startTime=_-this.progressTime,this.isPlaying=!0;let M=this.events.findIndex(q=>q.time>=_-this.startTime);for(;this.isPlaying;){for(;Mthis.progressTime+this.cacheSpan)break;q.data.type==="channel"&&this.startTime+q.time>=_&&this.onMidi&&this.onMidi(q.data,this.startTime+q.time)}if(await d(),!this.isPlaying)break;if(this.cursorTurnDelta!==0){const q=this.cursorTurnDelta<0;if(this.startTime-=this.cursorTurnDelta,this.cursorTurnDelta=0,q)for(;M>0;--M){const g=this.events[M].time;if(this.startTime+g<_)break}}_=performance.now(),this.progressTime=_-this.startTime,this.progressTime>this.duration&&(this.isPlaying=!1,this.onPlayFinish&&this.onPlayFinish())}}pause(){this.isPlaying=!1}turnCursor(d){this.isPlaying?this.cursorTurnDelta+=d-this.progressTime:this.progressTime=d,this.onTurnCursor&&this.onTurnCursor(d)}}N.exports=O},"2ef0":function(N,k,b){(function(v,B){var O;/** * @license * Lodash * Copyright OpenJS Foundation and other contributors diff --git a/dist/assets/processCompressedAESFile-0057a8e1.js b/dist/assets/processCompressedAESFile-983b93dd.js similarity index 99% rename from dist/assets/processCompressedAESFile-0057a8e1.js rename to dist/assets/processCompressedAESFile-983b93dd.js index f35ac6168ce08cf17a3c92bc610f4f723e9d2c5a..5fadc9ccceeec9bf51f1f6e2de26e0a302502fbd 100644 --- a/dist/assets/processCompressedAESFile-0057a8e1.js +++ b/dist/assets/processCompressedAESFile-983b93dd.js @@ -1 +1 @@ -import{g as Ix}from"./umi-91f9d113.js";var kx={exports:{}},ax={exports:{}};(function(){var C=[],n0=3988292384;function F0(){var w,l,B;for(l=0;l<256;l+=1){for(w=l,B=0;B<8;B+=1)w&1?w=n0^w>>>1:w=w>>>1;C[l]=w>>>0}}function J(w){return Array.prototype.map.call(w,function(l){return l.charCodeAt(0)})}function V(w){var l=-1,B,D,b0,f0;for(B=0,b0=w.length;B>>1^n0:f0=f0>>>1;l=l>>>8^f0}return l^-1}function E(w,l){var B,D,b0;if(!((typeof E.crc>"u"||!l||!w)&&(E.crc=-1,!w))){for(B=E.crc,D=0,b0=w.length;D>>8^C[(B^w[D])&255];return E.crc=B,B^-1}}F0(),ax.exports=function(B,l){var B=typeof B=="string"?J(B):B,D=l?V(B):E(B);return(D>>>0).toString(16)},ax.exports.direct=V,ax.exports.table=E})();var $x=ax.exports,Mx={exports:{}},Ox={exports:{}};(function(){var C=32768,n0=0,F0=1,J=2,V=9,E=6,w,l,B=null,D,b0,f0,Z,W,a0,i0,Y,w0,c0,m0,_,T,y,K,P=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],Q=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],o0=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],x0=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],s0=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],l0=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function k0(){this.next=null,this.list=null}function B0(){this.e=0,this.b=0,this.n=0,this.t=null}function u0(v,p,m,d,o,S){this.BMAX=16,this.N_MAX=288,this.status=0,this.root=null,this.m=0;var y0,$=[],L,X,g,I,s,u,E0,S0=[],e0,h0,A0,z=new B0,_0=[],C0=[],j,q=[],v0,t0,r0,d0,R;for(R=this.root=null,s=0;s256?v[256]:this.BMAX,e0=v,h0=0,s=p;do $[e0[h0]]++,h0++;while(--s>0);if($[0]===p){this.root=null,this.m=0,this.status=0;return}for(u=1;u<=this.BMAX&&$[u]===0;u++);for(E0=u,Ss&&(S=s),t0=1<0;)q[v0++]=u+=e0[h0++];e0=v,h0=0,s=0;do(u=e0[h0++])!==0&&(C0[q[u]++]=s);while(++s0;){for(;E0>j+S0[1+I];){if(j+=S0[1+I],I++,r0=(r0=g-j)>S?S:r0,(X=1<<(u=E0-j))>y0+1)for(X-=y0+1,v0=E0;++uL&&j0&&(q[I]=s,z.b=S0[I],z.e=16+u,z.t=A0,u=(s&(1<>j-S0[I],_0[I-1][u].e=z.e,_0[I-1][u].b=z.b,_0[I-1][u].n=z.n,_0[I-1][u].t=z.t)}for(z.b=E0-j,h0>=p?z.e=99:e0[h0]>j;u>=1)s^=u;for(s^=u;(s&(1<>=v,W-=v}function e(v,p,m){var d,o,S;if(m===0)return 0;for(S=0;;){for(A(_),o=c0.list[N(_)],d=o.e;d>16;){if(d===99)return-1;H(o.b),d-=16,A(d),o=o.t[N(d)],d=o.e}if(H(o.b),d===16){if(l&=C-1,v[p+S++]=w[l++]=o.n,S===m)return m;continue}if(d===15)break;for(A(d),Y=o.n+N(d),H(d),A(T),o=m0.list[N(T)],d=o.e;d>16;){if(d===99)return-1;H(o.b),d-=16,A(d),o=o.t[N(d)],d=o.e}for(H(o.b),A(d),w0=l-o.n-N(d),H(d);Y>0&&S0&&d1)return B=null,console.error("HufBuild error: "+S.status),-1;D=S.root,f0=S.m}return c0=B,m0=D,_=b0,T=f0,e(v,p,m)}function b(v,p,m){var d,o,S,y0,$,L,X,g,I=[],s;for(d=0;d<286+30;d++)I[d]=0;if(A(5),X=257+N(5),H(5),A(5),g=1+N(5),H(5),A(4),L=4+N(4),H(4),X>286||g>30)return-1;for(o=0;oy0)return-1;for(;o-- >0;)I[d++]=S}else if(o===17){if(A(3),o=3+N(3),H(3),d+o>y0)return-1;for(;o-- >0;)I[d++]=0;S=0}else{if(A(7),o=11+N(7),H(7),d+o>y0)return-1;for(;o-- >0;)I[d++]=0;S=0}if(_=V,s=new u0(I,X,257,Q,o0,_),_===0&&(s.status=1),s.status!==0&&s.status!==1)return-1;for(c0=s.root,_=s.m,d=0;d257||s.status!==0?-1:e(v,p,m)}function f(){w||(w=[]),l=0,Z=0,W=0,a0=-1,i0=!1,Y=w0=0,c0=null}function k(v,p,m){var d,o;for(d=0;d0){if(a0!==n0)for(;Y>0&&d0&&d0);return y=null,p}Ox.exports=G})();var Vx=Ox.exports,ux={exports:{}};(function(){var C=32768,n0=0,F0=1,J=2,V=6,E=1024*8,w=2*C,l=3,B=258,D=8192,b0=15,f0=D,Z=1<9&&(x=9):x=V,e0=x,H=!1,s=!1,e===null){for(g0=A=N=null,e=[],f=[],k=[],G=[],v=[],z=[],c=0;c>>8):(V0(x&255),V0(x>>>8))}function xx(){o=(o<>7)])&255}function wx(x,c,i){return x[c].fcc0?g-c0:i0,O=g+B,F=f[i+h-1],p0=f[i+h],U,R0;X>=h0&&(c>>=2);do if(t=x,!(f[t+h]!==p0||f[t+h-1]!==F||f[t]!==f[i]||f[++t]!==f[i+1])){for(i+=2,t++;ih){if(I=x,h=n,n>=A0)break;F=f[i+h-1],p0=f[i+h]}}while((x=v[x&a0])>M&&--c!==0);return h}function nx(){var x,c,i=w-u-g;if(i===-1)i--;else if(g>=C+c0){for(x=0;x=C?c-C:i0);for(x=0;x=C?c-C:i0;i+=C}s||(x=mx(f,g+u,i),x<=0?s=!0:u+=x)}function Ux(){for(;u!==0&&A===null;){var x;if(xx(),S!==i0&&g-S<=c0&&(L=gx(S),L>u&&(L=u)),L>=l)if(x=q0(g-I,L-l),u-=L,L<=S0){L--;do g++,xx();while(--L!==0);g++}else g+=L,L=0,o=f[g]&255,o=(o<u&&(L=u),L===l&&g-I>Y&&L--),X>=l&&L<=X){var x;x=q0(g-1-y0,X-l),u-=X-1,X-=2;do g++,xx();while(--X!==0);$=!1,L=l-1,g++,x&&(ex(0),d=g)}else $?(q0(0,f[g-1]&255)&&(ex(0),d=g),g++,u--):($=!0,g++,u--);for(;uA.len&&(n=A.len),h=0;ha-r&&(n=a-r),h=0;h>=7;th&&(U=h,fx++),c[F].dl=U,!(F>n)&&(d0[U]++,R0=0,F>=t&&(R0=i[F-t]),lx=c[F].fc,z0+=lx*(U+R0),M!==null&&(W0+=lx*(M[F].dl+R0)));if(fx!==0){do{for(U=h-1;d0[U]===0;)U--;d0[U]--,d0[U+1]+=2,d0[h]--,fx-=2}while(fx>0);for(U=h;U!==0;U--)for(F=d0[U];F!==0;)p0=R[--O],!(p0>n)&&(c[p0].dl!==U&&(z0+=(U-c[p0].dl)*c[p0].fc,c[p0].fc=U),F--)}}function Sx(x,c){var i=[],t=0,n,h;for(n=1;n<=_;n++)t=t+d0[n-1]<<1,i[n]=t;for(h=0;h<=c;h++){var M=x[h].dl;M!==0&&(x[h].fc=Fx(i[M]++,M))}}function ox(x){var c=x.dyn_tree,i=x.static_tree,t=x.elems,n,h,M=-1,O=t;for(O0=0,K0=B0,n=0;n>1;n>=1;n--)ix(c,n);do n=R[m0],R[m0]=R[O0--],ix(c,m0),h=R[m0],R[--K0]=n,R[--K0]=h,c[O].fc=c[n].fc+c[h].fc,I0[n]>I0[h]+1?I0[O]=I0[n]:I0[O]=I0[h]+1,c[n].dl=c[h].dl=O,R[m0]=O++,ix(c,m0);while(O0>=2);R[--K0]=R[m0],Gx(x),Sx(c,M)}function Ax(x,c){var i,t=-1,n,h=x[0].dl,M=0,O=7,F=4;for(h===0&&(O=138,F=3),x[c+1].dl=65535,i=0;i<=c;i++)n=h,h=x[i+1].dl,!(++M=3&&q[hx[x]].dl===0;x--);return z0+=3*(x+1)+5+5+4,x}function Jx(x,c,i){var t;for(T0(x-257,5),T0(c-1,5),T0(i-4,4),t=0;t>3,i=W0+3+7>>3,i<=c&&(c=i),n+4<=c&&d>=0)for(T0((n0<<1)+x,3),Bx(),Q0(n),Q0(~n),h=0;h2&&!(D0&4095)){var i=D0*8,t=g-d,n;for(n=0;n>=3,j0>=1;while(nsx-c?(p|=x<>sx-m,m+=c-sx):(p|=x<>=1,i<<=1;while(--c>0);return i>>1}function Bx(){m>8?Q0(p):m>0&&V0(p),p=0,m=0}function Wx(){var x,c;if(a!==0){for(x=Hx(),A===null?A=N=x:N=N.next=x,x.len=a-r,c=0;c"u"&&(c=V),Kx(c),t=[];do i=qx(t,t.length,1024);while(i>0);return Y0=null,t}ux.exports=Yx,ux.exports.DEFAULT_LEVEL=V})();var Qx=ux.exports;(function(){Mx.exports={inflate:Vx,deflate:Qx}})();var xe=Mx.exports;(function(){var C=$x,n0=xe,F0=31,J=139,V={deflate:8},E={FTEXT:1,FHCRC:2,FEXTRA:4,FNAME:8,FCOMMENT:16},w={fat:0,amiga:1,vmz:2,unix:3,"vm/cms":4,atari:5,hpfs:6,macintosh:7,"z-system":8,cplm:9,"tops-20":10,ntfs:11,qdos:12,acorn:13,vfat:14,vms:15,beos:16,tandem:17,theos:18},l="unix",B=6;function D(_,T){T.push(_&255)}function b0(_,T){T.push(_&255),T.push(_>>>8)}function f0(_,T){b0(_&65535,T),b0(_>>>16,T)}function Z(_,T){var y,K=_.length;for(y=0;y32768?(y-=32768,(y<<16|T)+32768*Math.pow(2,16)):y<<16|T}function Y(_){for(var T=[];_[0]!==0;)T.push(String.fromCharCode(_.shift()));return _.shift(),T.join("")}function w0(_,T){var y,K=[];for(y=0;y. See LICENSE.txt. */(function(C,n0){(function(F0){function J(e){return parseInt(e)===e}function V(e){if(!J(e.length))return!1;for(var a=0;a255)return!1;return!0}function E(e,a){if(e.buffer&&e.name==="Uint8Array")return a&&(e.slice?e=e.slice():e=Array.prototype.slice.call(e)),e;if(Array.isArray(e)){if(!V(e))throw new Error("Array contains invalid value: "+e);return new Uint8Array(e)}if(J(e.length)&&V(e))return new Uint8Array(e);throw new Error("unsupported array-like object")}function w(e){return new Uint8Array(e)}function l(e,a,r,b,f){(b!=null||f!=null)&&(e.slice?e=e.slice(b,f):e=Array.prototype.slice.call(e,b,f)),a.set(e,r)}var B=function(){function e(r){var b=[],f=0;for(r=encodeURI(r);f191&&k<224?(b.push(String.fromCharCode((k&31)<<6|r[f+1]&63)),f+=2):(b.push(String.fromCharCode((k&15)<<12|(r[f+1]&63)<<6|r[f+2]&63)),f+=3)}return b.join("")}return{toBytes:e,fromBytes:a}}(),D=function(){function e(b){for(var f=[],k=0;k>4]+a[G&15])}return f.join("")}return{toBytes:e,fromBytes:r}}(),b0={16:10,24:12,32:14},f0=[1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145],Z=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],W=[82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125],a0=[3328402341,4168907908,4000806809,4135287693,4294111757,3597364157,3731845041,2445657428,1613770832,33620227,3462883241,1445669757,3892248089,3050821474,1303096294,3967186586,2412431941,528646813,2311702848,4202528135,4026202645,2992200171,2387036105,4226871307,1101901292,3017069671,1604494077,1169141738,597466303,1403299063,3832705686,2613100635,1974974402,3791519004,1033081774,1277568618,1815492186,2118074177,4126668546,2211236943,1748251740,1369810420,3521504564,4193382664,3799085459,2883115123,1647391059,706024767,134480908,2512897874,1176707941,2646852446,806885416,932615841,168101135,798661301,235341577,605164086,461406363,3756188221,3454790438,1311188841,2142417613,3933566367,302582043,495158174,1479289972,874125870,907746093,3698224818,3025820398,1537253627,2756858614,1983593293,3084310113,2108928974,1378429307,3722699582,1580150641,327451799,2790478837,3117535592,0,3253595436,1075847264,3825007647,2041688520,3059440621,3563743934,2378943302,1740553945,1916352843,2487896798,2555137236,2958579944,2244988746,3151024235,3320835882,1336584933,3992714006,2252555205,2588757463,1714631509,293963156,2319795663,3925473552,67240454,4269768577,2689618160,2017213508,631218106,1269344483,2723238387,1571005438,2151694528,93294474,1066570413,563977660,1882732616,4059428100,1673313503,2008463041,2950355573,1109467491,537923632,3858759450,4260623118,3218264685,2177748300,403442708,638784309,3287084079,3193921505,899127202,2286175436,773265209,2479146071,1437050866,4236148354,2050833735,3362022572,3126681063,840505643,3866325909,3227541664,427917720,2655997905,2749160575,1143087718,1412049534,999329963,193497219,2353415882,3354324521,1807268051,672404540,2816401017,3160301282,369822493,2916866934,3688947771,1681011286,1949973070,336202270,2454276571,201721354,1210328172,3093060836,2680341085,3184776046,1135389935,3294782118,965841320,831886756,3554993207,4068047243,3588745010,2345191491,1849112409,3664604599,26054028,2983581028,2622377682,1235855840,3630984372,2891339514,4092916743,3488279077,3395642799,4101667470,1202630377,268961816,1874508501,4034427016,1243948399,1546530418,941366308,1470539505,1941222599,2546386513,3421038627,2715671932,3899946140,1042226977,2521517021,1639824860,227249030,260737669,3765465232,2084453954,1907733956,3429263018,2420656344,100860677,4160157185,470683154,3261161891,1781871967,2924959737,1773779408,394692241,2579611992,974986535,664706745,3655459128,3958962195,731420851,571543859,3530123707,2849626480,126783113,865375399,765172662,1008606754,361203602,3387549984,2278477385,2857719295,1344809080,2782912378,59542671,1503764984,160008576,437062935,1707065306,3622233649,2218934982,3496503480,2185314755,697932208,1512910199,504303377,2075177163,2824099068,1841019862,739644986],i0=[2781242211,2230877308,2582542199,2381740923,234877682,3184946027,2984144751,1418839493,1348481072,50462977,2848876391,2102799147,434634494,1656084439,3863849899,2599188086,1167051466,2636087938,1082771913,2281340285,368048890,3954334041,3381544775,201060592,3963727277,1739838676,4250903202,3930435503,3206782108,4149453988,2531553906,1536934080,3262494647,484572669,2923271059,1783375398,1517041206,1098792767,49674231,1334037708,1550332980,4098991525,886171109,150598129,2481090929,1940642008,1398944049,1059722517,201851908,1385547719,1699095331,1587397571,674240536,2704774806,252314885,3039795866,151914247,908333586,2602270848,1038082786,651029483,1766729511,3447698098,2682942837,454166793,2652734339,1951935532,775166490,758520603,3000790638,4004797018,4217086112,4137964114,1299594043,1639438038,3464344499,2068982057,1054729187,1901997871,2534638724,4121318227,1757008337,0,750906861,1614815264,535035132,3363418545,3988151131,3201591914,1183697867,3647454910,1265776953,3734260298,3566750796,3903871064,1250283471,1807470800,717615087,3847203498,384695291,3313910595,3617213773,1432761139,2484176261,3481945413,283769337,100925954,2180939647,4037038160,1148730428,3123027871,3813386408,4087501137,4267549603,3229630528,2315620239,2906624658,3156319645,1215313976,82966005,3747855548,3245848246,1974459098,1665278241,807407632,451280895,251524083,1841287890,1283575245,337120268,891687699,801369324,3787349855,2721421207,3431482436,959321879,1469301956,4065699751,2197585534,1199193405,2898814052,3887750493,724703513,2514908019,2696962144,2551808385,3516813135,2141445340,1715741218,2119445034,2872807568,2198571144,3398190662,700968686,3547052216,1009259540,2041044702,3803995742,487983883,1991105499,1004265696,1449407026,1316239930,504629770,3683797321,168560134,1816667172,3837287516,1570751170,1857934291,4014189740,2797888098,2822345105,2754712981,936633572,2347923833,852879335,1133234376,1500395319,3084545389,2348912013,1689376213,3533459022,3762923945,3034082412,4205598294,133428468,634383082,2949277029,2398386810,3913789102,403703816,3580869306,2297460856,1867130149,1918643758,607656988,4049053350,3346248884,1368901318,600565992,2090982877,2632479860,557719327,3717614411,3697393085,2249034635,2232388234,2430627952,1115438654,3295786421,2865522278,3633334344,84280067,33027830,303828494,2747425121,1600795957,4188952407,3496589753,2434238086,1486471617,658119965,3106381470,953803233,334231800,3005978776,857870609,3151128937,1890179545,2298973838,2805175444,3056442267,574365214,2450884487,550103529,1233637070,4289353045,2018519080,2057691103,2399374476,4166623649,2148108681,387583245,3664101311,836232934,3330556482,3100665960,3280093505,2955516313,2002398509,287182607,3413881008,4238890068,3597515707,975967766],Y=[1671808611,2089089148,2006576759,2072901243,4061003762,1807603307,1873927791,3310653893,810573872,16974337,1739181671,729634347,4263110654,3613570519,2883997099,1989864566,3393556426,2191335298,3376449993,2106063485,4195741690,1508618841,1204391495,4027317232,2917941677,3563566036,2734514082,2951366063,2629772188,2767672228,1922491506,3227229120,3082974647,4246528509,2477669779,644500518,911895606,1061256767,4144166391,3427763148,878471220,2784252325,3845444069,4043897329,1905517169,3631459288,827548209,356461077,67897348,3344078279,593839651,3277757891,405286936,2527147926,84871685,2595565466,118033927,305538066,2157648768,3795705826,3945188843,661212711,2999812018,1973414517,152769033,2208177539,745822252,439235610,455947803,1857215598,1525593178,2700827552,1391895634,994932283,3596728278,3016654259,695947817,3812548067,795958831,2224493444,1408607827,3513301457,0,3979133421,543178784,4229948412,2982705585,1542305371,1790891114,3410398667,3201918910,961245753,1256100938,1289001036,1491644504,3477767631,3496721360,4012557807,2867154858,4212583931,1137018435,1305975373,861234739,2241073541,1171229253,4178635257,33948674,2139225727,1357946960,1011120188,2679776671,2833468328,1374921297,2751356323,1086357568,2408187279,2460827538,2646352285,944271416,4110742005,3168756668,3066132406,3665145818,560153121,271589392,4279952895,4077846003,3530407890,3444343245,202643468,322250259,3962553324,1608629855,2543990167,1154254916,389623319,3294073796,2817676711,2122513534,1028094525,1689045092,1575467613,422261273,1939203699,1621147744,2174228865,1339137615,3699352540,577127458,712922154,2427141008,2290289544,1187679302,3995715566,3100863416,339486740,3732514782,1591917662,186455563,3681988059,3762019296,844522546,978220090,169743370,1239126601,101321734,611076132,1558493276,3260915650,3547250131,2901361580,1655096418,2443721105,2510565781,3828863972,2039214713,3878868455,3359869896,928607799,1840765549,2374762893,3580146133,1322425422,2850048425,1823791212,1459268694,4094161908,3928346602,1706019429,2056189050,2934523822,135794696,3134549946,2022240376,628050469,779246638,472135708,2800834470,3032970164,3327236038,3894660072,3715932637,1956440180,522272287,1272813131,3185336765,2340818315,2323976074,1888542832,1044544574,3049550261,1722469478,1222152264,50660867,4127324150,236067854,1638122081,895445557,1475980887,3117443513,2257655686,3243809217,489110045,2662934430,3778599393,4162055160,2561878936,288563729,1773916777,3648039385,2391345038,2493985684,2612407707,505560094,2274497927,3911240169,3460925390,1442818645,678973480,3749357023,2358182796,2717407649,2306869641,219617805,3218761151,3862026214,1120306242,1756942440,1103331905,2578459033,762796589,252780047,2966125488,1425844308,3151392187,372911126],w0=[1667474886,2088535288,2004326894,2071694838,4075949567,1802223062,1869591006,3318043793,808472672,16843522,1734846926,724270422,4278065639,3621216949,2880169549,1987484396,3402253711,2189597983,3385409673,2105378810,4210693615,1499065266,1195886990,4042263547,2913856577,3570689971,2728590687,2947541573,2627518243,2762274643,1920112356,3233831835,3082273397,4261223649,2475929149,640051788,909531756,1061110142,4160160501,3435941763,875846760,2779116625,3857003729,4059105529,1903268834,3638064043,825316194,353713962,67374088,3351728789,589522246,3284360861,404236336,2526454071,84217610,2593830191,117901582,303183396,2155911963,3806477791,3958056653,656894286,2998062463,1970642922,151591698,2206440989,741110872,437923380,454765878,1852748508,1515908788,2694904667,1381168804,993742198,3604373943,3014905469,690584402,3823320797,791638366,2223281939,1398011302,3520161977,0,3991743681,538992704,4244381667,2981218425,1532751286,1785380564,3419096717,3200178535,960056178,1246420628,1280103576,1482221744,3486468741,3503319995,4025428677,2863326543,4227536621,1128514950,1296947098,859002214,2240123921,1162203018,4193849577,33687044,2139062782,1347481760,1010582648,2678045221,2829640523,1364325282,2745433693,1077985408,2408548869,2459086143,2644360225,943212656,4126475505,3166494563,3065430391,3671750063,555836226,269496352,4294908645,4092792573,3537006015,3452783745,202118168,320025894,3974901699,1600119230,2543297077,1145359496,387397934,3301201811,2812801621,2122220284,1027426170,1684319432,1566435258,421079858,1936954854,1616945344,2172753945,1330631070,3705438115,572679748,707427924,2425400123,2290647819,1179044492,4008585671,3099120491,336870440,3739122087,1583276732,185277718,3688593069,3772791771,842159716,976899700,168435220,1229577106,101059084,606366792,1549591736,3267517855,3553849021,2897014595,1650632388,2442242105,2509612081,3840161747,2038008818,3890688725,3368567691,926374254,1835907034,2374863873,3587531953,1313788572,2846482505,1819063512,1448540844,4109633523,3941213647,1701162954,2054852340,2930698567,134748176,3132806511,2021165296,623210314,774795868,471606328,2795958615,3031746419,3334885783,3907527627,3722280097,1953799400,522133822,1263263126,3183336545,2341176845,2324333839,1886425312,1044267644,3048588401,1718004428,1212733584,50529542,4143317495,235803164,1633788866,892690282,1465383342,3115962473,2256965911,3250673817,488449850,2661202215,3789633753,4177007595,2560144171,286339874,1768537042,3654906025,2391705863,2492770099,2610673197,505291324,2273808917,3924369609,3469625735,1431699370,673740880,3755965093,2358021891,2711746649,2307489801,218961690,3217021541,3873845719,1111672452,1751693520,1094828930,2576986153,757954394,252645662,2964376443,1414855848,3149649517,370555436],c0=[1374988112,2118214995,437757123,975658646,1001089995,530400753,2902087851,1273168787,540080725,2910219766,2295101073,4110568485,1340463100,3307916247,641025152,3043140495,3736164937,632953703,1172967064,1576976609,3274667266,2169303058,2370213795,1809054150,59727847,361929877,3211623147,2505202138,3569255213,1484005843,1239443753,2395588676,1975683434,4102977912,2572697195,666464733,3202437046,4035489047,3374361702,2110667444,1675577880,3843699074,2538681184,1649639237,2976151520,3144396420,4269907996,4178062228,1883793496,2403728665,2497604743,1383856311,2876494627,1917518562,3810496343,1716890410,3001755655,800440835,2261089178,3543599269,807962610,599762354,33778362,3977675356,2328828971,2809771154,4077384432,1315562145,1708848333,101039829,3509871135,3299278474,875451293,2733856160,92987698,2767645557,193195065,1080094634,1584504582,3178106961,1042385657,2531067453,3711829422,1306967366,2438237621,1908694277,67556463,1615861247,429456164,3602770327,2302690252,1742315127,2968011453,126454664,3877198648,2043211483,2709260871,2084704233,4169408201,0,159417987,841739592,504459436,1817866830,4245618683,260388950,1034867998,908933415,168810852,1750902305,2606453969,607530554,202008497,2472011535,3035535058,463180190,2160117071,1641816226,1517767529,470948374,3801332234,3231722213,1008918595,303765277,235474187,4069246893,766945465,337553864,1475418501,2943682380,4003061179,2743034109,4144047775,1551037884,1147550661,1543208500,2336434550,3408119516,3069049960,3102011747,3610369226,1113818384,328671808,2227573024,2236228733,3535486456,2935566865,3341394285,496906059,3702665459,226906860,2009195472,733156972,2842737049,294930682,1206477858,2835123396,2700099354,1451044056,573804783,2269728455,3644379585,2362090238,2564033334,2801107407,2776292904,3669462566,1068351396,742039012,1350078989,1784663195,1417561698,4136440770,2430122216,775550814,2193862645,2673705150,1775276924,1876241833,3475313331,3366754619,270040487,3902563182,3678124923,3441850377,1851332852,3969562369,2203032232,3868552805,2868897406,566021896,4011190502,3135740889,1248802510,3936291284,699432150,832877231,708780849,3332740144,899835584,1951317047,4236429990,3767586992,866637845,4043610186,1106041591,2144161806,395441711,1984812685,1139781709,3433712980,3835036895,2664543715,1282050075,3240894392,1181045119,2640243204,25965917,4203181171,4211818798,3009879386,2463879762,3910161971,1842759443,2597806476,933301370,1509430414,3943906441,3467192302,3076639029,3776767469,2051518780,2631065433,1441952575,404016761,1942435775,1408749034,1610459739,3745345300,2017778566,3400528769,3110650942,941896748,3265478751,371049330,3168937228,675039627,4279080257,967311729,135050206,3635733660,1683407248,2076935265,3576870512,1215061108,3501741890],m0=[1347548327,1400783205,3273267108,2520393566,3409685355,4045380933,2880240216,2471224067,1428173050,4138563181,2441661558,636813900,4233094615,3620022987,2149987652,2411029155,1239331162,1730525723,2554718734,3781033664,46346101,310463728,2743944855,3328955385,3875770207,2501218972,3955191162,3667219033,768917123,3545789473,692707433,1150208456,1786102409,2029293177,1805211710,3710368113,3065962831,401639597,1724457132,3028143674,409198410,2196052529,1620529459,1164071807,3769721975,2226875310,486441376,2499348523,1483753576,428819965,2274680428,3075636216,598438867,3799141122,1474502543,711349675,129166120,53458370,2592523643,2782082824,4063242375,2988687269,3120694122,1559041666,730517276,2460449204,4042459122,2706270690,3446004468,3573941694,533804130,2328143614,2637442643,2695033685,839224033,1973745387,957055980,2856345839,106852767,1371368976,4181598602,1033297158,2933734917,1179510461,3046200461,91341917,1862534868,4284502037,605657339,2547432937,3431546947,2003294622,3182487618,2282195339,954669403,3682191598,1201765386,3917234703,3388507166,0,2198438022,1211247597,2887651696,1315723890,4227665663,1443857720,507358933,657861945,1678381017,560487590,3516619604,975451694,2970356327,261314535,3535072918,2652609425,1333838021,2724322336,1767536459,370938394,182621114,3854606378,1128014560,487725847,185469197,2918353863,3106780840,3356761769,2237133081,1286567175,3152976349,4255350624,2683765030,3160175349,3309594171,878443390,1988838185,3704300486,1756818940,1673061617,3403100636,272786309,1075025698,545572369,2105887268,4174560061,296679730,1841768865,1260232239,4091327024,3960309330,3497509347,1814803222,2578018489,4195456072,575138148,3299409036,446754879,3629546796,4011996048,3347532110,3252238545,4270639778,915985419,3483825537,681933534,651868046,2755636671,3828103837,223377554,2607439820,1649704518,3270937875,3901806776,1580087799,4118987695,3198115200,2087309459,2842678573,3016697106,1003007129,2802849917,1860738147,2077965243,164439672,4100872472,32283319,2827177882,1709610350,2125135846,136428751,3874428392,3652904859,3460984630,3572145929,3593056380,2939266226,824852259,818324884,3224740454,930369212,2801566410,2967507152,355706840,1257309336,4148292826,243256656,790073846,2373340630,1296297904,1422699085,3756299780,3818836405,457992840,3099667487,2135319889,77422314,1560382517,1945798516,788204353,1521706781,1385356242,870912086,325965383,2358957921,2050466060,2388260884,2313884476,4006521127,901210569,3990953189,1014646705,1503449823,1062597235,2031621326,3212035895,3931371469,1533017514,350174575,2256028891,2177544179,1052338372,741876788,1606591296,1914052035,213705253,2334669897,1107234197,1899603969,3725069491,2631447780,2422494913,1635502980,1893020342,1950903388,1120974935],_=[2807058932,1699970625,2764249623,1586903591,1808481195,1173430173,1487645946,59984867,4199882800,1844882806,1989249228,1277555970,3623636965,3419915562,1149249077,2744104290,1514790577,459744698,244860394,3235995134,1963115311,4027744588,2544078150,4190530515,1608975247,2627016082,2062270317,1507497298,2200818878,567498868,1764313568,3359936201,2305455554,2037970062,1047239e3,1910319033,1337376481,2904027272,2892417312,984907214,1243112415,830661914,861968209,2135253587,2011214180,2927934315,2686254721,731183368,1750626376,4246310725,1820824798,4172763771,3542330227,48394827,2404901663,2871682645,671593195,3254988725,2073724613,145085239,2280796200,2779915199,1790575107,2187128086,472615631,3029510009,4075877127,3802222185,4107101658,3201631749,1646252340,4270507174,1402811438,1436590835,3778151818,3950355702,3963161475,4020912224,2667994737,273792366,2331590177,104699613,95345982,3175501286,2377486676,1560637892,3564045318,369057872,4213447064,3919042237,1137477952,2658625497,1119727848,2340947849,1530455833,4007360968,172466556,266959938,516552836,0,2256734592,3980931627,1890328081,1917742170,4294704398,945164165,3575528878,958871085,3647212047,2787207260,1423022939,775562294,1739656202,3876557655,2530391278,2443058075,3310321856,547512796,1265195639,437656594,3121275539,719700128,3762502690,387781147,218828297,3350065803,2830708150,2848461854,428169201,122466165,3720081049,1627235199,648017665,4122762354,1002783846,2117360635,695634755,3336358691,4234721005,4049844452,3704280881,2232435299,574624663,287343814,612205898,1039717051,840019705,2708326185,793451934,821288114,1391201670,3822090177,376187827,3113855344,1224348052,1679968233,2361698556,1058709744,752375421,2431590963,1321699145,3519142200,2734591178,188127444,2177869557,3727205754,2384911031,3215212461,2648976442,2450346104,3432737375,1180849278,331544205,3102249176,4150144569,2952102595,2159976285,2474404304,766078933,313773861,2570832044,2108100632,1668212892,3145456443,2013908262,418672217,3070356634,2594734927,1852171925,3867060991,3473416636,3907448597,2614737639,919489135,164948639,2094410160,2997825956,590424639,2486224549,1723872674,3157750862,3399941250,3501252752,3625268135,2555048196,3673637356,1343127501,4130281361,3599595085,2957853679,1297403050,81781910,3051593425,2283490410,532201772,1367295589,3926170974,895287692,1953757831,1093597963,492483431,3528626907,1446242576,1192455638,1636604631,209336225,344873464,1015671571,669961897,3375740769,3857572124,2973530695,3747192018,1933530610,3464042516,935293895,3454686199,2858115069,1863638845,3683022916,4085369519,3292445032,875313188,1080017571,3279033885,621591778,1233856572,2504130317,24197544,3017672716,3835484340,3247465558,2220981195,3060847922,1551124588,1463996600],T=[4104605777,1097159550,396673818,660510266,2875968315,2638606623,4200115116,3808662347,821712160,1986918061,3430322568,38544885,3856137295,718002117,893681702,1654886325,2975484382,3122358053,3926825029,4274053469,796197571,1290801793,1184342925,3556361835,2405426947,2459735317,1836772287,1381620373,3196267988,1948373848,3764988233,3385345166,3263785589,2390325492,1480485785,3111247143,3780097726,2293045232,548169417,3459953789,3746175075,439452389,1362321559,1400849762,1685577905,1806599355,2174754046,137073913,1214797936,1174215055,3731654548,2079897426,1943217067,1258480242,529487843,1437280870,3945269170,3049390895,3313212038,923313619,679998e3,3215307299,57326082,377642221,3474729866,2041877159,133361907,1776460110,3673476453,96392454,878845905,2801699524,777231668,4082475170,2330014213,4142626212,2213296395,1626319424,1906247262,1846563261,562755902,3708173718,1040559837,3871163981,1418573201,3294430577,114585348,1343618912,2566595609,3186202582,1078185097,3651041127,3896688048,2307622919,425408743,3371096953,2081048481,1108339068,2216610296,0,2156299017,736970802,292596766,1517440620,251657213,2235061775,2933202493,758720310,265905162,1554391400,1532285339,908999204,174567692,1474760595,4002861748,2610011675,3234156416,3693126241,2001430874,303699484,2478443234,2687165888,585122620,454499602,151849742,2345119218,3064510765,514443284,4044981591,1963412655,2581445614,2137062819,19308535,1928707164,1715193156,4219352155,1126790795,600235211,3992742070,3841024952,836553431,1669664834,2535604243,3323011204,1243905413,3141400786,4180808110,698445255,2653899549,2989552604,2253581325,3252932727,3004591147,1891211689,2487810577,3915653703,4237083816,4030667424,2100090966,865136418,1229899655,953270745,3399679628,3557504664,4118925222,2061379749,3079546586,2915017791,983426092,2022837584,1607244650,2118541908,2366882550,3635996816,972512814,3283088770,1568718495,3499326569,3576539503,621982671,2895723464,410887952,2623762152,1002142683,645401037,1494807662,2595684844,1335535747,2507040230,4293295786,3167684641,367585007,3885750714,1865862730,2668221674,2960971305,2763173681,1059270954,2777952454,2724642869,1320957812,2194319100,2429595872,2815956275,77089521,3973773121,3444575871,2448830231,1305906550,4021308739,2857194700,2516901860,3518358430,1787304780,740276417,1699839814,1592394909,2352307457,2272556026,188821243,1729977011,3687994002,274084841,3594982253,3613494426,2701949495,4162096729,322734571,2837966542,1640576439,484830689,1202797690,3537852828,4067639125,349075736,3342319475,4157467219,4255800159,1030690015,1155237496,2951971274,1757691577,607398968,2738905026,499347990,3794078908,1011452712,227885567,2818666809,213114376,3034881240,1455525988,3414450555,850817237,1817998408,3092726480],y=[0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795],K=[0,185469197,370938394,487725847,741876788,657861945,975451694,824852259,1483753576,1400783205,1315723890,1164071807,1950903388,2135319889,1649704518,1767536459,2967507152,3152976349,2801566410,2918353863,2631447780,2547432937,2328143614,2177544179,3901806776,3818836405,4270639778,4118987695,3299409036,3483825537,3535072918,3652904859,2077965243,1893020342,1841768865,1724457132,1474502543,1559041666,1107234197,1257309336,598438867,681933534,901210569,1052338372,261314535,77422314,428819965,310463728,3409685355,3224740454,3710368113,3593056380,3875770207,3960309330,4045380933,4195456072,2471224067,2554718734,2237133081,2388260884,3212035895,3028143674,2842678573,2724322336,4138563181,4255350624,3769721975,3955191162,3667219033,3516619604,3431546947,3347532110,2933734917,2782082824,3099667487,3016697106,2196052529,2313884476,2499348523,2683765030,1179510461,1296297904,1347548327,1533017514,1786102409,1635502980,2087309459,2003294622,507358933,355706840,136428751,53458370,839224033,957055980,605657339,790073846,2373340630,2256028891,2607439820,2422494913,2706270690,2856345839,3075636216,3160175349,3573941694,3725069491,3273267108,3356761769,4181598602,4063242375,4011996048,3828103837,1033297158,915985419,730517276,545572369,296679730,446754879,129166120,213705253,1709610350,1860738147,1945798516,2029293177,1239331162,1120974935,1606591296,1422699085,4148292826,4233094615,3781033664,3931371469,3682191598,3497509347,3446004468,3328955385,2939266226,2755636671,3106780840,2988687269,2198438022,2282195339,2501218972,2652609425,1201765386,1286567175,1371368976,1521706781,1805211710,1620529459,2105887268,1988838185,533804130,350174575,164439672,46346101,870912086,954669403,636813900,788204353,2358957921,2274680428,2592523643,2441661558,2695033685,2880240216,3065962831,3182487618,3572145929,3756299780,3270937875,3388507166,4174560061,4091327024,4006521127,3854606378,1014646705,930369212,711349675,560487590,272786309,457992840,106852767,223377554,1678381017,1862534868,1914052035,2031621326,1211247597,1128014560,1580087799,1428173050,32283319,182621114,401639597,486441376,768917123,651868046,1003007129,818324884,1503449823,1385356242,1333838021,1150208456,1973745387,2125135846,1673061617,1756818940,2970356327,3120694122,2802849917,2887651696,2637442643,2520393566,2334669897,2149987652,3917234703,3799141122,4284502037,4100872472,3309594171,3460984630,3545789473,3629546796,2050466060,1899603969,1814803222,1730525723,1443857720,1560382517,1075025698,1260232239,575138148,692707433,878443390,1062597235,243256656,91341917,409198410,325965383,3403100636,3252238545,3704300486,3620022987,3874428392,3990953189,4042459122,4227665663,2460449204,2578018489,2226875310,2411029155,3198115200,3046200461,2827177882,2743944855],P=[0,218828297,437656594,387781147,875313188,958871085,775562294,590424639,1750626376,1699970625,1917742170,2135253587,1551124588,1367295589,1180849278,1265195639,3501252752,3720081049,3399941250,3350065803,3835484340,3919042237,4270507174,4085369519,3102249176,3051593425,2734591178,2952102595,2361698556,2177869557,2530391278,2614737639,3145456443,3060847922,2708326185,2892417312,2404901663,2187128086,2504130317,2555048196,3542330227,3727205754,3375740769,3292445032,3876557655,3926170974,4246310725,4027744588,1808481195,1723872674,1910319033,2094410160,1608975247,1391201670,1173430173,1224348052,59984867,244860394,428169201,344873464,935293895,984907214,766078933,547512796,1844882806,1627235199,2011214180,2062270317,1507497298,1423022939,1137477952,1321699145,95345982,145085239,532201772,313773861,830661914,1015671571,731183368,648017665,3175501286,2957853679,2807058932,2858115069,2305455554,2220981195,2474404304,2658625497,3575528878,3625268135,3473416636,3254988725,3778151818,3963161475,4213447064,4130281361,3599595085,3683022916,3432737375,3247465558,3802222185,4020912224,4172763771,4122762354,3201631749,3017672716,2764249623,2848461854,2331590177,2280796200,2431590963,2648976442,104699613,188127444,472615631,287343814,840019705,1058709744,671593195,621591778,1852171925,1668212892,1953757831,2037970062,1514790577,1463996600,1080017571,1297403050,3673637356,3623636965,3235995134,3454686199,4007360968,3822090177,4107101658,4190530515,2997825956,3215212461,2830708150,2779915199,2256734592,2340947849,2627016082,2443058075,172466556,122466165,273792366,492483431,1047239e3,861968209,612205898,695634755,1646252340,1863638845,2013908262,1963115311,1446242576,1530455833,1277555970,1093597963,1636604631,1820824798,2073724613,1989249228,1436590835,1487645946,1337376481,1119727848,164948639,81781910,331544205,516552836,1039717051,821288114,669961897,719700128,2973530695,3157750862,2871682645,2787207260,2232435299,2283490410,2667994737,2450346104,3647212047,3564045318,3279033885,3464042516,3980931627,3762502690,4150144569,4199882800,3070356634,3121275539,2904027272,2686254721,2200818878,2384911031,2570832044,2486224549,3747192018,3528626907,3310321856,3359936201,3950355702,3867060991,4049844452,4234721005,1739656202,1790575107,2108100632,1890328081,1402811438,1586903591,1233856572,1149249077,266959938,48394827,369057872,418672217,1002783846,919489135,567498868,752375421,209336225,24197544,376187827,459744698,945164165,895287692,574624663,793451934,1679968233,1764313568,2117360635,1933530610,1343127501,1560637892,1243112415,1192455638,3704280881,3519142200,3336358691,3419915562,3907448597,3857572124,4075877127,4294704398,3029510009,3113855344,2927934315,2744104290,2159976285,2377486676,2594734927,2544078150],Q=[0,151849742,303699484,454499602,607398968,758720310,908999204,1059270954,1214797936,1097159550,1517440620,1400849762,1817998408,1699839814,2118541908,2001430874,2429595872,2581445614,2194319100,2345119218,3034881240,3186202582,2801699524,2951971274,3635996816,3518358430,3399679628,3283088770,4237083816,4118925222,4002861748,3885750714,1002142683,850817237,698445255,548169417,529487843,377642221,227885567,77089521,1943217067,2061379749,1640576439,1757691577,1474760595,1592394909,1174215055,1290801793,2875968315,2724642869,3111247143,2960971305,2405426947,2253581325,2638606623,2487810577,3808662347,3926825029,4044981591,4162096729,3342319475,3459953789,3576539503,3693126241,1986918061,2137062819,1685577905,1836772287,1381620373,1532285339,1078185097,1229899655,1040559837,923313619,740276417,621982671,439452389,322734571,137073913,19308535,3871163981,4021308739,4104605777,4255800159,3263785589,3414450555,3499326569,3651041127,2933202493,2815956275,3167684641,3049390895,2330014213,2213296395,2566595609,2448830231,1305906550,1155237496,1607244650,1455525988,1776460110,1626319424,2079897426,1928707164,96392454,213114376,396673818,514443284,562755902,679998e3,865136418,983426092,3708173718,3557504664,3474729866,3323011204,4180808110,4030667424,3945269170,3794078908,2507040230,2623762152,2272556026,2390325492,2975484382,3092726480,2738905026,2857194700,3973773121,3856137295,4274053469,4157467219,3371096953,3252932727,3673476453,3556361835,2763173681,2915017791,3064510765,3215307299,2156299017,2307622919,2459735317,2610011675,2081048481,1963412655,1846563261,1729977011,1480485785,1362321559,1243905413,1126790795,878845905,1030690015,645401037,796197571,274084841,425408743,38544885,188821243,3613494426,3731654548,3313212038,3430322568,4082475170,4200115116,3780097726,3896688048,2668221674,2516901860,2366882550,2216610296,3141400786,2989552604,2837966542,2687165888,1202797690,1320957812,1437280870,1554391400,1669664834,1787304780,1906247262,2022837584,265905162,114585348,499347990,349075736,736970802,585122620,972512814,821712160,2595684844,2478443234,2293045232,2174754046,3196267988,3079546586,2895723464,2777952454,3537852828,3687994002,3234156416,3385345166,4142626212,4293295786,3841024952,3992742070,174567692,57326082,410887952,292596766,777231668,660510266,1011452712,893681702,1108339068,1258480242,1343618912,1494807662,1715193156,1865862730,1948373848,2100090966,2701949495,2818666809,3004591147,3122358053,2235061775,2352307457,2535604243,2653899549,3915653703,3764988233,4219352155,4067639125,3444575871,3294430577,3746175075,3594982253,836553431,953270745,600235211,718002117,367585007,484830689,133361907,251657213,2041877159,1891211689,1806599355,1654886325,1568718495,1418573201,1335535747,1184342925];function o0(e){for(var a=[],r=0;r>2,this._Ke[k][a%4]=f[a],this._Kd[e-k][a%4]=f[a];for(var G=0,v=b,p;v>16&255]<<24^Z[p>>8&255]<<16^Z[p&255]<<8^Z[p>>24&255]^f0[G]<<24,G+=1,b!=8)for(var a=1;a>8&255]<<8^Z[p>>16&255]<<16^Z[p>>24&255]<<24;for(var a=b/2+1;a>2,d=v%4,this._Ke[m][d]=f[a],this._Kd[e-m][d]=f[a++],v++}for(var m=1;m>24&255]^K[p>>16&255]^P[p>>8&255]^Q[p&255]},x0.prototype.encrypt=function(e){if(e.length!=16)throw new Error("invalid plaintext size (must be 16 bytes)");for(var a=this._Ke.length-1,r=[0,0,0,0],b=o0(e),f=0;f<4;f++)b[f]^=this._Ke[0][f];for(var k=1;k>24&255]^i0[b[(f+1)%4]>>16&255]^Y[b[(f+2)%4]>>8&255]^w0[b[(f+3)%4]&255]^this._Ke[k][f];b=r.slice()}for(var G=w(16),v,f=0;f<4;f++)v=this._Ke[a][f],G[4*f]=(Z[b[f]>>24&255]^v>>24)&255,G[4*f+1]=(Z[b[(f+1)%4]>>16&255]^v>>16)&255,G[4*f+2]=(Z[b[(f+2)%4]>>8&255]^v>>8)&255,G[4*f+3]=(Z[b[(f+3)%4]&255]^v)&255;return G},x0.prototype.decrypt=function(e){if(e.length!=16)throw new Error("invalid ciphertext size (must be 16 bytes)");for(var a=this._Kd.length-1,r=[0,0,0,0],b=o0(e),f=0;f<4;f++)b[f]^=this._Kd[0][f];for(var k=1;k>24&255]^m0[b[(f+3)%4]>>16&255]^_[b[(f+2)%4]>>8&255]^T[b[(f+1)%4]&255]^this._Kd[k][f];b=r.slice()}for(var G=w(16),v,f=0;f<4;f++)v=this._Kd[a][f],G[4*f]=(W[b[f]>>24&255]^v>>24)&255,G[4*f+1]=(W[b[(f+3)%4]>>16&255]^v>>16)&255,G[4*f+2]=(W[b[(f+2)%4]>>8&255]^v>>8)&255,G[4*f+3]=(W[b[(f+1)%4]&255]^v)&255;return G};var s0=function(e){if(!(this instanceof s0))throw Error("AES must be instanitated with `new`");this.description="Electronic Code Block",this.name="ecb",this._aes=new x0(e)};s0.prototype.encrypt=function(e){if(e=E(e),e.length%16!==0)throw new Error("invalid plaintext size (must be multiple of 16 bytes)");for(var a=w(e.length),r=w(16),b=0;bNumber.MAX_SAFE_INTEGER)throw new Error("integer value out of safe range");for(var a=15;a>=0;--a)this._counter[a]=e%256,e=parseInt(e/256)},u0.prototype.setBytes=function(e){if(e=E(e,!0),e.length!=16)throw new Error("invalid counter bytes size (must be 16 bytes)");this._counter=e},u0.prototype.increment=function(){for(var e=15;e>=0;e--)if(this._counter[e]===255)this._counter[e]=0;else{this._counter[e]++;break}};var g0=function(e,a){if(!(this instanceof g0))throw Error("AES must be instanitated with `new`");this.description="Counter",this.name="ctr",a instanceof u0||(a=new u0(a)),this._counter=a,this._remainingCounter=null,this._remainingCounterIndex=16,this._aes=new x0(e)};g0.prototype.encrypt=function(e){for(var a=E(e,!0),r=0;r16)throw new Error("PKCS#7 padding byte out of range");for(var r=e.length-a,b=0;b{try{const n0=fe.unzip(new Uint8Array(C)),F0="w%(%^(*&^$^%$#%^".split("").map(E=>E.charCodeAt(0)),V=new ce.ModeOfOperation.ecb(F0).decrypt(n0).filter(E=>E>=32);return typeof Blob>"u"?Buffer.from(V).toString():new Blob([V],{type:"application/json"}).text()}catch(n0){throw n0}},te=C=>new Promise((n0,F0)=>{fetch(C,{method:"GET"}).then(J=>{var V;return((V=process==null?void 0:process.release)==null?void 0:V.name)==="node"?J.buffer():J.arrayBuffer()}).then(J=>de(J)).then(J=>{n0(J)}).catch(J=>{throw new Error(`unzip AES file error: ${J}`)})});export{te as p}; +import{g as Ix}from"./umi-37873494.js";var kx={exports:{}},ax={exports:{}};(function(){var C=[],n0=3988292384;function F0(){var w,l,B;for(l=0;l<256;l+=1){for(w=l,B=0;B<8;B+=1)w&1?w=n0^w>>>1:w=w>>>1;C[l]=w>>>0}}function J(w){return Array.prototype.map.call(w,function(l){return l.charCodeAt(0)})}function V(w){var l=-1,B,D,b0,f0;for(B=0,b0=w.length;B>>1^n0:f0=f0>>>1;l=l>>>8^f0}return l^-1}function E(w,l){var B,D,b0;if(!((typeof E.crc>"u"||!l||!w)&&(E.crc=-1,!w))){for(B=E.crc,D=0,b0=w.length;D>>8^C[(B^w[D])&255];return E.crc=B,B^-1}}F0(),ax.exports=function(B,l){var B=typeof B=="string"?J(B):B,D=l?V(B):E(B);return(D>>>0).toString(16)},ax.exports.direct=V,ax.exports.table=E})();var $x=ax.exports,Mx={exports:{}},Ox={exports:{}};(function(){var C=32768,n0=0,F0=1,J=2,V=9,E=6,w,l,B=null,D,b0,f0,Z,W,a0,i0,Y,w0,c0,m0,_,T,y,K,P=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],Q=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],o0=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],x0=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],s0=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],l0=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function k0(){this.next=null,this.list=null}function B0(){this.e=0,this.b=0,this.n=0,this.t=null}function u0(v,p,m,d,o,S){this.BMAX=16,this.N_MAX=288,this.status=0,this.root=null,this.m=0;var y0,$=[],L,X,g,I,s,u,E0,S0=[],e0,h0,A0,z=new B0,_0=[],C0=[],j,q=[],v0,t0,r0,d0,R;for(R=this.root=null,s=0;s256?v[256]:this.BMAX,e0=v,h0=0,s=p;do $[e0[h0]]++,h0++;while(--s>0);if($[0]===p){this.root=null,this.m=0,this.status=0;return}for(u=1;u<=this.BMAX&&$[u]===0;u++);for(E0=u,Ss&&(S=s),t0=1<0;)q[v0++]=u+=e0[h0++];e0=v,h0=0,s=0;do(u=e0[h0++])!==0&&(C0[q[u]++]=s);while(++s0;){for(;E0>j+S0[1+I];){if(j+=S0[1+I],I++,r0=(r0=g-j)>S?S:r0,(X=1<<(u=E0-j))>y0+1)for(X-=y0+1,v0=E0;++uL&&j0&&(q[I]=s,z.b=S0[I],z.e=16+u,z.t=A0,u=(s&(1<>j-S0[I],_0[I-1][u].e=z.e,_0[I-1][u].b=z.b,_0[I-1][u].n=z.n,_0[I-1][u].t=z.t)}for(z.b=E0-j,h0>=p?z.e=99:e0[h0]>j;u>=1)s^=u;for(s^=u;(s&(1<>=v,W-=v}function e(v,p,m){var d,o,S;if(m===0)return 0;for(S=0;;){for(A(_),o=c0.list[N(_)],d=o.e;d>16;){if(d===99)return-1;H(o.b),d-=16,A(d),o=o.t[N(d)],d=o.e}if(H(o.b),d===16){if(l&=C-1,v[p+S++]=w[l++]=o.n,S===m)return m;continue}if(d===15)break;for(A(d),Y=o.n+N(d),H(d),A(T),o=m0.list[N(T)],d=o.e;d>16;){if(d===99)return-1;H(o.b),d-=16,A(d),o=o.t[N(d)],d=o.e}for(H(o.b),A(d),w0=l-o.n-N(d),H(d);Y>0&&S0&&d1)return B=null,console.error("HufBuild error: "+S.status),-1;D=S.root,f0=S.m}return c0=B,m0=D,_=b0,T=f0,e(v,p,m)}function b(v,p,m){var d,o,S,y0,$,L,X,g,I=[],s;for(d=0;d<286+30;d++)I[d]=0;if(A(5),X=257+N(5),H(5),A(5),g=1+N(5),H(5),A(4),L=4+N(4),H(4),X>286||g>30)return-1;for(o=0;oy0)return-1;for(;o-- >0;)I[d++]=S}else if(o===17){if(A(3),o=3+N(3),H(3),d+o>y0)return-1;for(;o-- >0;)I[d++]=0;S=0}else{if(A(7),o=11+N(7),H(7),d+o>y0)return-1;for(;o-- >0;)I[d++]=0;S=0}if(_=V,s=new u0(I,X,257,Q,o0,_),_===0&&(s.status=1),s.status!==0&&s.status!==1)return-1;for(c0=s.root,_=s.m,d=0;d257||s.status!==0?-1:e(v,p,m)}function f(){w||(w=[]),l=0,Z=0,W=0,a0=-1,i0=!1,Y=w0=0,c0=null}function k(v,p,m){var d,o;for(d=0;d0){if(a0!==n0)for(;Y>0&&d0&&d0);return y=null,p}Ox.exports=G})();var Vx=Ox.exports,ux={exports:{}};(function(){var C=32768,n0=0,F0=1,J=2,V=6,E=1024*8,w=2*C,l=3,B=258,D=8192,b0=15,f0=D,Z=1<9&&(x=9):x=V,e0=x,H=!1,s=!1,e===null){for(g0=A=N=null,e=[],f=[],k=[],G=[],v=[],z=[],c=0;c>>8):(V0(x&255),V0(x>>>8))}function xx(){o=(o<>7)])&255}function wx(x,c,i){return x[c].fcc0?g-c0:i0,O=g+B,F=f[i+h-1],p0=f[i+h],U,R0;X>=h0&&(c>>=2);do if(t=x,!(f[t+h]!==p0||f[t+h-1]!==F||f[t]!==f[i]||f[++t]!==f[i+1])){for(i+=2,t++;ih){if(I=x,h=n,n>=A0)break;F=f[i+h-1],p0=f[i+h]}}while((x=v[x&a0])>M&&--c!==0);return h}function nx(){var x,c,i=w-u-g;if(i===-1)i--;else if(g>=C+c0){for(x=0;x=C?c-C:i0);for(x=0;x=C?c-C:i0;i+=C}s||(x=mx(f,g+u,i),x<=0?s=!0:u+=x)}function Ux(){for(;u!==0&&A===null;){var x;if(xx(),S!==i0&&g-S<=c0&&(L=gx(S),L>u&&(L=u)),L>=l)if(x=q0(g-I,L-l),u-=L,L<=S0){L--;do g++,xx();while(--L!==0);g++}else g+=L,L=0,o=f[g]&255,o=(o<u&&(L=u),L===l&&g-I>Y&&L--),X>=l&&L<=X){var x;x=q0(g-1-y0,X-l),u-=X-1,X-=2;do g++,xx();while(--X!==0);$=!1,L=l-1,g++,x&&(ex(0),d=g)}else $?(q0(0,f[g-1]&255)&&(ex(0),d=g),g++,u--):($=!0,g++,u--);for(;uA.len&&(n=A.len),h=0;ha-r&&(n=a-r),h=0;h>=7;th&&(U=h,fx++),c[F].dl=U,!(F>n)&&(d0[U]++,R0=0,F>=t&&(R0=i[F-t]),lx=c[F].fc,z0+=lx*(U+R0),M!==null&&(W0+=lx*(M[F].dl+R0)));if(fx!==0){do{for(U=h-1;d0[U]===0;)U--;d0[U]--,d0[U+1]+=2,d0[h]--,fx-=2}while(fx>0);for(U=h;U!==0;U--)for(F=d0[U];F!==0;)p0=R[--O],!(p0>n)&&(c[p0].dl!==U&&(z0+=(U-c[p0].dl)*c[p0].fc,c[p0].fc=U),F--)}}function Sx(x,c){var i=[],t=0,n,h;for(n=1;n<=_;n++)t=t+d0[n-1]<<1,i[n]=t;for(h=0;h<=c;h++){var M=x[h].dl;M!==0&&(x[h].fc=Fx(i[M]++,M))}}function ox(x){var c=x.dyn_tree,i=x.static_tree,t=x.elems,n,h,M=-1,O=t;for(O0=0,K0=B0,n=0;n>1;n>=1;n--)ix(c,n);do n=R[m0],R[m0]=R[O0--],ix(c,m0),h=R[m0],R[--K0]=n,R[--K0]=h,c[O].fc=c[n].fc+c[h].fc,I0[n]>I0[h]+1?I0[O]=I0[n]:I0[O]=I0[h]+1,c[n].dl=c[h].dl=O,R[m0]=O++,ix(c,m0);while(O0>=2);R[--K0]=R[m0],Gx(x),Sx(c,M)}function Ax(x,c){var i,t=-1,n,h=x[0].dl,M=0,O=7,F=4;for(h===0&&(O=138,F=3),x[c+1].dl=65535,i=0;i<=c;i++)n=h,h=x[i+1].dl,!(++M=3&&q[hx[x]].dl===0;x--);return z0+=3*(x+1)+5+5+4,x}function Jx(x,c,i){var t;for(T0(x-257,5),T0(c-1,5),T0(i-4,4),t=0;t>3,i=W0+3+7>>3,i<=c&&(c=i),n+4<=c&&d>=0)for(T0((n0<<1)+x,3),Bx(),Q0(n),Q0(~n),h=0;h2&&!(D0&4095)){var i=D0*8,t=g-d,n;for(n=0;n>=3,j0>=1;while(nsx-c?(p|=x<>sx-m,m+=c-sx):(p|=x<>=1,i<<=1;while(--c>0);return i>>1}function Bx(){m>8?Q0(p):m>0&&V0(p),p=0,m=0}function Wx(){var x,c;if(a!==0){for(x=Hx(),A===null?A=N=x:N=N.next=x,x.len=a-r,c=0;c"u"&&(c=V),Kx(c),t=[];do i=qx(t,t.length,1024);while(i>0);return Y0=null,t}ux.exports=Yx,ux.exports.DEFAULT_LEVEL=V})();var Qx=ux.exports;(function(){Mx.exports={inflate:Vx,deflate:Qx}})();var xe=Mx.exports;(function(){var C=$x,n0=xe,F0=31,J=139,V={deflate:8},E={FTEXT:1,FHCRC:2,FEXTRA:4,FNAME:8,FCOMMENT:16},w={fat:0,amiga:1,vmz:2,unix:3,"vm/cms":4,atari:5,hpfs:6,macintosh:7,"z-system":8,cplm:9,"tops-20":10,ntfs:11,qdos:12,acorn:13,vfat:14,vms:15,beos:16,tandem:17,theos:18},l="unix",B=6;function D(_,T){T.push(_&255)}function b0(_,T){T.push(_&255),T.push(_>>>8)}function f0(_,T){b0(_&65535,T),b0(_>>>16,T)}function Z(_,T){var y,K=_.length;for(y=0;y32768?(y-=32768,(y<<16|T)+32768*Math.pow(2,16)):y<<16|T}function Y(_){for(var T=[];_[0]!==0;)T.push(String.fromCharCode(_.shift()));return _.shift(),T.join("")}function w0(_,T){var y,K=[];for(y=0;y. See LICENSE.txt. */(function(C,n0){(function(F0){function J(e){return parseInt(e)===e}function V(e){if(!J(e.length))return!1;for(var a=0;a255)return!1;return!0}function E(e,a){if(e.buffer&&e.name==="Uint8Array")return a&&(e.slice?e=e.slice():e=Array.prototype.slice.call(e)),e;if(Array.isArray(e)){if(!V(e))throw new Error("Array contains invalid value: "+e);return new Uint8Array(e)}if(J(e.length)&&V(e))return new Uint8Array(e);throw new Error("unsupported array-like object")}function w(e){return new Uint8Array(e)}function l(e,a,r,b,f){(b!=null||f!=null)&&(e.slice?e=e.slice(b,f):e=Array.prototype.slice.call(e,b,f)),a.set(e,r)}var B=function(){function e(r){var b=[],f=0;for(r=encodeURI(r);f191&&k<224?(b.push(String.fromCharCode((k&31)<<6|r[f+1]&63)),f+=2):(b.push(String.fromCharCode((k&15)<<12|(r[f+1]&63)<<6|r[f+2]&63)),f+=3)}return b.join("")}return{toBytes:e,fromBytes:a}}(),D=function(){function e(b){for(var f=[],k=0;k>4]+a[G&15])}return f.join("")}return{toBytes:e,fromBytes:r}}(),b0={16:10,24:12,32:14},f0=[1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145],Z=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],W=[82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125],a0=[3328402341,4168907908,4000806809,4135287693,4294111757,3597364157,3731845041,2445657428,1613770832,33620227,3462883241,1445669757,3892248089,3050821474,1303096294,3967186586,2412431941,528646813,2311702848,4202528135,4026202645,2992200171,2387036105,4226871307,1101901292,3017069671,1604494077,1169141738,597466303,1403299063,3832705686,2613100635,1974974402,3791519004,1033081774,1277568618,1815492186,2118074177,4126668546,2211236943,1748251740,1369810420,3521504564,4193382664,3799085459,2883115123,1647391059,706024767,134480908,2512897874,1176707941,2646852446,806885416,932615841,168101135,798661301,235341577,605164086,461406363,3756188221,3454790438,1311188841,2142417613,3933566367,302582043,495158174,1479289972,874125870,907746093,3698224818,3025820398,1537253627,2756858614,1983593293,3084310113,2108928974,1378429307,3722699582,1580150641,327451799,2790478837,3117535592,0,3253595436,1075847264,3825007647,2041688520,3059440621,3563743934,2378943302,1740553945,1916352843,2487896798,2555137236,2958579944,2244988746,3151024235,3320835882,1336584933,3992714006,2252555205,2588757463,1714631509,293963156,2319795663,3925473552,67240454,4269768577,2689618160,2017213508,631218106,1269344483,2723238387,1571005438,2151694528,93294474,1066570413,563977660,1882732616,4059428100,1673313503,2008463041,2950355573,1109467491,537923632,3858759450,4260623118,3218264685,2177748300,403442708,638784309,3287084079,3193921505,899127202,2286175436,773265209,2479146071,1437050866,4236148354,2050833735,3362022572,3126681063,840505643,3866325909,3227541664,427917720,2655997905,2749160575,1143087718,1412049534,999329963,193497219,2353415882,3354324521,1807268051,672404540,2816401017,3160301282,369822493,2916866934,3688947771,1681011286,1949973070,336202270,2454276571,201721354,1210328172,3093060836,2680341085,3184776046,1135389935,3294782118,965841320,831886756,3554993207,4068047243,3588745010,2345191491,1849112409,3664604599,26054028,2983581028,2622377682,1235855840,3630984372,2891339514,4092916743,3488279077,3395642799,4101667470,1202630377,268961816,1874508501,4034427016,1243948399,1546530418,941366308,1470539505,1941222599,2546386513,3421038627,2715671932,3899946140,1042226977,2521517021,1639824860,227249030,260737669,3765465232,2084453954,1907733956,3429263018,2420656344,100860677,4160157185,470683154,3261161891,1781871967,2924959737,1773779408,394692241,2579611992,974986535,664706745,3655459128,3958962195,731420851,571543859,3530123707,2849626480,126783113,865375399,765172662,1008606754,361203602,3387549984,2278477385,2857719295,1344809080,2782912378,59542671,1503764984,160008576,437062935,1707065306,3622233649,2218934982,3496503480,2185314755,697932208,1512910199,504303377,2075177163,2824099068,1841019862,739644986],i0=[2781242211,2230877308,2582542199,2381740923,234877682,3184946027,2984144751,1418839493,1348481072,50462977,2848876391,2102799147,434634494,1656084439,3863849899,2599188086,1167051466,2636087938,1082771913,2281340285,368048890,3954334041,3381544775,201060592,3963727277,1739838676,4250903202,3930435503,3206782108,4149453988,2531553906,1536934080,3262494647,484572669,2923271059,1783375398,1517041206,1098792767,49674231,1334037708,1550332980,4098991525,886171109,150598129,2481090929,1940642008,1398944049,1059722517,201851908,1385547719,1699095331,1587397571,674240536,2704774806,252314885,3039795866,151914247,908333586,2602270848,1038082786,651029483,1766729511,3447698098,2682942837,454166793,2652734339,1951935532,775166490,758520603,3000790638,4004797018,4217086112,4137964114,1299594043,1639438038,3464344499,2068982057,1054729187,1901997871,2534638724,4121318227,1757008337,0,750906861,1614815264,535035132,3363418545,3988151131,3201591914,1183697867,3647454910,1265776953,3734260298,3566750796,3903871064,1250283471,1807470800,717615087,3847203498,384695291,3313910595,3617213773,1432761139,2484176261,3481945413,283769337,100925954,2180939647,4037038160,1148730428,3123027871,3813386408,4087501137,4267549603,3229630528,2315620239,2906624658,3156319645,1215313976,82966005,3747855548,3245848246,1974459098,1665278241,807407632,451280895,251524083,1841287890,1283575245,337120268,891687699,801369324,3787349855,2721421207,3431482436,959321879,1469301956,4065699751,2197585534,1199193405,2898814052,3887750493,724703513,2514908019,2696962144,2551808385,3516813135,2141445340,1715741218,2119445034,2872807568,2198571144,3398190662,700968686,3547052216,1009259540,2041044702,3803995742,487983883,1991105499,1004265696,1449407026,1316239930,504629770,3683797321,168560134,1816667172,3837287516,1570751170,1857934291,4014189740,2797888098,2822345105,2754712981,936633572,2347923833,852879335,1133234376,1500395319,3084545389,2348912013,1689376213,3533459022,3762923945,3034082412,4205598294,133428468,634383082,2949277029,2398386810,3913789102,403703816,3580869306,2297460856,1867130149,1918643758,607656988,4049053350,3346248884,1368901318,600565992,2090982877,2632479860,557719327,3717614411,3697393085,2249034635,2232388234,2430627952,1115438654,3295786421,2865522278,3633334344,84280067,33027830,303828494,2747425121,1600795957,4188952407,3496589753,2434238086,1486471617,658119965,3106381470,953803233,334231800,3005978776,857870609,3151128937,1890179545,2298973838,2805175444,3056442267,574365214,2450884487,550103529,1233637070,4289353045,2018519080,2057691103,2399374476,4166623649,2148108681,387583245,3664101311,836232934,3330556482,3100665960,3280093505,2955516313,2002398509,287182607,3413881008,4238890068,3597515707,975967766],Y=[1671808611,2089089148,2006576759,2072901243,4061003762,1807603307,1873927791,3310653893,810573872,16974337,1739181671,729634347,4263110654,3613570519,2883997099,1989864566,3393556426,2191335298,3376449993,2106063485,4195741690,1508618841,1204391495,4027317232,2917941677,3563566036,2734514082,2951366063,2629772188,2767672228,1922491506,3227229120,3082974647,4246528509,2477669779,644500518,911895606,1061256767,4144166391,3427763148,878471220,2784252325,3845444069,4043897329,1905517169,3631459288,827548209,356461077,67897348,3344078279,593839651,3277757891,405286936,2527147926,84871685,2595565466,118033927,305538066,2157648768,3795705826,3945188843,661212711,2999812018,1973414517,152769033,2208177539,745822252,439235610,455947803,1857215598,1525593178,2700827552,1391895634,994932283,3596728278,3016654259,695947817,3812548067,795958831,2224493444,1408607827,3513301457,0,3979133421,543178784,4229948412,2982705585,1542305371,1790891114,3410398667,3201918910,961245753,1256100938,1289001036,1491644504,3477767631,3496721360,4012557807,2867154858,4212583931,1137018435,1305975373,861234739,2241073541,1171229253,4178635257,33948674,2139225727,1357946960,1011120188,2679776671,2833468328,1374921297,2751356323,1086357568,2408187279,2460827538,2646352285,944271416,4110742005,3168756668,3066132406,3665145818,560153121,271589392,4279952895,4077846003,3530407890,3444343245,202643468,322250259,3962553324,1608629855,2543990167,1154254916,389623319,3294073796,2817676711,2122513534,1028094525,1689045092,1575467613,422261273,1939203699,1621147744,2174228865,1339137615,3699352540,577127458,712922154,2427141008,2290289544,1187679302,3995715566,3100863416,339486740,3732514782,1591917662,186455563,3681988059,3762019296,844522546,978220090,169743370,1239126601,101321734,611076132,1558493276,3260915650,3547250131,2901361580,1655096418,2443721105,2510565781,3828863972,2039214713,3878868455,3359869896,928607799,1840765549,2374762893,3580146133,1322425422,2850048425,1823791212,1459268694,4094161908,3928346602,1706019429,2056189050,2934523822,135794696,3134549946,2022240376,628050469,779246638,472135708,2800834470,3032970164,3327236038,3894660072,3715932637,1956440180,522272287,1272813131,3185336765,2340818315,2323976074,1888542832,1044544574,3049550261,1722469478,1222152264,50660867,4127324150,236067854,1638122081,895445557,1475980887,3117443513,2257655686,3243809217,489110045,2662934430,3778599393,4162055160,2561878936,288563729,1773916777,3648039385,2391345038,2493985684,2612407707,505560094,2274497927,3911240169,3460925390,1442818645,678973480,3749357023,2358182796,2717407649,2306869641,219617805,3218761151,3862026214,1120306242,1756942440,1103331905,2578459033,762796589,252780047,2966125488,1425844308,3151392187,372911126],w0=[1667474886,2088535288,2004326894,2071694838,4075949567,1802223062,1869591006,3318043793,808472672,16843522,1734846926,724270422,4278065639,3621216949,2880169549,1987484396,3402253711,2189597983,3385409673,2105378810,4210693615,1499065266,1195886990,4042263547,2913856577,3570689971,2728590687,2947541573,2627518243,2762274643,1920112356,3233831835,3082273397,4261223649,2475929149,640051788,909531756,1061110142,4160160501,3435941763,875846760,2779116625,3857003729,4059105529,1903268834,3638064043,825316194,353713962,67374088,3351728789,589522246,3284360861,404236336,2526454071,84217610,2593830191,117901582,303183396,2155911963,3806477791,3958056653,656894286,2998062463,1970642922,151591698,2206440989,741110872,437923380,454765878,1852748508,1515908788,2694904667,1381168804,993742198,3604373943,3014905469,690584402,3823320797,791638366,2223281939,1398011302,3520161977,0,3991743681,538992704,4244381667,2981218425,1532751286,1785380564,3419096717,3200178535,960056178,1246420628,1280103576,1482221744,3486468741,3503319995,4025428677,2863326543,4227536621,1128514950,1296947098,859002214,2240123921,1162203018,4193849577,33687044,2139062782,1347481760,1010582648,2678045221,2829640523,1364325282,2745433693,1077985408,2408548869,2459086143,2644360225,943212656,4126475505,3166494563,3065430391,3671750063,555836226,269496352,4294908645,4092792573,3537006015,3452783745,202118168,320025894,3974901699,1600119230,2543297077,1145359496,387397934,3301201811,2812801621,2122220284,1027426170,1684319432,1566435258,421079858,1936954854,1616945344,2172753945,1330631070,3705438115,572679748,707427924,2425400123,2290647819,1179044492,4008585671,3099120491,336870440,3739122087,1583276732,185277718,3688593069,3772791771,842159716,976899700,168435220,1229577106,101059084,606366792,1549591736,3267517855,3553849021,2897014595,1650632388,2442242105,2509612081,3840161747,2038008818,3890688725,3368567691,926374254,1835907034,2374863873,3587531953,1313788572,2846482505,1819063512,1448540844,4109633523,3941213647,1701162954,2054852340,2930698567,134748176,3132806511,2021165296,623210314,774795868,471606328,2795958615,3031746419,3334885783,3907527627,3722280097,1953799400,522133822,1263263126,3183336545,2341176845,2324333839,1886425312,1044267644,3048588401,1718004428,1212733584,50529542,4143317495,235803164,1633788866,892690282,1465383342,3115962473,2256965911,3250673817,488449850,2661202215,3789633753,4177007595,2560144171,286339874,1768537042,3654906025,2391705863,2492770099,2610673197,505291324,2273808917,3924369609,3469625735,1431699370,673740880,3755965093,2358021891,2711746649,2307489801,218961690,3217021541,3873845719,1111672452,1751693520,1094828930,2576986153,757954394,252645662,2964376443,1414855848,3149649517,370555436],c0=[1374988112,2118214995,437757123,975658646,1001089995,530400753,2902087851,1273168787,540080725,2910219766,2295101073,4110568485,1340463100,3307916247,641025152,3043140495,3736164937,632953703,1172967064,1576976609,3274667266,2169303058,2370213795,1809054150,59727847,361929877,3211623147,2505202138,3569255213,1484005843,1239443753,2395588676,1975683434,4102977912,2572697195,666464733,3202437046,4035489047,3374361702,2110667444,1675577880,3843699074,2538681184,1649639237,2976151520,3144396420,4269907996,4178062228,1883793496,2403728665,2497604743,1383856311,2876494627,1917518562,3810496343,1716890410,3001755655,800440835,2261089178,3543599269,807962610,599762354,33778362,3977675356,2328828971,2809771154,4077384432,1315562145,1708848333,101039829,3509871135,3299278474,875451293,2733856160,92987698,2767645557,193195065,1080094634,1584504582,3178106961,1042385657,2531067453,3711829422,1306967366,2438237621,1908694277,67556463,1615861247,429456164,3602770327,2302690252,1742315127,2968011453,126454664,3877198648,2043211483,2709260871,2084704233,4169408201,0,159417987,841739592,504459436,1817866830,4245618683,260388950,1034867998,908933415,168810852,1750902305,2606453969,607530554,202008497,2472011535,3035535058,463180190,2160117071,1641816226,1517767529,470948374,3801332234,3231722213,1008918595,303765277,235474187,4069246893,766945465,337553864,1475418501,2943682380,4003061179,2743034109,4144047775,1551037884,1147550661,1543208500,2336434550,3408119516,3069049960,3102011747,3610369226,1113818384,328671808,2227573024,2236228733,3535486456,2935566865,3341394285,496906059,3702665459,226906860,2009195472,733156972,2842737049,294930682,1206477858,2835123396,2700099354,1451044056,573804783,2269728455,3644379585,2362090238,2564033334,2801107407,2776292904,3669462566,1068351396,742039012,1350078989,1784663195,1417561698,4136440770,2430122216,775550814,2193862645,2673705150,1775276924,1876241833,3475313331,3366754619,270040487,3902563182,3678124923,3441850377,1851332852,3969562369,2203032232,3868552805,2868897406,566021896,4011190502,3135740889,1248802510,3936291284,699432150,832877231,708780849,3332740144,899835584,1951317047,4236429990,3767586992,866637845,4043610186,1106041591,2144161806,395441711,1984812685,1139781709,3433712980,3835036895,2664543715,1282050075,3240894392,1181045119,2640243204,25965917,4203181171,4211818798,3009879386,2463879762,3910161971,1842759443,2597806476,933301370,1509430414,3943906441,3467192302,3076639029,3776767469,2051518780,2631065433,1441952575,404016761,1942435775,1408749034,1610459739,3745345300,2017778566,3400528769,3110650942,941896748,3265478751,371049330,3168937228,675039627,4279080257,967311729,135050206,3635733660,1683407248,2076935265,3576870512,1215061108,3501741890],m0=[1347548327,1400783205,3273267108,2520393566,3409685355,4045380933,2880240216,2471224067,1428173050,4138563181,2441661558,636813900,4233094615,3620022987,2149987652,2411029155,1239331162,1730525723,2554718734,3781033664,46346101,310463728,2743944855,3328955385,3875770207,2501218972,3955191162,3667219033,768917123,3545789473,692707433,1150208456,1786102409,2029293177,1805211710,3710368113,3065962831,401639597,1724457132,3028143674,409198410,2196052529,1620529459,1164071807,3769721975,2226875310,486441376,2499348523,1483753576,428819965,2274680428,3075636216,598438867,3799141122,1474502543,711349675,129166120,53458370,2592523643,2782082824,4063242375,2988687269,3120694122,1559041666,730517276,2460449204,4042459122,2706270690,3446004468,3573941694,533804130,2328143614,2637442643,2695033685,839224033,1973745387,957055980,2856345839,106852767,1371368976,4181598602,1033297158,2933734917,1179510461,3046200461,91341917,1862534868,4284502037,605657339,2547432937,3431546947,2003294622,3182487618,2282195339,954669403,3682191598,1201765386,3917234703,3388507166,0,2198438022,1211247597,2887651696,1315723890,4227665663,1443857720,507358933,657861945,1678381017,560487590,3516619604,975451694,2970356327,261314535,3535072918,2652609425,1333838021,2724322336,1767536459,370938394,182621114,3854606378,1128014560,487725847,185469197,2918353863,3106780840,3356761769,2237133081,1286567175,3152976349,4255350624,2683765030,3160175349,3309594171,878443390,1988838185,3704300486,1756818940,1673061617,3403100636,272786309,1075025698,545572369,2105887268,4174560061,296679730,1841768865,1260232239,4091327024,3960309330,3497509347,1814803222,2578018489,4195456072,575138148,3299409036,446754879,3629546796,4011996048,3347532110,3252238545,4270639778,915985419,3483825537,681933534,651868046,2755636671,3828103837,223377554,2607439820,1649704518,3270937875,3901806776,1580087799,4118987695,3198115200,2087309459,2842678573,3016697106,1003007129,2802849917,1860738147,2077965243,164439672,4100872472,32283319,2827177882,1709610350,2125135846,136428751,3874428392,3652904859,3460984630,3572145929,3593056380,2939266226,824852259,818324884,3224740454,930369212,2801566410,2967507152,355706840,1257309336,4148292826,243256656,790073846,2373340630,1296297904,1422699085,3756299780,3818836405,457992840,3099667487,2135319889,77422314,1560382517,1945798516,788204353,1521706781,1385356242,870912086,325965383,2358957921,2050466060,2388260884,2313884476,4006521127,901210569,3990953189,1014646705,1503449823,1062597235,2031621326,3212035895,3931371469,1533017514,350174575,2256028891,2177544179,1052338372,741876788,1606591296,1914052035,213705253,2334669897,1107234197,1899603969,3725069491,2631447780,2422494913,1635502980,1893020342,1950903388,1120974935],_=[2807058932,1699970625,2764249623,1586903591,1808481195,1173430173,1487645946,59984867,4199882800,1844882806,1989249228,1277555970,3623636965,3419915562,1149249077,2744104290,1514790577,459744698,244860394,3235995134,1963115311,4027744588,2544078150,4190530515,1608975247,2627016082,2062270317,1507497298,2200818878,567498868,1764313568,3359936201,2305455554,2037970062,1047239e3,1910319033,1337376481,2904027272,2892417312,984907214,1243112415,830661914,861968209,2135253587,2011214180,2927934315,2686254721,731183368,1750626376,4246310725,1820824798,4172763771,3542330227,48394827,2404901663,2871682645,671593195,3254988725,2073724613,145085239,2280796200,2779915199,1790575107,2187128086,472615631,3029510009,4075877127,3802222185,4107101658,3201631749,1646252340,4270507174,1402811438,1436590835,3778151818,3950355702,3963161475,4020912224,2667994737,273792366,2331590177,104699613,95345982,3175501286,2377486676,1560637892,3564045318,369057872,4213447064,3919042237,1137477952,2658625497,1119727848,2340947849,1530455833,4007360968,172466556,266959938,516552836,0,2256734592,3980931627,1890328081,1917742170,4294704398,945164165,3575528878,958871085,3647212047,2787207260,1423022939,775562294,1739656202,3876557655,2530391278,2443058075,3310321856,547512796,1265195639,437656594,3121275539,719700128,3762502690,387781147,218828297,3350065803,2830708150,2848461854,428169201,122466165,3720081049,1627235199,648017665,4122762354,1002783846,2117360635,695634755,3336358691,4234721005,4049844452,3704280881,2232435299,574624663,287343814,612205898,1039717051,840019705,2708326185,793451934,821288114,1391201670,3822090177,376187827,3113855344,1224348052,1679968233,2361698556,1058709744,752375421,2431590963,1321699145,3519142200,2734591178,188127444,2177869557,3727205754,2384911031,3215212461,2648976442,2450346104,3432737375,1180849278,331544205,3102249176,4150144569,2952102595,2159976285,2474404304,766078933,313773861,2570832044,2108100632,1668212892,3145456443,2013908262,418672217,3070356634,2594734927,1852171925,3867060991,3473416636,3907448597,2614737639,919489135,164948639,2094410160,2997825956,590424639,2486224549,1723872674,3157750862,3399941250,3501252752,3625268135,2555048196,3673637356,1343127501,4130281361,3599595085,2957853679,1297403050,81781910,3051593425,2283490410,532201772,1367295589,3926170974,895287692,1953757831,1093597963,492483431,3528626907,1446242576,1192455638,1636604631,209336225,344873464,1015671571,669961897,3375740769,3857572124,2973530695,3747192018,1933530610,3464042516,935293895,3454686199,2858115069,1863638845,3683022916,4085369519,3292445032,875313188,1080017571,3279033885,621591778,1233856572,2504130317,24197544,3017672716,3835484340,3247465558,2220981195,3060847922,1551124588,1463996600],T=[4104605777,1097159550,396673818,660510266,2875968315,2638606623,4200115116,3808662347,821712160,1986918061,3430322568,38544885,3856137295,718002117,893681702,1654886325,2975484382,3122358053,3926825029,4274053469,796197571,1290801793,1184342925,3556361835,2405426947,2459735317,1836772287,1381620373,3196267988,1948373848,3764988233,3385345166,3263785589,2390325492,1480485785,3111247143,3780097726,2293045232,548169417,3459953789,3746175075,439452389,1362321559,1400849762,1685577905,1806599355,2174754046,137073913,1214797936,1174215055,3731654548,2079897426,1943217067,1258480242,529487843,1437280870,3945269170,3049390895,3313212038,923313619,679998e3,3215307299,57326082,377642221,3474729866,2041877159,133361907,1776460110,3673476453,96392454,878845905,2801699524,777231668,4082475170,2330014213,4142626212,2213296395,1626319424,1906247262,1846563261,562755902,3708173718,1040559837,3871163981,1418573201,3294430577,114585348,1343618912,2566595609,3186202582,1078185097,3651041127,3896688048,2307622919,425408743,3371096953,2081048481,1108339068,2216610296,0,2156299017,736970802,292596766,1517440620,251657213,2235061775,2933202493,758720310,265905162,1554391400,1532285339,908999204,174567692,1474760595,4002861748,2610011675,3234156416,3693126241,2001430874,303699484,2478443234,2687165888,585122620,454499602,151849742,2345119218,3064510765,514443284,4044981591,1963412655,2581445614,2137062819,19308535,1928707164,1715193156,4219352155,1126790795,600235211,3992742070,3841024952,836553431,1669664834,2535604243,3323011204,1243905413,3141400786,4180808110,698445255,2653899549,2989552604,2253581325,3252932727,3004591147,1891211689,2487810577,3915653703,4237083816,4030667424,2100090966,865136418,1229899655,953270745,3399679628,3557504664,4118925222,2061379749,3079546586,2915017791,983426092,2022837584,1607244650,2118541908,2366882550,3635996816,972512814,3283088770,1568718495,3499326569,3576539503,621982671,2895723464,410887952,2623762152,1002142683,645401037,1494807662,2595684844,1335535747,2507040230,4293295786,3167684641,367585007,3885750714,1865862730,2668221674,2960971305,2763173681,1059270954,2777952454,2724642869,1320957812,2194319100,2429595872,2815956275,77089521,3973773121,3444575871,2448830231,1305906550,4021308739,2857194700,2516901860,3518358430,1787304780,740276417,1699839814,1592394909,2352307457,2272556026,188821243,1729977011,3687994002,274084841,3594982253,3613494426,2701949495,4162096729,322734571,2837966542,1640576439,484830689,1202797690,3537852828,4067639125,349075736,3342319475,4157467219,4255800159,1030690015,1155237496,2951971274,1757691577,607398968,2738905026,499347990,3794078908,1011452712,227885567,2818666809,213114376,3034881240,1455525988,3414450555,850817237,1817998408,3092726480],y=[0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795],K=[0,185469197,370938394,487725847,741876788,657861945,975451694,824852259,1483753576,1400783205,1315723890,1164071807,1950903388,2135319889,1649704518,1767536459,2967507152,3152976349,2801566410,2918353863,2631447780,2547432937,2328143614,2177544179,3901806776,3818836405,4270639778,4118987695,3299409036,3483825537,3535072918,3652904859,2077965243,1893020342,1841768865,1724457132,1474502543,1559041666,1107234197,1257309336,598438867,681933534,901210569,1052338372,261314535,77422314,428819965,310463728,3409685355,3224740454,3710368113,3593056380,3875770207,3960309330,4045380933,4195456072,2471224067,2554718734,2237133081,2388260884,3212035895,3028143674,2842678573,2724322336,4138563181,4255350624,3769721975,3955191162,3667219033,3516619604,3431546947,3347532110,2933734917,2782082824,3099667487,3016697106,2196052529,2313884476,2499348523,2683765030,1179510461,1296297904,1347548327,1533017514,1786102409,1635502980,2087309459,2003294622,507358933,355706840,136428751,53458370,839224033,957055980,605657339,790073846,2373340630,2256028891,2607439820,2422494913,2706270690,2856345839,3075636216,3160175349,3573941694,3725069491,3273267108,3356761769,4181598602,4063242375,4011996048,3828103837,1033297158,915985419,730517276,545572369,296679730,446754879,129166120,213705253,1709610350,1860738147,1945798516,2029293177,1239331162,1120974935,1606591296,1422699085,4148292826,4233094615,3781033664,3931371469,3682191598,3497509347,3446004468,3328955385,2939266226,2755636671,3106780840,2988687269,2198438022,2282195339,2501218972,2652609425,1201765386,1286567175,1371368976,1521706781,1805211710,1620529459,2105887268,1988838185,533804130,350174575,164439672,46346101,870912086,954669403,636813900,788204353,2358957921,2274680428,2592523643,2441661558,2695033685,2880240216,3065962831,3182487618,3572145929,3756299780,3270937875,3388507166,4174560061,4091327024,4006521127,3854606378,1014646705,930369212,711349675,560487590,272786309,457992840,106852767,223377554,1678381017,1862534868,1914052035,2031621326,1211247597,1128014560,1580087799,1428173050,32283319,182621114,401639597,486441376,768917123,651868046,1003007129,818324884,1503449823,1385356242,1333838021,1150208456,1973745387,2125135846,1673061617,1756818940,2970356327,3120694122,2802849917,2887651696,2637442643,2520393566,2334669897,2149987652,3917234703,3799141122,4284502037,4100872472,3309594171,3460984630,3545789473,3629546796,2050466060,1899603969,1814803222,1730525723,1443857720,1560382517,1075025698,1260232239,575138148,692707433,878443390,1062597235,243256656,91341917,409198410,325965383,3403100636,3252238545,3704300486,3620022987,3874428392,3990953189,4042459122,4227665663,2460449204,2578018489,2226875310,2411029155,3198115200,3046200461,2827177882,2743944855],P=[0,218828297,437656594,387781147,875313188,958871085,775562294,590424639,1750626376,1699970625,1917742170,2135253587,1551124588,1367295589,1180849278,1265195639,3501252752,3720081049,3399941250,3350065803,3835484340,3919042237,4270507174,4085369519,3102249176,3051593425,2734591178,2952102595,2361698556,2177869557,2530391278,2614737639,3145456443,3060847922,2708326185,2892417312,2404901663,2187128086,2504130317,2555048196,3542330227,3727205754,3375740769,3292445032,3876557655,3926170974,4246310725,4027744588,1808481195,1723872674,1910319033,2094410160,1608975247,1391201670,1173430173,1224348052,59984867,244860394,428169201,344873464,935293895,984907214,766078933,547512796,1844882806,1627235199,2011214180,2062270317,1507497298,1423022939,1137477952,1321699145,95345982,145085239,532201772,313773861,830661914,1015671571,731183368,648017665,3175501286,2957853679,2807058932,2858115069,2305455554,2220981195,2474404304,2658625497,3575528878,3625268135,3473416636,3254988725,3778151818,3963161475,4213447064,4130281361,3599595085,3683022916,3432737375,3247465558,3802222185,4020912224,4172763771,4122762354,3201631749,3017672716,2764249623,2848461854,2331590177,2280796200,2431590963,2648976442,104699613,188127444,472615631,287343814,840019705,1058709744,671593195,621591778,1852171925,1668212892,1953757831,2037970062,1514790577,1463996600,1080017571,1297403050,3673637356,3623636965,3235995134,3454686199,4007360968,3822090177,4107101658,4190530515,2997825956,3215212461,2830708150,2779915199,2256734592,2340947849,2627016082,2443058075,172466556,122466165,273792366,492483431,1047239e3,861968209,612205898,695634755,1646252340,1863638845,2013908262,1963115311,1446242576,1530455833,1277555970,1093597963,1636604631,1820824798,2073724613,1989249228,1436590835,1487645946,1337376481,1119727848,164948639,81781910,331544205,516552836,1039717051,821288114,669961897,719700128,2973530695,3157750862,2871682645,2787207260,2232435299,2283490410,2667994737,2450346104,3647212047,3564045318,3279033885,3464042516,3980931627,3762502690,4150144569,4199882800,3070356634,3121275539,2904027272,2686254721,2200818878,2384911031,2570832044,2486224549,3747192018,3528626907,3310321856,3359936201,3950355702,3867060991,4049844452,4234721005,1739656202,1790575107,2108100632,1890328081,1402811438,1586903591,1233856572,1149249077,266959938,48394827,369057872,418672217,1002783846,919489135,567498868,752375421,209336225,24197544,376187827,459744698,945164165,895287692,574624663,793451934,1679968233,1764313568,2117360635,1933530610,1343127501,1560637892,1243112415,1192455638,3704280881,3519142200,3336358691,3419915562,3907448597,3857572124,4075877127,4294704398,3029510009,3113855344,2927934315,2744104290,2159976285,2377486676,2594734927,2544078150],Q=[0,151849742,303699484,454499602,607398968,758720310,908999204,1059270954,1214797936,1097159550,1517440620,1400849762,1817998408,1699839814,2118541908,2001430874,2429595872,2581445614,2194319100,2345119218,3034881240,3186202582,2801699524,2951971274,3635996816,3518358430,3399679628,3283088770,4237083816,4118925222,4002861748,3885750714,1002142683,850817237,698445255,548169417,529487843,377642221,227885567,77089521,1943217067,2061379749,1640576439,1757691577,1474760595,1592394909,1174215055,1290801793,2875968315,2724642869,3111247143,2960971305,2405426947,2253581325,2638606623,2487810577,3808662347,3926825029,4044981591,4162096729,3342319475,3459953789,3576539503,3693126241,1986918061,2137062819,1685577905,1836772287,1381620373,1532285339,1078185097,1229899655,1040559837,923313619,740276417,621982671,439452389,322734571,137073913,19308535,3871163981,4021308739,4104605777,4255800159,3263785589,3414450555,3499326569,3651041127,2933202493,2815956275,3167684641,3049390895,2330014213,2213296395,2566595609,2448830231,1305906550,1155237496,1607244650,1455525988,1776460110,1626319424,2079897426,1928707164,96392454,213114376,396673818,514443284,562755902,679998e3,865136418,983426092,3708173718,3557504664,3474729866,3323011204,4180808110,4030667424,3945269170,3794078908,2507040230,2623762152,2272556026,2390325492,2975484382,3092726480,2738905026,2857194700,3973773121,3856137295,4274053469,4157467219,3371096953,3252932727,3673476453,3556361835,2763173681,2915017791,3064510765,3215307299,2156299017,2307622919,2459735317,2610011675,2081048481,1963412655,1846563261,1729977011,1480485785,1362321559,1243905413,1126790795,878845905,1030690015,645401037,796197571,274084841,425408743,38544885,188821243,3613494426,3731654548,3313212038,3430322568,4082475170,4200115116,3780097726,3896688048,2668221674,2516901860,2366882550,2216610296,3141400786,2989552604,2837966542,2687165888,1202797690,1320957812,1437280870,1554391400,1669664834,1787304780,1906247262,2022837584,265905162,114585348,499347990,349075736,736970802,585122620,972512814,821712160,2595684844,2478443234,2293045232,2174754046,3196267988,3079546586,2895723464,2777952454,3537852828,3687994002,3234156416,3385345166,4142626212,4293295786,3841024952,3992742070,174567692,57326082,410887952,292596766,777231668,660510266,1011452712,893681702,1108339068,1258480242,1343618912,1494807662,1715193156,1865862730,1948373848,2100090966,2701949495,2818666809,3004591147,3122358053,2235061775,2352307457,2535604243,2653899549,3915653703,3764988233,4219352155,4067639125,3444575871,3294430577,3746175075,3594982253,836553431,953270745,600235211,718002117,367585007,484830689,133361907,251657213,2041877159,1891211689,1806599355,1654886325,1568718495,1418573201,1335535747,1184342925];function o0(e){for(var a=[],r=0;r>2,this._Ke[k][a%4]=f[a],this._Kd[e-k][a%4]=f[a];for(var G=0,v=b,p;v>16&255]<<24^Z[p>>8&255]<<16^Z[p&255]<<8^Z[p>>24&255]^f0[G]<<24,G+=1,b!=8)for(var a=1;a>8&255]<<8^Z[p>>16&255]<<16^Z[p>>24&255]<<24;for(var a=b/2+1;a>2,d=v%4,this._Ke[m][d]=f[a],this._Kd[e-m][d]=f[a++],v++}for(var m=1;m>24&255]^K[p>>16&255]^P[p>>8&255]^Q[p&255]},x0.prototype.encrypt=function(e){if(e.length!=16)throw new Error("invalid plaintext size (must be 16 bytes)");for(var a=this._Ke.length-1,r=[0,0,0,0],b=o0(e),f=0;f<4;f++)b[f]^=this._Ke[0][f];for(var k=1;k>24&255]^i0[b[(f+1)%4]>>16&255]^Y[b[(f+2)%4]>>8&255]^w0[b[(f+3)%4]&255]^this._Ke[k][f];b=r.slice()}for(var G=w(16),v,f=0;f<4;f++)v=this._Ke[a][f],G[4*f]=(Z[b[f]>>24&255]^v>>24)&255,G[4*f+1]=(Z[b[(f+1)%4]>>16&255]^v>>16)&255,G[4*f+2]=(Z[b[(f+2)%4]>>8&255]^v>>8)&255,G[4*f+3]=(Z[b[(f+3)%4]&255]^v)&255;return G},x0.prototype.decrypt=function(e){if(e.length!=16)throw new Error("invalid ciphertext size (must be 16 bytes)");for(var a=this._Kd.length-1,r=[0,0,0,0],b=o0(e),f=0;f<4;f++)b[f]^=this._Kd[0][f];for(var k=1;k>24&255]^m0[b[(f+3)%4]>>16&255]^_[b[(f+2)%4]>>8&255]^T[b[(f+1)%4]&255]^this._Kd[k][f];b=r.slice()}for(var G=w(16),v,f=0;f<4;f++)v=this._Kd[a][f],G[4*f]=(W[b[f]>>24&255]^v>>24)&255,G[4*f+1]=(W[b[(f+3)%4]>>16&255]^v>>16)&255,G[4*f+2]=(W[b[(f+2)%4]>>8&255]^v>>8)&255,G[4*f+3]=(W[b[(f+1)%4]&255]^v)&255;return G};var s0=function(e){if(!(this instanceof s0))throw Error("AES must be instanitated with `new`");this.description="Electronic Code Block",this.name="ecb",this._aes=new x0(e)};s0.prototype.encrypt=function(e){if(e=E(e),e.length%16!==0)throw new Error("invalid plaintext size (must be multiple of 16 bytes)");for(var a=w(e.length),r=w(16),b=0;bNumber.MAX_SAFE_INTEGER)throw new Error("integer value out of safe range");for(var a=15;a>=0;--a)this._counter[a]=e%256,e=parseInt(e/256)},u0.prototype.setBytes=function(e){if(e=E(e,!0),e.length!=16)throw new Error("invalid counter bytes size (must be 16 bytes)");this._counter=e},u0.prototype.increment=function(){for(var e=15;e>=0;e--)if(this._counter[e]===255)this._counter[e]=0;else{this._counter[e]++;break}};var g0=function(e,a){if(!(this instanceof g0))throw Error("AES must be instanitated with `new`");this.description="Counter",this.name="ctr",a instanceof u0||(a=new u0(a)),this._counter=a,this._remainingCounter=null,this._remainingCounterIndex=16,this._aes=new x0(e)};g0.prototype.encrypt=function(e){for(var a=E(e,!0),r=0;r16)throw new Error("PKCS#7 padding byte out of range");for(var r=e.length-a,b=0;b{try{const n0=fe.unzip(new Uint8Array(C)),F0="w%(%^(*&^$^%$#%^".split("").map(E=>E.charCodeAt(0)),V=new ce.ModeOfOperation.ecb(F0).decrypt(n0).filter(E=>E>=32);return typeof Blob>"u"?Buffer.from(V).toString():new Blob([V],{type:"application/json"}).text()}catch(n0){throw n0}},te=C=>new Promise((n0,F0)=>{fetch(C,{method:"GET"}).then(J=>{var V;return((V=process==null?void 0:process.release)==null?void 0:V.name)==="node"?J.buffer():J.arrayBuffer()}).then(J=>de(J)).then(J=>{n0(J)}).catch(J=>{throw new Error(`unzip AES file error: ${J}`)})});export{te as p}; diff --git a/dist/assets/progress-f968a1fe.js b/dist/assets/progress-096a2c96.js similarity index 98% rename from dist/assets/progress-f968a1fe.js rename to dist/assets/progress-096a2c96.js index b493471e16ec03b1b8ab89e7bbe3d09b3811ee34..e76cfed81bb6dbd4cfdc68dae9154f6706f37621 100644 --- a/dist/assets/progress-f968a1fe.js +++ b/dist/assets/progress-096a2c96.js @@ -1 +1 @@ -import{A as ae,f as R,a as ne,Q as ce,u as ie,j as U,c as K,b as D,bc as J,H as oe,C as le,o as ue,G as de,h as fe,M as ve}from"./_setToString-397d22bb.js";import{r as s,_ as A}from"./umi-91f9d113.js";var ge={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"}}]},name:"check",theme:"outlined"};const pe=ge;var he=function(e,t){return s.createElement(ae,R(R({},e),{},{ref:t,icon:pe}))},me=s.forwardRef(he);const ke=me;var Ce={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"}},{tag:"path",attrs:{d:"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z"}}]},name:"plus",theme:"outlined"};const ye=Ce;var be=function(e,t){return s.createElement(ae,R(R({},e),{},{ref:t,icon:ye}))},Pe=s.forwardRef(be);const Ve=Pe;var Se={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1,gapPosition:"bottom"},xe=function(){var e=s.useRef([]),t=s.useRef(null);return s.useEffect(function(){var r=Date.now(),o=!1;e.current.forEach(function(n){if(n){o=!0;var c=n.style;c.transitionDuration=".3s, .3s, .3s, .06s",t.current&&r-t.current<100&&(c.transitionDuration="0s, 0s")}}),o&&(t.current=Date.now())}),e.current},ee=0,_e=ce();function Oe(){var a;return _e?(a=ee,ee+=1):a="TEST_OR_SSR",a}const Ee=function(a){var e=s.useState(),t=ne(e,2),r=t[0],o=t[1];return s.useEffect(function(){o("rc_progress_".concat(Oe()))},[]),a||r};var $e=["id","prefixCls","steps","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","style","className","strokeColor","percent"];function te(a){return+a.replace("%","")}function re(a){var e=a??[];return Array.isArray(e)?e:[e]}var F=100,Z=function(e,t,r,o,n,c,u,l,i,f){var v=arguments.length>10&&arguments[10]!==void 0?arguments[10]:0,m=r/100*360*((360-c)/360),d=c===0?0:{bottom:0,top:180,left:90,right:-90}[u],p=(100-o)/100*t;return i==="round"&&o!==100&&(p+=f/2,p>=t&&(p=t-.01)),{stroke:typeof l=="string"?l:void 0,strokeDasharray:"".concat(t,"px ").concat(e),strokeDashoffset:p+v,transform:"rotate(".concat(n+m+d,"deg)"),transformOrigin:"0 0",transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s",fillOpacity:0}},we=function(e){var t=R(R({},Se),e),r=t.id,o=t.prefixCls,n=t.steps,c=t.strokeWidth,u=t.trailWidth,l=t.gapDegree,i=l===void 0?0:l,f=t.gapPosition,v=t.trailColor,m=t.strokeLinecap,d=t.style,p=t.className,k=t.strokeColor,h=t.percent,x=ie(t,$e),_=Ee(r),O="".concat(_,"-gradient"),y=F/2-c/2,g=Math.PI*2*y,$=i>0?90+i/2:-90,E=g*((360-i)/360),z=U(n)==="object"?n:{count:n,space:2},N=z.count,L=z.space,Q=Z(g,E,0,100,$,i,f,v,m,c),b=re(h),P=re(k),W=P.find(function(C){return C&&U(C)==="object"}),M=xe(),w=function(){var S=0;return b.map(function(T,j){var B=P[j]||P[P.length-1],q=B&&U(B)==="object"?"url(#".concat(O,")"):void 0,G=Z(g,E,S,T,$,i,f,B,m,c);return S+=T,s.createElement("circle",{key:j,className:"".concat(o,"-circle-path"),r:y,cx:0,cy:0,stroke:q,strokeLinecap:m,strokeWidth:c,opacity:T===0?0:1,style:G,ref:function(H){M[j]=H}})}).reverse()},X=function(){var S=Math.round(N*(b[0]/100)),T=100/N,j=0;return new Array(N).fill(null).map(function(B,q){var G=q<=S-1?P[0]:v,Y=G&&U(G)==="object"?"url(#".concat(O,")"):void 0,H=Z(g,E,j,T,$,i,f,G,"butt",c,L);return j+=(E-H.strokeDashoffset+L)*100/E,s.createElement("circle",{key:q,className:"".concat(o,"-circle-path"),r:y,cx:0,cy:0,stroke:Y,strokeWidth:c,opacity:1,style:H,ref:function(se){M[q]=se}})})};return s.createElement("svg",A({className:K("".concat(o,"-circle"),p),viewBox:"".concat(-F/2," ").concat(-F/2," ").concat(F," ").concat(F),style:d,id:r,role:"presentation"},x),W&&s.createElement("defs",null,s.createElement("linearGradient",{id:O,x1:"100%",y1:"0%",x2:"0%",y2:"0%"},Object.keys(W).sort(function(C,S){return te(C)-te(S)}).map(function(C,S){return s.createElement("stop",{key:S,offset:C,stopColor:W[C]})}))),!N&&s.createElement("circle",{className:"".concat(o,"-circle-trail"),r:y,cx:0,cy:0,stroke:v,strokeLinecap:m,strokeWidth:u||c,style:Q}),N?X():w())};function I(a){return!a||a<0?0:a>100?100:a}function V(a){var e=a.success,t=a.successPercent,r=t;return e&&"progress"in e&&(r=e.progress),e&&"percent"in e&&(r=e.percent),r}function Ne(a){var e=a.percent,t=a.success,r=a.successPercent,o=I(V({success:t,successPercent:r}));return[o,I(I(e)-o)]}function De(a){var e=a.success,t=e===void 0?{}:e,r=a.strokeColor,o=t.strokeColor;return[o||J.green,r||null]}var Ie=function(e){var t=e.prefixCls,r=e.width,o=e.strokeWidth,n=e.trailColor,c=n===void 0?null:n,u=e.strokeLinecap,l=u===void 0?"round":u,i=e.gapPosition,f=e.gapDegree,v=e.type,m=e.children,d=e.success,p=r||120,k={width:p,height:p,fontSize:p*.15+6},h=o||6,x=i||v==="dashboard"&&"bottom"||void 0,_=function(){if(f||f===0)return f;if(v==="dashboard")return 75},O=Object.prototype.toString.call(e.strokeColor)==="[object Object]",y=De({success:d,strokeColor:e.strokeColor}),g=K("".concat(t,"-inner"),D({},"".concat(t,"-circle-gradient"),O));return s.createElement("div",{className:g,style:k},s.createElement(we,{percent:Ne(e),strokeWidth:h,trailWidth:h,strokeColor:y,strokeLinecap:l,trailColor:c,prefixCls:t,gapDegree:_(),gapPosition:x}),m)};const Le=Ie;var We=globalThis&&globalThis.__rest||function(a,e){var t={};for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&e.indexOf(r)<0&&(t[r]=a[r]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(a);o=100?"success":b||"normal"}function x(b,P){var W=e.format,M=V(e);if(!v)return null;var w,X=W||function(S){return"".concat(S,"%")},C=d==="line";return W||P!=="exception"&&P!=="success"?w=X(I(u),I(M)):P==="exception"?w=C?s.createElement(de,null):s.createElement(fe,null):P==="success"&&(w=C?s.createElement(ve,null):s.createElement(ke,null)),s.createElement("span",{className:"".concat(b,"-text"),title:typeof w=="string"?w:void 0},w)}var _=s.useContext(le),O=_.getPrefixCls,y=_.direction,g=O("progress",t),$=h(),E=x(g,$),z=Array.isArray(n)?n[0]:n,N=typeof n=="string"||Array.isArray(n)?n:void 0,L;d==="line"?L=o?s.createElement(qe,A({},e,{strokeColor:N,prefixCls:g,steps:o}),E):s.createElement(ze,A({},e,{strokeColor:z,prefixCls:g,direction:y}),E):(d==="circle"||d==="dashboard")&&(L=s.createElement(Le,A({},e,{strokeColor:z,prefixCls:g,progressStatus:$}),E));var Q=K(g,D(D(D(D(D({},"".concat(g,"-").concat(d==="dashboard"&&"circle"||o&&"steps"||d),!0),"".concat(g,"-status-").concat($),!0),"".concat(g,"-show-info"),v),"".concat(g,"-").concat(i),i),"".concat(g,"-rtl"),y==="rtl"),r);return s.createElement("div",A({},ue(p,["status","format","trailColor","strokeWidth","width","gapDegree","gapPosition","strokeLinecap","success","successPercent"]),{className:Q,role:"progressbar"}),L)};const Ke=Me;export{ke as C,Ke as P,Ve as a}; +import{A as ae,f as R,a as ne,Q as ce,u as ie,j as U,c as K,b as D,bc as J,H as oe,C as le,o as ue,G as de,h as fe,M as ve}from"./_setToString-dbbee35a.js";import{r as s,_ as A}from"./umi-37873494.js";var ge={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"}}]},name:"check",theme:"outlined"};const pe=ge;var he=function(e,t){return s.createElement(ae,R(R({},e),{},{ref:t,icon:pe}))},me=s.forwardRef(he);const ke=me;var Ce={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"}},{tag:"path",attrs:{d:"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z"}}]},name:"plus",theme:"outlined"};const ye=Ce;var be=function(e,t){return s.createElement(ae,R(R({},e),{},{ref:t,icon:ye}))},Pe=s.forwardRef(be);const Ve=Pe;var Se={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1,gapPosition:"bottom"},xe=function(){var e=s.useRef([]),t=s.useRef(null);return s.useEffect(function(){var r=Date.now(),o=!1;e.current.forEach(function(n){if(n){o=!0;var c=n.style;c.transitionDuration=".3s, .3s, .3s, .06s",t.current&&r-t.current<100&&(c.transitionDuration="0s, 0s")}}),o&&(t.current=Date.now())}),e.current},ee=0,_e=ce();function Oe(){var a;return _e?(a=ee,ee+=1):a="TEST_OR_SSR",a}const Ee=function(a){var e=s.useState(),t=ne(e,2),r=t[0],o=t[1];return s.useEffect(function(){o("rc_progress_".concat(Oe()))},[]),a||r};var $e=["id","prefixCls","steps","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","style","className","strokeColor","percent"];function te(a){return+a.replace("%","")}function re(a){var e=a??[];return Array.isArray(e)?e:[e]}var F=100,Z=function(e,t,r,o,n,c,u,l,i,f){var v=arguments.length>10&&arguments[10]!==void 0?arguments[10]:0,m=r/100*360*((360-c)/360),d=c===0?0:{bottom:0,top:180,left:90,right:-90}[u],p=(100-o)/100*t;return i==="round"&&o!==100&&(p+=f/2,p>=t&&(p=t-.01)),{stroke:typeof l=="string"?l:void 0,strokeDasharray:"".concat(t,"px ").concat(e),strokeDashoffset:p+v,transform:"rotate(".concat(n+m+d,"deg)"),transformOrigin:"0 0",transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s",fillOpacity:0}},we=function(e){var t=R(R({},Se),e),r=t.id,o=t.prefixCls,n=t.steps,c=t.strokeWidth,u=t.trailWidth,l=t.gapDegree,i=l===void 0?0:l,f=t.gapPosition,v=t.trailColor,m=t.strokeLinecap,d=t.style,p=t.className,k=t.strokeColor,h=t.percent,x=ie(t,$e),_=Ee(r),O="".concat(_,"-gradient"),y=F/2-c/2,g=Math.PI*2*y,$=i>0?90+i/2:-90,E=g*((360-i)/360),z=U(n)==="object"?n:{count:n,space:2},N=z.count,L=z.space,Q=Z(g,E,0,100,$,i,f,v,m,c),b=re(h),P=re(k),W=P.find(function(C){return C&&U(C)==="object"}),M=xe(),w=function(){var S=0;return b.map(function(T,j){var B=P[j]||P[P.length-1],q=B&&U(B)==="object"?"url(#".concat(O,")"):void 0,G=Z(g,E,S,T,$,i,f,B,m,c);return S+=T,s.createElement("circle",{key:j,className:"".concat(o,"-circle-path"),r:y,cx:0,cy:0,stroke:q,strokeLinecap:m,strokeWidth:c,opacity:T===0?0:1,style:G,ref:function(H){M[j]=H}})}).reverse()},X=function(){var S=Math.round(N*(b[0]/100)),T=100/N,j=0;return new Array(N).fill(null).map(function(B,q){var G=q<=S-1?P[0]:v,Y=G&&U(G)==="object"?"url(#".concat(O,")"):void 0,H=Z(g,E,j,T,$,i,f,G,"butt",c,L);return j+=(E-H.strokeDashoffset+L)*100/E,s.createElement("circle",{key:q,className:"".concat(o,"-circle-path"),r:y,cx:0,cy:0,stroke:Y,strokeWidth:c,opacity:1,style:H,ref:function(se){M[q]=se}})})};return s.createElement("svg",A({className:K("".concat(o,"-circle"),p),viewBox:"".concat(-F/2," ").concat(-F/2," ").concat(F," ").concat(F),style:d,id:r,role:"presentation"},x),W&&s.createElement("defs",null,s.createElement("linearGradient",{id:O,x1:"100%",y1:"0%",x2:"0%",y2:"0%"},Object.keys(W).sort(function(C,S){return te(C)-te(S)}).map(function(C,S){return s.createElement("stop",{key:S,offset:C,stopColor:W[C]})}))),!N&&s.createElement("circle",{className:"".concat(o,"-circle-trail"),r:y,cx:0,cy:0,stroke:v,strokeLinecap:m,strokeWidth:u||c,style:Q}),N?X():w())};function I(a){return!a||a<0?0:a>100?100:a}function V(a){var e=a.success,t=a.successPercent,r=t;return e&&"progress"in e&&(r=e.progress),e&&"percent"in e&&(r=e.percent),r}function Ne(a){var e=a.percent,t=a.success,r=a.successPercent,o=I(V({success:t,successPercent:r}));return[o,I(I(e)-o)]}function De(a){var e=a.success,t=e===void 0?{}:e,r=a.strokeColor,o=t.strokeColor;return[o||J.green,r||null]}var Ie=function(e){var t=e.prefixCls,r=e.width,o=e.strokeWidth,n=e.trailColor,c=n===void 0?null:n,u=e.strokeLinecap,l=u===void 0?"round":u,i=e.gapPosition,f=e.gapDegree,v=e.type,m=e.children,d=e.success,p=r||120,k={width:p,height:p,fontSize:p*.15+6},h=o||6,x=i||v==="dashboard"&&"bottom"||void 0,_=function(){if(f||f===0)return f;if(v==="dashboard")return 75},O=Object.prototype.toString.call(e.strokeColor)==="[object Object]",y=De({success:d,strokeColor:e.strokeColor}),g=K("".concat(t,"-inner"),D({},"".concat(t,"-circle-gradient"),O));return s.createElement("div",{className:g,style:k},s.createElement(we,{percent:Ne(e),strokeWidth:h,trailWidth:h,strokeColor:y,strokeLinecap:l,trailColor:c,prefixCls:t,gapDegree:_(),gapPosition:x}),m)};const Le=Ie;var We=globalThis&&globalThis.__rest||function(a,e){var t={};for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&e.indexOf(r)<0&&(t[r]=a[r]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(a);o=100?"success":b||"normal"}function x(b,P){var W=e.format,M=V(e);if(!v)return null;var w,X=W||function(S){return"".concat(S,"%")},C=d==="line";return W||P!=="exception"&&P!=="success"?w=X(I(u),I(M)):P==="exception"?w=C?s.createElement(de,null):s.createElement(fe,null):P==="success"&&(w=C?s.createElement(ve,null):s.createElement(ke,null)),s.createElement("span",{className:"".concat(b,"-text"),title:typeof w=="string"?w:void 0},w)}var _=s.useContext(le),O=_.getPrefixCls,y=_.direction,g=O("progress",t),$=h(),E=x(g,$),z=Array.isArray(n)?n[0]:n,N=typeof n=="string"||Array.isArray(n)?n:void 0,L;d==="line"?L=o?s.createElement(qe,A({},e,{strokeColor:N,prefixCls:g,steps:o}),E):s.createElement(ze,A({},e,{strokeColor:z,prefixCls:g,direction:y}),E):(d==="circle"||d==="dashboard")&&(L=s.createElement(Le,A({},e,{strokeColor:z,prefixCls:g,progressStatus:$}),E));var Q=K(g,D(D(D(D(D({},"".concat(g,"-").concat(d==="dashboard"&&"circle"||o&&"steps"||d),!0),"".concat(g,"-status-").concat($),!0),"".concat(g,"-show-info"),v),"".concat(g,"-").concat(i),i),"".concat(g,"-rtl"),y==="rtl"),r);return s.createElement("div",A({},ue(p,["status","format","trailColor","strokeWidth","width","gapDegree","gapPosition","strokeLinecap","success","successPercent"]),{className:Q,role:"progressbar"}),L)};const Ke=Me;export{ke as C,Ke as P,Ve as a}; diff --git a/dist/assets/tiny-invariant-023fafff.js b/dist/assets/tiny-invariant-5c4293b4.js similarity index 90% rename from dist/assets/tiny-invariant-023fafff.js rename to dist/assets/tiny-invariant-5c4293b4.js index d897227cc4b95342d246f02d37e7f1217b7bce5b..3e81133fa221be699d9530c04fe31f65dbc97d90 100644 --- a/dist/assets/tiny-invariant-023fafff.js +++ b/dist/assets/tiny-invariant-5c4293b4.js @@ -1 +1 @@ -import{n as b}from"./index-1fa256e9.js";import"./parser-f1e7dbfb.js";import{B as h}from"./index-4514925e.js";import{r as l,f as E,u as S}from"./umi-91f9d113.js";import{i as k}from"./util-b514be53.js";function w(e,t){return typeof e=="function"?e.length?e(t):e():e}var I=k?l.useLayoutEffect:l.useEffect;const y=I;var P=function(e){l.useEffect(e,[])};const F=P;function s(e){var t={state:e instanceof Function?e():e,setState:function(o){t.state=w(o,t.state),t.setters.forEach(function(n){return n(t.state)})},setters:[]};return function(){var o=l.useState(t.state),n=o[0],u=o[1];return F(function(){return function(){t.setters=t.setters.filter(function(a){return a!==u})}}),y(function(){t.setters.includes(u)||t.setters.push(u)}),[n,t.setState]}}var _=(e=>(e[e.Discard=-1]="Discard",e[e.Solved=0]="Solved",e[e.Issue=1]="Issue",e[e.Fatal=2]="Fatal",e))(_||{});function f(e,t){const o=localStorage.getItem(e);if(o!==null)try{t=JSON.parse(o)}catch{}const n=s(t);return()=>{const[u,a]=n();return[u,i=>{localStorage.setItem(e,JSON.stringify(i)),a(i)}]}}const T=s(b()),G=f("__settings_zoom",1),M=f("__settings_semantic_visible",!1),$=f("__settings_token_visible",!0),j=f("__settings_staves_image_visible",!0),q=f("__settings_regulate_policy","equations"),D=f("__settings_fake_notes_scope","patched"),H=s(null),J=s(!1),z=s("edit");s(0);const A=s([]),U=s(null),Z=s(!1),K=s(!1),Q=s(!1),W=s(null);s(!1);const X=s(!1),Y=s([]),ee={hash:null},te=l.createContext({}),N=s([]),se=()=>{const e=E(),t=S(),o=l.useRef(!1),[n,u]=N(),a=l.useMemo(()=>{var r;const c=(r=t==null?void 0:t.hash)==null?void 0:r.replace("#","");return/\d+/g.test(c)?+c:null},[t==null?void 0:t.hash]),[i,x]=T(),v=l.useMemo(()=>{var g;if(!Number.isFinite(a))return null;const c=i.spartito||i.makeSpartito(),r=(g=c==null?void 0:c.measures)==null?void 0:g.find(p=>p.measureIndex===a),d=n==null?void 0:n.find(p=>p.measureIndex===a);return d?r?(i.assignBackgroundForMeasure(r),{...d,measure:new h(r)}):d:r?(i.assignBackgroundForMeasure(r),{scoreId:null,status:_.Issue,measureIndex:a,lastUpdate:null,measure:new h(r)}):null},[i,n,a]);return[[n,u],[a,c=>{const r=Number.isFinite(c)?`#${c}`:"";e({pathname:t.pathname,search:t.search,hash:r},{replace:!!o.current}),o.current=!0}],v]};var V=!0,m="Invariant failed";function oe(e,t){if(!e){if(V)throw new Error(m);var o=typeof t=="function"?t():t,n=o?"".concat(m,": ").concat(o):m;throw new Error(n)}}export{_ as I,te as P,Q as a,W as b,K as c,H as d,G as e,M as f,$ as g,X as h,j as i,z as j,A as k,U as l,se as m,Z as n,Y as o,J as p,q,D as r,ee as s,w as t,T as u,F as v,oe as w,N as x}; +import{n as b}from"./index-03b68134.js";import"./parser-c740d6a8.js";import{B as h}from"./index-a475ddbb.js";import{r as l,f as E,u as S}from"./umi-37873494.js";import{i as k}from"./util-2d38567b.js";function w(e,t){return typeof e=="function"?e.length?e(t):e():e}var I=k?l.useLayoutEffect:l.useEffect;const y=I;var P=function(e){l.useEffect(e,[])};const F=P;function s(e){var t={state:e instanceof Function?e():e,setState:function(o){t.state=w(o,t.state),t.setters.forEach(function(n){return n(t.state)})},setters:[]};return function(){var o=l.useState(t.state),n=o[0],u=o[1];return F(function(){return function(){t.setters=t.setters.filter(function(a){return a!==u})}}),y(function(){t.setters.includes(u)||t.setters.push(u)}),[n,t.setState]}}var _=(e=>(e[e.Discard=-1]="Discard",e[e.Solved=0]="Solved",e[e.Issue=1]="Issue",e[e.Fatal=2]="Fatal",e))(_||{});function f(e,t){const o=localStorage.getItem(e);if(o!==null)try{t=JSON.parse(o)}catch{}const n=s(t);return()=>{const[u,a]=n();return[u,i=>{localStorage.setItem(e,JSON.stringify(i)),a(i)}]}}const T=s(b()),G=f("__settings_zoom",1),M=f("__settings_semantic_visible",!1),$=f("__settings_token_visible",!0),j=f("__settings_staves_image_visible",!0),q=f("__settings_regulate_policy","equations"),D=f("__settings_fake_notes_scope","patched"),H=s(null),J=s(!1),z=s("edit");s(0);const A=s([]),U=s(null),Z=s(!1),K=s(!1),Q=s(!1),W=s(null);s(!1);const X=s(!1),Y=s([]),ee={hash:null},te=l.createContext({}),N=s([]),se=()=>{const e=E(),t=S(),o=l.useRef(!1),[n,u]=N(),a=l.useMemo(()=>{var r;const c=(r=t==null?void 0:t.hash)==null?void 0:r.replace("#","");return/\d+/g.test(c)?+c:null},[t==null?void 0:t.hash]),[i,x]=T(),v=l.useMemo(()=>{var g;if(!Number.isFinite(a))return null;const c=i.spartito||i.makeSpartito(),r=(g=c==null?void 0:c.measures)==null?void 0:g.find(p=>p.measureIndex===a),d=n==null?void 0:n.find(p=>p.measureIndex===a);return d?r?(i.assignBackgroundForMeasure(r),{...d,measure:new h(r)}):d:r?(i.assignBackgroundForMeasure(r),{scoreId:null,status:_.Issue,measureIndex:a,lastUpdate:null,measure:new h(r)}):null},[i,n,a]);return[[n,u],[a,c=>{const r=Number.isFinite(c)?`#${c}`:"";e({pathname:t.pathname,search:t.search,hash:r},{replace:!!o.current}),o.current=!0}],v]};var V=!0,m="Invariant failed";function oe(e,t){if(!e){if(V)throw new Error(m);var o=typeof t=="function"?t():t,n=o?"".concat(m,": ").concat(o):m;throw new Error(n)}}export{_ as I,te as P,Q as a,W as b,K as c,H as d,G as e,M as f,$ as g,X as h,j as i,z as j,A as k,U as l,se as m,Z as n,Y as o,J as p,q,D as r,ee as s,w as t,T as u,F as v,oe as w,N as x}; diff --git a/dist/assets/umi-91f9d113.js b/dist/assets/umi-37873494.js similarity index 98% rename from dist/assets/umi-91f9d113.js rename to dist/assets/umi-37873494.js index 5e1a63559ed0c40496c7ed31f73c2ea475d88204..b6e6d998457842a901183c9cfd58a4d822d56fa0 100644 --- a/dist/assets/umi-91f9d113.js +++ b/dist/assets/umi-37873494.js @@ -52,7 +52,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `+a[s].replace(" at new "," at ");return e.displayName&&c.includes("")&&(c=c.replace("",e.displayName)),c}while(1<=s&&0<=u);break}}}finally{rm=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:"")?Au(e):""}function npe(e){switch(e.tag){case 5:return Au(e.type);case 16:return Au("Lazy");case 13:return Au("Suspense");case 19:return Au("SuspenseList");case 0:case 2:case 15:return e=tm(e.type,!1),e;case 11:return e=tm(e.type.render,!1),e;case 1:return e=tm(e.type,!0),e;default:return""}}function Lg(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Ho:return"Fragment";case Bo:return"Portal";case xg:return"Profiler";case D1:return"StrictMode";case Cg:return"Suspense";case Ng:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case MA:return(e.displayName||"Context")+".Consumer";case bA:return(e._context.displayName||"Context")+".Provider";case R1:var r=e.render;return e=e.displayName,e||(e=r.displayName||r.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case A1:return r=e.displayName||null,r!==null?r:Lg(e.type)||"Memo";case qa:r=e._payload,e=e._init;try{return Lg(e(r))}catch{}}return null}function ape(e){var r=e.type;switch(e.tag){case 24:return"Cache";case 9:return(r.displayName||"Context")+".Consumer";case 10:return(r._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=r.render,e=e.displayName||e.name||"",r.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return r;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Lg(r);case 8:return r===D1?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof r=="function")return r.displayName||r.name||null;if(typeof r=="string")return r}return null}function wi(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function DA(e){var r=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(r==="checkbox"||r==="radio")}function ipe(e){var r=DA(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,r),n=""+e[r];if(!e.hasOwnProperty(r)&&typeof t<"u"&&typeof t.get=="function"&&typeof t.set=="function"){var a=t.get,i=t.set;return Object.defineProperty(e,r,{configurable:!0,get:function(){return a.call(this)},set:function(s){n=""+s,i.call(this,s)}}),Object.defineProperty(e,r,{enumerable:t.enumerable}),{getValue:function(){return n},setValue:function(s){n=""+s},stopTracking:function(){e._valueTracker=null,delete e[r]}}}}function wf(e){e._valueTracker||(e._valueTracker=ipe(e))}function RA(e){if(!e)return!1;var r=e._valueTracker;if(!r)return!0;var t=r.getValue(),n="";return e&&(n=DA(e)?e.checked?"true":"false":e.value),e=n,e!==t?(r.setValue(e),!0):!1}function Ld(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Fg(e,r){var t=r.checked;return pr({},r,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:t??e._wrapperState.initialChecked})}function tk(e,r){var t=r.defaultValue==null?"":r.defaultValue,n=r.checked!=null?r.checked:r.defaultChecked;t=wi(r.value!=null?r.value:t),e._wrapperState={initialChecked:n,initialValue:t,controlled:r.type==="checkbox"||r.type==="radio"?r.checked!=null:r.value!=null}}function AA(e,r){r=r.checked,r!=null&&P1(e,"checked",r,!1)}function jg(e,r){AA(e,r);var t=wi(r.value),n=r.type;if(t!=null)n==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}r.hasOwnProperty("value")?Yg(e,r.type,t):r.hasOwnProperty("defaultValue")&&Yg(e,r.type,wi(r.defaultValue)),r.checked==null&&r.defaultChecked!=null&&(e.defaultChecked=!!r.defaultChecked)}function nk(e,r,t){if(r.hasOwnProperty("value")||r.hasOwnProperty("defaultValue")){var n=r.type;if(!(n!=="submit"&&n!=="reset"||r.value!==void 0&&r.value!==null))return;r=""+e._wrapperState.initialValue,t||r===e.value||(e.value=r),e.defaultValue=r}t=e.name,t!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,t!==""&&(e.name=t)}function Yg(e,r,t){(r!=="number"||Ld(e.ownerDocument)!==e)&&(t==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}var xu=Array.isArray;function is(e,r,t,n){if(e=e.options,r){r={};for(var a=0;a"+r.valueOf().toString()+"",r=Sf.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;r.firstChild;)e.appendChild(r.firstChild)}});function ol(e,r){if(r){var t=e.firstChild;if(t&&t===e.lastChild&&t.nodeType===3){t.nodeValue=r;return}}e.textContent=r}var Bu={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ope=["Webkit","ms","Moz","O"];Object.keys(Bu).forEach(function(e){ope.forEach(function(r){r=r+e.charAt(0).toUpperCase()+e.substring(1),Bu[r]=Bu[e]})});function LA(e,r,t){return r==null||typeof r=="boolean"||r===""?"":t||typeof r!="number"||r===0||Bu.hasOwnProperty(e)&&Bu[e]?(""+r).trim():r+"px"}function FA(e,r){e=e.style;for(var t in r)if(r.hasOwnProperty(t)){var n=t.indexOf("--")===0,a=LA(t,r[t],n);t==="float"&&(t="cssFloat"),n?e.setProperty(t,a):e[t]=a}}var spe=pr({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function zg(e,r){if(r){if(spe[e]&&(r.children!=null||r.dangerouslySetInnerHTML!=null))throw Error(H(137,e));if(r.dangerouslySetInnerHTML!=null){if(r.children!=null)throw Error(H(60));if(typeof r.dangerouslySetInnerHTML!="object"||!("__html"in r.dangerouslySetInnerHTML))throw Error(H(61))}if(r.style!=null&&typeof r.style!="object")throw Error(H(62))}}function Bg(e,r){if(e.indexOf("-")===-1)return typeof r.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Hg=null;function x1(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Vg=null,os=null,ss=null;function ok(e){if(e=Xl(e)){if(typeof Vg!="function")throw Error(H(280));var r=e.stateNode;r&&(r=oh(r),Vg(e.stateNode,e.type,r))}}function jA(e){os?ss?ss.push(e):ss=[e]:os=e}function YA(){if(os){var e=os,r=ss;if(ss=os=null,ok(e),r)for(e=0;e>>=0,e===0?32:31-(gpe(e)/$pe|0)|0}var _f=64,Of=4194304;function Cu(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Ud(e,r){var t=e.pendingLanes;if(t===0)return 0;var n=0,a=e.suspendedLanes,i=e.pingedLanes,s=t&268435455;if(s!==0){var u=s&~a;u!==0?n=Cu(u):(i&=s,i!==0&&(n=Cu(i)))}else s=t&~a,s!==0?n=Cu(s):i!==0&&(n=Cu(i));if(n===0)return 0;if(r!==0&&r!==n&&!(r&a)&&(a=n&-n,i=r&-r,a>=i||a===16&&(i&4194240)!==0))return r;if(n&4&&(n|=t&16),r=e.entangledLanes,r!==0)for(e=e.entanglements,r&=n;0t;t++)r.push(e);return r}function Ql(e,r,t){e.pendingLanes|=r,r!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,r=31-_n(r),e[r]=t}function Ope(e,r){var t=e.pendingLanes&~r;e.pendingLanes=r,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=r,e.mutableReadLanes&=r,e.entangledLanes&=r,r=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0=Vu),pk=String.fromCharCode(32),yk=!1;function ox(e,r){switch(e){case"keyup":return Qpe.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function sx(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Vo=!1;function Xpe(e,r){switch(e){case"compositionend":return sx(r);case"keypress":return r.which!==32?null:(yk=!0,pk);case"textInput":return e=r.data,e===pk&&yk?null:e;default:return null}}function eye(e,r){if(Vo)return e==="compositionend"||!W1&&ox(e,r)?(e=ax(),td=j1=ti=null,Vo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:t,offset:r-e};e=n}e:{for(;t;){if(t.nextSibling){t=t.nextSibling;break e}t=t.parentNode}t=void 0}t=wk(t)}}function fx(e,r){return e&&r?e===r?!0:e&&e.nodeType===3?!1:r&&r.nodeType===3?fx(e,r.parentNode):"contains"in e?e.contains(r):e.compareDocumentPosition?!!(e.compareDocumentPosition(r)&16):!1:!1}function dx(){for(var e=window,r=Ld();r instanceof e.HTMLIFrameElement;){try{var t=typeof r.contentWindow.location.href=="string"}catch{t=!1}if(t)e=r.contentWindow;else break;r=Ld(e.document)}return r}function z1(e){var r=e&&e.nodeName&&e.nodeName.toLowerCase();return r&&(r==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||r==="textarea"||e.contentEditable==="true")}function lye(e){var r=dx(),t=e.focusedElem,n=e.selectionRange;if(r!==t&&t&&t.ownerDocument&&fx(t.ownerDocument.documentElement,t)){if(n!==null&&z1(t)){if(r=n.start,e=n.end,e===void 0&&(e=r),"selectionStart"in t)t.selectionStart=r,t.selectionEnd=Math.min(e,t.value.length);else if(e=(r=t.ownerDocument||document)&&r.defaultView||window,e.getSelection){e=e.getSelection();var a=t.textContent.length,i=Math.min(n.start,a);n=n.end===void 0?i:Math.min(n.end,a),!e.extend&&i>n&&(a=n,n=i,i=a),a=Sk(t,i);var s=Sk(t,n);a&&s&&(e.rangeCount!==1||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(r=r.createRange(),r.setStart(a.node,a.offset),e.removeAllRanges(),i>n?(e.addRange(r),e.extend(s.node,s.offset)):(r.setEnd(s.node,s.offset),e.addRange(r)))}}for(r=[],e=t;e=e.parentNode;)e.nodeType===1&&r.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof t.focus=="function"&&t.focus(),t=0;t=document.documentMode,Go=null,Jg=null,Ku=null,Xg=!1;function _k(e,r,t){var n=t.window===t?t.document:t.nodeType===9?t:t.ownerDocument;Xg||Go==null||Go!==Ld(n)||(n=Go,"selectionStart"in n&&z1(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Ku&&dl(Ku,n)||(Ku=n,n=Bd(Jg,"onSelect"),0qo||(e.current=i0[qo],i0[qo]=null,qo--)}function rr(e,r){qo++,i0[qo]=e.current,e.current=r}var Si={},et=Ii(Si),Tt=Ii(!1),Ji=Si;function _s(e,r){var t=e.type.contextTypes;if(!t)return Si;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===r)return n.__reactInternalMemoizedMaskedChildContext;var a={},i;for(i in t)a[i]=r[i];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=r,e.__reactInternalMemoizedMaskedChildContext=a),a}function kt(e){return e=e.childContextTypes,e!=null}function Vd(){ir(Tt),ir(et)}function Mk(e,r,t){if(et.current!==Si)throw Error(H(168));rr(et,r),rr(Tt,t)}function Sx(e,r,t){var n=e.stateNode;if(r=r.childContextTypes,typeof n.getChildContext!="function")return t;n=n.getChildContext();for(var a in n)if(!(a in r))throw Error(H(108,ape(e)||"Unknown",a));return pr({},t,n)}function Gd(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Si,Ji=et.current,rr(et,e),rr(Tt,Tt.current),!0}function Pk(e,r,t){var n=e.stateNode;if(!n)throw Error(H(169));t?(e=Sx(e,r,Ji),n.__reactInternalMemoizedMergedChildContext=e,ir(Tt),ir(et),rr(et,e)):ir(Tt),rr(Tt,t)}var da=null,sh=!1,ym=!1;function _x(e){da===null?da=[e]:da.push(e)}function Sye(e){sh=!0,_x(e)}function bi(){if(!ym&&da!==null){ym=!0;var e=0,r=Ve;try{var t=da;for(Ve=1;e>=s,a-=s,pa=1<<32-_n(r)+a|t<C?(Q=L,L=null):Q=L.sibling;var J=m(E,L,O[C],M);if(J===null){L===null&&(L=Q);break}e&&L&&J.alternate===null&&r(E,L),w=i(J,w,C),U===null?Y=J:U.sibling=J,U=J,L=Q}if(C===O.length)return t(E,L),lr&&ji(E,C),Y;if(L===null){for(;CC?(Q=L,L=null):Q=L.sibling;var le=m(E,L,J.value,M);if(le===null){L===null&&(L=Q);break}e&&L&&le.alternate===null&&r(E,L),w=i(le,w,C),U===null?Y=le:U.sibling=le,U=le,L=Q}if(J.done)return t(E,L),lr&&ji(E,C),Y;if(L===null){for(;!J.done;C++,J=O.next())J=y(E,J.value,M),J!==null&&(w=i(J,w,C),U===null?Y=J:U.sibling=J,U=J);return lr&&ji(E,C),Y}for(L=n(E,L);!J.done;C++,J=O.next())J=_(L,E,C,J.value,M),J!==null&&(e&&J.alternate!==null&&L.delete(J.key===null?C:J.key),w=i(J,w,C),U===null?Y=J:U.sibling=J,U=J);return e&&L.forEach(function(be){return r(E,be)}),lr&&ji(E,C),Y}function N(E,w,O,M){if(typeof O=="object"&&O!==null&&O.type===Ho&&O.key===null&&(O=O.props.children),typeof O=="object"&&O!==null){switch(O.$$typeof){case $f:e:{for(var Y=O.key,U=w;U!==null;){if(U.key===Y){if(Y=O.type,Y===Ho){if(U.tag===7){t(E,U.sibling),w=a(U,O.props.children),w.return=E,E=w;break e}}else if(U.elementType===Y||typeof Y=="object"&&Y!==null&&Y.$$typeof===qa&&Ak(Y)===U.type){t(E,U.sibling),w=a(U,O.props),w.ref=_u(E,U,O),w.return=E,E=w;break e}t(E,U);break}else r(E,U);U=U.sibling}O.type===Ho?(w=Gi(O.props.children,E.mode,M,O.key),w.return=E,E=w):(M=cd(O.type,O.key,O.props,null,E.mode,M),M.ref=_u(E,w,O),M.return=E,E=M)}return s(E);case Bo:e:{for(U=O.key;w!==null;){if(w.key===U)if(w.tag===4&&w.stateNode.containerInfo===O.containerInfo&&w.stateNode.implementation===O.implementation){t(E,w.sibling),w=a(w,O.children||[]),w.return=E,E=w;break e}else{t(E,w);break}else r(E,w);w=w.sibling}w=Em(O,E.mode,M),w.return=E,E=w}return s(E);case qa:return U=O._init,N(E,w,U(O._payload),M)}if(xu(O))return k(E,w,O,M);if(mu(O))return b(E,w,O,M);Pf(E,O)}return typeof O=="string"&&O!==""||typeof O=="number"?(O=""+O,w!==null&&w.tag===6?(t(E,w.sibling),w=a(w,O),w.return=E,E=w):(t(E,w),w=Om(O,E.mode,M),w.return=E,E=w),s(E)):t(E,w)}return N}var Es=kx(!0),Ix=kx(!1),qd=Ii(null),Qd=null,Xo=null,G1=null;function K1(){G1=Xo=Qd=null}function Z1(e){var r=qd.current;ir(qd),e._currentValue=r}function u0(e,r,t){for(;e!==null;){var n=e.alternate;if((e.childLanes&r)!==r?(e.childLanes|=r,n!==null&&(n.childLanes|=r)):n!==null&&(n.childLanes&r)!==r&&(n.childLanes|=r),e===t)break;e=e.return}}function ls(e,r){Qd=e,G1=Xo=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&r&&(Et=!0),e.firstContext=null)}function on(e){var r=e._currentValue;if(G1!==e)if(e={context:e,memoizedValue:r,next:null},Xo===null){if(Qd===null)throw Error(H(308));Xo=e,Qd.dependencies={lanes:0,firstContext:e}}else Xo=Xo.next=e;return r}var Wi=null;function q1(e){Wi===null?Wi=[e]:Wi.push(e)}function bx(e,r,t,n){var a=r.interleaved;return a===null?(t.next=t,q1(r)):(t.next=a.next,a.next=t),r.interleaved=t,Ia(e,n)}function Ia(e,r){e.lanes|=r;var t=e.alternate;for(t!==null&&(t.lanes|=r),t=e,e=e.return;e!==null;)e.childLanes|=r,t=e.alternate,t!==null&&(t.childLanes|=r),t=e,e=e.return;return t.tag===3?t.stateNode:null}var Qa=!1;function Q1(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Mx(e,r){e=e.updateQueue,r.updateQueue===e&&(r.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function $a(e,r){return{eventTime:e,lane:r,tag:0,payload:null,callback:null,next:null}}function vi(e,r,t){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,je&2){var a=n.pending;return a===null?r.next=r:(r.next=a.next,a.next=r),n.pending=r,Ia(e,t)}return a=n.interleaved,a===null?(r.next=r,q1(n)):(r.next=a.next,a.next=r),n.interleaved=r,Ia(e,t)}function ad(e,r,t){if(r=r.updateQueue,r!==null&&(r=r.shared,(t&4194240)!==0)){var n=r.lanes;n&=e.pendingLanes,t|=n,r.lanes=t,N1(e,t)}}function xk(e,r){var t=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,t===n)){var a=null,i=null;if(t=t.firstBaseUpdate,t!==null){do{var s={eventTime:t.eventTime,lane:t.lane,tag:t.tag,payload:t.payload,callback:t.callback,next:null};i===null?a=i=s:i=i.next=s,t=t.next}while(t!==null);i===null?a=i=r:i=i.next=r}else a=i=r;t={baseState:n.baseState,firstBaseUpdate:a,lastBaseUpdate:i,shared:n.shared,effects:n.effects},e.updateQueue=t;return}e=t.lastBaseUpdate,e===null?t.firstBaseUpdate=r:e.next=r,t.lastBaseUpdate=r}function Jd(e,r,t,n){var a=e.updateQueue;Qa=!1;var i=a.firstBaseUpdate,s=a.lastBaseUpdate,u=a.shared.pending;if(u!==null){a.shared.pending=null;var c=u,f=c.next;c.next=null,s===null?i=f:s.next=f,s=c;var v=e.alternate;v!==null&&(v=v.updateQueue,u=v.lastBaseUpdate,u!==s&&(u===null?v.firstBaseUpdate=f:u.next=f,v.lastBaseUpdate=c))}if(i!==null){var y=a.baseState;s=0,v=f=c=null,u=i;do{var m=u.lane,_=u.eventTime;if((n&m)===m){v!==null&&(v=v.next={eventTime:_,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var k=e,b=u;switch(m=r,_=t,b.tag){case 1:if(k=b.payload,typeof k=="function"){y=k.call(_,y,m);break e}y=k;break e;case 3:k.flags=k.flags&-65537|128;case 0:if(k=b.payload,m=typeof k=="function"?k.call(_,y,m):k,m==null)break e;y=pr({},y,m);break e;case 2:Qa=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,m=a.effects,m===null?a.effects=[u]:m.push(u))}else _={eventTime:_,lane:m,tag:u.tag,payload:u.payload,callback:u.callback,next:null},v===null?(f=v=_,c=y):v=v.next=_,s|=m;if(u=u.next,u===null){if(u=a.shared.pending,u===null)break;m=u,u=m.next,m.next=null,a.lastBaseUpdate=m,a.shared.pending=null}}while(1);if(v===null&&(c=y),a.baseState=c,a.firstBaseUpdate=f,a.lastBaseUpdate=v,r=a.shared.interleaved,r!==null){a=r;do s|=a.lane,a=a.next;while(a!==r)}else i===null&&(a.shared.lanes=0);ro|=s,e.lanes=s,e.memoizedState=y}}function Ck(e,r,t){if(e=r.effects,r.effects=null,e!==null)for(r=0;rt?t:4,e(!0);var n=gm.transition;gm.transition={};try{e(!1),r()}finally{Ve=t,gm.transition=n}}function Vx(){return sn().memoizedState}function Tye(e,r,t){var n=pi(e);if(t={lane:n,action:t,hasEagerState:!1,eagerState:null,next:null},Gx(e))Kx(r,t);else if(t=bx(e,r,t,n),t!==null){var a=ut();On(t,e,n,a),Zx(t,r,n)}}function kye(e,r,t){var n=pi(e),a={lane:n,action:t,hasEagerState:!1,eagerState:null,next:null};if(Gx(e))Kx(r,a);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=r.lastRenderedReducer,i!==null))try{var s=r.lastRenderedState,u=i(s,t);if(a.hasEagerState=!0,a.eagerState=u,kn(u,s)){var c=r.interleaved;c===null?(a.next=a,q1(r)):(a.next=c.next,c.next=a),r.interleaved=a;return}}catch{}finally{}t=bx(e,r,a,n),t!==null&&(a=ut(),On(t,e,n,a),Zx(t,r,n))}}function Gx(e){var r=e.alternate;return e===hr||r!==null&&r===hr}function Kx(e,r){Zu=ev=!0;var t=e.pending;t===null?r.next=r:(r.next=t.next,t.next=r),e.pending=r}function Zx(e,r,t){if(t&4194240){var n=r.lanes;n&=e.pendingLanes,t|=n,r.lanes=t,N1(e,t)}}var rv={readContext:on,useCallback:qr,useContext:qr,useEffect:qr,useImperativeHandle:qr,useInsertionEffect:qr,useLayoutEffect:qr,useMemo:qr,useReducer:qr,useRef:qr,useState:qr,useDebugValue:qr,useDeferredValue:qr,useTransition:qr,useMutableSource:qr,useSyncExternalStore:qr,useId:qr,unstable_isNewReconciler:!1},Iye={readContext:on,useCallback:function(e,r){return jn().memoizedState=[e,r===void 0?null:r],e},useContext:on,useEffect:Lk,useImperativeHandle:function(e,r,t){return t=t!=null?t.concat([e]):null,od(4194308,4,Ux.bind(null,r,e),t)},useLayoutEffect:function(e,r){return od(4194308,4,e,r)},useInsertionEffect:function(e,r){return od(4,2,e,r)},useMemo:function(e,r){var t=jn();return r=r===void 0?null:r,e=e(),t.memoizedState=[e,r],e},useReducer:function(e,r,t){var n=jn();return r=t!==void 0?t(r):r,n.memoizedState=n.baseState=r,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:r},n.queue=e,e=e.dispatch=Tye.bind(null,hr,e),[n.memoizedState,e]},useRef:function(e){var r=jn();return e={current:e},r.memoizedState=e},useState:Nk,useDebugValue:iw,useDeferredValue:function(e){return jn().memoizedState=e},useTransition:function(){var e=Nk(!1),r=e[0];return e=Eye.bind(null,e[1]),jn().memoizedState=e,[r,e]},useMutableSource:function(){},useSyncExternalStore:function(e,r,t){var n=hr,a=jn();if(lr){if(t===void 0)throw Error(H(407));t=t()}else{if(t=r(),Cr===null)throw Error(H(349));eo&30||Ax(n,r,t)}a.memoizedState=t;var i={value:t,getSnapshot:r};return a.queue=i,Lk(Cx.bind(null,n,i,e),[e]),n.flags|=2048,wl(9,xx.bind(null,n,i,t,r),void 0,null),t},useId:function(){var e=jn(),r=Cr.identifierPrefix;if(lr){var t=ya,n=pa;t=(n&~(1<<32-_n(n)-1)).toString(32)+t,r=":"+r+"R"+t,t=gl++,0<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=s.createElement(t,{is:n.is}):(e=s.createElement(t),t==="select"&&(s=e,n.multiple?s.multiple=!0:n.size&&(s.size=n.size))):e=s.createElementNS(e,t),e[Un]=r,e[pl]=n,i2(e,r,!1,!1),r.stateNode=e;e:{switch(s=Bg(t,n),t){case"dialog":ar("cancel",e),ar("close",e),a=n;break;case"iframe":case"object":case"embed":ar("load",e),a=n;break;case"video":case"audio":for(a=0;aIs&&(r.flags|=128,n=!0,Ou(i,!1),r.lanes=4194304)}else{if(!n)if(e=Xd(s),e!==null){if(r.flags|=128,n=!0,t=e.updateQueue,t!==null&&(r.updateQueue=t,r.flags|=4),Ou(i,!0),i.tail===null&&i.tailMode==="hidden"&&!s.alternate&&!lr)return Qr(r),null}else 2*Or()-i.renderingStartTime>Is&&t!==1073741824&&(r.flags|=128,n=!0,Ou(i,!1),r.lanes=4194304);i.isBackwards?(s.sibling=r.child,r.child=s):(t=i.last,t!==null?t.sibling=s:r.child=s,i.last=s)}return i.tail!==null?(r=i.tail,i.rendering=r,i.tail=r.sibling,i.renderingStartTime=Or(),r.sibling=null,t=vr.current,rr(vr,n?t&1|2:t&1),r):(Qr(r),null);case 22:case 23:return fw(),n=r.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(r.flags|=8192),n&&r.mode&1?Ct&1073741824&&(Qr(r),r.subtreeFlags&6&&(r.flags|=8192)):Qr(r),null;case 24:return null;case 25:return null}throw Error(H(156,r.tag))}function Cye(e,r){switch(H1(r),r.tag){case 1:return kt(r.type)&&Vd(),e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 3:return Ts(),ir(Tt),ir(et),ew(),e=r.flags,e&65536&&!(e&128)?(r.flags=e&-65537|128,r):null;case 5:return X1(r),null;case 13:if(ir(vr),e=r.memoizedState,e!==null&&e.dehydrated!==null){if(r.alternate===null)throw Error(H(340));Os()}return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 19:return ir(vr),null;case 4:return Ts(),null;case 10:return Z1(r.type._context),null;case 22:case 23:return fw(),null;case 24:return null;default:return null}}var Rf=!1,Jr=!1,Nye=typeof WeakSet=="function"?WeakSet:Set,se=null;function es(e,r){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(n){gr(e,r,n)}else t.current=null}function m0(e,r,t){try{t()}catch(n){gr(e,r,n)}}var Kk=!1;function Lye(e,r){if(e0=Wd,e=dx(),z1(e)){if("selectionStart"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{t=(t=e.ownerDocument)&&t.defaultView||window;var n=t.getSelection&&t.getSelection();if(n&&n.rangeCount!==0){t=n.anchorNode;var a=n.anchorOffset,i=n.focusNode;n=n.focusOffset;try{t.nodeType,i.nodeType}catch{t=null;break e}var s=0,u=-1,c=-1,f=0,v=0,y=e,m=null;r:for(;;){for(var _;y!==t||a!==0&&y.nodeType!==3||(u=s+a),y!==i||n!==0&&y.nodeType!==3||(c=s+n),y.nodeType===3&&(s+=y.nodeValue.length),(_=y.firstChild)!==null;)m=y,y=_;for(;;){if(y===e)break r;if(m===t&&++f===a&&(u=s),m===i&&++v===n&&(c=s),(_=y.nextSibling)!==null)break;y=m,m=y.parentNode}y=_}t=u===-1||c===-1?null:{start:u,end:c}}else t=null}t=t||{start:0,end:0}}else t=null;for(r0={focusedElem:e,selectionRange:t},Wd=!1,se=r;se!==null;)if(r=se,e=r.child,(r.subtreeFlags&1028)!==0&&e!==null)e.return=r,se=e;else for(;se!==null;){r=se;try{var k=r.alternate;if(r.flags&1024)switch(r.tag){case 0:case 11:case 15:break;case 1:if(k!==null){var b=k.memoizedProps,N=k.memoizedState,E=r.stateNode,w=E.getSnapshotBeforeUpdate(r.elementType===r.type?b:yn(r.type,b),N);E.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var O=r.stateNode.containerInfo;O.nodeType===1?O.textContent="":O.nodeType===9&&O.documentElement&&O.removeChild(O.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(H(163))}}catch(M){gr(r,r.return,M)}if(e=r.sibling,e!==null){e.return=r.return,se=e;break}se=r.return}return k=Kk,Kk=!1,k}function qu(e,r,t){var n=r.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var a=n=n.next;do{if((a.tag&e)===e){var i=a.destroy;a.destroy=void 0,i!==void 0&&m0(r,t,i)}a=a.next}while(a!==n)}}function ch(e,r){if(r=r.updateQueue,r=r!==null?r.lastEffect:null,r!==null){var t=r=r.next;do{if((t.tag&e)===e){var n=t.create;t.destroy=n()}t=t.next}while(t!==r)}}function g0(e){var r=e.ref;if(r!==null){var t=e.stateNode;switch(e.tag){case 5:e=t;break;default:e=t}typeof r=="function"?r(e):r.current=e}}function u2(e){var r=e.alternate;r!==null&&(e.alternate=null,u2(r)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(r=e.stateNode,r!==null&&(delete r[Un],delete r[pl],delete r[a0],delete r[$ye],delete r[wye])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function l2(e){return e.tag===5||e.tag===3||e.tag===4}function Zk(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||l2(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function $0(e,r,t){var n=e.tag;if(n===5||n===6)e=e.stateNode,r?t.nodeType===8?t.parentNode.insertBefore(e,r):t.insertBefore(e,r):(t.nodeType===8?(r=t.parentNode,r.insertBefore(e,t)):(r=t,r.appendChild(e)),t=t._reactRootContainer,t!=null||r.onclick!==null||(r.onclick=Hd));else if(n!==4&&(e=e.child,e!==null))for($0(e,r,t),e=e.sibling;e!==null;)$0(e,r,t),e=e.sibling}function w0(e,r,t){var n=e.tag;if(n===5||n===6)e=e.stateNode,r?t.insertBefore(e,r):t.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(w0(e,r,t),e=e.sibling;e!==null;)w0(e,r,t),e=e.sibling}var Yr=null,mn=!1;function Ka(e,r,t){for(t=t.child;t!==null;)c2(e,r,t),t=t.sibling}function c2(e,r,t){if(Hn&&typeof Hn.onCommitFiberUnmount=="function")try{Hn.onCommitFiberUnmount(th,t)}catch{}switch(t.tag){case 5:Jr||es(t,r);case 6:var n=Yr,a=mn;Yr=null,Ka(e,r,t),Yr=n,mn=a,Yr!==null&&(mn?(e=Yr,t=t.stateNode,e.nodeType===8?e.parentNode.removeChild(t):e.removeChild(t)):Yr.removeChild(t.stateNode));break;case 18:Yr!==null&&(mn?(e=Yr,t=t.stateNode,e.nodeType===8?pm(e.parentNode,t):e.nodeType===1&&pm(e,t),cl(e)):pm(Yr,t.stateNode));break;case 4:n=Yr,a=mn,Yr=t.stateNode.containerInfo,mn=!0,Ka(e,r,t),Yr=n,mn=a;break;case 0:case 11:case 14:case 15:if(!Jr&&(n=t.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){a=n=n.next;do{var i=a,s=i.destroy;i=i.tag,s!==void 0&&(i&2||i&4)&&m0(t,r,s),a=a.next}while(a!==n)}Ka(e,r,t);break;case 1:if(!Jr&&(es(t,r),n=t.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=t.memoizedProps,n.state=t.memoizedState,n.componentWillUnmount()}catch(u){gr(t,r,u)}Ka(e,r,t);break;case 21:Ka(e,r,t);break;case 22:t.mode&1?(Jr=(n=Jr)||t.memoizedState!==null,Ka(e,r,t),Jr=n):Ka(e,r,t);break;default:Ka(e,r,t)}}function qk(e){var r=e.updateQueue;if(r!==null){e.updateQueue=null;var t=e.stateNode;t===null&&(t=e.stateNode=new Nye),r.forEach(function(n){var a=Vye.bind(null,e,n);t.has(n)||(t.add(n),n.then(a,a))})}}function pn(e,r){var t=r.deletions;if(t!==null)for(var n=0;na&&(a=s),n&=~i}if(n=a,n=Or()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*jye(n/1960))-n,10e?16:e,ni===null)var n=!1;else{if(e=ni,ni=null,av=0,je&6)throw Error(H(331));var a=je;for(je|=4,se=e.current;se!==null;){var i=se,s=i.child;if(se.flags&16){var u=i.deletions;if(u!==null){for(var c=0;cOr()-lw?Vi(e,0):uw|=t),It(e,r)}function g2(e,r){r===0&&(e.mode&1?(r=Of,Of<<=1,!(Of&130023424)&&(Of=4194304)):r=1);var t=ut();e=Ia(e,r),e!==null&&(Ql(e,r,t),It(e,t))}function Hye(e){var r=e.memoizedState,t=0;r!==null&&(t=r.retryLane),g2(e,t)}function Vye(e,r){var t=0;switch(e.tag){case 13:var n=e.stateNode,a=e.memoizedState;a!==null&&(t=a.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(H(314))}n!==null&&n.delete(r),g2(e,t)}var $2;$2=function(e,r,t){if(e!==null)if(e.memoizedProps!==r.pendingProps||Tt.current)Et=!0;else{if(!(e.lanes&t)&&!(r.flags&128))return Et=!1,Aye(e,r,t);Et=!!(e.flags&131072)}else Et=!1,lr&&r.flags&1048576&&Ox(r,Zd,r.index);switch(r.lanes=0,r.tag){case 2:var n=r.type;sd(e,r),e=r.pendingProps;var a=_s(r,et.current);ls(r,t),a=tw(null,r,n,e,a,t);var i=nw();return r.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(r.tag=1,r.memoizedState=null,r.updateQueue=null,kt(n)?(i=!0,Gd(r)):i=!1,r.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,Q1(r),a.updater=lh,r.stateNode=a,a._reactInternals=r,c0(r,n,e,t),r=v0(null,r,n,!0,i,t)):(r.tag=0,lr&&i&&B1(r),ot(null,r,a,t),r=r.child),r;case 16:n=r.elementType;e:{switch(sd(e,r),e=r.pendingProps,a=n._init,n=a(n._payload),r.type=n,a=r.tag=Kye(n),e=yn(n,e),a){case 0:r=d0(null,r,n,e,t);break e;case 1:r=Hk(null,r,n,e,t);break e;case 11:r=zk(null,r,n,e,t);break e;case 14:r=Bk(null,r,n,yn(n.type,e),t);break e}throw Error(H(306,n,""))}return r;case 0:return n=r.type,a=r.pendingProps,a=r.elementType===n?a:yn(n,a),d0(e,r,n,a,t);case 1:return n=r.type,a=r.pendingProps,a=r.elementType===n?a:yn(n,a),Hk(e,r,n,a,t);case 3:e:{if(t2(r),e===null)throw Error(H(387));n=r.pendingProps,i=r.memoizedState,a=i.element,Mx(e,r),Jd(r,n,null,t);var s=r.memoizedState;if(n=s.element,i.isDehydrated)if(i={element:n,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},r.updateQueue.baseState=i,r.memoizedState=i,r.flags&256){a=ks(Error(H(423)),r),r=Vk(e,r,n,t,a);break e}else if(n!==a){a=ks(Error(H(424)),r),r=Vk(e,r,n,t,a);break e}else for(Lt=di(r.stateNode.containerInfo.firstChild),Ft=r,lr=!0,$n=null,t=Ix(r,null,n,t),r.child=t;t;)t.flags=t.flags&-3|4096,t=t.sibling;else{if(Os(),n===a){r=ba(e,r,t);break e}ot(e,r,n,t)}r=r.child}return r;case 5:return Px(r),e===null&&s0(r),n=r.type,a=r.pendingProps,i=e!==null?e.memoizedProps:null,s=a.children,t0(n,a)?s=null:i!==null&&t0(n,i)&&(r.flags|=32),r2(e,r),ot(e,r,s,t),r.child;case 6:return e===null&&s0(r),null;case 13:return n2(e,r,t);case 4:return J1(r,r.stateNode.containerInfo),n=r.pendingProps,e===null?r.child=Es(r,null,n,t):ot(e,r,n,t),r.child;case 11:return n=r.type,a=r.pendingProps,a=r.elementType===n?a:yn(n,a),zk(e,r,n,a,t);case 7:return ot(e,r,r.pendingProps,t),r.child;case 8:return ot(e,r,r.pendingProps.children,t),r.child;case 12:return ot(e,r,r.pendingProps.children,t),r.child;case 10:e:{if(n=r.type._context,a=r.pendingProps,i=r.memoizedProps,s=a.value,rr(qd,n._currentValue),n._currentValue=s,i!==null)if(kn(i.value,s)){if(i.children===a.children&&!Tt.current){r=ba(e,r,t);break e}}else for(i=r.child,i!==null&&(i.return=r);i!==null;){var u=i.dependencies;if(u!==null){s=i.child;for(var c=u.firstContext;c!==null;){if(c.context===n){if(i.tag===1){c=$a(-1,t&-t),c.tag=2;var f=i.updateQueue;if(f!==null){f=f.shared;var v=f.pending;v===null?c.next=c:(c.next=v.next,v.next=c),f.pending=c}}i.lanes|=t,c=i.alternate,c!==null&&(c.lanes|=t),u0(i.return,t,r),u.lanes|=t;break}c=c.next}}else if(i.tag===10)s=i.type===r.type?null:i.child;else if(i.tag===18){if(s=i.return,s===null)throw Error(H(341));s.lanes|=t,u=s.alternate,u!==null&&(u.lanes|=t),u0(s,t,r),s=i.sibling}else s=i.child;if(s!==null)s.return=i;else for(s=i;s!==null;){if(s===r){s=null;break}if(i=s.sibling,i!==null){i.return=s.return,s=i;break}s=s.return}i=s}ot(e,r,a.children,t),r=r.child}return r;case 9:return a=r.type,n=r.pendingProps.children,ls(r,t),a=on(a),n=n(a),r.flags|=1,ot(e,r,n,t),r.child;case 14:return n=r.type,a=yn(n,r.pendingProps),a=yn(n.type,a),Bk(e,r,n,a,t);case 15:return Xx(e,r,r.type,r.pendingProps,t);case 17:return n=r.type,a=r.pendingProps,a=r.elementType===n?a:yn(n,a),sd(e,r),r.tag=1,kt(n)?(e=!0,Gd(r)):e=!1,ls(r,t),qx(r,n,a),c0(r,n,a,t),v0(null,r,n,!0,e,t);case 19:return a2(e,r,t);case 22:return e2(e,r,t)}throw Error(H(156,r.tag))};function w2(e,r){return GA(e,r)}function Gye(e,r,t,n){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=r,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function nn(e,r,t,n){return new Gye(e,r,t,n)}function vw(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Kye(e){if(typeof e=="function")return vw(e)?1:0;if(e!=null){if(e=e.$$typeof,e===R1)return 11;if(e===A1)return 14}return 2}function yi(e,r){var t=e.alternate;return t===null?(t=nn(e.tag,r,e.key,e.mode),t.elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=r,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=e.flags&14680064,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,r=e.dependencies,t.dependencies=r===null?null:{lanes:r.lanes,firstContext:r.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function cd(e,r,t,n,a,i){var s=2;if(n=e,typeof e=="function")vw(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Ho:return Gi(t.children,a,i,r);case D1:s=8,a|=8;break;case xg:return e=nn(12,t,r,a|2),e.elementType=xg,e.lanes=i,e;case Cg:return e=nn(13,t,r,a),e.elementType=Cg,e.lanes=i,e;case Ng:return e=nn(19,t,r,a),e.elementType=Ng,e.lanes=i,e;case PA:return dh(t,a,i,r);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case bA:s=10;break e;case MA:s=9;break e;case R1:s=11;break e;case A1:s=14;break e;case qa:s=16,n=null;break e}throw Error(H(130,e==null?e:typeof e,""))}return r=nn(s,t,r,a),r.elementType=e,r.type=n,r.lanes=i,r}function Gi(e,r,t,n){return e=nn(7,e,n,r),e.lanes=t,e}function dh(e,r,t,n){return e=nn(22,e,n,r),e.elementType=PA,e.lanes=t,e.stateNode={isHidden:!1},e}function Om(e,r,t){return e=nn(6,e,null,r),e.lanes=t,e}function Em(e,r,t){return r=nn(4,e.children!==null?e.children:[],e.key,r),r.lanes=t,r.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},r}function Zye(e,r,t,n,a){this.tag=r,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=am(0),this.expirationTimes=am(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=am(0),this.identifierPrefix=n,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function hw(e,r,t,n,a,i,s,u,c){return e=new Zye(e,r,t,u,c),r===1?(r=1,i===!0&&(r|=8)):r=0,i=nn(3,null,null,r),e.current=i,i.stateNode=e,i.memoizedState={element:n,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},Q1(i),e}function qye(e,r,t){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(E2)}catch(e){console.error(e)}}E2(),EA.exports=zt;var gw=EA.exports;const rme=no(gw),O_e=H0({__proto__:null,default:rme},[gw]);var aI=gw;zo.createRoot=aI.createRoot,zo.hydrateRoot=aI.hydrateRoot;function bs(){return bs=Object.assign?Object.assign.bind():function(e){for(var r=1;rEnable JavaScript to run this app."}})},oI=function(r){var t,n=r.loaderData,a=r.htmlPageOpts,i=r.manifest,s=(i==null||(t=i.assets)===null||t===void 0?void 0:t["umi.css"])||"";return q.createElement("script",{suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:"window.__UMI_LOADER_DATA__ = ".concat(JSON.stringify(n||{}),"; window.__UMI_METADATA_LOADER_DATA__ = ").concat(JSON.stringify(a||{}),"; window.__UMI_BUILD_ClIENT_CSS__ = '").concat(s,"'")}})};function k2(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(typeof e=="string")return T2(e)?St({src:e},r):{content:e};if(Qi(e)==="object")return St(St({},e),r);throw new Error("Invalid script type: ".concat(Qi(e)))}function ime(e){return T2(e)?{type:"link",href:e}:{type:"style",content:e}}var sI=function(r){var t,n,a,i,s,u,c=r.htmlPageOpts;return q.createElement(q.Fragment,null,(c==null?void 0:c.title)&&q.createElement("title",null,c.title),c==null||(t=c.favicons)===null||t===void 0?void 0:t.map(function(f,v){return q.createElement("link",{key:v,rel:"shortcut icon",href:f})}),(c==null?void 0:c.description)&&q.createElement("meta",{name:"description",content:c.description}),(c==null||(n=c.keywords)===null||n===void 0?void 0:n.length)&&q.createElement("meta",{name:"keywords",content:c.keywords.join(",")}),c==null||(a=c.metas)===null||a===void 0?void 0:a.map(function(f){return q.createElement("meta",{key:f.name,name:f.name,property:f.property,content:f.content})}),c==null||(i=c.links)===null||i===void 0?void 0:i.map(function(f,v){return q.createElement("link",bs({key:v},f))}),c==null||(s=c.styles)===null||s===void 0?void 0:s.map(function(f,v){var y=ime(f),m=y.type,_=y.href,k=y.content;if(m==="link")return q.createElement("link",{key:v,rel:"stylesheet",href:_});if(m==="style")return q.createElement("style",{key:v},k)}),c==null||(u=c.headScripts)===null||u===void 0?void 0:u.map(function(f,v){var y=k2(f),m=y.content,_=rh(y,tme);return q.createElement("script",bs({dangerouslySetInnerHTML:{__html:m},key:v},_))}))};function ome(e){var r,t=e.children,n=e.loaderData,a=e.manifest,i=e.htmlPageOpts,s=e.__INTERNAL_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,u=e.mountElementId;if(s!=null&&s.pureHtml)return q.createElement("html",null,q.createElement("head",null,q.createElement(sI,{htmlPageOpts:i})),q.createElement("body",null,q.createElement(iI,null),q.createElement("div",{id:u},t),q.createElement(oI,{manifest:a,loaderData:n,htmlPageOpts:i})));if(s!=null&&s.pureApp)return q.createElement(q.Fragment,null,t);var c=typeof window>"u"?a==null?void 0:a.assets["umi.css"]:window.__UMI_BUILD_ClIENT_CSS__;return q.createElement("html",{suppressHydrationWarning:!0,lang:(i==null?void 0:i.lang)||"en"},q.createElement("head",null,q.createElement("meta",{charSet:"utf-8"}),q.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),c&&q.createElement("link",{suppressHydrationWarning:!0,rel:"stylesheet",href:c}),q.createElement(sI,{htmlPageOpts:i})),q.createElement("body",null,q.createElement(iI,null),q.createElement("div",{id:u},t),q.createElement(oI,{manifest:a,loaderData:n,htmlPageOpts:i}),i==null||(r=i.scripts)===null||r===void 0?void 0:r.map(function(f,v){var y=k2(f),m=y.content,_=rh(y,nme);return q.createElement("script",bs({dangerouslySetInnerHTML:{__html:m},key:v},_))})))}var sme=["redirect"];function I2(e){var r=e.routesById,t=e.parentId,n=e.routeComponents,a=e.useStream,i=a===void 0?!0:a;return Object.keys(r).filter(function(s){return r[s].parentId===t}).map(function(s){var u=lme(St(St({route:r[s],routeComponent:n[s],loadingComponent:e.loadingComponent,reactRouter5Compat:e.reactRouter5Compat},e.reactRouter5Compat&&{hasChildren:Object.keys(r).filter(function(f){return r[f].parentId===s}).length>0}),{},{useStream:i})),c=I2({routesById:r,routeComponents:n,parentId:u.id,loadingComponent:e.loadingComponent,reactRouter5Compat:e.reactRouter5Compat,useStream:i});return c.length>0&&(u.children=c,u.routes=c),u})}function ume(e){var r=SA(),t=dhe(e.to,r),n=qhe(),a=ql();if(n!=null&&n.keepQuery){var i=a.search+a.hash;t+=i}var s=St(St({},e),{},{to:t});return q.createElement(Lhe,bs({replace:!0},s))}function lme(e){var r=e.route,t=e.useStream,n=t===void 0?!0:t,a=r.redirect,i=rh(r,sme),s=e.reactRouter5Compat?fme:dme;return St({element:a?q.createElement(ume,{to:a}):q.createElement(_A.Provider,{value:{route:e.route}},q.createElement(s,{loader:q.memo(e.routeComponent),loadingComponent:e.loadingComponent||cme,hasChildren:e.hasChildren,useStream:n}))},i)}function cme(){return q.createElement("div",null)}function fme(e){var r=Ghe(),t=r.route,n=I1(),a=n.history,i=n.clientRoutes,s=SA(),u={params:s,isExact:!0,path:t.path,url:a.location.pathname},c=e.loader,f={location:a.location,match:u,history:a,params:s,route:t,routes:i};return e.useStream?q.createElement(q.Suspense,{fallback:q.createElement(e.loadingComponent,null)},q.createElement(c,f,e.hasChildren&&q.createElement(ZT,null))):q.createElement(c,f,e.hasChildren&&q.createElement(ZT,null))}function dme(e){var r=e.loader;return e.useStream?q.createElement(q.Suspense,{fallback:q.createElement(e.loadingComponent,null)},q.createElement(r,null)):q.createElement(r,null)}var uI=null;function vme(e){var r=e.history,t=q.useState({action:r.action,location:r.location}),n=Rg(t,2),a=n[0],i=n[1];return ye.useLayoutEffect(function(){return r.listen(i)},[r]),ye.useLayoutEffect(function(){function s(u){e.pluginManager.applyPlugins({key:"onRouteChange",type:"event",args:{routes:e.routes,clientRoutes:e.clientRoutes,location:u.location,action:u.action,basename:e.basename,isFirst:!!u.isFirst}})}return s({location:a.location,action:a.action,isFirst:!0}),r.listen(s)},[r,e.routes,e.clientRoutes]),q.createElement(Fhe,{navigator:r,location:a.location,basename:e.basename},e.children)}function hme(){var e=I1(),r=e.clientRoutes;return Che(r)}var pme=["innerProvider","i18nProvider","accessProvider","dataflowProvider","outerProvider","rootContainer"],yme=function(r,t){var n=r.basename||"/",a=I2({routesById:r.routes,routeComponents:r.routeComponents,loadingComponent:r.loadingComponent,reactRouter5Compat:r.reactRouter5Compat,useStream:r.useStream});r.pluginManager.applyPlugins({key:"patchClientRoutes",type:"event",args:{routes:a}});for(var i=q.createElement(vme,{basename:n,pluginManager:r.pluginManager,routes:r.routes,clientRoutes:a,history:r.history},t),s=0,u=pme;s{if(i=$me(i),i in lI)return;lI[i]=!0;const s=i.endsWith(".css"),u=s?'[rel="stylesheet"]':"";if(!!n)for(let v=a.length-1;v>=0;v--){const y=a[v];if(y.href===i&&(!s||y.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${u}`))return;const f=document.createElement("link");if(f.rel=s?"stylesheet":gme,s||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),s)return new Promise((v,y)=>{f.addEventListener("load",v),f.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>r()).catch(i=>{const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=i,window.dispatchEvent(s),!s.defaultPrevented)throw i})};async function wme(){return{routes:{1:{path:"/",id:"1"},2:{path:"/editor/:id",id:"2"},3:{path:"/playground",id:"3"},4:{path:"/playground/:id",id:"4"},5:{path:"/numbered",id:"5"},6:{path:"/numbered/:id",id:"6"},7:{path:"/viewer/:id",id:"7"},8:{path:"/live-score",id:"8"},9:{path:"/admin",title:"STARRY控制台",id:"9"},10:{path:"/test/gauge",title:"GaugeRenderer Test",id:"10"},11:{path:"/test/font",title:"Emmentaler Font Test",id:"11"},12:{path:"/spartito",id:"12"}},routeComponents:{1:q.lazy(()=>Jt(()=>import("./index-da12207d.js"),["assets/index-da12207d.js","assets/index-3fb79805.js","assets/_setToString-397d22bb.js","assets/TextArea-3bdaceca.js","assets/button-909b3565.js","assets/util-b514be53.js","assets/Dropdown-d5fff39b.js","assets/Tags-2166e5ed.js","assets/index-dc40c6e7.js","assets/progress-f968a1fe.js","assets/useDebounce-e1e8dc3b.js","assets/index-81cb47f8.js","assets/index-b284aaac.js","assets/useAsyncFn-4bca5482.js","assets/Table-571fc4c0.js","assets/index-f8b1789b.js","assets/index-37861f16.js","assets/DeleteOutlined-0f1ef15a.js","assets/Table-5199d45f.css","assets/index-5ecf8580.css"])),2:q.lazy(()=>Jt(()=>import("./index-9be53150.js"),["assets/index-9be53150.js","assets/parser-f1e7dbfb.js","assets/_setToString-397d22bb.js","assets/scheduler-a7fa9c3c.js","assets/processCompressedAESFile-0057a8e1.js","assets/index-37861f16.js","assets/index-4514925e.js","assets/index-b284aaac.js","assets/useIntersection-44800be2.js","assets/useAsync-ce2d9ddd.js","assets/useAsyncFn-4bca5482.js","assets/index-affa0ef2.css"])),3:q.lazy(()=>Jt(()=>import("./index-ecbb8828.js"),["assets/index-ecbb8828.js","assets/parser-f1e7dbfb.js","assets/_setToString-397d22bb.js","assets/index.less_used_.module-d14279ff.js","assets/tiny-invariant-023fafff.js","assets/index-1fa256e9.js","assets/index-4514925e.js","assets/index-b284aaac.js","assets/download-e05f9890.js","assets/jszip.min-21813277.js","assets/util-b514be53.js","assets/TextArea-3bdaceca.js","assets/button-909b3565.js","assets/index-3fb79805.js","assets/Dropdown-d5fff39b.js","assets/index-37861f16.js","assets/useAsyncFn-4bca5482.js","assets/index.less_used_-2e0a4089.css","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/ScoreEncoder-96e90be0.js","assets/Tags-2166e5ed.js","assets/index-dc40c6e7.js","assets/progress-f968a1fe.js","assets/useDebounce-e1e8dc3b.js","assets/index-81cb47f8.js","assets/gaugeRendererGL-41abf4c6.js","assets/confirm-34976587.js","assets/index-6dffb190.js","assets/index-c896f3ee.css","assets/index-07fc0d1f.js","assets/index-8cbce62d.css","assets/processCompressedAESFile-0057a8e1.js","assets/useIntersection-44800be2.js","assets/index-11479954.js","assets/index-eec458eb.css","assets/PlaySquareOutlined-f3c772fe.js","assets/DownloadOutlined-f081b8de.js","assets/index-11d8c807.css"])),4:q.lazy(()=>Jt(()=>import("./index-ecbb8828.js"),["assets/index-ecbb8828.js","assets/parser-f1e7dbfb.js","assets/_setToString-397d22bb.js","assets/index.less_used_.module-d14279ff.js","assets/tiny-invariant-023fafff.js","assets/index-1fa256e9.js","assets/index-4514925e.js","assets/index-b284aaac.js","assets/download-e05f9890.js","assets/jszip.min-21813277.js","assets/util-b514be53.js","assets/TextArea-3bdaceca.js","assets/button-909b3565.js","assets/index-3fb79805.js","assets/Dropdown-d5fff39b.js","assets/index-37861f16.js","assets/useAsyncFn-4bca5482.js","assets/index.less_used_-2e0a4089.css","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/ScoreEncoder-96e90be0.js","assets/Tags-2166e5ed.js","assets/index-dc40c6e7.js","assets/progress-f968a1fe.js","assets/useDebounce-e1e8dc3b.js","assets/index-81cb47f8.js","assets/gaugeRendererGL-41abf4c6.js","assets/confirm-34976587.js","assets/index-6dffb190.js","assets/index-c896f3ee.css","assets/index-07fc0d1f.js","assets/index-8cbce62d.css","assets/processCompressedAESFile-0057a8e1.js","assets/useIntersection-44800be2.js","assets/index-11479954.js","assets/index-eec458eb.css","assets/PlaySquareOutlined-f3c772fe.js","assets/DownloadOutlined-f081b8de.js","assets/index-11d8c807.css"])),5:q.lazy(()=>Jt(()=>import("./index-8e188411.js"),["assets/index-8e188411.js","assets/index-3fb79805.js","assets/_setToString-397d22bb.js","assets/TextArea-3bdaceca.js","assets/button-909b3565.js","assets/util-b514be53.js","assets/Dropdown-d5fff39b.js","assets/index.less_used_.module-d14279ff.js","assets/tiny-invariant-023fafff.js","assets/index-1fa256e9.js","assets/parser-f1e7dbfb.js","assets/index-4514925e.js","assets/index-b284aaac.js","assets/download-e05f9890.js","assets/jszip.min-21813277.js","assets/index-37861f16.js","assets/useAsyncFn-4bca5482.js","assets/index.less_used_-2e0a4089.css","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/useAsync-ce2d9ddd.js","assets/PlaySquareOutlined-f3c772fe.js","assets/index-0d11b9f1.css"])),6:q.lazy(()=>Jt(()=>import("./index-8e188411.js"),["assets/index-8e188411.js","assets/index-3fb79805.js","assets/_setToString-397d22bb.js","assets/TextArea-3bdaceca.js","assets/button-909b3565.js","assets/util-b514be53.js","assets/Dropdown-d5fff39b.js","assets/index.less_used_.module-d14279ff.js","assets/tiny-invariant-023fafff.js","assets/index-1fa256e9.js","assets/parser-f1e7dbfb.js","assets/index-4514925e.js","assets/index-b284aaac.js","assets/download-e05f9890.js","assets/jszip.min-21813277.js","assets/index-37861f16.js","assets/useAsyncFn-4bca5482.js","assets/index.less_used_-2e0a4089.css","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/useAsync-ce2d9ddd.js","assets/PlaySquareOutlined-f3c772fe.js","assets/index-0d11b9f1.css"])),7:q.lazy(()=>Jt(()=>import("./index-383c7184.js"),["assets/index-383c7184.js","assets/index-4514925e.js","assets/parser-f1e7dbfb.js","assets/_setToString-397d22bb.js","assets/index-b284aaac.js","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/button-909b3565.js","assets/index-07fc0d1f.js","assets/index-8cbce62d.css","assets/index-1fa256e9.js","assets/download-e05f9890.js","assets/jszip.min-21813277.js","assets/index-11479954.js","assets/index-eec458eb.css","assets/useAsync-ce2d9ddd.js","assets/useAsyncFn-4bca5482.js","assets/PlaySquareOutlined-f3c772fe.js","assets/index-31c782a8.css"])),8:q.lazy(()=>Jt(()=>import("./index-5f31a7de.js"),["assets/index-5f31a7de.js","assets/parser-f1e7dbfb.js","assets/_setToString-397d22bb.js","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/index-81cb47f8.js","assets/button-909b3565.js","assets/index-f8b1789b.js","assets/Dropdown-d5fff39b.js","assets/TextArea-3bdaceca.js","assets/progress-f968a1fe.js","assets/index-37861f16.js","assets/index-0298c320.js","assets/DeleteOutlined-0f1ef15a.js","assets/DownloadOutlined-f081b8de.js","assets/jszip.min-21813277.js","assets/index-11479954.js","assets/index-eec458eb.css","assets/index-07fc0d1f.js","assets/index-8cbce62d.css","assets/PlaySquareOutlined-f3c772fe.js","assets/index-59f8c77b.css"])),9:q.lazy(()=>Jt(()=>import("./index-4e3b1371.js"),["assets/index-4e3b1371.js","assets/index-3fb79805.js","assets/_setToString-397d22bb.js","assets/TextArea-3bdaceca.js","assets/button-909b3565.js","assets/util-b514be53.js","assets/Dropdown-d5fff39b.js","assets/ScoreEncoder-96e90be0.js","assets/parser-f1e7dbfb.js","assets/index-4514925e.js","assets/index-b284aaac.js","assets/confirm-34976587.js","assets/processCompressedAESFile-0057a8e1.js","assets/Table-571fc4c0.js","assets/index-f8b1789b.js","assets/progress-f968a1fe.js","assets/index-81cb47f8.js","assets/useDebounce-e1e8dc3b.js","assets/index-dc40c6e7.js","assets/index-37861f16.js","assets/DeleteOutlined-0f1ef15a.js","assets/Table-5199d45f.css","assets/download-e05f9890.js","assets/jszip.min-21813277.js","assets/useAsyncFn-4bca5482.js","assets/useAsync-ce2d9ddd.js","assets/DownloadOutlined-f081b8de.js","assets/index-5ecf8580.css"])),10:q.lazy(()=>Jt(()=>import("./gauge-79e4e524.js"),["assets/gauge-79e4e524.js","assets/gaugeRendererGL-41abf4c6.js"])),11:q.lazy(()=>Jt(()=>import("./font-3f201c16.js"),["assets/font-3f201c16.js","assets/font-f4923eb1.css"])),12:q.lazy(()=>Jt(()=>import("./index-52b475a0.js"),["assets/index-52b475a0.js","assets/index-6dffb190.js","assets/parser-f1e7dbfb.js","assets/_setToString-397d22bb.js","assets/index-4514925e.js","assets/index-b284aaac.js","assets/tiny-invariant-023fafff.js","assets/index-1fa256e9.js","assets/download-e05f9890.js","assets/jszip.min-21813277.js","assets/util-b514be53.js","assets/TextArea-3bdaceca.js","assets/button-909b3565.js","assets/confirm-34976587.js","assets/schedulePool-cc4538c2.js","assets/index-dc40c6e7.js","assets/progress-f968a1fe.js","assets/index-37861f16.js","assets/index-c896f3ee.css","assets/index-11479954.js","assets/index-eec458eb.css","assets/index-0298c320.js","assets/DeleteOutlined-0f1ef15a.js","assets/DownloadOutlined-f081b8de.js","assets/index-3adfbdb0.css"]))}}}const Sme={},_me=e=>q.createElement(Ru,{context:Sme},e),Ome=Object.freeze(Object.defineProperty({__proto__:null,innerProvider:_me},Symbol.toStringTag,{value:"Module"}));var b2={exports:{}},mh={};/** +`+i.stack}return{value:e,source:r,stack:a,digest:null}}function Sm(e,r,t){return{value:e,source:null,stack:t??null,digest:r??null}}function f0(e,r){try{console.error(r.value)}catch(t){setTimeout(function(){throw t})}}var Pye=typeof WeakMap=="function"?WeakMap:Map;function Qx(e,r,t){t=$a(-1,t),t.tag=3,t.payload={element:null};var n=r.value;return t.callback=function(){nv||(nv=!0,S0=n),f0(e,r)},t}function Jx(e,r,t){t=$a(-1,t),t.tag=3;var n=e.type.getDerivedStateFromError;if(typeof n=="function"){var a=r.value;t.payload=function(){return n(a)},t.callback=function(){f0(e,r)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(t.callback=function(){f0(e,r),typeof n!="function"&&(hi===null?hi=new Set([this]):hi.add(this));var s=r.stack;this.componentDidCatch(r.value,{componentStack:s!==null?s:""})}),t}function Yk(e,r,t){var n=e.pingCache;if(n===null){n=e.pingCache=new Pye;var a=new Set;n.set(r,a)}else a=n.get(r),a===void 0&&(a=new Set,n.set(r,a));a.has(t)||(a.add(t),e=Bye.bind(null,e,r,t),r.then(e,e))}function Uk(e){do{var r;if((r=e.tag===13)&&(r=e.memoizedState,r=r!==null?r.dehydrated!==null:!0),r)return e;e=e.return}while(e!==null);return null}function Wk(e,r,t,n,a){return e.mode&1?(e.flags|=65536,e.lanes=a,e):(e===r?e.flags|=65536:(e.flags|=128,t.flags|=131072,t.flags&=-52805,t.tag===1&&(t.alternate===null?t.tag=17:(r=$a(-1,1),r.tag=2,vi(t,r,1))),t.lanes|=1),e)}var Dye=Aa.ReactCurrentOwner,Et=!1;function ot(e,r,t,n){r.child=e===null?Ix(r,null,t,n):Es(r,e.child,t,n)}function zk(e,r,t,n,a){t=t.render;var i=r.ref;return ls(r,a),n=tw(e,r,t,n,i,a),t=nw(),e!==null&&!Et?(r.updateQueue=e.updateQueue,r.flags&=-2053,e.lanes&=~a,ba(e,r,a)):(lr&&t&&B1(r),r.flags|=1,ot(e,r,n,a),r.child)}function Bk(e,r,t,n,a){if(e===null){var i=t.type;return typeof i=="function"&&!vw(i)&&i.defaultProps===void 0&&t.compare===null&&t.defaultProps===void 0?(r.tag=15,r.type=i,Xx(e,r,i,n,a)):(e=cd(t.type,null,n,r,r.mode,a),e.ref=r.ref,e.return=r,r.child=e)}if(i=e.child,!(e.lanes&a)){var s=i.memoizedProps;if(t=t.compare,t=t!==null?t:dl,t(s,n)&&e.ref===r.ref)return ba(e,r,a)}return r.flags|=1,e=yi(i,n),e.ref=r.ref,e.return=r,r.child=e}function Xx(e,r,t,n,a){if(e!==null){var i=e.memoizedProps;if(dl(i,n)&&e.ref===r.ref)if(Et=!1,r.pendingProps=n=i,(e.lanes&a)!==0)e.flags&131072&&(Et=!0);else return r.lanes=e.lanes,ba(e,r,a)}return d0(e,r,t,n,a)}function e2(e,r,t){var n=r.pendingProps,a=n.children,i=e!==null?e.memoizedState:null;if(n.mode==="hidden")if(!(r.mode&1))r.memoizedState={baseLanes:0,cachePool:null,transitions:null},rr(rs,Ct),Ct|=t;else{if(!(t&1073741824))return e=i!==null?i.baseLanes|t:t,r.lanes=r.childLanes=1073741824,r.memoizedState={baseLanes:e,cachePool:null,transitions:null},r.updateQueue=null,rr(rs,Ct),Ct|=e,null;r.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=i!==null?i.baseLanes:t,rr(rs,Ct),Ct|=n}else i!==null?(n=i.baseLanes|t,r.memoizedState=null):n=t,rr(rs,Ct),Ct|=n;return ot(e,r,a,t),r.child}function r2(e,r){var t=r.ref;(e===null&&t!==null||e!==null&&e.ref!==t)&&(r.flags|=512,r.flags|=2097152)}function d0(e,r,t,n,a){var i=kt(t)?Ji:et.current;return i=_s(r,i),ls(r,a),t=tw(e,r,t,n,i,a),n=nw(),e!==null&&!Et?(r.updateQueue=e.updateQueue,r.flags&=-2053,e.lanes&=~a,ba(e,r,a)):(lr&&n&&B1(r),r.flags|=1,ot(e,r,t,a),r.child)}function Hk(e,r,t,n,a){if(kt(t)){var i=!0;Gd(r)}else i=!1;if(ls(r,a),r.stateNode===null)sd(e,r),qx(r,t,n),c0(r,t,n,a),n=!0;else if(e===null){var s=r.stateNode,u=r.memoizedProps;s.props=u;var c=s.context,f=t.contextType;typeof f=="object"&&f!==null?f=on(f):(f=kt(t)?Ji:et.current,f=_s(r,f));var v=t.getDerivedStateFromProps,y=typeof v=="function"||typeof s.getSnapshotBeforeUpdate=="function";y||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(u!==n||c!==f)&&jk(r,s,n,f),Qa=!1;var m=r.memoizedState;s.state=m,Jd(r,n,s,a),c=r.memoizedState,u!==n||m!==c||Tt.current||Qa?(typeof v=="function"&&(l0(r,t,v,n),c=r.memoizedState),(u=Qa||Fk(r,t,u,n,m,c,f))?(y||typeof s.UNSAFE_componentWillMount!="function"&&typeof s.componentWillMount!="function"||(typeof s.componentWillMount=="function"&&s.componentWillMount(),typeof s.UNSAFE_componentWillMount=="function"&&s.UNSAFE_componentWillMount()),typeof s.componentDidMount=="function"&&(r.flags|=4194308)):(typeof s.componentDidMount=="function"&&(r.flags|=4194308),r.memoizedProps=n,r.memoizedState=c),s.props=n,s.state=c,s.context=f,n=u):(typeof s.componentDidMount=="function"&&(r.flags|=4194308),n=!1)}else{s=r.stateNode,Mx(e,r),u=r.memoizedProps,f=r.type===r.elementType?u:yn(r.type,u),s.props=f,y=r.pendingProps,m=s.context,c=t.contextType,typeof c=="object"&&c!==null?c=on(c):(c=kt(t)?Ji:et.current,c=_s(r,c));var _=t.getDerivedStateFromProps;(v=typeof _=="function"||typeof s.getSnapshotBeforeUpdate=="function")||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(u!==y||m!==c)&&jk(r,s,n,c),Qa=!1,m=r.memoizedState,s.state=m,Jd(r,n,s,a);var k=r.memoizedState;u!==y||m!==k||Tt.current||Qa?(typeof _=="function"&&(l0(r,t,_,n),k=r.memoizedState),(f=Qa||Fk(r,t,f,n,m,k,c)||!1)?(v||typeof s.UNSAFE_componentWillUpdate!="function"&&typeof s.componentWillUpdate!="function"||(typeof s.componentWillUpdate=="function"&&s.componentWillUpdate(n,k,c),typeof s.UNSAFE_componentWillUpdate=="function"&&s.UNSAFE_componentWillUpdate(n,k,c)),typeof s.componentDidUpdate=="function"&&(r.flags|=4),typeof s.getSnapshotBeforeUpdate=="function"&&(r.flags|=1024)):(typeof s.componentDidUpdate!="function"||u===e.memoizedProps&&m===e.memoizedState||(r.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&m===e.memoizedState||(r.flags|=1024),r.memoizedProps=n,r.memoizedState=k),s.props=n,s.state=k,s.context=c,n=f):(typeof s.componentDidUpdate!="function"||u===e.memoizedProps&&m===e.memoizedState||(r.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&m===e.memoizedState||(r.flags|=1024),n=!1)}return v0(e,r,t,n,i,a)}function v0(e,r,t,n,a,i){r2(e,r);var s=(r.flags&128)!==0;if(!n&&!s)return a&&Pk(r,t,!1),ba(e,r,i);n=r.stateNode,Dye.current=r;var u=s&&typeof t.getDerivedStateFromError!="function"?null:n.render();return r.flags|=1,e!==null&&s?(r.child=Es(r,e.child,null,i),r.child=Es(r,null,u,i)):ot(e,r,u,i),r.memoizedState=n.state,a&&Pk(r,t,!0),r.child}function t2(e){var r=e.stateNode;r.pendingContext?Mk(e,r.pendingContext,r.pendingContext!==r.context):r.context&&Mk(e,r.context,!1),J1(e,r.containerInfo)}function Vk(e,r,t,n,a){return Os(),V1(a),r.flags|=256,ot(e,r,t,n),r.child}var h0={dehydrated:null,treeContext:null,retryLane:0};function p0(e){return{baseLanes:e,cachePool:null,transitions:null}}function n2(e,r,t){var n=r.pendingProps,a=vr.current,i=!1,s=(r.flags&128)!==0,u;if((u=s)||(u=e!==null&&e.memoizedState===null?!1:(a&2)!==0),u?(i=!0,r.flags&=-129):(e===null||e.memoizedState!==null)&&(a|=1),rr(vr,a&1),e===null)return s0(r),e=r.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(r.mode&1?e.data==="$!"?r.lanes=8:r.lanes=1073741824:r.lanes=1,null):(s=n.children,e=n.fallback,i?(n=r.mode,i=r.child,s={mode:"hidden",children:s},!(n&1)&&i!==null?(i.childLanes=0,i.pendingProps=s):i=dh(s,n,0,null),e=Gi(e,n,t,null),i.return=r,e.return=r,i.sibling=e,r.child=i,r.child.memoizedState=p0(t),r.memoizedState=h0,e):ow(r,s));if(a=e.memoizedState,a!==null&&(u=a.dehydrated,u!==null))return Rye(e,r,s,n,u,a,t);if(i){i=n.fallback,s=r.mode,a=e.child,u=a.sibling;var c={mode:"hidden",children:n.children};return!(s&1)&&r.child!==a?(n=r.child,n.childLanes=0,n.pendingProps=c,r.deletions=null):(n=yi(a,c),n.subtreeFlags=a.subtreeFlags&14680064),u!==null?i=yi(u,i):(i=Gi(i,s,t,null),i.flags|=2),i.return=r,n.return=r,n.sibling=i,r.child=n,n=i,i=r.child,s=e.child.memoizedState,s=s===null?p0(t):{baseLanes:s.baseLanes|t,cachePool:null,transitions:s.transitions},i.memoizedState=s,i.childLanes=e.childLanes&~t,r.memoizedState=h0,n}return i=e.child,e=i.sibling,n=yi(i,{mode:"visible",children:n.children}),!(r.mode&1)&&(n.lanes=t),n.return=r,n.sibling=null,e!==null&&(t=r.deletions,t===null?(r.deletions=[e],r.flags|=16):t.push(e)),r.child=n,r.memoizedState=null,n}function ow(e,r){return r=dh({mode:"visible",children:r},e.mode,0,null),r.return=e,e.child=r}function Df(e,r,t,n){return n!==null&&V1(n),Es(r,e.child,null,t),e=ow(r,r.pendingProps.children),e.flags|=2,r.memoizedState=null,e}function Rye(e,r,t,n,a,i,s){if(t)return r.flags&256?(r.flags&=-257,n=Sm(Error(H(422))),Df(e,r,s,n)):r.memoizedState!==null?(r.child=e.child,r.flags|=128,null):(i=n.fallback,a=r.mode,n=dh({mode:"visible",children:n.children},a,0,null),i=Gi(i,a,s,null),i.flags|=2,n.return=r,i.return=r,n.sibling=i,r.child=n,r.mode&1&&Es(r,e.child,null,s),r.child.memoizedState=p0(s),r.memoizedState=h0,i);if(!(r.mode&1))return Df(e,r,s,null);if(a.data==="$!"){if(n=a.nextSibling&&a.nextSibling.dataset,n)var u=n.dgst;return n=u,i=Error(H(419)),n=Sm(i,n,void 0),Df(e,r,s,n)}if(u=(s&e.childLanes)!==0,Et||u){if(n=Cr,n!==null){switch(s&-s){case 4:a=2;break;case 16:a=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}a=a&(n.suspendedLanes|s)?0:a,a!==0&&a!==i.retryLane&&(i.retryLane=a,Ia(e,a),On(n,e,a,-1))}return dw(),n=Sm(Error(H(421))),Df(e,r,s,n)}return a.data==="$?"?(r.flags|=128,r.child=e.child,r=Hye.bind(null,e),a._reactRetry=r,null):(e=i.treeContext,Lt=di(a.nextSibling),Ft=r,lr=!0,$n=null,e!==null&&(en[rn++]=pa,en[rn++]=ya,en[rn++]=Xi,pa=e.id,ya=e.overflow,Xi=r),r=ow(r,n.children),r.flags|=4096,r)}function Gk(e,r,t){e.lanes|=r;var n=e.alternate;n!==null&&(n.lanes|=r),u0(e.return,r,t)}function _m(e,r,t,n,a){var i=e.memoizedState;i===null?e.memoizedState={isBackwards:r,rendering:null,renderingStartTime:0,last:n,tail:t,tailMode:a}:(i.isBackwards=r,i.rendering=null,i.renderingStartTime=0,i.last=n,i.tail=t,i.tailMode=a)}function a2(e,r,t){var n=r.pendingProps,a=n.revealOrder,i=n.tail;if(ot(e,r,n.children,t),n=vr.current,n&2)n=n&1|2,r.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=r.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Gk(e,t,r);else if(e.tag===19)Gk(e,t,r);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===r)break e;for(;e.sibling===null;){if(e.return===null||e.return===r)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(rr(vr,n),!(r.mode&1))r.memoizedState=null;else switch(a){case"forwards":for(t=r.child,a=null;t!==null;)e=t.alternate,e!==null&&Xd(e)===null&&(a=t),t=t.sibling;t=a,t===null?(a=r.child,r.child=null):(a=t.sibling,t.sibling=null),_m(r,!1,a,t,i);break;case"backwards":for(t=null,a=r.child,r.child=null;a!==null;){if(e=a.alternate,e!==null&&Xd(e)===null){r.child=a;break}e=a.sibling,a.sibling=t,t=a,a=e}_m(r,!0,t,null,i);break;case"together":_m(r,!1,null,null,void 0);break;default:r.memoizedState=null}return r.child}function sd(e,r){!(r.mode&1)&&e!==null&&(e.alternate=null,r.alternate=null,r.flags|=2)}function ba(e,r,t){if(e!==null&&(r.dependencies=e.dependencies),ro|=r.lanes,!(t&r.childLanes))return null;if(e!==null&&r.child!==e.child)throw Error(H(153));if(r.child!==null){for(e=r.child,t=yi(e,e.pendingProps),r.child=t,t.return=r;e.sibling!==null;)e=e.sibling,t=t.sibling=yi(e,e.pendingProps),t.return=r;t.sibling=null}return r.child}function Aye(e,r,t){switch(r.tag){case 3:t2(r),Os();break;case 5:Px(r);break;case 1:kt(r.type)&&Gd(r);break;case 4:J1(r,r.stateNode.containerInfo);break;case 10:var n=r.type._context,a=r.memoizedProps.value;rr(qd,n._currentValue),n._currentValue=a;break;case 13:if(n=r.memoizedState,n!==null)return n.dehydrated!==null?(rr(vr,vr.current&1),r.flags|=128,null):t&r.child.childLanes?n2(e,r,t):(rr(vr,vr.current&1),e=ba(e,r,t),e!==null?e.sibling:null);rr(vr,vr.current&1);break;case 19:if(n=(t&r.childLanes)!==0,e.flags&128){if(n)return a2(e,r,t);r.flags|=128}if(a=r.memoizedState,a!==null&&(a.rendering=null,a.tail=null,a.lastEffect=null),rr(vr,vr.current),n)break;return null;case 22:case 23:return r.lanes=0,e2(e,r,t)}return ba(e,r,t)}var i2,y0,o2,s2;i2=function(e,r){for(var t=r.child;t!==null;){if(t.tag===5||t.tag===6)e.appendChild(t.stateNode);else if(t.tag!==4&&t.child!==null){t.child.return=t,t=t.child;continue}if(t===r)break;for(;t.sibling===null;){if(t.return===null||t.return===r)return;t=t.return}t.sibling.return=t.return,t=t.sibling}};y0=function(){};o2=function(e,r,t,n){var a=e.memoizedProps;if(a!==n){e=r.stateNode,zi(Vn.current);var i=null;switch(t){case"input":a=Fg(e,a),n=Fg(e,n),i=[];break;case"select":a=pr({},a,{value:void 0}),n=pr({},n,{value:void 0}),i=[];break;case"textarea":a=Ug(e,a),n=Ug(e,n),i=[];break;default:typeof a.onClick!="function"&&typeof n.onClick=="function"&&(e.onclick=Hd)}zg(t,n);var s;t=null;for(f in a)if(!n.hasOwnProperty(f)&&a.hasOwnProperty(f)&&a[f]!=null)if(f==="style"){var u=a[f];for(s in u)u.hasOwnProperty(s)&&(t||(t={}),t[s]="")}else f!=="dangerouslySetInnerHTML"&&f!=="children"&&f!=="suppressContentEditableWarning"&&f!=="suppressHydrationWarning"&&f!=="autoFocus"&&(il.hasOwnProperty(f)?i||(i=[]):(i=i||[]).push(f,null));for(f in n){var c=n[f];if(u=a!=null?a[f]:void 0,n.hasOwnProperty(f)&&c!==u&&(c!=null||u!=null))if(f==="style")if(u){for(s in u)!u.hasOwnProperty(s)||c&&c.hasOwnProperty(s)||(t||(t={}),t[s]="");for(s in c)c.hasOwnProperty(s)&&u[s]!==c[s]&&(t||(t={}),t[s]=c[s])}else t||(i||(i=[]),i.push(f,t)),t=c;else f==="dangerouslySetInnerHTML"?(c=c?c.__html:void 0,u=u?u.__html:void 0,c!=null&&u!==c&&(i=i||[]).push(f,c)):f==="children"?typeof c!="string"&&typeof c!="number"||(i=i||[]).push(f,""+c):f!=="suppressContentEditableWarning"&&f!=="suppressHydrationWarning"&&(il.hasOwnProperty(f)?(c!=null&&f==="onScroll"&&ar("scroll",e),i||u===c||(i=[])):(i=i||[]).push(f,c))}t&&(i=i||[]).push("style",t);var f=i;(r.updateQueue=f)&&(r.flags|=4)}};s2=function(e,r,t,n){t!==n&&(r.flags|=4)};function Ou(e,r){if(!lr)switch(e.tailMode){case"hidden":r=e.tail;for(var t=null;r!==null;)r.alternate!==null&&(t=r),r=r.sibling;t===null?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?r||e.tail===null?e.tail=null:e.tail.sibling=null:n.sibling=null}}function Qr(e){var r=e.alternate!==null&&e.alternate.child===e.child,t=0,n=0;if(r)for(var a=e.child;a!==null;)t|=a.lanes|a.childLanes,n|=a.subtreeFlags&14680064,n|=a.flags&14680064,a.return=e,a=a.sibling;else for(a=e.child;a!==null;)t|=a.lanes|a.childLanes,n|=a.subtreeFlags,n|=a.flags,a.return=e,a=a.sibling;return e.subtreeFlags|=n,e.childLanes=t,r}function xye(e,r,t){var n=r.pendingProps;switch(H1(r),r.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Qr(r),null;case 1:return kt(r.type)&&Vd(),Qr(r),null;case 3:return n=r.stateNode,Ts(),ir(Tt),ir(et),ew(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(Mf(r)?r.flags|=4:e===null||e.memoizedState.isDehydrated&&!(r.flags&256)||(r.flags|=1024,$n!==null&&(E0($n),$n=null))),y0(e,r),Qr(r),null;case 5:X1(r);var a=zi(ml.current);if(t=r.type,e!==null&&r.stateNode!=null)o2(e,r,t,n,a),e.ref!==r.ref&&(r.flags|=512,r.flags|=2097152);else{if(!n){if(r.stateNode===null)throw Error(H(166));return Qr(r),null}if(e=zi(Vn.current),Mf(r)){n=r.stateNode,t=r.type;var i=r.memoizedProps;switch(n[Un]=r,n[pl]=i,e=(r.mode&1)!==0,t){case"dialog":ar("cancel",n),ar("close",n);break;case"iframe":case"object":case"embed":ar("load",n);break;case"video":case"audio":for(a=0;a<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=s.createElement(t,{is:n.is}):(e=s.createElement(t),t==="select"&&(s=e,n.multiple?s.multiple=!0:n.size&&(s.size=n.size))):e=s.createElementNS(e,t),e[Un]=r,e[pl]=n,i2(e,r,!1,!1),r.stateNode=e;e:{switch(s=Bg(t,n),t){case"dialog":ar("cancel",e),ar("close",e),a=n;break;case"iframe":case"object":case"embed":ar("load",e),a=n;break;case"video":case"audio":for(a=0;aIs&&(r.flags|=128,n=!0,Ou(i,!1),r.lanes=4194304)}else{if(!n)if(e=Xd(s),e!==null){if(r.flags|=128,n=!0,t=e.updateQueue,t!==null&&(r.updateQueue=t,r.flags|=4),Ou(i,!0),i.tail===null&&i.tailMode==="hidden"&&!s.alternate&&!lr)return Qr(r),null}else 2*Or()-i.renderingStartTime>Is&&t!==1073741824&&(r.flags|=128,n=!0,Ou(i,!1),r.lanes=4194304);i.isBackwards?(s.sibling=r.child,r.child=s):(t=i.last,t!==null?t.sibling=s:r.child=s,i.last=s)}return i.tail!==null?(r=i.tail,i.rendering=r,i.tail=r.sibling,i.renderingStartTime=Or(),r.sibling=null,t=vr.current,rr(vr,n?t&1|2:t&1),r):(Qr(r),null);case 22:case 23:return fw(),n=r.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(r.flags|=8192),n&&r.mode&1?Ct&1073741824&&(Qr(r),r.subtreeFlags&6&&(r.flags|=8192)):Qr(r),null;case 24:return null;case 25:return null}throw Error(H(156,r.tag))}function Cye(e,r){switch(H1(r),r.tag){case 1:return kt(r.type)&&Vd(),e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 3:return Ts(),ir(Tt),ir(et),ew(),e=r.flags,e&65536&&!(e&128)?(r.flags=e&-65537|128,r):null;case 5:return X1(r),null;case 13:if(ir(vr),e=r.memoizedState,e!==null&&e.dehydrated!==null){if(r.alternate===null)throw Error(H(340));Os()}return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 19:return ir(vr),null;case 4:return Ts(),null;case 10:return Z1(r.type._context),null;case 22:case 23:return fw(),null;case 24:return null;default:return null}}var Rf=!1,Jr=!1,Nye=typeof WeakSet=="function"?WeakSet:Set,se=null;function es(e,r){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(n){gr(e,r,n)}else t.current=null}function m0(e,r,t){try{t()}catch(n){gr(e,r,n)}}var Kk=!1;function Lye(e,r){if(e0=Wd,e=dx(),z1(e)){if("selectionStart"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{t=(t=e.ownerDocument)&&t.defaultView||window;var n=t.getSelection&&t.getSelection();if(n&&n.rangeCount!==0){t=n.anchorNode;var a=n.anchorOffset,i=n.focusNode;n=n.focusOffset;try{t.nodeType,i.nodeType}catch{t=null;break e}var s=0,u=-1,c=-1,f=0,v=0,y=e,m=null;r:for(;;){for(var _;y!==t||a!==0&&y.nodeType!==3||(u=s+a),y!==i||n!==0&&y.nodeType!==3||(c=s+n),y.nodeType===3&&(s+=y.nodeValue.length),(_=y.firstChild)!==null;)m=y,y=_;for(;;){if(y===e)break r;if(m===t&&++f===a&&(u=s),m===i&&++v===n&&(c=s),(_=y.nextSibling)!==null)break;y=m,m=y.parentNode}y=_}t=u===-1||c===-1?null:{start:u,end:c}}else t=null}t=t||{start:0,end:0}}else t=null;for(r0={focusedElem:e,selectionRange:t},Wd=!1,se=r;se!==null;)if(r=se,e=r.child,(r.subtreeFlags&1028)!==0&&e!==null)e.return=r,se=e;else for(;se!==null;){r=se;try{var k=r.alternate;if(r.flags&1024)switch(r.tag){case 0:case 11:case 15:break;case 1:if(k!==null){var b=k.memoizedProps,N=k.memoizedState,E=r.stateNode,w=E.getSnapshotBeforeUpdate(r.elementType===r.type?b:yn(r.type,b),N);E.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var O=r.stateNode.containerInfo;O.nodeType===1?O.textContent="":O.nodeType===9&&O.documentElement&&O.removeChild(O.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(H(163))}}catch(M){gr(r,r.return,M)}if(e=r.sibling,e!==null){e.return=r.return,se=e;break}se=r.return}return k=Kk,Kk=!1,k}function qu(e,r,t){var n=r.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var a=n=n.next;do{if((a.tag&e)===e){var i=a.destroy;a.destroy=void 0,i!==void 0&&m0(r,t,i)}a=a.next}while(a!==n)}}function ch(e,r){if(r=r.updateQueue,r=r!==null?r.lastEffect:null,r!==null){var t=r=r.next;do{if((t.tag&e)===e){var n=t.create;t.destroy=n()}t=t.next}while(t!==r)}}function g0(e){var r=e.ref;if(r!==null){var t=e.stateNode;switch(e.tag){case 5:e=t;break;default:e=t}typeof r=="function"?r(e):r.current=e}}function u2(e){var r=e.alternate;r!==null&&(e.alternate=null,u2(r)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(r=e.stateNode,r!==null&&(delete r[Un],delete r[pl],delete r[a0],delete r[$ye],delete r[wye])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function l2(e){return e.tag===5||e.tag===3||e.tag===4}function Zk(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||l2(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function $0(e,r,t){var n=e.tag;if(n===5||n===6)e=e.stateNode,r?t.nodeType===8?t.parentNode.insertBefore(e,r):t.insertBefore(e,r):(t.nodeType===8?(r=t.parentNode,r.insertBefore(e,t)):(r=t,r.appendChild(e)),t=t._reactRootContainer,t!=null||r.onclick!==null||(r.onclick=Hd));else if(n!==4&&(e=e.child,e!==null))for($0(e,r,t),e=e.sibling;e!==null;)$0(e,r,t),e=e.sibling}function w0(e,r,t){var n=e.tag;if(n===5||n===6)e=e.stateNode,r?t.insertBefore(e,r):t.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(w0(e,r,t),e=e.sibling;e!==null;)w0(e,r,t),e=e.sibling}var Yr=null,mn=!1;function Ka(e,r,t){for(t=t.child;t!==null;)c2(e,r,t),t=t.sibling}function c2(e,r,t){if(Hn&&typeof Hn.onCommitFiberUnmount=="function")try{Hn.onCommitFiberUnmount(th,t)}catch{}switch(t.tag){case 5:Jr||es(t,r);case 6:var n=Yr,a=mn;Yr=null,Ka(e,r,t),Yr=n,mn=a,Yr!==null&&(mn?(e=Yr,t=t.stateNode,e.nodeType===8?e.parentNode.removeChild(t):e.removeChild(t)):Yr.removeChild(t.stateNode));break;case 18:Yr!==null&&(mn?(e=Yr,t=t.stateNode,e.nodeType===8?pm(e.parentNode,t):e.nodeType===1&&pm(e,t),cl(e)):pm(Yr,t.stateNode));break;case 4:n=Yr,a=mn,Yr=t.stateNode.containerInfo,mn=!0,Ka(e,r,t),Yr=n,mn=a;break;case 0:case 11:case 14:case 15:if(!Jr&&(n=t.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){a=n=n.next;do{var i=a,s=i.destroy;i=i.tag,s!==void 0&&(i&2||i&4)&&m0(t,r,s),a=a.next}while(a!==n)}Ka(e,r,t);break;case 1:if(!Jr&&(es(t,r),n=t.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=t.memoizedProps,n.state=t.memoizedState,n.componentWillUnmount()}catch(u){gr(t,r,u)}Ka(e,r,t);break;case 21:Ka(e,r,t);break;case 22:t.mode&1?(Jr=(n=Jr)||t.memoizedState!==null,Ka(e,r,t),Jr=n):Ka(e,r,t);break;default:Ka(e,r,t)}}function qk(e){var r=e.updateQueue;if(r!==null){e.updateQueue=null;var t=e.stateNode;t===null&&(t=e.stateNode=new Nye),r.forEach(function(n){var a=Vye.bind(null,e,n);t.has(n)||(t.add(n),n.then(a,a))})}}function pn(e,r){var t=r.deletions;if(t!==null)for(var n=0;na&&(a=s),n&=~i}if(n=a,n=Or()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*jye(n/1960))-n,10e?16:e,ni===null)var n=!1;else{if(e=ni,ni=null,av=0,je&6)throw Error(H(331));var a=je;for(je|=4,se=e.current;se!==null;){var i=se,s=i.child;if(se.flags&16){var u=i.deletions;if(u!==null){for(var c=0;cOr()-lw?Vi(e,0):uw|=t),It(e,r)}function g2(e,r){r===0&&(e.mode&1?(r=Of,Of<<=1,!(Of&130023424)&&(Of=4194304)):r=1);var t=ut();e=Ia(e,r),e!==null&&(Ql(e,r,t),It(e,t))}function Hye(e){var r=e.memoizedState,t=0;r!==null&&(t=r.retryLane),g2(e,t)}function Vye(e,r){var t=0;switch(e.tag){case 13:var n=e.stateNode,a=e.memoizedState;a!==null&&(t=a.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(H(314))}n!==null&&n.delete(r),g2(e,t)}var $2;$2=function(e,r,t){if(e!==null)if(e.memoizedProps!==r.pendingProps||Tt.current)Et=!0;else{if(!(e.lanes&t)&&!(r.flags&128))return Et=!1,Aye(e,r,t);Et=!!(e.flags&131072)}else Et=!1,lr&&r.flags&1048576&&Ox(r,Zd,r.index);switch(r.lanes=0,r.tag){case 2:var n=r.type;sd(e,r),e=r.pendingProps;var a=_s(r,et.current);ls(r,t),a=tw(null,r,n,e,a,t);var i=nw();return r.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(r.tag=1,r.memoizedState=null,r.updateQueue=null,kt(n)?(i=!0,Gd(r)):i=!1,r.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,Q1(r),a.updater=lh,r.stateNode=a,a._reactInternals=r,c0(r,n,e,t),r=v0(null,r,n,!0,i,t)):(r.tag=0,lr&&i&&B1(r),ot(null,r,a,t),r=r.child),r;case 16:n=r.elementType;e:{switch(sd(e,r),e=r.pendingProps,a=n._init,n=a(n._payload),r.type=n,a=r.tag=Kye(n),e=yn(n,e),a){case 0:r=d0(null,r,n,e,t);break e;case 1:r=Hk(null,r,n,e,t);break e;case 11:r=zk(null,r,n,e,t);break e;case 14:r=Bk(null,r,n,yn(n.type,e),t);break e}throw Error(H(306,n,""))}return r;case 0:return n=r.type,a=r.pendingProps,a=r.elementType===n?a:yn(n,a),d0(e,r,n,a,t);case 1:return n=r.type,a=r.pendingProps,a=r.elementType===n?a:yn(n,a),Hk(e,r,n,a,t);case 3:e:{if(t2(r),e===null)throw Error(H(387));n=r.pendingProps,i=r.memoizedState,a=i.element,Mx(e,r),Jd(r,n,null,t);var s=r.memoizedState;if(n=s.element,i.isDehydrated)if(i={element:n,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},r.updateQueue.baseState=i,r.memoizedState=i,r.flags&256){a=ks(Error(H(423)),r),r=Vk(e,r,n,t,a);break e}else if(n!==a){a=ks(Error(H(424)),r),r=Vk(e,r,n,t,a);break e}else for(Lt=di(r.stateNode.containerInfo.firstChild),Ft=r,lr=!0,$n=null,t=Ix(r,null,n,t),r.child=t;t;)t.flags=t.flags&-3|4096,t=t.sibling;else{if(Os(),n===a){r=ba(e,r,t);break e}ot(e,r,n,t)}r=r.child}return r;case 5:return Px(r),e===null&&s0(r),n=r.type,a=r.pendingProps,i=e!==null?e.memoizedProps:null,s=a.children,t0(n,a)?s=null:i!==null&&t0(n,i)&&(r.flags|=32),r2(e,r),ot(e,r,s,t),r.child;case 6:return e===null&&s0(r),null;case 13:return n2(e,r,t);case 4:return J1(r,r.stateNode.containerInfo),n=r.pendingProps,e===null?r.child=Es(r,null,n,t):ot(e,r,n,t),r.child;case 11:return n=r.type,a=r.pendingProps,a=r.elementType===n?a:yn(n,a),zk(e,r,n,a,t);case 7:return ot(e,r,r.pendingProps,t),r.child;case 8:return ot(e,r,r.pendingProps.children,t),r.child;case 12:return ot(e,r,r.pendingProps.children,t),r.child;case 10:e:{if(n=r.type._context,a=r.pendingProps,i=r.memoizedProps,s=a.value,rr(qd,n._currentValue),n._currentValue=s,i!==null)if(kn(i.value,s)){if(i.children===a.children&&!Tt.current){r=ba(e,r,t);break e}}else for(i=r.child,i!==null&&(i.return=r);i!==null;){var u=i.dependencies;if(u!==null){s=i.child;for(var c=u.firstContext;c!==null;){if(c.context===n){if(i.tag===1){c=$a(-1,t&-t),c.tag=2;var f=i.updateQueue;if(f!==null){f=f.shared;var v=f.pending;v===null?c.next=c:(c.next=v.next,v.next=c),f.pending=c}}i.lanes|=t,c=i.alternate,c!==null&&(c.lanes|=t),u0(i.return,t,r),u.lanes|=t;break}c=c.next}}else if(i.tag===10)s=i.type===r.type?null:i.child;else if(i.tag===18){if(s=i.return,s===null)throw Error(H(341));s.lanes|=t,u=s.alternate,u!==null&&(u.lanes|=t),u0(s,t,r),s=i.sibling}else s=i.child;if(s!==null)s.return=i;else for(s=i;s!==null;){if(s===r){s=null;break}if(i=s.sibling,i!==null){i.return=s.return,s=i;break}s=s.return}i=s}ot(e,r,a.children,t),r=r.child}return r;case 9:return a=r.type,n=r.pendingProps.children,ls(r,t),a=on(a),n=n(a),r.flags|=1,ot(e,r,n,t),r.child;case 14:return n=r.type,a=yn(n,r.pendingProps),a=yn(n.type,a),Bk(e,r,n,a,t);case 15:return Xx(e,r,r.type,r.pendingProps,t);case 17:return n=r.type,a=r.pendingProps,a=r.elementType===n?a:yn(n,a),sd(e,r),r.tag=1,kt(n)?(e=!0,Gd(r)):e=!1,ls(r,t),qx(r,n,a),c0(r,n,a,t),v0(null,r,n,!0,e,t);case 19:return a2(e,r,t);case 22:return e2(e,r,t)}throw Error(H(156,r.tag))};function w2(e,r){return GA(e,r)}function Gye(e,r,t,n){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=r,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function nn(e,r,t,n){return new Gye(e,r,t,n)}function vw(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Kye(e){if(typeof e=="function")return vw(e)?1:0;if(e!=null){if(e=e.$$typeof,e===R1)return 11;if(e===A1)return 14}return 2}function yi(e,r){var t=e.alternate;return t===null?(t=nn(e.tag,r,e.key,e.mode),t.elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=r,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=e.flags&14680064,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,r=e.dependencies,t.dependencies=r===null?null:{lanes:r.lanes,firstContext:r.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function cd(e,r,t,n,a,i){var s=2;if(n=e,typeof e=="function")vw(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Ho:return Gi(t.children,a,i,r);case D1:s=8,a|=8;break;case xg:return e=nn(12,t,r,a|2),e.elementType=xg,e.lanes=i,e;case Cg:return e=nn(13,t,r,a),e.elementType=Cg,e.lanes=i,e;case Ng:return e=nn(19,t,r,a),e.elementType=Ng,e.lanes=i,e;case PA:return dh(t,a,i,r);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case bA:s=10;break e;case MA:s=9;break e;case R1:s=11;break e;case A1:s=14;break e;case qa:s=16,n=null;break e}throw Error(H(130,e==null?e:typeof e,""))}return r=nn(s,t,r,a),r.elementType=e,r.type=n,r.lanes=i,r}function Gi(e,r,t,n){return e=nn(7,e,n,r),e.lanes=t,e}function dh(e,r,t,n){return e=nn(22,e,n,r),e.elementType=PA,e.lanes=t,e.stateNode={isHidden:!1},e}function Om(e,r,t){return e=nn(6,e,null,r),e.lanes=t,e}function Em(e,r,t){return r=nn(4,e.children!==null?e.children:[],e.key,r),r.lanes=t,r.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},r}function Zye(e,r,t,n,a){this.tag=r,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=am(0),this.expirationTimes=am(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=am(0),this.identifierPrefix=n,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function hw(e,r,t,n,a,i,s,u,c){return e=new Zye(e,r,t,u,c),r===1?(r=1,i===!0&&(r|=8)):r=0,i=nn(3,null,null,r),e.current=i,i.stateNode=e,i.memoizedState={element:n,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},Q1(i),e}function qye(e,r,t){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(E2)}catch(e){console.error(e)}}E2(),EA.exports=zt;var gw=EA.exports;const rme=no(gw),O_e=H0({__proto__:null,default:rme},[gw]);var aI=gw;zo.createRoot=aI.createRoot,zo.hydrateRoot=aI.hydrateRoot;function bs(){return bs=Object.assign?Object.assign.bind():function(e){for(var r=1;rEnable JavaScript to run this app."}})},oI=function(r){var t,n=r.loaderData,a=r.htmlPageOpts,i=r.manifest,s=(i==null||(t=i.assets)===null||t===void 0?void 0:t["umi.css"])||"";return q.createElement("script",{suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:"window.__UMI_LOADER_DATA__ = ".concat(JSON.stringify(n||{}),"; window.__UMI_METADATA_LOADER_DATA__ = ").concat(JSON.stringify(a||{}),"; window.__UMI_BUILD_ClIENT_CSS__ = '").concat(s,"'")}})};function k2(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(typeof e=="string")return T2(e)?St({src:e},r):{content:e};if(Qi(e)==="object")return St(St({},e),r);throw new Error("Invalid script type: ".concat(Qi(e)))}function ime(e){return T2(e)?{type:"link",href:e}:{type:"style",content:e}}var sI=function(r){var t,n,a,i,s,u,c=r.htmlPageOpts;return q.createElement(q.Fragment,null,(c==null?void 0:c.title)&&q.createElement("title",null,c.title),c==null||(t=c.favicons)===null||t===void 0?void 0:t.map(function(f,v){return q.createElement("link",{key:v,rel:"shortcut icon",href:f})}),(c==null?void 0:c.description)&&q.createElement("meta",{name:"description",content:c.description}),(c==null||(n=c.keywords)===null||n===void 0?void 0:n.length)&&q.createElement("meta",{name:"keywords",content:c.keywords.join(",")}),c==null||(a=c.metas)===null||a===void 0?void 0:a.map(function(f){return q.createElement("meta",{key:f.name,name:f.name,property:f.property,content:f.content})}),c==null||(i=c.links)===null||i===void 0?void 0:i.map(function(f,v){return q.createElement("link",bs({key:v},f))}),c==null||(s=c.styles)===null||s===void 0?void 0:s.map(function(f,v){var y=ime(f),m=y.type,_=y.href,k=y.content;if(m==="link")return q.createElement("link",{key:v,rel:"stylesheet",href:_});if(m==="style")return q.createElement("style",{key:v},k)}),c==null||(u=c.headScripts)===null||u===void 0?void 0:u.map(function(f,v){var y=k2(f),m=y.content,_=rh(y,tme);return q.createElement("script",bs({dangerouslySetInnerHTML:{__html:m},key:v},_))}))};function ome(e){var r,t=e.children,n=e.loaderData,a=e.manifest,i=e.htmlPageOpts,s=e.__INTERNAL_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,u=e.mountElementId;if(s!=null&&s.pureHtml)return q.createElement("html",null,q.createElement("head",null,q.createElement(sI,{htmlPageOpts:i})),q.createElement("body",null,q.createElement(iI,null),q.createElement("div",{id:u},t),q.createElement(oI,{manifest:a,loaderData:n,htmlPageOpts:i})));if(s!=null&&s.pureApp)return q.createElement(q.Fragment,null,t);var c=typeof window>"u"?a==null?void 0:a.assets["umi.css"]:window.__UMI_BUILD_ClIENT_CSS__;return q.createElement("html",{suppressHydrationWarning:!0,lang:(i==null?void 0:i.lang)||"en"},q.createElement("head",null,q.createElement("meta",{charSet:"utf-8"}),q.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),c&&q.createElement("link",{suppressHydrationWarning:!0,rel:"stylesheet",href:c}),q.createElement(sI,{htmlPageOpts:i})),q.createElement("body",null,q.createElement(iI,null),q.createElement("div",{id:u},t),q.createElement(oI,{manifest:a,loaderData:n,htmlPageOpts:i}),i==null||(r=i.scripts)===null||r===void 0?void 0:r.map(function(f,v){var y=k2(f),m=y.content,_=rh(y,nme);return q.createElement("script",bs({dangerouslySetInnerHTML:{__html:m},key:v},_))})))}var sme=["redirect"];function I2(e){var r=e.routesById,t=e.parentId,n=e.routeComponents,a=e.useStream,i=a===void 0?!0:a;return Object.keys(r).filter(function(s){return r[s].parentId===t}).map(function(s){var u=lme(St(St({route:r[s],routeComponent:n[s],loadingComponent:e.loadingComponent,reactRouter5Compat:e.reactRouter5Compat},e.reactRouter5Compat&&{hasChildren:Object.keys(r).filter(function(f){return r[f].parentId===s}).length>0}),{},{useStream:i})),c=I2({routesById:r,routeComponents:n,parentId:u.id,loadingComponent:e.loadingComponent,reactRouter5Compat:e.reactRouter5Compat,useStream:i});return c.length>0&&(u.children=c,u.routes=c),u})}function ume(e){var r=SA(),t=dhe(e.to,r),n=qhe(),a=ql();if(n!=null&&n.keepQuery){var i=a.search+a.hash;t+=i}var s=St(St({},e),{},{to:t});return q.createElement(Lhe,bs({replace:!0},s))}function lme(e){var r=e.route,t=e.useStream,n=t===void 0?!0:t,a=r.redirect,i=rh(r,sme),s=e.reactRouter5Compat?fme:dme;return St({element:a?q.createElement(ume,{to:a}):q.createElement(_A.Provider,{value:{route:e.route}},q.createElement(s,{loader:q.memo(e.routeComponent),loadingComponent:e.loadingComponent||cme,hasChildren:e.hasChildren,useStream:n}))},i)}function cme(){return q.createElement("div",null)}function fme(e){var r=Ghe(),t=r.route,n=I1(),a=n.history,i=n.clientRoutes,s=SA(),u={params:s,isExact:!0,path:t.path,url:a.location.pathname},c=e.loader,f={location:a.location,match:u,history:a,params:s,route:t,routes:i};return e.useStream?q.createElement(q.Suspense,{fallback:q.createElement(e.loadingComponent,null)},q.createElement(c,f,e.hasChildren&&q.createElement(ZT,null))):q.createElement(c,f,e.hasChildren&&q.createElement(ZT,null))}function dme(e){var r=e.loader;return e.useStream?q.createElement(q.Suspense,{fallback:q.createElement(e.loadingComponent,null)},q.createElement(r,null)):q.createElement(r,null)}var uI=null;function vme(e){var r=e.history,t=q.useState({action:r.action,location:r.location}),n=Rg(t,2),a=n[0],i=n[1];return ye.useLayoutEffect(function(){return r.listen(i)},[r]),ye.useLayoutEffect(function(){function s(u){e.pluginManager.applyPlugins({key:"onRouteChange",type:"event",args:{routes:e.routes,clientRoutes:e.clientRoutes,location:u.location,action:u.action,basename:e.basename,isFirst:!!u.isFirst}})}return s({location:a.location,action:a.action,isFirst:!0}),r.listen(s)},[r,e.routes,e.clientRoutes]),q.createElement(Fhe,{navigator:r,location:a.location,basename:e.basename},e.children)}function hme(){var e=I1(),r=e.clientRoutes;return Che(r)}var pme=["innerProvider","i18nProvider","accessProvider","dataflowProvider","outerProvider","rootContainer"],yme=function(r,t){var n=r.basename||"/",a=I2({routesById:r.routes,routeComponents:r.routeComponents,loadingComponent:r.loadingComponent,reactRouter5Compat:r.reactRouter5Compat,useStream:r.useStream});r.pluginManager.applyPlugins({key:"patchClientRoutes",type:"event",args:{routes:a}});for(var i=q.createElement(vme,{basename:n,pluginManager:r.pluginManager,routes:r.routes,clientRoutes:a,history:r.history},t),s=0,u=pme;s{if(i=$me(i),i in lI)return;lI[i]=!0;const s=i.endsWith(".css"),u=s?'[rel="stylesheet"]':"";if(!!n)for(let v=a.length-1;v>=0;v--){const y=a[v];if(y.href===i&&(!s||y.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${u}`))return;const f=document.createElement("link");if(f.rel=s?"stylesheet":gme,s||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),s)return new Promise((v,y)=>{f.addEventListener("load",v),f.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>r()).catch(i=>{const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=i,window.dispatchEvent(s),!s.defaultPrevented)throw i})};async function wme(){return{routes:{1:{path:"/",id:"1"},2:{path:"/editor/:id",id:"2"},3:{path:"/playground",id:"3"},4:{path:"/playground/:id",id:"4"},5:{path:"/numbered",id:"5"},6:{path:"/numbered/:id",id:"6"},7:{path:"/viewer/:id",id:"7"},8:{path:"/live-score",id:"8"},9:{path:"/admin",title:"STARRY控制台",id:"9"},10:{path:"/test/gauge",title:"GaugeRenderer Test",id:"10"},11:{path:"/test/font",title:"Emmentaler Font Test",id:"11"},12:{path:"/spartito",id:"12"}},routeComponents:{1:q.lazy(()=>Jt(()=>import("./index-924a53d5.js"),["assets/index-924a53d5.js","assets/index-54683183.js","assets/_setToString-dbbee35a.js","assets/TextArea-27ba039d.js","assets/button-1ef38c18.js","assets/util-2d38567b.js","assets/Dropdown-ba03bf54.js","assets/Tags-ad5c77b1.js","assets/index-2899652d.js","assets/progress-096a2c96.js","assets/useDebounce-2fd3a0bc.js","assets/index-cc0634fc.js","assets/index-92da7081.js","assets/useAsyncFn-ffd323fd.js","assets/Table-2396b2d2.js","assets/index-da399111.js","assets/index-abb14cca.js","assets/DeleteOutlined-a45fceaa.js","assets/Table-5199d45f.css","assets/index-5ecf8580.css"])),2:q.lazy(()=>Jt(()=>import("./index-d618a72b.js"),["assets/index-d618a72b.js","assets/parser-c740d6a8.js","assets/_setToString-dbbee35a.js","assets/scheduler-a7fa9c3c.js","assets/processCompressedAESFile-983b93dd.js","assets/index-abb14cca.js","assets/index-a475ddbb.js","assets/index-92da7081.js","assets/useIntersection-3ba689a0.js","assets/useAsync-6c98bbac.js","assets/useAsyncFn-ffd323fd.js","assets/index-affa0ef2.css"])),3:q.lazy(()=>Jt(()=>import("./index-6b7821d6.js"),["assets/index-6b7821d6.js","assets/parser-c740d6a8.js","assets/_setToString-dbbee35a.js","assets/index.less_used_.module-bc4fc13c.js","assets/tiny-invariant-5c4293b4.js","assets/index-03b68134.js","assets/index-a475ddbb.js","assets/index-92da7081.js","assets/download-5fc3c841.js","assets/jszip.min-ed3d3f78.js","assets/util-2d38567b.js","assets/TextArea-27ba039d.js","assets/button-1ef38c18.js","assets/index-54683183.js","assets/Dropdown-ba03bf54.js","assets/index-abb14cca.js","assets/useAsyncFn-ffd323fd.js","assets/index.less_used_-2e0a4089.css","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/ScoreEncoder-15dcb3c3.js","assets/Tags-ad5c77b1.js","assets/index-2899652d.js","assets/progress-096a2c96.js","assets/useDebounce-2fd3a0bc.js","assets/index-cc0634fc.js","assets/gaugeRendererGL-41abf4c6.js","assets/confirm-19f7e7d5.js","assets/index-55bfb99e.js","assets/index-c896f3ee.css","assets/index-5cf0ced5.js","assets/index-8cbce62d.css","assets/processCompressedAESFile-983b93dd.js","assets/useIntersection-3ba689a0.js","assets/index-6cc9bc74.js","assets/index-eec458eb.css","assets/PlaySquareOutlined-04ce0d9a.js","assets/DownloadOutlined-80f8a347.js","assets/index-11d8c807.css"])),4:q.lazy(()=>Jt(()=>import("./index-6b7821d6.js"),["assets/index-6b7821d6.js","assets/parser-c740d6a8.js","assets/_setToString-dbbee35a.js","assets/index.less_used_.module-bc4fc13c.js","assets/tiny-invariant-5c4293b4.js","assets/index-03b68134.js","assets/index-a475ddbb.js","assets/index-92da7081.js","assets/download-5fc3c841.js","assets/jszip.min-ed3d3f78.js","assets/util-2d38567b.js","assets/TextArea-27ba039d.js","assets/button-1ef38c18.js","assets/index-54683183.js","assets/Dropdown-ba03bf54.js","assets/index-abb14cca.js","assets/useAsyncFn-ffd323fd.js","assets/index.less_used_-2e0a4089.css","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/ScoreEncoder-15dcb3c3.js","assets/Tags-ad5c77b1.js","assets/index-2899652d.js","assets/progress-096a2c96.js","assets/useDebounce-2fd3a0bc.js","assets/index-cc0634fc.js","assets/gaugeRendererGL-41abf4c6.js","assets/confirm-19f7e7d5.js","assets/index-55bfb99e.js","assets/index-c896f3ee.css","assets/index-5cf0ced5.js","assets/index-8cbce62d.css","assets/processCompressedAESFile-983b93dd.js","assets/useIntersection-3ba689a0.js","assets/index-6cc9bc74.js","assets/index-eec458eb.css","assets/PlaySquareOutlined-04ce0d9a.js","assets/DownloadOutlined-80f8a347.js","assets/index-11d8c807.css"])),5:q.lazy(()=>Jt(()=>import("./index-26f4a762.js"),["assets/index-26f4a762.js","assets/index-54683183.js","assets/_setToString-dbbee35a.js","assets/TextArea-27ba039d.js","assets/button-1ef38c18.js","assets/util-2d38567b.js","assets/Dropdown-ba03bf54.js","assets/index.less_used_.module-bc4fc13c.js","assets/tiny-invariant-5c4293b4.js","assets/index-03b68134.js","assets/parser-c740d6a8.js","assets/index-a475ddbb.js","assets/index-92da7081.js","assets/download-5fc3c841.js","assets/jszip.min-ed3d3f78.js","assets/index-abb14cca.js","assets/useAsyncFn-ffd323fd.js","assets/index.less_used_-2e0a4089.css","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/useAsync-6c98bbac.js","assets/PlaySquareOutlined-04ce0d9a.js","assets/index-0d11b9f1.css"])),6:q.lazy(()=>Jt(()=>import("./index-26f4a762.js"),["assets/index-26f4a762.js","assets/index-54683183.js","assets/_setToString-dbbee35a.js","assets/TextArea-27ba039d.js","assets/button-1ef38c18.js","assets/util-2d38567b.js","assets/Dropdown-ba03bf54.js","assets/index.less_used_.module-bc4fc13c.js","assets/tiny-invariant-5c4293b4.js","assets/index-03b68134.js","assets/parser-c740d6a8.js","assets/index-a475ddbb.js","assets/index-92da7081.js","assets/download-5fc3c841.js","assets/jszip.min-ed3d3f78.js","assets/index-abb14cca.js","assets/useAsyncFn-ffd323fd.js","assets/index.less_used_-2e0a4089.css","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/useAsync-6c98bbac.js","assets/PlaySquareOutlined-04ce0d9a.js","assets/index-0d11b9f1.css"])),7:q.lazy(()=>Jt(()=>import("./index-c48d1c48.js"),["assets/index-c48d1c48.js","assets/index-a475ddbb.js","assets/parser-c740d6a8.js","assets/_setToString-dbbee35a.js","assets/index-92da7081.js","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/button-1ef38c18.js","assets/index-5cf0ced5.js","assets/index-8cbce62d.css","assets/index-03b68134.js","assets/download-5fc3c841.js","assets/jszip.min-ed3d3f78.js","assets/index-6cc9bc74.js","assets/index-eec458eb.css","assets/useAsync-6c98bbac.js","assets/useAsyncFn-ffd323fd.js","assets/PlaySquareOutlined-04ce0d9a.js","assets/index-31c782a8.css"])),8:q.lazy(()=>Jt(()=>import("./index-678de628.js"),["assets/index-678de628.js","assets/parser-c740d6a8.js","assets/_setToString-dbbee35a.js","assets/scheduler-a7fa9c3c.js","assets/schedulePool-cc4538c2.js","assets/index-cc0634fc.js","assets/button-1ef38c18.js","assets/index-da399111.js","assets/Dropdown-ba03bf54.js","assets/TextArea-27ba039d.js","assets/progress-096a2c96.js","assets/index-abb14cca.js","assets/index-19199d65.js","assets/DeleteOutlined-a45fceaa.js","assets/DownloadOutlined-80f8a347.js","assets/jszip.min-ed3d3f78.js","assets/index-6cc9bc74.js","assets/index-eec458eb.css","assets/index-5cf0ced5.js","assets/index-8cbce62d.css","assets/PlaySquareOutlined-04ce0d9a.js","assets/index-59f8c77b.css"])),9:q.lazy(()=>Jt(()=>import("./index-782123f7.js"),["assets/index-782123f7.js","assets/index-54683183.js","assets/_setToString-dbbee35a.js","assets/TextArea-27ba039d.js","assets/button-1ef38c18.js","assets/util-2d38567b.js","assets/Dropdown-ba03bf54.js","assets/ScoreEncoder-15dcb3c3.js","assets/parser-c740d6a8.js","assets/index-a475ddbb.js","assets/index-92da7081.js","assets/confirm-19f7e7d5.js","assets/processCompressedAESFile-983b93dd.js","assets/Table-2396b2d2.js","assets/index-da399111.js","assets/progress-096a2c96.js","assets/index-cc0634fc.js","assets/useDebounce-2fd3a0bc.js","assets/index-2899652d.js","assets/index-abb14cca.js","assets/DeleteOutlined-a45fceaa.js","assets/Table-5199d45f.css","assets/download-5fc3c841.js","assets/jszip.min-ed3d3f78.js","assets/useAsyncFn-ffd323fd.js","assets/useAsync-6c98bbac.js","assets/DownloadOutlined-80f8a347.js","assets/index-5ecf8580.css"])),10:q.lazy(()=>Jt(()=>import("./gauge-d8f53ae9.js"),["assets/gauge-d8f53ae9.js","assets/gaugeRendererGL-41abf4c6.js"])),11:q.lazy(()=>Jt(()=>import("./font-69cafe12.js"),["assets/font-69cafe12.js","assets/font-f4923eb1.css"])),12:q.lazy(()=>Jt(()=>import("./index-039cd1e1.js"),["assets/index-039cd1e1.js","assets/index-55bfb99e.js","assets/parser-c740d6a8.js","assets/_setToString-dbbee35a.js","assets/index-a475ddbb.js","assets/index-92da7081.js","assets/tiny-invariant-5c4293b4.js","assets/index-03b68134.js","assets/download-5fc3c841.js","assets/jszip.min-ed3d3f78.js","assets/util-2d38567b.js","assets/TextArea-27ba039d.js","assets/button-1ef38c18.js","assets/confirm-19f7e7d5.js","assets/schedulePool-cc4538c2.js","assets/index-2899652d.js","assets/progress-096a2c96.js","assets/index-abb14cca.js","assets/index-c896f3ee.css","assets/index-6cc9bc74.js","assets/index-eec458eb.css","assets/index-19199d65.js","assets/DeleteOutlined-a45fceaa.js","assets/DownloadOutlined-80f8a347.js","assets/index-3adfbdb0.css"]))}}}const Sme={},_me=e=>q.createElement(Ru,{context:Sme},e),Ome=Object.freeze(Object.defineProperty({__proto__:null,innerProvider:_me},Symbol.toStringTag,{value:"Module"}));var b2={exports:{}},mh={};/** * @license React * react-jsx-runtime.production.min.js * diff --git a/dist/assets/useAsync-6c98bbac.js b/dist/assets/useAsync-6c98bbac.js new file mode 100644 index 0000000000000000000000000000000000000000..e6fae26618a566350ffac3f191c68dd411134fa2 --- /dev/null +++ b/dist/assets/useAsync-6c98bbac.js @@ -0,0 +1 @@ +import{r as u}from"./umi-37873494.js";import{u as c}from"./useAsyncFn-ffd323fd.js";function f(o,r){r===void 0&&(r=[]);var t=c(o,r,{loading:!0}),n=t[0],a=t[1];return u.useEffect(function(){a()},[a]),n}export{f as u}; diff --git a/dist/assets/useAsync-ce2d9ddd.js b/dist/assets/useAsync-ce2d9ddd.js deleted file mode 100644 index fec1f4edcd4569fbfeabdaaca6d2c75ab4c774ec..0000000000000000000000000000000000000000 --- a/dist/assets/useAsync-ce2d9ddd.js +++ /dev/null @@ -1 +0,0 @@ -import{r as u}from"./umi-91f9d113.js";import{u as c}from"./useAsyncFn-4bca5482.js";function f(o,r){r===void 0&&(r=[]);var t=c(o,r,{loading:!0}),n=t[0],a=t[1];return u.useEffect(function(){a()},[a]),n}export{f as u}; diff --git a/dist/assets/useAsyncFn-4bca5482.js b/dist/assets/useAsyncFn-ffd323fd.js similarity index 82% rename from dist/assets/useAsyncFn-4bca5482.js rename to dist/assets/useAsyncFn-ffd323fd.js index fc3b1a30e1be6b61478b29f90e378d05365bf03b..e412ae7fa2e9c9c43e72bc2c38d4617cb86b4d59 100644 --- a/dist/assets/useAsyncFn-4bca5482.js +++ b/dist/assets/useAsyncFn-ffd323fd.js @@ -1 +1 @@ -import{A as d}from"./index-b284aaac.js";import{r as n}from"./umi-91f9d113.js";function m(){var e=n.useRef(!1),t=n.useCallback(function(){return e.current},[]);return n.useEffect(function(){return e.current=!0,function(){e.current=!1}},[]),t}function k(e,t,u){t===void 0&&(t=[]),u===void 0&&(u={loading:!1});var o=n.useRef(0),f=m(),c=n.useState(u),l=c[0],s=c[1],g=n.useCallback(function(){for(var i=[],a=0;a0&&(F=d.map(function(_){return typeof _=="string"||typeof _=="number"?a.createElement(lt,{key:_.toString(),prefixCls:S,disabled:x,value:_,checked:s===_},_):a.createElement(lt,{key:"radio-group-value-options-".concat(_.value),prefixCls:S,disabled:_.disabled||x,value:_.value,checked:s===_.value,style:_.style},_.label)}));var p=N||i,T=ue(P,"".concat(P,"-").concat(c),w(w({},"".concat(P,"-").concat(p),p),"".concat(P,"-rtl"),l==="rtl"),f);return a.createElement("div",$({},Br(e),{className:T,style:M,onMouseEnter:I,onMouseLeave:R,onFocus:h,onBlur:k,id:E,ref:t}),a.createElement(vn,{value:{onChange:m,value:s,disabled:e.disabled,name:e.name,optionType:e.optionType}},F))});const yn=a.memo(Cn);var xn=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,n=Object.getOwnPropertySymbols(e);l0?"-".concat(b):b,g=!!C,N=b==="left"&&m!=null,M=b==="right"&&m!=null,E=ue(c,"".concat(c,"-").concat(o),w(w(w(w(w(w(w({},"".concat(c,"-with-text"),g),"".concat(c,"-with-text").concat(x),g),"".concat(c,"-dashed"),!!f),"".concat(c,"-plain"),!!d),"".concat(c,"-rtl"),l==="rtl"),"".concat(c,"-no-default-orientation-margin-left"),N),"".concat(c,"-no-default-orientation-margin-right"),M),v),I=$($({},N&&{marginLeft:m}),M&&{marginRight:m});return a.createElement("div",$({className:E},y,{role:"separator"}),C&&o!=="vertical"&&a.createElement("span",{className:"".concat(c,"-inner-text"),style:I},C))};const Ya=On;function it(e){var t=a.useState(e),r=ee(t,2),n=r[0],l=r[1];return a.useEffect(function(){var i=setTimeout(function(){l(e)},e.length?0:10);return function(){clearTimeout(i)}},[e]),n}var Lt=[];function mt(e,t,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;return{key:typeof e=="string"?e:"".concat(r,"-").concat(n),error:e,errorStatus:t}}function ar(e){var t=e.help,r=e.helpStatus,n=e.errors,l=n===void 0?Lt:n,i=e.warnings,u=i===void 0?Lt:i,o=e.className,s=e.fieldId,b=e.onVisibleChanged,m=a.useContext(Et),v=m.prefixCls,C=a.useContext(Ne),f=C.getPrefixCls,d="".concat(v,"-item-explain"),y=f(),c=it(l),x=it(u),g=a.useMemo(function(){return t!=null?[mt(t,r,"help")]:[].concat(de(c.map(function(M,E){return mt(M,"error","error",E)})),de(x.map(function(M,E){return mt(M,"warning","warning",E)})))},[t,r,c,x]),N={};return s&&(N.id="".concat(s,"_help")),a.createElement(gr,{motionDeadline:$t.motionDeadline,motionName:"".concat(y,"-show-help"),visible:!!g.length,onVisibleChanged:b},function(M){var E=M.className,I=M.style;return a.createElement("div",$({},N,{className:ue(d,E,o),style:I,role:"alert"}),a.createElement(hr,$({keys:g},$t,{motionName:"".concat(y,"-show-help-item"),component:!1}),function(R){var h=R.key,k=R.error,S=R.errorStatus,P=R.className,F=R.style;return a.createElement("div",{key:h,className:ue(P,w({},"".concat(d,"-").concat(S),S)),style:F},k)}))})}function Vt(e){return typeof e=="object"&&e!=null&&e.nodeType===1}function jt(e,t){return(!t||e!=="hidden")&&e!=="visible"&&e!=="clip"}function gt(e,t){if(e.clientHeightt||i>e&&u=t&&o>=r?i-e-n:u>t&&or?u-t+l:0}var At=function(e,t){var r=window,n=t.scrollMode,l=t.block,i=t.inline,u=t.boundary,o=t.skipOverflowHiddenElements,s=typeof u=="function"?u:function(ie){return ie!==u};if(!Vt(e))throw new TypeError("Invalid target");for(var b,m,v=document.scrollingElement||document.documentElement,C=[],f=e;Vt(f)&&s(f);){if((f=(m=(b=f).parentElement)==null?b.getRootNode().host||null:m)===v){C.push(f);break}f!=null&&f===document.body&>(f)&&!gt(document.documentElement)||f!=null&>(f,o)&&C.push(f)}for(var d=r.visualViewport?r.visualViewport.width:innerWidth,y=r.visualViewport?r.visualViewport.height:innerHeight,c=window.scrollX||pageXOffset,x=window.scrollY||pageYOffset,g=e.getBoundingClientRect(),N=g.height,M=g.width,E=g.top,I=g.right,R=g.bottom,h=g.left,k=l==="start"||l==="nearest"?E:l==="end"?R:E+N/2,S=i==="center"?h+M/2:i==="end"?I:h,P=[],F=0;F=0&&h>=0&&R<=y&&I<=d&&E>=O&&R<=W&&h>=K&&I<=L)return P;var Y=getComputedStyle(p),ne=parseInt(Y.borderLeftWidth,10),X=parseInt(Y.borderTopWidth,10),te=parseInt(Y.borderRightWidth,10),D=parseInt(Y.borderBottomWidth,10),G=0,U=0,ce="offsetWidth"in p?p.offsetWidth-p.clientWidth-ne-te:0,Q="offsetHeight"in p?p.offsetHeight-p.clientHeight-X-D:0,B="offsetWidth"in p?p.offsetWidth===0?0:V/p.offsetWidth:0,ae="offsetHeight"in p?p.offsetHeight===0?0:_/p.offsetHeight:0;if(v===p)G=l==="start"?k:l==="end"?k-y:l==="nearest"?nt(x,x+y,y,X,D,x+k,x+k+N,N):k-y/2,U=i==="start"?S:i==="center"?S-d/2:i==="end"?S-d:nt(c,c+d,d,ne,te,c+S,c+S+M,M),G=Math.max(0,G+x),U=Math.max(0,U+c);else{G=l==="start"?k-O-X:l==="end"?k-W+D+Q:l==="nearest"?nt(O,W,_,X,D+Q,k,k+N,N):k-(O+_/2)+Q/2,U=i==="start"?S-K-ne:i==="center"?S-(K+V/2)+ce/2:i==="end"?S-L+te+ce:nt(K,L,V,ne,te+ce,S,S+M,M);var le=p.scrollLeft,re=p.scrollTop;k+=re-(G=Math.max(0,Math.min(re+G/ae,p.scrollHeight-_/ae+Q))),S+=le-(U=Math.max(0,Math.min(le+U/B,p.scrollWidth-V/B+ce)))}P.push({el:p,top:G,left:U})}return P};function lr(e){return e===Object(e)&&Object.keys(e).length!==0}function Pn(e,t){t===void 0&&(t="auto");var r="scrollBehavior"in document.body.style;e.forEach(function(n){var l=n.el,i=n.top,u=n.left;l.scroll&&r?l.scroll({top:i,left:u,behavior:t}):(l.scrollTop=i,l.scrollLeft=u)})}function Fn(e){return e===!1?{block:"end",inline:"nearest"}:lr(e)?e:{block:"start",inline:"nearest"}}function $n(e,t){var r=e.isConnected||e.ownerDocument.documentElement.contains(e);if(lr(t)&&typeof t.behavior=="function")return t.behavior(r?At(e,t):[]);if(r){var n=Fn(t);return Pn(At(e,n),n.behavior)}}var Tn=["parentNode"],Dn="form_item";function Ge(e){return e===void 0||e===!1?[]:Array.isArray(e)?e:[e]}function ir(e,t){if(e.length){var r=e.join("_");if(t)return"".concat(t,"_").concat(r);var n=Tn.includes(r);return n?"".concat(Dn,"_").concat(r):r}}function qt(e){var t=Ge(e);return t.join("_")}function or(e){var t=Tr(),r=ee(t,1),n=r[0],l=a.useRef({}),i=a.useMemo(function(){return e??$($({},n),{__INTERNAL__:{itemRef:function(o){return function(s){var b=qt(o);s?l.current[b]=s:delete l.current[b]}}},scrollToField:function(o){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},b=Ge(o),m=ir(b,i.__INTERNAL__.name),v=m?document.getElementById(m):null;v&&$n(v,$({scrollMode:"if-needed",block:"nearest"},s))},getFieldInstance:function(o){var s=qt(o);return l.current[s]}})},[e,n]);return[i]}var Ln=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,n=Object.getOwnPropertySymbols(e);l0||D.length>0||e.extra){var Se=[];(e.help||te.length>0)&&Se.push("".concat(re,"_help")),e.extra&&Se.push("".concat(re,"_extra")),oe["aria-describedby"]=Se.join(" ")}te.length>0&&(oe["aria-invalid"]="true"),ie&&(oe["aria-required"]="true"),Mr(o)&&(oe.ref=G(le,o));var Re=new Set([].concat(de(Ge(C)),de(Ge(R))));Re.forEach(function(Ce){oe[Ce]=function(){for(var ye,$e,Te,Me,ge,_e=arguments.length,he=new Array(_e),pe=0;pe<_e;pe++)he[pe]=arguments[pe];(Te=A[Ce])===null||Te===void 0||(ye=Te).call.apply(ye,[A].concat(he)),(ge=(Me=o.props)[Ce])===null||ge===void 0||($e=ge).call.apply($e,[Me].concat(he))}});var qe=[oe["aria-required"],oe["aria-invalid"],oe["aria-describedby"]];ve=a.createElement(ta,{value:A[e.valuePropName||"value"],update:o,childProps:qe},ht(o,oe))}else N&&(i||n)&&!h?ve=o(ae):ve=o}return U(ve,re,ie)})}var ur=na;ur.useStatus=Hn;const aa=ur;var la=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,n=Object.getOwnPropertySymbols(e);lNumber.MAX_SAFE_INTEGER)return String(bt()?BigInt(e).toString():Number.MAX_SAFE_INTEGER);if(eNumber.MAX_SAFE_INTEGER)return new e(Number.MAX_SAFE_INTEGER);if(l0&&arguments[0]!==void 0?arguments[0]:!0;return r?this.isInvalidate()?"":st(this.number):this.origin}}]),e}(),sa=function(){function e(t){if(Yt(this,e),this.origin="",this.negative=void 0,this.integer=void 0,this.decimal=void 0,this.decimalLen=void 0,this.empty=void 0,this.nan=void 0,!t&&t!==0||!String(t).trim()){this.empty=!0;return}if(this.origin=String(t),t==="-"){this.nan=!0;return}var r=t;if(Nt(r)&&(r=Number(r)),r=typeof r=="string"?r:st(r),wt(r)){var n=je(r);this.negative=n.negative;var l=n.trimStr.split(".");this.integer=BigInt(l[0]);var i=l[1]||"0";this.decimal=BigInt(i),this.decimalLen=i.length}else this.nan=!0}return Xt(e,[{key:"getMark",value:function(){return this.negative?"-":""}},{key:"getIntegerStr",value:function(){return this.integer.toString()}},{key:"getDecimalStr",value:function(){return this.decimal.toString().padStart(this.decimalLen,"0")}},{key:"alignDecimal",value:function(r){var n="".concat(this.getMark()).concat(this.getIntegerStr()).concat(this.getDecimalStr().padEnd(r,"0"));return BigInt(n)}},{key:"negate",value:function(){var r=new e(this.toString());return r.negative=!r.negative,r}},{key:"add",value:function(r){if(this.isInvalidate())return new e(r);var n=new e(r);if(n.isInvalidate())return this;var l=Math.max(this.getDecimalStr().length,n.getDecimalStr().length),i=this.alignDecimal(l),u=n.alignDecimal(l),o=(i+u).toString(),s=je(o),b=s.negativeStr,m=s.trimStr,v="".concat(b).concat(m.padStart(l+1,"0"));return new e("".concat(v.slice(0,-l),".").concat(v.slice(-l)))}},{key:"isEmpty",value:function(){return this.empty}},{key:"isNaN",value:function(){return this.nan}},{key:"isInvalidate",value:function(){return this.isEmpty()||this.isNaN()}},{key:"equals",value:function(r){return this.toString()===(r==null?void 0:r.toString())}},{key:"lessEquals",value:function(r){return this.add(r.negate().toString()).toNumber()<=0}},{key:"toNumber",value:function(){return this.isNaN()?NaN:Number(this.toString())}},{key:"toString",value:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return r?this.isInvalidate()?"":je("".concat(this.getMark()).concat(this.getIntegerStr(),".").concat(this.getDecimalStr())).fullStr:this.origin}}]),e}();function we(e){return bt()?new sa(e):new ca(e)}function at(e,t,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e==="")return"";var l=je(e),i=l.negativeStr,u=l.integerStr,o=l.decimalStr,s="".concat(t).concat(o),b="".concat(i).concat(u);if(r>=0){var m=Number(o[r]);if(m>=5&&!n){var v=we(e).add("".concat(i,"0.").concat("0".repeat(r)).concat(10-m));return at(v.toString(),t,r,n)}return r===0?b:"".concat(b).concat(t).concat(o.padEnd(r,"0").slice(0,r))}return s===".0"?b:"".concat(b).concat(s)}var fa=200,da=600;function va(e){var t=e.prefixCls,r=e.upNode,n=e.downNode,l=e.upDisabled,i=e.downDisabled,u=e.onStep,o=a.useRef(),s=a.useRef();s.current=u;var b=function(c,x){c.preventDefault(),s.current(x);function g(){s.current(x),o.current=setTimeout(g,fa)}o.current=setTimeout(g,da)},m=function(){clearTimeout(o.current)};if(a.useEffect(function(){return m},[]),zr())return null;var v="".concat(t,"-handler"),C=ue(v,"".concat(v,"-up"),w({},"".concat(v,"-up-disabled"),l)),f=ue(v,"".concat(v,"-down"),w({},"".concat(v,"-down-disabled"),i)),d={unselectable:"on",role:"button",onMouseUp:m,onMouseLeave:m};return a.createElement("div",{className:"".concat(v,"-wrap")},a.createElement("span",$({},d,{onMouseDown:function(c){b(c,!0)},"aria-label":"Increase Value","aria-disabled":l,className:C}),r||a.createElement("span",{unselectable:"on",className:"".concat(t,"-handler-up-inner")})),a.createElement("span",$({},d,{onMouseDown:function(c){b(c,!1)},"aria-label":"Decrease Value","aria-disabled":i,className:f}),n||a.createElement("span",{unselectable:"on",className:"".concat(t,"-handler-down-inner")})))}function ma(e,t){var r=a.useRef(null);function n(){try{var i=e.selectionStart,u=e.selectionEnd,o=e.value,s=o.substring(0,i),b=o.substring(u);r.current={start:i,end:u,value:o,beforeTxt:s,afterTxt:b}}catch{}}function l(){if(e&&r.current&&t)try{var i=e.value,u=r.current,o=u.beforeTxt,s=u.afterTxt,b=u.start,m=i.length;if(i.endsWith(s))m=i.length-r.current.afterTxt.length;else if(i.startsWith(o))m=o.length;else{var v=o[b-1],C=i.indexOf(v,b-1);C!==-1&&(m=C+1)}e.setSelectionRange(m,m)}catch(f){_r(!1,"Something warning of cursor restore. Please fire issue about this: ".concat(f.message))}}return[n,l]}const ga=function(){var e=a.useRef(0),t=function(){Be.cancel(e.current)};return a.useEffect(function(){return t},[]),function(r){t(),e.current=Be(function(){r()})}};var ha=["prefixCls","className","style","min","max","step","defaultValue","value","disabled","readOnly","upHandler","downHandler","keyboard","controls","stringMode","parser","formatter","precision","decimalSeparator","onChange","onInput","onPressEnter","onStep"],Wt=function(t,r){return t||r.isEmpty()?r.toString():r.toNumber()},Bt=function(t){var r=we(t);return r.isInvalidate()?null:r},cr=a.forwardRef(function(e,t){var r,n=e.prefixCls,l=n===void 0?"rc-input-number":n,i=e.className,u=e.style,o=e.min,s=e.max,b=e.step,m=b===void 0?1:b,v=e.defaultValue,C=e.value,f=e.disabled,d=e.readOnly,y=e.upHandler,c=e.downHandler,x=e.keyboard,g=e.controls,N=g===void 0?!0:g,M=e.stringMode,E=e.parser,I=e.formatter,R=e.precision,h=e.decimalSeparator,k=e.onChange,S=e.onInput,P=e.onPressEnter,F=e.onStep,p=pt(e,ha),T="".concat(l,"-input"),_=a.useRef(null),V=a.useState(!1),O=ee(V,2),L=O[0],W=O[1],K=a.useRef(!1),Y=a.useRef(!1),ne=a.useRef(!1),X=a.useState(function(){return we(C??v)}),te=ee(X,2),D=te[0],G=te[1];function U(q){C===void 0&&G(q)}var ce=a.useCallback(function(q,j){if(!j)return R>=0?R:Math.max(Qe(q),Qe(m))},[R,m]),Q=a.useCallback(function(q){var j=String(q);if(E)return E(j);var Z=j;return h&&(Z=Z.replace(h,".")),Z.replace(/[^\w.-]+/g,"")},[E,h]),B=a.useRef(""),ae=a.useCallback(function(q,j){if(I)return I(q,{userTyping:j,input:String(B.current)});var Z=typeof q=="number"?st(q):q;if(!j){var z=ce(Z,j);if(wt(Z)&&(h||z>=0)){var xe=h||".";Z=at(Z,xe,z)}}return Z},[I,ce,h]),le=a.useState(function(){var q=v??C;return D.isInvalidate()&&["string","number"].includes(Fe(q))?Number.isNaN(q)?"":q:ae(D.toString(),!1)}),re=ee(le,2),ie=re[0],A=re[1];B.current=ie;function ve(q,j){A(ae(q.isInvalidate()?q.toString(!1):q.toString(!j),j))}var oe=a.useMemo(function(){return Bt(s)},[s,R]),Se=a.useMemo(function(){return Bt(o)},[o,R]),Re=a.useMemo(function(){return!oe||!D||D.isInvalidate()?!1:oe.lessEquals(D)},[oe,D]),qe=a.useMemo(function(){return!Se||!D||D.isInvalidate()?!1:D.lessEquals(Se)},[Se,D]),Ce=ma(_.current,L),ye=ee(Ce,2),$e=ye[0],Te=ye[1],Me=function(j){return oe&&!j.lessEquals(oe)?oe:Se&&!Se.lessEquals(j)?Se:null},ge=function(j){return!Me(j)},_e=function(j,Z){var z=j,xe=ge(z)||z.isEmpty();if(!z.isEmpty()&&!Z&&(z=Me(z)||z,xe=!0),!d&&!f&&xe){var De=z.toString(),Le=ce(De,Z);return Le>=0&&(z=we(at(De,".",Le)),ge(z)||(z=we(at(De,".",Le,!0)))),z.equals(D)||(U(z),k==null||k(z.isEmpty()?null:Wt(M,z)),C===void 0&&ve(z,Z)),z}return D},he=ga(),pe=function q(j){if($e(),A(j),!Y.current){var Z=Q(j),z=we(Z);z.isNaN()||_e(z,!0)}S==null||S(j),he(function(){var xe=j;E||(xe=j.replace(/。/g,".")),xe!==j&&q(xe)})},Ie=function(){Y.current=!0},Ue=function(){Y.current=!1,pe(_.current.value)},Ze=function(j){pe(j.target.value)},Je=function(j){var Z;if(!(j&&Re||!j&&qe)){K.current=!1;var z=we(ne.current?zt(m):m);j||(z=z.negate());var xe=(D||we(0)).add(z.toString()),De=_e(xe,!1);F==null||F(Wt(M,De),{offset:ne.current?zt(m):m,type:j?"up":"down"}),(Z=_.current)===null||Z===void 0||Z.focus()}},et=function(j){var Z=we(Q(ie)),z=Z;Z.isNaN()?z=D:z=_e(Z,j),C!==void 0?ve(D,!1):z.isNaN()||ve(z,!1)},tt=function(){K.current=!0},Ke=function(j){var Z=j.which,z=j.shiftKey;K.current=!0,z?ne.current=!0:ne.current=!1,Z===Ee.ENTER&&(Y.current||(K.current=!1),et(!1),P==null||P(j)),x!==!1&&!Y.current&&[Ee.UP,Ee.DOWN].includes(Z)&&(Je(Ee.UP===Z),j.preventDefault())},rt=function(){K.current=!1,ne.current=!1},ft=function(){et(!1),W(!1),K.current=!1};return dt(function(){D.isInvalidate()||ve(D,!1)},[R]),dt(function(){var q=we(C);G(q);var j=we(Q(ie));(!q.equals(j)||!K.current||I)&&ve(q,K.current)},[C]),dt(function(){I&&Te()},[ie]),a.createElement("div",{className:ue(l,i,(r={},w(r,"".concat(l,"-focused"),L),w(r,"".concat(l,"-disabled"),f),w(r,"".concat(l,"-readonly"),d),w(r,"".concat(l,"-not-a-number"),D.isNaN()),w(r,"".concat(l,"-out-of-range"),!D.isInvalidate()&&!ge(D)),r)),style:u,onFocus:function(){W(!0)},onBlur:ft,onKeyDown:Ke,onKeyUp:rt,onCompositionStart:Ie,onCompositionEnd:Ue,onBeforeInput:tt},N&&a.createElement(va,{prefixCls:l,upNode:y,downNode:c,upDisabled:Re,downDisabled:qe,onStep:Je}),a.createElement("div",{className:"".concat(T,"-wrap")},a.createElement("input",$({autoComplete:"off",role:"spinbutton","aria-valuemin":o,"aria-valuemax":s,"aria-valuenow":D.isInvalidate()?null:D.toString(),step:m},p,{ref:ot(_,t),className:T,value:ie,onChange:Ze,disabled:f,readOnly:d}))))});cr.displayName="InputNumber";var ba=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,n=Object.getOwnPropertySymbols(e);l"u"?F:a.createElement("span",{className:"".concat(h,"-handler-up-inner")},I.upIcon),p=typeof I.downIcon>"u"?p:a.createElement("span",{className:"".concat(h,"-handler-down-inner")},I.downIcon));var _=a.useContext(ut),V=_.hasFeedback,O=_.status,L=_.isFormItemInput,W=_.feedbackIcon,K=Wr(O,E),Y=S||C||i,ne=a.useContext(xt),X=f??ne,te=ue(w(w(w(w(w({},"".concat(h,"-lg"),Y==="large"),"".concat(h,"-sm"),Y==="small"),"".concat(h,"-rtl"),l==="rtl"),"".concat(h,"-borderless"),!N),"".concat(h,"-in-form-item"),L),vt(h,K),P,v),D=a.createElement(cr,$({ref:m,disabled:X,className:te,upHandler:F,downHandler:p,prefixCls:h,readOnly:M,controls:T},R));if(x!=null||V){var G=ue("".concat(h,"-affix-wrapper"),vt("".concat(h,"-affix-wrapper"),K,V),w(w(w(w(w(w(w(w({},"".concat(h,"-affix-wrapper-focused"),s),"".concat(h,"-affix-wrapper-disabled"),e.disabled),"".concat(h,"-affix-wrapper-sm"),i==="small"),"".concat(h,"-affix-wrapper-lg"),i==="large"),"".concat(h,"-affix-wrapper-rtl"),l==="rtl"),"".concat(h,"-affix-wrapper-readonly"),M),"".concat(h,"-affix-wrapper-borderless"),!N),"".concat(v),!(y||c)&&v));D=a.createElement("div",{className:G,style:e.style,onMouseUp:function(){return m.current.focus()}},x&&a.createElement("span",{className:"".concat(h,"-prefix")},x),ht(D,{style:null,value:e.value,onFocus:function(ie){var A;b(!0),(A=e.onFocus)===null||A===void 0||A.call(e,ie)},onBlur:function(ie){var A;b(!1),(A=e.onBlur)===null||A===void 0||A.call(e,ie)}}),V&&a.createElement("span",{className:"".concat(h,"-suffix")},W))}if(y!=null||c!=null){var U="".concat(h,"-group"),ce="".concat(U,"-addon"),Q=y?a.createElement("div",{className:ce},y):null,B=c?a.createElement("div",{className:ce},c):null,ae=ue("".concat(h,"-wrapper"),U,w({},"".concat(U,"-rtl"),l==="rtl")),le=ue("".concat(h,"-group-wrapper"),w(w(w({},"".concat(h,"-group-wrapper-sm"),i==="small"),"".concat(h,"-group-wrapper-lg"),i==="large"),"".concat(h,"-group-wrapper-rtl"),l==="rtl"),vt("".concat(h,"-group-wrapper"),K,V),v);D=a.createElement("div",{className:le,style:e.style},a.createElement("div",{className:ae},Q&&a.createElement(Dt,null,a.createElement(Tt,{status:!0,override:!0},Q)),ht(D,{style:null,disabled:X}),B&&a.createElement(Dt,null,a.createElement(Tt,{status:!0,override:!0},B))))}return D});const Qa=Ca;var Ae=a.createContext({min:0,max:0,direction:"ltr",step:1,includedStart:0,includedEnd:0,tabIndex:0});function Ct(e,t,r){return(e-t)/(r-t)}function Rt(e,t,r,n){var l=Ct(t,r,n),i={};switch(e){case"rtl":i.right="".concat(l*100,"%"),i.transform="translateX(50%)";break;case"btt":i.bottom="".concat(l*100,"%"),i.transform="translateY(50%)";break;case"ttb":i.top="".concat(l*100,"%"),i.transform="translateY(-50%)";break;default:i.left="".concat(l*100,"%"),i.transform="translateX(-50%)";break}return i}function We(e,t){return Array.isArray(e)?e[t]:e}var ya=["prefixCls","value","valueIndex","onStartMove","style","render","dragging","onOffsetChange"],xa=a.forwardRef(function(e,t){var r,n,l=e.prefixCls,i=e.value,u=e.valueIndex,o=e.onStartMove,s=e.style,b=e.render,m=e.dragging,v=e.onOffsetChange,C=pt(e,ya),f=a.useContext(Ae),d=f.min,y=f.max,c=f.direction,x=f.disabled,g=f.range,N=f.tabIndex,M=f.ariaLabelForHandle,E=f.ariaLabelledByForHandle,I=f.ariaValueTextFormatterForHandle,R="".concat(l,"-handle"),h=function(p){x||o(p,u)},k=function(p){if(!x){var T=null;switch(p.which||p.keyCode){case Ee.LEFT:T=c==="ltr"||c==="btt"?-1:1;break;case Ee.RIGHT:T=c==="ltr"||c==="btt"?1:-1;break;case Ee.UP:T=c!=="ttb"?1:-1;break;case Ee.DOWN:T=c!=="ttb"?-1:1;break;case Ee.HOME:T="min";break;case Ee.END:T="max";break;case Ee.PAGE_UP:T=2;break;case Ee.PAGE_DOWN:T=-2;break}T!==null&&(p.preventDefault(),v(T,u))}},S=Rt(c,i,d,y),P=a.createElement("div",$({ref:t,className:ue(R,(r={},w(r,"".concat(R,"-").concat(u+1),g),w(r,"".concat(R,"-dragging"),m),r)),style:be(be({},S),s),onMouseDown:h,onTouchStart:h,onKeyDown:k,tabIndex:x?null:We(N,u),role:"slider","aria-valuemin":d,"aria-valuemax":y,"aria-valuenow":i,"aria-disabled":x,"aria-label":We(M,u),"aria-labelledby":We(E,u),"aria-valuetext":(n=We(I,u))===null||n===void 0?void 0:n(i)},C));return b&&(P=b(P,{index:u,prefixCls:l,value:i,dragging:m})),P}),Sa=["prefixCls","style","onStartMove","onOffsetChange","values","handleRender","draggingIndex"],pa=a.forwardRef(function(e,t){var r=e.prefixCls,n=e.style,l=e.onStartMove,i=e.onOffsetChange,u=e.values,o=e.handleRender,s=e.draggingIndex,b=pt(e,Sa),m=a.useRef({});return a.useImperativeHandle(t,function(){return{focus:function(C){var f;(f=m.current[C])===null||f===void 0||f.focus()}}}),a.createElement(a.Fragment,null,u.map(function(v,C){return a.createElement(xa,$({ref:function(d){d?m.current[C]=d:delete m.current[C]},dragging:s===C,prefixCls:r,style:We(n,C),key:C,value:v,valueIndex:C,onStartMove:l,onOffsetChange:i,render:o},b))}))});function Ut(e){var t="touches"in e?e.touches[0]:e;return{pageX:t.pageX,pageY:t.pageY}}function Ea(e,t,r,n,l,i,u,o,s){var b=a.useState(null),m=ee(b,2),v=m[0],C=m[1],f=a.useState(-1),d=ee(f,2),y=d[0],c=d[1],x=a.useState(r),g=ee(x,2),N=g[0],M=g[1],E=a.useState(r),I=ee(E,2),R=I[0],h=I[1],k=a.useRef(null),S=a.useRef(null);a.useEffect(function(){y===-1&&M(r)},[r,y]),a.useEffect(function(){return function(){document.removeEventListener("mousemove",k.current),document.removeEventListener("mouseup",S.current),document.removeEventListener("touchmove",k.current),document.removeEventListener("touchend",S.current)}},[]);var P=function(O,L){N.some(function(W,K){return W!==O[K]})&&(L!==void 0&&C(L),M(O),u(O))},F=function(O,L){if(O===-1){var W=R[0],K=R[R.length-1],Y=n-W,ne=l-K,X=L*(l-n);X=Math.max(X,Y),X=Math.min(X,ne);var te=i(W+X);X=te-W;var D=R.map(function(Q){return Q+X});P(D)}else{var G=(l-n)*L,U=de(N);U[O]=R[O];var ce=s(U,G,O,"dist");P(ce.values,ce.value)}},p=a.useRef(F);p.current=F;var T=function(O,L){O.stopPropagation();var W=r[L];c(L),C(W),h(r);var K=Ut(O),Y=K.pageX,ne=K.pageY,X=function(G){G.preventDefault();var U=Ut(G),ce=U.pageX,Q=U.pageY,B=ce-Y,ae=Q-ne,le=e.current.getBoundingClientRect(),re=le.width,ie=le.height,A;switch(t){case"btt":A=-ae/ie;break;case"ttb":A=ae/ie;break;case"rtl":A=-B/re;break;default:A=B/re}p.current(L,A)},te=function D(G){G.preventDefault(),document.removeEventListener("mouseup",D),document.removeEventListener("mousemove",X),document.removeEventListener("touchend",D),document.removeEventListener("touchmove",X),k.current=null,S.current=null,c(-1),o()};document.addEventListener("mouseup",te),document.addEventListener("mousemove",X),document.addEventListener("touchend",te),document.addEventListener("touchmove",X),k.current=X,S.current=te},_=a.useMemo(function(){var V=de(r).sort(function(L,W){return L-W}),O=de(N).sort(function(L,W){return L-W});return V.every(function(L,W){return L===O[W]})?N:r},[r,N]);return[y,v,_,T]}function Na(e){var t=e.prefixCls,r=e.style,n=e.start,l=e.end,i=e.index,u=e.onStartMove,o=a.useContext(Ae),s=o.direction,b=o.min,m=o.max,v=o.disabled,C=o.range,f="".concat(t,"-track"),d=Ct(n,b,m),y=Ct(l,b,m),c=function(N){!v&&u&&u(N,-1)},x={};switch(s){case"rtl":x.right="".concat(d*100,"%"),x.width="".concat(y*100-d*100,"%");break;case"btt":x.bottom="".concat(d*100,"%"),x.height="".concat(y*100-d*100,"%");break;case"ttb":x.top="".concat(d*100,"%"),x.height="".concat(y*100-d*100,"%");break;default:x.left="".concat(d*100,"%"),x.width="".concat(y*100-d*100,"%")}return a.createElement("div",{className:ue(f,C&&"".concat(f,"-").concat(i+1)),style:be(be({},x),r),onMouseDown:c,onTouchStart:c})}function wa(e){var t=e.prefixCls,r=e.style,n=e.values,l=e.startPoint,i=e.onStartMove,u=a.useContext(Ae),o=u.included,s=u.range,b=u.min,m=a.useMemo(function(){if(!s){if(n.length===0)return[];var v=l??b,C=n[0];return[{start:Math.min(v,C),end:Math.max(v,C)}]}for(var f=[],d=0;d3&&arguments[3]!==void 0?arguments[3]:"unit";if(typeof y=="number"){var g,N=d[c],M=N+y,E=[];n.forEach(function(S){E.push(S.value)}),E.push(e,t),E.push(o(N));var I=y>0?1:-1;x==="unit"?E.push(o(N+I*r)):E.push(o(M)),E=E.filter(function(S){return S!==null}).filter(function(S){return y<0?S<=N:S>=N}),x==="unit"&&(E=E.filter(function(S){return S!==N}));var R=x==="unit"?N:M;g=E[0];var h=Math.abs(g-R);if(E.forEach(function(S){var P=Math.abs(S-R);P1){var k=de(d);return k[c]=g,f(k,y-I,c,x)}return g}else{if(y==="min")return e;if(y==="max")return t}},m=function(d,y,c){var x=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"unit",g=d[c],N=b(d,y,c,x);return{value:N,changed:N!==g}},v=function(d){return i===null&&d===0||typeof i=="number"&&d3&&arguments[3]!==void 0?arguments[3]:"unit",g=d.map(s),N=g[c],M=b(g,y,c,x);if(g[c]=M,l===!1){var E=i||0;c>0&&g[c-1]!==N&&(g[c]=Math.max(g[c],g[c-1]+E)),c0;k-=1)for(var S=!0;v(g[k]-g[k-1])&&S;){var P=m(g,-1,k-1);g[k-1]=P.value,S=P.changed}for(var F=g.length-1;F>0;F-=1)for(var p=!0;v(g[F]-g[F-1])&&p;){var T=m(g,-1,F-1);g[F-1]=T.value,p=T.changed}for(var _=0;_=0?F:!1},[F,oe]),Re=a.useMemo(function(){var fe=Object.keys(te||{});return fe.map(function(J){var H=te[J],me={value:Number(J)};return H&&Fe(H)==="object"&&!a.isValidElement(H)&&("label"in H||"style"in H)?(me.style=H.style,me.label=H.label):me.label=H,me}).filter(function(J){var H=J.label;return H||typeof H=="number"}).sort(function(J,H){return J.value-H.value})},[te]),qe=_a(A,ve,oe,Re,S,Se),Ce=ee(qe,2),ye=Ce[0],$e=Ce[1],Te=Gt(N,{value:g}),Me=ee(Te,2),ge=Me[0],_e=Me[1],he=a.useMemo(function(){var fe=ge==null?[]:Array.isArray(ge)?ge:[ge],J=ee(fe,1),H=J[0],me=H===void 0?A:H,se=ge===null?[]:[me];if(M){if(se=de(fe),E||ge===void 0){var ze=E>=0?E+1:2;for(se=se.slice(0,ze);se.length=0&&le.current.focus(fe)}rt(null)},[Ke]);var q=a.useMemo(function(){return p&&oe===null?!1:p},[p,oe]),j=function(){h==null||h(Ie(pe.current))},Z=Ea(re,ie,he,A,ve,ye,Ue,j,$e),z=ee(Z,4),xe=z[0],De=z[1],Le=z[2],sr=z[3],It=function(J,H){sr(J,H),R==null||R(Ie(pe.current))},kt=xe!==-1;a.useEffect(function(){if(!kt){var fe=he.lastIndexOf(De);le.current.focus(fe)}},[kt]);var He=a.useMemo(function(){return de(Le).sort(function(fe,J){return fe-J})},[Le]),fr=a.useMemo(function(){return M?[He[0],He[He.length-1]]:[A,He[0]]},[He,M,A]),Mt=ee(fr,2),_t=Mt[0],Ot=Mt[1];a.useImperativeHandle(t,function(){return{focus:function(){le.current.focus(0)},blur:function(){var J=document,H=J.activeElement;re.current.contains(H)&&(H==null||H.blur())}}}),a.useEffect(function(){b&&le.current.focus(0)},[]);var dr=a.useMemo(function(){return{min:A,max:ve,direction:ie,disabled:s,step:oe,included:O,includedStart:_t,includedEnd:Ot,range:M,tabIndex:ce,ariaLabelForHandle:Q,ariaLabelledByForHandle:B,ariaValueTextFormatterForHandle:ae}},[A,ve,ie,s,oe,O,_t,Ot,M,ce,Q,B,ae]);return a.createElement(Ae.Provider,{value:dr},a.createElement("div",{ref:re,className:ue(l,i,(r={},w(r,"".concat(l,"-disabled"),s),w(r,"".concat(l,"-vertical"),_),w(r,"".concat(l,"-horizontal"),!_),w(r,"".concat(l,"-with-marks"),Re.length),r)),style:u,onMouseDown:Je},a.createElement("div",{className:"".concat(l,"-rail"),style:Y}),a.createElement(wa,{prefixCls:l,style:W,values:He,startPoint:L,onStartMove:q?It:null}),a.createElement(Ma,{prefixCls:l,marks:Re,dots:D,style:ne,activeStyle:X}),a.createElement(pa,{ref:le,prefixCls:l,style:K,values:Le,draggingIndex:xe,onStartMove:It,onOffsetChange:ft,onFocus:m,onBlur:v,handleRender:G}),a.createElement(Ia,{prefixCls:l,marks:Re,onClick:Ze})))}),Pa=a.forwardRef(function(e,t){var r=e.open,n=a.useRef(null),l=a.useRef(null);function i(){Be.cancel(l.current),l.current=null}function u(){l.current=Be(function(){var o;(o=n.current)===null||o===void 0||o.forcePopupAlign(),l.current=null})}return a.useEffect(function(){return r?u():i(),i},[r,e.title]),a.createElement(Zt,$({ref:ot(n,t)},e))});const Fa=Pa;var $a=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,n=Object.getOwnPropertySymbols(e);l0&&(F=d.map(function(_){return typeof _=="string"||typeof _=="number"?a.createElement(lt,{key:_.toString(),prefixCls:S,disabled:x,value:_,checked:s===_},_):a.createElement(lt,{key:"radio-group-value-options-".concat(_.value),prefixCls:S,disabled:_.disabled||x,value:_.value,checked:s===_.value,style:_.style},_.label)}));var p=N||i,T=ue(P,"".concat(P,"-").concat(c),w(w({},"".concat(P,"-").concat(p),p),"".concat(P,"-rtl"),l==="rtl"),f);return a.createElement("div",$({},Br(e),{className:T,style:M,onMouseEnter:I,onMouseLeave:R,onFocus:h,onBlur:k,id:E,ref:t}),a.createElement(vn,{value:{onChange:m,value:s,disabled:e.disabled,name:e.name,optionType:e.optionType}},F))});const yn=a.memo(Cn);var xn=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,n=Object.getOwnPropertySymbols(e);l0?"-".concat(b):b,g=!!C,N=b==="left"&&m!=null,M=b==="right"&&m!=null,E=ue(c,"".concat(c,"-").concat(o),w(w(w(w(w(w(w({},"".concat(c,"-with-text"),g),"".concat(c,"-with-text").concat(x),g),"".concat(c,"-dashed"),!!f),"".concat(c,"-plain"),!!d),"".concat(c,"-rtl"),l==="rtl"),"".concat(c,"-no-default-orientation-margin-left"),N),"".concat(c,"-no-default-orientation-margin-right"),M),v),I=$($({},N&&{marginLeft:m}),M&&{marginRight:m});return a.createElement("div",$({className:E},y,{role:"separator"}),C&&o!=="vertical"&&a.createElement("span",{className:"".concat(c,"-inner-text"),style:I},C))};const Ya=On;function it(e){var t=a.useState(e),r=ee(t,2),n=r[0],l=r[1];return a.useEffect(function(){var i=setTimeout(function(){l(e)},e.length?0:10);return function(){clearTimeout(i)}},[e]),n}var Lt=[];function mt(e,t,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;return{key:typeof e=="string"?e:"".concat(r,"-").concat(n),error:e,errorStatus:t}}function ar(e){var t=e.help,r=e.helpStatus,n=e.errors,l=n===void 0?Lt:n,i=e.warnings,u=i===void 0?Lt:i,o=e.className,s=e.fieldId,b=e.onVisibleChanged,m=a.useContext(Et),v=m.prefixCls,C=a.useContext(Ne),f=C.getPrefixCls,d="".concat(v,"-item-explain"),y=f(),c=it(l),x=it(u),g=a.useMemo(function(){return t!=null?[mt(t,r,"help")]:[].concat(de(c.map(function(M,E){return mt(M,"error","error",E)})),de(x.map(function(M,E){return mt(M,"warning","warning",E)})))},[t,r,c,x]),N={};return s&&(N.id="".concat(s,"_help")),a.createElement(gr,{motionDeadline:$t.motionDeadline,motionName:"".concat(y,"-show-help"),visible:!!g.length,onVisibleChanged:b},function(M){var E=M.className,I=M.style;return a.createElement("div",$({},N,{className:ue(d,E,o),style:I,role:"alert"}),a.createElement(hr,$({keys:g},$t,{motionName:"".concat(y,"-show-help-item"),component:!1}),function(R){var h=R.key,k=R.error,S=R.errorStatus,P=R.className,F=R.style;return a.createElement("div",{key:h,className:ue(P,w({},"".concat(d,"-").concat(S),S)),style:F},k)}))})}function Vt(e){return typeof e=="object"&&e!=null&&e.nodeType===1}function jt(e,t){return(!t||e!=="hidden")&&e!=="visible"&&e!=="clip"}function gt(e,t){if(e.clientHeightt||i>e&&u=t&&o>=r?i-e-n:u>t&&or?u-t+l:0}var At=function(e,t){var r=window,n=t.scrollMode,l=t.block,i=t.inline,u=t.boundary,o=t.skipOverflowHiddenElements,s=typeof u=="function"?u:function(ie){return ie!==u};if(!Vt(e))throw new TypeError("Invalid target");for(var b,m,v=document.scrollingElement||document.documentElement,C=[],f=e;Vt(f)&&s(f);){if((f=(m=(b=f).parentElement)==null?b.getRootNode().host||null:m)===v){C.push(f);break}f!=null&&f===document.body&>(f)&&!gt(document.documentElement)||f!=null&>(f,o)&&C.push(f)}for(var d=r.visualViewport?r.visualViewport.width:innerWidth,y=r.visualViewport?r.visualViewport.height:innerHeight,c=window.scrollX||pageXOffset,x=window.scrollY||pageYOffset,g=e.getBoundingClientRect(),N=g.height,M=g.width,E=g.top,I=g.right,R=g.bottom,h=g.left,k=l==="start"||l==="nearest"?E:l==="end"?R:E+N/2,S=i==="center"?h+M/2:i==="end"?I:h,P=[],F=0;F=0&&h>=0&&R<=y&&I<=d&&E>=O&&R<=W&&h>=K&&I<=L)return P;var Y=getComputedStyle(p),ne=parseInt(Y.borderLeftWidth,10),X=parseInt(Y.borderTopWidth,10),te=parseInt(Y.borderRightWidth,10),D=parseInt(Y.borderBottomWidth,10),G=0,U=0,ce="offsetWidth"in p?p.offsetWidth-p.clientWidth-ne-te:0,Q="offsetHeight"in p?p.offsetHeight-p.clientHeight-X-D:0,B="offsetWidth"in p?p.offsetWidth===0?0:V/p.offsetWidth:0,ae="offsetHeight"in p?p.offsetHeight===0?0:_/p.offsetHeight:0;if(v===p)G=l==="start"?k:l==="end"?k-y:l==="nearest"?nt(x,x+y,y,X,D,x+k,x+k+N,N):k-y/2,U=i==="start"?S:i==="center"?S-d/2:i==="end"?S-d:nt(c,c+d,d,ne,te,c+S,c+S+M,M),G=Math.max(0,G+x),U=Math.max(0,U+c);else{G=l==="start"?k-O-X:l==="end"?k-W+D+Q:l==="nearest"?nt(O,W,_,X,D+Q,k,k+N,N):k-(O+_/2)+Q/2,U=i==="start"?S-K-ne:i==="center"?S-(K+V/2)+ce/2:i==="end"?S-L+te+ce:nt(K,L,V,ne,te+ce,S,S+M,M);var le=p.scrollLeft,re=p.scrollTop;k+=re-(G=Math.max(0,Math.min(re+G/ae,p.scrollHeight-_/ae+Q))),S+=le-(U=Math.max(0,Math.min(le+U/B,p.scrollWidth-V/B+ce)))}P.push({el:p,top:G,left:U})}return P};function lr(e){return e===Object(e)&&Object.keys(e).length!==0}function Pn(e,t){t===void 0&&(t="auto");var r="scrollBehavior"in document.body.style;e.forEach(function(n){var l=n.el,i=n.top,u=n.left;l.scroll&&r?l.scroll({top:i,left:u,behavior:t}):(l.scrollTop=i,l.scrollLeft=u)})}function Fn(e){return e===!1?{block:"end",inline:"nearest"}:lr(e)?e:{block:"start",inline:"nearest"}}function $n(e,t){var r=e.isConnected||e.ownerDocument.documentElement.contains(e);if(lr(t)&&typeof t.behavior=="function")return t.behavior(r?At(e,t):[]);if(r){var n=Fn(t);return Pn(At(e,n),n.behavior)}}var Tn=["parentNode"],Dn="form_item";function Ge(e){return e===void 0||e===!1?[]:Array.isArray(e)?e:[e]}function ir(e,t){if(e.length){var r=e.join("_");if(t)return"".concat(t,"_").concat(r);var n=Tn.includes(r);return n?"".concat(Dn,"_").concat(r):r}}function qt(e){var t=Ge(e);return t.join("_")}function or(e){var t=Tr(),r=ee(t,1),n=r[0],l=a.useRef({}),i=a.useMemo(function(){return e??$($({},n),{__INTERNAL__:{itemRef:function(o){return function(s){var b=qt(o);s?l.current[b]=s:delete l.current[b]}}},scrollToField:function(o){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},b=Ge(o),m=ir(b,i.__INTERNAL__.name),v=m?document.getElementById(m):null;v&&$n(v,$({scrollMode:"if-needed",block:"nearest"},s))},getFieldInstance:function(o){var s=qt(o);return l.current[s]}})},[e,n]);return[i]}var Ln=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,n=Object.getOwnPropertySymbols(e);l0||D.length>0||e.extra){var Se=[];(e.help||te.length>0)&&Se.push("".concat(re,"_help")),e.extra&&Se.push("".concat(re,"_extra")),oe["aria-describedby"]=Se.join(" ")}te.length>0&&(oe["aria-invalid"]="true"),ie&&(oe["aria-required"]="true"),Mr(o)&&(oe.ref=G(le,o));var Re=new Set([].concat(de(Ge(C)),de(Ge(R))));Re.forEach(function(Ce){oe[Ce]=function(){for(var ye,$e,Te,Me,ge,_e=arguments.length,he=new Array(_e),pe=0;pe<_e;pe++)he[pe]=arguments[pe];(Te=A[Ce])===null||Te===void 0||(ye=Te).call.apply(ye,[A].concat(he)),(ge=(Me=o.props)[Ce])===null||ge===void 0||($e=ge).call.apply($e,[Me].concat(he))}});var qe=[oe["aria-required"],oe["aria-invalid"],oe["aria-describedby"]];ve=a.createElement(ta,{value:A[e.valuePropName||"value"],update:o,childProps:qe},ht(o,oe))}else N&&(i||n)&&!h?ve=o(ae):ve=o}return U(ve,re,ie)})}var ur=na;ur.useStatus=Hn;const aa=ur;var la=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,n=Object.getOwnPropertySymbols(e);lNumber.MAX_SAFE_INTEGER)return String(bt()?BigInt(e).toString():Number.MAX_SAFE_INTEGER);if(eNumber.MAX_SAFE_INTEGER)return new e(Number.MAX_SAFE_INTEGER);if(l0&&arguments[0]!==void 0?arguments[0]:!0;return r?this.isInvalidate()?"":st(this.number):this.origin}}]),e}(),sa=function(){function e(t){if(Yt(this,e),this.origin="",this.negative=void 0,this.integer=void 0,this.decimal=void 0,this.decimalLen=void 0,this.empty=void 0,this.nan=void 0,!t&&t!==0||!String(t).trim()){this.empty=!0;return}if(this.origin=String(t),t==="-"){this.nan=!0;return}var r=t;if(Nt(r)&&(r=Number(r)),r=typeof r=="string"?r:st(r),wt(r)){var n=je(r);this.negative=n.negative;var l=n.trimStr.split(".");this.integer=BigInt(l[0]);var i=l[1]||"0";this.decimal=BigInt(i),this.decimalLen=i.length}else this.nan=!0}return Xt(e,[{key:"getMark",value:function(){return this.negative?"-":""}},{key:"getIntegerStr",value:function(){return this.integer.toString()}},{key:"getDecimalStr",value:function(){return this.decimal.toString().padStart(this.decimalLen,"0")}},{key:"alignDecimal",value:function(r){var n="".concat(this.getMark()).concat(this.getIntegerStr()).concat(this.getDecimalStr().padEnd(r,"0"));return BigInt(n)}},{key:"negate",value:function(){var r=new e(this.toString());return r.negative=!r.negative,r}},{key:"add",value:function(r){if(this.isInvalidate())return new e(r);var n=new e(r);if(n.isInvalidate())return this;var l=Math.max(this.getDecimalStr().length,n.getDecimalStr().length),i=this.alignDecimal(l),u=n.alignDecimal(l),o=(i+u).toString(),s=je(o),b=s.negativeStr,m=s.trimStr,v="".concat(b).concat(m.padStart(l+1,"0"));return new e("".concat(v.slice(0,-l),".").concat(v.slice(-l)))}},{key:"isEmpty",value:function(){return this.empty}},{key:"isNaN",value:function(){return this.nan}},{key:"isInvalidate",value:function(){return this.isEmpty()||this.isNaN()}},{key:"equals",value:function(r){return this.toString()===(r==null?void 0:r.toString())}},{key:"lessEquals",value:function(r){return this.add(r.negate().toString()).toNumber()<=0}},{key:"toNumber",value:function(){return this.isNaN()?NaN:Number(this.toString())}},{key:"toString",value:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return r?this.isInvalidate()?"":je("".concat(this.getMark()).concat(this.getIntegerStr(),".").concat(this.getDecimalStr())).fullStr:this.origin}}]),e}();function we(e){return bt()?new sa(e):new ca(e)}function at(e,t,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e==="")return"";var l=je(e),i=l.negativeStr,u=l.integerStr,o=l.decimalStr,s="".concat(t).concat(o),b="".concat(i).concat(u);if(r>=0){var m=Number(o[r]);if(m>=5&&!n){var v=we(e).add("".concat(i,"0.").concat("0".repeat(r)).concat(10-m));return at(v.toString(),t,r,n)}return r===0?b:"".concat(b).concat(t).concat(o.padEnd(r,"0").slice(0,r))}return s===".0"?b:"".concat(b).concat(s)}var fa=200,da=600;function va(e){var t=e.prefixCls,r=e.upNode,n=e.downNode,l=e.upDisabled,i=e.downDisabled,u=e.onStep,o=a.useRef(),s=a.useRef();s.current=u;var b=function(c,x){c.preventDefault(),s.current(x);function g(){s.current(x),o.current=setTimeout(g,fa)}o.current=setTimeout(g,da)},m=function(){clearTimeout(o.current)};if(a.useEffect(function(){return m},[]),zr())return null;var v="".concat(t,"-handler"),C=ue(v,"".concat(v,"-up"),w({},"".concat(v,"-up-disabled"),l)),f=ue(v,"".concat(v,"-down"),w({},"".concat(v,"-down-disabled"),i)),d={unselectable:"on",role:"button",onMouseUp:m,onMouseLeave:m};return a.createElement("div",{className:"".concat(v,"-wrap")},a.createElement("span",$({},d,{onMouseDown:function(c){b(c,!0)},"aria-label":"Increase Value","aria-disabled":l,className:C}),r||a.createElement("span",{unselectable:"on",className:"".concat(t,"-handler-up-inner")})),a.createElement("span",$({},d,{onMouseDown:function(c){b(c,!1)},"aria-label":"Decrease Value","aria-disabled":i,className:f}),n||a.createElement("span",{unselectable:"on",className:"".concat(t,"-handler-down-inner")})))}function ma(e,t){var r=a.useRef(null);function n(){try{var i=e.selectionStart,u=e.selectionEnd,o=e.value,s=o.substring(0,i),b=o.substring(u);r.current={start:i,end:u,value:o,beforeTxt:s,afterTxt:b}}catch{}}function l(){if(e&&r.current&&t)try{var i=e.value,u=r.current,o=u.beforeTxt,s=u.afterTxt,b=u.start,m=i.length;if(i.endsWith(s))m=i.length-r.current.afterTxt.length;else if(i.startsWith(o))m=o.length;else{var v=o[b-1],C=i.indexOf(v,b-1);C!==-1&&(m=C+1)}e.setSelectionRange(m,m)}catch(f){_r(!1,"Something warning of cursor restore. Please fire issue about this: ".concat(f.message))}}return[n,l]}const ga=function(){var e=a.useRef(0),t=function(){Be.cancel(e.current)};return a.useEffect(function(){return t},[]),function(r){t(),e.current=Be(function(){r()})}};var ha=["prefixCls","className","style","min","max","step","defaultValue","value","disabled","readOnly","upHandler","downHandler","keyboard","controls","stringMode","parser","formatter","precision","decimalSeparator","onChange","onInput","onPressEnter","onStep"],Wt=function(t,r){return t||r.isEmpty()?r.toString():r.toNumber()},Bt=function(t){var r=we(t);return r.isInvalidate()?null:r},cr=a.forwardRef(function(e,t){var r,n=e.prefixCls,l=n===void 0?"rc-input-number":n,i=e.className,u=e.style,o=e.min,s=e.max,b=e.step,m=b===void 0?1:b,v=e.defaultValue,C=e.value,f=e.disabled,d=e.readOnly,y=e.upHandler,c=e.downHandler,x=e.keyboard,g=e.controls,N=g===void 0?!0:g,M=e.stringMode,E=e.parser,I=e.formatter,R=e.precision,h=e.decimalSeparator,k=e.onChange,S=e.onInput,P=e.onPressEnter,F=e.onStep,p=pt(e,ha),T="".concat(l,"-input"),_=a.useRef(null),V=a.useState(!1),O=ee(V,2),L=O[0],W=O[1],K=a.useRef(!1),Y=a.useRef(!1),ne=a.useRef(!1),X=a.useState(function(){return we(C??v)}),te=ee(X,2),D=te[0],G=te[1];function U(q){C===void 0&&G(q)}var ce=a.useCallback(function(q,j){if(!j)return R>=0?R:Math.max(Qe(q),Qe(m))},[R,m]),Q=a.useCallback(function(q){var j=String(q);if(E)return E(j);var Z=j;return h&&(Z=Z.replace(h,".")),Z.replace(/[^\w.-]+/g,"")},[E,h]),B=a.useRef(""),ae=a.useCallback(function(q,j){if(I)return I(q,{userTyping:j,input:String(B.current)});var Z=typeof q=="number"?st(q):q;if(!j){var z=ce(Z,j);if(wt(Z)&&(h||z>=0)){var xe=h||".";Z=at(Z,xe,z)}}return Z},[I,ce,h]),le=a.useState(function(){var q=v??C;return D.isInvalidate()&&["string","number"].includes(Fe(q))?Number.isNaN(q)?"":q:ae(D.toString(),!1)}),re=ee(le,2),ie=re[0],A=re[1];B.current=ie;function ve(q,j){A(ae(q.isInvalidate()?q.toString(!1):q.toString(!j),j))}var oe=a.useMemo(function(){return Bt(s)},[s,R]),Se=a.useMemo(function(){return Bt(o)},[o,R]),Re=a.useMemo(function(){return!oe||!D||D.isInvalidate()?!1:oe.lessEquals(D)},[oe,D]),qe=a.useMemo(function(){return!Se||!D||D.isInvalidate()?!1:D.lessEquals(Se)},[Se,D]),Ce=ma(_.current,L),ye=ee(Ce,2),$e=ye[0],Te=ye[1],Me=function(j){return oe&&!j.lessEquals(oe)?oe:Se&&!Se.lessEquals(j)?Se:null},ge=function(j){return!Me(j)},_e=function(j,Z){var z=j,xe=ge(z)||z.isEmpty();if(!z.isEmpty()&&!Z&&(z=Me(z)||z,xe=!0),!d&&!f&&xe){var De=z.toString(),Le=ce(De,Z);return Le>=0&&(z=we(at(De,".",Le)),ge(z)||(z=we(at(De,".",Le,!0)))),z.equals(D)||(U(z),k==null||k(z.isEmpty()?null:Wt(M,z)),C===void 0&&ve(z,Z)),z}return D},he=ga(),pe=function q(j){if($e(),A(j),!Y.current){var Z=Q(j),z=we(Z);z.isNaN()||_e(z,!0)}S==null||S(j),he(function(){var xe=j;E||(xe=j.replace(/。/g,".")),xe!==j&&q(xe)})},Ie=function(){Y.current=!0},Ue=function(){Y.current=!1,pe(_.current.value)},Ze=function(j){pe(j.target.value)},Je=function(j){var Z;if(!(j&&Re||!j&&qe)){K.current=!1;var z=we(ne.current?zt(m):m);j||(z=z.negate());var xe=(D||we(0)).add(z.toString()),De=_e(xe,!1);F==null||F(Wt(M,De),{offset:ne.current?zt(m):m,type:j?"up":"down"}),(Z=_.current)===null||Z===void 0||Z.focus()}},et=function(j){var Z=we(Q(ie)),z=Z;Z.isNaN()?z=D:z=_e(Z,j),C!==void 0?ve(D,!1):z.isNaN()||ve(z,!1)},tt=function(){K.current=!0},Ke=function(j){var Z=j.which,z=j.shiftKey;K.current=!0,z?ne.current=!0:ne.current=!1,Z===Ee.ENTER&&(Y.current||(K.current=!1),et(!1),P==null||P(j)),x!==!1&&!Y.current&&[Ee.UP,Ee.DOWN].includes(Z)&&(Je(Ee.UP===Z),j.preventDefault())},rt=function(){K.current=!1,ne.current=!1},ft=function(){et(!1),W(!1),K.current=!1};return dt(function(){D.isInvalidate()||ve(D,!1)},[R]),dt(function(){var q=we(C);G(q);var j=we(Q(ie));(!q.equals(j)||!K.current||I)&&ve(q,K.current)},[C]),dt(function(){I&&Te()},[ie]),a.createElement("div",{className:ue(l,i,(r={},w(r,"".concat(l,"-focused"),L),w(r,"".concat(l,"-disabled"),f),w(r,"".concat(l,"-readonly"),d),w(r,"".concat(l,"-not-a-number"),D.isNaN()),w(r,"".concat(l,"-out-of-range"),!D.isInvalidate()&&!ge(D)),r)),style:u,onFocus:function(){W(!0)},onBlur:ft,onKeyDown:Ke,onKeyUp:rt,onCompositionStart:Ie,onCompositionEnd:Ue,onBeforeInput:tt},N&&a.createElement(va,{prefixCls:l,upNode:y,downNode:c,upDisabled:Re,downDisabled:qe,onStep:Je}),a.createElement("div",{className:"".concat(T,"-wrap")},a.createElement("input",$({autoComplete:"off",role:"spinbutton","aria-valuemin":o,"aria-valuemax":s,"aria-valuenow":D.isInvalidate()?null:D.toString(),step:m},p,{ref:ot(_,t),className:T,value:ie,onChange:Ze,disabled:f,readOnly:d}))))});cr.displayName="InputNumber";var ba=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,n=Object.getOwnPropertySymbols(e);l"u"?F:a.createElement("span",{className:"".concat(h,"-handler-up-inner")},I.upIcon),p=typeof I.downIcon>"u"?p:a.createElement("span",{className:"".concat(h,"-handler-down-inner")},I.downIcon));var _=a.useContext(ut),V=_.hasFeedback,O=_.status,L=_.isFormItemInput,W=_.feedbackIcon,K=Wr(O,E),Y=S||C||i,ne=a.useContext(xt),X=f??ne,te=ue(w(w(w(w(w({},"".concat(h,"-lg"),Y==="large"),"".concat(h,"-sm"),Y==="small"),"".concat(h,"-rtl"),l==="rtl"),"".concat(h,"-borderless"),!N),"".concat(h,"-in-form-item"),L),vt(h,K),P,v),D=a.createElement(cr,$({ref:m,disabled:X,className:te,upHandler:F,downHandler:p,prefixCls:h,readOnly:M,controls:T},R));if(x!=null||V){var G=ue("".concat(h,"-affix-wrapper"),vt("".concat(h,"-affix-wrapper"),K,V),w(w(w(w(w(w(w(w({},"".concat(h,"-affix-wrapper-focused"),s),"".concat(h,"-affix-wrapper-disabled"),e.disabled),"".concat(h,"-affix-wrapper-sm"),i==="small"),"".concat(h,"-affix-wrapper-lg"),i==="large"),"".concat(h,"-affix-wrapper-rtl"),l==="rtl"),"".concat(h,"-affix-wrapper-readonly"),M),"".concat(h,"-affix-wrapper-borderless"),!N),"".concat(v),!(y||c)&&v));D=a.createElement("div",{className:G,style:e.style,onMouseUp:function(){return m.current.focus()}},x&&a.createElement("span",{className:"".concat(h,"-prefix")},x),ht(D,{style:null,value:e.value,onFocus:function(ie){var A;b(!0),(A=e.onFocus)===null||A===void 0||A.call(e,ie)},onBlur:function(ie){var A;b(!1),(A=e.onBlur)===null||A===void 0||A.call(e,ie)}}),V&&a.createElement("span",{className:"".concat(h,"-suffix")},W))}if(y!=null||c!=null){var U="".concat(h,"-group"),ce="".concat(U,"-addon"),Q=y?a.createElement("div",{className:ce},y):null,B=c?a.createElement("div",{className:ce},c):null,ae=ue("".concat(h,"-wrapper"),U,w({},"".concat(U,"-rtl"),l==="rtl")),le=ue("".concat(h,"-group-wrapper"),w(w(w({},"".concat(h,"-group-wrapper-sm"),i==="small"),"".concat(h,"-group-wrapper-lg"),i==="large"),"".concat(h,"-group-wrapper-rtl"),l==="rtl"),vt("".concat(h,"-group-wrapper"),K,V),v);D=a.createElement("div",{className:le,style:e.style},a.createElement("div",{className:ae},Q&&a.createElement(Dt,null,a.createElement(Tt,{status:!0,override:!0},Q)),ht(D,{style:null,disabled:X}),B&&a.createElement(Dt,null,a.createElement(Tt,{status:!0,override:!0},B))))}return D});const Qa=Ca;var Ae=a.createContext({min:0,max:0,direction:"ltr",step:1,includedStart:0,includedEnd:0,tabIndex:0});function Ct(e,t,r){return(e-t)/(r-t)}function Rt(e,t,r,n){var l=Ct(t,r,n),i={};switch(e){case"rtl":i.right="".concat(l*100,"%"),i.transform="translateX(50%)";break;case"btt":i.bottom="".concat(l*100,"%"),i.transform="translateY(50%)";break;case"ttb":i.top="".concat(l*100,"%"),i.transform="translateY(-50%)";break;default:i.left="".concat(l*100,"%"),i.transform="translateX(-50%)";break}return i}function We(e,t){return Array.isArray(e)?e[t]:e}var ya=["prefixCls","value","valueIndex","onStartMove","style","render","dragging","onOffsetChange"],xa=a.forwardRef(function(e,t){var r,n,l=e.prefixCls,i=e.value,u=e.valueIndex,o=e.onStartMove,s=e.style,b=e.render,m=e.dragging,v=e.onOffsetChange,C=pt(e,ya),f=a.useContext(Ae),d=f.min,y=f.max,c=f.direction,x=f.disabled,g=f.range,N=f.tabIndex,M=f.ariaLabelForHandle,E=f.ariaLabelledByForHandle,I=f.ariaValueTextFormatterForHandle,R="".concat(l,"-handle"),h=function(p){x||o(p,u)},k=function(p){if(!x){var T=null;switch(p.which||p.keyCode){case Ee.LEFT:T=c==="ltr"||c==="btt"?-1:1;break;case Ee.RIGHT:T=c==="ltr"||c==="btt"?1:-1;break;case Ee.UP:T=c!=="ttb"?1:-1;break;case Ee.DOWN:T=c!=="ttb"?-1:1;break;case Ee.HOME:T="min";break;case Ee.END:T="max";break;case Ee.PAGE_UP:T=2;break;case Ee.PAGE_DOWN:T=-2;break}T!==null&&(p.preventDefault(),v(T,u))}},S=Rt(c,i,d,y),P=a.createElement("div",$({ref:t,className:ue(R,(r={},w(r,"".concat(R,"-").concat(u+1),g),w(r,"".concat(R,"-dragging"),m),r)),style:be(be({},S),s),onMouseDown:h,onTouchStart:h,onKeyDown:k,tabIndex:x?null:We(N,u),role:"slider","aria-valuemin":d,"aria-valuemax":y,"aria-valuenow":i,"aria-disabled":x,"aria-label":We(M,u),"aria-labelledby":We(E,u),"aria-valuetext":(n=We(I,u))===null||n===void 0?void 0:n(i)},C));return b&&(P=b(P,{index:u,prefixCls:l,value:i,dragging:m})),P}),Sa=["prefixCls","style","onStartMove","onOffsetChange","values","handleRender","draggingIndex"],pa=a.forwardRef(function(e,t){var r=e.prefixCls,n=e.style,l=e.onStartMove,i=e.onOffsetChange,u=e.values,o=e.handleRender,s=e.draggingIndex,b=pt(e,Sa),m=a.useRef({});return a.useImperativeHandle(t,function(){return{focus:function(C){var f;(f=m.current[C])===null||f===void 0||f.focus()}}}),a.createElement(a.Fragment,null,u.map(function(v,C){return a.createElement(xa,$({ref:function(d){d?m.current[C]=d:delete m.current[C]},dragging:s===C,prefixCls:r,style:We(n,C),key:C,value:v,valueIndex:C,onStartMove:l,onOffsetChange:i,render:o},b))}))});function Ut(e){var t="touches"in e?e.touches[0]:e;return{pageX:t.pageX,pageY:t.pageY}}function Ea(e,t,r,n,l,i,u,o,s){var b=a.useState(null),m=ee(b,2),v=m[0],C=m[1],f=a.useState(-1),d=ee(f,2),y=d[0],c=d[1],x=a.useState(r),g=ee(x,2),N=g[0],M=g[1],E=a.useState(r),I=ee(E,2),R=I[0],h=I[1],k=a.useRef(null),S=a.useRef(null);a.useEffect(function(){y===-1&&M(r)},[r,y]),a.useEffect(function(){return function(){document.removeEventListener("mousemove",k.current),document.removeEventListener("mouseup",S.current),document.removeEventListener("touchmove",k.current),document.removeEventListener("touchend",S.current)}},[]);var P=function(O,L){N.some(function(W,K){return W!==O[K]})&&(L!==void 0&&C(L),M(O),u(O))},F=function(O,L){if(O===-1){var W=R[0],K=R[R.length-1],Y=n-W,ne=l-K,X=L*(l-n);X=Math.max(X,Y),X=Math.min(X,ne);var te=i(W+X);X=te-W;var D=R.map(function(Q){return Q+X});P(D)}else{var G=(l-n)*L,U=de(N);U[O]=R[O];var ce=s(U,G,O,"dist");P(ce.values,ce.value)}},p=a.useRef(F);p.current=F;var T=function(O,L){O.stopPropagation();var W=r[L];c(L),C(W),h(r);var K=Ut(O),Y=K.pageX,ne=K.pageY,X=function(G){G.preventDefault();var U=Ut(G),ce=U.pageX,Q=U.pageY,B=ce-Y,ae=Q-ne,le=e.current.getBoundingClientRect(),re=le.width,ie=le.height,A;switch(t){case"btt":A=-ae/ie;break;case"ttb":A=ae/ie;break;case"rtl":A=-B/re;break;default:A=B/re}p.current(L,A)},te=function D(G){G.preventDefault(),document.removeEventListener("mouseup",D),document.removeEventListener("mousemove",X),document.removeEventListener("touchend",D),document.removeEventListener("touchmove",X),k.current=null,S.current=null,c(-1),o()};document.addEventListener("mouseup",te),document.addEventListener("mousemove",X),document.addEventListener("touchend",te),document.addEventListener("touchmove",X),k.current=X,S.current=te},_=a.useMemo(function(){var V=de(r).sort(function(L,W){return L-W}),O=de(N).sort(function(L,W){return L-W});return V.every(function(L,W){return L===O[W]})?N:r},[r,N]);return[y,v,_,T]}function Na(e){var t=e.prefixCls,r=e.style,n=e.start,l=e.end,i=e.index,u=e.onStartMove,o=a.useContext(Ae),s=o.direction,b=o.min,m=o.max,v=o.disabled,C=o.range,f="".concat(t,"-track"),d=Ct(n,b,m),y=Ct(l,b,m),c=function(N){!v&&u&&u(N,-1)},x={};switch(s){case"rtl":x.right="".concat(d*100,"%"),x.width="".concat(y*100-d*100,"%");break;case"btt":x.bottom="".concat(d*100,"%"),x.height="".concat(y*100-d*100,"%");break;case"ttb":x.top="".concat(d*100,"%"),x.height="".concat(y*100-d*100,"%");break;default:x.left="".concat(d*100,"%"),x.width="".concat(y*100-d*100,"%")}return a.createElement("div",{className:ue(f,C&&"".concat(f,"-").concat(i+1)),style:be(be({},x),r),onMouseDown:c,onTouchStart:c})}function wa(e){var t=e.prefixCls,r=e.style,n=e.values,l=e.startPoint,i=e.onStartMove,u=a.useContext(Ae),o=u.included,s=u.range,b=u.min,m=a.useMemo(function(){if(!s){if(n.length===0)return[];var v=l??b,C=n[0];return[{start:Math.min(v,C),end:Math.max(v,C)}]}for(var f=[],d=0;d3&&arguments[3]!==void 0?arguments[3]:"unit";if(typeof y=="number"){var g,N=d[c],M=N+y,E=[];n.forEach(function(S){E.push(S.value)}),E.push(e,t),E.push(o(N));var I=y>0?1:-1;x==="unit"?E.push(o(N+I*r)):E.push(o(M)),E=E.filter(function(S){return S!==null}).filter(function(S){return y<0?S<=N:S>=N}),x==="unit"&&(E=E.filter(function(S){return S!==N}));var R=x==="unit"?N:M;g=E[0];var h=Math.abs(g-R);if(E.forEach(function(S){var P=Math.abs(S-R);P1){var k=de(d);return k[c]=g,f(k,y-I,c,x)}return g}else{if(y==="min")return e;if(y==="max")return t}},m=function(d,y,c){var x=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"unit",g=d[c],N=b(d,y,c,x);return{value:N,changed:N!==g}},v=function(d){return i===null&&d===0||typeof i=="number"&&d3&&arguments[3]!==void 0?arguments[3]:"unit",g=d.map(s),N=g[c],M=b(g,y,c,x);if(g[c]=M,l===!1){var E=i||0;c>0&&g[c-1]!==N&&(g[c]=Math.max(g[c],g[c-1]+E)),c0;k-=1)for(var S=!0;v(g[k]-g[k-1])&&S;){var P=m(g,-1,k-1);g[k-1]=P.value,S=P.changed}for(var F=g.length-1;F>0;F-=1)for(var p=!0;v(g[F]-g[F-1])&&p;){var T=m(g,-1,F-1);g[F-1]=T.value,p=T.changed}for(var _=0;_=0?F:!1},[F,oe]),Re=a.useMemo(function(){var fe=Object.keys(te||{});return fe.map(function(J){var H=te[J],me={value:Number(J)};return H&&Fe(H)==="object"&&!a.isValidElement(H)&&("label"in H||"style"in H)?(me.style=H.style,me.label=H.label):me.label=H,me}).filter(function(J){var H=J.label;return H||typeof H=="number"}).sort(function(J,H){return J.value-H.value})},[te]),qe=_a(A,ve,oe,Re,S,Se),Ce=ee(qe,2),ye=Ce[0],$e=Ce[1],Te=Gt(N,{value:g}),Me=ee(Te,2),ge=Me[0],_e=Me[1],he=a.useMemo(function(){var fe=ge==null?[]:Array.isArray(ge)?ge:[ge],J=ee(fe,1),H=J[0],me=H===void 0?A:H,se=ge===null?[]:[me];if(M){if(se=de(fe),E||ge===void 0){var ze=E>=0?E+1:2;for(se=se.slice(0,ze);se.length=0&&le.current.focus(fe)}rt(null)},[Ke]);var q=a.useMemo(function(){return p&&oe===null?!1:p},[p,oe]),j=function(){h==null||h(Ie(pe.current))},Z=Ea(re,ie,he,A,ve,ye,Ue,j,$e),z=ee(Z,4),xe=z[0],De=z[1],Le=z[2],sr=z[3],It=function(J,H){sr(J,H),R==null||R(Ie(pe.current))},kt=xe!==-1;a.useEffect(function(){if(!kt){var fe=he.lastIndexOf(De);le.current.focus(fe)}},[kt]);var He=a.useMemo(function(){return de(Le).sort(function(fe,J){return fe-J})},[Le]),fr=a.useMemo(function(){return M?[He[0],He[He.length-1]]:[A,He[0]]},[He,M,A]),Mt=ee(fr,2),_t=Mt[0],Ot=Mt[1];a.useImperativeHandle(t,function(){return{focus:function(){le.current.focus(0)},blur:function(){var J=document,H=J.activeElement;re.current.contains(H)&&(H==null||H.blur())}}}),a.useEffect(function(){b&&le.current.focus(0)},[]);var dr=a.useMemo(function(){return{min:A,max:ve,direction:ie,disabled:s,step:oe,included:O,includedStart:_t,includedEnd:Ot,range:M,tabIndex:ce,ariaLabelForHandle:Q,ariaLabelledByForHandle:B,ariaValueTextFormatterForHandle:ae}},[A,ve,ie,s,oe,O,_t,Ot,M,ce,Q,B,ae]);return a.createElement(Ae.Provider,{value:dr},a.createElement("div",{ref:re,className:ue(l,i,(r={},w(r,"".concat(l,"-disabled"),s),w(r,"".concat(l,"-vertical"),_),w(r,"".concat(l,"-horizontal"),!_),w(r,"".concat(l,"-with-marks"),Re.length),r)),style:u,onMouseDown:Je},a.createElement("div",{className:"".concat(l,"-rail"),style:Y}),a.createElement(wa,{prefixCls:l,style:W,values:He,startPoint:L,onStartMove:q?It:null}),a.createElement(Ma,{prefixCls:l,marks:Re,dots:D,style:ne,activeStyle:X}),a.createElement(pa,{ref:le,prefixCls:l,style:K,values:Le,draggingIndex:xe,onStartMove:It,onOffsetChange:ft,onFocus:m,onBlur:v,handleRender:G}),a.createElement(Ia,{prefixCls:l,marks:Re,onClick:Ze})))}),Pa=a.forwardRef(function(e,t){var r=e.open,n=a.useRef(null),l=a.useRef(null);function i(){Be.cancel(l.current),l.current=null}function u(){l.current=Be(function(){var o;(o=n.current)===null||o===void 0||o.forcePopupAlign(),l.current=null})}return a.useEffect(function(){return r?u():i(),i},[r,e.title]),a.createElement(Zt,$({ref:ot(n,t)},e))});const Fa=Pa;var $a=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,n=Object.getOwnPropertySymbols(e);l STARRY - +