{"version":3,"file":"index.umd.cjs","sources":["../src/core/utils/hashUtils.js","../src/core/utils/geometryUtils.js","../src/core/utils/halfEdgeUtils.js","../src/core/utils/RaySet.js","../src/core/utils/computeDisjointEdges.js","../src/core/HalfEdgeMap.js","../src/core/Brush.js","../src/libs/cdt2d.js","../src/core/utils/Pool.js","../src/core/CDTTriangleSplitter.js","../src/core/utils/triangleUtils.js","../src/core/LegacyTriangleSplitter.js","../src/core/IntersectionMap.js","../src/core/constants.js","../src/core/utils/intersectionUtils.js","../src/core/operations/operationsUtils.js","../src/core/debug/OperationDebugData.js","../src/core/operations/operations.js","../src/core/TypeBackedArray.js","../src/core/operations/GeometryBuilder.js","../src/core/operations/GeometryUtils.js","../src/core/Evaluator.js","../src/core/operations/Operation.js","../src/core/operations/OperationGroup.js","../src/materials/shaderUtils.js","../src/materials/GridMaterial.js","../src/core/debug/debugUtils.js","../src/objects/TriangleSetHelper.js","../src/objects/EdgesHelper.js","../src/objects/PointsHelper.js","../src/objects/HalfEdgeHelper.js","../src/utils/computeMeshVolume.js"],"sourcesContent":["const HASH_WIDTH = 1e-6;\nconst HASH_HALF_WIDTH = HASH_WIDTH * 0.5;\nconst HASH_MULTIPLIER = Math.pow( 10, - Math.log10( HASH_WIDTH ) );\nconst HASH_ADDITION = HASH_HALF_WIDTH * HASH_MULTIPLIER;\nexport function hashNumber( v ) {\n\n\treturn ~ ~ ( v * HASH_MULTIPLIER + HASH_ADDITION );\n\n}\n\nexport function hashVertex2( v ) {\n\n\treturn `${ hashNumber( v.x ) },${ hashNumber( v.y ) }`;\n\n}\n\nexport function hashVertex3( v ) {\n\n\treturn `${ hashNumber( v.x ) },${ hashNumber( v.y ) },${ hashNumber( v.z ) }`;\n\n}\n\nexport function hashVertex4( v ) {\n\n\treturn `${ hashNumber( v.x ) },${ hashNumber( v.y ) },${ hashNumber( v.z ) },${ hashNumber( v.w ) }`;\n\n}\n\nexport function hashRay( r ) {\n\n\treturn `${ hashVertex3( r.origin ) }-${ hashVertex3( r.direction ) }`;\n\n}\n\nexport function toNormalizedRay( v0, v1, target ) {\n\n\t// get a normalized direction\n\ttarget\n\t\t.direction\n\t\t.subVectors( v1, v0 )\n\t\t.normalize();\n\n\t// project the origin onto the perpendicular plane that\n\t// passes through 0, 0, 0\n\tconst scalar = v0.dot( target.direction );\n\ttarget.\n\t\torigin\n\t\t.copy( v0 )\n\t\t.addScaledVector( target.direction, - scalar );\n\n\treturn target;\n\n}\n","import { BufferAttribute } from 'three';\n\nexport function areSharedArrayBuffersSupported() {\n\n\treturn typeof SharedArrayBuffer !== 'undefined';\n\n}\n\nexport function convertToSharedArrayBuffer( array ) {\n\n\tif ( array.buffer instanceof SharedArrayBuffer ) {\n\n\t\treturn array;\n\n\t}\n\n\tconst cons = array.constructor;\n\tconst buffer = array.buffer;\n\tconst sharedBuffer = new SharedArrayBuffer( buffer.byteLength );\n\n\tconst uintArray = new Uint8Array( buffer );\n\tconst sharedUintArray = new Uint8Array( sharedBuffer );\n\tsharedUintArray.set( uintArray, 0 );\n\n\treturn new cons( sharedBuffer );\n\n}\n\nexport function getIndexArray( vertexCount, BufferConstructor = ArrayBuffer ) {\n\n\tif ( vertexCount > 65535 ) {\n\n\t\treturn new Uint32Array( new BufferConstructor( 4 * vertexCount ) );\n\n\t} else {\n\n\t\treturn new Uint16Array( new BufferConstructor( 2 * vertexCount ) );\n\n\t}\n\n}\n\nexport function ensureIndex( geo, options ) {\n\n\tif ( ! geo.index ) {\n\n\t\tconst vertexCount = geo.attributes.position.count;\n\t\tconst BufferConstructor = options.useSharedArrayBuffer ? SharedArrayBuffer : ArrayBuffer;\n\t\tconst index = getIndexArray( vertexCount, BufferConstructor );\n\t\tgeo.setIndex( new BufferAttribute( index, 1 ) );\n\n\t\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\t\tindex[ i ] = i;\n\n\t\t}\n\n\t}\n\n}\n\nexport function getVertexCount( geo ) {\n\n\treturn geo.index ? geo.index.count : geo.attributes.position.count;\n\n}\n\nexport function getTriCount( geo ) {\n\n\treturn getVertexCount( geo ) / 3;\n\n}\n","import { Vector3 } from 'three';\n\nconst DEGENERATE_EPSILON = 1e-8;\nconst _tempVec = new Vector3();\n\nexport function toTriIndex( v ) {\n\n\treturn ~ ~ ( v / 3 );\n\n}\n\nexport function toEdgeIndex( v ) {\n\n\treturn v % 3;\n\n}\n\nexport function sortEdgeFunc( a, b ) {\n\n\treturn a.start - b.start;\n\n}\n\nexport function getProjectedDistance( ray, vec ) {\n\n\treturn _tempVec.subVectors( vec, ray.origin ).dot( ray.direction );\n\n}\n\nexport function hasOverlaps( arr ) {\n\n\tarr = [ ...arr ].sort( sortEdgeFunc );\n\tfor ( let i = 0, l = arr.length; i < l - 1; i ++ ) {\n\n\t\tconst info0 = arr[ i ];\n\t\tconst info1 = arr[ i + 1 ];\n\n\t\tif ( info1.start < info0.end && Math.abs( info1.start - info0.end ) > 1e-5 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\treturn false;\n\n}\n\nexport function getEdgeSetLength( arr ) {\n\n\tlet tot = 0;\n\tarr.forEach( ( { start, end } ) => tot += end - start );\n\treturn tot;\n\n}\n\nexport function matchEdges( forward, reverse, disjointConnectivityMap, eps = DEGENERATE_EPSILON ) {\n\n\tforward.sort( sortEdgeFunc );\n\treverse.sort( sortEdgeFunc );\n\n\tfor ( let i = 0; i < forward.length; i ++ ) {\n\n\t\tconst e0 = forward[ i ];\n\t\tfor ( let o = 0; o < reverse.length; o ++ ) {\n\n\t\t\tconst e1 = reverse[ o ];\n\t\t\tif ( e1.start > e0.end ) {\n\n\t\t\t\t// e2 is completely after e1\n\t\t\t\t// break;\n\n\t\t\t\t// NOTE: there are cases where there are overlaps due to precision issues or\n\t\t\t\t// thin / degenerate triangles. Assuming the sibling side has the same issues\n\t\t\t\t// we let the matching work here. Long term we should remove the degenerate\n\t\t\t\t// triangles before this.\n\n\t\t\t} else if ( e0.end < e1.start || e1.end < e0.start ) {\n\n\t\t\t\t// e1 is completely before e2\n\t\t\t\tcontinue;\n\n\t\t\t} else if ( e0.start <= e1.start && e0.end >= e1.end ) {\n\n\t\t\t\t// e1 is larger than and e2 is completely within e1\n\t\t\t\tif ( ! areDistancesDegenerate( e1.end, e0.end ) ) {\n\n\t\t\t\t\tforward.splice( i + 1, 0, {\n\t\t\t\t\t\tstart: e1.end,\n\t\t\t\t\t\tend: e0.end,\n\t\t\t\t\t\tindex: e0.index,\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\te0.end = e1.start;\n\n\t\t\t\te1.start = 0;\n\t\t\t\te1.end = 0;\n\n\t\t\t} else if ( e0.start >= e1.start && e0.end <= e1.end ) {\n\n\t\t\t\t// e2 is larger than and e1 is completely within e2\n\t\t\t\tif ( ! areDistancesDegenerate( e0.end, e1.end ) ) {\n\n\t\t\t\t\treverse.splice( o + 1, 0, {\n\t\t\t\t\t\tstart: e0.end,\n\t\t\t\t\t\tend: e1.end,\n\t\t\t\t\t\tindex: e1.index,\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\te1.end = e0.start;\n\n\t\t\t\te0.start = 0;\n\t\t\t\te0.end = 0;\n\n\t\t\t} else if ( e0.start <= e1.start && e0.end <= e1.end ) {\n\n\t\t\t\t// e1 overlaps e2 at the beginning\n\t\t\t\tconst tmp = e0.end;\n\t\t\t\te0.end = e1.start;\n\t\t\t\te1.start = tmp;\n\n\t\t\t} else if ( e0.start >= e1.start && e0.end >= e1.end ) {\n\n\t\t\t\t// e1 overlaps e2 at the end\n\t\t\t\tconst tmp = e1.end;\n\t\t\t\te1.end = e0.start;\n\t\t\t\te0.start = tmp;\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error();\n\n\t\t\t}\n\n\t\t\t// Add the connectivity information\n\t\t\tif ( ! disjointConnectivityMap.has( e0.index ) ) {\n\n\t\t\t\tdisjointConnectivityMap.set( e0.index, [] );\n\n\t\t\t}\n\n\t\t\tif ( ! disjointConnectivityMap.has( e1.index ) ) {\n\n\t\t\t\tdisjointConnectivityMap.set( e1.index, [] );\n\n\t\t\t}\n\n\t\t\tdisjointConnectivityMap\n\t\t\t\t.get( e0.index )\n\t\t\t\t.push( e1.index );\n\n\t\t\tdisjointConnectivityMap\n\t\t\t\t.get( e1.index )\n\t\t\t\t.push( e0.index );\n\n\t\t\tif ( isEdgeDegenerate( e1 ) ) {\n\n\t\t\t\treverse.splice( o, 1 );\n\t\t\t\to --;\n\n\t\t\t}\n\n\t\t\tif ( isEdgeDegenerate( e0 ) ) {\n\n\t\t\t\t// and if we have to remove the current original edge then exit this loop\n\t\t\t\t// so we can work on the next one\n\t\t\t\tforward.splice( i, 1 );\n\t\t\t\ti --;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcleanUpEdgeSet( forward );\n\tcleanUpEdgeSet( reverse );\n\n\tfunction cleanUpEdgeSet( arr ) {\n\n\t\tfor ( let i = 0; i < arr.length; i ++ ) {\n\n\t\t\tif ( isEdgeDegenerate( arr[ i ] ) ) {\n\n\t\t\t\tarr.splice( i, 1 );\n\t\t\t\ti --;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction areDistancesDegenerate( start, end ) {\n\n\t\treturn Math.abs( end - start ) < eps;\n\n\t}\n\n\tfunction isEdgeDegenerate( e ) {\n\n\t\treturn Math.abs( e.end - e.start ) < eps;\n\n\t}\n\n}\n","const DIST_EPSILON = 1e-5;\nconst ANGLE_EPSILON = 1e-4;\n\nexport class RaySet {\n\n\tconstructor() {\n\n\t\tthis._rays = [];\n\n\t}\n\n\taddRay( ray ) {\n\n\t\tthis._rays.push( ray );\n\n\t}\n\n\tfindClosestRay( ray ) {\n\n\t\tconst rays = this._rays;\n\t\tconst inv = ray.clone();\n\t\tinv.direction.multiplyScalar( - 1 );\n\n\t\tlet bestScore = Infinity;\n\t\tlet bestRay = null;\n\t\tfor ( let i = 0, l = rays.length; i < l; i ++ ) {\n\n\t\t\tconst r = rays[ i ];\n\t\t\tif ( skipRay( r, ray ) && skipRay( r, inv ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst rayScore = scoreRays( r, ray );\n\t\t\tconst invScore = scoreRays( r, inv );\n\t\t\tconst score = Math.min( rayScore, invScore );\n\t\t\tif ( score < bestScore ) {\n\n\t\t\t\tbestScore = score;\n\t\t\t\tbestRay = r;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bestRay;\n\n\t\tfunction skipRay( r0, r1 ) {\n\n\t\t\tconst distOutOfThreshold = r0.origin.distanceTo( r1.origin ) > DIST_EPSILON;\n\t\t\tconst angleOutOfThreshold = r0.direction.angleTo( r1.direction ) > ANGLE_EPSILON;\n\t\t\treturn angleOutOfThreshold || distOutOfThreshold;\n\n\t\t}\n\n\t\tfunction scoreRays( r0, r1 ) {\n\n\t\t\tconst originDistance = r0.origin.distanceTo( r1.origin );\n\t\t\tconst angleDistance = r0.direction.angleTo( r1.direction );\n\t\t\treturn originDistance / DIST_EPSILON + angleDistance / ANGLE_EPSILON;\n\n\t\t}\n\n\t}\n\n}\n","import { Vector3, Ray } from 'three';\nimport { toEdgeIndex, toTriIndex, matchEdges, getProjectedDistance } from './halfEdgeUtils.js';\nimport { toNormalizedRay } from './hashUtils.js';\nimport { RaySet } from './RaySet.js';\n\nconst _v0 = new Vector3();\nconst _v1 = new Vector3();\nconst _ray = new Ray();\n\nexport function computeDisjointEdges(\n\tgeometry,\n\tunmatchedSet,\n\teps,\n) {\n\n\tconst attributes = geometry.attributes;\n\tconst indexAttr = geometry.index;\n\tconst posAttr = attributes.position;\n\n\tconst disjointConnectivityMap = new Map();\n\tconst fragmentMap = new Map();\n\tconst edges = Array.from( unmatchedSet );\n\tconst rays = new RaySet();\n\n\tfor ( let i = 0, l = edges.length; i < l; i ++ ) {\n\n\t\t// get the triangle edge\n\t\tconst index = edges[ i ];\n\t\tconst triIndex = toTriIndex( index );\n\t\tconst edgeIndex = toEdgeIndex( index );\n\n\t\tlet i0 = 3 * triIndex + edgeIndex;\n\t\tlet i1 = 3 * triIndex + ( edgeIndex + 1 ) % 3;\n\t\tif ( indexAttr ) {\n\n\t\t\ti0 = indexAttr.getX( i0 );\n\t\t\ti1 = indexAttr.getX( i1 );\n\n\t\t}\n\n\t\t_v0.fromBufferAttribute( posAttr, i0 );\n\t\t_v1.fromBufferAttribute( posAttr, i1 );\n\n\t\t// get the ray corresponding to the edge\n\t\ttoNormalizedRay( _v0, _v1, _ray );\n\n\t\t// find the shared ray with other edges\n\t\tlet info;\n\t\tlet commonRay = rays.findClosestRay( _ray );\n\t\tif ( commonRay === null ) {\n\n\t\t\tcommonRay = _ray.clone();\n\t\t\trays.addRay( commonRay );\n\n\t\t}\n\n\t\tif ( ! fragmentMap.has( commonRay ) ) {\n\n\t\t\tfragmentMap.set( commonRay, {\n\n\t\t\t\tforward: [],\n\t\t\t\treverse: [],\n\t\t\t\tray: commonRay,\n\n\t\t\t} );\n\n\t\t}\n\n\t\tinfo = fragmentMap.get( commonRay );\n\n\t\t// store the stride of edge endpoints along the ray\n\t\tlet start = getProjectedDistance( commonRay, _v0 );\n\t\tlet end = getProjectedDistance( commonRay, _v1 );\n\t\tif ( start > end ) {\n\n\t\t\t[ start, end ] = [ end, start ];\n\n\t\t}\n\n\t\tif ( _ray.direction.dot( commonRay.direction ) < 0 ) {\n\n\t\t\tinfo.reverse.push( { start, end, index } );\n\n\t\t} else {\n\n\t\t\tinfo.forward.push( { start, end, index } );\n\n\t\t}\n\n\t}\n\n\t// match the found sibling edges\n\tfragmentMap.forEach( ( { forward, reverse }, ray ) => {\n\n\t\tmatchEdges( forward, reverse, disjointConnectivityMap, eps );\n\n\t\tif ( forward.length === 0 && reverse.length === 0 ) {\n\n\t\t\tfragmentMap.delete( ray );\n\n\t\t}\n\n\t} );\n\n\treturn {\n\t\tdisjointConnectivityMap,\n\t\tfragmentMap,\n\t};\n\n}\n\n","import { Vector2, Vector3, Vector4 } from 'three';\nimport { hashNumber, hashVertex2, hashVertex3, hashVertex4 } from './utils/hashUtils.js';\nimport { getTriCount } from './utils/geometryUtils.js';\nimport { computeDisjointEdges } from './utils/computeDisjointEdges.js';\n\nconst _vec2 = new Vector2();\nconst _vec3 = new Vector3();\nconst _vec4 = new Vector4();\nconst _hashes = [ '', '', '' ];\n\nexport class HalfEdgeMap {\n\n\tconstructor() {\n\n\t\t// result data\n\t\tthis.data = null;\n\t\tthis.disjointConnections = null;\n\t\tthis.unmatchedDisjointEdges = null;\n\t\tthis.unmatchedEdges = - 1;\n\t\tthis.matchedEdges = - 1;\n\n\t\t// options\n\t\tthis.useDrawRange = true;\n\t\tthis.useAllAttributes = false;\n\t\tthis.matchDisjointEdges = false;\n\t\tthis.degenerateEpsilon = 1e-8;\n\n\t}\n\n\tgetSiblingTriangleIndex( triIndex, edgeIndex ) {\n\n\t\tconst otherIndex = this.data[ triIndex * 3 + edgeIndex ];\n\t\treturn otherIndex === - 1 ? - 1 : ~ ~ ( otherIndex / 3 );\n\n\t}\n\n\tgetSiblingEdgeIndex( triIndex, edgeIndex ) {\n\n\t\tconst otherIndex = this.data[ triIndex * 3 + edgeIndex ];\n\t\treturn otherIndex === - 1 ? - 1 : ( otherIndex % 3 );\n\n\t}\n\n\tgetDisjointSiblingTriangleIndices( triIndex, edgeIndex ) {\n\n\t\tconst index = triIndex * 3 + edgeIndex;\n\t\tconst arr = this.disjointConnections.get( index );\n\t\treturn arr ? arr.map( i => ~ ~ ( i / 3 ) ) : [];\n\n\t}\n\n\tgetDisjointSiblingEdgeIndices( triIndex, edgeIndex ) {\n\n\t\tconst index = triIndex * 3 + edgeIndex;\n\t\tconst arr = this.disjointConnections.get( index );\n\t\treturn arr ? arr.map( i => i % 3 ) : [];\n\n\t}\n\n\tisFullyConnected() {\n\n\t\treturn this.unmatchedEdges === 0;\n\n\t}\n\n\tupdateFrom( geometry ) {\n\n\t\tconst { useAllAttributes, useDrawRange, matchDisjointEdges, degenerateEpsilon } = this;\n\t\tconst hashFunction = useAllAttributes ? hashAllAttributes : hashPositionAttribute;\n\n\t\t// runs on the assumption that there is a 1 : 1 match of edges\n\t\tconst map = new Map();\n\n\t\t// attributes\n\t\tconst { attributes } = geometry;\n\t\tconst attrKeys = useAllAttributes ? Object.keys( attributes ) : null;\n\t\tconst indexAttr = geometry.index;\n\t\tconst posAttr = attributes.position;\n\n\t\t// get the potential number of triangles\n\t\tlet triCount = getTriCount( geometry );\n\t\tconst maxTriCount = triCount;\n\n\t\t// get the real number of triangles from the based on the draw range\n\t\tlet offset = 0;\n\t\tif ( useDrawRange ) {\n\n\t\t\toffset = geometry.drawRange.start;\n\t\t\tif ( geometry.drawRange.count !== Infinity ) {\n\n\t\t\t\ttriCount = ~ ~ ( geometry.drawRange.count / 3 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// initialize the connectivity buffer - 1 means no connectivity\n\t\tlet data = this.data;\n\t\tif ( ! data || data.length < 3 * maxTriCount ) {\n\n\t\t\tdata = new Int32Array( 3 * maxTriCount );\n\n\t\t}\n\n\t\tdata.fill( - 1 );\n\n\t\t// iterate over all triangles\n\t\tlet matchedEdges = 0;\n\t\tlet unmatchedSet = new Set();\n\t\tfor ( let i = offset, l = triCount * 3 + offset; i < l; i += 3 ) {\n\n\t\t\tconst i3 = i;\n\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\tlet i0 = i3 + e;\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\ti0 = indexAttr.getX( i0 );\n\n\t\t\t\t}\n\n\t\t\t\t_hashes[ e ] = hashFunction( i0 );\n\n\t\t\t}\n\n\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\tconst nextE = ( e + 1 ) % 3;\n\t\t\t\tconst vh0 = _hashes[ e ];\n\t\t\t\tconst vh1 = _hashes[ nextE ];\n\n\t\t\t\tconst reverseHash = `${ vh1 }_${ vh0 }`;\n\t\t\t\tif ( map.has( reverseHash ) ) {\n\n\t\t\t\t\t// create a reference between the two triangles and clear the hash\n\t\t\t\t\tconst index = i3 + e;\n\t\t\t\t\tconst otherIndex = map.get( reverseHash );\n\t\t\t\t\tdata[ index ] = otherIndex;\n\t\t\t\t\tdata[ otherIndex ] = index;\n\t\t\t\t\tmap.delete( reverseHash );\n\t\t\t\t\tmatchedEdges += 2;\n\t\t\t\t\tunmatchedSet.delete( otherIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// save the triangle and triangle edge index captured in one value\n\t\t\t\t\t// triIndex = ~ ~ ( i0 / 3 );\n\t\t\t\t\t// edgeIndex = i0 % 3;\n\t\t\t\t\tconst hash = `${ vh0 }_${ vh1 }`;\n\t\t\t\t\tconst index = i3 + e;\n\t\t\t\t\tmap.set( hash, index );\n\t\t\t\t\tunmatchedSet.add( index );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( matchDisjointEdges ) {\n\n\t\t\tconst {\n\t\t\t\tfragmentMap,\n\t\t\t\tdisjointConnectivityMap,\n\t\t\t} = computeDisjointEdges( geometry, unmatchedSet, degenerateEpsilon );\n\n\t\t\tunmatchedSet.clear();\n\t\t\tfragmentMap.forEach( ( { forward, reverse } ) => {\n\n\t\t\t\tforward.forEach( ( { index } ) => unmatchedSet.add( index ) );\n\t\t\t\treverse.forEach( ( { index } ) => unmatchedSet.add( index ) );\n\n\t\t\t} );\n\n\t\t\tthis.unmatchedDisjointEdges = fragmentMap;\n\t\t\tthis.disjointConnections = disjointConnectivityMap;\n\t\t\tmatchedEdges = triCount * 3 - unmatchedSet.size;\n\n\t\t}\n\n\t\tthis.matchedEdges = matchedEdges;\n\t\tthis.unmatchedEdges = unmatchedSet.size;\n\t\tthis.data = data;\n\n\t\tfunction hashPositionAttribute( i ) {\n\n\t\t\t_vec3.fromBufferAttribute( posAttr, i );\n\t\t\treturn hashVertex3( _vec3 );\n\n\t\t}\n\n\t\tfunction hashAllAttributes( i ) {\n\n\t\t\tlet result = '';\n\t\t\tfor ( let k = 0, l = attrKeys.length; k < l; k ++ ) {\n\n\t\t\t\tconst attr = attributes[ attrKeys[ k ] ];\n\t\t\t\tlet str;\n\t\t\t\tswitch ( attr.itemSize ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstr = hashNumber( attr.getX( i ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tstr = hashVertex2( _vec2.fromBufferAttribute( attr, i ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tstr = hashVertex3( _vec3.fromBufferAttribute( attr, i ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tstr = hashVertex4( _vec4.fromBufferAttribute( attr, i ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( result !== '' ) {\n\n\t\t\t\t\tresult += '|';\n\n\t\t\t\t}\n\n\t\t\t\tresult += str;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t}\n\n}\n","import { Mesh, Matrix4 } from 'three';\nimport { MeshBVH } from 'three-mesh-bvh';\nimport { HalfEdgeMap } from './HalfEdgeMap.js';\nimport { areSharedArrayBuffersSupported, convertToSharedArrayBuffer, getTriCount } from './utils/geometryUtils.js';\n\nexport class Brush extends Mesh {\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\n\t\tthis.isBrush = true;\n\t\tthis._previousMatrix = new Matrix4();\n\t\tthis._previousMatrix.elements.fill( 0 );\n\t\tthis._halfEdges = null;\n\t\tthis._boundsTree = null;\n\t\tthis._groupIndices = null;\n\t\tthis._hash = null;\n\n\t}\n\n\tmarkUpdated() {\n\n\t\tthis._previousMatrix.copy( this.matrix );\n\n\t}\n\n\tisDirty() {\n\n\t\tconst { matrix, _previousMatrix } = this;\n\t\tconst el1 = matrix.elements;\n\t\tconst el2 = _previousMatrix.elements;\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( el1[ i ] !== el2[ i ] ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tprepareGeometry() {\n\n\t\t// generate shared array buffers\n\t\tconst geometry = this.geometry;\n\t\tconst attributes = geometry.attributes;\n\t\tconst useSharedArrayBuffer = areSharedArrayBuffersSupported();\n\n\t\tconst index = geometry.index;\n\t\tconst posAttr = geometry.attributes.position;\n\t\tconst indexHash = index ? `${ index.uuid }_${ index.count }_${ index.version }` : '-1_-1_-1';\n\t\tconst posHash = `${ posAttr.uuid }_${ posAttr.count }_${ posAttr.version }`;\n\t\tconst hash = `${ geometry.uuid }_${ indexHash }_${ posHash }`;\n\t\tif ( this._hash === hash ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._hash = hash;\n\t\tif ( useSharedArrayBuffer ) {\n\n\t\t\tfor ( const key in attributes ) {\n\n\t\t\t\tconst attribute = attributes[ key ];\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tthrow new Error( 'Brush: InterleavedBufferAttributes are not supported.' );\n\n\t\t\t\t}\n\n\t\t\t\tattribute.array = convertToSharedArrayBuffer( attribute.array );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate bounds tree\n\t\tgeometry.boundsTree = new MeshBVH( geometry, { maxLeafSize: 3, indirect: true, useSharedArrayBuffer } );\n\n\t\t// generate half edges\n\t\tif ( ! geometry.halfEdges ) {\n\n\t\t\tgeometry.halfEdges = new HalfEdgeMap();\n\n\t\t}\n\n\t\tgeometry.halfEdges.updateFrom( geometry );\n\n\t\t// save group indices for materials\n\t\tconst triCount = getTriCount( geometry );\n\t\tif ( ! geometry.groupIndices || geometry.groupIndices.length !== triCount ) {\n\n\t\t\tgeometry.groupIndices = new Uint16Array( triCount );\n\n\t\t}\n\n\t\tconst array = geometry.groupIndices;\n\t\tconst groups = geometry.groups;\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst { start, count } = groups[ i ];\n\t\t\tfor ( let g = start / 3, lg = ( start + count ) / 3; g < lg; g ++ ) {\n\n\t\t\t\tarray[ g ] = i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdisposeCacheData() {\n\n\t\tconst { geometry } = this;\n\t\tgeometry.halfEdges = null;\n\t\tgeometry.boundsTree = null;\n\t\tgeometry.groupIndices = null;\n\n\t}\n\n}\n","// Auto-generated ESM bundle of cdt2d\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __commonJS = (cb, mod) => function __require() {\n  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\n\n// node_modules/binary-search-bounds/search-bounds.js\nvar require_search_bounds = __commonJS({\n  \"node_modules/binary-search-bounds/search-bounds.js\"(exports, module) {\n    \"use strict\";\n    function ge(a, y, c, l, h) {\n      var i = h + 1;\n      while (l <= h) {\n        var m = l + h >>> 1, x = a[m];\n        var p = c !== void 0 ? c(x, y) : x - y;\n        if (p >= 0) {\n          i = m;\n          h = m - 1;\n        } else {\n          l = m + 1;\n        }\n      }\n      return i;\n    }\n    function gt(a, y, c, l, h) {\n      var i = h + 1;\n      while (l <= h) {\n        var m = l + h >>> 1, x = a[m];\n        var p = c !== void 0 ? c(x, y) : x - y;\n        if (p > 0) {\n          i = m;\n          h = m - 1;\n        } else {\n          l = m + 1;\n        }\n      }\n      return i;\n    }\n    function lt(a, y, c, l, h) {\n      var i = l - 1;\n      while (l <= h) {\n        var m = l + h >>> 1, x = a[m];\n        var p = c !== void 0 ? c(x, y) : x - y;\n        if (p < 0) {\n          i = m;\n          l = m + 1;\n        } else {\n          h = m - 1;\n        }\n      }\n      return i;\n    }\n    function le(a, y, c, l, h) {\n      var i = l - 1;\n      while (l <= h) {\n        var m = l + h >>> 1, x = a[m];\n        var p = c !== void 0 ? c(x, y) : x - y;\n        if (p <= 0) {\n          i = m;\n          l = m + 1;\n        } else {\n          h = m - 1;\n        }\n      }\n      return i;\n    }\n    function eq(a, y, c, l, h) {\n      while (l <= h) {\n        var m = l + h >>> 1, x = a[m];\n        var p = c !== void 0 ? c(x, y) : x - y;\n        if (p === 0) {\n          return m;\n        }\n        if (p <= 0) {\n          l = m + 1;\n        } else {\n          h = m - 1;\n        }\n      }\n      return -1;\n    }\n    function norm(a, y, c, l, h, f) {\n      if (typeof c === \"function\") {\n        return f(a, y, c, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0);\n      }\n      return f(a, y, void 0, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0);\n    }\n    module.exports = {\n      ge: function(a, y, c, l, h) {\n        return norm(a, y, c, l, h, ge);\n      },\n      gt: function(a, y, c, l, h) {\n        return norm(a, y, c, l, h, gt);\n      },\n      lt: function(a, y, c, l, h) {\n        return norm(a, y, c, l, h, lt);\n      },\n      le: function(a, y, c, l, h) {\n        return norm(a, y, c, l, h, le);\n      },\n      eq: function(a, y, c, l, h) {\n        return norm(a, y, c, l, h, eq);\n      }\n    };\n  }\n});\n\n// node_modules/two-product/two-product.js\nvar require_two_product = __commonJS({\n  \"node_modules/two-product/two-product.js\"(exports, module) {\n    \"use strict\";\n    module.exports = twoProduct;\n    var SPLITTER = +(Math.pow(2, 27) + 1);\n    function twoProduct(a, b, result) {\n      var x = a * b;\n      var c = SPLITTER * a;\n      var abig = c - a;\n      var ahi = c - abig;\n      var alo = a - ahi;\n      var d = SPLITTER * b;\n      var bbig = d - b;\n      var bhi = d - bbig;\n      var blo = b - bhi;\n      var err1 = x - ahi * bhi;\n      var err2 = err1 - alo * bhi;\n      var err3 = err2 - ahi * blo;\n      var y = alo * blo - err3;\n      if (result) {\n        result[0] = y;\n        result[1] = x;\n        return result;\n      }\n      return [y, x];\n    }\n  }\n});\n\n// node_modules/robust-sum/robust-sum.js\nvar require_robust_sum = __commonJS({\n  \"node_modules/robust-sum/robust-sum.js\"(exports, module) {\n    \"use strict\";\n    module.exports = linearExpansionSum;\n    function scalarScalar(a, b) {\n      var x = a + b;\n      var bv = x - a;\n      var av = x - bv;\n      var br = b - bv;\n      var ar = a - av;\n      var y = ar + br;\n      if (y) {\n        return [y, x];\n      }\n      return [x];\n    }\n    function linearExpansionSum(e, f) {\n      var ne = e.length | 0;\n      var nf = f.length | 0;\n      if (ne === 1 && nf === 1) {\n        return scalarScalar(e[0], f[0]);\n      }\n      var n = ne + nf;\n      var g = new Array(n);\n      var count = 0;\n      var eptr = 0;\n      var fptr = 0;\n      var abs = Math.abs;\n      var ei = e[eptr];\n      var ea = abs(ei);\n      var fi = f[fptr];\n      var fa = abs(fi);\n      var a, b;\n      if (ea < fa) {\n        b = ei;\n        eptr += 1;\n        if (eptr < ne) {\n          ei = e[eptr];\n          ea = abs(ei);\n        }\n      } else {\n        b = fi;\n        fptr += 1;\n        if (fptr < nf) {\n          fi = f[fptr];\n          fa = abs(fi);\n        }\n      }\n      if (eptr < ne && ea < fa || fptr >= nf) {\n        a = ei;\n        eptr += 1;\n        if (eptr < ne) {\n          ei = e[eptr];\n          ea = abs(ei);\n        }\n      } else {\n        a = fi;\n        fptr += 1;\n        if (fptr < nf) {\n          fi = f[fptr];\n          fa = abs(fi);\n        }\n      }\n      var x = a + b;\n      var bv = x - a;\n      var y = b - bv;\n      var q0 = y;\n      var q1 = x;\n      var _x, _bv, _av, _br, _ar;\n      while (eptr < ne && fptr < nf) {\n        if (ea < fa) {\n          a = ei;\n          eptr += 1;\n          if (eptr < ne) {\n            ei = e[eptr];\n            ea = abs(ei);\n          }\n        } else {\n          a = fi;\n          fptr += 1;\n          if (fptr < nf) {\n            fi = f[fptr];\n            fa = abs(fi);\n          }\n        }\n        b = q0;\n        x = a + b;\n        bv = x - a;\n        y = b - bv;\n        if (y) {\n          g[count++] = y;\n        }\n        _x = q1 + x;\n        _bv = _x - q1;\n        _av = _x - _bv;\n        _br = x - _bv;\n        _ar = q1 - _av;\n        q0 = _ar + _br;\n        q1 = _x;\n      }\n      while (eptr < ne) {\n        a = ei;\n        b = q0;\n        x = a + b;\n        bv = x - a;\n        y = b - bv;\n        if (y) {\n          g[count++] = y;\n        }\n        _x = q1 + x;\n        _bv = _x - q1;\n        _av = _x - _bv;\n        _br = x - _bv;\n        _ar = q1 - _av;\n        q0 = _ar + _br;\n        q1 = _x;\n        eptr += 1;\n        if (eptr < ne) {\n          ei = e[eptr];\n        }\n      }\n      while (fptr < nf) {\n        a = fi;\n        b = q0;\n        x = a + b;\n        bv = x - a;\n        y = b - bv;\n        if (y) {\n          g[count++] = y;\n        }\n        _x = q1 + x;\n        _bv = _x - q1;\n        _av = _x - _bv;\n        _br = x - _bv;\n        _ar = q1 - _av;\n        q0 = _ar + _br;\n        q1 = _x;\n        fptr += 1;\n        if (fptr < nf) {\n          fi = f[fptr];\n        }\n      }\n      if (q0) {\n        g[count++] = q0;\n      }\n      if (q1) {\n        g[count++] = q1;\n      }\n      if (!count) {\n        g[count++] = 0;\n      }\n      g.length = count;\n      return g;\n    }\n  }\n});\n\n// node_modules/two-sum/two-sum.js\nvar require_two_sum = __commonJS({\n  \"node_modules/two-sum/two-sum.js\"(exports, module) {\n    \"use strict\";\n    module.exports = fastTwoSum;\n    function fastTwoSum(a, b, result) {\n      var x = a + b;\n      var bv = x - a;\n      var av = x - bv;\n      var br = b - bv;\n      var ar = a - av;\n      if (result) {\n        result[0] = ar + br;\n        result[1] = x;\n        return result;\n      }\n      return [ar + br, x];\n    }\n  }\n});\n\n// node_modules/robust-scale/robust-scale.js\nvar require_robust_scale = __commonJS({\n  \"node_modules/robust-scale/robust-scale.js\"(exports, module) {\n    \"use strict\";\n    var twoProduct = require_two_product();\n    var twoSum = require_two_sum();\n    module.exports = scaleLinearExpansion;\n    function scaleLinearExpansion(e, scale) {\n      var n = e.length;\n      if (n === 1) {\n        var ts = twoProduct(e[0], scale);\n        if (ts[0]) {\n          return ts;\n        }\n        return [ts[1]];\n      }\n      var g = new Array(2 * n);\n      var q = [0.1, 0.1];\n      var t = [0.1, 0.1];\n      var count = 0;\n      twoProduct(e[0], scale, q);\n      if (q[0]) {\n        g[count++] = q[0];\n      }\n      for (var i = 1; i < n; ++i) {\n        twoProduct(e[i], scale, t);\n        var pq = q[1];\n        twoSum(pq, t[0], q);\n        if (q[0]) {\n          g[count++] = q[0];\n        }\n        var a = t[1];\n        var b = q[1];\n        var x = a + b;\n        var bv = x - a;\n        var y = b - bv;\n        q[1] = x;\n        if (y) {\n          g[count++] = y;\n        }\n      }\n      if (q[1]) {\n        g[count++] = q[1];\n      }\n      if (count === 0) {\n        g[count++] = 0;\n      }\n      g.length = count;\n      return g;\n    }\n  }\n});\n\n// node_modules/robust-subtract/robust-diff.js\nvar require_robust_diff = __commonJS({\n  \"node_modules/robust-subtract/robust-diff.js\"(exports, module) {\n    \"use strict\";\n    module.exports = robustSubtract;\n    function scalarScalar(a, b) {\n      var x = a + b;\n      var bv = x - a;\n      var av = x - bv;\n      var br = b - bv;\n      var ar = a - av;\n      var y = ar + br;\n      if (y) {\n        return [y, x];\n      }\n      return [x];\n    }\n    function robustSubtract(e, f) {\n      var ne = e.length | 0;\n      var nf = f.length | 0;\n      if (ne === 1 && nf === 1) {\n        return scalarScalar(e[0], -f[0]);\n      }\n      var n = ne + nf;\n      var g = new Array(n);\n      var count = 0;\n      var eptr = 0;\n      var fptr = 0;\n      var abs = Math.abs;\n      var ei = e[eptr];\n      var ea = abs(ei);\n      var fi = -f[fptr];\n      var fa = abs(fi);\n      var a, b;\n      if (ea < fa) {\n        b = ei;\n        eptr += 1;\n        if (eptr < ne) {\n          ei = e[eptr];\n          ea = abs(ei);\n        }\n      } else {\n        b = fi;\n        fptr += 1;\n        if (fptr < nf) {\n          fi = -f[fptr];\n          fa = abs(fi);\n        }\n      }\n      if (eptr < ne && ea < fa || fptr >= nf) {\n        a = ei;\n        eptr += 1;\n        if (eptr < ne) {\n          ei = e[eptr];\n          ea = abs(ei);\n        }\n      } else {\n        a = fi;\n        fptr += 1;\n        if (fptr < nf) {\n          fi = -f[fptr];\n          fa = abs(fi);\n        }\n      }\n      var x = a + b;\n      var bv = x - a;\n      var y = b - bv;\n      var q0 = y;\n      var q1 = x;\n      var _x, _bv, _av, _br, _ar;\n      while (eptr < ne && fptr < nf) {\n        if (ea < fa) {\n          a = ei;\n          eptr += 1;\n          if (eptr < ne) {\n            ei = e[eptr];\n            ea = abs(ei);\n          }\n        } else {\n          a = fi;\n          fptr += 1;\n          if (fptr < nf) {\n            fi = -f[fptr];\n            fa = abs(fi);\n          }\n        }\n        b = q0;\n        x = a + b;\n        bv = x - a;\n        y = b - bv;\n        if (y) {\n          g[count++] = y;\n        }\n        _x = q1 + x;\n        _bv = _x - q1;\n        _av = _x - _bv;\n        _br = x - _bv;\n        _ar = q1 - _av;\n        q0 = _ar + _br;\n        q1 = _x;\n      }\n      while (eptr < ne) {\n        a = ei;\n        b = q0;\n        x = a + b;\n        bv = x - a;\n        y = b - bv;\n        if (y) {\n          g[count++] = y;\n        }\n        _x = q1 + x;\n        _bv = _x - q1;\n        _av = _x - _bv;\n        _br = x - _bv;\n        _ar = q1 - _av;\n        q0 = _ar + _br;\n        q1 = _x;\n        eptr += 1;\n        if (eptr < ne) {\n          ei = e[eptr];\n        }\n      }\n      while (fptr < nf) {\n        a = fi;\n        b = q0;\n        x = a + b;\n        bv = x - a;\n        y = b - bv;\n        if (y) {\n          g[count++] = y;\n        }\n        _x = q1 + x;\n        _bv = _x - q1;\n        _av = _x - _bv;\n        _br = x - _bv;\n        _ar = q1 - _av;\n        q0 = _ar + _br;\n        q1 = _x;\n        fptr += 1;\n        if (fptr < nf) {\n          fi = -f[fptr];\n        }\n      }\n      if (q0) {\n        g[count++] = q0;\n      }\n      if (q1) {\n        g[count++] = q1;\n      }\n      if (!count) {\n        g[count++] = 0;\n      }\n      g.length = count;\n      return g;\n    }\n  }\n});\n\n// node_modules/robust-orientation/orientation.js\nvar require_orientation = __commonJS({\n  \"node_modules/robust-orientation/orientation.js\"(exports, module) {\n    \"use strict\";\n    var twoProduct = require_two_product();\n    var robustSum = require_robust_sum();\n    var robustScale = require_robust_scale();\n    var robustSubtract = require_robust_diff();\n    var NUM_EXPAND = 5;\n    var EPSILON = 11102230246251565e-32;\n    var ERRBOUND3 = (3 + 16 * EPSILON) * EPSILON;\n    var ERRBOUND4 = (7 + 56 * EPSILON) * EPSILON;\n    function orientation_3(sum, prod, scale, sub) {\n      return function orientation3Exact2(m0, m1, m2) {\n        var p = sum(sum(prod(m1[1], m2[0]), prod(-m2[1], m1[0])), sum(prod(m0[1], m1[0]), prod(-m1[1], m0[0])));\n        var n = sum(prod(m0[1], m2[0]), prod(-m2[1], m0[0]));\n        var d = sub(p, n);\n        return d[d.length - 1];\n      };\n    }\n    function orientation_4(sum, prod, scale, sub) {\n      return function orientation4Exact2(m0, m1, m2, m3) {\n        var p = sum(sum(scale(sum(prod(m2[1], m3[0]), prod(-m3[1], m2[0])), m1[2]), sum(scale(sum(prod(m1[1], m3[0]), prod(-m3[1], m1[0])), -m2[2]), scale(sum(prod(m1[1], m2[0]), prod(-m2[1], m1[0])), m3[2]))), sum(scale(sum(prod(m1[1], m3[0]), prod(-m3[1], m1[0])), m0[2]), sum(scale(sum(prod(m0[1], m3[0]), prod(-m3[1], m0[0])), -m1[2]), scale(sum(prod(m0[1], m1[0]), prod(-m1[1], m0[0])), m3[2]))));\n        var n = sum(sum(scale(sum(prod(m2[1], m3[0]), prod(-m3[1], m2[0])), m0[2]), sum(scale(sum(prod(m0[1], m3[0]), prod(-m3[1], m0[0])), -m2[2]), scale(sum(prod(m0[1], m2[0]), prod(-m2[1], m0[0])), m3[2]))), sum(scale(sum(prod(m1[1], m2[0]), prod(-m2[1], m1[0])), m0[2]), sum(scale(sum(prod(m0[1], m2[0]), prod(-m2[1], m0[0])), -m1[2]), scale(sum(prod(m0[1], m1[0]), prod(-m1[1], m0[0])), m2[2]))));\n        var d = sub(p, n);\n        return d[d.length - 1];\n      };\n    }\n    function orientation_5(sum, prod, scale, sub) {\n      return function orientation5Exact(m0, m1, m2, m3, m4) {\n        var p = sum(sum(sum(scale(sum(scale(sum(prod(m3[1], m4[0]), prod(-m4[1], m3[0])), m2[2]), sum(scale(sum(prod(m2[1], m4[0]), prod(-m4[1], m2[0])), -m3[2]), scale(sum(prod(m2[1], m3[0]), prod(-m3[1], m2[0])), m4[2]))), m1[3]), sum(scale(sum(scale(sum(prod(m3[1], m4[0]), prod(-m4[1], m3[0])), m1[2]), sum(scale(sum(prod(m1[1], m4[0]), prod(-m4[1], m1[0])), -m3[2]), scale(sum(prod(m1[1], m3[0]), prod(-m3[1], m1[0])), m4[2]))), -m2[3]), scale(sum(scale(sum(prod(m2[1], m4[0]), prod(-m4[1], m2[0])), m1[2]), sum(scale(sum(prod(m1[1], m4[0]), prod(-m4[1], m1[0])), -m2[2]), scale(sum(prod(m1[1], m2[0]), prod(-m2[1], m1[0])), m4[2]))), m3[3]))), sum(scale(sum(scale(sum(prod(m2[1], m3[0]), prod(-m3[1], m2[0])), m1[2]), sum(scale(sum(prod(m1[1], m3[0]), prod(-m3[1], m1[0])), -m2[2]), scale(sum(prod(m1[1], m2[0]), prod(-m2[1], m1[0])), m3[2]))), -m4[3]), sum(scale(sum(scale(sum(prod(m3[1], m4[0]), prod(-m4[1], m3[0])), m1[2]), sum(scale(sum(prod(m1[1], m4[0]), prod(-m4[1], m1[0])), -m3[2]), scale(sum(prod(m1[1], m3[0]), prod(-m3[1], m1[0])), m4[2]))), m0[3]), scale(sum(scale(sum(prod(m3[1], m4[0]), prod(-m4[1], m3[0])), m0[2]), sum(scale(sum(prod(m0[1], m4[0]), prod(-m4[1], m0[0])), -m3[2]), scale(sum(prod(m0[1], m3[0]), prod(-m3[1], m0[0])), m4[2]))), -m1[3])))), sum(sum(scale(sum(scale(sum(prod(m1[1], m4[0]), prod(-m4[1], m1[0])), m0[2]), sum(scale(sum(prod(m0[1], m4[0]), prod(-m4[1], m0[0])), -m1[2]), scale(sum(prod(m0[1], m1[0]), prod(-m1[1], m0[0])), m4[2]))), m3[3]), sum(scale(sum(scale(sum(prod(m1[1], m3[0]), prod(-m3[1], m1[0])), m0[2]), sum(scale(sum(prod(m0[1], m3[0]), prod(-m3[1], m0[0])), -m1[2]), scale(sum(prod(m0[1], m1[0]), prod(-m1[1], m0[0])), m3[2]))), -m4[3]), scale(sum(scale(sum(prod(m2[1], m3[0]), prod(-m3[1], m2[0])), m1[2]), sum(scale(sum(prod(m1[1], m3[0]), prod(-m3[1], m1[0])), -m2[2]), scale(sum(prod(m1[1], m2[0]), prod(-m2[1], m1[0])), m3[2]))), m0[3]))), sum(scale(sum(scale(sum(prod(m2[1], m3[0]), prod(-m3[1], m2[0])), m0[2]), sum(scale(sum(prod(m0[1], m3[0]), prod(-m3[1], m0[0])), -m2[2]), scale(sum(prod(m0[1], m2[0]), prod(-m2[1], m0[0])), m3[2]))), -m1[3]), sum(scale(sum(scale(sum(prod(m1[1], m3[0]), prod(-m3[1], m1[0])), m0[2]), sum(scale(sum(prod(m0[1], m3[0]), prod(-m3[1], m0[0])), -m1[2]), scale(sum(prod(m0[1], m1[0]), prod(-m1[1], m0[0])), m3[2]))), m2[3]), scale(sum(scale(sum(prod(m1[1], m2[0]), prod(-m2[1], m1[0])), m0[2]), sum(scale(sum(prod(m0[1], m2[0]), prod(-m2[1], m0[0])), -m1[2]), scale(sum(prod(m0[1], m1[0]), prod(-m1[1], m0[0])), m2[2]))), -m3[3])))));\n        var n = sum(sum(sum(scale(sum(scale(sum(prod(m3[1], m4[0]), prod(-m4[1], m3[0])), m2[2]), sum(scale(sum(prod(m2[1], m4[0]), prod(-m4[1], m2[0])), -m3[2]), scale(sum(prod(m2[1], m3[0]), prod(-m3[1], m2[0])), m4[2]))), m0[3]), scale(sum(scale(sum(prod(m3[1], m4[0]), prod(-m4[1], m3[0])), m0[2]), sum(scale(sum(prod(m0[1], m4[0]), prod(-m4[1], m0[0])), -m3[2]), scale(sum(prod(m0[1], m3[0]), prod(-m3[1], m0[0])), m4[2]))), -m2[3])), sum(scale(sum(scale(sum(prod(m2[1], m4[0]), prod(-m4[1], m2[0])), m0[2]), sum(scale(sum(prod(m0[1], m4[0]), prod(-m4[1], m0[0])), -m2[2]), scale(sum(prod(m0[1], m2[0]), prod(-m2[1], m0[0])), m4[2]))), m3[3]), scale(sum(scale(sum(prod(m2[1], m3[0]), prod(-m3[1], m2[0])), m0[2]), sum(scale(sum(prod(m0[1], m3[0]), prod(-m3[1], m0[0])), -m2[2]), scale(sum(prod(m0[1], m2[0]), prod(-m2[1], m0[0])), m3[2]))), -m4[3]))), sum(sum(scale(sum(scale(sum(prod(m2[1], m4[0]), prod(-m4[1], m2[0])), m1[2]), sum(scale(sum(prod(m1[1], m4[0]), prod(-m4[1], m1[0])), -m2[2]), scale(sum(prod(m1[1], m2[0]), prod(-m2[1], m1[0])), m4[2]))), m0[3]), scale(sum(scale(sum(prod(m2[1], m4[0]), prod(-m4[1], m2[0])), m0[2]), sum(scale(sum(prod(m0[1], m4[0]), prod(-m4[1], m0[0])), -m2[2]), scale(sum(prod(m0[1], m2[0]), prod(-m2[1], m0[0])), m4[2]))), -m1[3])), sum(scale(sum(scale(sum(prod(m1[1], m4[0]), prod(-m4[1], m1[0])), m0[2]), sum(scale(sum(prod(m0[1], m4[0]), prod(-m4[1], m0[0])), -m1[2]), scale(sum(prod(m0[1], m1[0]), prod(-m1[1], m0[0])), m4[2]))), m2[3]), scale(sum(scale(sum(prod(m1[1], m2[0]), prod(-m2[1], m1[0])), m0[2]), sum(scale(sum(prod(m0[1], m2[0]), prod(-m2[1], m0[0])), -m1[2]), scale(sum(prod(m0[1], m1[0]), prod(-m1[1], m0[0])), m2[2]))), -m4[3]))));\n        var d = sub(p, n);\n        return d[d.length - 1];\n      };\n    }\n    function orientation(n) {\n      var fn = n === 3 ? orientation_3 : n === 4 ? orientation_4 : orientation_5;\n      return fn(robustSum, twoProduct, robustScale, robustSubtract);\n    }\n    var orientation3Exact = orientation(3);\n    var orientation4Exact = orientation(4);\n    var CACHED = [\n      function orientation0() {\n        return 0;\n      },\n      function orientation1() {\n        return 0;\n      },\n      function orientation2(a, b) {\n        return b[0] - a[0];\n      },\n      function orientation3(a, b, c) {\n        var l = (a[1] - c[1]) * (b[0] - c[0]);\n        var r = (a[0] - c[0]) * (b[1] - c[1]);\n        var det = l - r;\n        var s;\n        if (l > 0) {\n          if (r <= 0) {\n            return det;\n          } else {\n            s = l + r;\n          }\n        } else if (l < 0) {\n          if (r >= 0) {\n            return det;\n          } else {\n            s = -(l + r);\n          }\n        } else {\n          return det;\n        }\n        var tol = ERRBOUND3 * s;\n        if (det >= tol || det <= -tol) {\n          return det;\n        }\n        return orientation3Exact(a, b, c);\n      },\n      function orientation4(a, b, c, d) {\n        var adx = a[0] - d[0];\n        var bdx = b[0] - d[0];\n        var cdx = c[0] - d[0];\n        var ady = a[1] - d[1];\n        var bdy = b[1] - d[1];\n        var cdy = c[1] - d[1];\n        var adz = a[2] - d[2];\n        var bdz = b[2] - d[2];\n        var cdz = c[2] - d[2];\n        var bdxcdy = bdx * cdy;\n        var cdxbdy = cdx * bdy;\n        var cdxady = cdx * ady;\n        var adxcdy = adx * cdy;\n        var adxbdy = adx * bdy;\n        var bdxady = bdx * ady;\n        var det = adz * (bdxcdy - cdxbdy) + bdz * (cdxady - adxcdy) + cdz * (adxbdy - bdxady);\n        var permanent = (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * Math.abs(adz) + (Math.abs(cdxady) + Math.abs(adxcdy)) * Math.abs(bdz) + (Math.abs(adxbdy) + Math.abs(bdxady)) * Math.abs(cdz);\n        var tol = ERRBOUND4 * permanent;\n        if (det > tol || -det > tol) {\n          return det;\n        }\n        return orientation4Exact(a, b, c, d);\n      }\n    ];\n    function slowOrient(args) {\n      var proc2 = CACHED[args.length];\n      if (!proc2) {\n        proc2 = CACHED[args.length] = orientation(args.length);\n      }\n      return proc2.apply(void 0, args);\n    }\n    function proc(slow, o0, o1, o2, o3, o4, o5) {\n      return function getOrientation(a0, a1, a2, a3, a4) {\n        switch (arguments.length) {\n          case 0:\n          case 1:\n            return 0;\n          case 2:\n            return o2(a0, a1);\n          case 3:\n            return o3(a0, a1, a2);\n          case 4:\n            return o4(a0, a1, a2, a3);\n          case 5:\n            return o5(a0, a1, a2, a3, a4);\n        }\n        var s = new Array(arguments.length);\n        for (var i = 0; i < arguments.length; ++i) {\n          s[i] = arguments[i];\n        }\n        return slow(s);\n      };\n    }\n    function generateOrientationProc() {\n      while (CACHED.length <= NUM_EXPAND) {\n        CACHED.push(orientation(CACHED.length));\n      }\n      module.exports = proc.apply(void 0, [slowOrient].concat(CACHED));\n      for (var i = 0; i <= NUM_EXPAND; ++i) {\n        module.exports[i] = CACHED[i];\n      }\n    }\n    generateOrientationProc();\n  }\n});\n\n// node_modules/cdt2d/lib/monotone.js\nvar require_monotone = __commonJS({\n  \"node_modules/cdt2d/lib/monotone.js\"(exports, module) {\n    \"use strict\";\n    var bsearch = require_search_bounds();\n    var orient = require_orientation()[3];\n    var EVENT_POINT = 0;\n    var EVENT_END = 1;\n    var EVENT_START = 2;\n    module.exports = monotoneTriangulate;\n    function PartialHull(a, b, idx, lowerIds, upperIds) {\n      this.a = a;\n      this.b = b;\n      this.idx = idx;\n      this.lowerIds = lowerIds;\n      this.upperIds = upperIds;\n    }\n    function Event(a, b, type, idx) {\n      this.a = a;\n      this.b = b;\n      this.type = type;\n      this.idx = idx;\n    }\n    function compareEvent(a, b) {\n      var d = a.a[0] - b.a[0] || a.a[1] - b.a[1] || a.type - b.type;\n      if (d) {\n        return d;\n      }\n      if (a.type !== EVENT_POINT) {\n        d = orient(a.a, a.b, b.b);\n        if (d) {\n          return d;\n        }\n      }\n      return a.idx - b.idx;\n    }\n    function testPoint(hull, p) {\n      return orient(hull.a, hull.b, p);\n    }\n    function addPoint(cells, hulls, points, p, idx) {\n      var lo = bsearch.lt(hulls, p, testPoint);\n      var hi = bsearch.gt(hulls, p, testPoint);\n      for (var i = lo; i < hi; ++i) {\n        var hull = hulls[i];\n        var lowerIds = hull.lowerIds;\n        var m = lowerIds.length;\n        while (m > 1 && orient(\n          points[lowerIds[m - 2]],\n          points[lowerIds[m - 1]],\n          p\n        ) > 0) {\n          cells.push(\n            [\n              lowerIds[m - 1],\n              lowerIds[m - 2],\n              idx\n            ]\n          );\n          m -= 1;\n        }\n        lowerIds.length = m;\n        lowerIds.push(idx);\n        var upperIds = hull.upperIds;\n        var m = upperIds.length;\n        while (m > 1 && orient(\n          points[upperIds[m - 2]],\n          points[upperIds[m - 1]],\n          p\n        ) < 0) {\n          cells.push(\n            [\n              upperIds[m - 2],\n              upperIds[m - 1],\n              idx\n            ]\n          );\n          m -= 1;\n        }\n        upperIds.length = m;\n        upperIds.push(idx);\n      }\n    }\n    function findSplit(hull, edge) {\n      var d;\n      if (hull.a[0] < edge.a[0]) {\n        d = orient(hull.a, hull.b, edge.a);\n      } else {\n        d = orient(edge.b, edge.a, hull.a);\n      }\n      if (d) {\n        return d;\n      }\n      if (edge.b[0] < hull.b[0]) {\n        d = orient(hull.a, hull.b, edge.b);\n      } else {\n        d = orient(edge.b, edge.a, hull.b);\n      }\n      return d || hull.idx - edge.idx;\n    }\n    function splitHulls(hulls, points, event) {\n      var splitIdx = bsearch.le(hulls, event, findSplit);\n      var hull = hulls[splitIdx];\n      var upperIds = hull.upperIds;\n      var x = upperIds[upperIds.length - 1];\n      hull.upperIds = [x];\n      hulls.splice(\n        splitIdx + 1,\n        0,\n        new PartialHull(event.a, event.b, event.idx, [x], upperIds)\n      );\n    }\n    function mergeHulls(hulls, points, event) {\n      var tmp = event.a;\n      event.a = event.b;\n      event.b = tmp;\n      var mergeIdx = bsearch.eq(hulls, event, findSplit);\n      var upper = hulls[mergeIdx];\n      var lower = hulls[mergeIdx - 1];\n      lower.upperIds = upper.upperIds;\n      hulls.splice(mergeIdx, 1);\n    }\n    function monotoneTriangulate(points, edges) {\n      var numPoints = points.length;\n      var numEdges = edges.length;\n      var events = [];\n      for (var i = 0; i < numPoints; ++i) {\n        events.push(new Event(\n          points[i],\n          null,\n          EVENT_POINT,\n          i\n        ));\n      }\n      for (var i = 0; i < numEdges; ++i) {\n        var e = edges[i];\n        var a = points[e[0]];\n        var b = points[e[1]];\n        if (a[0] < b[0]) {\n          events.push(\n            new Event(a, b, EVENT_START, i),\n            new Event(b, a, EVENT_END, i)\n          );\n        } else if (a[0] > b[0]) {\n          events.push(\n            new Event(b, a, EVENT_START, i),\n            new Event(a, b, EVENT_END, i)\n          );\n        }\n      }\n      events.sort(compareEvent);\n      var minX = events[0].a[0] - (1 + Math.abs(events[0].a[0])) * Math.pow(2, -52);\n      var hull = [new PartialHull([minX, 1], [minX, 0], -1, [], [], [], [])];\n      var cells = [];\n      for (var i = 0, numEvents = events.length; i < numEvents; ++i) {\n        var event = events[i];\n        var type = event.type;\n        if (type === EVENT_POINT) {\n          addPoint(cells, hull, points, event.a, event.idx);\n        } else if (type === EVENT_START) {\n          splitHulls(hull, points, event);\n        } else {\n          mergeHulls(hull, points, event);\n        }\n      }\n      return cells;\n    }\n  }\n});\n\n// node_modules/cdt2d/lib/triangulation.js\nvar require_triangulation = __commonJS({\n  \"node_modules/cdt2d/lib/triangulation.js\"(exports, module) {\n    \"use strict\";\n    var bsearch = require_search_bounds();\n    module.exports = createTriangulation;\n    function Triangulation(stars, edges) {\n      this.stars = stars;\n      this.edges = edges;\n    }\n    var proto = Triangulation.prototype;\n    function removePair(list, j, k) {\n      for (var i = 1, n = list.length; i < n; i += 2) {\n        if (list[i - 1] === j && list[i] === k) {\n          list[i - 1] = list[n - 2];\n          list[i] = list[n - 1];\n          list.length = n - 2;\n          return;\n        }\n      }\n    }\n    proto.isConstraint = /* @__PURE__ */ (function() {\n      var e = [0, 0];\n      function compareLex(a, b) {\n        return a[0] - b[0] || a[1] - b[1];\n      }\n      return function(i, j) {\n        e[0] = Math.min(i, j);\n        e[1] = Math.max(i, j);\n        return bsearch.eq(this.edges, e, compareLex) >= 0;\n      };\n    })();\n    proto.removeTriangle = function(i, j, k) {\n      var stars = this.stars;\n      removePair(stars[i], j, k);\n      removePair(stars[j], k, i);\n      removePair(stars[k], i, j);\n    };\n    proto.addTriangle = function(i, j, k) {\n      var stars = this.stars;\n      stars[i].push(j, k);\n      stars[j].push(k, i);\n      stars[k].push(i, j);\n    };\n    proto.opposite = function(j, i) {\n      var list = this.stars[i];\n      for (var k = 1, n = list.length; k < n; k += 2) {\n        if (list[k] === j) {\n          return list[k - 1];\n        }\n      }\n      return -1;\n    };\n    proto.flip = function(i, j) {\n      var a = this.opposite(i, j);\n      var b = this.opposite(j, i);\n      this.removeTriangle(i, j, a);\n      this.removeTriangle(j, i, b);\n      this.addTriangle(i, b, a);\n      this.addTriangle(j, a, b);\n    };\n    proto.edges = function() {\n      var stars = this.stars;\n      var result = [];\n      for (var i = 0, n = stars.length; i < n; ++i) {\n        var list = stars[i];\n        for (var j = 0, m = list.length; j < m; j += 2) {\n          result.push([list[j], list[j + 1]]);\n        }\n      }\n      return result;\n    };\n    proto.cells = function() {\n      var stars = this.stars;\n      var result = [];\n      for (var i = 0, n = stars.length; i < n; ++i) {\n        var list = stars[i];\n        for (var j = 0, m = list.length; j < m; j += 2) {\n          var s = list[j];\n          var t = list[j + 1];\n          if (i < Math.min(s, t)) {\n            result.push([i, s, t]);\n          }\n        }\n      }\n      return result;\n    };\n    function createTriangulation(numVerts, edges) {\n      var stars = new Array(numVerts);\n      for (var i = 0; i < numVerts; ++i) {\n        stars[i] = [];\n      }\n      return new Triangulation(stars, edges);\n    }\n  }\n});\n\n// node_modules/robust-in-sphere/in-sphere.js\nvar require_in_sphere = __commonJS({\n  \"node_modules/robust-in-sphere/in-sphere.js\"(exports, module) {\n    \"use strict\";\n    var twoProduct = require_two_product();\n    var robustSum = require_robust_sum();\n    var robustDiff = require_robust_diff();\n    var robustScale = require_robust_scale();\n    var NUM_EXPAND = 6;\n    function orientation(n) {\n      var fn = n === 3 ? inSphere3 : n === 4 ? inSphere4 : n === 5 ? inSphere5 : inSphere6;\n      return fn(robustSum, robustDiff, twoProduct, robustScale);\n    }\n    function inSphere0() {\n      return 0;\n    }\n    function inSphere1() {\n      return 0;\n    }\n    function inSphere2() {\n      return 0;\n    }\n    function inSphere3(sum, diff, prod, scale) {\n      function exactInSphere3(m0, m1, m2) {\n        var w0 = prod(m0[0], m0[0]);\n        var w0m1 = scale(w0, m1[0]);\n        var w0m2 = scale(w0, m2[0]);\n        var w1 = prod(m1[0], m1[0]);\n        var w1m0 = scale(w1, m0[0]);\n        var w1m2 = scale(w1, m2[0]);\n        var w2 = prod(m2[0], m2[0]);\n        var w2m0 = scale(w2, m0[0]);\n        var w2m1 = scale(w2, m1[0]);\n        var p = sum(diff(w2m1, w1m2), diff(w1m0, w0m1));\n        var n = diff(w2m0, w0m2);\n        var d = diff(p, n);\n        return d[d.length - 1];\n      }\n      return exactInSphere3;\n    }\n    function inSphere4(sum, diff, prod, scale) {\n      function exactInSphere4(m0, m1, m2, m3) {\n        var w0 = sum(prod(m0[0], m0[0]), prod(m0[1], m0[1]));\n        var w0m1 = scale(w0, m1[0]);\n        var w0m2 = scale(w0, m2[0]);\n        var w0m3 = scale(w0, m3[0]);\n        var w1 = sum(prod(m1[0], m1[0]), prod(m1[1], m1[1]));\n        var w1m0 = scale(w1, m0[0]);\n        var w1m2 = scale(w1, m2[0]);\n        var w1m3 = scale(w1, m3[0]);\n        var w2 = sum(prod(m2[0], m2[0]), prod(m2[1], m2[1]));\n        var w2m0 = scale(w2, m0[0]);\n        var w2m1 = scale(w2, m1[0]);\n        var w2m3 = scale(w2, m3[0]);\n        var w3 = sum(prod(m3[0], m3[0]), prod(m3[1], m3[1]));\n        var w3m0 = scale(w3, m0[0]);\n        var w3m1 = scale(w3, m1[0]);\n        var w3m2 = scale(w3, m2[0]);\n        var p = sum(sum(scale(diff(w3m2, w2m3), m1[1]), sum(scale(diff(w3m1, w1m3), -m2[1]), scale(diff(w2m1, w1m2), m3[1]))), sum(scale(diff(w3m1, w1m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m1[1]), scale(diff(w1m0, w0m1), m3[1]))));\n        var n = sum(sum(scale(diff(w3m2, w2m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m2[1]), scale(diff(w2m0, w0m2), m3[1]))), sum(scale(diff(w2m1, w1m2), m0[1]), sum(scale(diff(w2m0, w0m2), -m1[1]), scale(diff(w1m0, w0m1), m2[1]))));\n        var d = diff(p, n);\n        return d[d.length - 1];\n      }\n      return exactInSphere4;\n    }\n    function inSphere5(sum, diff, prod, scale) {\n      function exactInSphere5(m0, m1, m2, m3, m4) {\n        var w0 = sum(prod(m0[0], m0[0]), sum(prod(m0[1], m0[1]), prod(m0[2], m0[2])));\n        var w0m1 = scale(w0, m1[0]);\n        var w0m2 = scale(w0, m2[0]);\n        var w0m3 = scale(w0, m3[0]);\n        var w0m4 = scale(w0, m4[0]);\n        var w1 = sum(prod(m1[0], m1[0]), sum(prod(m1[1], m1[1]), prod(m1[2], m1[2])));\n        var w1m0 = scale(w1, m0[0]);\n        var w1m2 = scale(w1, m2[0]);\n        var w1m3 = scale(w1, m3[0]);\n        var w1m4 = scale(w1, m4[0]);\n        var w2 = sum(prod(m2[0], m2[0]), sum(prod(m2[1], m2[1]), prod(m2[2], m2[2])));\n        var w2m0 = scale(w2, m0[0]);\n        var w2m1 = scale(w2, m1[0]);\n        var w2m3 = scale(w2, m3[0]);\n        var w2m4 = scale(w2, m4[0]);\n        var w3 = sum(prod(m3[0], m3[0]), sum(prod(m3[1], m3[1]), prod(m3[2], m3[2])));\n        var w3m0 = scale(w3, m0[0]);\n        var w3m1 = scale(w3, m1[0]);\n        var w3m2 = scale(w3, m2[0]);\n        var w3m4 = scale(w3, m4[0]);\n        var w4 = sum(prod(m4[0], m4[0]), sum(prod(m4[1], m4[1]), prod(m4[2], m4[2])));\n        var w4m0 = scale(w4, m0[0]);\n        var w4m1 = scale(w4, m1[0]);\n        var w4m2 = scale(w4, m2[0]);\n        var w4m3 = scale(w4, m3[0]);\n        var p = sum(sum(sum(scale(sum(scale(diff(w4m3, w3m4), m2[1]), sum(scale(diff(w4m2, w2m4), -m3[1]), scale(diff(w3m2, w2m3), m4[1]))), m1[2]), sum(scale(sum(scale(diff(w4m3, w3m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m3[1]), scale(diff(w3m1, w1m3), m4[1]))), -m2[2]), scale(sum(scale(diff(w4m2, w2m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m2[1]), scale(diff(w2m1, w1m2), m4[1]))), m3[2]))), sum(scale(sum(scale(diff(w3m2, w2m3), m1[1]), sum(scale(diff(w3m1, w1m3), -m2[1]), scale(diff(w2m1, w1m2), m3[1]))), -m4[2]), sum(scale(sum(scale(diff(w4m3, w3m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m3[1]), scale(diff(w3m1, w1m3), m4[1]))), m0[2]), scale(sum(scale(diff(w4m3, w3m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m3[1]), scale(diff(w3m0, w0m3), m4[1]))), -m1[2])))), sum(sum(scale(sum(scale(diff(w4m1, w1m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m1[1]), scale(diff(w1m0, w0m1), m4[1]))), m3[2]), sum(scale(sum(scale(diff(w3m1, w1m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m1[1]), scale(diff(w1m0, w0m1), m3[1]))), -m4[2]), scale(sum(scale(diff(w3m2, w2m3), m1[1]), sum(scale(diff(w3m1, w1m3), -m2[1]), scale(diff(w2m1, w1m2), m3[1]))), m0[2]))), sum(scale(sum(scale(diff(w3m2, w2m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m2[1]), scale(diff(w2m0, w0m2), m3[1]))), -m1[2]), sum(scale(sum(scale(diff(w3m1, w1m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m1[1]), scale(diff(w1m0, w0m1), m3[1]))), m2[2]), scale(sum(scale(diff(w2m1, w1m2), m0[1]), sum(scale(diff(w2m0, w0m2), -m1[1]), scale(diff(w1m0, w0m1), m2[1]))), -m3[2])))));\n        var n = sum(sum(sum(scale(sum(scale(diff(w4m3, w3m4), m2[1]), sum(scale(diff(w4m2, w2m4), -m3[1]), scale(diff(w3m2, w2m3), m4[1]))), m0[2]), scale(sum(scale(diff(w4m3, w3m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m3[1]), scale(diff(w3m0, w0m3), m4[1]))), -m2[2])), sum(scale(sum(scale(diff(w4m2, w2m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m2[1]), scale(diff(w2m0, w0m2), m4[1]))), m3[2]), scale(sum(scale(diff(w3m2, w2m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m2[1]), scale(diff(w2m0, w0m2), m3[1]))), -m4[2]))), sum(sum(scale(sum(scale(diff(w4m2, w2m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m2[1]), scale(diff(w2m1, w1m2), m4[1]))), m0[2]), scale(sum(scale(diff(w4m2, w2m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m2[1]), scale(diff(w2m0, w0m2), m4[1]))), -m1[2])), sum(scale(sum(scale(diff(w4m1, w1m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m1[1]), scale(diff(w1m0, w0m1), m4[1]))), m2[2]), scale(sum(scale(diff(w2m1, w1m2), m0[1]), sum(scale(diff(w2m0, w0m2), -m1[1]), scale(diff(w1m0, w0m1), m2[1]))), -m4[2]))));\n        var d = diff(p, n);\n        return d[d.length - 1];\n      }\n      return exactInSphere5;\n    }\n    function inSphere6(sum, diff, prod, scale) {\n      function exactInSphere6(m0, m1, m2, m3, m4, m5) {\n        var w0 = sum(sum(prod(m0[0], m0[0]), prod(m0[1], m0[1])), sum(prod(m0[2], m0[2]), prod(m0[3], m0[3])));\n        var w0m1 = scale(w0, m1[0]);\n        var w0m2 = scale(w0, m2[0]);\n        var w0m3 = scale(w0, m3[0]);\n        var w0m4 = scale(w0, m4[0]);\n        var w0m5 = scale(w0, m5[0]);\n        var w1 = sum(sum(prod(m1[0], m1[0]), prod(m1[1], m1[1])), sum(prod(m1[2], m1[2]), prod(m1[3], m1[3])));\n        var w1m0 = scale(w1, m0[0]);\n        var w1m2 = scale(w1, m2[0]);\n        var w1m3 = scale(w1, m3[0]);\n        var w1m4 = scale(w1, m4[0]);\n        var w1m5 = scale(w1, m5[0]);\n        var w2 = sum(sum(prod(m2[0], m2[0]), prod(m2[1], m2[1])), sum(prod(m2[2], m2[2]), prod(m2[3], m2[3])));\n        var w2m0 = scale(w2, m0[0]);\n        var w2m1 = scale(w2, m1[0]);\n        var w2m3 = scale(w2, m3[0]);\n        var w2m4 = scale(w2, m4[0]);\n        var w2m5 = scale(w2, m5[0]);\n        var w3 = sum(sum(prod(m3[0], m3[0]), prod(m3[1], m3[1])), sum(prod(m3[2], m3[2]), prod(m3[3], m3[3])));\n        var w3m0 = scale(w3, m0[0]);\n        var w3m1 = scale(w3, m1[0]);\n        var w3m2 = scale(w3, m2[0]);\n        var w3m4 = scale(w3, m4[0]);\n        var w3m5 = scale(w3, m5[0]);\n        var w4 = sum(sum(prod(m4[0], m4[0]), prod(m4[1], m4[1])), sum(prod(m4[2], m4[2]), prod(m4[3], m4[3])));\n        var w4m0 = scale(w4, m0[0]);\n        var w4m1 = scale(w4, m1[0]);\n        var w4m2 = scale(w4, m2[0]);\n        var w4m3 = scale(w4, m3[0]);\n        var w4m5 = scale(w4, m5[0]);\n        var w5 = sum(sum(prod(m5[0], m5[0]), prod(m5[1], m5[1])), sum(prod(m5[2], m5[2]), prod(m5[3], m5[3])));\n        var w5m0 = scale(w5, m0[0]);\n        var w5m1 = scale(w5, m1[0]);\n        var w5m2 = scale(w5, m2[0]);\n        var w5m3 = scale(w5, m3[0]);\n        var w5m4 = scale(w5, m4[0]);\n        var p = sum(sum(sum(scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m3[1]), sum(scale(diff(w5m3, w3m5), -m4[1]), scale(diff(w4m3, w3m4), m5[1]))), m2[2]), scale(sum(scale(diff(w5m4, w4m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m4[1]), scale(diff(w4m2, w2m4), m5[1]))), -m3[2])), sum(scale(sum(scale(diff(w5m3, w3m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m3[1]), scale(diff(w3m2, w2m3), m5[1]))), m4[2]), scale(sum(scale(diff(w4m3, w3m4), m2[1]), sum(scale(diff(w4m2, w2m4), -m3[1]), scale(diff(w3m2, w2m3), m4[1]))), -m5[2]))), m1[3]), sum(scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m3[1]), sum(scale(diff(w5m3, w3m5), -m4[1]), scale(diff(w4m3, w3m4), m5[1]))), m1[2]), scale(sum(scale(diff(w5m4, w4m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m4[1]), scale(diff(w4m1, w1m4), m5[1]))), -m3[2])), sum(scale(sum(scale(diff(w5m3, w3m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m3[1]), scale(diff(w3m1, w1m3), m5[1]))), m4[2]), scale(sum(scale(diff(w4m3, w3m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m3[1]), scale(diff(w3m1, w1m3), m4[1]))), -m5[2]))), -m2[3]), scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m4[1]), scale(diff(w4m2, w2m4), m5[1]))), m1[2]), scale(sum(scale(diff(w5m4, w4m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m4[1]), scale(diff(w4m1, w1m4), m5[1]))), -m2[2])), sum(scale(sum(scale(diff(w5m2, w2m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m2[1]), scale(diff(w2m1, w1m2), m5[1]))), m4[2]), scale(sum(scale(diff(w4m2, w2m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m2[1]), scale(diff(w2m1, w1m2), m4[1]))), -m5[2]))), m3[3]))), sum(sum(scale(sum(sum(scale(sum(scale(diff(w5m3, w3m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m3[1]), scale(diff(w3m2, w2m3), m5[1]))), m1[2]), scale(sum(scale(diff(w5m3, w3m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m3[1]), scale(diff(w3m1, w1m3), m5[1]))), -m2[2])), sum(scale(sum(scale(diff(w5m2, w2m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m2[1]), scale(diff(w2m1, w1m2), m5[1]))), m3[2]), scale(sum(scale(diff(w3m2, w2m3), m1[1]), sum(scale(diff(w3m1, w1m3), -m2[1]), scale(diff(w2m1, w1m2), m3[1]))), -m5[2]))), -m4[3]), scale(sum(sum(scale(sum(scale(diff(w4m3, w3m4), m2[1]), sum(scale(diff(w4m2, w2m4), -m3[1]), scale(diff(w3m2, w2m3), m4[1]))), m1[2]), scale(sum(scale(diff(w4m3, w3m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m3[1]), scale(diff(w3m1, w1m3), m4[1]))), -m2[2])), sum(scale(sum(scale(diff(w4m2, w2m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m2[1]), scale(diff(w2m1, w1m2), m4[1]))), m3[2]), scale(sum(scale(diff(w3m2, w2m3), m1[1]), sum(scale(diff(w3m1, w1m3), -m2[1]), scale(diff(w2m1, w1m2), m3[1]))), -m4[2]))), m5[3])), sum(scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m3[1]), sum(scale(diff(w5m3, w3m5), -m4[1]), scale(diff(w4m3, w3m4), m5[1]))), m1[2]), scale(sum(scale(diff(w5m4, w4m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m4[1]), scale(diff(w4m1, w1m4), m5[1]))), -m3[2])), sum(scale(sum(scale(diff(w5m3, w3m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m3[1]), scale(diff(w3m1, w1m3), m5[1]))), m4[2]), scale(sum(scale(diff(w4m3, w3m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m3[1]), scale(diff(w3m1, w1m3), m4[1]))), -m5[2]))), m0[3]), scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m3[1]), sum(scale(diff(w5m3, w3m5), -m4[1]), scale(diff(w4m3, w3m4), m5[1]))), m0[2]), scale(sum(scale(diff(w5m4, w4m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m4[1]), scale(diff(w4m0, w0m4), m5[1]))), -m3[2])), sum(scale(sum(scale(diff(w5m3, w3m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m3[1]), scale(diff(w3m0, w0m3), m5[1]))), m4[2]), scale(sum(scale(diff(w4m3, w3m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m3[1]), scale(diff(w3m0, w0m3), m4[1]))), -m5[2]))), -m1[3])))), sum(sum(sum(scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m4[1]), scale(diff(w4m1, w1m4), m5[1]))), m0[2]), scale(sum(scale(diff(w5m4, w4m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m4[1]), scale(diff(w4m0, w0m4), m5[1]))), -m1[2])), sum(scale(sum(scale(diff(w5m1, w1m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m1[1]), scale(diff(w1m0, w0m1), m5[1]))), m4[2]), scale(sum(scale(diff(w4m1, w1m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m1[1]), scale(diff(w1m0, w0m1), m4[1]))), -m5[2]))), m3[3]), scale(sum(sum(scale(sum(scale(diff(w5m3, w3m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m3[1]), scale(diff(w3m1, w1m3), m5[1]))), m0[2]), scale(sum(scale(diff(w5m3, w3m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m3[1]), scale(diff(w3m0, w0m3), m5[1]))), -m1[2])), sum(scale(sum(scale(diff(w5m1, w1m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m1[1]), scale(diff(w1m0, w0m1), m5[1]))), m3[2]), scale(sum(scale(diff(w3m1, w1m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m1[1]), scale(diff(w1m0, w0m1), m3[1]))), -m5[2]))), -m4[3])), sum(scale(sum(sum(scale(sum(scale(diff(w4m3, w3m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m3[1]), scale(diff(w3m1, w1m3), m4[1]))), m0[2]), scale(sum(scale(diff(w4m3, w3m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m3[1]), scale(diff(w3m0, w0m3), m4[1]))), -m1[2])), sum(scale(sum(scale(diff(w4m1, w1m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m1[1]), scale(diff(w1m0, w0m1), m4[1]))), m3[2]), scale(sum(scale(diff(w3m1, w1m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m1[1]), scale(diff(w1m0, w0m1), m3[1]))), -m4[2]))), m5[3]), scale(sum(sum(scale(sum(scale(diff(w5m3, w3m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m3[1]), scale(diff(w3m2, w2m3), m5[1]))), m1[2]), scale(sum(scale(diff(w5m3, w3m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m3[1]), scale(diff(w3m1, w1m3), m5[1]))), -m2[2])), sum(scale(sum(scale(diff(w5m2, w2m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m2[1]), scale(diff(w2m1, w1m2), m5[1]))), m3[2]), scale(sum(scale(diff(w3m2, w2m3), m1[1]), sum(scale(diff(w3m1, w1m3), -m2[1]), scale(diff(w2m1, w1m2), m3[1]))), -m5[2]))), m0[3]))), sum(sum(scale(sum(sum(scale(sum(scale(diff(w5m3, w3m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m3[1]), scale(diff(w3m2, w2m3), m5[1]))), m0[2]), scale(sum(scale(diff(w5m3, w3m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m3[1]), scale(diff(w3m0, w0m3), m5[1]))), -m2[2])), sum(scale(sum(scale(diff(w5m2, w2m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m2[1]), scale(diff(w2m0, w0m2), m5[1]))), m3[2]), scale(sum(scale(diff(w3m2, w2m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m2[1]), scale(diff(w2m0, w0m2), m3[1]))), -m5[2]))), -m1[3]), scale(sum(sum(scale(sum(scale(diff(w5m3, w3m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m3[1]), scale(diff(w3m1, w1m3), m5[1]))), m0[2]), scale(sum(scale(diff(w5m3, w3m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m3[1]), scale(diff(w3m0, w0m3), m5[1]))), -m1[2])), sum(scale(sum(scale(diff(w5m1, w1m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m1[1]), scale(diff(w1m0, w0m1), m5[1]))), m3[2]), scale(sum(scale(diff(w3m1, w1m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m1[1]), scale(diff(w1m0, w0m1), m3[1]))), -m5[2]))), m2[3])), sum(scale(sum(sum(scale(sum(scale(diff(w5m2, w2m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m2[1]), scale(diff(w2m1, w1m2), m5[1]))), m0[2]), scale(sum(scale(diff(w5m2, w2m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m2[1]), scale(diff(w2m0, w0m2), m5[1]))), -m1[2])), sum(scale(sum(scale(diff(w5m1, w1m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m1[1]), scale(diff(w1m0, w0m1), m5[1]))), m2[2]), scale(sum(scale(diff(w2m1, w1m2), m0[1]), sum(scale(diff(w2m0, w0m2), -m1[1]), scale(diff(w1m0, w0m1), m2[1]))), -m5[2]))), -m3[3]), scale(sum(sum(scale(sum(scale(diff(w3m2, w2m3), m1[1]), sum(scale(diff(w3m1, w1m3), -m2[1]), scale(diff(w2m1, w1m2), m3[1]))), m0[2]), scale(sum(scale(diff(w3m2, w2m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m2[1]), scale(diff(w2m0, w0m2), m3[1]))), -m1[2])), sum(scale(sum(scale(diff(w3m1, w1m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m1[1]), scale(diff(w1m0, w0m1), m3[1]))), m2[2]), scale(sum(scale(diff(w2m1, w1m2), m0[1]), sum(scale(diff(w2m0, w0m2), -m1[1]), scale(diff(w1m0, w0m1), m2[1]))), -m3[2]))), m5[3])))));\n        var n = sum(sum(sum(scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m3[1]), sum(scale(diff(w5m3, w3m5), -m4[1]), scale(diff(w4m3, w3m4), m5[1]))), m2[2]), scale(sum(scale(diff(w5m4, w4m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m4[1]), scale(diff(w4m2, w2m4), m5[1]))), -m3[2])), sum(scale(sum(scale(diff(w5m3, w3m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m3[1]), scale(diff(w3m2, w2m3), m5[1]))), m4[2]), scale(sum(scale(diff(w4m3, w3m4), m2[1]), sum(scale(diff(w4m2, w2m4), -m3[1]), scale(diff(w3m2, w2m3), m4[1]))), -m5[2]))), m0[3]), sum(scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m3[1]), sum(scale(diff(w5m3, w3m5), -m4[1]), scale(diff(w4m3, w3m4), m5[1]))), m0[2]), scale(sum(scale(diff(w5m4, w4m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m4[1]), scale(diff(w4m0, w0m4), m5[1]))), -m3[2])), sum(scale(sum(scale(diff(w5m3, w3m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m3[1]), scale(diff(w3m0, w0m3), m5[1]))), m4[2]), scale(sum(scale(diff(w4m3, w3m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m3[1]), scale(diff(w3m0, w0m3), m4[1]))), -m5[2]))), -m2[3]), scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m4[1]), scale(diff(w4m2, w2m4), m5[1]))), m0[2]), scale(sum(scale(diff(w5m4, w4m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m4[1]), scale(diff(w4m0, w0m4), m5[1]))), -m2[2])), sum(scale(sum(scale(diff(w5m2, w2m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m2[1]), scale(diff(w2m0, w0m2), m5[1]))), m4[2]), scale(sum(scale(diff(w4m2, w2m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m2[1]), scale(diff(w2m0, w0m2), m4[1]))), -m5[2]))), m3[3]))), sum(sum(scale(sum(sum(scale(sum(scale(diff(w5m3, w3m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m3[1]), scale(diff(w3m2, w2m3), m5[1]))), m0[2]), scale(sum(scale(diff(w5m3, w3m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m3[1]), scale(diff(w3m0, w0m3), m5[1]))), -m2[2])), sum(scale(sum(scale(diff(w5m2, w2m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m2[1]), scale(diff(w2m0, w0m2), m5[1]))), m3[2]), scale(sum(scale(diff(w3m2, w2m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m2[1]), scale(diff(w2m0, w0m2), m3[1]))), -m5[2]))), -m4[3]), scale(sum(sum(scale(sum(scale(diff(w4m3, w3m4), m2[1]), sum(scale(diff(w4m2, w2m4), -m3[1]), scale(diff(w3m2, w2m3), m4[1]))), m0[2]), scale(sum(scale(diff(w4m3, w3m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m3[1]), scale(diff(w3m0, w0m3), m4[1]))), -m2[2])), sum(scale(sum(scale(diff(w4m2, w2m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m2[1]), scale(diff(w2m0, w0m2), m4[1]))), m3[2]), scale(sum(scale(diff(w3m2, w2m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m2[1]), scale(diff(w2m0, w0m2), m3[1]))), -m4[2]))), m5[3])), sum(scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m4[1]), scale(diff(w4m2, w2m4), m5[1]))), m1[2]), scale(sum(scale(diff(w5m4, w4m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m4[1]), scale(diff(w4m1, w1m4), m5[1]))), -m2[2])), sum(scale(sum(scale(diff(w5m2, w2m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m2[1]), scale(diff(w2m1, w1m2), m5[1]))), m4[2]), scale(sum(scale(diff(w4m2, w2m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m2[1]), scale(diff(w2m1, w1m2), m4[1]))), -m5[2]))), m0[3]), scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m2[1]), sum(scale(diff(w5m2, w2m5), -m4[1]), scale(diff(w4m2, w2m4), m5[1]))), m0[2]), scale(sum(scale(diff(w5m4, w4m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m4[1]), scale(diff(w4m0, w0m4), m5[1]))), -m2[2])), sum(scale(sum(scale(diff(w5m2, w2m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m2[1]), scale(diff(w2m0, w0m2), m5[1]))), m4[2]), scale(sum(scale(diff(w4m2, w2m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m2[1]), scale(diff(w2m0, w0m2), m4[1]))), -m5[2]))), -m1[3])))), sum(sum(sum(scale(sum(sum(scale(sum(scale(diff(w5m4, w4m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m4[1]), scale(diff(w4m1, w1m4), m5[1]))), m0[2]), scale(sum(scale(diff(w5m4, w4m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m4[1]), scale(diff(w4m0, w0m4), m5[1]))), -m1[2])), sum(scale(sum(scale(diff(w5m1, w1m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m1[1]), scale(diff(w1m0, w0m1), m5[1]))), m4[2]), scale(sum(scale(diff(w4m1, w1m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m1[1]), scale(diff(w1m0, w0m1), m4[1]))), -m5[2]))), m2[3]), scale(sum(sum(scale(sum(scale(diff(w5m2, w2m5), m1[1]), sum(scale(diff(w5m1, w1m5), -m2[1]), scale(diff(w2m1, w1m2), m5[1]))), m0[2]), scale(sum(scale(diff(w5m2, w2m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m2[1]), scale(diff(w2m0, w0m2), m5[1]))), -m1[2])), sum(scale(sum(scale(diff(w5m1, w1m5), m0[1]), sum(scale(diff(w5m0, w0m5), -m1[1]), scale(diff(w1m0, w0m1), m5[1]))), m2[2]), scale(sum(scale(diff(w2m1, w1m2), m0[1]), sum(scale(diff(w2m0, w0m2), -m1[1]), scale(diff(w1m0, w0m1), m2[1]))), -m5[2]))), -m4[3])), sum(scale(sum(sum(scale(sum(scale(diff(w4m2, w2m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m2[1]), scale(diff(w2m1, w1m2), m4[1]))), m0[2]), scale(sum(scale(diff(w4m2, w2m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m2[1]), scale(diff(w2m0, w0m2), m4[1]))), -m1[2])), sum(scale(sum(scale(diff(w4m1, w1m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m1[1]), scale(diff(w1m0, w0m1), m4[1]))), m2[2]), scale(sum(scale(diff(w2m1, w1m2), m0[1]), sum(scale(diff(w2m0, w0m2), -m1[1]), scale(diff(w1m0, w0m1), m2[1]))), -m4[2]))), m5[3]), scale(sum(sum(scale(sum(scale(diff(w4m3, w3m4), m2[1]), sum(scale(diff(w4m2, w2m4), -m3[1]), scale(diff(w3m2, w2m3), m4[1]))), m1[2]), scale(sum(scale(diff(w4m3, w3m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m3[1]), scale(diff(w3m1, w1m3), m4[1]))), -m2[2])), sum(scale(sum(scale(diff(w4m2, w2m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m2[1]), scale(diff(w2m1, w1m2), m4[1]))), m3[2]), scale(sum(scale(diff(w3m2, w2m3), m1[1]), sum(scale(diff(w3m1, w1m3), -m2[1]), scale(diff(w2m1, w1m2), m3[1]))), -m4[2]))), m0[3]))), sum(sum(scale(sum(sum(scale(sum(scale(diff(w4m3, w3m4), m2[1]), sum(scale(diff(w4m2, w2m4), -m3[1]), scale(diff(w3m2, w2m3), m4[1]))), m0[2]), scale(sum(scale(diff(w4m3, w3m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m3[1]), scale(diff(w3m0, w0m3), m4[1]))), -m2[2])), sum(scale(sum(scale(diff(w4m2, w2m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m2[1]), scale(diff(w2m0, w0m2), m4[1]))), m3[2]), scale(sum(scale(diff(w3m2, w2m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m2[1]), scale(diff(w2m0, w0m2), m3[1]))), -m4[2]))), -m1[3]), scale(sum(sum(scale(sum(scale(diff(w4m3, w3m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m3[1]), scale(diff(w3m1, w1m3), m4[1]))), m0[2]), scale(sum(scale(diff(w4m3, w3m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m3[1]), scale(diff(w3m0, w0m3), m4[1]))), -m1[2])), sum(scale(sum(scale(diff(w4m1, w1m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m1[1]), scale(diff(w1m0, w0m1), m4[1]))), m3[2]), scale(sum(scale(diff(w3m1, w1m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m1[1]), scale(diff(w1m0, w0m1), m3[1]))), -m4[2]))), m2[3])), sum(scale(sum(sum(scale(sum(scale(diff(w4m2, w2m4), m1[1]), sum(scale(diff(w4m1, w1m4), -m2[1]), scale(diff(w2m1, w1m2), m4[1]))), m0[2]), scale(sum(scale(diff(w4m2, w2m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m2[1]), scale(diff(w2m0, w0m2), m4[1]))), -m1[2])), sum(scale(sum(scale(diff(w4m1, w1m4), m0[1]), sum(scale(diff(w4m0, w0m4), -m1[1]), scale(diff(w1m0, w0m1), m4[1]))), m2[2]), scale(sum(scale(diff(w2m1, w1m2), m0[1]), sum(scale(diff(w2m0, w0m2), -m1[1]), scale(diff(w1m0, w0m1), m2[1]))), -m4[2]))), -m3[3]), scale(sum(sum(scale(sum(scale(diff(w3m2, w2m3), m1[1]), sum(scale(diff(w3m1, w1m3), -m2[1]), scale(diff(w2m1, w1m2), m3[1]))), m0[2]), scale(sum(scale(diff(w3m2, w2m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m2[1]), scale(diff(w2m0, w0m2), m3[1]))), -m1[2])), sum(scale(sum(scale(diff(w3m1, w1m3), m0[1]), sum(scale(diff(w3m0, w0m3), -m1[1]), scale(diff(w1m0, w0m1), m3[1]))), m2[2]), scale(sum(scale(diff(w2m1, w1m2), m0[1]), sum(scale(diff(w2m0, w0m2), -m1[1]), scale(diff(w1m0, w0m1), m2[1]))), -m3[2]))), m4[3])))));\n        var d = diff(p, n);\n        return d[d.length - 1];\n      }\n      return exactInSphere6;\n    }\n    var CACHED = [\n      inSphere0,\n      inSphere1,\n      inSphere2\n    ];\n    function slowInSphere(args) {\n      var proc2 = CACHED[args.length];\n      if (!proc2) {\n        proc2 = CACHED[args.length] = orientation(args.length);\n      }\n      return proc2.apply(void 0, args);\n    }\n    function proc(slow, o0, o1, o2, o3, o4, o5, o6) {\n      function testInSphere(a0, a1, a2, a3, a4, a5) {\n        switch (arguments.length) {\n          case 0:\n          case 1:\n            return 0;\n          case 2:\n            return o2(a0, a1);\n          case 3:\n            return o3(a0, a1, a2);\n          case 4:\n            return o4(a0, a1, a2, a3);\n          case 5:\n            return o5(a0, a1, a2, a3, a4);\n          case 6:\n            return o6(a0, a1, a2, a3, a4, a5);\n        }\n        var s = new Array(arguments.length);\n        for (var i = 0; i < arguments.length; ++i) {\n          s[i] = arguments[i];\n        }\n        return slow(s);\n      }\n      return testInSphere;\n    }\n    function generateInSphereTest() {\n      while (CACHED.length <= NUM_EXPAND) {\n        CACHED.push(orientation(CACHED.length));\n      }\n      module.exports = proc.apply(void 0, [slowInSphere].concat(CACHED));\n      for (var i = 0; i <= NUM_EXPAND; ++i) {\n        module.exports[i] = CACHED[i];\n      }\n    }\n    generateInSphereTest();\n  }\n});\n\n// node_modules/cdt2d/lib/delaunay.js\nvar require_delaunay = __commonJS({\n  \"node_modules/cdt2d/lib/delaunay.js\"(exports, module) {\n    \"use strict\";\n    var inCircle = require_in_sphere()[4];\n    var bsearch = require_search_bounds();\n    module.exports = delaunayRefine;\n    function testFlip(points, triangulation, stack, a, b, x) {\n      var y = triangulation.opposite(a, b);\n      if (y < 0) {\n        return;\n      }\n      if (b < a) {\n        var tmp = a;\n        a = b;\n        b = tmp;\n        tmp = x;\n        x = y;\n        y = tmp;\n      }\n      if (triangulation.isConstraint(a, b)) {\n        return;\n      }\n      if (inCircle(points[a], points[b], points[x], points[y]) < 0) {\n        stack.push(a, b);\n      }\n    }\n    function delaunayRefine(points, triangulation) {\n      var stack = [];\n      var numPoints = points.length;\n      var stars = triangulation.stars;\n      for (var a = 0; a < numPoints; ++a) {\n        var star = stars[a];\n        for (var j = 1; j < star.length; j += 2) {\n          var b = star[j];\n          if (b < a) {\n            continue;\n          }\n          if (triangulation.isConstraint(a, b)) {\n            continue;\n          }\n          var x = star[j - 1], y = -1;\n          for (var k = 1; k < star.length; k += 2) {\n            if (star[k - 1] === b) {\n              y = star[k];\n              break;\n            }\n          }\n          if (y < 0) {\n            continue;\n          }\n          if (inCircle(points[a], points[b], points[x], points[y]) < 0) {\n            stack.push(a, b);\n          }\n        }\n      }\n      while (stack.length > 0) {\n        var b = stack.pop();\n        var a = stack.pop();\n        var x = -1, y = -1;\n        var star = stars[a];\n        for (var i = 1; i < star.length; i += 2) {\n          var s = star[i - 1];\n          var t = star[i];\n          if (s === b) {\n            y = t;\n          } else if (t === b) {\n            x = s;\n          }\n        }\n        if (x < 0 || y < 0) {\n          continue;\n        }\n        if (inCircle(points[a], points[b], points[x], points[y]) >= 0) {\n          continue;\n        }\n        triangulation.flip(a, b);\n        testFlip(points, triangulation, stack, x, a, y);\n        testFlip(points, triangulation, stack, a, y, x);\n        testFlip(points, triangulation, stack, y, b, x);\n        testFlip(points, triangulation, stack, b, x, y);\n      }\n    }\n  }\n});\n\n// node_modules/cdt2d/lib/filter.js\nvar require_filter = __commonJS({\n  \"node_modules/cdt2d/lib/filter.js\"(exports, module) {\n    \"use strict\";\n    var bsearch = require_search_bounds();\n    module.exports = classifyFaces;\n    function FaceIndex(cells, neighbor, constraint, flags, active, next, boundary) {\n      this.cells = cells;\n      this.neighbor = neighbor;\n      this.flags = flags;\n      this.constraint = constraint;\n      this.active = active;\n      this.next = next;\n      this.boundary = boundary;\n    }\n    var proto = FaceIndex.prototype;\n    function compareCell(a, b) {\n      return a[0] - b[0] || a[1] - b[1] || a[2] - b[2];\n    }\n    proto.locate = /* @__PURE__ */ (function() {\n      var key = [0, 0, 0];\n      return function(a, b, c) {\n        var x = a, y = b, z = c;\n        if (b < c) {\n          if (b < a) {\n            x = b;\n            y = c;\n            z = a;\n          }\n        } else if (c < a) {\n          x = c;\n          y = a;\n          z = b;\n        }\n        if (x < 0) {\n          return -1;\n        }\n        key[0] = x;\n        key[1] = y;\n        key[2] = z;\n        return bsearch.eq(this.cells, key, compareCell);\n      };\n    })();\n    function indexCells(triangulation, infinity) {\n      var cells = triangulation.cells();\n      var nc = cells.length;\n      for (var i = 0; i < nc; ++i) {\n        var c = cells[i];\n        var x = c[0], y = c[1], z = c[2];\n        if (y < z) {\n          if (y < x) {\n            c[0] = y;\n            c[1] = z;\n            c[2] = x;\n          }\n        } else if (z < x) {\n          c[0] = z;\n          c[1] = x;\n          c[2] = y;\n        }\n      }\n      cells.sort(compareCell);\n      var flags = new Array(nc);\n      for (var i = 0; i < flags.length; ++i) {\n        flags[i] = 0;\n      }\n      var active = [];\n      var next = [];\n      var neighbor = new Array(3 * nc);\n      var constraint = new Array(3 * nc);\n      var boundary = null;\n      if (infinity) {\n        boundary = [];\n      }\n      var index = new FaceIndex(\n        cells,\n        neighbor,\n        constraint,\n        flags,\n        active,\n        next,\n        boundary\n      );\n      for (var i = 0; i < nc; ++i) {\n        var c = cells[i];\n        for (var j = 0; j < 3; ++j) {\n          var x = c[j], y = c[(j + 1) % 3];\n          var a = neighbor[3 * i + j] = index.locate(y, x, triangulation.opposite(y, x));\n          var b = constraint[3 * i + j] = triangulation.isConstraint(x, y);\n          if (a < 0) {\n            if (b) {\n              next.push(i);\n            } else {\n              active.push(i);\n              flags[i] = 1;\n            }\n            if (infinity) {\n              boundary.push([y, x, -1]);\n            }\n          }\n        }\n      }\n      return index;\n    }\n    function filterCells(cells, flags, target) {\n      var ptr = 0;\n      for (var i = 0; i < cells.length; ++i) {\n        if (flags[i] === target) {\n          cells[ptr++] = cells[i];\n        }\n      }\n      cells.length = ptr;\n      return cells;\n    }\n    function classifyFaces(triangulation, target, infinity) {\n      var index = indexCells(triangulation, infinity);\n      if (target === 0) {\n        if (infinity) {\n          return index.cells.concat(index.boundary);\n        } else {\n          return index.cells;\n        }\n      }\n      var side = 1;\n      var active = index.active;\n      var next = index.next;\n      var flags = index.flags;\n      var cells = index.cells;\n      var constraint = index.constraint;\n      var neighbor = index.neighbor;\n      while (active.length > 0 || next.length > 0) {\n        while (active.length > 0) {\n          var t = active.pop();\n          if (flags[t] === -side) {\n            continue;\n          }\n          flags[t] = side;\n          var c = cells[t];\n          for (var j = 0; j < 3; ++j) {\n            var f = neighbor[3 * t + j];\n            if (f >= 0 && flags[f] === 0) {\n              if (constraint[3 * t + j]) {\n                next.push(f);\n              } else {\n                active.push(f);\n                flags[f] = side;\n              }\n            }\n          }\n        }\n        var tmp = next;\n        next = active;\n        active = tmp;\n        next.length = 0;\n        side = -side;\n      }\n      var result = filterCells(cells, flags, target);\n      if (infinity) {\n        return result.concat(index.boundary);\n      }\n      return result;\n    }\n  }\n});\n\n// node_modules/cdt2d/cdt2d.js\nvar require_cdt2d = __commonJS({\n  \"node_modules/cdt2d/cdt2d.js\"(exports, module) {\n    var monotoneTriangulate = require_monotone();\n    var makeIndex = require_triangulation();\n    var delaunayFlip = require_delaunay();\n    var filterTriangulation = require_filter();\n    module.exports = cdt2d;\n    function canonicalizeEdge(e) {\n      return [Math.min(e[0], e[1]), Math.max(e[0], e[1])];\n    }\n    function compareEdge(a, b) {\n      return a[0] - b[0] || a[1] - b[1];\n    }\n    function canonicalizeEdges(edges) {\n      return edges.map(canonicalizeEdge).sort(compareEdge);\n    }\n    function getDefault(options, property, dflt) {\n      if (property in options) {\n        return options[property];\n      }\n      return dflt;\n    }\n    function cdt2d(points, edges, options) {\n      if (!Array.isArray(edges)) {\n        options = edges || {};\n        edges = [];\n      } else {\n        options = options || {};\n        edges = edges || [];\n      }\n      var delaunay = !!getDefault(options, \"delaunay\", true);\n      var interior = !!getDefault(options, \"interior\", true);\n      var exterior = !!getDefault(options, \"exterior\", true);\n      var infinity = !!getDefault(options, \"infinity\", false);\n      if (!interior && !exterior || points.length === 0) {\n        return [];\n      }\n      var cells = monotoneTriangulate(points, edges);\n      if (delaunay || interior !== exterior || infinity) {\n        var triangulation = makeIndex(points.length, canonicalizeEdges(edges));\n        for (var i = 0; i < cells.length; ++i) {\n          var f = cells[i];\n          triangulation.addTriangle(f[0], f[1], f[2]);\n        }\n        if (delaunay) {\n          delaunayFlip(points, triangulation);\n        }\n        if (!exterior) {\n          return filterTriangulation(triangulation, -1);\n        } else if (!interior) {\n          return filterTriangulation(triangulation, 1, infinity);\n        } else if (infinity) {\n          return filterTriangulation(triangulation, 0, infinity);\n        } else {\n          return triangulation.cells();\n        }\n      } else {\n        return cells;\n      }\n    }\n  }\n});\nexport default require_cdt2d();\n","// class for getting reusable object instances and releasing them for reuse\nexport class Pool {\n\n\tconstructor( createFn ) {\n\n\t\tthis.createFn = createFn;\n\t\tthis._pool = [];\n\t\tthis._index = 0;\n\n\t}\n\n\tgetInstance() {\n\n\t\tif ( this._index >= this._pool.length ) {\n\n\t\t\tthis._pool.push( this.createFn() );\n\n\t\t}\n\n\t\treturn this._pool[ this._index ++ ];\n\n\t}\n\n\tclear() {\n\n\t\tthis._index = 0;\n\n\t}\n\n\treset() {\n\n\t\tthis._pool.length = 0;\n\t\tthis._index = 0;\n\n\t}\n\n}\n","import { Vector3, Line3 } from 'three';\nimport { ExtendedTriangle } from 'three-mesh-bvh';\nimport cdt2d from '../libs/cdt2d.js';\nimport { Pool } from './utils/Pool.js';\n\n// relative tolerance factor — multiplied by the max absolute coordinate\n// of the base triangle to get scale-appropriate thresholds\nconst RELATIVE_EPSILON = 1e-16;\n\n// tolerance for merging nearby vertices (squared distance)\nconst VERTEX_MERGE_EPSILON = 1e-16;\n\nconst _vec = new Vector3();\nconst _vec2 = new Vector3();\nconst _paramPool = new Pool( () => ( { param: 0, index: 0 } ) );\nconst _vectorPool = new Pool( () => new Vector3() );\n\nfunction edgesToIndices( edges, outputVertices, outputIndices, epsilonScale ) {\n\n\t_paramPool.clear();\n\n\toutputVertices.length = 0;\n\toutputIndices.length = 0;\n\n\t// Add edge endpoints and find edge-edge intersection points\n\tfor ( let i = 0, l = edges.length; i < l; i ++ ) {\n\n\t\tconst edge0 = edges[ i ];\n\t\tgetIndex( edge0.start );\n\t\tgetIndex( edge0.end );\n\n\t}\n\n\tfor ( let i = 0, l = edges.length; i < l; i ++ ) {\n\n\t\tconst edge0 = edges[ i ];\n\t\tfor ( let i1 = i + 1; i1 < l; i1 ++ ) {\n\n\t\t\tconst edge1 = edges[ i1 ];\n\t\t\tconst dist = edge0.distanceSqToLine3( edge1, _vec, _vec2 );\n\t\t\tif ( dist < RELATIVE_EPSILON * epsilonScale ) {\n\n\t\t\t\tgetIndex( _vec2 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// Build sub-segments by finding all vertices on each edge\n\tconst arr = [];\n\tfor ( let i = 0, l = edges.length; i < l; i ++ ) {\n\n\t\tarr.length = 0;\n\n\t\tconst edge = edges[ i ];\n\t\tfor ( let v = 0, lv = outputVertices.length; v < lv; v ++ ) {\n\n\t\t\tconst vec = outputVertices[ v ];\n\t\t\tconst param = edge.closestPointToPointParameter( vec, true );\n\t\t\tedge.at( param, _vec );\n\t\t\tif ( vec.distanceToSquared( _vec ) < RELATIVE_EPSILON * epsilonScale ) {\n\n\t\t\t\tconst entry = _paramPool.getInstance();\n\t\t\t\tentry.param = param;\n\t\t\t\tentry.index = v;\n\t\t\t\tarr.push( entry );\n\n\t\t\t}\n\n\t\t}\n\n\t\tarr.sort( paramSort );\n\n\t\tfor ( let a = 0, la = arr.length - 1; a < la; a ++ ) {\n\n\t\t\tconst i0 = arr[ a ].index;\n\t\t\tconst i1 = arr[ a + 1 ].index;\n\n\t\t\t// Skip self-loops (can arise when two endpoints merge)\n\t\t\tif ( i0 === i1 ) continue;\n\n\t\t\toutputIndices.push( [ i0, i1 ] );\n\n\t\t}\n\n\t}\n\n\t// Remove duplicate edges\n\tconst edgeSet = new Set();\n\tlet ptr = 0;\n\tfor ( let i = 0, l = outputIndices.length; i < l; i ++ ) {\n\n\t\tconst e = outputIndices[ i ];\n\t\tconst lo = Math.min( e[ 0 ], e[ 1 ] );\n\t\tconst hi = Math.max( e[ 0 ], e[ 1 ] );\n\t\tconst key = lo + ',' + hi;\n\t\tif ( ! edgeSet.has( key ) ) {\n\n\t\t\tedgeSet.add( key );\n\t\t\toutputIndices[ ptr ++ ] = e;\n\n\t\t}\n\n\t}\n\n\toutputIndices.length = ptr;\n\n\tfunction paramSort( a, b ) {\n\n\t\treturn a.param - b.param;\n\n\t}\n\n\tfunction getIndex( v ) {\n\n\t\tfor ( let i = 0; i < outputVertices.length; i ++ ) {\n\n\t\t\tconst v2 = outputVertices[ i ];\n\t\t\tif ( v === v2 || v.distanceToSquared( v2 ) < VERTEX_MERGE_EPSILON * epsilonScale ) {\n\n\t\t\t\treturn i;\n\n\t\t\t}\n\n\t\t}\n\n\t\toutputVertices.push( _vectorPool.getInstance().copy( v ) );\n\t\treturn outputVertices.length - 1;\n\n\t}\n\n}\n\nexport class CDTTriangleSplitter {\n\n\tconstructor() {\n\n\t\tthis.trianglePool = new Pool( () => new ExtendedTriangle() );\n\t\tthis.linePool = new Pool( () => new Line3() );\n\t\t// TODO: use array pool\n\n\t\tthis.triangles = [];\n\t\tthis.triangleIndices = [];\n\t\tthis.constrainedEdges = [];\n\t\tthis.triangleConnectivity = [];\n\n\t\tthis.normal = new Vector3();\n\t\tthis.projOrigin = new Vector3();\n\t\tthis.projU = new Vector3();\n\t\tthis.projV = new Vector3();\n\t\tthis.baseTri = new ExtendedTriangle();\n\t\tthis.baseIndices = new Array( 3 );\n\n\t}\n\n\t// initialize the class with a triangle to be split\n\tinitialize( tri, i0 = null, i1 = null, i2 = null ) {\n\n\t\tthis.reset();\n\n\t\tconst { normal, baseTri, projU, projV, projOrigin, constrainedEdges, linePool, baseIndices } = this;\n\t\ttri.getNormal( normal );\n\t\tbaseTri.copy( tri );\n\t\tbaseTri.update();\n\t\tbaseIndices[ 0 ] = i0;\n\t\tbaseIndices[ 1 ] = i1;\n\t\tbaseIndices[ 2 ] = i2;\n\n\t\t// initialize constrained edges to the triangle boundary\n\t\tconstrainedEdges.length = 0;\n\n\t\t// inserting these edges in this order guarantee that indices a, b, c will be given the\n\t\t// indices 0, 1, 2 so we can infer base indices from them later.\n\t\tconst e0 = linePool.getInstance();\n\t\te0.start.copy( baseTri.a );\n\t\te0.end.copy( baseTri.b );\n\n\t\tconst e1 = linePool.getInstance();\n\t\te1.start.copy( baseTri.b );\n\t\te1.end.copy( baseTri.c );\n\n\t\tconst e2 = linePool.getInstance();\n\t\te2.start.copy( baseTri.c );\n\t\te2.end.copy( baseTri.a );\n\t\tconstrainedEdges.push( e0, e1, e2 );\n\n\t\t// Build 2D projection frame from base triangle\n\t\tprojOrigin.copy( baseTri.a );\n\t\tprojU.subVectors( baseTri.b, baseTri.a ).normalize();\n\t\tprojV.crossVectors( normal, projU ).normalize();\n\n\t}\n\n\t// Add a pre-computed constraint edge to the splitter\n\taddConstraintEdge( edge ) {\n\n\t\tconst { constrainedEdges, linePool } = this;\n\t\tconst e = linePool.getInstance().copy( edge );\n\t\tconstrainedEdges.push( e );\n\n\t}\n\n\t// Project a 3D point onto the 2D frame defined by _projOrigin / _projU / _projV\n\t_to2D( point, target ) {\n\n\t\tconst { projOrigin, projU, projV } = this;\n\t\t_vec.subVectors( point, projOrigin );\n\t\treturn target.set( _vec.dot( projU ), _vec.dot( projV ), 0 );\n\n\t}\n\n\t_from2D( u, v, target ) {\n\n\t\tconst { projOrigin, projU, projV } = this;\n\t\ttarget.copy( projOrigin ).addScaledVector( projU, u ).addScaledVector( projV, v );\n\t\treturn target;\n\n\t}\n\n\t// Run the CDT and populate this.triangles with the result\n\ttriangulate() {\n\n\t\tconst { triangles, trianglePool, triangleConnectivity, triangleIndices, linePool, baseTri, constrainedEdges, baseIndices } = this;\n\n\t\ttriangles.length = 0;\n\t\ttrianglePool.clear();\n\n\t\t// Get the edges into a 2d frame\n\t\tconst edges2d = [];\n\t\tfor ( let i = 0, l = constrainedEdges.length; i < l; i ++ ) {\n\n\t\t\tconst edge = constrainedEdges[ i ];\n\t\t\tconst e2d = linePool.getInstance();\n\t\t\tthis._to2D( edge.start, e2d.start );\n\t\t\tthis._to2D( edge.end, e2d.end );\n\t\t\tedges2d.push( e2d );\n\n\t\t}\n\n\t\t// Precompute scale factor from base triangle for epsilon scaling\n\t\tlet epsilonScale = 0;\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst v = this._to2D( baseTri.points[ i ], _vec );\n\t\t\tepsilonScale = Math.max( epsilonScale, Math.abs( v.x ), Math.abs( v.y ) );\n\n\t\t}\n\n\t\t// Use custom deduplication and edge splitting\n\t\tconst vertices = [];\n\t\tconst indices = [];\n\t\tedgesToIndices( edges2d, vertices, indices, epsilonScale );\n\n\t\tconst cdt2dPoints = [];\n\t\tfor ( let i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\tconst vert = vertices[ i ];\n\t\t\tcdt2dPoints.push( [ vert.x, vert.y ] );\n\n\t\t}\n\n\t\t// Run the CDT triangulation\n\t\tconst triangulation = cdt2d( cdt2dPoints, indices, { exterior: false } );\n\n\t\t// construct the half edge structure, marking the constrained edges as disconnected to\n\t\t// mark the polygon edges\n\t\tconst halfEdgeMap = new Map();\n\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\tconst pair = indices[ i ];\n\t\t\thalfEdgeMap.set( `${ pair[ 0 ] }_${ pair[ 1 ] }`, - 1 );\n\t\t\thalfEdgeMap.set( `${ pair[ 1 ] }_${ pair[ 0 ] }`, - 1 );\n\n\t\t}\n\n\t\t// create an index key to construct unique indices across the geometry\n\t\tconst indexKeyPrefix = `${ baseIndices[ 0 ] }_${ baseIndices[ 1 ] }_${ baseIndices[ 2 ] }_`;\n\t\tfor ( let ti = 0, l = triangulation.length; ti < l; ti ++ ) {\n\n\t\t\t// covert back to 2d\n\t\t\tconst indexList = triangulation[ ti ];\n\t\t\tconst [ i0, i1, i2 ] = indexList;\n\t\t\tconst tri = trianglePool.getInstance();\n\t\t\tthis._from2D( cdt2dPoints[ i0 ][ 0 ], cdt2dPoints[ i0 ][ 1 ], tri.a );\n\t\t\tthis._from2D( cdt2dPoints[ i1 ][ 0 ], cdt2dPoints[ i1 ][ 1 ], tri.b );\n\t\t\tthis._from2D( cdt2dPoints[ i2 ][ 0 ], cdt2dPoints[ i2 ][ 1 ], tri.c );\n\t\t\ttriangles.push( tri );\n\n\t\t\t// construct the connectivity and custom index list\n\t\t\tconst connected = [];\n\t\t\ttriangleConnectivity.push( connected );\n\n\t\t\tconst indexKeys = [];\n\t\t\ttriangleIndices.push( indexKeys );\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t// use the original geometry index for base triangle corners,\n\t\t\t\t// otherwise construct a unique index key for constraint edge vertices\n\t\t\t\tconst p0 = indexList[ i ];\n\t\t\t\tindexKeys.push( p0 < 3 ? baseIndices[ p0 ] : indexKeyPrefix + p0 );\n\n\t\t\t\t// find the connected triangles\n\t\t\t\tconst p1 = indexList[ ( i + 1 ) % 3 ];\n\t\t\t\tconst hash0 = `${ p0 }_${ p1 }`;\n\t\t\t\tif ( halfEdgeMap.has( hash0 ) ) {\n\n\t\t\t\t\tconst index = halfEdgeMap.get( hash0 );\n\t\t\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\t\t\tconnected.push( index );\n\t\t\t\t\t\ttriangleConnectivity[ index ].push( ti );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst hash1 = `${ p1 }_${ p0 }`;\n\t\t\t\t\thalfEdgeMap.set( hash1, ti );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treset() {\n\n\t\tthis.trianglePool.clear();\n\t\tthis.linePool.clear();\n\t\tthis.triangles.length = 0;\n\t\tthis.triangleIndices.length = 0;\n\t\tthis.triangleConnectivity.length = 0;\n\t\tthis.constrainedEdges.length = 0;\n\n\t}\n\n}\n","import { Vector3 } from 'three';\n\nconst EPSILON = 1e-14;\nconst _AB = new Vector3();\nconst _AC = new Vector3();\nconst _CB = new Vector3();\n\nexport function isTriDegenerate( tri, eps = EPSILON ) {\n\n\t// compute angles to determine whether they're degenerate\n\t_AB.subVectors( tri.b, tri.a );\n\t_AC.subVectors( tri.c, tri.a );\n\t_CB.subVectors( tri.b, tri.c );\n\n\tconst angle1 = _AB.angleTo( _AC );\t\t\t\t// AB v AC\n\tconst angle2 = _AB.angleTo( _CB );\t\t\t\t// AB v BC\n\tconst angle3 = Math.PI - angle1 - angle2;\t\t// 180deg - angle1 - angle2\n\n\treturn Math.abs( angle1 ) < eps ||\n\t\tMath.abs( angle2 ) < eps ||\n\t\tMath.abs( angle3 ) < eps ||\n\t\ttri.a.distanceToSquared( tri.b ) < eps ||\n\t\ttri.a.distanceToSquared( tri.c ) < eps ||\n\t\ttri.b.distanceToSquared( tri.c ) < eps;\n\n}\n","import { Triangle, Line3, Vector3, Plane } from 'three';\nimport { ExtendedTriangle } from 'three-mesh-bvh';\nimport { isTriDegenerate } from './utils/triangleUtils.js';\nimport { Pool } from './utils/Pool.js';\n\n// NOTE: these epsilons likely should all be the same since they're used to measure the\n// distance from a point to a plane which needs to be done consistently\nconst EPSILON = 1e-10;\nconst COPLANAR_EPSILON = 1e-10;\nconst _edge = new Line3();\nconst _foundEdge = new Line3();\nconst _vec = new Vector3();\nconst _triangleNormal = new Vector3();\nconst _planeNormal = new Vector3();\nconst _plane = new Plane();\nconst _splittingTriangle = new ExtendedTriangle();\n\n// Utility class for splitting triangles\nexport class LegacyTriangleSplitter {\n\n\tconstructor() {\n\n\t\tthis.trianglePool = new Pool( () => new Triangle() );\n\t\tthis.triangles = [];\n\t\tthis.normal = new Vector3();\n\n\t}\n\n\t// initialize the class with a triangle\n\tinitialize( tri ) {\n\n\t\tthis.reset();\n\n\t\tconst { triangles, trianglePool, normal } = this;\n\t\tif ( Array.isArray( tri ) ) {\n\n\t\t\tfor ( let i = 0, l = tri.length; i < l; i ++ ) {\n\n\t\t\t\tconst t = tri[ i ];\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tt.getNormal( normal );\n\n\t\t\t\t} else if ( Math.abs( 1.0 - t.getNormal( _vec ).dot( normal ) ) > EPSILON ) {\n\n\t\t\t\t\tthrow new Error( 'Triangle Splitter: Cannot initialize with triangles that have different normals.' );\n\n\t\t\t\t}\n\n\t\t\t\tconst poolTri = trianglePool.getInstance();\n\t\t\t\tpoolTri.copy( t );\n\t\t\t\ttriangles.push( poolTri );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\ttri.getNormal( normal );\n\n\t\t\tconst poolTri = trianglePool.getInstance();\n\t\t\tpoolTri.copy( tri );\n\t\t\ttriangles.push( poolTri );\n\n\t\t}\n\n\t}\n\n\t// Split the current set of triangles by passing a single triangle in. If the triangle is\n\t// coplanar it will attempt to split by the triangle edge planes\n\tsplitByTriangle( triangle, isCoplanar ) {\n\n\t\tconst { triangles } = this;\n\n\t\tif ( isCoplanar ) {\n\n\t\t\tfor ( let i = 0, l = triangles.length; i < l; i ++ ) {\n\n\t\t\t\tconst t = triangles[ i ];\n\t\t\t\tt.coplanarCount = 0;\n\n\t\t\t}\n\n\t\t\t// if the triangle is coplanar then split by the edge planes\n\t\t\tconst arr = [ triangle.a, triangle.b, triangle.c ];\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tconst nexti = ( i + 1 ) % 3;\n\n\t\t\t\tconst v0 = arr[ i ];\n\t\t\t\tconst v1 = arr[ nexti ];\n\n\t\t\t\t// plane positive direction is toward triangle center\n\t\t\t\ttriangle.getNormal( _triangleNormal ).normalize();\n\t\t\t\t_vec.subVectors( v1, v0 ).normalize();\n\t\t\t\t_planeNormal.crossVectors( _triangleNormal, _vec );\n\t\t\t\t_plane.setFromNormalAndCoplanarPoint( _planeNormal, v0 );\n\n\t\t\t\tthis.splitByPlane( _plane, triangle );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// otherwise split by the triangle plane\n\t\t\ttriangle.getPlane( _plane );\n\t\t\tthis.splitByPlane( _plane, triangle );\n\n\t\t}\n\n\t}\n\n\t// Split the triangles by the given plan. If a triangle is provided then we ensure we\n\t// intersect the triangle before splitting the plane\n\tsplitByPlane( plane, clippingTriangle ) {\n\n\t\tconst { triangles, trianglePool } = this;\n\n\t\t// init our triangle to check for intersection\n\t\t_splittingTriangle.copy( clippingTriangle );\n\t\t_splittingTriangle.needsUpdate = true;\n\n\t\t// try to split every triangle in the class\n\t\tfor ( let i = 0, l = triangles.length; i < l; i ++ ) {\n\n\t\t\tconst tri = triangles[ i ];\n\n\t\t\t// skip the triangle if we don't intersect with it\n\t\t\tif ( ! _splittingTriangle.intersectsTriangle( tri, _edge, true ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst { a, b, c } = tri;\n\t\t\tlet intersects = 0;\n\t\t\tlet vertexSplitEnd = - 1;\n\t\t\tlet coplanarEdge = false;\n\t\t\tlet posSideVerts = [];\n\t\t\tlet negSideVerts = [];\n\t\t\tconst arr = [ a, b, c ];\n\t\t\tfor ( let t = 0; t < 3; t ++ ) {\n\n\t\t\t\t// get the triangle edge\n\t\t\t\tconst tNext = ( t + 1 ) % 3;\n\t\t\t\t_edge.start.copy( arr[ t ] );\n\t\t\t\t_edge.end.copy( arr[ tNext ] );\n\n\t\t\t\t// track if the start point sits on the plane or if it's on the positive side of it\n\t\t\t\t// so we can use that information to determine whether to split later.\n\t\t\t\tconst startDist = plane.distanceToPoint( _edge.start );\n\t\t\t\tconst endDist = plane.distanceToPoint( _edge.end );\n\t\t\t\tif ( Math.abs( startDist ) < COPLANAR_EPSILON && Math.abs( endDist ) < COPLANAR_EPSILON ) {\n\n\t\t\t\t\tcoplanarEdge = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( startDist > 0 ) {\n\n\t\t\t\t\tposSideVerts.push( t );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnegSideVerts.push( t );\n\n\t\t\t\t}\n\n\t\t\t\t// we only don't consider this an intersection if the start points hits the plane\n\t\t\t\tif ( Math.abs( startDist ) < COPLANAR_EPSILON ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// double check the end point since the \"intersectLine\" function sometimes does not\n\t\t\t\t// return it as an intersection (see issue #28)\n\t\t\t\t// Because we ignore the start point intersection above we have to make sure we check the end\n\t\t\t\t// point intersection here.\n\t\t\t\tlet didIntersect = ! ! plane.intersectLine( _edge, _vec );\n\t\t\t\tif ( ! didIntersect && Math.abs( endDist ) < COPLANAR_EPSILON ) {\n\n\t\t\t\t\t_vec.copy( _edge.end );\n\t\t\t\t\tdidIntersect = true;\n\n\t\t\t\t}\n\n\t\t\t\t// check if we intersect the plane (ignoring the start point so we don't double count)\n\t\t\t\tif ( didIntersect && ! ( _vec.distanceTo( _edge.start ) < EPSILON ) ) {\n\n\t\t\t\t\t// if we intersect at the end point then we track that point as one that we\n\t\t\t\t\t// have to split down the middle\n\t\t\t\t\tif ( _vec.distanceTo( _edge.end ) < EPSILON ) {\n\n\t\t\t\t\t\tvertexSplitEnd = t;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// track the split edge\n\t\t\t\t\tif ( intersects === 0 ) {\n\n\t\t\t\t\t\t_foundEdge.start.copy( _vec );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_foundEdge.end.copy( _vec );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersects ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// skip splitting if:\n\t\t\t// - we have two points on the plane then the plane intersects the triangle exactly on an edge\n\t\t\t// - the plane does not intersect on 2 points\n\t\t\t// - the intersection edge is too small\n\t\t\t// - we're not along a coplanar edge\n\t\t\tif ( ! coplanarEdge && intersects === 2 && _foundEdge.distance() > COPLANAR_EPSILON ) {\n\n\t\t\t\tif ( vertexSplitEnd !== - 1 ) {\n\n\t\t\t\t\tvertexSplitEnd = ( vertexSplitEnd + 1 ) % 3;\n\n\t\t\t\t\t// we're splitting along a vertex\n\t\t\t\t\tlet otherVert1 = 0;\n\t\t\t\t\tif ( otherVert1 === vertexSplitEnd ) {\n\n\t\t\t\t\t\totherVert1 = ( otherVert1 + 1 ) % 3;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet otherVert2 = otherVert1 + 1;\n\t\t\t\t\tif ( otherVert2 === vertexSplitEnd ) {\n\n\t\t\t\t\t\totherVert2 = ( otherVert2 + 1 ) % 3;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst nextTri = trianglePool.getInstance();\n\t\t\t\t\tnextTri.a.copy( arr[ otherVert2 ] );\n\t\t\t\t\tnextTri.b.copy( _foundEdge.end );\n\t\t\t\t\tnextTri.c.copy( _foundEdge.start );\n\n\t\t\t\t\tif ( ! isTriDegenerate( nextTri ) ) {\n\n\t\t\t\t\t\ttriangles.push( nextTri );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttri.a.copy( arr[ otherVert1 ] );\n\t\t\t\t\ttri.b.copy( _foundEdge.start );\n\t\t\t\t\ttri.c.copy( _foundEdge.end );\n\n\t\t\t\t\t// finish off the adjusted triangle\n\t\t\t\t\tif ( isTriDegenerate( tri ) ) {\n\n\t\t\t\t\t\ttriangles.splice( i, 1 );\n\t\t\t\t\t\ti --;\n\t\t\t\t\t\tl --;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// we're splitting with a quad and a triangle\n\t\t\t\t\t// TODO: what happens when we find that about the pos and negative\n\t\t\t\t\t// sides have only a single vertex?\n\t\t\t\t\tconst singleVert =\n\t\t\t\t\t\tposSideVerts.length >= 2 ?\n\t\t\t\t\t\t\tnegSideVerts[ 0 ] :\n\t\t\t\t\t\t\tposSideVerts[ 0 ];\n\n\t\t\t\t\t// swap the direction of the intersection edge depending on which\n\t\t\t\t\t// side of the plane the single vertex is on to align with the\n\t\t\t\t\t// correct winding order.\n\t\t\t\t\tif ( singleVert === 0 ) {\n\n\t\t\t\t\t\tlet tmp = _foundEdge.start;\n\t\t\t\t\t\t_foundEdge.start = _foundEdge.end;\n\t\t\t\t\t\t_foundEdge.end = tmp;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst nextVert1 = ( singleVert + 1 ) % 3;\n\t\t\t\t\tconst nextVert2 = ( singleVert + 2 ) % 3;\n\n\t\t\t\t\tconst nextTri1 = trianglePool.getInstance();\n\t\t\t\t\tconst nextTri2 = trianglePool.getInstance();\n\n\t\t\t\t\t// choose the triangle that has the larger areas (shortest split distance)\n\t\t\t\t\tif ( arr[ nextVert1 ].distanceToSquared( _foundEdge.start ) < arr[ nextVert2 ].distanceToSquared( _foundEdge.end ) ) {\n\n\t\t\t\t\t\tnextTri1.a.copy( arr[ nextVert1 ] );\n\t\t\t\t\t\tnextTri1.b.copy( _foundEdge.start );\n\t\t\t\t\t\tnextTri1.c.copy( _foundEdge.end );\n\n\t\t\t\t\t\tnextTri2.a.copy( arr[ nextVert1 ] );\n\t\t\t\t\t\tnextTri2.b.copy( arr[ nextVert2 ] );\n\t\t\t\t\t\tnextTri2.c.copy( _foundEdge.start );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tnextTri1.a.copy( arr[ nextVert2 ] );\n\t\t\t\t\t\tnextTri1.b.copy( _foundEdge.start );\n\t\t\t\t\t\tnextTri1.c.copy( _foundEdge.end );\n\n\t\t\t\t\t\tnextTri2.a.copy( arr[ nextVert1 ] );\n\t\t\t\t\t\tnextTri2.b.copy( arr[ nextVert2 ] );\n\t\t\t\t\t\tnextTri2.c.copy( _foundEdge.end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttri.a.copy( arr[ singleVert ] );\n\t\t\t\t\ttri.b.copy( _foundEdge.end );\n\t\t\t\t\ttri.c.copy( _foundEdge.start );\n\n\t\t\t\t\t// don't add degenerate triangles to the list\n\t\t\t\t\tif ( ! isTriDegenerate( nextTri1 ) ) {\n\n\t\t\t\t\t\ttriangles.push( nextTri1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! isTriDegenerate( nextTri2 ) ) {\n\n\t\t\t\t\t\ttriangles.push( nextTri2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// finish off the adjusted triangle\n\t\t\t\t\tif ( isTriDegenerate( tri ) ) {\n\n\t\t\t\t\t\ttriangles.splice( i, 1 );\n\t\t\t\t\t\ti --;\n\t\t\t\t\t\tl --;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( intersects === 3 ) {\n\n\t\t\t\tconsole.warn( 'TriangleClipper: Coplanar clip not handled' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treset() {\n\n\t\tthis.triangles.length = 0;\n\t\tthis.trianglePool.clear();\n\n\t}\n\n}\n","export class IntersectionMap {\n\n\tconstructor() {\n\n\t\tthis.coplanarSet = new Map();\n\t\tthis.intersectionSet = new Map();\n\t\tthis.edgeSet = new Map();\n\t\tthis.ids = [];\n\n\t}\n\n\tadd( id, intersectionId, coplanar = false ) {\n\n\t\tconst { intersectionSet, coplanarSet, ids } = this;\n\t\tif ( ! intersectionSet.has( id ) ) {\n\n\t\t\tintersectionSet.set( id, [] );\n\t\t\tids.push( id );\n\n\t\t}\n\n\t\tintersectionSet.get( id ).push( intersectionId );\n\n\t\tif ( coplanar ) {\n\n\t\t\tif ( ! coplanarSet.has( id ) ) {\n\n\t\t\t\tcoplanarSet.set( id, new Set() );\n\n\t\t\t}\n\n\t\t\tcoplanarSet.get( id ).add( intersectionId );\n\n\t\t}\n\n\t}\n\n\taddIntersectionEdge( id, edge ) {\n\n\t\tconst { edgeSet } = this;\n\t\tif ( ! edgeSet.has( id ) ) {\n\n\t\t\tedgeSet.set( id, new Set() );\n\n\t\t}\n\n\t\tedgeSet.get( id ).add( edge );\n\n\t}\n\n\tgetIntersectionEdges( id ) {\n\n\t\treturn this.edgeSet.get( id ) || null;\n\n\t}\n\n}\n","export const ADDITION = 0;\nexport const SUBTRACTION = 1;\nexport const REVERSE_SUBTRACTION = 2;\nexport const INTERSECTION = 3;\nexport const DIFFERENCE = 4;\n\n// guaranteed non manifold results\nexport const HOLLOW_SUBTRACTION = 5;\nexport const HOLLOW_INTERSECTION = 6;\n","import { Line3, Vector3, Plane } from 'three';\n\n// tolerance for considering a clipped segment degenerate (zero-length)\nconst CLIP_EPSILON = 1e-10;\n\n// tolerance for treating a denominator as zero (segment parallel to edge)\nconst PARALLEL_EPSILON = 1e-15;\n\n// tolerance for considering two triangle normals as parallel\nconst COPLANAR_NORMAL_EPSILON = 1e-10;\n\n// tolerance for considering two parallel triangles as lying on the same plane\nconst COPLANAR_DISTANCE_EPSILON = 1e-10;\n\nconst _tempLine = new Line3();\nconst _inputSeg = new Line3();\nconst _dir = new Vector3();\nconst _edgeDelta = new Vector3();\nconst _edgeNormal = new Vector3();\nconst _edgePlane = new Plane();\nconst _normalA = new Vector3();\nconst _normalB = new Vector3();\n\n// returns true if two triangles are coplanar (parallel normals and same plane distance)\nexport function isTriangleCoplanar( triA, triB ) {\n\n\ttriA.getNormal( _normalA );\n\ttriB.getNormal( _normalB );\n\n\tconst dot = _normalA.dot( _normalB );\n\tif ( Math.abs( 1.0 - Math.abs( dot ) ) >= COPLANAR_NORMAL_EPSILON ) {\n\n\t\treturn false;\n\n\t}\n\n\t// test if plane constant is within tolerance\n\tconst dA = _normalA.dot( triA.a );\n\tconst dB = _normalA.dot( triB.a );\n\treturn Math.abs( dA - dB ) < COPLANAR_DISTANCE_EPSILON;\n\n}\n\n// Clips a line segment to the interior of a coplanar triangle using the Cyrus–Beck algorithm\n// generalized to 3D half-planes.\n// Reference: Cyrus & Beck, \"Generalized two- and three-dimensional clipping\"\n// Returns the target Line3 with clipped endpoints, or null if entirely outside.\nfunction clipSegmentToTriangle( segment, tri, normal, target ) {\n\n\tlet tMin = 0;\n\tlet tMax = 1;\n\n\tsegment.delta( _dir );\n\n\tconst verts = [ tri.a, tri.b, tri.c ];\n\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\tconst v0 = verts[ i ];\n\t\tconst v1 = verts[ ( i + 1 ) % 3 ];\n\n\t\t// build the inward-facing edge plane\n\t\t_edgeDelta.subVectors( v1, v0 );\n\t\t_edgeNormal.crossVectors( normal, _edgeDelta );\n\t\t_edgePlane.setFromNormalAndCoplanarPoint( _edgeNormal, v0 );\n\n\t\t// signed distance of segment start from the edge plane\n\t\tconst dist = _edgePlane.distanceToPoint( segment.start );\n\n\t\t// rate of change of distance along segment direction\n\t\tconst denom = _edgePlane.normal.dot( _dir );\n\t\tif ( Math.abs( denom ) < PARALLEL_EPSILON ) {\n\n\t\t\t// segment parallel to edge — entirely inside or outside this half-plane\n\t\t\tif ( dist < - CLIP_EPSILON ) {\n\n\t\t\t\treturn null;\n\n\t\t\t} else {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst t = - dist / denom;\n\t\tif ( denom > 0 ) {\n\n\t\t\t// segment enters the plane at t from the negative side\n\t\t\ttMin = Math.max( tMin, t );\n\n\t\t} else {\n\n\t\t\t// segment exits the plane at t from the positive side\n\t\t\ttMax = Math.min( tMax, t );\n\n\t\t}\n\n\t\t// edge is outside the triangle\n\t\tif ( tMin > tMax + CLIP_EPSILON ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\t// segment is degenerate\n\tif ( tMax - tMin < CLIP_EPSILON ) {\n\n\t\treturn null;\n\n\t}\n\n\tsegment.at( tMin, target.start );\n\tsegment.at( tMax, target.end );\n\n\treturn target;\n\n}\n\n// Computes the edges of the intersection polygon between two coplanar triangles.\n// The boundary consists of segments from both triangles' edges clipped to the other's interior.\n// Returns the number of segments written into target.\nexport function getCoplanarIntersectionEdges( triA, triB, target ) {\n\n\tlet count = 0;\n\n\ttriA.getNormal( _normalA );\n\ttriB.getNormal( _normalB );\n\n\t// clip triB's edges against triA\n\tconst bVerts = [ triB.a, triB.b, triB.c ];\n\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t_inputSeg.start.copy( bVerts[ i ] );\n\t\t_inputSeg.end.copy( bVerts[ ( i + 1 ) % 3 ] );\n\n\t\tconst result = clipSegmentToTriangle( _inputSeg, triA, _normalA, _tempLine );\n\t\tif ( result !== null ) {\n\n\t\t\tif ( count >= target.length ) {\n\n\t\t\t\ttarget.push( new Line3() );\n\n\t\t\t}\n\n\t\t\ttarget[ count ].copy( result );\n\t\t\tcount ++;\n\n\t\t}\n\n\t}\n\n\t// clip triA's edges against triB\n\tconst aVerts = [ triA.a, triA.b, triA.c ];\n\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t_inputSeg.start.copy( aVerts[ i ] );\n\t\t_inputSeg.end.copy( aVerts[ ( i + 1 ) % 3 ] );\n\n\t\tconst result = clipSegmentToTriangle( _inputSeg, triB, _normalB, _tempLine );\n\t\tif ( result !== null ) {\n\n\t\t\tif ( count >= target.length ) {\n\n\t\t\t\ttarget.push( new Line3() );\n\n\t\t\t}\n\n\t\t\ttarget[ count ].copy( result );\n\t\t\tcount ++;\n\n\t\t}\n\n\t}\n\n\t// returns the number of segments generated\n\treturn count;\n\n}\n","import { Ray, Matrix4, DoubleSide, Line3 } from 'three';\nimport { IntersectionMap } from '../IntersectionMap.js';\nimport {\n\tADDITION,\n\tSUBTRACTION,\n\tREVERSE_SUBTRACTION,\n\tINTERSECTION,\n\tDIFFERENCE,\n\tHOLLOW_SUBTRACTION,\n\tHOLLOW_INTERSECTION,\n} from '../constants.js';\nimport { isTriDegenerate } from '../utils/triangleUtils.js';\nimport { getCoplanarIntersectionEdges, isTriangleCoplanar } from '../utils/intersectionUtils.js';\nimport { Pool } from '../utils/Pool.js';\n\nconst _ray = new Ray();\nconst _matrix = new Matrix4();\nconst _edge = new Line3();\nconst _coplanarEdges = [];\nconst _edgePool = new Pool( () => new Line3() );\n\nexport const BACK_SIDE = - 1;\nexport const FRONT_SIDE = 1;\nexport const COPLANAR_OPPOSITE = - 2;\nexport const COPLANAR_ALIGNED = 2;\n\nexport const INVERT_TRI = 0;\nexport const ADD_TRI = 1;\nexport const SKIP_TRI = 2;\n\nlet _debugContext = null;\nexport function setDebugContext( debugData ) {\n\n\t_debugContext = debugData;\n\n}\n\nexport function getHitSide( tri, bvh, matrix = null ) {\n\n\ttri.getMidpoint( _ray.origin );\n\ttri.getNormal( _ray.direction );\n\n\tif ( matrix ) {\n\n\t\t_ray.origin.applyMatrix4( matrix );\n\t\t_ray.direction.transformDirection( matrix );\n\n\t}\n\n\tconst hit = bvh.raycastFirst( _ray, DoubleSide );\n\tconst hitBackSide = Boolean( hit && _ray.direction.dot( hit.face.normal ) > 0 );\n\treturn hitBackSide ? BACK_SIDE : FRONT_SIDE;\n\n}\n\n// returns the intersected triangles and returns objects mapping triangle indices to\n// the other triangles intersected\nexport function collectIntersectingTriangles( a, b ) {\n\n\tconst aIntersections = new IntersectionMap();\n\tconst bIntersections = new IntersectionMap();\n\n\t_edgePool.clear();\n\n\t_matrix\n\t\t.copy( a.matrixWorld )\n\t\t.invert()\n\t\t.multiply( b.matrixWorld );\n\n\ta.geometry.boundsTree.bvhcast( b.geometry.boundsTree, _matrix, {\n\n\t\tintersectsTriangles( triangleA, triangleB, ia, ib ) {\n\n\t\t\tif ( ! isTriDegenerate( triangleA ) && ! isTriDegenerate( triangleB ) ) {\n\n\t\t\t\t// due to floating point error it's possible that we can have two overlapping, coplanar triangles\n\t\t\t\t// that are a _tiny_ fraction of a value away from each other. If we find that case then check the\n\t\t\t\t// distance between triangles and if it's small enough consider them intersecting.\n\t\t\t\tconst coplanarCount = isTriangleCoplanar( triangleA, triangleB ) ? getCoplanarIntersectionEdges( triangleA, triangleB, _coplanarEdges ) : 0;\n\t\t\t\tconst isCoplanarIntersection = coplanarCount > 2;\n\t\t\t\tconst intersected = isCoplanarIntersection || triangleA.intersectsTriangle( triangleB, _edge, true );\n\t\t\t\tif ( intersected ) {\n\n\t\t\t\t\tconst va = a.geometry.boundsTree.resolveTriangleIndex( ia );\n\t\t\t\t\tconst vb = b.geometry.boundsTree.resolveTriangleIndex( ib );\n\t\t\t\t\taIntersections.add( va, vb, isCoplanarIntersection );\n\t\t\t\t\tbIntersections.add( vb, va, isCoplanarIntersection );\n\n\t\t\t\t\t// cache intersection edges in geometry A's local frame\n\t\t\t\t\tif ( isCoplanarIntersection ) {\n\n\t\t\t\t\t\t// coplanar\n\t\t\t\t\t\tconst count = getCoplanarIntersectionEdges( triangleA, triangleB, _coplanarEdges );\n\t\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\tconst e = _edgePool.getInstance().copy( _coplanarEdges[ i ] );\n\t\t\t\t\t\t\taIntersections.addIntersectionEdge( va, e );\n\t\t\t\t\t\t\tbIntersections.addIntersectionEdge( vb, e );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// non-coplanar\n\t\t\t\t\t\tconst ea = _edgePool.getInstance().copy( _edge );\n\t\t\t\t\t\tconst eb = _edgePool.getInstance().copy( _edge );\n\t\t\t\t\t\taIntersections.addIntersectionEdge( va, ea );\n\t\t\t\t\t\tbIntersections.addIntersectionEdge( vb, eb );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( _debugContext ) {\n\n\t\t\t\t\t\t_debugContext.addEdge( _edge );\n\t\t\t\t\t\t_debugContext.addIntersectingTriangles( ia, triangleA, ib, triangleB );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t}\n\n\t} );\n\n\treturn { aIntersections, bIntersections };\n\n}\n\n// Returns the triangle to add when performing an operation\nexport function getOperationAction( operation, hitSide, invert = false ) {\n\n\tswitch ( operation ) {\n\n\t\tcase ADDITION:\n\n\t\t\tif ( hitSide === FRONT_SIDE || ( hitSide === COPLANAR_ALIGNED && ! invert ) ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase SUBTRACTION:\n\n\t\t\tif ( invert ) {\n\n\t\t\t\tif ( hitSide === BACK_SIDE ) {\n\n\t\t\t\t\treturn INVERT_TRI;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( hitSide === FRONT_SIDE || hitSide === COPLANAR_OPPOSITE ) {\n\n\t\t\t\t\treturn ADD_TRI;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase REVERSE_SUBTRACTION:\n\n\t\t\tif ( invert ) {\n\n\t\t\t\tif ( hitSide === FRONT_SIDE || hitSide === COPLANAR_OPPOSITE ) {\n\n\t\t\t\t\treturn ADD_TRI;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( hitSide === BACK_SIDE ) {\n\n\t\t\t\t\treturn INVERT_TRI;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase DIFFERENCE:\n\n\t\t\tif ( hitSide === BACK_SIDE ) {\n\n\t\t\t\treturn INVERT_TRI;\n\n\t\t\t} else if ( hitSide === FRONT_SIDE ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase INTERSECTION:\n\t\t\tif ( hitSide === BACK_SIDE || ( hitSide === COPLANAR_ALIGNED && ! invert ) ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase HOLLOW_SUBTRACTION:\n\t\t\tif ( ! invert && ( hitSide === FRONT_SIDE || hitSide === COPLANAR_OPPOSITE ) ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase HOLLOW_INTERSECTION:\n\t\t\tif ( ! invert && ( hitSide === BACK_SIDE || hitSide === COPLANAR_ALIGNED ) ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error( `Unrecognized CSG operation enum \"${ operation }\".` );\n\n\t}\n\n\treturn SKIP_TRI;\n\n}\n","import { Triangle } from 'three';\nimport { setDebugContext } from '../operations/operationsUtils.js';\n\nclass TriangleIntersectData {\n\n\tconstructor( tri ) {\n\n\t\tthis.triangle = new Triangle().copy( tri );\n\t\tthis.intersects = {};\n\n\t}\n\n\taddTriangle( index, tri ) {\n\n\t\tthis.intersects[ index ] = new Triangle().copy( tri );\n\n\t}\n\n\tgetIntersectArray() {\n\n\t\tconst array = [];\n\t\tconst { intersects } = this;\n\t\tfor ( const key in intersects ) {\n\n\t\t\tarray.push( intersects[ key ] );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n}\n\nclass TriangleIntersectionSets {\n\n\tconstructor() {\n\n\t\tthis.data = {};\n\n\t}\n\n\taddTriangleIntersection( ia, triA, ib, triB ) {\n\n\t\tconst { data } = this;\n\t\tif ( ! data[ ia ] ) {\n\n\t\t\tdata[ ia ] = new TriangleIntersectData( triA );\n\n\t\t}\n\n\t\tdata[ ia ].addTriangle( ib, triB );\n\n\t}\n\n\tgetTrianglesAsArray( id = null ) {\n\n\t\tconst { data } = this;\n\t\tconst arr = [];\n\n\t\tif ( id !== null ) {\n\n\t\t\tif ( id in data ) {\n\n\t\t\t\tarr.push( data[ id ].triangle );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( const key in data ) {\n\n\t\t\t\tarr.push( data[ key ].triangle );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn arr;\n\n\t}\n\n\tgetTriangleIndices() {\n\n\t\treturn Object.keys( this.data ).map( i => parseInt( i ) );\n\n\t}\n\n\tgetIntersectionIndices( id ) {\n\n\t\tconst { data } = this;\n\t\tif ( ! data[ id ] ) {\n\n\t\t\treturn [];\n\n\t\t} else {\n\n\t\t\treturn Object.keys( data[ id ].intersects ).map( i => parseInt( i ) );\n\n\n\t\t}\n\n\t}\n\n\tgetIntersectionsAsArray( id = null, id2 = null ) {\n\n\t\tconst { data } = this;\n\t\tconst triSet = new Set();\n\t\tconst arr = [];\n\n\t\tconst addTriangles = key => {\n\n\t\t\tif ( ! data[ key ] ) return;\n\n\t\t\tif ( id2 !== null ) {\n\n\t\t\t\tif ( data[ key ].intersects[ id2 ] ) {\n\n\t\t\t\t\tarr.push( data[ key ].intersects[ id2 ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst intersects = data[ key ].intersects;\n\t\t\t\tfor ( const key2 in intersects ) {\n\n\t\t\t\t\tif ( ! triSet.has( key2 ) ) {\n\n\t\t\t\t\t\ttriSet.add( key2 );\n\t\t\t\t\t\tarr.push( intersects[ key2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tif ( id !== null ) {\n\n\t\t\taddTriangles( id );\n\n\t\t} else {\n\n\t\t\tfor ( const key in data ) {\n\n\t\t\t\taddTriangles( key );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn arr;\n\n\t}\n\n\treset() {\n\n\t\tthis.data = {};\n\n\t}\n\n}\n\nexport class OperationDebugData {\n\n\tconstructor() {\n\n\t\tthis.enabled = false;\n\t\tthis.triangleIntersectsA = new TriangleIntersectionSets();\n\t\tthis.triangleIntersectsB = new TriangleIntersectionSets();\n\t\tthis.intersectionEdges = [];\n\n\t}\n\n\taddIntersectingTriangles( ia, triA, ib, triB ) {\n\n\t\tconst { triangleIntersectsA, triangleIntersectsB } = this;\n\t\ttriangleIntersectsA.addTriangleIntersection( ia, triA, ib, triB );\n\t\ttriangleIntersectsB.addTriangleIntersection( ib, triB, ia, triA );\n\n\t}\n\n\taddEdge( edge ) {\n\n\t\tthis.intersectionEdges.push( edge.clone() );\n\n\t}\n\n\treset() {\n\n\t\tthis.triangleIntersectsA.reset();\n\t\tthis.triangleIntersectsB.reset();\n\t\tthis.intersectionEdges = [];\n\n\t}\n\n\tinit() {\n\n\t\tif ( this.enabled ) {\n\n\t\t\tthis.reset();\n\t\t\tsetDebugContext( this );\n\n\t\t}\n\n\t}\n\n\tcomplete() {\n\n\t\tif ( this.enabled ) {\n\n\t\t\tsetDebugContext( null );\n\n\t\t}\n\n\t}\n\n}\n","import { Matrix4, Matrix3, Triangle, Vector3 } from 'three';\nimport {\n\tgetHitSide,\n\tcollectIntersectingTriangles,\n\tgetOperationAction,\n\tSKIP_TRI, INVERT_TRI,\n\tCOPLANAR_ALIGNED,\n\tCOPLANAR_OPPOSITE,\n} from './operationsUtils.js';\nimport { getTriCount } from '../utils/geometryUtils.js';\nimport { HOLLOW_INTERSECTION, HOLLOW_SUBTRACTION } from '../constants.js';\nimport { isTriDegenerate } from '../utils/triangleUtils.js';\nimport { Pool } from '../utils/Pool.js';\n\nconst _matrix = new Matrix4();\nconst _inverseMatrix = new Matrix4();\nconst _builderMatrix = new Matrix4();\nconst _normalMatrix = new Matrix3();\nconst _triA = new Triangle();\nconst _triB = new Triangle();\nconst _tri = new Triangle();\nconst _barycoordTri = new Triangle();\nconst _actions = [];\nconst _builders = [];\nconst _traversed = new Set();\nconst _midpoint = new Vector3();\nconst _normal = new Vector3();\nconst _coplanarTrianglePool = new Pool( () => new Triangle() );\nconst _coplanarNormal = new Vector3();\nconst _coplanarTriangles = [];\n\n// runs the given operation against a and b using the splitter and appending data to the\n// geometry builder.\nexport function performOperation(\n\ta,\n\tb,\n\toperations,\n\tsplitter,\n\tbuilders,\n\toptions = {},\n) {\n\n\tconst { useGroups = true } = options;\n\tconst { aIntersections, bIntersections } = collectIntersectingTriangles( a, b );\n\n\tconst resultGroups = [];\n\tlet resultMaterials = null;\n\n\tlet groupOffset;\n\tgroupOffset = useGroups ? 0 : - 1;\n\tperformWholeTriangleOperations( a, b, aIntersections, operations, false, builders, groupOffset );\n\tperformSplitTriangleOperations( a, b, aIntersections, operations, false, splitter, builders, groupOffset );\n\n\t// find whether the set of operations contains a non-hollow operations. If it does then we need\n\t// to perform the second set of triangle additions\n\tconst nonHollow = operations\n\t\t.findIndex( op => op !== HOLLOW_INTERSECTION && op !== HOLLOW_SUBTRACTION ) !== - 1;\n\n\tif ( nonHollow ) {\n\n\t\t// clear the index map so for the new geometry being used\n\t\tbuilders.forEach( builder => builder.clearIndexMap() );\n\n\t\tgroupOffset = useGroups ? a.geometry.groups.length || 1 : - 1;\n\t\tperformWholeTriangleOperations( b, a, bIntersections, operations, true, builders, groupOffset );\n\t\tperformSplitTriangleOperations( b, a, bIntersections, operations, true, splitter, builders, groupOffset );\n\n\t}\n\n\t// clear the shared info\n\tbuilders.forEach( builder => builder.clearIndexMap() );\n\t_actions.length = 0;\n\n\treturn {\n\t\tgroups: resultGroups,\n\t\tmaterials: resultMaterials\n\t};\n\n}\n\n// perform triangle splitting and CSG operations on the set of split triangles\nfunction performSplitTriangleOperations(\n\ta,\n\tb,\n\tintersectionMap,\n\toperations,\n\tinvert,\n\tsplitter,\n\tbuilders,\n\tgroupOffset = 0,\n) {\n\n\t// transform from a frame -> b frame. When \"invert\" is true the \"b\" is the first argument (brush A).\n\t_matrix\n\t\t.copy( b.matrixWorld )\n\t\t.invert()\n\t\t.multiply( a.matrixWorld );\n\n\t_inverseMatrix\n\t\t.copy( _matrix )\n\t\t.invert();\n\n\t// matrix for geometry construction to transform vertices in the brush A's frame\n\tif ( invert ) {\n\n\t\t_builderMatrix.copy( _matrix );\n\n\t} else {\n\n\t\t_builderMatrix.identity();\n\n\t}\n\n\tconst invertedGeometry = _builderMatrix.determinant() < 0;\n\t_normalMatrix\n\t\t.getNormalMatrix( _builderMatrix )\n\t\t.multiplyScalar( invertedGeometry ? - 1 : 1 );\n\n\tconst groupIndices = a.geometry.groupIndices;\n\tconst aIndex = a.geometry.index;\n\tconst aPosition = a.geometry.attributes.position;\n\n\tconst bBVH = b.geometry.boundsTree;\n\tconst bIndex = b.geometry.index;\n\tconst bPosition = b.geometry.attributes.position;\n\tconst splitIds = intersectionMap.ids;\n\n\t// iterate over all split triangle indices\n\tfor ( let i = 0, l = splitIds.length; i < l; i ++ ) {\n\n\t\tconst ia = splitIds[ i ];\n\t\tconst groupIndex = groupOffset === - 1 ? 0 : groupIndices[ ia ] + groupOffset;\n\n\t\t// get the triangle in the common frame (brush A's local)\n\t\tconst ia3 = 3 * ia;\n\t\tlet ia0 = ia3 + 0;\n\t\tlet ia1 = ia3 + 1;\n\t\tlet ia2 = ia3 + 2;\n\t\tif ( aIndex ) {\n\n\t\t\tia0 = aIndex.getX( ia0 );\n\t\t\tia1 = aIndex.getX( ia1 );\n\t\t\tia2 = aIndex.getX( ia2 );\n\n\t\t}\n\n\t\t_triA.a.fromBufferAttribute( aPosition, ia0 );\n\t\t_triA.b.fromBufferAttribute( aPosition, ia1 );\n\t\t_triA.c.fromBufferAttribute( aPosition, ia2 );\n\t\tif ( invert ) {\n\n\t\t\t_triA.a.applyMatrix4( _matrix );\n\t\t\t_triA.b.applyMatrix4( _matrix );\n\t\t\t_triA.c.applyMatrix4( _matrix );\n\n\t\t}\n\n\t\t// initialize the splitter with the triangle from geometry A\n\t\tsplitter.reset();\n\t\tsplitter.initialize( _triA, ia0, ia1, ia2 );\n\n\t\t// add coplanar triangles from B to the splitter for later classification\n\t\t_coplanarTriangles.length = 0;\n\t\t_coplanarTrianglePool.clear();\n\t\t_triA.getNormal( _normal );\n\n\t\tconst coplanarIndices = intersectionMap.coplanarSet.get( ia );\n\t\tif ( coplanarIndices ) {\n\n\t\t\tfor ( const index of coplanarIndices ) {\n\n\t\t\t\tconst ib3 = 3 * index;\n\t\t\t\tlet ib0 = ib3 + 0;\n\t\t\t\tlet ib1 = ib3 + 1;\n\t\t\t\tlet ib2 = ib3 + 2;\n\n\t\t\t\tif ( bIndex ) {\n\n\t\t\t\t\tib0 = bIndex.getX( ib0 );\n\t\t\t\t\tib1 = bIndex.getX( ib1 );\n\t\t\t\t\tib2 = bIndex.getX( ib2 );\n\n\t\t\t\t}\n\n\t\t\t\tconst inst = _coplanarTrianglePool.getInstance();\n\t\t\t\tinst.a.fromBufferAttribute( bPosition, ib0 );\n\t\t\t\tinst.b.fromBufferAttribute( bPosition, ib1 );\n\t\t\t\tinst.c.fromBufferAttribute( bPosition, ib2 );\n\n\t\t\t\t// transform into the common frame when needed\n\t\t\t\tif ( ! invert ) {\n\n\t\t\t\t\tinst.a.applyMatrix4( _inverseMatrix );\n\t\t\t\t\tinst.b.applyMatrix4( _inverseMatrix );\n\t\t\t\t\tinst.c.applyMatrix4( _inverseMatrix );\n\n\t\t\t\t}\n\n\t\t\t\t_coplanarTriangles.push( inst );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// split the triangle using cached edges from the bvhcast phase\n\t\tif ( splitter.addConstraintEdge ) {\n\n\t\t\t// edges are already in the common frame (brush A's local) — no transform needed\n\t\t\tconst edges = intersectionMap.getIntersectionEdges( ia );\n\t\t\tif ( edges ) {\n\n\t\t\t\tfor ( const edge of edges ) {\n\n\t\t\t\t\tsplitter.addConstraintEdge( edge );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tsplitter.triangulate();\n\n\t\t} else {\n\n\t\t\t// split the triangle with the intersecting triangles from B\n\t\t\tconst intersectionSet = intersectionMap.intersectionSet;\n\t\t\tconst intersectingIndices = intersectionSet.get( ia );\n\t\t\tfor ( let ib = 0, l = intersectingIndices.length; ib < l; ib ++ ) {\n\n\t\t\t\tconst index = intersectingIndices[ ib ];\n\t\t\t\tconst isCoplanar = coplanarIndices && coplanarIndices.has( index );\n\t\t\t\tconst ib3 = 3 * index;\n\t\t\t\tlet ib0 = ib3 + 0;\n\t\t\t\tlet ib1 = ib3 + 1;\n\t\t\t\tlet ib2 = ib3 + 2;\n\n\t\t\t\tif ( bIndex ) {\n\n\t\t\t\t\tib0 = bIndex.getX( ib0 );\n\t\t\t\t\tib1 = bIndex.getX( ib1 );\n\t\t\t\t\tib2 = bIndex.getX( ib2 );\n\n\t\t\t\t}\n\n\t\t\t\t_triB.a.fromBufferAttribute( bPosition, ib0 );\n\t\t\t\t_triB.b.fromBufferAttribute( bPosition, ib1 );\n\t\t\t\t_triB.c.fromBufferAttribute( bPosition, ib2 );\n\n\t\t\t\t// transform splitting tris into the common frame when needed\n\t\t\t\tif ( ! invert ) {\n\n\t\t\t\t\t_triB.a.applyMatrix4( _inverseMatrix );\n\t\t\t\t\t_triB.b.applyMatrix4( _inverseMatrix );\n\t\t\t\t\t_triB.c.applyMatrix4( _inverseMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tsplitter.splitByTriangle( _triB, isCoplanar );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// cache all the attribute data in origA's local frame\n\t\tconst { triangles, triangleIndices = [], triangleConnectivity = [] } = splitter;\n\t\tfor ( let i = 0, l = builders.length; i < l; i ++ ) {\n\n\t\t\tbuilders[ i ].initInterpolatedAttributeData( a.geometry, _builderMatrix, _normalMatrix, ia0, ia1, ia2 );\n\n\t\t}\n\n\t\t// for all triangles in the split result\n\t\t_traversed.clear();\n\t\tfor ( let ib = 0, l = triangles.length; ib < l; ib ++ ) {\n\n\t\t\t// skip the triangle if we've already traversed\n\t\t\tif ( _traversed.has( ib ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// try to use the side derived from the clipping but if it turns out to be\n\t\t\t// uncertain then fall back to the raycasting approach.\n\t\t\t// If checking the sided ness against brush B's BVH then we need to transform\n\t\t\t// into the appropriate frame\n\t\t\tconst clippedTri = triangles[ ib ];\n\t\t\tconst raycastMatrix = invert ? null : _matrix;\n\t\t\tlet hitSide = null;\n\n\t\t\t// check against the set of coplanar triangles to see if we can easily determine what to do\n\t\t\tclippedTri.getMidpoint( _midpoint );\n\t\t\tfor ( let cp = 0, cpl = _coplanarTriangles.length; cp < cpl; cp ++ ) {\n\n\t\t\t\tconst cpt = _coplanarTriangles[ cp ];\n\t\t\t\tif ( cpt.containsPoint( _midpoint ) ) {\n\n\t\t\t\t\tcpt.getNormal( _coplanarNormal );\n\t\t\t\t\thitSide = _normal.dot( _coplanarNormal ) > 0 ? COPLANAR_ALIGNED : COPLANAR_OPPOSITE;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// if the clipped triangle is no coplanar then fall back to raycasting\n\t\t\tif ( hitSide === null ) {\n\n\t\t\t\thitSide = getHitSide( clippedTri, bBVH, raycastMatrix );\n\n\t\t\t}\n\n\t\t\t_actions.length = 0;\n\t\t\t_builders.length = 0;\n\n\t\t\t// determine action to take for each builder\n\t\t\tfor ( let o = 0, lo = operations.length; o < lo; o ++ ) {\n\n\t\t\t\tconst op = getOperationAction( operations[ o ], hitSide, invert );\n\t\t\t\tif ( op !== SKIP_TRI ) {\n\n\t\t\t\t\t_actions.push( op );\n\t\t\t\t\t_builders.push( builders[ o ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( _builders.length !== 0 ) {\n\n\t\t\t\t// traverse the connectivity of the triangles to add them to the geometry\n\t\t\t\tconst stack = [ ib ];\n\t\t\t\twhile ( stack.length > 0 ) {\n\n\t\t\t\t\tconst index = stack.pop();\n\t\t\t\t\tif ( _traversed.has( index ) ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// mark this triangle as traversed\n\t\t\t\t\t_traversed.add( index );\n\n\t\t\t\t\t// TODO: this is being skipped for now due to the connectivity graph not\n\t\t\t\t\t// including small connections due to floating point error. Adding support\n\t\t\t\t\t// for symmetric vertices across half edges may help this.\n\t\t\t\t\t// push the connected triangle ids onto the stack\n\t\t\t\t\t// const connected = triangleConnectivity[ index ] || [];\n\t\t\t\t\t// for ( let c = 0, l = connected.length; c < l; c ++ ) {\n\n\t\t\t\t\t// \tconst connectedIndex = connected[ c ];\n\t\t\t\t\t// \tif ( triangles[ connectedIndex ] !== null ) {\n\n\t\t\t\t\t// \t\tstack.push( connectedIndex );\n\n\t\t\t\t\t// \t}\n\n\t\t\t\t\t// }\n\n\t\t\t\t\t// get the triangle indices\n\t\t\t\t\tconst indices = triangleIndices[ index ];\n\t\t\t\t\tlet t0 = null, t1 = null, t2 = null;\n\t\t\t\t\tif ( indices ) {\n\n\t\t\t\t\t\tt0 = indices[ 0 ];\n\t\t\t\t\t\tt1 = indices[ 1 ];\n\t\t\t\t\t\tt2 = indices[ 2 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// get the barycentric coordinates relative to the base triangle\n\t\t\t\t\tconst tri = triangles[ index ];\n\t\t\t\t\t_triA.getBarycoord( tri.a, _barycoordTri.a );\n\t\t\t\t\t_triA.getBarycoord( tri.b, _barycoordTri.b );\n\t\t\t\t\t_triA.getBarycoord( tri.c, _barycoordTri.c );\n\n\t\t\t\t\t// append the triangle to all builders\n\t\t\t\t\tfor ( let k = 0, lk = _builders.length; k < lk; k ++ ) {\n\n\t\t\t\t\t\tconst builder = _builders[ k ];\n\t\t\t\t\t\tconst action = _actions[ k ];\n\t\t\t\t\t\tconst invertTri = action === INVERT_TRI;\n\t\t\t\t\t\tconst invert = invertedGeometry !== invertTri;\n\n\t\t\t\t\t\tbuilder.appendInterpolatedAttributeData( groupIndex, _barycoordTri.a, t0, invert );\n\t\t\t\t\t\tif ( invert ) {\n\n\t\t\t\t\t\t\tbuilder.appendInterpolatedAttributeData( groupIndex, _barycoordTri.c, t2, invert );\n\t\t\t\t\t\t\tbuilder.appendInterpolatedAttributeData( groupIndex, _barycoordTri.b, t1, invert );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tbuilder.appendInterpolatedAttributeData( groupIndex, _barycoordTri.b, t1, invert );\n\t\t\t\t\t\t\tbuilder.appendInterpolatedAttributeData( groupIndex, _barycoordTri.c, t2, invert );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn splitIds.length;\n\n}\n\n// perform CSG operations on the set of whole triangles using a half edge structure\n// at the moment this isn't always faster due to overhead of building the half edge structure\n// and degraded connectivity due to split triangles.\nfunction performWholeTriangleOperations(\n\ta,\n\tb,\n\tsplitTriSet,\n\toperations,\n\tinvert,\n\tbuilders,\n\tgroupOffset = 0,\n) {\n\n\t// _matrix transforms from a's local frame into the common frame (brush A's local)\n\t_matrix\n\t\t.copy( b.matrixWorld )\n\t\t.invert()\n\t\t.multiply( a.matrixWorld );\n\n\tif ( invert ) {\n\n\t\t_builderMatrix.copy( _matrix );\n\n\t} else {\n\n\t\t_builderMatrix.identity();\n\n\t}\n\n\tconst invertedGeometry = _builderMatrix.determinant() < 0;\n\t_normalMatrix\n\t\t.getNormalMatrix( _builderMatrix )\n\t\t.multiplyScalar( invertedGeometry ? - 1 : 1 );\n\n\tconst bBVH = b.geometry.boundsTree;\n\tconst groupIndices = a.geometry.groupIndices;\n\tconst aIndex = a.geometry.index;\n\tconst aAttributes = a.geometry.attributes;\n\tconst aPosition = aAttributes.position;\n\n\tconst stack = [];\n\tconst halfEdges = a.geometry.halfEdges;\n\n\t// iterate over every whole triangle, skipping those that are clipped\n\tconst traversedSet = new Set( splitTriSet.ids );\n\tconst triCount = getTriCount( a.geometry );\n\tfor ( let id = 0; id < triCount; id ++ ) {\n\n\t\t// if we've iterated over every triangle then stop\n\t\tif ( traversedSet.size === triCount ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t\t// skip this triangle if we've already traversed it\n\t\tif ( traversedSet.has( id ) ) {\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\t// track the traversal\n\t\ttraversedSet.add( id );\n\t\tstack.push( id );\n\n\t\t// get the vertex indices\n\t\tconst i3 = 3 * id;\n\t\tlet i0 = i3 + 0;\n\t\tlet i1 = i3 + 1;\n\t\tlet i2 = i3 + 2;\n\t\tif ( aIndex ) {\n\n\t\t\ti0 = aIndex.getX( i0 );\n\t\t\ti1 = aIndex.getX( i1 );\n\t\t\ti2 = aIndex.getX( i2 );\n\n\t\t}\n\n\t\t// get the vertex position in the common frame (origA's local) for hit testing\n\t\t_tri.a.fromBufferAttribute( aPosition, i0 );\n\t\t_tri.b.fromBufferAttribute( aPosition, i1 );\n\t\t_tri.c.fromBufferAttribute( aPosition, i2 );\n\t\tif ( invert ) {\n\n\t\t\t_tri.a.applyMatrix4( _matrix );\n\t\t\t_tri.b.applyMatrix4( _matrix );\n\t\t\t_tri.c.applyMatrix4( _matrix );\n\n\t\t}\n\n\t\t// get the side and decide if we need to cull the triangle based on the operation.\n\t\t// When !invert, pass _matrix to transform the ray into brush B's BVH frame.\n\t\tconst hitSide = getHitSide( _tri, bBVH, invert ? null : _matrix );\n\n\t\t// find all attribute sets to append the triangle to\n\t\t_actions.length = 0;\n\t\t_builders.length = 0;\n\t\tfor ( let o = 0, lo = operations.length; o < lo; o ++ ) {\n\n\t\t\tconst op = getOperationAction( operations[ o ], hitSide, invert );\n\t\t\tif ( op !== SKIP_TRI ) {\n\n\t\t\t\t_actions.push( op );\n\t\t\t\t_builders.push( builders[ o ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// continue to iterate on the stack until every triangle has been handled\n\t\twhile ( stack.length > 0 ) {\n\n\t\t\tconst currId = stack.pop();\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tconst sid = halfEdges.getSiblingTriangleIndex( currId, i );\n\t\t\t\tif ( sid !== - 1 && ! traversedSet.has( sid ) ) {\n\n\t\t\t\t\tstack.push( sid );\n\t\t\t\t\ttraversedSet.add( sid );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( _builders.length !== 0 ) {\n\n\t\t\t\tconst i3 = 3 * currId;\n\t\t\t\tlet i0 = i3 + 0;\n\t\t\t\tlet i1 = i3 + 1;\n\t\t\t\tlet i2 = i3 + 2;\n\t\t\t\tif ( aIndex ) {\n\n\t\t\t\t\ti0 = aIndex.getX( i0 );\n\t\t\t\t\ti1 = aIndex.getX( i1 );\n\t\t\t\t\ti2 = aIndex.getX( i2 );\n\n\t\t\t\t}\n\n\t\t\t\tconst groupIndex = groupOffset === - 1 ? 0 : groupIndices[ currId ] + groupOffset;\n\n\t\t\t\t_tri.a.fromBufferAttribute( aPosition, i0 );\n\t\t\t\t_tri.b.fromBufferAttribute( aPosition, i1 );\n\t\t\t\t_tri.c.fromBufferAttribute( aPosition, i2 );\n\t\t\t\tif ( ! isTriDegenerate( _tri ) ) {\n\n\t\t\t\t\tfor ( let k = 0, lk = _builders.length; k < lk; k ++ ) {\n\n\t\t\t\t\t\tconst builder = _builders[ k ];\n\t\t\t\t\t\tconst action = _actions[ k ];\n\t\t\t\t\t\tconst invertTri = action === INVERT_TRI;\n\t\t\t\t\t\tconst invert = invertTri !== invertedGeometry;\n\t\t\t\t\t\tbuilder.appendIndexFromGeometry( a.geometry, _builderMatrix, _normalMatrix, groupIndex, i0, invert );\n\n\t\t\t\t\t\tif ( invert ) {\n\n\t\t\t\t\t\t\tbuilder.appendIndexFromGeometry( a.geometry, _builderMatrix, _normalMatrix, groupIndex, i2, invert );\n\t\t\t\t\t\t\tbuilder.appendIndexFromGeometry( a.geometry, _builderMatrix, _normalMatrix, groupIndex, i1, invert );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tbuilder.appendIndexFromGeometry( a.geometry, _builderMatrix, _normalMatrix, groupIndex, i1, invert );\n\t\t\t\t\t\t\tbuilder.appendIndexFromGeometry( a.geometry, _builderMatrix, _normalMatrix, groupIndex, i2, invert );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n","import { areSharedArrayBuffersSupported } from './utils/geometryUtils.js';\n\nfunction ceilToFourByteStride( byteLength ) {\n\n\tbyteLength = ~ ~ byteLength;\n\treturn byteLength + 4 - byteLength % 4;\n\n}\n\n// Make a new array wrapper class that more easily affords expansion when reaching it's max capacity\nexport class TypeBackedArray {\n\n\tconstructor( type, initialSize = 500 ) {\n\n\t\tthis.expansionFactor = 1.5;\n\t\tthis.type = type;\n\t\tthis.length = 0;\n\t\tthis.array = null;\n\n\t\tthis.setSize( initialSize );\n\n\t}\n\n\tsetType( type ) {\n\n\t\tif ( type === this.type ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.length !== 0 ) {\n\n\t\t\tthrow new Error( 'TypeBackedArray: Cannot change the type while there is used data in the buffer.' );\n\n\t\t}\n\n\t\tconst buffer = this.array.buffer;\n\t\tthis.array = new type( buffer );\n\t\tthis.type = type;\n\n\t}\n\n\tsetSize( size ) {\n\n\t\tif ( this.array && size === this.array.length ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// ceil to the nearest 4 bytes so we can replace the array with any type using the same buffer\n\t\tconst type = this.type;\n\t\tconst bufferType = areSharedArrayBuffersSupported() ? SharedArrayBuffer : ArrayBuffer;\n\t\tconst newArray = new type( new bufferType( ceilToFourByteStride( size * type.BYTES_PER_ELEMENT ) ) );\n\t\tif ( this.array ) {\n\n\t\t\tnewArray.set( this.array, 0 );\n\n\t\t}\n\n\t\tthis.array = newArray;\n\n\t}\n\n\texpand() {\n\n\t\tconst { array, expansionFactor } = this;\n\t\tthis.setSize( array.length * expansionFactor );\n\n\t}\n\n\tpush( ...args ) {\n\n\t\tlet { array, length } = this;\n\t\tif ( length + args.length > array.length ) {\n\n\t\t\tthis.expand();\n\t\t\tarray = this.array;\n\n\t\t}\n\n\t\tfor ( let i = 0, l = args.length; i < l; i ++ ) {\n\n\t\t\tarray[ length + i ] = args[ i ];\n\n\t\t}\n\n\t\tthis.length += args.length;\n\n\t}\n\n\tclear() {\n\n\t\tthis.length = 0;\n\n\t}\n\n}\n","import { TypeBackedArray } from '../TypeBackedArray.js';\nimport { Vector3, Vector4, BufferAttribute } from 'three';\n\nconst _vec3 = new Vector3();\nconst _vec3_0 = new Vector3();\nconst _vec3_1 = new Vector3();\nconst _vec3_2 = new Vector3();\n\nconst _vec4 = new Vector4();\nconst _vec4_0 = new Vector4();\nconst _vec4_1 = new Vector4();\nconst _vec4_2 = new Vector4();\n\nfunction getBarycoordValue( a, b, c, barycoord, target, normalize = false, invert = false ) {\n\n\ttarget.set( 0, 0, 0, 0 )\n\t\t.addScaledVector( a, barycoord.x )\n\t\t.addScaledVector( b, barycoord.y )\n\t\t.addScaledVector( c, barycoord.z );\n\n\tif ( normalize ) {\n\n\t\ttarget.normalize();\n\n\t}\n\n\tif ( invert ) {\n\n\t\ttarget.multiplyScalar( - 1 );\n\n\t}\n\n\treturn target;\n\n}\n\nfunction pushItemSize( vec, itemSize, target ) {\n\n\tswitch ( itemSize ) {\n\n\t\tcase 1:\n\t\t\ttarget.push( vec.x );\n\t\t\tbreak;\n\n\t\tcase 2:\n\t\t\ttarget.push( vec.x, vec.y );\n\t\t\tbreak;\n\n\t\tcase 3:\n\t\t\ttarget.push( vec.x, vec.y, vec.z );\n\t\t\tbreak;\n\n\t\tcase 4:\n\t\t\ttarget.push( vec.x, vec.y, vec.z, vec.w );\n\t\t\tbreak;\n\n\t}\n\n}\n\nclass AttributeData extends TypeBackedArray {\n\n\tget count() {\n\n\t\treturn this.length / this.itemSize;\n\n\t}\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\t\tthis.itemSize = 1;\n\t\tthis.normalized = false;\n\n\n\t}\n\n}\n\nexport class GeometryBuilder {\n\n\tconstructor() {\n\n\t\tthis.attributeData = {};\n\t\tthis.groupIndices = [];\n\t\tthis.forwardIndexMap = new Map();\n\t\tthis.invertedIndexMap = new Map();\n\t\tthis.interpolatedFields = {};\n\n\t}\n\n\tinitFromGeometry( referenceGeometry, relevantAttributes ) {\n\n\t\tthis.clear();\n\n\t\t// initialize and clear unused data from the attribute buffers and vice versa\n\t\tconst { attributeData } = this;\n\t\tconst refAttributes = referenceGeometry.attributes;\n\t\tfor ( let i = 0, l = relevantAttributes.length; i < l; i ++ ) {\n\n\t\t\tconst key = relevantAttributes[ i ];\n\t\t\tconst refAttr = refAttributes[ key ];\n\t\t\tconst type = refAttr.array.constructor;\n\t\t\tif ( ! attributeData[ key ] ) {\n\n\t\t\t\tattributeData[ key ] = new AttributeData( type );\n\n\t\t\t}\n\n\t\t\tattributeData[ key ].setType( type );\n\t\t\tattributeData[ key ].itemSize = refAttr.itemSize;\n\t\t\tattributeData[ key ].normalized = refAttr.normalized;\n\n\t\t}\n\n\t\tfor ( const key in attributeData.attributes ) {\n\n\t\t\tif ( ! relevantAttributes.includes( key ) ) {\n\n\t\t\t\tattributeData.delete( key );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// init and cache all the attribute data for the given indices so we can use it to append interpolated attribute data\n\tinitInterpolatedAttributeData( geometry, matrix, normalMatrix, i0, i1, i2 ) {\n\n\t\tconst { attributeData, interpolatedFields } = this;\n\t\tconst { attributes } = geometry;\n\n\t\tfor ( const key in attributeData ) {\n\n\t\t\tconst attr = attributes[ key ];\n\t\t\tif ( ! attr ) {\n\n\t\t\t\tthrow new Error( `CSG Operations: Attribute ${ key } not available on geometry.` );\n\n\t\t\t}\n\n\t\t\t// handle normals and positions specially because they require transforming\n\t\t\tlet v0, v1, v2;\n\t\t\tif ( key === 'position' ) {\n\n\t\t\t\tv0 = _vec3_0.fromBufferAttribute( attr, i0 ).applyMatrix4( matrix );\n\t\t\t\tv1 = _vec3_1.fromBufferAttribute( attr, i1 ).applyMatrix4( matrix );\n\t\t\t\tv2 = _vec3_2.fromBufferAttribute( attr, i2 ).applyMatrix4( matrix );\n\n\t\t\t} else if ( key === 'normal' ) {\n\n\t\t\t\tv0 = _vec3_0.fromBufferAttribute( attr, i0 ).applyNormalMatrix( normalMatrix );\n\t\t\t\tv1 = _vec3_1.fromBufferAttribute( attr, i1 ).applyNormalMatrix( normalMatrix );\n\t\t\t\tv2 = _vec3_2.fromBufferAttribute( attr, i2 ).applyNormalMatrix( normalMatrix );\n\n\t\t\t} else if ( key === 'tangent' ) {\n\n\t\t\t\tv0 = _vec3_0.fromBufferAttribute( attr, i0 ).transformDirection( matrix );\n\t\t\t\tv1 = _vec3_1.fromBufferAttribute( attr, i1 ).transformDirection( matrix );\n\t\t\t\tv2 = _vec3_2.fromBufferAttribute( attr, i2 ).transformDirection( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tv0 = _vec4_0.fromBufferAttribute( attr, i0 );\n\t\t\t\tv1 = _vec4_1.fromBufferAttribute( attr, i1 );\n\t\t\t\tv2 = _vec4_2.fromBufferAttribute( attr, i2 );\n\n\t\t\t}\n\n\t\t\tif ( ! interpolatedFields[ key ] ) {\n\n\t\t\t\tinterpolatedFields[ key ] = [ v0.clone(), v1.clone(), v2.clone() ];\n\n\t\t\t} else {\n\n\t\t\t\tconst fields = interpolatedFields[ key ];\n\t\t\t\tfields[ 0 ].copy( v0 );\n\t\t\t\tfields[ 1 ].copy( v1 );\n\t\t\t\tfields[ 2 ].copy( v2 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// push data from the given barycoord onto the geometry\n\tappendInterpolatedAttributeData( group, barycoord, index = null, invert = false ) {\n\n\t\tconst { groupIndices, attributeData, interpolatedFields, forwardIndexMap, invertedIndexMap } = this;\n\t\twhile ( groupIndices.length <= group ) {\n\n\t\t\tgroupIndices.push( new AttributeData( Uint32Array ) );\n\n\t\t}\n\n\t\tconst indexMap = invert ? invertedIndexMap : forwardIndexMap;\n\t\tconst indexData = groupIndices[ group ];\n\t\tif ( index !== null && indexMap.has( index ) ) {\n\n\t\t\tindexData.push( indexMap.get( index ) );\n\n\t\t} else {\n\n\t\t\tindexMap.set( index, attributeData.position.count );\n\t\t\tindexData.push( attributeData.position.count );\n\n\t\t\tfor ( const key in interpolatedFields ) {\n\n\t\t\t\t// handle normals and positions specially because they require transforming\n\t\t\t\tconst arr = attributeData[ key ];\n\t\t\t\tconst isDirection = key === 'normal' || key === 'tangent';\n\t\t\t\tconst invertVector = invert && isDirection;\n\t\t\t\tconst itemSize = arr.itemSize;\n\t\t\t\tconst [ v0, v1, v2 ] = interpolatedFields[ key ];\n\t\t\t\tgetBarycoordValue( v0, v1, v2, barycoord, _vec4, isDirection, invertVector );\n\t\t\t\tpushItemSize( _vec4, itemSize, arr );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// append the given vertex index from the source geometry to this one\n\tappendIndexFromGeometry( geometry, matrix, normalMatrix, group, index, invert = false ) {\n\n\t\tconst { groupIndices, attributeData, forwardIndexMap, invertedIndexMap } = this;\n\t\twhile ( groupIndices.length <= group ) {\n\n\t\t\tgroupIndices.push( new AttributeData( Uint32Array ) );\n\n\t\t}\n\n\t\tconst indexMap = invert ? invertedIndexMap : forwardIndexMap;\n\t\tconst indexData = groupIndices[ group ];\n\t\tif ( index !== null && indexMap.has( index ) ) {\n\n\t\t\tindexData.push( indexMap.get( index ) );\n\n\t\t} else {\n\n\t\t\tindexMap.set( index, attributeData.position.count );\n\t\t\tindexData.push( attributeData.position.count );\n\n\t\t\tconst { attributes } = geometry;\n\t\t\tfor ( const key in attributeData ) {\n\n\t\t\t\tconst arr = attributeData[ key ];\n\t\t\t\tconst attr = attributes[ key ];\n\t\t\t\tif ( ! attr ) {\n\n\t\t\t\t\tthrow new Error( `CSG Operations: Attribute ${ key } not available on geometry.` );\n\n\t\t\t\t}\n\n\t\t\t\t// specially handle the position and normal attributes because they require transforms\n\t\t\t\tconst itemSize = attr.itemSize;\n\t\t\t\tif ( key === 'position' ) {\n\n\t\t\t\t\t_vec3.fromBufferAttribute( attr, index ).applyMatrix4( matrix );\n\t\t\t\t\tarr.push( _vec3.x, _vec3.y, _vec3.z );\n\n\t\t\t\t} else if ( key === 'normal' ) {\n\n\t\t\t\t\t_vec3.fromBufferAttribute( attr, index ).applyNormalMatrix( normalMatrix );\n\t\t\t\t\tif ( invert ) {\n\n\t\t\t\t\t\t_vec3.multiplyScalar( - 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarr.push( _vec3.x, _vec3.y, _vec3.z );\n\n\t\t\t\t} else if ( key === 'tangent' ) {\n\n\t\t\t\t\t_vec3.fromBufferAttribute( attr, index ).transformDirection( matrix );\n\t\t\t\t\tif ( invert ) {\n\n\t\t\t\t\t\t_vec3.multiplyScalar( - 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarr.push( _vec3.x, _vec3.y, _vec3.z );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_vec4.fromBufferAttribute( attr, index );\n\t\t\t\t\tpushItemSize( _vec4, itemSize, arr );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tbuildGeometry( target, groupOrder ) {\n\n\t\tlet needsDisposal = false;\n\t\tconst { groupIndices, attributeData } = this;\n\t\tconst { attributes, index } = target;\n\t\tfor ( const key in attributeData ) {\n\n\t\t\tconst arr = attributeData[ key ];\n\t\t\tconst { type, itemSize, normalized, length, count } = arr;\n\t\t\tconst buffer = arr.array.buffer;\n\n\t\t\tlet attr = attributes[ key ];\n\t\t\tif ( ! attr || attr.count < count || attr.array.type !== type ) {\n\n\t\t\t\t// create the attribute if it doesn't exist yet\n\t\t\t\tattr = new BufferAttribute( new type( length ), itemSize, normalized );\n\t\t\t\ttarget.setAttribute( key, attr );\n\t\t\t\tneedsDisposal = true;\n\n\t\t\t}\n\n\t\t\t// copy the data\n\t\t\tattr.array.set( new type( buffer, 0, length ), 0 );\n\t\t\tattr.needsUpdate = true;\n\n\t\t}\n\n\t\t// remove or update the index appropriately\n\t\tconst indexCount = groupIndices.reduce( ( v, arr ) => arr.count + v, 0 );\n\t\tif ( ! target.index || index.count < indexCount || index.array.type !== Uint32Array ) {\n\n\t\t\ttarget.setIndex( new BufferAttribute( new Uint32Array( indexCount ), 1 ) );\n\t\t\tneedsDisposal = true;\n\n\t\t}\n\n\t\t// initialize the groups\n\t\ttarget.clearGroups();\n\n\t\tlet offset = 0;\n\t\tfor ( let i = 0, l = Math.min( groupOrder.length, groupIndices.length ); i < l; i ++ ) {\n\n\t\t\tconst { index, materialIndex } = groupOrder[ i ];\n\t\t\tconst { count } = groupIndices[ index ];\n\t\t\tconst buffer = groupIndices[ index ].array.buffer;\n\t\t\tif ( count !== 0 ) {\n\n\t\t\t\ttarget.index.array.set( new Uint32Array( buffer, 0, count ), offset );\n\t\t\t\ttarget.addGroup( offset, count, materialIndex );\n\t\t\t\toffset += count;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// update the draw range\n\t\ttarget.setDrawRange( 0, offset );\n\n\t\t// remove the bounds tree if it exists because its now out of date\n\t\t// TODO: can we have this dispose in the same way that a brush does?\n\t\t// TODO: why are half edges and group indices not removed here?\n\t\ttarget.boundsTree = null;\n\t\ttarget.boundingBox = null;\n\t\ttarget.boundingSphere = null;\n\n\t\tif ( needsDisposal ) {\n\n\t\t\ttarget.dispose();\n\n\t\t}\n\n\t}\n\n\tclearIndexMap() {\n\n\t\tthis.forwardIndexMap.clear();\n\t\tthis.invertedIndexMap.clear();\n\n\t}\n\n\tclear() {\n\n\t\tconst { groupIndices, attributeData } = this;\n\n\t\tthis.interpolatedFields = {};\n\n\t\tfor ( const key in attributeData ) {\n\n\t\t\tattributeData[ key ].clear();\n\n\t\t}\n\n\t\tgroupIndices.forEach( arr => {\n\n\t\t\tarr.clear();\n\n\t\t} );\n\t\tthis.clearIndexMap();\n\n\t}\n\n}\n","export function trimAttributes( targetGeometry, relevantAttributes ) {\n\n\tfor ( const key in targetGeometry.attributes ) {\n\n\t\tif ( ! relevantAttributes.includes( key ) ) {\n\n\t\t\ttargetGeometry.deleteAttribute( key );\n\t\t\ttargetGeometry.dispose();\n\n\t\t}\n\n\t}\n\n\treturn targetGeometry;\n\n}\n\n// writes new groups to point to the same material index in the given materials array\nexport function useCommonMaterials( groups, materials ) {\n\n\tconst result = [];\n\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\t\tconst mat = materials[ group.materialIndex ];\n\t\tresult.push( {\n\t\t\t...group,\n\t\t\tmaterialIndex: materials.indexOf( mat ),\n\t\t} );\n\n\t}\n\n\treturn result;\n\n}\n\n// returns a new list of materials and modifies the groups in place to reference those materials\nexport function removeUnusedMaterials( groups, materials ) {\n\n\tconst newMaterials = [];\n\tconst indexMap = new Map();\n\tfor ( let g = 0, lg = groups.length; g < lg; g ++ ) {\n\n\t\tconst group = groups[ g ];\n\t\tif ( ! indexMap.has( group.materialIndex ) ) {\n\n\t\t\tindexMap.set( group.materialIndex, newMaterials.length );\n\t\t\tnewMaterials.push( materials[ group.materialIndex ] );\n\n\t\t}\n\n\t\tgroup.materialIndex = indexMap.get( group.materialIndex );\n\n\t}\n\n\treturn newMaterials;\n\n}\n\n// merges groups with common material indices in place\nexport function joinGroups( groups ) {\n\n\tfor ( let i = 0; i < groups.length - 1; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\t\tconst nextGroup = groups[ i + 1 ];\n\t\tif ( group.materialIndex === nextGroup.materialIndex ) {\n\n\t\t\tconst start = group.start;\n\t\t\tconst end = nextGroup.start + nextGroup.count;\n\t\t\tnextGroup.start = start;\n\t\t\tnextGroup.count = end - start;\n\n\t\t\tgroups.splice( i, 1 );\n\t\t\ti --;\n\n\t\t}\n\n\t}\n\n}\n\n\n// Returns the list of materials used for the given set of groups\nexport function getMaterialList( groups, materials ) {\n\n\tlet result = materials;\n\tif ( ! Array.isArray( materials ) ) {\n\n\t\tresult = [];\n\t\tgroups.forEach( g => {\n\n\t\t\tresult[ g.materialIndex ] = materials;\n\n\t\t} );\n\n\t}\n\n\treturn result;\n\n}\n","import { CDTTriangleSplitter } from './CDTTriangleSplitter.js';\nimport { LegacyTriangleSplitter } from './LegacyTriangleSplitter.js';\nimport { OperationDebugData } from './debug/OperationDebugData.js';\nimport { performOperation } from './operations/operations.js';\nimport { Brush } from './Brush.js';\nimport { GeometryBuilder } from './operations/GeometryBuilder.js';\nimport * as GeometryUtils from './operations/GeometryUtils.js';\n\n// Utility class for performing CSG operations\nexport class Evaluator {\n\n\tget useCDTClipping() {\n\n\t\treturn this.triangleSplitter instanceof CDTTriangleSplitter;\n\n\t}\n\n\tset useCDTClipping( v ) {\n\n\t\tif ( v !== this.useCDTClipping ) {\n\n\t\t\tthis.triangleSplitter = v ? new CDTTriangleSplitter() : new LegacyTriangleSplitter();\n\n\t\t}\n\n\t}\n\n\tconstructor() {\n\n\t\tthis.triangleSplitter = new LegacyTriangleSplitter();\n\t\tthis.geometryBuilders = [];\n\t\tthis.attributes = [ 'position', 'uv', 'normal' ];\n\t\tthis.useGroups = true;\n\t\tthis.consolidateGroups = true;\n\t\tthis.removeUnusedMaterials = true;\n\t\tthis.debug = new OperationDebugData();\n\n\t}\n\n\tgetGroupRanges( geometry ) {\n\n\t\tconst singleGroup = ! this.useGroups || geometry.groups.length === 0;\n\t\tif ( singleGroup ) {\n\n\t\t\treturn [ { start: 0, count: Infinity, materialIndex: 0 } ];\n\n\t\t} else {\n\n\t\t\treturn geometry.groups.map( group => ( { ...group } ) );\n\n\t\t}\n\n\t}\n\n\tevaluate( a, b, operations, targetBrushes = new Brush() ) {\n\n\t\tlet wasArray = true;\n\t\tif ( ! Array.isArray( operations ) ) {\n\n\t\t\toperations = [ operations ];\n\n\t\t}\n\n\t\tif ( ! Array.isArray( targetBrushes ) ) {\n\n\t\t\ttargetBrushes = [ targetBrushes ];\n\t\t\twasArray = false;\n\n\t\t}\n\n\t\tif ( targetBrushes.length !== operations.length ) {\n\n\t\t\tthrow new Error( 'Evaluator: operations and target array passed as different sizes.' );\n\n\t\t}\n\n\t\t// initialize the geometry fields\n\t\ta.prepareGeometry();\n\t\tb.prepareGeometry();\n\n\t\tconst {\n\t\t\ttriangleSplitter,\n\t\t\tgeometryBuilders,\n\t\t\tattributes,\n\t\t\tuseGroups,\n\t\t\tconsolidateGroups,\n\t\t\tremoveUnusedMaterials,\n\t\t\tdebug,\n\t\t} = this;\n\n\t\t// expand the attribute data array to the necessary size\n\t\twhile ( geometryBuilders.length < targetBrushes.length ) {\n\n\t\t\tgeometryBuilders.push( new GeometryBuilder() );\n\n\t\t}\n\n\t\t// prepare the attribute data buffer information\n\t\ttargetBrushes.forEach( ( brush, i ) => {\n\n\t\t\tgeometryBuilders[ i ].initFromGeometry( a.geometry, attributes );\n\t\t\tGeometryUtils.trimAttributes( brush.geometry, attributes );\n\n\t\t} );\n\n\t\t// run the operation to fill the list of attribute data\n\t\tdebug.init();\n\t\tperformOperation( a, b, operations, triangleSplitter, geometryBuilders, { useGroups } );\n\t\tdebug.complete();\n\n\t\t// get the materials and group ranges\n\t\tconst aGroups = this.getGroupRanges( a.geometry );\n\t\tconst aMaterials = GeometryUtils.getMaterialList( aGroups, a.material );\n\n\t\tconst bGroups = this.getGroupRanges( b.geometry );\n\t\tconst bMaterials = GeometryUtils.getMaterialList( bGroups, b.material );\n\t\tbGroups.forEach( g => g.materialIndex += aMaterials.length );\n\n\t\t// get the full set of groups and materials\n\t\tconst materials = [ ...aMaterials, ...bMaterials ];\n\t\tlet groups = [ ...aGroups, ...bGroups ].map( ( group, index ) => ( { ...group, index } ) );\n\n\t\t// adjust the groups\n\t\tif ( ! useGroups ) {\n\n\t\t\tgroups = [ { start: 0, count: Infinity, index: 0, materialIndex: 0 } ];\n\n\t\t} else if ( useGroups && consolidateGroups ) {\n\n\t\t\t// use the same material for any group thats pointing to the same material in different slots\n\t\t\t// so we can merge these groups later\n\t\t\tgroups = GeometryUtils.useCommonMaterials( groups, materials );\n\t\t\tgroups.sort( ( a, b ) => a.materialIndex - b.materialIndex );\n\n\t\t}\n\n\t\t// apply groups and attribute data to the geometry\n\t\ttargetBrushes.forEach( ( brush, i ) => {\n\n\t\t\tconst targetGeometry = brush.geometry;\n\t\t\tgeometryBuilders[ i ].buildGeometry( targetGeometry, groups );\n\n\t\t\t// assign brush A's transform to the result so the geometry is in a stable position\n\t\t\ta.matrixWorld.decompose( brush.position, brush.quaternion, brush.scale );\n\t\t\tbrush.updateMatrix();\n\t\t\tbrush.matrixWorld.copy( a.matrixWorld );\n\n\t\t\tif ( useGroups ) {\n\n\t\t\t\tbrush.material = materials;\n\n\t\t\t\tif ( consolidateGroups ) {\n\n\t\t\t\t\tGeometryUtils.joinGroups( targetGeometry.groups );\n\n\t\t\t\t}\n\n\t\t\t\tif ( removeUnusedMaterials ) {\n\n\t\t\t\t\tbrush.material = GeometryUtils.removeUnusedMaterials( targetGeometry.groups, materials );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tbrush.material = materials[ 0 ];\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn wasArray ? targetBrushes : targetBrushes[ 0 ];\n\n\t}\n\n\t// TODO: fix\n\tevaluateHierarchy( root, target = new Brush() ) {\n\n\t\troot.updateMatrixWorld( true );\n\n\t\tconst flatTraverse = ( obj, cb ) => {\n\n\t\t\tconst children = obj.children;\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\t\t\t\tif ( child.isOperationGroup ) {\n\n\t\t\t\t\tflatTraverse( child, cb );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcb( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\n\t\tconst traverse = brush => {\n\n\t\t\tconst children = brush.children;\n\t\t\tlet didChange = false;\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\t\t\t\tdidChange = traverse( child ) || didChange;\n\n\t\t\t}\n\n\t\t\tconst isDirty = brush.isDirty();\n\t\t\tif ( isDirty ) {\n\n\t\t\t\tbrush.markUpdated();\n\n\t\t\t}\n\n\t\t\tif ( didChange && ! brush.isOperationGroup ) {\n\n\t\t\t\tlet result;\n\t\t\t\tflatTraverse( brush, child => {\n\n\t\t\t\t\tif ( ! result ) {\n\n\t\t\t\t\t\tresult = this.evaluate( brush, child, child.operation );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tresult = this.evaluate( result, child, child.operation );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tbrush._cachedGeometry = result.geometry;\n\t\t\t\tbrush._cachedMaterials = result.material;\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn didChange || isDirty;\n\n\t\t\t}\n\n\t\t};\n\n\t\ttraverse( root );\n\n\t\ttarget.geometry = root._cachedGeometry;\n\t\ttarget.material = root._cachedMaterials;\n\n\t\treturn target;\n\n\t}\n\n\treset() {\n\n\t\tthis.triangleSplitter.reset();\n\n\t}\n\n}\n","import { BufferGeometry } from 'three';\nimport { Brush } from '../Brush.js';\nimport { ADDITION } from '../constants.js';\n\nexport class Operation extends Brush {\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\n\t\tthis.isOperation = true;\n\t\tthis.operation = ADDITION;\n\n\t\tthis._cachedGeometry = new BufferGeometry();\n\t\tthis._cachedMaterials = null;\n\t\tthis._previousOperation = null;\n\n\t}\n\n\tmarkUpdated() {\n\n\t\tsuper.markUpdated();\n\t\tthis._previousOperation = this.operation;\n\n\t}\n\n\tisDirty() {\n\n\t\treturn this.operation !== this._previousOperation || super.isDirty();\n\n\t}\n\n\tinsertBefore( brush ) {\n\n\t\tconst parent = this.parent;\n\t\tconst index = parent.children.indexOf( this );\n\t\tparent.children.splice( index, 0, brush );\n\n\t}\n\n\tinsertAfter( brush ) {\n\n\t\tconst parent = this.parent;\n\t\tconst index = parent.children.indexOf( this );\n\t\tparent.children.splice( index + 1, 0, brush );\n\n\t}\n\n}\n","import { Group, Matrix4 } from 'three';\n\nexport class OperationGroup extends Group {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis.isOperationGroup = true;\n\t\tthis._previousMatrix = new Matrix4();\n\n\t}\n\n\tmarkUpdated() {\n\n\t\tthis._previousMatrix.copy( this.matrix );\n\n\t}\n\n\tisDirty() {\n\n\t\tconst { matrix, _previousMatrix } = this;\n\t\tconst el1 = matrix.elements;\n\t\tconst el2 = _previousMatrix.elements;\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( el1[ i ] !== el2[ i ] ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n}\n","import { Color } from 'three';\n\nfunction addWorldPosition( shader ) {\n\n\tif ( /varying\\s+vec3\\s+wPosition/.test( shader.vertexShader ) ) return;\n\n\tshader.vertexShader = `\n\t\t\tvarying vec3 wPosition;\n\t\t\t${shader.vertexShader}\n\t\t`.replace(\n\t\t/#include <displacementmap_vertex>/,\n\t\tv =>\n\t\t\t`${v}\n\t\t\t\twPosition = (modelMatrix * vec4( transformed, 1.0 )).xyz;\n\t\t\t\t`,\n\t);\n\n\tshader.fragmentShader = `\n\t\tvarying vec3 wPosition;\n\t\t${shader.fragmentShader}\n\t\t`;\n\n\treturn shader;\n\n}\n\nexport function csgGridShaderMixin( shader ) {\n\n\tshader.uniforms = {\n\t\t...shader.uniforms,\n\t\tcheckerboardColor: { value: new Color( 0x111111 ) }\n\t};\n\n\taddWorldPosition( shader );\n\n\tshader.defines = { CSG_GRID: 1 };\n\n\tshader.fragmentShader = shader.fragmentShader.replace(\n\t\t/#include <common>/,\n\t\tv =>\n\t\t/* glsl */`\n\t\t\t${v}\n\n\t\t\tuniform vec3 checkerboardColor;\n\t\t\tfloat getCheckerboard( vec2 p, float scale ) {\n\n\t\t\t\tp /= scale;\n\t\t\t\tp += vec2( 0.5 );\n\n\t\t\t\tvec2 line = mod( p, 2.0 ) - vec2( 1.0 );\n\t\t\t\tline = abs( line );\n\n\t\t\t\tvec2 pWidth = fwidth( line );\n\t\t\t\tvec2 value = smoothstep( 0.5 - pWidth / 2.0, 0.5 + pWidth / 2.0, line );\n\t\t\t\tfloat result = value.x * value.y + ( 1.0 - value.x ) * ( 1.0 - value.y );\n\n\t\t\t\treturn result;\n\n\t\t\t}\n\n\t\t\tfloat getGrid( vec2 p, float scale, float thickness ) {\n\n\t\t\t\tp /= 0.5 * scale;\n\n\t\t\t\tvec2 stride = mod( p, 2.0 ) - vec2( 1.0 );\n\t\t\t\tstride = abs( stride );\n\n\t\t\t\tvec2 pWidth = fwidth( p );\n\t\t\t\tvec2 line = smoothstep( 1.0 - pWidth / 2.0, 1.0 + pWidth / 2.0, stride + thickness * pWidth );\n\n\t\t\t\treturn max( line.x, line.y );\n\n\t\t\t}\n\n\t\t\tvec3 getFaceColor( vec2 p, vec3 color ) {\n\n\t\t\t\tfloat checkLarge = getCheckerboard( p, 1.0 );\n\t\t\t\tfloat checkSmall = abs( getCheckerboard( p, 0.1 ) );\n\t\t\t\tfloat lines = getGrid( p, 10.0, 1.0 );\n\n\t\t\t\tvec3 checkColor = mix(\n\t\t\t\t\tvec3( 0.7 ) * color,\n\t\t\t\t\tvec3( 1.0 ) * color,\n\t\t\t\t\tcheckSmall * 0.4 + checkLarge * 0.6\n\t\t\t\t);\n\n\t\t\t\tvec3 gridColor = vec3( 1.0 );\n\n\t\t\t\treturn mix( checkColor, gridColor, lines );\n\n\t\t\t}\n\n\t\t\tfloat angleBetween( vec3 a, vec3 b ) {\n\n\t\t\t\treturn acos( abs( dot( a, b ) ) );\n\n\t\t\t}\n\n\t\t\tvec3 planeProject( vec3 norm, vec3 other ) {\n\n\t\t\t\tfloat d = dot( norm, other );\n\t\t\t\treturn normalize( other - norm * d );\n\n\t\t\t}\n\n\t\t\tvec3 getBlendFactors( vec3 norm ) {\n\n\t\t\t\tvec3 xVec = vec3( 1.0, 0.0, 0.0 );\n\t\t\t\tvec3 yVec = vec3( 0.0, 1.0, 0.0 );\n\t\t\t\tvec3 zVec = vec3( 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 projX = planeProject( xVec, norm );\n\t\t\t\tvec3 projY = planeProject( yVec, norm );\n\t\t\t\tvec3 projZ = planeProject( zVec, norm );\n\n\t\t\t\tfloat xAngle = max(\n\t\t\t\t\tangleBetween( xVec, projY ),\n\t\t\t\t\tangleBetween( xVec, projZ )\n\t\t\t\t);\n\n\t\t\t\tfloat yAngle = max(\n\t\t\t\t\tangleBetween( yVec, projX ),\n\t\t\t\t\tangleBetween( yVec, projZ )\n\t\t\t\t);\n\n\t\t\t\tfloat zAngle = max(\n\t\t\t\t\tangleBetween( zVec, projX ),\n\t\t\t\t\tangleBetween( zVec, projY )\n\t\t\t\t);\n\n\t\t\t\treturn vec3( xAngle, yAngle, zAngle ) / ( 0.5 * PI );\n\n\t\t\t}\n\t\t` ).replace(\n\t\t/#include <normal_fragment_maps>/,\n\t\tv =>\n\t\t/* glsl */`${v}\n\t\t\t\t#if CSG_GRID\n\t\t\t\t{\n\n\t\t\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\t\t\t\t\tfloat yCont = abs( dot( vec3( 0.0, 1.0, 0.0 ), worldNormal ) );\n\t\t\t\t\tfloat zCont = abs( dot( vec3( 0.0, 0.0, 1.0 ), worldNormal ) );\n\t\t\t\t\tfloat xCont = abs( dot( vec3( 1.0, 0.0, 0.0 ), worldNormal ) );\n\n\t\t\t\t\tvec3 factors = getBlendFactors( worldNormal );\n\t\t\t\t\tfactors = smoothstep( vec3( 0.475 ), vec3( 0.525 ), vec3( 1.0 ) - factors );\n\n\t\t\t\t\tfloat weight = factors.x + factors.y + factors.z;\n\t\t\t\t\tfactors /= weight;\n\n\t\t\t\t\tvec3 color =\n\t\t\t\t\t\tgetFaceColor( wPosition.yz, diffuseColor.rgb ) * factors.x +\n\t\t\t\t\t\tgetFaceColor( wPosition.xz, diffuseColor.rgb ) * factors.y +\n\t\t\t\t\t\tgetFaceColor( wPosition.xy, diffuseColor.rgb ) * factors.z;\n\n\t\t\t\t\tdiffuseColor.rgb = color;\n\n\t\t\t\t}\n\t\t\t\t#endif\n\t\t\t\t`,\n\t);\n\n\treturn shader;\n\n}\n","import { MeshPhongMaterial } from 'three';\nimport { csgGridShaderMixin } from './shaderUtils.js';\n\nexport class GridMaterial extends MeshPhongMaterial {\n\n\tget enableGrid() {\n\n\t\treturn Boolean( this._enableGrid );\n\n\t}\n\n\tset enableGrid( v ) {\n\n\t\tif ( this._enableGrid !== v ) {\n\n\t\t\tthis._enableGrid = v;\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\t\tthis.enableGrid = true;\n\n\t}\n\n\tonBeforeCompile( shader ) {\n\n\t\tcsgGridShaderMixin( shader );\n\t\tshader.defines.CSG_GRID = Number( this.enableGrid );\n\n\t}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.enableGrid.toString();\n\n\t}\n\n}\n","import { BufferAttribute, Color, MathUtils } from 'three';\n\nexport function getTriangleDefinitions( ...triangles ) {\n\n\tfunction getVectorDefinition( v ) {\n\n\t\treturn /* js */`new THREE.Vector3( ${ v.x }, ${ v.y }, ${ v.z } )`;\n\n\t}\n\n\treturn triangles.map( t => {\n\n\t\treturn /* js */`\nnew THREE.Triangle(\n\t${ getVectorDefinition( t.a ) },\n\t${ getVectorDefinition( t.b ) },\n\t${ getVectorDefinition( t.c ) },\n)\n\t\t`.trim();\n\n\t} );\n\n}\n\nexport function logTriangleDefinitions( ...triangles ) {\n\n\tconsole.log( getTriangleDefinitions( ...triangles ).join( ',\\n' ) );\n\n}\n\nexport function generateRandomTriangleColors( geometry ) {\n\n\tconst position = geometry.attributes.position;\n\tconst array = new Float32Array( position.count * 3 );\n\n\tconst color = new Color();\n\tfor ( let i = 0, l = array.length; i < l; i += 9 ) {\n\n\t\tcolor.setHSL(\n\t\t\tMath.random(),\n\t\t\tMathUtils.lerp( 0.5, 1.0, Math.random() ),\n\t\t\tMathUtils.lerp( 0.5, 0.75, Math.random() ),\n\t\t);\n\n\t\tarray[ i + 0 ] = color.r;\n\t\tarray[ i + 1 ] = color.g;\n\t\tarray[ i + 2 ] = color.b;\n\n\t\tarray[ i + 3 ] = color.r;\n\t\tarray[ i + 4 ] = color.g;\n\t\tarray[ i + 5 ] = color.b;\n\n\t\tarray[ i + 6 ] = color.r;\n\t\tarray[ i + 7 ] = color.g;\n\t\tarray[ i + 8 ] = color.b;\n\n\t}\n\n\tgeometry.setAttribute( 'color', new BufferAttribute( array, 3 ) );\n\n}\n","import { Group, Mesh, LineSegments, LineBasicMaterial, MeshPhongMaterial, BufferGeometry, BufferAttribute } from 'three';\n\nexport class TriangleSetHelper extends Group {\n\n\tget color() {\n\n\t\treturn this._mesh.material.color;\n\n\t}\n\n\tget side() {\n\n\t\treturn this._mesh.material.side;\n\n\t}\n\n\tset side( v ) {\n\n\t\tthis._mesh.material.side = v;\n\n\t}\n\n\tconstructor( triangles = [] ) {\n\n\t\tsuper();\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst lineGeom = new BufferGeometry();\n\t\tthis._mesh = new Mesh( geometry, new MeshPhongMaterial( {\n\t\t\tflatShading: true,\n\t\t\ttransparent: true,\n\t\t\topacity: 0.25,\n\t\t\tdepthWrite: false,\n\t\t} ) );\n\t\tthis._lines = new LineSegments( lineGeom, new LineBasicMaterial() );\n\t\tthis._mesh.material.color = this._lines.material.color;\n\n\t\tthis._lines.frustumCulled = false;\n\t\tthis._mesh.frustumCulled = false;\n\n\t\tthis.add( this._lines, this._mesh );\n\n\t\tthis.setTriangles( triangles );\n\n\t}\n\n\tsetTriangles( triangles ) {\n\n\t\tconst triPositions = new Float32Array( 3 * 3 * triangles.length );\n\t\tconst linePositions = new Float32Array( 6 * 3 * triangles.length );\n\t\tfor ( let i = 0, l = triangles.length; i < l; i ++ ) {\n\n\t\t\tconst i9 = 9 * i;\n\t\t\tconst i18 = 18 * i;\n\t\t\tconst tri = triangles[ i ];\n\n\t\t\ttri.a.toArray( triPositions, i9 + 0 );\n\t\t\ttri.b.toArray( triPositions, i9 + 3 );\n\t\t\ttri.c.toArray( triPositions, i9 + 6 );\n\n\n\t\t\ttri.a.toArray( linePositions, i18 + 0 );\n\t\t\ttri.b.toArray( linePositions, i18 + 3 );\n\n\t\t\ttri.b.toArray( linePositions, i18 + 6 );\n\t\t\ttri.c.toArray( linePositions, i18 + 9 );\n\n\t\t\ttri.c.toArray( linePositions, i18 + 12 );\n\t\t\ttri.a.toArray( linePositions, i18 + 15 );\n\n\t\t}\n\n\t\tthis._mesh.geometry.dispose();\n\t\tthis._mesh.geometry.setAttribute( 'position', new BufferAttribute( triPositions, 3 ) );\n\n\t\tthis._lines.geometry.dispose();\n\t\tthis._lines.geometry.setAttribute( 'position', new BufferAttribute( linePositions, 3 ) );\n\n\t}\n\n}\n","import { LineSegments } from 'three';\n\nexport class EdgesHelper extends LineSegments {\n\n\tget color() {\n\n\t\treturn this.material.color;\n\n\t}\n\n\tconstructor( edges = [] ) {\n\n\t\tsuper();\n\t\tthis.frustumCulled = false;\n\t\tthis.setEdges( edges );\n\n\t}\n\n\tsetEdges( edges ) {\n\n\t\tconst { geometry } = this;\n\t\tconst points = edges.flatMap( e => [ e.start, e.end ] );\n\t\tgeometry.dispose();\n\t\tgeometry.deleteAttribute( 'position' );\n\t\tgeometry.setFromPoints( points );\n\n\t}\n\n}\n","import { InstancedMesh, SphereGeometry, MeshBasicMaterial, Matrix4 } from 'three';\n\nconst _matrix = new Matrix4();\nexport class PointsHelper extends InstancedMesh {\n\n\tget color() {\n\n\t\treturn this.material.color;\n\n\t}\n\n\tconstructor( count = 1000, points = [] ) {\n\n\t\tsuper( new SphereGeometry( 0.025 ), new MeshBasicMaterial(), count );\n\t\tthis.frustumCulled = false;\n\t\tthis.setPoints( points );\n\n\t}\n\n\tsetPoints( points ) {\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\t_matrix.makeTranslation( point.x, point.y, point.z );\n\t\t\tthis.setMatrixAt( i, _matrix );\n\n\t\t}\n\n\t\tthis.count = points.length;\n\n\t}\n\n}\n","import { Line3, Triangle, Vector3, Plane, Ray } from 'three';\nimport { EdgesHelper } from './EdgesHelper.js';\nimport { getTriCount } from '../core/utils/geometryUtils.js';\nimport { toNormalizedRay } from '../core/utils/hashUtils.js';\n\nconst vertKeys = [ 'a', 'b', 'c' ];\nconst _tri1 = new Triangle();\nconst _tri2 = new Triangle();\nconst _center = new Vector3();\nconst _center2 = new Vector3();\nconst _projected = new Vector3();\nconst _projected2 = new Vector3();\nconst _projectedDir = new Vector3();\nconst _projectedDir2 = new Vector3();\nconst _edgeDir = new Vector3();\nconst _edgeDir2 = new Vector3();\nconst _vec = new Vector3();\nconst _vec2 = new Vector3();\nconst _finalPoint = new Vector3();\nconst _finalPoint2 = new Vector3();\nconst _plane = new Plane();\nconst _plane2 = new Plane();\nconst _centerPoint = new Vector3();\nconst _ray = new Ray();\nconst _edge = new Line3();\n\nfunction getTriangle( geometry, triIndex, target ) {\n\n\tconst i3 = 3 * triIndex;\n\tlet i0 = i3 + 0;\n\tlet i1 = i3 + 1;\n\tlet i2 = i3 + 2;\n\n\tconst indexAttr = geometry.index;\n\tconst posAttr = geometry.attributes.position;\n\tif ( indexAttr ) {\n\n\t\ti0 = indexAttr.getX( i0 );\n\t\ti1 = indexAttr.getX( i1 );\n\t\ti2 = indexAttr.getX( i2 );\n\n\t}\n\n\ttarget.a.fromBufferAttribute( posAttr, i0 );\n\ttarget.b.fromBufferAttribute( posAttr, i1 );\n\ttarget.c.fromBufferAttribute( posAttr, i2 );\n\n\treturn target;\n\n}\n\nfunction getOverlapEdge( tri1, e1, tri2, e2, target ) {\n\n\t// get the two edges\n\tconst nextE_0 = ( e1 + 1 ) % 3;\n\tconst v0_1 = tri1[ vertKeys[ e1 ] ];\n\tconst v1_1 = tri1[ vertKeys[ nextE_0 ] ];\n\n\tconst nextE_1 = ( e2 + 1 ) % 3;\n\tconst v0_2 = tri2[ vertKeys[ e2 ] ];\n\tconst v1_2 = tri2[ vertKeys[ nextE_1 ] ];\n\n\t// get the ray defined by the edges\n\ttoNormalizedRay( v0_1, v1_1, _ray );\n\n\t// get the min and max stride across the rays\n\tlet d0_1 = _vec.subVectors( v0_1, _ray.origin ).dot( _ray.direction );\n\tlet d1_1 = _vec.subVectors( v1_1, _ray.origin ).dot( _ray.direction );\n\tif ( d0_1 > d1_1 ) [ d0_1, d1_1 ] = [ d1_1, d0_1 ];\n\n\tlet d0_2 = _vec.subVectors( v0_2, _ray.origin ).dot( _ray.direction );\n\tlet d1_2 = _vec.subVectors( v1_2, _ray.origin ).dot( _ray.direction );\n\tif ( d0_2 > d1_2 ) [ d0_2, d1_2 ] = [ d1_2, d0_2 ];\n\n\t// get the range of overlap\n\tconst final_0 = Math.max( d0_1, d0_2 );\n\tconst final_1 = Math.min( d1_1, d1_2 );\n\t_ray.at( final_0, target.start );\n\t_ray.at( final_1, target.end );\n\n}\n\n\nexport class HalfEdgeHelper extends EdgesHelper {\n\n\tconstructor( geometry = null, halfEdges = null ) {\n\n\t\tsuper();\n\t\tthis.straightEdges = false;\n\t\tthis.displayDisconnectedEdges = false;\n\n\t\tif ( geometry && halfEdges ) {\n\n\t\t\tthis.setHalfEdges( geometry, halfEdges );\n\n\t\t}\n\n\t}\n\n\tsetHalfEdges( geometry, halfEdges ) {\n\n\t\tconst { straightEdges, displayDisconnectedEdges } = this;\n\t\tconst edges = [];\n\t\tconst offset = geometry.drawRange.start;\n\t\tlet triCount = getTriCount( geometry );\n\t\tif ( geometry.drawRange.count !== Infinity ) {\n\n\t\t\ttriCount = ~ ~ ( geometry.drawRange.count / 3 );\n\n\t\t}\n\n\t\tif ( displayDisconnectedEdges ) {\n\n\t\t\tif ( halfEdges.unmatchedDisjointEdges ) {\n\n\t\t\t\thalfEdges\n\t\t\t\t\t.unmatchedDisjointEdges\n\t\t\t\t\t.forEach( ( { forward, reverse, ray } ) => {\n\n\t\t\t\t\t\t[ ...forward, ...reverse ]\n\t\t\t\t\t\t\t.forEach( ( { start, end } ) => {\n\n\t\t\t\t\t\t\t\tconst edge = new Line3();\n\t\t\t\t\t\t\t\tray.at( start, edge.start );\n\t\t\t\t\t\t\t\tray.at( end, edge.end );\n\t\t\t\t\t\t\t\tedges.push( edge );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let triIndex = offset; triIndex < triCount; triIndex ++ ) {\n\n\t\t\t\t\tgetTriangle( geometry, triIndex, _tri1 );\n\t\t\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\t\t\tconst otherTriIndex = halfEdges.getSiblingTriangleIndex( triIndex, e );\n\t\t\t\t\t\tif ( otherTriIndex === - 1 ) {\n\n\t\t\t\t\t\t\tconst nextE = ( e + 1 ) % 3;\n\t\t\t\t\t\t\tconst v0 = _tri1[ vertKeys[ e ] ];\n\t\t\t\t\t\t\tconst v1 = _tri1[ vertKeys[ nextE ] ];\n\t\t\t\t\t\t\tconst edge = new Line3();\n\t\t\t\t\t\t\tedge.start.copy( v0 );\n\t\t\t\t\t\t\tedge.end.copy( v1 );\n\t\t\t\t\t\t\tedges.push( edge );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let triIndex = offset; triIndex < triCount; triIndex ++ ) {\n\n\t\t\t\tgetTriangle( geometry, triIndex, _tri1 );\n\t\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\t\tconst otherTriIndex = halfEdges.getSiblingTriangleIndex( triIndex, e );\n\t\t\t\t\tif ( otherTriIndex === - 1 ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// get other triangle\n\t\t\t\t\tgetTriangle( geometry, otherTriIndex, _tri2 );\n\n\t\t\t\t\t// get edge centers\n\t\t\t\t\tconst nextE = ( e + 1 ) % 3;\n\t\t\t\t\tconst v0 = _tri1[ vertKeys[ e ] ];\n\t\t\t\t\tconst v1 = _tri1[ vertKeys[ nextE ] ];\n\t\t\t\t\t_centerPoint.lerpVectors( v0, v1, 0.5 );\n\t\t\t\t\taddConnectionEdge( _tri1, _tri2, _centerPoint );\n\n\t\t\t\t}\n\n\t\t\t\tif ( halfEdges.disjointConnections ) {\n\n\t\t\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\t\t\tconst disjointTriIndices = halfEdges.getDisjointSiblingTriangleIndices( triIndex, e );\n\t\t\t\t\t\tconst disjointEdgeIndices = halfEdges.getDisjointSiblingEdgeIndices( triIndex, e );\n\n\t\t\t\t\t\tfor ( let i = 0; i < disjointTriIndices.length; i ++ ) {\n\n\t\t\t\t\t\t\tconst ti = disjointTriIndices[ i ];\n\t\t\t\t\t\t\tconst ei = disjointEdgeIndices[ i ];\n\n\t\t\t\t\t\t\t// get other triangle\n\t\t\t\t\t\t\tgetTriangle( geometry, ti, _tri2 );\n\n\t\t\t\t\t\t\tgetOverlapEdge( _tri1, e, _tri2, ei, _edge );\n\n\t\t\t\t\t\t\t_centerPoint.lerpVectors( _edge.start, _edge.end, 0.5 );\n\t\t\t\t\t\t\taddConnectionEdge( _tri1, _tri2, _centerPoint );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tsuper.setEdges( edges );\n\n\t\tfunction addConnectionEdge( tri1, tri2, centerPoint ) {\n\n\t\t\ttri1.getMidpoint( _center );\n\t\t\ttri2.getMidpoint( _center2 );\n\n\t\t\ttri1.getPlane( _plane );\n\t\t\ttri2.getPlane( _plane2 );\n\n\t\t\tconst edge = new Line3();\n\t\t\tedge.start.copy( _center );\n\n\t\t\tif ( straightEdges ) {\n\n\t\t\t\t// get the projected centers\n\t\t\t\t_plane.projectPoint( _center2, _projected );\n\t\t\t\t_plane2.projectPoint( _center, _projected2 );\n\n\t\t\t\t// get the directions so we can flip them if needed\n\t\t\t\t_projectedDir.subVectors( _projected, _center );\n\t\t\t\t_projectedDir2.subVectors( _projected2, _center2 );\n\n\t\t\t\t// get the directions so we can flip them if needed\n\t\t\t\t_edgeDir.subVectors( centerPoint, _center );\n\t\t\t\t_edgeDir2.subVectors( centerPoint, _center2 );\n\n\t\t\t\tif ( _projectedDir.dot( _edgeDir ) < 0 ) {\n\n\t\t\t\t\t_projectedDir.multiplyScalar( - 1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _projectedDir2.dot( _edgeDir2 ) < 0 ) {\n\n\t\t\t\t\t_projectedDir2.multiplyScalar( - 1 );\n\n\t\t\t\t}\n\n\t\t\t\t// find the new points after inversion\n\t\t\t\t_vec.addVectors( _center, _projectedDir );\n\t\t\t\t_vec2.addVectors( _center2, _projectedDir2 );\n\n\t\t\t\t// project the points onto the triangle edge. This would be better\n\t\t\t\t// if we clipped instead of chose the closest point\n\t\t\t\ttri1.closestPointToPoint( _vec, _finalPoint );\n\t\t\t\ttri2.closestPointToPoint( _vec2, _finalPoint2 );\n\n\t\t\t\tedge.end.lerpVectors( _finalPoint, _finalPoint2, 0.5 );\n\n\t\t\t} else {\n\n\t\t\t\tedge.end.copy( centerPoint );\n\n\t\t\t}\n\n\t\t\tedges.push( edge );\n\n\t\t}\n\n\t}\n\n}\n","import { Vector3 } from 'three';\nimport { Triangle } from 'three';\nimport { getTriCount } from '../core/utils/geometryUtils.js';\n\n// https://stackoverflow.com/questions/1406029/how-to-calculate-the-volume-of-a-3d-mesh-object-the-surface-of-which-is-made-up\nconst _tri = new Triangle();\nconst _normal = new Vector3();\nconst _relPoint = new Vector3();\nexport function computeMeshVolume( mesh ) {\n\n\t// grab the matrix and the geometry\n\tlet geometry;\n\tlet matrix;\n\tif ( mesh.isBufferGeometry ) {\n\n\t\tgeometry = mesh;\n\t\tmatrix = null;\n\n\t} else {\n\n\t\tgeometry = mesh.geometry;\n\t\tmatrix = Math.abs( mesh.matrixWorld.determinant() - 1.0 ) < 1e-15 ? null : mesh.matrixWorld;\n\n\t}\n\n\t// determine the number of relevant draw range elements to use\n\tconst index = geometry.index;\n\tconst pos = geometry.attributes.position;\n\tconst drawRange = geometry.drawRange;\n\tconst triCount = Math.min( getTriCount( geometry ), drawRange.count / 3 );\n\n\t// get a point relative to the position of the geometry to avoid floating point error\n\t_tri.setFromAttributeAndIndices( pos, 0, 1, 2 );\n\tapplyMatrix4ToTri( _tri, matrix );\n\t_tri.getNormal( _normal );\n\t_tri.getMidpoint( _relPoint ).add( _normal );\n\n\t// iterate over all triangles\n\tlet volume = 0;\n\tconst startIndex = drawRange.start / 3;\n\tfor ( let i = startIndex, l = startIndex + triCount; i < l; i ++ ) {\n\n\t\tlet i0 = 3 * i + 0;\n\t\tlet i1 = 3 * i + 1;\n\t\tlet i2 = 3 * i + 2;\n\t\tif ( index ) {\n\n\t\t\ti0 = index.getX( i0 );\n\t\t\ti1 = index.getX( i1 );\n\t\t\ti2 = index.getX( i2 );\n\n\t\t}\n\n\t\t// get the triangle\n\t\t_tri.setFromAttributeAndIndices( pos, i0, i1, i2 );\n\t\tapplyMatrix4ToTri( _tri, matrix );\n\t\tsubVectorFromTri( _tri, _relPoint );\n\n\t\t// add the signed volume\n\t\tvolume += signedVolumeOfTriangle( _tri.a, _tri.b, _tri.c );\n\n\t}\n\n\treturn Math.abs( volume );\n\n}\n\nfunction signedVolumeOfTriangle( p1, p2, p3 ) {\n\n\tconst v321 = p3.x * p2.y * p1.z;\n\tconst v231 = p2.x * p3.y * p1.z;\n\tconst v312 = p3.x * p1.y * p2.z;\n\tconst v132 = p1.x * p3.y * p2.z;\n\tconst v213 = p2.x * p1.y * p3.z;\n\tconst v123 = p1.x * p2.y * p3.z;\n\treturn ( 1 / 6 ) * ( - v321 + v231 + v312 - v132 - v213 + v123 );\n\n}\n\nfunction subVectorFromTri( tri, pos ) {\n\n\ttri.a.sub( pos );\n\ttri.b.sub( pos );\n\ttri.c.sub( pos );\n\n}\n\nfunction applyMatrix4ToTri( tri, mat = null ) {\n\n\tif ( mat !== null ) {\n\n\t\ttri.a.applyMatrix4( mat );\n\t\ttri.b.applyMatrix4( mat );\n\t\ttri.c.applyMatrix4( mat );\n\n\t}\n\n}\n"],"names":["BufferAttribute","Vector3","_ray","Ray","_vec2","Vector2","_vec3","_vec4","Vector4","Mesh","Matrix4","MeshBVH","_vec","ExtendedTriangle","Line3","EPSILON","_edge","_plane","Plane","Triangle","_matrix","DoubleSide","Matrix3","_tri","_normal","removeUnusedMaterials","GeometryUtils.trimAttributes","GeometryUtils.getMaterialList","GeometryUtils.useCommonMaterials","GeometryUtils.joinGroups","GeometryUtils.removeUnusedMaterials","BufferGeometry","Group","Color","MeshPhongMaterial","MathUtils","LineSegments","LineBasicMaterial","InstancedMesh","SphereGeometry","MeshBasicMaterial"],"mappings":"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G,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAClZ,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAClZ,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC1B,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;CAC/B,OAAO,CAAC;CACR,KAAK;CACL,IAAI,SAAS,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;CAClD,MAAM,OAAO,SAAS,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CAC5D,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACx+E,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAA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CAAC,CAAC;CAC9B,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;CAC/B,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;CAC/B,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;CAC/B,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;CAC/B,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;CAC/B,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;CAC/B,QAAQ,IAAI,GAAG,GAAG,GAAG,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC;CAC9F,QAAQ,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,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EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7D,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7D,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1O,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1O,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC3B,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;CAC/B,OAAO;CACP,MAAM,OAAO,cAAc,CAAC;CAC5B,KAAK;CACL,IAAI,SAAS,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;CAC/C,MAAM,SAAS,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CAClD,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACtF,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACtF,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACtF,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACtF,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACtF,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACx/C,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9/B,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC3B,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;CAC/B,OAAO;CACP,MAAM,OAAO,cAAc,CAAC;CAC5B,KAAK;CACL,IAAI,SAAS,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;CAC/C,MAAM,SAAS,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CACtD,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/G,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/G,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/G,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/G,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/G,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/G,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACxoP,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KA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AAC,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAClC;CACA,CAAC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO;CACtD,EAAE,mBAAmB;CACrB,EAAE,CAAC;CACH,YAAY,CAAC;AACb,GAAG,EAAE,CAAC,CAAC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,CAAC,OAAO;CACb,EAAE,iCAAiC;CACnC,EAAE,CAAC;CACH,YAAY,CAAC,EAAE,CAAC,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;CACL,EAAE,CAAC;AACH;CACA,CAAC,OAAO,MAAM,CAAC;AACf;CACA;;CCnKO,MAAM,YAAY,SAASC,uBAAiB,CAAC;AACpD;CACA,CAAC,IAAI,UAAU,GAAG;AAClB;CACA,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AACrC;CACA,EAAE;AACF;CACA,CAAC,IAAI,UAAU,EAAE,CAAC,GAAG;AACrB;CACA,EAAE,KAAK,IAAI,CAAC,WAAW,KAAK,CAAC,GAAG;AAChC;CACA,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;CACxB,G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"}