{"version":3,"file":"delaunay-BXDjRtc9.cjs","names":["epsilon","epsilon","u","epsilon","bc","ca","ab","bct","cat","abt","u","_8","_8b","_16","fin","fin2","epsilon","bc","ab","_8","_16","_48","fin","epsilon"],"sources":["../node_modules/delaunator/node_modules/robust-predicates/esm/util.js","../node_modules/delaunator/node_modules/robust-predicates/esm/orient2d.js","../node_modules/delaunator/node_modules/robust-predicates/esm/orient3d.js","../node_modules/delaunator/node_modules/robust-predicates/esm/incircle.js","../node_modules/delaunator/node_modules/robust-predicates/esm/insphere.js","../node_modules/delaunator/index.js","../node_modules/d3-delaunay/src/path.js","../node_modules/d3-delaunay/src/polygon.js","../node_modules/d3-delaunay/src/voronoi.js","../node_modules/d3-delaunay/src/delaunay.js"],"sourcesContent":["export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nexport function sum(elen, e, flen, f, h) {\n    let Q, Qnew, hh, bvirt;\n    let enow = e[0];\n    let fnow = f[0];\n    let eindex = 0;\n    let findex = 0;\n    if ((fnow > enow) === (fnow > -enow)) {\n        Q = enow;\n        enow = e[++eindex];\n    } else {\n        Q = fnow;\n        fnow = f[++findex];\n    }\n    let hindex = 0;\n    if (eindex < elen && findex < flen) {\n        if ((fnow > enow) === (fnow > -enow)) {\n            Qnew = enow + Q;\n            hh = Q - (Qnew - enow);\n            enow = e[++eindex];\n        } else {\n            Qnew = fnow + Q;\n            hh = Q - (Qnew - fnow);\n            fnow = f[++findex];\n        }\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        while (eindex < elen && findex < flen) {\n            if ((fnow > enow) === (fnow > -enow)) {\n                Qnew = Q + enow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (enow - bvirt);\n                enow = e[++eindex];\n            } else {\n                Qnew = Q + fnow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n                fnow = f[++findex];\n            }\n            Q = Qnew;\n            if (hh !== 0) {\n                h[hindex++] = hh;\n            }\n        }\n    }\n    while (eindex < elen) {\n        Qnew = Q + enow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (enow - bvirt);\n        enow = e[++eindex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    while (findex < flen) {\n        Qnew = Q + fnow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n        fnow = f[++findex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n    return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n    let Q, sum, hh, product1, product0;\n    let bvirt, c, ahi, alo, bhi, blo;\n\n    c = splitter * b;\n    bhi = c - (c - b);\n    blo = b - bhi;\n    let enow = e[0];\n    Q = enow * b;\n    c = splitter * enow;\n    ahi = c - (c - enow);\n    alo = enow - ahi;\n    hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n    let hindex = 0;\n    if (hh !== 0) {\n        h[hindex++] = hh;\n    }\n    for (let i = 1; i < elen; i++) {\n        enow = e[i];\n        product1 = enow * b;\n        c = splitter * enow;\n        ahi = c - (c - enow);\n        alo = enow - ahi;\n        product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n        sum = Q + product0;\n        bvirt = sum - Q;\n        hh = Q - (sum - bvirt) + (product0 - bvirt);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        Q = product1 + sum;\n        hh = sum - (Q - product1);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function negate(elen, e) {\n    for (let i = 0; i < elen; i++) e[i] = -e[i];\n    return elen;\n}\n\nexport function estimate(elen, e) {\n    let Q = e[0];\n    for (let i = 1; i < elen; i++) Q += e[i];\n    return Q;\n}\n\nexport function vec(n) {\n    return new Float64Array(n);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n    let acxtail, acytail, bcxtail, bcytail;\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    const acx = ax - cx;\n    const bcx = bx - cx;\n    const acy = ay - cy;\n    const bcy = by - cy;\n\n    s1 = acx * bcy;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcx;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    B[3] = u3;\n\n    let det = estimate(4, B);\n    let errbound = ccwerrboundB * detsum;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - acx;\n    acxtail = ax - (acx + bvirt) + (bvirt - cx);\n    bvirt = bx - bcx;\n    bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n    bvirt = ay - acy;\n    acytail = ay - (acy + bvirt) + (bvirt - cy);\n    bvirt = by - bcy;\n    bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n    if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n        return det;\n    }\n\n    errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n    det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n    if (det >= errbound || -det >= errbound) return det;\n\n    s1 = acxtail * bcy;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcx;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C1len = sum(4, B, 4, u, C1);\n\n    s1 = acx * bcytail;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcxtail;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C2len = sum(C1len, C1, 4, u, C2);\n\n    s1 = acxtail * bcytail;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcxtail;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const Dlen = sum(C2len, C2, 4, u, D);\n\n    return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n    const detleft = (ay - cy) * (bx - cx);\n    const detright = (ax - cx) * (by - cy);\n    const det = detleft - detright;\n\n    const detsum = Math.abs(detleft + detright);\n    if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n    return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n    return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, scale} from './util.js';\n\nconst o3derrboundA = (7 + 56 * epsilon) * epsilon;\nconst o3derrboundB = (3 + 28 * epsilon) * epsilon;\nconst o3derrboundC = (26 + 288 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst at_b = vec(4);\nconst at_c = vec(4);\nconst bt_c = vec(4);\nconst bt_a = vec(4);\nconst ct_a = vec(4);\nconst ct_b = vec(4);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abt = vec(8);\nconst u = vec(4);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _16 = vec(8);\nconst _12 = vec(12);\n\nlet fin = vec(192);\nlet fin2 = vec(192);\n\nfunction finadd(finlen, alen, a) {\n    finlen = sum(finlen, fin, alen, a, fin2);\n    const tmp = fin; fin = fin2; fin2 = tmp;\n    return finlen;\n}\n\nfunction tailinit(xtail, ytail, ax, ay, bx, by, a, b) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3, negate;\n    if (xtail === 0) {\n        if (ytail === 0) {\n            a[0] = 0;\n            b[0] = 0;\n            return 1;\n        } else {\n            negate = -ytail;\n            s1 = negate * ax;\n            c = splitter * negate;\n            ahi = c - (c - negate);\n            alo = negate - ahi;\n            c = splitter * ax;\n            bhi = c - (c - ax);\n            blo = ax - bhi;\n            a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            a[1] = s1;\n            s1 = ytail * bx;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * bx;\n            bhi = c - (c - bx);\n            blo = bx - bhi;\n            b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            b[1] = s1;\n            return 2;\n        }\n    } else {\n        if (ytail === 0) {\n            s1 = xtail * ay;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * ay;\n            bhi = c - (c - ay);\n            blo = ay - bhi;\n            a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            a[1] = s1;\n            negate = -xtail;\n            s1 = negate * by;\n            c = splitter * negate;\n            ahi = c - (c - negate);\n            alo = negate - ahi;\n            c = splitter * by;\n            bhi = c - (c - by);\n            blo = by - bhi;\n            b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            b[1] = s1;\n            return 2;\n        } else {\n            s1 = xtail * ay;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * ay;\n            bhi = c - (c - ay);\n            blo = ay - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = ytail * ax;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * ax;\n            bhi = c - (c - ax);\n            blo = ax - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            a[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            a[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            a[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            a[3] = u3;\n            s1 = ytail * bx;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * bx;\n            bhi = c - (c - bx);\n            blo = bx - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = xtail * by;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * by;\n            bhi = c - (c - by);\n            blo = by - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            b[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            b[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            b[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            b[3] = u3;\n            return 4;\n        }\n    }\n}\n\nfunction tailadd(finlen, a, b, k, z) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, u3;\n    s1 = a * b;\n    c = splitter * a;\n    ahi = c - (c - a);\n    alo = a - ahi;\n    c = splitter * b;\n    bhi = c - (c - b);\n    blo = b - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    c = splitter * k;\n    bhi = c - (c - k);\n    blo = k - bhi;\n    _i = s0 * k;\n    c = splitter * s0;\n    ahi = c - (c - s0);\n    alo = s0 - ahi;\n    u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n    _j = s1 * k;\n    c = splitter * s1;\n    ahi = c - (c - s1);\n    alo = s1 - ahi;\n    _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n    _k = _i + _0;\n    bvirt = _k - _i;\n    u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n    u3 = _j + _k;\n    u[2] = _k - (u3 - _j);\n    u[3] = u3;\n    finlen = finadd(finlen, 4, u);\n    if (z !== 0) {\n        c = splitter * z;\n        bhi = c - (c - z);\n        blo = z - bhi;\n        _i = s0 * z;\n        c = splitter * s0;\n        ahi = c - (c - s0);\n        alo = s0 - ahi;\n        u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n        _j = s1 * z;\n        c = splitter * s1;\n        ahi = c - (c - s1);\n        alo = s1 - ahi;\n        _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n        _k = _i + _0;\n        bvirt = _k - _i;\n        u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n        u3 = _j + _k;\n        u[2] = _k - (u3 - _j);\n        u[3] = u3;\n        finlen = finadd(finlen, 4, u);\n    }\n    return finlen;\n}\n\nfunction orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent) {\n    let finlen;\n    let adxtail, bdxtail, cdxtail;\n    let adytail, bdytail, cdytail;\n    let adztail, bdztail, cdztail;\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3;\n\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    s1 = bdx * cdy;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cdx * bdy;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cdx * ady;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = adx * cdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ca[3] = u3;\n    s1 = adx * bdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bdx * ady;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n\n    finlen = sum(\n        sum(\n            scale(4, bc, adz, _8), _8,\n            scale(4, ca, bdz, _8b), _8b, _16), _16,\n        scale(4, ab, cdz, _8), _8, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = o3derrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - adx;\n    adxtail = ax - (adx + bvirt) + (bvirt - dx);\n    bvirt = bx - bdx;\n    bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n    bvirt = cx - cdx;\n    cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n    bvirt = ay - ady;\n    adytail = ay - (ady + bvirt) + (bvirt - dy);\n    bvirt = by - bdy;\n    bdytail = by - (bdy + bvirt) + (bvirt - dy);\n    bvirt = cy - cdy;\n    cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n    bvirt = az - adz;\n    adztail = az - (adz + bvirt) + (bvirt - dz);\n    bvirt = bz - bdz;\n    bdztail = bz - (bdz + bvirt) + (bvirt - dz);\n    bvirt = cz - cdz;\n    cdztail = cz - (cdz + bvirt) + (bvirt - dz);\n\n    if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 &&\n        adytail === 0 && bdytail === 0 && cdytail === 0 &&\n        adztail === 0 && bdztail === 0 && cdztail === 0) {\n        return det;\n    }\n\n    errbound = o3derrboundC * permanent + resulterrbound * Math.abs(det);\n    det +=\n        adz * (bdx * cdytail + cdy * bdxtail - (bdy * cdxtail + cdx * bdytail)) + adztail * (bdx * cdy - bdy * cdx) +\n        bdz * (cdx * adytail + ady * cdxtail - (cdy * adxtail + adx * cdytail)) + bdztail * (cdx * ady - cdy * adx) +\n        cdz * (adx * bdytail + bdy * adxtail - (ady * bdxtail + bdx * adytail)) + cdztail * (adx * bdy - ady * bdx);\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    const at_len = tailinit(adxtail, adytail, bdx, bdy, cdx, cdy, at_b, at_c);\n    const bt_len = tailinit(bdxtail, bdytail, cdx, cdy, adx, ady, bt_c, bt_a);\n    const ct_len = tailinit(cdxtail, cdytail, adx, ady, bdx, bdy, ct_a, ct_b);\n\n    const bctlen = sum(bt_len, bt_c, ct_len, ct_b, bct);\n    finlen = finadd(finlen, scale(bctlen, bct, adz, _16), _16);\n\n    const catlen = sum(ct_len, ct_a, at_len, at_c, cat);\n    finlen = finadd(finlen, scale(catlen, cat, bdz, _16), _16);\n\n    const abtlen = sum(at_len, at_b, bt_len, bt_a, abt);\n    finlen = finadd(finlen, scale(abtlen, abt, cdz, _16), _16);\n\n    if (adztail !== 0) {\n        finlen = finadd(finlen, scale(4, bc, adztail, _12), _12);\n        finlen = finadd(finlen, scale(bctlen, bct, adztail, _16), _16);\n    }\n    if (bdztail !== 0) {\n        finlen = finadd(finlen, scale(4, ca, bdztail, _12), _12);\n        finlen = finadd(finlen, scale(catlen, cat, bdztail, _16), _16);\n    }\n    if (cdztail !== 0) {\n        finlen = finadd(finlen, scale(4, ab, cdztail, _12), _12);\n        finlen = finadd(finlen, scale(abtlen, abt, cdztail, _16), _16);\n    }\n\n    if (adxtail !== 0) {\n        if (bdytail !== 0) {\n            finlen = tailadd(finlen, adxtail, bdytail, cdz, cdztail);\n        }\n        if (cdytail !== 0) {\n            finlen = tailadd(finlen, -adxtail, cdytail, bdz, bdztail);\n        }\n    }\n    if (bdxtail !== 0) {\n        if (cdytail !== 0) {\n            finlen = tailadd(finlen, bdxtail, cdytail, adz, adztail);\n        }\n        if (adytail !== 0) {\n            finlen = tailadd(finlen, -bdxtail, adytail, cdz, cdztail);\n        }\n    }\n    if (cdxtail !== 0) {\n        if (adytail !== 0) {\n            finlen = tailadd(finlen, cdxtail, adytail, bdz, bdztail);\n        }\n        if (bdytail !== 0) {\n            finlen = tailadd(finlen, -cdxtail, bdytail, adz, adztail);\n        }\n    }\n\n    return fin[finlen - 1];\n}\n\nexport function orient3d(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    const bdxcdy = bdx * cdy;\n    const cdxbdy = cdx * bdy;\n\n    const cdxady = cdx * ady;\n    const adxcdy = adx * cdy;\n\n    const adxbdy = adx * bdy;\n    const bdxady = bdx * ady;\n\n    const det =\n        adz * (bdxcdy - cdxbdy) +\n        bdz * (cdxady - adxcdy) +\n        cdz * (adxbdy - bdxady);\n\n    const permanent =\n        (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * Math.abs(adz) +\n        (Math.abs(cdxady) + Math.abs(adxcdy)) * Math.abs(bdz) +\n        (Math.abs(adxbdy) + Math.abs(bdxady)) * Math.abs(cdz);\n\n    const errbound = o3derrboundA * permanent;\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n\n    return orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent);\n}\n\nexport function orient3dfast(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    return adx * (bdy * cdz - bdz * cdy) +\n        bdx * (cdy * adz - cdz * ady) +\n        cdx * (ady * bdz - adz * bdy);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale} from './util.js';\n\nconst iccerrboundA = (10 + 96 * epsilon) * epsilon;\nconst iccerrboundB = (4 + 48 * epsilon) * epsilon;\nconst iccerrboundC = (44 + 576 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst aa = vec(4);\nconst bb = vec(4);\nconst cc = vec(4);\nconst u = vec(4);\nconst v = vec(4);\nconst axtbc = vec(8);\nconst aytbc = vec(8);\nconst bxtca = vec(8);\nconst bytca = vec(8);\nconst cxtab = vec(8);\nconst cytab = vec(8);\nconst abt = vec(8);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abtt = vec(4);\nconst bctt = vec(4);\nconst catt = vec(4);\n\nconst _8 = vec(8);\nconst _16 = vec(16);\nconst _16b = vec(16);\nconst _16c = vec(16);\nconst _32 = vec(32);\nconst _32b = vec(32);\nconst _48 = vec(48);\nconst _64 = vec(64);\n\nlet fin = vec(1152);\nlet fin2 = vec(1152);\n\nfunction finadd(finlen, a, alen) {\n    finlen = sum(finlen, fin, a, alen, fin2);\n    const tmp = fin; fin = fin2; fin2 = tmp;\n    return finlen;\n}\n\nfunction incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {\n    let finlen;\n    let adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;\n    let axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen;\n    let abtlen, bctlen, catlen;\n    let abttlen, bcttlen, cattlen;\n    let n1, n0;\n\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n\n    s1 = bdx * cdy;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cdx * bdy;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cdx * ady;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = adx * cdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ca[3] = u3;\n    s1 = adx * bdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bdx * ady;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n\n    finlen = sum(\n        sum(\n            sum(\n                scale(scale(4, bc, adx, _8), _8, adx, _16), _16,\n                scale(scale(4, bc, ady, _8), _8, ady, _16b), _16b, _32), _32,\n            sum(\n                scale(scale(4, ca, bdx, _8), _8, bdx, _16), _16,\n                scale(scale(4, ca, bdy, _8), _8, bdy, _16b), _16b, _32b), _32b, _64), _64,\n        sum(\n            scale(scale(4, ab, cdx, _8), _8, cdx, _16), _16,\n            scale(scale(4, ab, cdy, _8), _8, cdy, _16b), _16b, _32), _32, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = iccerrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - adx;\n    adxtail = ax - (adx + bvirt) + (bvirt - dx);\n    bvirt = ay - ady;\n    adytail = ay - (ady + bvirt) + (bvirt - dy);\n    bvirt = bx - bdx;\n    bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n    bvirt = by - bdy;\n    bdytail = by - (bdy + bvirt) + (bvirt - dy);\n    bvirt = cx - cdx;\n    cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n    bvirt = cy - cdy;\n    cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n    if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 && adytail === 0 && bdytail === 0 && cdytail === 0) {\n        return det;\n    }\n\n    errbound = iccerrboundC * permanent + resulterrbound * Math.abs(det);\n    det += ((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +\n        2 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) +\n        ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +\n        2 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) +\n        ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +\n        2 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));\n\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n        s1 = adx * adx;\n        c = splitter * adx;\n        ahi = c - (c - adx);\n        alo = adx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = ady * ady;\n        c = splitter * ady;\n        ahi = c - (c - ady);\n        alo = ady - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        aa[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        aa[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        aa[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        aa[3] = u3;\n    }\n    if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n        s1 = bdx * bdx;\n        c = splitter * bdx;\n        ahi = c - (c - bdx);\n        alo = bdx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = bdy * bdy;\n        c = splitter * bdy;\n        ahi = c - (c - bdy);\n        alo = bdy - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        bb[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        bb[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        bb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        bb[3] = u3;\n    }\n    if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n        s1 = cdx * cdx;\n        c = splitter * cdx;\n        ahi = c - (c - cdx);\n        alo = cdx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = cdy * cdy;\n        c = splitter * cdy;\n        ahi = c - (c - cdy);\n        alo = cdy - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        cc[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        cc[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        cc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        cc[3] = u3;\n    }\n\n    if (adxtail !== 0) {\n        axtbclen = scale(4, bc, adxtail, axtbc);\n        finlen = finadd(finlen, sum_three(\n            scale(axtbclen, axtbc, 2 * adx, _16), _16,\n            scale(scale(4, cc, adxtail, _8), _8, bdy, _16b), _16b,\n            scale(scale(4, bb, adxtail, _8), _8, -cdy, _16c), _16c, _32, _48), _48);\n    }\n    if (adytail !== 0) {\n        aytbclen = scale(4, bc, adytail, aytbc);\n        finlen = finadd(finlen, sum_three(\n            scale(aytbclen, aytbc, 2 * ady, _16), _16,\n            scale(scale(4, bb, adytail, _8), _8, cdx, _16b), _16b,\n            scale(scale(4, cc, adytail, _8), _8, -bdx, _16c), _16c, _32, _48), _48);\n    }\n    if (bdxtail !== 0) {\n        bxtcalen = scale(4, ca, bdxtail, bxtca);\n        finlen = finadd(finlen, sum_three(\n            scale(bxtcalen, bxtca, 2 * bdx, _16), _16,\n            scale(scale(4, aa, bdxtail, _8), _8, cdy, _16b), _16b,\n            scale(scale(4, cc, bdxtail, _8), _8, -ady, _16c), _16c, _32, _48), _48);\n    }\n    if (bdytail !== 0) {\n        bytcalen = scale(4, ca, bdytail, bytca);\n        finlen = finadd(finlen, sum_three(\n            scale(bytcalen, bytca, 2 * bdy, _16), _16,\n            scale(scale(4, cc, bdytail, _8), _8, adx, _16b), _16b,\n            scale(scale(4, aa, bdytail, _8), _8, -cdx, _16c), _16c, _32, _48), _48);\n    }\n    if (cdxtail !== 0) {\n        cxtablen = scale(4, ab, cdxtail, cxtab);\n        finlen = finadd(finlen, sum_three(\n            scale(cxtablen, cxtab, 2 * cdx, _16), _16,\n            scale(scale(4, bb, cdxtail, _8), _8, ady, _16b), _16b,\n            scale(scale(4, aa, cdxtail, _8), _8, -bdy, _16c), _16c, _32, _48), _48);\n    }\n    if (cdytail !== 0) {\n        cytablen = scale(4, ab, cdytail, cytab);\n        finlen = finadd(finlen, sum_three(\n            scale(cytablen, cytab, 2 * cdy, _16), _16,\n            scale(scale(4, aa, cdytail, _8), _8, bdx, _16b), _16b,\n            scale(scale(4, bb, cdytail, _8), _8, -adx, _16c), _16c, _32, _48), _48);\n    }\n\n    if (adxtail !== 0 || adytail !== 0) {\n        if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n            s1 = bdxtail * cdy;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * cdy;\n            bhi = c - (c - cdy);\n            blo = cdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdx * cdytail;\n            c = splitter * bdx;\n            ahi = c - (c - bdx);\n            alo = bdx - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            s1 = cdxtail * -bdy;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * -bdy;\n            bhi = c - (c - -bdy);\n            blo = -bdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdx * -bdytail;\n            c = splitter * cdx;\n            ahi = c - (c - cdx);\n            alo = cdx - ahi;\n            c = splitter * -bdytail;\n            bhi = c - (c - -bdytail);\n            blo = -bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            bctlen = sum(4, u, 4, v, bct);\n            s1 = bdxtail * cdytail;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdxtail * bdytail;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            bctt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            bctt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            bctt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            bctt[3] = u3;\n            bcttlen = 4;\n        } else {\n            bct[0] = 0;\n            bctlen = 1;\n            bctt[0] = 0;\n            bcttlen = 1;\n        }\n        if (adxtail !== 0) {\n            const len = scale(bctlen, bct, adxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(axtbclen, axtbc, adxtail, _16), _16,\n                scale(len, _16c, 2 * adx, _32), _32, _48), _48);\n\n            const len2 = scale(bcttlen, bctt, adxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * adx, _16), _16,\n                scale(len2, _8, adxtail, _16b), _16b,\n                scale(len, _16c, adxtail, _32), _32, _32b, _64), _64);\n\n            if (bdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, cc, adxtail, _8), _8, bdytail, _16), _16);\n            }\n            if (cdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, bb, -adxtail, _8), _8, cdytail, _16), _16);\n            }\n        }\n        if (adytail !== 0) {\n            const len = scale(bctlen, bct, adytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(aytbclen, aytbc, adytail, _16), _16,\n                scale(len, _16c, 2 * ady, _32), _32, _48), _48);\n\n            const len2 = scale(bcttlen, bctt, adytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * ady, _16), _16,\n                scale(len2, _8, adytail, _16b), _16b,\n                scale(len, _16c, adytail, _32), _32, _32b, _64), _64);\n        }\n    }\n    if (bdxtail !== 0 || bdytail !== 0) {\n        if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n            s1 = cdxtail * ady;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * ady;\n            bhi = c - (c - ady);\n            blo = ady - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdx * adytail;\n            c = splitter * cdx;\n            ahi = c - (c - cdx);\n            alo = cdx - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            n1 = -cdy;\n            n0 = -cdytail;\n            s1 = adxtail * n1;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * n1;\n            bhi = c - (c - n1);\n            blo = n1 - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adx * n0;\n            c = splitter * adx;\n            ahi = c - (c - adx);\n            alo = adx - ahi;\n            c = splitter * n0;\n            bhi = c - (c - n0);\n            blo = n0 - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            catlen = sum(4, u, 4, v, cat);\n            s1 = cdxtail * adytail;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adxtail * cdytail;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            catt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            catt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            catt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            catt[3] = u3;\n            cattlen = 4;\n        } else {\n            cat[0] = 0;\n            catlen = 1;\n            catt[0] = 0;\n            cattlen = 1;\n        }\n        if (bdxtail !== 0) {\n            const len = scale(catlen, cat, bdxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(bxtcalen, bxtca, bdxtail, _16), _16,\n                scale(len, _16c, 2 * bdx, _32), _32, _48), _48);\n\n            const len2 = scale(cattlen, catt, bdxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * bdx, _16), _16,\n                scale(len2, _8, bdxtail, _16b), _16b,\n                scale(len, _16c, bdxtail, _32), _32, _32b, _64), _64);\n\n            if (cdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, aa, bdxtail, _8), _8, cdytail, _16), _16);\n            }\n            if (adytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, cc, -bdxtail, _8), _8, adytail, _16), _16);\n            }\n        }\n        if (bdytail !== 0) {\n            const len = scale(catlen, cat, bdytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(bytcalen, bytca, bdytail, _16), _16,\n                scale(len, _16c, 2 * bdy, _32), _32, _48), _48);\n\n            const len2 = scale(cattlen, catt, bdytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * bdy, _16), _16,\n                scale(len2, _8, bdytail, _16b), _16b,\n                scale(len, _16c, bdytail, _32), _32,  _32b, _64), _64);\n        }\n    }\n    if (cdxtail !== 0 || cdytail !== 0) {\n        if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n            s1 = adxtail * bdy;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * bdy;\n            bhi = c - (c - bdy);\n            blo = bdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adx * bdytail;\n            c = splitter * adx;\n            ahi = c - (c - adx);\n            alo = adx - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            n1 = -ady;\n            n0 = -adytail;\n            s1 = bdxtail * n1;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * n1;\n            bhi = c - (c - n1);\n            blo = n1 - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdx * n0;\n            c = splitter * bdx;\n            ahi = c - (c - bdx);\n            alo = bdx - ahi;\n            c = splitter * n0;\n            bhi = c - (c - n0);\n            blo = n0 - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            abtlen = sum(4, u, 4, v, abt);\n            s1 = adxtail * bdytail;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdxtail * adytail;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            abtt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            abtt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            abtt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            abtt[3] = u3;\n            abttlen = 4;\n        } else {\n            abt[0] = 0;\n            abtlen = 1;\n            abtt[0] = 0;\n            abttlen = 1;\n        }\n        if (cdxtail !== 0) {\n            const len = scale(abtlen, abt, cdxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(cxtablen, cxtab, cdxtail, _16), _16,\n                scale(len, _16c, 2 * cdx, _32), _32, _48), _48);\n\n            const len2 = scale(abttlen, abtt, cdxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * cdx, _16), _16,\n                scale(len2, _8, cdxtail, _16b), _16b,\n                scale(len, _16c, cdxtail, _32), _32, _32b, _64), _64);\n\n            if (adytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, bb, cdxtail, _8), _8, adytail, _16), _16);\n            }\n            if (bdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, aa, -cdxtail, _8), _8, bdytail, _16), _16);\n            }\n        }\n        if (cdytail !== 0) {\n            const len = scale(abtlen, abt, cdytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(cytablen, cytab, cdytail, _16), _16,\n                scale(len, _16c, 2 * cdy, _32), _32, _48), _48);\n\n            const len2 = scale(abttlen, abtt, cdytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * cdy, _16), _16,\n                scale(len2, _8, cdytail, _16b), _16b,\n                scale(len, _16c, cdytail, _32), _32, _32b, _64), _64);\n        }\n    }\n\n    return fin[finlen - 1];\n}\n\nexport function incircle(ax, ay, bx, by, cx, cy, dx, dy) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n\n    const bdxcdy = bdx * cdy;\n    const cdxbdy = cdx * bdy;\n    const alift = adx * adx + ady * ady;\n\n    const cdxady = cdx * ady;\n    const adxcdy = adx * cdy;\n    const blift = bdx * bdx + bdy * bdy;\n\n    const adxbdy = adx * bdy;\n    const bdxady = bdx * ady;\n    const clift = cdx * cdx + cdy * cdy;\n\n    const det =\n        alift * (bdxcdy - cdxbdy) +\n        blift * (cdxady - adxcdy) +\n        clift * (adxbdy - bdxady);\n\n    const permanent =\n        (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * alift +\n        (Math.abs(cdxady) + Math.abs(adxcdy)) * blift +\n        (Math.abs(adxbdy) + Math.abs(bdxady)) * clift;\n\n    const errbound = iccerrboundA * permanent;\n\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n    return incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent);\n}\n\nexport function incirclefast(ax, ay, bx, by, cx, cy, dx, dy) {\n    const adx = ax - dx;\n    const ady = ay - dy;\n    const bdx = bx - dx;\n    const bdy = by - dy;\n    const cdx = cx - dx;\n    const cdy = cy - dy;\n\n    const abdet = adx * bdy - bdx * ady;\n    const bcdet = bdx * cdy - cdx * bdy;\n    const cadet = cdx * ady - adx * cdy;\n    const alift = adx * adx + ady * ady;\n    const blift = bdx * bdx + bdy * bdy;\n    const clift = cdx * cdx + cdy * cdy;\n\n    return alift * bcdet + blift * cadet + clift * abdet;\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale, negate} from './util.js';\n\nconst isperrboundA = (16 + 224 * epsilon) * epsilon;\nconst isperrboundB = (5 + 72 * epsilon) * epsilon;\nconst isperrboundC = (71 + 1408 * epsilon) * epsilon * epsilon;\n\nconst ab = vec(4);\nconst bc = vec(4);\nconst cd = vec(4);\nconst de = vec(4);\nconst ea = vec(4);\nconst ac = vec(4);\nconst bd = vec(4);\nconst ce = vec(4);\nconst da = vec(4);\nconst eb = vec(4);\n\nconst abc = vec(24);\nconst bcd = vec(24);\nconst cde = vec(24);\nconst dea = vec(24);\nconst eab = vec(24);\nconst abd = vec(24);\nconst bce = vec(24);\nconst cda = vec(24);\nconst deb = vec(24);\nconst eac = vec(24);\n\nconst adet = vec(1152);\nconst bdet = vec(1152);\nconst cdet = vec(1152);\nconst ddet = vec(1152);\nconst edet = vec(1152);\nconst abdet = vec(2304);\nconst cddet = vec(2304);\nconst cdedet = vec(3456);\nconst deter = vec(5760);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _8c = vec(8);\nconst _16 = vec(16);\nconst _24 = vec(24);\nconst _48 = vec(48);\nconst _48b = vec(48);\nconst _96 = vec(96);\nconst _192 = vec(192);\nconst _384x = vec(384);\nconst _384y = vec(384);\nconst _384z = vec(384);\nconst _768 = vec(768);\n\nfunction sum_three_scale(a, b, c, az, bz, cz, out) {\n    return sum_three(\n        scale(4, a, az, _8), _8,\n        scale(4, b, bz, _8b), _8b,\n        scale(4, c, cz, _8c), _8c, _16, out);\n}\n\nfunction liftexact(alen, a, blen, b, clen, c, dlen, d, x, y, z, out) {\n    const len = sum(\n        sum(alen, a, blen, b, _48), _48,\n        negate(sum(clen, c, dlen, d, _48b), _48b), _48b, _96);\n\n    return sum_three(\n        scale(scale(len, _96, x, _192), _192, x, _384x), _384x,\n        scale(scale(len, _96, y, _192), _192, y, _384y), _384y,\n        scale(scale(len, _96, z, _192), _192, z, _384z), _384z, _768, out);\n}\n\nfunction insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    s1 = ax * by;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bx * ay;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n    s1 = bx * cy;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cx * by;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cx * dy;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dx * cy;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    cd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    cd[3] = u3;\n    s1 = dx * ey;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ex * dy;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    de[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    de[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    de[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    de[3] = u3;\n    s1 = ex * ay;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ax * ey;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ea[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ea[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ea[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ea[3] = u3;\n    s1 = ax * cy;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cx * ay;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ac[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ac[3] = u3;\n    s1 = bx * dy;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dx * by;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bd[3] = u3;\n    s1 = cx * ey;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ex * cy;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ce[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ce[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ce[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ce[3] = u3;\n    s1 = dx * ay;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ax * dy;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    da[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    da[3] = u3;\n    s1 = ex * by;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bx * ey;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    eb[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    eb[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    eb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    eb[3] = u3;\n\n    const abclen = sum_three_scale(ab, bc, ac, cz, az, -bz, abc);\n    const bcdlen = sum_three_scale(bc, cd, bd, dz, bz, -cz, bcd);\n    const cdelen = sum_three_scale(cd, de, ce, ez, cz, -dz, cde);\n    const dealen = sum_three_scale(de, ea, da, az, dz, -ez, dea);\n    const eablen = sum_three_scale(ea, ab, eb, bz, ez, -az, eab);\n    const abdlen = sum_three_scale(ab, bd, da, dz, az, bz, abd);\n    const bcelen = sum_three_scale(bc, ce, eb, ez, bz, cz, bce);\n    const cdalen = sum_three_scale(cd, da, ac, az, cz, dz, cda);\n    const deblen = sum_three_scale(de, eb, bd, bz, dz, ez, deb);\n    const eaclen = sum_three_scale(ea, ac, ce, cz, ez, az, eac);\n\n    const deterlen = sum_three(\n        liftexact(cdelen, cde, bcelen, bce, deblen, deb, bcdlen, bcd, ax, ay, az, adet), adet,\n        liftexact(dealen, dea, cdalen, cda, eaclen, eac, cdelen, cde, bx, by, bz, bdet), bdet,\n        sum_three(\n            liftexact(eablen, eab, deblen, deb, abdlen, abd, dealen, dea, cx, cy, cz, cdet), cdet,\n            liftexact(abclen, abc, eaclen, eac, bcelen, bce, eablen, eab, dx, dy, dz, ddet), ddet,\n            liftexact(bcdlen, bcd, abdlen, abd, cdalen, cda, abclen, abc, ex, ey, ez, edet), edet, cddet, cdedet), cdedet, abdet, deter);\n\n    return deter[deterlen - 1];\n}\n\nconst xdet = vec(96);\nconst ydet = vec(96);\nconst zdet = vec(96);\nconst fin = vec(1152);\n\nfunction liftadapt(a, b, c, az, bz, cz, x, y, z, out) {\n    const len = sum_three_scale(a, b, c, az, bz, cz, _24);\n    return sum_three(\n        scale(scale(len, _24, x, _48), _48, x, xdet), xdet,\n        scale(scale(len, _24, y, _48), _48, y, ydet), ydet,\n        scale(scale(len, _24, z, _48), _48, z, zdet), zdet, _192, out);\n}\n\nfunction insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent) {\n    let ab3, bc3, cd3, da3, ac3, bd3;\n\n    let aextail, bextail, cextail, dextail;\n    let aeytail, beytail, ceytail, deytail;\n    let aeztail, beztail, ceztail, deztail;\n\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0;\n\n    const aex = ax - ex;\n    const bex = bx - ex;\n    const cex = cx - ex;\n    const dex = dx - ex;\n    const aey = ay - ey;\n    const bey = by - ey;\n    const cey = cy - ey;\n    const dey = dy - ey;\n    const aez = az - ez;\n    const bez = bz - ez;\n    const cez = cz - ez;\n    const dez = dz - ez;\n\n    s1 = aex * bey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bex * aey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    ab3 = _j + _i;\n    bvirt = ab3 - _j;\n    ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);\n    ab[3] = ab3;\n    s1 = bex * cey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cex * bey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    bc3 = _j + _i;\n    bvirt = bc3 - _j;\n    bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);\n    bc[3] = bc3;\n    s1 = cex * dey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dex * cey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    cd3 = _j + _i;\n    bvirt = cd3 - _j;\n    cd[2] = _j - (cd3 - bvirt) + (_i - bvirt);\n    cd[3] = cd3;\n    s1 = dex * aey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = aex * dey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    da3 = _j + _i;\n    bvirt = da3 - _j;\n    da[2] = _j - (da3 - bvirt) + (_i - bvirt);\n    da[3] = da3;\n    s1 = aex * cey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cex * aey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    ac3 = _j + _i;\n    bvirt = ac3 - _j;\n    ac[2] = _j - (ac3 - bvirt) + (_i - bvirt);\n    ac[3] = ac3;\n    s1 = bex * dey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dex * bey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    bd3 = _j + _i;\n    bvirt = bd3 - _j;\n    bd[2] = _j - (bd3 - bvirt) + (_i - bvirt);\n    bd[3] = bd3;\n\n    const finlen = sum(\n        sum(\n            negate(liftadapt(bc, cd, bd, dez, bez, -cez, aex, aey, aez, adet), adet), adet,\n            liftadapt(cd, da, ac, aez, cez, dez, bex, bey, bez, bdet), bdet, abdet), abdet,\n        sum(\n            negate(liftadapt(da, ab, bd, bez, dez, aez, cex, cey, cez, cdet), cdet), cdet,\n            liftadapt(ab, bc, ac, cez, aez, -bez, dex, dey, dez, ddet), ddet, cddet), cddet, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = isperrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - aex;\n    aextail = ax - (aex + bvirt) + (bvirt - ex);\n    bvirt = ay - aey;\n    aeytail = ay - (aey + bvirt) + (bvirt - ey);\n    bvirt = az - aez;\n    aeztail = az - (aez + bvirt) + (bvirt - ez);\n    bvirt = bx - bex;\n    bextail = bx - (bex + bvirt) + (bvirt - ex);\n    bvirt = by - bey;\n    beytail = by - (bey + bvirt) + (bvirt - ey);\n    bvirt = bz - bez;\n    beztail = bz - (bez + bvirt) + (bvirt - ez);\n    bvirt = cx - cex;\n    cextail = cx - (cex + bvirt) + (bvirt - ex);\n    bvirt = cy - cey;\n    ceytail = cy - (cey + bvirt) + (bvirt - ey);\n    bvirt = cz - cez;\n    ceztail = cz - (cez + bvirt) + (bvirt - ez);\n    bvirt = dx - dex;\n    dextail = dx - (dex + bvirt) + (bvirt - ex);\n    bvirt = dy - dey;\n    deytail = dy - (dey + bvirt) + (bvirt - ey);\n    bvirt = dz - dez;\n    deztail = dz - (dez + bvirt) + (bvirt - ez);\n    if (aextail === 0 && aeytail === 0 && aeztail === 0 &&\n        bextail === 0 && beytail === 0 && beztail === 0 &&\n        cextail === 0 && ceytail === 0 && ceztail === 0 &&\n        dextail === 0 && deytail === 0 && deztail === 0) {\n        return det;\n    }\n\n    errbound = isperrboundC * permanent + resulterrbound * Math.abs(det);\n\n    const abeps = (aex * beytail + bey * aextail) - (aey * bextail + bex * aeytail);\n    const bceps = (bex * ceytail + cey * bextail) - (bey * cextail + cex * beytail);\n    const cdeps = (cex * deytail + dey * cextail) - (cey * dextail + dex * ceytail);\n    const daeps = (dex * aeytail + aey * dextail) - (dey * aextail + aex * deytail);\n    const aceps = (aex * ceytail + cey * aextail) - (aey * cextail + cex * aeytail);\n    const bdeps = (bex * deytail + dey * bextail) - (bey * dextail + dex * beytail);\n    det +=\n        (((bex * bex + bey * bey + bez * bez) * ((cez * daeps + dez * aceps + aez * cdeps) +\n        (ceztail * da3 + deztail * ac3 + aeztail * cd3)) + (dex * dex + dey * dey + dez * dez) *\n        ((aez * bceps - bez * aceps + cez * abeps) + (aeztail * bc3 - beztail * ac3 + ceztail * ab3))) -\n        ((aex * aex + aey * aey + aez * aez) * ((bez * cdeps - cez * bdeps + dez * bceps) +\n        (beztail * cd3 - ceztail * bd3 + deztail * bc3)) + (cex * cex + cey * cey + cez * cez) *\n        ((dez * abeps + aez * bdeps + bez * daeps) + (deztail * ab3 + aeztail * bd3 + beztail * da3)))) +\n        2 * (((bex * bextail + bey * beytail + bez * beztail) * (cez * da3 + dez * ac3 + aez * cd3) +\n        (dex * dextail + dey * deytail + dez * deztail) * (aez * bc3 - bez * ac3 + cez * ab3)) -\n        ((aex * aextail + aey * aeytail + aez * aeztail) * (bez * cd3 - cez * bd3 + dez * bc3) +\n        (cex * cextail + cey * ceytail + cez * ceztail) * (dez * ab3 + aez * bd3 + bez * da3)));\n\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    return insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez);\n}\n\nexport function insphere(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n    const aex = ax - ex;\n    const bex = bx - ex;\n    const cex = cx - ex;\n    const dex = dx - ex;\n    const aey = ay - ey;\n    const bey = by - ey;\n    const cey = cy - ey;\n    const dey = dy - ey;\n    const aez = az - ez;\n    const bez = bz - ez;\n    const cez = cz - ez;\n    const dez = dz - ez;\n\n    const aexbey = aex * bey;\n    const bexaey = bex * aey;\n    const ab = aexbey - bexaey;\n    const bexcey = bex * cey;\n    const cexbey = cex * bey;\n    const bc = bexcey - cexbey;\n    const cexdey = cex * dey;\n    const dexcey = dex * cey;\n    const cd = cexdey - dexcey;\n    const dexaey = dex * aey;\n    const aexdey = aex * dey;\n    const da = dexaey - aexdey;\n    const aexcey = aex * cey;\n    const cexaey = cex * aey;\n    const ac = aexcey - cexaey;\n    const bexdey = bex * dey;\n    const dexbey = dex * bey;\n    const bd = bexdey - dexbey;\n\n    const alift = aex * aex + aey * aey + aez * aez;\n    const blift = bex * bex + bey * bey + bez * bez;\n    const clift = cex * cex + cey * cey + cez * cez;\n    const dlift = dex * dex + dey * dey + dez * dez;\n\n    const det =\n        (clift * (dez * ab + aez * bd + bez * da) - dlift * (aez * bc - bez * ac + cez * ab)) +\n        (alift * (bez * cd - cez * bd + dez * bc) - blift * (cez * da + dez * ac + aez * cd));\n\n    const aezplus = Math.abs(aez);\n    const bezplus = Math.abs(bez);\n    const cezplus = Math.abs(cez);\n    const dezplus = Math.abs(dez);\n    const aexbeyplus = Math.abs(aexbey) + Math.abs(bexaey);\n    const bexceyplus = Math.abs(bexcey) + Math.abs(cexbey);\n    const cexdeyplus = Math.abs(cexdey) + Math.abs(dexcey);\n    const dexaeyplus = Math.abs(dexaey) + Math.abs(aexdey);\n    const aexceyplus = Math.abs(aexcey) + Math.abs(cexaey);\n    const bexdeyplus = Math.abs(bexdey) + Math.abs(dexbey);\n    const permanent =\n        (cexdeyplus * bezplus + bexdeyplus * cezplus + bexceyplus * dezplus) * alift +\n        (dexaeyplus * cezplus + aexceyplus * dezplus + cexdeyplus * aezplus) * blift +\n        (aexbeyplus * dezplus + bexdeyplus * aezplus + dexaeyplus * bezplus) * clift +\n        (bexceyplus * aezplus + aexceyplus * bezplus + aexbeyplus * cezplus) * dlift;\n\n    const errbound = isperrboundA * permanent;\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n    return -insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent);\n}\n\nexport function inspherefast(pax, pay, paz, pbx, pby, pbz, pcx, pcy, pcz, pdx, pdy, pdz, pex, pey, pez) {\n    const aex = pax - pex;\n    const bex = pbx - pex;\n    const cex = pcx - pex;\n    const dex = pdx - pex;\n    const aey = pay - pey;\n    const bey = pby - pey;\n    const cey = pcy - pey;\n    const dey = pdy - pey;\n    const aez = paz - pez;\n    const bez = pbz - pez;\n    const cez = pcz - pez;\n    const dez = pdz - pez;\n\n    const ab = aex * bey - bex * aey;\n    const bc = bex * cey - cex * bey;\n    const cd = cex * dey - dex * cey;\n    const da = dex * aey - aex * dey;\n    const ac = aex * cey - cex * aey;\n    const bd = bex * dey - dex * bey;\n\n    const abc = aez * bc - bez * ac + cez * ab;\n    const bcd = bez * cd - cez * bd + dez * bc;\n    const cda = cez * da + dez * ac + aez * cd;\n    const dab = dez * ab + aez * bd + bez * da;\n\n    const alift = aex * aex + aey * aey + aez * aez;\n    const blift = bex * bex + bey * bey + bez * bez;\n    const clift = cex * cex + cey * cey + cez * cez;\n    const dlift = dex * dex + dey * dey + dez * dez;\n\n    return (clift * dab - dlift * abc) + (alift * bcd - blift * cda);\n}\n","\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nimport {orient2d} from 'robust-predicates';\n\nexport default class Delaunator {\n\n    static from(points, getX = defaultGetX, getY = defaultGetY) {\n        const n = points.length;\n        const coords = new Float64Array(n * 2);\n\n        for (let i = 0; i < n; i++) {\n            const p = points[i];\n            coords[2 * i] = getX(p);\n            coords[2 * i + 1] = getY(p);\n        }\n\n        return new Delaunator(coords);\n    }\n\n    constructor(coords) {\n        const n = coords.length >> 1;\n        if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n        this.coords = coords;\n\n        // arrays that will store the triangulation graph\n        const maxTriangles = Math.max(2 * n - 5, 0);\n        this._triangles = new Uint32Array(maxTriangles * 3);\n        this._halfedges = new Int32Array(maxTriangles * 3);\n\n        // temporary arrays for tracking the edges of the advancing convex hull\n        this._hashSize = Math.ceil(Math.sqrt(n));\n        this._hullPrev = new Uint32Array(n); // edge to prev edge\n        this._hullNext = new Uint32Array(n); // edge to next edge\n        this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n        this._hullHash = new Int32Array(this._hashSize); // angular edge hash\n\n        // temporary arrays for sorting points\n        this._ids = new Uint32Array(n);\n        this._dists = new Float64Array(n);\n\n        this.update();\n    }\n\n    update() {\n        const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} =  this;\n        const n = coords.length >> 1;\n\n        // populate an array of point indices; calculate input data bbox\n        let minX = Infinity;\n        let minY = Infinity;\n        let maxX = -Infinity;\n        let maxY = -Infinity;\n\n        for (let i = 0; i < n; i++) {\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n            this._ids[i] = i;\n        }\n        const cx = (minX + maxX) / 2;\n        const cy = (minY + maxY) / 2;\n\n        let i0, i1, i2;\n\n        // pick a seed point close to the center\n        for (let i = 0, minDist = Infinity; i < n; i++) {\n            const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist) {\n                i0 = i;\n                minDist = d;\n            }\n        }\n        const i0x = coords[2 * i0];\n        const i0y = coords[2 * i0 + 1];\n\n        // find the point closest to the seed\n        for (let i = 0, minDist = Infinity; i < n; i++) {\n            if (i === i0) continue;\n            const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist && d > 0) {\n                i1 = i;\n                minDist = d;\n            }\n        }\n        let i1x = coords[2 * i1];\n        let i1y = coords[2 * i1 + 1];\n\n        let minRadius = Infinity;\n\n        // find the third point which forms the smallest circumcircle with the first two\n        for (let i = 0; i < n; i++) {\n            if (i === i0 || i === i1) continue;\n            const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n            if (r < minRadius) {\n                i2 = i;\n                minRadius = r;\n            }\n        }\n        let i2x = coords[2 * i2];\n        let i2y = coords[2 * i2 + 1];\n\n        if (minRadius === Infinity) {\n            // order collinear points by dx (or dy if all x are identical)\n            // and return the list as a hull\n            for (let i = 0; i < n; i++) {\n                this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n            }\n            quicksort(this._ids, this._dists, 0, n - 1);\n            const hull = new Uint32Array(n);\n            let j = 0;\n            for (let i = 0, d0 = -Infinity; i < n; i++) {\n                const id = this._ids[i];\n                const d = this._dists[id];\n                if (d > d0) {\n                    hull[j++] = id;\n                    d0 = d;\n                }\n            }\n            this.hull = hull.subarray(0, j);\n            this.triangles = new Uint32Array(0);\n            this.halfedges = new Uint32Array(0);\n            return;\n        }\n\n        // swap the order of the seed points for counter-clockwise orientation\n        if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {\n            const i = i1;\n            const x = i1x;\n            const y = i1y;\n            i1 = i2;\n            i1x = i2x;\n            i1y = i2y;\n            i2 = i;\n            i2x = x;\n            i2y = y;\n        }\n\n        const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n        this._cx = center.x;\n        this._cy = center.y;\n\n        for (let i = 0; i < n; i++) {\n            this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n        }\n\n        // sort the points by distance from the seed triangle circumcenter\n        quicksort(this._ids, this._dists, 0, n - 1);\n\n        // set up the seed triangle as the starting hull\n        this._hullStart = i0;\n        let hullSize = 3;\n\n        hullNext[i0] = hullPrev[i2] = i1;\n        hullNext[i1] = hullPrev[i0] = i2;\n        hullNext[i2] = hullPrev[i1] = i0;\n\n        hullTri[i0] = 0;\n        hullTri[i1] = 1;\n        hullTri[i2] = 2;\n\n        hullHash.fill(-1);\n        hullHash[this._hashKey(i0x, i0y)] = i0;\n        hullHash[this._hashKey(i1x, i1y)] = i1;\n        hullHash[this._hashKey(i2x, i2y)] = i2;\n\n        this.trianglesLen = 0;\n        this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n        for (let k = 0, xp, yp; k < this._ids.length; k++) {\n            const i = this._ids[k];\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n\n            // skip near-duplicate points\n            if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n            xp = x;\n            yp = y;\n\n            // skip seed triangle points\n            if (i === i0 || i === i1 || i === i2) continue;\n\n            // find a visible edge on the convex hull using edge hash\n            let start = 0;\n            for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n                start = hullHash[(key + j) % this._hashSize];\n                if (start !== -1 && start !== hullNext[start]) break;\n            }\n\n            start = hullPrev[start];\n            let e = start, q;\n            while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {\n                e = q;\n                if (e === start) {\n                    e = -1;\n                    break;\n                }\n            }\n            if (e === -1) continue; // likely a near-duplicate point; skip it\n\n            // add the first triangle from the point\n            let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n            // recursively flip triangles from the point until they satisfy the Delaunay condition\n            hullTri[i] = this._legalize(t + 2);\n            hullTri[e] = t; // keep track of boundary triangles on the hull\n            hullSize++;\n\n            // walk forward through the hull, adding more triangles and flipping recursively\n            let n = hullNext[e];\n            while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {\n                t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n                hullTri[i] = this._legalize(t + 2);\n                hullNext[n] = n; // mark as removed\n                hullSize--;\n                n = q;\n            }\n\n            // walk backward from the other side, adding more triangles and flipping\n            if (e === start) {\n                while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {\n                    t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n                    this._legalize(t + 2);\n                    hullTri[q] = t;\n                    hullNext[e] = e; // mark as removed\n                    hullSize--;\n                    e = q;\n                }\n            }\n\n            // update the hull indices\n            this._hullStart = hullPrev[i] = e;\n            hullNext[e] = hullPrev[n] = i;\n            hullNext[i] = n;\n\n            // save the two new edges in the hash table\n            hullHash[this._hashKey(x, y)] = i;\n            hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n        }\n\n        this.hull = new Uint32Array(hullSize);\n        for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n            this.hull[i] = e;\n            e = hullNext[e];\n        }\n\n        // trim typed triangle mesh arrays\n        this.triangles = this._triangles.subarray(0, this.trianglesLen);\n        this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n    }\n\n    _hashKey(x, y) {\n        return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n    }\n\n    _legalize(a) {\n        const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n        let i = 0;\n        let ar = 0;\n\n        // recursion eliminated with a fixed-size stack\n        while (true) {\n            const b = halfedges[a];\n\n            /* if the pair of triangles doesn't satisfy the Delaunay condition\n             * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n             * then do the same check/flip recursively for the new pair of triangles\n             *\n             *           pl                    pl\n             *          /||\\                  /  \\\n             *       al/ || \\bl            al/    \\a\n             *        /  ||  \\              /      \\\n             *       /  a||b  \\    flip    /___ar___\\\n             *     p0\\   ||   /p1   =>   p0\\---bl---/p1\n             *        \\  ||  /              \\      /\n             *       ar\\ || /br             b\\    /br\n             *          \\||/                  \\  /\n             *           pr                    pr\n             */\n            const a0 = a - a % 3;\n            ar = a0 + (a + 2) % 3;\n\n            if (b === -1) { // convex hull edge\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n                continue;\n            }\n\n            const b0 = b - b % 3;\n            const al = a0 + (a + 1) % 3;\n            const bl = b0 + (b + 2) % 3;\n\n            const p0 = triangles[ar];\n            const pr = triangles[a];\n            const pl = triangles[al];\n            const p1 = triangles[bl];\n\n            const illegal = inCircle(\n                coords[2 * p0], coords[2 * p0 + 1],\n                coords[2 * pr], coords[2 * pr + 1],\n                coords[2 * pl], coords[2 * pl + 1],\n                coords[2 * p1], coords[2 * p1 + 1]);\n\n            if (illegal) {\n                triangles[a] = p1;\n                triangles[b] = p0;\n\n                const hbl = halfedges[bl];\n\n                // edge swapped on the other side of the hull (rare); fix the halfedge reference\n                if (hbl === -1) {\n                    let e = this._hullStart;\n                    do {\n                        if (this._hullTri[e] === bl) {\n                            this._hullTri[e] = a;\n                            break;\n                        }\n                        e = this._hullPrev[e];\n                    } while (e !== this._hullStart);\n                }\n                this._link(a, hbl);\n                this._link(b, halfedges[ar]);\n                this._link(ar, bl);\n\n                const br = b0 + (b + 1) % 3;\n\n                // don't worry about hitting the cap: it can only happen on extremely degenerate input\n                if (i < EDGE_STACK.length) {\n                    EDGE_STACK[i++] = br;\n                }\n            } else {\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n            }\n        }\n\n        return ar;\n    }\n\n    _link(a, b) {\n        this._halfedges[a] = b;\n        if (b !== -1) this._halfedges[b] = a;\n    }\n\n    // add a new triangle given vertex indices and adjacent half-edge ids\n    _addTriangle(i0, i1, i2, a, b, c) {\n        const t = this.trianglesLen;\n\n        this._triangles[t] = i0;\n        this._triangles[t + 1] = i1;\n        this._triangles[t + 2] = i2;\n\n        this._link(t, a);\n        this._link(t + 1, b);\n        this._link(t + 2, c);\n\n        this.trianglesLen += 3;\n\n        return t;\n    }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n    const p = dx / (Math.abs(dx) + Math.abs(dy));\n    return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n    const dx = ax - bx;\n    const dy = ay - by;\n    return dx * dx + dy * dy;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n    const dx = ax - px;\n    const dy = ay - py;\n    const ex = bx - px;\n    const ey = by - py;\n    const fx = cx - px;\n    const fy = cy - py;\n\n    const ap = dx * dx + dy * dy;\n    const bp = ex * ex + ey * ey;\n    const cp = fx * fx + fy * fy;\n\n    return dx * (ey * cp - bp * fy) -\n           dy * (ex * cp - bp * fx) +\n           ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = (ey * bl - dy * cl) * d;\n    const y = (dx * cl - ex * bl) * d;\n\n    return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = ax + (ey * bl - dy * cl) * d;\n    const y = ay + (dx * cl - ex * bl) * d;\n\n    return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n    if (right - left <= 20) {\n        for (let i = left + 1; i <= right; i++) {\n            const temp = ids[i];\n            const tempDist = dists[temp];\n            let j = i - 1;\n            while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n            ids[j + 1] = temp;\n        }\n    } else {\n        const median = (left + right) >> 1;\n        let i = left + 1;\n        let j = right;\n        swap(ids, median, i);\n        if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n        if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n        if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n        const temp = ids[i];\n        const tempDist = dists[temp];\n        while (true) {\n            do i++; while (dists[ids[i]] < tempDist);\n            do j--; while (dists[ids[j]] > tempDist);\n            if (j < i) break;\n            swap(ids, i, j);\n        }\n        ids[left + 1] = ids[j];\n        ids[j] = temp;\n\n        if (right - i + 1 >= j - left) {\n            quicksort(ids, dists, i, right);\n            quicksort(ids, dists, left, j - 1);\n        } else {\n            quicksort(ids, dists, left, j - 1);\n            quicksort(ids, dists, i, right);\n        }\n    }\n}\n\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n    return p[0];\n}\nfunction defaultGetY(p) {\n    return p[1];\n}\n","const epsilon = 1e-6;\n\nexport default class Path {\n  constructor() {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n  }\n  moveTo(x, y) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  }\n  lineTo(x, y) {\n    this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arc(x, y, r) {\n    x = +x, y = +y, r = +r;\n    const x0 = x + r;\n    const y0 = y;\n    if (r < 0) throw new Error(\"negative radius\");\n    if (this._x1 === null) this._ += `M${x0},${y0}`;\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n    if (!r) return;\n    this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n  }\n  rect(x, y, w, h) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n  }\n  value() {\n    return this._ || null;\n  }\n}\n","export default class Polygon {\n  constructor() {\n    this._ = [];\n  }\n  moveTo(x, y) {\n    this._.push([x, y]);\n  }\n  closePath() {\n    this._.push(this._[0].slice());\n  }\n  lineTo(x, y) {\n    this._.push([x, y]);\n  }\n  value() {\n    return this._.length ? this._ : null;\n  }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n  constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n    if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n    this.delaunay = delaunay;\n    this._circumcenters = new Float64Array(delaunay.points.length * 2);\n    this.vectors = new Float64Array(delaunay.points.length * 2);\n    this.xmax = xmax, this.xmin = xmin;\n    this.ymax = ymax, this.ymin = ymin;\n    this._init();\n  }\n  update() {\n    this.delaunay.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const {delaunay: {points, hull, triangles}, vectors} = this;\n    let bx, by; // lazily computed barycenter of the hull\n\n    // Compute circumcenters.\n    const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n    for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n      const t1 = triangles[i] * 2;\n      const t2 = triangles[i + 1] * 2;\n      const t3 = triangles[i + 2] * 2;\n      const x1 = points[t1];\n      const y1 = points[t1 + 1];\n      const x2 = points[t2];\n      const y2 = points[t2 + 1];\n      const x3 = points[t3];\n      const y3 = points[t3 + 1];\n\n      const dx = x2 - x1;\n      const dy = y2 - y1;\n      const ex = x3 - x1;\n      const ey = y3 - y1;\n      const ab = (dx * ey - dy * ex) * 2;\n\n      if (Math.abs(ab) < 1e-9) {\n        // For a degenerate triangle, the circumcenter is at the infinity, in a\n        // direction orthogonal to the halfedge and away from the “center” of\n        // the diagram <bx, by>, defined as the hull’s barycenter.\n        if (bx === undefined) {\n          bx = by = 0;\n          for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1];\n          bx /= hull.length, by /= hull.length;\n        }\n        const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex);\n        x = (x1 + x3) / 2 - a * ey;\n        y = (y1 + y3) / 2 + a * ex;\n      } else {\n        const d = 1 / ab;\n        const bl = dx * dx + dy * dy;\n        const cl = ex * ex + ey * ey;\n        x = x1 + (ey * bl - dy * cl) * d;\n        y = y1 + (dx * cl - ex * bl) * d;\n      }\n      circumcenters[j] = x;\n      circumcenters[j + 1] = y;\n    }\n\n    // Compute exterior cell rays.\n    let h = hull[hull.length - 1];\n    let p0, p1 = h * 4;\n    let x0, x1 = points[2 * h];\n    let y0, y1 = points[2 * h + 1];\n    vectors.fill(0);\n    for (let i = 0; i < hull.length; ++i) {\n      h = hull[i];\n      p0 = p1, x0 = x1, y0 = y1;\n      p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n      vectors[p0 + 2] = vectors[p1] = y0 - y1;\n      vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n    }\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n    if (hull.length <= 1) return null;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = Math.floor(i / 3) * 2;\n      const tj = Math.floor(j / 3) * 2;\n      const xi = circumcenters[ti];\n      const yi = circumcenters[ti + 1];\n      const xj = circumcenters[tj];\n      const yj = circumcenters[tj + 1];\n      this._renderSegment(xi, yi, xj, yj, context);\n    }\n    let h0, h1 = hull[hull.length - 1];\n    for (let i = 0; i < hull.length; ++i) {\n      h0 = h1, h1 = hull[i];\n      const t = Math.floor(inedges[h1] / 3) * 2;\n      const x = circumcenters[t];\n      const y = circumcenters[t + 1];\n      const v = h0 * 4;\n      const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n      if (p) this._renderSegment(x, y, p[0], p[1], context);\n    }\n    return buffer && buffer.value();\n  }\n  renderBounds(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n    return buffer && buffer.value();\n  }\n  renderCell(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const points = this._clip(i);\n    if (points === null || !points.length) return;\n    context.moveTo(points[0], points[1]);\n    let n = points.length;\n    while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n    for (let i = 2; i < n; i += 2) {\n      if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n        context.lineTo(points[i], points[i + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *cellPolygons() {\n    const {delaunay: {points}} = this;\n    for (let i = 0, n = points.length / 2; i < n; ++i) {\n      const cell = this.cellPolygon(i);\n      if (cell) cell.index = i, yield cell;\n    }\n  }\n  cellPolygon(i) {\n    const polygon = new Polygon;\n    this.renderCell(i, polygon);\n    return polygon.value();\n  }\n  _renderSegment(x0, y0, x1, y1, context) {\n    let S;\n    const c0 = this._regioncode(x0, y0);\n    const c1 = this._regioncode(x1, y1);\n    if (c0 === 0 && c1 === 0) {\n      context.moveTo(x0, y0);\n      context.lineTo(x1, y1);\n    } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n      context.moveTo(S[0], S[1]);\n      context.lineTo(S[2], S[3]);\n    }\n  }\n  contains(i, x, y) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n    return this.delaunay._step(i, x, y) === i;\n  }\n  *neighbors(i) {\n    const ci = this._clip(i);\n    if (ci) for (const j of this.delaunay.neighbors(i)) {\n      const cj = this._clip(j);\n      // find the common edge\n      if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n        for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n          if (ci[ai] === cj[aj]\n              && ci[ai + 1] === cj[aj + 1]\n              && ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj]\n              && ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) {\n            yield j;\n            break loop;\n          }\n        }\n      }\n    }\n  }\n  _cell(i) {\n    const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n    const e0 = inedges[i];\n    if (e0 === -1) return null; // coincident point\n    const points = [];\n    let e = e0;\n    do {\n      const t = Math.floor(e / 3);\n      points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n    } while (e !== e0 && e !== -1);\n    return points;\n  }\n  _clip(i) {\n    // degenerate case (1 valid point: return the box)\n    if (i === 0 && this.delaunay.hull.length === 1) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    const points = this._cell(i);\n    if (points === null) return null;\n    const {vectors: V} = this;\n    const v = i * 4;\n    return this._simplify(V[v] || V[v + 1]\n        ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n        : this._clipFinite(i, points));\n  }\n  _clipFinite(i, points) {\n    const n = points.length;\n    let P = null;\n    let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n    let c0, c1 = this._regioncode(x1, y1);\n    let e0, e1 = 0;\n    for (let j = 0; j < n; j += 2) {\n      x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n      c0 = c1, c1 = this._regioncode(x1, y1);\n      if (c0 === 0 && c1 === 0) {\n        e0 = e1, e1 = 0;\n        if (P) P.push(x1, y1);\n        else P = [x1, y1];\n      } else {\n        let S, sx0, sy0, sx1, sy1;\n        if (c0 === 0) {\n          if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n          [sx0, sy0, sx1, sy1] = S;\n        } else {\n          if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n          [sx1, sy1, sx0, sy0] = S;\n          e0 = e1, e1 = this._edgecode(sx0, sy0);\n          if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n          if (P) P.push(sx0, sy0);\n          else P = [sx0, sy0];\n        }\n        e0 = e1, e1 = this._edgecode(sx1, sy1);\n        if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n        if (P) P.push(sx1, sy1);\n        else P = [sx1, sy1];\n      }\n    }\n    if (P) {\n      e0 = e1, e1 = this._edgecode(P[0], P[1]);\n      if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    return P;\n  }\n  _clipSegment(x0, y0, x1, y1, c0, c1) {\n    // for more robustness, always consider the segment in the same order\n    const flip = c0 < c1;\n    if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0];\n    while (true) {\n      if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1];\n      if (c0 & c1) return null;\n      let x, y, c = c0 || c1;\n      if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n      else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n      else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n      else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n      if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n      else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n    }\n  }\n  _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n    let P = Array.from(points), p;\n    if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n    if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n    if (P = this._clipFinite(i, P)) {\n      for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n        c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n        if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n      }\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n    }\n    return P;\n  }\n  _edge(i, e0, e1, P, j) {\n    while (e0 !== e1) {\n      let x, y;\n      switch (e0) {\n        case 0b0101: e0 = 0b0100; continue; // top-left\n        case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n        case 0b0110: e0 = 0b0010; continue; // top-right\n        case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n        case 0b1010: e0 = 0b1000; continue; // bottom-right\n        case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n        case 0b1001: e0 = 0b0001; continue; // bottom-left\n        case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n      }\n      // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are\n      // undefined, the conditional statement will be executed.\n      if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n        P.splice(j, 0, x, y), j += 2;\n      }\n    }\n    return j;\n  }\n  _project(x0, y0, vx, vy) {\n    let t = Infinity, c, x, y;\n    if (vy < 0) { // top\n      if (y0 <= this.ymin) return null;\n      if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n    } else if (vy > 0) { // bottom\n      if (y0 >= this.ymax) return null;\n      if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n    }\n    if (vx > 0) { // right\n      if (x0 >= this.xmax) return null;\n      if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n    } else if (vx < 0) { // left\n      if (x0 <= this.xmin) return null;\n      if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n    }\n    return [x, y];\n  }\n  _edgecode(x, y) {\n    return (x === this.xmin ? 0b0001\n        : x === this.xmax ? 0b0010 : 0b0000)\n        | (y === this.ymin ? 0b0100\n        : y === this.ymax ? 0b1000 : 0b0000);\n  }\n  _regioncode(x, y) {\n    return (x < this.xmin ? 0b0001\n        : x > this.xmax ? 0b0010 : 0b0000)\n        | (y < this.ymin ? 0b0100\n        : y > this.ymax ? 0b1000 : 0b0000);\n  }\n  _simplify(P) {\n    if (P && P.length > 4) {\n      for (let i = 0; i < P.length; i+= 2) {\n        const j = (i + 2) % P.length, k = (i + 4) % P.length;\n        if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) {\n          P.splice(j, 2), i -= 2;\n        }\n      }\n      if (!P.length) P = null;\n    }\n    return P;\n  }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n  return p[0];\n}\n\nfunction pointY(p) {\n  return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n  const {triangles, coords} = d;\n  for (let i = 0; i < triangles.length; i += 3) {\n    const a = 2 * triangles[i],\n          b = 2 * triangles[i + 1],\n          c = 2 * triangles[i + 2],\n          cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n                - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n    if (cross > 1e-10) return false;\n  }\n  return true;\n}\n\nfunction jitter(x, y, r) {\n  return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n  static from(points, fx = pointX, fy = pointY, that) {\n    return new Delaunay(\"length\" in points\n        ? flatArray(points, fx, fy, that)\n        : Float64Array.from(flatIterable(points, fx, fy, that)));\n  }\n  constructor(points) {\n    this._delaunator = new Delaunator(points);\n    this.inedges = new Int32Array(points.length / 2);\n    this._hullIndex = new Int32Array(points.length / 2);\n    this.points = this._delaunator.coords;\n    this._init();\n  }\n  update() {\n    this._delaunator.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const d = this._delaunator, points = this.points;\n\n    // check for collinear\n    if (d.hull && d.hull.length > 2 && collinear(d)) {\n      this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n        .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n      const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n        bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n        r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n      for (let i = 0, n = points.length / 2; i < n; ++i) {\n        const p = jitter(points[2 * i], points[2 * i + 1], r);\n        points[2 * i] = p[0];\n        points[2 * i + 1] = p[1];\n      }\n      this._delaunator = new Delaunator(points);\n    } else {\n      delete this.collinear;\n    }\n\n    const halfedges = this.halfedges = this._delaunator.halfedges;\n    const hull = this.hull = this._delaunator.hull;\n    const triangles = this.triangles = this._delaunator.triangles;\n    const inedges = this.inedges.fill(-1);\n    const hullIndex = this._hullIndex.fill(-1);\n\n    // Compute an index from each point to an (arbitrary) incoming halfedge\n    // Used to give the first neighbor of each point; for this reason,\n    // on the hull we give priority to exterior halfedges\n    for (let e = 0, n = halfedges.length; e < n; ++e) {\n      const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n      if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n    }\n    for (let i = 0, n = hull.length; i < n; ++i) {\n      hullIndex[hull[i]] = i;\n    }\n\n    // degenerate case: 1 or 2 (distinct) points\n    if (hull.length <= 2 && hull.length > 0) {\n      this.triangles = new Int32Array(3).fill(-1);\n      this.halfedges = new Int32Array(3).fill(-1);\n      this.triangles[0] = hull[0];\n      inedges[hull[0]] = 1;\n      if (hull.length === 2) {\n        inedges[hull[1]] = 0;\n        this.triangles[1] = hull[1];\n        this.triangles[2] = hull[1];\n      }\n    }\n  }\n  voronoi(bounds) {\n    return new Voronoi(this, bounds);\n  }\n  *neighbors(i) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n    // degenerate case with several collinear points\n    if (collinear) {\n      const l = collinear.indexOf(i);\n      if (l > 0) yield collinear[l - 1];\n      if (l < collinear.length - 1) yield collinear[l + 1];\n      return;\n    }\n\n    const e0 = inedges[i];\n    if (e0 === -1) return; // coincident point\n    let e = e0, p0 = -1;\n    do {\n      yield p0 = triangles[e];\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) return; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        const p = hull[(_hullIndex[i] + 1) % hull.length];\n        if (p !== p0) yield p;\n        return;\n      }\n    } while (e !== e0);\n  }\n  find(x, y, i = 0) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n    const i0 = i;\n    let c;\n    while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n    return c;\n  }\n  _step(i, x, y) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n    if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n    let c = i;\n    let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n    const e0 = inedges[i];\n    let e = e0;\n    do {\n      let t = triangles[e];\n      const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n      if (dt < dc) dc = dt, c = t;\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        e = hull[(_hullIndex[i] + 1) % hull.length];\n        if (e !== t) {\n          if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n        }\n        break;\n      }\n    } while (e !== e0);\n    return c;\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, halfedges, triangles} = this;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = triangles[i] * 2;\n      const tj = triangles[j] * 2;\n      context.moveTo(points[ti], points[ti + 1]);\n      context.lineTo(points[tj], points[tj + 1]);\n    }\n    this.renderHull(context);\n    return buffer && buffer.value();\n  }\n  renderPoints(context, r) {\n    if (r === undefined && (!context || typeof context.moveTo !== \"function\")) r = context, context = null;\n    r = r == undefined ? 2 : +r;\n    const buffer = context == null ? context = new Path : undefined;\n    const {points} = this;\n    for (let i = 0, n = points.length; i < n; i += 2) {\n      const x = points[i], y = points[i + 1];\n      context.moveTo(x + r, y);\n      context.arc(x, y, r, 0, tau);\n    }\n    return buffer && buffer.value();\n  }\n  renderHull(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {hull, points} = this;\n    const h = hull[0] * 2, n = hull.length;\n    context.moveTo(points[h], points[h + 1]);\n    for (let i = 1; i < n; ++i) {\n      const h = 2 * hull[i];\n      context.lineTo(points[h], points[h + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  hullPolygon() {\n    const polygon = new Polygon;\n    this.renderHull(polygon);\n    return polygon.value();\n  }\n  renderTriangle(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, triangles} = this;\n    const t0 = triangles[i *= 3] * 2;\n    const t1 = triangles[i + 1] * 2;\n    const t2 = triangles[i + 2] * 2;\n    context.moveTo(points[t0], points[t0 + 1]);\n    context.lineTo(points[t1], points[t1 + 1]);\n    context.lineTo(points[t2], points[t2 + 1]);\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *trianglePolygons() {\n    const {triangles} = this;\n    for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n      yield this.trianglePolygon(i);\n    }\n  }\n  trianglePolygon(i) {\n    const polygon = new Polygon;\n    this.renderTriangle(i, polygon);\n    return polygon.value();\n  }\n}\n\nfunction flatArray(points, fx, fy, that) {\n  const n = points.length;\n  const array = new Float64Array(n * 2);\n  for (let i = 0; i < n; ++i) {\n    const p = points[i];\n    array[i * 2] = fx.call(that, p, i, points);\n    array[i * 2 + 1] = fy.call(that, p, i, points);\n  }\n  return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n  let i = 0;\n  for (const p of points) {\n    yield fx.call(that, p, i, points);\n    yield fy.call(that, p, i, points);\n    ++i;\n  }\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9],"mappings":"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"}