{"version":3,"sources":["../../from-git/browser-geo-tz/node_modules/geobuf/encode.js","../../from-git/browser-geo-tz/node_modules/geobuf/decode.js","../../from-git/browser-geo-tz/node_modules/geobuf/index.js","../../from-git/browser-geo-tz/node_modules/ieee754/index.js","../../from-git/browser-geo-tz/node_modules/pbf/index.js","../../from-git/browser-geo-tz/src/find.ts","../../from-git/browser-geo-tz/src/oceanUtils.ts","../../from-git/browser-geo-tz/node_modules/robust-predicates/esm/util.js","../../from-git/browser-geo-tz/node_modules/robust-predicates/esm/orient2d.js","../../from-git/browser-geo-tz/node_modules/robust-predicates/esm/orient3d.js","../../from-git/browser-geo-tz/node_modules/robust-predicates/esm/incircle.js","../../from-git/browser-geo-tz/node_modules/robust-predicates/esm/insphere.js","../../from-git/browser-geo-tz/node_modules/point-in-polygon-hao/dist/esm/index.js","../../from-git/browser-geo-tz/node_modules/@turf/helpers/index.ts","../../from-git/browser-geo-tz/node_modules/@turf/invariant/index.ts","../../from-git/browser-geo-tz/node_modules/@turf/boolean-point-in-polygon/index.ts","../src/utils.ts","../src/sun-position.ts"],"sourcesContent":["'use strict';\n\nmodule.exports = encode;\n\nvar keys, keysNum, keysArr, dim, e,\n    maxPrecision = 1e6;\n\nvar geometryTypes = {\n    'Point': 0,\n    'MultiPoint': 1,\n    'LineString': 2,\n    'MultiLineString': 3,\n    'Polygon': 4,\n    'MultiPolygon': 5,\n    'GeometryCollection': 6\n};\n\nfunction encode(obj, pbf) {\n    keys = {};\n    keysArr = [];\n    keysNum = 0;\n    dim = 0;\n    e = 1;\n\n    analyze(obj);\n\n    e = Math.min(e, maxPrecision);\n    var precision = Math.ceil(Math.log(e) / Math.LN10);\n\n    for (var i = 0; i < keysArr.length; i++) pbf.writeStringField(1, keysArr[i]);\n    if (dim !== 2) pbf.writeVarintField(2, dim);\n    if (precision !== 6) pbf.writeVarintField(3, precision);\n\n    if (obj.type === 'FeatureCollection') pbf.writeMessage(4, writeFeatureCollection, obj);\n    else if (obj.type === 'Feature') pbf.writeMessage(5, writeFeature, obj);\n    else pbf.writeMessage(6, writeGeometry, obj);\n\n    keys = null;\n\n    return pbf.finish();\n}\n\nfunction analyze(obj) {\n    var i, key;\n\n    if (obj.type === 'FeatureCollection') {\n        for (i = 0; i < obj.features.length; i++) analyze(obj.features[i]);\n\n    } else if (obj.type === 'Feature') {\n        if (obj.geometry !== null) analyze(obj.geometry);\n        for (key in obj.properties) saveKey(key);\n\n    } else if (obj.type === 'Point') analyzePoint(obj.coordinates);\n    else if (obj.type === 'MultiPoint') analyzePoints(obj.coordinates);\n    else if (obj.type === 'GeometryCollection') {\n        for (i = 0; i < obj.geometries.length; i++) analyze(obj.geometries[i]);\n    }\n    else if (obj.type === 'LineString') analyzePoints(obj.coordinates);\n    else if (obj.type === 'Polygon' || obj.type === 'MultiLineString') analyzeMultiLine(obj.coordinates);\n    else if (obj.type === 'MultiPolygon') {\n        for (i = 0; i < obj.coordinates.length; i++) analyzeMultiLine(obj.coordinates[i]);\n    }\n\n    for (key in obj) {\n        if (!isSpecialKey(key, obj.type)) saveKey(key);\n    }\n}\n\nfunction analyzeMultiLine(coords) {\n    for (var i = 0; i < coords.length; i++) analyzePoints(coords[i]);\n}\n\nfunction analyzePoints(coords) {\n    for (var i = 0; i < coords.length; i++) analyzePoint(coords[i]);\n}\n\nfunction analyzePoint(point) {\n    dim = Math.max(dim, point.length);\n\n    // find max precision\n    for (var i = 0; i < point.length; i++) {\n        while (Math.round(point[i] * e) / e !== point[i] && e < maxPrecision) e *= 10;\n    }\n}\n\nfunction saveKey(key) {\n    if (keys[key] === undefined) {\n        keysArr.push(key);\n        keys[key] = keysNum++;\n    }\n}\n\nfunction writeFeatureCollection(obj, pbf) {\n    for (var i = 0; i < obj.features.length; i++) {\n        pbf.writeMessage(1, writeFeature, obj.features[i]);\n    }\n    writeProps(obj, pbf, true);\n}\n\nfunction writeFeature(feature, pbf) {\n    if (feature.geometry !== null) pbf.writeMessage(1, writeGeometry, feature.geometry);\n\n    if (feature.id !== undefined) {\n        if (typeof feature.id === 'number' && feature.id % 1 === 0) pbf.writeSVarintField(12, feature.id);\n        else pbf.writeStringField(11, feature.id);\n    }\n\n    if (feature.properties) writeProps(feature.properties, pbf);\n    writeProps(feature, pbf, true);\n}\n\nfunction writeGeometry(geom, pbf) {\n    pbf.writeVarintField(1, geometryTypes[geom.type]);\n\n    var coords = geom.coordinates;\n\n    if (geom.type === 'Point') writePoint(coords, pbf);\n    else if (geom.type === 'MultiPoint') writeLine(coords, pbf, true);\n    else if (geom.type === 'LineString') writeLine(coords, pbf);\n    else if (geom.type === 'MultiLineString') writeMultiLine(coords, pbf);\n    else if (geom.type === 'Polygon') writeMultiLine(coords, pbf, true);\n    else if (geom.type === 'MultiPolygon') writeMultiPolygon(coords, pbf);\n    else if (geom.type === 'GeometryCollection') {\n        for (var i = 0; i < geom.geometries.length; i++) pbf.writeMessage(4, writeGeometry, geom.geometries[i]);\n    }\n\n    writeProps(geom, pbf, true);\n}\n\nfunction writeProps(props, pbf, isCustom) {\n    var indexes = [],\n        valueIndex = 0;\n\n    for (var key in props) {\n        if (isCustom && isSpecialKey(key, props.type)) {\n            continue;\n        }\n        pbf.writeMessage(13, writeValue, props[key]);\n        indexes.push(keys[key]);\n        indexes.push(valueIndex++);\n    }\n    pbf.writePackedVarint(isCustom ? 15 : 14, indexes);\n}\n\nfunction writeValue(value, pbf) {\n    if (value === null) return;\n\n    var type = typeof value;\n\n    if (type === 'string') pbf.writeStringField(1, value);\n    else if (type === 'boolean') pbf.writeBooleanField(5, value);\n    else if (type === 'object') pbf.writeStringField(6, JSON.stringify(value));\n    else if (type === 'number') {\n        if (value % 1 !== 0) pbf.writeDoubleField(2, value);\n        else if (value >= 0) pbf.writeVarintField(3, value);\n        else pbf.writeVarintField(4, -value);\n    }\n}\n\nfunction writePoint(point, pbf) {\n    var coords = [];\n    for (var i = 0; i < dim; i++) coords.push(Math.round(point[i] * e));\n    pbf.writePackedSVarint(3, coords);\n}\n\nfunction writeLine(line, pbf) {\n    var coords = [];\n    populateLine(coords, line);\n    pbf.writePackedSVarint(3, coords);\n}\n\nfunction writeMultiLine(lines, pbf, closed) {\n    var len = lines.length,\n        i;\n    if (len !== 1) {\n        var lengths = [];\n        for (i = 0; i < len; i++) lengths.push(lines[i].length - (closed ? 1 : 0));\n        pbf.writePackedVarint(2, lengths);\n        // TODO faster with custom writeMessage?\n    }\n    var coords = [];\n    for (i = 0; i < len; i++) populateLine(coords, lines[i], closed);\n    pbf.writePackedSVarint(3, coords);\n}\n\nfunction writeMultiPolygon(polygons, pbf) {\n    var len = polygons.length,\n        i, j;\n    if (len !== 1 || polygons[0].length !== 1) {\n        var lengths = [len];\n        for (i = 0; i < len; i++) {\n            lengths.push(polygons[i].length);\n            for (j = 0; j < polygons[i].length; j++) lengths.push(polygons[i][j].length - 1);\n        }\n        pbf.writePackedVarint(2, lengths);\n    }\n\n    var coords = [];\n    for (i = 0; i < len; i++) {\n        for (j = 0; j < polygons[i].length; j++) populateLine(coords, polygons[i][j], true);\n    }\n    pbf.writePackedSVarint(3, coords);\n}\n\nfunction populateLine(coords, line, closed) {\n    var i, j,\n        len = line.length - (closed ? 1 : 0),\n        sum = new Array(dim);\n    for (j = 0; j < dim; j++) sum[j] = 0;\n    for (i = 0; i < len; i++) {\n        for (j = 0; j < dim; j++) {\n            var n = Math.round(line[i][j] * e) - sum[j];\n            coords.push(n);\n            sum[j] += n;\n        }\n    }\n}\n\nfunction isSpecialKey(key, type) {\n    if (key === 'type') return true;\n    else if (type === 'FeatureCollection') {\n        if (key === 'features') return true;\n    } else if (type === 'Feature') {\n        if (key === 'id' || key === 'properties' || key === 'geometry') return true;\n    } else if (type === 'GeometryCollection') {\n        if (key === 'geometries') return true;\n    } else if (key === 'coordinates') return true;\n    return false;\n}\n","'use strict';\n\nmodule.exports = decode;\n\nvar keys, values, lengths, dim, e;\n\nvar geometryTypes = [\n    'Point', 'MultiPoint', 'LineString', 'MultiLineString',\n    'Polygon', 'MultiPolygon', 'GeometryCollection'];\n\nfunction decode(pbf) {\n    dim = 2;\n    e = Math.pow(10, 6);\n    lengths = null;\n\n    keys = [];\n    values = [];\n    var obj = pbf.readFields(readDataField, {});\n    keys = null;\n\n    return obj;\n}\n\nfunction readDataField(tag, obj, pbf) {\n    if (tag === 1) keys.push(pbf.readString());\n    else if (tag === 2) dim = pbf.readVarint();\n    else if (tag === 3) e = Math.pow(10, pbf.readVarint());\n\n    else if (tag === 4) readFeatureCollection(pbf, obj);\n    else if (tag === 5) readFeature(pbf, obj);\n    else if (tag === 6) readGeometry(pbf, obj);\n}\n\nfunction readFeatureCollection(pbf, obj) {\n    obj.type = 'FeatureCollection';\n    obj.features = [];\n    return pbf.readMessage(readFeatureCollectionField, obj);\n}\n\nfunction readFeature(pbf, feature) {\n    feature.type = 'Feature';\n    var f = pbf.readMessage(readFeatureField, feature);\n    if (!('geometry' in f)) f.geometry = null;\n    return f;\n}\n\nfunction readGeometry(pbf, geom) {\n    geom.type = 'Point';\n    return pbf.readMessage(readGeometryField, geom);\n}\n\nfunction readFeatureCollectionField(tag, obj, pbf) {\n    if (tag === 1) obj.features.push(readFeature(pbf, {}));\n\n    else if (tag === 13) values.push(readValue(pbf));\n    else if (tag === 15) readProps(pbf, obj);\n}\n\nfunction readFeatureField(tag, feature, pbf) {\n    if (tag === 1) feature.geometry = readGeometry(pbf, {});\n\n    else if (tag === 11) feature.id = pbf.readString();\n    else if (tag === 12) feature.id = pbf.readSVarint();\n\n    else if (tag === 13) values.push(readValue(pbf));\n    else if (tag === 14) feature.properties = readProps(pbf, {});\n    else if (tag === 15) readProps(pbf, feature);\n}\n\nfunction readGeometryField(tag, geom, pbf) {\n    if (tag === 1) geom.type = geometryTypes[pbf.readVarint()];\n\n    else if (tag === 2) lengths = pbf.readPackedVarint();\n    else if (tag === 3) readCoords(geom, pbf, geom.type);\n    else if (tag === 4) {\n        geom.geometries = geom.geometries || [];\n        geom.geometries.push(readGeometry(pbf, {}));\n    }\n    else if (tag === 13) values.push(readValue(pbf));\n    else if (tag === 15) readProps(pbf, geom);\n}\n\nfunction readCoords(geom, pbf, type) {\n    if (type === 'Point') geom.coordinates = readPoint(pbf);\n    else if (type === 'MultiPoint') geom.coordinates = readLine(pbf, true);\n    else if (type === 'LineString') geom.coordinates = readLine(pbf);\n    else if (type === 'MultiLineString') geom.coordinates = readMultiLine(pbf);\n    else if (type === 'Polygon') geom.coordinates = readMultiLine(pbf, true);\n    else if (type === 'MultiPolygon') geom.coordinates = readMultiPolygon(pbf);\n}\n\nfunction readValue(pbf) {\n    var end = pbf.readVarint() + pbf.pos,\n        value = null;\n\n    while (pbf.pos < end) {\n        var val = pbf.readVarint(),\n            tag = val >> 3;\n\n        if (tag === 1) value = pbf.readString();\n        else if (tag === 2) value = pbf.readDouble();\n        else if (tag === 3) value = pbf.readVarint();\n        else if (tag === 4) value = -pbf.readVarint();\n        else if (tag === 5) value = pbf.readBoolean();\n        else if (tag === 6) value = JSON.parse(pbf.readString());\n    }\n    return value;\n}\n\nfunction readProps(pbf, props) {\n    var end = pbf.readVarint() + pbf.pos;\n    while (pbf.pos < end) props[keys[pbf.readVarint()]] = values[pbf.readVarint()];\n    values = [];\n    return props;\n}\n\nfunction readPoint(pbf) {\n    var end = pbf.readVarint() + pbf.pos,\n        coords = [];\n    while (pbf.pos < end) coords.push(pbf.readSVarint() / e);\n    return coords;\n}\n\nfunction readLinePart(pbf, end, len, closed) {\n    var i = 0,\n        coords = [],\n        p, d;\n\n    var prevP = [];\n    for (d = 0; d < dim; d++) prevP[d] = 0;\n\n    while (len ? i < len : pbf.pos < end) {\n        p = [];\n        for (d = 0; d < dim; d++) {\n            prevP[d] += pbf.readSVarint();\n            p[d] = prevP[d] / e;\n        }\n        coords.push(p);\n        i++;\n    }\n    if (closed) coords.push(coords[0]);\n\n    return coords;\n}\n\nfunction readLine(pbf) {\n    return readLinePart(pbf, pbf.readVarint() + pbf.pos);\n}\n\nfunction readMultiLine(pbf, closed) {\n    var end = pbf.readVarint() + pbf.pos;\n    if (!lengths) return [readLinePart(pbf, end, null, closed)];\n\n    var coords = [];\n    for (var i = 0; i < lengths.length; i++) coords.push(readLinePart(pbf, end, lengths[i], closed));\n    lengths = null;\n    return coords;\n}\n\nfunction readMultiPolygon(pbf) {\n    var end = pbf.readVarint() + pbf.pos;\n    if (!lengths) return [[readLinePart(pbf, end, null, true)]];\n\n    var coords = [];\n    var j = 1;\n    for (var i = 0; i < lengths[0]; i++) {\n        var rings = [];\n        for (var k = 0; k < lengths[j]; k++) rings.push(readLinePart(pbf, end, lengths[j + 1 + k], true));\n        j += lengths[j] + 1;\n        coords.push(rings);\n    }\n    lengths = null;\n    return coords;\n}\n","'use strict';\n\nexports.encode = require('./encode');\nexports.decode = require('./decode');\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","'use strict';\n\nmodule.exports = Pbf;\n\nvar ieee754 = require('ieee754');\n\nfunction Pbf(buf) {\n    this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);\n    this.pos = 0;\n    this.type = 0;\n    this.length = this.buf.length;\n}\n\nPbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum\nPbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64\nPbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields\nPbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32\n\nvar SHIFT_LEFT_32 = (1 << 16) * (1 << 16),\n    SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\n\n// Threshold chosen based on both benchmarking and knowledge about browser string\n// data structures (which currently switch structure types at 12 bytes or more)\nvar TEXT_DECODER_MIN_LENGTH = 12;\nvar utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf8');\n\nPbf.prototype = {\n\n    destroy: function() {\n        this.buf = null;\n    },\n\n    // === READING =================================================================\n\n    readFields: function(readField, result, end) {\n        end = end || this.length;\n\n        while (this.pos < end) {\n            var val = this.readVarint(),\n                tag = val >> 3,\n                startPos = this.pos;\n\n            this.type = val & 0x7;\n            readField(tag, result, this);\n\n            if (this.pos === startPos) this.skip(val);\n        }\n        return result;\n    },\n\n    readMessage: function(readField, result) {\n        return this.readFields(readField, result, this.readVarint() + this.pos);\n    },\n\n    readFixed32: function() {\n        var val = readUInt32(this.buf, this.pos);\n        this.pos += 4;\n        return val;\n    },\n\n    readSFixed32: function() {\n        var val = readInt32(this.buf, this.pos);\n        this.pos += 4;\n        return val;\n    },\n\n    // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)\n\n    readFixed64: function() {\n        var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    },\n\n    readSFixed64: function() {\n        var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    },\n\n    readFloat: function() {\n        var val = ieee754.read(this.buf, this.pos, true, 23, 4);\n        this.pos += 4;\n        return val;\n    },\n\n    readDouble: function() {\n        var val = ieee754.read(this.buf, this.pos, true, 52, 8);\n        this.pos += 8;\n        return val;\n    },\n\n    readVarint: function(isSigned) {\n        var buf = this.buf,\n            val, b;\n\n        b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;\n        b = buf[this.pos];   val |= (b & 0x0f) << 28;\n\n        return readVarintRemainder(val, isSigned, this);\n    },\n\n    readVarint64: function() { // for compatibility with v2.0.1\n        return this.readVarint(true);\n    },\n\n    readSVarint: function() {\n        var num = this.readVarint();\n        return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding\n    },\n\n    readBoolean: function() {\n        return Boolean(this.readVarint());\n    },\n\n    readString: function() {\n        var end = this.readVarint() + this.pos;\n        var pos = this.pos;\n        this.pos = end;\n\n        if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) {\n            // longer strings are fast with the built-in browser TextDecoder API\n            return readUtf8TextDecoder(this.buf, pos, end);\n        }\n        // short strings are fast with our custom implementation\n        return readUtf8(this.buf, pos, end);\n    },\n\n    readBytes: function() {\n        var end = this.readVarint() + this.pos,\n            buffer = this.buf.subarray(this.pos, end);\n        this.pos = end;\n        return buffer;\n    },\n\n    // verbose for performance reasons; doesn't affect gzipped size\n\n    readPackedVarint: function(arr, isSigned) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned));\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readVarint(isSigned));\n        return arr;\n    },\n    readPackedSVarint: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSVarint());\n        return arr;\n    },\n    readPackedBoolean: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readBoolean());\n        return arr;\n    },\n    readPackedFloat: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readFloat());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFloat());\n        return arr;\n    },\n    readPackedDouble: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readDouble());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readDouble());\n        return arr;\n    },\n    readPackedFixed32: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFixed32());\n        return arr;\n    },\n    readPackedSFixed32: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSFixed32());\n        return arr;\n    },\n    readPackedFixed64: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFixed64());\n        return arr;\n    },\n    readPackedSFixed64: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSFixed64());\n        return arr;\n    },\n\n    skip: function(val) {\n        var type = val & 0x7;\n        if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}\n        else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;\n        else if (type === Pbf.Fixed32) this.pos += 4;\n        else if (type === Pbf.Fixed64) this.pos += 8;\n        else throw new Error('Unimplemented type: ' + type);\n    },\n\n    // === WRITING =================================================================\n\n    writeTag: function(tag, type) {\n        this.writeVarint((tag << 3) | type);\n    },\n\n    realloc: function(min) {\n        var length = this.length || 16;\n\n        while (length < this.pos + min) length *= 2;\n\n        if (length !== this.length) {\n            var buf = new Uint8Array(length);\n            buf.set(this.buf);\n            this.buf = buf;\n            this.length = length;\n        }\n    },\n\n    finish: function() {\n        this.length = this.pos;\n        this.pos = 0;\n        return this.buf.subarray(0, this.length);\n    },\n\n    writeFixed32: function(val) {\n        this.realloc(4);\n        writeInt32(this.buf, val, this.pos);\n        this.pos += 4;\n    },\n\n    writeSFixed32: function(val) {\n        this.realloc(4);\n        writeInt32(this.buf, val, this.pos);\n        this.pos += 4;\n    },\n\n    writeFixed64: function(val) {\n        this.realloc(8);\n        writeInt32(this.buf, val & -1, this.pos);\n        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n        this.pos += 8;\n    },\n\n    writeSFixed64: function(val) {\n        this.realloc(8);\n        writeInt32(this.buf, val & -1, this.pos);\n        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n        this.pos += 8;\n    },\n\n    writeVarint: function(val) {\n        val = +val || 0;\n\n        if (val > 0xfffffff || val < 0) {\n            writeBigVarint(val, this);\n            return;\n        }\n\n        this.realloc(4);\n\n        this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] =   (val >>> 7) & 0x7f;\n    },\n\n    writeSVarint: function(val) {\n        this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);\n    },\n\n    writeBoolean: function(val) {\n        this.writeVarint(Boolean(val));\n    },\n\n    writeString: function(str) {\n        str = String(str);\n        this.realloc(str.length * 4);\n\n        this.pos++; // reserve 1 byte for short string length\n\n        var startPos = this.pos;\n        // write the string directly to the buffer and see how much was written\n        this.pos = writeUtf8(this.buf, str, this.pos);\n        var len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    },\n\n    writeFloat: function(val) {\n        this.realloc(4);\n        ieee754.write(this.buf, val, this.pos, true, 23, 4);\n        this.pos += 4;\n    },\n\n    writeDouble: function(val) {\n        this.realloc(8);\n        ieee754.write(this.buf, val, this.pos, true, 52, 8);\n        this.pos += 8;\n    },\n\n    writeBytes: function(buffer) {\n        var len = buffer.length;\n        this.writeVarint(len);\n        this.realloc(len);\n        for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];\n    },\n\n    writeRawMessage: function(fn, obj) {\n        this.pos++; // reserve 1 byte for short message length\n\n        // write the message directly to the buffer and see how much was written\n        var startPos = this.pos;\n        fn(obj, this);\n        var len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    },\n\n    writeMessage: function(tag, fn, obj) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeRawMessage(fn, obj);\n    },\n\n    writePackedVarint:   function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr);   },\n    writePackedSVarint:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr);  },\n    writePackedBoolean:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr);  },\n    writePackedFloat:    function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr);    },\n    writePackedDouble:   function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr);   },\n    writePackedFixed32:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr);  },\n    writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); },\n    writePackedFixed64:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr);  },\n    writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); },\n\n    writeBytesField: function(tag, buffer) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeBytes(buffer);\n    },\n    writeFixed32Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeFixed32(val);\n    },\n    writeSFixed32Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeSFixed32(val);\n    },\n    writeFixed64Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeFixed64(val);\n    },\n    writeSFixed64Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeSFixed64(val);\n    },\n    writeVarintField: function(tag, val) {\n        this.writeTag(tag, Pbf.Varint);\n        this.writeVarint(val);\n    },\n    writeSVarintField: function(tag, val) {\n        this.writeTag(tag, Pbf.Varint);\n        this.writeSVarint(val);\n    },\n    writeStringField: function(tag, str) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeString(str);\n    },\n    writeFloatField: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeFloat(val);\n    },\n    writeDoubleField: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeDouble(val);\n    },\n    writeBooleanField: function(tag, val) {\n        this.writeVarintField(tag, Boolean(val));\n    }\n};\n\nfunction readVarintRemainder(l, s, p) {\n    var buf = p.buf,\n        h, b;\n\n    b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);\n\n    throw new Error('Expected varint not more than 10 bytes');\n}\n\nfunction readPackedEnd(pbf) {\n    return pbf.type === Pbf.Bytes ?\n        pbf.readVarint() + pbf.pos : pbf.pos + 1;\n}\n\nfunction toNum(low, high, isSigned) {\n    if (isSigned) {\n        return high * 0x100000000 + (low >>> 0);\n    }\n\n    return ((high >>> 0) * 0x100000000) + (low >>> 0);\n}\n\nfunction writeBigVarint(val, pbf) {\n    var low, high;\n\n    if (val >= 0) {\n        low  = (val % 0x100000000) | 0;\n        high = (val / 0x100000000) | 0;\n    } else {\n        low  = ~(-val % 0x100000000);\n        high = ~(-val / 0x100000000);\n\n        if (low ^ 0xffffffff) {\n            low = (low + 1) | 0;\n        } else {\n            low = 0;\n            high = (high + 1) | 0;\n        }\n    }\n\n    if (val >= 0x10000000000000000 || val < -0x10000000000000000) {\n        throw new Error('Given varint doesn\\'t fit into 10 bytes');\n    }\n\n    pbf.realloc(10);\n\n    writeBigVarintLow(low, high, pbf);\n    writeBigVarintHigh(high, pbf);\n}\n\nfunction writeBigVarintLow(low, high, pbf) {\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos]   = low & 0x7f;\n}\n\nfunction writeBigVarintHigh(high, pbf) {\n    var lsb = (high & 0x07) << 4;\n\n    pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f;\n}\n\nfunction makeRoomForExtraLength(startPos, len, pbf) {\n    var extraLen =\n        len <= 0x3fff ? 1 :\n        len <= 0x1fffff ? 2 :\n        len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));\n\n    // if 1 byte isn't enough for encoding message length, shift the data to the right\n    pbf.realloc(extraLen);\n    for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];\n}\n\nfunction writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]);   }\nfunction writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);  }\nfunction writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);    }\nfunction writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);   }\nfunction writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);  }\nfunction writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);  }\nfunction writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }\nfunction writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);  }\nfunction writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }\n\n// Buffer code below from https://github.com/feross/buffer, MIT-licensed\n\nfunction readUInt32(buf, pos) {\n    return ((buf[pos]) |\n        (buf[pos + 1] << 8) |\n        (buf[pos + 2] << 16)) +\n        (buf[pos + 3] * 0x1000000);\n}\n\nfunction writeInt32(buf, val, pos) {\n    buf[pos] = val;\n    buf[pos + 1] = (val >>> 8);\n    buf[pos + 2] = (val >>> 16);\n    buf[pos + 3] = (val >>> 24);\n}\n\nfunction readInt32(buf, pos) {\n    return ((buf[pos]) |\n        (buf[pos + 1] << 8) |\n        (buf[pos + 2] << 16)) +\n        (buf[pos + 3] << 24);\n}\n\nfunction readUtf8(buf, pos, end) {\n    var str = '';\n    var i = pos;\n\n    while (i < end) {\n        var b0 = buf[i];\n        var c = null; // codepoint\n        var bytesPerSequence =\n            b0 > 0xEF ? 4 :\n            b0 > 0xDF ? 3 :\n            b0 > 0xBF ? 2 : 1;\n\n        if (i + bytesPerSequence > end) break;\n\n        var b1, b2, b3;\n\n        if (bytesPerSequence === 1) {\n            if (b0 < 0x80) {\n                c = b0;\n            }\n        } else if (bytesPerSequence === 2) {\n            b1 = buf[i + 1];\n            if ((b1 & 0xC0) === 0x80) {\n                c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);\n                if (c <= 0x7F) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 3) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);\n                if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 4) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            b3 = buf[i + 3];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);\n                if (c <= 0xFFFF || c >= 0x110000) {\n                    c = null;\n                }\n            }\n        }\n\n        if (c === null) {\n            c = 0xFFFD;\n            bytesPerSequence = 1;\n\n        } else if (c > 0xFFFF) {\n            c -= 0x10000;\n            str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);\n            c = 0xDC00 | c & 0x3FF;\n        }\n\n        str += String.fromCharCode(c);\n        i += bytesPerSequence;\n    }\n\n    return str;\n}\n\nfunction readUtf8TextDecoder(buf, pos, end) {\n    return utf8TextDecoder.decode(buf.subarray(pos, end));\n}\n\nfunction writeUtf8(buf, str, pos) {\n    for (var i = 0, c, lead; i < str.length; i++) {\n        c = str.charCodeAt(i); // code point\n\n        if (c > 0xD7FF && c < 0xE000) {\n            if (lead) {\n                if (c < 0xDC00) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                    lead = c;\n                    continue;\n                } else {\n                    c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;\n                    lead = null;\n                }\n            } else {\n                if (c > 0xDBFF || (i + 1 === str.length)) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                } else {\n                    lead = c;\n                }\n                continue;\n            }\n        } else if (lead) {\n            buf[pos++] = 0xEF;\n            buf[pos++] = 0xBF;\n            buf[pos++] = 0xBD;\n            lead = null;\n        }\n\n        if (c < 0x80) {\n            buf[pos++] = c;\n        } else {\n            if (c < 0x800) {\n                buf[pos++] = c >> 0x6 | 0xC0;\n            } else {\n                if (c < 0x10000) {\n                    buf[pos++] = c >> 0xC | 0xE0;\n                } else {\n                    buf[pos++] = c >> 0x12 | 0xF0;\n                    buf[pos++] = c >> 0xC & 0x3F | 0x80;\n                }\n                buf[pos++] = c >> 0x6 & 0x3F | 0x80;\n            }\n            buf[pos++] = c & 0x3F | 0x80;\n        }\n    }\n    return pos;\n}\n","import { decode } from \"geobuf\";\r\nimport inside from \"@turf/boolean-point-in-polygon\";\r\nimport { point } from \"@turf/helpers\";\r\nimport Pbf from \"pbf\";\r\n\r\nimport { getTimezoneAtSea, oceanZones } from \"./oceanUtils\";\r\n\r\ntype GeoDataSource =\r\n  | string\r\n  | ((start: number, end: number) => Promise<ArrayBuffer>);\r\ntype TzDataSource = string | (() => Promise<any>);\r\n\r\n/**\r\n * Initialize the GeoTZ module with the given data sources.\r\n *\r\n * @param geoDataSource A string of the URL of the GeoJSON data or a function that returns an ArrayBuffer given a byte range.\r\n * @param tzDataSource A string of the URL of the index.json data or a function that returns an object.\r\n * @returns An object with a find function that can be used to find the timezone ID(s) at the given GPS coordinates.\r\n */\r\nexport function init(\r\n  geoDataSource: GeoDataSource = \"https://cdn.jsdelivr.net/npm/geo-tz@latest/data/timezones-1970.geojson.geo.dat\",\r\n  tzDataSource: TzDataSource = \"https://cdn.jsdelivr.net/npm/geo-tz@latest/data/timezones-1970.geojson.index.json\",\r\n) {\r\n  const geoData =\r\n    typeof geoDataSource === \"string\"\r\n      ? async (start: number, end: number) => {\r\n        const response = await fetch(geoDataSource, {\r\n          headers: { Range: `bytes=${start}-${end}` },\r\n        });\r\n        return await response.arrayBuffer();\r\n      }\r\n      : geoDataSource;\r\n\r\n  let tzDataPromise: Promise<any> | null = null;\r\n\r\n  const tzData =\r\n    typeof tzDataSource === \"string\"\r\n      ? async () => {\r\n        if (tzDataPromise) {\r\n          return await tzDataPromise;\r\n        }\r\n        const promise = fetch(tzDataSource).then((response) =>\r\n          response.json(),\r\n        );\r\n        tzDataPromise = promise;\r\n        return await promise;\r\n      }\r\n      : tzDataSource;\r\n\r\n  return {\r\n    /**\r\n     * Find the timezone ID(s) at the given GPS coordinates.\r\n     *\r\n     * @param lat latitude (must be >= -90 and <=90)\r\n     * @param lon longitue (must be >= -180 and <=180)\r\n     * @returns An array of string of TZIDs at the given coordinate.\r\n     */\r\n    find: async (lat: number, lon: number) => {\r\n      return await findImpl(geoData, tzData, lat, lon);\r\n    },\r\n  };\r\n}\r\n\r\n/**\r\n * Find the timezone ID(s) at the given GPS coordinates. This is identical to calling\r\n * `init()` and then calling `find()`.\r\n *\r\n * @param lat latitude (must be >= -90 and <=90)\r\n * @param lon longitue (must be >= -180 and <=180)\r\n * @returns An array of string of TZIDs at the given coordinate.\r\n */\r\nexport async function find(lat: number, lon: number): Promise<string[]> {\r\n  return await init().find(lat, lon);\r\n}\r\n\r\nasync function findImpl(\r\n  geoData: (start: number, end: number) => Promise<ArrayBuffer>,\r\n  tzData: () => Promise<any>,\r\n  lat: number,\r\n  lon: number,\r\n): Promise<string[]> {\r\n  const originalLon = lon;\r\n\r\n  let err;\r\n\r\n  // validate latitude\r\n  if (isNaN(lat) || lat > 90 || lat < -90) {\r\n    err = new Error(\"Invalid latitude: \" + lat);\r\n    throw err;\r\n  }\r\n\r\n  // validate longitude\r\n  if (isNaN(lon) || lon > 180 || lon < -180) {\r\n    err = new Error(\"Invalid longitude: \" + lon);\r\n    throw err;\r\n  }\r\n\r\n  // North Pole should return all ocean zones\r\n  if (lat === 90) {\r\n    return oceanZones.map((zone) => zone.tzid);\r\n  }\r\n\r\n  // fix edges of the world\r\n  if (lat >= 89.9999) {\r\n    lat = 89.9999;\r\n  } else if (lat <= -89.9999) {\r\n    lat = -89.9999;\r\n  }\r\n\r\n  if (lon >= 179.9999) {\r\n    lon = 179.9999;\r\n  } else if (lon <= -179.9999) {\r\n    lon = -179.9999;\r\n  }\r\n\r\n  const pt = point([lon, lat]);\r\n\r\n  // get exact boundaries\r\n  const quadData = {\r\n    top: 89.9999,\r\n    bottom: -89.9999,\r\n    left: -179.9999,\r\n    right: 179.9999,\r\n    midLat: 0,\r\n    midLon: 0,\r\n  };\r\n  let quadPos = \"\";\r\n\r\n  const tzDataResponse = await tzData();\r\n\r\n  let curTzData = tzDataResponse.lookup;\r\n\r\n  while (true) {\r\n    // calculate next quadtree position\r\n    let nextQuad;\r\n    if (lat >= quadData.midLat && lon >= quadData.midLon) {\r\n      nextQuad = \"a\";\r\n      quadData.bottom = quadData.midLat;\r\n      quadData.left = quadData.midLon;\r\n    } else if (lat >= quadData.midLat && lon < quadData.midLon) {\r\n      nextQuad = \"b\";\r\n      quadData.bottom = quadData.midLat;\r\n      quadData.right = quadData.midLon;\r\n    } else if (lat < quadData.midLat && lon < quadData.midLon) {\r\n      nextQuad = \"c\";\r\n      quadData.top = quadData.midLat;\r\n      quadData.right = quadData.midLon;\r\n    } else {\r\n      nextQuad = \"d\";\r\n      quadData.top = quadData.midLat;\r\n      quadData.left = quadData.midLon;\r\n    }\r\n\r\n    // console.log(nextQuad)\r\n    curTzData = curTzData[nextQuad];\r\n    // console.log()\r\n    quadPos += nextQuad;\r\n\r\n    // analyze result of current depth\r\n    if (!curTzData) {\r\n      // no timezone in this quad, therefore must be timezone at sea\r\n      return getTimezoneAtSea(originalLon);\r\n    } else if (curTzData.pos >= 0 && curTzData.len) {\r\n      // get exact boundaries\r\n      const bufSlice = await geoData(\r\n        curTzData.pos,\r\n        curTzData.pos + curTzData.len - 1,\r\n      );\r\n      const geoJson = decode(new Pbf(bufSlice));\r\n\r\n      const timezonesContainingPoint = [];\r\n\r\n      if (geoJson.type === \"FeatureCollection\") {\r\n        for (let i = 0; i < geoJson.features.length; i++) {\r\n          if (inside(pt, geoJson.features[i] as any)) {\r\n            const properties = geoJson.features[i].properties;\r\n            if (properties) {\r\n              timezonesContainingPoint.push(properties.tzid);\r\n            }\r\n          }\r\n        }\r\n      } else if (geoJson.type === \"Feature\") {\r\n        if (inside(pt, geoJson as any) && geoJson.properties) {\r\n          timezonesContainingPoint.push(geoJson.properties.tzid);\r\n        }\r\n      }\r\n\r\n      // if at least one timezone contained the point, return those timezones,\r\n      // otherwise must be timezone at sea\r\n      return timezonesContainingPoint.length > 0\r\n        ? timezonesContainingPoint\r\n        : getTimezoneAtSea(originalLon);\r\n    } else if (curTzData.length > 0) {\r\n      // exact match found\r\n      const timezones = tzDataResponse.timezones;\r\n      return curTzData.map((idx: number) => timezones[idx]);\r\n    } else if (typeof curTzData !== \"object\") {\r\n      // not another nested quad index, throw error\r\n      err = new Error(\"Unexpected data type\");\r\n      throw err;\r\n    }\r\n\r\n    // calculate next quadtree depth data\r\n    quadData.midLat = (quadData.top + quadData.bottom) / 2;\r\n    quadData.midLon = (quadData.left + quadData.right) / 2;\r\n  }\r\n}\r\n\r\nexport function toOffset(timeZone: string) {\r\n  const date = new Date();\r\n  const utcDate = new Date(date.toLocaleString(\"en-US\", { timeZone: \"UTC\" }));\r\n  const tzDate = new Date(date.toLocaleString(\"en-US\", { timeZone }));\r\n  return (tzDate.getTime() - utcDate.getTime()) / 6e4;\r\n}\r\n","type OceanZone = {\r\n  left: number\r\n  right: number\r\n  tzid: string\r\n}\r\n\r\nexport const oceanZones: OceanZone[] = [\r\n  { tzid: 'Etc/GMT-12', left: 172.5, right: 180 },\r\n  { tzid: 'Etc/GMT-11', left: 157.5, right: 172.5 },\r\n  { tzid: 'Etc/GMT-10', left: 142.5, right: 157.5 },\r\n  { tzid: 'Etc/GMT-9', left: 127.5, right: 142.5 },\r\n  { tzid: 'Etc/GMT-8', left: 112.5, right: 127.5 },\r\n  { tzid: 'Etc/GMT-7', left: 97.5, right: 112.5 },\r\n  { tzid: 'Etc/GMT-6', left: 82.5, right: 97.5 },\r\n  { tzid: 'Etc/GMT-5', left: 67.5, right: 82.5 },\r\n  { tzid: 'Etc/GMT-4', left: 52.5, right: 67.5 },\r\n  { tzid: 'Etc/GMT-3', left: 37.5, right: 52.5 },\r\n  { tzid: 'Etc/GMT-2', left: 22.5, right: 37.5 },\r\n  { tzid: 'Etc/GMT-1', left: 7.5, right: 22.5 },\r\n  { tzid: 'Etc/GMT', left: -7.5, right: 7.5 },\r\n  { tzid: 'Etc/GMT+1', left: -22.5, right: -7.5 },\r\n  { tzid: 'Etc/GMT+2', left: -37.5, right: -22.5 },\r\n  { tzid: 'Etc/GMT+3', left: -52.5, right: -37.5 },\r\n  { tzid: 'Etc/GMT+4', left: -67.5, right: -52.5 },\r\n  { tzid: 'Etc/GMT+5', left: -82.5, right: -67.5 },\r\n  { tzid: 'Etc/GMT+6', left: -97.5, right: -82.5 },\r\n  { tzid: 'Etc/GMT+7', left: -112.5, right: -97.5 },\r\n  { tzid: 'Etc/GMT+8', left: -127.5, right: -112.5 },\r\n  { tzid: 'Etc/GMT+9', left: -142.5, right: -127.5 },\r\n  { tzid: 'Etc/GMT+10', left: -157.5, right: -142.5 },\r\n  { tzid: 'Etc/GMT+11', left: -172.5, right: -157.5 },\r\n  { tzid: 'Etc/GMT+12', left: -180, right: -172.5 },\r\n]\r\n\r\n/**\r\n * Find the Etc/GMT* timezone name(s) corresponding to the given longitue.\r\n *\r\n * @param lon The longitude to analyze\r\n * @returns An array of strings of TZIDs\r\n */\r\nexport function getTimezoneAtSea(lon: number): string[] {\r\n  // coordinates along the 180 longitude should return two zones\r\n  if (lon === -180 || lon === 180) {\r\n    return ['Etc/GMT+12', 'Etc/GMT-12']\r\n  }\r\n  const tzs = []\r\n  for (let i = 0; i < oceanZones.length; i++) {\r\n    const z = oceanZones[i]\r\n    if (z.left <= lon && z.right >= lon) {\r\n      tzs.push(z.tzid)\r\n    } else if (z.right < lon) {\r\n      break\r\n    }\r\n  }\r\n  return tzs\r\n}\r\n","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","import { orient2d } from 'robust-predicates';\n\nfunction pointInPolygon(p, polygon) {\n    var i;\n    var ii;\n    var k = 0;\n    var f;\n    var u1;\n    var v1;\n    var u2;\n    var v2;\n    var currentP;\n    var nextP;\n\n    var x = p[0];\n    var y = p[1];\n\n    var numContours = polygon.length;\n    for (i = 0; i < numContours; i++) {\n        ii = 0;\n        var contour = polygon[i];\n        var contourLen = contour.length - 1;\n\n        currentP = contour[0];\n        if (currentP[0] !== contour[contourLen][0] &&\n            currentP[1] !== contour[contourLen][1]) {\n            throw new Error('First and last coordinates in a ring must be the same')\n        }\n\n        u1 = currentP[0] - x;\n        v1 = currentP[1] - y;\n\n        for (ii; ii < contourLen; ii++) {\n            nextP = contour[ii + 1];\n\n            u2 = nextP[0] - x;\n            v2 = nextP[1] - y;\n\n            if (v1 === 0 && v2 === 0) {\n                if ((u2 <= 0 && u1 >= 0) || (u1 <= 0 && u2 >= 0)) { return 0 }\n            } else if ((v2 >= 0 && v1 < 0) || (v2 < 0 && v1 >= 0)) {\n                f = orient2d(u1, u2, v1, v2, 0, 0);\n                if (f === 0) { return 0 }\n                if ((f > 0 && v2 > 0 && v1 <= 0) || (f < 0 && v2 <= 0 && v1 > 0)) { k++; }\n            }\n            currentP = nextP;\n            v1 = v2;\n            u1 = u2;\n        }\n    }\n\n    if (k % 2 === 0) { return false }\n    return true\n}\n\nexport { pointInPolygon as default };\n","import {\n  BBox,\n  Feature,\n  FeatureCollection,\n  Geometry,\n  GeometryCollection,\n  GeometryObject,\n  LineString,\n  MultiLineString,\n  MultiPoint,\n  MultiPolygon,\n  Point,\n  Polygon,\n  Position,\n  GeoJsonProperties,\n} from \"geojson\";\n\nimport { Id } from \"./lib/geojson.js\";\nexport * from \"./lib/geojson.js\";\n\n// TurfJS Combined Types\nexport type Coord = Feature<Point> | Point | Position;\n\n// TurfJS String Types\nexport type Units =\n  | \"meters\"\n  | \"metres\"\n  | \"millimeters\"\n  | \"millimetres\"\n  | \"centimeters\"\n  | \"centimetres\"\n  | \"kilometers\"\n  | \"kilometres\"\n  | \"miles\"\n  | \"nauticalmiles\"\n  | \"inches\"\n  | \"yards\"\n  | \"feet\"\n  | \"radians\"\n  | \"degrees\";\nexport type AreaUnits =\n  | Exclude<Units, \"radians\" | \"degrees\">\n  | \"acres\"\n  | \"hectares\";\nexport type Grid = \"point\" | \"square\" | \"hex\" | \"triangle\";\nexport type Corners = \"sw\" | \"se\" | \"nw\" | \"ne\" | \"center\" | \"centroid\";\n\nexport type Lines = LineString | MultiLineString | Polygon | MultiPolygon;\nexport type AllGeoJSON =\n  | Feature\n  | FeatureCollection\n  | Geometry\n  | GeometryCollection;\n\n/**\n * @module helpers\n */\n\n/**\n * The Earth radius in kilometers. Used by Turf modules that model the Earth as a sphere. The {@link https://en.wikipedia.org/wiki/Earth_radius#Arithmetic_mean_radius mean radius} was selected because it is {@link https://rosettacode.org/wiki/Haversine_formula#:~:text=This%20value%20is%20recommended recommended } by the Haversine formula (used by turf/distance) to reduce error.\n * @memberof helpers\n * @type {number}\n */\nexport const earthRadius = 6371008.8;\n\n/**\n * Unit of measurement factors based on earthRadius.\n *\n * Keys are the name of the unit, values are the number of that unit in a single radian\n *\n * @memberof helpers\n * @type {Object}\n */\nexport const factors: Record<Units, number> = {\n  centimeters: earthRadius * 100,\n  centimetres: earthRadius * 100,\n  degrees: 360 / (2 * Math.PI),\n  feet: earthRadius * 3.28084,\n  inches: earthRadius * 39.37,\n  kilometers: earthRadius / 1000,\n  kilometres: earthRadius / 1000,\n  meters: earthRadius,\n  metres: earthRadius,\n  miles: earthRadius / 1609.344,\n  millimeters: earthRadius * 1000,\n  millimetres: earthRadius * 1000,\n  nauticalmiles: earthRadius / 1852,\n  radians: 1,\n  yards: earthRadius * 1.0936,\n};\n\n/**\n\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport const areaFactors: Record<AreaUnits, number> = {\n  acres: 0.000247105,\n  centimeters: 10000,\n  centimetres: 10000,\n  feet: 10.763910417,\n  hectares: 0.0001,\n  inches: 1550.003100006,\n  kilometers: 0.000001,\n  kilometres: 0.000001,\n  meters: 1,\n  metres: 1,\n  miles: 3.86e-7,\n  nauticalmiles: 2.9155334959812285e-7,\n  millimeters: 1000000,\n  millimetres: 1000000,\n  yards: 1.195990046,\n};\n\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n *   \"type\": \"Point\",\n *   \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nexport function feature<\n  G extends GeometryObject = Geometry,\n  P extends GeoJsonProperties = GeoJsonProperties,\n>(\n  geom: G | null,\n  properties?: P,\n  options: { bbox?: BBox; id?: Id } = {}\n): Feature<G, P> {\n  const feat: any = { type: \"Feature\" };\n  if (options.id === 0 || options.id) {\n    feat.id = options.id;\n  }\n  if (options.bbox) {\n    feat.bbox = options.bbox;\n  }\n  feat.properties = properties || {};\n  feat.geometry = geom;\n  return feat;\n}\n\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array<any>} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nexport function geometry(\n  type:\n    | \"Point\"\n    | \"LineString\"\n    | \"Polygon\"\n    | \"MultiPoint\"\n    | \"MultiLineString\"\n    | \"MultiPolygon\",\n  coordinates: any[],\n  _options: Record<string, never> = {}\n) {\n  switch (type) {\n    case \"Point\":\n      return point(coordinates).geometry;\n    case \"LineString\":\n      return lineString(coordinates).geometry;\n    case \"Polygon\":\n      return polygon(coordinates).geometry;\n    case \"MultiPoint\":\n      return multiPoint(coordinates).geometry;\n    case \"MultiLineString\":\n      return multiLineString(coordinates).geometry;\n    case \"MultiPolygon\":\n      return multiPolygon(coordinates).geometry;\n    default:\n      throw new Error(type + \" is invalid\");\n  }\n}\n\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<Point>} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nexport function point<P extends GeoJsonProperties = GeoJsonProperties>(\n  coordinates: Position,\n  properties?: P,\n  options: { bbox?: BBox; id?: Id } = {}\n): Feature<Point, P> {\n  if (!coordinates) {\n    throw new Error(\"coordinates is required\");\n  }\n  if (!Array.isArray(coordinates)) {\n    throw new Error(\"coordinates must be an Array\");\n  }\n  if (coordinates.length < 2) {\n    throw new Error(\"coordinates must be at least 2 numbers long\");\n  }\n  if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n    throw new Error(\"coordinates must contain numbers\");\n  }\n\n  const geom: Point = {\n    type: \"Point\",\n    coordinates,\n  };\n  return feature(geom, properties, options);\n}\n\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array<Array<number>>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Point>} Point Feature\n * @example\n * var points = turf.points([\n *   [-75, 39],\n *   [-80, 45],\n *   [-78, 50]\n * ]);\n *\n * //=points\n */\nexport function points<P extends GeoJsonProperties = GeoJsonProperties>(\n  coordinates: Position[],\n  properties?: P,\n  options: { bbox?: BBox; id?: Id } = {}\n): FeatureCollection<Point, P> {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return point(coords, properties);\n    }),\n    options\n  );\n}\n\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<Polygon>} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nexport function polygon<P extends GeoJsonProperties = GeoJsonProperties>(\n  coordinates: Position[][],\n  properties?: P,\n  options: { bbox?: BBox; id?: Id } = {}\n): Feature<Polygon, P> {\n  for (const ring of coordinates) {\n    if (ring.length < 4) {\n      throw new Error(\n        \"Each LinearRing of a Polygon must have 4 or more Positions.\"\n      );\n    }\n\n    if (ring[ring.length - 1].length !== ring[0].length) {\n      throw new Error(\"First and last Position are not equivalent.\");\n    }\n\n    for (let j = 0; j < ring[ring.length - 1].length; j++) {\n      // Check if first point of Polygon contains two numbers\n      if (ring[ring.length - 1][j] !== ring[0][j]) {\n        throw new Error(\"First and last Position are not equivalent.\");\n      }\n    }\n  }\n  const geom: Polygon = {\n    type: \"Polygon\",\n    coordinates,\n  };\n  return feature(geom, properties, options);\n}\n\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nexport function polygons<P extends GeoJsonProperties = GeoJsonProperties>(\n  coordinates: Position[][][],\n  properties?: P,\n  options: { bbox?: BBox; id?: Id } = {}\n): FeatureCollection<Polygon, P> {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return polygon(coords, properties);\n    }),\n    options\n  );\n}\n\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array<Array<number>>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<LineString>} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nexport function lineString<P extends GeoJsonProperties = GeoJsonProperties>(\n  coordinates: Position[],\n  properties?: P,\n  options: { bbox?: BBox; id?: Id } = {}\n): Feature<LineString, P> {\n  if (coordinates.length < 2) {\n    throw new Error(\"coordinates must be an array of two or more positions\");\n  }\n  const geom: LineString = {\n    type: \"LineString\",\n    coordinates,\n  };\n  return feature(geom, properties, options);\n}\n\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<LineString>} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nexport function lineStrings<P extends GeoJsonProperties = GeoJsonProperties>(\n  coordinates: Position[][],\n  properties?: P,\n  options: { bbox?: BBox; id?: Id } = {}\n): FeatureCollection<LineString, P> {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return lineString(coords, properties);\n    }),\n    options\n  );\n}\n\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n *   locationA,\n *   locationB,\n *   locationC\n * ]);\n *\n * //=collection\n */\nexport function featureCollection<\n  G extends GeometryObject = Geometry,\n  P extends GeoJsonProperties = GeoJsonProperties,\n>(\n  features: Array<Feature<G, P>>,\n  options: { bbox?: BBox; id?: Id } = {}\n): FeatureCollection<G, P> {\n  const fc: any = { type: \"FeatureCollection\" };\n  if (options.id) {\n    fc.id = options.id;\n  }\n  if (options.bbox) {\n    fc.bbox = options.bbox;\n  }\n  fc.features = features;\n  return fc;\n}\n\n/**\n * Creates a {@link Feature<MultiLineString>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiLineString>} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nexport function multiLineString<\n  P extends GeoJsonProperties = GeoJsonProperties,\n>(\n  coordinates: Position[][],\n  properties?: P,\n  options: { bbox?: BBox; id?: Id } = {}\n): Feature<MultiLineString, P> {\n  const geom: MultiLineString = {\n    type: \"MultiLineString\",\n    coordinates,\n  };\n  return feature(geom, properties, options);\n}\n\n/**\n * Creates a {@link Feature<MultiPoint>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array<Array<number>>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPoint>} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nexport function multiPoint<P extends GeoJsonProperties = GeoJsonProperties>(\n  coordinates: Position[],\n  properties?: P,\n  options: { bbox?: BBox; id?: Id } = {}\n): Feature<MultiPoint, P> {\n  const geom: MultiPoint = {\n    type: \"MultiPoint\",\n    coordinates,\n  };\n  return feature(geom, properties, options);\n}\n\n/**\n * Creates a {@link Feature<MultiPolygon>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPolygon>} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nexport function multiPolygon<P extends GeoJsonProperties = GeoJsonProperties>(\n  coordinates: Position[][][],\n  properties?: P,\n  options: { bbox?: BBox; id?: Id } = {}\n): Feature<MultiPolygon, P> {\n  const geom: MultiPolygon = {\n    type: \"MultiPolygon\",\n    coordinates,\n  };\n  return feature(geom, properties, options);\n}\n\n/**\n * Creates a {@link Feature<GeometryCollection>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array<Geometry>} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nexport function geometryCollection<\n  P extends GeoJsonProperties = GeoJsonProperties,\n>(\n  geometries: Array<\n    Point | LineString | Polygon | MultiPoint | MultiLineString | MultiPolygon\n  >,\n  properties?: P,\n  options: { bbox?: BBox; id?: Id } = {}\n): Feature<GeometryCollection, P> {\n  const geom: GeometryCollection = {\n    type: \"GeometryCollection\",\n    geometries,\n  };\n  return feature(geom, properties, options);\n}\n\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nexport function round(num: number, precision = 0): number {\n  if (precision && !(precision >= 0)) {\n    throw new Error(\"precision must be a positive number\");\n  }\n  const multiplier = Math.pow(10, precision || 0);\n  return Math.round(num * multiplier) / multiplier;\n}\n\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nexport function radiansToLength(\n  radians: number,\n  units: Units = \"kilometers\"\n): number {\n  const factor = factors[units];\n  if (!factor) {\n    throw new Error(units + \" units is invalid\");\n  }\n  return radians * factor;\n}\n\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nexport function lengthToRadians(\n  distance: number,\n  units: Units = \"kilometers\"\n): number {\n  const factor = factors[units];\n  if (!factor) {\n    throw new Error(units + \" units is invalid\");\n  }\n  return distance / factor;\n}\n\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nexport function lengthToDegrees(distance: number, units?: Units): number {\n  return radiansToDegrees(lengthToRadians(distance, units));\n}\n\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nexport function bearingToAzimuth(bearing: number): number {\n  let angle = bearing % 360;\n  if (angle < 0) {\n    angle += 360;\n  }\n  return angle;\n}\n\n/**\n * Converts any azimuth angle from the north line direction (positive clockwise)\n * and returns an angle between -180 and +180 degrees (positive clockwise), 0 being the north line\n *\n * @name azimuthToBearing\n * @param {number} angle between 0 and 360 degrees\n * @returns {number} bearing between -180 and +180 degrees\n */\nexport function azimuthToBearing(angle: number): number {\n  angle = angle % 360;\n  if (angle > 0) return angle > 180 ? angle - 360 : angle;\n  return angle < -180 ? angle + 360 : angle;\n}\n\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nexport function radiansToDegrees(radians: number): number {\n  const degrees = radians % (2 * Math.PI);\n  return (degrees * 180) / Math.PI;\n}\n\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nexport function degreesToRadians(degrees: number): number {\n  const radians = degrees % 360;\n  return (radians * Math.PI) / 180;\n}\n\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] of the length\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted length\n */\nexport function convertLength(\n  length: number,\n  originalUnit: Units = \"kilometers\",\n  finalUnit: Units = \"kilometers\"\n): number {\n  if (!(length >= 0)) {\n    throw new Error(\"length must be a positive number\");\n  }\n  return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\n\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares\n * @param {number} area to be converted\n * @param {Units} [originalUnit=\"meters\"] of the distance\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted area\n */\nexport function convertArea(\n  area: number,\n  originalUnit: AreaUnits = \"meters\",\n  finalUnit: AreaUnits = \"kilometers\"\n): number {\n  if (!(area >= 0)) {\n    throw new Error(\"area must be a positive number\");\n  }\n\n  const startFactor = areaFactors[originalUnit];\n  if (!startFactor) {\n    throw new Error(\"invalid original units\");\n  }\n\n  const finalFactor = areaFactors[finalUnit];\n  if (!finalFactor) {\n    throw new Error(\"invalid final units\");\n  }\n\n  return (area / startFactor) * finalFactor;\n}\n\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nexport function isNumber(num: any): boolean {\n  return !isNaN(num) && num !== null && !Array.isArray(num);\n}\n\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false, including false for Arrays and Functions\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nexport function isObject(input: any): boolean {\n  return input !== null && typeof input === \"object\" && !Array.isArray(input);\n}\n\n/**\n * Validate BBox\n *\n * @private\n * @param {Array<number>} bbox BBox to validate\n * @returns {void}\n * @throws {Error} if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nexport function validateBBox(bbox: any): void {\n  if (!bbox) {\n    throw new Error(\"bbox is required\");\n  }\n  if (!Array.isArray(bbox)) {\n    throw new Error(\"bbox must be an Array\");\n  }\n  if (bbox.length !== 4 && bbox.length !== 6) {\n    throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n  }\n  bbox.forEach((num) => {\n    if (!isNumber(num)) {\n      throw new Error(\"bbox must only contain numbers\");\n    }\n  });\n}\n\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws {Error} if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nexport function validateId(id: any): void {\n  if (!id) {\n    throw new Error(\"id is required\");\n  }\n  if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n    throw new Error(\"id must be a number or a string\");\n  }\n}\n","import {\n  Feature,\n  FeatureCollection,\n  Geometry,\n  LineString,\n  MultiPoint,\n  MultiLineString,\n  MultiPolygon,\n  Point,\n  Polygon,\n} from \"geojson\";\nimport { isNumber } from \"@turf/helpers\";\n\n/**\n * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.\n *\n * @name getCoord\n * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers\n * @returns {Array<number>} coordinates\n * @example\n * var pt = turf.point([10, 10]);\n *\n * var coord = turf.getCoord(pt);\n * //= [10, 10]\n */\nfunction getCoord(coord: Feature<Point> | Point | number[]): number[] {\n  if (!coord) {\n    throw new Error(\"coord is required\");\n  }\n\n  if (!Array.isArray(coord)) {\n    if (\n      coord.type === \"Feature\" &&\n      coord.geometry !== null &&\n      coord.geometry.type === \"Point\"\n    ) {\n      return [...coord.geometry.coordinates];\n    }\n    if (coord.type === \"Point\") {\n      return [...coord.coordinates];\n    }\n  }\n  if (\n    Array.isArray(coord) &&\n    coord.length >= 2 &&\n    !Array.isArray(coord[0]) &&\n    !Array.isArray(coord[1])\n  ) {\n    return [...coord];\n  }\n\n  throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\n\n/**\n * Unwrap coordinates from a Feature, Geometry Object or an Array\n *\n * @name getCoords\n * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array\n * @returns {Array<any>} coordinates\n * @example\n * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);\n *\n * var coords = turf.getCoords(poly);\n * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]\n */\nfunction getCoords<\n  G extends\n    | Point\n    | LineString\n    | Polygon\n    | MultiPoint\n    | MultiLineString\n    | MultiPolygon,\n>(coords: any[] | Feature<G> | G): any[] {\n  if (Array.isArray(coords)) {\n    return coords;\n  }\n\n  // Feature\n  if (coords.type === \"Feature\") {\n    if (coords.geometry !== null) {\n      return coords.geometry.coordinates;\n    }\n  } else {\n    // Geometry\n    if (coords.coordinates) {\n      return coords.coordinates;\n    }\n  }\n\n  throw new Error(\n    \"coords must be GeoJSON Feature, Geometry Object or an Array\"\n  );\n}\n\n/**\n * Checks if coordinates contains a number\n *\n * @name containsNumber\n * @param {Array<any>} coordinates GeoJSON Coordinates\n * @returns {boolean} true if Array contains a number\n */\nfunction containsNumber(coordinates: any[]): boolean {\n  if (\n    coordinates.length > 1 &&\n    isNumber(coordinates[0]) &&\n    isNumber(coordinates[1])\n  ) {\n    return true;\n  }\n\n  if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n    return containsNumber(coordinates[0]);\n  }\n  throw new Error(\"coordinates must only contain numbers\");\n}\n\n/**\n * Enforce expectations about types of GeoJSON objects for Turf.\n *\n * @name geojsonType\n * @param {GeoJSON} value any GeoJSON object\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nfunction geojsonType(value: any, type: string, name: string): void {\n  if (!type || !name) {\n    throw new Error(\"type and name required\");\n  }\n\n  if (!value || value.type !== type) {\n    throw new Error(\n      \"Invalid input to \" +\n        name +\n        \": must be a \" +\n        type +\n        \", given \" +\n        value.type\n    );\n  }\n}\n\n/**\n * Enforce expectations about types of {@link Feature} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name featureOf\n * @param {Feature} feature a feature with an expected geometry type\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} error if value is not the expected type.\n */\nfunction featureOf(feature: Feature<any>, type: string, name: string): void {\n  if (!feature) {\n    throw new Error(\"No feature passed\");\n  }\n  if (!name) {\n    throw new Error(\".featureOf() requires a name\");\n  }\n  if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n    throw new Error(\n      \"Invalid input to \" + name + \", Feature with geometry required\"\n    );\n  }\n  if (!feature.geometry || feature.geometry.type !== type) {\n    throw new Error(\n      \"Invalid input to \" +\n        name +\n        \": must be a \" +\n        type +\n        \", given \" +\n        feature.geometry.type\n    );\n  }\n}\n\n/**\n * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name collectionOf\n * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nfunction collectionOf(\n  featureCollection: FeatureCollection<any>,\n  type: string,\n  name: string\n) {\n  if (!featureCollection) {\n    throw new Error(\"No featureCollection passed\");\n  }\n  if (!name) {\n    throw new Error(\".collectionOf() requires a name\");\n  }\n  if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n    throw new Error(\n      \"Invalid input to \" + name + \", FeatureCollection required\"\n    );\n  }\n  for (const feature of featureCollection.features) {\n    if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n      throw new Error(\n        \"Invalid input to \" + name + \", Feature with geometry required\"\n      );\n    }\n    if (!feature.geometry || feature.geometry.type !== type) {\n      throw new Error(\n        \"Invalid input to \" +\n          name +\n          \": must be a \" +\n          type +\n          \", given \" +\n          feature.geometry.type\n      );\n    }\n  }\n}\n\n/**\n * Get Geometry from Feature or Geometry Object\n *\n * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object\n * @returns {Geometry|null} GeoJSON Geometry Object\n * @throws {Error} if geojson is not a Feature or Geometry Object\n * @example\n * var point = {\n *   \"type\": \"Feature\",\n *   \"properties\": {},\n *   \"geometry\": {\n *     \"type\": \"Point\",\n *     \"coordinates\": [110, 40]\n *   }\n * }\n * var geom = turf.getGeom(point)\n * //={\"type\": \"Point\", \"coordinates\": [110, 40]}\n */\nfunction getGeom<G extends Geometry>(geojson: Feature<G> | G): G {\n  if (geojson.type === \"Feature\") {\n    return geojson.geometry;\n  }\n  return geojson;\n}\n\n/**\n * Get GeoJSON object's type, Geometry type is prioritize.\n *\n * @param {GeoJSON} geojson GeoJSON object\n * @param {string} [name=\"geojson\"] name of the variable to display in error message (unused)\n * @returns {string} GeoJSON type\n * @example\n * var point = {\n *   \"type\": \"Feature\",\n *   \"properties\": {},\n *   \"geometry\": {\n *     \"type\": \"Point\",\n *     \"coordinates\": [110, 40]\n *   }\n * }\n * var geom = turf.getType(point)\n * //=\"Point\"\n */\nfunction getType(\n  geojson: Feature<any> | FeatureCollection<any> | Geometry,\n  _name?: string\n): string {\n  if (geojson.type === \"FeatureCollection\") {\n    return \"FeatureCollection\";\n  }\n  if (geojson.type === \"GeometryCollection\") {\n    return \"GeometryCollection\";\n  }\n  if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n    return geojson.geometry.type;\n  }\n  return geojson.type;\n}\n\nexport {\n  getCoord,\n  getCoords,\n  containsNumber,\n  geojsonType,\n  featureOf,\n  collectionOf,\n  getGeom,\n  getType,\n};\n// No default export!\n","import pip from \"point-in-polygon-hao\";\nimport {\n  BBox,\n  Feature,\n  MultiPolygon,\n  Polygon,\n  GeoJsonProperties,\n} from \"geojson\";\nimport { Coord } from \"@turf/helpers\";\nimport { getCoord, getGeom } from \"@turf/invariant\";\n\n// http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule\n// modified from: https://github.com/substack/point-in-polygon/blob/master/index.js\n// which was modified from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html\n/**\n * Takes a {@link Point} and a {@link Polygon} or {@link MultiPolygon} and determines if the point\n * resides inside the polygon. The polygon can be convex or concave. The function accounts for holes.\n *\n * @name booleanPointInPolygon\n * @param {Coord} point input point\n * @param {Feature<Polygon|MultiPolygon>} polygon input polygon or multipolygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreBoundary=false] True if polygon boundary should be ignored when determining if\n * the point is inside the polygon otherwise false.\n * @returns {boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon\n * @example\n * var pt = turf.point([-77, 44]);\n * var poly = turf.polygon([[\n *   [-81, 41],\n *   [-81, 47],\n *   [-72, 47],\n *   [-72, 41],\n *   [-81, 41]\n * ]]);\n *\n * turf.booleanPointInPolygon(pt, poly);\n * //= true\n */\nfunction booleanPointInPolygon<\n  G extends Polygon | MultiPolygon,\n  P extends GeoJsonProperties = GeoJsonProperties,\n>(\n  point: Coord,\n  polygon: Feature<G, P> | G,\n  options: {\n    ignoreBoundary?: boolean;\n  } = {}\n) {\n  // validation\n  if (!point) {\n    throw new Error(\"point is required\");\n  }\n  if (!polygon) {\n    throw new Error(\"polygon is required\");\n  }\n\n  const pt = getCoord(point);\n  const geom = getGeom(polygon);\n  const type = geom.type;\n  const bbox = polygon.bbox;\n  let polys: any[] = geom.coordinates;\n\n  // Quick elimination if point is not inside bbox\n  if (bbox && inBBox(pt, bbox) === false) {\n    return false;\n  }\n\n  if (type === \"Polygon\") {\n    polys = [polys];\n  }\n  let result = false;\n  for (var i = 0; i < polys.length; ++i) {\n    const polyResult = pip(pt, polys[i]);\n    if (polyResult === 0) return options.ignoreBoundary ? false : true;\n    else if (polyResult) result = true;\n  }\n\n  return result;\n}\n\n/**\n * inBBox\n *\n * @private\n * @param {Position} pt point [x,y]\n * @param {BBox} bbox BBox [west, south, east, north]\n * @returns {boolean} true/false if point is inside BBox\n */\nfunction inBBox(pt: number[], bbox: BBox) {\n  return (\n    bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1]\n  );\n}\n\nexport { booleanPointInPolygon };\nexport default booleanPointInPolygon;\n","import * as GeoTZ from \"browser-geo-tz\";\r\nimport { Coordinates, CurrectionObject } from \"./types\";\r\n\r\n// Polar to Cartesian [r, theta] => [x, y]\r\nconst p2c = (pt: Array<number>): Array<number> => [pt[0] * Math.cos(pt[1]), pt[0] * Math.sin(pt[1])];\r\n// Cartesian to Polar [x, y] => [r, theta]\r\nconst c2p = (pt: Array<number>): Array<number> => [Math.sqrt(pt[0] ** 2 + pt[1] ** 2), Math.atan2(pt[1], pt[0])];\r\n\r\n// Dregrees to Radians\r\nconst degreesToRadians = (degrees: number): number => {\r\n    return (degrees % 360) * (Math.PI / 180);\r\n}\r\n\r\n// Radians to Degress\r\nconst radiansToDegrees = (radians: number): number => {\r\n    return radians * (180 / Math.PI);\r\n}\r\n\r\n// Correction of time values in the format 0 to 60\r\nconst correctionArrayHour = (array: Array<number>, values: CurrectionObject): Array<number> => {\r\n    let hour = array[0];\r\n    let minute = array[1] + values.minutes;\r\n    let second = array[2] + values.seconds;\r\n\r\n    if (second >= 60) {\r\n        minute = minute + 1;\r\n        second = second - 60;\r\n    } else if (second < 0) {\r\n        minute = minute - 1;\r\n        second = 60 - Math.abs(second);\r\n    }\r\n\r\n    if (minute >= 60) {\r\n        hour = hour + 1;\r\n        minute = minute - 60;\r\n    } else if (minute < 0) {\r\n        hour = hour - 1;\r\n        minute = 60 - Math.abs(minute);\r\n    }\r\n\r\n    return [hour, minute, second];\r\n}\r\n\r\n// Decimal time to hour, minute and seconds\r\nconst hd2hms = (hd: number): Array<number> => {\r\n    let hend = Math.floor(hd);\r\n    let med = (hd - hend) * 60;\r\n    let mend = Math.floor((hd - hend) * 60);\r\n    let sed = (med - mend) * 60;\r\n    let send = Math.floor(sed);\r\n    return [hend, mend, send];\r\n}\r\n\r\n// Request to the timezonedb api to fetch the timezone of the coordinates\r\nconst timeZoneName = async (coords: Coordinates) => {\r\n    if (coords.lat !== null && coords.lng !== null) {\r\n        try {\r\n        return await GeoTZ.find(coords.lat, coords.lng);\r\n        } catch (error) {\r\n            throw new Error(\"TimeZone name error\");\r\n        }\r\n    }\r\n}\r\n\r\n// Calculate timezone offset in seconds\r\nconst getOffset = (timeZone: string | undefined) => {\r\n    const timeZoneName = Intl.DateTimeFormat(\"ia\", {\r\n        timeZoneName: \"short\",\r\n        timeZone,\r\n    })\r\n        .formatToParts()\r\n        .find((i) => i.type === \"timeZoneName\")?.value;\r\n    const offset = timeZoneName?.slice(3);\r\n    if (!offset) return 0;\r\n\r\n    const matchData = offset.match(/([+-])(\\d+)(?::(\\d+))?/);\r\n    if (!matchData) throw `cannot parse timezone name: ${timeZoneName}`;\r\n\r\n    const [, sign, hour, minute] = matchData;\r\n    let result = parseInt(hour) * 60 * 60;\r\n    if (sign === \"-\") result *= -1;\r\n    if (minute) result += parseInt(minute);\r\n\r\n    return result;\r\n};\r\n\r\nexport {\r\n    p2c,\r\n    c2p,\r\n    hd2hms,\r\n    getOffset,\r\n    timeZoneName,\r\n    degreesToRadians,\r\n    radiansToDegrees,\r\n    correctionArrayHour\r\n}","import { CurrectionObject, LocTime, SunTime, TimeZone } from \"./types\";\r\nimport { correctionArrayHour, degreesToRadians, getOffset, hd2hms, radiansToDegrees, timeZoneName } from \"./utils\";\r\n\r\nexport class SunPosition {\r\n    private STANDARD_MERIDIAN: number = 0;\r\n    private lat: number;\r\n    private lng: number;\r\n    private TZ: Promise<TimeZone>;\r\n    private x: number;\r\n    private angleDeclination: number;\r\n    private sunrise: Array<number>;\r\n    private sunset: Array<number>;\r\n    private elevation: number;\r\n    private azimuth: number;\r\n    private durationDay: Array<number>;\r\n    private objectCurrection: CurrectionObject;\r\n    private hourDay: number;\r\n    private dateTimeLoc: Date;\r\n\r\n    private floor = Math.floor;\r\n    private round = Math.round;\r\n    private sin = Math.sin;\r\n    private cos = Math.cos;\r\n    private tan = Math.tan;\r\n    private asin = Math.asin;\r\n    private acos = Math.acos;\r\n\r\n    constructor(lat: number, lng: number, date: Date) {\r\n        this.lat = lat;\r\n        this.lng = lng;\r\n        this.TZ = this.timeZoneObt();\r\n        this.dateTimeLoc = date;\r\n        this.calcDeclination();\r\n        this.sunHour();\r\n    }\r\n\r\n    public setLatitude(lat: number): void {\r\n        this.lat = lat;\r\n        if (this.lat !== lat) {\r\n            this.TZ = this.timeZoneObt();\r\n        }\r\n    }\r\n\r\n    public setLongitude(lng: number): void {\r\n        this.lng = lng;\r\n        if (this.lng !== lng) {\r\n            this.TZ = this.timeZoneObt();\r\n        }\r\n    }\r\n\r\n    public setDateTime(dateTime: Date) {\r\n        this.dateTimeLoc = dateTime;\r\n        this.calcDeclination();\r\n        this.sunHour();\r\n    }\r\n\r\n    public getDurationDay() {\r\n        return this.durationDay;\r\n    }\r\n\r\n    public getDeclinationAngle() {\r\n        return this.angleDeclination;\r\n    }\r\n\r\n    public async getTimeZone() {\r\n        return this.TZ;\r\n    }\r\n\r\n    // Calculate the length of the day, sunrise and sunset in local time and in the official time of the meridian that\r\n    // governs the spindle\r\n    private sunHour(): void {\r\n        this.hourDay = (2 / 15) * radiansToDegrees(this.acos(-this.tan(degreesToRadians(this.lat)) * this.tan(degreesToRadians(this.angleDeclination))));\r\n        this.durationDay = hd2hms(this.hourDay);\r\n\r\n        // Sunrise calculation\r\n        let initDay = 12 - (this.hourDay / 2);\r\n        this.sunrise = hd2hms(initDay);\r\n\r\n        // Sunset calculation\r\n        let endDay = 12 + (this.hourDay / 2);\r\n        this.sunset = hd2hms(endDay);\r\n    }\r\n\r\n    // Equation of time currenction (obliquity and ellipticity)\r\n    private Eot(): number {\r\n        // Return in minutes\r\n        let Eot = 9.87 * this.sin(degreesToRadians(2 * this.x)) - 7.53 * this.cos(degreesToRadians(this.x)) - 1.5 * this.sin(degreesToRadians(this.x));\r\n        return Eot;\r\n    }\r\n\r\n    // Correction for position on the meridian in relation to local standard time.\r\n    private currectionTime() {\r\n        return new Promise<CurrectionObject>(async (resolve) => {\r\n            // Standard time zone meridian. If the API request fails, \r\n            // set the meridian based on a multiple of 15 degrees\r\n            this.STANDARD_MERIDIAN = (await this.TZ).gmtOffset ? ((await this.TZ).gmtOffset / (60 * 60)) * 15 : this.round(this.lng / 15) * 15;\r\n            // Correction of time to the region's official time\r\n            let currection = ((this.STANDARD_MERIDIAN - this.lng) * 4) - this.Eot();\r\n            let minutes = this.round(currection);\r\n            let seconds = this.round((currection - minutes) * 60);\r\n            resolve({\r\n                minutes,\r\n                seconds\r\n            })\r\n        })\r\n    }\r\n\r\n    // Return function for solar time, with sunrise and sunset. Also returns the current input time corrected for solar time\r\n    public getSunTime() {\r\n        let date = this.dateTimeLoc;\r\n        return new Promise<SunTime>(async (resolve) => {\r\n            // COrrection to Local meridian\r\n            let currection = await this.currectionTime();\r\n            let eot = this.Eot();\r\n            // Correct values above 60 or negative values in hourly data\r\n            let SMT = correctionArrayHour([date.getHours(), date.getMinutes(), date.getSeconds()], { minutes: -currection.minutes, seconds: -currection.seconds });\r\n            // Correction to Eot()\r\n            let minutes = -this.round(eot);\r\n            let seconds = -this.round((eot - minutes) * 60);\r\n            let STIC = correctionArrayHour(this.sunrise, { minutes, seconds });\r\n            let STEC = correctionArrayHour(this.sunset, { minutes, seconds });\r\n            resolve({\r\n                moment: new Date(date.getFullYear(), date.getMonth(), date.getDate(), SMT[0], SMT[1], SMT[2]),\r\n                sunrise: new Date(date.getFullYear(), date.getMonth(), date.getDate(), STIC[0], STIC[1], STIC[2]),\r\n                sunset: new Date(date.getFullYear(), date.getMonth(), date.getDate(), STEC[0], STEC[1], STEC[2]),\r\n            })\r\n        })\r\n    }\r\n\r\n    // Return function to local time, with sunrise and sunset. Also returns the current entry time\r\n    public getLocTime() {\r\n        let date = this.dateTimeLoc;\r\n        return new Promise<LocTime>(async (resolve) => {\r\n            this.objectCurrection = await this.currectionTime();\r\n            // Correct values above 60 or negative values in hourly data\r\n            let STIC = correctionArrayHour(this.sunrise, this.objectCurrection);\r\n            let STEC = correctionArrayHour(this.sunset, this.objectCurrection);\r\n            resolve({\r\n                moment: date,\r\n                sunrise: new Date(date.getFullYear(), date.getMonth(), date.getDate(), STIC[0], STIC[1], STIC[2]),\r\n                sunset: new Date(date.getFullYear(), date.getMonth(), date.getDate(), STEC[0], STEC[1], STEC[2]),\r\n            })\r\n        }\r\n        )\r\n    }\r\n\r\n    // Calculate the angle of declination\r\n    private calcDeclination(): void {\r\n        let date = this.dateTimeLoc;\r\n        let dateInit = new Date(`01/01/${date.getFullYear()}`);\r\n        let dateEnd = date;\r\n        let diff = this.floor(dateEnd.getTime() - dateInit.getTime());\r\n        let dayYear = diff / (1000 * 60 * 60 * 24);\r\n        this.x = (360 / 365) * (dayYear - 81);\r\n        this.angleDeclination = 23.45 * this.sin(degreesToRadians(this.x));\r\n    }\r\n\r\n    // Hour angle according to local time in hours\r\n    private async calcAngleHour(): Promise<number> {\r\n        let moment = (await this.getSunTime()).moment;\r\n        // For elevation calculation, consider non-standard time\r\n        // The user's entry time must be understood as the official time of the location, therefore, the correction must be made\r\n        // for calculating solar time.\r\n        const time = moment.getHours() + (moment.getMinutes() / 60) + (moment.getSeconds() / (60 * 60));\r\n        return (time - 12) * 15;\r\n    }\r\n\r\n    // Elevation angle\r\n    public getElevation(): Promise<number> {\r\n        return new Promise(async (resolve) => {\r\n            const angle = this.sin(degreesToRadians(this.angleDeclination)) * this.sin(degreesToRadians(this.lat))\r\n                + this.cos(degreesToRadians(this.angleDeclination)) * this.cos(degreesToRadians(this.lat)) * this.cos(degreesToRadians(await this.calcAngleHour()));\r\n            this.elevation = radiansToDegrees(this.asin(angle));\r\n            resolve(this.elevation);\r\n        })\r\n    }\r\n\r\n    // Azimuth angle\r\n    public getAzimuth(): Promise<number> {\r\n        return new Promise(async (resolve) => {\r\n            const angle = (this.sin(degreesToRadians(this.angleDeclination)) * this.cos(degreesToRadians(this.lat))\r\n                - this.cos(degreesToRadians(this.angleDeclination)) * this.sin(degreesToRadians(this.lat)) * this.cos(degreesToRadians(await this.calcAngleHour()))) / this.cos(degreesToRadians(this.elevation));\r\n            if (await this.calcAngleHour() >= 0) {\r\n                this.azimuth = 360 - radiansToDegrees(this.acos(angle));\r\n            } else {\r\n                this.azimuth = radiansToDegrees(this.acos(angle));\r\n            }\r\n            resolve(this.azimuth);\r\n        })\r\n    }\r\n\r\n    // Return function with local time zone data\r\n    private async timeZoneObt(): Promise<TimeZone> {\r\n        const result = await timeZoneName({ lat: this.lat, lng: this.lng });\r\n        const offset = getOffset(result && result[0]);\r\n        this.STANDARD_MERIDIAN = offset ? (offset / (60 * 60)) * 15 : this.round(this.lng / 15) * 15;\r\n        return {\r\n            gmtOffset: offset,\r\n            zoneName: result && result[0],\r\n        }\r\n    }\r\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAEA,WAAO,UAAU;AAEjB,QAAI;AAAJ,QAAU;AAAV,QAAmB;AAAnB,QAA4B;AAA5B,QAAiC;AAAjC,QACI,eAAe;AAEnB,QAAI,gBAAgB;AAAA,MAChB,SAAS;AAAA,MACT,cAAc;AAAA,MACd,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,sBAAsB;AAAA,IAC1B;AAEA,aAAS,OAAO,KAAK,KAAK;AACtB,aAAO,CAAC;AACR,gBAAU,CAAC;AACX,gBAAU;AACV,YAAM;AACN,UAAI;AAEJ,cAAQ,GAAG;AAEX,UAAI,KAAK,IAAI,GAAG,YAAY;AAC5B,UAAI,YAAY,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI;AAEjD,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ;AAAK,YAAI,iBAAiB,GAAG,QAAQ,CAAC,CAAC;AAC3E,UAAI,QAAQ;AAAG,YAAI,iBAAiB,GAAG,GAAG;AAC1C,UAAI,cAAc;AAAG,YAAI,iBAAiB,GAAG,SAAS;AAEtD,UAAI,IAAI,SAAS;AAAqB,YAAI,aAAa,GAAG,wBAAwB,GAAG;AAAA,eAC5E,IAAI,SAAS;AAAW,YAAI,aAAa,GAAG,cAAc,GAAG;AAAA;AACjE,YAAI,aAAa,GAAG,eAAe,GAAG;AAE3C,aAAO;AAEP,aAAO,IAAI,OAAO;AAAA,IACtB;AAEA,aAAS,QAAQ,KAAK;AAClB,UAAI,GAAG;AAEP,UAAI,IAAI,SAAS,qBAAqB;AAClC,aAAK,IAAI,GAAG,IAAI,IAAI,SAAS,QAAQ;AAAK,kBAAQ,IAAI,SAAS,CAAC,CAAC;AAAA,MAErE,WAAW,IAAI,SAAS,WAAW;AAC/B,YAAI,IAAI,aAAa;AAAM,kBAAQ,IAAI,QAAQ;AAC/C,aAAK,OAAO,IAAI;AAAY,kBAAQ,GAAG;AAAA,MAE3C,WAAW,IAAI,SAAS;AAAS,qBAAa,IAAI,WAAW;AAAA,eACpD,IAAI,SAAS;AAAc,sBAAc,IAAI,WAAW;AAAA,eACxD,IAAI,SAAS,sBAAsB;AACxC,aAAK,IAAI,GAAG,IAAI,IAAI,WAAW,QAAQ;AAAK,kBAAQ,IAAI,WAAW,CAAC,CAAC;AAAA,MACzE,WACS,IAAI,SAAS;AAAc,sBAAc,IAAI,WAAW;AAAA,eACxD,IAAI,SAAS,aAAa,IAAI,SAAS;AAAmB,yBAAiB,IAAI,WAAW;AAAA,eAC1F,IAAI,SAAS,gBAAgB;AAClC,aAAK,IAAI,GAAG,IAAI,IAAI,YAAY,QAAQ;AAAK,2BAAiB,IAAI,YAAY,CAAC,CAAC;AAAA,MACpF;AAEA,WAAK,OAAO,KAAK;AACb,YAAI,CAAC,aAAa,KAAK,IAAI,IAAI;AAAG,kBAAQ,GAAG;AAAA,MACjD;AAAA,IACJ;AAEA,aAAS,iBAAiB,QAAQ;AAC9B,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ;AAAK,sBAAc,OAAO,CAAC,CAAC;AAAA,IACnE;AAEA,aAAS,cAAc,QAAQ;AAC3B,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ;AAAK,qBAAa,OAAO,CAAC,CAAC;AAAA,IAClE;AAEA,aAAS,aAAaA,QAAO;AACzB,YAAM,KAAK,IAAI,KAAKA,OAAM,MAAM;AAGhC,eAAS,IAAI,GAAG,IAAIA,OAAM,QAAQ,KAAK;AACnC,eAAO,KAAK,MAAMA,OAAM,CAAC,IAAI,CAAC,IAAI,MAAMA,OAAM,CAAC,KAAK,IAAI;AAAc,eAAK;AAAA,MAC/E;AAAA,IACJ;AAEA,aAAS,QAAQ,KAAK;AAClB,UAAI,KAAK,GAAG,MAAM,QAAW;AACzB,gBAAQ,KAAK,GAAG;AAChB,aAAK,GAAG,IAAI;AAAA,MAChB;AAAA,IACJ;AAEA,aAAS,uBAAuB,KAAK,KAAK;AACtC,eAAS,IAAI,GAAG,IAAI,IAAI,SAAS,QAAQ,KAAK;AAC1C,YAAI,aAAa,GAAG,cAAc,IAAI,SAAS,CAAC,CAAC;AAAA,MACrD;AACA,iBAAW,KAAK,KAAK,IAAI;AAAA,IAC7B;AAEA,aAAS,aAAaC,UAAS,KAAK;AAChC,UAAIA,SAAQ,aAAa;AAAM,YAAI,aAAa,GAAG,eAAeA,SAAQ,QAAQ;AAElF,UAAIA,SAAQ,OAAO,QAAW;AAC1B,YAAI,OAAOA,SAAQ,OAAO,YAAYA,SAAQ,KAAK,MAAM;AAAG,cAAI,kBAAkB,IAAIA,SAAQ,EAAE;AAAA;AAC3F,cAAI,iBAAiB,IAAIA,SAAQ,EAAE;AAAA,MAC5C;AAEA,UAAIA,SAAQ;AAAY,mBAAWA,SAAQ,YAAY,GAAG;AAC1D,iBAAWA,UAAS,KAAK,IAAI;AAAA,IACjC;AAEA,aAAS,cAAc,MAAM,KAAK;AAC9B,UAAI,iBAAiB,GAAG,cAAc,KAAK,IAAI,CAAC;AAEhD,UAAI,SAAS,KAAK;AAElB,UAAI,KAAK,SAAS;AAAS,mBAAW,QAAQ,GAAG;AAAA,eACxC,KAAK,SAAS;AAAc,kBAAU,QAAQ,KAAK,IAAI;AAAA,eACvD,KAAK,SAAS;AAAc,kBAAU,QAAQ,GAAG;AAAA,eACjD,KAAK,SAAS;AAAmB,uBAAe,QAAQ,GAAG;AAAA,eAC3D,KAAK,SAAS;AAAW,uBAAe,QAAQ,KAAK,IAAI;AAAA,eACzD,KAAK,SAAS;AAAgB,0BAAkB,QAAQ,GAAG;AAAA,eAC3D,KAAK,SAAS,sBAAsB;AACzC,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ;AAAK,cAAI,aAAa,GAAG,eAAe,KAAK,WAAW,CAAC,CAAC;AAAA,MAC1G;AAEA,iBAAW,MAAM,KAAK,IAAI;AAAA,IAC9B;AAEA,aAAS,WAAW,OAAO,KAAK,UAAU;AACtC,UAAI,UAAU,CAAC,GACX,aAAa;AAEjB,eAAS,OAAO,OAAO;AACnB,YAAI,YAAY,aAAa,KAAK,MAAM,IAAI,GAAG;AAC3C;AAAA,QACJ;AACA,YAAI,aAAa,IAAI,YAAY,MAAM,GAAG,CAAC;AAC3C,gBAAQ,KAAK,KAAK,GAAG,CAAC;AACtB,gBAAQ,KAAK,YAAY;AAAA,MAC7B;AACA,UAAI,kBAAkB,WAAW,KAAK,IAAI,OAAO;AAAA,IACrD;AAEA,aAAS,WAAW,OAAO,KAAK;AAC5B,UAAI,UAAU;AAAM;AAEpB,UAAI,OAAO,OAAO;AAElB,UAAI,SAAS;AAAU,YAAI,iBAAiB,GAAG,KAAK;AAAA,eAC3C,SAAS;AAAW,YAAI,kBAAkB,GAAG,KAAK;AAAA,eAClD,SAAS;AAAU,YAAI,iBAAiB,GAAG,KAAK,UAAU,KAAK,CAAC;AAAA,eAChE,SAAS,UAAU;AACxB,YAAI,QAAQ,MAAM;AAAG,cAAI,iBAAiB,GAAG,KAAK;AAAA,iBACzC,SAAS;AAAG,cAAI,iBAAiB,GAAG,KAAK;AAAA;AAC7C,cAAI,iBAAiB,GAAG,CAAC,KAAK;AAAA,MACvC;AAAA,IACJ;AAEA,aAAS,WAAWD,QAAO,KAAK;AAC5B,UAAI,SAAS,CAAC;AACd,eAAS,IAAI,GAAG,IAAI,KAAK;AAAK,eAAO,KAAK,KAAK,MAAMA,OAAM,CAAC,IAAI,CAAC,CAAC;AAClE,UAAI,mBAAmB,GAAG,MAAM;AAAA,IACpC;AAEA,aAAS,UAAU,MAAM,KAAK;AAC1B,UAAI,SAAS,CAAC;AACd,mBAAa,QAAQ,IAAI;AACzB,UAAI,mBAAmB,GAAG,MAAM;AAAA,IACpC;AAEA,aAAS,eAAe,OAAO,KAAK,QAAQ;AACxC,UAAI,MAAM,MAAM,QACZ;AACJ,UAAI,QAAQ,GAAG;AACX,YAAI,UAAU,CAAC;AACf,aAAK,IAAI,GAAG,IAAI,KAAK;AAAK,kBAAQ,KAAK,MAAM,CAAC,EAAE,UAAU,SAAS,IAAI,EAAE;AACzE,YAAI,kBAAkB,GAAG,OAAO;AAAA,MAEpC;AACA,UAAI,SAAS,CAAC;AACd,WAAK,IAAI,GAAG,IAAI,KAAK;AAAK,qBAAa,QAAQ,MAAM,CAAC,GAAG,MAAM;AAC/D,UAAI,mBAAmB,GAAG,MAAM;AAAA,IACpC;AAEA,aAAS,kBAAkB,UAAU,KAAK;AACtC,UAAI,MAAM,SAAS,QACf,GAAG;AACP,UAAI,QAAQ,KAAK,SAAS,CAAC,EAAE,WAAW,GAAG;AACvC,YAAI,UAAU,CAAC,GAAG;AAClB,aAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACtB,kBAAQ,KAAK,SAAS,CAAC,EAAE,MAAM;AAC/B,eAAK,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,QAAQ;AAAK,oBAAQ,KAAK,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;AAAA,QACnF;AACA,YAAI,kBAAkB,GAAG,OAAO;AAAA,MACpC;AAEA,UAAI,SAAS,CAAC;AACd,WAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACtB,aAAK,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,QAAQ;AAAK,uBAAa,QAAQ,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI;AAAA,MACtF;AACA,UAAI,mBAAmB,GAAG,MAAM;AAAA,IACpC;AAEA,aAAS,aAAa,QAAQ,MAAM,QAAQ;AACxC,UAAI,GAAG,GACH,MAAM,KAAK,UAAU,SAAS,IAAI,IAClCE,OAAM,IAAI,MAAM,GAAG;AACvB,WAAK,IAAI,GAAG,IAAI,KAAK;AAAK,QAAAA,KAAI,CAAC,IAAI;AACnC,WAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACtB,aAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACtB,cAAI,IAAI,KAAK,MAAM,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAIA,KAAI,CAAC;AAC1C,iBAAO,KAAK,CAAC;AACb,UAAAA,KAAI,CAAC,KAAK;AAAA,QACd;AAAA,MACJ;AAAA,IACJ;AAEA,aAAS,aAAa,KAAK,MAAM;AAC7B,UAAI,QAAQ;AAAQ,eAAO;AAAA,eAClB,SAAS,qBAAqB;AACnC,YAAI,QAAQ;AAAY,iBAAO;AAAA,MACnC,WAAW,SAAS,WAAW;AAC3B,YAAI,QAAQ,QAAQ,QAAQ,gBAAgB,QAAQ;AAAY,iBAAO;AAAA,MAC3E,WAAW,SAAS,sBAAsB;AACtC,YAAI,QAAQ;AAAc,iBAAO;AAAA,MACrC,WAAW,QAAQ;AAAe,eAAO;AACzC,aAAO;AAAA,IACX;AAAA;AAAA;;;ACpOA;AAAA;AAAA;AAEA,WAAO,UAAUC;AAEjB,QAAI;AAAJ,QAAU;AAAV,QAAkB;AAAlB,QAA2B;AAA3B,QAAgC;AAEhC,QAAI,gBAAgB;AAAA,MAChB;AAAA,MAAS;AAAA,MAAc;AAAA,MAAc;AAAA,MACrC;AAAA,MAAW;AAAA,MAAgB;AAAA,IAAoB;AAEnD,aAASA,QAAO,KAAK;AACjB,YAAM;AACN,UAAI,KAAK,IAAI,IAAI,CAAC;AAClB,gBAAU;AAEV,aAAO,CAAC;AACR,eAAS,CAAC;AACV,UAAI,MAAM,IAAI,WAAW,eAAe,CAAC,CAAC;AAC1C,aAAO;AAEP,aAAO;AAAA,IACX;AAEA,aAAS,cAAc,KAAK,KAAK,KAAK;AAClC,UAAI,QAAQ;AAAG,aAAK,KAAK,IAAI,WAAW,CAAC;AAAA,eAChC,QAAQ;AAAG,cAAM,IAAI,WAAW;AAAA,eAChC,QAAQ;AAAG,YAAI,KAAK,IAAI,IAAI,IAAI,WAAW,CAAC;AAAA,eAE5C,QAAQ;AAAG,8BAAsB,KAAK,GAAG;AAAA,eACzC,QAAQ;AAAG,oBAAY,KAAK,GAAG;AAAA,eAC/B,QAAQ;AAAG,qBAAa,KAAK,GAAG;AAAA,IAC7C;AAEA,aAAS,sBAAsB,KAAK,KAAK;AACrC,UAAI,OAAO;AACX,UAAI,WAAW,CAAC;AAChB,aAAO,IAAI,YAAY,4BAA4B,GAAG;AAAA,IAC1D;AAEA,aAAS,YAAY,KAAKC,UAAS;AAC/B,MAAAA,SAAQ,OAAO;AACf,UAAI,IAAI,IAAI,YAAY,kBAAkBA,QAAO;AACjD,UAAI,EAAE,cAAc;AAAI,UAAE,WAAW;AACrC,aAAO;AAAA,IACX;AAEA,aAAS,aAAa,KAAK,MAAM;AAC7B,WAAK,OAAO;AACZ,aAAO,IAAI,YAAY,mBAAmB,IAAI;AAAA,IAClD;AAEA,aAAS,2BAA2B,KAAK,KAAK,KAAK;AAC/C,UAAI,QAAQ;AAAG,YAAI,SAAS,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC;AAAA,eAE5C,QAAQ;AAAI,eAAO,KAAK,UAAU,GAAG,CAAC;AAAA,eACtC,QAAQ;AAAI,kBAAU,KAAK,GAAG;AAAA,IAC3C;AAEA,aAAS,iBAAiB,KAAKA,UAAS,KAAK;AACzC,UAAI,QAAQ;AAAG,QAAAA,SAAQ,WAAW,aAAa,KAAK,CAAC,CAAC;AAAA,eAE7C,QAAQ;AAAI,QAAAA,SAAQ,KAAK,IAAI,WAAW;AAAA,eACxC,QAAQ;AAAI,QAAAA,SAAQ,KAAK,IAAI,YAAY;AAAA,eAEzC,QAAQ;AAAI,eAAO,KAAK,UAAU,GAAG,CAAC;AAAA,eACtC,QAAQ;AAAI,QAAAA,SAAQ,aAAa,UAAU,KAAK,CAAC,CAAC;AAAA,eAClD,QAAQ;AAAI,kBAAU,KAAKA,QAAO;AAAA,IAC/C;AAEA,aAAS,kBAAkB,KAAK,MAAM,KAAK;AACvC,UAAI,QAAQ;AAAG,aAAK,OAAO,cAAc,IAAI,WAAW,CAAC;AAAA,eAEhD,QAAQ;AAAG,kBAAU,IAAI,iBAAiB;AAAA,eAC1C,QAAQ;AAAG,mBAAW,MAAM,KAAK,KAAK,IAAI;AAAA,eAC1C,QAAQ,GAAG;AAChB,aAAK,aAAa,KAAK,cAAc,CAAC;AACtC,aAAK,WAAW,KAAK,aAAa,KAAK,CAAC,CAAC,CAAC;AAAA,MAC9C,WACS,QAAQ;AAAI,eAAO,KAAK,UAAU,GAAG,CAAC;AAAA,eACtC,QAAQ;AAAI,kBAAU,KAAK,IAAI;AAAA,IAC5C;AAEA,aAAS,WAAW,MAAM,KAAK,MAAM;AACjC,UAAI,SAAS;AAAS,aAAK,cAAc,UAAU,GAAG;AAAA,eAC7C,SAAS;AAAc,aAAK,cAAc,SAAS,KAAK,IAAI;AAAA,eAC5D,SAAS;AAAc,aAAK,cAAc,SAAS,GAAG;AAAA,eACtD,SAAS;AAAmB,aAAK,cAAc,cAAc,GAAG;AAAA,eAChE,SAAS;AAAW,aAAK,cAAc,cAAc,KAAK,IAAI;AAAA,eAC9D,SAAS;AAAgB,aAAK,cAAc,iBAAiB,GAAG;AAAA,IAC7E;AAEA,aAAS,UAAU,KAAK;AACpB,UAAI,MAAM,IAAI,WAAW,IAAI,IAAI,KAC7B,QAAQ;AAEZ,aAAO,IAAI,MAAM,KAAK;AAClB,YAAI,MAAM,IAAI,WAAW,GACrB,MAAM,OAAO;AAEjB,YAAI,QAAQ;AAAG,kBAAQ,IAAI,WAAW;AAAA,iBAC7B,QAAQ;AAAG,kBAAQ,IAAI,WAAW;AAAA,iBAClC,QAAQ;AAAG,kBAAQ,IAAI,WAAW;AAAA,iBAClC,QAAQ;AAAG,kBAAQ,CAAC,IAAI,WAAW;AAAA,iBACnC,QAAQ;AAAG,kBAAQ,IAAI,YAAY;AAAA,iBACnC,QAAQ;AAAG,kBAAQ,KAAK,MAAM,IAAI,WAAW,CAAC;AAAA,MAC3D;AACA,aAAO;AAAA,IACX;AAEA,aAAS,UAAU,KAAK,OAAO;AAC3B,UAAI,MAAM,IAAI,WAAW,IAAI,IAAI;AACjC,aAAO,IAAI,MAAM;AAAK,cAAM,KAAK,IAAI,WAAW,CAAC,CAAC,IAAI,OAAO,IAAI,WAAW,CAAC;AAC7E,eAAS,CAAC;AACV,aAAO;AAAA,IACX;AAEA,aAAS,UAAU,KAAK;AACpB,UAAI,MAAM,IAAI,WAAW,IAAI,IAAI,KAC7B,SAAS,CAAC;AACd,aAAO,IAAI,MAAM;AAAK,eAAO,KAAK,IAAI,YAAY,IAAI,CAAC;AACvD,aAAO;AAAA,IACX;AAEA,aAAS,aAAa,KAAK,KAAK,KAAK,QAAQ;AACzC,UAAI,IAAI,GACJ,SAAS,CAAC,GACV,GAAG;AAEP,UAAI,QAAQ,CAAC;AACb,WAAK,IAAI,GAAG,IAAI,KAAK;AAAK,cAAM,CAAC,IAAI;AAErC,aAAO,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK;AAClC,YAAI,CAAC;AACL,aAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACtB,gBAAM,CAAC,KAAK,IAAI,YAAY;AAC5B,YAAE,CAAC,IAAI,MAAM,CAAC,IAAI;AAAA,QACtB;AACA,eAAO,KAAK,CAAC;AACb;AAAA,MACJ;AACA,UAAI;AAAQ,eAAO,KAAK,OAAO,CAAC,CAAC;AAEjC,aAAO;AAAA,IACX;AAEA,aAAS,SAAS,KAAK;AACnB,aAAO,aAAa,KAAK,IAAI,WAAW,IAAI,IAAI,GAAG;AAAA,IACvD;AAEA,aAAS,cAAc,KAAK,QAAQ;AAChC,UAAI,MAAM,IAAI,WAAW,IAAI,IAAI;AACjC,UAAI,CAAC;AAAS,eAAO,CAAC,aAAa,KAAK,KAAK,MAAM,MAAM,CAAC;AAE1D,UAAI,SAAS,CAAC;AACd,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ;AAAK,eAAO,KAAK,aAAa,KAAK,KAAK,QAAQ,CAAC,GAAG,MAAM,CAAC;AAC/F,gBAAU;AACV,aAAO;AAAA,IACX;AAEA,aAAS,iBAAiB,KAAK;AAC3B,UAAI,MAAM,IAAI,WAAW,IAAI,IAAI;AACjC,UAAI,CAAC;AAAS,eAAO,CAAC,CAAC,aAAa,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC;AAE1D,UAAI,SAAS,CAAC;AACd,UAAI,IAAI;AACR,eAAS,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,KAAK;AACjC,YAAI,QAAQ,CAAC;AACb,iBAAS,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG;AAAK,gBAAM,KAAK,aAAa,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AAChG,aAAK,QAAQ,CAAC,IAAI;AAClB,eAAO,KAAK,KAAK;AAAA,MACrB;AACA,gBAAU;AACV,aAAO;AAAA,IACX;AAAA;AAAA;;;AC7KA;AAAA;AAAA;AAEA,YAAQ,SAAS;AACjB,YAAQ,SAAS;AAAA;AAAA;;;ACHjB;AAAA;AACA,YAAQ,OAAO,SAAU,QAAQ,QAAQ,MAAM,MAAM,QAAQ;AAC3D,UAAI,GAAG;AACP,UAAI,OAAQ,SAAS,IAAK,OAAO;AACjC,UAAI,QAAQ,KAAK,QAAQ;AACzB,UAAI,QAAQ,QAAQ;AACpB,UAAI,QAAQ;AACZ,UAAI,IAAI,OAAQ,SAAS,IAAK;AAC9B,UAAI,IAAI,OAAO,KAAK;AACpB,UAAI,IAAI,OAAO,SAAS,CAAC;AAEzB,WAAK;AAEL,UAAI,KAAM,KAAM,CAAC,SAAU;AAC3B,YAAO,CAAC;AACR,eAAS;AACT,aAAO,QAAQ,GAAG,IAAK,IAAI,MAAO,OAAO,SAAS,CAAC,GAAG,KAAK,GAAG,SAAS,GAAG;AAAA,MAAC;AAE3E,UAAI,KAAM,KAAM,CAAC,SAAU;AAC3B,YAAO,CAAC;AACR,eAAS;AACT,aAAO,QAAQ,GAAG,IAAK,IAAI,MAAO,OAAO,SAAS,CAAC,GAAG,KAAK,GAAG,SAAS,GAAG;AAAA,MAAC;AAE3E,UAAI,MAAM,GAAG;AACX,YAAI,IAAI;AAAA,MACV,WAAW,MAAM,MAAM;AACrB,eAAO,IAAI,OAAQ,IAAI,KAAK,KAAK;AAAA,MACnC,OAAO;AACL,YAAI,IAAI,KAAK,IAAI,GAAG,IAAI;AACxB,YAAI,IAAI;AAAA,MACV;AACA,cAAQ,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI;AAAA,IAChD;AAEA,YAAQ,QAAQ,SAAU,QAAQ,OAAO,QAAQ,MAAM,MAAM,QAAQ;AACnE,UAAI,GAAG,GAAG;AACV,UAAI,OAAQ,SAAS,IAAK,OAAO;AACjC,UAAI,QAAQ,KAAK,QAAQ;AACzB,UAAI,QAAQ,QAAQ;AACpB,UAAI,KAAM,SAAS,KAAK,KAAK,IAAI,GAAG,GAAG,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI;AAC9D,UAAI,IAAI,OAAO,IAAK,SAAS;AAC7B,UAAI,IAAI,OAAO,IAAI;AACnB,UAAI,IAAI,QAAQ,KAAM,UAAU,KAAK,IAAI,QAAQ,IAAK,IAAI;AAE1D,cAAQ,KAAK,IAAI,KAAK;AAEtB,UAAI,MAAM,KAAK,KAAK,UAAU,UAAU;AACtC,YAAI,MAAM,KAAK,IAAI,IAAI;AACvB,YAAI;AAAA,MACN,OAAO;AACL,YAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG;AACzC,YAAI,SAAS,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG;AACrC;AACA,eAAK;AAAA,QACP;AACA,YAAI,IAAI,SAAS,GAAG;AAClB,mBAAS,KAAK;AAAA,QAChB,OAAO;AACL,mBAAS,KAAK,KAAK,IAAI,GAAG,IAAI,KAAK;AAAA,QACrC;AACA,YAAI,QAAQ,KAAK,GAAG;AAClB;AACA,eAAK;AAAA,QACP;AAEA,YAAI,IAAI,SAAS,MAAM;AACrB,cAAI;AACJ,cAAI;AAAA,QACN,WAAW,IAAI,SAAS,GAAG;AACzB,eAAM,QAAQ,IAAK,KAAK,KAAK,IAAI,GAAG,IAAI;AACxC,cAAI,IAAI;AAAA,QACV,OAAO;AACL,cAAI,QAAQ,KAAK,IAAI,GAAG,QAAQ,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI;AACrD,cAAI;AAAA,QACN;AAAA,MACF;AAEA,aAAO,QAAQ,GAAG,OAAO,SAAS,CAAC,IAAI,IAAI,KAAM,KAAK,GAAG,KAAK,KAAK,QAAQ,GAAG;AAAA,MAAC;AAE/E,UAAK,KAAK,OAAQ;AAClB,cAAQ;AACR,aAAO,OAAO,GAAG,OAAO,SAAS,CAAC,IAAI,IAAI,KAAM,KAAK,GAAG,KAAK,KAAK,QAAQ,GAAG;AAAA,MAAC;AAE9E,aAAO,SAAS,IAAI,CAAC,KAAK,IAAI;AAAA,IAChC;AAAA;AAAA;;;ACpFA;AAAA;AAAA;AAEA,WAAO,UAAUC;AAEjB,QAAI,UAAU;AAEd,aAASA,KAAI,KAAK;AACd,WAAK,MAAM,YAAY,UAAU,YAAY,OAAO,GAAG,IAAI,MAAM,IAAI,WAAW,OAAO,CAAC;AACxF,WAAK,MAAM;AACX,WAAK,OAAO;AACZ,WAAK,SAAS,KAAK,IAAI;AAAA,IAC3B;AAEA,IAAAA,KAAI,SAAU;AACd,IAAAA,KAAI,UAAU;AACd,IAAAA,KAAI,QAAU;AACd,IAAAA,KAAI,UAAU;AAEd,QAAI,iBAAiB,KAAK,OAAO,KAAK;AAAtC,QACI,iBAAiB,IAAI;AAIzB,QAAI,0BAA0B;AAC9B,QAAI,kBAAkB,OAAO,gBAAgB,cAAc,OAAO,IAAI,YAAY,MAAM;AAExF,IAAAA,KAAI,YAAY;AAAA,MAEZ,SAAS,WAAW;AAChB,aAAK,MAAM;AAAA,MACf;AAAA;AAAA,MAIA,YAAY,SAAS,WAAW,QAAQ,KAAK;AACzC,cAAM,OAAO,KAAK;AAElB,eAAO,KAAK,MAAM,KAAK;AACnB,cAAI,MAAM,KAAK,WAAW,GACtB,MAAM,OAAO,GACb,WAAW,KAAK;AAEpB,eAAK,OAAO,MAAM;AAClB,oBAAU,KAAK,QAAQ,IAAI;AAE3B,cAAI,KAAK,QAAQ;AAAU,iBAAK,KAAK,GAAG;AAAA,QAC5C;AACA,eAAO;AAAA,MACX;AAAA,MAEA,aAAa,SAAS,WAAW,QAAQ;AACrC,eAAO,KAAK,WAAW,WAAW,QAAQ,KAAK,WAAW,IAAI,KAAK,GAAG;AAAA,MAC1E;AAAA,MAEA,aAAa,WAAW;AACpB,YAAI,MAAM,WAAW,KAAK,KAAK,KAAK,GAAG;AACvC,aAAK,OAAO;AACZ,eAAO;AAAA,MACX;AAAA,MAEA,cAAc,WAAW;AACrB,YAAI,MAAM,UAAU,KAAK,KAAK,KAAK,GAAG;AACtC,aAAK,OAAO;AACZ,eAAO;AAAA,MACX;AAAA;AAAA,MAIA,aAAa,WAAW;AACpB,YAAI,MAAM,WAAW,KAAK,KAAK,KAAK,GAAG,IAAI,WAAW,KAAK,KAAK,KAAK,MAAM,CAAC,IAAI;AAChF,aAAK,OAAO;AACZ,eAAO;AAAA,MACX;AAAA,MAEA,cAAc,WAAW;AACrB,YAAI,MAAM,WAAW,KAAK,KAAK,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,KAAK,MAAM,CAAC,IAAI;AAC/E,aAAK,OAAO;AACZ,eAAO;AAAA,MACX;AAAA,MAEA,WAAW,WAAW;AAClB,YAAI,MAAM,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,IAAI,CAAC;AACtD,aAAK,OAAO;AACZ,eAAO;AAAA,MACX;AAAA,MAEA,YAAY,WAAW;AACnB,YAAI,MAAM,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,IAAI,CAAC;AACtD,aAAK,OAAO;AACZ,eAAO;AAAA,MACX;AAAA,MAEA,YAAY,SAAS,UAAU;AAC3B,YAAI,MAAM,KAAK,KACX,KAAK;AAET,YAAI,IAAI,KAAK,KAAK;AAAG,cAAQ,IAAI;AAAa,YAAI,IAAI;AAAM,iBAAO;AACnE,YAAI,IAAI,KAAK,KAAK;AAAG,gBAAQ,IAAI,QAAS;AAAI,YAAI,IAAI;AAAM,iBAAO;AACnE,YAAI,IAAI,KAAK,KAAK;AAAG,gBAAQ,IAAI,QAAS;AAAI,YAAI,IAAI;AAAM,iBAAO;AACnE,YAAI,IAAI,KAAK,KAAK;AAAG,gBAAQ,IAAI,QAAS;AAAI,YAAI,IAAI;AAAM,iBAAO;AACnE,YAAI,IAAI,KAAK,GAAG;AAAK,gBAAQ,IAAI,OAAS;AAE1C,eAAO,oBAAoB,KAAK,UAAU,IAAI;AAAA,MAClD;AAAA,MAEA,cAAc,WAAW;AACrB,eAAO,KAAK,WAAW,IAAI;AAAA,MAC/B;AAAA,MAEA,aAAa,WAAW;AACpB,YAAI,MAAM,KAAK,WAAW;AAC1B,eAAO,MAAM,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM;AAAA,MAClD;AAAA,MAEA,aAAa,WAAW;AACpB,eAAO,QAAQ,KAAK,WAAW,CAAC;AAAA,MACpC;AAAA,MAEA,YAAY,WAAW;AACnB,YAAI,MAAM,KAAK,WAAW,IAAI,KAAK;AACnC,YAAI,MAAM,KAAK;AACf,aAAK,MAAM;AAEX,YAAI,MAAM,OAAO,2BAA2B,iBAAiB;AAEzD,iBAAO,oBAAoB,KAAK,KAAK,KAAK,GAAG;AAAA,QACjD;AAEA,eAAO,SAAS,KAAK,KAAK,KAAK,GAAG;AAAA,MACtC;AAAA,MAEA,WAAW,WAAW;AAClB,YAAI,MAAM,KAAK,WAAW,IAAI,KAAK,KAC/B,SAAS,KAAK,IAAI,SAAS,KAAK,KAAK,GAAG;AAC5C,aAAK,MAAM;AACX,eAAO;AAAA,MACX;AAAA;AAAA,MAIA,kBAAkB,SAAS,KAAK,UAAU;AACtC,YAAI,KAAK,SAASA,KAAI;AAAO,iBAAO,IAAI,KAAK,KAAK,WAAW,QAAQ,CAAC;AACtE,YAAI,MAAM,cAAc,IAAI;AAC5B,cAAM,OAAO,CAAC;AACd,eAAO,KAAK,MAAM;AAAK,cAAI,KAAK,KAAK,WAAW,QAAQ,CAAC;AACzD,eAAO;AAAA,MACX;AAAA,MACA,mBAAmB,SAAS,KAAK;AAC7B,YAAI,KAAK,SAASA,KAAI;AAAO,iBAAO,IAAI,KAAK,KAAK,YAAY,CAAC;AAC/D,YAAI,MAAM,cAAc,IAAI;AAC5B,cAAM,OAAO,CAAC;AACd,eAAO,KAAK,MAAM;AAAK,cAAI,KAAK,KAAK,YAAY,CAAC;AAClD,eAAO;AAAA,MACX;AAAA,MACA,mBAAmB,SAAS,KAAK;AAC7B,YAAI,KAAK,SAASA,KAAI;AAAO,iBAAO,IAAI,KAAK,KAAK,YAAY,CAAC;AAC/D,YAAI,MAAM,cAAc,IAAI;AAC5B,cAAM,OAAO,CAAC;AACd,eAAO,KAAK,MAAM;AAAK,cAAI,KAAK,KAAK,YAAY,CAAC;AAClD,eAAO;AAAA,MACX;AAAA,MACA,iBAAiB,SAAS,KAAK;AAC3B,YAAI,KAAK,SAASA,KAAI;AAAO,iBAAO,IAAI,KAAK,KAAK,UAAU,CAAC;AAC7D,YAAI,MAAM,cAAc,IAAI;AAC5B,cAAM,OAAO,CAAC;AACd,eAAO,KAAK,MAAM;AAAK,cAAI,KAAK,KAAK,UAAU,CAAC;AAChD,eAAO;AAAA,MACX;AAAA,MACA,kBAAkB,SAAS,KAAK;AAC5B,YAAI,KAAK,SAASA,KAAI;AAAO,iBAAO,IAAI,KAAK,KAAK,WAAW,CAAC;AAC9D,YAAI,MAAM,cAAc,IAAI;AAC5B,cAAM,OAAO,CAAC;AACd,eAAO,KAAK,MAAM;AAAK,cAAI,KAAK,KAAK,WAAW,CAAC;AACjD,eAAO;AAAA,MACX;AAAA,MACA,mBAAmB,SAAS,KAAK;AAC7B,YAAI,KAAK,SAASA,KAAI;AAAO,iBAAO,IAAI,KAAK,KAAK,YAAY,CAAC;AAC/D,YAAI,MAAM,cAAc,IAAI;AAC5B,cAAM,OAAO,CAAC;AACd,eAAO,KAAK,MAAM;AAAK,cAAI,KAAK,KAAK,YAAY,CAAC;AAClD,eAAO;AAAA,MACX;AAAA,MACA,oBAAoB,SAAS,KAAK;AAC9B,YAAI,KAAK,SAASA,KAAI;AAAO,iBAAO,IAAI,KAAK,KAAK,aAAa,CAAC;AAChE,YAAI,MAAM,cAAc,IAAI;AAC5B,cAAM,OAAO,CAAC;AACd,eAAO,KAAK,MAAM;AAAK,cAAI,KAAK,KAAK,aAAa,CAAC;AACnD,eAAO;AAAA,MACX;AAAA,MACA,mBAAmB,SAAS,KAAK;AAC7B,YAAI,KAAK,SAASA,KAAI;AAAO,iBAAO,IAAI,KAAK,KAAK,YAAY,CAAC;AAC/D,YAAI,MAAM,cAAc,IAAI;AAC5B,cAAM,OAAO,CAAC;AACd,eAAO,KAAK,MAAM;AAAK,cAAI,KAAK,KAAK,YAAY,CAAC;AAClD,eAAO;AAAA,MACX;AAAA,MACA,oBAAoB,SAAS,KAAK;AAC9B,YAAI,KAAK,SAASA,KAAI;AAAO,iBAAO,IAAI,KAAK,KAAK,aAAa,CAAC;AAChE,YAAI,MAAM,cAAc,IAAI;AAC5B,cAAM,OAAO,CAAC;AACd,eAAO,KAAK,MAAM;AAAK,cAAI,KAAK,KAAK,aAAa,CAAC;AACnD,eAAO;AAAA,MACX;AAAA,MAEA,MAAM,SAAS,KAAK;AAChB,YAAI,OAAO,MAAM;AACjB,YAAI,SAASA,KAAI;AAAQ,iBAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAM;AAAA,UAAC;AAAA,iBACrD,SAASA,KAAI;AAAO,eAAK,MAAM,KAAK,WAAW,IAAI,KAAK;AAAA,iBACxD,SAASA,KAAI;AAAS,eAAK,OAAO;AAAA,iBAClC,SAASA,KAAI;AAAS,eAAK,OAAO;AAAA;AACtC,gBAAM,IAAI,MAAM,yBAAyB,IAAI;AAAA,MACtD;AAAA;AAAA,MAIA,UAAU,SAAS,KAAK,MAAM;AAC1B,aAAK,YAAa,OAAO,IAAK,IAAI;AAAA,MACtC;AAAA,MAEA,SAAS,SAAS,KAAK;AACnB,YAAI,SAAS,KAAK,UAAU;AAE5B,eAAO,SAAS,KAAK,MAAM;AAAK,oBAAU;AAE1C,YAAI,WAAW,KAAK,QAAQ;AACxB,cAAI,MAAM,IAAI,WAAW,MAAM;AAC/B,cAAI,IAAI,KAAK,GAAG;AAChB,eAAK,MAAM;AACX,eAAK,SAAS;AAAA,QAClB;AAAA,MACJ;AAAA,MAEA,QAAQ,WAAW;AACf,aAAK,SAAS,KAAK;AACnB,aAAK,MAAM;AACX,eAAO,KAAK,IAAI,SAAS,GAAG,KAAK,MAAM;AAAA,MAC3C;AAAA,MAEA,cAAc,SAAS,KAAK;AACxB,aAAK,QAAQ,CAAC;AACd,mBAAW,KAAK,KAAK,KAAK,KAAK,GAAG;AAClC,aAAK,OAAO;AAAA,MAChB;AAAA,MAEA,eAAe,SAAS,KAAK;AACzB,aAAK,QAAQ,CAAC;AACd,mBAAW,KAAK,KAAK,KAAK,KAAK,GAAG;AAClC,aAAK,OAAO;AAAA,MAChB;AAAA,MAEA,cAAc,SAAS,KAAK;AACxB,aAAK,QAAQ,CAAC;AACd,mBAAW,KAAK,KAAK,MAAM,IAAI,KAAK,GAAG;AACvC,mBAAW,KAAK,KAAK,KAAK,MAAM,MAAM,cAAc,GAAG,KAAK,MAAM,CAAC;AACnE,aAAK,OAAO;AAAA,MAChB;AAAA,MAEA,eAAe,SAAS,KAAK;AACzB,aAAK,QAAQ,CAAC;AACd,mBAAW,KAAK,KAAK,MAAM,IAAI,KAAK,GAAG;AACvC,mBAAW,KAAK,KAAK,KAAK,MAAM,MAAM,cAAc,GAAG,KAAK,MAAM,CAAC;AACnE,aAAK,OAAO;AAAA,MAChB;AAAA,MAEA,aAAa,SAAS,KAAK;AACvB,cAAM,CAAC,OAAO;AAEd,YAAI,MAAM,aAAa,MAAM,GAAG;AAC5B,yBAAe,KAAK,IAAI;AACxB;AAAA,QACJ;AAEA,aAAK,QAAQ,CAAC;AAEd,aAAK,IAAI,KAAK,KAAK,IAAc,MAAM,OAAS,MAAM,MAAO,MAAO;AAAI,YAAI,OAAO;AAAM;AACzF,aAAK,IAAI,KAAK,KAAK,KAAM,SAAS,KAAK,OAAS,MAAM,MAAO,MAAO;AAAI,YAAI,OAAO;AAAM;AACzF,aAAK,IAAI,KAAK,KAAK,KAAM,SAAS,KAAK,OAAS,MAAM,MAAO,MAAO;AAAI,YAAI,OAAO;AAAM;AACzF,aAAK,IAAI,KAAK,KAAK,IAAO,QAAQ,IAAK;AAAA,MAC3C;AAAA,MAEA,cAAc,SAAS,KAAK;AACxB,aAAK,YAAY,MAAM,IAAI,CAAC,MAAM,IAAI,IAAI,MAAM,CAAC;AAAA,MACrD;AAAA,MAEA,cAAc,SAAS,KAAK;AACxB,aAAK,YAAY,QAAQ,GAAG,CAAC;AAAA,MACjC;AAAA,MAEA,aAAa,SAAS,KAAK;AACvB,cAAM,OAAO,GAAG;AAChB,aAAK,QAAQ,IAAI,SAAS,CAAC;AAE3B,aAAK;AAEL,YAAI,WAAW,KAAK;AAEpB,aAAK,MAAM,UAAU,KAAK,KAAK,KAAK,KAAK,GAAG;AAC5C,YAAI,MAAM,KAAK,MAAM;AAErB,YAAI,OAAO;AAAM,iCAAuB,UAAU,KAAK,IAAI;AAG3D,aAAK,MAAM,WAAW;AACtB,aAAK,YAAY,GAAG;AACpB,aAAK,OAAO;AAAA,MAChB;AAAA,MAEA,YAAY,SAAS,KAAK;AACtB,aAAK,QAAQ,CAAC;AACd,gBAAQ,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,IAAI,CAAC;AAClD,aAAK,OAAO;AAAA,MAChB;AAAA,MAEA,aAAa,SAAS,KAAK;AACvB,aAAK,QAAQ,CAAC;AACd,gBAAQ,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,IAAI,CAAC;AAClD,aAAK,OAAO;AAAA,MAChB;AAAA,MAEA,YAAY,SAAS,QAAQ;AACzB,YAAI,MAAM,OAAO;AACjB,aAAK,YAAY,GAAG;AACpB,aAAK,QAAQ,GAAG;AAChB,iBAAS,IAAI,GAAG,IAAI,KAAK;AAAK,eAAK,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC;AAAA,MACjE;AAAA,MAEA,iBAAiB,SAAS,IAAI,KAAK;AAC/B,aAAK;AAGL,YAAI,WAAW,KAAK;AACpB,WAAG,KAAK,IAAI;AACZ,YAAI,MAAM,KAAK,MAAM;AAErB,YAAI,OAAO;AAAM,iCAAuB,UAAU,KAAK,IAAI;AAG3D,aAAK,MAAM,WAAW;AACtB,aAAK,YAAY,GAAG;AACpB,aAAK,OAAO;AAAA,MAChB;AAAA,MAEA,cAAc,SAAS,KAAK,IAAI,KAAK;AACjC,aAAK,SAAS,KAAKA,KAAI,KAAK;AAC5B,aAAK,gBAAgB,IAAI,GAAG;AAAA,MAChC;AAAA,MAEA,mBAAqB,SAAS,KAAK,KAAK;AAAE,YAAI,IAAI;AAAQ,eAAK,aAAa,KAAK,mBAAmB,GAAG;AAAA,MAAK;AAAA,MAC5G,oBAAqB,SAAS,KAAK,KAAK;AAAE,YAAI,IAAI;AAAQ,eAAK,aAAa,KAAK,oBAAoB,GAAG;AAAA,MAAI;AAAA,MAC5G,oBAAqB,SAAS,KAAK,KAAK;AAAE,YAAI,IAAI;AAAQ,eAAK,aAAa,KAAK,oBAAoB,GAAG;AAAA,MAAI;AAAA,MAC5G,kBAAqB,SAAS,KAAK,KAAK;AAAE,YAAI,IAAI;AAAQ,eAAK,aAAa,KAAK,kBAAkB,GAAG;AAAA,MAAM;AAAA,MAC5G,mBAAqB,SAAS,KAAK,KAAK;AAAE,YAAI,IAAI;AAAQ,eAAK,aAAa,KAAK,mBAAmB,GAAG;AAAA,MAAK;AAAA,MAC5G,oBAAqB,SAAS,KAAK,KAAK;AAAE,YAAI,IAAI;AAAQ,eAAK,aAAa,KAAK,oBAAoB,GAAG;AAAA,MAAI;AAAA,MAC5G,qBAAqB,SAAS,KAAK,KAAK;AAAE,YAAI,IAAI;AAAQ,eAAK,aAAa,KAAK,qBAAqB,GAAG;AAAA,MAAG;AAAA,MAC5G,oBAAqB,SAAS,KAAK,KAAK;AAAE,YAAI,IAAI;AAAQ,eAAK,aAAa,KAAK,oBAAoB,GAAG;AAAA,MAAI;AAAA,MAC5G,qBAAqB,SAAS,KAAK,KAAK;AAAE,YAAI,IAAI;AAAQ,eAAK,aAAa,KAAK,qBAAqB,GAAG;AAAA,MAAG;AAAA,MAE5G,iBAAiB,SAAS,KAAK,QAAQ;AACnC,aAAK,SAAS,KAAKA,KAAI,KAAK;AAC5B,aAAK,WAAW,MAAM;AAAA,MAC1B;AAAA,MACA,mBAAmB,SAAS,KAAK,KAAK;AAClC,aAAK,SAAS,KAAKA,KAAI,OAAO;AAC9B,aAAK,aAAa,GAAG;AAAA,MACzB;AAAA,MACA,oBAAoB,SAAS,KAAK,KAAK;AACnC,aAAK,SAAS,KAAKA,KAAI,OAAO;AAC9B,aAAK,cAAc,GAAG;AAAA,MAC1B;AAAA,MACA,mBAAmB,SAAS,KAAK,KAAK;AAClC,aAAK,SAAS,KAAKA,KAAI,OAAO;AAC9B,aAAK,aAAa,GAAG;AAAA,MACzB;AAAA,MACA,oBAAoB,SAAS,KAAK,KAAK;AACnC,aAAK,SAAS,KAAKA,KAAI,OAAO;AAC9B,aAAK,cAAc,GAAG;AAAA,MAC1B;AAAA,MACA,kBAAkB,SAAS,KAAK,KAAK;AACjC,aAAK,SAAS,KAAKA,KAAI,MAAM;AAC7B,aAAK,YAAY,GAAG;AAAA,MACxB;AAAA,MACA,mBAAmB,SAAS,KAAK,KAAK;AAClC,aAAK,SAAS,KAAKA,KAAI,MAAM;AAC7B,aAAK,aAAa,GAAG;AAAA,MACzB;AAAA,MACA,kBAAkB,SAAS,KAAK,KAAK;AACjC,aAAK,SAAS,KAAKA,KAAI,KAAK;AAC5B,aAAK,YAAY,GAAG;AAAA,MACxB;AAAA,MACA,iBAAiB,SAAS,KAAK,KAAK;AAChC,aAAK,SAAS,KAAKA,KAAI,OAAO;AAC9B,aAAK,WAAW,GAAG;AAAA,MACvB;AAAA,MACA,kBAAkB,SAAS,KAAK,KAAK;AACjC,aAAK,SAAS,KAAKA,KAAI,OAAO;AAC9B,aAAK,YAAY,GAAG;AAAA,MACxB;AAAA,MACA,mBAAmB,SAAS,KAAK,KAAK;AAClC,aAAK,iBAAiB,KAAK,QAAQ,GAAG,CAAC;AAAA,MAC3C;AAAA,IACJ;AAEA,aAAS,oBAAoB,GAAG,GAAG,GAAG;AAClC,UAAI,MAAM,EAAE,KACR,GAAG;AAEP,UAAI,IAAI,EAAE,KAAK;AAAG,WAAM,IAAI,QAAS;AAAI,UAAI,IAAI;AAAM,eAAO,MAAM,GAAG,GAAG,CAAC;AAC3E,UAAI,IAAI,EAAE,KAAK;AAAG,YAAM,IAAI,QAAS;AAAI,UAAI,IAAI;AAAM,eAAO,MAAM,GAAG,GAAG,CAAC;AAC3E,UAAI,IAAI,EAAE,KAAK;AAAG,YAAM,IAAI,QAAS;AAAI,UAAI,IAAI;AAAM,eAAO,MAAM,GAAG,GAAG,CAAC;AAC3E,UAAI,IAAI,EAAE,KAAK;AAAG,YAAM,IAAI,QAAS;AAAI,UAAI,IAAI;AAAM,eAAO,MAAM,GAAG,GAAG,CAAC;AAC3E,UAAI,IAAI,EAAE,KAAK;AAAG,YAAM,IAAI,QAAS;AAAI,UAAI,IAAI;AAAM,eAAO,MAAM,GAAG,GAAG,CAAC;AAC3E,UAAI,IAAI,EAAE,KAAK;AAAG,YAAM,IAAI,MAAS;AAAI,UAAI,IAAI;AAAM,eAAO,MAAM,GAAG,GAAG,CAAC;AAE3E,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC5D;AAEA,aAAS,cAAc,KAAK;AACxB,aAAO,IAAI,SAASA,KAAI,QACpB,IAAI,WAAW,IAAI,IAAI,MAAM,IAAI,MAAM;AAAA,IAC/C;AAEA,aAAS,MAAM,KAAK,MAAM,UAAU;AAChC,UAAI,UAAU;AACV,eAAO,OAAO,cAAe,QAAQ;AAAA,MACzC;AAEA,cAAS,SAAS,KAAK,cAAgB,QAAQ;AAAA,IACnD;AAEA,aAAS,eAAe,KAAK,KAAK;AAC9B,UAAI,KAAK;AAET,UAAI,OAAO,GAAG;AACV,cAAQ,MAAM,aAAe;AAC7B,eAAQ,MAAM,aAAe;AAAA,MACjC,OAAO;AACH,cAAO,EAAE,CAAC,MAAM;AAChB,eAAO,EAAE,CAAC,MAAM;AAEhB,YAAI,MAAM,YAAY;AAClB,gBAAO,MAAM,IAAK;AAAA,QACtB,OAAO;AACH,gBAAM;AACN,iBAAQ,OAAO,IAAK;AAAA,QACxB;AAAA,MACJ;AAEA,UAAI,OAAO,uBAAuB,MAAM,sBAAsB;AAC1D,cAAM,IAAI,MAAM,wCAAyC;AAAA,MAC7D;AAEA,UAAI,QAAQ,EAAE;AAEd,wBAAkB,KAAK,MAAM,GAAG;AAChC,yBAAmB,MAAM,GAAG;AAAA,IAChC;AAEA,aAAS,kBAAkB,KAAK,MAAM,KAAK;AACvC,UAAI,IAAI,IAAI,KAAK,IAAI,MAAM,MAAO;AAAM,eAAS;AACjD,UAAI,IAAI,IAAI,KAAK,IAAI,MAAM,MAAO;AAAM,eAAS;AACjD,UAAI,IAAI,IAAI,KAAK,IAAI,MAAM,MAAO;AAAM,eAAS;AACjD,UAAI,IAAI,IAAI,KAAK,IAAI,MAAM,MAAO;AAAM,eAAS;AACjD,UAAI,IAAI,IAAI,GAAG,IAAM,MAAM;AAAA,IAC/B;AAEA,aAAS,mBAAmB,MAAM,KAAK;AACnC,UAAI,OAAO,OAAO,MAAS;AAE3B,UAAI,IAAI,IAAI,KAAK,KAAK,QAAgB,UAAU,KAAK,MAAO;AAAI,UAAI,CAAC;AAAM;AAC3E,UAAI,IAAI,IAAI,KAAK,IAAK,OAAO,QAAS,UAAU,KAAK,MAAO;AAAI,UAAI,CAAC;AAAM;AAC3E,UAAI,IAAI,IAAI,KAAK,IAAK,OAAO,QAAS,UAAU,KAAK,MAAO;AAAI,UAAI,CAAC;AAAM;AAC3E,UAAI,IAAI,IAAI,KAAK,IAAK,OAAO,QAAS,UAAU,KAAK,MAAO;AAAI,UAAI,CAAC;AAAM;AAC3E,UAAI,IAAI,IAAI,KAAK,IAAK,OAAO,QAAS,UAAU,KAAK,MAAO;AAAI,UAAI,CAAC;AAAM;AAC3E,UAAI,IAAI,IAAI,KAAK,IAAK,OAAO;AAAA,IACjC;AAEA,aAAS,uBAAuB,UAAU,KAAK,KAAK;AAChD,UAAI,WACA,OAAO,QAAS,IAChB,OAAO,UAAW,IAClB,OAAO,YAAY,IAAI,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,EAAE;AAGpE,UAAI,QAAQ,QAAQ;AACpB,eAAS,IAAI,IAAI,MAAM,GAAG,KAAK,UAAU;AAAK,YAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,CAAC;AAAA,IACnF;AAEA,aAAS,kBAAkB,KAAK,KAAO;AAAE,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,YAAI,YAAY,IAAI,CAAC,CAAC;AAAA,IAAK;AACzG,aAAS,mBAAmB,KAAK,KAAM;AAAE,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,YAAI,aAAa,IAAI,CAAC,CAAC;AAAA,IAAI;AACzG,aAAS,iBAAiB,KAAK,KAAQ;AAAE,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,YAAI,WAAW,IAAI,CAAC,CAAC;AAAA,IAAM;AACzG,aAAS,kBAAkB,KAAK,KAAO;AAAE,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,YAAI,YAAY,IAAI,CAAC,CAAC;AAAA,IAAK;AACzG,aAAS,mBAAmB,KAAK,KAAM;AAAE,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,YAAI,aAAa,IAAI,CAAC,CAAC;AAAA,IAAI;AACzG,aAAS,mBAAmB,KAAK,KAAM;AAAE,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,YAAI,aAAa,IAAI,CAAC,CAAC;AAAA,IAAI;AACzG,aAAS,oBAAoB,KAAK,KAAK;AAAE,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,YAAI,cAAc,IAAI,CAAC,CAAC;AAAA,IAAG;AACzG,aAAS,mBAAmB,KAAK,KAAM;AAAE,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,YAAI,aAAa,IAAI,CAAC,CAAC;AAAA,IAAI;AACzG,aAAS,oBAAoB,KAAK,KAAK;AAAE,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,YAAI,cAAc,IAAI,CAAC,CAAC;AAAA,IAAG;AAIzG,aAAS,WAAW,KAAK,KAAK;AAC1B,cAAS,IAAI,GAAG,IACX,IAAI,MAAM,CAAC,KAAK,IAChB,IAAI,MAAM,CAAC,KAAK,MAChB,IAAI,MAAM,CAAC,IAAI;AAAA,IACxB;AAEA,aAAS,WAAW,KAAK,KAAK,KAAK;AAC/B,UAAI,GAAG,IAAI;AACX,UAAI,MAAM,CAAC,IAAK,QAAQ;AACxB,UAAI,MAAM,CAAC,IAAK,QAAQ;AACxB,UAAI,MAAM,CAAC,IAAK,QAAQ;AAAA,IAC5B;AAEA,aAAS,UAAU,KAAK,KAAK;AACzB,cAAS,IAAI,GAAG,IACX,IAAI,MAAM,CAAC,KAAK,IAChB,IAAI,MAAM,CAAC,KAAK,OAChB,IAAI,MAAM,CAAC,KAAK;AAAA,IACzB;AAEA,aAAS,SAAS,KAAK,KAAK,KAAK;AAC7B,UAAI,MAAM;AACV,UAAI,IAAI;AAER,aAAO,IAAI,KAAK;AACZ,YAAI,KAAK,IAAI,CAAC;AACd,YAAI,IAAI;AACR,YAAI,mBACA,KAAK,MAAO,IACZ,KAAK,MAAO,IACZ,KAAK,MAAO,IAAI;AAEpB,YAAI,IAAI,mBAAmB;AAAK;AAEhC,YAAI,IAAI,IAAI;AAEZ,YAAI,qBAAqB,GAAG;AACxB,cAAI,KAAK,KAAM;AACX,gBAAI;AAAA,UACR;AAAA,QACJ,WAAW,qBAAqB,GAAG;AAC/B,eAAK,IAAI,IAAI,CAAC;AACd,eAAK,KAAK,SAAU,KAAM;AACtB,iBAAK,KAAK,OAAS,IAAO,KAAK;AAC/B,gBAAI,KAAK,KAAM;AACX,kBAAI;AAAA,YACR;AAAA,UACJ;AAAA,QACJ,WAAW,qBAAqB,GAAG;AAC/B,eAAK,IAAI,IAAI,CAAC;AACd,eAAK,IAAI,IAAI,CAAC;AACd,eAAK,KAAK,SAAU,QAAS,KAAK,SAAU,KAAM;AAC9C,iBAAK,KAAK,OAAQ,MAAO,KAAK,OAAS,IAAO,KAAK;AACnD,gBAAI,KAAK,QAAU,KAAK,SAAU,KAAK,OAAS;AAC5C,kBAAI;AAAA,YACR;AAAA,UACJ;AAAA,QACJ,WAAW,qBAAqB,GAAG;AAC/B,eAAK,IAAI,IAAI,CAAC;AACd,eAAK,IAAI,IAAI,CAAC;AACd,eAAK,IAAI,IAAI,CAAC;AACd,eAAK,KAAK,SAAU,QAAS,KAAK,SAAU,QAAS,KAAK,SAAU,KAAM;AACtE,iBAAK,KAAK,OAAQ,MAAQ,KAAK,OAAS,MAAO,KAAK,OAAS,IAAO,KAAK;AACzE,gBAAI,KAAK,SAAU,KAAK,SAAU;AAC9B,kBAAI;AAAA,YACR;AAAA,UACJ;AAAA,QACJ;AAEA,YAAI,MAAM,MAAM;AACZ,cAAI;AACJ,6BAAmB;AAAA,QAEvB,WAAW,IAAI,OAAQ;AACnB,eAAK;AACL,iBAAO,OAAO,aAAa,MAAM,KAAK,OAAQ,KAAM;AACpD,cAAI,QAAS,IAAI;AAAA,QACrB;AAEA,eAAO,OAAO,aAAa,CAAC;AAC5B,aAAK;AAAA,MACT;AAEA,aAAO;AAAA,IACX;AAEA,aAAS,oBAAoB,KAAK,KAAK,KAAK;AACxC,aAAO,gBAAgB,OAAO,IAAI,SAAS,KAAK,GAAG,CAAC;AAAA,IACxD;AAEA,aAAS,UAAU,KAAK,KAAK,KAAK;AAC9B,eAAS,IAAI,GAAG,GAAG,MAAM,IAAI,IAAI,QAAQ,KAAK;AAC1C,YAAI,IAAI,WAAW,CAAC;AAEpB,YAAI,IAAI,SAAU,IAAI,OAAQ;AAC1B,cAAI,MAAM;AACN,gBAAI,IAAI,OAAQ;AACZ,kBAAI,KAAK,IAAI;AACb,kBAAI,KAAK,IAAI;AACb,kBAAI,KAAK,IAAI;AACb,qBAAO;AACP;AAAA,YACJ,OAAO;AACH,kBAAI,OAAO,SAAU,KAAK,IAAI,QAAS;AACvC,qBAAO;AAAA,YACX;AAAA,UACJ,OAAO;AACH,gBAAI,IAAI,SAAW,IAAI,MAAM,IAAI,QAAS;AACtC,kBAAI,KAAK,IAAI;AACb,kBAAI,KAAK,IAAI;AACb,kBAAI,KAAK,IAAI;AAAA,YACjB,OAAO;AACH,qBAAO;AAAA,YACX;AACA;AAAA,UACJ;AAAA,QACJ,WAAW,MAAM;AACb,cAAI,KAAK,IAAI;AACb,cAAI,KAAK,IAAI;AACb,cAAI,KAAK,IAAI;AACb,iBAAO;AAAA,QACX;AAEA,YAAI,IAAI,KAAM;AACV,cAAI,KAAK,IAAI;AAAA,QACjB,OAAO;AACH,cAAI,IAAI,MAAO;AACX,gBAAI,KAAK,IAAI,KAAK,IAAM;AAAA,UAC5B,OAAO;AACH,gBAAI,IAAI,OAAS;AACb,kBAAI,KAAK,IAAI,KAAK,KAAM;AAAA,YAC5B,OAAO;AACH,kBAAI,KAAK,IAAI,KAAK,KAAO;AACzB,kBAAI,KAAK,IAAI,KAAK,KAAM,KAAO;AAAA,YACnC;AACA,gBAAI,KAAK,IAAI,KAAK,IAAM,KAAO;AAAA,UACnC;AACA,cAAI,KAAK,IAAI,IAAI,KAAO;AAAA,QAC5B;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA;AAAA;;;ACjoBA,oBAAuB;;;AEAhB,IAAM,UAAU;AAChB,IAAM,WAAW;AACjB,IAAM,kBAAkB,IAAI,IAAI,WAAW;AAG3C,SAAS,IAAI,MAAM,GAAG,MAAM,GAAG,GAAG;AACrC,MAAI,GAAG,MAAM,IAAI;AACjB,MAAI,OAAO,EAAE,CAAC;AACd,MAAI,OAAO,EAAE,CAAC;AACd,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAK,OAAO,SAAW,OAAO,CAAC,MAAO;AAClC,QAAI;AACJ,WAAO,EAAE,EAAE,MAAM;AAAA,EACrB,OAAO;AACH,QAAI;AACJ,WAAO,EAAE,EAAE,MAAM;AAAA,EACrB;AACA,MAAI,SAAS;AACb,MAAI,SAAS,QAAQ,SAAS,MAAM;AAChC,QAAK,OAAO,SAAW,OAAO,CAAC,MAAO;AAClC,aAAO,OAAO;AACd,WAAK,KAAK,OAAO;AACjB,aAAO,EAAE,EAAE,MAAM;AAAA,IACrB,OAAO;AACH,aAAO,OAAO;AACd,WAAK,KAAK,OAAO;AACjB,aAAO,EAAE,EAAE,MAAM;AAAA,IACrB;AACA,QAAI;AACJ,QAAI,OAAO,GAAG;AACV,QAAE,QAAQ,IAAI;AAAA,IAClB;AACA,WAAO,SAAS,QAAQ,SAAS,MAAM;AACnC,UAAK,OAAO,SAAW,OAAO,CAAC,MAAO;AAClC,eAAO,IAAI;AACX,gBAAQ,OAAO;AACf,aAAK,KAAK,OAAO,UAAU,OAAO;AAClC,eAAO,EAAE,EAAE,MAAM;AAAA,MACrB,OAAO;AACH,eAAO,IAAI;AACX,gBAAQ,OAAO;AACf,aAAK,KAAK,OAAO,UAAU,OAAO;AAClC,eAAO,EAAE,EAAE,MAAM;AAAA,MACrB;AACA,UAAI;AACJ,UAAI,OAAO,GAAG;AACV,UAAE,QAAQ,IAAI;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;AACA,SAAO,SAAS,MAAM;AAClB,WAAO,IAAI;AACX,YAAQ,OAAO;AACf,SAAK,KAAK,OAAO,UAAU,OAAO;AAClC,WAAO,EAAE,EAAE,MAAM;AACjB,QAAI;AACJ,QAAI,OAAO,GAAG;AACV,QAAE,QAAQ,IAAI;AAAA,IAClB;AAAA,EACJ;AACA,SAAO,SAAS,MAAM;AAClB,WAAO,IAAI;AACX,YAAQ,OAAO;AACf,SAAK,KAAK,OAAO,UAAU,OAAO;AAClC,WAAO,EAAE,EAAE,MAAM;AACjB,QAAI;AACJ,QAAI,OAAO,GAAG;AACV,QAAE,QAAQ,IAAI;AAAA,IAClB;AAAA,EACJ;AACA,MAAI,MAAM,KAAK,WAAW,GAAG;AACzB,MAAE,QAAQ,IAAI;AAAA,EAClB;AACA,SAAO;AACX;AAsDO,SAAS,SAAS,MAAM,GAAG;AAC9B,MAAI,IAAI,EAAE,CAAC;AACX,WAAS,IAAI,GAAG,IAAI,MAAM;AAAK,SAAK,EAAE,CAAC;AACvC,SAAO;AACX;AAEO,SAAS,IAAI,GAAG;AACnB,SAAO,IAAI,aAAa,CAAC;AAC7B;;;ACvIA,IAAM,gBAAgB,IAAI,KAAK,WAAW;AAC1C,IAAM,gBAAgB,IAAI,KAAK,WAAW;AAC1C,IAAM,gBAAgB,IAAI,KAAK,WAAW,UAAU;AAEpD,IAAM,IAAI,IAAI,CAAC;AACf,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,EAAE;AACjB,IAAM,IAAI,IAAI,EAAE;AAChB,IAAM,IAAI,IAAI,CAAC;AAEf,SAAS,cAAc,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQ;AACnD,MAAI,SAAS,SAAS,SAAS;AAC/B,MAAI,OAAO,GAAG,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAIC;AAE9D,QAAM,MAAM,KAAK;AACjB,QAAM,MAAM,KAAK;AACjB,QAAM,MAAM,KAAK;AACjB,QAAM,MAAM,KAAK;AAEjB,OAAK,MAAM;AACX,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,MAAM;AACZ,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,MAAM;AACZ,OAAK,MAAM,OAAO,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM;AACrD,OAAK,MAAM;AACX,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,MAAM;AACZ,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,MAAM;AACZ,OAAK,MAAM,OAAO,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM;AACrD,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,IAAE,CAAC,IAAI,MAAM,KAAK,UAAU,QAAQ;AACpC,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,OAAK,MAAM,KAAK,UAAU,KAAK;AAC/B,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,IAAE,CAAC,IAAI,MAAM,KAAK,UAAU,QAAQ;AACpC,EAAAA,MAAK,KAAK;AACV,UAAQA,MAAK;AACb,IAAE,CAAC,IAAI,MAAMA,MAAK,UAAU,KAAK;AACjC,IAAE,CAAC,IAAIA;AAEP,MAAI,MAAM,SAAS,GAAG,CAAC;AACvB,MAAI,WAAW,eAAe;AAC9B,MAAI,OAAO,YAAY,CAAC,OAAO,UAAU;AACrC,WAAO;AAAA,EACX;AAEA,UAAQ,KAAK;AACb,YAAU,MAAM,MAAM,UAAU,QAAQ;AACxC,UAAQ,KAAK;AACb,YAAU,MAAM,MAAM,UAAU,QAAQ;AACxC,UAAQ,KAAK;AACb,YAAU,MAAM,MAAM,UAAU,QAAQ;AACxC,UAAQ,KAAK;AACb,YAAU,MAAM,MAAM,UAAU,QAAQ;AAExC,MAAI,YAAY,KAAK,YAAY,KAAK,YAAY,KAAK,YAAY,GAAG;AAClE,WAAO;AAAA,EACX;AAEA,aAAW,eAAe,SAAS,iBAAiB,KAAK,IAAI,GAAG;AAChE,SAAQ,MAAM,UAAU,MAAM,WAAY,MAAM,UAAU,MAAM;AAChE,MAAI,OAAO,YAAY,CAAC,OAAO;AAAU,WAAO;AAEhD,OAAK,UAAU;AACf,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,UAAU;AAChB,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,MAAM;AACZ,OAAK,MAAM,OAAO,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM;AACrD,OAAK,UAAU;AACf,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,UAAU;AAChB,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,MAAM;AACZ,OAAK,MAAM,OAAO,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM;AACrD,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,IAAE,CAAC,IAAI,MAAM,KAAK,UAAU,QAAQ;AACpC,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,OAAK,MAAM,KAAK,UAAU,KAAK;AAC/B,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,IAAE,CAAC,IAAI,MAAM,KAAK,UAAU,QAAQ;AACpC,EAAAA,MAAK,KAAK;AACV,UAAQA,MAAK;AACb,IAAE,CAAC,IAAI,MAAMA,MAAK,UAAU,KAAK;AACjC,IAAE,CAAC,IAAIA;AACP,QAAM,QAAQ,IAAI,GAAG,GAAG,GAAG,GAAG,EAAE;AAEhC,OAAK,MAAM;AACX,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,MAAM;AACZ,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,UAAU;AAChB,OAAK,MAAM,OAAO,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM;AACrD,OAAK,MAAM;AACX,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,MAAM;AACZ,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,UAAU;AAChB,OAAK,MAAM,OAAO,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM;AACrD,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,IAAE,CAAC,IAAI,MAAM,KAAK,UAAU,QAAQ;AACpC,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,OAAK,MAAM,KAAK,UAAU,KAAK;AAC/B,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,IAAE,CAAC,IAAI,MAAM,KAAK,UAAU,QAAQ;AACpC,EAAAA,MAAK,KAAK;AACV,UAAQA,MAAK;AACb,IAAE,CAAC,IAAI,MAAMA,MAAK,UAAU,KAAK;AACjC,IAAE,CAAC,IAAIA;AACP,QAAM,QAAQ,IAAI,OAAO,IAAI,GAAG,GAAG,EAAE;AAErC,OAAK,UAAU;AACf,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,UAAU;AAChB,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,UAAU;AAChB,OAAK,MAAM,OAAO,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM;AACrD,OAAK,UAAU;AACf,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,UAAU;AAChB,MAAI,WAAW;AACf,QAAM,KAAK,IAAI;AACf,QAAM,UAAU;AAChB,OAAK,MAAM,OAAO,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM;AACrD,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,IAAE,CAAC,IAAI,MAAM,KAAK,UAAU,QAAQ;AACpC,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,OAAK,MAAM,KAAK,UAAU,KAAK;AAC/B,OAAK,KAAK;AACV,UAAQ,KAAK;AACb,IAAE,CAAC,IAAI,MAAM,KAAK,UAAU,QAAQ;AACpC,EAAAA,MAAK,KAAK;AACV,UAAQA,MAAK;AACb,IAAE,CAAC,IAAI,MAAMA,MAAK,UAAU,KAAK;AACjC,IAAE,CAAC,IAAIA;AACP,QAAM,OAAO,IAAI,OAAO,IAAI,GAAG,GAAG,CAAC;AAEnC,SAAO,EAAE,OAAO,CAAC;AACrB;AAEO,SAAS,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAC7C,QAAM,WAAW,KAAK,OAAO,KAAK;AAClC,QAAM,YAAY,KAAK,OAAO,KAAK;AACnC,QAAM,MAAM,UAAU;AAEtB,QAAM,SAAS,KAAK,IAAI,UAAU,QAAQ;AAC1C,MAAI,KAAK,IAAI,GAAG,KAAK,eAAe;AAAQ,WAAO;AAEnD,SAAO,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM;AACxD;;;ACjLA,IAAM,gBAAgB,IAAI,KAAK,WAAW;AAC1C,IAAM,gBAAgB,IAAI,KAAK,WAAW;AAC1C,IAAM,gBAAgB,KAAK,MAAM,WAAW,UAAU;AAEtD,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,OAAO,IAAI,CAAC;AAClB,IAAM,OAAO,IAAI,CAAC;AAClB,IAAM,OAAO,IAAI,CAAC;AAClB,IAAM,OAAO,IAAI,CAAC;AAClB,IAAM,OAAO,IAAI,CAAC;AAClB,IAAM,OAAO,IAAI,CAAC;AAClB,IAAM,MAAM,IAAI,CAAC;AACjB,IAAM,MAAM,IAAI,CAAC;AACjB,IAAM,MAAM,IAAI,CAAC;AACjB,IAAMC,KAAI,IAAI,CAAC;AAEf,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,MAAM,IAAI,CAAC;AACjB,IAAM,MAAM,IAAI,CAAC;AACjB,IAAM,MAAM,IAAI,EAAE;AAElB,IAAI,MAAM,IAAI,GAAG;AACjB,IAAI,OAAO,IAAI,GAAG;;;ACxBlB,IAAM,gBAAgB,KAAK,KAAK,WAAW;AAC3C,IAAM,gBAAgB,IAAI,KAAK,WAAW;AAC1C,IAAM,gBAAgB,KAAK,MAAM,WAAW,UAAU;AAEtD,IAAMC,MAAK,IAAI,CAAC;AAChB,IAAMC,MAAK,IAAI,CAAC;AAChB,IAAMC,MAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAMC,KAAI,IAAI,CAAC;AACf,IAAM,IAAI,IAAI,CAAC;AACf,IAAM,QAAQ,IAAI,CAAC;AACnB,IAAM,QAAQ,IAAI,CAAC;AACnB,IAAM,QAAQ,IAAI,CAAC;AACnB,IAAM,QAAQ,IAAI,CAAC;AACnB,IAAM,QAAQ,IAAI,CAAC;AACnB,IAAM,QAAQ,IAAI,CAAC;AACnB,IAAMC,OAAM,IAAI,CAAC;AACjB,IAAMC,OAAM,IAAI,CAAC;AACjB,IAAMC,OAAM,IAAI,CAAC;AACjB,IAAM,OAAO,IAAI,CAAC;AAClB,IAAM,OAAO,IAAI,CAAC;AAClB,IAAM,OAAO,IAAI,CAAC;AAElB,IAAMC,MAAK,IAAI,CAAC;AAChB,IAAMC,OAAM,IAAI,EAAE;AAClB,IAAM,OAAO,IAAI,EAAE;AACnB,IAAM,OAAO,IAAI,EAAE;AACnB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,OAAO,IAAI,EAAE;AACnB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,MAAM,IAAI,EAAE;AAElB,IAAIC,OAAM,IAAI,IAAI;AAClB,IAAIC,QAAO,IAAI,IAAI;;;ACnCnB,IAAM,gBAAgB,KAAK,MAAM,WAAW;AAC5C,IAAM,gBAAgB,IAAI,KAAK,WAAW;AAC1C,IAAM,gBAAgB,KAAK,OAAO,WAAW,UAAU;AAEvD,IAAMC,MAAK,IAAI,CAAC;AAChB,IAAMC,MAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAChB,IAAM,KAAK,IAAI,CAAC;AAEhB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,MAAM,IAAI,EAAE;AAElB,IAAM,OAAO,IAAI,IAAI;AACrB,IAAM,OAAO,IAAI,IAAI;AACrB,IAAM,OAAO,IAAI,IAAI;AACrB,IAAM,OAAO,IAAI,IAAI;AACrB,IAAM,OAAO,IAAI,IAAI;AACrB,IAAM,QAAQ,IAAI,IAAI;AACtB,IAAM,QAAQ,IAAI,IAAI;AACtB,IAAM,SAAS,IAAI,IAAI;AACvB,IAAM,QAAQ,IAAI,IAAI;AAEtB,IAAMC,MAAK,IAAI,CAAC;AAChB,IAAMC,OAAM,IAAI,CAAC;AACjB,IAAM,MAAM,IAAI,CAAC;AACjB,IAAMC,OAAM,IAAI,EAAE;AAClB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAMC,OAAM,IAAI,EAAE;AAClB,IAAM,OAAO,IAAI,EAAE;AACnB,IAAM,MAAM,IAAI,EAAE;AAClB,IAAM,OAAO,IAAI,GAAG;AACpB,IAAM,QAAQ,IAAI,GAAG;AACrB,IAAM,QAAQ,IAAI,GAAG;AACrB,IAAM,QAAQ,IAAI,GAAG;AACrB,IAAM,OAAO,IAAI,GAAG;AAgVpB,IAAM,OAAO,IAAI,EAAE;AACnB,IAAM,OAAO,IAAI,EAAE;AACnB,IAAM,OAAO,IAAI,EAAE;AACnB,IAAMC,OAAM,IAAI,IAAI;;;ACnYpB,SAAS,eAAe,GAAG,SAAS;AAChC,MAAI;AACJ,MAAI;AACJ,MAAI,IAAI;AACR,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAIC;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,MAAI,IAAI,EAAE,CAAC;AACX,MAAI,IAAI,EAAE,CAAC;AAEX,MAAI,cAAc,QAAQ;AAC1B,OAAK,IAAI,GAAG,IAAI,aAAa,KAAK;AAC9B,SAAK;AACL,QAAI,UAAU,QAAQ,CAAC;AACvB,QAAI,aAAa,QAAQ,SAAS;AAElC,eAAW,QAAQ,CAAC;AACpB,QAAI,SAAS,CAAC,MAAM,QAAQ,UAAU,EAAE,CAAC,KACrC,SAAS,CAAC,MAAM,QAAQ,UAAU,EAAE,CAAC,GAAG;AACxC,YAAM,IAAI,MAAM,uDAAuD;AAAA,IAC3E;AAEA,SAAK,SAAS,CAAC,IAAI;AACnB,SAAK,SAAS,CAAC,IAAI;AAEnB,SAAK,IAAI,KAAK,YAAY,MAAM;AAC5B,cAAQ,QAAQ,KAAK,CAAC;AAEtB,MAAAA,MAAK,MAAM,CAAC,IAAI;AAChB,WAAK,MAAM,CAAC,IAAI;AAEhB,UAAI,OAAO,KAAK,OAAO,GAAG;AACtB,YAAKA,OAAM,KAAK,MAAM,KAAO,MAAM,KAAKA,OAAM,GAAI;AAAE,iBAAO;AAAA,QAAE;AAAA,MACjE,WAAY,MAAM,KAAK,KAAK,KAAO,KAAK,KAAK,MAAM,GAAI;AACnD,YAAI,SAAS,IAAIA,KAAI,IAAI,IAAI,GAAG,CAAC;AACjC,YAAI,MAAM,GAAG;AAAE,iBAAO;AAAA,QAAE;AACxB,YAAK,IAAI,KAAK,KAAK,KAAK,MAAM,KAAO,IAAI,KAAK,MAAM,KAAK,KAAK,GAAI;AAAE;AAAA,QAAK;AAAA,MAC7E;AACA,iBAAW;AACX,WAAK;AACL,WAAKA;AAAA,IACT;AAAA,EACJ;AAEA,MAAI,IAAI,MAAM,GAAG;AAAE,WAAO;AAAA,EAAM;AAChC,SAAO;AACX;;;ACUO,IAAM,cAAc;AAUpB,IAAM,UAAiC;EAC5C,aAAa,cAAc;EAC3B,aAAa,cAAc;EAC3B,SAAS,OAAO,IAAI,KAAK;EACzB,MAAM,cAAc;EACpB,QAAQ,cAAc;EACtB,YAAY,cAAc;EAC1B,YAAY,cAAc;EAC1B,QAAQ;EACR,QAAQ;EACR,OAAO,cAAc;EACrB,aAAa,cAAc;EAC3B,aAAa,cAAc;EAC3B,eAAe,cAAc;EAC7B,SAAS;EACT,OAAO,cAAc;AACvB;AA+CO,SAAS,QAId,MACA,YACA,UAAoC,CAAC,GACtB;AACf,QAAM,OAAY,EAAE,MAAM,UAAU;AACpC,MAAI,QAAQ,OAAO,KAAK,QAAQ,IAAI;AAClC,SAAK,KAAK,QAAQ;EACpB;AACA,MAAI,QAAQ,MAAM;AAChB,SAAK,OAAO,QAAQ;EACtB;AACA,OAAK,aAAa,cAAc,CAAC;AACjC,OAAK,WAAW;AAChB,SAAO;AACT;AA6DO,SAAS,MACd,aACA,YACA,UAAoC,CAAC,GAClB;AACnB,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,yBAAyB;EAC3C;AACA,MAAI,CAAC,MAAM,QAAQ,WAAW,GAAG;AAC/B,UAAM,IAAI,MAAM,8BAA8B;EAChD;AACA,MAAI,YAAY,SAAS,GAAG;AAC1B,UAAM,IAAI,MAAM,6CAA6C;EAC/D;AACA,MAAI,CAAC,SAAS,YAAY,CAAC,CAAC,KAAK,CAAC,SAAS,YAAY,CAAC,CAAC,GAAG;AAC1D,UAAM,IAAI,MAAM,kCAAkC;EACpD;AAEA,QAAM,OAAc;IAClB,MAAM;IACN;EACF;AACA,SAAO,QAAQ,MAAM,YAAY,OAAO;AAC1C;AAmhBO,SAAS,SAAS,KAAmB;AAC1C,SAAO,CAAC,MAAM,GAAG,KAAK,QAAQ,QAAQ,CAAC,MAAM,QAAQ,GAAG;AAC1D;;;AC1uBA,SAAS,SAAS,OAAoD;AACpE,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,mBAAmB;EACrC;AAEA,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,QACE,MAAM,SAAS,aACf,MAAM,aAAa,QACnB,MAAM,SAAS,SAAS,SACxB;AACA,aAAO,CAAC,GAAG,MAAM,SAAS,WAAW;IACvC;AACA,QAAI,MAAM,SAAS,SAAS;AAC1B,aAAO,CAAC,GAAG,MAAM,WAAW;IAC9B;EACF;AACA,MACE,MAAM,QAAQ,KAAK,KACnB,MAAM,UAAU,KAChB,CAAC,MAAM,QAAQ,MAAM,CAAC,CAAC,KACvB,CAAC,MAAM,QAAQ,MAAM,CAAC,CAAC,GACvB;AACA,WAAO,CAAC,GAAG,KAAK;EAClB;AAEA,QAAM,IAAI,MAAM,oDAAoD;AACtE;AA6LA,SAAS,QAA4B,SAA4B;AAC/D,MAAI,QAAQ,SAAS,WAAW;AAC9B,WAAO,QAAQ;EACjB;AACA,SAAO;AACT;;;AChNA,SAAS,sBAIPC,QACA,SACA,UAEI,CAAC,GACL;AAEA,MAAI,CAACA,QAAO;AACV,UAAM,IAAI,MAAM,mBAAmB;EACrC;AACA,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qBAAqB;EACvC;AAEA,QAAM,KAAK,SAASA,MAAK;AACzB,QAAM,OAAO,QAAQ,OAAO;AAC5B,QAAM,OAAO,KAAK;AAClB,QAAM,OAAO,QAAQ;AACrB,MAAI,QAAe,KAAK;AAGxB,MAAI,QAAQ,OAAO,IAAI,IAAI,MAAM,OAAO;AACtC,WAAO;EACT;AAEA,MAAI,SAAS,WAAW;AACtB,YAAQ,CAAC,KAAK;EAChB;AACA,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAE,GAAG;AACrC,UAAM,aAAa,eAAI,IAAI,MAAM,CAAC,CAAC;AACnC,QAAI,eAAe;AAAG,aAAO,QAAQ,iBAAiB,QAAQ;aACrD;AAAY,eAAS;EAChC;AAEA,SAAO;AACT;AAUA,SAAS,OAAO,IAAc,MAAY;AACxC,SACE,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC;AAE/E;AAGA,IAAO,wCAAQ;;;AV5Ff,iBAAgB;;;;;;;;;;;;;;;;;;;;;ACGT,IAAM,aAA0B;EACrC,EAAE,MAAM,cAAc,MAAM,OAAO,OAAO,IAAI;EAC9C,EAAE,MAAM,cAAc,MAAM,OAAO,OAAO,MAAM;EAChD,EAAE,MAAM,cAAc,MAAM,OAAO,OAAO,MAAM;EAChD,EAAE,MAAM,aAAa,MAAM,OAAO,OAAO,MAAM;EAC/C,EAAE,MAAM,aAAa,MAAM,OAAO,OAAO,MAAM;EAC/C,EAAE,MAAM,aAAa,MAAM,MAAM,OAAO,MAAM;EAC9C,EAAE,MAAM,aAAa,MAAM,MAAM,OAAO,KAAK;EAC7C,EAAE,MAAM,aAAa,MAAM,MAAM,OAAO,KAAK;EAC7C,EAAE,MAAM,aAAa,MAAM,MAAM,OAAO,KAAK;EAC7C,EAAE,MAAM,aAAa,MAAM,MAAM,OAAO,KAAK;EAC7C,EAAE,MAAM,aAAa,MAAM,MAAM,OAAO,KAAK;EAC7C,EAAE,MAAM,aAAa,MAAM,KAAK,OAAO,KAAK;EAC5C,EAAE,MAAM,WAAW,MAAM,MAAM,OAAO,IAAI;EAC1C,EAAE,MAAM,aAAa,MAAM,OAAO,OAAO,KAAK;EAC9C,EAAE,MAAM,aAAa,MAAM,OAAO,OAAO,MAAM;EAC/C,EAAE,MAAM,aAAa,MAAM,OAAO,OAAO,MAAM;EAC/C,EAAE,MAAM,aAAa,MAAM,OAAO,OAAO,MAAM;EAC/C,EAAE,MAAM,aAAa,MAAM,OAAO,OAAO,MAAM;EAC/C,EAAE,MAAM,aAAa,MAAM,OAAO,OAAO,MAAM;EAC/C,EAAE,MAAM,aAAa,MAAM,QAAQ,OAAO,MAAM;EAChD,EAAE,MAAM,aAAa,MAAM,QAAQ,OAAO,OAAO;EACjD,EAAE,MAAM,aAAa,MAAM,QAAQ,OAAO,OAAO;EACjD,EAAE,MAAM,cAAc,MAAM,QAAQ,OAAO,OAAO;EAClD,EAAE,MAAM,cAAc,MAAM,QAAQ,OAAO,OAAO;EAClD,EAAE,MAAM,cAAc,MAAM,MAAM,OAAO,OAAO;AAClD;AAQO,SAAS,iBAAiB,KAAuB;AAEtD,MAAI,QAAQ,QAAQ,QAAQ,KAAK;AAC/B,WAAO,CAAC,cAAc,YAAY;EACpC;AACA,QAAM,MAAM,CAAC;AACb,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAM,IAAI,WAAW,CAAC;AACtB,QAAI,EAAE,QAAQ,OAAO,EAAE,SAAS,KAAK;AACnC,UAAI,KAAK,EAAE,IAAI;IACjB,WAAW,EAAE,QAAQ,KAAK;AACxB;IACF;EACF;AACA,SAAO;AACT;ADpCO,SAAS,KACd,gBAA+B,kFAC/B,eAA6B,qFAC7B;AACA,QAAM,UACJ,OAAO,kBAAkB,WACrB,CAAO,OAAe,QAAgBC,SAAA,MAAA,MAAA,aAAA;AACtC,UAAM,WAAW,MAAM,MAAM,eAAe;MAC1C,SAAS,EAAE,OAAO,SAAS,KAAK,IAAI,GAAG,GAAG;IAC5C,CAAC;AACD,WAAO,MAAM,SAAS,YAAY;EACpC,CAAA,IACE;AAEN,MAAI,gBAAqC;AAEzC,QAAM,SACJ,OAAO,iBAAiB,WACpB,MAAYA,SAAA,MAAA,MAAA,aAAA;AACZ,QAAI,eAAe;AACjB,aAAO,MAAM;IACf;AACA,UAAM,UAAU,MAAM,YAAY,EAAE;MAAK,CAAC,aACxC,SAAS,KAAK;IAChB;AACA,oBAAgB;AAChB,WAAO,MAAM;EACf,CAAA,IACE;AAEN,SAAO;;;;;;;;IAQL,MAAM,CAAO,KAAa,QAAgBA,SAAA,MAAA,MAAA,aAAA;AACxC,aAAO,MAAM,SAAS,SAAS,QAAQ,KAAK,GAAG;IACjD,CAAA;EACF;AACF;AAUA,SAAsB,KAAK,KAAa,KAAgC;AAAA,SAAAA,SAAA,MAAA,MAAA,aAAA;AACtE,WAAO,MAAM,KAAK,EAAE,KAAK,KAAK,GAAG;EACnC,CAAA;AAAA;AAEA,SAAe,SACb,SACA,QACA,KACA,KACmB;AAAA,SAAAA,SAAA,MAAA,MAAA,aAAA;AACnB,UAAM,cAAc;AAEpB,QAAI;AAGJ,QAAI,MAAM,GAAG,KAAK,MAAM,MAAM,MAAM,KAAK;AACvC,YAAM,IAAI,MAAM,uBAAuB,GAAG;AAC1C,YAAM;IACR;AAGA,QAAI,MAAM,GAAG,KAAK,MAAM,OAAO,MAAM,MAAM;AACzC,YAAM,IAAI,MAAM,wBAAwB,GAAG;AAC3C,YAAM;IACR;AAGA,QAAI,QAAQ,IAAI;AACd,aAAO,WAAW,IAAI,CAAC,SAAS,KAAK,IAAI;IAC3C;AAGA,QAAI,OAAO,SAAS;AAClB,YAAM;IACR,WAAW,OAAO,UAAU;AAC1B,YAAM;IACR;AAEA,QAAI,OAAO,UAAU;AACnB,YAAM;IACR,WAAW,OAAO,WAAW;AAC3B,YAAM;IACR;AAEA,UAAM,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC;AAG3B,UAAM,WAAW;MACf,KAAK;MACL,QAAQ;MACR,MAAM;MACN,OAAO;MACP,QAAQ;MACR,QAAQ;IACV;AACA,QAAI,UAAU;AAEd,UAAM,iBAAiB,MAAM,OAAO;AAEpC,QAAI,YAAY,eAAe;AAE/B,WAAO,MAAM;AAEX,UAAI;AACJ,UAAI,OAAO,SAAS,UAAU,OAAO,SAAS,QAAQ;AACpD,mBAAW;AACX,iBAAS,SAAS,SAAS;AAC3B,iBAAS,OAAO,SAAS;MAC3B,WAAW,OAAO,SAAS,UAAU,MAAM,SAAS,QAAQ;AAC1D,mBAAW;AACX,iBAAS,SAAS,SAAS;AAC3B,iBAAS,QAAQ,SAAS;MAC5B,WAAW,MAAM,SAAS,UAAU,MAAM,SAAS,QAAQ;AACzD,mBAAW;AACX,iBAAS,MAAM,SAAS;AACxB,iBAAS,QAAQ,SAAS;MAC5B,OAAO;AACL,mBAAW;AACX,iBAAS,MAAM,SAAS;AACxB,iBAAS,OAAO,SAAS;MAC3B;AAGA,kBAAY,UAAU,QAAQ;AAE9B,iBAAW;AAGX,UAAI,CAAC,WAAW;AAEd,eAAO,iBAAiB,WAAW;MACrC,WAAW,UAAU,OAAO,KAAK,UAAU,KAAK;AAE9C,cAAM,WAAW,MAAM;UACrB,UAAU;UACV,UAAU,MAAM,UAAU,MAAM;QAClC;AACA,cAAM,cAAU,sBAAO,IAAI,WAAAC,QAAI,QAAQ,CAAC;AAExC,cAAM,2BAA2B,CAAC;AAElC,YAAI,QAAQ,SAAS,qBAAqB;AACxC,mBAAS,IAAI,GAAG,IAAI,QAAQ,SAAS,QAAQ,KAAK;AAChD,gBAAI,sCAAO,IAAI,QAAQ,SAAS,CAAC,CAAQ,GAAG;AAC1C,oBAAM,aAAa,QAAQ,SAAS,CAAC,EAAE;AACvC,kBAAI,YAAY;AACd,yCAAyB,KAAK,WAAW,IAAI;cAC/C;YACF;UACF;QACF,WAAW,QAAQ,SAAS,WAAW;AACrC,cAAI,sCAAO,IAAI,OAAc,KAAK,QAAQ,YAAY;AACpD,qCAAyB,KAAK,QAAQ,WAAW,IAAI;UACvD;QACF;AAIA,eAAO,yBAAyB,SAAS,IACrC,2BACA,iBAAiB,WAAW;MAClC,WAAW,UAAU,SAAS,GAAG;AAE/B,cAAM,YAAY,eAAe;AACjC,eAAO,UAAU,IAAI,CAAC,QAAgB,UAAU,GAAG,CAAC;MACtD,WAAW,OAAO,cAAc,UAAU;AAExC,cAAM,IAAI,MAAM,sBAAsB;AACtC,cAAM;MACR;AAGA,eAAS,UAAU,SAAS,MAAM,SAAS,UAAU;AACrD,eAAS,UAAU,SAAS,OAAO,SAAS,SAAS;IACvD;EACF,CAAA;AAAA;;;AWrMA,IAAM,mBAAmB,CAAC,YAA4B;AAClD,SAAQ,UAAU,OAAQ,KAAK,KAAK;AACxC;AAGA,IAAM,mBAAmB,CAAC,YAA4B;AAClD,SAAO,WAAW,MAAM,KAAK;AACjC;AAGA,IAAM,sBAAsB,CAAC,OAAsB,WAA4C;AAC3F,MAAI,OAAO,MAAM,CAAC;AAClB,MAAI,SAAS,MAAM,CAAC,IAAI,OAAO;AAC/B,MAAI,SAAS,MAAM,CAAC,IAAI,OAAO;AAE/B,MAAI,UAAU,IAAI;AACd,aAAS,SAAS;AAClB,aAAS,SAAS;AAAA,EACtB,WAAW,SAAS,GAAG;AACnB,aAAS,SAAS;AAClB,aAAS,KAAK,KAAK,IAAI,MAAM;AAAA,EACjC;AAEA,MAAI,UAAU,IAAI;AACd,WAAO,OAAO;AACd,aAAS,SAAS;AAAA,EACtB,WAAW,SAAS,GAAG;AACnB,WAAO,OAAO;AACd,aAAS,KAAK,KAAK,IAAI,MAAM;AAAA,EACjC;AAEA,SAAO,CAAC,MAAM,QAAQ,MAAM;AAChC;AAGA,IAAM,SAAS,CAAC,OAA8B;AAC1C,MAAI,OAAO,KAAK,MAAM,EAAE;AACxB,MAAI,OAAO,KAAK,QAAQ;AACxB,MAAI,OAAO,KAAK,OAAO,KAAK,QAAQ,EAAE;AACtC,MAAI,OAAO,MAAM,QAAQ;AACzB,MAAI,OAAO,KAAK,MAAM,GAAG;AACzB,SAAO,CAAC,MAAM,MAAM,IAAI;AAC5B;AAGA,IAAM,eAAe,CAAO,WAAwB;AAChD,MAAI,OAAO,QAAQ,QAAQ,OAAO,QAAQ,MAAM;AAC5C,QAAI;AACJ,aAAO,MAAY,KAAK,OAAO,KAAK,OAAO,GAAG;AAAA,IAC9C,SAAS,OAAO;AACZ,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACzC;AAAA,EACJ;AACJ;AAGA,IAAM,YAAY,CAAC,aAAiC;AAjEpD;AAkEI,QAAMC,iBAAe,UAAK,eAAe,MAAM;AAAA,IAC3C,cAAc;AAAA,IACd;AAAA,EACJ,CAAC,EACI,cAAc,EACd,KAAK,CAAC,MAAM,EAAE,SAAS,cAAc,MALrB,mBAKwB;AAC7C,QAAM,SAASA,iBAAA,gBAAAA,cAAc,MAAM;AACnC,MAAI,CAAC;AAAQ,WAAO;AAEpB,QAAM,YAAY,OAAO,MAAM,wBAAwB;AACvD,MAAI,CAAC;AAAW,UAAM,+BAA+BA,aAAY;AAEjE,QAAM,CAAC,EAAE,MAAM,MAAM,MAAM,IAAI;AAC/B,MAAI,SAAS,SAAS,IAAI,IAAI,KAAK;AACnC,MAAI,SAAS;AAAK,cAAU;AAC5B,MAAI;AAAQ,cAAU,SAAS,MAAM;AAErC,SAAO;AACX;;;ACjFO,IAAM,cAAN,MAAkB;AAAA,EAwBrB,YAAY,KAAa,KAAa,MAAY;AAvBlD,SAAQ,oBAA4B;AAepC,SAAQ,QAAQ,KAAK;AACrB,SAAQ,QAAQ,KAAK;AACrB,SAAQ,MAAM,KAAK;AACnB,SAAQ,MAAM,KAAK;AACnB,SAAQ,MAAM,KAAK;AACnB,SAAQ,OAAO,KAAK;AACpB,SAAQ,OAAO,KAAK;AAGhB,SAAK,MAAM;AACX,SAAK,MAAM;AACX,SAAK,KAAK,KAAK,YAAY;AAC3B,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEO,YAAY,KAAmB;AAClC,SAAK,MAAM;AACX,QAAI,KAAK,QAAQ,KAAK;AAClB,WAAK,KAAK,KAAK,YAAY;AAAA,IAC/B;AAAA,EACJ;AAAA,EAEO,aAAa,KAAmB;AACnC,SAAK,MAAM;AACX,QAAI,KAAK,QAAQ,KAAK;AAClB,WAAK,KAAK,KAAK,YAAY;AAAA,IAC/B;AAAA,EACJ;AAAA,EAEO,YAAY,UAAgB;AAC/B,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEO,iBAAiB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,sBAAsB;AACzB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEa,cAAc;AAAA;AACvB,aAAO,KAAK;AAAA,IAChB;AAAA;AAAA;AAAA;AAAA,EAIQ,UAAgB;AACpB,SAAK,UAAW,IAAI,KAAM,iBAAiB,KAAK,KAAK,CAAC,KAAK,IAAI,iBAAiB,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,iBAAiB,KAAK,gBAAgB,CAAC,CAAC,CAAC;AAC/I,SAAK,cAAc,OAAO,KAAK,OAAO;AAGtC,QAAI,UAAU,KAAM,KAAK,UAAU;AACnC,SAAK,UAAU,OAAO,OAAO;AAG7B,QAAI,SAAS,KAAM,KAAK,UAAU;AAClC,SAAK,SAAS,OAAO,MAAM;AAAA,EAC/B;AAAA;AAAA,EAGQ,MAAc;AAElB,QAAI,MAAM,OAAO,KAAK,IAAI,iBAAiB,IAAI,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,IAAI,iBAAiB,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,IAAI,iBAAiB,KAAK,CAAC,CAAC;AAC7I,WAAO;AAAA,EACX;AAAA;AAAA,EAGQ,iBAAiB;AACrB,WAAO,IAAI,QAA0B,CAAO,YAAY;AAGpD,WAAK,qBAAqB,MAAM,KAAK,IAAI,aAAc,MAAM,KAAK,IAAI,aAAa,KAAK,MAAO,KAAK,KAAK,MAAM,KAAK,MAAM,EAAE,IAAI;AAEhI,UAAI,cAAe,KAAK,oBAAoB,KAAK,OAAO,IAAK,KAAK,IAAI;AACtE,UAAI,UAAU,KAAK,MAAM,UAAU;AACnC,UAAI,UAAU,KAAK,OAAO,aAAa,WAAW,EAAE;AACpD,cAAQ;AAAA,QACJ;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL,EAAC;AAAA,EACL;AAAA;AAAA,EAGO,aAAa;AAChB,QAAI,OAAO,KAAK;AAChB,WAAO,IAAI,QAAiB,CAAO,YAAY;AAE3C,UAAI,aAAa,MAAM,KAAK,eAAe;AAC3C,UAAI,MAAM,KAAK,IAAI;AAEnB,UAAI,MAAM,oBAAoB,CAAC,KAAK,SAAS,GAAG,KAAK,WAAW,GAAG,KAAK,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,SAAS,SAAS,CAAC,WAAW,QAAQ,CAAC;AAErJ,UAAI,UAAU,CAAC,KAAK,MAAM,GAAG;AAC7B,UAAI,UAAU,CAAC,KAAK,OAAO,MAAM,WAAW,EAAE;AAC9C,UAAI,OAAO,oBAAoB,KAAK,SAAS,EAAE,SAAS,QAAQ,CAAC;AACjE,UAAI,OAAO,oBAAoB,KAAK,QAAQ,EAAE,SAAS,QAAQ,CAAC;AAChE,cAAQ;AAAA,QACJ,QAAQ,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,QAC5F,SAAS,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,GAAG,KAAK,QAAQ,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,QAChG,QAAQ,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,GAAG,KAAK,QAAQ,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,MACnG,CAAC;AAAA,IACL,EAAC;AAAA,EACL;AAAA;AAAA,EAGO,aAAa;AAChB,QAAI,OAAO,KAAK;AAChB,WAAO,IAAI;AAAA,MAAiB,CAAO,YAAY;AAC3C,aAAK,mBAAmB,MAAM,KAAK,eAAe;AAElD,YAAI,OAAO,oBAAoB,KAAK,SAAS,KAAK,gBAAgB;AAClE,YAAI,OAAO,oBAAoB,KAAK,QAAQ,KAAK,gBAAgB;AACjE,gBAAQ;AAAA,UACJ,QAAQ;AAAA,UACR,SAAS,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,GAAG,KAAK,QAAQ,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,UAChG,QAAQ,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,GAAG,KAAK,QAAQ,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,QACnG,CAAC;AAAA,MACL;AAAA,IACA;AAAA,EACJ;AAAA;AAAA,EAGQ,kBAAwB;AAC5B,QAAI,OAAO,KAAK;AAChB,QAAI,WAAW,oBAAI,KAAK,SAAS,KAAK,YAAY,CAAC,EAAE;AACrD,QAAI,UAAU;AACd,QAAI,OAAO,KAAK,MAAM,QAAQ,QAAQ,IAAI,SAAS,QAAQ,CAAC;AAC5D,QAAI,UAAU,QAAQ,MAAO,KAAK,KAAK;AACvC,SAAK,IAAK,MAAM,OAAQ,UAAU;AAClC,SAAK,mBAAmB,QAAQ,KAAK,IAAI,iBAAiB,KAAK,CAAC,CAAC;AAAA,EACrE;AAAA;AAAA,EAGc,gBAAiC;AAAA;AAC3C,UAAI,UAAU,MAAM,KAAK,WAAW,GAAG;AAIvC,YAAM,OAAO,OAAO,SAAS,IAAK,OAAO,WAAW,IAAI,KAAO,OAAO,WAAW,KAAK,KAAK;AAC3F,cAAQ,OAAO,MAAM;AAAA,IACzB;AAAA;AAAA;AAAA,EAGO,eAAgC;AACnC,WAAO,IAAI,QAAQ,CAAO,YAAY;AAClC,YAAM,QAAQ,KAAK,IAAI,iBAAiB,KAAK,gBAAgB,CAAC,IAAI,KAAK,IAAI,iBAAiB,KAAK,GAAG,CAAC,IAC/F,KAAK,IAAI,iBAAiB,KAAK,gBAAgB,CAAC,IAAI,KAAK,IAAI,iBAAiB,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,iBAAiB,MAAM,KAAK,cAAc,CAAC,CAAC;AACtJ,WAAK,YAAY,iBAAiB,KAAK,KAAK,KAAK,CAAC;AAClD,cAAQ,KAAK,SAAS;AAAA,IAC1B,EAAC;AAAA,EACL;AAAA;AAAA,EAGO,aAA8B;AACjC,WAAO,IAAI,QAAQ,CAAO,YAAY;AAClC,YAAM,SAAS,KAAK,IAAI,iBAAiB,KAAK,gBAAgB,CAAC,IAAI,KAAK,IAAI,iBAAiB,KAAK,GAAG,CAAC,IAChG,KAAK,IAAI,iBAAiB,KAAK,gBAAgB,CAAC,IAAI,KAAK,IAAI,iBAAiB,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,iBAAiB,MAAM,KAAK,cAAc,CAAC,CAAC,KAAK,KAAK,IAAI,iBAAiB,KAAK,SAAS,CAAC;AACpM,WAAI,MAAM,KAAK,cAAc,MAAK,GAAG;AACjC,aAAK,UAAU,MAAM,iBAAiB,KAAK,KAAK,KAAK,CAAC;AAAA,MAC1D,OAAO;AACH,aAAK,UAAU,iBAAiB,KAAK,KAAK,KAAK,CAAC;AAAA,MACpD;AACA,cAAQ,KAAK,OAAO;AAAA,IACxB,EAAC;AAAA,EACL;AAAA;AAAA,EAGc,cAAiC;AAAA;AAC3C,YAAM,SAAS,MAAM,aAAa,EAAE,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC;AAClE,YAAM,SAAS,UAAU,UAAU,OAAO,CAAC,CAAC;AAC5C,WAAK,oBAAoB,SAAU,UAAU,KAAK,MAAO,KAAK,KAAK,MAAM,KAAK,MAAM,EAAE,IAAI;AAC1F,aAAO;AAAA,QACH,WAAW;AAAA,QACX,UAAU,UAAU,OAAO,CAAC;AAAA,MAChC;AAAA,IACJ;AAAA;AACJ;","names":["point","feature","sum","decode","feature","Pbf","u3","u","bc","ca","ab","u","abt","bct","cat","_8","_16","fin","fin2","ab","bc","_8","_8b","_16","_48","fin","u2","point","__async","Pbf","timeZoneName"]}