{"version":3,"sources":["../../node_modules/three/build/three.module.js","../../node_modules/dat.gui/build/dat.gui.module.js","../../node_modules/three-orbitcontrols/OrbitControls.js","../js/index.js"],"names":["Number","EPSILON","undefined","Math","pow","isInteger","value","isFinite","floor","sign","x","Function","prototype","Object","defineProperty","get","toString","match","assign","target","TypeError","output","index","arguments","length","source","nextKey","hasOwnProperty","call","EventDispatcher","addEventListener","type","listener","_listeners","listeners","indexOf","push","hasEventListener","removeEventListener","listenerArray","splice","dispatchEvent","event","array","slice","i","l","REVISION","MOUSE","LEFT","MIDDLE","RIGHT","CullFaceNone","CullFaceBack","CullFaceFront","CullFaceFrontBack","FrontFaceDirectionCW","FrontFaceDirectionCCW","BasicShadowMap","PCFShadowMap","PCFSoftShadowMap","FrontSide","BackSide","DoubleSide","FlatShading","SmoothShading","NoColors","FaceColors","VertexColors","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","AddEquation","SubtractEquation","ReverseSubtractEquation","MinEquation","MaxEquation","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","SrcAlphaFactor","OneMinusSrcAlphaFactor","DstAlphaFactor","OneMinusDstAlphaFactor","DstColorFactor","OneMinusDstColorFactor","SrcAlphaSaturateFactor","NeverDepth","AlwaysDepth","LessDepth","LessEqualDepth","EqualDepth","GreaterEqualDepth","GreaterDepth","NotEqualDepth","MultiplyOperation","MixOperation","AddOperation","NoToneMapping","LinearToneMapping","ReinhardToneMapping","Uncharted2ToneMapping","CineonToneMapping","UVMapping","CubeReflectionMapping","CubeRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","SphericalReflectionMapping","CubeUVReflectionMapping","CubeUVRefractionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipMapNearestFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipMapNearestFilter","LinearMipMapLinearFilter","UnsignedByteType","ByteType","ShortType","UnsignedShortType","IntType","UnsignedIntType","FloatType","HalfFloatType","UnsignedShort4444Type","UnsignedShort5551Type","UnsignedShort565Type","UnsignedInt248Type","AlphaFormat","RGBFormat","RGBAFormat","LuminanceFormat","LuminanceAlphaFormat","RGBEFormat","DepthFormat","DepthStencilFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","RGB_ETC1_Format","RGBA_ASTC_4x4_Format","RGBA_ASTC_5x4_Format","RGBA_ASTC_5x5_Format","RGBA_ASTC_6x5_Format","RGBA_ASTC_6x6_Format","RGBA_ASTC_8x5_Format","RGBA_ASTC_8x6_Format","RGBA_ASTC_8x8_Format","RGBA_ASTC_10x5_Format","RGBA_ASTC_10x6_Format","RGBA_ASTC_10x8_Format","RGBA_ASTC_10x10_Format","RGBA_ASTC_12x10_Format","RGBA_ASTC_12x12_Format","LoopOnce","LoopRepeat","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","TrianglesDrawMode","TriangleStripDrawMode","TriangleFanDrawMode","LinearEncoding","sRGBEncoding","GammaEncoding","RGBEEncoding","LogLuvEncoding","RGBM7Encoding","RGBM16Encoding","RGBDEncoding","BasicDepthPacking","RGBADepthPacking","_Math","DEG2RAD","PI","RAD2DEG","generateUUID","lut","d0","random","d1","d2","d3","uuid","toUpperCase","clamp","min","max","euclideanModulo","n","m","mapLinear","a1","a2","b1","b2","lerp","y","t","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","degToRad","degrees","radToDeg","radians","isPowerOfTwo","ceilPowerOfTwo","ceil","log","LN2","floorPowerOfTwo","Vector2","defineProperties","set","isVector2","setScalar","scalar","setX","setY","setComponent","Error","getComponent","clone","constructor","copy","v","add","w","console","warn","addVectors","addScalar","s","a","b","addScaledVector","sub","subVectors","subScalar","multiply","multiplyScalar","divide","divideScalar","applyMatrix3","e","elements","clampScalar","minVal","maxVal","clampLength","round","roundToZero","negate","dot","lengthSq","sqrt","manhattanLength","abs","normalize","angle","atan2","distanceTo","distanceToSquared","dx","dy","manhattanDistanceTo","setLength","alpha","lerpVectors","v1","v2","equals","fromArray","offset","toArray","fromBufferAttribute","attribute","getX","getY","rotateAround","center","c","cos","sin","Matrix4","error","isMatrix4","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","te","identity","me","copyPosition","extractBasis","xAxis","yAxis","zAxis","setFromMatrixColumn","makeBasis","z","extractRotation","Vector3","scaleX","scaleY","scaleZ","makeRotationFromEuler","euler","isEuler","d","f","order","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","makeRotationFromQuaternion","q","_x","_y","_z","_w","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","lookAt","eye","up","crossVectors","multiplyMatrices","premultiply","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","applyToBufferAttribute","count","getZ","applyMatrix4","setXYZ","determinant","transpose","tmp","setPosition","getInverse","throwOnDegenerate","t11","t12","t13","t14","det","msg","detInv","scale","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","theta","makeRotationY","makeRotationZ","makeRotationAxis","axis","tx","ty","makeScale","makeShear","compose","position","quaternion","decompose","vector","matrix","sx","sy","sz","invSX","invSY","invSZ","setFromRotationMatrix","makePerspective","left","right","top","bottom","near","far","makeOrthographic","h","p","Quaternion","slerp","qa","qb","qm","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","len","tDir","onChangeCallback","setFromEuler","update","c1","c2","c3","s1","s2","s3","setFromAxisAngle","halfAngle","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","r","EPS","vFrom","vTo","inverse","conjugate","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","cosHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","onChange","callback","isVector3","setZ","multiplyVectors","applyEuler","applyQuaternion","applyAxisAngle","qx","qy","qz","qw","ix","iy","iz","iw","project","camera","projectionMatrix","matrixWorld","unproject","transformDirection","cross","ax","ay","az","bx","by","bz","projectOnVector","projectOnPlane","planeNormal","reflect","normal","angleTo","acos","dz","setFromSpherical","sinPhiRadius","phi","radius","setFromCylindrical","setFromMatrixPosition","setFromMatrixScale","Matrix3","isMatrix3","setFromMatrix4","g","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","rotation","cx","cy","rotate","translate","textureId","Texture","image","mapping","wrapS","wrapT","magFilter","minFilter","format","anisotropy","encoding","name","DEFAULT_IMAGE","mipmaps","DEFAULT_MAPPING","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","version","onUpdate","create","isTexture","updateMatrix","toJSON","meta","isRootObject","textures","getDataURL","canvas","HTMLCanvasElement","document","createElementNS","width","height","context","getContext","ImageData","putImageData","drawImage","toDataURL","metadata","generator","wrap","images","url","dispose","transformUv","uv","Vector4","isVector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","epsilon","epsilon2","getW","WebGLRenderTarget","options","scissor","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","isWebGLRenderTarget","setSize","WebGLRenderTargetCube","activeCubeFace","activeMipMapLevel","isWebGLRenderTargetCube","DataTexture","data","isDataTexture","Box3","Infinity","isBox3","setFromArray","minX","minY","minZ","maxX","maxY","maxZ","setFromBufferAttribute","setFromPoints","points","makeEmpty","il","expandByPoint","setFromCenterAndSize","size","halfSize","setFromObject","object","expandByObject","box","isEmpty","getCenter","getSize","point","expandByVector","expandByScalar","scope","traverse","node","geometry","isGeometry","vertices","isBufferGeometry","attributes","updateMatrixWorld","containsPoint","containsBox","getParameter","intersectsBox","intersectsSphere","closestPoint","sphere","clampPoint","intersectsPlane","plane","constant","intersectsTriangle","v0","f0","f1","f2","testAxis","extents","triangleNormal","satForAxes","axes","j","p0","p1","p2","triangle","distanceToPoint","clampedPoint","getBoundingSphere","Sphere","intersect","union","optionalCenter","maxRadiusSq","empty","radiusSum","deltaLengthSq","getBoundingBox","Plane","setComponents","setFromNormalAndCoplanarPoint","setFromCoplanarPoints","inverseNormalLength","distanceToSphere","projectPoint","intersectLine","line","direction","delta","denominator","start","intersectsLine","startSign","endSign","end","coplanarPoint","m1","optionalNormalMatrix","normalMatrix","referencePoint","Frustum","p3","p4","p5","planes","frustum","setFromMatrix","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","intersectsObject","boundingSphere","computeBoundingSphere","intersectsSprite","sprite","negRadius","distance","alphamap_fragment","alphamap_pars_fragment","alphatest_fragment","aomap_fragment","aomap_pars_fragment","begin_vertex","beginnormal_vertex","bsdfs","bumpmap_pars_fragment","clipping_planes_fragment","clipping_planes_pars_fragment","clipping_planes_pars_vertex","clipping_planes_vertex","color_fragment","color_pars_fragment","color_pars_vertex","color_vertex","common","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_vertex","fog_vertex","fog_pars_vertex","fog_fragment","fog_pars_fragment","gradientmap_pars_fragment","lightmap_fragment","lightmap_pars_fragment","lights_lambert_vertex","lights_pars_begin","lights_pars_maps","lights_phong_fragment","lights_phong_pars_fragment","lights_physical_fragment","lights_physical_pars_fragment","lights_fragment_begin","lights_fragment_maps","lights_fragment_end","logdepthbuf_fragment","logdepthbuf_pars_fragment","logdepthbuf_pars_vertex","logdepthbuf_vertex","map_fragment","map_pars_fragment","map_particle_fragment","map_particle_pars_fragment","metalnessmap_fragment","metalnessmap_pars_fragment","morphnormal_vertex","morphtarget_pars_vertex","morphtarget_vertex","normal_fragment_begin","normal_fragment_maps","normalmap_pars_fragment","packing","premultiplied_alpha_fragment","project_vertex","dithering_fragment","dithering_pars_fragment","roughnessmap_fragment","roughnessmap_pars_fragment","shadowmap_pars_fragment","shadowmap_pars_vertex","shadowmap_vertex","shadowmask_pars_fragment","skinbase_vertex","skinning_pars_vertex","skinning_vertex","skinnormal_vertex","specularmap_fragment","specularmap_pars_fragment","tonemapping_fragment","tonemapping_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","cube_frag","cube_vert","depth_frag","depth_vert","distanceRGBA_frag","distanceRGBA_vert","equirect_frag","equirect_vert","linedashed_frag","linedashed_vert","meshbasic_frag","meshbasic_vert","meshlambert_frag","meshlambert_vert","meshphong_frag","meshphong_vert","meshphysical_frag","meshphysical_vert","normal_frag","normal_vert","points_frag","points_vert","shadow_frag","shadow_vert","ShaderChunk","UniformsUtils","merge","uniforms","merged","u","uniforms_src","uniforms_dst","parameter_src","isColor","Array","isArray","ColorKeywords","Color","setRGB","setHex","setStyle","hex","setHSL","hue2rgb","style","handleAlpha","string","parseFloat","exec","color","components","parseInt","charAt","copyGammaToLinear","gammaFactor","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","getHex","getHexString","getHSL","hue","saturation","lightness","getStyle","offsetHSL","hsl","addColors","color1","color2","UniformsLib","diffuse","opacity","map","uvTransform","alphaMap","specularmap","specularMap","envmap","envMap","flipEnvMap","reflectivity","refractionRatio","maxMipLevel","aomap","aoMap","aoMapIntensity","lightmap","lightMap","lightMapIntensity","emissivemap","emissiveMap","bumpmap","bumpMap","bumpScale","normalmap","normalMap","normalScale","displacementmap","displacementMap","displacementScale","displacementBias","roughnessmap","roughnessMap","metalnessmap","metalnessMap","gradientmap","gradientMap","fog","fogDensity","fogNear","fogFar","fogColor","lights","ambientLightColor","directionalLights","properties","shadow","shadowBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotShadowMap","spotShadowMatrix","pointLights","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","ShaderLib","basic","vertexShader","fragmentShader","lambert","emissive","phong","specular","shininess","standard","roughness","metalness","envMapIntensity","dashed","dashSize","totalSize","depth","cube","tCube","tFlip","equirect","tEquirect","distanceRGBA","referencePosition","nearDistance","farDistance","physical","clearCoat","clearCoatRoughness","WebGLAttributes","gl","buffers","WeakMap","createBuffer","bufferType","usage","dynamic","DYNAMIC_DRAW","STATIC_DRAW","buffer","bindBuffer","bufferData","onUploadCallback","FLOAT","Float32Array","Float64Array","Uint16Array","UNSIGNED_SHORT","Int16Array","SHORT","Uint32Array","UNSIGNED_INT","Int32Array","INT","Int8Array","BYTE","Uint8Array","UNSIGNED_BYTE","bytesPerElement","BYTES_PER_ELEMENT","updateBuffer","updateRange","bufferSubData","subarray","isInterleavedBufferAttribute","remove","deleteBuffer","delete","Euler","_order","DefaultOrder","RotationOrders","asin","setFromQuaternion","setFromVector3","reorder","newOrder","toVector3","optionalResult","Layers","mask","channel","enable","toggle","disable","test","layers","object3DId","Object3D","parent","children","DefaultUp","onRotationChange","onQuaternionChange","enumerable","modelViewMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","visible","castShadow","receiveShadow","frustumCulled","renderOrder","userData","isObject3D","onBeforeRender","onAfterRender","applyMatrix","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","q1","rotateOnWorldAxis","rotateX","rotateY","rotateZ","translateOnAxis","translateX","translateY","translateZ","localToWorld","worldToLocal","isCamera","getObjectById","id","getObjectByProperty","getObjectByName","child","getWorldPosition","getWorldQuaternion","getWorldScale","getWorldDirection","raycast","traverseVisible","traverseAncestors","force","geometries","materials","shapes","JSON","stringify","serialize","library","element","parameters","shape","material","uuids","extractFromCache","cache","values","key","recursive","parse","Camera","matrixWorldInverse","OrthographicCamera","zoom","view","updateProjectionMatrix","isOrthographicCamera","setViewOffset","fullWidth","fullHeight","enabled","offsetX","offsetY","clearViewOffset","zoomW","zoomH","scaleW","scaleH","Face3","materialIndex","vertexNormals","vertexColors","geometryId","Geometry","colors","faces","faceVertexUvs","morphTargets","morphNormals","skinWeights","skinIndices","lineDistances","boundingBox","elementsNeedUpdate","verticesNeedUpdate","uvsNeedUpdate","normalsNeedUpdate","colorsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","vertex","face","jl","computeBoundingBox","obj","fromBufferGeometry","indices","positions","normals","uvs","uvs2","uv2","tempNormals","tempUVs","tempUVs2","addFace","groups","group","computeFaceNormals","cb","ab","fl","vA","vB","vC","computeVertexNormals","areaWeighted","vl","computeFlatVertexNormals","computeMorphNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","uvs1","colors1","colors2","vertexCopy","faceCopy","faceVertexNormals","faceVertexColors","uvCopy","mergeMesh","mesh","isMesh","mergeVertices","verticesMap","unique","changes","precisionPoints","precision","faceIndicesToRemove","idx","diff","sortFacesByMaterialIndex","_id","materialIndexSort","sort","newUvs1","newUvs2","normalsHash","colorsHash","uvsHash","hasMaterial","hasFaceUv","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","setBit","getUvIndex","getNormalIndex","getColorIndex","hash","k","kl","uvsCopy","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","BufferAttribute","itemSize","normalized","isBufferAttribute","setArray","setDynamic","copyAt","index1","index2","copyArray","copyColorsArray","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","setXY","setXYZW","onUpload","Int8BufferAttribute","Uint8BufferAttribute","Uint8ClampedBufferAttribute","Uint8ClampedArray","Int16BufferAttribute","Uint16BufferAttribute","Int32BufferAttribute","Uint32BufferAttribute","Float32BufferAttribute","Float64BufferAttribute","DirectGeometry","computeGroups","fromGeometry","hasFaceVertexUv2","morphTargetsLength","morphTargetsPosition","morphNormalsLength","morphTargetsNormal","hasSkinIndices","hasSkinWeights","vertexUvs","arrayMax","bufferGeometryId","BufferGeometry","morphAttributes","drawRange","getIndex","setIndex","addAttribute","getAttribute","removeAttribute","addGroup","clearGroups","setDrawRange","needsUpdate","isPoints","isLine","updateFromObject","direct","__directGeometry","lineDistance","fromDirectGeometry","isNaN","pA","pB","pC","normalizeNormals","attribute1","attributeArray1","attribute2","attributeArray2","attributeSize","toNonIndexed","geometry2","array2","morphAttribute","BoxGeometry","widthSegments","heightSegments","depthSegments","BoxBufferGeometry","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","PlaneGeometry","PlaneBufferGeometry","width_half","height_half","segment_width","segment_height","materialId","Material","blending","side","flatShading","transparent","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","depthTest","depthWrite","clippingPlanes","clipIntersection","clipShadows","shadowSide","colorWrite","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaTest","premultipliedAlpha","overdraw","isMaterial","onBeforeCompile","setValues","newValue","currentValue","isRoot","emissiveIntensity","sizeAttenuation","linewidth","gapSize","wireframe","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","skinning","srcPlanes","dstPlanes","MeshBasicMaterial","combine","isMeshBasicMaterial","ShaderMaterial","defines","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","isShaderMaterial","Ray","origin","ray","at","recast","closestPointToPoint","directionDistance","distanceSqToPoint","distanceSqToSegment","segCenter","segDir","optionalPointOnRay","optionalPointOnSegment","segExtent","a01","b0","s0","sqrDist","extDet","invDet","intersectSphere","tca","radius2","thc","t0","t1","distanceToPlane","intersectPlane","distToPoint","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","edge1","edge2","backfaceCulling","DdN","DdQxE2","DdE1xQ","QdN","Line3","distanceSq","closestPointToPointParameter","startP","startEnd","clampToLine","startEnd2","startEnd_startP","Triangle","getNormal","targetLengthSq","getBarycoord","dot00","dot01","dot02","dot11","dot12","denom","invDenom","setFromPointsAndIndices","i0","i1","i2","getArea","getMidpoint","getPlane","edgeList","projectedPoint","minDistance","Mesh","drawMode","updateMorphTargets","setDrawMode","morphTargetInfluences","morphTargetDictionary","ml","keys","String","inverseMatrix","tempA","tempB","tempC","uvA","uvB","uvC","barycoord","intersectionPoint","intersectionPointWorld","uvIntersection","uv1","uv3","checkIntersection","raycaster","checkBufferGeometryIntersection","intersection","faceIndex","intersects","fvA","fvB","fvC","isMultiMaterial","faceMaterial","morphInfluences","tl","influence","targets","uvs_f","WebGLBackground","renderer","state","clearColor","clearAlpha","planeCamera","planeMesh","boxMesh","render","renderList","scene","forceClear","background","setClear","autoClear","clear","autoClearColor","autoClearDepth","autoClearStencil","isCubeTexture","renderBufferDirect","getClearColor","setClearColor","getClearAlpha","setClearAlpha","WebGLBufferRenderer","info","mode","setMode","drawArrays","renderInstances","extension","drawArraysInstancedANGLE","maxInstancedCount","WebGLCapabilities","maxAnisotropy","getMaxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","getMaxPrecision","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","MEDIUM_FLOAT","maxPrecision","logarithmicDepthBuffer","maxTextures","MAX_TEXTURE_IMAGE_UNITS","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","maxCubemapSize","MAX_CUBE_MAP_TEXTURE_SIZE","maxAttributes","MAX_VERTEX_ATTRIBS","maxVertexUniforms","MAX_VERTEX_UNIFORM_VECTORS","maxVaryings","MAX_VARYING_VECTORS","maxFragmentUniforms","MAX_FRAGMENT_UNIFORM_VECTORS","vertexTextures","floatFragmentTextures","floatVertexTextures","WebGLClipping","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","uniform","numPlanes","numIntersection","init","enableLocalClipping","projectPlanes","beginShadows","endShadows","resetGlobalState","setState","fromCache","nGlobal","lGlobal","dstArray","clippingState","skipTransform","nPlanes","flatSize","viewMatrix","i4","WebGLExtensions","getExtension","WebGLGeometries","wireframeAttributes","onGeometryDispose","buffergeometry","memory","_bufferGeometry","geometryAttributes","ELEMENT_ARRAY_BUFFER","ARRAY_BUFFER","getWireframeAttribute","geometryIndex","WebGLIndexedBufferRenderer","drawElements","drawElementsInstancedANGLE","WebGLInfo","frame","calls","triangles","lines","instanceCount","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","LINES","LINE_STRIP","LINE_LOOP","POINTS","reset","programs","autoReset","absNumericalSort","WebGLMorphtargets","influencesList","program","objectInfluences","influences","getUniforms","setValue","WebGLObjects","updateList","CubeTexture","emptyTexture","emptyCubeTexture","UniformContainer","seq","arrayCacheF32","arrayCacheI32","mat4array","mat3array","flatten","nBlocks","blockSize","firstElem","allocTexUnits","allocTextureUnit","setValue1f","uniform1f","addr","setValue1i","uniform1i","setValue2fv","uniform2fv","uniform2f","setValue3fv","uniform3f","uniform3fv","setValue4fv","uniform4fv","uniform4f","setValue2fm","uniformMatrix2fv","setValue3fm","uniformMatrix3fv","setValue4fm","uniformMatrix4fv","setValueT1","unit","setTexture2D","setValueT6","setTextureCube","setValue2iv","uniform2iv","setValue3iv","uniform3iv","setValue4iv","uniform4iv","getSingularSetter","setValue1fv","uniform1fv","setValue1iv","uniform1iv","setValueV2a","setValueV3a","setValueV4a","setValueM2a","setValueM3a","setValueM4a","setValueT1a","units","setValueT6a","getPureArraySetter","SingleUniform","activeInfo","PureArrayUniform","StructuredUniform","RePathPart","addUniform","container","uniformObject","parseUniform","path","pathLength","lastIndex","matchEnd","idIsIndex","subscript","next","WebGLUniforms","getProgramParameter","ACTIVE_UNIFORMS","getActiveUniform","getUniformLocation","setOptional","upload","seqWithValue","addLineNumbers","split","join","WebGLShader","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","programIdCount","getEncodingComponents","getTexelDecodingFunction","functionName","getTexelEncodingFunction","getToneMappingFunction","toneMapping","toneMappingName","generateExtensions","rendererExtensions","chunks","envMapCubeUV","filter","filterEmptyLine","generateDefines","fetchAttributeLocations","ACTIVE_ATTRIBUTES","getActiveAttrib","getAttribLocation","replaceLightNums","replace","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","parseIncludes","pattern","include","unrollLoops","snippet","unroll","WebGLProgram","code","shadowMapTypeDefine","shadowMapType","envMapTypeDefine","envMapModeDefine","envMapBlendingDefine","gammaFactorDefine","customExtensions","customDefines","createProgram","prefixVertex","prefixFragment","isRawShaderMaterial","supportsVertexTextures","maxBones","useFog","fogExp","useVertexTexture","doubleSided","flipSided","shadowMapEnabled","physicallyCorrectLights","outputEncoding","mapEncoding","envMapEncoding","emissiveMapEncoding","depthPacking","vertexGlsl","fragmentGlsl","glVertexShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","programLog","getProgramInfoLog","trim","vertexLog","fragmentLog","runnable","haveDiagnostics","LINK_STATUS","getError","VALIDATE_STATUS","diagnostics","prefix","deleteShader","cachedUniforms","cachedAttributes","getAttributes","destroy","deleteProgram","usedTimes","WebGLPrograms","capabilities","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","parameterNames","allocateBones","skeleton","bones","nVertexUniforms","nVertexMatrices","getTextureEncodingFromMap","gammaOverrideLinear","getParameters","shadows","nClipPlanes","nClipIntersection","shaderID","isSkinnedMesh","currentRenderTarget","getRenderTarget","gammaOutput","gammaInput","envMapMode","isFogExp2","maxMorphTargets","maxMorphNormals","directional","spot","rectArea","hemi","shadowMap","getProgramCode","acquireProgram","pl","programInfo","releaseProgram","pop","WebGLProperties","painterSortStable","reversePainterSortStable","WebGLRenderList","renderItems","renderItemsIndex","opaque","renderItem","WebGLRenderLists","lists","list","UniformsCache","light","halfWidth","halfHeight","WebGLLights","ambient","vector3","matrix42","setup","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","intensity","isAmbientLight","isDirectionalLight","bias","mapSize","isSpotLight","penumbra","isRectAreaLight","isPointLight","isHemisphereLight","WebGLRenderState","lightsArray","shadowsArray","spritesArray","pushLight","pushShadow","shadowLight","pushSprite","setupLights","WebGLRenderStates","renderStates","renderState","isMeshDepthMaterial","isMeshDistanceMaterial","WebGLShadowMap","_renderer","_objects","_frustum","_projScreenMatrix","_shadowMapSize","_maxShadowMapSize","_lookTarget","_lightPositionWorld","_MorphingFlag","_SkinningFlag","_NumberOfMaterialVariants","_depthMaterials","_distanceMaterials","_materialCache","cubeDirections","cubeUps","cube2DViewPorts","useMorphing","useSkinning","depthMaterial","distanceMaterial","autoUpdate","_gl","_state","BLEND","setTest","setScissorTest","faceCount","shadowCamera","vpWidth","vpHeight","pars","isSpotLightShadow","shadowMatrix","setRenderTarget","vpDimensions","renderObject","getDepthMaterial","lightPositionWorld","result","materialVariants","customMaterial","customDepthMaterial","customDistanceMaterial","variantIndex","keyA","keyB","materialsForVariant","cachedMaterial","groupMaterial","CanvasTexture","WebGLSpriteRenderer","vertexBuffer","elementBuffer","spritePosition","spriteRotation","spriteScale","uvOffset","uvScale","fogType","fogDepth","fillStyle","fillRect","sprites","useProgram","initAttributes","enableAttribute","disableUnusedAttributes","CULL_FACE","vertexAttribPointer","activeTexture","TEXTURE0","oldFogType","sceneFogType","isFog","density","setBlending","setMask","WebGLState","utils","ColorBuffer","locked","currentColorMask","currentColorClear","colorMask","setLocked","lock","DepthBuffer","currentDepthMask","currentDepthFunc","currentDepthClear","DEPTH_TEST","depthMask","setFunc","NEVER","ALWAYS","LESS","LEQUAL","EQUAL","GEQUAL","GREATER","NOTEQUAL","clearDepth","StencilBuffer","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","STENCIL_TEST","stencilMask","stencilFunc","stencilRef","setOp","stencilFail","stencilZFail","stencilZPass","stencilOp","stencil","clearStencil","colorBuffer","maxVertexAttributes","newAttributes","enabledAttributes","attributeDivisors","compressedTextureFormats","currentProgram","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","MAX_COMBINED_TEXTURE_IMAGE_UNITS","lineWidthAvailable","glVersion","VERSION","currentTextureSlot","currentBoundTextures","currentScissor","currentViewport","createTexture","bindTexture","texParameteri","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","texImage2D","RGBA","emptyTextures","TEXTURE_2D","TEXTURE_CUBE_MAP","TEXTURE_CUBE_MAP_POSITIVE_X","setFlipSided","setCullFace","enableVertexAttribArray","vertexAttribDivisorANGLE","enableAttributeAndDivisor","meshPerAttribute","disableVertexAttribArray","getCompressedTextureFormats","formats","COMPRESSED_TEXTURE_FORMATS","blendEquationSeparate","FUNC_ADD","blendFuncSeparate","ONE","blendFunc","SRC_ALPHA","ZERO","ONE_MINUS_SRC_COLOR","ONE_MINUS_SRC_ALPHA","SRC_COLOR","convert","setMaterial","frontFaceCW","setPolygonOffset","frontFace","CW","CCW","cullFace","BACK","FRONT","FRONT_AND_BACK","setLineWidth","lineWidth","factor","POLYGON_OFFSET_FILL","SCISSOR_TEST","webglSlot","webglType","webglTexture","boundTexture","compressedTexImage2D","apply","WebGLTextures","_isWebGL2","WebGL2RenderingContext","_videoTextures","_canvas","clampToMaxSize","maxSize","makePowerOfTwo","HTMLImageElement","ImageBitmap","textureNeedsPowerOfTwo","textureNeedsGenerateMipmaps","generateMipmap","textureProperties","__maxMipLevel","LOG2E","filterFallback","LINEAR","onTextureDispose","deallocateTexture","isVideoTexture","onRenderTargetDispose","renderTarget","deallocateRenderTarget","__image__webglTextureCube","deleteTexture","__webglInit","__webglTexture","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","slot","updateVideoTexture","__version","complete","uploadTexture","pixelStorei","UNPACK_FLIP_Y_WEBGL","isCompressed","isCompressedTexture","cubeImage","isPowerOfTwoImage","glFormat","glType","setTextureParameters","mipmap","setTextureCubeDynamic","textureType","TEXTURE_WRAP_S","TEXTURE_WRAP_T","CLAMP_TO_EDGE","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","isDepthTexture","internalFormat","DEPTH_COMPONENT","DEPTH_COMPONENT32F","DEPTH_COMPONENT16","DEPTH_STENCIL","setupFrameBufferTexture","framebuffer","attachment","textureTarget","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorage","framebufferRenderbuffer","DEPTH_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","RGBA4","setupDepthTexture","isCube","webglDepthTexture","setupDepthRenderbuffer","createRenderbuffer","setupRenderTarget","isTargetPowerOfTwo","createFramebuffer","COLOR_ATTACHMENT0","updateRenderTargetMipmap","WebGLUtils","REPEAT","MIRRORED_REPEAT","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","HALF_FLOAT_OES","ALPHA","RGB","LUMINANCE","LUMINANCE_ALPHA","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","MIN_EXT","MAX_EXT","UNSIGNED_INT_24_8_WEBGL","PerspectiveCamera","fov","aspect","focus","filmGauge","filmOffset","isPerspectiveCamera","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","tan","getEffectiveFOV","getFilmWidth","skew","ArrayCamera","cameras","isArrayCamera","WebVRManager","device","frameData","poseTarget","standingMatrix","standingMatrixInverse","window","VRFrameData","onVRDisplayPresentChange","tempQuaternion","tempPosition","cameraL","bounds","cameraR","cameraVR","isPresenting","currentSize","currentPixelRatio","eyeParameters","getEyeParameters","renderWidth","renderHeight","getPixelRatio","setDrawingBufferSize","userHeight","getDevice","setDevice","setPoseTarget","getCamera","depthNear","depthFar","getFrameData","stageParameters","sittingToStandingTransform","pose","poseObject","orientation","leftViewMatrix","rightViewMatrix","leftProjectionMatrix","rightProjectionMatrix","getLayers","layer","leftBounds","rightBounds","getStandingMatrix","submitFrame","WebGLRenderer","_context","_alpha","_depth","_stencil","_antialias","antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","currentRenderList","currentRenderState","domElement","sortObjects","toneMappingExposure","toneMappingWhitePoint","_this","_isContextLost","_currentRenderTarget","_currentFramebuffer","_currentMaterialId","_currentGeometryProgram","_currentCamera","_currentArrayCamera","_currentViewport","_currentScissor","_currentScissorTest","_usedTextureUnits","_width","_height","_pixelRatio","_viewport","_scissor","_scissorTest","_clipping","_clippingEnabled","_localClippingEnabled","_vector3","getTargetPixelRatio","contextAttributes","onContextLost","onContextRestore","message","objects","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","spriteRenderer","initGLContext","vr","getContextAttributes","forceContextLoss","loseContext","forceContextRestore","restoreContext","setPixelRatio","updateStyle","setViewport","getDrawingBufferSize","pixelRatio","getCurrentViewport","setScissor","boolean","bits","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","clearTarget","stopAnimation","preventDefault","onMaterialDispose","deallocateMaterial","releaseMaterialProgramReference","renderObjectImmediate","renderBufferImmediate","hasPositions","hasNormals","hasUvs","hasColors","programAttributes","positionArray","isMeshPhongMaterial","isMeshStandardMaterial","isMeshNormalMaterial","normalArray","nx","ny","nz","uvArray","colorArray","setProgram","geometryProgram","updateBuffers","rangeFactor","setupVertexAttributes","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","isInstancedBufferGeometry","materialDefaultAttributeValues","programAttribute","geometryAttribute","stride","isInstancedInterleavedBuffer","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","compile","isLight","initMaterial","isAnimating","onAnimationFrame","startAnimation","requestAnimationLoopFrame","requestAnimationFrame","animationLoop","time","animate","projectObject","opaqueObjects","transparentObjects","overrideMaterial","renderObjects","isSprite","isImmediateRenderObject","camera2","materialProperties","programChange","lightsHash","numSupportedMorphTargets","numSupportedMorphNormals","progUniforms","uniformsList","useCache","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","uCamPos","cameraPosition","isMeshLambertMaterial","boneTexture","boneMatrices","boneTextureSize","markUniformsLightsNeedsUpdate","refreshUniformsFog","refreshUniformsCommon","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsToon","refreshUniformsPhong","isMeshPhysicalMaterial","refreshUniformsPhysical","refreshUniformsStandard","refreshUniformsDepth","refreshUniformsDistance","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isShadowMaterial","ltc_1","LTC_1","ltc_2","LTC_2","uvScaleMap","textureUnit","warned","setTexture","readRenderTargetPixels","restore","textureFormat","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","readPixels","copyFramebufferToTexture","level","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","pixels","texSubImage2D","FogExp2","Fog","Scene","SpriteMaterial","isSpriteMaterial","Sprite","intersectPoint","worldPosition","worldScale","guessSizeSq","LOD","levels","addLevel","getObjectForDistance","matrixPosition","Skeleton","boneInverses","calculateInverses","bone","isBone","offsetMatrix","identityMatrix","getBoneByName","Bone","SkinnedMesh","bindMode","bindMatrix","bindMatrixInverse","initBones","bind","normalizeSkinWeights","gbone","pos","rotq","scl","sw","vec","skinWeight","linecap","linejoin","Line","LineSegments","computeLineDistances","positionAttribute","linePrecision","precisionSq","vStart","vEnd","interSegment","interRay","step","distSq","nbVertices","LineLoop","Points","threshold","params","localThreshold","localThresholdSq","testPoint","rayPointDistanceSq","distanceToRay","Group","isGroup","VideoTexture","video","readyState","HAVE_CURRENT_DATA","CompressedTexture","DepthTexture","WireframeGeometry","o","ol","edge","edges","ParametricGeometry","func","slices","stacks","ParametricBufferGeometry","pu","pv","sliceCount","PolyhedronGeometry","detail","PolyhedronBufferGeometry","uvBuffer","subdivide","appplyRadius","generateUVs","getVertexByIndex","subdivideFace","cols","aj","bj","rows","pushVertex","azimuth","inclination","correctUVs","correctSeam","centroid","azi","correctUV","TetrahedronGeometry","TetrahedronBufferGeometry","OctahedronGeometry","OctahedronBufferGeometry","IcosahedronGeometry","IcosahedronBufferGeometry","DodecahedronGeometry","DodecahedronBufferGeometry","TubeGeometry","tubularSegments","radialSegments","closed","taper","bufferGeometry","TubeBufferGeometry","tangents","binormals","frames","computeFrenetFrames","P","generateBufferData","generateSegment","generateIndices","getPointAt","N","B","TorusKnotGeometry","tube","heightScale","TorusKnotBufferGeometry","P1","P2","T","calculatePositionOnCurve","cu","su","quOverP","cs","TorusGeometry","arc","TorusBufferGeometry","Earcut","triangulate","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","invSize","eliminateHoles","earcutLinked","clockwise","last","signedArea","insertNode","removeNode","filterPoints","again","steiner","area","prev","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","zOrder","nextZ","prevZ","locallyInside","isValidDiagonal","splitPolygon","queue","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","mx","my","tanMin","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","px","py","intersectsPolygon","middleInside","q2","inside","Node","an","bp","sum","ShapeUtils","contour","isClockWise","pts","triangulateShape","holes","removeDupEndPts","addContour","holeIndex","forEach","ExtrudeGeometry","ExtrudeBufferGeometry","verticesArray","addShape","placeholder","curveSegments","steps","amount","bevelEnabled","bevelThickness","bevelSize","bevelSegments","extrudePath","uvgen","UVGenerator","WorldUVGenerator","extrudePts","extrudeByPath","splineTube","binormal","position2","getSpacedPoints","ahole","hl","shapePoints","extractPoints","reverse","concat","scalePt2","pt","bs","vert","vlen","flen","getBevelVec","inPt","inPrev","inNext","v_trans_x","v_trans_y","shrink_by","v_prev_x","v_prev_y","v_next_x","v_next_y","v_prev_lensq","collinear0","v_prev_len","v_next_len","ptPrevShift_x","ptPrevShift_y","ptNextShift_x","ptNextShift_y","sf","v_trans_lensq","direction_eq","contourMovements","holesMovements","oneHoleMovements","verticesMovements","buildLidFaces","buildSideFaces","f3","layeroffset","sidewalls","sl","slen1","slen2","f4","addVertex","nextIndex","generateTopUV","addUV","generateSideWallUV","vector2","indexA","indexB","indexC","a_x","a_y","b_x","b_y","c_x","c_y","indexD","a_z","b_z","c_z","d_x","d_y","d_z","TextGeometry","text","TextBufferGeometry","font","isFont","generateShapes","SphereGeometry","phiStart","phiLength","thetaStart","thetaLength","SphereBufferGeometry","thetaEnd","grid","verticesRow","RingGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","RingBufferGeometry","segment","radiusStep","thetaSegmentLevel","LatheGeometry","segments","LatheBufferGeometry","base","inverseSegments","n1","n2","ShapeGeometry","ShapeBufferGeometry","shapeHole","indexOffset","shapeVertices","shapeHoles","EdgesGeometry","thresholdAngle","thresholdDot","sourceVertices","face1","face2","CylinderGeometry","radiusTop","radiusBottom","openEnded","CylinderBufferGeometry","indexArray","generateTorso","generateCap","slope","indexRow","sinTheta","cosTheta","centerIndexStart","centerIndexEnd","ConeGeometry","ConeBufferGeometry","CircleGeometry","CircleBufferGeometry","Geometries","freeze","RawShaderMaterial","Materials","Cache","files","file","LoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","transform","DefaultLoadingManager","loading","FileLoader","manager","load","cached","setTimeout","dataUriRegex","dataUriRegexResult","mimeType","isBase64","decodeURIComponent","atob","response","responseType","toLowerCase","charCodeAt","Blob","parser","DOMParser","parseFromString","request","XMLHttpRequest","open","callbacks","status","withCredentials","overrideMimeType","header","requestHeader","setRequestHeader","send","setPath","setResponseType","setWithCredentials","setMimeType","CompressedTextureLoader","_parser","loader","loadTexture","texDatas","loaded","mipmapCount","isCubemap","DataTextureLoader","texData","ImageLoader","crossOrigin","substr","src","setCrossOrigin","CubeTextureLoader","urls","TextureLoader","isJPEG","search","Curve","arcLengthDivisions","getPoint","optionalTarget","getUtoTmapping","getPoints","divisions","getLength","lengths","getLengths","cacheArcLengths","current","updateArcLengths","arcLengths","targetArcLength","comparison","lengthBefore","lengthAfter","segmentLength","segmentFraction","getTangent","t2","pt1","pt2","getTangentAt","mat","MAX_VALUE","tz","fromJSON","json","EllipseCurve","aX","aY","xRadius","yRadius","aStartAngle","aEndAngle","aClockwise","aRotation","isEllipseCurve","twoPi","deltaAngle","samePoints","ArcCurve","aRadius","isArcCurve","CubicPoly","c0","initCatmullRom","x3","tension","initNonuniformCatmullRom","dt0","dt1","dt2","calc","t3","pz","CatmullRomCurve3","curveType","isCatmullRomCurve3","intPoint","weight","CatmullRom","QuadraticBezierP0","QuadraticBezierP1","QuadraticBezierP2","QuadraticBezier","CubicBezierP0","CubicBezierP1","CubicBezierP2","CubicBezierP3","CubicBezier","CubicBezierCurve","v3","isCubicBezierCurve","CubicBezierCurve3","isCubicBezierCurve3","LineCurve","isLineCurve","tangent","LineCurve3","isLineCurve3","QuadraticBezierCurve","isQuadraticBezierCurve","QuadraticBezierCurve3","isQuadraticBezierCurve3","SplineCurve","isSplineCurve","Curves","CurvePath","curves","autoClose","curve","closePath","startPoint","endPoint","curveLengths","getCurveLengths","lens","cacheLengths","sums","resolution","Path","currentPoint","moveTo","lineTo","quadraticCurveTo","aCPx","aCPy","bezierCurveTo","aCP1x","aCP1y","aCP2x","aCP2y","splineThru","npts","absarc","absellipse","ellipse","firstPoint","lastPoint","Shape","getPointsHoles","holesPts","Light","HemisphereLight","LightShadow","SpotLightShadow","SpotLight","power","PointLight","DirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","StringKeyframeTrack","times","interpolation","KeyframeTrack","ValueTypeName","ValueBufferType","DefaultInterpolation","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","BooleanKeyframeTrack","Interpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","_cachedIndex","valueSize","evaluate","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","mid","intervalChanged_","interpolate_","settings","DefaultSettings_","getSettings_","copySampleValue_","QuaternionLinearInterpolant","QuaternionKeyframeTrack","getValueSize","ColorKeyframeTrack","NumberKeyframeTrack","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","halfDt","o1","o0","oP","oN","wP","wN","ppp","sP","sN","LinearInterpolant","offset1","offset0","weight1","weight0","DiscreteInterpolant","AnimationUtils","arraySlice","from","to","isTypedArray","convertArray","forceClone","ArrayBuffer","isView","DataView","getKeyframeOrder","compareTime","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","TimeBufferType","setInterpolation","validate","optimize","trackType","_getTrackTypeForValueTypeName","track","getInterpolation","typeName","VectorKeyframeTrack","InterpolantFactoryMethodDiscrete","factoryMethod","createInterpolant","shift","timeOffset","timeScale","startTime","endTime","nKeys","valid","prevTime","currTime","smoothInterpolation","writeIndex","keep","timeNext","offsetP","offsetN","readOffset","writeOffset","AnimationClip","duration","tracks","resetDuration","jsonTracks","frameTime","fps","clip","clipTracks","CreateFromMorphTargetSequence","morphTargetSequence","noLoop","numMorphTargets","findByName","objectOrClipArray","clipArray","animations","CreateClipsFromMorphTargetSequences","animationToMorphTargets","parts","animationMorphTargets","clips","parseAnimation","animation","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","MaterialLoader","setTextures","getTexture","shading","BufferGeometryLoader","typedArray","TYPED_ARRAYS","drawcalls","offsets","Loader","Handlers","handlers","regex","onLoadStart","onLoadProgress","onLoadComplete","initMaterials","texturePath","createMaterial","BlendingMode","textureLoader","materialLoader","fullPath","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","LoaderUtils","decodeText","TextDecoder","decode","fromCharCode","escape","extractUrlBase","lastIndexOf","JSONLoader","setTexturePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","faceA","faceB","uvLayer","nUvLayers","parseSkin","influencesPerVertex","parseMorphing","dstVertices","srcVertices","morphColors","parseAnimations","outputAnimations","morphAnimationClips","ObjectLoader","substring","parseShape","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","geometryLoader","bufferGeometryLoader","details","geometryShapes","loadImage","parseConstant","TEXTURE_MAPPING","TEXTURE_WRAPPING","TEXTURE_FILTER","getGeometry","getMaterial","ImageBitmapLoader","createImageBitmap","fetch","setOptions","then","res","blob","imageBitmap","catch","ShapePath","subPaths","currentPath","toShapes","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","isPointInsidePolygon","inPolygon","polyLen","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","solid","holesFirst","betterShapeHoles","newShapes","newShapeHoles","mainIdx","tmpPoints","ambiguous","toChange","sIdx","sLen","sho","hIdx","ho","hole_unassigned","s2Idx","froms","tos","tmpHoles","Font","paths","createPaths","chars","line_height","yMax","yMin","underlineThickness","char","ret","createPath","glyph","glyphs","cpx","cpy","cpx1","cpy1","cpx2","cpy2","outline","_cachedOutline","action","ha","FontLoader","AudioContext","webkitAudioContext","setContext","AudioLoader","decodeAudioData","audioBuffer","StereoCamera","eyeSep","instance","eyeRight","eyeLeft","eyeSepOnProjection","ymax","xmin","xmax","CubeCamera","cubeResolution","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","AudioListener","gain","createGain","connect","destination","getInput","removeFilter","disconnect","getFilter","setFilter","getMasterVolume","setMasterVolume","setTargetAtTime","currentTime","positionX","setValueAtTime","positionY","positionZ","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","Audio","autoplay","loop","playbackRate","isPlaying","hasPlaybackControl","sourceType","filters","getOutput","setNodeSource","audioNode","setBuffer","play","createBufferSource","onended","onEnded","pause","getFilters","setFilters","setPlaybackRate","getPlaybackRate","getLoop","setLoop","getVolume","setVolume","PositionalAudio","panner","createPanner","getRefDistance","refDistance","setRefDistance","getRolloffFactor","rolloffFactor","setRolloffFactor","getDistanceModel","distanceModel","setDistanceModel","getMaxDistance","maxDistance","setMaxDistance","AudioAnalyser","audio","fftSize","analyser","createAnalyser","frequencyBinCount","getFrequencyData","getByteFrequencyData","getAverageFrequency","PropertyMixer","binding","mixFunction","_slerp","_select","_lerp","_mixBufferRegion","cumulativeWeight","useCount","referenceCount","accumulate","accuIndex","currentWeight","mix","originalValueOffset","saveOriginalState","getValue","restoreOriginalState","RESERVED_CHARS_RE","Composite","targetGroup","optionalParsedPath","parsedPath","PropertyBinding","parseTrackName","_targetGroup","_bindings","subscribe_","firstValidIndex","nCachedObjects_","bindings","unbind","rootNode","findNode","nodeName","root","isAnimationObjectGroup","sanitizeNodeName","reservedRe","RegExp","wordChar","wordCharOrDot","directoryRe","nodeRe","objectRe","propertyRe","trackRe","supportedObjectNames","matches","results","objectName","objectIndex","propertyIndex","lastDot","searchNodeSubtree","childNode","subTreeNode","_getValue_unavailable","_setValue_unavailable","BindingType","Direct","EntireArray","ArrayElement","HasFromToArray","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","GetterByBindingType","getValue_direct","getValue_array","resolvedProperty","getValue_arrayElement","getValue_toArray","SetterByBindingTypeAndVersioning","setValue_direct","targetObject","setValue_direct_setNeedsUpdate","setValue_direct_setMatrixWorldNeedsUpdate","setValue_array","dest","setValue_array_setNeedsUpdate","setValue_array_setMatrixWorldNeedsUpdate","setValue_arrayElement","setValue_arrayElement_setNeedsUpdate","setValue_arrayElement_setMatrixWorldNeedsUpdate","setValue_fromArray","setValue_fromArray_setNeedsUpdate","setValue_fromArray_setMatrixWorldNeedsUpdate","getValue_unbound","targetArray","sourceArray","nodeProperty","versioning","bindingType","_getValue_unbound","_setValue_unbound","AnimationObjectGroup","_indicesByUUID","_paths","_parsedPaths","_bindingsIndicesByPath","stats","total","inUse","bindingsPerObject","nObjects","nCachedObjects","indicesByUUID","parsedPaths","nBindings","knownObject","firstActiveIndex","lastCachedObject","bindingsForPath","lastCached","lastCachedIndex","firstActiveObject","firstActive","uncache","lastObject","indicesByPath","unsubscribe_","lastBindingsIndex","lastBindings","lastBindingsPath","AnimationAction","mixer","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","interpolant","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","_loopCount","_startTime","_effectiveTimeScale","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","_activateAction","_deactivateAction","stopFading","stopWarping","isRunning","_isActiveAction","isScheduled","startAt","setEffectiveWeight","getEffectiveWeight","fadeIn","_scheduleFading","fadeOut","crossFadeFrom","fadeOutAction","warp","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","crossFadeTo","fadeInAction","weightInterpolant","_takeBackControlInterpolant","setEffectiveTimeScale","getEffectiveTimeScale","setDuration","syncWith","halt","startTimeScale","endTimeScale","now","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","getRoot","_root","_update","deltaTime","timeDirection","_updateWeight","timeRunning","_updateTimeScale","clipTime","_updateTime","propertyMixers","interpolantValue","loopCount","_setEndings","handle_stop","pingPong","loopDelta","pending","atStart","atEnd","weightNow","weightThen","AnimationMixer","_initMemoryManager","_accuIndex","_bindAction","prototypeAction","rootUuid","bindingsByRoot","_bindingsByRootAndName","bindingsByName","_addInactiveBinding","clipUuid","actionsForClip","_actionsByClip","knownActions","_addInactiveAction","_lendBinding","_lendAction","_takeBackBinding","_takeBackAction","_actions","_nActiveActions","_nActiveBindings","_controlInterpolants","_nActiveControlInterpolants","actions","controlInterpolants","actionsByClip","actionByRoot","_removeInactiveAction","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","_removeInactiveBindingsForAction","_removeInactiveBinding","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","remove_empty_map","_","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","clipAction","optionalRoot","clipObject","existingAction","newAction","stopAllAction","nActions","uncacheClip","actionsToRemove","uncacheRoot","uncacheAction","Uniform","InstancedBufferGeometry","InterleavedBufferAttribute","interleavedBuffer","InterleavedBuffer","isInterleavedBuffer","InstancedInterleavedBuffer","InstancedBufferAttribute","Raycaster","PointCloud","ascSort","intersectObject","setFromCamera","coords","intersectObjects","Clock","autoStart","oldTime","elapsedTime","running","performance","Date","getElapsedTime","getDelta","newTime","Spherical","other","makeSafe","vec3","Cylindrical","Box2","ImmediateRenderObject","VertexNormalsHelper","nNormals","objGeometry","objPos","objNorm","SpotLightHelper","cone","coneLength","coneWidth","getBoneList","boneList","SkeletonHelper","boneMatrix","matrixWorldInv","PointLightHelper","sphereSize","RectAreaLightHelper","HemisphereLightHelper","GridHelper","PolarGridHelper","radials","circles","FaceNormalsHelper","DirectionalLightHelper","lightPlane","targetLine","CameraHelper","pointMap","colorFrustum","colorCone","colorUp","colorTarget","colorCross","addLine","addPoint","setPoint","BoxHelper","Box3Helper","PlaneHelper","positions2","lineGeometry","coneGeometry","ArrowHelper","headLength","headWidth","setDirection","setColor","AxesHelper","Face4","LineStrip","LinePieces","MeshFaceMaterial","MultiMaterial","Particle","ParticleSystem","PointCloudMaterial","ParticleBasicMaterial","ParticleSystemMaterial","Vertex","DynamicBufferAttribute","Int8Attribute","Uint8Attribute","Uint8ClampedAttribute","Int16Attribute","Uint16Attribute","Int32Attribute","Uint32Attribute","Float32Attribute","Float64Attribute","construct","createPointsGeometry","createGeometry","createSpacedPointsGeometry","fromPoints","ClosedSplineCurve3","SplineCurve3","Spline","initFromArray","getControlPointsArray","reparametrizeByArcLength","AxisHelper","BoundingBoxHelper","EdgesHelper","setColors","WireframeHelper","XHRLoader","BinaryTextureLoader","isIntersectionBox","isIntersectionSphere","random16","nearestPowerOfTwo","nextPowerOfTwo","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBuffer","applyToVector3Array","extractPosition","getPosition","multiplyToArray","multiplyVector4","rotateAxis","crossVector","rotateByAxis","makeFrustum","isIntersectionLine","isIntersectionPlane","barycoordFromPoint","midpoint","extractAllPoints","extrude","makeGeometry","fromAttribute","distanceToManhattan","lengthManhattan","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","getColumnFromMatrix","applyProjection","computeTangents","getChildByName","renderDepth","getWorldRotation","eulerOrder","useQuaternion","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","copyIndicesArray","addIndex","addDrawCall","clearDrawCalls","computeOffsets","getArrays","addShapeList","wrapAround","wrapRGB","metal","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","addPrePlugin","addPostPlugin","updateShadowMap","setFaceCulling","shadowMapCullFace","renderReverseSided","renderSingleSided","standing","audioLoader","getData","updateCubeMap","GeometryUtils","geometry1","ImageUtils","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","Projector","projectVector","unprojectVector","pickingRay","CanvasRenderer","SceneUtils","createMultiMaterialObject","detach","attach","LensFlare","CubeGeometry","___$insertStyle","css","createElement","setAttribute","innerHTML","head","appendChild","colorToString","forceCSSHex","colorFormat","__state","conversionName","toFixed","str","ARR_EACH","ARR_SLICE","Common","BREAK","extend","each","isObject","isUndefined","defaults","toCall","args","itr","_key","defer","fnc","debounce","callImmediately","timeout","delayed","callNow","clearTimeout","isNull","_isNaN","isNumber","isString","isBoolean","isFunction","INTERPRETATIONS","litmus","conversions","THREE_CHAR_HEX","read","original","space","write","SIX_CHAR_HEX","CSS_RGB","CSS_RGBA","HEX","RGB_ARRAY","RGBA_ARRAY","RGBA_OBJ","RGB_OBJ","HSVA_OBJ","HSV_OBJ","toReturn","interpret","family","conversion","tmpComponent","ColorMath","hsv_to_rgb","hi","rgb_to_hsv","NaN","rgb_to_hex","hex_with_component","component_from_hex","componentIndex","_typeof","Symbol","iterator","classCallCheck","Constructor","createClass","props","descriptor","configurable","writable","protoProps","staticProps","property","receiver","desc","getOwnPropertyDescriptor","getPrototypeOf","getter","inherits","subClass","superClass","setPrototypeOf","__proto__","possibleConstructorReturn","self","ReferenceError","toHexString","toOriginal","defineRGBComponent","component","componentHexIndex","get$$1","recalculateRGB","set$$1","defineHSVComponent","recalculateHSV","COMPONENTS","Controller","initialValue","__onChange","__onFinishChange","onFinishChange","updateDisplay","isModified","EVENT_MAP","HTMLEvents","MouseEvents","KeyboardEvents","EVENT_MAP_INV","CSS_VALUE_PIXELS","cssValueToPixels","val","dom","makeSelectable","elem","selectable","onselectstart","MozUserSelect","KhtmlUserSelect","unselectable","makeFullscreen","hor","vertical","horizontal","fakeEvent","eventType","aux","className","evt","createEvent","clientX","clientY","initMouseEvent","bubbles","cancelable","clickCount","initKeyboardEvent","initKeyEvent","ctrlKey","altKey","shiftKey","metaKey","keyCode","charCode","initEvent","newBool","bool","attachEvent","detachEvent","addClass","classes","removeClass","hasClass","getWidth","getComputedStyle","getHeight","getOffset","el","offsetParent","offsetLeft","offsetTop","isActive","activeElement","href","BooleanController","_Controller","_this2","__prev","__checkbox","checked","OptionController","opts","__select","opt","desiredValue","selectedIndex","StringController","__input","onBlur","blur","numDecimals","NumberController","_params","__min","__max","__step","__impliedStep","LN10","__precision","_v","minValue","maxValue","stepValue","roundToDecimal","decimals","tenTo","NumberControllerBox","_NumberController","__truncationSuspended","prevY","attempted","onFinish","onMouseDrag","onMouseUp","onMouseDown","o2","NumberControllerSlider","__background","__foreground","onTouchStart","bgRect","getBoundingClientRect","touches","onTouchMove","onTouchEnd","pct","FunctionController","__button","fire","ColorController","__color","__temp","__selector","__saturation_field","__field_knob","__field_knob_border","__hue_knob","__hue_field","__input_textShadow","valueField","padding","backgroundColor","boxShadow","border","borderRadius","zIndex","borderRight","marginRight","display","cursor","linearGradient","hueGradient","textAlign","fontWeight","textShadow","fieldDown","fieldDownH","setSV","fieldUpSV","setH","fieldUpH","fieldRect","_ref","_ref2","mismatch","flip","_flip","marginLeft","marginTop","vendors","vendor","cssText","indoc","doc","link","rel","getElementsByTagName","inject","cssContent","injected","saveDialogContents","ControllerFactory","requestAnimationFrame$1","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","CenteredDiv","backgroundElement","WebkitTransition","transition","body","hide","show","webkitTransform","layout","innerWidth","innerHeight","styleSheet","CSS_NAMESPACE","HIDE_KEY_CODE","CLOSE_BUTTON_HEIGHT","DEFAULT_DEFAULT_PRESET_NAME","SUPPORTS_LOCAL_STORAGE","localStorage","SAVE_DIALOGUE","autoPlaceVirgin","autoPlaceContainer","hideableGuis","GUI","__ul","__folders","__controllers","__rememberedObjects","__rememberedObjectIndecesToControllers","__listening","closeOnTop","autoPlace","DEFAULT_WIDTH","resizable","hideable","preset","scrollable","useLocalStorage","getItem","getLocalStorageHash","saveToLocalStorage","setPresetSelectIndex","revert","setWidth","titleRowName","CLASS_CLOSED","onResize","__closeButton","TEXT_OPEN","TEXT_CLOSED","setItem","CLASS_MAIN","savedGui","CLASS_CLOSE_BUTTON","CLASS_CLOSE_TOP","insertBefore","childNodes","CLASS_CLOSE_BOTTOM","_titleRowName","createTextNode","titleRow","addRow","onClickTitle","CLASS_AUTO_PLACE_CONTAINER","CLASS_AUTO_PLACE","__resizeHandler","onResizeDebounced","addResizeHandle","getSaveObject","saveToLocalStorageIfPossible","resetWidth","toggleHide","gui","CLASS_CONTROLLER_ROW","CLASS_TOO_TALL","CLASS_DRAG","_keydownHandler","which","_add","factoryArgs","addColor","controller","removeChild","__li","subfolder","removeFolder","removeListeners","addFolder","newGuiParams","folders","li","folder","parentElement","close","__save_row","__resize_handle","offsetHeight","remember","addSaveMenu","remembered","getCurrentPreset","save","markPresetModified","saveAs","presetName","addPresetOption","recallSavedValue","listen","updateDisplays","newDom","liBefore","modified","__preset_select","augmentController","__gui","_options","nextSibling","nextElementSibling","before","_nextSibling","_name","firstElementChild","method","pc","pb","returned","oldName","wasListening","newController","stopPropagation","borderLeftColor","matchedIndex","controllerMap","presetMap","location","setSelected","showHideExplain","explain","div","firstChild","gears","button","button2","button3","select","getElementById","localStorageCheckBox","saveLocally","newConstructorTextArea","prompt","pmouseX","drag","dragStop","dragStart","useInitialValues","savedValues","controllerArray","math","controllers","dom$1","GUI$1","THREE","treeGeo","require","colours","blue01","blue02","blue03","green01","green02","green03","green04","brown01","brown02","brown03","red01","orange01","orange02","white01","white02","grey01","grey02","shadowConfig","fieldOfView","aspectRatio","nearPlane","farPlane","HEIGHT","WIDTH","controls","world","sky","ground","clouds","trees","rocks","mountain","camtree","createScene","devicePixelRation","hemisphereLight","backLight","ambientLight","pointLight","sunLight","createLights","speed","degreesStart","degreesEnd","radiansStart","radiansEnd","previousAngle","getAngle","previousPoint","drawPath","lineMaterial","move","defineGround","geo","grassDiffuse","grassDiffTexture","grassBump","grassBmpTexture","grassAO","grassAOTexture","defineCloud","numOfBlocs","blocs","defineCloudRing","numOfClouds","stepAngle","cloud","definePineTree","pineTrunkGeo","pineTrunkMat","pineTrunk","pineTopGeo","pineTopMat","pineTreeTop","defineRoundTree","roundTrunkGeo","roundTrunkMat","roundTrunk","roundTopGeo","roundTopMat","roundTreeTop","defineAppleTreeTop","appleTreeTopGeo","appleTreeTopMat","defineAppleTree","appleTreeTrunkGeo","appleTreeTrunkMat","appleTreeTrunk","appleTreeTop","defineSpottyTreeTop","spottyTreeTopGeo","spottyTreeTopMat","defineSpottyTree","spottyTreeTrunkGeo","spottyTreeTrunkMat","spottyTreeTrunk","spottyTreeTop","defineRock","rockGeo","rockMat","getRandomInRange","fixed","defineWorld","pineTree","roundTree","appleTree","spottyTree","treesArray","lat","long","latRad","longRad","numOfRocks","defineSky","skydomeTexture","skyMaterial","textContent","skyBox","defineCloudGrp","defineMountain","slopes","ang","amp","createSlopes","verts","vprops","createWorld","createMountain","createSky","createClouds","handleWindowResize","addHelpers","OrbitControls","directionV3","originV3","arrowHelper","bboxHelper","cameraParObj","cameraHelper","dlightHelper","hlightHelper","gridHelper","shadowCameraHelper","pointLightHelper"],"mappings":"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AA,ACGN,AFqBE,MAAK1gI,UCxBSw5F,QDwBS77F,GCxBEgjI,MDwBzB,CCxBc,CDwBqB,CCxBD/8C,SAApB,CAAV;AACA,ACGN,UDHUg9C,OAAJ,EAAa;AACX37C,ACGR,AFqBG9kF,SAAMvB,ICxBIipE,EDwBV,GCxBK,ADwBU,CCxBCv9B,GAAX,ADwBL,ECxBqB61F,IAAhB;AACD,ACGP;ADFK,ACGL,AFqBG,KCrCC,EDqCG//H,QAAQJ,cAAcK,KAAd,CAAqB,CAArB,CAAZ;ACvBA,ACGH,GD9Ea;AA4EX6P,ACGF,AFqBG,QAAM,GCxBE,CDwBE5P,IAAI,CAAR,EAAWC,CCxBA2P,GDwBI9P,ICxBb,CAAiBkqC,CDwBErrC,ECxBnB,EAAsB,EDwB9B,EAAmCqB,IAAIC,CAAvC,EAA0CD,GAA1C,EAAiD;ACvBhD,ACGJ,QDHQgqC,IAAIp6B,OAAR,EAAiB,OAAOo6B,IAAIp6B,OAAJ,EAAP;AACjB,ACGJ,AFqBI9P,UAAOE,CCxBAo/H,ADwBP,EAAWrgI,IAAX,CAAiB,GCxBAA,CDwBjB,EAAuBc,CCxBhB,CAAemqC,GAAf,ADwBP,CCxBA;AACD,ACGH,AFsBI,GCxGS;AAgFX01F,ACGF,AFuBG,eC1BY,SAASA,WAAT,CAAqB11F,GAArB,EAA0B;AACrC,ACGJ,AFwBE,WC3BSA,QAAQ3sC,SAAf;AACD,ACGH,GDrFa;AAmFXmjI,ACGF,AFpD0C,CAA1C,SCiDU,SAASA,MAAT,CAAgBx2F,GAAhB,EAAqB;AAC3B,ACGJ,WDHWA,QAAQ,IAAf;AACD,ACGH,AFwBA,GChHa,CDgHT9pC,WAAW,IAAf;AC1BEkzC,ACGF,AFwBA,IAAIjzC,KC3BK,GD2BG,EAAEC,KC3BKqgI,CD2BC,CAAR,EAAWpgI,EC3Bd,EAAkB,ID2BI,CAAnB,EAAsBC,OAAO,CAA7B,EAAZ;AC1BI,ACGJ,AFwBA,IAAIC,SC3BS6yC,KAAT,CAAev/B,AD2BA,CAAnB,CC3BI,EAAmB;AACjB,ACGN,AFwBA,IAAIrT,SC3BSigI,MD2BM,CC3BCl5D,AD2BpB,KC3Ba,CAAa,IAAb,EAAmB7oE,SAAnB,CAAP;AACD,ACGL,AFwBA,IAAI+B,gBAAgB,CAApB;AC1BI2yC,ACGJ,AFwBA,IAAI1yC,MC3BMvC,QAAN,GAAiB,GD2BG,CAAxB,QC3BiC;AAC3B,ACGN,AFwBA,IAAIwC,SC3BS8/H,OAAOtiI,OD2BO,CC3Bd,AD2Bb,EC3BM;AACD,ACGL,AFwBA,IAAIyC,CC7BA,uBD6BwB,CAA5B;AC1BI,ACGJ,AFwBA,IAAIC,OC3BOuyC,KAAP,KD2BiB,CAArB;AC1BG,ACGH,AFwBA,GCnCS,CAQL,AD2BAtyC,UC3BUkpC,GAAV,EAAe,AD2BA,CAAnB;AC1BI,ACGJ,AFwBA,IAAIjpC,OC3BOqyC,MAAMpJ,GAAN,CAAP,ED2BmB,CAAvB;AC1BG,ACGH,AFwBA,GCrCS,CAtFI,AD2HThpC,YAAY,CAAhB;AC1BEg2B,ACGF,AFwBA,IAAI/1B,OC3BO81B,ID2BI,CAAf,CC3BiBC,OAAN,IAAiB,UAAUgT,GAAV,EAAe;AACvC,ACGJ,AFwBA,IAAI9oC,OC3BO8oC,IAAIv9B,ED2BE,CAAjB,QC3BW,KAAoBsqB,KAA3B;AACD,ACGH,AFwBA,GC9Ha,CD8HT51B,cAAc,CAAlB;AC1BEs+H,ACGF,AFwBA,IAAIr+H,QC3BQ,QD2BQ,CC3BCq+H,AD2BrB,QC3BY,CAAkBz1F,GAAlB,EAAuB;AAC/B,ACGJ,AFwBA,IAAI3oC,OC3BO2oC,ID2BI,CAAf,GC3BmBhsC,OAAOgsC,GAAP,CAAf;AACD,ACGH,AFwBA,GCjIa,CDiIT1oC,aAAa,CAAjB;AC1BEo/H,ACGF,AFwBA,IAAIn/H,QC3BQ,OD2BO,CAAnB,CC3BqBm/H,QAAT,CAAkB12F,GAAlB,EAAuB;AAC/B,ACGJ,AFwBA,IAAIxoC,OC3BOwoC,MD2BM,CAAjB,CC3BmBA,MAAM,CAArB;AACD,ACGH,AFwBA,GCpIa,CDoITvoC,iBAAiB,CAArB;AC1BEk/H,ACGF,AFwBA,IAAIj/H,QC3BQ,SAASi/H,ED2BE,CAAvB,KC3BY,CAAkB32F,GAAlB,EAAuB;AAC/B,ACGJ,AFwBA,IAAIroC,OC3BOqoC,QAAQA,MAAM,CD2BC,CC3BtB,AD2BJ;AC1BG,ACGH,AFwBA,GCvIa,CDuITpoC,mBAAmB,CAAvB;AC1BEg/H,ACGF,AFwBA,IAAI/+H,SC3BS,QD2BQ,CC3BC++H,AD2BtB,SC3Ba,CAAmB52F,GAAnB,EAAwB;AACjC,ACGJ,AFwBA,IAAIloC,OC3BOkoC,OD2BO,CC3BC,ED2BnB,GC3BW,IAAiBA,QAAQ,IAAhC;AACD,ACGH,AFwBA,GC1Ia,CD0ITjoC,mBAAmB,GAAvB;AC1BE8+H,ACGF,AFwBA,IAAI7+H,UC3BU,SAAS6+H,OD2BO,GC3BhB,AD2Bd,CC3BkC72F,GAApB,EAAyB;AACnC,ACGJ,AFwBA,IAAI/nC,OC3BOjE,OAAOD,AD2BA,GAAlB,MC3BW,CAAiBI,QAAjB,CAA0BY,IAA1B,CAA+BirC,GAA/B,MAAwC,mBAA/C;AACD,ACGH,AFwBA,IAAI9nC,cAAc,GAAlB;AC7Ia,ACsHb,AFwBA,CC9IA,GD8IIC,aAAa,GAAjB;AEvBA,AFwBA,IAAIC,YAAY,GAAhB;AC1BA,ACGA,AFwBA,IC3BI0+H,AD2BAz+H,iBAAiB,CC3BC,CACtB,CD0BA;ACzBE0+H,ACEF,AFwBA,IAAIz+H,MC1BM+8H,OAAOsB,QADjB,ID2B6B,GAA7B;ACzBEK,ACEF,AFwBA,IAAIz+H,WC1BW,MD0BM,GAArB;ACzBI0+H,ACEJ,AFwBA,IAAIz+H,gBC1BgB,SD0BS,GAA7B;ACzBM0+H,ACEN,AFwBA,IAAIz+H,QC1BQ,SAASy+H,AD0BA,GAArB,CC1BY,CAAcC,QAAd,EAAwB;AAC5B,ACER,AFwBA,IAAIz+H,QC1BQmgC,OAAOs+F,SAAS/iI,CD0BC,GAA7B,CC1BmB,CAAe,oCAAf,CAAX;AACA,ACER,AFwBA,IAAIuE,QC1BQkgC,SAAS,AD0BA,GAArB,CC1BQ,EAAmB;AACjB,ACEV,AFwBA,IAAIjgC,aC1Ba,KAAP,OD0BmB,GAA7B;ACzBS,ACET,AFwBA,IAAIC,yBAAyB,GAA7B;ACzBQ,ACER,AFwBA,IAAIC,WC1BW,ED0BE,CAAjB;ACzBUs+H,ACEV,AFwBA,IAAIr+H,aC1Ba,CD0BC,CAAlB,GC3Be;AAELu0B,ACEV,AFwBA,IAAIt0B,WC1BWg1B,CD0BC,CAAhB,OC1BwB,OAAO6K,KAAK,CAAL,EAAQ1kC,QAAR,EAAP,GAA4B0kC,KAAK,CAAL,EAAQ1kC,QAAR,EAA5B,GAAiD0kC,KAAK,CAAL,EAAQ1kC,QAAR,EAAjD,GAAsE0kC,KAAK,CAAL,EAAQ1kC,QAAR,EAAtE,GAA2F0kC,KAAK,CAAL,EAAQ1kC,QAAR,EAA3F,GAAgH0kC,KAAK,CAAL,EAAQ1kC,QAAR,EAAzH,EAA6I,CAA7I;AAFA,ACKf,AFwBA,IAAI8E,KC7BI,YD6Ba,CAArB;ACzBO,ACEP,AFwBA,IAAIC,GCpCgB,UDoCH,CAAjB;ACzBMm+H,ACEN,AFwBA,IAAIl+H,SC1BSy7H,WD0BW,CAAxB;ACrCoB,ACcpB,AFwBA,IAAIx7H,CCvCW,cDuCI,CAAnB;ACzBIk+H,ACEJ,AFwBA,IAAIj+H,cC1Bc,ED0BE,CAApB;ACzBM69H,ACEN,AFwBA,IAAI59H,QC1BQ,SAAS49H,GD0BG,CC1BZ,AD0BZ,CC1B0BC,QAAd,EAAwB;AAC5B,ACER,AFwBA,IAAI59H,QC1BQs/B,OAAOs+F,AD0BA,CAAnB,QC1B4B/iI,KAAT,CAAe,mBAAf,CAAX;AACA,ACER,AFwBA,IAAIoF,QC1BQq/B,OD0BO,CAAnB,CC1BqB,IAAb,EAAmB;AACjB,ACEV,AFwBA,IAAIp/B,aC1Ba,GD0BG,CAApB,CC1BU;AACD,ACET,AFwBA,IAAIC,oBAAoB,CAAxB;ACzBQ,ACER,AFwBA,IAAIC,WC1BW,WD0BW,CAA1B;ACzBUy9H,ACEV,AFwBA,IAAIx9H,aC1Ba,KADF,MD2Ba,CAA5B;ACzBU0zB,ACEV,AFwBA,IAAIzzB,WC1BWm0B,SAAS,AD0BA,CAAxB,MC1B+B6K,KAAK,CAAL,EAAQ1kC,QAAR,EAAhB,EAAoC,CAApC;AAFA,ACKf,AFwBA,IAAI2F,KC7BI,OD6BQ,GAAhB;ACzBO,ACEP,AFwBA,IAAIC,GCpCc,qBDoCU,GAA5B;ACzBMs9H,ACEN,AFwBA,IAAIr9H,SC1BS46H,eD0Be,GAA5B;ACrCkB,ACclB,AFwBA,IAAI36H,CCpDW,kCDoDwB,GAAvC;ACzBIs9H,ACEJ,AFwBA,IAAIr9H,SC1BS,0BD0B0B,GAAvC;ACzBMg9H,ACEN,AFwBA,IAAI/8H,QC1BQ,SAAS+8H,IAAT,CAAcC,OD0BO,CC1BrB,EAAwB,AD0BpC;ACzBQ,ACER,AFwBA,IAAI/8H,QC1BQy+B,OAAOs+F,SAAS/iI,ED0BE,GC1BX,AD0BnB,CC1BkC,0CAAf,CAAX;AACA,ACER,AFwBA,IAAIiG,QC1BQw+B,SAAS,IAAb,EAAmB,GD0BG,GAA9B;ACzBU,ACEV,AFwBA,IAAIv+B,aC1Ba,ID0BI,CC1BX,GD0BV;ACzBS,ACET,AFwBA,IAAIC,sBAAsB,IAA1B;ACzBQ,ACER,AFwBA,IAAIC,WC1BW,cD0Bc,IAA7B;ACzBU48H,ACEV,AFwBA,IAAI38H,aC1Ba,GD0BG,EC3BL,ED2Bf;ACzBUiZ,ACEV,AFwBA,IAAIhZ,SC1BSkzB,WAAWiL,KAAK,CAAL,CAAX,CAFE,CD4BkB,IAAjC;ACzBUhhB,ACEV,AFwBA,IAAIld,SC1BSizB,WAAWiL,KAAK,CAAL,CAAX,CAHE,AD6BiB,IAAhC;ACzBUz1B,ACEV,AFwBA,IAAIxI,SC1BSgzB,MD0BM,IAAnB,CC1BwBiL,KAAK,CAAL,CAAX;AAJE,ACOf,AFwBA,IAAIh+B,KC/BI,uBD+BwB,IAAhC;ACzBO,ACEP,AFwBA,IAAIC,GCtCS,wBDsCkB,IAA/B;ACzBMu8H,ACEN,AFwBA,IAAIt8H,SC1BS65H,UD0BU,IAAvB;ACvCa,ACgBb,AFwBA,IAAI55H,CCnEW,UDmEA,IAAf;ACzBIw8H,ACEJ,AFwBA,IAAIv8H,UC1BU,ED0BE,IAAhB;ACzBMi8H,ACEN,AFwBA,IAAIh8H,QC1BQ,SAASg8H,GD0BG,CC1BZ,CAAcC,ED0B1B,MC1BY,EAAwB;AAC5B,ACER,AFwBA,IAAIh8H,QC1BQ09B,ED0BE,IAAd,CC1BmBs+F,SAAS/iI,KAAT,CAAe,sDAAf,CAAX;AACA,ACER,AFwBA,IAAIgH,QC1BQy9B,SAAS,CD0BC,GC1Bd,CD0BR,CC1B2B;AACjB,ACEV,AFwBA,IAAIx9B,YAAY,CC1BC,GD0BjB,EC1BU;AACD,ACET,AFwBA,IAAIC,gBAAgB,IAApB;ACzBQ,ACER,AFwBA,IAAIC,WC1BW,aD0Ba,IAA5B;ACzBU67H,ACEV,AFwBA,IAAI57H,aC1Ba,KADF,MD2Ba,IAA5B;ACzBUkY,ACEV,AFwBA,IAAIjY,SC1BSmyB,WAAWiL,GD0BG,EC1BE,CAAL,CAAX,AD0Bb,CC5Be;AAGLhhB,ACEV,AFwBA,IAAInc,SC1BSkyB,WAAWiL,CD0BC,IC1BI,AD0B7B,CC1BwB,CAAX,CAHE;AAILz1B,ACEV,AFwBA,IAAIzH,SC1BSiyB,KD0BK,IAAlB,EC1BwBiL,KAAK,CAAL,CAAX,CAJE;AAKL11B,ACEV,AFwBA,IAAIvH,SC1BSgyB,GD0BG,IAAhB,IC1BwBiL,KAAK,CAAL,CAAX;AALE,ACQf,AFwBA,IAAIh9B,KChCI,QDgCS,IAAjB;ACzBO,ACEP,AFwBA,IAAIC,GCvCU,eDuCQ,IAAtB;ACzBMu7H,ACEN,AFwBA,IAAIt7H,SC1BS64H,cD0Bc,IAA3B;ACxCc,ACiBd,AFwBA,IAAI54H,aAAaH,UAAjB;ACnFe,AC4Df,AFwBA,IAAII,cAAc,IAAlB;ACtFA,AC+DA,AFwBA,CCxFsB,EA+DtB,CDyBIC,qBAAqB,IAAzB;ACxBE66H,ACCF,AFwBA,IAAI56H,MCzBMk5H,OAAOqB,QADjB,ED0B2B,KAA3B;ACxBEM,ACCF,AFwBA,IAAI56H,WCzBW,aDyBa,KAA5B;ACxBIq7H,ACCJ,AFwBA,IAAIp7H,KCzBK,mBDyBmB,KAA5B;ACxBM66H,ACCN,AFwBA,IAAI56H,QCzBQ,SAAS46H,IAAT,CAAcC,EDyBE,KAA5B,CCzBY,EAAwB;AAC5B,ACCR,AFwBA,IAAI56H,WCzBW,eDyBe,KAA9B;ACxBU66H,ACCV,AFwBA,IAAI56H,aCzBa,KADF,QD0Be,KAA9B;ACxBU8wB,ACCV,AFwBA,IAAI7wB,WCzBW06H,QAFA,QD2BgB,KAA/B;ACxBUnC,ACCV,AFwBA,IAAIt4H,sBCzBsB,KDyBK,KAA/B;AC5Be,ACKf,AFwBA,IAAIC,KC7BI,aD6Bc,KAAtB;ACxBO,ACCP,AFwBA,IAAIC,GChCK,oBDgCkB,KAA3B;ACxBMy6H,ACCN,AFwBA,IAAIx6H,SCzBS,SAASw6H,KAAT,ADyBc,CCzBCvpG,IDyB5B,CCzBa,EAAsB;AAC3B,ACCR,AFwBA,IAAIhxB,WCzBWgxB,MAAMR,GAAb,GDyBmB,KAA3B;ACxBO,ACCP,AFwBA,IAAIvwB,uBAAuB,KAA3B;ACnCS,ACYT,AFwBA,IAAIC,uBAAuB,KAA3B;ACrCe,ACcf,AFwBA,IAAIC,uBAAuB,KAA3B;ACxCA,ACiBA,AFwBA,CCxGsB,EAgFtB,CDwBIC,uBAAuB,KAA3B;ACvBE65H,ACAF,AFwBA,IAAI55H,MCxBMk4H,OAAOroG,OADjB,GDyB2B,KAA3B;ACvBEgqG,ACAF,AFwBA,IAAI55H,WCxBW,aDwBa,KAA5B;ACvBIs6H,ACAJ,AFwBA,IAAIr6H,WCxBW,aDwBa,KAA5B;ACvBM65H,ACAN,AFwBA,IAAI55H,QCxBQ,SAAS45H,IAAT,CAAcC,EDwBE,KAA5B,CCxBY,EAAwB;AAC5B,ACAR,AFwBA,IAAI55H,QCxBQ45H,SAASxiI,MAAT,EDwBiB,GCxBG,CAAxB,CDwBR,CCxBmC;AACzB,ACAV,AFwBA,IAAI6I,aCxBa,KAAP,ODwBmB,KAA7B;ACvBS,ACAT,AFwBA,IAAIC,yBAAyB,KAA7B;ACvBQ,ACAR,AFwBA,IAAIC,WCxBW,ADwBA,IAAf;ACvBU05H,ACAV,AFwBA,IAAIz5H,aCxBa,ADwBA,IAAjB,CCzBe;AAEL+V,ACAV,AFwBA,IAAI9V,SCxBSu5H,MDwBM,GCxBG,CAAT,ADwBb,CC1Be;AAGLt/G,ACAV,AFwBA,IAAIha,SCxBSs5H,SAAS,CAAT,CAHE,ED2BW,IAA1B;ACvBU/zH,ACAV,AFwBA,IAAItF,SCxBSq5H,SAAS,CAAT,CDwBW,IAAxB;AC5Be,ACKf,AFwBA,IAAIp5H,KC7BI,eD6BgB,IAAxB;ACvBO,ACAP,AFwBA,IAAIC,GCnCW,mBDmCW,IAA1B;ACvBMq5H,ACAN,AFwBA,IAAIp5H,SCxBS,SAASo5H,ADwBA,IAAtB,CCxBa,CAAevpG,KAAf,EAAsB;AAC3B,ACAR,AFwBA,IAAI5vB,WCxBW,CAAC4vB,MAAMpa,CAAP,ADwBQ,ECxBEoa,EDwBzB,ICxB+BjW,CAAhB,EAAmBiW,MAAM1qB,CAAzB,CAAP;AACD,ACAP,AFwBA,IAAIjF,oBAAoB,CAAxB;ACtCe,ACef,AFwBA,IAAIC,CCxCW,uBDwCa,CAA5B;ACvBIu5H,ACAJ,AFwBA,IAAIt5H,YCxBY,UDwBU,CAA1B;ACvBM64H,ACAN,AFwBA,IAAI54H,QCxBQ,SAAS44H,ADwBA,ICxBT,ADwBZ,CCxB0BC,QAAd,EAAwB;AAC5B,ACAR,AFwBA,IAAI54H,QCxBQ44H,ODwBO,ECxBExiI,EDwBrB,ICxBY,KAAoB,CAAxB,EAA2B,OAAO,KAAP;AAC3B,ACAR,AFwBA,IAAI6J,WCxBW,KDwBK,IAApB;ACvBU44H,ACAV,AFwBA,IAAI34H,aCxBa,EDwBE,GCzBJ,CDyBf;ACvBUiV,ACAV,AFwBA,IAAIhV,SCxBSy4H,QDwBQ,CCxBC,CAAT,CAFE,CD0Bf;ACvBUt/G,ACAV,AFwBA,IAAIlZ,SCxBSw4H,ODwBO,ECxBE,CAAT,CAHE,AD2Bf;ACvBU/zH,ACAV,AFwBA,IAAIxE,SCxBSu4H,QDwBQ,CCxBC,CAAT,CAJE,CD4Bf;ACvBUh0H,ACAV,AFwBA,IAAItE,SCxBSs4H,MDwBM,GCxBG,CAAT,ADwBb;AC7Be,ACMf,AFwBA,IAAIr4H,KC9BI,eD8BgB,IAAxB;ACvBO,ACAP,AFwBA,IAAIC,GClCY,gBDkCO,IAAvB;ACvBMs4H,ACAN,aDAa,SAASA,KAAT,CAAevpG,KAAf,EAAsB;AAC3B,ACAR,AFwBA,eCxBe,CAACA,MAAMpa,CAAP,EAAUoa,MAAMjW,CAAhB,EAAmBiW,MAAM1qB,CAAzB,EAA4B0qB,MAAM3qB,CAAlC,CAAP;AACD,ACAP;ADbgB,ACchB;AD/Be,ACgCf;ADlCA,ACmCA,CDnHsB,EAoHtB;AACE4zH,ACDF,AFwBA,IAAI/3H,MCvBMq2H,EDuBE,KCvBKI,QADjB;AAEEuB,ACDF,eDCe;AACXY,ACDJ,AFwBC34H,UAAS3L,ICvBI,CDuBC4L,EAAL,GAAU,GAFR;ACpBNg4H,ACDN,AFwBC/3H,UAAS,ECvBE,IDuBI7L,KCvBK4jI,ADuBAh4H,EAHT,ECpBA,CAAci4H,QAAd,EAAwB;AAC5B,ACDR,YDCY9B,OAAOqB,QAAP,CAAgBS,SAASzjH,CAAzB,KAA+B2hH,OAAOqB,QAAP,CAAgBS,SAASt/G,CAAzB,CAA/B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ECrDA,GDqD7B;ACpDI+2H,AC/BN,WD+BWnnI,gBAAL,CAAsBY,KAAtB,EAA6B8kF,IAA7B,EAAmCyjD,IAAnC;AACD,AC/BL,AFoFE,KCvDE,IDuDK,ECrDE,EDqDT,ECrDahC,KAAKiC,WAAT,EAAsB;AAC3BjC,AC/BN,AFqFE,EArXgC,SC+TvBiC,WAAL,CAAiB,OAAOxoI,KAAxB,EAA+B8kF,IAA/B;AACD,AC/BL;ADgCI,AC/BJ,AFqFCr1E,WCtDU42H,GAAP,ADsDU,UAAW32H,EAAX,EAAeC,EAAf,EAAmBH,KAAnB,EAA2B;ACrDtC,AC/BH,GDjDU;AAiFRoyG,AC/BF,AFqFE,SAAO,CCtDC,IDsDIl0G,KCtDKk0G,KDsDV,CCtDC,ADsDgBjyG,CCtDA42H,CDsDjB,EAAqB72H,CCtDpB,CDsDD,CCtDuB1P,CDsDG6N,ICtDzB,EAA6Bi3E,IAA7B,EAAmCwjD,EDsDpC,CAA0C94H,ICtDzC,CDsDD,CCtD6C,CDsDKzC,GAAlD,CAAuD2C,EAAvD,CAAP;ACrDE,AC/BJ,AFsFE,EA3XgC,MCoU1B64H,OAAOD,WAAW,KAAtB;AACA,AC/BJ,QD+BQ/B,KAAK3mI,mBAAT,EAA8B;AAC5B2mI,AC/BN,AFsFC32H,SAAQ,ECvDEhQ,QDuDSkN,CAAX,EAAe,QCvDlB,CAAyB9M,KAAzB,EAAgC8kF,IAAhC,EAAsCyjD,IAAtC;AACD,AC/BL,KD6BI,MAEO,IAAIhC,KAAKkC,WAAT,EAAsB;AAC3BlC,AC/BN,AFsFE,SAAWz5H,ECvDF27H,ADuDIzqI,CAAF,KAAQ,KCvDf,ADuDoBA,CCvDH,ADuDZ,IAAwB8O,EAAElC,CCvDP5K,ADuDK,KCvD7B,ADuDqC,ECvDN8kF,GDuDWl6E,CCvD1C,ADuDJ;ACtDG,AC/BL,AFuFE,EAjYgC;AC0U9B,AC/BJ,WD+BWy7H,GAAP;AACD,AC/BH,AFuFCx2H,GCjJS,SDiJE,UAAW5P,KAAX,EAAkB6P,MAAlB,EAA2B;ACvDrC44H,AC/BF,YD+BY,SAASA,QAAT,CAAkBnC,IAAlB,EAAwBa,SAAxB,EAAmC;AAC3C,AC/BJ,AFuFE,MAAKt3H,ECxDCy2H,KAAKa,IDwDK5p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H,AE9lCE,EHwqCGx3H,AGxqCA,CHwqChB,aC1EK,CAAuB/O,IAAvB,CAA4B01E,KAA5B,EAAmCA,MAAMisC,QAAN,EAAnC;AACD,AD0EJjvG,AGxqCFkpI,MHwqCM,CAAJ,EGxqCM,EHwqCInnI,KAAKX,CAAL,AGzqCG,GHyqCMY,EAAnB;ACzEE,AD0EFhC,AGxqCDmpI,MHwqCK,EAAJ,CGxqCO,GHwqCIrnI,KAAKG,AG1qCH,KH0qCQb,CAArB;ACzEC,AD2ED,AGzqCDgoI,GHypCO,MAgBA,AGzqCC,IF8lCGzQ,AD2EC13H,IG5qCE,EFimCZ,AD2EgBI,GC3EE,ED2ER,KAAgB,KAArB,EAA6B;AC1EhC64H,AE9lCJmP,UAAS,QAJK;AFmmCX,AD2EF,AGzqCDC,OHyqCKxnI,GGzqCI,EHyqCCpG,IAAIgD,CAAb,CG9qCa;AFomCZ,AD0ED,AGxqCD6qI,OHwqCiBxnI,GGxqCR,EHwqCarG,CC1EXy+H,GD0Eeh5H,CAAzB,CG9qCa,MFomCZ,CAAqB9E,CAArB,EAAwB;AACtB,ADyEH,AGvqCFmtI,OHuqC8BxnI,GCzErBi6B,AE9lCA,EHuqC0BtgC,IAAI+C,CCzEvBs7H,ADyEd,CG9qCa,OFqmCS39H,EAAEu5H,OAArB;AACA5yD,ADwEH,AGtqCDymE,OHsqCyCxnI,GGtqChC,EF8lCCk1C,ADwEoCx7C,IAAIwF,CAAjD,CG9qCa,EFsmCV,CAAe6hE,MAAMisC,QAAN,KAAmBhzE,OAAO+mC,MAAMm2D,aAA/C;AACAa,AE9lCJ0P,UAAS,IF8lCGrtI,EAAEu5H,EEvmCA,KFumCV;AACD,ADwEF51H,AGtqCF2pI,MHsqCM,CAAJ,GGtqCO,CHsqCGjrI,IAAIrC,CAAd,EGhrCa;AFymCZ,ADwED2D,AGtqCD4pI,MHsqCK,CAAJ,CGtqCM,GHsqCI,CAAExoI,CCxEFg5H,ADwEV,GGjrCa,MFymCZ,GAAqB;AACnB3F,ADwEHz0H,AGtqCD6pI,MHsqCK,CAAJ,GCxEO75B,CDwEG7uG,AGtqCD,IHsqCK9E,CCxEX,ADwEH,CCxEcgjE,EE1mCD,IF0mCV,EAAmB,WAAnB,EAAgC86D,WAAhC;AACA1F,AE9lCJqV,UF8lCQ95B,CE9lCE,KF8lCN,CAAW3wC,EE3mCD,IF2mCV,EAAmB,SAAnB,EAA8B+6D,SAA9B;AACAF,ADwEHl6H,AGtqCD+pI,MHsqCK,CAAJ,GGtqCQ,CHsqCEjoI,KAAKV,CAAL,CGprCG,EHorCMa,EAAnB;ACvEE,ADwEFjC,AGtqCDgqI,MHsqCK,CAAJ,GGtqCQ,CHsqCEtuI,IAAIW,CAAd,EGrrCa;AF8mCZ,ADwED2D,AGtqCFiqI,MHsqCM,CAAJ,EGtqCM,EHsqCIloI,ECxEAs4H,GDwEKj5H,CAAL,AGtrCG,GHsrCMY,EAAnB,ECxEC,CAAqB3F,CAArB,EAAwB;AACtBo4H,AE9lCLyV,SAAQ,CF8lCC/5D,IAAJ,CAAS9Q,MAAT,EAAiB,WAAjB,EAA8B86D,WAA9B;AACA1F,ADwEHz0H,AGxrCa,CAAhB,KHwrCO,CAAJ,GCxEOmwE,CDwEGnuE,GCxEP,CAASq9D,CDwEGj+D,CAAL,GAASW,CCxEhB,CDwEH,CCxEoB,SAAjB,EAA4Bq4H,SAA5B;AACAJ,ADwEHh6H,MAAI,CAAJ,IAAUrE,GCxECU,CDwEGA,CCxEDu5H,ADwEb,OCxEG;AACD,ADwEF51H,AGtqCH,MHsqCO,EAAJ,IAAWiC,KAAKb,CAAL,GAASU,EAApB;ACvECi2H,ADyED,AGvqCH,IAAIoS,OF8lCOzR,OAAP,CE9lCe,EF8lCE3lH,SAAS+5G,aAAT,CAAuB,OAAvB,CAAjB;AACAiL,AE9lCHxO,WF8lCUmP,OAAP,CAAe3L,GE9lCG,KADH,IF+lCf,CAA4B,MAA5B,EAAoC,MAApC;AACA0H,ADyEF,AGvqCDlpG,QF8lCO4kD,IAAJ,CAAS4nD,ME9lCM,CF8lCCW,EEhmCD,KFgmCf,EAAyB,QAAzB,EAAmCrrH,QAAnC;AACAonH,ADyEFz0H,AGvqCDwrB,KHuqCK,CAAJ,ECzEM2kD,EDyEI,CAAV,CCzEE,CAAS4nD,KE9lCK,EF8lCEW,EEjmCD,KFimCf,EAAyB,MAAzB,EAAiCC,MAAjC;AACAlE,ADyEFz0H,AGvqCDkpH,KHuqCK,CAAJ,ECzEM/4C,EDyEI,CAAV,CCzEE,CAAS4nD,KE9lCK,EF8lCEW,AElmCD,OFkmCf,EAA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mC1D,CF8mCU,CE1mCjBuR,CF0mCwEvnE,MAAMi2D,CE9mCvE,CAAT,GF8mCmB,CAAf;AACA,AD+DJj5H,AGxqCDsO,KHwqCK,EAAJ,CGxqCMzG,GHwqCK,CAAX,CC/DW,GEzmCZ,CAAgBzb,CFymCX,AEzmCL,GAAoB,CAApB;AF0mCI,AEzmCJkiB,QAAOzG,QAAP,CAAgB7O,CAAhB,GAAoB,GAApB;AF0mCG,AD+DF,AGxqCDsV,QAAOzG,KFymCKuyH,GEzmCZ,CAAgB15H,CAAhB,GAAoB,CFymCjB,EEzmCH,CFymCwB;AACnB+zH,AD+DJz0H,AGxqCDsO,KHwqCK,EAAJ,CGxqCMlL,EFymCE4sG,CD+DG,CAAX,EGxqCD,CAAc,CFymCT,CAAW3wC,AEzmCDjzE,GAAG,CAAJ,EFymCT,AEzmCgB4M,EFymCG,CEzmCA,UFymCnB,EAAgCmhI,MEzmCvB,EAA8Bz5H,GFymCvC,AEzmC0C,GAAjC,EAAd;AF0mCK+zH,AD+DJz0H,AGxqCDsO,KHwqCK,EAAJ,CGxqCM4vD,EFymCE8xC,CD+DG,CAAX,IC/DI,CAAW3wC,KEzmChB,CFymCK,AEzmCiB,EFymCE,AEzmCxB,EA9ByB,CA8BE,MFymCtB,EAA8B+6D,SAA9B;AACA,AD+DJp6H,KAAI,EAAJ,GC/DQgjE,CD+DG,CAAX,IC/Dc6wD,gBAAV,EAA4B;AAC1B7wD,AD+DNhjE,AGxqCF,KHwqCM,EAAJ,IAAW,CAAX,EC/DY6zH,gBAAN,CAAuBvmI,IAAvB,CAA4B01E,KAA5B,EAAmCA,MAAMisC,QAAN,EAAnC;AACD,AEzmCP//D,YAAW,IAAI45F,MAAMhnE,aAAV,CAAwB;AF0mC9B,AD+DH,AGxqCA,SHwqCO,IAAP;AC9DE,ADgEF,AGzqCAlkE,EHg5BgC,OGh5BzB,IFymCI88H,AE3mCsB,YF2mC/B,CAAsBr+H,CAAtB,EAAyB;AACvB,AEzmCJ,UFymCQA,EAAEw+H,OAAF,CAAU3tI,MAAV,KAAqB,CAAzB,EAA4B;AAC1B,ADgEPkW,AGzqCCg/D,SHyqCO,IGzqCI,QHyqCQ;AC/Dd,AE9mC4B,EAAxB,CAAX;AF+mCMqyD,ADgEJ,AGzqCF,MHyqCMroI,IChEI+jF,ADgEA,IChEJ,ADgEQvvE,CChECy+D,MAAT,ADgEI,EChEa,ADgErB,WChEI,EAA8By7D,WAA9B;AACArG,ADgEJ,AGzqCFvlF,MHyqCMl2C,IChEIm3E,ADgEA,AGzqCDh7D,IFymCH,ADgEQvU,CChECy+D,EEzmCf,CAAiBorE,GFymCX,ADgEI,EChEa,ADgErB,AGzqCF,EAAwBD,MAAxB,EFymCM,EAA6BzP,UAA7B;AACAD,ADgEJ,AGzqCF,MHyqCMp6H,IAAI,IAAIE,IChEIvE,CAAZ,EDgEI,EAAR;AC/DG,AEzmCL6yC,UAASu2B,aAAT,CAAuBpG,OAAO+rE,iBAAP,IAA6B,CAApD,EA1C0B,CA0C8B;AF0mCpD,ADgEF,AGzqCFl8F,SHyqCS,CGzqCAsW,GFymCIs1E,KDgEK13H,CGzqClB,CAAmBizB,IFymCf,ADgEK,CChEgBh6B,ADgECgH,CChEtB,CEzmCJ,CFymC4B,ADgEnB,EAAsBxW,AGzqCF,IAA7B,EHyqCS,EAA8ByW,EAA9B,EAAmC;AC/DtC,AEzmCN4rC,UFymCUymF,AEzmCDnwE,SAAT,CFymCoBnpD,AEzmCD5O,EFymCGotI,EEzmCtB,GAA0BiO,EFymCN,CAAU,CAAV,EAAanT,AEzmCDrmI,OFymC1B,SEzmCN;AF0mCM,ADgEH,OAAI0Q,GChEG26H,EDgEE,KAAKr+H,EChEE0mE,MAAMw3D,ADgEtB,YChEgB,CAAmBI,qBAAnB,EAAb;AACA53D,AEzmCN,YFymCY7rB,QAAN,CAAervB,IAAI6tG,OAAJ,EAAagF,OAAOjyH,IAApB,EAA0BiyH,OAAOhyH,KAAjC,EAAwCq6D,MAAMg2D,KAA9C,EAAqDh2D,MAAMi2D,KAA3D,CAAf;AACD,ADgEFv4H,AGzqCH+6C,KHyqCK3/C,QGzqCOiX,EHyqCT,CAAc1P,GAAd,EAAmBxW,CGzqCDi7I,KHyqClB,SGzqCS,CAAwB,OAAxB,CAAZ;AF0mCI,AEzmCJrsF,WAAUyxE,EFymCG6N,SEzmCb,CFymCI,AEzmCkB7rF,GFymCI,MEzmCK0zB,UAA/B;AF0mCM6xD,ADgEH,AGzqCF,CAjDD,MH0tCQ/zH,EAAE3D,CChEAizG,MAA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IAAgCpmI,OAAO8lI,cAAP,CAAsB4I,kBAAtB,CAAjC,EAA4E3tI,IAA5E,CAAiF,IAAjF,EAAuFypB,MAAvF,EAA+Fk7G,QAA/F,CAAhC,CAAb;AACA,ADoEDj5H,AGjrCDsyI,KHirCG/nI,GCpEGy/D,GE7mCIt4C,KF6mCIqtG,CDoEb,AGjrCD,CHirCiBr3H,AGjrCA4N,CHirChB,EAAmBliB,CCpElB,ADoED,EGjrCD,CAAwBwc,GAAxB,GAA8B,GAA9B;AF8mCEmvH,AE7mCFuT,WF6mCSpQ,AE7mCCxwG,MAAV,CAAiBpc,CF6mCf,GAAkByE,EE7mCpB,CAAwBlK,MF6mCKikH,AE7mC7B,GAAiC,CAAE,GAAnC,MF6mCoB,CAAuB,KAAvB,CAAlB;AACAiL,ADoED/3H,AGjrCDsrI,MHirCK,CAAJ,ICpEQpQ,ADoEE9uI,AGjrCDs+B,EHirCGt+B,CAAZ,CAAe4T,EGjrChB,CHirCoB,AGjrCHsO,CF6mCf,ADoEc,CCpEE0+G,GDoEQh0H,CGjrC1B,CHirC4B5M,AGjrCJ0c,CHirCR,CAAe9I,ECpE7B,AE7mCF,CHirCmC,CAAJ,CCpEDiiF,AE7mCC,CAA/B,EHirCyCvhF,EAAEtU,CAAZ,GCpEQR,SAAT,GAAqB,MAArB,GAA8Bq2F,IAA1D;AACAwyC,ADoEDz0H,AGjrCDsrI,MHirCK,CAAJ,CCpEKn7D,GDoEK/jF,AGjrCDs+B,CF6mCR,CAASqtG,ADoEE/+H,CAAZ,CAAegH,EGjrChB,CHirCoB,AGjrCHsO,CHirCD,CCpEE4sH,GDoEQliI,CGjrC1B,CHirC4BA,AGjrCJ+P,CHirCR,CAAe/I,CCpE7B,AE7mCF,EF6mC4B,ADoEO,CAAJ,AGjrCD,CAAE,GHirCSU,CGjrCzC,CF6mCE,ADoEyC1H,CAAZ,CCpEM,UAAUqD,CAAV,EAAa;AAC9CA,ADoEH2D,AGjrCD,MHirCK,CAAJ,CCpEKumE,GDoEKn6E,EAAEsU,CAAZ,CAAeV,GAAI,CAAJ,GCpEZ,CDoEsBhH,EAAE0H,CAAZ,CAAeV,GAAI,EAAJ,IAAWU,EAAEA,CAAb;ACnE3BsiE,YAAMm4D,IAAN;AACA,ADoEH,UAAO,GCpEG,CDoEV,ICp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wmCGnV,ADqD8Bx1H,GAAI,EAAJ,AG7pC1C,CH6pCE,EG7pCkB,GFwmCZ,CAAgBwhE,MAAMu4D,UAAtB,EAAkC,MAAlC;AACD,ADoDL,AG5pCA,KAAI1jH,CH4pC8CxS,CCtD9C,KDsDoD7D,GAAI,CG5pC7Co6C,CH4pCyC,CAAxD,GG5pCoB8hC,eAAL,CAAqB,EAArB,CAAf;AFymCG,ADoDH,KCxDE,CDwDEp4E,MAAM9D,GAAI,CAAJ,CAAV;ACnDEizH,ADmDF,AG3pCA,MH2pCmBlvH,ECnDb4qE,IAAJ,ADmDuB3uE,CCnDdu2H,EDmDkB,CAAJ,CAAzB,GCnDkBwD,UAAhB,EAA4B,YAA5B,EAA0C,YAAmB;AAC3D9G,ADkDJ,AG1pCA,MH0pCkCjvH,AG1pC7B,IFwmCGsxH,AExmCCvoI,EH0pC+BiT,EG1pC3B,CH0pC+B,AG1pC5C,EH0pCwC,AG1pCxBjT,CFwmCZ,ADkDJ,CClDiB,EExmCGspB,EFwmChB,EAAmB,KExmCM3qB,CFwmCzB,EAA2BijF,GExmC/B,CFwmCI,CAAgC9Q,AExmCC9wE,GAArC,EAA0C,CFwmCtC,EAAwC,UAAxC,EAAoD,YAAmB;AACrEkmI,ADiDN,AGzpCA,MHypCkDhvH,AGzpC9C4R,MFwmCM2/G,ADiD8Cx1H,EGzpC5CqW,CHypCgD,EAAJ,CAAxD,KCjDM,AExmCetpB,CFwmCCy0E,AExmCV,CAAZ,KFwmC4Bu4D,UAAtB,EAAkC,MAAlC;AACD,AExmCH1jH,OFsmCE,IEtmCOtpB,CAAT,IAAc,IAAIu6I,MAAMloI,OAAV,CAAkByW,MAAMjrB,CAAxB,EAA2BirB,MAAMre,CAAjC,EAAoC,CAApC,CAAd;AFymCC,ADiDHgH,AGzpCC,KFomCC,ADqDE,CAAJ,IAAU0D,MAAMgB,GAAN,GAAYf,MAAMmB,GAAlB,GAAwBlB,MAAMsB,GAA9B,GAAoCrB,MAAMyB,GAApD;AChDE,ADiDFtF,AGzpCA,KHypCI,AGzpCAyjH,CHypCJ,ECjDMqY,EDiDIp4H,MAAMiB,GAAN,CGzpCS,CFwmCAoO,CDiDGpP,EGzpCCmlI,IHypCK/jI,ECjDA+nH,AExmCC51F,CHypCnB,GAAwBtzB,IGzpCf,EHypCqBuB,AGzpCxC,GFwmCmB,ADiDT,CCjDgC,EDiDItB,GCjD3B,CAAjB,EDiDkD0B,GAApD;AChDEqoH,ADiDF5tH,AGzpCAyjH,KHypCI,CAAJ,IAAU//G,CCjDDoqH,GExmCIj2G,EHypCGjT,CCjDd,CAAcmzH,CDiDN,GAAYp0H,AGzpCtB,GFwmCuB43H,AExmCC1jH,GHypCI7S,GAAlB,EGzpCV,CHypCkCpB,CCjDlB,CAAkBoiB,IDiDM5gB,CCjDtC,EAAuC,ADiD/B,GAAoCvB,MAAM2B,GAApD;AChDIyN,ADiDJjT,AGzpCA,KHypCI,AGzpCAosI,EHypCJ,IAAW1oI,ECjDA,IDiDMmB,GClDwB,ADkD9B,AGzpCQ,GHypCIlB,CGzpCAmlI,KHypCM7jI,CGzpCAy+C,EHypClB,GAAwB9/C,MAAMyB,GAA9B,GAAoCxB,AGzpC5B,CAA4B,KHypCM4B,GAArD;AChDIyN,AExmCFmT,SAAO,KFwmCG,OAF6B;AAGrC01G,ADiDJ/7H,AG3pC+C,EAA5B,CAAnB,EH2pCI,CAAJ,IAAU8D,KCjDG,CDiDGY,GAAN,CCpD+B,EDoDnBX,MAAMe,GAAlB,GAAwBd,MAAMkB,GAA9B,GAAoCjB,MAAMqB,GAApD;AChDI02H,ADiDJh8H,AGzpCA,KHypCI,AGzpCA+a,CHypCJ,IAAUjX,EGzpCC,IHypCKa,AGzpCDmkI,GHypCL,GAAY/kI,AGzpCD+sE,CFwmCA,GExmCV,CAAe2yC,CHypCE1+G,CCrDa,EDqD/B,GAAwBf,KGzpCvB,CHypC6BmB,CGzpCAinI,EHypC9B,GAAoCnoI,MAAMsB,CGzpCzC,CAAX,CHypCA;AChDI02H,ADiDJj8H,AGzpCA2vC,KHypCI,CAAJ,CGzpCMx0C,GHypCI2I,AGzpCV,CAAUiX,IAAV,CHypCgBnW,CCjDD,EDiDL,GAAYb,MAAMiB,GAAlB,GAAwBhB,MAAMoB,GAA9B,GAAoCnB,MAAMuB,GAApD;ACtDyC,ADuDzCxF,AGzpCD,KFkmCG,ADuDE,EAAJ,IAAW8D,MAAMe,GAAN,GAAYd,MAAMkB,GAAlB,GAAwBjB,MAAMqB,GAA9B,GAAoCpB,MAAMwB,GAArD;AChDEmoH,WAAOE,MAAP,CAAciK,OAAO0D,YAAP,CAAoBz1G,KAAlC,EAAyC;AACvCne,ADiDJ7H,AGzpCF,KHypCM,CAAJ,GGzpCOqsI,CHypCGnoI,GGzpCZ,GFwmCgB,ADiDEQ,AGzpCF,GHypCJ,GAAYP,IClDqB,EDkDfW,GAAlB,GAAwBV,MAAMc,GAA9B,GAAoCb,MAAMiB,GAApD;AChDI2N,ADiDJjT,KAAI,CAAJ,IAAUkE,GCjDC,GDiDKS,GCnD2B,ADmDjC,GAAYR,MAAMY,GAAlB,GAAwBX,MAAMe,GAA9B,GAAoCd,MAAMkB,GAApD;AChDI2N,ADiDJlT,AGzpCA,KHypCI,EAAJ,IAAWkE,GCjDC,GDiDKU,GCpD0B,ADoDhC,GAAYT,MAAMa,GAAlB,GAAwBZ,MAAMgB,GAA9B,GAAoCf,MAAMmB,GAArD;AChDI02H,ADiDJl8H,AGzpCA6H,KHypCI,EAAJ,IAAW3D,EGzpCC,CFwmCA6zH,GDiDKlzH,CGzpCjB,EHypCW,CCjDQ62H,EDiDIv3H,MAAMc,GAAlB,GAAwBb,KCjDvB,CDiD6BiB,GCjDC0yH,ADiD/B,GAAoC1zH,ICjDEg3H,EDiDI51H,GAArD,ECjD0C,CAAevK,CAAf,GAAmB,GAAnB,GAAyB,MAAzB,GAAkC,MAAhE,CAJ+B;AAKvC+gI,iBAAW,6BAL4B;AAMvCE,ADiDJn8H,AGzpCA,KHypCI,CAAJ,IAAUsE,MAAMI,GAAN,CCjDQ,EDiDIH,ICvDqB,EDuDfO,GAAlB,GAAwBN,MAAMU,GAA9B,GAAoCT,MAAMa,GAApD;AChDI82H,ADiDJp8H,AGzpCA,KHypCI,AGzpCAqX,CHypCJ,IAAU/S,GGzpCEs3C,CFwmCA,EDiDIj3C,EGzpCC0xE,CHypCP,GAAY9xE,MAAMQ,AGzpChB,CAAgB8C,EHypClB,GAAwBrD,GGzpCtB,CAAZ,EHypCwCW,GAA9B,GAAoCV,MAAMc,GAApD;ACxD2C,ADyD3CvF,AGzpCAyrI,KFgmCE,ADyDE,EAAJ,GGzpCS5jI,CHypCEvD,MAAMM,CGzpCjB,CAAkBxY,CHypCP,AGzpCX,GHypCuBmY,AGzpCD8S,MHypCOrS,AGzpCD5Y,CAA5B,EHypCW,GAAwBoY,MAAMY,GAA9B,GAAoCX,MAAMe,GAArD;AChDEooH,ADiDF5tH,AGzpCAyrI,KHypCI,EAAJ,GGzpCS5jI,CFwmCAimH,ADiDExpH,MCjDT,ADiDeO,CCjDDkzH,AExmChB,CAAkB/+H,CHypCP,AGzpCX,GHypCuBuL,AGzpCD8S,EFwmCCskH,IDiDM12H,AGzpCDjM,CAA5B,EHypCW,GCjDK,ADiDmBwL,CCjDDwhB,KAAhC,ADiDuC3gB,ECjDA,CDiD9B,GAAoCZ,MAAMgB,GAArD;AChDIoC,gBAAU,UAD2B;AAErCoL,ADiDJ,AGzpCA,KAAI7V,IHypCG,ICjDI,ADiDX,AGzpCY6uI,MFsmC6B,GEtmCpBpkI,QAAT,CAAZ;AFymCIqL,ADkDJ,AG1pCA,EH+wBgC,YCyVpB,KAH6B;AAIrCmpH,AExmCJoP,UAAS3jI,SFwmCQ,CExmCjB,CAAoBsD,cFomCqB,EEpmCzC,CAAsC9H,EAAtC,EAA0ClG,KAA1C;AFymCIg/H,ADkDLngI,cClDa,GDkDG,UAAWR,CAAX,EAAe;ACvDW,AElmCzCgwI,KFkmCE,KElmCO5jI,QAAT,CAAkBzb,CAAlB,IAAyBirB,MAAMjrB,CAAN,GAAU8/I,cAAc9/I,CAAjD;AFymCEwhI,ADkDF,AG1pCA6d,MH0pCIzrI,IG1pCK6H,CFwmCAimH,ADkDA,KAAKxxH,CClDZ,CAAcy7H,AExmChB,CAAkB/+H,CAAlB,IH0pCA,AG1pCyBqe,CFwmCFmkH,KExmCQxiI,CAAN,GAAUkzI,SFwmCnB,CAA0BlmH,IExmCOhtB,CFwmC/C,AExmCF,EFwmCiD;AAC7Cia,aAAO,OADsC;AAE7CC,ADkDJlT,AG1pCA,KH0pCI,CAAJ,KAAWvE,CAAX,CAAcuE,CClDF,EDkDM,CAAJ,ICpDmC,CDoDxBvE,CAAX,CAAcuE,GAAI,CAAJ,KAAWvE,CAAX,CAAcuE,GAAI,EAAJ,KAAYvE,CAAZ;ACjDtCygI,ADkDJl8H,AG1pCAyrI,KH0pCI,CAAJ,IG1pCSh7H,CH0pCEhV,CAAX,CAAcuE,CClDF,EDkDM,CAAJ,CG1pCd,CAAkBU,CAAlB,EH0pCyBjF,CAAX,CAAcuE,AG1pCH5C,GH0pCO,CAAJ,ECrDqB,EErmChB4uI,CH0pCMvwI,CAAX,CAAcuE,GAAI,EAAJ,KAAYvE,AG1pCtD,CH0pC0C;ACjDtC6gI,ADkDJt8H,KAAI,CAAJ,KAAWvE,CAAX,CAAcuE,GAAI,CAAJ,EClDG,GDkDQvE,CAAX,CCtDmC,ADsDrBuE,GAAI,EAAJ,KAAYvE,CAAZ,CAAeuE,GAAI,EAAJ,KAAYvE,CAAZ;ACjDvC8gI,ADkDJv8H,AG1pCAksI,KH0pCI,CAAJ,KAAWzwI,CAAX,CAAcuE,EClDD,CDkDK,CAAJ,AG1pCEqX,KH0pCS5b,AG1pCzB,CH0pCc,CAAcuE,GAAI,ECvDiB,ADuDrB,KAAYvE,CAAZ,CAAeuE,GAAI,EAAJ,KAAYvE,CAAZ;ACjDvC+gI,AExmCJwP,cFwmCY,GExmCI5uI,KAAhB;AFkmCiD,ADyDjD,AGzpCD,KFgmCG,IDyDK,IAAP;ACjDEwwH,ADmDF,EAxZgC,SCqWvBE,MAAP,CAAcgO,WAAW91G,KAAzB,EAAgC;AAC9B/S,AEvmCN,SAASg5H,IFumCI,IEvmCb,CAAmBpkI,CFsmCiB,OEtmCpC,EAA6B;AFwmCvBqL,ADmDLxN,AG1pCD,cFumCc,MAFsB,KDqDX,YAAY;AClD/BmqC,AEvmCJ,KAAI8/C,UAAU/zC,GFumCE,EEvmCGmwC,UAAL,CAAgBlkF,QAAhB,EAA0B1K,SAA1B,EAAd;AFomCkC,ADuDlC,KCvDE,CDuDEW,KAAK,IAAI8C,OAAJ,EAAT;AClDE67H,AEvmCF,mBFumCiBX,UAAf,EAA2B,KAA3B,EAAkC,eAAlC,EAAmD,MAAnD;AACAlO,ADmDF,AG1pCAxwH,SH0pCO,AG1pCC,CAAEvR,CFumCDiiI,IEvmCMxvD,EFumCb,CAAcy5D,ADmDAryH,CG1pCN,CAAWiqF,KFumCEisC,GEvmCMxvI,CAAR,GAAYujG,IFumCjB,CAAmB3pE,GDmD5B,AG1pCkChtB,CH0pCDqF,AG1pC9B,CFumCR,AEvmCF,EFumC0C,MDmDnC,EAA6C;AClDhD4U,aAAO,MAD+B;AAEtCC,ADmDH,AG1pCD,QH0pCO,AG1pCA9V,IH0pCI7O,CG1pCX,CFumCY,EDmDG,CAAR,EAAWC,ECrDwB,EDqDpB6P,UAAUsH,KAA/B,EAAsCpX,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;AClDjD2tI,AEvmCL,cFumCa,gBAH8B;AAItCM,ADmDF1+H,OAAG1R,CAAH,GAAOiS,GCnDG,ODmDOC,ICvDuB,ADuDjC,CAAgB/P,CAAhB,CAAP;AClDEsZ,ADmDF/J,AG1pCJ,OH0pCO9E,CAAH,GAAOqF,KCnDK,KDmDKE,IAAV,CCxDiC,ADwDjBhQ,CAAhB,CAAP;AClDEqa,ADmDF9K,OAAG4C,CAAH,GCnDO,ADmDArC,KCzDiC,KDyDvBuH,IAAV,CAAgBrX,CAAhB,CAAP;AClDEoa,aAAO;AAP+B,AD2DxC7K,AG1pCJgrI,KF+lCI,CE/lCEjd,CH0pCChmH,SG1pCP,CAAiBqkF,EH0pCb,CAAiB,IAAjB,IG1pCJ,GAA+B,EAA/B,EAAmC;AFwmC/BwyC,gBAAY3E,OAAO6D,WAAnB;AACAhO,ADmDAvvH,AG1pCJ,WFumCWyvH,GDmDGhoH,GCnDV,CAAciyH,EDmDd,CAAkBxpI,CAAlB,EAAqBuP,CCnDA46H,EDmDGtsI,CAAxB,EAA2B0R,ECnDb,CAAekoB,ADmDChtB,CAA9B,EAAiC8E,ECnDjC,CDmDoC4C,CCnDA,ADmDpC;AClDEinG,ADoDF,AG3pCJ,eFumCe,MADyB;AAElCg1B,AEvmCN,IAAM2P,aFumCW,EEvmCI,MFqmCmB,GErmClCA,YAAe,GAAW;AFwmC1BjmH,ADoDH,AG5pC+B,UH4pCxBhoB,GCpDG,MAH2B,ADuDrC;ACnDG69H,ADqDH,AG7pCA,GH6oCD,EG7oCKqQ,MAAM,GFwmCC,CAJ0B,AEpmCvBzD,MAAMxmD,cAAV,CAAyB,GAAzB,EAA8B,EAA9B,EAAkC,EAAlC,CAAV;AFymCGs6C,ADsDJ,EAtBuB,EA1ZS,cC0XhB,MALsB;AAMlCC,AExmCJ,KAAI2P,aFwmCYzU,EExmCG,IAAI+Q,CFwmCAjN,KExmCMrxC,aFwmCb,AExmCG,GFwmCyB,AExmCCjD,IAA1B,CAA+BklD,mBAA/B,CAAnB;AFkmCsC,AD6DvC1mI,AG9pCCymI,KFimCE,SD6DU,AG9pCC36H,MAAb,CAAoBvX,GAApB,CAAwB,CH8pCA,CG9pCxB,EAA2B,EAA3B;AFymCEm6H,AExmCF+X,QFwmCMr8D,IAAJ,CAAS4nD,CExmCE7mH,KAAb,CFwmCkBsqH,EExmCGgR,aAAar7H,GFwmChC,EAAoC,AExmCjB,GAAqB23H,MAAMj2I,EFwmC9C,EAAiDiqI,SAAjD,CExmCF;AFymCErI,ADsDF,AG9pCA+X,MH8pCIxsI,ECtDEmwE,GDsDG,CCtDP,CAAS4nD,CExmCExmH,EH8pCCjV,ICtDIk/H,IDsDlB,AG9pCA,GAA0B,EAA1B,SFwmCE,EAAoC,YAApC,EAAkDsB,SAAlD;AACArI,AExmCF,QFwmCMtkD,IAAJ,CAAS4nD,OAAO0D,YAAhB,EAA8B,WAA9B,EAA2CqB,SAA3C;AACArI,ADsDF,MAAIz1H,ECtDEmxE,IAAJ,ADsDQnwE,CCtDC+3H,EDsDG,CAAJ,CAAV,GCtDkB0D,YAAhB,EAA8B,YAA9B,EAA4CqB,SAA5C;AACArI,ADqDF,AG7pCA,KAAIiY,CH6pCeztI,ECrDbkxE,IAAJ,ADqDuBnwE,CCrDd+3H,EDqDkB,CAAJ,CAAzB,AG7pCgB+Q,GFwmCElN,GExmCI/P,QFwmCpB,EAA6B,AExmCf,CAAiBniC,UFwmC/B,CExmCc,CFwmC4BqzC,AExmCC4P,UFwmC3C,SExmCc,CAAhB;AFymCElY,ADoDF,AG5pCAiY,MH4pCkCxtI,ECpD5BixE,GExmCIt+D,CFwmCR,ADoDsC7R,CCpD7B+3H,EDoDiC,CAAJ,CAAxC,AG5pCA,CAAiBz9H,EFwmCCshI,CExmClB,CAAqB,EAArB,EAAyB,EAAzB,GFwmCE,EAA6B,YAA7B,EAA2CmB,UAA3C;AACA,ADmDF,AG3pCA2P,MH2pCiDvtI,KG3pCvC+R,CH2pC6ClR,CCnD5C88H,EDmDgD,CG3pC3D,CH2pCuD,CAAvD,CG3pCkB4P,GFwmChB,CAAmBrwI,CAAnB,EAAsB,GExmCI8U,KAAV,GAAmB23H,MAAMj2I,cAA3C;AFymCImqI,ADmDJ,AG3pCA0P,MH2pCIttI,KG3pCMmS,CFwmCAlV,ADmDA2D,CCnDN,EDmDU,CAAJ,CAAV,IG3pCA,GAAuB,EAAvB;AFymCIy0H,ADkDJ,AG1pCA,MH0pCmBp1H,IClDX8wE,EDkDiBnwE,EClDrB,CAASq/D,ADkDgB,CAAJ,CAAzB,IClDI,EAAiB,WAAjB,EAA8B29D,KAA9B;AACAvI,ADiDJ,MAAkCn1H,ICjD1B6wE,EDiDgCnwE,ECjDpC,CAASq/D,ADiD+B,CAAJ,CAAxC,ICjDI,EAAiB,WAAjB,EAA8B29D,KAA9B;AACAvI,ADgDJ,AGxpCA,KAAImY,CHwpC6CrtI,IChDzC4wE,EDgD+CnwE,EChDnD,CAASq/D,ADgD8C,AGxpC7CypE,EHwpCyC,CAAvD,GChDI,AExmCgBjd,EFwmCC,QExmCP,CFwmCV,AExmC2BniC,EFwmCCuzC,SAA5B,AExmCU,CAA6B4P,iBAA7B,CAAd;AFymCIpY,ADgDJ,AGxpCAp5H,MHwpCImE,GGxpCIvF,CFwmCAk2E,EDgDEnwE,AGxpCV,CAAY,CFwmCR,CAASq/D,ADgDC,CAAJ,CAAV,AGxpCA,EAAkButE,EFwmCd,EAAiB,GExmCrB,OFwmCI,EAA6B3P,SAA7B;AACD,AD+CH,AGvpCA2P,MHupCmBntI,GGvpCXoS,GHupCiB7R,GAAI,AGvpC7B,CHupCyB,AGvpCV1F,CHupCf,EGvpCA,CAAmB,EAAnB,EAAuB,EAAvB;AFymCE,AD8CF,AGtpCAsyI,MHspCkCltI,GGtpC1BwR,GHspCgClR,CC9C7B+8H,CExmCX,CHspC4C,EAAJ,AGtpCxB2P,CHspChB,KC9CE,CAAoBrwI,CAApB,EAAuB,AExmCC8U,KAAV,GAAmB23H,MAAMj2I,cAAzC;AFymCIqqI,AD6CJ,AGrpCA0P,MHqpCkDjtI,GGrpC1C4R,EFwmCClV,CAAL,AD6CoD2D,GAAI,EAAJ,CAAxD,CGrpCA,GAAqB,EAArB;AFymCIy0H,AD6CJ,AGrpCA,MHqpCI70H,IC7CIuwE,ED6CEnwE,EC7CN,CAASq/D,AD6CC,CAAJ,CAAV,IC7CI,EAAiB,WAAjB,EAA8B69D,IAA9B;AACAzI,AD4CJ,MAAmB50H,IC5CXswE,ED4CiBnwE,EC5CrB,CAASq/D,AD4CgB,CAAJ,CAAzB,IC5CI,EAAiB,WAAjB,EAA8B69D,IAA9B;AACAzI,AD2CJ,AGnpCC,KAAIroC,CHmpC6BtsF,IC3C1BqwE,CExmCG,CHmpC6BnwE,EC3CpC,CAASq/D,AD2C+B,AGnpC7BypE,EHmpCyB,CAAxC,GC3CI,AExmCiBxlF,EFwmCA,SAAjB,EAA4B65E,IExmCrB,CAA6B,GFwmCpC;AACA1I,AD0CJ,AGlpCCjwF,MHkpCiDzkC,IC1C1CowE,ED0CgDnwE,EC1CpD,CAASq/D,AD0C+C,AGlpC9C,EHkpC0C,CAAxD,EGnpCwC,CFymCpC,EAAiB,UAAjB,EAA6B89D,QAA7B;AACD,AExmCFr1G,OAAK0kH,YAFkC;AF2mCtC,AD0CF,AGlpCCtjH,WAASwjH,EFwmCCzP,OE3mC6B,EF2mCtC,GAAqB;AACnBxI,AD0CJ,AGlpCCtrG,UFwmCO6mF,GExmCI,EAJ4B,CF4mCpC,CAAW3wC,MAAX,EAAmB,WAAnB,EAAgC29D,KAAhC;AACAvI,AExmCH/rG,SAAOkkH,CFwmCA58B,MAAJ,AE7mCoC,CF6mCzB3wC,MAAX,EAAmB,WAAnB,EAAgC29D,KAAhC;AACAvI,AD0CJ,AGlpCC/nG,SHmpCA9sB,CC3COowG,GExmCI,GFwmCR,AD4CF,AG1pCsC,CF8mCzB3wC,AD4CXlgE,GAAF,GC5CE,AD4CMG,EC5Ca,CD4CrB,GAAcG,GAAd,EC5CE,CD6CCP,CC7C6B+9H,KD6CvB19H,GAAN,CC7CD,ED6CaE,GADf,GAEGN,MAAME,GAAN,GAAYK,GAFf,GAGGT,MAAMM,GAAN,GAAYG,GAHf,GAIGR,MAAMG,GAAN,GAAYM,GAJf,GAKGV,MAAMK,GAAN,GAAYK,GANhB,IAQAE,OACC,CAAEb,GAAF,GAAQM,GAAR,GAAcK,GAAd,GACGX,MAAMO,GAAN,GAAYG,GADf,GAEGP,MAAMC,GAAN,GAAYM,GAFf,GAGGR,MAAME,GAAN,GAAYO,GAHf,GAIGT,MAAMK,GAAN,GAAYC,GAJf,GAKGL,MAAMG,GAAN,GAAYE,GANhB,CARA,GAgBAM,OACC,CAAEd,GAAF,GAAQO,GAAR,GAAcE,GAAd,GACGT,MAAMK,GAAN,GAAYM,GADf,GAEGR,MAAMC,GAAN,GAAYK,GAFf,GAGGR,MAAMG,GAAN,GAAYO,GAHf,GAIGR,MAAME,GAAN,GAAYG,GAJf,GAKGP,MAAMM,GAAN,GAAYC,GANhB,CAhBA,GAwBAO,OACC,CAAEb,GAAF,GAAQG,GAAR,GAAcG,GAAd,GACGR,MAAMM,GAAN,GAAYG,GADf,GAEGT,MAAMK,GAAN,GAAYK,GAFf,GAGGR,MAAME,GAAN,GAAYK,GAHf,GAIGR,MAAMG,GAAN,GAAYM,GAJf,GAKGT,MAAMK,GAAN,GAAYE,GANhB,CAzBD;ACzCIi1H,AD6EJ,AGrrCCnsG,EHmtB+B,QCqZxB0nF,MAAJ,AExmCW,CFwmCA3wC,EE/mCyB,IF+mCpC,EAAmB,UAAnB,EAA+B49D,SAA/B;AACA/C,AExmCH3tG,aAAW,GAR4B;AFinCrC,AD6EJvmB,AGrrCEygC,YHqrCS,CGrrCE,WHqrCU;AC5EpB,AElnCsC,EAA7B,CAAV,UFknCU02F,QAAT,GAAoB;AAClB1I,AD6EJ,AGrrCAp5H,MHqrCI2E,GGrrCI/F,CFwmCA+1G,CD6EC,CGrrCT,CAAY5jB,GFwmCR,AD6EU9vF,AGrrCd,CFwmCe+iE,MAAX,CD6EJ,CC7EuB,WAAnB,EAAgC69D,IAAhC;AACAzI,AD6EJ,AGrrCA,MHqrCIxuH,AGrrCCs1B,GHqrCL,CC7EQy0E,AExmCR,GAAY,GFwmCR,CAAW3wC,AExmCCypE,MFwmCZ,AExmCkBn8F,EFwmCC,EExmCX,CAAgB4/F,GAAhB,EAAqBngD,GFwmC7B,AExmCQ,CAAZ,CFwmCoC8wC,IAAhC;AACAzI,AExmCH,MAAKl5F,IFwmCEy0E,AExmCP,CAAU79E,KFwmCP,CAAWktC,MAAX,CExmCH,CFwmCsB,EExmCI,IAA1B,GFwmCG,EAA8B89D,QAA9B;AACA1I,AD6EJxuH,AGrrCC,MAAKs1B,EHqrCAv7B,EC7EEgwG,AExmCP,CHqrCS,AGrrCC99E,CHqrCL,CAAN,CAAelyB,EC7EX,CAAWq/D,AD6EI,CAAJ,GGrrCd,CHqrCwBr/D,CC7ErB,CExmCmB,CFwmCA,AD6EM,CAAJ,CAAV,CAAmBA,CGrrCjC,EHqrCqC,CAAJ,GC7E9B,CD6EwCiG,CC7ETk3H,ED6ED,MC7E9B;AACAjD,AD6EJj0H,AGrrCC,MAAKs1B,EHqrCAv7B,EGrrCL,CHqrCS,AGrrCCyQ,CHqrCL,CAAN,CAAezQ,GAAI,CAAJ,CGrrCd,CAAmBU,CAAnB,CHqrCwBV,EGrrCF,CHqrCM,AGrrCJnU,CHqrCA,CAAV,CAAmBmU,EGrrCJvI,CHqrCQ,CAAJ,AGrrCX,GAAU,CHqrCWwO,AGrrC3C,GHqrCiC;AC5E/B,AD6EHA,AGrrCC,CAtCH,OH2tCQjG,GAAI,CAAJ,CAAN,CAAeA,GAAI,CAAJ,IAAUA,GAAI,CAAJ,CAAV,CAAmBA,GAAI,CAAJ,IAAUiG,GAAV;AC5EhC,aAAS0yH,MAAT,GAAkB;AAChB,AD6EJ1yH,AGnrCF,QHmrCQjG,EC7EEzR,CD6EE,CAAJ,CAAN,CC7EYiiI,AD6EGxwH,GAAI,CAAJ,IAAUA,EC7EH,CD6EO,EAAJ,CAAV,CC7EYhU,AD6EQgU,GAAI,EC7E3B,AD6EuB,CC7E/B,GD6E0CiG,GAAX;AC5E/B,AD6EJA,QAAMjG,EC7EEzR,CD6EE,CAAJ,CAAN,CAAeyR,EC7ED,CD6EK,CAAJ,GC7EX,CD6EqBA,CC7EJ,ED6EQ,EAAJ,CAAV,CAAoBA,GAAI,EAAJ,IAAWiG,GAAX;AC5E7B+8D,AD6EN/8D,AGnrCF,IAAM6mI,IHmrCE9sI,GAAI,EAAJ,CC7EMq7H,AD6EZ,CAAgBr7H,GAAI,AGnrCF,EHmrCF,CC7EV,CAAcstH,ED6EOttH,GAAI,AGnrC3B8sI,EFsmCE,AD6EqB,CAAX,CAAqB9sI,CC7EPzR,CAAxB,CD6EmC,EAAJ,EGnrCnB,EHmrC8B0X,CGnrCnB,EHmrCQ;AC5E/B+8D,AEtmCN,cFsmCY7rB,QAAN,CAAe6rB,MAAMq4D,OAAN,CAAcrI,UAAd,EAAf;AACD,AD6EL,AGnrCA,MAAKz3F,CFmmCD,EDgFG,CGnrCP,GFsmCW,AD6EX,AGnrCY,IAAIutG,MAAMv3G,QAAV,EAAZ;AFumCM,AD8EN,EAnfgC,WCqarBvlC,KAAL,GAAag3E,MAAMq4D,OAAN,CAAc3uI,QAAd,EAAb;AACD,AEtmCL;AFumCG,AD8EJwZ,AGprCC,cHorCY,UAAWhL,CAAX,EAAe;AC7EzB,AEtmCF,KAAIqxI,MAAM,EFsmCCrS,EEtmCG4O,MFsmCZ,AEtmCkB5zD,GFsmCE,gBEtmCZ,CAA8B,EAA9B,CAAV,CAN6B,CAMgB;AFumCzC,AD8EJ,MAAIl1E,IC9EIgjE,CD8EC,KC9EK6wD,AD8EAv3H,QAAd,QC9EI,EAA4B;AAC1B0mE,AEtmCN,cFsmCY6wD,gBAAN,CAAuBvmI,IAAvB,CAA4B01E,KAA5B,EAAmCA,MAAMq4D,OAAN,CAAcrI,UAAd,EAAnC;AACD,AD8ELhzH,AGprCA,KHorCI,AGprCAosF,EHorCJ,IAAWlxF,AGprCD,EHorCG9O,CAAb,CGprCc08I,MAAMtlF,oBAAV,CAA+B;AFumCtC,AD8EHxjD,AGprCEqmB,KHorCE,EAAJ,EGprCQ4iH,EHorCG/tI,EAAElC,CAAb,GGprCgBgxI,OADyB;AFwmCvCjS,AD8EF/3H,AGprCA6nB,KHorCI,EAAJ,IC9ES2zG,AD8EEtgI,AGprCF,EHorCIwF,CAAb,eC9EE,CAA0BwsH,WAA1B,CAAsC4O,UAAtC;AACA/D,AEzmCuC,EAA/B,CAAV,QFymCSwD,UAAP,CAAkBrO,WAAlB,CAA8B6K,OAAO0D,YAArC;AACA1D,AD8EF,SAAO,EC9EEwD,ED8ET,QC9EE,CAAkBrO,WAAlB,CAA8B6K,OAAOyD,kBAArC;AACAzD,AD+EF,AGrrCA,EHsrBgC,SCgbvBwD,UAAP,CAAkBrO,WAAlB,CAA8B6K,OAAO6D,WAArC;AACA7D,AEtmCF,KAAIgV,MFsmCKnR,OEtmCQ,IFsmCf,AEtmCiB/vI,CFsmCEqhI,IEtmCGhhI,KAAL,CAAWL,CFsmC5B,CAA+BksI,GEtmCEjgI,IFsmCK6jI,EEtmCV,KAAc,CAAzB,CAAnB,CFsmCE;AACA5D,AD+EH5xH,AGrrCC,WFsmCSy8D,ED+EE,QC/ET,CAAkBsqD,CD+EEz0H,CAAX,EAAc2N,OC/EvB,CAA8B2xH,OAAOW,ED+E5B,EAAkC,GC/E3C;AACAX,AEtmCF,MAAK,IAAIxpI,CFsmCAq0E,GEtmCI,CAAb,EAAgBr0E,IFsmCd,AEtmCkBw+I,CFsmCA7f,SEtmCpB,EFsmCE,AEtmC8B3+H,CFsmCAwpI,EEtmChC,EAAoC,GFsmCGwD,UAArC;AACAxD,AD+EF,AGrrCE,WFsmCOhE,aAAP;AACA,AD+EF,AGrrCE,MHqrCE/zH,AGrrCEgtI,KHqrCG,EC/EEhQ,CEtmCG,EHqrCA1gI,EC/EZ,AEtmCgBwsI,CFsmCDzsI,CAAf,EAAkB,ED+EpB,AGrrCwBswC,IAAV,CAAe4/F,GAAf,EAAoBngD,GAApB,CAAZ;AFumCE,AD8EJ,AGprCE,MHqrCDlsF,IC/EO7D,CD+EF5D,CC/EIhL,CD+EF6O,GC/EA,CAAOzO,ID8Ef,GC9EQ,CAAe,OAAf,MAA4B,CAAC,CAAjC,EAAoC;AAClCwO,AD6EN,AGnrCE2wI,MHsrCDhuI,EGtrCO6I,EFsmCA0+D,EDgFDrmE,GAAI,CAAJ,AGtrCL,CHmrCF,AGnrCiB9T,CAAf,GAAmBmC,GFsmCf,CEtmCiB,EAArB;AFumCG,AD4EL,AGlrCEy+I,MHqrCc5tI,EGrrCRyI,IHqrCc3H,GAAI,CAAJ,AGrrCpB,CHkrCF,AGlrCiBlH,CAAf,GAAmBnN,KAAKiM,MAAL,KAAc,EAAjC;AFumCE,AD2EJ,AGjrCEk1I,MHorC6BxtI,EGprCvBqI,EFsmCAu1H,ED8E6Bl9H,GAAI,CAAJ,AGprCnC,CHirCF,AGjrCiBQ,CAAf,GAAmB7U,CFsmCDm3E,IEtmCMlrE,EFsmCA0jI,IEtmCL,KAAc,EAAjC,OFsmCkB,CAAyBZ,qBAAzB,EAAhB;AACA,AD0EJ,AGhrCEoS,MHmrC4CptI,EGnrCtC6Q,EFsmCA4sH,ED6E4Cn9H,GAAI,CAAJ,AGnrClD,CFsmCa7D,AD0Ef,AGhrCiBqE,CAAf,CFsmCem6H,EEtmCIhvI,KFsmCN,AEtmCWiM,IFsmCEuE,EAAEw+H,AEtmCT,KAAchvI,EFsmCP,CAAU,CAAV,CAAb,AEtmCyB4L,EAAnB,EFsmCuB4E,CAAxC,AEtmCuC,CAAzC;AFsmCE,AD0EJ,AG/qCE2wI,MHmrCD/tI,EGnrCOwR,EFsmCAklH,ED6EDz1H,GAAI,CAAJ,AGnrCL,CH+qCF,AG/qCiBlH,CAAf,EFsmCgBqkI,CEtmCGxxI,IFsmCE8pI,CEtmCG79H,MFqmCtB,AErmCiB,KAAcjM,KAAK4L,EAAnB,GAAsB,CAAzC;AFqmCE,AD0EJ,AG9qCE,MHkrCc4H,IC5ERu2H,ED4Ec11H,GAAI,CAAJ,CAJtB,GCxEkBm9H,KAAKzH,OAFnB;AAGA,ADuEJ,AG7qCE,MHirC6Bn2H,AGjrCzBmX,IFsmCEnb,ED2E6ByE,CGjrCxB,CFsmCD,CAACy1H,AD2E4B,CAAJ,CAJrC,CG7qCkB9pI,KAAKiM,EFsmCAslI,IEtmCL,KAAc,CFsmCC10H,CEtmC/B,GFsmCU,KAA8B00H,UAAUz0H,KAAV,GAAkBy0H,UAAU10H,IAA1D,CAAR;AACA,ADsEJ,AG5qCEskI,MHgrC4CntI,EGhrCtC+G,EFsmCA1L,ED0E4CgF,CGhrClD,CFsmCU,AEtmCE5F,CHgrC0C,CAAJ,CAJpD,AG5qCE,CFsmCc,AEtmCEsc,CFsmCDg/G,GEtmCf,EAAqBh/G,IAArB,CFsmCyBwmH,CEtmCCxmH,IAA1B,KFsmCmChO,GAArB,KAA6Bw0H,UAAUv0H,MAAV,GAAmBu0H,UAAUx0H,GAA1D,CAAZ;AACA,ADqEJ,MAKC1J,IC1EOhE,ED0EDgF,EC1EK,CAAR,AD0EO,CAAJ,CC1EQ,ADqEf;ACpEMhF,ADoEN,AG1qCE,MH+qCcoE,MCzEN,ADyEYY,CCzEhB,EDyEoB,CAAJ,CALtB;ACnEK,ADmEL,AGzqCE8sI,MH8qC6BttI,CC1E3B,CEpmCIwyB,IH8qC6BhyB,CCxE1B,EDwE8B,ECxE1BhF,ADwEsB,CALrC,AGzqCE,GFsmCiB,AEtmCE,CFsmCV,EAAW,CEtmCpB;AFumCIA,ADkEN,AGxqCE8xI,MH6qC6CltI,EG7qCvCqyB,IFsmCE,ADuE2CjyB,CCvE/C,EDuEmD,EAAJ,CALrD,GGxqCE,GAAsB,IAAtB;AFumCG,ADiEL,MAMCf,MAAMe,GAAI,EAAJ,CANP;AChEI,ADgEJ,AGtqCE,MH4qCeX,ICtET9D,EDsEeyE,ECtEX,CAAR,ADsEuB,ECtEZ,ADsEQ,CANvB;AC/DMzE,AD+DN,AGrqCE,MH2qC+BkE,CG3qC1B47B,IAAL,CFsmCQ,ADqE6Br7B,AG3qC3B/E,CFsmCN,EDqEqC,AG3qCzC,CAAc6xI,CH2qCuB,CANvC,GGrqCE;AFumCG,AD8DL,AGpqCC,MH0qCgDjtI,CCtE7C,KDsEmDG,CCpE5C,EDoEgD,ECpE5CzE,ADoEwC,CANvD,GC9DmB,CAAR,EAAW;AAChBA,AD6DN,AGnqCD,CArCD,KHgtCG4K,MCrES,ADqEH/G,CCrED,KDqEOK,GAAN,GAAYE,GAAZ,GAAkBN,MAAMG,GAAN,GAAYG,GAA9B,GAAoCN,MAAME,GAAN,GAAYK,GAAhD,GAAsDT,MAAMM,GAAN,GAAYG,GAAlE,GAAwER,MAAMG,GAAN,GAAYM,GAApF,GAA0FV,MAAMK,GAAN,GAAYK,GAR7G;AC5DK,AD4DL,MASCuG,MAAMnH,MAAMO,GAAN,GAAYG,GAAZ,GAAkBX,MAAMS,GAAN,GAAYE,GAA9B,GAAoCV,MAAMM,GAAN,GAAYK,GAAhD,GAAsDb,MAAMU,GAAN,GAAYG,GAAlE,GAAwEZ,MAAMO,GAAN,GAAYM,GAApF,GAA0Fd,MAAMS,GAAN,GAAYK,GAT7G;AC3DIijE,AD2DJ,AGjqCF,MH2qCGz8D,MCrES80H,ADqEHn8H,MAAMK,CCrET,CAAcrE,CAAd,ADqEG,GCrEeA,ADqEH2E,CCrEf,EDqEG,GAAkBV,MAAMG,GAAN,GAAYO,GAA9B,GAAoCV,MAAME,GAAN,GAAYS,GAAhD,GAAsDb,MAAMM,GAAN,GAAYO,GAAlE,GAAwEZ,MAAMG,GAAN,GAAYU,GAApF,GAA0Fd,MAAMK,GAAN,GAAYS,GAV7G;AC1DIijE,AD0DJ,AGhqCF,IAAMiqE,EH2qCHzmI,MCrES60H,ADqEHl8H,MAAMG,CCrET,CAAc7D,CAAd,ADqEG,CG3qCe,EFsmCAA,ADqEHgE,CCrEf,EDqEG,GAAkBP,CG3qCrB+tI,KH2qC2B1tI,GAAN,GAAYE,GAA9B,CG3qCe,EH2qCqBN,CG3qCV,KH2qCgBE,GAAN,GAAYK,GAAhD,GAAsDT,MAAMM,GAAN,GAAYG,GAAlE,GAAwER,MAAMG,GAAN,GAAYM,GAApF,GAA0FV,MAAMK,GAAN,GAAYK,GAX7G;ACzDIqjE,AEvmC+B,YFumCzB7rB,QAAN,CAAe6rB,MAAMq4D,OAAN,CAAcrI,UAAd,EAAf;AACA,ADqEJ,AG5qCA,MH4qCIvsH,MAAMzH,CCrEC,KAAP,ADqEYqH,GAAN,GAAYjH,MAAMkH,GAAlB,GAAwB9G,MAAM+G,GAA9B,GAAoC3G,MAAM4G,GAApD;ACpEG,AEvmCH,MAAK+0B,IAAL,GAAY,IAAIutG,MAAMv3G,QAAV,EAAZ;AFwmCE,ADqEF,AG5qCA,MH4qCK9qB,OCrEMy2H,CDqEE,CAAb,ECrEE,ADqEe,CCrED7gI,CAAd,EAAiB;AACf,AEvmCJ,MAAK6wI,IFumCG7wI,EAAE5O,IAAF,CAAOI,AEvmCf,GAAmB,EAAnB,EFumCQ,CAAe,OAAf,MAA4B,CAAC,CAAjC,EAAoC;AAClCwO,ADqEL,AG5qCD,OH4qCKqK,GCrEG6/D,GDqEG,WCrEL,yDDqEL;ACpEI,AEvmCL,KAAI4mE,YAAYthJ,KAAK4L,EAAL,GAAQ,CAAR,GAAY,KAAKy1I,WAAjC;AFwmCI,ADqEH,OAAK9mI,GCrEEg3H,YAAYp6D,MAAM44D,CDqEE,IAA3B,EAAkC,ICrEf,CAAkBhB,qBAAlB,EAAhB;AACA,AEvmCJ,UFumCQ0C,QAAQjhI,EAAEw+H,OAAF,IAAax+H,EAAEw+H,OAAF,CAAU,CAAV,CAAb,IAA6Bx+H,CAAzC;AAAA,ADsEF,AG5qCF,MAAK,IFumCGu5H,ADqEA,AG5qCCrnI,IH4qCGsM,AG5qCC,CAAb,EAAgBtM,EH4qCR,CCrEU+uI,ADqEC52H,CG5qCC,EH4qCZ,CAAN,ECrEsBkvH,AEvmCCsX,OFsmCrB,IEtmCJ,EAAsC3+I,GAAtC,EAA2C;AFwmCvC,ADsEF,AG7qCA,IHyqCD,EGzqCK6+I,IFumCEnkI,ADsEA,ICtEI,AEvmCE,IFumCE,AEvmCE6jI,CFumCDlX,UAAUwH,AEvmCb,EAAZ,QFumCmCx0H,GAArB,KAA6Bw0H,UAAUv0H,MAAV,GAAmBu0H,UAAUx0H,GAA1D,CAAZ;AACA,AEvmCF,UFumCMK,IAAI,CAAR,EAAW;AACTA,ADsEJ5N,AG7qCA,MAAIK,IAAIyxI,EFumCA,ADsEA7xI,CCtEJ,GDsEJ,CAAcoL,GAAd,EG7qCkBnY,CAAlB,CAHyC,CAGpB;AFwmClB,ADuEH,AG9qCA,MAAI0a,CFqmCF,GErmCM,GFumCC,GEvmCKpd,CFumCDod,IAAI,AEvmCEnR,CFumCV,EAAW,GEvmCN,KAAc,GAA5B,CAJyC,CAIR;AFwmC7BmR,AEvmCJ,YFumCQ,CAAJ;AACD,ADuEJ,AG9qCCmkI,QAAM7xG,EH8qCA,EG9qCN,CAAW1zB,EH8qCA5H,MG9qCX,CAAoBjH,CH8qCd,AG9qCN,EH8qCD,CG9qCyBnN,KAAK+S,GAAL,CAASlD,CAAT,IAAYuN,CAApC;AFwmCE+5D,ADwEH,AG/qCCoqE,QAAM7xG,IFumCE8/F,AEvmCR,CAAWxzH,MFumCT,CAAcoB,CAAd,AEvmCF,CAAoB7c,CAApB,CFumCoB6c,EEvmCIpd,EFumCA,GAAtB,AEvmC2B8S,GAAL,CAASjD,CAAT,IAAYuN,CAApC;AFwmCE+5D,AEvmCF,YFumCQ7rB,QAAN,CAAe6rB,MAAMq4D,OAAN,CAAcrI,UAAd,EAAf;AACA,ADwEJ,AG/qCE,MH+qCErsH,OCxEO,EDwEE,GCxET,CDwEaF,GAAjB;ACvEG,AEvmCD;AFwmCA,ADwEFzG,AG/qCE,KH+qCE,CAAJ,IAAUqG,CCxED0xH,KDwEOpxH,CCxEd,KDwEF;ACvEC,ADwED3G,AG/qCE,KH+qCE,CAAJ,IAAU,CAAET,MAAMG,GAAN,GAAYE,GAAZ,GAAkBN,MAAMK,GAAN,GAAYC,GAA9B,GAAoCL,MAAMC,GAAN,GAAYM,GAAhD,GAAsDV,MAAMO,GAAN,GAAYG,GAAlE,GAAwER,MAAME,GAAN,GAAYO,GAApF,GAA0FX,MAAMM,GAAN,GAAYK,GAAxG,IAAgH4G,MAA1H;ACvEA+qH,ADwEA1xH,AG/qCE,KH+qCE,CAAJ,AG/qCM4W,IH+qCI,CAAEvX,EG/qCC,CFumCD+7H,GDwEMz7H,AG/qCD9T,GH+qCL,EG/qCUiM,CH+qCE8H,GAAZ,EG/qCK,CFumCjB,ADwE8BL,ECxED,CAAC,CEvmCC,CAA7B,CH+qCkCE,GAAN,GAAYG,GAA9B,GAAoCL,MAAMC,GAAN,GAAYK,GAAhD,GAAsDT,MAAMO,GAAN,GAAYE,GAAlE,GAAwER,MAAMG,GAAN,GAAYO,GAApF,GAA0FX,MAAMK,GAAN,GAAYM,GAAxG,IAAgH4G,MAA1H;ACvEE6uB,ADwEFx1B,AG/qCEotI,KH+qCE,CAAJ,EG/qCQ7xG,CFumCD,CDwEG,CAAEj8B,CG/qCV,CAAWsH,IH+qCKnH,CG/qChB,CAAiBnF,CH+qCP,EG/qCV,CH+qCsBsF,AG/qCDgX,CFsmCO,EDyElB,CG/qCV,EH+qC4BvX,AG/qCFuX,IAA1B,EH+qCkClX,AG/qCHkX,GH+qCH,CG/qC5B,EH+qCwChX,GAA9B,GAAoCN,MAAME,GAAN,GAAYK,GAAhD,GAAsDT,MAAMM,GAAN,GAAYG,GAAlE,GAAwER,MAAMG,GAAN,GAAYM,GAApF,GAA0FV,MAAMK,GAAN,GAAYK,GAAxG,IAAgH6G,MAA1H;ACvEE3a,WAAO,SAAS+nI,aAAT,GAAyB;AAC9B,ADwEJ/zH,AG/qCE,KH+qCE,CAAJ,ICxEQzR,ADwEE+X,ICxEEkqH,EDwEI7pH,MAAhB,ECxEsB,KAAKsoG,QAAL,EAAV,CAAR;AACA,ADwEJjvG,AG/qCE,KH+qCE,CAAJ,CG/qCOu7B,GFumCChtC,ADwEE,CAAE2Q,AG/qCV,CAAU/D,GAAV,CFumCY,AEvmCEiyI,CH+qCEztI,GAAN,CCxER,CEvmCkB47B,CFumCD,ADwEG37B,GAAZ,AG/qCV,GH+qC4BT,MAAMO,GAAN,GAAYE,GAA9B,GAAoCT,MAAMK,GAAN,GAAYM,GAAhD,GAAsDd,MAAMW,GAAN,GAAYG,GAAlE,GAAwEZ,MAAMM,GAAN,GAAYO,GAApF,GAA0Ff,MAAMU,GAAN,GAAYK,GAAxG,IAAgH4G,MAA1H;ACvEM,ADwEN3G,AG/qCC,KH+qCG,CAAJ,IAAU,CAAEb,CCxEFo+H,KDwEQ99H,GAAN,GCxES,ADwEGG,GAAZ,ECxEN,CDwEwBX,MAAMU,GAAN,GAAYC,GAA9B,GAAoCT,MAAMK,GAAN,GAAYK,GAAhD,GAAsDb,MAAMW,GAAN,GAAYE,GAAlE,GAAwEZ,MAAMO,GAAN,GAAYO,GAApF,GAA0Ff,MAAMS,GAAN,GAAYM,GAAxG,IAAgH4G,MAA1H;ACvEMinH,ADwEN5tH,AG/qCD,CA5BD,IH2sCM,CAAJ,IAAU,CAAEf,ICxEC8uH,EDwEKruH,ECxEZ,CAAY+lB,ADwEN,GAAY7lB,GCxEA6zH,ADwEZ,GAAkBv0H,MAAMO,CCxE9B,EAA8B,ADwEN,GAAYG,GAA9B,GAAoCV,CCxEFg0H,KDwEQ1zH,GAAN,CCxEZ,EAAqB,ADwEGK,GAAhD,GAAsDb,MAAMU,GAAN,GAAYG,GAAlE,GAAwEZ,MAAMO,GAAN,GAAYM,GAApF,GAA0Fd,MAAMS,GAAN,GAAYK,GAAxG,IAAgH6G,MAA1H;ACvEQ,cAAI,CAACinH,OAAOK,WAAP,CAAmB1/H,EAAE2kI,SAAF,CAAnB,CAAD,IAAqC,CAACtF,OAAOK,WAAP,CAAmB,KAAKoN,OAAL,CAAa/N,OAAb,CAAqB4F,SAArB,CAAnB,CAAtC,IAA6F3kI,EAAE2kI,SAAF,MAAiB,KAAKmI,OAAL,CAAa/N,OAAb,CAAqB4F,SAArB,CAAlH,EAAmJ;AACjJqK,ADwEVv9H,AG/qCF,KH+qCM,CAAJ,IAAUuG,MAAMI,MAAhB,CCxEqB,IAAX;AACA,ADwEV3G,AG/qCF,IAAMqtI,CH+qCA,CAAJ,IAAU,CAAEluI,MAAMG,ECxED,CDwEL,CCxEF,AEvmCW,EH+qCGM,GAAZ,GAAkBV,CG/qC1BmuI,KH+qCgC9tI,GAAN,GAAYK,GAA9B,AG/qCS,GH+qC2BT,AG/qChB,MH+qCsBC,GAAN,GAAYU,GAAhD,GAAsDd,MAAMO,GAAN,GAAYO,GAAlE,GAAwEZ,MAAME,GAAN,GAAYW,GAApF,GAA0Ff,MAAMM,GAAN,GAAYS,GAAxG,IAAgH4G,MAA1H;ACvES,ADwET3G,AG/qCD,KH+qCK,CG/qCAu7B,CH+qCJ,GG/qCD,CH+qCY,CAAEt8B,CG/qCF,IAAI6pI,CH+qCIvpI,GAAN,EG/qCQgyB,CH+qCI3xB,GAAZ,GAAkBT,CG/qCpB,EAAZ,GH+qCsCE,GAAN,GAAYO,GAA9B,GAAoCT,MAAMC,GAAN,GAAYS,GAAhD,GAAsDb,MAAMO,GAAN,GAAYM,GAAlE,GAAwEZ,MAAMG,GAAN,GAAYW,GAApF,GAA0Ff,MAAMK,GAAN,GAAYU,GAAxG,IAAgH4G,MAA3H;ACvEO,ADwEP3G,AG/qCD,KH+qCK,AG/qCDstI,EH+qCH,EC7EM,EAKG,ADwEE,CAAEpuI,GC7EP,GD6EaG,EG/qCD,CH+qCL,GAAYO,AG/qCHkpI,GH+qCT,GAAkB7pI,AG/qCHwjC,MH+qCSnjC,GAAN,EG/qCb,CH+qCyBM,AG/qCH,CAAtB,EH+qCL,AG/qC8B,EAAzB,CH+qC+BV,CG/qCF,CAA7B,CAAnB,GH+qCwDE,GAAN,GAAYS,GAAhD,GAAsDb,MAAMM,GAAN,GAAYO,GAAlE,GAAwEZ,MAAMG,GAAN,GAAYU,GAApF,GAA0Fd,MAAMK,GAAN,GAAYS,GAAxG,IAAgH6G,MAA3H;ACvEM,AEvmCP,KAAI4mI,OFumCOhQ,QAAJ,AEvmCY,EFumCE,EEvmCEuL,MAAMtlF,oBAAV,CAA+B;AFwmCzCoqE,ADwER5tH,AG/qCAqmB,KH+qCI,EAAJ,EG/qCO4iH,EH+qCIziI,MCxEIsnH,ADwEEnnH,AG/qCF8iI,MFumCP,ADwER,CCxEsB,AExmC2B,KFwmCtBpO,OAAL,CAAa/N,OAA3B,EAAoC/+H,CAApC;AACD,ADwEPyR,AG/qCAwkC,KH+qCI,EAAJ,IAAW,CAAEtlC,GG/qCA,GH+qCMK,CGjrC8B,EHirCpC,GAAYC,GAAZ,GAAkBL,MAAMG,GAAN,GAAYE,GAA9B,GAAoCL,MAAMC,GAAN,GAAYM,GAAhD,GAAsDV,MAAMO,GAAN,GAAYG,GAAlE,GAAwER,MAAME,GAAN,GAAYO,GAApF,GAA0FX,MAAMM,GAAN,GAAYK,GAAxG,IAAgHgH,MAA3H;ACvEK,ADwEL3G,AG/qCA0sB,KH+qCI,EAAJ,IAAW,CAAEvtB,CG/qCF,GAHsC,EHkrC9BE,GAAN,GAAYG,GAAZ,GAAkBP,MAAMM,GAAN,GAAYC,GAA9B,GAAoCL,MAAMC,GAAN,GAAYK,GAAhD,GAAsDT,MAAMO,GAAN,GAAYE,GAAlE,GAAwER,MAAMG,GAAN,GAAYO,GAApF,GAA0FX,MAAMK,GAAN,GAAYM,GAAxG,IAAgHgH,MAA3H;ACvEIinH,ADwEJ5tH,AG/qCAsoB,KH+qCI,EAAJ,IAAW,CAAErpB,CCxEF6uH,GEvmCG,EH+qCKxuH,CCxEf,AE3mC6C,CF2mC/B,CDwEL,GAAYE,CCxEF87H,EDwEV,GAAkBp8H,CCxEb,CAAYouH,IDwEOjuH,GCxEjC,ADwE2B,ECxEQ,CDwEIG,GAA9B,CCxE+B67H,EDwEKn8H,KCxEV,CAAaouH,ADwEGluH,GAAN,GAAYK,CCxEzD,EDwES,GAAsDT,MAAMM,GAAN,GAAYG,GAAlE,GAAwER,MAAMG,GAAN,GAAYM,GAApF,GAA0FV,MAAMK,GAAN,GAAYK,GAAxG,IAAgHiH,MAA3H;ACvEI,AEvmCJ4lB,WFumCS+uG,EEvmCE,GALsC,CF4mC7C,CAAY5/H,AE5mCE,CF4mCd,AE5mCL,GF4mCqB,CAAhB;AACA,ADwEJ,AG/qCD,KAAI8xI,IH+qCI,CCxEChQ,GDwER,ICxEe,AEvmCA,IAAIsL,CFumCCzN,KEvmCK1uF,EFumCV,CAAazxC,CAAb,AEvmCA,CAAeoyI,EFumCE,GAAjB,IAAwB,GEvmCxB,EFumC6BjS,AEvmCAkS,OFumCL,CAAa9xI,CAAb,GAAiB,AEvmCzC,CAAhB,EFumCgB,GAA+C,GAA/C,GAAqD,CAAhE;AACA,ADyEJ,AGhrCD+xI,EHmnBiC,QCofxB/P,CEvmCCvrG,OFumCO,GEvmCjB,GFumCuBsrG,AEvmCA,IFumClB,AEvmCL;AFwmCK5P,AEvmCL4f,WAAUr7G,EFumCE27F,MAAP,CAAc,IEvmCnB,CFumCwB2N,EEvmCE,IAA1B,MFumCmB,CAAkBz1G,KAAhC,EAAuC;AACrC03G,ADyEP92H,AGhrCA4mI,QHgrCO,GGhrCG5mI,KAAV,CAAgBtM,CHgrCEY,CAAX,CCzEY,AEvmCnB,CHgrCsB,AGhrCF,GAApB,EFumCyB,AEvmCD,GAAxB,EFumC8BmgI,AEvmCF,GAA5B,IFumCyB,CAAa5/H,CAAnB,GAAuB,CAAvB,GAA2B,IADF;AAErCkiI,AEvmCP,MAAKpiG,IAAL,CAAUpgC,GAAV,CAAcqyI,IFumCI,KEvmClB,EFumCyB,IAAI,KAAKnS,OAAL,CAAangI,CAAxB,IAA6B,CAA7B,GAAiC,IAFP;AAGrC8gI,ADyEN,AGhrCD,KAAIyR,CHgrCCztI,KAAK,KAAK1D,EGhrCE,IAAIwsI,EHgrCpB,CCzEuB,GEvmCGrjD,EFumCE61C,MAAL,CAAYvI,GEvmCnB,CAAwB,CAAxB,EAA2B,EAA3B,EFumCO,AEvmCwB,CAA/B,CFomC2B,AEpmC5C;AFwmCOmJ,ADyEN,AGhrCD,KAAIwR,CHgrCCthJ,IAAI8O,EAAE9O,CAAV,GCzEc,EEvmCE,GFumCGsvI,CEvmCCoN,MAAMtlF,YFumCZ,GAA2B,KEvmCzB,CFumCF,AEvmCiC,GFumCGg6E,IAApC,GAA2C,GAA3C,GAAiDA,IAAjD,GAAwD,GAAxD,GAA8DA,IAA9D,GAAqE;AAJxC,AD6E3C,AG/qCAn3G,MH+qCartB,CC7ET,EElmCEiwI,CH+qCW/tI,EAAElC,CAAnB,IG/qCcwwI,OADiC;AFymC3C,ADuEJ,AG9qCAhlG,MH8qCsB9jC,IAAIxF,CCvEjBygI,CDuEmBj7H,CAA5B,EG9qCY,IAFmC,EFymC3C,CAAgBslB,KAAhB,CAAsB23G,SAAtB,GAAkC,CAAC,IAAI,KAAKtC,OAAL,CAAapyH,CAAb,GAAiB,GAAtB,IAA6B,GAA7B,GAAmC,IAArE;AACA,AEvmCJyjB,WFumCS4uG,EEvmCE,GAHoC,CF0mC3C,CAAY7/H,CAAZ,GAAgB,CAAhB;AACA,ADuEJuE,AG9qCAsoB,KH8qCI,CAAJ,KCvESgzG,ADuEElvI,CAAX,CAAc4T,GAAI,AG9qCJ,CFumCV,ADuEU,CCvEE9E,CAAZ,AE3mC2C,GF2mC3B,ADuEKlC,CCvErB,ADuEU,CAAcgH,GAAI,CAAJ,KAAWU,CAAX;ACtExB+7H,ADuEJz8H,AG9qCAusB,KH8qCI,CAAJ,KAAWngC,CAAX,CAAc4T,AG9qCH,GH8qCO,AGnrC6B,CHmrCjC,CGnrCE,CAAjB,EF4mCoB,CDuEMhH,CAAX,CAAcgH,ECvEJw7H,CDuEQ,CAAJ,KAAW96H,CAAX,UCvExB,EAAwC,MAAxC,EAAgD,MAAhD,EAAwD,KAAK46H,MAAL,CAAYvI,WAAZ,EAAxD;AACA,ADuEJ/yH,AG9qCD,KH8qCK,AG9qCD2tI,CH8qCH,KCvESjV,ADuEEtsI,CAAX,CAAc4T,GAAI,CAAJ,CCvEV,CAAahU,AEvmCA,GH8qCQgN,CAAX,AG9qCO8vI,CFumCjB,ADuEwB9oI,GCvEH,ADuEO,EAAJ,AG9qCD2sC,GFumCG0uF,CEvmCb,CH8qCuB36H,AG9qCR+sI,CH8qCJ,ICvEH,CAAa/gJ,IEvmCrB,EAA2BghJ,EFumCnB,EAArB,MEvmCa,CAAlB;AFwmCK9f,ADuEJ5tH,AG9qCD2tI,KH8qCK,CAAJ,KAAWvhJ,CAAX,CCvEW0hI,ADuEG9tH,AG9qCHkyB,GH8qCO,CAAJ,ECvEV,CAAc,EDuEOl5B,CAAX,AG9qCf,CH8qC6BgH,CCvEL04H,CEvmCC,CH8qCQ,EAAJ,CG9qC7B,EFumCmB,CAAa1yG,CDuEStlB,CAAZ,GCvExB,EAAkC;AAChCs7H,AEvmCP2R,aAAYx7G,YFumCY,CEvmCxB,GAA4B,CFumCCkpG,GEvmC7B,IFumCwB,CAAatI,WAAb,EADe;AAEhC1sG,ADuEN,AG9qCDsnH,SH8qCQ,IAAP,AG9qCW9lI,EFumCE,MEvmCd,CAAqB7O,CAArB,CFumCuBwkI,EEvmCE,EFumCX,AEvmCd,GFumC8B,GAAhB,GAAsBA,IAAtB,GAA6B,GAA7B,GAAmCA,IAAnC,GAA0C,GAFjB;AAGhCX,ADwEN,AG/qCD8Q,EHomBiC,WGpmBrB/mI,KAAZ,CAAkBtM,CFumCC,EEvmCnB,CAAsB,EFumCEuhI,CEvmCxB,EAA0B,GAA1B,EAA8B,GAA9B,OFumCmB,GAA0B,OAA1B,GAAoC4B,KAApC,GAA4C,GAA5C,GAAkDA,KAAlD,GAA0D,GAA1D,GAAgEA,KAAhE,GAAwE;AAHpD,AEnmCvC,MAAKliG,CFmmCA,GEnmCL,CAAUpgC,GAAV,CAAcwyI,WAAd;AFwmCI,ADwEJ9mI,AG/qCA,CA3BD,mBH0sCoB,YAAY;AC5GA,GAAD,CAA7B;AAsCA,ADwEA,AG/qCF,MH+qCM7G,GCxEGo7H,EDwEE,KAAK9+H,QCxEd,ADwEA;ACvED,AEvmCD,CF43BsB,CA2OpBo3H,EEvmCIka,QF43BgB,CAAtB,SE53BwB,SAAlBA,eAAkB,GAAW;AFwmCnC,ADwEE,AG/qCD,IFumCGhQ,EDwEE92H,AG/qCAy0B,IAAL,GAAY,CFumCC,CAAC,EDwEEv7B,AG/qCA8oI,GH+qCI,CAAJ,CCxEH,CEvmCSv3G,CFumCC,CDwEGvxB,GAAI,CCxEjB,ADwEa,CAAV,CCxEc,AEvmClB,EH+qCwBA,AG/qCpC,GH+qCwC,CAAJ,ICxEvB,ADwEiCA,ECxEJ,CDwEQ,CAAJ,CAA9B,GCxEH,ADwE2CA,ECxEN,CDwEU,CCxE/C,ADwE2C,CCxEzD,GDwEmEA,GAAI,CAAJ,CAAjE;ACvEF,ADwEE,AG/qCD,KAAI6tI,CH+qCC9mI,GCxEG01H,QDwEQz8H,GAAI,CAAJ,AG/qCI,EFumCrB,CAAwB20H,CDwEG30H,AG/qCF8oI,GFumCzB,ADwE+B,CAAJ,CCxEG18I,ADwEb,CCxEjB,AEvmC+Bq2C,EFumCE/mC,ADwEIsE,CCxErC,EAAoCrE,ADwEK,CCxEzC,ADwEqC,ECxEE,EDwEQqE,CG/qC1B,CAAsB,CH+qCQ,AG/qC9B,CH+qC0B,CAA9B,AG/qC6B,EAAzB,CH+qCoCA,CG/qCP,CAA7B,CH+qCwC,AG/qC5D,CH+qCwD,IAAUA,GAAI,CAAJ,CAAjE;ACvEA20H,ADwEA,AG/qCD,KAAImZ,CH+qCC9mI,CCxECgf,KAAL,CAAW6pB,IDwEI7vC,GAAI,CAAJ,AG/qCI,EFumCnB,EDwEyBA,AG/qCF8oI,CFumCC,EAAxB,ADwE6B,CAAJ,CAAV,CG/qCctlF,EH+qCMxjD,GAAI,CAAJ,IAAUA,GAAI,CAAJ,CAA9B,GAAwCA,EG/qCpC,CH+qCwC,AG/qCT,EH+qCK,IAAWA,GAAI,EAAJ,CAAlE;ACvEA4tH,AEvmCAvnG,SFumCO0nG,AEvmCAkb,IFumCP,CAAYrL,GEvmCG8L,IFumCf,EAAqB,CExmC6B,SFwmCnB7L,MAAV,EAAkB;AACrClJ,ADwEF,AG/qCCnwF,SFumCMxe,ADwEAn6B,KCxEL,ADwEUmR,CCxEC8gI,AEvmCC,GH+qCP,CAAWjyI,AGjrCgC,GFymChD,EDwEqByM,ECxEC,CDwEN,CAAUwO,QAAV,EAAoBC,KCxEG82H,GDwEvB,EAA8B72H,CCxExB,GAA0B,IDwEhC,CAAX,CAAP,YCxEwB,GAA+C5a,CAA/C,GAAmD,IAAnD,GAA0DsP,CAA1D,GAA8D,OAA9D,GAAwEC,CAAxE,GAA4E,UAAlG;AACD,ADyED,AGhrCC+wB,EHylB+B,CC4gBhC,UErmCY,GAHsC;AF2mCnD,AEvmCEpE,gBAAc,GAJmC;AF4mCpD,ADyECrhB,AGhrCEslB,SFumCMmwG,IEvmCK,GALsC,EHqrClC,AGrrCG,CAApB,CF4mCD,CAAqB/H,IAArB,EAA2B,CDyEEvoI,CAAX,EAAc4M,CAAd,EAAiB0H,CAAjB,EAAqB;ACxErCi0H,AEvmCD,KAAIoZ,EFumCE/nH,KAAL,CAAW6pB,KEvmCK,IAAIi5F,CFumCpB,GAAwB,EAAxB,AEvmC0Bn8F,IAAV,CAAekhG,aAAf,EAA8BC,aAA9B,CAAjB;AFwmCCnZ,ADyEA,AGhrCDoZ,OFumCM/nH,ADyEA1rB,GAAL,CAEC,CC3ED,ADyEA,AGhrCU43B,CFumCC4rG,CD2EP,CAFJ,EAEO,CAFP,ECzEA,AD2EU1xI,CAFV,CGhrCD,CHmrCE,CC5EqB,ADyEtB,CGhrCuB,CHmrCnB,CAHJ,EAGO,AGnrCR,CHgrCC,EAGU4M,CAHV,EAIC,CAJD,EAII,CAJJ,EAIO,CAJP,EAIU0H,CAJV,EAKC,CALD,EAKI,CALJ,EAKO,CALP,EAKU,CALV,mGCzEA;AACAi0H,AEvmCDoZ,OFumCM/nH,KAAL,AEvmCUmM,CFumCC2rG,OAAX,IAAsB,CEvmCvB,GAA2B,IAA3B,yHFumCC;AACAnJ,ADgFA,AGvrCDoZ,OFumCM/nH,EDgFE,GChFP,AEvmCUpf,CFumCCk3H,ADgFX,IGvrCD,CAAiBxjI,EFumChB,CEvmCD,CAAqB,EFumCE,CEvmCvB,EAAyB,GAAzB,EAA6B,GAA7B,iHFumCC;AACAq6H,ADiFA,AGxrCD,EHklBiC,IGllB5Bp5F,CFumCCvV,GEvmCN,CAAU7qB,CFumCT,CAAW2iI,CEvmCZ,CAAciQ,KFumCb,IAAsB,CEvmCvB,4HFumCC;AACApZ,OAAK3uG,KAAL,CAAW83G,OAAX,IAAsB,yHAAtB;AACD,ADiFA52H,AGvrCA,KAAI8mI,WHurCW,GGvrCG,IAAIlF,GHurCI3hI,GGvrCEm7E,EHurCb,EAAmB,UGvrChB,CAA0B,CAA1B,EAA6B,CAA7B,EAAgC,CAAhC,CAAlB;AACA,KAAI2rD,cAAc,IAAInF,MAAMtlF,oBAAV,CAA+B;AFumClD,ADiFE,AGvrCAn9B,IFsmCEwmG,EDiFEnuH,GGvrCEuqI,CFsmCE,ADiFAp9I,KAAK8S,EGvrCC4qI,CHurCN,CAAUpiI,KAAV,AGxrCwC,CHwrChD;AChFAogF,ADgFA,AGtrCA/iD,MHsrC2B/oC,EChFrB,EDgFyB5P,KAAK+S,AGtrCxB,EFsmCG2oF,CDgFgB,CAAUpgF,AGxrCO,EFwmC1C,CAAc0M,EDgFW,CChFzB,ADgFN,EChFyBkqH,KAAnB,EAA0B;AAC9B,AEtmCFrxG,QFsmCMsxG,KEtmCK,CFsmCCD,EEzmCoC,OFymC3BhrH,QAAnB;AACA,ADgFF,AGtrCAuV,OHsrCKhuB,CChFC2jI,EDgFN,CAEC,CAFD,EAEI,CClFSD,ADgFb,CGtrCc,CHwrCP,CAFP,CChFiBlR,AE1mC+B,CH4rCtC,CAFV,EAGC,CAHD,EAGIpuH,CAHJ,EAGO,CAAEjD,CAHT,CChFa,CAAkB,ADmFnB,CAHZ,EAIC,CAJD,EChFa,ADoFTA,CCpFF,ADgFF,EAIOiD,CAJP,EAIU,CAJV,EAKC,CALD,EAKI,CALJ,EAKO,CALP,EAKU,CALV;AC/EEu/H,AEtmCF1xG,SFsmCO9+B,IAAL,AEtmCS,GFsmCG,AE3mCkC,EAA/B,CAAlB,OF2mCG;AACAwwI,ADuFF,AG7rCD,KAAIiQ,IFsmCIhQ,ADuFA,GCvFL,CDuFF,ECvFa,KEtmCK,IAAI4K,GFsmCpB,GEtmC0Bn8F,IAAV,CAAeqhG,WAAf,EAA4BC,WAA5B,CAAnB;AFumCGhQ,ADwFF,AG9rCDiQ,EHukBiC,OC+hBzBtW,IAAL,CEtmCU1lG,EFsmCEre,GAAZ,KEtmCH,GAA0B,IAA1B;AFumCGmqH,AEtmCHkQ,QFsmCO/P,MEtmCMhsG,aAAb,CFsmCG,CAAyB,CEtmCC,IAA7B,CFsmCG,EAAiC,CAAjC,EAAoC+6F,WAApC,CAAgD+Q,IAAhD;AACD,ADwFF72H,AG9rCA8mI,GF8lCS,WE9lCIrmI,EH8rCE,MG9rCf,CAAsB7O,CAAtB,EH8rC0BmO,CG9rCA,EAA1B,EH8rCe,EAAmB;ACvFjCi3H,AEtmCD8P,UFsmCS,IEtmCItnI,KFsmCKw3H,AEtmClB,CAAmB9jI,GAAnB,CAAuB,CFsmCd,CAAgB+jI,CEtmCzB,EAA2B,GAA3B,EAA+B,EFsmCtB,CEtmCT,CFsmCqCN,KAA5B,EAAmC;AACzC,ADwFF,AG9rCD,MH8rCKr/H,AG9rCA68B,EFsmCEyiG,EDwFEnyI,AG9rCT,CAAUsP,GFsmC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W;AFwmCnC,ADyHE,AGhuCD,IFumCGxP,EEvmCEvjG,GHguCG,CGhuCR,GHguCC,AGhuCW,IAAIutG,CFumCC,KEvmCKv3G,OFumCO,CEvmCjB,EAAZ;AFwmCC,AD0HA,AGjuCD,EHmhBiC,GGnhB7Bg9G,MFumCMzP,WAAT,GAAuB,AEvmCA,IAAIgK,MAAMrmG,WAAV,CAAsB,CAAtB,EAAyB,EAAzB,EAA6B,CAA7B,CAAxB;AFwmCG+uF,AEvmCH,KAAIgd,cFumCc,IAAf,EAAqB1P,AEvmCA,IAAIgK,MAAMtlF,CFumC/B,mBEvmCqB,CAA+B;AFwmCpD,AD0HH57C,AGjuCCye,SFumCO04G,AEvmCAkK,CHiuCC,OGjuCOU,GHiuCI9hI,IGluCmC,EFwmCpD,ED0HM,CC1HmBkL,CD0HEjL,QC1HOglH,ED0H5B,EAAiClmH,KAAjC,EAAyC,EC1HtB,CAAuB,KAAvB,CAAzB;AACAgnH,AEvmCFppF,WFumCSspF,IEvmCI,EFumCX,CAAc,CEzmCsC,IFymCjCiR,iBAAL,CAAuB/4G,KAArC,EAA4C;AAC1Cg2G,AD0HJ,AGjuCAtvG,OHiuCKxqB,MGjuCM,GAH2C,OF0mCjC,UD0HrB,CAAiC4F,MC3Ha,ID2H9C;ACzHIc,AD0HJ,AGjuCA0f,OHiuCK1hB,IC1HI,CAFqC,AD4H9C,CAAYA,GGjuCE,EHiuCd,CGruCsD;AF4mClD8B,AD0HJ,AGjuCA6jB,OHiuCKrmB,KC1HK,CAHoC,AEpmCnC,GAL2C,EHsuCtD,AGtuCuB,CHsuCL2B,AGtuCnB,QHsuCC;ACzHI00H,AEvmCL,KAAIkS,UFumCU,MAJiC,CEnmC1B,IAAI3F,MAAMn8F,IAAV,CAAe4hG,iBAAf,EAAkCC,iBAAlC,CAArB;AFwmCKpS,AD0HJ,AGjuCDqS,SHiuCQ,IAAP,CC1HY,EEvmCEv8G,IFkmCgC,MElmC/C,GAA4B,IAA5B;AFwmCKrK,AD2HJ,AGluCD4mH,EH0gBiC,aC6lBnB,CANiC,AEjmChCt8G,aAAf,GAA+B,IAA/B;AFwmCK6sG,AEvmCL,MAAKzjG,IAAL,CAAUpgC,GAAV,CAAcszI,SFumCS,KEvmCvB,gBFgmC+C;AAQ1CxP,AD2HLl3H,YAAW,MC3HM,MD2HM;ACnIwB,AE9lC/C,KF8lCG,AE9lCC2mI,eAAe,IAAIP,kBAAJ,EAAnB;AFwmCG1Z,AD2HF,AGluCD,MHkuCKzsH,EC3HEitH,OD2HO,IAAIr0H,GC3Hf,CAAmB,GD2HR,EC3Ham+H,AD2H1B,iBC3HE;AACA,AD2HF,AGluCD,MHkuCK92H,GC3HG82H,MD2HM,IAAIlgI,OC3Hf,AD2HW,CC3HYmnB,CD2HzB,IC3HE,CAA6Bne,QAA7B,GAAwC,OAAxC;AACA,AEvmCH6mI,SFumCQ9rE,KEvmCKrnC,IAAb,CFumCG,AEvmCe1zB,GFumCGkL,KEvmCrB,CAA2BzY,GFumCGwyH,AEvmC9B,CAA+B,CAAC,EAAhC,EAAoC,CAApC,EAAuC,CAAC,CAAxC,EFumCqB,CAAuB,KAAvB,CAAlB;AACAc,AD2HF,AGluCD,MAAKryF,GHkuCG,CGluCR,CFumCUuyF,AEvmCA3yH,GAAV,CAAcuzI,EFumCX,CAAc,AD2HA3mI,KC3HK66D,ID2Hd,CAAoB/6D,AGluCD0zB,IAA3B,CFumCiB,CAAgBvV,ED2HzB,EAA8Ble,CC3HnC,EAAqC,OD2HhC,EAA0ClB,KAA1C,EAAkD;AC1HrDiB,AEvmCL,CAnBD,eF0nCgB,OADyB;AAEnC00H,AD2HH,OAAIv8H,KAAK,GC3HG,ED2HE1D,IC7HwB,ID6HtC;AC1HG8/H,AEvmCN,cFumCc,MAH2B;AAInCv0G,AD2HH,AGluCH,IAAM8mH,GHkuCCzmI,KAAKF,GC3HG,CAJ0B,GD+HtB1N,GAAP,CAAY0F,GAAI,AGluCA,CHkuCJ,CAAZ,EAAqBA,GAAI,CAAJ,CAArB,AGluCN2uI,EHkuCoC3uI,GAAI,CAAJ,CAA9B,EAAwC9S,MAAxC,EAAT,EGluCyB,GAAW;AFwmCjC8xI,AD2HH,AGluCD,OHkuCK72H,KAAKH,OAAO1N,GAAP,CAAY0F,CC3HA,ED2HI,CAAJ,CAAZ,EAAqBA,GAAI,CAAJ,CAArB,EAA8BA,GAAI,CAAJ,CAA9B,EAAwC9S,MAAxC,EAAT,0BChIsC;AAMnC+xI,AD2HH,AGluCD,MAAK1jG,CHkuCAnzB,GGluCL,EHkuCUJ,CGluCE,IAAI8gI,CFumCA,CD2HCxuI,GAAP,CAAY0F,AGluCAuxB,GHkuCI,CAAJ,CAAZ,EAAqBvxB,CGluCnB,EHkuCuB,AGluCnC,CHkuC+B,CAArB,EAA8BA,GAAI,EAAJ,CAA9B,EAAyC9S,MAAzC,EAAT;ACjIsC,AEhmCxC,KFgmCG,CEhmCEquC,IAAL,CAAU30B,KAAV,CAAgBtM,GAAhB,CAAoB,GAApB,EAAyB,GAAzB,EAA8B,GAA9B;AFwmCGyY,AD2HD,aC3HUmsH,IAAT,CAAchS,WAAd,CAA0B,KAAK6R,iBAA/B;AACAhsH,AD2HD,AGluCD,OHkuCKtM,MC3HMy4H,AD2HA,IC3HT,CAAchS,AD2HAnnH,WC3Hd,AD2HS,CC3HiB,CD2H3B,IC3HgC68D,UAA/B;AACA,AD2HD,AGluCD,OHkuCMn8D,CC3HAu8D,KD2HM,CAAX,EC3Ha,AD2HE96D,IC3Hd,CD2HmB,CAAEA,EAAP;AC1HdusH,AEvmCF,KAAIma,GFumCEz+D,IAAJ,CAAS,KAAK4uD,MEvmCO,IAAI+J,MAAMxmD,CFumC/B,EAAiC,OAAjC,EAA0C,EEvmCrB,CAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,CAAvB,CFumCwD,AE9mCnB,CAOqB;AFwmCtDtf,AD2HHn7D,YC3HSs3H,AD2HA/yI,CAAT,GC3HG,AD2HU4T,GAAI,EAAJ,CAAb;AC1HE,AD2HF6H,AGluCD,KFqmCE,OD6HQ7O,CAAT,GAAagH,GAAI,EAAJ,CAAb;AC1HA,AD2HA6H,AGluCD,KAAIgnI,OHkuCMnuI,CAAT,GAAaV,GAAI,EAAJ,CAAb,EGluCsB,IAAI8oI,MAAMxlF,iBAAV,CAA4B;AFwmCnDouE,AEvmCErrG,SAAM4iH,KFumCInK,GEvmCIwK,OADmC,CFwmCnD,EAAyB,CAAC;AACxB9zG,AD2HD,AGluCDgP,SFumCO,MADmB,AEtmCb,IAFsC;AF0mCjDx4C,AD2HDic,AGluCDykB,UHkuCQzxB,CC3HC,EEvmCE,CHkuCV,CAAa,CGruCqC,GHquClD,CC3HiBmkI,IAAT,GAAgB;AACrB,AEvmCJ92G,UFumCQ06C,MEvmCM,EFumCE,CE3mCmC,GF2mC/C;AACA,AD2HH,AGluCDz2C,OHkuCKlkB,IC3HI02H,EEvmCE,EHkuCE,CGvuCsC,EAA5B,CHuuCN72H,AGvuCjB,EHuuCC,OC3HG,CAAuB8d,KAAvB,CAA6Bu2G,OAA7B,GAAuC,OAAvC;AACA,AD2HH,OAAIj0H,IC3HIs6D,ID2HI,IAAIz6D,EC3Hb,AD2HH,CC3HmB6d,KAAhB,CAAsBu2G,OAAtB,GAAgC,OAAhC;AACA,AD2HH,AGluCD,OHkuCKh0H,IC3HIq6D,ID2HI,IAAIx6D,EC3Hb,AD2HH,CC3HmB4d,KAAhB,CAAsB6B,OAAtB,GAAgC,CAAhC;AACA,AEvmCJ,KAAIklH,MFumCKnqE,OEvmCQ,GFumCb,CAAgB58C,CEvmCAn6B,IFumChB,CAAsBwzI,AEvmCDnzI,KAAL,CAAWL,KAAKiM,IFumChC,EEvmC2B,CFumCa,IEvmCC,CAAzB,CAApB,MFumCI;AACA,AD2HHmQ,AGluCD,UHkuCQ3L,CC3HCgjI,MAAL,CD2HH,CAAiB,CAAjB,KAAwBj3H,KAAxB;AC1HGulH,AD2HH3lH,AGluCD,MAAK,IHkuCG3L,AGluCC/N,GFumCEggI,CEvmCE,CAAb,EAAgBhgI,CFumCZ,AD2HH,CC3HgB,AD2HC,CAAjB,CGluCmBw+I,IHkuCK1kI,KAAxB,CC3H4B,AEvmC7B,EAAgC9Z,GAAhC,EAAoC;AFwmC9By0E,AD2HL/6D,AGluCC,UHkuCM3L,IC3HIyiI,ID2HX,CAAiB,CAAjB,KAAwB12H,KAAxB,CC3HK,CAAwB2d,KAAxB,CAA8B6B,OAA9B,GAAwC,CAAxC;AACAm7C,AEvmCJ,MAAIgqE,QFumCMpqE,AEvmCE,IAAIkmE,MFumCZ,AEvmCkBn8F,CFumCD3mB,GEvmCT,CAAe4oH,CFumCvB,CAAuB/mH,OAAvB,GAAiC,CAAjC,GEvmCQ,EAAiCgnH,gBAAjC,CAAZ;AFwmCI7rE,AD2HL/6D,AGluCC,UHkuCM3L,IC3HIsmE,ID2HX,CAAiB,CAAjB,IC3HK,CAAiB58C,AD2HE1d,KC3HnB,AD2HL,CC3H4B+2H,eAAvB,GAAyC,UAAzC;AACD,AD2HJp3H,AGluCC+kI,OFmmCE,CEnmCInlI,EHkuCAvL,MGluCN,CAAelQ,CHkuChB,AGluCC,CHkuCgB,CAAjB,CGluCoBmC,IHkuCI+Z,AGluCF,EAArB,GHkuCD;AC1HE,AD2HFL,AGluCC+kI,QAAMnlI,EHkuCAvL,MGluCN,CAAetD,CHkuChB,AGluCC,CHkuCgB,CAAjB,CGluCoBnN,IHkuCIyc,CGluCCxQ,IHkuCzB,EGluCoB,KAAc,EAAjC;AFylCwB,AExlCxBk1I,GFwlCuB,EAetB,GEvmCKnlI,QAAN,CAAenH,CAAf,GAAmB7U,KAAKiM,MAAL,KAAc,EAAjC;AFwmCA09B,AD2HDvtB,AGluCC+kI,QAAMv8H,CFumCD,CD2HCnU,KC5HL,CEtmCD,CAAeoE,CHkuChB,AGluCC,CHkuCgB,CAAjB,CGluCoB7U,IHkuCI0c,CGluCCzQ,IHkuCzB,EGluCoB,KAAcjM,KAAK4L,EAAnB,GAAsB,CAAzC;AFwmCAzL,AD2HDic,AGluCC+kI,QAAMv8H,EHkuCAnU,CC3HC,KEvmCP,CAAetD,CHkuChB,AGluCC,CHkuCgB,CC3HAmmI,AD2HjB,CGluCoBtzI,GFumCZ,CD2HgB0c,CGluCCzQ,CFumCD,GD2HxB,EGluCoB,KAAcjM,KAAK4L,EAAnB,GAAsB,CAAzC;AFwmCE,AD2HHwQ,AGluCC,UFumCM+6D,AD2HA1mE,QC3HQ,AD2Hf,CAAiB,EAAjB,CC3HG,ID2HsBiM,KAAzB;AC1HG,AEvmCF,MAAIqO,IFumCEuoH,GEvmCK,IFumCE,CEvmCGtzI,KAAKiM,GFumCCqnI,GEvmCN,CFumCH,GAAgB,CEvmCC,CAA9B;AFwmCIn8D,AD2HLl7D,AGluCCklI,QAAMpmI,KAAN,CFumCUg8D,AD2HAp6D,AGluCElO,GAAZ,CAAgBsc,IAAhB,EFumCI,AEvmCiBA,CFumCAoP,GEvmCrB,EFumCI,AEvmCsBpP,CFumCC2lH,GEvmC3B,CHkuCD,CAAkCt0H,EC3H7B,GAAiC,CD2HtC,KC3HK;AACA+6D,cAAM+7D,iBAAN,CAAwB/4G,KAAxB,CAA8Bu2G,OAA9B,GAAwC,MAAxC;AACA9H,AD2HL7tH,AGluCC,SHkuCKxa,CAAN,EC3HS4jH,CD2HC9nG,EAAV,GC3HK,CAAW86D,MAAM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EtmCA5zG,GHouCG,CGpuCR,GHouCC,AGpuCW,IAAIutG,MAAMv3G,QAAV,EAAZ;AFumCG,AD+HF,AGruCD,EH+biC,GG/b7B69G,MFsmCM,CAAC,CAAC/vE,EEtmCE,IAAIypE,CFsmCC/I,KEtmCKt9F,OFsmCrB,IEtmCW,CAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,CAAd;AFumCE,AEtmCF,GFomCC,CAEE,CEtmCC4sG,MFsmCMhzI,CAAP,EAAU,CEtmCC,IAAIysI,MAAMtlF,oBAAV,CAA+B;AFumC1C,AD+HHx6C,AGruCCqd,SAAM4iH,EFsmCG,KAAP,CEtmCYiB,EHquCG,IGtuC2B,MHsuChBxhI,IAAX,EAAiBC,KAAjB,EAAwBC,GAAxB,EAA6BC,MAA7B,EAAqCC,IAArC,EAA2CC,GAA3C,EAAiD;AC9HjE,AEtmCAy7B,eAAY,IAF+B;AFymC7C,AD+HC,AGruCC9X,CFgmC0B,EAA7B,GDqIM1sB,KAAK,EGruCG,GHquCE1D,AGxuC8B,QHwuC5C;AC9HF,AD+HE,AGruCCgsB,IFsmCC03G,ED+HE5kI,IAAI,MGruCO,CHquCCuN,EGzuC4B,CF0mC1B,KAAK,AD+HCD,CC/H1B,GD+HU,CAAR;AC9HF,AD+HE,AGruCC6jB,IFsmCC0zG,ED+HEh3H,IAAI,GGruCI,GALgC,CH0uC5BL,CG1uCH,CAAd,GF2mCqB,CD+HEC,GC/HxB,GD+HU,CAAR;AC9HF,AD+HE,AGruCD,IFsmCGq3H,CEtmCC6M,CHquCC7jI,IAAI,OAAQH,CGruCAld,KHquCMid,AGruCD5c,EFsmCE,ED+Hf,CAAR,AGruCgB,CAAWL,CFsmCC,CAA9B,GEtmCkCiM,MAAL,KAAc,CAAzB,CAAjB;AFumCD,AEtmCC,IFsmCGqnI,OAAO,KAAX;AACA,AD+HE,AGruCD,IFsmCGgB,ED+HE/zI,AGruCA,IHquCI,AGruCAmC,CHquCEoa,GGruCE,CAAb,EAAgBpa,EFsmCE,AD+HCma,EC/HpB,AEtmCqBqkI,EHquCX,IAAmB3xI,CAA3B,GGruCD,EAAgC7M,GAAhC,EAAoC;AFumCrC,AD+HE,AGruCD,IFsmCG6xI,ED+HEpnI,AGruCDg0I,IFsmCK,AD+HA,CAAEpkI,GGruCC,GHquCKC,CGruCDigI,CFsmCE1I,GAAT,CAAap1E,AD+Hb,CGruCare,GFsmCb,AD+HmB1jC,CAA3B,AGruCW,CFsmCgB,AEtmCDmmI,OAAf,EAAwBC,OAAxB,CAAZ;AFumCC,AD+HA,AGruCD,MFsmCKrsE,AD+HAtiE,IAAI,CAAEqI,GC/HE,GD+HID,CC/HhB,GD+HQ,IAAiBI,CAAzB;AC9HA,AEtmCD8jI,MFsmCKl7D,EEtmCCjqE,OFsmCQmjD,CEtmCd,CAAe5+D,CAAf,GAAmBmC,EFsmCG,EAArB,AEtmCoB,CAArB;AFumCC,AD+HAyR,AGruCDgtI,KHquCK,CAAJ,CC/HKpqE,CEtmCA/6D,EHquCK,IAAIzM,CAAd,CAAiB4E,AGruClB,CFsmCC,AEtmCchH,CAAf,CHquCsB,CC/HH+Z,AD+HD,CGruCClnB,GHquCS,CAAV,CAAamU,AGruCPlI,GFsmCIg1H,AD+HO,CAAJ,EGruCZ,EHquCsB,CAAV,CAAa9sH,CGruCX,CAAjC,CHquCgD,EAAJ,CC/HzB,CAAuB,ED+Ha,CAAE5T,CAAb,CC/HzB,CAAlB;AACA,AD+HA4T,AGruCDgtI,KHquCK,CAAJ,CC/HK3M,CEtmCAx4H,EHquCK,CC/HV,AD+HA,CAAa7H,EC/HD+S,CD+HK,CAAJ,AGruCd,CAAerS,CAAf,EHquCwB,CGruCL7U,EFsmCGihI,CD+HM7jH,CAAd,CAAiBjJ,AGruCPlI,GHquCW,CAAJ,EGruCZ,EHquCsB,CAAV,CC/HlB,AD+H+BkI,CC/HR,AEtmCH,EHquCe,AGruChD,EFsmCa,AD+H+B,CC/H3C,GD+HsD,CAAEhH,CAAb;AC9H3C,AD+HAgH,AGruCDgtI,KHquCK,CAAJ,CC/HKpqE,CEtmCAnyD,EHquCK,CAAV,CAAazQ,GAAI,CAAJ,AGruCd,CFsmCC,AEtmCcU,CFsmCEwsH,AEtmCjB,EHquCwB,CAAV,AGruCKrhI,CHquCQmU,GAAI,CGruCPlI,CHquCG,EC/H1B,CAA4B,CD+HS,CAAE,AGruCrB,CHquCmB,EC/HJuoI,CD+HUn3H,CAAjB,AGruCMrd,CHquCcmU,CC/H9C,ED+HkD,CGruCbvI,CHquCS,CGruC5B,GHquCuC,AGruCjB,CHquCmBiJ,AGruC5D,CHquC+C;AC9H9C+zH,AD+HAz0H,AGruCDgtI,KHquCK,CC/HAlW,AD+HJ,EGruCKrmH,EHquCK,CAAV,CAAazQ,EC/Hb,CAAa,AD+HI,CAAJ,AGruCd,CAAehH,CAAf,EFsmCmB4pE,AD+HK,CAAV,AGruCK/2E,CHquCQmU,GAAI,CGruCPlI,CHquCG,GC/H1B,CD+HqC,CC/HP4nI,AD+HJ,AGruCR,CHquCsB1/H,GAAI,CGruCZnU,CHquCQ,IAAW,AGruCd4L,CHquCG,CGruCtB,CFsmClB,EEtmCwC,CAAzC;AFumCC,AEtmCD,OFsmCM6oI,SAAL,GAAiB,EAAjB;AACA,AD+HA,AGruCD,MAAI1pH,CFsmCE2pH,ED+HE,IAAP,AGruCU,IAAI10I,GFsmCd,EEtmCmBiM,CFsmCE,EAArB,GEtmCc,KAAc,CAA7B;AFumCC,ADgIA,AGtuCDk1I,EH4aiC,KC0rB3BxM,CEtmCA55H,KAAN,CAAYtM,GAAZ,CAAgBsc,IAAhB,EAAqBA,EFsmCpB,EEtmCD,CFsmC4B,CEtmCFA,CFsmCzB,GEtmCD;AFumCC,AEtmCDo2H,OFsmCMvM,CEtmCAvuG,UAAN,GAAmB,IAAnB,oBFsmCC,GAA8C,EAA9C;AACA,ADgIDl0B,AGtuCAgvI,OFsmCMtM,CEtmCAvuG,CHsuCE,SChIP,CDgIkBlqB,EChIC,AEtmCpB,EFsmCC,CEtmCqB,CHsuCd,EAAoB,CGtuC5B;AFumCC6pE,AEtmCD,OAAKv2C,IFsmCKqyF,AEtmCV,CAAUzyH,GAAV,CAAc6xI,EFsmCG9e,GEtmCjB,KFsmCU,CAAgBp8C,MAAhB,EAAwB;AAC/B6uD,ADgIF,AGtuCA,MHsuCI3gI,KAAK,KChIK,ADgIA1D,KCjImB,GDiIjC;AC/HEskI,ADgIF,AGtuCD,CA1BD,KHgwCM1gI,KAAK+H,IChII,GDgIG3L,CClIiB,ODkIjC;AC/HE2W,WAAOmtH,IAAIS;AAHoB,ADoIjC,AGruCF,GFimCW,CAAT,GDoIM,IAAItyI,IAAI,CAAd,EAAiBA,IAAI,EAArB,EAAyBA,GAAzB,EAAgC;AC/HhCujF,WAAS87C,OAAOM,QAAP,CAAgBp8C,MAAhB,EAAwB;AAC/BgvD,ADgID,AGruCH,OHquCQ9gI,EGruCCsvI,CHquCG/gJ,CAAJ,IChIOujF,EDgIK5xE,GAAI3R,CAAJ,CChIEqyI,ADgInB,EAA2B,CGruC9B,CAA0BrpC,IAA1B,CFomCmC,ADiIE,CGruCLC,EAAhC,EHquC8B,AGruCM+3C,KAApC,EAA2C;AFsmCvCxO,ADiID,AGtuCC,QAAO,CAACl1I,KFqmCEimF,AErmCGh6E,MAAL,CFqmCS8oI,KErmCQppC,KAAKD,IAAtB,IAA8BA,IAA/B,EAAqCi2B,OAArC,CAA6C+hB,KAA7C,IAAsD,CAA7D;AFmmC+B,AElmC/B,GFkmCO,CAAT;AAIA,ADiIA,AGtuCD,MFqmCK,CAAC3hB,EDiIE,IAAP,CCjIYK,WAAP,CAAmBn8C,OAAOyV,IAA1B,CAAL,EAAsC;AACpC,ADkIF,EAz0BgC,MCusB1BzV,OAAOkvD,MAAX,EAAmB;AACjBlvD,AEpmCN,aFomCayV,IAAP,CAAYy5C,MAAZ,GAAqBlvD,OAAOkvD,MAA5B;AACD,ADkIJ/iI,AGtuCD,IAAMuxI,QHsuCM,MGtuCQ,IHsuCGnhJ,KAAX,AGtuCNmhJ,EHsuCwBtxI,MAAlB,EAA2B,CGtuCnB,GAAU;AFqmC3B,AEpmCF,GFgmCC,GEhmCIq9B,GFomCG,CEpmCR,GAAY,IAAIutG,MAAMv3G,QAAV,EAAZ;AFqmCGugD,ADkIF,MAAK5zE,KClIIqpF,IAAP,EDkIc37F,CClIA,EAAEo1I,MDkIlB,EClI0BnB,ADkIE3hI,SAAS,CAAT,iBClIZ,EAAd;AACD,AEpmCH;AFqmCE,ADkIA,AGtuCD2sI,MFomCKjd,CDkIE,GGtuCE,CHsuCEr/H,EClIC0/H,CEpmCCqe,CHsuCE,CAAd,EAAiB/9I,IAAI,EClIjB,ADkIJ,CClIuBujF,CDkIEvjF,AGtuCjB,EAAT,CHsuCC,EAAgC,CClIFijC,MAA1B,KAAqCsgD,OAAOivD,QAAhD,EAA0D;AACxDZ,AEpmCH0K,QAAOtvG,IAAP,CAAY1zB,IFomCI/Z,IAAb,AEpmCH,CFomCqB,AEpmCAkL,CAArB,GFomCG,AEpmCqB,CAAxB,CAL6B,CAKF;AFqmCzB,ADkIA,AGtuCF6xI,QHsuCOvuI,AGtuCAi/B,IAAP,CAAY1zB,GHsuCV,CAAetZ,CAAf,GGtuCF,CHsuCuBF,AGtuCFqS,CAArB,GAAwB,CAAxB,CHsuC8BnS,AG5uCD,CAMF,GHsuCO2P,MAAX,CAArB;ACjID4zE,ADmIC,AGvuCF,SFomCQgvD,SAAP,GAAmBlT,OAAOK,WAAP,CAAmBn8C,OAAOtgD,MAA1B,KAAqCsgD,OAAOgvD,SAA/D;AACA,AEpmCD,MFomCKhvD,AEpmCAv2C,IAAL,CAAUpgC,EFomCEylI,CEpmCZ,CAAciK,OFomCT,AEpmCgBtvG,IFomCIqyF,AEpmCzB,OFomCgCK,WAAP,CAAmBn8C,OAAOmvD,UAA1B,CAAxB,EAA+D;AAC7DnvD,ADmIF,SAAO,ECnIEmvD,EDmIT,QCnIE,GAAoB,IAApB;AACD,ADoID,AGxuCF,EHiZkC;ACotBhC,MAAIC,kBAAkBpB,0BAA0BC,aAAaoB,OAAb,CAAqBC,oBAAoB,IAApB,EAA0B,SAA1B,CAArB,MAA+D,MAA/G;AACA,ADoIDjjI,AGxuCA+sI,MFomCK7J,IDoII,CGxuCC,IAAIgM,KHwuCMh/I,KAAX,ECpIiB,ADoIC6P,EGxuCjB,EAAV,CFomC+B,CAA9B,ADoIQ,EAA2B;ACnInC3R,AEpmCD2+I,SFomCQ7wI,AEpmCAkhC,IAAR,CAAa1zB,QAAb,CAAsB7O,CAAtB,CFomCC,CAAwB,CEpmCC,GFomCzB,AEpmCD,EFqmCC;AACEw4B,ADmIF,AGxuCDljB,MHwuCMjgB,EGxuCC+U,IFqmCI,EErmCX,CAAc8nI,CHwuCEt/I,OGxuCM2vC,EHwuCrB,EAA2BltC,AGxuCd,CAAawZ,OHwuCS,CGxuCpC,CHwuC4B;AClIvBpb,ADmIJ,MAAKyR,KCnII,MDmIOtS,GCnIEwnI,MAAT,ADmIT,EAA4Bl1H,CCnID,QDmIU,CAAT;AClItB,AErmCR,eFqmCe4zE,OAAOtgD,MAAd;AACD,ADmIL,MAAIxxB,KAAK,KAAK1D,QAAd;ACtIU,AEjmCZ,KFgmCE,CEhmCG,IAAI/N,IAAI,CAAb,EAAgBA,IAAI,GAApB,EAAyBA,GAAzB,EAA8B;AFsmC1B0yI,ADmIF5yI,AGxuCM,MAAIohJ,EHwuCHvxI,MAAP,ECnIc,CErmCO,CHwuCH8B,GAAI,AGxuCGqtI,CHwuCP,CAAlB,YGxuCqB,EAAf;AFsmCF5gJ,ADmIJ4B,AGxuCM,MAAIqhJ,EHwuCHxxI,GCnIE,MDmIO,CAAhB,AGxuCsB,EFqmCJk1H,EDmIIpzH,AGxuCI4tI,GHwuCA,CCnIjB,ADmIa,CAAtB,ECnI2B,QErmCL,EAAhB;AFsmCA,ADmINv/I,AGxuCM,MAAIshJ,EHwuCHzxI,OCnIM4zE,EDmIG,CAAhB,AGxuCsB,IFqmCFmvD,ADmIEjhI,AGxuCIsuI,GHwuCA,CAAJ,CAAtB,KCnIM,KErmCgB,EAAhB;AFsmCD,ADmILjgJ,AGxuCM,MAAIuhJ,EHwuCH1xI,SAAS,CAAhB,CGxuCuB,GHwuCD8B,CGxuCK8uI,EHwuCD,CAAJ,CAAtB,YGxuCuB,EAAjB;AFkmCQ,AEjmCR,KF2lCN,CE3lCUe,aAAa,CAACJ,QAAD,EAAWC,SAAX,EAAsBC,SAAtB,EAAiCC,UAAjC,CAAjB;AFsmCJhP,ADmIFvyI,AGxuCM08I,QHwuCC7sI,EGxuCO2xI,KFqmCD,EDmIG,CAAhB,GGxuCyBthJ,CHwuCHyR,GAAI,AGxuCG6vI,CHwuCP,CAAtB,SGxuCwC3iJ,MAA1B,CAAR;AFsmCFT,ADmIJ4B,QAAO6P,GCnIE,MDmIO,CAAhB,ECnIkBk1H,EDmIIpzH,GAAI,CCnIjB,ADmIa,CAAtB,ECnI2B;AACrB,ADmIN3R,AGxuCM,QHwuCC6P,OCnIM4zE,EDmIG,CAAhB,ICnIoB8uD,ADmIE5gI,GAAI,CAAJ,CAAtB,ICnIM;AACD,ADmIL3R,AGxuCM,MAAIyhJ,EHwuCH5xI,IGxuCSoxI,KHwuCA,CAAhB,IAAsBtvI,GAAI,CAAJ,CAAtB,EGxuCiC,CAAC,GAAlB,EAAuB,GAAvB,EAA4B,CAA5B,CAAV;AFkmCO,AEjmCP,KFslCN,CEtlCU+vI,OAAOT,iBAAiB,CAAC,GAAlB,EAAuB,GAAvB,EAA4B,CAA5B,CAAX;AFsmCJ3O,ADmIFtyI,QAAO6P,QCnIO,CDmIE,CAAhB,IAAsB8B,GAAI,CAAJ,CAAtB;AClIIvT,ADmIJ4B,AGxuCM,MAAI2hJ,EHwuCH9xI,GCnIE,IErmCU4xI,EHwuCH,CAAhB,ECnIkB1c,EDmIIpzH,AGxuCInU,GHwuCA,CCnIjB,ADmIa,CAAtB,AGxuC+B4L,EFqmCJ,AErmCD,GAAU,GAAjB,CAAb;AFsmCA,ADmINpJ,AGxuCM,MAAI4hJ,EHwuCH/xI,OCnIM4zE,CErmCO,CHwuCJ,AGxuCKi+D,EHwuCrB,EGxuCoB,CFqmCApP,CDmIG3gI,EGxuCMnU,CHwuCF,EAAJ,CAAvB,CGxuCkC4L,EFqmC5B,AErmCuB,GAAU,GAAnB,CAAd;AFsmCD,ADmILpJ,QAAO6P,SAAS,EAAhB,IAAuB8B,GAAI,EAAJ,CAAvB;ACtIc,AEjmCR+qI,KFilCN,GEjlCYxvG,IAAN,CAAW1zB,QAAX,CAAoBzb,CAApB,GAAwB,MAAMP,KAAK8S,GAAL,CAASqxI,MAAT,CAAN,GAAyBnkJ,KAAK8S,GAAL,CAASsxI,OAAT,CAAjD;AFsmCJjP,ADmIF3yI,AGxuCM08I,QHwuCC7sI,AGxuCKq9B,IFqmCF,AErmCJ,CAAW1zB,IHwuCD,EAAhB,EGxuCM,CAAoB7O,CHwuCHgH,AGxuCjB,GHwuCqB,AGxuCG,EHwuCP,CAAvB,GGxuCoCnU,KAAK+S,GAAL,CAASoxI,MAAT,CAA9B;AFsmCFvjJ,ADmIJ4B,AGxuCM08I,QHwuCC7sI,AGxuCKq9B,GFqmCH,CErmCH,CAAW1zB,IHwuCD,EAAhB,CCnIkBurH,CErmCZ,CAAoB1yH,CHwuCHV,AGxuCjB,GFqmCG,ADmIkB,AGxuCG,EHwuCP,CCnII,ADmI3B,GGxuCoCnU,KAAK8S,GAAL,CAASqxI,MAAT,CAAN,GAAyBnkJ,KAAK+S,GAAL,CAASqxI,OAAT,CAAjD;AFsmCA,ADmIN5hJ,QAAO6P,ICnIG8kE,KDmIM,CCnIAxxC,CDmIhB,IAAuBxxB,CCnIjB,EAAkB,ADmIG,EAAJ,CAAvB;AClIQ,ADmIR3R,AGxuCM08I,QHwuCC7sI,AGxuCKq9B,IAAN,CAAW9qB,IFqmCFuyD,ADmIC,EAAhB,EGxuCM,CAAoB1oE,CFqmCLu/G,ADmIE75G,EGxuCjB,CHwuCqB,AGxuCG,EHwuCP,CAAvB,AGxuCM,CFqmCS,CErmCoB,CAACiwI,CFqmCLjP,MAAvB,AErmCF,EAAuCgP,SAASnkJ,KAAK4L,EAAL,GAAU,GAA1D;AFsmCC;AACD,ADmIN,AGxuCM,OAAK8jC,EHwuCJltC,EGxuCD,CAAU8M,EHwuChB,CCnIa22E,AErmCP,CAAci5D,MFqmCAxjD,AErmCMhsD,IFqmCb,AErmCP,CFqmCmBylG,MAAnB;AACD,ADoIL,AGzuCG,OF+lCO;AAON1mI,WAAK,SAASg5H,MAAT,CAAgBp4H,CAAhB,EAAmB;AACtB,ADpvB0B,AGhXlC,CHgXA,WCovBY8nE,MAAMxxC,MAAV,EAAkB;AAChBwxC,AEpmCT,KAAIktE,WFomCWr2B,EEpmCE,GAAjB,EFomCS,GAAgBmnB,MAAhB,GAAyB9lI,CAAzB;AACD,ADoIT,AGxuCC,MAAK,GFkmCE,CElmCE3M,KFomCK,AEpmCD,CAAb,EAAgBA,KAAI2hJ,UAApB,EAAgC3hJ,IAAhC,EAAqC;AFqmC5BujF,AEpmCRk5D,UAAQ,IAAImE,GFomCG5nD,IAAP,CAAYy5C,EEpmCZ,EAAR,EFomCQ,GAAqB9lI,CAArB;AACD,AEpmCP,MAAIiM,QAAQ,CAACtb,KAAKiM,MAAL,KAAgB,GAAjB,IAAsB,CAAtB,GAAwBjM,KAAK4L,EAAzC;AFqmCM6pI,AEpmCN,MAAI1xH,MAAM,CAAC/jB,KAAKiM,MAAL,KFomCgB,AEpmCA,GAAjB,CFomCJ,GEpmC0B,CAAtB,GAAwBjM,KAAK4L,EAAvC;AFqmCMurE,AEpmCNgoE,QAAMzvG,IAAN,CAAW1zB,CFomCC05H,MAAN,CEpmCN,CAAoBn1I,CAApB,GAAwB,MAAMP,KAAK+S,GAAL,CAASuI,KAAT,CAAN,GAAuBtb,KAAK8S,GAAL,CAASiR,GAAT,CAA/C;AFqmCK,AEpmCLo7H,QAAMzvG,IAAN,CAAW1zB,QAAX,CAAoB7O,CAApB,GAAyB,MAAMnN,KAAK+S,GAAL,CAASuI,KAAT,CAAN,GAAuBtb,KAAK+S,GAAL,CAASgR,GAAT,CAAhD;AFqlCU,AEplCVo7H,KF+jCA,GE/jCMzvG,IAAN,CAAW1zB,QAAX,CAAoBnH,CAApB,GAAyB,MAAM7U,KAAK8S,GAAL,CAASwI,KAAT,CAAN,GAAwB,CAAjD;AFqmCE8L,ADoIJ,AGxuCE,OAAKsoB,EHwuCEpyB,ECpIE,AEpmCT,CAAUhO,GAAV,CAAc6vI,GHwuChB,CAAqB5+I,CAArB,CGxuCsBmvC,CHwuCEviC,CAAxB,EAA2B0H,AGxuCzB,CHwuCF,EAA8BtF,CAA9B,EAAkC;ACnI5B3O,AEpmCJ,WFomCS,SAAS2mI,MAAT,GAAkB;AACrB,ADoIP,AGxuCA,CAtDD,KH8xCMhxH,EAAL,GAAUhW,ICpII0lF,CDoIC,CAAf,KCpIqB7+D,KAAd;AACD,ADoIN,MAAK5Q,CCvIK,CDuIV,GAAUrJ,KAAK,CAAf;ACnIKsB,ADoIL,AGxuCD,MHwuCMgI,EAAL,GCpIU,ADoIA5B,KAAK,CAAf,GCpImB4yH,MAAT,CAAgBp4H,CAAhB,EAAmB;AACtB42E,ADoIP,AGxuCD,IAAMq+D,EHwuCA5tI,EAAL,GAAYnH,ICpIE6X,CEpmCG,CHwuCCrnB,GCpIX,GAAesP,CAAf,CEpmCFi1I,CHwuCK,GAAsB/0I,CAAtB,GAA0B,CAApC,AGxuCiB,GAAW;AFqmCrBomI,ADqIP,AGzuCA,MAAKjmG,IAAL,GAAY,IFomCIynC,AEpmCA8lE,KFomCT,CEpmCev3G,CFomCCr2B,CAAhB,MEpmCK,EAAZ;AFqmCM,AEpmCN;AF6lCU,AD6IX3O,KCnLE,EDmLKK,MAAP,CAAeuc,UAAf,EAA2B;ACpIvBsI,AEpmCC,UFomCK;AACJhlB,ADqIL2c,AGzuCI,KAAI2b,GHyuCD,GCrIG,KEpmCS,EHyuCD1b,ECrIC+pH,ADqIZ,EAAe9pH,EAAf,ECrIG,ADqIgBC,EAAnB,CCrIqB,CDqIEtQ,CAAvB,EAA2B;ACpI3B,AEpmCC6b,WAAS,EAAErnB,EFomCLqkF,IEpmCW,GFomCJrgE,AEpmCJ,EAAazlB,EFomCvB,KEpmC8B88I,MAAMjd,UAAN,CAAiBniC,WAAjB,CAA6B0mD,oBAA7B,CAApB;AFqmCX,ADqIL,AG3uCkB,EAAf,KFmmCK,EDwID7mI,GAAGtO,IAAH,CAASoO,EAAT,EAAcD,KAAd,CAAqBE,EAArB,EAAyBrQ,CAAzB,CAAP;ACpIIqB,ADsIJ,AG1uCG,EHouCsB,GGpuClB+1I,MFomCE,QEpmCY,CFomCH/c,GEpmCOwV,GFomChB,CAAgB5tI,CAAhB,CEpmCsBisC,CFomCH,aEpmCP,CAA0B;AFqmCzC2qC,AEpmCC/sD,YAAUA,GFomCJtT,IAAP,CErmCyC,EFqmC3BvW,CAAd;AACA,ADsIPsO,AG1uCQyiB,YFomCGw1G,ADsIA,IG1uCW1uH,MH0uCAtJ,ECtIf,CDsII,AG1uCoBq+H,CFomCN,CDsIEp+H,SAAhB,EAA2BC,CG1uChB,CAAwB,EH0uCnC,EAAiCC,QG1uCtB,EH0uCX,AG1uCiD0mI,EH0uCJzmI,IAA7C,EAAmDC,GG5uCd,EAEyBoiB,KH0uC9D,EAA+DjzB,CAA/D,EAAmE,MG1uCW8Z,SAAS+0H,cAAT,CAAwB,cAAxB,EAAwCwI,WAFjF;AFumCvC7O,AEpmCLl9F,QAAMukG,MAAMt5I,SFomCMw9H,SAAb,GAAyBl7C,OAAOrgE,IAAhC;AACD,ADsIP,AG9uC+C,EAA1B,CAAlB;AFymCE,AEpmCF;AF2lCK,ADgJR,AG1uCG,KF2iCH,AE3iCO8+H,CH0uCHxmI,KAAKJ,GG1uCO,EH0uCDC,EG1uCKk/H,MAAMn8F,IAAV,CH0uCY,AG1uCG,CH0uCtB,CAAT,EG1uCmCm8F,MAAMxmD,cAAV,CAAyB,IAAzB,EAA+B,EAA/B,EAAmC,EAAnC,CAAf,EAAuD+tD,WAAvD,CAAb;AFqmCD56D,ADqIF,AGzuCG86D,MH0uCFvmI,EG1uCSpD,GH0uCJ+C,CCtII,CEpmCP,CAAarP,EH0uCJsP,CG1uCT,CAAiB,CAAC,CAAlB,EAAqB,CAArB,EAAwB,CAAxB,GH0uCsB,CAAnB,CADN;ACpIInd,ADoIJ,AGxuCG8jJ,MH0uCFtmI,EG1uCSwG,GFomCD,ADsIH9G,KAAMC,AG1uCT,CAAgBvI,GFomCD+xH,EEpmCf,GAAwB,CFomClB,GAAkB,ADsIF,CAAnB,AG1uCH,CHwuCH;ACnIM,ADmIN,AGvuCGmd,MH0uCFrmI,EG1uCS0+G,GH0uCJj/G,ICtIOmoE,CDsIDloE,GG1uCT,GFomCiB6rE,AEpmCI,KAArB,CFomCG,CDsImB,CAAnB,CAHN;AClIK,ADkIL,AGtuCG,MH2uCFtrE,AG3uCOoxB,CFimCE,GEjmCP,CH2uCG1xB,AG3uCO1O,GAAV,CAAco1I,CH2uCLzmI,KG3uCT,QH2uCsB,CAAnB,CALN;ACjIIxP,ADiIJ,AGruCD,CAnBD,KH8vCG8P,KCvIQ,ADuIHP,KAAMC,ICvIMwpH,MAAT,CAAgBp4H,CAAhB,CDuIgB,CCvIG,ADuItB,CANN;AChIM42E,ADgIN,MAOCznE,KAAKR,ICvIO4rE,CDuID3rE,KCvIN,GAAgB5O,CAAhB,IDuImB,CAAnB,CAPN;AC/HM,AD+HN,AGnuCF,MH2uCGoP,KAAKT,CCvIIioE,IDuIEhoE,GCvIK2rE,MAAX,EAAmB,EDuIA,CAAnB,CARN;AC9HQg/C,AEpmCV,IAAM+b,UFomCQ1Z,OEpmCS,CFomCb,CAAa9zD,MAAMq9D,CEpmCvBmQ,GFomCI,EAAyBpQ,IAAIsB,KEpmChB,GAAU,IFomCvB;AACD,ADuIP,AG3uCD,MH2uCMx3H,AG3uCDqxB,GFkmCE,CElmCP,GH2uCajxB,AG3uCD,EFomCE,ADuIR,EG3uCUw+H,EH2uCG/+H,IG3uCGwnB,GH2uCIpnB,EAApB,GG3uCM,CH2uCoBH,CG3uChC,MH2uCuCI,EAAjC,IAAuCH,OAAOI,EAAnD,EAAwD;ACtIhDoqH,AEpmCT,KAAIyY,SFomCSlW,KEpmCK,GAAlB,GFomCS,CAAgBh0D,MAAMq9D,IAAtB,EAA4BD,IAAIsB,YAAhC;AACD,ADuIN,AG3uCF,MAAK,CH2uCCjmI,GG3uCGlN,CH2uCC,GG3uCG,CH2uCC0K,AG3uCd,CH2uCE,CG3uCc1K,IAAI2+I,WAApB,EAAiC3+I,GAAjC,EAAsC;AFqmC/B,ADsIL,AG1uCDu8I,OH4uCEnsI,IG5uCO,EFomCEgjI,ADwIH53H,EG5uCK+iI,GH4uCA3iI,EAAL,CCxIF,EDwIYH,GG5uCT,EH4uCcI,AG5uCvB,EH4uCQ,GAAoBH,KAAKI,EAAzB,GAA8BH,KAAKI,EAF1C;ACrIK,ADqIL,AGzuCD,MAAInD,CH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gC,OAAb,CAAqBX,oBAAoBp+D,KAApB,EAA2B,SAA3B,CAArB,EAA4D2zD,IAA5D;AACD,AD0IL,AG9uCH,MAAK,EH8uCEv1H,EG9uCE7S,EH8uCE,EG9uCA,CAAX,CH8uCe1C,CG9uCD0C,IH8uCMyO,AG9uCJxO,CAAhB,EAAmBD,CH8uCJ,CAAWwb,CG9uC1B,EAAuB,EH8uCQA,EAAL,GAAUC,KAAKA,EAAf,GAAoBC,KAAKA,EAAzB,GAA8BC,KAAKA,EAA9C,CAAZ;ACzIG,AEpmCL;AFslCmB,ADyJjBH,AG9uCF,MAAI7O,IH8uCIkG,AG9uCAmrI,CH8uCN,GG9uCU10H,QAAJ,CAAatpB,CAAb,CAAR;AFqgCA,AD0OEyb,GC3OF,OD2OQ5I,CAAN;ACzIF,AD0IE6I,AG9uCF,MFomCI2jH,ID0IIxsH,CAAN,EC1IS6sH,WAAP,CAAmBn8C,OAAOtgD,MAA1B,CAAJ,EAAuC;AACrCsgD,AD0IA5nE,AG9uCF,OAAKwmI,GH8uCGtvI,CC1ICq0E,AD0IP,EG9uCF,CAAY3nF,GFomCV,CEpmCF,CAAiB,CFomCC,CEpmCAkL,GAAEkC,CFomClB,CEpmCoBlC,CAAL;AFqmCfy7H,AD2IA,AG/uCOroI,MAAE8O,EFomCL47H,AEpmCO1qI,CADI,OFqmCf,CAAa,KAAKw2E,UAAlB,EAA8Bw9D,IAAI4B,UAAlC;AACAvN,AD4ID,AGhvCQ/zH,MAAExF,EFomCLw5H,AEpmCOh0H,CAFI,aFsmCf,CAAmB,KAAKkiE,UAAxB,EAAoC,KAApC;AACA,AEpmCO,QFomCHk9D,sBAAJ,EAA4B;AAC1B,AD4IJr2H,AGhvCSknI,MHgvCJjnI,EGhvCQ7d,EFomCLq1I,GEpmCUppI,EHgvClB,IAAmBiS,AGhvCN,EHgvCb,GGhvC2Ble,CFomCvB,EAAqB,EEpmCO4L,EAAnB,GAAsB,CAJlB;AFymCXurE,AD4INv5D,AGhvCS,MHgvCJC,QC5IOw3H,ID4IK,CAAjB,IAAuBl3H,EAAvB,IC5IM,GAAwB,IAAxB;AACA,AD4INP,AGhvCSmnI,MHgvCJlnI,EGhvCQ,IFomCHu4H,CEpmCQp2I,KHgvCD,AGhvCMiM,CHgvCvB,IC5IqBioI,AD4IE91H,CGhvCL,CHgvClB,IGhvCgC,OFomCEk3H,OAAb,CAAqBC,oBAAoB,IAApB,EAA0B,KAA1B,CAArB,CAAf;AACA,AD4IN33H,AGvvCiB,GAAjB,GHuvCKC,MC5IKu4H,MD4IO,CAAjB,CC5IM,EAAc,CD4IG/3H,EAAvB;AC3IQ4nE,AD6IR,AGjvCA,iBFomCeyV,IAAP,GAAc3yD,KAAKc,KAAL,CAAWusG,QAAX,CAAd;AACD,AEpmCR,KAAI71C,MAAM,IAAI08C,MAAMxlF,iBAAV,CAA4B;AFqmChC,ADuEoB,AG3qCzBj9B,CH2qCF,QG3qCQ4iH,QAAQgB,MADuB;AFsmClC,AEpmCHzlG,eAAa;AFqmCX,AD6IJj4C,AGpvCuC,EAA5B,CAAV,IHovCM8N,EC7IEunI,aAAL,CD6IJ,CAAyBz4H,CC7IA4J,SAAS+5G,CD6IExgI,SAApC,EAA+C,CC7ItB,CAAuB,KAAvB,CAArB;AACA,SAAKs1I,aAAL,CAAmB5U,SAAnB,GAA+BoT,IAAI0B,WAAnC;AACArN,AD6IHroI,AGjvCA,IHivCG,EGjvCEmvC,EFomCEu7F,EEpmCP,GAAY,GFomCT,CAAa,AEpmCAgS,KFomCKlH,CEpmCCj1F,IAAV,CAAe4/F,GAAf,EAAoBngD,EFomC7B,CEpmCS,CFomCwBg0C,AEpmCpC,IFomCwC8B,kBAArC;AACA,AEpmCH,MAAK3mG,EFomCEu2C,EEpmCP,CAAU3/C,IFomCIwuG,SEpmCd,CFomCG,EAAuB,AEpmCA,IAA1B;AFqmCKlM,AD6IJhoI,AGjvCD,MAAK8uC,CHivCC,GC7IGu7F,AEpmCT,CAAUjvH,OFomCL,CAAa,AD6IA,AGjvClB,CAAmB7O,CAAnB,GFomCuB4oI,AEpmCA,EAAvB,WFomCK,EAAiCxB,IAAI+B,eAArC;AACA,AEpmCL,MAAK5mG,IAAL,CFomCUqnC,AEpmCA/6D,QAAV,CAAmBnH,CFomCd,AEpmCL,CFomCqB0hI,EEpmCE,CAAE,GAAzB,MFomCK,CAA6B,KAAKR,aAAlC,EAAiD,KAAKh/D,UAAL,CAAgBy/D,UAAhB,CAA2B,CAA3B,CAAjD;AACD,AD6IF,AGjvCF,CApCD,IFqoCI,KDgJM,CC7IC,ID6IIjgI,EAAZ;AC5IGqyH,AD8IH,AGlvCH,GH4uCI,OCxIMqC,QAAJ,CAAa,KAAK8K,aAAlB,EAAiCxB,IAAIkC,kBAArC;AACA,AEpmCNmO,WFomCW7tE,IEpmCIt2E,MFomCT,CAAgB4gI,EEpmCtB,CAAyB2jB,QFomCnB,CAA4B,GEpmClC,EFomCuCjP,CEpmCC,YFomClC,AEpmC6C;AFqmC9C,AD8IHtnI,OAAK,UAAWtO,KAAX,EAAmB;AC7ItByoI,AEpmCH,QFomCOtkD,IAAJ,CAAS,KAAKyxD,aAAd,EAA6B,OAA7B,EAAsC,YAAY;AAChD5+D,AD8IH,AGlvCF,KAAI8tE,GHkvCG1uI,EAAL,EC9ISqzE,CD8ICzpF,AGlvCA,KFomCP,AD8IH,AGlvCeuvC,GFomCG,CAACynC,AEpmCT,CAAUrrD,KFomCK89D,GEpmCf,CAAmB59D,EFomC1B,MEpmCL;AFqmCI,AD8IF,AGlvCF,KFkmCG,AElmCCrpB,GHkvCGmc,CGlvCCmmI,MAAM5jJ,MAAd,GHkvCE;AC7IA,AD+IA,GCzKD,MA0BO;AACL,AEpmCH,MAAK,EFomCE4kF,EEpmCEvjF,IAAE,CFomCGknF,AEpmCd,EAAclnF,IFomCP,AEpmCSC,CAAhB,EAAmBD,EFomCM3C,CEpmCzB,EAAuB,MFomCpB,EAAiC;AAC/BkmF,ADgIF,AGpuCF,EHkuC6C,IGluCzC52E,IAAI41I,GFomCGr7D,GEpmCGlnF,CAAN,CAAR,CFomCI,GAAgB,IAAhB;AACD;AACD,AD+IHyK,AGnvCC,IHmvCE,IC/IIupI,gBAAgBxvH,SAASyvH,cAAT,CAAwB1wD,OAAOrgE,IAA/B,CAApB;AACAgjH,AEpmCF,MAAIsc,EFomCEja,OEpmCO,CFomCX,CAAayL,GEpmCGmO,MAAL,CAAYniJ,CAAZ,CAAb,CFomCE,EAA4B,iBAA5B;AACA,AD+IF9B,OAAK,CC/ICg2I,WAAWC,AD+IA,OC/IO1/D,KAAP,EAAcu/D,aAAd,CAAf;AACA,AEpmCF,QFomCMI,eAAe,SAASA,YAAT,CAAsBtmI,CAAtB,EAAyB;AAC1CA,AD+IH,AGnvCDnB,IAAE9O,CAAF,GFomCMm6E,AEpmCAwqE,EHmvCE,KAAK1uI,AGnvCAjW,CAAP,CHmvCL,EGnvCgBP,GFomCb,EEpmCkB8S,GAAL,CAASoyI,OAAOJ,GAAhB,IAAqBI,OAAOH,GAA7C;AFqmCI5tE,ADgJH,AGpvCD9nE,GH8uCE,CG9uCAlC,CAAF,GAAM+3I,IFomCIt7D,GEpmCGz8E,CAAP,EFomCF,CEpmCanN,EFomCE,CAACm3E,EEpmCEpkE,GAAL,CFomCS62E,AEpmCAs7D,MFomCtB,CEpmC6BJ,GAAhB,IAAqBI,OAAOH,GAA7C;AFqmCI,AEpmCJ,aFomCW,KAAP;AACD,ADgJHt2I,AGpvCD,CAhBD,IFgnCI,EDoJG,UAAWtO,KAAX,EAAmB;AC/ItByoI,QAAIqC,QAAJ,CAAa,KAAKuJ,IAAlB,EAAwBD,IAAIsB,YAA5B;AACAjN,ADgJD,AGhvCH,QFgmCQqC,ADgJAz0H,EAAL,GAAUrW,GChJT,CAAay2I,CDgJd,OChJC,EAAuB,OAAvB;AACAhO,ADgJD,QChJKtkD,ADgJAxlE,IChJJ,CAAS83H,QAAT,EAAmB,CDgJpB,MChJC,EAA4BE,YAA5B;AACA,ADiJD,QCjJK,CAAC7wD,OAAO2D,MAAZ,EAAoB;AAClB,AE7lCN,WF6lCWA,MAAL,GAAc,KAAd;AACD,ADkID,EAnB2C;AC9G5C,AE7lCH,SAASu7D,WAAT,GAAwB;AF8lCtB,ADiJDtwI,AG9uCAiqI,IH8uCG,ECjJE74D,GE7lCG,IF6lCI8uD,AE7lCA4O,SF6lCX,EAAsB,AE7lCf,EAAR;AF8lCG,AE7lCH7/F,OAAMx0C,CF6lCCyyH,EE7lCP,CAAU+c,IF6lCI1c,EE7lCE1yF,IAAhB,KF6lCO,CAAmBu2C,OAAOtgD,MAA1B,CAAJ,EAAuC;AACrC,ADiJJ/kC,AG9uCD,OH8uCM,GCjJGwzI,SDiJS,MCjJb,EAAqB;AACnBC,6BAAqBntH,SAAS+5G,aAAT,CAAuB,KAAvB,CAArB;AACA2H,ADiJL,AG9uCH,UH8uCU,ECjJEqC,GDiJGx0H,EAAZ,GCjJK,CAAa49H,kBAAb,EAAiCR,aAAjC;AACAjL,ADkJL,GANC,SC5IQqC,QAAJ,CAAaoJ,kBAAb,EAAiCE,IAAIwC,0BAArC;AACA7vH,iBAASmsH,IAAT,CAAchS,WAAd,CAA0BgT,kBAA1B;AACAD,ADkJN3lI,AG/uCF,OH+uCO,EG/uCE22I,QH+uCSjlJ,KAAX,CG/uCP,CH+uC0B,EClJA,AE7lCA,KF6lClB;AACD,AE7lCNi/I,YAAW,IAAIwF,cAAJ,EAAX;AF8lCKvQ,ADkJH,AG/uCFvwF,OAAMx0C,CH+uCCmH,EAAL,AG/uCF,CAAU2oI,EH+uCEj/I,KAAV,EG/uCiBuvC,IAAnB,CF6lCwB2xF,WAAnB,CAA+B,KAAKtqD,UAApC;AACA6xD,ADkJH,AG/uCF,QH+uCO9pH,EClJEmsH,QAAJ,CAAa,KAAKl0D,ADkJrB,UClJG,EAA8Bw9D,IAAIyC,gBAAlC;AACD,ADmJF;AClJC,AE5lCJ,QF4lCQ,CAAC,KAAKrxG,MAAV,EAAkB;AAChBgwG,ADoIF,EApC2C,aChGhCx+D,KAAT,EAAgB8O,OAAO7+D,KAAvB;AACD,AE5lCL,SAASi+H,SAAT,GAAqB;AF6lClB,ADmJF91I,AG/uCAwvI,IH+uCG,GG/uCG,IAAIuF,SAAJ,EAAN;AF6lCC,AE5lCDxgG,OF4lCMmzF,AE5lCA3nI,GAAN,CAAUyvI,IAAIrvG,IAAd,GF4lCC,GAAuB,YAAY;AACjCynC,ADmJFv2E,AG/uCD,OH+uCM,GCnJGs2I,SDmJS,QCnJf;AACD,GAFD;AAGAtO,ADmJC,AG/uCH,MF4lCMtkD,IAAJ,ADmJQ,CCnJC9Q,IDmJI98D,ECnJb,ADmJC,ECnJgB,QAAjB,EAA2B,KAAKugI,eAAhC;AACArO,ADoJC,AGhvCH,GH0uCI,GC9IEtkD,GE5lCGghE,CF4lCP,CAAS,KAAK9Q,IAAd,CE5lCF,CF4lCsB,EE5lCE,mBF4lCtB,EAA2C,KAAKyC,eAAhD;AACArO,AE5lCDqW,MF4lCK36D,IAAJ,AE5lCQ,CF4lCC,GE5lCGqgE,EF4lCEnQ,IAAd,EAAoB,ME5lCZ,EAAT,OF4lCC,EAAqC,KAAKyC,eAA1C;AACArO,ADoJAn6H,AGhvCDq1C,MF4lCKwgC,CDoJC,AGhvCAh1E,GF4lCL,AE5lCD,CF4lCU,AE5lCA2vI,KF4lCKzK,CDoJEr0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CAAtC;AADqB,ADuJtC,AGjuCF,KF0kCW,CAAP,ADuJ4CoU,QAAQJ,MAAMI,KAA5D;ACpJC,GALH;AAMEwiI,ADqJA,AGjuCF,IAAMuN,QF4kCM,SAASvN,IE5kCM,IF4kCf,CAAkB9sH,IE5kCxBq6H,EF4kCM,EAA0Bnf,QAA1B,EAAoC,IE5kCrB,GAAM;AF6kC7B,ADqJF,AGjuCA52H,SAAQpB,EF4kCC0pI,CE5kCT,CAAY,GF4kCE,IAAL,EAAW5sH,MAAX,EAAmBk7G,GE5kC5B,KF4kCS,EAA6B;AAClC5rG,ADqJJ,AGjuCA,aF4kCW;AAD2B,AE1kCtCmkH,KF0kCS,CAAP,IE1kCOnrE,OAAOmgE,WAAhB;AF6kCC,ADqJD,AGjuCAiL,GFkkCF,GD+JM9rI,GGjuCI0gE,GHiuCExzE,IGjuCK0zI,CHiuCA5gI,GAAf,MGjuCA;AF6kCAqxB,ADqJA,AGjuCAkf,MHiuCItwC,ICrJI,AE5kCCuW,EHiuCCtpB,KAAK+S,AGjuCf,CAAiB6rI,CF4kCAz6G,CDqJjB,GGjuCA,EF4kCQ,AE5kCgBw6G,CF4kCA1G,KE5kCxB,KF4kCQ,EAA4B;AAClC,AE5kCFx1H,QAAOuvD,CF4kCAwiE,IAAL,CAAU0D,AE5kCZ,GAAgB0G,QF4kCd,AE5kCsBD,CF4kCA1G,KE5kCxB,MF4kCmCE,IAAjC;AACA,ADqJF,AGjuCA11H,MHiuCIxD,EGjuCGkrB,CF4kCAuqG,EDqJE5hI,IAAKvS,IAAI,CAAT,CAAT,CCrJE,CAAmB8B,MAAnB,CAA0B,AE5kC5B,KF4kCiCqyI,aAAL,CAAmB1yI,OAAnB,CAA2Bi2I,UAA3B,CAA1B,EAAkE,CAAlE;AACA,ADqJF,AGjuCD,CARD,KHyuCM/4H,ECrJEi4D,GDqJGrkE,IAAK3F,CCrJA,GDqJI,CCrJhB,ADqJO,CAAT;ACpJE40H,ADqJF,MAAI5iH,KCrJKujH,ADqJA5vH,IAAK+B,CCrJZ,CAAa,EDqJG,CAAT,CAAT,QCrJ2B;AACvBsiE,AE5kCN,YF4kCY2+D,QAAN;AACD,ADqJH,AGjuCF,KF0kCI,CDuJE12H,GGjuCGomI,EHiuCEzyI,IAAKxS,IAAI,AGjuCpB,CHiuCW,CAAT,CGjuCoB;AF6kCnB,ADqJD,AGjuCA,GF0jCF,GDuKM8e,KAAKtM,IAAK5F,IAAI,CAAT,CAAT;ACpJA4pD,ADqJA,AGjuCC8nF,MHiuCGv/H,KCrJK,ADqJAvM,CGjuCG,GHiuCE8B,CGjuCE4wI,GHiuCE,CCrJA1uF,ADqJT,CAAT,MCrJS,GAAmB,cE5kChB,CAAkBt0C,MAAlB,EAA0B4gC,SAAS0zB,UAAnC,CAAX,CAFmB,CAEwC;AF6kC1D,AE5kCF8nE,QF4kCM,EE5kCG7/H,GF4kCE2mB,GE5kCX,GF4kCE,EAAiB;AACf,ADqJJ,MAAKnwB,MCrJK,IAAIxG,ADqJC,KCrJL,ADqJV,CCrJoB,CDqJG,yDCrJuD,uDAApE,CAAN;AACD,AE5kCH;AF6kCE,ADqJD,AGjuCD,KAAI02I,GF4kCE,ADqJAnvI,EAAL,GCrJUw+H,ADqJA31H,KAAKF,CGjuCE,CHiuCP,ECrJT,CDqJmBC,AGjuCC89H,CF4kCA,CDqJX,GAAeh+H,CGjuCElK,IHiuCGsK,EAAL,CGjuCR,CAAkB,CHiuCAC,AGjuClB,EHiuCjB,AGjuCsC,CAArB,EAAwB,CAAxB,CAAlB;AF6kCI+0H,ADqJH,AGjuCD,KAAIsR,GHiuCEnvI,EAAL,GAAUyI,GGjuCI,EHiuCCI,EAAL,AGjuCQ49H,GHiuCE99H,ECrJE+4H,ADqJZ,CGjuCcnjI,EHiuCCqK,KAAKF,AGjuChB,CAAkB,CHiuCP,AGjuCX,CF4kCX,CAA+B,AE5kCC,CHiuCAI,EAAnC,AGjuCc,EF4kCyBy3D,AE5kCC,CAA1B,CAAf,QF4kCI;AACD,ADqJF,AGjuCD,KAAI6uE,GHiuCEnvI,EAAL,GAAUwI,KAAKC,CGjuCE,CHiuCP,GAAUI,AGjuCC29H,EHiuCX,GAAe79H,CGjuCE04G,IHiuCGz4G,EAAL,GAAUF,EAAnC,AGjuCiB,CAAsBumI,WAAtB,EAAoCC,QAApC,EAA8C,GAA9C,EAAmD,QAAnD,EAA6D,EAA7D,EAAiE,EAAjE,CAAlB,CARoB,CAQoE;AF6kCtF,ADqJD,AGjuCD7hG,OAAMx0C,CF4kCA6nE,ADqJAzgE,EAAL,AGjuCD,CAAUkvI,EHiuCC3mI,GCrJG,EDqJEC,ECrJd,ADqJS,EGjuCX,CHiuCqBC,EAAV,GAAeC,KAAKC,EAAL,GAAUC,EAAnC;ACpJCyiH,ADsJD,GAPD,MAOO,ECtJEG,EDsJG1sH,ECtJV,CAAY,KAAKi/H,EDsJG,KAAf,ECtJL,ADsJ4B,ECtJA,UAAU2D,SAAV,EAAqB;AAC/CjhE,AE5kCJ,YF4kCUkhE,YAAN,CAAmBD,SAAnB;AACD,ADsJF,AGluCD,KF0kCE,AE1kCE5qH,GHkuCEjX,EAAL,EGluCU,CHkuCA6I,GGluCI69H,EHkuCC/9H,EAAL,EGluCUi5G,CHkuCAh5G,EAAV,GAAeF,IGluCf,CHkuCoBI,AGluCC,EHkuCN,CGluCf,CAAX,CHkuCoCC,EAAnC;ACrJCspH,ADsJD,AGluCD9kF,OAAMx0C,CF4kCA60G,ADsJA3tG,EAAL,AGluCD,CAAUgX,EHkuCCvO,CCtJT,CAAWu0D,AE5kCb,GHkuCgBn0D,EAAL,CCtJT,EAAmB,ADsJAF,EAAV,GAAeC,ICtJxB,CDsJ6BF,CCtJCq1H,CDsJN,GCtJUqD,ADsJAt4H,EAAnC,aCtJC,EAAmD,KAAnD;AACAg5H,ADsJD,QAAK7hI,EAAL,GAAUwI,KAAKC,ECtJE,ADsJP,GAAUI,CCtJnB,CDsJS,GAAeF,KAAKC,EAAL,GAAUF,EAAnC;ACrJA,ADsJA,AGluCD,GF4iCF,KDsLQzI,EAAL,GAAUuI,KAAKC,EAAL,GAAUC,EAAV,GAAeC,KAAKC,EAAL,GAAUC,EAAnC;ACrJDi5H,ADuJC,AGnuCD,GH4tCO,EG5tCHsN,IHmuCG,ICvJI,ADuJCrwI,KGnuCK,IF4kCG+iI,AE5kCC0E,CHmuCC,KAAf,AGnuCoBzlB,EHmuCG,CCvJnB,CAAmB5xG,IAAnB,CE5kCM,CF4kCmB,AE5kCCk+B,KAApB,EAA2B,QAA3B,CAAjB,CAhBoB,CAgBmC;AF6kCrD,AE5kCFA,OAAMx0C,CF4kCA,EE5kCN,CAAUu2I,EF4kCCpR,QE5kCX,CF4kCM,CAAe7uH,IAAf,MAAyB7lB,SAA7B,EAAwC;AACtC,ADuJH,AGnuCD8lJ,QHmuCMtvI,EAAL,ECvJS,AE5kCCyI,CHmuCAI,GCvJGpQ,EDuJEkQ,AGnuChB,EHmuCW,CCvJD,CAAU,CDuJCC,EAAV,GAAeF,KAAKI,EAAL,GAAUC,EAAnC,+BCvJoE,SAAjD,GAA6DsG,IAA7D,GAAoE,GAA9E,CAAN;AACD,ADuJF,QAAKpP,EAAL,GAAUyI,KAAKI,EAAL,GAAUF,EAAV,GAAeC,KAAKF,EAAL,GAAUI,EAAnC;ACtJC,ADuJD,AGnuCD,QF4kCMk5H,ADuJA/hI,EAAL,GAAUwI,KAAKC,EAAL,GCvJU,ADuJAI,ECvJEsG,ADuJZ,GAAexG,GCvJGwG,EDuJEvG,ECvJV,ADuJK,ECvJSsmB,CDuJCxmB,EAAnC,KCvJ0C,IAAtB,EAAnB;AACAq5H,ADuJD,AGnuCD,KAAIsN,GHmuCEpvI,EAAL,GAAUuI,ICvJI81H,CDuJC71H,EAAL,AGnuCQ,GHmuCEC,CGnuCE89H,CHmuCZ,CCvJT,EDuJwB79H,CCvJC,CE5kCEsmB,GHmuCErmB,CCvJC01H,CDuJN,GAAUz1H,AGnuCjB,EHmuClB,AGnuCD,GF4kCE;AACA,ADwJD,AGpuCDwmI,GH6tCO,KCjJD,CDwJC,ICxJIpqD,ADwJClmF,CGpuCCwG,GF4kCP,IACJ,CE7kCF,CHouCsB,AGpuCA7O,CAAtB,EF6kCOuuF,CE7kCmB,CHouCnB,ECvJL,ADuJ4B,AGpuC9B,CF6kCY+8C,OADN,IAEJ,KAAK/8C,IAAL,CAAU+8C,OAAV,CAAkB7yH,IAAlB,CAFA,EAEyB;AACvB4yH,AE9kCJsN,cAAa9pI,KF8kCI4tE,GE9kCjB,CAAsB/0E,CAAtB,CF8kCI,EE9kCsB,CF8kCA,EE9kC1B,GF8kC+B6mF,IAAL,CAAU+8C,OAAV,CAAkB7yH,IAAlB,EAAwBgkE,MAA9C;AACA4uD,ADsJH,AGpuCD10F,OAAMx0C,CHouCAiH,EAAL,AGpuCD,CAAUuvI,EHouCC1mI,KAAKF,CCtJCw8E,CDsJN,GCtJP,ADsJiBv8E,AGpuCrB,EHouCW,CCtJa,EDsJEF,GCtJGy8E,EDsJEr8E,ECtJP,ADsJE,CCtJQo5H,EDsJEn5H,EAAnC,GCtJuB,CAAkBsG,IAAlB,CAApB;AACD,ADsJF,AGpuCDkgI,QHouCMtvI,EAAL,GAAUyI,CGpuCE3P,GAAb,CHouCgB+P,AGpuCCoD,EHouCN,GAAUtD,CGpuCrB,CHouCW,CG7vCS,CAyBM,CHouCAC,KAAKF,EAAL,GAAUI,EAAnC;ACrJC,ADsJD,AGpuCD,KAAIymI,GF8kCEvO,ADsJA/gI,EAAL,GAAUwI,CCtJC,IAAIs1H,ADsJAr1H,EAAL,AGpuCQ,CF8kCP,CAAQs5H,CDsJCl5H,CGpuCE29H,CHouCZ,GAAe79H,EGpuCG03G,GHouCEz3G,CCtJnB,CAAV,ADsJwB,GAAUF,EAAnC,EGpuCkB,CAAuBsD,MAAvB,CAAnB,CA1BoB,CA0B+B;AF+kCjD,ADsJD,AGpuCDqhC,OAAMx0C,CHouCAoH,CCtJC+9H,CDsJN,AGpuCD,CAAUsR,EHouCC9mI,KCtJT,ADsJcC,CCtJC0G,CDsJN,GCtJT,ADsJmBzG,AGpuCrB,EHouCW,ECtJcq4H,CDsJCp4H,ECtJxB,GDsJ6BC,EAAL,GAAUC,EAAnC;ACrJC,ADuJD,AGruCDymI,GH8tCO,KChJDrN,CDuJC,ICvJI7B,ADuJCrhI,CGruCCwJ,MF8kCK,AE9kClB,GHquCsB,CCvJX,EAAaw4H,EDuJjB,ECvJqBzgE,ADuJE,UCvJnB,CAAT;AACA6xD,QAAIqC,QAAJ,CAAayN,EAAb,EAAiB,QAAjB;AACA,ADuJD,AGruCD,QHquCMniI,EAAL,CCvJQihI,EDuJEp4H,CCvJT,IDuJcF,EAAL,GAAUC,EAAV,GAAeF,KAAKI,EAAL,GAAUC,EAAnC;ACtJA,ADuJA,AGruCD,GF4hCF,EE5hCM0mI,GHquCExvI,EAAL,GAAUyI,KAAKI,EAAL,AGruCQ,GHquCEF,CGruCE89H,CHquCZ,GAAe79H,EGruCGu3G,GHquCEz3G,EAAL,GAAUI,EAAnC,YGruCkB,CAAiCmgI,SAAjC,EAA4C,EAA5C,CAAnB,CA/BoB,CA+BgD;AF+kCpEpH,ADuJC,AGruCDv0F,OAAMx0C,CHquCAmH,EAAL,AGruCD,CAAUuvI,EHquCC/mI,GCvJG,EDuJEC,EAAL,GAAUI,AGruCrB,EF8kCuB+4H,ADuJZ,GAAej5H,KAAKC,EAAL,ECvJZ,CAAsBs5H,ADuJAx5H,EAAnC,ICvJa,EAA8B;AAC1C,ADuJD,AGruCD6mI,QHquCMtvI,CCvJC89H,CDuJN,GCvJC,ADuJSv1H,CCvJCi5H,AE9kCCl5H,IHquCGE,EAAL,AGruCX,GHquCqBC,ECvJnB,ADuJS,CCvJaw5H,EDuJEv5H,KCvJK23D,ADuJA13D,EAAL,GAAUC,EAAnC,GCvJuB,CAAkBs5H,aAAxC;AACA,ADwJD,GAPM,MAOA,ECxJE,EDwJGpjI,GCxJEi/H,ODwJQ,ECxJb,CAAekE,EDwJjB,EAAuB,GCxJC/yH,IAAtB,CAAP;AACA,AE9kCF,QF8kCM,KAAK81E,IAAL,IACJ,KAAKA,IAAL,CAAU+8C,OADN,IAEJ,KAAK/8C,IAAL,CAAU+8C,OAAV,CAAkBE,OAAO/yH,IAAzB,CAFA,EAEgC;AAC9B,ADsJH,AGtuCD,KAAIqgI,GHsuCE1vI,EAAL,GCtJU,ADsJA6I,KCtJKs8E,ADsJAx8E,EAAL,AGtuCQ,EFglCR,CAAUu5H,ADsJAt5H,CGtuCE89H,CHsuCZ,GAAeh+H,ECtJf,AEhlCkBo3G,CFglCAsiB,EDsJEt5H,EAAL,GCtJUuG,ADsJAtG,EAAnC,ECtJU,CAAP,QEhlCe,CAAgCkgI,eAAhC,EAAiD,EAAjD,EAAqD,GAArD,CAAnB,CApCoB,CAoC0D;AFilC3E,ADsJF,AGtuCD,QHsuCMhpI,EAAL,GAAUyI,KAAKI,EAAL,GAAUF,EAAV,GAAeC,KAAKF,EAAL,GAAUI,EAAnC;ACrJCg5H,ADsJD,QAAK7hI,EAAL,GAAUwI,KAAKC,ECtJEy5H,ADsJP,GAAUr5H,EAAV,CCtJT,EDsJwBF,KAAKC,EAAL,GAAUF,EAAnC;ACrJC,ADsJD,AGtuCD,QFglCMg4D,ADsJAzgE,EAAL,GAAUuI,GCtJG,EDsJEC,ECtJd,ADsJS,GAAUC,EAAV,GAAeC,KAAKC,EAAL,GAAUC,EAAnC;ACrJCyiH,ADuJD,AGvuCD,KAAImkB,MFglCKhkB,IAAP,CAAYyW,EEhlCG,IAAIsE,CFglCAxI,KEhlCMne,IFglCzB,EAA8B,IEhlCf,CAAqB,IAArB,CFglCyB8hB,CEhlCE,EAA3B,EAA+BgF,IFglChB,EAAqB,EEhlCGW,KAAvC,CAAjB,CAxCoB,CAwC4C;AFilC5DpF,AEhlCJ70F,OAAMx0C,GAAN,CAAU42I,EFglCC7N,QEhlCX,IFglCI,CAAoBD,SAApB;AACD,ADuJH,KCzJE,CDyJGp5H,WAAW,KAAhB,EAAwB,KAAKF,gBAAL;ACtJtBijH,AEhlCF,WFglCSW,KAAP,CAAa,YAAY;AACvBvrD,ADuJJ,AGvuCA,KAAIgvE,IHuuCG,GCvJGrQ,CDuJV,OCvJI,MEhlCqB,IAAImH,MAAMnmB,YAAV,CAAwB8oB,SAAS/gH,MAAT,CAAgBpc,MAAxC,CAAzB;AFilCG,ADwJH,AGxuCA0jI,EH6nCmC,GC/CjC,eE9kCiB//G,OAAnB,CAA4Bk4G,aAAa5gB,mBAAb;AFilC3B,AEhlCD55E,GF6gCF,IE7gCQx0C,GAAN,CAAW62I,kBAAX;AFilCAtpD,ADwJDt9E,QCxJO,SAASs9E,EDwJE,ECxJX,GAAgB,KDwJMnhF,IAAX,EAAiBnK,KAAjB,EAAyB;ACvJxC,AEhlCH,SFglCQq4E,MAAL,GAAc,KAAd;AACD,ADwJD,AGxuCD,GF0gCD,EE1gCKw8D,mBAAmB,IAAInJ,MAAM/mB,gBAAV,CAA4BypB,UAA5B,EAAwC,EAAxC,CAAvB;AFilCC9G,AEhlCD/0F,OAAMx0C,EFglCE,CEhlCR,CAAW82I,OFglCMvN,KAAT,GAAiB,CEhlCzB;AFilCG,ADwJF,AGruCD,SF6kCQjvD,MAAL,GAAc,IAAd;AACD,GAzEH;AA0EEksD,ADwJA,AGpuCF,MHouCMt2H,MCxJM,MDwJMjO,GCxJGukI,KDwJK,CAAxB,ECxJU,GAAoB;AAC5B,ADuJF,MAA2BlmI,ECvJrB20G,EDuJyBvkH,KCvJlB,ADuJuB+S,GAAL,CAAUyM,CCvJvBwuG,OAAL,CDuJkB,CCvJ7B,ADuJF;ACtJE,AE5kCF,QF4kCMzJ,KAAK6wB,UAAT,EAAqB;AACnB,ADuJJ,AGnuCA5hE,OHmuCKj9D,AGnuCE5U,EHmuCP,CCvJQob,EDuJErB,ICvJIktH,CDuJCroI,CAAL,ECvJQirI,CDuJC57H,CAAnB,CGnuCA,CAAwB,KF4kCV,CAAc20G,AE5kC5B,EAAgCz8D,GF4kCC0sF,CE5kCjC,EAAsC,CF4kCxB,EAAyBz3H,EE5kCvC,CF4kCI;AACA,ADuJJ,AGnuCA,OHmuCKvG,EAAL,CCvJQ4G,EDuJE1B,ECvJE,CAAR,EDuJWvO,CAAL,GAASyC,CAAnB;ACtJImyH,ADuJJ,AGnuCAvuD,OHmuCK/8D,AGnuCE9U,EHmuCP,GAAU+Z,CCvJCwmH,IAAP,ADuJWrtH,CCvJC0vG,ADuJN,GAAS30G,CAAnB,CCvJqB4kI,AE5kCrB,CAAwB,GF4kCR,CAAUgC,IE5kC1B,EAAkC+O,IF4kC9B,EAAkC,UAAU15H,EE5kChD,EF4kCsC,AE5kCgB,EF4kCA,GE5kCtD;AF6kCM,ADuJN,OAAKnV,EAAL,GCvJU,ADuJA1W,ECvJEukH,GDuJGzxG,ECvJEiiI,CDuJP,CAAUv1H,OCvJR,EDuJF,CAAV,CCvJ8BqM,SAAS04F,KAAKu0B,UAAlC,CAAJ,EAAmD;AACjD17H,AE5kCT,eF4kCcwrH,IAAI2C,SAAJ,CAAc1/G,IAAd,CAAL;AACD,ADuJP,AGnuCD,OHmuCM/M,gBAAL;ACtJK,AE5kCN,OFwkCK;AAKA,ADuJJ,AGnuCD,SHmuCQ,CCvJC00D,GDuJR,ICvJemgE,WAAP,GAAqB52H,GAArB,GAA2Bg3H,mBAA3B,GAAiD32H,CAArD,EAAwD;AACtDwrH,ADwJN,AGpuCD,EHsmCoC,UC1BzBqC,QAAJ,CAAa1mB,KAAKxtC,UAAlB,EAA8Bw9D,IAAImD,cAAlC;AACAnzB,AE5kCP,aF4kCYiwB,IAAL,CAAUr6G,KAAV,CAAgB9S,MAAhB,GAAyBmsD,OAAOmgE,WAAP,GAAqB52H,GAArB,GAA2Bg3H,mBAA3B,GAAiD,IAA1E;AACD,ADwJNp3H,AGpuCA,OFykCK,MAGO,WDwJW,UAAW/P,CAAX,EAAe;ACvJ/Bg8H,YAAIuC,WAAJ,CAAgB5mB,KAAKxtC,UAArB,EAAiCw9D,IAAImD,cAArC;AACAnzB,ADwJN,aCxJWiwB,IAAL,CAAUr6G,KAAV,CAAgB9S,MAAhB,GAAyB,MAAzB;AACD;AACF,ADwJH;ACvJE,QAAIk9F,KAAKw0B,eAAT,EAA0B;AACxBhX,ADwJJ,MAAI5tH,KAAKvH,ECxJE81H,ADwJAjyH,KCxJP,CAAa,EDwJjB,UCxJ6B;AACvB8zG,ADuJN,MAEC9kG,MAAMtL,CCzJI4kI,EDyJA,CAAJ,CAFP,WCvJM,CAAqB5+G,KAArB,CAA2B9S,MAA3B,GAAoCk9F,KAAKiwB,IAAL,CAAUwE,YAAV,GAAyB,IAA7D;AACD,ADsJL,MAEgBt5H,CC1JZ,KD0JkBvL,GAAI,CAAJ,CAFtB;ACrJG,ADqJH,MAE+BwL,MAAMxL,GAAI,CAAJ,CAFrC;ACpJE,ADoJF,MAGCyL,ECvJK2kG,IDuJCpwG,CCvJI4hI,EDuJA,CAAJ,CAHP,SCpJE,EAAwB;AACtBxxB,ADmJJ,MAGgB1kG,KCtJPk2H,CDsJa5hI,GAAI,CAAJ,CAHtB,OCnJI,CAAmBgmB,KAAnB,CAAyB/S,KAAzB,GAAiCm9F,KAAKn9F,KAAL,GAAa,IAA9C;AACD,ADkJH,MAG+BtH,MAAM3L,GAAI,CAAJ,CAHrC;ACjJC,ADiJD,GCrPF,GDyPG4L,MAAM5L,GAAI,CAAJ,CAJP;AChJA+iI,ADgJA,MAIgBl3H,MAAM7L,GAAI,CAAJ,CAJtB,IChJmB4tH,OAAOa,QAAP,CAAgB,YAAY;AAC7C,AD+IF,MAI+B3iH,GCnJxB61H,GDmJ8B3hI,GAAI,ECnJvC,ADmJmC,CAJrC;AC9IC,AD8ID,GChJmB,EAEhB,CDoJF+L,CCtJkB,CArGrB,MD2PWT,MAAMI,GAAN,GAAYI,GANrB;AC7IAg5H,AD6IA,MAOCrpI,CAPD,KC7IU,SAASqpI,QAAT,GAAoB;AAC5B,QAAIlX,OAAOK,WAAP,CAAmB+R,aAAnB,CAAJ,EAAuC;AACrCA,ADoJJ,MAAKj0H,QAAQ,CAAb,EAAiB,KCpJG,IAAI+yH,WAAJ,EAAhB;AACAkB,oBAAcp9D,UAAd,CAAyBoqD,SAAzB,GAAqCuR,kBAArC;AACD,ADoJF9iI,OAAI,MAAM5P,KAAKmR,IAAL,CAAW+O,QAAQ,GAAnB,CAAV;ACnJC,QAAI,KAAKylB,MAAT,EAAiB;AACf,ADoJH,QAAKjvB,EAAL,ECpJS,CDoJC,GCpJG1H,IDoJIY,CCpJR,ADoJT,CCpJmB,gDAAV,CAAN;AACD,ADoJF,QAAK2G,EAAL,GAAU,CAAEyJ,MAAMF,GAAR,IAAgBlQ,CAA1B;ACnJC,ADoJD,QCpJKunE,ADoJA3gE,EAAL,GAAU,CAAEmJ,ECpJC,IAAZ,ADoJiBI,GAAR,IAAgBnQ,CAA1B;ACnJCmyH,ADoJD,QAAKtrH,EAAL,CCpJQyrH,EDoJE,CAAEtiH,CCpJX,CAAY6Z,IDoJK/Z,ECpJCjf,CDoJT,IAAgBmP,CAA1B,GCpJa,CAAgBnN,KAAhB,CAAsBhB,IAAtB,CAA2BL,SAA3B,CAAZ,EAAmD,UAAU8pB,MAAV,EAAkB;AACnE,ADqJH,GATD,MASO,CCrJCisD,GDqJI13D,GCrJEk1H,GDqJI90H,GAAN,IAAaJ,MAAMQ,GCrJvB,ADqJD,CCrJ2B5e,CDqJG,KCrJ7B,KAAqC,CAAzC,EAA4C;AAC1C63I,oBAAY/hE,KAAZ;AACD,ADqJJvnE,OAAI,MAAM5P,KAAKmR,IAAL,CAAW,MAAMsO,GAAN,GAAYI,GAAZ,GAAkBI,GAA7B,CAAV;ACpJG,UAAIk3D,MAAMw9D,mBAAN,CAA0B3yI,OAA1B,CAAkCkpB,MAAlC,MAA8C,CAAC,CAAnD,EAAsD;AACpDisD,ADqJL,QAAKzgE,EAAL,GAAU,CCrJCi+H,ADqJC30H,MAAMF,GAAR,IAAgBlQ,CAA1B,KCrJK,CAA0B3N,IAA1B,CAA+BipB,MAA/B;AACD,ADqJJ,QAAK3U,EAAL,GAAU,OAAO3G,CAAjB;ACpJE,ADqJF,KC5JC,GD4JI4G,EAAL,GAAU,CAAEkJ,MAAME,GAAR,IAAgBhQ,CAA1B;ACpJC,ADqJD,QCrJK,ADqJA6G,EAAL,GCrJUs+H,ADqJA,CAAEp1H,MAAMI,ECrJjB,CDqJS,CCrJW,GDqJKnQ,CAA1B;ACpJG+lI,ADsJH,GATM,MASA,IAAK91H,ECtJC,IAAT,ADsJcI,ECtJC,CDsJZ,EAAiB,ECtJAmH,KAApB;AACD;AACF,ADsJAxX,GClRH,IDkRO,MAAM5P,KAAKmR,IAAL,CAAW,MAAM0O,GAAN,GAAYJ,GAAZ,GAAkBQ,GAA7B,CAAV;ACrJD+tG,WAAS,SAASA,OAAT,GAAmB;AAC1B,ADsJD,QCtJKwpB,ADsJA9gI,EAAL,GAAU,CCtJC,ADsJCiJ,ICtJX,EDsJiBI,GAAR,IAAgBnQ,CAA1B;ACrJC,ADsJD,QAAK2G,EAAL,CCtJQihI,EDsJE,CAAE93H,CCtJAimB,KDsJM/lB,CCtJjB,EAAmB,ADsJV,IAAgBhQ,CAA1B;ACrJG4nI,ADsJH,QAAKhhI,EAAL,ECtJSghI,CDsJC,GCtJG7xG,IDsJI/1B,CAAjB,CCtJG;AACD,ADsJF,QAAK6G,EAAL,GAAU,CAAEqJ,MAAME,GAAR,IAAgBpQ,CAA1B;ACrJC,ADuJD,GATM,MASA,ECvJE4nI,GAAP;AACD,GAnIH;AAoIEJ,ADuJCxnI,OAAI,MAAM5P,ICvJI,CDuJCmR,IAAL,CAAW,GCvJEimI,GDuJIn3H,GAAN,GAAYR,GAAZ,CCvJP,EDuJyBI,CCvJA,EDuJ7B,CAAV;ACtJC,QAAI6kH,WAAW,KAAKhpC,IAApB;AACAgpC,ADuJD,QAAKhuH,EAAL,GCvJUkzE,ADuJA,CAAEhqE,KCvJX,CDuJiBF,ECvJC,CDuJT,ICvJckqE,ADuJEh6E,CAA1B,KCvJC;AACA,ADuJD,QCvJK,ADuJA2G,EAAL,GCvJUo+H,ADuJA,CAAEh1H,MAAMI,GAAR,IAAgBnQ,CAA1B,ICvJK,CAAyBvO,MAAzB,GAAkC,CAAtC,EAAyC;AACvCqjI,ADuJH,QAAKluH,EAAL,GAAU,CAAEsJ,CCvJAq1H,KDuJMn1H,CCvJf,EDuJO,CCvJW,GDuJKpQ,CAA1B,CCvJ0BulI,MAAvB;AACA,ADuJH,QAAK1+H,ECvJE,ADuJP,CCvJQiuH,EDuJE,OCvJOyU,ADuJAvpI,CAAjB,SCvJG,EAA0B;AACxB80H,ADwJL,iBCxJcyU,UAAT,GAAsB,EAAtB;AACD;AACDzU,ADwJJ,OAAK5lH,QCxJQq6H,QDwJb,ECxJI,CAAoB,KAAKhE,MAAzB,IAAmCiE,iBAAiB,IAAjB,CAAnC;AACD;AACD1U,ADwJF,SAAO,ICxJI+T,ADwJX,OCxJE,GAAmB,EAAnB;AACA1W,ADyJF,EAzLmC,SCgC1BG,IAAP,CAAY,KAAKuS,SAAjB,EAA4B,UAAUtrG,OAAV,EAAmBQ,GAAnB,EAAwB;AAClD+6F,eAAS+T,OAAT,CAAiB9uG,GAAjB,IAAwBR,QAAQiuG,aAAR,EAAxB;AACD,ADyJJj3H,KC3JG,gBD2JiB,YAAY;ACxJ7B,WAAOukH,QAAP;AACD,ADyJD,GC5SF;AAoJE2U,QAAM,SAASA,IAAT,GAAgB;AACpB,ADyJF,MAAIpnI,ECzJE,CAAC,EDyJE,GCzJGypF,CDyJC3mF,GCzJN,CAAUokI,GDyJR,EAAT,KCzJE,EAA2B;AACzB,ADyJJ,MAAI/4H,CAAJ,ICzJSs7E,IAAL,CAAUy9C,UAAV,GAAuB,EAAvB;AACD;AACD,ADyJF,MAAI94H,GCzJGq7E,GDyJG,CCzJR,CAAUy9C,MDyJZ,ICzJE,CAAqB,KAAKhE,MAA1B,IAAoCiE,iBAAiB,IAAjB,CAApC;AACAE,uBAAmB,IAAnB,EAAyB,KAAzB;AACA,ADyJF,SCzJOjC,ADyJA,SAASl3H,kBAAT,CCzJL,ADyJkCG,KAA7B,EAAoCC,GAApC,EAA0C;ACxJhD,GA3JH;AA4JEg5H,ADyJC,OAAKtnI,GCzJE,IDyJKlS,KCzJIw5I,IDyJhB,ECzJO,ADyJiBtnI,CCzJDunI,IDyJM,IAAIzkI,ECzJ1B,EAA4B,GDyJN,EAAL;ACxJvB,QAAI,CAAC,KAAK2mF,IAAL,CAAUy9C,UAAf,EAA2B;AACzB,ADyJH/4H,OAAIE,ICzJIo7E,EDyJEzqF,ECzJP,CAAUkoI,ADyJT,CAAW54H,GAAX,IAAmB,CAAvB,CCzJG,GAAuB,EAAvB;AACA,WAAKm7E,IAAL,CAAUy9C,UAAV,CAAqBnF,2BAArB,IAAoDoF,iBAAiB,IAAjB,EAAuB,IAAvB,CAApD;AACD,ADyJF,OAAKh5H,IAAIC,GAAT,EAAe;ACxJd,SAAKq7E,IAAL,CAAUy9C,UAAV,CAAqBK,UAArB,IAAmCJ,iBAAiB,IAAjB,CAAnC;AACA,ADyJAh5H,QAAI,CCzJC+0H,ADyJL,MCzJA,GAAcqE,UAAd;AACAC,oBAAgB,IAAhB,EAAsBD,UAAtB,EAAkC,IAAlC;AACA,ADyJA,QAAKx5I,CCzJAq3I,IDyJKhmI,GAAL,CAAUiP,MAAM/f,CAAhB,IAAsBP,KAAKqR,GAAL,CCzJ3B,ADyJqCiP,MAAMzL,CAAhB,CAA3B,EAAiD;ACxJlD,GArKH;AAsKE6gI,ADyJGzjI,QAAGxD,ECzJE,CDyJL,CAAQ,CAAE6R,MCzJIo1H,ADyJEvoI,CAAhB,EAAmBmT,GCzJd,CAAgBk3H,EDyJIj3I,CCzJpB,ADyJL,ECzJ0B,ADyJE,CAA5B;ACxJDwhI,AD0JC,KAJD,MCtJOG,AD0JA,IC1JP,CAAY,KAAKwS,aAAjB,EAAgC,UAAUuD,UAAV,EAAsB;AACpD,UAAI,CAAC,KAAKjqB,OAAL,GAAetyB,IAAf,CAAoBy9C,UAAzB,EAAqC;AACnClB,AD0JHhmI,QAAGxD,GAAH,CAAQ,CAAR,EAAW,CAAE6R,GC1JCgrC,GD0JKz2C,CAAnB,EAAsByL,EC1JnB,CAAoB23H,GD0JK9qI,CAA5B,OC1JkC26H,YAA/B;AACD,AD2JF,OC7JC,MAEO;AACL4R,AD4JJ,IAdD,MAcO,eC5JelC,OAAO,KAAKxpB,OAAL,EAAxB,EAAwCiqB,UAAxC;AACD;AACD,AD4JFhmI,OAAGyF,GC5JGugI,SD4JN,CAAiB33H,CC5JA0nH,ID4JjB,EAAwBznH,GAAxB,OC5JE,EAAiC;AAC/B03H,AD6JJ,mBC7JejQ,gBAAX,CAA4BvmI,IAA5B,CAAiCw2I,UAAjC,EAA6CA,WAAW70B,QAAX,EAA7C;AACD;AACF,AD6JF,KCtKC,EASG,CD6JC7sG,EAAL,CCtKC,EDsKStE,GAAG1R,CAAb;AC5JCwhI,AD6JD,QAAKvrH,EAAL,CC7JQ0rH,ED6JEjwH,EC7JT,CAAY,AD6JA9E,CAAb,IC7JkBsnI,SAAjB,EAA4B,UAAUkE,MAAV,EAAkB;AAC5CA,AD6JH,QAAKliI,EAAL,GC7JUi/H,AD6JAzjI,GAAG4C,CAAb,EC7JG,CAAc8jI,MAAd;AACD,AD6JF,KC/JC,GD+JIjiI,EAAL,GAAU0J,CAAV;AC5JC,QAAI,CAACo3H,GAAL,EAAU;AACR8B,AD6JH,UAAO,KAAKhoI,SAAL,CC7Je,CD6JtB,IC7J2B08G,OAAL,EAAnB,EAAmC,KAAnC;AACD,AD8JF,GAjCD;AC5HC,AD+JD,EA5CmB,CC1SrB,CD+GqC;ACyEnC2rB,UAAQ,SAASA,MAAT,CAAgB1B,UAAhB,EAA4B;AAClC,AD+JHz3H,QC/JOsnC,ED+JE,KC/JK,KAAK+sF,ED+JE,SC/JP,CAAiBxzI,MAAjB,KAA4B,CAAvC;AACA,SAAKwzI,WAAL,CAAiB5yI,IAAjB,CAAsBg2I,UAAtB;AACA,AD+JF,QC/JMnwF,IAAJ,EAAU;AACR8xF,qBAAe,KAAK/E,WAApB;AACD,AD+JH,SAAO,KAAKp0H,SAAL,EAAP;AC9JC,ADgKD,EA/OmC,CC/GrC;AA+LEynH,iBAAe,SAASA,aAAT,GAAyB;AACtCnG,ADgKHthH,WChKUyhH,CDgKC,GChKR,CAAY,KAAKwS,GDgKG,UChKpB,EAAgC,UAAUuD,UAAV,EAAsB;AACpDA,iBAAW/P,aAAX;AACD,ADgKH,KClKE,EDkKG3xH,EAAL,IAAW,CAAE,CAAb;AC/JEwrH,ADgKF,OAAKvrH,EAAL,EChKS0rH,EDgKE,CAAE,CChKX,ADgKF,CChKc,KAAKuS,SAAjB,EAA4B,UAAUkE,MAAV,EAAkB;AAC5CA,ADgKJ,OAAKliI,EAAL,IChKWyxH,ADgKA,CAAE,CAAb,WChKI;AACD,KAFD;AAGD,ADgKD,OAAKppH,gBAAL;ACtWF,CADA;AAyMA,ADgKE,SChKO+3H,ADgKA,IAAP,EChKF,CAAgBW,GAAhB,EAAqBqC,MAArB,EAA6BC,QAA7B,EAAuC;AACrC,ADiKA,EA3PmC,IC0F/BpB,KAAKxxH,SAAS+5G,aAAT,CAAuB,IAAvB,CAAT;AACA,MAAI4Y,MAAJ,EAAY;AACVnB,ADiKHznI,MAAK,CCjKCowH,SDiKUhyH,CAAX,CCjKF,CAAewqI,ADiKE,MCjKjB;AACD;AACD,ADiKA,MCjKIC,GDiKG,KCjKP,ADiKYvjI,ECjKE,ADiKP,GAAUlH,EAAEkH,EAAZ,GAAiB,KAAKC,EAAL,GAAUnH,EAAEmH,EAA7B,GAAkC,KAAKC,EAAL,GAAUpH,EAAEoH,EAA9C,GAAmD,KAAKC,EAAL,GAAUrH,EAAEqH,EAAtE;AChKE8gI,ADkKF,EAjQmC,MC+F7BhD,IAAJ,CAAS+B,YAAT,CAAsBmC,EAAtB,EAA0BoB,QAA1B;AACD,GAFD,MAEO;AACLtC,ADkKHtmI,QClKOsjI,GDkKG,CClKP,CAASnT,UDkKU,CClKnB,CAAqBqX,EAArB;AACD;AACDlB,ADkKA,MClKI1B,GDkKG,KClKP,ADkKYv/H,EAAL,GAAU,KAAKA,EAAf,GAAoB,KAAKC,EAAL,GAAU,KAAKA,EAAnC,GAAwC,KAAKC,EAAL,GAAU,KAAKA,EAAvD,GAA4D,KAAKC,EAAL,GAAU,KAAKA,EAAlF;ACjKA,ADmKA,EAvQmC,OCoG5BgiI,EAAP;AACD;AACD,ADmKCr3I,SCnKQi3I,ADmKA,YAAY,GCnKrB,CAAyBd,GAAzB,EAA8B;AAC5B5O,MAAIzkB,MAAJ,CAAW3wC,MAAX,EAAmB,QAAnB,EAA6BgkE,IAAIP,eAAjC;AACA,ADmKA,MCnKIO,GDmKGx3I,CCnKCq3I,IDmKIlmI,IAAL,CAAW,KAAKoF,EAAL,GAAU,KAAKA,EAAf,ECnKlB,CDmKsC,CCnKA,IDmKKC,EAAL,GAAU,KAAKA,EAAnC,GAAwC,KAAKC,EAAL,GAAU,KAAKA,EAAvD,GAA4D,KAAKC,EAAL,GAAU,KAAKA,EAAtF,CAAP;AClKEkyH,ADoKF,EA7QmC,MCyG7BzkB,MAAJ,CAAW3wC,MAAX,EAAmB,QAAnB,EAA6BgkE,IAAIH,4BAAjC;AACD;AACF,ADoKA/lI,YAAW,YAAY;ACnKxB,SAASgoI,kBAAT,CAA4B9B,GAA5B,EAAiCuC,QAAjC,EAA2C;AACzC,ADoKA,MCpKItN,ADoKA9pI,IAAI,ECpKE60I,GDoKGn2I,CCpKC24I,KDoKN,EAAR,QCpKU,CAAoBxC,IAAIwC,eAAJ,CAAoBrN,aAAxC,CAAV;AACA,MAAIoN,QAAJ,EAAc;AACZtN,ADoKF,MAAK9pI,ECpKCw+H,IDoKK,CAAX,EAAe,ECpKb,GAAgBsL,IAAItsI,KAAJ,GAAY,GAA5B;AACD,GAFD,MAEO;AACLssI,ADoKD,QCpKKtL,ADoKA5qH,EAAL,GAAU,CAAV,GCpKC,GAAgBk2H,IAAItsI,KAApB;AACD,ADoKA,QAAKqW,EAAL,GAAU,CAAV;ACnKF,ADoKE,QAAKC,EAAL,GAAU,CAAV;ACnKH,ADoKG,QAAKC,CCpKCujI,CDoKN,GAAU,CAAV,YCpKH,CAA2BzC,GAA3B,EAAgCkB,EAAhC,EAAoCT,UAApC,EAAgD;AAC9CA,ADqKC,GAPD,MAOO,ICrKIE,IAAX,GAAkBO,EAAlB;AACAT,aAAWiC,KAAX,GAAmB1C,GAAnB;AACAzV,ADqKCp/H,OAAI,ECrKEs/H,EDqKEt/H,CAAR,GCrKD,CAAcs1I,UAAd,EAA4D;AAC1DpvH,aAAS,SAASA,OAAT,CAAiBsxH,QAAjB,EAA2B;AAClC,ADqKH,QAAK5jI,ECrKEnV,ADqKP,GAAU,KAAKmV,ECrKElV,ADqKP,GAAUsB,CAApB,ECrKO,GAAmB,CAAvB,EAA0B;AACxB,ADqKL,QAAK6T,EAAL,ECrKS4jI,CDqKC,KAAK5jI,EAAL,GAAU7T,CAApB,ECrKuBs1I,WAAWE,IAAX,CAAgBkC,kBAAlC;AACApC,ADqKL,QAAKxhI,EAAL,GAAU,KAAKA,CCrKC0tB,CDqKN,GAAUxhC,CAApB,CCrKK;AACA,ADqKL,QAAK+T,EAAL,GAAU,ECrKEohI,GDqKGphI,ECrKE8gI,ADqKP,GCrKE,ADqKQ70I,CAApB,CCrKsBs1I,WAAW/sH,MAArB,EAA6B+sH,WAAW7R,QAAxC,EAAkD;AACvDkU,ADsKP,kBCtKeF,WAD+C;AAEvDrC,uBAAa,CAAChW,OAAOzvH,OAAP,CAAelR,SAAf,CAAD;AAF0C,ADyK/D,OAAK0d,ECzKQ,CAAP,aDyKN;ACrKK;AACD,ADsKJ,SAAO,CCtKCijH,GDsKR,ICtKeroG,OAAP,CAAeygH,QAAf,KAA4BpY,OAAOI,QAAP,CAAgBgY,QAAhB,CAAhC,EAA2D;AACzD,ADuKN,EAzSmC,UCkIzBI,eAAetC,WAAWE,IAAX,CAAgBkC,kBAAnC;AACApC,mBAAW9zG,MAAX;AACA,ADuKPh0B,WAAU,ICvKI2nI,KAAKN,CDuKElhI,CAAX,CCvKI,CDuKU+G,CCvKA46H,ADuKd,EAAkB,SCvKO/sH,MAArB,EAA6B+sH,WAAW7R,QAAxC,EAAkD;AACvDkU,kBAAQC,YAD+C;AAEvDxC,ADuKR,MAAK16H,MAAMtd,SAAX,ECvKqB,ADuKE,CCvKDo6I,QAAD;AAF0C,SAAlD,CAAP;AAID,ADuKJ3qI,WAAQC,IAAR,CAAc,wGAAd;ACtKE,ADuKF,KCzL2D,KDyLpD,KAAKiR,mBAAL,CAA0BpK,CAA1B,EAA6B+G,CAA7B,CAAP;ACtKCuI,ADwKD,UCxKO,SAASA,IAAT,CAAc40H,KAAd,EAAqB;AACzBvC,iBAAWE,IAAX,CAAgBsC,iBAAhB,CAAkCA,iBAAlC,CAAoDtZ,SAApD,GAAgEqZ,KAAhE;AACA,ADwKJ,SAAO,ICxKIvC,CDwKCv3H,SCxKR,UDwKG,CAA0B,IAA1B,EAAgCpK,CAAhC,CAAP;ACvKG,ADyKH,EAtTmC,GCuHyB;AAuB1DqjI,YAAQ,SAASA,MAAT,GAAkB;AACxB1B,ADyKLrgI,cAAa,GCzKGsiI,KAAX,CAAiBP,CDyKErjI,CAAX,EAAe,ECzKvB,CAAwB2hI,UAAxB;AACA,aAAOA,UAAP;AACD,ADyKH,KCnM4D,IDmMrD,KAAKv3H,mBAAL,CAA0BpK,CAA1B,EAA6B,IAA7B,CAAP;ACxKE6tB,AD0KF,EA5TmC,UCkJzB,SAASA,MAAT,GAAkB;AACxB8zG,iBAAWiC,KAAX,CAAiB/1G,MAAjB,CAAwB8zG,UAAxB;AACA,AD0KLv3H,aC1KYu3H,SD0KS,CC1KhB,SD0K2BpoI,CAAX,EAAcC,CAAd,EAAkB;ACzKnC;AA9ByD,ADyM5D,GCzMA;AAgCA,MAAImoI,sBAAsBvJ,sBAA1B,EAAkD;AAChD,AD0KF,MAAI/tH,EC1KEyK,ID0KIvb,EC1KE,AD0KA0G,EAAZ,EC1KgBy3H,mBAAJ,CAAwBiK,WAAW/sH,MAAnC,EAA2C+sH,WAAW7R,QAAtD,EAAgE,EAAE55H,KAAKyrI,WAAW9K,KAAlB,EAAyB1gI,KAAKwrI,WAAW7K,KAAzC,EAAgDznD,MAAMsyD,WAAW5K,MAAjE,EAAhE,CAAV;AACAtL,ADyKF,MAAgBnhH,KCzKPshH,CDyKaryH,EAAE2G,CCzKtB,CAAY,ADyKd,CCzKe,eAAD,EAAkB,UAAlB,EAA8B,gBAA9B,EAAgD,MAAhD,CAAZ,EAAqE,UAAUkkI,MAAV,EAAkB;AACrF,ADwKJ,MAA4B75H,ICxKpB85H,EDwK0B9qI,EAAE4G,CCxKvBwhI,CDwKb,UCxKwByC,MAAX,CAAT;AACA,ADuKJ,MAAwC55H,ICvKhC85H,EDuKsC/qI,EAAE6G,CCvKnC0U,CDuKb,GCvKiBsvH,MAAJ,CAAT;AACAzC,ADuKJ,MAAIl3H,MAAMjR,EAAEyG,EAAZ,CCvKemkI,MAAX,IAAqBtvH,IAAIsvH,MAAJ,IAAc,YAAY;AAC7C,ADsKN,MAAgB15H,MCtKNuhH,ADsKYzyH,EAAE0G,EAAxB,GCtKiBijB,MAAMh5B,SAAN,CAAgBgC,KAAhB,CAAsBhB,IAAtB,CAA2BL,SAA3B,CAAX;AACAw5I,ADqKN,MAA4B35H,KCrKnBgpD,CDqKyBn6D,EAAE2G,ECrK9B,ADqKN,CCrKe2U,GAAT,EAAcm3G,IAAd;AACA,ADoKN,MAAwCrhH,MAAMpR,EAAE4G,CCpKnCikI,CDoKb,ECpKgB1wE,KAAH,CAASguE,UAAT,EAAqB1V,IAArB,CAAP;AACD,OAJD;AAKD,ADoKH,KC5KE,ED4KGhsH,EAAL,GAAUoK,MAAMO,GAAN,GAAYJ,MAAMC,GAAlB,GAAwBH,MAAMK,GAA9B,GAAoCJ,MAAMG,GAApD;ACnKE4nH,ADoKF,OAAKpyH,CCpKCy0H,CDoKN,GAAUrqH,ICpKR,CAAa83H,CDoKCx3H,CCpKd,EAAiB,ADoKT,GAAYJ,MAAME,GCpK1B,ADoKQ,GAAwBH,MAAME,GAA9B,GAAoCJ,MAAMM,GAApD;ACnKEg3H,ADoKF,OAAKxhI,EAAL,GAAUoK,GCpKGk2D,GDoKG71D,GAAN,GAAYJ,CCpKpB,CAAsBy1H,IDoKIt1H,GAAlB,GAAwBN,ECpKhC,CAAmCyK,GDoKGpK,CCpKC+1D,EDoK/B,GAAoCn2D,KCpK5C,CDoKkDG,CCpKCk3H,EDoKrD,SCpKgElhE,UAAX,CAAsB0jE,iBAAzE;AACD,ADoKD,GCjLA,IDiLK/jI,ECpKE,ADoKP,GAAUoK,CCpKCm3H,KDoKK/2H,GAAN,GAAYP,MAAMI,GAAlB,ECpKuBitH,CDoKCptH,MAAMI,GAA9B,GAAoCH,MCpKvC,ADoK6CI,ECpKE,CDoKtD;ACnKE,QAAIb,IAAI,SAASA,CAAT,CAAWy6H,QAAX,EAAqB;AAC3B,ADoKJ,OAAK/7H,GCpKGijH,OAAOqB,MDoKf,ECpKQ,CAAgB6U,WAAW9K,KAA3B,KAAqCpL,OAAOqB,QAAP,CAAgB6U,WAAW7K,KAA3B,CAAzC,EAA4E;AAC1E,YAAI0N,UAAU7C,WAAWE,IAAX,CAAgBsC,iBAAhB,CAAkCA,iBAAlC,CAAoDtZ,SAAlE;AACA,ADoKN,SAAO,GCpKG4Z,CDoKV,cCpKyB9C,WAAWiC,KAAX,CAAiBrF,WAAjB,CAA6B7yI,OAA7B,CAAqCi2I,UAArC,IAAmD,CAAC,CAAvE;AACAA,ADqKN,EA9UmC,iBCyKlB9zG,MAAX;AACA,YAAI62G,gBAAgBlD,KAAKN,GAAL,EAAUS,WAAW/sH,MAArB,EAA6B+sH,WAAW7R,QAAxC,EAAkD;AACpEkU,ADqKT/8H,QAAO,UCrKU06H,ADqKCx6H,EAAX,EAAerQ,CAAf,EAAmB,ICrKE+qI,IAAX,CAAgBkC,kBAD4C;AAEpEtC,uBAAa,CAACE,WAAW9K,KAAZ,EAAmB8K,WAAW7K,KAA9B,EAAqC6K,WAAW5K,MAAhD;AAFuD,ADwK5E,MAAKjgI,GCxKqB,CAApB,EDwKK,CAAX,EAAe,OAAO,IAAP;ACpKT4tI,ADqKN,MAAK5tI,MAAM,CAAX,EAAe,OCrKKwY,ADqKE,ICrKhB,CAAmBk1H,ADqKE1rI,IAAL,CAAWqO,ECrK3B,ADqKgB,CAAP;ACpKT,YAAIs9H,YAAJ,EAAkBC,cAAcrB,MAAd;AAClB,ADqKN,MAAIp5I,IAAI,KCrKKy6I,ADqKAzkI,EAAb,WCrKM;AACD,ADoKL,MAAiBpJ,IAAI,KAAKqJ,EAA1B;ACnKI,ADmKJ,MAA8B3B,IAAI,GCnKvBgmI,EDmK4BpkI,EAAvC,ICnKI;AACD,ADkKH,KChLE,CDgLyClH,IAAI,KAAKmH,EAApD;ACjKEuhI,eAAWzrI,GAAX,GAAiBu1H,OAAOhmH,OAAP,CAAeqE,CAAf,EAAkB63H,WAAWzrI,GAA7B,CAAjB;AACAyrI,ADkKF,eClKaxrI,GAAX,GAAiBs1H,OAAOhmH,OAAP,CAAeqE,CAAf,EAAkB63H,WAAWxrI,GAA7B,CAAjB;AACD,GAlBM,MAkBA,IAAIwrI,sBAAsBjM,iBAA1B,EAA6C;AAClDpD,ADkKF,MAAIznH,EClKEmjE,IAAJ,CAASo0D,EAAT,EAAa,IDkKInpI,GClKjB,CDkKqBkO,CClKC,EDkKE/G,EAAP,GAAYnW,IAAIkd,CClKC,EDkKElH,EAAnB,GAAwBpJ,IAAIsQ,GAAGjH,EAA/B,GAAoC3B,IAAI4I,GAAGhH,EAA9D;ACjKImyH,UAAIY,SAAJ,CAAcyO,WAAW7L,UAAzB,EAAqC,OAArC;AACD,ADkKH,KCpKE,CDoKGjrH,eAAe,CAApB,EAAwB;ACjKtBynH,QAAItkD,IAAJ,CAAS2zD,WAAW7L,UAApB,EAAgC,OAAhC,EAAyC,UAAU57H,CAAV,EAAa;AACpDA,ADkKH,QClKKyqI,ADkKAvkI,EAAL,GAAU,CAAE+G,GAAG/G,EAAf,IClKG;AACD,ADkKF,KCpKC,GDoKIH,EAAL,GAAU,CAAEkH,GAAGlH,EAAf;ACjKA,ADkKA,GCzKM,KDyKDC,CClKC,CDkKN,GClKUyhI,ADkKA,CAAEx6H,GAAGjH,EAAf,gBClKgC44H,kBAA1B,EAA8C;AACnDxG,ADkKD,QClKKtkD,ADkKA7tE,EAAL,EClKC,CAASiiI,ADkKA,CAAEj7H,CClKX,EAAa,ADkKChH,EAAf,KClKC,EAAsB,YAAY;AAChCmyH,UAAIY,SAAJ,CAAcyO,WAAW5I,QAAzB,EAAmC,OAAnC;AACD,ADkKFluH,KCpKC,aDoKc,CAAEA,YAAjB;ACjKCynH,ADmKD,GATD,KC1JMtkD,CDmKC,GCnKL,CAASo0D,EAAT,EAAa,WAAb,EAA0B,YAAY;AACpC9P,UAAIqC,QAAJ,CAAagN,WAAW5I,QAAxB,EAAkC,OAAlC;AACD,ADmKF,KCrKC,GDqKIjgI,IAAL,CAAWqO,EAAX;AClKCmrH,ADoKD,QCpKKtkD,IAAJ,CAASo0D,EAAT,EAAa,UAAb,EAAyB,YAAY;AACnC9P,UAAIuC,WAAJ,CAAgB8M,WAAW5I,QAA3B,EAAqC,OAArC;AACD,ADoKH,KCtKE,CDsKGluH,gBAAgB,GAArB,EAA2B;ACnK1B,GAVM,MAUA,IAAI82H,sBAAsB1I,eAA1B,EAA2C;AAChD3G,ADoKD,QCpKKqC,ADoKAv0H,EAAL,GAAUnH,CAAV,ECpKC,CAAampI,EAAb,EAAiB,OAAjB;AACAT,ADoKD,QAAK1hI,EAAL,GAAUhW,CAAV,CCpKY2nI,aAAX,GAA2BnG,OAAOhmH,OAAP,CAAe,UAAU4sH,GAAV,EAAe;AACvD+P,ADoKH,QAAKliI,CCpKC2jB,CDoKN,GAAUhtB,CCpKP,ADoKH,CCpKY+tI,eAAT,GAA2BjD,WAAWzI,OAAX,CAAmB3uI,QAAnB,EAA3B;AACA,ADoKH,QAAK4V,EAAL,GCpKUkyH,ADoKA9zH,CAAV,ECpKG;AACD,KAH0B,EAGxBojI,WAAW/P,aAHa,CAA3B;AAIA+P,ADoKD,UAAO,IAAP,CCpKY/P,aAAX;AACD,ADqKA;ACpKD+P,aAAW3sF,QAAX,GAAsBy2E,OAAOhmH,OAAP,CAAe,UAAU4sH,GAAV,EAAe;AAClD,ADqKF,MAAIvnH,ECrKEo2H,IAAIxpB,OAAJ,EDqKahuH,CCrKCg6I,IDqKI7oI,IAAL,CAAW,MCrKxB,ADqK8BgQ,ICrKG82H,WAAW9P,ADqKChnH,UCrKZ,EAArC,ADqKiB,CAAnB,CCrKgE;AAC5Dm4H,yBAAmB9B,IAAIxpB,OAAJ,EAAnB,EAAkC,IAAlC;AACD,ADqKH,MAAKhuH,KAAKqR,GAAL,CAAU+P,YAAV,IAA2B,KAAhC,EAAwC;ACpKtC,WAAOunH,GAAP;AACD,ADqKA,GC1KqB,EAKnBsP,GDqKGvhI,EAAL,GAAU,GCrKG40C,IDqKK/7C,IC1KG,AD0KC,CC1KvB,ID0K4BmH,EAAjB,CAAV;ACpKF,ADqKE,QAAKH,EAAL,GAAU,OAAQhW,IAAI,KAAKgW,EAAjB,CAAV;ACpKH,ADqKG,QAAKC,CCrKCkjI,CDqKN,GAAU,OAAQvsI,IAAI,CCrKzB,CAA0BqqI,GAA1B,ADqK8BhhI,ECrKCyhI,ADqKlB,CAAV,SCrKH,EAA2C;AACzC,ADqKC,MCrKG1zB,EDqKE9tG,EAAL,GCrKU+gI,ADqKA,ICrKIxpB,GDqKIn5G,ICrKR,ADqKY,ECrKvB,GDqK4B4B,EAAjB,CAAV;ACpKD,MAAI0kI,eAAe52B,KAAKowB,mBAAL,CAAyB3yI,OAAzB,CAAiCi2I,WAAW/sH,MAA5C,CAAnB;AACA,ADqKC,MCrKGiwH,IDqKI,IAAP,SCrKoB,CAAC,CAAtB,EAAyB;AACvB,ADsKD,QCtKKC,gBAAgB72B,KAAKqwB,sCAAL,CAA4CuG,YAA5C,CAApB;AACA,QAAIC,kBAAkBr7I,SAAtB,EAAiC;AAC/Bq7I,ADsKJ,MAAI/5H,YAAYrhB,ICtKI,CDsKCwR,CCtKjB,IDsKY,CAAY4P,YAAZ,EAA0BD,YAA1B,CAAhB;ACrKIojG,ADsKJ,MAAIjjG,KCtKKszH,IDsKI50I,KAAK+S,GAAL,CAAU,CAAE,IAAI3F,CAAN,IAAYiU,SAAtB,IAAoCD,ECtK7C,CAA4C+5H,SDsKhD,GCtKI,IAA4DC,aAA5D;AACD,ADqKH,MACC75H,SAASvhB,KAAK+S,GAAL,CAAU3F,IAAIiU,SAAd,IAA4BD,YADtC;ACpKEg6H,kBAAcnD,WAAW7R,QAAzB,IAAqC6R,UAArC;AACA,ADsKF,OAAKvhI,CCtKC6tG,CDsKN,GAAYh1G,CCtKDmsF,GDsKKp6E,CCtKV,IAAaijG,CDsKP,GAAa,CCtKD7oB,IAAL,ADsKWhlF,CCtKDyiI,CDsKJ,GAAU53H,MCtKjC,ADsKF,ECtKyC;AACrC,ADsKJ,OAAKhL,EAAL,CCtKQ8kI,EDsKI96I,IAAI+gB,MCtKIijG,ADsKR,GAAa,ECtKA7oB,GDsKKnlF,CCtKV,CAAU4iI,ADsKL,GAAU53H,MAAnC,CCtKI;AACA,ADsKJ,OAAK/K,EAAL,CCtKQ2+H,EDsKIhoI,IAAImU,GCtKC,GDsKL,ECtKU,CAAlB,ADsKqB,KAAK9K,EAAL,GAAU+K,MAAnC;ACrKI,ADsKJ,OAAK9K,EAAL,CCtKQ4kI,EDsKIxmI,IAAIyM,ICtKEk2H,EDsKN,ECtKUrC,CDsKG,KCtKjB,ADsKsB1+H,CCtK1B,CDsKqB,CCtKM,EDsKI8K,MAAnC;ACrKM4zH,iBAASkG,UAAU7D,IAAIrC,MAAd,CAAT;AACD,ADsKL,OCxKI,ADwKCr2H,MCtKM,IAAIu8H,MDsKf,ICtKyBrH,2BAAV,CAAJ,EAA4C;AACjDmB,iBAASkG,UAAUrH,2BAAV,CAAT;AACD,ADsKL,OCxKW,EDwKJ,ICtKI,ADsKX;ACrKM,ADuKN,EA/YmC;ACyO9B;AACD,ADuKL7hI,SAAQ,CCvKCgjI,OAAOgG,EDuKGl/H,UCvKV,ADuKD,EAAwB,GCvKCk5H,OAAOgG,YAAP,EAAqBlD,WAAW7R,QAAhC,MAA8CrmI,SAA1E,EAAqF;AACnF,YAAII,QAAQg1I,OAAOgG,YAAP,EAAqBlD,WAAW7R,QAAhC,CAAZ;AACA6R,ADuKN,SAASh8H,UCvKQ6rH,CDuKGvxH,EAAX,KAAkB,ICvKrB,CDuK0BA,ECvKApW,ADuKzB,IAAmC8b,CCvKpC,UDuK+CzF,EAAX,KAAkB,KAAKA,EAA1D,IAAoEyF,WAAWxF,EAAX,KAAkB,KAAKA,EAA3F,IAAqGwF,WAAWvF,EAAX,KAAkB,KAAKA,EAAnI;ACtKMuhI,ADwKN,EArZmC,iBC6OlB3sF,QAAX,CAAoBnrD,KAApB;AACD;AACF,ADwKJiS,YAAW,UAAW5P,KAAX,EAAkB6P,MAAlB,EAA2B;ACvKpC;AACF,ADwKC,MAAKA,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;ACvK9B,SAASylI,IAAT,CAAcN,GAAd,EAAmBtsH,MAAnB,EAA2Bk7G,QAA3B,EAAqCngD,MAArC,EAA6C;AAC3C,ADwKA,MCxKI/6D,CDwKC3U,EAAL,GAAU/T,CCxKC4jI,KDwKM/zH,GCxKb,GDwKM,CAAV,ECxKyBtS,SAAzB,EAAoC;AAClC,ADwKF,OAAKyW,EAAL,CCxKQ,EDwKEhU,ECxKEwM,IDwKKqD,CCxKT,CAAU,ODwKQ,CAAhB,CAAV,ICxK+B6Y,MAAb,GAAsB,qBAAtB,GAA8Ck7G,QAA9C,GAAyD,GAAnE,CAAN;AACD,ADwKD,OAAK3vH,EAAL,GAAUjU,MAAO6P,SAAS,CAAhB,CAAV;ACvKA,ADwKA,MCxKI4lI,CDwKCvhI,EAAL,GAAUlU,MAAO6P,CCxKA,KAAK,CAAtB,EDwK0B,CAAhB,CAAV;ACvKA,MAAI4zE,OAAOzrD,KAAX,EAAkB;AAChBy9G,ADwKF,OAAKn5H,UCxKU,IAAIywH,EDwKnB,aCxKe,CAAoBrkH,MAApB,EAA4Bk7G,QAA5B,CAAb;AACD,GAFD,MAEO;AACL,ADwKF,QCxKM2R,CDwKC,IAAP,SCxKoB,CAAC7sH,MAAD,EAASk7G,QAAT,EAAmBj0C,MAAnB,CAA0BlM,OAAO8xD,WAAjC,CAAlB;AACAE,ADyKF,EApamC,eC2PpBtF,kBAAkB1oE,KAAlB,CAAwButE,GAAxB,EAA6BO,WAA7B,CAAb;AACD;AACD,ADyKDzlI,MCzKK2zE,IDyKI,GCzKGq0D,MAAP,CDyKe93I,KAAX,EAAkB6P,ICzKGw1H,EDyKrB,EAA2B,MCzKnC,EAAyC;AACvC5hD,WAAOq0D,MAAP,GAAgBr0D,OAAOq0D,MAAP,CAAcnC,IAA9B;AACD,ADyKD,MAAK31I,UAAUzC,SAAf,EAA2ByC,QAAQ,EAAR;ACxK3Bk3I,ADyKA,MAAKrnI,WAAWtS,ECzKCy3I,GAAjB,EAAsBS,EDyKtB,EAA4B5lI,MCzK5B,GDyKqC,CAAT;ACxK5Bu2H,MAAIqC,QAAJ,CAAagN,WAAWlhE,UAAxB,EAAoC,GAApC;AACA,ADyKAv0E,MCzKIojB,EDyKGvT,KCzKI6U,CDyKX,IAAkB,ICzKE+5G,CDyKG1qH,EAAvB,UCzKW,CAAuB,MAAvB,CAAX;AACAqyH,ADyKApmI,MCzKIyoI,EDyKG54H,MCzKP,CAAauT,EDyKG,CAAhB,CCzKA,EAAmB,CDyKG,KAAKpP,EAA3B,OCzKA;AACAoP,ADyKApjB,OCzKK2+H,CDyKE9uH,QCzKP,CDyKgB,CAAhB,CCzKiB4lI,GDyKK,KAAKxhI,EAA3B,CCzK4B2vH,QAA5B;AACA,ADyKA5jI,MCzKIotD,EDyKGv9C,SAAS,CCzKA6U,ADyKhB,IAAsB,KCzKG+5G,ADyKEvqH,EAA3B,WCzKgB,CAAuB,KAAvB,CAAhB;AACAk5C,YAAUyxE,WAAV,CAAsBz7G,IAAtB;AACAgqC,ADyKA,SAAOptD,GCzKG6+H,EDyKV,SCzKA,CAAsB4W,WAAWlhE,UAAjC;AACA,AD0KA,EAlbmC,ICwQ/B2hE,KAAK7B,OAAOW,GAAP,EAAY5nF,SAAZ,EAAuBq2B,OAAOq0D,MAA9B,CAAT;AACA1R,MAAIqC,QAAJ,CAAayN,EAAb,EAAiBnE,IAAIkD,oBAArB;AACA,AD0KDj2H,MC1KKy2H,KD0KK,UAAWx2H,OC1KM8tH,CD0KjB,EAAsB,YC1K/B,EAA2C;AACzC3G,QAAIqC,QAAJ,CAAayN,EAAb,EAAiB,OAAjB;AACD,AD0KD,GC5KA,ID4KK55H,EC1KE,cD0KP,GAAwB2C,QAAxB;ACzKEmnH,QAAIqC,QAAJ,CAAayN,EAAb,EAAiBlT,QAAQyS,WAAW70B,QAAX,EAAR,CAAjB;AACD,AD0KD,SAAO,IAAP;ACzKA62B,AD2KA,EA1bmC,kBC+QjBzC,GAAlB,EAAuBkB,EAAvB,EAA2BT,UAA3B;AACAT,MAAI9C,aAAJ,CAAkBzyI,IAAlB,CAAuBg2I,UAAvB;AACA,AD2KDn5H,SC3KQm5H,UAAP,AD2KiB,YAAY,CAAE;AC1KhC;AACD,ADnRqC,CAArC,QCmRS1C,mBAAT,CAA6BiC,GAA7B,EAAkC7tG,GAAlC,EAAuC;AACrC,SAAOziB,SAASo0H,QAAT,CAAkBvP,IAAlB,GAAyB,GAAzB,GAA+BpiG,GAAtC;AACD,AD2KD;AC1KA,SAAS8vG,eAAT,CAAyBjC,GAAzB,EAA8B5xH,IAA9B,EAAoC21H,WAApC,EAAiD;AAC/C,MAAI9O,MAAMvlH,SAAS+5G,aAAT,CAAuB,QAAvB,CAAV;AACAwL,MAAItL,SAAJ,GAAgBv7G,IAAhB;AACA6mH,MAAItsI,KAAJ,GAAYylB,IAAZ;AACA4xH,MAAIwC,eAAJ,CAAoB3Y,WAApB,CAAgCoL,GAAhC;AACA,MAAI8O,WAAJ,EAAiB;AACf/D,QAAIwC,eAAJ,CAAoBrN,aAApB,GAAoC6K,IAAIwC,eAAJ,CAAoB34I,MAApB,GAA6B,CAAjE;AACD;AACF,AD2KD,SAAS0T,OAAT,CAAkBxU,CAAlB,EAAqB4M,CAArB,EAAwB0H,CAAxB,EAA4B;AC1K5B,SAAS2mI,eAAT,CAAyBhE,GAAzB,EAA8BiE,OAA9B,EAAuC;AACrCA,AD2KD,MAAKl7I,CAAL,GC3KS45B,AD2KA55B,KC3KR,AD2Ka,CC3KCmwI,AD2Kf,OC3KC,GAAwB8G,IAAInC,eAAJ,GAAsB,OAAtB,GAAgC,MAAxD;AACD,AD2KA,MAAKloI,CAAL,GAASA,KAAK,CAAd;AC1KD,AD2KC,MAAK0H,CAAL,EC3KQqkI,CD2KCrkI,KAAK,CAAd,IC3KD,CAAqB2iI,GAArB,EAA0B;AACxB,AD4KD,MC5KKkE,MAAMlE,IAAIsB,UAAJ,GAAiB5xH,SAAS+5G,aAAT,CAAuB,IAAvB,CAA3B;AACA2H,MAAIqC,QAAJ,CAAauM,IAAIzgE,UAAjB,EAA6B,UAA7B;AACAygE,AD4KF92I,MC5KM8zI,CD4KCzzI,GC5KL,CAASw1I,ED4KX,CAAexhI,QAAQtU,CC5KrB,CAAsBi7I,GAAtB,EAA2BlE,ED4K7B,EC5KiChD,AD4KC,IC5KL,CAASmH,UAApC;AACA/S,MAAIqC,QAAJ,CAAayQ,GAAb,EAAkB,UAAlB;AACA,AD4KDh6H,MC5KKk6H,MD4KM,EC5KE10H,ED0KoB,OC1KX+5G,aAAT,CAAuB,MAAvB,CAAZ;AACA2a,QAAMza,SAAN,GAAkB,QAAlB;AACAyH,AD4KDn6H,MC5KKw8H,AD4KA,QC5KJ,CAAa2Q,CD4KEr7I,CAAX,EAAc4M,CC5KlB,AD4KI,EC5KgB,AD4KC0H,CAAjB,EAAqB,WC5KzB;AACA,MAAIgnI,SAAS30H,SAAS+5G,aAAT,CAAuB,MAAvB,CAAb;AACA4a,AD4KA,OAAKt7I,CAAL,CC5KO4gI,ED4KE5gI,CAAT,MC5KA,GAAmB,MAAnB;AACAqoI,AD4KA,MC5KIqC,CD4KC99H,CAAL,GAASA,CAAT,EC5KA,CAAa0uI,MAAb,EAAqB,QAArB;AACAjT,AD4KA,MC5KIqC,CD4KCp2H,CAAL,GAASA,CAAT,EC5KA,CAAagnI,MAAb,EAAqB,MAArB;AACA,MAAIC,UAAU50H,SAAS+5G,aAAT,CAAuB,MAAvB,CAAd;AACA6a,AD4KA,SAAO,CC5KC3a,GD4KR,MC5KA,GAAoB,KAApB;AACAyH,AD6KA,EAZgC,ICjK5BqC,QAAJ,CAAa6Q,OAAb,EAAsB,QAAtB;AACAlT,MAAIqC,QAAJ,CAAa6Q,OAAb,EAAsB,SAAtB;AACA,AD6KDntI,MC7KKotI,MD6KM,IC7KI70H,MD6KOtY,GC7KEqyH,GD6Kb,EAAoB,QC7KhB,CAAuB,MAAvB,CAAd;AACA8a,UAAQ5a,SAAR,GAAoB,QAApB;AACAyH,AD6KA,MC7KIqC,CD6KC1qI,CAAL,GAASqO,GC7KT,CAAamtI,ED6Kb,KC7KA,EAAsB,QAAtB;AACAnT,AD6KA,MC7KIqC,CD6KC99H,CAAL,GAASyB,GC7KT,CAAamtI,ED6Kb,KC7KA,EAAsB,QAAtB;AACA,AD6KA,MC7KIC,CD6KCnnI,CAAL,GAASjG,IC7KI4oI,ED6Kb,EC7KiBwC,eAAJ,GAAsB9yH,SAAS+5G,aAAT,CAAuB,QAAvB,CAAnC;AACA,MAAIuW,IAAI97C,IAAJ,IAAY87C,IAAI97C,IAAJ,CAASy9C,UAAzB,EAAqC;AACnCpX,AD6KF,SAAO,EC7KEG,ED6KT,EC7KE,CAAYsV,IAAI97C,IAAJ,CAASy9C,UAArB,EAAiC,UAAUh5I,KAAV,EAAiBwpC,GAAjB,EAAsB;AACrD8vG,AD8KJ,EAtBgC,oBCxJZjC,GAAhB,EAAqB7tG,GAArB,EAA0BA,QAAQ6tG,IAAIrC,MAAtC;AACD,KAFD;AAGD,AD8KFtmI,GClLC,IDkLK,EC9KE,QD8KStO,CAAX,EAAe;AC7KlBk5I,oBAAgBjC,GAAhB,EAAqBxD,2BAArB,EAAkD,KAAlD;AACD,AD8KD,OAAKzzI,CAAL,GAASA,CAAT;AC7KAqoI,MAAItkD,IAAJ,CAAS03D,MAAT,EAAiB,QAAjB,EAA2B,YAAY;AACrC,AD8KF,SC9KO,AD8KA,IC9KI76I,AD8KX,QC9KmB,CAAjB,EAAoBA,QAAQq2I,IAAIwC,eAAJ,CAAoB34I,MAAhD,EAAwDF,OAAxD,EAAiE;AAC/Dq2I,AD+KJ,EA9BgC,QCjJxBwC,eAAJ,CAAoB74I,KAApB,EAA2BggI,SAA3B,GAAuCqW,IAAIwC,eAAJ,CAAoB74I,KAApB,EAA2BhB,KAAlE;AACD;AACDq3I,AD+KH1oI,OAAM,CC/KCqmI,MAAJ,GAAa,AD+KChoI,CAAX,EAAe,EC/KAhN,KAAlB;AACD,GALD;AAMAu7I,AD+KA,MC/KIra,CD+KCl0H,CAAL,GAASA,CAAT,KC/KA,CAAgB6uI,MAAhB;AACAN,MAAIra,WAAJ,CAAgBua,KAAhB;AACAF,AD+KA,MC/KIra,GD+KG,IAAP,IC/KA,CAAgBwa,MAAhB;AACAH,ADgLA,EAtCgC,IC1I5Bra,WAAJ,CAAgBya,OAAhB;AACAJ,MAAIra,WAAJ,CAAgB0a,OAAhB;AACA,ADgLDp6H,MChLKsyH,CDgLC,UAAWp/H,CAAX,EAAe,QChLpB,EAA4B;AAC1B,QAAI4mI,UAAUv0H,SAAS+0H,cAAT,CAAwB,kBAAxB,CAAd;AACA,ADgLF,OAAKpnI,CChLCqnI,ADgLN,GAASrnI,CAAT,mBChL6BqS,SAAS+0H,cAAT,CAAwB,kBAAxB,CAA3B;AACA,QAAIE,cAAcj1H,SAAS+0H,cAAT,CAAwB,iBAAxB,CAAlB;AACAE,ADgLF,SAAO,IAAP,GChLchiH,KAAZ,CAAkBu2G,OAAlB,GAA4B,OAA5B;AACA,ADiLF,EA9CgC,MCnI1BwD,aAAaoB,OAAb,CAAqBC,oBAAoBiC,GAApB,EAAyB,SAAzB,CAArB,MAA8D,MAAlE,EAA0E;AACxE0E,2BAAqBhb,YAArB,CAAkC,SAAlC,EAA6C,SAA7C;AACD,ADiLJnyH,eAAc,UAAW5N,KAAX,EAAkBhB,KAAlB,EAA0B;AChLrCq7I,oBAAgBhE,GAAhB,EAAqBiE,OAArB;AACA7S,ADiLF,QCjLMtkD,EDiLGnjF,ECjLP,CAAS+6I,EDiLX,kBCjLE,EAA+B,QAA/B,EAAyC,YAAY;AACnD1E,UAAInC,eAAJ,GAAsB,CAACmC,IAAInC,eAA3B;AACAmG,ADiLH,QAAK,CAAL,aCjLmBhE,GAAhB,EAAqBiE,OAArB;AACD,ADgLM,KCnLP,IDmLYl7I,CAAL,GAASJ,KAAT,CAAgB;AC/KxB,ADgLA,QAAK,CAAL;AC/KD,AD+KS,MC/KLi8I,GD+KUjvI,CAAL,GAAShN,KAAT,CAAgB,YC/KI+mB,SAAS+0H,cAAT,CAAwB,oBAAxB,CAA7B;AACArT,AD+KC,MC/KGtkD,ED+KE,CAAL,CC/KD,CAAS83D,sBAAT,EAAiC,SAAjC,EAA4C,UAAU5rI,CAAV,EAAa;AACvD,AD8KO,QC9KHA,CD8KQqE,CC9KN41H,AD8KC,GAAStqI,IC9KZ,CD8KG,CAAgB,GC9KLqQ,EAAEqnI,KAAF,KAAY,EAAZ,IAAkBrnI,EAAEk6H,OAAF,KAAc,EAA9C,CAAJ,EAAuD;AACrDyJ,AD8KH,oBC9KiBb,IAAd;AACD,AD6KO,UAAM,IAAItkI,KAAJ,CAAW,4BAA4B7N,KAAvC,CAAN;AC5KT,GAJD;AAKAynI,ADsKA,MCtKItkD,IAAJ,CAASs3D,KAAT,EAAgB,OAAhB,EAAyB,YAAY;AACnCQ,2BAAuBjb,SAAvB,GAAmCp4F,KAAKC,SAAL,CAAewuG,IAAIJ,aAAJ,EAAf,EAAoCr3I,SAApC,EAA+C,CAA/C,CAAnC;AACAo0I,AD6KF,SAAO,IAAP,KC7KgBZ,IAAd;AACA6I,AD8KF,EA7DgC,yBCjHPnqE,KAAvB;AACAmqE,2BAAuBJ,MAAvB;AACD,AD8KF/sI,GCnLC,YDmLa,UAAW9N,KAAX,EAAmB;AC7KhCynI,MAAItkD,IAAJ,CAASu3D,MAAT,EAAiB,OAAjB,EAA0B,YAAY;AACpCrE,AD8KF,QC9KM6B,ED8KGl4I,EC9KP,GD8KF;AC7KC,GAFD;AAGAynI,AD8KC,MC9KGtkD,ED8KE,CAAL,CC9KD,CAASw3D,OAAT,EAAkB,OAAlB,EAA2B,YAAY;AACrC,AD6KO,QC7KHtC,GD6KU,KAAKj5I,CAAZ,IC7KU87I,OAAO,0BAAP,CAAjB;AACA,AD6KD,QC7KK7C,AD6KA,CAAL,SC7KC,EAAgB;AACdhC,AD4KK,UC5KD+B,CD4KQ,KC5KZ,AD4KiBpsI,CC5KNqsI,AD4KN,UC5KL;AACD,AD4KF,QAAK,CAAL;AC3KA,AD2KQ,GChLT,QDgLgB,KAAK3kI,CAAZ;AC1KT+zH,AD2KC,MC3KGtkD,IAAJ,CAASy3D,OAAT,EAAkB,OAAlB,EAA2B,YAAY;AACrCvE,AD0KQ,QC1KJ9B,ED0KU,IC1Kd,AD0KkB1mI,KAAJ,CAAW,4BAA4B7N,KAAvC,CAAN;ACzKT,GAFD;AAGD,ADmKC;AClKF,AD2KE,EA1EgC,OCjGzBg2I,eAAT,CAAyBK,GAAzB,EAA8B;AAC5B,MAAI8E,UAAU,KAAK,CAAnB;AACA9E,AD2KDtoI,MC3KK6pI,ED2KE,YAAY,CC3KlB,GAAsB7xH,SAAS+5G,aAAT,CAAuB,KAAvB,CAAtB;AACAc,SAAOE,MAAP,CAAcuV,IAAIuB,eAAJ,CAAoB5+G,KAAlC,EAAyC;AACvC/S,AD2KF,SAAO,EC3KE,ED2KE,GC5K8B,ED4KzBjY,WAAT,CAAsB,KAAK5O,CAA3B,EAA8B,KAAK4M,CAAnC,EAAsC,KAAK0H,CAA3C,CAAP;AC1KEg9H,AD4KF,EAhFgC,cC5FlB,MAF2B;AAGvCxqH,YAAQ,OAH+B;AAIvCspH,AD4KHvhI,OAAM,KC5KK,KD4KMC,CAAX,EAAe,GChLqB;AAKvC2M,cAAU;AAL6B,ADkLzC,GClLA,IDkLKzb,CAAL,GAAS8O,EAAE9O,CAAX;AC3KA,AD4KA,OAAK4M,CAAL,GC5KSovI,AD4KAltI,EAAElC,CAAX,CC5KA,CAAcqD,CAAd,EAAiB;AACfA,AD4KF,MC5KIkqE,CD4KC7lE,CAAL,GAASxF,EAAEwF,CAAX,MC5KE;AACA2iI,QAAIpwH,KAAJ,IAAak1H,UAAU9rI,EAAEs5H,OAAzB;AACA0N,AD4KF,QC5KM1B,CD4KC,IAAP,GC5KE;AACAwG,AD6KF,EA1FgC,YCnFpB9rI,EAAEs5H,OAAZ;AACA,WAAO,KAAP;AACD,AD6KFx6H,MAAK,UAAWD,CAAX,EAAcE,CAAd,EAAkB;AC5KtB,WAASitI,QAAT,GAAoB;AAClB5T,AD6KF,MAAKr5H,EC7KC47H,ID6KKprI,OC7KT,CAAgBy3I,CD6KlB,EAAuB,CC7KDzB,aAApB,EAAmCxB,IAAIoD,UAAvC;AACA/O,QAAIzkB,MAAJ,CAAW3wC,MAAX,EAAmB,WAAnB,EAAgC+oE,IAAhC;AACA3T,AD6KDp5H,QC7KK20G,GD6KG10G,GC7KP,CAAW+jE,AD6KZ,CAAc,KC7Kb,EAAmB,SAAnB,EAA8BgpE,QAA9B,6DD6KD;AC5KA,AD6KA,UAAO,KAAK9sI,UAAL,CAAiBL,CAAjB,EAAoBE,CAApB,CAAP;AC5KD,AD8KC,WC9KQktI,SAAT,CAAmBjsI,CAAnB,EAAsB;AACpBA,MAAEkqE,cAAF;AACA4hE,AD8KF,OAAK/7I,CAAL,IAAU8O,EC9KEmB,AD8KAjQ,CAAZ,CC9KcupI,OAAZ;AACAlB,AD8KF,OAAKz7H,CC9KC89H,AD8KN,IAAU57H,EAAElC,CAAZ,CC9KE,CAAaqqI,IAAIzB,aAAjB,EAAgCxB,IAAIoD,UAApC;AACA/O,AD8KF,OAAK/zH,CC9KCyvE,AD8KN,IC9KE,AD8KQj1E,CC9KCmkE,CD8KC3+D,CAAZ,IC9KE,EAAiB,WAAjB,EAA8B0nI,IAA9B;AACA3T,QAAItkD,IAAJ,CAAS9Q,MAAT,EAAiB,SAAjB,EAA4BgpE,QAA5B;AACA,AD8KF,SAAO,EC9KE,ED8KT,GC9KE;AACD,AD+KD,EA3GgC;ACnEhC5T,MAAItkD,IAAJ,CAASkzD,IAAIuB,eAAb,EAA8B,WAA9B,EAA2C0D,SAA3C;AACA7T,AD+KDj5H,MC/KK20E,IAAJ,CAASkzD,CD+KC,GC/KGzB,OD+KQnmI,CAAX,EAAe,GC/KzB,EAA4B,WAA5B,EAAyC6sI,SAAzC;AACAjF,MAAIzgE,UAAJ,CAAew/D,YAAf,CAA4BiB,IAAIuB,eAAhC,EAAiDvB,IAAIzgE,UAAJ,CAAe0jE,iBAAhE;AACD,AD+KC,OAAKl6I,CAAL,IAAUqP,CAAV;AC9KF,AD+KE,OAAKzC,CAAL,CC/KOwoI,GD+KG/lI,CAAV,IC/KF,CAAkB4nI,GAAlB,EAAuBjoI,CAAvB,EAA0B;AACxBioI,AD+KA,MC/KIzgE,CD+KCliE,CAAL,IAAUjF,CAAV,GC/KA,CAAeuqB,KAAf,CAAqB/S,KAArB,GAA6B7X,IAAI,IAAjC;AACA,MAAIioI,IAAIsB,UAAJ,IAAkBtB,IAAIzC,SAA1B,EAAqC;AACnCyC,AD+KF,QC/KMsB,CD+KC,IAAP,KC/KE,CAAe3+G,KAAf,CAAqB/S,KAArB,GAA6B7X,IAAI,IAAjC;AACD,ADgLD,EArHgC;AC1DhC,MAAIioI,IAAIzB,aAAR,EAAuB;AACrByB,ADgLH9nI,QChLOqmI,KDgLK,QChLT,CAAkB57G,CDgLEtqB,CAAX,EAAcC,CChLvB,ADgLS,CChLesX,CDgLG,IChL3B,GAAgC7X,IAAI,IAApC;AACD;AACF,ADgLC,OAAKhP,CAAL,GAASsP,EAAEtP,CAAF,GAAMuP,EAAEvP,CAAjB;AC/KF,ADgLE,OAAK4M,CAAL,CChLOisI,EDgLEvpI,EAAE1C,CAAF,GAAM2C,EAAE3C,CAAjB,KChLF,CAA0BqqI,GAA1B,EAA+BkF,gBAA/B,EAAiD;AAC/C,ADgLA,MChLIhY,CDgLC7vH,CAAL,GAAShF,EAAEgF,CAAF,GChLM,ADgLA/E,EChLf,ADgLiB+E,CAAjB;AC/KAktH,SAAOG,IAAP,CAAYsV,IAAI7C,mBAAhB,EAAqC,UAAUhM,GAAV,EAAexnI,KAAf,EAAsB;AACzD,ADgLF,QChLMw7I,CDgLC,IAAP,SChLoB,EAAlB;AACA,ADiLF,EA/HgC,MClD1BvB,gBAAgB5D,IAAI5C,sCAAJ,CAA2CzzI,KAA3C,CAApB;AACA4gI,WAAOG,IAAP,CAAYkZ,aAAZ,EAA2B,UAAUnD,UAAV,EAAsB7R,QAAtB,EAAgC;AACzDuW,ADiLL5sI,kBCjLiBq2H,ADiLA,QCjLZ,EDiLuB/2H,CAAX,CCjLYqtI,CDiLE9sI,CAAd,EAAkB,eCjLaqoI,WAAWnQ,YAA9B,GAA6CmQ,WAAW70B,QAAX,EAArE;AACD,KAFD;AAGAshB,ADiLF,OAAKnkI,CAAL,IAAU8O,CCjLClO,CDiLCZ,CAAF,GCjLR,ADiLcqP,CAAhB,GCjLoB+sI,WAAlB;AACD,ADiLD,GCxLA,IDwLKxvI,CAAL,IAAUkC,EAAElC,CAAF,GAAMyC,CAAhB;AChLA,ADiLA,OAAKiF,CAAL,CCjLO6vH,GDiLGr1H,EAAEwF,CAAF,ECjLV,CDiLgBjF,CAAhB;AChLD;AACD,ADiLE,SCjLO6lI,ADiLA,IAAP,gBCjLF,CAA8B+B,GAA9B,EAAmC;AACjC,ADkLA,EAzIgC,KCzC3B,IAAIr2I,QAAQ,CAAjB,EAAoBA,QAAQq2I,IAAIwC,eAAJ,CAAoB34I,MAAhD,EAAwDF,OAAxD,EAAiE;AAC/D,QAAIq2I,IAAIwC,eAAJ,CAAoB74I,KAApB,EAA2BhB,KAA3B,KAAqCq3I,IAAIrC,MAA7C,EAAqD;AACnDqC,ADkLLxnI,MAAK,IClLIgqI,MDkLO3qI,CAAX,EAAcE,CAAd,EAAkB,GClLlB,CAAoBo9H,aAApB,GAAoCxrI,KAApC;AACD;AACF,ADkLD,MAAKoO,MAAMxP,SAAX,EAAuB;ACjLxB;AACD,ADkLGyP,SClLMoqI,EDkLEnqI,IAAR,CAAc,OClLjB,CAAwBmtI,eAAxB,EAAyC,8DDkLtC;ACjLD,ADkLC,MClLGA,IDkLI,KAAK3sI,OClLO5O,GDkLZ,CAAiBgO,CAAjB,CClLJ,CDkLwBE,CAApB,CAAP,EClL8B,CAA/B,EAAkC;AAChCqjI,ADmLD,4BCnLyBnxI,IAAxB,CAA6B+xE,MAA7B,EAAqC,YAAY;AAC/ComE,qBAAegD,eAAf;AACD,ADmLH,KCrLE,EDqLGr8I,CAAL,IAAU8O,EAAE9O,CAAZ;AClLC,ADmLD,OAAK4M,CAAL,IAAUkC,EAAElC,CAAZ;AClLA40H,ADmLA,OAAKltH,CAAL,CCnLOqtH,GDmLG7yH,CCnLV,CAAYutI,ADmLA/nI,CAAZ,cCnLA,EAA6B,UAAUhC,CAAV,EAAa;AACxCA,MAAEq1H,aAAF;AACD,ADmLD,GCrLA,MDqLO,IAAP;AClLD,ADoLC,EA1JgC;;ACxBlC,ADoLCh4H,ICpLGsqB,QAAQ,ADoLA,UAAW5qB,CAAX,EAAe;ACnLzBgqB,SAAOA,KADG;AAEVijH,ADoLA,OAAKt8I,CCpLCwkI,ADoLN,IAAUn1H,CAAV,ICtLU;AAGV+0H,ADoLA,OAAKx3H,CAAL,IAAUyC,CCpLC+0H,ADoLX;ACvLU,ADwLV,CCxLF,MDwLO9vH,CAAL,IAAUjF,CAAV;ACnLF,IAAIktI,cAAc;AAChBjV,ADoLA,SAAO,IAAP,CCpLYA,UADI;AAEhBmE,ADqLA,EApKgC,mBCjBbA,iBAFH;AAGhBM,oBAAkBA,gBAHF;AAIhBM,ADqLD38H,aAAY,OCrLO28H,GDqLI/8H,CAAX,EAAcC,CAAd,EAAkB,OCzLb;AAKhBm9H,oBAAkBA,gBALF;AAMhBe,ADqLA,OAAKztI,CAAL,GAASsP,EAAEtP,CAAF,GAAMuP,EAAEvP,CAAjB,GCrLqBytI,mBANL;AAOhBU,ADqLA,OAAKvhI,CAAL,GAAS0C,EAAE1C,CAAF,GAAM2C,EAAE3C,CAAjB,MCrLwBuhI,sBAPR;AAQhBU,ADqLA,OAAKv6H,CAAL,GAAShF,EAAEgF,CAAF,GAAM/E,EAAE+E,CAAjB,ECrLoBu6H,kBARJ;AAShBG,mBAAiBA;AATD,AD+LhB,CC/LF,QD+LS,IAAP;ACpLF,ADsLE,EA9KgC,ECR9BwN,QAAQ,EAAEnU,KAAKA,GAAP,EAAZ;AACA,IAAI4O,MAAM,EAAEjD,KAAKA,GAAP,EAAV;AACA,ADsLCpkI,ICtLG6sI,ODsLO,CCtLCzI,GAAZ,MDsLsBllI,CAAX,EAAcE,CAAd,EAAkB;ACrL7B,IAAIpO,QAAQ;AACVq5B,ADsLA,MAAKjrB,GCtLEirB,GDsLIz6B,ECvLD,ODuLV,EAAuB;ACrLvB+8I,eAAaA,WAFH;AAGVlU,ADsLCp5H,OCtLIutI,IDsLIttI,CCzLC,GDyLT,CAAc,iGAAd;ACrLD+nI,ADsLC,OCtLIA,GAJK,AD0LF,KAAK51H,eAAL,CAAsBvS,CAAtB,EAAyBE,CAAzB,CAAP;ACrLDglI,ADuLC,OCvLIyI;AALK,CAAZ;AD8LE,OAAKz8I,CAAL,IAAU8O,EAAE9O,CAAZ;AACA,OAAK4M,CCvLEqtB,ADuLP,IAAUnrB,EAAElC,CAAZ,CCvLOqtB;ADwLP,OAAK3lB,CCxLSioI,ADwLd,IAAUztI,EAAEwF,CAAZ,OCxLcioI;QAAsBlU,MAATmU;AD0L3B,QC1LyCvF,CD0LlC,IAAP,CC1LyCA;AD4LzC,EA/LgC,MCGuBjD,MAATyI;kBACjC77I;AACf,AD4LCiP,iBAAgB,UAAWxB,MAAX,EAAoB;;AAEnC,OAAKrO,CAAL,IAAUqO,MAAV;AACA,OAAKzB,CAAL,IAAUyB,MAAV;AACA,OAAKiG,CAAL,IAAUjG,MAAV;;AAEA,SAAO,IAAP;AAEA,EAzMgC;;AA2MjCgT,kBAAiB,UAAW/R,CAAX,EAAcC,CAAd,EAAkB;;AAElC,OAAKvP,CAAL,GAASsP,EAAEtP,CAAF,GAAMuP,EAAEvP,CAAjB;AACA,OAAK4M,CAAL,GAAS0C,EAAE1C,CAAF,GAAM2C,EAAE3C,CAAjB;AACA,OAAK0H,CAAL,GAAShF,EAAEgF,CAAF,GAAM/E,EAAE+E,CAAjB;;AAEA,SAAO,IAAP;AAEA,EAnNgC;;AAqNjCgN,aAAY,YAAY;;AAEvB,MAAI5F,aAAa,IAAIqB,UAAJ,EAAjB;;AAEA,SAAO,SAASuE,UAAT,CAAqBzM,KAArB,EAA6B;;AAEnC,OAAK,EAAIA,SAASA,MAAMC,OAAnB,CAAL,EAAoC;;AAEnC7F,YAAQyD,KAAR,CAAe,6FAAf;AAEA;;AAED,UAAO,KAAK6O,eAAL,CAAsB7F,WAAW8C,YAAX,CAAyB3J,KAAzB,CAAtB,CAAP;AAEA,GAVD;AAYA,EAhBW,EArNqB;;AAuOjC2M,iBAAgB,YAAY;;AAE3B,MAAI9F,aAAa,IAAIqB,UAAJ,EAAjB;;AAEA,SAAO,SAASyE,cAAT,CAAyBrG,IAAzB,EAA+BnK,KAA/B,EAAuC;;AAE7C,UAAO,KAAKuQ,eAAL,CAAsB7F,WAAWsD,gBAAX,CAA6B7D,IAA7B,EAAmCnK,KAAnC,CAAtB,CAAP;AAEA,GAJD;AAMA,EAVe,EAvOiB;;AAmPjChB,eAAc,UAAW3D,CAAX,EAAe;;AAE5B,MAAIrM,IAAI,KAAKA,CAAb;AAAA,MAAgB4M,IAAI,KAAKA,CAAzB;AAAA,MAA4B0H,IAAI,KAAKA,CAArC;AACA,MAAIrE,IAAI5D,EAAE6D,QAAV;;AAEA,OAAKlQ,CAAL,GAASiQ,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,CAAH,IAASqE,CAA5C;AACA,OAAK1H,CAAL,GAASqD,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,CAAH,IAASqE,CAA5C;AACA,OAAKA,CAAL,GAASrE,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,CAAH,IAASqE,CAA5C;;AAEA,SAAO,IAAP;AAEA,EA9PgC;;AAgQjCmF,eAAc,UAAWpN,CAAX,EAAe;;AAE5B,MAAIrM,IAAI,KAAKA,CAAb;AAAA,MAAgB4M,IAAI,KAAKA,CAAzB;AAAA,MAA4B0H,IAAI,KAAKA,CAArC;AACA,MAAIrE,IAAI5D,EAAE6D,QAAV;;AAEA,MAAIlB,IAAI,KAAMiB,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,EAAH,IAAUqE,CAApC,GAAwCrE,EAAG,EAAH,CAA9C,CAAR;;AAEA,OAAKjQ,CAAL,GAAS,CAAEiQ,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,CAAH,IAASqE,CAAnC,GAAuCrE,EAAG,EAAH,CAAzC,IAAqDjB,CAA9D;AACA,OAAKpC,CAAL,GAAS,CAAEqD,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,CAAH,IAASqE,CAAnC,GAAuCrE,EAAG,EAAH,CAAzC,IAAqDjB,CAA9D;AACA,OAAKsF,CAAL,GAAS,CAAErE,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,EAAH,IAAUqE,CAApC,GAAwCrE,EAAG,EAAH,CAA1C,IAAsDjB,CAA/D;;AAEA,SAAO,IAAP;AAEA,EA7QgC;;AA+QjCuS,kBAAiB,UAAWxL,CAAX,EAAe;;AAE/B,MAAI/V,IAAI,KAAKA,CAAb;AAAA,MAAgB4M,IAAI,KAAKA,CAAzB;AAAA,MAA4B0H,IAAI,KAAKA,CAArC;AACA,MAAImN,KAAK1L,EAAE/V,CAAX;AAAA,MAAc0hB,KAAK3L,EAAEnJ,CAArB;AAAA,MAAwB+U,KAAK5L,EAAEzB,CAA/B;AAAA,MAAkCsN,KAAK7L,EAAE/G,CAAzC;;AAEA;;AAEA,MAAI6S,KAAKD,KAAK5hB,CAAL,GAAS0hB,KAAKpN,CAAd,GAAkBqN,KAAK/U,CAAhC;AACA,MAAIkV,KAAKF,KAAKhV,CAAL,GAAS+U,KAAK3hB,CAAd,GAAkByhB,KAAKnN,CAAhC;AACA,MAAIyN,KAAKH,KAAKtN,CAAL,GAASmN,KAAK7U,CAAd,GAAkB8U,KAAK1hB,CAAhC;AACA,MAAIgiB,KAAK,CAAEP,EAAF,GAAOzhB,CAAP,GAAW0hB,KAAK9U,CAAhB,GAAoB+U,KAAKrN,CAAlC;;AAEA;;AAEA,OAAKtU,CAAL,GAAS6hB,KAAKD,EAAL,GAAUI,KAAK,CAAEP,EAAjB,GAAsBK,KAAK,CAAEH,EAA7B,GAAkCI,KAAK,CAAEL,EAAlD;AACA,OAAK9U,CAAL,GAASkV,KAAKF,EAAL,GAAUI,KAAK,CAAEN,EAAjB,GAAsBK,KAAK,CAAEN,EAA7B,GAAkCI,KAAK,CAAEF,EAAlD;AACA,OAAKrN,CAAL,GAASyN,KAAKH,EAAL,GAAUI,KAAK,CAAEL,EAAjB,GAAsBE,KAAK,CAAEH,EAA7B,GAAkCI,KAAK,CAAEL,EAAlD;;AAEA,SAAO,IAAP;AAEA,EAnSgC;;AAqSjCQ,UAAS,YAAY;;AAEpB,MAAIpG,SAAS,IAAIpJ,OAAJ,EAAb;;AAEA,SAAO,SAASwP,OAAT,CAAkBC,MAAlB,EAA2B;;AAEjCrG,UAAOzE,gBAAP,CAAyB8K,OAAOC,gBAAhC,EAAkDtG,OAAO9B,UAAP,CAAmBmI,OAAOE,WAA1B,CAAlD;AACA,UAAO,KAAK3I,YAAL,CAAmBoC,MAAnB,CAAP;AAEA,GALD;AAOA,EAXQ,EArSwB;;AAkTjCwG,YAAW,YAAY;;AAEtB,MAAIxG,SAAS,IAAIpJ,OAAJ,EAAb;;AAEA,SAAO,SAAS4P,SAAT,CAAoBH,MAApB,EAA6B;;AAEnCrG,UAAOzE,gBAAP,CAAyB8K,OAAOE,WAAhC,EAA6CvG,OAAO9B,UAAP,CAAmBmI,OAAOC,gBAA1B,CAA7C;AACA,UAAO,KAAK1I,YAAL,CAAmBoC,MAAnB,CAAP;AAEA,GALD;AAOA,EAXU,EAlTsB;;AA+TjCyG,qBAAoB,UAAWjW,CAAX,EAAe;;AAElC;AACA;;AAEA,MAAIrM,IAAI,KAAKA,CAAb;AAAA,MAAgB4M,IAAI,KAAKA,CAAzB;AAAA,MAA4B0H,IAAI,KAAKA,CAArC;AACA,MAAIrE,IAAI5D,EAAE6D,QAAV;;AAEA,OAAKlQ,CAAL,GAASiQ,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,CAAH,IAASqE,CAA5C;AACA,OAAK1H,CAAL,GAASqD,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,CAAH,IAASqE,CAA5C;AACA,OAAKA,CAAL,GAASrE,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,EAAH,IAAUqE,CAA7C;;AAEA,SAAO,KAAKvD,SAAL,EAAP;AAEA,EA7UgC;;AA+UjCjB,SAAQ,UAAWhB,CAAX,EAAe;;AAEtB,OAAK9O,CAAL,IAAU8O,EAAE9O,CAAZ;AACA,OAAK4M,CAAL,IAAUkC,EAAElC,CAAZ;AACA,OAAK0H,CAAL,IAAUxF,EAAEwF,CAAZ;;AAEA,SAAO,IAAP;AAEA,EAvVgC;;AAyVjCvE,eAAc,UAAW1B,MAAX,EAAoB;;AAEjC,SAAO,KAAKwB,cAAL,CAAqB,IAAIxB,MAAzB,CAAP;AAEA,EA7VgC;;AA+VjCpC,MAAK,UAAW6C,CAAX,EAAe;;AAEnB,OAAK9O,CAAL,GAASP,KAAKwM,GAAL,CAAU,KAAKjM,CAAf,EAAkB8O,EAAE9O,CAApB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAKwM,GAAL,CAAU,KAAKW,CAAf,EAAkBkC,EAAElC,CAApB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAKwM,GAAL,CAAU,KAAKqI,CAAf,EAAkBxF,EAAEwF,CAApB,CAAT;;AAEA,SAAO,IAAP;AAEA,EAvWgC;;AAyWjCpI,MAAK,UAAW4C,CAAX,EAAe;;AAEnB,OAAK9O,CAAL,GAASP,KAAKyM,GAAL,CAAU,KAAKlM,CAAf,EAAkB8O,EAAE9O,CAApB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAKyM,GAAL,CAAU,KAAKU,CAAf,EAAkBkC,EAAElC,CAApB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAKyM,GAAL,CAAU,KAAKoI,CAAf,EAAkBxF,EAAEwF,CAApB,CAAT;;AAEA,SAAO,IAAP;AAEA,EAjXgC;;AAmXjCtI,QAAO,UAAWC,GAAX,EAAgBC,GAAhB,EAAsB;;AAE5B;;AAEA,OAAKlM,CAAL,GAASP,KAAKyM,GAAL,CAAUD,IAAIjM,CAAd,EAAiBP,KAAKwM,GAAL,CAAUC,IAAIlM,CAAd,EAAiB,KAAKA,CAAtB,CAAjB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAKyM,GAAL,CAAUD,IAAIW,CAAd,EAAiBnN,KAAKwM,GAAL,CAAUC,IAAIU,CAAd,EAAiB,KAAKA,CAAtB,CAAjB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAKyM,GAAL,CAAUD,IAAIqI,CAAd,EAAiB7U,KAAKwM,GAAL,CAAUC,IAAIoI,CAAd,EAAiB,KAAKA,CAAtB,CAAjB,CAAT;;AAEA,SAAO,IAAP;AAEA,EA7XgC;;AA+XjCnE,cAAa,YAAY;;AAExB,MAAIlE,MAAM,IAAIuI,OAAJ,EAAV;AACA,MAAItI,MAAM,IAAIsI,OAAJ,EAAV;;AAEA,SAAO,SAASrE,WAAT,CAAsBC,MAAtB,EAA8BC,MAA9B,EAAuC;;AAE7CpE,OAAIiC,GAAJ,CAASkC,MAAT,EAAiBA,MAAjB,EAAyBA,MAAzB;AACAlE,OAAIgC,GAAJ,CAASmC,MAAT,EAAiBA,MAAjB,EAAyBA,MAAzB;;AAEA,UAAO,KAAKrE,KAAL,CAAYC,GAAZ,EAAiBC,GAAjB,CAAP;AAEA,GAPD;AASA,EAdY,EA/XoB;;AA+YjCoE,cAAa,UAAWrE,GAAX,EAAgBC,GAAhB,EAAsB;;AAElC,MAAIpL,SAAS,KAAKA,MAAL,EAAb;;AAEA,SAAO,KAAKiP,YAAL,CAAmBjP,UAAU,CAA7B,EAAiC+O,cAAjC,CAAiDpQ,KAAKyM,GAAL,CAAUD,GAAV,EAAexM,KAAKwM,GAAL,CAAUC,GAAV,EAAepL,MAAf,CAAf,CAAjD,CAAP;AAEA,EArZgC;;AAuZjChB,QAAO,YAAY;;AAElB,OAAKE,CAAL,GAASP,KAAKK,KAAL,CAAY,KAAKE,CAAjB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAKK,KAAL,CAAY,KAAK8M,CAAjB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAKK,KAAL,CAAY,KAAKwU,CAAjB,CAAT;;AAEA,SAAO,IAAP;AAEA,EA/ZgC;;AAiajC1G,OAAM,YAAY;;AAEjB,OAAK5N,CAAL,GAASP,KAAKmO,IAAL,CAAW,KAAK5N,CAAhB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAKmO,IAAL,CAAW,KAAKhB,CAAhB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAKmO,IAAL,CAAW,KAAK0G,CAAhB,CAAT;;AAEA,SAAO,IAAP;AAEA,EAzagC;;AA2ajC/D,QAAO,YAAY;;AAElB,OAAKvQ,CAAL,GAASP,KAAK8Q,KAAL,CAAY,KAAKvQ,CAAjB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAK8Q,KAAL,CAAY,KAAK3D,CAAjB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAK8Q,KAAL,CAAY,KAAK+D,CAAjB,CAAT;;AAEA,SAAO,IAAP;AAEA,EAnbgC;;AAqbjC9D,cAAa,YAAY;;AAExB,OAAKxQ,CAAL,GAAW,KAAKA,CAAL,GAAS,CAAX,GAAiBP,KAAKmO,IAAL,CAAW,KAAK5N,CAAhB,CAAjB,GAAuCP,KAAKK,KAAL,CAAY,KAAKE,CAAjB,CAAhD;AACA,OAAK4M,CAAL,GAAW,KAAKA,CAAL,GAAS,CAAX,GAAiBnN,KAAKmO,IAAL,CAAW,KAAKhB,CAAhB,CAAjB,GAAuCnN,KAAKK,KAAL,CAAY,KAAK8M,CAAjB,CAAhD;AACA,OAAK0H,CAAL,GAAW,KAAKA,CAAL,GAAS,CAAX,GAAiB7U,KAAKmO,IAAL,CAAW,KAAK0G,CAAhB,CAAjB,GAAuC7U,KAAKK,KAAL,CAAY,KAAKwU,CAAjB,CAAhD;;AAEA,SAAO,IAAP;AAEA,EA7bgC;;AA+bjC7D,SAAQ,YAAY;;AAEnB,OAAKzQ,CAAL,GAAS,CAAE,KAAKA,CAAhB;AACA,OAAK4M,CAAL,GAAS,CAAE,KAAKA,CAAhB;AACA,OAAK0H,CAAL,GAAS,CAAE,KAAKA,CAAhB;;AAEA,SAAO,IAAP;AAEA,EAvcgC;;AAycjC5D,MAAK,UAAW5B,CAAX,EAAe;;AAEnB,SAAO,KAAK9O,CAAL,GAAS8O,EAAE9O,CAAX,GAAe,KAAK4M,CAAL,GAASkC,EAAElC,CAA1B,GAA8B,KAAK0H,CAAL,GAASxF,EAAEwF,CAAhD;AAEA,EA7cgC;;AA+cjC;;AAEA3D,WAAU,YAAY;;AAErB,SAAO,KAAK3Q,CAAL,GAAS,KAAKA,CAAd,GAAkB,KAAK4M,CAAL,GAAS,KAAKA,CAAhC,GAAoC,KAAK0H,CAAL,GAAS,KAAKA,CAAzD;AAEA,EArdgC;;AAudjCxT,SAAQ,YAAY;;AAEnB,SAAOrB,KAAKmR,IAAL,CAAW,KAAK5Q,CAAL,GAAS,KAAKA,CAAd,GAAkB,KAAK4M,CAAL,GAAS,KAAKA,CAAhC,GAAoC,KAAK0H,CAAL,GAAS,KAAKA,CAA7D,CAAP;AAEA,EA3dgC;;AA6djCzD,kBAAiB,YAAY;;AAE5B,SAAOpR,KAAKqR,GAAL,CAAU,KAAK9Q,CAAf,IAAqBP,KAAKqR,GAAL,CAAU,KAAKlE,CAAf,CAArB,GAA0CnN,KAAKqR,GAAL,CAAU,KAAKwD,CAAf,CAAjD;AAEA,EAjegC;;AAmejCvD,YAAW,YAAY;;AAEtB,SAAO,KAAKhB,YAAL,CAAmB,KAAKjP,MAAL,MAAiB,CAApC,CAAP;AAEA,EAvegC;;AAyejCyQ,YAAW,UAAWzQ,MAAX,EAAoB;;AAE9B,SAAO,KAAKiQ,SAAL,GAAiBlB,cAAjB,CAAiC/O,MAAjC,CAAP;AAEA,EA7egC;;AA+ejC6L,OAAM,UAAWmC,CAAX,EAAc0C,KAAd,EAAsB;;AAE3B,OAAKxR,CAAL,IAAU,CAAE8O,EAAE9O,CAAF,GAAM,KAAKA,CAAb,IAAmBwR,KAA7B;AACA,OAAK5E,CAAL,IAAU,CAAEkC,EAAElC,CAAF,GAAM,KAAKA,CAAb,IAAmB4E,KAA7B;AACA,OAAK8C,CAAL,IAAU,CAAExF,EAAEwF,CAAF,GAAM,KAAKA,CAAb,IAAmB9C,KAA7B;;AAEA,SAAO,IAAP;AAEA,EAvfgC;;AAyfjCC,cAAa,UAAWC,EAAX,EAAeC,EAAf,EAAmBH,KAAnB,EAA2B;;AAEvC,SAAO,KAAK9B,UAAL,CAAiBiC,EAAjB,EAAqBD,EAArB,EAA0B7B,cAA1B,CAA0C2B,KAA1C,EAAkDzC,GAAlD,CAAuD2C,EAAvD,CAAP;AAEA,EA7fgC;;AA+fjC6Q,QAAO,UAAWzT,CAAX,EAAcE,CAAd,EAAkB;;AAExB,MAAKA,MAAMxP,SAAX,EAAuB;;AAEtByP,WAAQC,IAAR,CAAc,2FAAd;AACA,UAAO,KAAKiI,YAAL,CAAmBrI,CAAnB,EAAsBE,CAAtB,CAAP;AAEA;;AAED,SAAO,KAAKmI,YAAL,CAAmB,IAAnB,EAAyBrI,CAAzB,CAAP;AAEA,EA1gBgC;;AA4gBjCqI,eAAc,UAAW7H,CAAX,EAAcC,CAAd,EAAkB;;AAE/B,MAAIiT,KAAKlT,EAAEtP,CAAX;AAAA,MAAcyiB,KAAKnT,EAAE1C,CAArB;AAAA,MAAwB8V,KAAKpT,EAAEgF,CAA/B;AACA,MAAIqO,KAAKpT,EAAEvP,CAAX;AAAA,MAAc4iB,KAAKrT,EAAE3C,CAArB;AAAA,MAAwBiW,KAAKtT,EAAE+E,CAA/B;;AAEA,OAAKtU,CAAL,GAASyiB,KAAKI,EAAL,GAAUH,KAAKE,EAAxB;AACA,OAAKhW,CAAL,GAAS8V,KAAKC,EAAL,GAAUH,KAAKK,EAAxB;AACA,OAAKvO,CAAL,GAASkO,KAAKI,EAAL,GAAUH,KAAKE,EAAxB;;AAEA,SAAO,IAAP;AAEA,EAvhBgC;;AAyhBjCG,kBAAiB,UAAWlH,MAAX,EAAoB;;AAEpC,MAAIvN,SAASuN,OAAOlL,GAAP,CAAY,IAAZ,IAAqBkL,OAAOjL,QAAP,EAAlC;;AAEA,SAAO,KAAK9B,IAAL,CAAW+M,MAAX,EAAoB/L,cAApB,CAAoCxB,MAApC,CAAP;AAEA,EA/hBgC;;AAiiBjC0U,iBAAgB,YAAY;;AAE3B,MAAIrR,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAASuO,cAAT,CAAyBC,WAAzB,EAAuC;;AAE7CtR,MAAG7C,IAAH,CAAS,IAAT,EAAgBiU,eAAhB,CAAiCE,WAAjC;;AAEA,UAAO,KAAKvT,GAAL,CAAUiC,EAAV,CAAP;AAEA,GAND;AAQA,EAZe,EAjiBiB;;AA+iBjCuR,UAAS,YAAY;;AAEpB;AACA;;AAEA,MAAIvR,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAASyO,OAAT,CAAkBC,MAAlB,EAA2B;;AAEjC,UAAO,KAAKzT,GAAL,CAAUiC,GAAG7C,IAAH,CAASqU,MAAT,EAAkBrT,cAAlB,CAAkC,IAAI,KAAKa,GAAL,CAAUwS,MAAV,CAAtC,CAAV,CAAP;AAEA,GAJD;AAMA,EAbQ,EA/iBwB;;AA8jBjCC,UAAS,UAAWrU,CAAX,EAAe;;AAEvB,MAAIiM,QAAQ,KAAKrK,GAAL,CAAU5B,CAAV,IAAkBrP,KAAKmR,IAAL,CAAW,KAAKD,QAAL,KAAkB7B,EAAE6B,QAAF,EAA7B,CAA9B;;AAEA;;AAEA,SAAOlR,KAAK2jB,IAAL,CAAWjY,MAAMa,KAAN,CAAa+O,KAAb,EAAoB,CAAE,CAAtB,EAAyB,CAAzB,CAAX,CAAP;AAEA,EAtkBgC;;AAwkBjC7J,aAAY,UAAWpC,CAAX,EAAe;;AAE1B,SAAOrP,KAAKmR,IAAL,CAAW,KAAKO,iBAAL,CAAwBrC,CAAxB,CAAX,CAAP;AAEA,EA5kBgC;;AA8kBjCqC,oBAAmB,UAAWrC,CAAX,EAAe;;AAEjC,MAAIsC,KAAK,KAAKpR,CAAL,GAAS8O,EAAE9O,CAApB;AAAA,MAAuBqR,KAAK,KAAKzE,CAAL,GAASkC,EAAElC,CAAvC;AAAA,MAA0CyW,KAAK,KAAK/O,CAAL,GAASxF,EAAEwF,CAA1D;;AAEA,SAAOlD,KAAKA,EAAL,GAAUC,KAAKA,EAAf,GAAoBgS,KAAKA,EAAhC;AAEA,EAplBgC;;AAslBjC/R,sBAAqB,UAAWxC,CAAX,EAAe;;AAEnC,SAAOrP,KAAKqR,GAAL,CAAU,KAAK9Q,CAAL,GAAS8O,EAAE9O,CAArB,IAA2BP,KAAKqR,GAAL,CAAU,KAAKlE,CAAL,GAASkC,EAAElC,CAArB,CAA3B,GAAsDnN,KAAKqR,GAAL,CAAU,KAAKwD,CAAL,GAASxF,EAAEwF,CAArB,CAA7D;AAEA,EA1lBgC;;AA4lBjCgP,mBAAkB,UAAWjU,CAAX,EAAe;;AAEhC,MAAIkU,eAAe9jB,KAAK+S,GAAL,CAAUnD,EAAEmU,GAAZ,IAAoBnU,EAAEoU,MAAzC;;AAEA,OAAKzjB,CAAL,GAASujB,eAAe9jB,KAAK+S,GAAL,CAAUnD,EAAE0L,KAAZ,CAAxB;AACA,OAAKnO,CAAL,GAASnN,KAAK8S,GAAL,CAAUlD,EAAEmU,GAAZ,IAAoBnU,EAAEoU,MAA/B;AACA,OAAKnP,CAAL,GAASiP,eAAe9jB,KAAK8S,GAAL,CAAUlD,EAAE0L,KAAZ,CAAxB;;AAEA,SAAO,IAAP;AAEA,EAtmBgC;;AAwmBjC2I,qBAAoB,UAAWpR,CAAX,EAAe;;AAElC,OAAKtS,CAAL,GAASsS,EAAEmR,MAAF,GAAWhkB,KAAK+S,GAAL,CAAUF,EAAEyI,KAAZ,CAApB;AACA,OAAKnO,CAAL,GAAS0F,EAAE1F,CAAX;AACA,OAAK0H,CAAL,GAAShC,EAAEmR,MAAF,GAAWhkB,KAAK8S,GAAL,CAAUD,EAAEyI,KAAZ,CAApB;;AAEA,SAAO,IAAP;AAEA,EAhnBgC;;AAknBjC4I,wBAAuB,UAAWtX,CAAX,EAAe;;AAErC,MAAI4D,IAAI5D,EAAE6D,QAAV;;AAEA,OAAKlQ,CAAL,GAASiQ,EAAG,EAAH,CAAT;AACA,OAAKrD,CAAL,GAASqD,EAAG,EAAH,CAAT;AACA,OAAKqE,CAAL,GAASrE,EAAG,EAAH,CAAT;;AAEA,SAAO,IAAP;AAEA,EA5nBgC;;AA8nBjC2T,qBAAoB,UAAWvX,CAAX,EAAe;;AAElC,MAAIyP,KAAK,KAAK1H,mBAAL,CAA0B/H,CAA1B,EAA6B,CAA7B,EAAiCvL,MAAjC,EAAT;AACA,MAAIib,KAAK,KAAK3H,mBAAL,CAA0B/H,CAA1B,EAA6B,CAA7B,EAAiCvL,MAAjC,EAAT;AACA,MAAIkb,KAAK,KAAK5H,mBAAL,CAA0B/H,CAA1B,EAA6B,CAA7B,EAAiCvL,MAAjC,EAAT;;AAEA,OAAKd,CAAL,GAAS8b,EAAT;AACA,OAAKlP,CAAL,GAASmP,EAAT;AACA,OAAKzH,CAAL,GAAS0H,EAAT;;AAEA,SAAO,IAAP;AAEA,EA1oBgC;;AA4oBjC5H,sBAAqB,UAAW/H,CAAX,EAAczL,KAAd,EAAsB;;AAE1C,SAAO,KAAKiR,SAAL,CAAgBxF,EAAE6D,QAAlB,EAA4BtP,QAAQ,CAApC,CAAP;AAEA,EAhpBgC;;AAkpBjCgR,SAAQ,UAAW9C,CAAX,EAAe;;AAEtB,SAAWA,EAAE9O,CAAF,KAAQ,KAAKA,CAAf,IAAwB8O,EAAElC,CAAF,KAAQ,KAAKA,CAArC,IAA8CkC,EAAEwF,CAAF,KAAQ,KAAKA,CAApE;AAEA,EAtpBgC;;AAwpBjCzC,YAAW,UAAW5P,KAAX,EAAkB6P,MAAlB,EAA2B;;AAErC,MAAKA,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;;AAE5B,OAAK9R,CAAL,GAASiC,MAAO6P,MAAP,CAAT;AACA,OAAKlF,CAAL,GAAS3K,MAAO6P,SAAS,CAAhB,CAAT;AACA,OAAKwC,CAAL,GAASrS,MAAO6P,SAAS,CAAhB,CAAT;;AAEA,SAAO,IAAP;AAEA,EAlqBgC;;AAoqBjCC,UAAS,UAAW9P,KAAX,EAAkB6P,MAAlB,EAA2B;;AAEnC,MAAK7P,UAAUzC,SAAf,EAA2ByC,QAAQ,EAAR;AAC3B,MAAK6P,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;;AAE5B7P,QAAO6P,MAAP,IAAkB,KAAK9R,CAAvB;AACAiC,QAAO6P,SAAS,CAAhB,IAAsB,KAAKlF,CAA3B;AACA3K,QAAO6P,SAAS,CAAhB,IAAsB,KAAKwC,CAA3B;;AAEA,SAAOrS,KAAP;AAEA,EA/qBgC;;AAirBjC+P,sBAAqB,UAAWC,SAAX,EAAsBrR,KAAtB,EAA6BkR,MAA7B,EAAsC;;AAE1D,MAAKA,WAAWtS,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,qEAAd;AAEA;;AAED,OAAKlP,CAAL,GAASiS,UAAUC,IAAV,CAAgBtR,KAAhB,CAAT;AACA,OAAKgM,CAAL,GAASqF,UAAUE,IAAV,CAAgBvR,KAAhB,CAAT;AACA,OAAK0T,CAAL,GAASrC,UAAUuH,IAAV,CAAgB5Y,KAAhB,CAAT;;AAEA,SAAO,IAAP;AAEA;;AA/rBgC,CAAlC;;AAmsBA;;;;;;;AAOA,SAASijB,OAAT,GAAmB;;AAElB,MAAK3T,QAAL,GAAgB,CAEf,CAFe,EAEZ,CAFY,EAET,CAFS,EAGf,CAHe,EAGZ,CAHY,EAGT,CAHS,EAIf,CAJe,EAIZ,CAJY,EAIT,CAJS,CAAhB;;AAQA,KAAKrP,UAAUC,MAAV,GAAmB,CAAxB,EAA4B;;AAE3BmO,UAAQyD,KAAR,CAAe,+EAAf;AAEA;AAED;;AAEDvS,OAAOK,MAAP,CAAeqjB,QAAQ3jB,SAAvB,EAAkC;;AAEjC4jB,YAAW,IAFsB;;AAIjC5V,MAAK,UAAW0E,GAAX,EAAgBC,GAAhB,EAAqBC,GAArB,EAA0BE,GAA1B,EAA+BC,GAA/B,EAAoCC,GAApC,EAAyCE,GAAzC,EAA8CC,GAA9C,EAAmDC,GAAnD,EAAyD;;AAE7D,MAAIM,KAAK,KAAK1D,QAAd;;AAEA0D,KAAI,CAAJ,IAAUhB,GAAV,CAAegB,GAAI,CAAJ,IAAUZ,GAAV,CAAeY,GAAI,CAAJ,IAAUR,GAAV;AAC9BQ,KAAI,CAAJ,IAAUf,GAAV,CAAee,GAAI,CAAJ,IAAUX,GAAV,CAAeW,GAAI,CAAJ,IAAUP,GAAV;AAC9BO,KAAI,CAAJ,IAAUd,GAAV,CAAec,GAAI,CAAJ,IAAUV,GAAV,CAAeU,GAAI,CAAJ,IAAUN,GAAV;;AAE9B,SAAO,IAAP;AAEA,EAdgC;;AAgBjCO,WAAU,YAAY;;AAErB,OAAK3F,GAAL,CAEC,CAFD,EAEI,CAFJ,EAEO,CAFP,EAGC,CAHD,EAGI,CAHJ,EAGO,CAHP,EAIC,CAJD,EAII,CAJJ,EAIO,CAJP;;AAQA,SAAO,IAAP;AAEA,EA5BgC;;AA8BjCS,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBiD,SAAvB,CAAkC,KAAK3B,QAAvC,CAAP;AAEA,EAlCgC;;AAoCjCrB,OAAM,UAAWxC,CAAX,EAAe;;AAEpB,MAAIuH,KAAK,KAAK1D,QAAd;AACA,MAAI4D,KAAKzH,EAAE6D,QAAX;;AAEA0D,KAAI,CAAJ,IAAUE,GAAI,CAAJ,CAAV,CAAmBF,GAAI,CAAJ,IAAUE,GAAI,CAAJ,CAAV,CAAmBF,GAAI,CAAJ,IAAUE,GAAI,CAAJ,CAAV;AACtCF,KAAI,CAAJ,IAAUE,GAAI,CAAJ,CAAV,CAAmBF,GAAI,CAAJ,IAAUE,GAAI,CAAJ,CAAV,CAAmBF,GAAI,CAAJ,IAAUE,GAAI,CAAJ,CAAV;AACtCF,KAAI,CAAJ,IAAUE,GAAI,CAAJ,CAAV,CAAmBF,GAAI,CAAJ,IAAUE,GAAI,CAAJ,CAAV,CAAmBF,GAAI,CAAJ,IAAUE,GAAI,CAAJ,CAAV;;AAEtC,SAAO,IAAP;AAEA,EA/CgC;;AAiDjCiQ,iBAAgB,UAAW1X,CAAX,EAAe;;AAE9B,MAAIyH,KAAKzH,EAAE6D,QAAX;;AAEA,OAAKhC,GAAL,CAEC4F,GAAI,CAAJ,CAFD,EAEUA,GAAI,CAAJ,CAFV,EAEmBA,GAAI,CAAJ,CAFnB,EAGCA,GAAI,CAAJ,CAHD,EAGUA,GAAI,CAAJ,CAHV,EAGmBA,GAAI,CAAJ,CAHnB,EAICA,GAAI,CAAJ,CAJD,EAIUA,GAAI,CAAJ,CAJV,EAImBA,GAAI,EAAJ,CAJnB;;AAQA,SAAO,IAAP;AAEA,EA/DgC;;AAiEjCwF,yBAAwB,YAAY;;AAEnC,MAAI5H,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAAS8E,sBAAT,CAAiCrH,SAAjC,EAA6C;;AAEnD,QAAM,IAAI9P,IAAI,CAAR,EAAWC,IAAI6P,UAAUsH,KAA/B,EAAsCpX,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;;AAEnDuP,OAAG1R,CAAH,GAAOiS,UAAUC,IAAV,CAAgB/P,CAAhB,CAAP;AACAuP,OAAG9E,CAAH,GAAOqF,UAAUE,IAAV,CAAgBhQ,CAAhB,CAAP;AACAuP,OAAG4C,CAAH,GAAOrC,UAAUuH,IAAV,CAAgBrX,CAAhB,CAAP;;AAEAuP,OAAG1B,YAAH,CAAiB,IAAjB;;AAEAiC,cAAUyH,MAAV,CAAkBvX,CAAlB,EAAqBuP,GAAG1R,CAAxB,EAA2B0R,GAAG9E,CAA9B,EAAiC8E,GAAG4C,CAApC;AAEA;;AAED,UAAOrC,SAAP;AAEA,GAhBD;AAkBA,EAtBuB,EAjES;;AAyFjCrC,WAAU,UAAWvD,CAAX,EAAe;;AAExB,SAAO,KAAK+K,gBAAL,CAAuB,IAAvB,EAA6B/K,CAA7B,CAAP;AAEA,EA7FgC;;AA+FjCgL,cAAa,UAAWhL,CAAX,EAAe;;AAE3B,SAAO,KAAK+K,gBAAL,CAAuB/K,CAAvB,EAA0B,IAA1B,CAAP;AAEA,EAnGgC;;AAqGjC+K,mBAAkB,UAAW9H,CAAX,EAAcC,CAAd,EAAkB;;AAEnC,MAAI2F,KAAK5F,EAAEY,QAAX;AACA,MAAIkF,KAAK7F,EAAEW,QAAX;AACA,MAAI0D,KAAK,KAAK1D,QAAd;;AAEA,MAAIoH,MAAMpC,GAAI,CAAJ,CAAV;AAAA,MAAmBqC,MAAMrC,GAAI,CAAJ,CAAzB;AAAA,MAAkCsC,MAAMtC,GAAI,CAAJ,CAAxC;AACA,MAAIwC,MAAMxC,GAAI,CAAJ,CAAV;AAAA,MAAmByC,MAAMzC,GAAI,CAAJ,CAAzB;AAAA,MAAkC0C,MAAM1C,GAAI,CAAJ,CAAxC;AACA,MAAI4C,MAAM5C,GAAI,CAAJ,CAAV;AAAA,MAAmB6C,MAAM7C,GAAI,CAAJ,CAAzB;AAAA,MAAkC8C,MAAM9C,GAAI,CAAJ,CAAxC;;AAEA,MAAIoD,MAAMlD,GAAI,CAAJ,CAAV;AAAA,MAAmBmD,MAAMnD,GAAI,CAAJ,CAAzB;AAAA,MAAkCoD,MAAMpD,GAAI,CAAJ,CAAxC;AACA,MAAIsD,MAAMtD,GAAI,CAAJ,CAAV;AAAA,MAAmBuD,MAAMvD,GAAI,CAAJ,CAAzB;AAAA,MAAkCwD,MAAMxD,GAAI,CAAJ,CAAxC;AACA,MAAI0D,MAAM1D,GAAI,CAAJ,CAAV;AAAA,MAAmB2D,MAAM3D,GAAI,CAAJ,CAAzB;AAAA,MAAkC4D,MAAM5D,GAAI,CAAJ,CAAxC;;AAEAxB,KAAI,CAAJ,IAAU0D,MAAMgB,GAAN,GAAYf,MAAMmB,GAAlB,GAAwBlB,MAAMsB,GAAxC;AACAlF,KAAI,CAAJ,IAAU0D,MAAMiB,GAAN,GAAYhB,MAAMoB,GAAlB,GAAwBnB,MAAMuB,GAAxC;AACAnF,KAAI,CAAJ,IAAU0D,MAAMkB,GAAN,GAAYjB,MAAMqB,GAAlB,GAAwBpB,MAAMwB,GAAxC;;AAEApF,KAAI,CAAJ,IAAU8D,MAAMY,GAAN,GAAYX,MAAMe,GAAlB,GAAwBd,MAAMkB,GAAxC;AACAlF,KAAI,CAAJ,IAAU8D,MAAMa,GAAN,GAAYZ,MAAMgB,GAAlB,GAAwBf,MAAMmB,GAAxC;AACAnF,KAAI,CAAJ,IAAU8D,MAAMc,GAAN,GAAYb,MAAMiB,GAAlB,GAAwBhB,MAAMoB,GAAxC;;AAEApF,KAAI,CAAJ,IAAUkE,MAAMQ,GAAN,GAAYP,MAAMW,GAAlB,GAAwBV,MAAMc,GAAxC;AACAlF,KAAI,CAAJ,IAAUkE,MAAMS,GAAN,GAAYR,MAAMY,GAAlB,GAAwBX,MAAMe,GAAxC;AACAnF,KAAI,CAAJ,IAAUkE,MAAMU,GAAN,GAAYT,MAAMa,GAAlB,GAAwBZ,MAAMgB,GAAxC;;AAEA,SAAO,IAAP;AAEA,EAjIgC;;AAmIjCnJ,iBAAgB,UAAWR,CAAX,EAAe;;AAE9B,MAAIuE,KAAK,KAAK1D,QAAd;;AAEA0D,KAAI,CAAJ,KAAWvE,CAAX,CAAcuE,GAAI,CAAJ,KAAWvE,CAAX,CAAcuE,GAAI,CAAJ,KAAWvE,CAAX;AAC5BuE,KAAI,CAAJ,KAAWvE,CAAX,CAAcuE,GAAI,CAAJ,KAAWvE,CAAX,CAAcuE,GAAI,CAAJ,KAAWvE,CAAX;AAC5BuE,KAAI,CAAJ,KAAWvE,CAAX,CAAcuE,GAAI,CAAJ,KAAWvE,CAAX,CAAcuE,GAAI,CAAJ,KAAWvE,CAAX;;AAE5B,SAAO,IAAP;AAEA,EA7IgC;;AA+IjCsK,cAAa,YAAY;;AAExB,MAAI/F,KAAK,KAAK1D,QAAd;;AAEA,MAAIZ,IAAIsE,GAAI,CAAJ,CAAR;AAAA,MAAiBrE,IAAIqE,GAAI,CAAJ,CAArB;AAAA,MAA8BtB,IAAIsB,GAAI,CAAJ,CAAlC;AAAA,MACCmB,IAAInB,GAAI,CAAJ,CADL;AAAA,MACc3D,IAAI2D,GAAI,CAAJ,CADlB;AAAA,MAC2BoB,IAAIpB,GAAI,CAAJ,CAD/B;AAAA,MAECoQ,IAAIpQ,GAAI,CAAJ,CAFL;AAAA,MAEciJ,IAAIjJ,GAAI,CAAJ,CAFlB;AAAA,MAE2BzR,IAAIyR,GAAI,CAAJ,CAF/B;;AAIA,SAAOtE,IAAIW,CAAJ,GAAQ9N,CAAR,GAAYmN,IAAI0F,CAAJ,GAAQ6H,CAApB,GAAwBtN,IAAIwF,CAAJ,GAAQ5S,CAAhC,GAAoCoN,IAAIyF,CAAJ,GAAQgP,CAA5C,GAAgD1R,IAAIyC,CAAJ,GAAQ8H,CAAxD,GAA4DvK,IAAIrC,CAAJ,GAAQ+T,CAA3E;AAEA,EAzJgC;;AA2JjCjK,aAAY,UAAW8B,MAAX,EAAmB7B,iBAAnB,EAAuC;;AAElD,MAAK6B,UAAUA,OAAOlJ,SAAtB,EAAkC;;AAEjC1D,WAAQyD,KAAR,CAAe,kEAAf;AAEA;;AAED,MAAIoB,KAAK+H,OAAO3L,QAAhB;AAAA,MACC0D,KAAK,KAAK1D,QADX;AAAA,MAGC0C,MAAMkB,GAAI,CAAJ,CAHP;AAAA,MAGgBd,MAAMc,GAAI,CAAJ,CAHtB;AAAA,MAG+BV,MAAMU,GAAI,CAAJ,CAHrC;AAAA,MAICjB,MAAMiB,GAAI,CAAJ,CAJP;AAAA,MAIgBb,MAAMa,GAAI,CAAJ,CAJtB;AAAA,MAI+BT,MAAMS,GAAI,CAAJ,CAJrC;AAAA,MAKChB,MAAMgB,GAAI,CAAJ,CALP;AAAA,MAKgBZ,MAAMY,GAAI,CAAJ,CALtB;AAAA,MAK+BR,MAAMQ,GAAI,CAAJ,CALrC;AAAA,MAOCmG,MAAM3G,MAAML,GAAN,GAAYI,MAAMH,GAPzB;AAAA,MAQCgH,MAAM7G,MAAMP,GAAN,GAAYQ,MAAMT,GARzB;AAAA,MASCsH,MAAMjH,MAAML,GAAN,GAAYI,MAAMH,GATzB;AAAA,MAWCuH,MAAMzH,MAAMqH,GAAN,GAAYjH,MAAMkH,GAAlB,GAAwB9G,MAAM+G,GAXrC;;AAaA,MAAKE,QAAQ,CAAb,EAAiB;;AAEhB,OAAIC,MAAM,oEAAV;;AAEA,OAAKN,sBAAsB,IAA3B,EAAkC;;AAEjC,UAAM,IAAIvL,KAAJ,CAAW6L,GAAX,CAAN;AAEA,IAJD,MAIO;;AAENrL,YAAQC,IAAR,CAAcoL,GAAd;AAEA;;AAED,UAAO,KAAKzG,QAAL,EAAP;AAEA;;AAED,MAAI0G,SAAS,IAAIF,GAAjB;;AAEAzG,KAAI,CAAJ,IAAUqG,MAAMM,MAAhB;AACA3G,KAAI,CAAJ,IAAU,CAAER,MAAMF,GAAN,GAAYI,MAAMN,GAApB,IAA4BuH,MAAtC;AACA3G,KAAI,CAAJ,IAAU,CAAEP,MAAML,GAAN,GAAYI,MAAMH,GAApB,IAA4BsH,MAAtC;;AAEA3G,KAAI,CAAJ,IAAUsG,MAAMK,MAAhB;AACA3G,KAAI,CAAJ,IAAU,CAAEN,MAAMV,GAAN,GAAYQ,MAAMN,GAApB,IAA4ByH,MAAtC;AACA3G,KAAI,CAAJ,IAAU,CAAER,MAAMP,GAAN,GAAYQ,MAAMT,GAApB,IAA4B2H,MAAtC;;AAEA3G,KAAI,CAAJ,IAAUuG,MAAMI,MAAhB;AACA3G,KAAI,CAAJ,IAAU,CAAEZ,MAAMF,GAAN,GAAYI,MAAMN,GAApB,IAA4B2H,MAAtC;AACA3G,KAAI,CAAJ,IAAU,CAAEX,MAAML,GAAN,GAAYI,MAAMH,GAApB,IAA4B0H,MAAtC;;AAEA,SAAO,IAAP;AAEA,EAlNgC;;AAoNjCX,YAAW,YAAY;;AAEtB,MAAIC,GAAJ;AAAA,MAASxN,IAAI,KAAK6D,QAAlB;;AAEA2J,QAAMxN,EAAG,CAAH,CAAN,CAAcA,EAAG,CAAH,IAASA,EAAG,CAAH,CAAT,CAAiBA,EAAG,CAAH,IAASwN,GAAT;AAC/BA,QAAMxN,EAAG,CAAH,CAAN,CAAcA,EAAG,CAAH,IAASA,EAAG,CAAH,CAAT,CAAiBA,EAAG,CAAH,IAASwN,GAAT;AAC/BA,QAAMxN,EAAG,CAAH,CAAN,CAAcA,EAAG,CAAH,IAASA,EAAG,CAAH,CAAT,CAAiBA,EAAG,CAAH,IAASwN,GAAT;;AAE/B,SAAO,IAAP;AAEA,EA9NgC;;AAgOjCoK,kBAAiB,UAAWC,OAAX,EAAqB;;AAErC,SAAO,KAAKH,cAAL,CAAqBG,OAArB,EAA+BnK,UAA/B,CAA2C,IAA3C,EAAkDH,SAAlD,EAAP;AAEA,EApOgC;;AAsOjCuK,qBAAoB,UAAWtE,CAAX,EAAe;;AAElC,MAAIxT,IAAI,KAAK6D,QAAb;;AAEA2P,IAAG,CAAH,IAASxT,EAAG,CAAH,CAAT;AACAwT,IAAG,CAAH,IAASxT,EAAG,CAAH,CAAT;AACAwT,IAAG,CAAH,IAASxT,EAAG,CAAH,CAAT;AACAwT,IAAG,CAAH,IAASxT,EAAG,CAAH,CAAT;AACAwT,IAAG,CAAH,IAASxT,EAAG,CAAH,CAAT;AACAwT,IAAG,CAAH,IAASxT,EAAG,CAAH,CAAT;AACAwT,IAAG,CAAH,IAASxT,EAAG,CAAH,CAAT;AACAwT,IAAG,CAAH,IAASxT,EAAG,CAAH,CAAT;AACAwT,IAAG,CAAH,IAASxT,EAAG,CAAH,CAAT;;AAEA,SAAO,IAAP;AAEA,EAtPgC;;AAwPjC+X,iBAAgB,UAAWhJ,EAAX,EAAeC,EAAf,EAAmBS,EAAnB,EAAuBC,EAAvB,EAA2BsI,QAA3B,EAAqCC,EAArC,EAAyCC,EAAzC,EAA8C;;AAE7D,MAAIjS,IAAI7S,KAAK8S,GAAL,CAAU8R,QAAV,CAAR;AACA,MAAIhV,IAAI5P,KAAK+S,GAAL,CAAU6R,QAAV,CAAR;;AAEA,OAAKnW,GAAL,CACC4N,KAAKxJ,CADN,EACSwJ,KAAKzM,CADd,EACiB,CAAEyM,EAAF,IAASxJ,IAAIgS,EAAJ,GAASjV,IAAIkV,EAAtB,IAA6BD,EAA7B,GAAkClJ,EADnD,EAEC,CAAEW,EAAF,GAAO1M,CAFR,EAEW0M,KAAKzJ,CAFhB,EAEmB,CAAEyJ,EAAF,IAAS,CAAE1M,CAAF,GAAMiV,EAAN,GAAWhS,IAAIiS,EAAxB,IAA+BA,EAA/B,GAAoClJ,EAFvD,EAGC,CAHD,EAGI,CAHJ,EAGO,CAHP;AAMA,EAnQgC;;AAqQjCb,QAAO,UAAWsB,EAAX,EAAeC,EAAf,EAAoB;;AAE1B,MAAInI,KAAK,KAAK1D,QAAd;;AAEA0D,KAAI,CAAJ,KAAWkI,EAAX,CAAelI,GAAI,CAAJ,KAAWkI,EAAX,CAAelI,GAAI,CAAJ,KAAWkI,EAAX;AAC9BlI,KAAI,CAAJ,KAAWmI,EAAX,CAAenI,GAAI,CAAJ,KAAWmI,EAAX,CAAenI,GAAI,CAAJ,KAAWmI,EAAX;;AAE9B,SAAO,IAAP;AAEA,EA9QgC;;AAgRjCyI,SAAQ,UAAWzJ,KAAX,EAAmB;;AAE1B,MAAIzI,IAAI7S,KAAK8S,GAAL,CAAUwI,KAAV,CAAR;AACA,MAAI1L,IAAI5P,KAAK+S,GAAL,CAAUuI,KAAV,CAAR;;AAEA,MAAInH,KAAK,KAAK1D,QAAd;;AAEA,MAAIoH,MAAM1D,GAAI,CAAJ,CAAV;AAAA,MAAmB2D,MAAM3D,GAAI,CAAJ,CAAzB;AAAA,MAAkC4D,MAAM5D,GAAI,CAAJ,CAAxC;AACA,MAAI8D,MAAM9D,GAAI,CAAJ,CAAV;AAAA,MAAmB+D,MAAM/D,GAAI,CAAJ,CAAzB;AAAA,MAAkCgE,MAAMhE,GAAI,CAAJ,CAAxC;;AAEAA,KAAI,CAAJ,IAAUtB,IAAIgF,GAAJ,GAAUjI,IAAIqI,GAAxB;AACA9D,KAAI,CAAJ,IAAUtB,IAAIiF,GAAJ,GAAUlI,IAAIsI,GAAxB;AACA/D,KAAI,CAAJ,IAAUtB,IAAIkF,GAAJ,GAAUnI,IAAIuI,GAAxB;;AAEAhE,KAAI,CAAJ,IAAU,CAAEvE,CAAF,GAAMiI,GAAN,GAAYhF,IAAIoF,GAA1B;AACA9D,KAAI,CAAJ,IAAU,CAAEvE,CAAF,GAAMkI,GAAN,GAAYjF,IAAIqF,GAA1B;AACA/D,KAAI,CAAJ,IAAU,CAAEvE,CAAF,GAAMmI,GAAN,GAAYlF,IAAIsF,GAA1B;;AAEA,SAAO,IAAP;AAEA,EApSgC;;AAsSjC6M,YAAW,UAAWrJ,EAAX,EAAeC,EAAf,EAAoB;;AAE9B,MAAIzH,KAAK,KAAK1D,QAAd;;AAEA0D,KAAI,CAAJ,KAAWwH,KAAKxH,GAAI,CAAJ,CAAhB,CAAyBA,GAAI,CAAJ,KAAWwH,KAAKxH,GAAI,CAAJ,CAAhB,CAAyBA,GAAI,CAAJ,KAAWwH,KAAKxH,GAAI,CAAJ,CAAhB;AAClDA,KAAI,CAAJ,KAAWyH,KAAKzH,GAAI,CAAJ,CAAhB,CAAyBA,GAAI,CAAJ,KAAWyH,KAAKzH,GAAI,CAAJ,CAAhB,CAAyBA,GAAI,CAAJ,KAAWyH,KAAKzH,GAAI,CAAJ,CAAhB;;AAElD,SAAO,IAAP;AAEA,EA/SgC;;AAiTjChC,SAAQ,UAAWiK,MAAX,EAAoB;;AAE3B,MAAIjI,KAAK,KAAK1D,QAAd;AACA,MAAI4D,KAAK+H,OAAO3L,QAAhB;;AAEA,OAAM,IAAI/N,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9B,OAAKyR,GAAIzR,CAAJ,MAAY2R,GAAI3R,CAAJ,CAAjB,EAA2B,OAAO,KAAP;AAE3B;;AAED,SAAO,IAAP;AAEA,EA9TgC;;AAgUjC0P,YAAW,UAAW5P,KAAX,EAAkB6P,MAAlB,EAA2B;;AAErC,MAAKA,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;;AAE5B,OAAM,IAAI3P,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9B,QAAK+N,QAAL,CAAe/N,CAAf,IAAqBF,MAAOE,IAAI2P,MAAX,CAArB;AAEA;;AAED,SAAO,IAAP;AAEA,EA5UgC;;AA8UjCC,UAAS,UAAW9P,KAAX,EAAkB6P,MAAlB,EAA2B;;AAEnC,MAAK7P,UAAUzC,SAAf,EAA2ByC,QAAQ,EAAR;AAC3B,MAAK6P,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;;AAE5B,MAAI8B,KAAK,KAAK1D,QAAd;;AAEAjO,QAAO6P,MAAP,IAAkB8B,GAAI,CAAJ,CAAlB;AACA3R,QAAO6P,SAAS,CAAhB,IAAsB8B,GAAI,CAAJ,CAAtB;AACA3R,QAAO6P,SAAS,CAAhB,IAAsB8B,GAAI,CAAJ,CAAtB;;AAEA3R,QAAO6P,SAAS,CAAhB,IAAsB8B,GAAI,CAAJ,CAAtB;AACA3R,QAAO6P,SAAS,CAAhB,IAAsB8B,GAAI,CAAJ,CAAtB;AACA3R,QAAO6P,SAAS,CAAhB,IAAsB8B,GAAI,CAAJ,CAAtB;;AAEA3R,QAAO6P,SAAS,CAAhB,IAAsB8B,GAAI,CAAJ,CAAtB;AACA3R,QAAO6P,SAAS,CAAhB,IAAsB8B,GAAI,CAAJ,CAAtB;AACA3R,QAAO6P,SAAS,CAAhB,IAAsB8B,GAAI,CAAJ,CAAtB;;AAEA,SAAO3R,KAAP;AAEA;;AAnWgC,CAAlC;;AAuWA;;;;;;AAMA,IAAIyiB,YAAY,CAAhB;;AAEA,SAASC,OAAT,CAAkBC,KAAlB,EAAyBC,OAAzB,EAAkCC,KAAlC,EAAyCC,KAAzC,EAAgDC,SAAhD,EAA2DC,SAA3D,EAAsEC,MAAtE,EAA8E7jB,IAA9E,EAAoF8jB,UAApF,EAAgGC,QAAhG,EAA2G;;AAE1GjlB,QAAOC,cAAP,CAAuB,IAAvB,EAA6B,IAA7B,EAAmC,EAAER,OAAO8kB,WAAT,EAAnC;;AAEA,MAAK5Y,IAAL,GAAYX,MAAMI,YAAN,EAAZ;;AAEA,MAAK8Z,IAAL,GAAY,EAAZ;;AAEA,MAAKT,KAAL,GAAaA,UAAUplB,SAAV,GAAsBolB,KAAtB,GAA8BD,QAAQW,aAAnD;AACA,MAAKC,OAAL,GAAe,EAAf;;AAEA,MAAKV,OAAL,GAAeA,YAAYrlB,SAAZ,GAAwBqlB,OAAxB,GAAkCF,QAAQa,eAAzD;;AAEA,MAAKV,KAAL,GAAaA,UAAUtlB,SAAV,GAAsBslB,KAAtB,GAA8Bpe,mBAA3C;AACA,MAAKqe,KAAL,GAAaA,UAAUvlB,SAAV,GAAsBulB,KAAtB,GAA8Bre,mBAA3C;;AAEA,MAAKse,SAAL,GAAiBA,cAAcxlB,SAAd,GAA0BwlB,SAA1B,GAAsCje,YAAvD;AACA,MAAKke,SAAL,GAAiBA,cAAczlB,SAAd,GAA0BylB,SAA1B,GAAsChe,wBAAvD;;AAEA,MAAKke,UAAL,GAAkBA,eAAe3lB,SAAf,GAA2B2lB,UAA3B,GAAwC,CAA1D;;AAEA,MAAKD,MAAL,GAAcA,WAAW1lB,SAAX,GAAuB0lB,MAAvB,GAAgCld,UAA9C;AACA,MAAK3G,IAAL,GAAYA,SAAS7B,SAAT,GAAqB6B,IAArB,GAA4B6F,gBAAxC;;AAEA,MAAK4K,MAAL,GAAc,IAAI9D,OAAJ,CAAa,CAAb,EAAgB,CAAhB,CAAd;AACA,MAAKyX,MAAL,GAAc,IAAIzX,OAAJ,CAAa,CAAb,EAAgB,CAAhB,CAAd;AACA,MAAKqE,MAAL,GAAc,IAAIrE,OAAJ,CAAa,CAAb,EAAgB,CAAhB,CAAd;AACA,MAAKqW,QAAL,GAAgB,CAAhB;;AAEA,MAAKqB,gBAAL,GAAwB,IAAxB;AACA,MAAK7J,MAAL,GAAc,IAAIgI,OAAJ,EAAd;;AAEA,MAAK8B,eAAL,GAAuB,IAAvB;AACA,MAAKC,gBAAL,GAAwB,KAAxB;AACA,MAAKC,KAAL,GAAa,IAAb;AACA,MAAKC,eAAL,GAAuB,CAAvB,CAnC0G,CAmChF;;AAE1B;AACA;AACA;AACA;AACA,MAAKV,QAAL,GAAgBA,aAAa5lB,SAAb,GAAyB4lB,QAAzB,GAAoC3a,cAApD;;AAEA,MAAKsb,OAAL,GAAe,CAAf;AACA,MAAKC,QAAL,GAAgB,IAAhB;AAEA;;AAEDrB,QAAQW,aAAR,GAAwB9lB,SAAxB;AACAmlB,QAAQa,eAAR,GAA0Bvf,SAA1B;;AAEA0e,QAAQzkB,SAAR,GAAoBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAe9kB,gBAAgBjB,SAA/B,CAAf,EAA2D;;AAE9E0O,cAAa+V,OAFiE;;AAI9EuB,YAAW,IAJmE;;AAM9EC,eAAc,YAAY;;AAEzB,OAAKtK,MAAL,CAAYuI,cAAZ,CAA4B,KAAKtS,MAAL,CAAY9R,CAAxC,EAA2C,KAAK8R,MAAL,CAAYlF,CAAvD,EAA0D,KAAK6Y,MAAL,CAAYzlB,CAAtE,EAAyE,KAAKylB,MAAL,CAAY7Y,CAArF,EAAwF,KAAKyX,QAA7F,EAAuG,KAAKhS,MAAL,CAAYrS,CAAnH,EAAsH,KAAKqS,MAAL,CAAYzF,CAAlI;AAEA,EAV6E;;AAY9E+B,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EAhB6E;;AAkB9EA,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB,OAAKskB,IAAL,GAAYtkB,OAAOskB,IAAnB;;AAEA,OAAKT,KAAL,GAAa7jB,OAAO6jB,KAApB;AACA,OAAKW,OAAL,GAAexkB,OAAOwkB,OAAP,CAAerjB,KAAf,CAAsB,CAAtB,CAAf;;AAEA,OAAK2iB,OAAL,GAAe9jB,OAAO8jB,OAAtB;;AAEA,OAAKC,KAAL,GAAa/jB,OAAO+jB,KAApB;AACA,OAAKC,KAAL,GAAahkB,OAAOgkB,KAApB;;AAEA,OAAKC,SAAL,GAAiBjkB,OAAOikB,SAAxB;AACA,OAAKC,SAAL,GAAiBlkB,OAAOkkB,SAAxB;;AAEA,OAAKE,UAAL,GAAkBpkB,OAAOokB,UAAzB;;AAEA,OAAKD,MAAL,GAAcnkB,OAAOmkB,MAArB;AACA,OAAK7jB,IAAL,GAAYN,OAAOM,IAAnB;;AAEA,OAAKyQ,MAAL,CAAYjD,IAAZ,CAAkB9N,OAAO+Q,MAAzB;AACA,OAAK2T,MAAL,CAAY5W,IAAZ,CAAkB9N,OAAO0kB,MAAzB;AACA,OAAKpT,MAAL,CAAYxD,IAAZ,CAAkB9N,OAAOsR,MAAzB;AACA,OAAKgS,QAAL,GAAgBtjB,OAAOsjB,QAAvB;;AAEA,OAAKqB,gBAAL,GAAwB3kB,OAAO2kB,gBAA/B;AACA,OAAK7J,MAAL,CAAYhN,IAAZ,CAAkB9N,OAAO8a,MAAzB;;AAEA,OAAK8J,eAAL,GAAuB5kB,OAAO4kB,eAA9B;AACA,OAAKC,gBAAL,GAAwB7kB,OAAO6kB,gBAA/B;AACA,OAAKC,KAAL,GAAa9kB,OAAO8kB,KAApB;AACA,OAAKC,eAAL,GAAuB/kB,OAAO+kB,eAA9B;AACA,OAAKV,QAAL,GAAgBrkB,OAAOqkB,QAAvB;;AAEA,SAAO,IAAP;AAEA,EAtD6E;;AAwD9EgB,SAAQ,UAAWC,IAAX,EAAkB;;AAEzB,MAAIC,eAAiBD,SAAS7mB,SAAT,IAAsB,OAAO6mB,IAAP,KAAgB,QAA3D;;AAEA,MAAK,CAAEC,YAAF,IAAkBD,KAAKE,QAAL,CAAe,KAAKza,IAApB,MAA+BtM,SAAtD,EAAkE;;AAEjE,UAAO6mB,KAAKE,QAAL,CAAe,KAAKza,IAApB,CAAP;AAEA;;AAED,WAAS0a,UAAT,CAAqB5B,KAArB,EAA6B;;AAE5B,OAAI6B,MAAJ;;AAEA,OAAK7B,iBAAiB8B,iBAAtB,EAA0C;;AAEzCD,aAAS7B,KAAT;AAEA,IAJD,MAIO;;AAEN6B,aAASE,SAASC,eAAT,CAA0B,8BAA1B,EAA0D,QAA1D,CAAT;AACAH,WAAOI,KAAP,GAAejC,MAAMiC,KAArB;AACAJ,WAAOK,MAAP,GAAgBlC,MAAMkC,MAAtB;;AAEA,QAAIC,UAAUN,OAAOO,UAAP,CAAmB,IAAnB,CAAd;;AAEA,QAAKpC,iBAAiBqC,SAAtB,EAAkC;;AAEjCF,aAAQG,YAAR,CAAsBtC,KAAtB,EAA6B,CAA7B,EAAgC,CAAhC;AAEA,KAJD,MAIO;;AAENmC,aAAQI,SAAR,CAAmBvC,KAAnB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgCA,MAAMiC,KAAtC,EAA6CjC,MAAMkC,MAAnD;AAEA;AAED;;AAED,OAAKL,OAAOI,KAAP,GAAe,IAAf,IAAuBJ,OAAOK,MAAP,GAAgB,IAA5C,EAAmD;;AAElD,WAAOL,OAAOW,SAAP,CAAkB,YAAlB,EAAgC,GAAhC,CAAP;AAEA,IAJD,MAIO;;AAEN,WAAOX,OAAOW,SAAP,CAAkB,WAAlB,CAAP;AAEA;AAED;;AAED,MAAIzmB,SAAS;;AAEZ0mB,aAAU;AACTtB,aAAS,GADA;AAET1kB,UAAM,SAFG;AAGTimB,eAAW;AAHF,IAFE;;AAQZxb,SAAM,KAAKA,IARC;AASZuZ,SAAM,KAAKA,IATC;;AAWZR,YAAS,KAAKA,OAXF;;AAaZY,WAAQ,CAAE,KAAKA,MAAL,CAAYzlB,CAAd,EAAiB,KAAKylB,MAAL,CAAY7Y,CAA7B,CAbI;AAcZkF,WAAQ,CAAE,KAAKA,MAAL,CAAY9R,CAAd,EAAiB,KAAK8R,MAAL,CAAYlF,CAA7B,CAdI;AAeZyF,WAAQ,CAAE,KAAKA,MAAL,CAAYrS,CAAd,EAAiB,KAAKqS,MAAL,CAAYzF,CAA7B,CAfI;AAgBZyX,aAAU,KAAKA,QAhBH;;AAkBZkD,SAAM,CAAE,KAAKzC,KAAP,EAAc,KAAKC,KAAnB,CAlBM;;AAoBZG,WAAQ,KAAKA,MApBD;AAqBZD,cAAW,KAAKA,SArBJ;AAsBZD,cAAW,KAAKA,SAtBJ;AAuBZG,eAAY,KAAKA,UAvBL;;AAyBZU,UAAO,KAAKA;;AAzBA,GAAb;;AA6BA,MAAK,KAAKjB,KAAL,KAAeplB,SAApB,EAAgC;;AAE/B;;AAEA,OAAIolB,QAAQ,KAAKA,KAAjB;;AAEA,OAAKA,MAAM9Y,IAAN,KAAetM,SAApB,EAAgC;;AAE/BolB,UAAM9Y,IAAN,GAAaX,MAAMI,YAAN,EAAb,CAF+B,CAEI;AAEnC;;AAED,OAAK,CAAE+a,YAAF,IAAkBD,KAAKmB,MAAL,CAAa5C,MAAM9Y,IAAnB,MAA8BtM,SAArD,EAAiE;;AAEhE6mB,SAAKmB,MAAL,CAAa5C,MAAM9Y,IAAnB,IAA4B;AAC3BA,WAAM8Y,MAAM9Y,IADe;AAE3B2b,UAAKjB,WAAY5B,KAAZ;AAFsB,KAA5B;AAKA;;AAEDjkB,UAAOikB,KAAP,GAAeA,MAAM9Y,IAArB;AAEA;;AAED,MAAK,CAAEwa,YAAP,EAAsB;;AAErBD,QAAKE,QAAL,CAAe,KAAKza,IAApB,IAA6BnL,MAA7B;AAEA;;AAED,SAAOA,MAAP;AAEA,EAxK6E;;AA0K9E+mB,UAAS,YAAY;;AAEpB,OAAK3lB,aAAL,CAAoB,EAAEV,MAAM,SAAR,EAApB;AAEA,EA9K6E;;AAgL9EsmB,cAAa,UAAWC,EAAX,EAAgB;;AAE5B,MAAK,KAAK/C,OAAL,KAAiB5e,SAAtB,EAAkC;;AAElC2hB,KAAG5X,YAAH,CAAiB,KAAK6L,MAAtB;;AAEA,MAAK+L,GAAG5nB,CAAH,GAAO,CAAP,IAAY4nB,GAAG5nB,CAAH,GAAO,CAAxB,EAA4B;;AAE3B,WAAS,KAAK8kB,KAAd;;AAEC,SAAKre,cAAL;;AAECmhB,QAAG5nB,CAAH,GAAO4nB,GAAG5nB,CAAH,GAAOP,KAAKK,KAAL,CAAY8nB,GAAG5nB,CAAf,CAAd;AACA;;AAED,SAAK0G,mBAAL;;AAECkhB,QAAG5nB,CAAH,GAAO4nB,GAAG5nB,CAAH,GAAO,CAAP,GAAW,CAAX,GAAe,CAAtB;AACA;;AAED,SAAK2G,sBAAL;;AAEC,SAAKlH,KAAKqR,GAAL,CAAUrR,KAAKK,KAAL,CAAY8nB,GAAG5nB,CAAf,IAAqB,CAA/B,MAAuC,CAA5C,EAAgD;;AAE/C4nB,SAAG5nB,CAAH,GAAOP,KAAKmO,IAAL,CAAWga,GAAG5nB,CAAd,IAAoB4nB,GAAG5nB,CAA9B;AAEA,MAJD,MAIO;;AAEN4nB,SAAG5nB,CAAH,GAAO4nB,GAAG5nB,CAAH,GAAOP,KAAKK,KAAL,CAAY8nB,GAAG5nB,CAAf,CAAd;AAEA;AACD;;AAvBF;AA2BA;;AAED,MAAK4nB,GAAGhb,CAAH,GAAO,CAAP,IAAYgb,GAAGhb,CAAH,GAAO,CAAxB,EAA4B;;AAE3B,WAAS,KAAKmY,KAAd;;AAEC,SAAKte,cAAL;;AAECmhB,QAAGhb,CAAH,GAAOgb,GAAGhb,CAAH,GAAOnN,KAAKK,KAAL,CAAY8nB,GAAGhb,CAAf,CAAd;AACA;;AAED,SAAKlG,mBAAL;;AAECkhB,QAAGhb,CAAH,GAAOgb,GAAGhb,CAAH,GAAO,CAAP,GAAW,CAAX,GAAe,CAAtB;AACA;;AAED,SAAKjG,sBAAL;;AAEC,SAAKlH,KAAKqR,GAAL,CAAUrR,KAAKK,KAAL,CAAY8nB,GAAGhb,CAAf,IAAqB,CAA/B,MAAuC,CAA5C,EAAgD;;AAE/Cgb,SAAGhb,CAAH,GAAOnN,KAAKmO,IAAL,CAAWga,GAAGhb,CAAd,IAAoBgb,GAAGhb,CAA9B;AAEA,MAJD,MAIO;;AAENgb,SAAGhb,CAAH,GAAOgb,GAAGhb,CAAH,GAAOnN,KAAKK,KAAL,CAAY8nB,GAAGhb,CAAf,CAAd;AAEA;AACD;;AAvBF;AA2BA;;AAED,MAAK,KAAKiZ,KAAV,EAAkB;;AAEjB+B,MAAGhb,CAAH,GAAO,IAAIgb,GAAGhb,CAAd;AAEA;AAED;;AA1P6E,CAA3D,CAApB;;AA8PAzM,OAAOC,cAAP,CAAuBukB,QAAQzkB,SAA/B,EAA0C,aAA1C,EAAyD;;AAExDgO,MAAK,UAAWtO,KAAX,EAAmB;;AAEvB,MAAKA,UAAU,IAAf,EAAsB,KAAKmmB,OAAL;AAEtB;;AANuD,CAAzD;;AAUA;;;;;;;;AAQA,SAAS8B,OAAT,CAAkB7nB,CAAlB,EAAqB4M,CAArB,EAAwB0H,CAAxB,EAA2BtF,CAA3B,EAA+B;;AAE9B,MAAKhP,CAAL,GAASA,KAAK,CAAd;AACA,MAAK4M,CAAL,GAASA,KAAK,CAAd;AACA,MAAK0H,CAAL,GAASA,KAAK,CAAd;AACA,MAAKtF,CAAL,GAAWA,MAAMxP,SAAR,GAAsBwP,CAAtB,GAA0B,CAAnC;AAEA;;AAED7O,OAAOK,MAAP,CAAeqnB,QAAQ3nB,SAAvB,EAAkC;;AAEjC4nB,YAAW,IAFsB;;AAIjC5Z,MAAK,UAAWlO,CAAX,EAAc4M,CAAd,EAAiB0H,CAAjB,EAAoBtF,CAApB,EAAwB;;AAE5B,OAAKhP,CAAL,GAASA,CAAT;AACA,OAAK4M,CAAL,GAASA,CAAT;AACA,OAAK0H,CAAL,GAASA,CAAT;AACA,OAAKtF,CAAL,GAASA,CAAT;;AAEA,SAAO,IAAP;AAEA,EAbgC;;AAejCZ,YAAW,UAAWC,MAAX,EAAoB;;AAE9B,OAAKrO,CAAL,GAASqO,MAAT;AACA,OAAKzB,CAAL,GAASyB,MAAT;AACA,OAAKiG,CAAL,GAASjG,MAAT;AACA,OAAKW,CAAL,GAASX,MAAT;;AAEA,SAAO,IAAP;AAEA,EAxBgC;;AA0BjCC,OAAM,UAAWtO,CAAX,EAAe;;AAEpB,OAAKA,CAAL,GAASA,CAAT;;AAEA,SAAO,IAAP;AAEA,EAhCgC;;AAkCjCuO,OAAM,UAAW3B,CAAX,EAAe;;AAEpB,OAAKA,CAAL,GAASA,CAAT;;AAEA,SAAO,IAAP;AAEA,EAxCgC;;AA0CjCwU,OAAM,UAAW9M,CAAX,EAAe;;AAEpB,OAAKA,CAAL,GAASA,CAAT;;AAEA,SAAO,IAAP;AAEA,EAhDgC;;AAkDjCyT,OAAM,UAAW/Y,CAAX,EAAe;;AAEpB,OAAKA,CAAL,GAASA,CAAT;;AAEA,SAAO,IAAP;AAEA,EAxDgC;;AA0DjCR,eAAc,UAAW5N,KAAX,EAAkBhB,KAAlB,EAA0B;;AAEvC,UAASgB,KAAT;;AAEC,QAAK,CAAL;AAAQ,SAAKZ,CAAL,GAASJ,KAAT,CAAgB;AACxB,QAAK,CAAL;AAAQ,SAAKgN,CAAL,GAAShN,KAAT,CAAgB;AACxB,QAAK,CAAL;AAAQ,SAAK0U,CAAL,GAAS1U,KAAT,CAAgB;AACxB,QAAK,CAAL;AAAQ,SAAKoP,CAAL,GAASpP,KAAT,CAAgB;AACxB;AAAS,UAAM,IAAI6O,KAAJ,CAAW,4BAA4B7N,KAAvC,CAAN;;AANV;;AAUA,SAAO,IAAP;AAEA,EAxEgC;;AA0EjC8N,eAAc,UAAW9N,KAAX,EAAmB;;AAEhC,UAASA,KAAT;;AAEC,QAAK,CAAL;AAAQ,WAAO,KAAKZ,CAAZ;AACR,QAAK,CAAL;AAAQ,WAAO,KAAK4M,CAAZ;AACR,QAAK,CAAL;AAAQ,WAAO,KAAK0H,CAAZ;AACR,QAAK,CAAL;AAAQ,WAAO,KAAKtF,CAAZ;AACR;AAAS,UAAM,IAAIP,KAAJ,CAAW,4BAA4B7N,KAAvC,CAAN;;AANV;AAUA,EAtFgC;;AAwFjC+N,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,CAAsB,KAAK5O,CAA3B,EAA8B,KAAK4M,CAAnC,EAAsC,KAAK0H,CAA3C,EAA8C,KAAKtF,CAAnD,CAAP;AAEA,EA5FgC;;AA8FjCH,OAAM,UAAWC,CAAX,EAAe;;AAEpB,OAAK9O,CAAL,GAAS8O,EAAE9O,CAAX;AACA,OAAK4M,CAAL,GAASkC,EAAElC,CAAX;AACA,OAAK0H,CAAL,GAASxF,EAAEwF,CAAX;AACA,OAAKtF,CAAL,GAAWF,EAAEE,CAAF,KAAQxP,SAAV,GAAwBsP,EAAEE,CAA1B,GAA8B,CAAvC;;AAEA,SAAO,IAAP;AAEA,EAvGgC;;AAyGjCD,MAAK,UAAWD,CAAX,EAAcE,CAAd,EAAkB;;AAEtB,MAAKA,MAAMxP,SAAX,EAAuB;;AAEtByP,WAAQC,IAAR,CAAc,uFAAd;AACA,UAAO,KAAKC,UAAL,CAAiBL,CAAjB,EAAoBE,CAApB,CAAP;AAEA;;AAED,OAAKhP,CAAL,IAAU8O,EAAE9O,CAAZ;AACA,OAAK4M,CAAL,IAAUkC,EAAElC,CAAZ;AACA,OAAK0H,CAAL,IAAUxF,EAAEwF,CAAZ;AACA,OAAKtF,CAAL,IAAUF,EAAEE,CAAZ;;AAEA,SAAO,IAAP;AAEA,EAzHgC;;AA2HjCI,YAAW,UAAWC,CAAX,EAAe;;AAEzB,OAAKrP,CAAL,IAAUqP,CAAV;AACA,OAAKzC,CAAL,IAAUyC,CAAV;AACA,OAAKiF,CAAL,IAAUjF,CAAV;AACA,OAAKL,CAAL,IAAUK,CAAV;;AAEA,SAAO,IAAP;AAEA,EApIgC;;AAsIjCF,aAAY,UAAWG,CAAX,EAAcC,CAAd,EAAkB;;AAE7B,OAAKvP,CAAL,GAASsP,EAAEtP,CAAF,GAAMuP,EAAEvP,CAAjB;AACA,OAAK4M,CAAL,GAAS0C,EAAE1C,CAAF,GAAM2C,EAAE3C,CAAjB;AACA,OAAK0H,CAAL,GAAShF,EAAEgF,CAAF,GAAM/E,EAAE+E,CAAjB;AACA,OAAKtF,CAAL,GAASM,EAAEN,CAAF,GAAMO,EAAEP,CAAjB;;AAEA,SAAO,IAAP;AAEA,EA/IgC;;AAiJjCQ,kBAAiB,UAAWV,CAAX,EAAcO,CAAd,EAAkB;;AAElC,OAAKrP,CAAL,IAAU8O,EAAE9O,CAAF,GAAMqP,CAAhB;AACA,OAAKzC,CAAL,IAAUkC,EAAElC,CAAF,GAAMyC,CAAhB;AACA,OAAKiF,CAAL,IAAUxF,EAAEwF,CAAF,GAAMjF,CAAhB;AACA,OAAKL,CAAL,IAAUF,EAAEE,CAAF,GAAMK,CAAhB;;AAEA,SAAO,IAAP;AAEA,EA1JgC;;AA4JjCI,MAAK,UAAWX,CAAX,EAAcE,CAAd,EAAkB;;AAEtB,MAAKA,MAAMxP,SAAX,EAAuB;;AAEtByP,WAAQC,IAAR,CAAc,uFAAd;AACA,UAAO,KAAKQ,UAAL,CAAiBZ,CAAjB,EAAoBE,CAApB,CAAP;AAEA;;AAED,OAAKhP,CAAL,IAAU8O,EAAE9O,CAAZ;AACA,OAAK4M,CAAL,IAAUkC,EAAElC,CAAZ;AACA,OAAK0H,CAAL,IAAUxF,EAAEwF,CAAZ;AACA,OAAKtF,CAAL,IAAUF,EAAEE,CAAZ;;AAEA,SAAO,IAAP;AAEA,EA5KgC;;AA8KjCW,YAAW,UAAWN,CAAX,EAAe;;AAEzB,OAAKrP,CAAL,IAAUqP,CAAV;AACA,OAAKzC,CAAL,IAAUyC,CAAV;AACA,OAAKiF,CAAL,IAAUjF,CAAV;AACA,OAAKL,CAAL,IAAUK,CAAV;;AAEA,SAAO,IAAP;AAEA,EAvLgC;;AAyLjCK,aAAY,UAAWJ,CAAX,EAAcC,CAAd,EAAkB;;AAE7B,OAAKvP,CAAL,GAASsP,EAAEtP,CAAF,GAAMuP,EAAEvP,CAAjB;AACA,OAAK4M,CAAL,GAAS0C,EAAE1C,CAAF,GAAM2C,EAAE3C,CAAjB;AACA,OAAK0H,CAAL,GAAShF,EAAEgF,CAAF,GAAM/E,EAAE+E,CAAjB;AACA,OAAKtF,CAAL,GAASM,EAAEN,CAAF,GAAMO,EAAEP,CAAjB;;AAEA,SAAO,IAAP;AAEA,EAlMgC;;AAoMjCa,iBAAgB,UAAWxB,MAAX,EAAoB;;AAEnC,OAAKrO,CAAL,IAAUqO,MAAV;AACA,OAAKzB,CAAL,IAAUyB,MAAV;AACA,OAAKiG,CAAL,IAAUjG,MAAV;AACA,OAAKW,CAAL,IAAUX,MAAV;;AAEA,SAAO,IAAP;AAEA,EA7MgC;;AA+MjCoL,eAAc,UAAWpN,CAAX,EAAe;;AAE5B,MAAIrM,IAAI,KAAKA,CAAb;AAAA,MAAgB4M,IAAI,KAAKA,CAAzB;AAAA,MAA4B0H,IAAI,KAAKA,CAArC;AAAA,MAAwCtF,IAAI,KAAKA,CAAjD;AACA,MAAIiB,IAAI5D,EAAE6D,QAAV;;AAEA,OAAKlQ,CAAL,GAASiQ,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,CAAH,IAASqE,CAAnC,GAAuCrE,EAAG,EAAH,IAAUjB,CAA1D;AACA,OAAKpC,CAAL,GAASqD,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,CAAH,IAASqE,CAAnC,GAAuCrE,EAAG,EAAH,IAAUjB,CAA1D;AACA,OAAKsF,CAAL,GAASrE,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,EAAH,IAAUqE,CAApC,GAAwCrE,EAAG,EAAH,IAAUjB,CAA3D;AACA,OAAKA,CAAL,GAASiB,EAAG,CAAH,IAASjQ,CAAT,GAAaiQ,EAAG,CAAH,IAASrD,CAAtB,GAA0BqD,EAAG,EAAH,IAAUqE,CAApC,GAAwCrE,EAAG,EAAH,IAAUjB,CAA3D;;AAEA,SAAO,IAAP;AAEA,EA3NgC;;AA6NjCe,eAAc,UAAW1B,MAAX,EAAoB;;AAEjC,SAAO,KAAKwB,cAAL,CAAqB,IAAIxB,MAAzB,CAAP;AAEA,EAjOgC;;AAmOjC2Z,6BAA4B,UAAWjS,CAAX,EAAe;;AAE1C;;AAEA;;AAEA,OAAK/G,CAAL,GAAS,IAAIvP,KAAK2jB,IAAL,CAAWrN,EAAE/G,CAAb,CAAb;;AAEA,MAAIK,IAAI5P,KAAKmR,IAAL,CAAW,IAAImF,EAAE/G,CAAF,GAAM+G,EAAE/G,CAAvB,CAAR;;AAEA,MAAKK,IAAI,MAAT,EAAkB;;AAEjB,QAAKrP,CAAL,GAAS,CAAT;AACA,QAAK4M,CAAL,GAAS,CAAT;AACA,QAAK0H,CAAL,GAAS,CAAT;AAEA,GAND,MAMO;;AAEN,QAAKtU,CAAL,GAAS+V,EAAE/V,CAAF,GAAMqP,CAAf;AACA,QAAKzC,CAAL,GAASmJ,EAAEnJ,CAAF,GAAMyC,CAAf;AACA,QAAKiF,CAAL,GAASyB,EAAEzB,CAAF,GAAMjF,CAAf;AAEA;;AAED,SAAO,IAAP;AAEA,EA7PgC;;AA+PjC4Y,iCAAgC,UAAW5b,CAAX,EAAe;;AAE9C;;AAEA;;AAEA,MAAI2E,KAAJ;AAAA,MAAWhR,CAAX;AAAA,MAAc4M,CAAd;AAAA,MAAiB0H,CAAjB;AAAA,MAAqB;AACpB4T,YAAU,IADX;AAAA,MACkB;AACjBC,aAAW,GAFZ;AAAA,MAEkB;;AAEjBvU,OAAKvH,EAAE6D,QAJR;AAAA,MAMCgP,MAAMtL,GAAI,CAAJ,CANP;AAAA,MAMgBuL,MAAMvL,GAAI,CAAJ,CANtB;AAAA,MAM+BwL,MAAMxL,GAAI,CAAJ,CANrC;AAAA,MAOCyL,MAAMzL,GAAI,CAAJ,CAPP;AAAA,MAOgB0L,MAAM1L,GAAI,CAAJ,CAPtB;AAAA,MAO+B2L,MAAM3L,GAAI,CAAJ,CAPrC;AAAA,MAQC4L,MAAM5L,GAAI,CAAJ,CARP;AAAA,MAQgB6L,MAAM7L,GAAI,CAAJ,CARtB;AAAA,MAQ+B8L,MAAM9L,GAAI,EAAJ,CARrC;;AAUA,MAAOnU,KAAKqR,GAAL,CAAUqO,MAAME,GAAhB,IAAwB6I,OAA1B,IACEzoB,KAAKqR,GAAL,CAAUsO,MAAMI,GAAhB,IAAwB0I,OAD1B,IAEEzoB,KAAKqR,GAAL,CAAUyO,MAAME,GAAhB,IAAwByI,OAF/B,EAE2C;;AAE1C;AACA;AACA;;AAEA,OAAOzoB,KAAKqR,GAAL,CAAUqO,MAAME,GAAhB,IAAwB8I,QAA1B,IACE1oB,KAAKqR,GAAL,CAAUsO,MAAMI,GAAhB,IAAwB2I,QAD1B,IAEE1oB,KAAKqR,GAAL,CAAUyO,MAAME,GAAhB,IAAwB0I,QAF1B,IAGE1oB,KAAKqR,GAAL,CAAUoO,MAAMI,GAAN,GAAYI,GAAZ,GAAkB,CAA5B,IAAkCyI,QAHzC,EAGsD;;AAErD;;AAEA,SAAKja,GAAL,CAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB;;AAEA,WAAO,IAAP,CANqD,CAMxC;AAEb;;AAED;;AAEA8C,WAAQvR,KAAK4L,EAAb;;AAEA,OAAIkL,KAAK,CAAE2I,MAAM,CAAR,IAAc,CAAvB;AACA,OAAIxI,KAAK,CAAE4I,MAAM,CAAR,IAAc,CAAvB;AACA,OAAI1I,KAAK,CAAE8I,MAAM,CAAR,IAAc,CAAvB;AACA,OAAIlJ,KAAK,CAAE2I,MAAME,GAAR,IAAgB,CAAzB;AACA,OAAI5I,KAAK,CAAE2I,MAAMI,GAAR,IAAgB,CAAzB;AACA,OAAI7I,KAAK,CAAE4I,MAAME,GAAR,IAAgB,CAAzB;;AAEA,OAAOlJ,KAAKG,EAAP,IAAiBH,KAAKK,EAA3B,EAAkC;;AAEjC;;AAEA,QAAKL,KAAK2R,OAAV,EAAoB;;AAEnBloB,SAAI,CAAJ;AACA4M,SAAI,WAAJ;AACA0H,SAAI,WAAJ;AAEA,KAND,MAMO;;AAENtU,SAAIP,KAAKmR,IAAL,CAAW2F,EAAX,CAAJ;AACA3J,SAAI4J,KAAKxW,CAAT;AACAsU,SAAImC,KAAKzW,CAAT;AAEA;AAED,IAlBD,MAkBO,IAAK0W,KAAKE,EAAV,EAAe;;AAErB;;AAEA,QAAKF,KAAKwR,OAAV,EAAoB;;AAEnBloB,SAAI,WAAJ;AACA4M,SAAI,CAAJ;AACA0H,SAAI,WAAJ;AAEA,KAND,MAMO;;AAEN1H,SAAInN,KAAKmR,IAAL,CAAW8F,EAAX,CAAJ;AACA1W,SAAIwW,KAAK5J,CAAT;AACA0H,SAAIqC,KAAK/J,CAAT;AAEA;AAED,IAlBM,MAkBA;;AAEN;;AAEA,QAAKgK,KAAKsR,OAAV,EAAoB;;AAEnBloB,SAAI,WAAJ;AACA4M,SAAI,WAAJ;AACA0H,SAAI,CAAJ;AAEA,KAND,MAMO;;AAENA,SAAI7U,KAAKmR,IAAL,CAAWgG,EAAX,CAAJ;AACA5W,SAAIyW,KAAKnC,CAAT;AACA1H,SAAI+J,KAAKrC,CAAT;AAEA;AAED;;AAED,QAAKpG,GAAL,CAAUlO,CAAV,EAAa4M,CAAb,EAAgB0H,CAAhB,EAAmBtD,KAAnB;;AAEA,UAAO,IAAP,CAxF0C,CAwF7B;AAEb;;AAED;;AAEA,MAAI3B,IAAI5P,KAAKmR,IAAL,CAAW,CAAE6O,MAAMF,GAAR,KAAkBE,MAAMF,GAAxB,IACA,CAAEH,MAAMI,GAAR,KAAkBJ,MAAMI,GAAxB,CADA,GAEA,CAAEH,MAAMF,GAAR,KAAkBE,MAAMF,GAAxB,CAFX,CAAR,CAhH8C,CAkHM;;AAEpD,MAAK1f,KAAKqR,GAAL,CAAUzB,CAAV,IAAgB,KAArB,EAA6BA,IAAI,CAAJ;;AAE7B;AACA;;AAEA,OAAKrP,CAAL,GAAS,CAAEyf,MAAMF,GAAR,IAAgBlQ,CAAzB;AACA,OAAKzC,CAAL,GAAS,CAAEwS,MAAMI,GAAR,IAAgBnQ,CAAzB;AACA,OAAKiF,CAAL,GAAS,CAAE+K,MAAMF,GAAR,IAAgB9P,CAAzB;AACA,OAAKL,CAAL,GAASvP,KAAK2jB,IAAL,CAAW,CAAElE,MAAMI,GAAN,GAAYI,GAAZ,GAAkB,CAApB,IAA0B,CAArC,CAAT;;AAEA,SAAO,IAAP;AAEA,EA/XgC;;AAiYjCzT,MAAK,UAAW6C,CAAX,EAAe;;AAEnB,OAAK9O,CAAL,GAASP,KAAKwM,GAAL,CAAU,KAAKjM,CAAf,EAAkB8O,EAAE9O,CAApB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAKwM,GAAL,CAAU,KAAKW,CAAf,EAAkBkC,EAAElC,CAApB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAKwM,GAAL,CAAU,KAAKqI,CAAf,EAAkBxF,EAAEwF,CAApB,CAAT;AACA,OAAKtF,CAAL,GAASvP,KAAKwM,GAAL,CAAU,KAAK+C,CAAf,EAAkBF,EAAEE,CAApB,CAAT;;AAEA,SAAO,IAAP;AAEA,EA1YgC;;AA4YjC9C,MAAK,UAAW4C,CAAX,EAAe;;AAEnB,OAAK9O,CAAL,GAASP,KAAKyM,GAAL,CAAU,KAAKlM,CAAf,EAAkB8O,EAAE9O,CAApB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAKyM,GAAL,CAAU,KAAKU,CAAf,EAAkBkC,EAAElC,CAApB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAKyM,GAAL,CAAU,KAAKoI,CAAf,EAAkBxF,EAAEwF,CAApB,CAAT;AACA,OAAKtF,CAAL,GAASvP,KAAKyM,GAAL,CAAU,KAAK8C,CAAf,EAAkBF,EAAEE,CAApB,CAAT;;AAEA,SAAO,IAAP;AAEA,EArZgC;;AAuZjChD,QAAO,UAAWC,GAAX,EAAgBC,GAAhB,EAAsB;;AAE5B;;AAEA,OAAKlM,CAAL,GAASP,KAAKyM,GAAL,CAAUD,IAAIjM,CAAd,EAAiBP,KAAKwM,GAAL,CAAUC,IAAIlM,CAAd,EAAiB,KAAKA,CAAtB,CAAjB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAKyM,GAAL,CAAUD,IAAIW,CAAd,EAAiBnN,KAAKwM,GAAL,CAAUC,IAAIU,CAAd,EAAiB,KAAKA,CAAtB,CAAjB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAKyM,GAAL,CAAUD,IAAIqI,CAAd,EAAiB7U,KAAKwM,GAAL,CAAUC,IAAIoI,CAAd,EAAiB,KAAKA,CAAtB,CAAjB,CAAT;AACA,OAAKtF,CAAL,GAASvP,KAAKyM,GAAL,CAAUD,IAAI+C,CAAd,EAAiBvP,KAAKwM,GAAL,CAAUC,IAAI8C,CAAd,EAAiB,KAAKA,CAAtB,CAAjB,CAAT;;AAEA,SAAO,IAAP;AAEA,EAlagC;;AAoajCmB,cAAa,YAAY;;AAExB,MAAIlE,GAAJ,EAASC,GAAT;;AAEA,SAAO,SAASiE,WAAT,CAAsBC,MAAtB,EAA8BC,MAA9B,EAAuC;;AAE7C,OAAKpE,QAAQzM,SAAb,EAAyB;;AAExByM,UAAM,IAAI4b,OAAJ,EAAN;AACA3b,UAAM,IAAI2b,OAAJ,EAAN;AAEA;;AAED5b,OAAIiC,GAAJ,CAASkC,MAAT,EAAiBA,MAAjB,EAAyBA,MAAzB,EAAiCA,MAAjC;AACAlE,OAAIgC,GAAJ,CAASmC,MAAT,EAAiBA,MAAjB,EAAyBA,MAAzB,EAAiCA,MAAjC;;AAEA,UAAO,KAAKrE,KAAL,CAAYC,GAAZ,EAAiBC,GAAjB,CAAP;AAEA,GAdD;AAgBA,EApBY,EApaoB;;AA0bjCoE,cAAa,UAAWrE,GAAX,EAAgBC,GAAhB,EAAsB;;AAElC,MAAIpL,SAAS,KAAKA,MAAL,EAAb;;AAEA,SAAO,KAAKiP,YAAL,CAAmBjP,UAAU,CAA7B,EAAiC+O,cAAjC,CAAiDpQ,KAAKyM,GAAL,CAAUD,GAAV,EAAexM,KAAKwM,GAAL,CAAUC,GAAV,EAAepL,MAAf,CAAf,CAAjD,CAAP;AAEA,EAhcgC;;AAkcjChB,QAAO,YAAY;;AAElB,OAAKE,CAAL,GAASP,KAAKK,KAAL,CAAY,KAAKE,CAAjB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAKK,KAAL,CAAY,KAAK8M,CAAjB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAKK,KAAL,CAAY,KAAKwU,CAAjB,CAAT;AACA,OAAKtF,CAAL,GAASvP,KAAKK,KAAL,CAAY,KAAKkP,CAAjB,CAAT;;AAEA,SAAO,IAAP;AAEA,EA3cgC;;AA6cjCpB,OAAM,YAAY;;AAEjB,OAAK5N,CAAL,GAASP,KAAKmO,IAAL,CAAW,KAAK5N,CAAhB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAKmO,IAAL,CAAW,KAAKhB,CAAhB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAKmO,IAAL,CAAW,KAAK0G,CAAhB,CAAT;AACA,OAAKtF,CAAL,GAASvP,KAAKmO,IAAL,CAAW,KAAKoB,CAAhB,CAAT;;AAEA,SAAO,IAAP;AAEA,EAtdgC;;AAwdjCuB,QAAO,YAAY;;AAElB,OAAKvQ,CAAL,GAASP,KAAK8Q,KAAL,CAAY,KAAKvQ,CAAjB,CAAT;AACA,OAAK4M,CAAL,GAASnN,KAAK8Q,KAAL,CAAY,KAAK3D,CAAjB,CAAT;AACA,OAAK0H,CAAL,GAAS7U,KAAK8Q,KAAL,CAAY,KAAK+D,CAAjB,CAAT;AACA,OAAKtF,CAAL,GAASvP,KAAK8Q,KAAL,CAAY,KAAKvB,CAAjB,CAAT;;AAEA,SAAO,IAAP;AAEA,EAjegC;;AAmejCwB,cAAa,YAAY;;AAExB,OAAKxQ,CAAL,GAAW,KAAKA,CAAL,GAAS,CAAX,GAAiBP,KAAKmO,IAAL,CAAW,KAAK5N,CAAhB,CAAjB,GAAuCP,KAAKK,KAAL,CAAY,KAAKE,CAAjB,CAAhD;AACA,OAAK4M,CAAL,GAAW,KAAKA,CAAL,GAAS,CAAX,GAAiBnN,KAAKmO,IAAL,CAAW,KAAKhB,CAAhB,CAAjB,GAAuCnN,KAAKK,KAAL,CAAY,KAAK8M,CAAjB,CAAhD;AACA,OAAK0H,CAAL,GAAW,KAAKA,CAAL,GAAS,CAAX,GAAiB7U,KAAKmO,IAAL,CAAW,KAAK0G,CAAhB,CAAjB,GAAuC7U,KAAKK,KAAL,CAAY,KAAKwU,CAAjB,CAAhD;AACA,OAAKtF,CAAL,GAAW,KAAKA,CAAL,GAAS,CAAX,GAAiBvP,KAAKmO,IAAL,CAAW,KAAKoB,CAAhB,CAAjB,GAAuCvP,KAAKK,KAAL,CAAY,KAAKkP,CAAjB,CAAhD;;AAEA,SAAO,IAAP;AAEA,EA5egC;;AA8ejCyB,SAAQ,YAAY;;AAEnB,OAAKzQ,CAAL,GAAS,CAAE,KAAKA,CAAhB;AACA,OAAK4M,CAAL,GAAS,CAAE,KAAKA,CAAhB;AACA,OAAK0H,CAAL,GAAS,CAAE,KAAKA,CAAhB;AACA,OAAKtF,CAAL,GAAS,CAAE,KAAKA,CAAhB;;AAEA,SAAO,IAAP;AAEA,EAvfgC;;AAyfjC0B,MAAK,UAAW5B,CAAX,EAAe;;AAEnB,SAAO,KAAK9O,CAAL,GAAS8O,EAAE9O,CAAX,GAAe,KAAK4M,CAAL,GAASkC,EAAElC,CAA1B,GAA8B,KAAK0H,CAAL,GAASxF,EAAEwF,CAAzC,GAA6C,KAAKtF,CAAL,GAASF,EAAEE,CAA/D;AAEA,EA7fgC;;AA+fjC2B,WAAU,YAAY;;AAErB,SAAO,KAAK3Q,CAAL,GAAS,KAAKA,CAAd,GAAkB,KAAK4M,CAAL,GAAS,KAAKA,CAAhC,GAAoC,KAAK0H,CAAL,GAAS,KAAKA,CAAlD,GAAsD,KAAKtF,CAAL,GAAS,KAAKA,CAA3E;AAEA,EAngBgC;;AAqgBjClO,SAAQ,YAAY;;AAEnB,SAAOrB,KAAKmR,IAAL,CAAW,KAAK5Q,CAAL,GAAS,KAAKA,CAAd,GAAkB,KAAK4M,CAAL,GAAS,KAAKA,CAAhC,GAAoC,KAAK0H,CAAL,GAAS,KAAKA,CAAlD,GAAsD,KAAKtF,CAAL,GAAS,KAAKA,CAA/E,CAAP;AAEA,EAzgBgC;;AA2gBjC6B,kBAAiB,YAAY;;AAE5B,SAAOpR,KAAKqR,GAAL,CAAU,KAAK9Q,CAAf,IAAqBP,KAAKqR,GAAL,CAAU,KAAKlE,CAAf,CAArB,GAA0CnN,KAAKqR,GAAL,CAAU,KAAKwD,CAAf,CAA1C,GAA+D7U,KAAKqR,GAAL,CAAU,KAAK9B,CAAf,CAAtE;AAEA,EA/gBgC;;AAihBjC+B,YAAW,YAAY;;AAEtB,SAAO,KAAKhB,YAAL,CAAmB,KAAKjP,MAAL,MAAiB,CAApC,CAAP;AAEA,EArhBgC;;AAuhBjCyQ,YAAW,UAAWzQ,MAAX,EAAoB;;AAE9B,SAAO,KAAKiQ,SAAL,GAAiBlB,cAAjB,CAAiC/O,MAAjC,CAAP;AAEA,EA3hBgC;;AA6hBjC6L,OAAM,UAAWmC,CAAX,EAAc0C,KAAd,EAAsB;;AAE3B,OAAKxR,CAAL,IAAU,CAAE8O,EAAE9O,CAAF,GAAM,KAAKA,CAAb,IAAmBwR,KAA7B;AACA,OAAK5E,CAAL,IAAU,CAAEkC,EAAElC,CAAF,GAAM,KAAKA,CAAb,IAAmB4E,KAA7B;AACA,OAAK8C,CAAL,IAAU,CAAExF,EAAEwF,CAAF,GAAM,KAAKA,CAAb,IAAmB9C,KAA7B;AACA,OAAKxC,CAAL,IAAU,CAAEF,EAAEE,CAAF,GAAM,KAAKA,CAAb,IAAmBwC,KAA7B;;AAEA,SAAO,IAAP;AAEA,EAtiBgC;;AAwiBjCC,cAAa,UAAWC,EAAX,EAAeC,EAAf,EAAmBH,KAAnB,EAA2B;;AAEvC,SAAO,KAAK9B,UAAL,CAAiBiC,EAAjB,EAAqBD,EAArB,EAA0B7B,cAA1B,CAA0C2B,KAA1C,EAAkDzC,GAAlD,CAAuD2C,EAAvD,CAAP;AAEA,EA5iBgC;;AA8iBjCE,SAAQ,UAAW9C,CAAX,EAAe;;AAEtB,SAAWA,EAAE9O,CAAF,KAAQ,KAAKA,CAAf,IAAwB8O,EAAElC,CAAF,KAAQ,KAAKA,CAArC,IAA8CkC,EAAEwF,CAAF,KAAQ,KAAKA,CAA3D,IAAoExF,EAAEE,CAAF,KAAQ,KAAKA,CAA1F;AAEA,EAljBgC;;AAojBjC6C,YAAW,UAAW5P,KAAX,EAAkB6P,MAAlB,EAA2B;;AAErC,MAAKA,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;;AAE5B,OAAK9R,CAAL,GAASiC,MAAO6P,MAAP,CAAT;AACA,OAAKlF,CAAL,GAAS3K,MAAO6P,SAAS,CAAhB,CAAT;AACA,OAAKwC,CAAL,GAASrS,MAAO6P,SAAS,CAAhB,CAAT;AACA,OAAK9C,CAAL,GAAS/M,MAAO6P,SAAS,CAAhB,CAAT;;AAEA,SAAO,IAAP;AAEA,EA/jBgC;;AAikBjCC,UAAS,UAAW9P,KAAX,EAAkB6P,MAAlB,EAA2B;;AAEnC,MAAK7P,UAAUzC,SAAf,EAA2ByC,QAAQ,EAAR;AAC3B,MAAK6P,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;;AAE5B7P,QAAO6P,MAAP,IAAkB,KAAK9R,CAAvB;AACAiC,QAAO6P,SAAS,CAAhB,IAAsB,KAAKlF,CAA3B;AACA3K,QAAO6P,SAAS,CAAhB,IAAsB,KAAKwC,CAA3B;AACArS,QAAO6P,SAAS,CAAhB,IAAsB,KAAK9C,CAA3B;;AAEA,SAAO/M,KAAP;AAEA,EA7kBgC;;AA+kBjC+P,sBAAqB,UAAWC,SAAX,EAAsBrR,KAAtB,EAA6BkR,MAA7B,EAAsC;;AAE1D,MAAKA,WAAWtS,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,qEAAd;AAEA;;AAED,OAAKlP,CAAL,GAASiS,UAAUC,IAAV,CAAgBtR,KAAhB,CAAT;AACA,OAAKgM,CAAL,GAASqF,UAAUE,IAAV,CAAgBvR,KAAhB,CAAT;AACA,OAAK0T,CAAL,GAASrC,UAAUuH,IAAV,CAAgB5Y,KAAhB,CAAT;AACA,OAAKoO,CAAL,GAASiD,UAAUmW,IAAV,CAAgBxnB,KAAhB,CAAT;;AAEA,SAAO,IAAP;AAEA;;AA9lBgC,CAAlC;;AAkmBA;;;;;;AAMA;;;;;AAKA,SAASynB,iBAAT,CAA4BxB,KAA5B,EAAmCC,MAAnC,EAA2CwB,OAA3C,EAAqD;;AAEpD,MAAKzB,KAAL,GAAaA,KAAb;AACA,MAAKC,MAAL,GAAcA,MAAd;;AAEA,MAAKyB,OAAL,GAAe,IAAIV,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmBhB,KAAnB,EAA0BC,MAA1B,CAAf;AACA,MAAK0B,WAAL,GAAmB,KAAnB;;AAEA,MAAKC,QAAL,GAAgB,IAAIZ,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmBhB,KAAnB,EAA0BC,MAA1B,CAAhB;;AAEAwB,WAAUA,WAAW,EAArB;;AAEA,KAAKA,QAAQrD,SAAR,KAAsBzlB,SAA3B,EAAuC8oB,QAAQrD,SAAR,GAAoBle,YAApB;;AAEvC,MAAK2hB,OAAL,GAAe,IAAI/D,OAAJ,CAAanlB,SAAb,EAAwBA,SAAxB,EAAmC8oB,QAAQxD,KAA3C,EAAkDwD,QAAQvD,KAA1D,EAAiEuD,QAAQtD,SAAzE,EAAoFsD,QAAQrD,SAA5F,EAAuGqD,QAAQpD,MAA/G,EAAuHoD,QAAQjnB,IAA/H,EAAqIinB,QAAQnD,UAA7I,EAAyJmD,QAAQlD,QAAjK,CAAf;;AAEA,MAAKuD,WAAL,GAAmBL,QAAQK,WAAR,KAAwBnpB,SAAxB,GAAoC8oB,QAAQK,WAA5C,GAA0D,IAA7E;AACA,MAAKC,aAAL,GAAqBN,QAAQM,aAAR,KAA0BppB,SAA1B,GAAsC8oB,QAAQM,aAA9C,GAA8D,IAAnF;AACA,MAAKC,YAAL,GAAoBP,QAAQO,YAAR,KAAyBrpB,SAAzB,GAAqC8oB,QAAQO,YAA7C,GAA4D,IAAhF;AAEA;;AAEDR,kBAAkBnoB,SAAlB,GAA8BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAe9kB,gBAAgBjB,SAA/B,CAAf,EAA2D;;AAExF0O,cAAayZ,iBAF2E;;AAIxFS,sBAAqB,IAJmE;;AAMxFC,UAAS,UAAWlC,KAAX,EAAkBC,MAAlB,EAA2B;;AAEnC,MAAK,KAAKD,KAAL,KAAeA,KAAf,IAAwB,KAAKC,MAAL,KAAgBA,MAA7C,EAAsD;;AAErD,QAAKD,KAAL,GAAaA,KAAb;AACA,QAAKC,MAAL,GAAcA,MAAd;;AAEA,QAAKY,OAAL;AAEA;;AAED,OAAKe,QAAL,CAAcva,GAAd,CAAmB,CAAnB,EAAsB,CAAtB,EAAyB2Y,KAAzB,EAAgCC,MAAhC;AACA,OAAKyB,OAAL,CAAara,GAAb,CAAkB,CAAlB,EAAqB,CAArB,EAAwB2Y,KAAxB,EAA+BC,MAA/B;AAEA,EApBuF;;AAsBxFnY,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EA1BuF;;AA4BxFA,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB,OAAK8lB,KAAL,GAAa9lB,OAAO8lB,KAApB;AACA,OAAKC,MAAL,GAAc/lB,OAAO+lB,MAArB;;AAEA,OAAK2B,QAAL,CAAc5Z,IAAd,CAAoB9N,OAAO0nB,QAA3B;;AAEA,OAAKC,OAAL,GAAe3nB,OAAO2nB,OAAP,CAAe/Z,KAAf,EAAf;;AAEA,OAAKga,WAAL,GAAmB5nB,OAAO4nB,WAA1B;AACA,OAAKC,aAAL,GAAqB7nB,OAAO6nB,aAA5B;AACA,OAAKC,YAAL,GAAoB9nB,OAAO8nB,YAA3B;;AAEA,SAAO,IAAP;AAEA,EA3CuF;;AA6CxFnB,UAAS,YAAY;;AAEpB,OAAK3lB,aAAL,CAAoB,EAAEV,MAAM,SAAR,EAApB;AAEA;;AAjDuF,CAA3D,CAA9B;;AAqDA;;;;AAIA,SAAS2nB,qBAAT,CAAgCnC,KAAhC,EAAuCC,MAAvC,EAA+CwB,OAA/C,EAAyD;;AAExDD,mBAAkBnnB,IAAlB,CAAwB,IAAxB,EAA8B2lB,KAA9B,EAAqCC,MAArC,EAA6CwB,OAA7C;;AAEA,MAAKW,cAAL,GAAsB,CAAtB,CAJwD,CAI/B;AACzB,MAAKC,iBAAL,GAAyB,CAAzB;AAEA;;AAEDF,sBAAsB9oB,SAAtB,GAAkCC,OAAO8lB,MAAP,CAAeoC,kBAAkBnoB,SAAjC,CAAlC;AACA8oB,sBAAsB9oB,SAAtB,CAAgC0O,WAAhC,GAA8Coa,qBAA9C;;AAEAA,sBAAsB9oB,SAAtB,CAAgCipB,uBAAhC,GAA0D,IAA1D;;AAEA;;;;AAIA,SAASC,WAAT,CAAsBC,IAAtB,EAA4BxC,KAA5B,EAAmCC,MAAnC,EAA2C5B,MAA3C,EAAmD7jB,IAAnD,EAAyDwjB,OAAzD,EAAkEC,KAAlE,EAAyEC,KAAzE,EAAgFC,SAAhF,EAA2FC,SAA3F,EAAsGE,UAAtG,EAAkHC,QAAlH,EAA6H;;AAE5HT,SAAQzjB,IAAR,CAAc,IAAd,EAAoB,IAApB,EAA0B2jB,OAA1B,EAAmCC,KAAnC,EAA0CC,KAA1C,EAAiDC,SAAjD,EAA4DC,SAA5D,EAAuEC,MAAvE,EAA+E7jB,IAA/E,EAAqF8jB,UAArF,EAAiGC,QAAjG;;AAEA,MAAKR,KAAL,GAAa,EAAEyE,MAAMA,IAAR,EAAcxC,OAAOA,KAArB,EAA4BC,QAAQA,MAApC,EAAb;;AAEA,MAAK9B,SAAL,GAAiBA,cAAcxlB,SAAd,GAA0BwlB,SAA1B,GAAsCpe,aAAvD;AACA,MAAKqe,SAAL,GAAiBA,cAAczlB,SAAd,GAA0BylB,SAA1B,GAAsCre,aAAvD;;AAEA,MAAK+e,eAAL,GAAuB,KAAvB;AACA,MAAKE,KAAL,GAAa,KAAb;AACA,MAAKC,eAAL,GAAuB,CAAvB;AAEA;;AAEDsD,YAAYlpB,SAAZ,GAAwBC,OAAO8lB,MAAP,CAAetB,QAAQzkB,SAAvB,CAAxB;AACAkpB,YAAYlpB,SAAZ,CAAsB0O,WAAtB,GAAoCwa,WAApC;;AAEAA,YAAYlpB,SAAZ,CAAsBopB,aAAtB,GAAsC,IAAtC;;AAEA;;;;;AAKA,SAASC,IAAT,CAAetd,GAAf,EAAoBC,GAApB,EAA0B;;AAEzB,MAAKD,GAAL,GAAaA,QAAQzM,SAAV,GAAwByM,GAAxB,GAA8B,IAAIuI,OAAJ,CAAa,CAAEgV,QAAf,EAAyB,CAAEA,QAA3B,EAAqC,CAAEA,QAAvC,CAAzC;AACA,MAAKtd,GAAL,GAAaA,QAAQ1M,SAAV,GAAwB0M,GAAxB,GAA8B,IAAIsI,OAAJ,CAAa,CAAEgV,QAAf,EAAyB,CAAEA,QAA3B,EAAqC,CAAEA,QAAvC,CAAzC;AAEA;;AAEDrpB,OAAOK,MAAP,CAAe+oB,KAAKrpB,SAApB,EAA+B;;AAE9BupB,SAAQ,IAFsB;;AAI9Bvb,MAAK,UAAWjC,GAAX,EAAgBC,GAAhB,EAAsB;;AAE1B,OAAKD,GAAL,CAAS4C,IAAT,CAAe5C,GAAf;AACA,OAAKC,GAAL,CAAS2C,IAAT,CAAe3C,GAAf;;AAEA,SAAO,IAAP;AAEA,EAX6B;;AAa9Bwd,eAAc,UAAWznB,KAAX,EAAmB;;AAEhC,MAAI0nB,OAAO,CAAEH,QAAb;AACA,MAAII,OAAO,CAAEJ,QAAb;AACA,MAAIK,OAAO,CAAEL,QAAb;;AAEA,MAAIM,OAAO,CAAEN,QAAb;AACA,MAAIO,OAAO,CAAEP,QAAb;AACA,MAAIQ,OAAO,CAAER,QAAb;;AAEA,OAAM,IAAIrnB,IAAI,CAAR,EAAWC,IAAIH,MAAMnB,MAA3B,EAAmCqB,IAAIC,CAAvC,EAA0CD,KAAK,CAA/C,EAAmD;;AAElD,OAAInC,IAAIiC,MAAOE,CAAP,CAAR;AACA,OAAIyK,IAAI3K,MAAOE,IAAI,CAAX,CAAR;AACA,OAAImS,IAAIrS,MAAOE,IAAI,CAAX,CAAR;;AAEA,OAAKnC,IAAI2pB,IAAT,EAAgBA,OAAO3pB,CAAP;AAChB,OAAK4M,IAAIgd,IAAT,EAAgBA,OAAOhd,CAAP;AAChB,OAAK0H,IAAIuV,IAAT,EAAgBA,OAAOvV,CAAP;;AAEhB,OAAKtU,IAAI8pB,IAAT,EAAgBA,OAAO9pB,CAAP;AAChB,OAAK4M,IAAImd,IAAT,EAAgBA,OAAOnd,CAAP;AAChB,OAAK0H,IAAI0V,IAAT,EAAgBA,OAAO1V,CAAP;AAEhB;;AAED,OAAKrI,GAAL,CAASiC,GAAT,CAAcyb,IAAd,EAAoBC,IAApB,EAA0BC,IAA1B;AACA,OAAK3d,GAAL,CAASgC,GAAT,CAAc4b,IAAd,EAAoBC,IAApB,EAA0BC,IAA1B;;AAEA,SAAO,IAAP;AAEA,EA5C6B;;AA8C9BC,yBAAwB,UAAWhY,SAAX,EAAuB;;AAE9C,MAAI0X,OAAO,CAAEH,QAAb;AACA,MAAII,OAAO,CAAEJ,QAAb;AACA,MAAIK,OAAO,CAAEL,QAAb;;AAEA,MAAIM,OAAO,CAAEN,QAAb;AACA,MAAIO,OAAO,CAAEP,QAAb;AACA,MAAIQ,OAAO,CAAER,QAAb;;AAEA,OAAM,IAAIrnB,IAAI,CAAR,EAAWC,IAAI6P,UAAUsH,KAA/B,EAAsCpX,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;;AAEnD,OAAInC,IAAIiS,UAAUC,IAAV,CAAgB/P,CAAhB,CAAR;AACA,OAAIyK,IAAIqF,UAAUE,IAAV,CAAgBhQ,CAAhB,CAAR;AACA,OAAImS,IAAIrC,UAAUuH,IAAV,CAAgBrX,CAAhB,CAAR;;AAEA,OAAKnC,IAAI2pB,IAAT,EAAgBA,OAAO3pB,CAAP;AAChB,OAAK4M,IAAIgd,IAAT,EAAgBA,OAAOhd,CAAP;AAChB,OAAK0H,IAAIuV,IAAT,EAAgBA,OAAOvV,CAAP;;AAEhB,OAAKtU,IAAI8pB,IAAT,EAAgBA,OAAO9pB,CAAP;AAChB,OAAK4M,IAAImd,IAAT,EAAgBA,OAAOnd,CAAP;AAChB,OAAK0H,IAAI0V,IAAT,EAAgBA,OAAO1V,CAAP;AAEhB;;AAED,OAAKrI,GAAL,CAASiC,GAAT,CAAcyb,IAAd,EAAoBC,IAApB,EAA0BC,IAA1B;AACA,OAAK3d,GAAL,CAASgC,GAAT,CAAc4b,IAAd,EAAoBC,IAApB,EAA0BC,IAA1B;;AAEA,SAAO,IAAP;AAEA,EA7E6B;;AA+E9BE,gBAAe,UAAWC,MAAX,EAAoB;;AAElC,OAAKC,SAAL;;AAEA,OAAM,IAAIjoB,IAAI,CAAR,EAAWkoB,KAAKF,OAAOrpB,MAA7B,EAAqCqB,IAAIkoB,EAAzC,EAA6CloB,GAA7C,EAAoD;;AAEnD,QAAKmoB,aAAL,CAAoBH,OAAQhoB,CAAR,CAApB;AAEA;;AAED,SAAO,IAAP;AAEA,EA3F6B;;AA6F9BooB,uBAAsB,YAAY;;AAEjC,MAAI7Y,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAAS+V,oBAAT,CAA+BlY,MAA/B,EAAuCmY,IAAvC,EAA8C;;AAEpD,OAAIC,WAAW/Y,GAAG7C,IAAH,CAAS2b,IAAT,EAAgB3a,cAAhB,CAAgC,GAAhC,CAAf;;AAEA,QAAK5D,GAAL,CAAS4C,IAAT,CAAewD,MAAf,EAAwB5C,GAAxB,CAA6Bgb,QAA7B;AACA,QAAKve,GAAL,CAAS2C,IAAT,CAAewD,MAAf,EAAwBtD,GAAxB,CAA6B0b,QAA7B;;AAEA,UAAO,IAAP;AAEA,GATD;AAWA,EAfqB,EA7FQ;;AA8G9BC,gBAAe,UAAWC,MAAX,EAAoB;;AAElC,OAAKP,SAAL;;AAEA,SAAO,KAAKQ,cAAL,CAAqBD,MAArB,CAAP;AAEA,EApH6B;;AAsH9Bhc,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EA1H6B;;AA4H9BA,OAAM,UAAWgc,GAAX,EAAiB;;AAEtB,OAAK5e,GAAL,CAAS4C,IAAT,CAAegc,IAAI5e,GAAnB;AACA,OAAKC,GAAL,CAAS2C,IAAT,CAAegc,IAAI3e,GAAnB;;AAEA,SAAO,IAAP;AAEA,EAnI6B;;AAqI9Bke,YAAW,YAAY;;AAEtB,OAAKne,GAAL,CAASjM,CAAT,GAAa,KAAKiM,GAAL,CAASW,CAAT,GAAa,KAAKX,GAAL,CAASqI,CAAT,GAAa,CAAEkV,QAAzC;AACA,OAAKtd,GAAL,CAASlM,CAAT,GAAa,KAAKkM,GAAL,CAASU,CAAT,GAAa,KAAKV,GAAL,CAASoI,CAAT,GAAa,CAAEkV,QAAzC;;AAEA,SAAO,IAAP;AAEA,EA5I6B;;AA8I9BsB,UAAS,YAAY;;AAEpB;;AAEA,SAAS,KAAK5e,GAAL,CAASlM,CAAT,GAAa,KAAKiM,GAAL,CAASjM,CAAxB,IAAiC,KAAKkM,GAAL,CAASU,CAAT,GAAa,KAAKX,GAAL,CAASW,CAAvD,IAAgE,KAAKV,GAAL,CAASoI,CAAT,GAAa,KAAKrI,GAAL,CAASqI,CAA7F;AAEA,EApJ6B;;AAsJ9ByW,YAAW,UAAWtqB,MAAX,EAAoB;;AAE9B,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,iDAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO,KAAKsW,OAAL,KAAiBrqB,OAAOyN,GAAP,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,CAAjB,GAAyCzN,OAAO0O,UAAP,CAAmB,KAAKlD,GAAxB,EAA6B,KAAKC,GAAlC,EAAwC2D,cAAxC,CAAwD,GAAxD,CAAhD;AAEA,EAjK6B;;AAmK9Bmb,UAAS,UAAWvqB,MAAX,EAAoB;;AAE5B,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,+CAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO,KAAKsW,OAAL,KAAiBrqB,OAAOyN,GAAP,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,CAAjB,GAAyCzN,OAAOiP,UAAP,CAAmB,KAAKxD,GAAxB,EAA6B,KAAKD,GAAlC,CAAhD;AAEA,EA9K6B;;AAgL9Bqe,gBAAe,UAAWW,KAAX,EAAmB;;AAEjC,OAAKhf,GAAL,CAASA,GAAT,CAAcgf,KAAd;AACA,OAAK/e,GAAL,CAASA,GAAT,CAAc+e,KAAd;;AAEA,SAAO,IAAP;AAEA,EAvL6B;;AAyL9BC,iBAAgB,UAAWtP,MAAX,EAAoB;;AAEnC,OAAK3P,GAAL,CAASwD,GAAT,CAAcmM,MAAd;AACA,OAAK1P,GAAL,CAAS6C,GAAT,CAAc6M,MAAd;;AAEA,SAAO,IAAP;AAEA,EAhM6B;;AAkM9BuP,iBAAgB,UAAW9c,MAAX,EAAoB;;AAEnC,OAAKpC,GAAL,CAASmD,SAAT,CAAoB,CAAEf,MAAtB;AACA,OAAKnC,GAAL,CAASkD,SAAT,CAAoBf,MAApB;;AAEA,SAAO,IAAP;AAEA,EAzM6B;;AA2M9Buc,iBAAgB,YAAY;;AAE3B;AACA;;AAEA,MAAIQ,KAAJ,EAAWjpB,CAAX,EAAcC,CAAd;;AAEA,MAAIsP,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,WAAS6W,QAAT,CAAmBC,IAAnB,EAA0B;;AAEzB,OAAIC,WAAWD,KAAKC,QAApB;;AAEA,OAAKA,aAAa/rB,SAAlB,EAA8B;;AAE7B,QAAK+rB,SAASC,UAAd,EAA2B;;AAE1B,SAAIC,WAAWF,SAASE,QAAxB;;AAEA,UAAMtpB,IAAI,CAAJ,EAAOC,IAAIqpB,SAAS3qB,MAA1B,EAAkCqB,IAAIC,CAAtC,EAAyCD,GAAzC,EAAgD;;AAE/CuP,SAAG7C,IAAH,CAAS4c,SAAUtpB,CAAV,CAAT;AACAuP,SAAG+H,YAAH,CAAiB6R,KAAKlJ,WAAtB;;AAEAgJ,YAAMd,aAAN,CAAqB5Y,EAArB;AAEA;AAED,KAbD,MAaO,IAAK6Z,SAASG,gBAAd,EAAiC;;AAEvC,SAAIzZ,YAAYsZ,SAASI,UAAT,CAAoBlQ,QAApC;;AAEA,SAAKxJ,cAAczS,SAAnB,EAA+B;;AAE9B,WAAM2C,IAAI,CAAJ,EAAOC,IAAI6P,UAAUsH,KAA3B,EAAkCpX,IAAIC,CAAtC,EAAyCD,GAAzC,EAAgD;;AAE/CuP,UAAGM,mBAAH,CAAwBC,SAAxB,EAAmC9P,CAAnC,EAAuCsX,YAAvC,CAAqD6R,KAAKlJ,WAA1D;;AAEAgJ,aAAMd,aAAN,CAAqB5Y,EAArB;AAEA;AAED;AAED;AAED;AAED;;AAED,SAAO,SAASkZ,cAAT,CAAyBD,MAAzB,EAAkC;;AAExCS,WAAQ,IAAR;;AAEAT,UAAOiB,iBAAP,CAA0B,IAA1B;;AAEAjB,UAAOU,QAAP,CAAiBA,QAAjB;;AAEA,UAAO,IAAP;AAEA,GAVD;AAYA,EA9De,EA3Mc;;AA2Q9BQ,gBAAe,UAAWZ,KAAX,EAAmB;;AAEjC,SAAOA,MAAMjrB,CAAN,GAAU,KAAKiM,GAAL,CAASjM,CAAnB,IAAwBirB,MAAMjrB,CAAN,GAAU,KAAKkM,GAAL,CAASlM,CAA3C,IACNirB,MAAMre,CAAN,GAAU,KAAKX,GAAL,CAASW,CADb,IACkBqe,MAAMre,CAAN,GAAU,KAAKV,GAAL,CAASU,CADrC,IAENqe,MAAM3W,CAAN,GAAU,KAAKrI,GAAL,CAASqI,CAFb,IAEkB2W,MAAM3W,CAAN,GAAU,KAAKpI,GAAL,CAASoI,CAFrC,GAEyC,KAFzC,GAEiD,IAFxD;AAIA,EAjR6B;;AAmR9BwX,cAAa,UAAWjB,GAAX,EAAiB;;AAE7B,SAAO,KAAK5e,GAAL,CAASjM,CAAT,IAAc6qB,IAAI5e,GAAJ,CAAQjM,CAAtB,IAA2B6qB,IAAI3e,GAAJ,CAAQlM,CAAR,IAAa,KAAKkM,GAAL,CAASlM,CAAjD,IACN,KAAKiM,GAAL,CAASW,CAAT,IAAcie,IAAI5e,GAAJ,CAAQW,CADhB,IACqBie,IAAI3e,GAAJ,CAAQU,CAAR,IAAa,KAAKV,GAAL,CAASU,CAD3C,IAEN,KAAKX,GAAL,CAASqI,CAAT,IAAcuW,IAAI5e,GAAJ,CAAQqI,CAFhB,IAEqBuW,IAAI3e,GAAJ,CAAQoI,CAAR,IAAa,KAAKpI,GAAL,CAASoI,CAFlD;AAIA,EAzR6B;;AA2R9ByX,eAAc,UAAWd,KAAX,EAAkBxqB,MAAlB,EAA2B;;AAExC;AACA;;AAEA,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,oDAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO/T,OAAOyN,GAAP,CACN,CAAE+c,MAAMjrB,CAAN,GAAU,KAAKiM,GAAL,CAASjM,CAArB,KAA6B,KAAKkM,GAAL,CAASlM,CAAT,GAAa,KAAKiM,GAAL,CAASjM,CAAnD,CADM,EAEN,CAAEirB,MAAMre,CAAN,GAAU,KAAKX,GAAL,CAASW,CAArB,KAA6B,KAAKV,GAAL,CAASU,CAAT,GAAa,KAAKX,GAAL,CAASW,CAAnD,CAFM,EAGN,CAAEqe,MAAM3W,CAAN,GAAU,KAAKrI,GAAL,CAASqI,CAArB,KAA6B,KAAKpI,GAAL,CAASoI,CAAT,GAAa,KAAKrI,GAAL,CAASqI,CAAnD,CAHM,CAAP;AAMA,EA7S6B;;AA+S9B0X,gBAAe,UAAWnB,GAAX,EAAiB;;AAE/B;AACA,SAAOA,IAAI3e,GAAJ,CAAQlM,CAAR,GAAY,KAAKiM,GAAL,CAASjM,CAArB,IAA0B6qB,IAAI5e,GAAJ,CAAQjM,CAAR,GAAY,KAAKkM,GAAL,CAASlM,CAA/C,IACN6qB,IAAI3e,GAAJ,CAAQU,CAAR,GAAY,KAAKX,GAAL,CAASW,CADf,IACoBie,IAAI5e,GAAJ,CAAQW,CAAR,GAAY,KAAKV,GAAL,CAASU,CADzC,IAENie,IAAI3e,GAAJ,CAAQoI,CAAR,GAAY,KAAKrI,GAAL,CAASqI,CAFf,IAEoBuW,IAAI5e,GAAJ,CAAQqI,CAAR,GAAY,KAAKpI,GAAL,CAASoI,CAFzC,GAE6C,KAF7C,GAEqD,IAF5D;AAIA,EAtT6B;;AAwT9B2X,mBAAoB,YAAY;;AAE/B,MAAIC,eAAe,IAAI1X,OAAJ,EAAnB;;AAEA,SAAO,SAASyX,gBAAT,CAA2BE,MAA3B,EAAoC;;AAE1C;AACA,QAAKC,UAAL,CAAiBD,OAAO9Z,MAAxB,EAAgC6Z,YAAhC;;AAEA;AACA,UAAOA,aAAa/a,iBAAb,CAAgCgb,OAAO9Z,MAAvC,KAAqD8Z,OAAO1I,MAAP,GAAgB0I,OAAO1I,MAAnF;AAEA,GARD;AAUA,EAdiB,EAxTY;;AAwU9B4I,kBAAiB,UAAWC,KAAX,EAAmB;;AAEnC;AACA;;AAEA,MAAIrgB,GAAJ,EAASC,GAAT;;AAEA,MAAKogB,MAAMpJ,MAAN,CAAaljB,CAAb,GAAiB,CAAtB,EAA0B;;AAEzBiM,SAAMqgB,MAAMpJ,MAAN,CAAaljB,CAAb,GAAiB,KAAKiM,GAAL,CAASjM,CAAhC;AACAkM,SAAMogB,MAAMpJ,MAAN,CAAaljB,CAAb,GAAiB,KAAKkM,GAAL,CAASlM,CAAhC;AAEA,GALD,MAKO;;AAENiM,SAAMqgB,MAAMpJ,MAAN,CAAaljB,CAAb,GAAiB,KAAKkM,GAAL,CAASlM,CAAhC;AACAkM,SAAMogB,MAAMpJ,MAAN,CAAaljB,CAAb,GAAiB,KAAKiM,GAAL,CAASjM,CAAhC;AAEA;;AAED,MAAKssB,MAAMpJ,MAAN,CAAatW,CAAb,GAAiB,CAAtB,EAA0B;;AAEzBX,UAAOqgB,MAAMpJ,MAAN,CAAatW,CAAb,GAAiB,KAAKX,GAAL,CAASW,CAAjC;AACAV,UAAOogB,MAAMpJ,MAAN,CAAatW,CAAb,GAAiB,KAAKV,GAAL,CAASU,CAAjC;AAEA,GALD,MAKO;;AAENX,UAAOqgB,MAAMpJ,MAAN,CAAatW,CAAb,GAAiB,KAAKV,GAAL,CAASU,CAAjC;AACAV,UAAOogB,MAAMpJ,MAAN,CAAatW,CAAb,GAAiB,KAAKX,GAAL,CAASW,CAAjC;AAEA;;AAED,MAAK0f,MAAMpJ,MAAN,CAAa5O,CAAb,GAAiB,CAAtB,EAA0B;;AAEzBrI,UAAOqgB,MAAMpJ,MAAN,CAAa5O,CAAb,GAAiB,KAAKrI,GAAL,CAASqI,CAAjC;AACApI,UAAOogB,MAAMpJ,MAAN,CAAa5O,CAAb,GAAiB,KAAKpI,GAAL,CAASoI,CAAjC;AAEA,GALD,MAKO;;AAENrI,UAAOqgB,MAAMpJ,MAAN,CAAa5O,CAAb,GAAiB,KAAKpI,GAAL,CAASoI,CAAjC;AACApI,UAAOogB,MAAMpJ,MAAN,CAAa5O,CAAb,GAAiB,KAAKrI,GAAL,CAASqI,CAAjC;AAEA;;AAED,SAASrI,OAAOqgB,MAAMC,QAAb,IAAyBrgB,OAAOogB,MAAMC,QAA/C;AAEA,EArX6B;;AAuX9BC,qBAAsB,YAAY;;AAEjC;AACA,MAAIC,KAAK,IAAIjY,OAAJ,EAAT;AACA,MAAI9C,KAAK,IAAI8C,OAAJ,EAAT;AACA,MAAI7C,KAAK,IAAI6C,OAAJ,EAAT;;AAEA;AACA,MAAIkY,KAAK,IAAIlY,OAAJ,EAAT;AACA,MAAImY,KAAK,IAAInY,OAAJ,EAAT;AACA,MAAIoY,KAAK,IAAIpY,OAAJ,EAAT;;AAEA,MAAIqY,WAAW,IAAIrY,OAAJ,EAAf;;AAEA,MAAInC,SAAS,IAAImC,OAAJ,EAAb;AACA,MAAIsY,UAAU,IAAItY,OAAJ,EAAd;;AAEA,MAAIuY,iBAAiB,IAAIvY,OAAJ,EAArB;;AAEA,WAASwY,UAAT,CAAqBC,IAArB,EAA4B;;AAE3B,OAAI9qB,CAAJ,EAAO+qB,CAAP;;AAEA,QAAM/qB,IAAI,CAAJ,EAAO+qB,IAAID,KAAKnsB,MAAL,GAAc,CAA/B,EAAkCqB,KAAK+qB,CAAvC,EAA0C/qB,KAAK,CAA/C,EAAmD;;AAElD0qB,aAAShb,SAAT,CAAoBob,IAApB,EAA0B9qB,CAA1B;AACA;AACA,QAAI0d,IAAIiN,QAAQ9sB,CAAR,GAAYP,KAAKqR,GAAL,CAAU+b,SAAS7sB,CAAnB,CAAZ,GAAqC8sB,QAAQlgB,CAAR,GAAYnN,KAAKqR,GAAL,CAAU+b,SAASjgB,CAAnB,CAAjD,GAA0EkgB,QAAQxY,CAAR,GAAY7U,KAAKqR,GAAL,CAAU+b,SAASvY,CAAnB,CAA9F;AACA;AACA,QAAI6Y,KAAKV,GAAG/b,GAAH,CAAQmc,QAAR,CAAT;AACA,QAAIO,KAAK1b,GAAGhB,GAAH,CAAQmc,QAAR,CAAT;AACA,QAAIQ,KAAK1b,GAAGjB,GAAH,CAAQmc,QAAR,CAAT;AACA;AACA,QAAKptB,KAAKyM,GAAL,CAAU,CAAEzM,KAAKyM,GAAL,CAAUihB,EAAV,EAAcC,EAAd,EAAkBC,EAAlB,CAAZ,EAAoC5tB,KAAKwM,GAAL,CAAUkhB,EAAV,EAAcC,EAAd,EAAkBC,EAAlB,CAApC,IAA+DxN,CAApE,EAAwE;;AAEvE;AACA;AACA,YAAO,KAAP;AAEA;AAED;;AAED,UAAO,IAAP;AAEA;;AAED,SAAO,SAAS2M,kBAAT,CAA6Bc,QAA7B,EAAwC;;AAE9C,OAAK,KAAKxC,OAAL,EAAL,EAAsB;;AAErB,WAAO,KAAP;AAEA;;AAED;AACA,QAAKC,SAAL,CAAgB1Y,MAAhB;AACAya,WAAQpd,UAAR,CAAoB,KAAKxD,GAAzB,EAA8BmG,MAA9B;;AAEA;AACAoa,MAAG/c,UAAH,CAAe4d,SAAShe,CAAxB,EAA2B+C,MAA3B;AACAX,MAAGhC,UAAH,CAAe4d,SAAS/d,CAAxB,EAA2B8C,MAA3B;AACAV,MAAGjC,UAAH,CAAe4d,SAAShb,CAAxB,EAA2BD,MAA3B;;AAEA;AACAqa,MAAGhd,UAAH,CAAegC,EAAf,EAAmB+a,EAAnB;AACAE,MAAGjd,UAAH,CAAeiC,EAAf,EAAmBD,EAAnB;AACAkb,MAAGld,UAAH,CAAe+c,EAAf,EAAmB9a,EAAnB;;AAEA;AACA;AACA;AACA,OAAIsb,OAAO,CACV,CADU,EACP,CAAEP,GAAGpY,CADE,EACCoY,GAAG9f,CADJ,EACO,CADP,EACU,CAAE+f,GAAGrY,CADf,EACkBqY,GAAG/f,CADrB,EACwB,CADxB,EAC2B,CAAEggB,GAAGtY,CADhC,EACmCsY,GAAGhgB,CADtC,EAEV8f,GAAGpY,CAFO,EAEJ,CAFI,EAED,CAAEoY,GAAG1sB,CAFJ,EAEO2sB,GAAGrY,CAFV,EAEa,CAFb,EAEgB,CAAEqY,GAAG3sB,CAFrB,EAEwB4sB,GAAGtY,CAF3B,EAE8B,CAF9B,EAEiC,CAAEsY,GAAG5sB,CAFtC,EAGV,CAAE0sB,GAAG9f,CAHK,EAGF8f,GAAG1sB,CAHD,EAGI,CAHJ,EAGO,CAAE2sB,GAAG/f,CAHZ,EAGe+f,GAAG3sB,CAHlB,EAGqB,CAHrB,EAGwB,CAAE4sB,GAAGhgB,CAH7B,EAGgCggB,GAAG5sB,CAHnC,EAGsC,CAHtC,CAAX;AAKA,OAAK,CAAEgtB,WAAYC,IAAZ,CAAP,EAA4B;;AAE3B,WAAO,KAAP;AAEA;;AAED;AACAA,UAAO,CAAE,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,CAAP;AACA,OAAK,CAAED,WAAYC,IAAZ,CAAP,EAA4B;;AAE3B,WAAO,KAAP;AAEA;;AAED;AACA;AACAF,kBAAe5V,YAAf,CAA6BuV,EAA7B,EAAiCC,EAAjC;AACAM,UAAO,CAAEF,eAAe/sB,CAAjB,EAAoB+sB,eAAengB,CAAnC,EAAsCmgB,eAAezY,CAArD,CAAP;AACA,UAAO0Y,WAAYC,IAAZ,CAAP;AAEA,GAlDD;AAoDA,EAnGmB,EAvXU;;AA4d9Bb,aAAY,UAAWnB,KAAX,EAAkBxqB,MAAlB,EAA2B;;AAEtC,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,kDAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO/T,OAAOoO,IAAP,CAAaoc,KAAb,EAAqBjf,KAArB,CAA4B,KAAKC,GAAjC,EAAsC,KAAKC,GAA3C,CAAP;AAEA,EAve6B;;AAye9BqhB,kBAAiB,YAAY;;AAE5B,MAAI7b,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAAS+Y,eAAT,CAA0BtC,KAA1B,EAAkC;;AAExC,OAAIuC,eAAe9b,GAAG7C,IAAH,CAASoc,KAAT,EAAiBjf,KAAjB,CAAwB,KAAKC,GAA7B,EAAkC,KAAKC,GAAvC,CAAnB;AACA,UAAOshB,aAAa/d,GAAb,CAAkBwb,KAAlB,EAA0BnqB,MAA1B,EAAP;AAEA,GALD;AAOA,EAXgB,EAzea;;AAsf9B2sB,oBAAmB,YAAY;;AAE9B,MAAI/b,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAASiZ,iBAAT,CAA4BhtB,MAA5B,EAAqC;;AAE3C,OAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,yDAAd;AACAzO,aAAS,IAAIitB,MAAJ,EAAT;AAEA;;AAED,QAAK3C,SAAL,CAAgBtqB,OAAO4R,MAAvB;;AAEA5R,UAAOgjB,MAAP,GAAgB,KAAKuH,OAAL,CAActZ,EAAd,EAAmB5Q,MAAnB,KAA8B,GAA9C;;AAEA,UAAOL,MAAP;AAEA,GAfD;AAiBA,EArBkB,EAtfW;;AA6gB9BktB,YAAW,UAAW9C,GAAX,EAAiB;;AAE3B,OAAK5e,GAAL,CAASC,GAAT,CAAc2e,IAAI5e,GAAlB;AACA,OAAKC,GAAL,CAASD,GAAT,CAAc4e,IAAI3e,GAAlB;;AAEA;AACA,MAAK,KAAK4e,OAAL,EAAL,EAAsB,KAAKV,SAAL;;AAEtB,SAAO,IAAP;AAEA,EAvhB6B;;AAyhB9BwD,QAAO,UAAW/C,GAAX,EAAiB;;AAEvB,OAAK5e,GAAL,CAASA,GAAT,CAAc4e,IAAI5e,GAAlB;AACA,OAAKC,GAAL,CAASA,GAAT,CAAc2e,IAAI3e,GAAlB;;AAEA,SAAO,IAAP;AAEA,EAhiB6B;;AAkiB9BuN,eAAc,YAAY;;AAEzB,MAAI0Q,SAAS,CACZ,IAAI3V,OAAJ,EADY,EAEZ,IAAIA,OAAJ,EAFY,EAGZ,IAAIA,OAAJ,EAHY,EAIZ,IAAIA,OAAJ,EAJY,EAKZ,IAAIA,OAAJ,EALY,EAMZ,IAAIA,OAAJ,EANY,EAOZ,IAAIA,OAAJ,EAPY,EAQZ,IAAIA,OAAJ,EARY,CAAb;;AAWA,SAAO,SAASiF,YAAT,CAAuBoC,MAAvB,EAAgC;;AAEtC;AACA,OAAK,KAAKiP,OAAL,EAAL,EAAsB,OAAO,IAAP;;AAEtB;AACAX,UAAQ,CAAR,EAAYjc,GAAZ,CAAiB,KAAKjC,GAAL,CAASjM,CAA1B,EAA6B,KAAKiM,GAAL,CAASW,CAAtC,EAAyC,KAAKX,GAAL,CAASqI,CAAlD,EAAsDmF,YAAtD,CAAoEoC,MAApE,EANsC,CAMwC;AAC9EsO,UAAQ,CAAR,EAAYjc,GAAZ,CAAiB,KAAKjC,GAAL,CAASjM,CAA1B,EAA6B,KAAKiM,GAAL,CAASW,CAAtC,EAAyC,KAAKV,GAAL,CAASoI,CAAlD,EAAsDmF,YAAtD,CAAoEoC,MAApE,EAPsC,CAOwC;AAC9EsO,UAAQ,CAAR,EAAYjc,GAAZ,CAAiB,KAAKjC,GAAL,CAASjM,CAA1B,EAA6B,KAAKkM,GAAL,CAASU,CAAtC,EAAyC,KAAKX,GAAL,CAASqI,CAAlD,EAAsDmF,YAAtD,CAAoEoC,MAApE,EARsC,CAQwC;AAC9EsO,UAAQ,CAAR,EAAYjc,GAAZ,CAAiB,KAAKjC,GAAL,CAASjM,CAA1B,EAA6B,KAAKkM,GAAL,CAASU,CAAtC,EAAyC,KAAKV,GAAL,CAASoI,CAAlD,EAAsDmF,YAAtD,CAAoEoC,MAApE,EATsC,CASwC;AAC9EsO,UAAQ,CAAR,EAAYjc,GAAZ,CAAiB,KAAKhC,GAAL,CAASlM,CAA1B,EAA6B,KAAKiM,GAAL,CAASW,CAAtC,EAAyC,KAAKX,GAAL,CAASqI,CAAlD,EAAsDmF,YAAtD,CAAoEoC,MAApE,EAVsC,CAUwC;AAC9EsO,UAAQ,CAAR,EAAYjc,GAAZ,CAAiB,KAAKhC,GAAL,CAASlM,CAA1B,EAA6B,KAAKiM,GAAL,CAASW,CAAtC,EAAyC,KAAKV,GAAL,CAASoI,CAAlD,EAAsDmF,YAAtD,CAAoEoC,MAApE,EAXsC,CAWwC;AAC9EsO,UAAQ,CAAR,EAAYjc,GAAZ,CAAiB,KAAKhC,GAAL,CAASlM,CAA1B,EAA6B,KAAKkM,GAAL,CAASU,CAAtC,EAAyC,KAAKX,GAAL,CAASqI,CAAlD,EAAsDmF,YAAtD,CAAoEoC,MAApE,EAZsC,CAYwC;AAC9EsO,UAAQ,CAAR,EAAYjc,GAAZ,CAAiB,KAAKhC,GAAL,CAASlM,CAA1B,EAA6B,KAAKkM,GAAL,CAASU,CAAtC,EAAyC,KAAKV,GAAL,CAASoI,CAAlD,EAAsDmF,YAAtD,CAAoEoC,MAApE,EAbsC,CAawC;;AAE9E,QAAKqO,aAAL,CAAoBC,MAApB;;AAEA,UAAO,IAAP;AAEA,GAnBD;AAqBA,EAlCa,EAliBgB;;AAskB9B1F,YAAW,UAAW3S,MAAX,EAAoB;;AAE9B,OAAK7F,GAAL,CAAS8C,GAAT,CAAc+C,MAAd;AACA,OAAK5F,GAAL,CAAS6C,GAAT,CAAc+C,MAAd;;AAEA,SAAO,IAAP;AAEA,EA7kB6B;;AA+kB9BF,SAAQ,UAAWiZ,GAAX,EAAiB;;AAExB,SAAOA,IAAI5e,GAAJ,CAAQ2F,MAAR,CAAgB,KAAK3F,GAArB,KAA8B4e,IAAI3e,GAAJ,CAAQ0F,MAAR,CAAgB,KAAK1F,GAArB,CAArC;AAEA;;AAnlB6B,CAA/B;;AAulBA;;;;;AAKA,SAASwhB,MAAT,CAAiBrb,MAAjB,EAAyBoR,MAAzB,EAAkC;;AAEjC,MAAKpR,MAAL,GAAgBA,WAAW7S,SAAb,GAA2B6S,MAA3B,GAAoC,IAAImC,OAAJ,EAAlD;AACA,MAAKiP,MAAL,GAAgBA,WAAWjkB,SAAb,GAA2BikB,MAA3B,GAAoC,CAAlD;AAEA;;AAEDtjB,OAAOK,MAAP,CAAektB,OAAOxtB,SAAtB,EAAiC;;AAEhCgO,MAAK,UAAWmE,MAAX,EAAmBoR,MAAnB,EAA4B;;AAEhC,OAAKpR,MAAL,CAAYxD,IAAZ,CAAkBwD,MAAlB;AACA,OAAKoR,MAAL,GAAcA,MAAd;;AAEA,SAAO,IAAP;AAEA,EAT+B;;AAWhCyG,gBAAe,YAAY;;AAE1B,MAAIW,MAAM,IAAItB,IAAJ,EAAV;;AAEA,SAAO,SAASW,aAAT,CAAwBC,MAAxB,EAAgC0D,cAAhC,EAAiD;;AAEvD,OAAIxb,SAAS,KAAKA,MAAlB;;AAEA,OAAKwb,mBAAmBruB,SAAxB,EAAoC;;AAEnC6S,WAAOxD,IAAP,CAAagf,cAAb;AAEA,IAJD,MAIO;;AAENhD,QAAIX,aAAJ,CAAmBC,MAAnB,EAA4BY,SAA5B,CAAuC1Y,MAAvC;AAEA;;AAED,OAAIyb,cAAc,CAAlB;;AAEA,QAAM,IAAI3rB,IAAI,CAAR,EAAWkoB,KAAKF,OAAOrpB,MAA7B,EAAqCqB,IAAIkoB,EAAzC,EAA6CloB,GAA7C,EAAoD;;AAEnD2rB,kBAAcruB,KAAKyM,GAAL,CAAU4hB,WAAV,EAAuBzb,OAAOlB,iBAAP,CAA0BgZ,OAAQhoB,CAAR,CAA1B,CAAvB,CAAd;AAEA;;AAED,QAAKshB,MAAL,GAAchkB,KAAKmR,IAAL,CAAWkd,WAAX,CAAd;;AAEA,UAAO,IAAP;AAEA,GA1BD;AA4BA,EAhCc,EAXiB;;AA6ChCnf,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EAjD+B;;AAmDhCA,OAAM,UAAWsd,MAAX,EAAoB;;AAEzB,OAAK9Z,MAAL,CAAYxD,IAAZ,CAAkBsd,OAAO9Z,MAAzB;AACA,OAAKoR,MAAL,GAAc0I,OAAO1I,MAArB;;AAEA,SAAO,IAAP;AAEA,EA1D+B;;AA4DhCsK,QAAO,YAAY;;AAElB,SAAS,KAAKtK,MAAL,IAAe,CAAxB;AAEA,EAhE+B;;AAkEhCoI,gBAAe,UAAWZ,KAAX,EAAmB;;AAEjC,SAASA,MAAM9Z,iBAAN,CAAyB,KAAKkB,MAA9B,KAA4C,KAAKoR,MAAL,GAAc,KAAKA,MAAxE;AAEA,EAtE+B;;AAwEhC8J,kBAAiB,UAAWtC,KAAX,EAAmB;;AAEnC,SAASA,MAAM/Z,UAAN,CAAkB,KAAKmB,MAAvB,IAAkC,KAAKoR,MAAhD;AAEA,EA5E+B;;AA8EhCwI,mBAAkB,UAAWE,MAAX,EAAoB;;AAErC,MAAI6B,YAAY,KAAKvK,MAAL,GAAc0I,OAAO1I,MAArC;;AAEA,SAAO0I,OAAO9Z,MAAP,CAAclB,iBAAd,CAAiC,KAAKkB,MAAtC,KAAoD2b,YAAYA,SAAvE;AAEA,EApF+B;;AAsFhChC,gBAAe,UAAWnB,GAAX,EAAiB;;AAE/B,SAAOA,IAAIoB,gBAAJ,CAAsB,IAAtB,CAAP;AAEA,EA1F+B;;AA4FhCI,kBAAiB,UAAWC,KAAX,EAAmB;;AAEnC,SAAO7sB,KAAKqR,GAAL,CAAUwb,MAAMiB,eAAN,CAAuB,KAAKlb,MAA5B,CAAV,KAAoD,KAAKoR,MAAhE;AAEA,EAhG+B;;AAkGhC2I,aAAY,UAAWnB,KAAX,EAAkBxqB,MAAlB,EAA2B;;AAEtC,MAAIwtB,gBAAgB,KAAK5b,MAAL,CAAYlB,iBAAZ,CAA+B8Z,KAA/B,CAApB;;AAEA,MAAKxqB,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,oDAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED/T,SAAOoO,IAAP,CAAaoc,KAAb;;AAEA,MAAKgD,gBAAkB,KAAKxK,MAAL,GAAc,KAAKA,MAA1C,EAAqD;;AAEpDhjB,UAAOgP,GAAP,CAAY,KAAK4C,MAAjB,EAA0BtB,SAA1B;AACAtQ,UAAOoP,cAAP,CAAuB,KAAK4T,MAA5B,EAAqC1U,GAArC,CAA0C,KAAKsD,MAA/C;AAEA;;AAED,SAAO5R,MAAP;AAEA,EAxH+B;;AA0HhCytB,iBAAgB,UAAWztB,MAAX,EAAoB;;AAEnC,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,wDAAd;AACAzO,YAAS,IAAI8oB,IAAJ,EAAT;AAEA;;AAED9oB,SAAOyN,GAAP,CAAY,KAAKmE,MAAjB,EAAyB,KAAKA,MAA9B;AACA5R,SAAO0qB,cAAP,CAAuB,KAAK1H,MAA5B;;AAEA,SAAOhjB,MAAP;AAEA,EAxI+B;;AA0IhCgZ,eAAc,UAAWoC,MAAX,EAAoB;;AAEjC,OAAKxJ,MAAL,CAAYoH,YAAZ,CAA0BoC,MAA1B;AACA,OAAK4H,MAAL,GAAc,KAAKA,MAAL,GAAc5H,OAAOpB,iBAAP,EAA5B;;AAEA,SAAO,IAAP;AAEA,EAjJ+B;;AAmJhCgK,YAAW,UAAW3S,MAAX,EAAoB;;AAE9B,OAAKO,MAAL,CAAYtD,GAAZ,CAAiB+C,MAAjB;;AAEA,SAAO,IAAP;AAEA,EAzJ+B;;AA2JhCF,SAAQ,UAAWua,MAAX,EAAoB;;AAE3B,SAAOA,OAAO9Z,MAAP,CAAcT,MAAd,CAAsB,KAAKS,MAA3B,KAAyC8Z,OAAO1I,MAAP,KAAkB,KAAKA,MAAvE;AAEA;;AA/J+B,CAAjC;;AAmKA;;;;AAIA,SAAS0K,KAAT,CAAgBjL,MAAhB,EAAwBqJ,QAAxB,EAAmC;;AAElC;;AAEA,MAAKrJ,MAAL,GAAgBA,WAAW1jB,SAAb,GAA2B0jB,MAA3B,GAAoC,IAAI1O,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAlD;AACA,MAAK+X,QAAL,GAAkBA,aAAa/sB,SAAf,GAA6B+sB,QAA7B,GAAwC,CAAxD;AAEA;;AAEDpsB,OAAOK,MAAP,CAAe2tB,MAAMjuB,SAArB,EAAgC;;AAE/BgO,MAAK,UAAWgV,MAAX,EAAmBqJ,QAAnB,EAA8B;;AAElC,OAAKrJ,MAAL,CAAYrU,IAAZ,CAAkBqU,MAAlB;AACA,OAAKqJ,QAAL,GAAgBA,QAAhB;;AAEA,SAAO,IAAP;AAEA,EAT8B;;AAW/B6B,gBAAe,UAAWpuB,CAAX,EAAc4M,CAAd,EAAiB0H,CAAjB,EAAoBtF,CAApB,EAAwB;;AAEtC,OAAKkU,MAAL,CAAYhV,GAAZ,CAAiBlO,CAAjB,EAAoB4M,CAApB,EAAuB0H,CAAvB;AACA,OAAKiY,QAAL,GAAgBvd,CAAhB;;AAEA,SAAO,IAAP;AAEA,EAlB8B;;AAoB/Bqf,gCAA+B,UAAWnL,MAAX,EAAmB+H,KAAnB,EAA2B;;AAEzD,OAAK/H,MAAL,CAAYrU,IAAZ,CAAkBqU,MAAlB;AACA,OAAKqJ,QAAL,GAAgB,CAAEtB,MAAMva,GAAN,CAAW,KAAKwS,MAAhB,CAAlB;;AAEA,SAAO,IAAP;AAEA,EA3B8B;;AA6B/BoL,wBAAuB,YAAY;;AAElC,MAAI5c,KAAK,IAAI8C,OAAJ,EAAT;AACA,MAAI7C,KAAK,IAAI6C,OAAJ,EAAT;;AAEA,SAAO,SAAS8Z,qBAAT,CAAgChf,CAAhC,EAAmCC,CAAnC,EAAsC+C,CAAtC,EAA0C;;AAEhD,OAAI4Q,SAASxR,GAAGhC,UAAH,CAAe4C,CAAf,EAAkB/C,CAAlB,EAAsBgT,KAAtB,CAA6B5Q,GAAGjC,UAAH,CAAeJ,CAAf,EAAkBC,CAAlB,CAA7B,EAAqDwB,SAArD,EAAb;;AAEA;;AAEA,QAAKsd,6BAAL,CAAoCnL,MAApC,EAA4C5T,CAA5C;;AAEA,UAAO,IAAP;AAEA,GAVD;AAYA,EAjBsB,EA7BQ;;AAgD/BX,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EApD8B;;AAsD/BA,OAAM,UAAWyd,KAAX,EAAmB;;AAExB,OAAKpJ,MAAL,CAAYrU,IAAZ,CAAkByd,MAAMpJ,MAAxB;AACA,OAAKqJ,QAAL,GAAgBD,MAAMC,QAAtB;;AAEA,SAAO,IAAP;AAEA,EA7D8B;;AA+D/Bxb,YAAW,YAAY;;AAEtB;;AAEA,MAAIwd,sBAAsB,MAAM,KAAKrL,MAAL,CAAYpiB,MAAZ,EAAhC;AACA,OAAKoiB,MAAL,CAAYrT,cAAZ,CAA4B0e,mBAA5B;AACA,OAAKhC,QAAL,IAAiBgC,mBAAjB;;AAEA,SAAO,IAAP;AAEA,EAzE8B;;AA2E/B9d,SAAQ,YAAY;;AAEnB,OAAK8b,QAAL,IAAiB,CAAE,CAAnB;AACA,OAAKrJ,MAAL,CAAYzS,MAAZ;;AAEA,SAAO,IAAP;AAEA,EAlF8B;;AAoF/B8c,kBAAiB,UAAWtC,KAAX,EAAmB;;AAEnC,SAAO,KAAK/H,MAAL,CAAYxS,GAAZ,CAAiBua,KAAjB,IAA2B,KAAKsB,QAAvC;AAEA,EAxF8B;;AA0F/BiC,mBAAkB,UAAWrC,MAAX,EAAoB;;AAErC,SAAO,KAAKoB,eAAL,CAAsBpB,OAAO9Z,MAA7B,IAAwC8Z,OAAO1I,MAAtD;AAEA,EA9F8B;;AAgG/BgL,eAAc,UAAWxD,KAAX,EAAkBxqB,MAAlB,EAA2B;;AAExC,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,qDAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO/T,OAAOoO,IAAP,CAAa,KAAKqU,MAAlB,EAA2BrT,cAA3B,CAA2C,CAAE,KAAK0d,eAAL,CAAsBtC,KAAtB,CAA7C,EAA6Elc,GAA7E,CAAkFkc,KAAlF,CAAP;AAEA,EA3G8B;;AA6G/ByD,gBAAe,YAAY;;AAE1B,MAAIhd,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAASka,aAAT,CAAwBC,IAAxB,EAA8BluB,MAA9B,EAAuC;;AAE7C,OAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,sDAAd;AACAzO,aAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,OAAIoa,YAAYD,KAAKE,KAAL,CAAYnd,EAAZ,CAAhB;;AAEA,OAAIod,cAAc,KAAK5L,MAAL,CAAYxS,GAAZ,CAAiBke,SAAjB,CAAlB;;AAEA,OAAKE,gBAAgB,CAArB,EAAyB;;AAExB;AACA,QAAK,KAAKvB,eAAL,CAAsBoB,KAAKI,KAA3B,MAAuC,CAA5C,EAAgD;;AAE/C,YAAOtuB,OAAOoO,IAAP,CAAa8f,KAAKI,KAAlB,CAAP;AAEA;;AAED;AACA,WAAOvvB,SAAP;AAEA;;AAED,OAAIqN,IAAI,EAAI8hB,KAAKI,KAAL,CAAWre,GAAX,CAAgB,KAAKwS,MAArB,IAAgC,KAAKqJ,QAAzC,IAAsDuC,WAA9D;;AAEA,OAAKjiB,IAAI,CAAJ,IAASA,IAAI,CAAlB,EAAsB;;AAErB,WAAOrN,SAAP;AAEA;;AAED,UAAOiB,OAAOoO,IAAP,CAAa+f,SAAb,EAAyB/e,cAAzB,CAAyChD,CAAzC,EAA6CkC,GAA7C,CAAkD4f,KAAKI,KAAvD,CAAP;AAEA,GArCD;AAuCA,EA3Cc,EA7GgB;;AA0J/BC,iBAAgB,UAAWL,IAAX,EAAkB;;AAEjC;;AAEA,MAAIM,YAAY,KAAK1B,eAAL,CAAsBoB,KAAKI,KAA3B,CAAhB;AACA,MAAIG,UAAU,KAAK3B,eAAL,CAAsBoB,KAAKQ,GAA3B,CAAd;;AAEA,SAASF,YAAY,CAAZ,IAAiBC,UAAU,CAA7B,IAAsCA,UAAU,CAAV,IAAeD,YAAY,CAAxE;AAEA,EAnK8B;;AAqK/BjD,gBAAe,UAAWnB,GAAX,EAAiB;;AAE/B,SAAOA,IAAIwB,eAAJ,CAAqB,IAArB,CAAP;AAEA,EAzK8B;;AA2K/BJ,mBAAkB,UAAWE,MAAX,EAAoB;;AAErC,SAAOA,OAAOE,eAAP,CAAwB,IAAxB,CAAP;AAEA,EA/K8B;;AAiL/B+C,gBAAe,UAAW3uB,MAAX,EAAoB;;AAElC,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,sDAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO/T,OAAOoO,IAAP,CAAa,KAAKqU,MAAlB,EAA2BrT,cAA3B,CAA2C,CAAE,KAAK0c,QAAlD,CAAP;AAEA,EA5L8B;;AA8L/B9S,eAAc,YAAY;;AAEzB,MAAI/H,KAAK,IAAI8C,OAAJ,EAAT;AACA,MAAI6a,KAAK,IAAIxL,OAAJ,EAAT;;AAEA,SAAO,SAASpK,YAAT,CAAuBoC,MAAvB,EAA+ByT,oBAA/B,EAAsD;;AAE5D,OAAIC,eAAeD,wBAAwBD,GAAGpL,eAAH,CAAoBpI,MAApB,CAA3C;;AAEA,OAAI2T,iBAAiB,KAAKJ,aAAL,CAAoB1d,EAApB,EAAyB+H,YAAzB,CAAuCoC,MAAvC,CAArB;;AAEA,OAAIqH,SAAS,KAAKA,MAAL,CAAYlT,YAAZ,CAA0Buf,YAA1B,EAAyCxe,SAAzC,EAAb;;AAEA,QAAKwb,QAAL,GAAgB,CAAEiD,eAAe9e,GAAf,CAAoBwS,MAApB,CAAlB;;AAEA,UAAO,IAAP;AAEA,GAZD;AAcA,EAnBa,EA9LiB;;AAmN/BuB,YAAW,UAAW3S,MAAX,EAAoB;;AAE9B,OAAKya,QAAL,IAAiBza,OAAOpB,GAAP,CAAY,KAAKwS,MAAjB,CAAjB;;AAEA,SAAO,IAAP;AAEA,EAzN8B;;AA2N/BtR,SAAQ,UAAW0a,KAAX,EAAmB;;AAE1B,SAAOA,MAAMpJ,MAAN,CAAatR,MAAb,CAAqB,KAAKsR,MAA1B,KAAwCoJ,MAAMC,QAAN,KAAmB,KAAKA,QAAvE;AAEA;;AA/N8B,CAAhC;;AAmOA;;;;;;AAMA,SAASkD,OAAT,CAAkBtC,EAAlB,EAAsBC,EAAtB,EAA0BC,EAA1B,EAA8BqC,EAA9B,EAAkCC,EAAlC,EAAsCC,EAAtC,EAA2C;;AAE1C,MAAKC,MAAL,GAAc,CAEX1C,OAAO3tB,SAAT,GAAuB2tB,EAAvB,GAA4B,IAAIgB,KAAJ,EAFf,EAGXf,OAAO5tB,SAAT,GAAuB4tB,EAAvB,GAA4B,IAAIe,KAAJ,EAHf,EAIXd,OAAO7tB,SAAT,GAAuB6tB,EAAvB,GAA4B,IAAIc,KAAJ,EAJf,EAKXuB,OAAOlwB,SAAT,GAAuBkwB,EAAvB,GAA4B,IAAIvB,KAAJ,EALf,EAMXwB,OAAOnwB,SAAT,GAAuBmwB,EAAvB,GAA4B,IAAIxB,KAAJ,EANf,EAOXyB,OAAOpwB,SAAT,GAAuBowB,EAAvB,GAA4B,IAAIzB,KAAJ,EAPf,CAAd;AAWA;;AAEDhuB,OAAOK,MAAP,CAAeivB,QAAQvvB,SAAvB,EAAkC;;AAEjCgO,MAAK,UAAWif,EAAX,EAAeC,EAAf,EAAmBC,EAAnB,EAAuBqC,EAAvB,EAA2BC,EAA3B,EAA+BC,EAA/B,EAAoC;;AAExC,MAAIC,SAAS,KAAKA,MAAlB;;AAEAA,SAAQ,CAAR,EAAYhhB,IAAZ,CAAkBse,EAAlB;AACA0C,SAAQ,CAAR,EAAYhhB,IAAZ,CAAkBue,EAAlB;AACAyC,SAAQ,CAAR,EAAYhhB,IAAZ,CAAkBwe,EAAlB;AACAwC,SAAQ,CAAR,EAAYhhB,IAAZ,CAAkB6gB,EAAlB;AACAG,SAAQ,CAAR,EAAYhhB,IAAZ,CAAkB8gB,EAAlB;AACAE,SAAQ,CAAR,EAAYhhB,IAAZ,CAAkB+gB,EAAlB;;AAEA,SAAO,IAAP;AAEA,EAfgC;;AAiBjCjhB,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EArBgC;;AAuBjCA,OAAM,UAAWihB,OAAX,EAAqB;;AAE1B,MAAID,SAAS,KAAKA,MAAlB;;AAEA,OAAM,IAAI1tB,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9B0tB,UAAQ1tB,CAAR,EAAY0M,IAAZ,CAAkBihB,QAAQD,MAAR,CAAgB1tB,CAAhB,CAAlB;AAEA;;AAED,SAAO,IAAP;AAEA,EAnCgC;;AAqCjC4tB,gBAAe,UAAW1jB,CAAX,EAAe;;AAE7B,MAAIwjB,SAAS,KAAKA,MAAlB;AACA,MAAI/b,KAAKzH,EAAE6D,QAAX;AACA,MAAI8f,MAAMlc,GAAI,CAAJ,CAAV;AAAA,MAAmBmc,MAAMnc,GAAI,CAAJ,CAAzB;AAAA,MAAkCoc,MAAMpc,GAAI,CAAJ,CAAxC;AAAA,MAAiDqc,MAAMrc,GAAI,CAAJ,CAAvD;AACA,MAAIsc,MAAMtc,GAAI,CAAJ,CAAV;AAAA,MAAmBuc,MAAMvc,GAAI,CAAJ,CAAzB;AAAA,MAAkCwc,MAAMxc,GAAI,CAAJ,CAAxC;AAAA,MAAiDyc,MAAMzc,GAAI,CAAJ,CAAvD;AACA,MAAI0c,MAAM1c,GAAI,CAAJ,CAAV;AAAA,MAAmB2c,MAAM3c,GAAI,CAAJ,CAAzB;AAAA,MAAkC4c,OAAO5c,GAAI,EAAJ,CAAzC;AAAA,MAAmD6c,OAAO7c,GAAI,EAAJ,CAA1D;AACA,MAAI8c,OAAO9c,GAAI,EAAJ,CAAX;AAAA,MAAqB+c,OAAO/c,GAAI,EAAJ,CAA5B;AAAA,MAAsCgd,OAAOhd,GAAI,EAAJ,CAA7C;AAAA,MAAuDid,OAAOjd,GAAI,EAAJ,CAA9D;;AAEA+b,SAAQ,CAAR,EAAYzB,aAAZ,CAA2B+B,MAAMH,GAAjC,EAAsCO,MAAMH,GAA5C,EAAiDO,OAAOH,GAAxD,EAA6DO,OAAOH,IAApE,EAA2E7f,SAA3E;AACA8e,SAAQ,CAAR,EAAYzB,aAAZ,CAA2B+B,MAAMH,GAAjC,EAAsCO,MAAMH,GAA5C,EAAiDO,OAAOH,GAAxD,EAA6DO,OAAOH,IAApE,EAA2E7f,SAA3E;AACA8e,SAAQ,CAAR,EAAYzB,aAAZ,CAA2B+B,MAAMF,GAAjC,EAAsCM,MAAMF,GAA5C,EAAiDM,OAAOF,GAAxD,EAA6DM,OAAOF,IAApE,EAA2E9f,SAA3E;AACA8e,SAAQ,CAAR,EAAYzB,aAAZ,CAA2B+B,MAAMF,GAAjC,EAAsCM,MAAMF,GAA5C,EAAiDM,OAAOF,GAAxD,EAA6DM,OAAOF,IAApE,EAA2E9f,SAA3E;AACA8e,SAAQ,CAAR,EAAYzB,aAAZ,CAA2B+B,MAAMD,GAAjC,EAAsCK,MAAMD,GAA5C,EAAiDK,OAAOD,IAAxD,EAA8DK,OAAOD,IAArE,EAA4E/f,SAA5E;AACA8e,SAAQ,CAAR,EAAYzB,aAAZ,CAA2B+B,MAAMD,GAAjC,EAAsCK,MAAMD,GAA5C,EAAiDK,OAAOD,IAAxD,EAA8DK,OAAOD,IAArE,EAA4E/f,SAA5E;;AAEA,SAAO,IAAP;AAEA,EAvDgC;;AAyDjCigB,mBAAkB,YAAY;;AAE7B,MAAI7E,SAAS,IAAIuB,MAAJ,EAAb;;AAEA,SAAO,SAASsD,gBAAT,CAA2BrG,MAA3B,EAAoC;;AAE1C,OAAIY,WAAWZ,OAAOY,QAAtB;;AAEA,OAAKA,SAAS0F,cAAT,KAA4B,IAAjC,EACC1F,SAAS2F,qBAAT;;AAED/E,UAAOtd,IAAP,CAAa0c,SAAS0F,cAAtB,EACExX,YADF,CACgBkR,OAAOvI,WADvB;;AAGA,UAAO,KAAK6J,gBAAL,CAAuBE,MAAvB,CAAP;AAEA,GAZD;AAcA,EAlBiB,EAzDe;;AA6EjCgF,mBAAkB,YAAY;;AAE7B,MAAIhF,SAAS,IAAIuB,MAAJ,EAAb;;AAEA,SAAO,SAASyD,gBAAT,CAA2BC,MAA3B,EAAoC;;AAE1CjF,UAAO9Z,MAAP,CAAcnE,GAAd,CAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB;AACAie,UAAO1I,MAAP,GAAgB,kBAAhB;AACA0I,UAAO1S,YAAP,CAAqB2X,OAAOhP,WAA5B;;AAEA,UAAO,KAAK6J,gBAAL,CAAuBE,MAAvB,CAAP;AAEA,GARD;AAUA,EAdiB,EA7Ee;;AA6FjCF,mBAAkB,UAAWE,MAAX,EAAoB;;AAErC,MAAI0D,SAAS,KAAKA,MAAlB;AACA,MAAIxd,SAAS8Z,OAAO9Z,MAApB;AACA,MAAIgf,YAAY,CAAElF,OAAO1I,MAAzB;;AAEA,OAAM,IAAIthB,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9B,OAAImvB,WAAWzB,OAAQ1tB,CAAR,EAAYorB,eAAZ,CAA6Blb,MAA7B,CAAf;;AAEA,OAAKif,WAAWD,SAAhB,EAA4B;;AAE3B,WAAO,KAAP;AAEA;AAED;;AAED,SAAO,IAAP;AAEA,EAjHgC;;AAmHjCrF,gBAAe,YAAY;;AAE1B,MAAIoB,KAAK,IAAI5Y,OAAJ,EAAT;AAAA,MACC6Y,KAAK,IAAI7Y,OAAJ,EADN;;AAGA,SAAO,SAASwX,aAAT,CAAwBnB,GAAxB,EAA8B;;AAEpC,OAAIgF,SAAS,KAAKA,MAAlB;;AAEA,QAAM,IAAI1tB,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9B,QAAImqB,QAAQuD,OAAQ1tB,CAAR,CAAZ;;AAEAirB,OAAGptB,CAAH,GAAOssB,MAAMpJ,MAAN,CAAaljB,CAAb,GAAiB,CAAjB,GAAqB6qB,IAAI5e,GAAJ,CAAQjM,CAA7B,GAAiC6qB,IAAI3e,GAAJ,CAAQlM,CAAhD;AACAqtB,OAAGrtB,CAAH,GAAOssB,MAAMpJ,MAAN,CAAaljB,CAAb,GAAiB,CAAjB,GAAqB6qB,IAAI3e,GAAJ,CAAQlM,CAA7B,GAAiC6qB,IAAI5e,GAAJ,CAAQjM,CAAhD;AACAotB,OAAGxgB,CAAH,GAAO0f,MAAMpJ,MAAN,CAAatW,CAAb,GAAiB,CAAjB,GAAqBie,IAAI5e,GAAJ,CAAQW,CAA7B,GAAiCie,IAAI3e,GAAJ,CAAQU,CAAhD;AACAygB,OAAGzgB,CAAH,GAAO0f,MAAMpJ,MAAN,CAAatW,CAAb,GAAiB,CAAjB,GAAqBie,IAAI3e,GAAJ,CAAQU,CAA7B,GAAiCie,IAAI5e,GAAJ,CAAQW,CAAhD;AACAwgB,OAAG9Y,CAAH,GAAOgY,MAAMpJ,MAAN,CAAa5O,CAAb,GAAiB,CAAjB,GAAqBuW,IAAI5e,GAAJ,CAAQqI,CAA7B,GAAiCuW,IAAI3e,GAAJ,CAAQoI,CAAhD;AACA+Y,OAAG/Y,CAAH,GAAOgY,MAAMpJ,MAAN,CAAa5O,CAAb,GAAiB,CAAjB,GAAqBuW,IAAI3e,GAAJ,CAAQoI,CAA7B,GAAiCuW,IAAI5e,GAAJ,CAAQqI,CAAhD;;AAEA,QAAI3I,KAAK2gB,MAAMiB,eAAN,CAAuBH,EAAvB,CAAT;AACA,QAAIxhB,KAAK0gB,MAAMiB,eAAN,CAAuBF,EAAvB,CAAT;;AAEA;;AAEA,QAAK1hB,KAAK,CAAL,IAAUC,KAAK,CAApB,EAAwB;;AAEvB,YAAO,KAAP;AAEA;AAED;;AAED,UAAO,IAAP;AAEA,GA9BD;AAgCA,EArCc,EAnHkB;;AA0JjCigB,gBAAe,UAAWZ,KAAX,EAAmB;;AAEjC,MAAI4E,SAAS,KAAKA,MAAlB;;AAEA,OAAM,IAAI1tB,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9B,OAAK0tB,OAAQ1tB,CAAR,EAAYorB,eAAZ,CAA6BtC,KAA7B,IAAuC,CAA5C,EAAgD;;AAE/C,WAAO,KAAP;AAEA;AAED;;AAED,SAAO,IAAP;AAEA;;AA1KgC,CAAlC;;AA8KA,IAAIsG,oBAAoB,kFAAxB;;AAEA,IAAIC,yBAAyB,8DAA7B;;AAEA,IAAIC,qBAAqB,0EAAzB;;AAEA,IAAIC,iBAAiB,4aAArB;;AAEA,IAAIC,sBAAsB,uFAA1B;;AAEA,IAAIC,eAAe,0CAAnB;;AAEA,IAAIC,qBAAqB,yCAAzB;;AAEA,IAAIC,QAAQ,o7LAAZ;;AAEA,IAAIC,wBAAwB,45BAA5B;;AAEA,IAAIC,2BAA2B,0jBAA/B;;AAEA,IAAIC,gCAAgC,4LAApC;;AAEA,IAAIC,8BAA8B,qHAAlC;;AAEA,IAAIC,yBAAyB,2HAA7B;;AAEA,IAAIC,iBAAiB,yDAArB;;AAEA,IAAIC,sBAAsB,oDAA1B;;AAEA,IAAIC,oBAAoB,kDAAxB;;AAEA,IAAIC,eAAe,qDAAnB;;AAEA,IAAIC,SAAS,2rEAAb;;AAEA,IAAIC,8BAA8B,olIAAlC;;AAEA,IAAIC,uBAAuB,gIAA3B;;AAEA,IAAIC,8BAA8B,mJAAlC;;AAEA,IAAIC,yBAAyB,mKAA7B;;AAEA,IAAIC,uBAAuB,8MAA3B;;AAEA,IAAIC,4BAA4B,oEAAhC;;AAEA,IAAIC,qBAAqB,yDAAzB;;AAEA,IAAIC,0BAA0B,+uFAA9B;;AAEA,IAAIC,kBAAkB,gqDAAtB;;AAEA,IAAIC,uBAAuB,8oBAA3B;;AAEA,IAAIC,qBAAqB,gOAAzB;;AAEA,IAAIC,gBAAgB,sgBAApB;;AAEA,IAAIC,aAAa,qDAAjB;;AAEA,IAAIC,kBAAkB,qDAAtB;;AAEA,IAAIC,eAAe,8SAAnB;;AAEA,IAAIC,oBAAoB,2MAAxB;;AAEA,IAAIC,4BAA4B,yYAAhC;;AAEA,IAAIC,oBAAoB,8HAAxB;;AAEA,IAAIC,yBAAyB,gGAA7B;;AAEA,IAAIC,wBAAwB,wuEAA5B;;AAEA,IAAIC,oBAAoB,qpHAAxB;;AAEA,IAAIC,mBAAmB,k5GAAvB;;AAEA,IAAIC,wBAAwB,uMAA5B;;AAEA,IAAIC,6BAA6B,46CAAjC;;AAEA,IAAIC,2BAA2B,6iBAA/B;;AAEA,IAAIC,gCAAgC,8uJAApC;;AAEA,IAAIC,wBAAwB,6xFAA5B;;AAEA,IAAIC,uBAAuB,0yBAA3B;;AAEA,IAAIC,sBAAsB,6PAA1B;;AAEA,IAAIC,uBAAuB,yIAA3B;;AAEA,IAAIC,4BAA4B,yIAAhC;;AAEA,IAAIC,0BAA0B,uIAA9B;;AAEA,IAAIC,qBAAqB,uPAAzB;;AAEA,IAAIC,eAAe,qJAAnB;;AAEA,IAAIC,oBAAoB,oDAAxB;;AAEA,IAAIC,wBAAwB,yMAA5B;;AAEA,IAAIC,6BAA6B,iFAAjC;;AAEA,IAAIC,wBAAwB,wKAA5B;;AAEA,IAAIC,6BAA6B,oEAAjC;;AAEA,IAAIC,qBAAqB,+UAAzB;;AAEA,IAAIC,0BAA0B,0KAA9B;;AAEA,IAAIC,qBAAqB,yqBAAzB;;AAEA,IAAIC,wBAAwB,gaAA5B;;AAEA,IAAIC,uBAAuB,4LAA3B;;AAEA,IAAIC,0BAA0B,2zBAA9B;;AAEA,IAAIC,UAAU,oyCAAd;;AAEA,IAAIC,+BAA+B,6EAAnC;;AAEA,IAAIC,iBAAiB,+GAArB;;AAEA,IAAIC,qBAAqB,yFAAzB;;AAEA,IAAIC,0BAA0B,oVAA9B;;AAEA,IAAIC,wBAAwB,wKAA5B;;AAEA,IAAIC,6BAA6B,oEAAjC;;AAEA,IAAIC,0BAA0B,ipNAA9B;;AAEA,IAAIC,wBAAwB,yeAA5B;;AAEA,IAAIC,mBAAmB,qlBAAvB;;AAEA,IAAIC,2BAA2B,2wCAA/B;;AAEA,IAAIC,kBAAkB,iOAAtB;;AAEA,IAAIC,uBAAuB,2gCAA3B;;AAEA,IAAIC,kBAAkB,gYAAtB;;AAEA,IAAIC,oBAAoB,6WAAxB;;AAEA,IAAIC,uBAAuB,yLAA3B;;AAEA,IAAIC,4BAA4B,kEAAhC;;AAEA,IAAIC,uBAAuB,8FAA3B;;AAEA,IAAIC,4BAA4B,+6BAAhC;;AAEA,IAAIC,mBAAmB,gQAAvB;;AAEA,IAAIC,iBAAiB,+RAArB;;AAEA,IAAIC,YAAY,wRAAhB;;AAEA,IAAIC,oBAAoB,mFAAxB;;AAEA,IAAIC,kBAAkB,0GAAtB;;AAEA,IAAIC,aAAa,4EAAjB;;AAEA,IAAIC,kBAAkB,yJAAtB;;AAEA,IAAIC,YAAY,uPAAhB;;AAEA,IAAIC,YAAY,gOAAhB;;AAEA,IAAIC,aAAa,svBAAjB;;AAEA,IAAIC,aAAa,mqBAAjB;;AAEA,IAAIC,oBAAoB,8rBAAxB;;AAEA,IAAIC,oBAAoB,mtBAAxB;;AAEA,IAAIC,gBAAgB,mXAApB;;AAEA,IAAIC,gBAAgB,8LAApB;;AAEA,IAAIC,kBAAkB,oyBAAtB;;AAEA,IAAIC,kBAAkB,ihBAAtB;;AAEA,IAAIC,iBAAiB,u8CAArB;;AAEA,IAAIC,iBAAiB,s2BAArB;;AAEA,IAAIC,mBAAmB,qnEAAvB;;AAEA,IAAIC,mBAAmB,8lCAAvB;;AAEA,IAAIC,iBAAiB,shEAArB;;AAEA,IAAIC,iBAAiB,sqCAArB;;AAEA,IAAIC,oBAAoB,gwEAAxB;;AAEA,IAAIC,oBAAoB,8mCAAxB;;AAEA,IAAIC,cAAc,gjBAAlB;;AAEA,IAAIC,cAAc,g8BAAlB;;AAEA,IAAIC,cAAc,6yBAAlB;;AAEA,IAAIC,cAAc,2mBAAlB;;AAEA,IAAIC,cAAc,gWAAlB;;AAEA,IAAIC,cAAc,gOAAlB;;AAEA,IAAIC,cAAc;AACjBjH,oBAAmBA,iBADF;AAEjBC,yBAAwBA,sBAFP;AAGjBC,qBAAoBA,kBAHH;AAIjBC,iBAAgBA,cAJC;AAKjBC,sBAAqBA,mBALJ;AAMjBC,eAAcA,YANG;AAOjBC,qBAAoBA,kBAPH;AAQjBC,QAAOA,KARU;AASjBC,wBAAuBA,qBATN;AAUjBC,2BAA0BA,wBAVT;AAWjBC,gCAA+BA,6BAXd;AAYjBC,8BAA6BA,2BAZZ;AAajBC,yBAAwBA,sBAbP;AAcjBC,iBAAgBA,cAdC;AAejBC,sBAAqBA,mBAfJ;AAgBjBC,oBAAmBA,iBAhBF;AAiBjBC,eAAcA,YAjBG;AAkBjBC,SAAQA,MAlBS;AAmBjBC,8BAA6BA,2BAnBZ;AAoBjBC,uBAAsBA,oBApBL;AAqBjBC,8BAA6BA,2BArBZ;AAsBjBC,yBAAwBA,sBAtBP;AAuBjBC,uBAAsBA,oBAvBL;AAwBjBC,4BAA2BA,yBAxBV;AAyBjBC,qBAAoBA,kBAzBH;AA0BjBC,0BAAyBA,uBA1BR;AA2BjBC,kBAAiBA,eA3BA;AA4BjBC,uBAAsBA,oBA5BL;AA6BjBC,qBAAoBA,kBA7BH;AA8BjBC,gBAAeA,aA9BE;AA+BjBC,aAAYA,UA/BK;AAgCjBC,kBAAiBA,eAhCA;AAiCjBC,eAAcA,YAjCG;AAkCjBC,oBAAmBA,iBAlCF;AAmCjBC,4BAA2BA,yBAnCV;AAoCjBC,oBAAmBA,iBApCF;AAqCjBC,yBAAwBA,sBArCP;AAsCjBC,wBAAuBA,qBAtCN;AAuCjBC,oBAAmBA,iBAvCF;AAwCjBC,mBAAkBA,gBAxCD;AAyCjBC,wBAAuBA,qBAzCN;AA0CjBC,6BAA4BA,0BA1CX;AA2CjBC,2BAA0BA,wBA3CT;AA4CjBC,gCAA+BA,6BA5Cd;AA6CjBC,wBAAuBA,qBA7CN;AA8CjBC,uBAAsBA,oBA9CL;AA+CjBC,sBAAqBA,mBA/CJ;AAgDjBC,uBAAsBA,oBAhDL;AAiDjBC,4BAA2BA,yBAjDV;AAkDjBC,0BAAyBA,uBAlDR;AAmDjBC,qBAAoBA,kBAnDH;AAoDjBC,eAAcA,YApDG;AAqDjBC,oBAAmBA,iBArDF;AAsDjBC,wBAAuBA,qBAtDN;AAuDjBC,6BAA4BA,0BAvDX;AAwDjBC,wBAAuBA,qBAxDN;AAyDjBC,6BAA4BA,0BAzDX;AA0DjBC,qBAAoBA,kBA1DH;AA2DjBC,0BAAyBA,uBA3DR;AA4DjBC,qBAAoBA,kBA5DH;AA6DjBC,wBAAuBA,qBA7DN;AA8DjBC,uBAAsBA,oBA9DL;AA+DjBC,0BAAyBA,uBA/DR;AAgEjBC,UAASA,OAhEQ;AAiEjBC,+BAA8BA,4BAjEb;AAkEjBC,iBAAgBA,cAlEC;AAmEjBC,qBAAoBA,kBAnEH;AAoEjBC,0BAAyBA,uBApER;AAqEjBC,wBAAuBA,qBArEN;AAsEjBC,6BAA4BA,0BAtEX;AAuEjBC,0BAAyBA,uBAvER;AAwEjBC,wBAAuBA,qBAxEN;AAyEjBC,mBAAkBA,gBAzED;AA0EjBC,2BAA0BA,wBA1ET;AA2EjBC,kBAAiBA,eA3EA;AA4EjBC,uBAAsBA,oBA5EL;AA6EjBC,kBAAiBA,eA7EA;AA8EjBC,oBAAmBA,iBA9EF;AA+EjBC,uBAAsBA,oBA/EL;AAgFjBC,4BAA2BA,yBAhFV;AAiFjBC,uBAAsBA,oBAjFL;AAkFjBC,4BAA2BA,yBAlFV;AAmFjBC,mBAAkBA,gBAnFD;AAoFjBC,iBAAgBA,cApFC;AAqFjBC,YAAWA,SArFM;AAsFjBC,oBAAmBA,iBAtFF;AAuFjBC,kBAAiBA,eAvFA;AAwFjBC,aAAYA,UAxFK;AAyFjBC,kBAAiBA,eAzFA;;AA2FjBC,YAAWA,SA3FM;AA4FjBC,YAAWA,SA5FM;AA6FjBC,aAAYA,UA7FK;AA8FjBC,aAAYA,UA9FK;AA+FjBC,oBAAmBA,iBA/FF;AAgGjBC,oBAAmBA,iBAhGF;AAiGjBC,gBAAeA,aAjGE;AAkGjBC,gBAAeA,aAlGE;AAmGjBC,kBAAiBA,eAnGA;AAoGjBC,kBAAiBA,eApGA;AAqGjBC,iBAAgBA,cArGC;AAsGjBC,iBAAgBA,cAtGC;AAuGjBC,mBAAkBA,gBAvGD;AAwGjBC,mBAAkBA,gBAxGD;AAyGjBC,iBAAgBA,cAzGC;AA0GjBC,iBAAgBA,cA1GC;AA2GjBC,oBAAmBA,iBA3GF;AA4GjBC,oBAAmBA,iBA5GF;AA6GjBC,cAAaA,WA7GI;AA8GjBC,cAAaA,WA9GI;AA+GjBC,cAAaA,WA/GI;AAgHjBC,cAAaA,WAhHI;AAiHjBC,cAAaA,WAjHI;AAkHjBC,cAAaA;AAlHI,CAAlB;;AAqHA;;;;AAIA,IAAIE,gBAAgB;;AAEnBC,QAAO,UAAWC,QAAX,EAAsB;;AAE5B,MAAIC,SAAS,EAAb;;AAEA,OAAM,IAAIC,IAAI,CAAd,EAAiBA,IAAIF,SAAS73B,MAA9B,EAAsC+3B,GAAtC,EAA6C;;AAE5C,OAAIhf,MAAM,KAAKlL,KAAL,CAAYgqB,SAAUE,CAAV,CAAZ,CAAV;;AAEA,QAAM,IAAI/b,CAAV,IAAejD,GAAf,EAAqB;;AAEpB+e,WAAQ9b,CAAR,IAAcjD,IAAKiD,CAAL,CAAd;AAEA;AAED;;AAED,SAAO8b,MAAP;AAEA,EApBkB;;AAsBnBjqB,QAAO,UAAWmqB,YAAX,EAA0B;;AAEhC,MAAIC,eAAe,EAAnB;;AAEA,OAAM,IAAIF,CAAV,IAAeC,YAAf,EAA8B;;AAE7BC,gBAAcF,CAAd,IAAoB,EAApB;;AAEA,QAAM,IAAI/b,CAAV,IAAegc,aAAcD,CAAd,CAAf,EAAmC;;AAElC,QAAIG,gBAAgBF,aAAcD,CAAd,EAAmB/b,CAAnB,CAApB;;AAEA,QAAKkc,kBAAmBA,cAAcC,OAAd,IACvBD,cAAclV,SADS,IACIkV,cAAcrmB,SADlB,IAEvBqmB,cAAc7qB,SAFS,IAEI6qB,cAAc7X,SAFlB,IAE+B6X,cAAclR,SAF7C,IAGvBkR,cAAc9S,SAHV,CAAL,EAG6B;;AAE5B6S,kBAAcF,CAAd,EAAmB/b,CAAnB,IAAyBkc,cAAcrqB,KAAd,EAAzB;AAEA,KAPD,MAOO,IAAKuqB,MAAMC,OAAN,CAAeH,aAAf,CAAL,EAAsC;;AAE5CD,kBAAcF,CAAd,EAAmB/b,CAAnB,IAAyBkc,cAAc92B,KAAd,EAAzB;AAEA,KAJM,MAIA;;AAEN62B,kBAAcF,CAAd,EAAmB/b,CAAnB,IAAyBkc,aAAzB;AAEA;AAED;AAED;;AAED,SAAOD,YAAP;AAEA;;AAzDkB,CAApB;;AA6DA;;;;AAIA,IAAIK,gBAAgB,EAAE,aAAa,QAAf,EAAyB,gBAAgB,QAAzC,EAAmD,QAAQ,QAA3D,EAAqE,cAAc,QAAnF,EAA6F,SAAS,QAAtG;AACnB,UAAS,QADU,EACA,UAAU,QADV,EACoB,SAAS,QAD7B,EACuC,kBAAkB,QADzD,EACmE,QAAQ,QAD3E,EACqF,cAAc,QADnG;AAEnB,UAAS,QAFU,EAEA,aAAa,QAFb,EAEuB,aAAa,QAFpC,EAE8C,cAAc,QAF5D,EAEsE,aAAa,QAFnF,EAE6F,SAAS,QAFtG;AAGnB,mBAAkB,QAHC,EAGS,YAAY,QAHrB,EAG+B,WAAW,QAH1C,EAGoD,QAAQ,QAH5D,EAGsE,YAAY,QAHlF,EAG4F,YAAY,QAHxG;AAInB,kBAAiB,QAJE,EAIQ,YAAY,QAJpB,EAI8B,aAAa,QAJ3C,EAIqD,YAAY,QAJjE,EAI2E,aAAa,QAJxF,EAIkG,eAAe,QAJjH;AAKnB,mBAAkB,QALC,EAKS,cAAc,QALvB,EAKiC,cAAc,QAL/C,EAKyD,WAAW,QALpE,EAK8E,cAAc,QAL5F,EAKsG,gBAAgB,QALtH;AAMnB,kBAAiB,QANE,EAMQ,iBAAiB,QANzB,EAMmC,iBAAiB,QANpD,EAM8D,iBAAiB,QAN/E,EAMyF,cAAc,QANvG;AAOnB,aAAY,QAPO,EAOG,eAAe,QAPlB,EAO4B,WAAW,QAPvC,EAOiD,WAAW,QAP5D,EAOsE,cAAc,QAPpF,EAO8F,aAAa,QAP3G;AAQnB,gBAAe,QARI,EAQM,eAAe,QARrB,EAQ+B,WAAW,QAR1C,EAQoD,aAAa,QARjE,EAQ2E,cAAc,QARzF,EAQmG,QAAQ,QAR3G;AASnB,cAAa,QATM,EASI,QAAQ,QATZ,EASsB,SAAS,QAT/B,EASyC,eAAe,QATxD,EASkE,QAAQ,QAT1E,EASoF,YAAY,QAThG,EAS0G,WAAW,QATrH;AAUnB,cAAa,QAVM,EAUI,UAAU,QAVd,EAUwB,SAAS,QAVjC,EAU2C,SAAS,QAVpD,EAU8D,YAAY,QAV1E,EAUoF,iBAAiB,QAVrG,EAU+G,aAAa,QAV5H;AAWnB,iBAAgB,QAXG,EAWO,aAAa,QAXpB,EAW8B,cAAc,QAX5C,EAWsD,aAAa,QAXnE,EAW6E,wBAAwB,QAXrG,EAW+G,aAAa,QAX5H;AAYnB,eAAc,QAZK,EAYK,aAAa,QAZlB,EAY4B,aAAa,QAZzC,EAYmD,eAAe,QAZlE,EAY4E,iBAAiB,QAZ7F,EAYuG,gBAAgB,QAZvH;AAanB,mBAAkB,QAbC,EAaS,kBAAkB,QAb3B,EAaqC,kBAAkB,QAbvD,EAaiE,eAAe,QAbhF,EAa0F,QAAQ,QAblG,EAa4G,aAAa,QAbzH;AAcnB,UAAS,QAdU,EAcA,WAAW,QAdX,EAcqB,UAAU,QAd/B,EAcyC,oBAAoB,QAd7D,EAcuE,cAAc,QAdrF,EAc+F,gBAAgB,QAd/G;AAenB,iBAAgB,QAfG,EAeO,kBAAkB,QAfzB,EAemC,mBAAmB,QAftD,EAegE,qBAAqB,QAfrF,EAe+F,mBAAmB,QAflH;AAgBnB,oBAAmB,QAhBA,EAgBU,gBAAgB,QAhB1B,EAgBoC,aAAa,QAhBjD,EAgB2D,aAAa,QAhBxE,EAgBkF,YAAY,QAhB9F,EAgBwG,eAAe,QAhBvH;AAiBnB,SAAQ,QAjBW,EAiBD,WAAW,QAjBV,EAiBoB,SAAS,QAjB7B,EAiBuC,aAAa,QAjBpD,EAiB8D,UAAU,QAjBxE,EAiBkF,aAAa,QAjB/F,EAiByG,UAAU,QAjBnH;AAkBnB,kBAAiB,QAlBE,EAkBQ,aAAa,QAlBrB,EAkB+B,iBAAiB,QAlBhD,EAkB0D,iBAAiB,QAlB3E,EAkBqF,cAAc,QAlBnG,EAkB6G,aAAa,QAlB1H;AAmBnB,SAAQ,QAnBW,EAmBD,QAAQ,QAnBP,EAmBiB,QAAQ,QAnBzB,EAmBmC,cAAc,QAnBjD,EAmB2D,UAAU,QAnBrE,EAmB+E,iBAAiB,QAnBhG,EAmB0G,OAAO,QAnBjH,EAmB2H,aAAa,QAnBxI;AAoBnB,cAAa,QApBM,EAoBI,eAAe,QApBnB,EAoB6B,UAAU,QApBvC,EAoBiD,cAAc,QApB/D,EAoByE,YAAY,QApBrF,EAoB+F,YAAY,QApB3G;AAqBnB,WAAU,QArBS,EAqBC,UAAU,QArBX,EAqBqB,WAAW,QArBhC,EAqB0C,aAAa,QArBvD,EAqBiE,aAAa,QArB9E,EAqBwF,aAAa,QArBrG,EAqB+G,QAAQ,QArBvH;AAsBnB,gBAAe,QAtBI,EAsBM,aAAa,QAtBnB,EAsB6B,OAAO,QAtBpC,EAsB8C,QAAQ,QAtBtD,EAsBgE,WAAW,QAtB3E,EAsBqF,UAAU,QAtB/F,EAsByG,aAAa,QAtBtH;AAuBnB,WAAU,QAvBS,EAuBC,SAAS,QAvBV,EAuBoB,SAAS,QAvB7B,EAuBuC,cAAc,QAvBrD,EAuB+D,UAAU,QAvBzE,EAuBmF,eAAe,QAvBlG,EAApB;;AAyBA,SAASC,KAAT,CAAgBxZ,CAAhB,EAAmBmE,CAAnB,EAAsBzU,CAAtB,EAA0B;;AAEzB,KAAKyU,MAAMxkB,SAAN,IAAmB+P,MAAM/P,SAA9B,EAA0C;;AAEzC;AACA,SAAO,KAAK0O,GAAL,CAAU2R,CAAV,CAAP;AAEA;;AAED,QAAO,KAAKyZ,MAAL,CAAazZ,CAAb,EAAgBmE,CAAhB,EAAmBzU,CAAnB,CAAP;AAEA;;AAEDpP,OAAOK,MAAP,CAAe64B,MAAMn5B,SAArB,EAAgC;;AAE/B+4B,UAAS,IAFsB;;AAI/BpZ,IAAG,CAJ4B,EAIzBmE,GAAG,CAJsB,EAInBzU,GAAG,CAJgB;;AAM/BrB,MAAK,UAAWtO,KAAX,EAAmB;;AAEvB,MAAKA,SAASA,MAAMq5B,OAApB,EAA8B;;AAE7B,QAAKpqB,IAAL,CAAWjP,KAAX;AAEA,GAJD,MAIO,IAAK,OAAOA,KAAP,KAAiB,QAAtB,EAAiC;;AAEvC,QAAK25B,MAAL,CAAa35B,KAAb;AAEA,GAJM,MAIA,IAAK,OAAOA,KAAP,KAAiB,QAAtB,EAAiC;;AAEvC,QAAK45B,QAAL,CAAe55B,KAAf;AAEA;;AAED,SAAO,IAAP;AAEA,EAxB8B;;AA0B/BwO,YAAW,UAAWC,MAAX,EAAoB;;AAE9B,OAAKwR,CAAL,GAASxR,MAAT;AACA,OAAK2V,CAAL,GAAS3V,MAAT;AACA,OAAKkB,CAAL,GAASlB,MAAT;;AAEA,SAAO,IAAP;AAEA,EAlC8B;;AAoC/BkrB,SAAQ,UAAWE,GAAX,EAAiB;;AAExBA,QAAMh6B,KAAKK,KAAL,CAAY25B,GAAZ,CAAN;;AAEA,OAAK5Z,CAAL,GAAS,CAAE4Z,OAAO,EAAP,GAAY,GAAd,IAAsB,GAA/B;AACA,OAAKzV,CAAL,GAAS,CAAEyV,OAAO,CAAP,GAAW,GAAb,IAAqB,GAA9B;AACA,OAAKlqB,CAAL,GAAS,CAAEkqB,MAAM,GAAR,IAAgB,GAAzB;;AAEA,SAAO,IAAP;AAEA,EA9C8B;;AAgD/BH,SAAQ,UAAWzZ,CAAX,EAAcmE,CAAd,EAAiBzU,CAAjB,EAAqB;;AAE5B,OAAKsQ,CAAL,GAASA,CAAT;AACA,OAAKmE,CAAL,GAASA,CAAT;AACA,OAAKzU,CAAL,GAASA,CAAT;;AAEA,SAAO,IAAP;AAEA,EAxD8B;;AA0D/BmqB,SAAQ,YAAY;;AAEnB,WAASC,OAAT,CAAkB7c,CAAlB,EAAqB/G,CAArB,EAAwBlJ,CAAxB,EAA4B;;AAE3B,OAAKA,IAAI,CAAT,EAAaA,KAAK,CAAL;AACb,OAAKA,IAAI,CAAT,EAAaA,KAAK,CAAL;AACb,OAAKA,IAAI,IAAI,CAAb,EAAiB,OAAOiQ,IAAI,CAAE/G,IAAI+G,CAAN,IAAY,CAAZ,GAAgBjQ,CAA3B;AACjB,OAAKA,IAAI,IAAI,CAAb,EAAiB,OAAOkJ,CAAP;AACjB,OAAKlJ,IAAI,IAAI,CAAb,EAAiB,OAAOiQ,IAAI,CAAE/G,IAAI+G,CAAN,IAAY,CAAZ,IAAkB,IAAI,CAAJ,GAAQjQ,CAA1B,CAAX;AACjB,UAAOiQ,CAAP;AAEA;;AAED,SAAO,SAAS4c,MAAT,CAAiB7c,CAAjB,EAAoBxN,CAApB,EAAuBjN,CAAvB,EAA2B;;AAEjC;AACAya,OAAI1R,MAAMgB,eAAN,CAAuB0Q,CAAvB,EAA0B,CAA1B,CAAJ;AACAxN,OAAIlE,MAAMa,KAAN,CAAaqD,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAJ;AACAjN,OAAI+I,MAAMa,KAAN,CAAa5J,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAJ;;AAEA,OAAKiN,MAAM,CAAX,EAAe;;AAEd,SAAKwQ,CAAL,GAAS,KAAKmE,CAAL,GAAS,KAAKzU,CAAL,GAASnN,CAA3B;AAEA,IAJD,MAIO;;AAEN,QAAI0a,IAAI1a,KAAK,GAAL,GAAWA,KAAM,IAAIiN,CAAV,CAAX,GAA2BjN,IAAIiN,CAAJ,GAAUjN,IAAIiN,CAAjD;AACA,QAAI0G,IAAM,IAAI3T,CAAN,GAAY0a,CAApB;;AAEA,SAAK+C,CAAL,GAAS8Z,QAAS5jB,CAAT,EAAY+G,CAAZ,EAAeD,IAAI,IAAI,CAAvB,CAAT;AACA,SAAKmH,CAAL,GAAS2V,QAAS5jB,CAAT,EAAY+G,CAAZ,EAAeD,CAAf,CAAT;AACA,SAAKtN,CAAL,GAASoqB,QAAS5jB,CAAT,EAAY+G,CAAZ,EAAeD,IAAI,IAAI,CAAvB,CAAT;AAEA;;AAED,UAAO,IAAP;AAEA,GAxBD;AA0BA,EAvCO,EA1DuB;;AAmG/B2c,WAAU,UAAWI,KAAX,EAAmB;;AAE5B,WAASC,WAAT,CAAsBC,MAAtB,EAA+B;;AAE9B,OAAKA,WAAWt6B,SAAhB,EAA4B;;AAE5B,OAAKu6B,WAAYD,MAAZ,IAAuB,CAA5B,EAAgC;;AAE/B7qB,YAAQC,IAAR,CAAc,qCAAqC0qB,KAArC,GAA6C,mBAA3D;AAEA;AAED;;AAGD,MAAIvtB,CAAJ;;AAEA,MAAKA,IAAI,kCAAkC2tB,IAAlC,CAAwCJ,KAAxC,CAAT,EAA2D;;AAE1D;;AAEA,OAAIK,KAAJ;AACA,OAAI5U,OAAOhZ,EAAG,CAAH,CAAX;AACA,OAAI6tB,aAAa7tB,EAAG,CAAH,CAAjB;;AAEA,WAASgZ,IAAT;;AAEC,SAAK,KAAL;AACA,SAAK,MAAL;;AAEC,SAAK4U,QAAQ,gEAAgED,IAAhE,CAAsEE,UAAtE,CAAb,EAAkG;;AAEjG;AACA,WAAKra,CAAL,GAASpgB,KAAKwM,GAAL,CAAU,GAAV,EAAekuB,SAAUF,MAAO,CAAP,CAAV,EAAsB,EAAtB,CAAf,IAA8C,GAAvD;AACA,WAAKjW,CAAL,GAASvkB,KAAKwM,GAAL,CAAU,GAAV,EAAekuB,SAAUF,MAAO,CAAP,CAAV,EAAsB,EAAtB,CAAf,IAA8C,GAAvD;AACA,WAAK1qB,CAAL,GAAS9P,KAAKwM,GAAL,CAAU,GAAV,EAAekuB,SAAUF,MAAO,CAAP,CAAV,EAAsB,EAAtB,CAAf,IAA8C,GAAvD;;AAEAJ,kBAAaI,MAAO,CAAP,CAAb;;AAEA,aAAO,IAAP;AAEA;;AAED,SAAKA,QAAQ,sEAAsED,IAAtE,CAA4EE,UAA5E,CAAb,EAAwG;;AAEvG;AACA,WAAKra,CAAL,GAASpgB,KAAKwM,GAAL,CAAU,GAAV,EAAekuB,SAAUF,MAAO,CAAP,CAAV,EAAsB,EAAtB,CAAf,IAA8C,GAAvD;AACA,WAAKjW,CAAL,GAASvkB,KAAKwM,GAAL,CAAU,GAAV,EAAekuB,SAAUF,MAAO,CAAP,CAAV,EAAsB,EAAtB,CAAf,IAA8C,GAAvD;AACA,WAAK1qB,CAAL,GAAS9P,KAAKwM,GAAL,CAAU,GAAV,EAAekuB,SAAUF,MAAO,CAAP,CAAV,EAAsB,EAAtB,CAAf,IAA8C,GAAvD;;AAEAJ,kBAAaI,MAAO,CAAP,CAAb;;AAEA,aAAO,IAAP;AAEA;;AAED;;AAED,SAAK,KAAL;AACA,SAAK,MAAL;;AAEC,SAAKA,QAAQ,gFAAgFD,IAAhF,CAAsFE,UAAtF,CAAb,EAAkH;;AAEjH;AACA,UAAIrd,IAAIkd,WAAYE,MAAO,CAAP,CAAZ,IAA2B,GAAnC;AACA,UAAI5qB,IAAI8qB,SAAUF,MAAO,CAAP,CAAV,EAAsB,EAAtB,IAA6B,GAArC;AACA,UAAI73B,IAAI+3B,SAAUF,MAAO,CAAP,CAAV,EAAsB,EAAtB,IAA6B,GAArC;;AAEAJ,kBAAaI,MAAO,CAAP,CAAb;;AAEA,aAAO,KAAKP,MAAL,CAAa7c,CAAb,EAAgBxN,CAAhB,EAAmBjN,CAAnB,CAAP;AAEA;;AAED;;AAjDF;AAqDA,GA7DD,MA6DO,IAAKiK,IAAI,qBAAqB2tB,IAArB,CAA2BJ,KAA3B,CAAT,EAA8C;;AAEpD;;AAEA,OAAIH,MAAMptB,EAAG,CAAH,CAAV;AACA,OAAIme,OAAOiP,IAAI34B,MAAf;;AAEA,OAAK0pB,SAAS,CAAd,EAAkB;;AAEjB;AACA,SAAK3K,CAAL,GAASsa,SAAUV,IAAIW,MAAJ,CAAY,CAAZ,IAAkBX,IAAIW,MAAJ,CAAY,CAAZ,CAA5B,EAA6C,EAA7C,IAAoD,GAA7D;AACA,SAAKpW,CAAL,GAASmW,SAAUV,IAAIW,MAAJ,CAAY,CAAZ,IAAkBX,IAAIW,MAAJ,CAAY,CAAZ,CAA5B,EAA6C,EAA7C,IAAoD,GAA7D;AACA,SAAK7qB,CAAL,GAAS4qB,SAAUV,IAAIW,MAAJ,CAAY,CAAZ,IAAkBX,IAAIW,MAAJ,CAAY,CAAZ,CAA5B,EAA6C,EAA7C,IAAoD,GAA7D;;AAEA,WAAO,IAAP;AAEA,IATD,MASO,IAAK5P,SAAS,CAAd,EAAkB;;AAExB;AACA,SAAK3K,CAAL,GAASsa,SAAUV,IAAIW,MAAJ,CAAY,CAAZ,IAAkBX,IAAIW,MAAJ,CAAY,CAAZ,CAA5B,EAA6C,EAA7C,IAAoD,GAA7D;AACA,SAAKpW,CAAL,GAASmW,SAAUV,IAAIW,MAAJ,CAAY,CAAZ,IAAkBX,IAAIW,MAAJ,CAAY,CAAZ,CAA5B,EAA6C,EAA7C,IAAoD,GAA7D;AACA,SAAK7qB,CAAL,GAAS4qB,SAAUV,IAAIW,MAAJ,CAAY,CAAZ,IAAkBX,IAAIW,MAAJ,CAAY,CAAZ,CAA5B,EAA6C,EAA7C,IAAoD,GAA7D;;AAEA,WAAO,IAAP;AAEA;AAED;;AAED,MAAKR,SAASA,MAAM94B,MAAN,GAAe,CAA7B,EAAiC;;AAEhC;AACA,OAAI24B,MAAML,cAAeQ,KAAf,CAAV;;AAEA,OAAKH,QAAQj6B,SAAb,EAAyB;;AAExB;AACA,SAAK+5B,MAAL,CAAaE,GAAb;AAEA,IALD,MAKO;;AAEN;AACAxqB,YAAQC,IAAR,CAAc,gCAAgC0qB,KAA9C;AAEA;AAED;;AAED,SAAO,IAAP;AAEA,EAnO8B;;AAqO/BjrB,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,CAAsB,KAAKiR,CAA3B,EAA8B,KAAKmE,CAAnC,EAAsC,KAAKzU,CAA3C,CAAP;AAEA,EAzO8B;;AA2O/BV,OAAM,UAAWorB,KAAX,EAAmB;;AAExB,OAAKpa,CAAL,GAASoa,MAAMpa,CAAf;AACA,OAAKmE,CAAL,GAASiW,MAAMjW,CAAf;AACA,OAAKzU,CAAL,GAAS0qB,MAAM1qB,CAAf;;AAEA,SAAO,IAAP;AAEA,EAnP8B;;AAqP/B8qB,oBAAmB,UAAWJ,KAAX,EAAkBK,WAAlB,EAAgC;;AAElD,MAAKA,gBAAgB96B,SAArB,EAAiC86B,cAAc,GAAd;;AAEjC,OAAKza,CAAL,GAASpgB,KAAKC,GAAL,CAAUu6B,MAAMpa,CAAhB,EAAmBya,WAAnB,CAAT;AACA,OAAKtW,CAAL,GAASvkB,KAAKC,GAAL,CAAUu6B,MAAMjW,CAAhB,EAAmBsW,WAAnB,CAAT;AACA,OAAK/qB,CAAL,GAAS9P,KAAKC,GAAL,CAAUu6B,MAAM1qB,CAAhB,EAAmB+qB,WAAnB,CAAT;;AAEA,SAAO,IAAP;AAEA,EA/P8B;;AAiQ/BC,oBAAmB,UAAWN,KAAX,EAAkBK,WAAlB,EAAgC;;AAElD,MAAKA,gBAAgB96B,SAArB,EAAiC86B,cAAc,GAAd;;AAEjC,MAAIE,cAAgBF,cAAc,CAAhB,GAAwB,MAAMA,WAA9B,GAA8C,GAAhE;;AAEA,OAAKza,CAAL,GAASpgB,KAAKC,GAAL,CAAUu6B,MAAMpa,CAAhB,EAAmB2a,WAAnB,CAAT;AACA,OAAKxW,CAAL,GAASvkB,KAAKC,GAAL,CAAUu6B,MAAMjW,CAAhB,EAAmBwW,WAAnB,CAAT;AACA,OAAKjrB,CAAL,GAAS9P,KAAKC,GAAL,CAAUu6B,MAAM1qB,CAAhB,EAAmBirB,WAAnB,CAAT;;AAEA,SAAO,IAAP;AAEA,EA7Q8B;;AA+Q/BC,uBAAsB,YAAY;;AAEjC,MAAI5a,IAAI,KAAKA,CAAb;AAAA,MAAgBmE,IAAI,KAAKA,CAAzB;AAAA,MAA4BzU,IAAI,KAAKA,CAArC;;AAEA,OAAKsQ,CAAL,GAASA,IAAIA,CAAb;AACA,OAAKmE,CAAL,GAASA,IAAIA,CAAb;AACA,OAAKzU,CAAL,GAASA,IAAIA,CAAb;;AAEA,SAAO,IAAP;AAEA,EAzR8B;;AA2R/BmrB,uBAAsB,YAAY;;AAEjC,OAAK7a,CAAL,GAASpgB,KAAKmR,IAAL,CAAW,KAAKiP,CAAhB,CAAT;AACA,OAAKmE,CAAL,GAASvkB,KAAKmR,IAAL,CAAW,KAAKoT,CAAhB,CAAT;AACA,OAAKzU,CAAL,GAAS9P,KAAKmR,IAAL,CAAW,KAAKrB,CAAhB,CAAT;;AAEA,SAAO,IAAP;AAEA,EAnS8B;;AAqS/BorB,SAAQ,YAAY;;AAEnB,SAAS,KAAK9a,CAAL,GAAS,GAAX,IAAoB,EAApB,GAA2B,KAAKmE,CAAL,GAAS,GAAX,IAAoB,CAA7C,GAAmD,KAAKzU,CAAL,GAAS,GAAX,IAAoB,CAA5E;AAEA,EAzS8B;;AA2S/BqrB,eAAc,YAAY;;AAEzB,SAAO,CAAE,WAAW,KAAKD,MAAL,GAAcr6B,QAAd,CAAwB,EAAxB,CAAb,EAA4C4B,KAA5C,CAAmD,CAAE,CAArD,CAAP;AAEA,EA/S8B;;AAiT/B24B,SAAQ,UAAWp6B,MAAX,EAAoB;;AAE3B;;AAEA,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,+CAAd;AACAzO,YAAS,EAAEoc,GAAG,CAAL,EAAQxN,GAAG,CAAX,EAAcjN,GAAG,CAAjB,EAAT;AAEA;;AAED,MAAIyd,IAAI,KAAKA,CAAb;AAAA,MAAgBmE,IAAI,KAAKA,CAAzB;AAAA,MAA4BzU,IAAI,KAAKA,CAArC;;AAEA,MAAIrD,MAAMzM,KAAKyM,GAAL,CAAU2T,CAAV,EAAamE,CAAb,EAAgBzU,CAAhB,CAAV;AACA,MAAItD,MAAMxM,KAAKwM,GAAL,CAAU4T,CAAV,EAAamE,CAAb,EAAgBzU,CAAhB,CAAV;;AAEA,MAAIurB,GAAJ,EAASC,UAAT;AACA,MAAIC,YAAY,CAAE/uB,MAAMC,GAAR,IAAgB,GAAhC;;AAEA,MAAKD,QAAQC,GAAb,EAAmB;;AAElB4uB,SAAM,CAAN;AACAC,gBAAa,CAAb;AAEA,GALD,MAKO;;AAEN,OAAIlM,QAAQ3iB,MAAMD,GAAlB;;AAEA8uB,gBAAaC,aAAa,GAAb,GAAmBnM,SAAU3iB,MAAMD,GAAhB,CAAnB,GAA2C4iB,SAAU,IAAI3iB,GAAJ,GAAUD,GAApB,CAAxD;;AAEA,WAASC,GAAT;;AAEC,SAAK2T,CAAL;AAAQib,WAAM,CAAE9W,IAAIzU,CAAN,IAAYsf,KAAZ,IAAsB7K,IAAIzU,CAAJ,GAAQ,CAAR,GAAY,CAAlC,CAAN,CAA6C;AACrD,SAAKyU,CAAL;AAAQ8W,WAAM,CAAEvrB,IAAIsQ,CAAN,IAAYgP,KAAZ,GAAoB,CAA1B,CAA6B;AACrC,SAAKtf,CAAL;AAAQurB,WAAM,CAAEjb,IAAImE,CAAN,IAAY6K,KAAZ,GAAoB,CAA1B,CAA6B;;AAJtC;;AAQAiM,UAAO,CAAP;AAEA;;AAEDr6B,SAAOoc,CAAP,GAAWie,GAAX;AACAr6B,SAAO4O,CAAP,GAAW0rB,UAAX;AACAt6B,SAAO2B,CAAP,GAAW44B,SAAX;;AAEA,SAAOv6B,MAAP;AAEA,EAjW8B;;AAmW/Bw6B,WAAU,YAAY;;AAErB,SAAO,UAAa,KAAKpb,CAAL,GAAS,GAAX,GAAmB,CAA9B,IAAoC,GAApC,IAA8C,KAAKmE,CAAL,GAAS,GAAX,GAAmB,CAA/D,IAAqE,GAArE,IAA+E,KAAKzU,CAAL,GAAS,GAAX,GAAmB,CAAhG,IAAsG,GAA7G;AAEA,EAvW8B;;AAyW/B2rB,YAAW,YAAY;;AAEtB,MAAIC,MAAM,EAAV;;AAEA,SAAO,UAAWte,CAAX,EAAcxN,CAAd,EAAiBjN,CAAjB,EAAqB;;AAE3B,QAAKy4B,MAAL,CAAaM,GAAb;;AAEAA,OAAIte,CAAJ,IAASA,CAAT,CAAYse,IAAI9rB,CAAJ,IAASA,CAAT,CAAY8rB,IAAI/4B,CAAJ,IAASA,CAAT;;AAExB,QAAKs3B,MAAL,CAAayB,IAAIte,CAAjB,EAAoBse,IAAI9rB,CAAxB,EAA2B8rB,IAAI/4B,CAA/B;;AAEA,UAAO,IAAP;AAEA,GAVD;AAYA,EAhBU,EAzWoB;;AA2X/B2M,MAAK,UAAWkrB,KAAX,EAAmB;;AAEvB,OAAKpa,CAAL,IAAUoa,MAAMpa,CAAhB;AACA,OAAKmE,CAAL,IAAUiW,MAAMjW,CAAhB;AACA,OAAKzU,CAAL,IAAU0qB,MAAM1qB,CAAhB;;AAEA,SAAO,IAAP;AAEA,EAnY8B;;AAqY/B6rB,YAAW,UAAWC,MAAX,EAAmBC,MAAnB,EAA4B;;AAEtC,OAAKzb,CAAL,GAASwb,OAAOxb,CAAP,GAAWyb,OAAOzb,CAA3B;AACA,OAAKmE,CAAL,GAASqX,OAAOrX,CAAP,GAAWsX,OAAOtX,CAA3B;AACA,OAAKzU,CAAL,GAAS8rB,OAAO9rB,CAAP,GAAW+rB,OAAO/rB,CAA3B;;AAEA,SAAO,IAAP;AAEA,EA7Y8B;;AA+Y/BH,YAAW,UAAWC,CAAX,EAAe;;AAEzB,OAAKwQ,CAAL,IAAUxQ,CAAV;AACA,OAAK2U,CAAL,IAAU3U,CAAV;AACA,OAAKE,CAAL,IAAUF,CAAV;;AAEA,SAAO,IAAP;AAEA,EAvZ8B;;AAyZ/BI,MAAK,UAAWwqB,KAAX,EAAmB;;AAEvB,OAAKpa,CAAL,GAASpgB,KAAKyM,GAAL,CAAU,CAAV,EAAa,KAAK2T,CAAL,GAASoa,MAAMpa,CAA5B,CAAT;AACA,OAAKmE,CAAL,GAASvkB,KAAKyM,GAAL,CAAU,CAAV,EAAa,KAAK8X,CAAL,GAASiW,MAAMjW,CAA5B,CAAT;AACA,OAAKzU,CAAL,GAAS9P,KAAKyM,GAAL,CAAU,CAAV,EAAa,KAAKqD,CAAL,GAAS0qB,MAAM1qB,CAA5B,CAAT;;AAEA,SAAO,IAAP;AAEA,EAja8B;;AAma/BK,WAAU,UAAWqqB,KAAX,EAAmB;;AAE5B,OAAKpa,CAAL,IAAUoa,MAAMpa,CAAhB;AACA,OAAKmE,CAAL,IAAUiW,MAAMjW,CAAhB;AACA,OAAKzU,CAAL,IAAU0qB,MAAM1qB,CAAhB;;AAEA,SAAO,IAAP;AAEA,EA3a8B;;AA6a/BM,iBAAgB,UAAWR,CAAX,EAAe;;AAE9B,OAAKwQ,CAAL,IAAUxQ,CAAV;AACA,OAAK2U,CAAL,IAAU3U,CAAV;AACA,OAAKE,CAAL,IAAUF,CAAV;;AAEA,SAAO,IAAP;AAEA,EArb8B;;AAub/B1C,OAAM,UAAWstB,KAAX,EAAkBzoB,KAAlB,EAA0B;;AAE/B,OAAKqO,CAAL,IAAU,CAAEoa,MAAMpa,CAAN,GAAU,KAAKA,CAAjB,IAAuBrO,KAAjC;AACA,OAAKwS,CAAL,IAAU,CAAEiW,MAAMjW,CAAN,GAAU,KAAKA,CAAjB,IAAuBxS,KAAjC;AACA,OAAKjC,CAAL,IAAU,CAAE0qB,MAAM1qB,CAAN,GAAU,KAAKA,CAAjB,IAAuBiC,KAAjC;;AAEA,SAAO,IAAP;AAEA,EA/b8B;;AAic/BI,SAAQ,UAAWU,CAAX,EAAe;;AAEtB,SAASA,EAAEuN,CAAF,KAAQ,KAAKA,CAAf,IAAwBvN,EAAE0R,CAAF,KAAQ,KAAKA,CAArC,IAA8C1R,EAAE/C,CAAF,KAAQ,KAAKA,CAAlE;AAEA,EArc8B;;AAuc/BsC,YAAW,UAAW5P,KAAX,EAAkB6P,MAAlB,EAA2B;;AAErC,MAAKA,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;;AAE5B,OAAK+N,CAAL,GAAS5d,MAAO6P,MAAP,CAAT;AACA,OAAKkS,CAAL,GAAS/hB,MAAO6P,SAAS,CAAhB,CAAT;AACA,OAAKvC,CAAL,GAAStN,MAAO6P,SAAS,CAAhB,CAAT;;AAEA,SAAO,IAAP;AAEA,EAjd8B;;AAmd/BC,UAAS,UAAW9P,KAAX,EAAkB6P,MAAlB,EAA2B;;AAEnC,MAAK7P,UAAUzC,SAAf,EAA2ByC,QAAQ,EAAR;AAC3B,MAAK6P,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;;AAE5B7P,QAAO6P,MAAP,IAAkB,KAAK+N,CAAvB;AACA5d,QAAO6P,SAAS,CAAhB,IAAsB,KAAKkS,CAA3B;AACA/hB,QAAO6P,SAAS,CAAhB,IAAsB,KAAKvC,CAA3B;;AAEA,SAAOtN,KAAP;AAEA,EA9d8B;;AAge/BmkB,SAAQ,YAAY;;AAEnB,SAAO,KAAKuU,MAAL,EAAP;AAEA;;AApe8B,CAAhC;;AAweA;;;;AAIA,IAAIY,cAAc;;AAEjB/I,SAAQ;;AAEPgJ,WAAS,EAAE57B,OAAO,IAAIy5B,KAAJ,CAAW,QAAX,CAAT,EAFF;AAGPoC,WAAS,EAAE77B,OAAO,GAAT,EAHF;;AAKP87B,OAAK,EAAE97B,OAAO,IAAT,EALE;AAMP+7B,eAAa,EAAE/7B,OAAO,IAAIikB,OAAJ,EAAT,EANN;;AAQP+X,YAAU,EAAEh8B,OAAO,IAAT;;AARH,EAFS;;AAcjBi8B,cAAa;;AAEZC,eAAa,EAAEl8B,OAAO,IAAT;;AAFD,EAdI;;AAoBjBm8B,SAAQ;;AAEPC,UAAQ,EAAEp8B,OAAO,IAAT,EAFD;AAGPq8B,cAAY,EAAEr8B,OAAO,CAAE,CAAX,EAHL;AAIPs8B,gBAAc,EAAEt8B,OAAO,GAAT,EAJP;AAKPu8B,mBAAiB,EAAEv8B,OAAO,IAAT,EALV;AAMPw8B,eAAa,EAAEx8B,OAAO,CAAT;;AANN,EApBS;;AA8BjBy8B,QAAO;;AAENC,SAAO,EAAE18B,OAAO,IAAT,EAFD;AAGN28B,kBAAgB,EAAE38B,OAAO,CAAT;;AAHV,EA9BU;;AAqCjB48B,WAAU;;AAETC,YAAU,EAAE78B,OAAO,IAAT,EAFD;AAGT88B,qBAAmB,EAAE98B,OAAO,CAAT;;AAHV,EArCO;;AA4CjB+8B,cAAa;;AAEZC,eAAa,EAAEh9B,OAAO,IAAT;;AAFD,EA5CI;;AAkDjBi9B,UAAS;;AAERC,WAAS,EAAEl9B,OAAO,IAAT,EAFD;AAGRm9B,aAAW,EAAEn9B,OAAO,CAAT;;AAHH,EAlDQ;;AAyDjBo9B,YAAW;;AAEVC,aAAW,EAAEr9B,OAAO,IAAT,EAFD;AAGVs9B,eAAa,EAAEt9B,OAAO,IAAIoO,OAAJ,CAAa,CAAb,EAAgB,CAAhB,CAAT;;AAHH,EAzDM;;AAgEjBmvB,kBAAiB;;AAEhBC,mBAAiB,EAAEx9B,OAAO,IAAT,EAFD;AAGhBy9B,qBAAmB,EAAEz9B,OAAO,CAAT,EAHH;AAIhB09B,oBAAkB,EAAE19B,OAAO,CAAT;;AAJF,EAhEA;;AAwEjB29B,eAAc;;AAEbC,gBAAc,EAAE59B,OAAO,IAAT;;AAFD,EAxEG;;AA8EjB69B,eAAc;;AAEbC,gBAAc,EAAE99B,OAAO,IAAT;;AAFD,EA9EG;;AAoFjB+9B,cAAa;;AAEZC,eAAa,EAAEh+B,OAAO,IAAT;;AAFD,EApFI;;AA0FjBi+B,MAAK;;AAEJC,cAAY,EAAEl+B,OAAO,OAAT,EAFR;AAGJm+B,WAAS,EAAEn+B,OAAO,CAAT,EAHL;AAIJo+B,UAAQ,EAAEp+B,OAAO,IAAT,EAJJ;AAKJq+B,YAAU,EAAEr+B,OAAO,IAAIy5B,KAAJ,CAAW,QAAX,CAAT;;AALN,EA1FY;;AAmGjB6E,SAAQ;;AAEPC,qBAAmB,EAAEv+B,OAAO,EAAT,EAFZ;;AAIPw+B,qBAAmB,EAAEx+B,OAAO,EAAT,EAAay+B,YAAY;AAC3CzP,eAAW,EADgC;AAE3CqL,WAAO,EAFoC;;AAI3CqE,YAAQ,EAJmC;AAK3CC,gBAAY,EAL+B;AAM3CC,kBAAc,EAN6B;AAO3CC,mBAAe;AAP4B,IAAzB,EAJZ;;AAcPC,wBAAsB,EAAE9+B,OAAO,EAAT,EAdf;AAeP++B,2BAAyB,EAAE/+B,OAAO,EAAT,EAflB;;AAiBPg/B,cAAY,EAAEh/B,OAAO,EAAT,EAAay+B,YAAY;AACpCpE,WAAO,EAD6B;AAEpCxe,cAAU,EAF0B;AAGpCmT,eAAW,EAHyB;AAIpC0C,cAAU,EAJ0B;AAKpCuN,aAAS,EAL2B;AAMpCC,iBAAa,EANuB;AAOpCC,WAAO,EAP6B;;AASpCT,YAAQ,EAT4B;AAUpCC,gBAAY,EAVwB;AAWpCC,kBAAc,EAXsB;AAYpCC,mBAAe;AAZqB,IAAzB,EAjBL;;AAgCPO,iBAAe,EAAEp/B,OAAO,EAAT,EAhCR;AAiCPq/B,oBAAkB,EAAEr/B,OAAO,EAAT,EAjCX;;AAmCPs/B,eAAa,EAAEt/B,OAAO,EAAT,EAAay+B,YAAY;AACrCpE,WAAO,EAD8B;AAErCxe,cAAU,EAF2B;AAGrCsjB,WAAO,EAH8B;AAIrCzN,cAAU,EAJ2B;;AAMrCgN,YAAQ,EAN6B;AAOrCC,gBAAY,EAPyB;AAQrCC,kBAAc,EARuB;AASrCC,mBAAe,EATsB;AAUrCU,sBAAkB,EAVmB;AAWrCC,qBAAiB;AAXoB,IAAzB,EAnCN;;AAiDPC,kBAAgB,EAAEz/B,OAAO,EAAT,EAjDT;AAkDP0/B,qBAAmB,EAAE1/B,OAAO,EAAT,EAlDZ;;AAoDP2/B,oBAAkB,EAAE3/B,OAAO,EAAT,EAAay+B,YAAY;AAC1CzP,eAAW,EAD+B;AAE1C4Q,cAAU,EAFgC;AAG1CC,iBAAa;AAH6B,IAAzB,EApDX;;AA0DP;AACAC,kBAAgB,EAAE9/B,OAAO,EAAT,EAAay+B,YAAY;AACxCpE,WAAO,EADiC;AAExCxe,cAAU,EAF8B;AAGxCoL,WAAO,EAHiC;AAIxCC,YAAQ;AAJgC,IAAzB;;AA3DT,EAnGS;;AAuKjBqD,SAAQ;;AAEPqR,WAAS,EAAE57B,OAAO,IAAIy5B,KAAJ,CAAW,QAAX,CAAT,EAFF;AAGPoC,WAAS,EAAE77B,OAAO,GAAT,EAHF;AAIP4qB,QAAM,EAAE5qB,OAAO,GAAT,EAJC;AAKP4a,SAAO,EAAE5a,OAAO,GAAT,EALA;AAMP87B,OAAK,EAAE97B,OAAO,IAAT,EANE;AAOP+7B,eAAa,EAAE/7B,OAAO,IAAIikB,OAAJ,EAAT;;AAPN;;AAvKS,CAAlB;;AAoLA;;;;;;AAMA,IAAI8b,YAAY;;AAEfC,QAAO;;AAENjH,YAAUF,cAAcC,KAAd,CAAqB,CAC9B6C,YAAY/I,MADkB,EAE9B+I,YAAYM,WAFkB,EAG9BN,YAAYQ,MAHkB,EAI9BR,YAAYc,KAJkB,EAK9Bd,YAAYiB,QALkB,EAM9BjB,YAAYsC,GANkB,CAArB,CAFJ;;AAWNgC,gBAAcrH,YAAYb,cAXpB;AAYNmI,kBAAgBtH,YAAYd;;AAZtB,EAFQ;;AAkBfqI,UAAS;;AAERpH,YAAUF,cAAcC,KAAd,CAAqB,CAC9B6C,YAAY/I,MADkB,EAE9B+I,YAAYM,WAFkB,EAG9BN,YAAYQ,MAHkB,EAI9BR,YAAYc,KAJkB,EAK9Bd,YAAYiB,QALkB,EAM9BjB,YAAYoB,WANkB,EAO9BpB,YAAYsC,GAPkB,EAQ9BtC,YAAY2C,MARkB,EAS9B;AACC8B,aAAU,EAAEpgC,OAAO,IAAIy5B,KAAJ,CAAW,QAAX,CAAT;AADX,GAT8B,CAArB,CAFF;;AAgBRwG,gBAAcrH,YAAYX,gBAhBlB;AAiBRiI,kBAAgBtH,YAAYZ;;AAjBpB,EAlBM;;AAuCfqI,QAAO;;AAENtH,YAAUF,cAAcC,KAAd,CAAqB,CAC9B6C,YAAY/I,MADkB,EAE9B+I,YAAYM,WAFkB,EAG9BN,YAAYQ,MAHkB,EAI9BR,YAAYc,KAJkB,EAK9Bd,YAAYiB,QALkB,EAM9BjB,YAAYoB,WANkB,EAO9BpB,YAAYsB,OAPkB,EAQ9BtB,YAAYyB,SARkB,EAS9BzB,YAAY4B,eATkB,EAU9B5B,YAAYoC,WAVkB,EAW9BpC,YAAYsC,GAXkB,EAY9BtC,YAAY2C,MAZkB,EAa9B;AACC8B,aAAU,EAAEpgC,OAAO,IAAIy5B,KAAJ,CAAW,QAAX,CAAT,EADX;AAEC6G,aAAU,EAAEtgC,OAAO,IAAIy5B,KAAJ,CAAW,QAAX,CAAT,EAFX;AAGC8G,cAAW,EAAEvgC,OAAO,EAAT;AAHZ,GAb8B,CAArB,CAFJ;;AAsBNigC,gBAAcrH,YAAYT,cAtBpB;AAuBN+H,kBAAgBtH,YAAYV;;AAvBtB,EAvCQ;;AAkEfsI,WAAU;;AAETzH,YAAUF,cAAcC,KAAd,CAAqB,CAC9B6C,YAAY/I,MADkB,EAE9B+I,YAAYQ,MAFkB,EAG9BR,YAAYc,KAHkB,EAI9Bd,YAAYiB,QAJkB,EAK9BjB,YAAYoB,WALkB,EAM9BpB,YAAYsB,OANkB,EAO9BtB,YAAYyB,SAPkB,EAQ9BzB,YAAY4B,eARkB,EAS9B5B,YAAYgC,YATkB,EAU9BhC,YAAYkC,YAVkB,EAW9BlC,YAAYsC,GAXkB,EAY9BtC,YAAY2C,MAZkB,EAa9B;AACC8B,aAAU,EAAEpgC,OAAO,IAAIy5B,KAAJ,CAAW,QAAX,CAAT,EADX;AAECgH,cAAW,EAAEzgC,OAAO,GAAT,EAFZ;AAGC0gC,cAAW,EAAE1gC,OAAO,GAAT,EAHZ;AAIC2gC,oBAAiB,EAAE3gC,OAAO,CAAT,CAAa;AAAb,IAJlB,EAb8B,CAArB,CAFD;;AAuBTigC,gBAAcrH,YAAYP,iBAvBjB;AAwBT6H,kBAAgBtH,YAAYR;;AAxBnB,EAlEK;;AA8Ff7N,SAAQ;;AAEPwO,YAAUF,cAAcC,KAAd,CAAqB,CAC9B6C,YAAYpR,MADkB,EAE9BoR,YAAYsC,GAFkB,CAArB,CAFH;;AAOPgC,gBAAcrH,YAAYH,WAPnB;AAQPyH,kBAAgBtH,YAAYJ;;AARrB,EA9FO;;AA0GfoI,SAAQ;;AAEP7H,YAAUF,cAAcC,KAAd,CAAqB,CAC9B6C,YAAY/I,MADkB,EAE9B+I,YAAYsC,GAFkB,EAG9B;AACCrjB,UAAO,EAAE5a,OAAO,CAAT,EADR;AAEC6gC,aAAU,EAAE7gC,OAAO,CAAT,EAFX;AAGC8gC,cAAW,EAAE9gC,OAAO,CAAT;AAHZ,GAH8B,CAArB,CAFH;;AAYPigC,gBAAcrH,YAAYf,eAZnB;AAaPqI,kBAAgBtH,YAAYhB;;AAbrB,EA1GO;;AA2HfmJ,QAAO;;AAENhI,YAAUF,cAAcC,KAAd,CAAqB,CAC9B6C,YAAY/I,MADkB,EAE9B+I,YAAY4B,eAFkB,CAArB,CAFJ;;AAON0C,gBAAcrH,YAAYrB,UAPpB;AAQN2I,kBAAgBtH,YAAYtB;;AARtB,EA3HQ;;AAuIfhU,SAAQ;;AAEPyV,YAAUF,cAAcC,KAAd,CAAqB,CAC9B6C,YAAY/I,MADkB,EAE9B+I,YAAYsB,OAFkB,EAG9BtB,YAAYyB,SAHkB,EAI9BzB,YAAY4B,eAJkB,EAK9B;AACC1B,YAAS,EAAE77B,OAAO,GAAT;AADV,GAL8B,CAArB,CAFH;;AAYPigC,gBAAcrH,YAAYL,WAZnB;AAaP2H,kBAAgBtH,YAAYN;;AAbrB,EAvIO;;AAwJf;;;;AAIA0I,OAAM;;AAELjI,YAAU;AACTkI,UAAO,EAAEjhC,OAAO,IAAT,EADE;AAETkhC,UAAO,EAAElhC,OAAO,CAAE,CAAX,EAFE;AAGT67B,YAAS,EAAE77B,OAAO,GAAT;AAHA,GAFL;;AAQLigC,gBAAcrH,YAAYvB,SARrB;AASL6I,kBAAgBtH,YAAYxB;;AATvB,EA5JS;;AAyKf+J,WAAU;;AAETpI,YAAU;AACTqI,cAAW,EAAEphC,OAAO,IAAT;AADF,GAFD;;AAMTigC,gBAAcrH,YAAYjB,aANjB;AAOTuI,kBAAgBtH,YAAYlB;;AAPnB,EAzKK;;AAoLf2J,eAAc;;AAEbtI,YAAUF,cAAcC,KAAd,CAAqB,CAC9B6C,YAAY/I,MADkB,EAE9B+I,YAAY4B,eAFkB,EAG9B;AACC+D,sBAAmB,EAAEthC,OAAO,IAAI4U,OAAJ,EAAT,EADpB;AAEC2sB,iBAAc,EAAEvhC,OAAO,CAAT,EAFf;AAGCwhC,gBAAa,EAAExhC,OAAO,IAAT;AAHd,GAH8B,CAArB,CAFG;;AAYbigC,gBAAcrH,YAAYnB,iBAZb;AAabyI,kBAAgBtH,YAAYpB;;AAbf,EApLC;;AAqMfkH,SAAQ;;AAEP3F,YAAUF,cAAcC,KAAd,CAAqB,CAC9B6C,YAAY2C,MADkB,EAE9B3C,YAAYsC,GAFkB,EAG9B;AACC5D,UAAO,EAAEr6B,OAAO,IAAIy5B,KAAJ,CAAW,OAAX,CAAT,EADR;AAECoC,YAAS,EAAE77B,OAAO,GAAT;AAFV,GAH8B,CAArB,CAFH;;AAWPigC,gBAAcrH,YAAYD,WAXnB;AAYPuH,kBAAgBtH,YAAYF;;AAZrB;;AArMO,CAAhB;;AAuNAqH,UAAU0B,QAAV,GAAqB;;AAEpB1I,WAAUF,cAAcC,KAAd,CAAqB,CAC9BiH,UAAUS,QAAV,CAAmBzH,QADW,EAE9B;AACC2I,aAAW,EAAE1hC,OAAO,CAAT,EADZ;AAEC2hC,sBAAoB,EAAE3hC,OAAO,CAAT;AAFrB,EAF8B,CAArB,CAFU;;AAUpBigC,eAAcrH,YAAYP,iBAVN;AAWpB6H,iBAAgBtH,YAAYR;;AAXR,CAArB;;AAeA;;;;AAIA,SAASwJ,eAAT,CAA0BC,EAA1B,EAA+B;;AAE9B,KAAIC,UAAU,IAAIC,OAAJ,EAAd;;AAEA,UAASC,YAAT,CAAuB3vB,SAAvB,EAAkC4vB,UAAlC,EAA+C;;AAE9C,MAAI5/B,QAAQgQ,UAAUhQ,KAAtB;AACA,MAAI6/B,QAAQ7vB,UAAU8vB,OAAV,GAAoBN,GAAGO,YAAvB,GAAsCP,GAAGQ,WAArD;;AAEA,MAAIC,SAAST,GAAGG,YAAH,EAAb;;AAEAH,KAAGU,UAAH,CAAeN,UAAf,EAA2BK,MAA3B;AACAT,KAAGW,UAAH,CAAeP,UAAf,EAA2B5/B,KAA3B,EAAkC6/B,KAAlC;;AAEA7vB,YAAUowB,gBAAV;;AAEA,MAAIhhC,OAAOogC,GAAGa,KAAd;;AAEA,MAAKrgC,iBAAiBsgC,YAAtB,EAAqC;;AAEpClhC,UAAOogC,GAAGa,KAAV;AAEA,GAJD,MAIO,IAAKrgC,iBAAiBugC,YAAtB,EAAqC;;AAE3CvzB,WAAQC,IAAR,CAAc,sEAAd;AAEA,GAJM,MAIA,IAAKjN,iBAAiBwgC,WAAtB,EAAoC;;AAE1CphC,UAAOogC,GAAGiB,cAAV;AAEA,GAJM,MAIA,IAAKzgC,iBAAiB0gC,UAAtB,EAAmC;;AAEzCthC,UAAOogC,GAAGmB,KAAV;AAEA,GAJM,MAIA,IAAK3gC,iBAAiB4gC,WAAtB,EAAoC;;AAE1CxhC,UAAOogC,GAAGqB,YAAV;AAEA,GAJM,MAIA,IAAK7gC,iBAAiB8gC,UAAtB,EAAmC;;AAEzC1hC,UAAOogC,GAAGuB,GAAV;AAEA,GAJM,MAIA,IAAK/gC,iBAAiBghC,SAAtB,EAAkC;;AAExC5hC,UAAOogC,GAAGyB,IAAV;AAEA,GAJM,MAIA,IAAKjhC,iBAAiBkhC,UAAtB,EAAmC;;AAEzC9hC,UAAOogC,GAAG2B,aAAV;AAEA;;AAED,SAAO;AACNlB,WAAQA,MADF;AAEN7gC,SAAMA,IAFA;AAGNgiC,oBAAiBphC,MAAMqhC,iBAHjB;AAINvd,YAAS9T,UAAU8T;AAJb,GAAP;AAOA;;AAED,UAASwd,YAAT,CAAuBrB,MAAvB,EAA+BjwB,SAA/B,EAA0C4vB,UAA1C,EAAuD;;AAEtD,MAAI5/B,QAAQgQ,UAAUhQ,KAAtB;AACA,MAAIuhC,cAAcvxB,UAAUuxB,WAA5B;;AAEA/B,KAAGU,UAAH,CAAeN,UAAf,EAA2BK,MAA3B;;AAEA,MAAKjwB,UAAU8vB,OAAV,KAAsB,KAA3B,EAAmC;;AAElCN,MAAGW,UAAH,CAAeP,UAAf,EAA2B5/B,KAA3B,EAAkCw/B,GAAGQ,WAArC;AAEA,GAJD,MAIO,IAAKuB,YAAYjqB,KAAZ,KAAsB,CAAE,CAA7B,EAAiC;;AAEvC;;AAEAkoB,MAAGgC,aAAH,CAAkB5B,UAAlB,EAA8B,CAA9B,EAAiC5/B,KAAjC;AAEA,GANM,MAMA,IAAKuhC,YAAYjqB,KAAZ,KAAsB,CAA3B,EAA+B;;AAErCtK,WAAQyD,KAAR,CAAe,yKAAf;AAEA,GAJM,MAIA;;AAEN+uB,MAAGgC,aAAH,CAAkB5B,UAAlB,EAA8B2B,YAAY1xB,MAAZ,GAAqB7P,MAAMqhC,iBAAzD,EACCrhC,MAAMyhC,QAAN,CAAgBF,YAAY1xB,MAA5B,EAAoC0xB,YAAY1xB,MAAZ,GAAqB0xB,YAAYjqB,KAArE,CADD;;AAGAiqB,eAAYjqB,KAAZ,GAAoB,CAAE,CAAtB,CALM,CAKmB;AAEzB;AAED;;AAED;;AAEA,UAASlZ,GAAT,CAAc4R,SAAd,EAA0B;;AAEzB,MAAKA,UAAU0xB,4BAAf,EAA8C1xB,YAAYA,UAAUoX,IAAtB;;AAE9C,SAAOqY,QAAQrhC,GAAR,CAAa4R,SAAb,CAAP;AAEA;;AAED,UAAS2xB,MAAT,CAAiB3xB,SAAjB,EAA6B;;AAE5B,MAAKA,UAAU0xB,4BAAf,EAA8C1xB,YAAYA,UAAUoX,IAAtB;;AAE9C,MAAIA,OAAOqY,QAAQrhC,GAAR,CAAa4R,SAAb,CAAX;;AAEA,MAAKoX,IAAL,EAAY;;AAEXoY,MAAGoC,YAAH,CAAiBxa,KAAK6Y,MAAtB;;AAEAR,WAAQoC,MAAR,CAAgB7xB,SAAhB;AAEA;AAED;;AAED,UAASwM,MAAT,CAAiBxM,SAAjB,EAA4B4vB,UAA5B,EAAyC;;AAExC,MAAK5vB,UAAU0xB,4BAAf,EAA8C1xB,YAAYA,UAAUoX,IAAtB;;AAE9C,MAAIA,OAAOqY,QAAQrhC,GAAR,CAAa4R,SAAb,CAAX;;AAEA,MAAKoX,SAAS7pB,SAAd,EAA0B;;AAEzBkiC,WAAQxzB,GAAR,CAAa+D,SAAb,EAAwB2vB,aAAc3vB,SAAd,EAAyB4vB,UAAzB,CAAxB;AAEA,GAJD,MAIO,IAAKxY,KAAKtD,OAAL,GAAe9T,UAAU8T,OAA9B,EAAwC;;AAE9Cwd,gBAAcla,KAAK6Y,MAAnB,EAA2BjwB,SAA3B,EAAsC4vB,UAAtC;;AAEAxY,QAAKtD,OAAL,GAAe9T,UAAU8T,OAAzB;AAEA;AAED;;AAED,QAAO;;AAEN1lB,OAAKA,GAFC;AAGNujC,UAAQA,MAHF;AAINnlB,UAAQA;;AAJF,EAAP;AAQA;;AAED;;;;;;AAMA,SAASslB,KAAT,CAAgB/jC,CAAhB,EAAmB4M,CAAnB,EAAsB0H,CAAtB,EAAyBW,KAAzB,EAAiC;;AAEhC,MAAKe,EAAL,GAAUhW,KAAK,CAAf;AACA,MAAKiW,EAAL,GAAUrJ,KAAK,CAAf;AACA,MAAKsJ,EAAL,GAAU5B,KAAK,CAAf;AACA,MAAK0vB,MAAL,GAAc/uB,SAAS8uB,MAAME,YAA7B;AAEA;;AAEDF,MAAMG,cAAN,GAAuB,CAAE,KAAF,EAAS,KAAT,EAAgB,KAAhB,EAAuB,KAAvB,EAA8B,KAA9B,EAAqC,KAArC,CAAvB;;AAEAH,MAAME,YAAN,GAAqB,KAArB;;AAEA9jC,OAAO8N,gBAAP,CAAyB81B,MAAM7jC,SAA/B,EAA0C;;AAEzCF,IAAG;;AAEFK,OAAK,YAAY;;AAEhB,UAAO,KAAK2V,EAAZ;AAEA,GANC;;AAQF9H,OAAK,UAAWtO,KAAX,EAAmB;;AAEvB,QAAKoW,EAAL,GAAUpW,KAAV;AACA,QAAK2e,gBAAL;AAEA;;AAbC,EAFsC;;AAmBzC3R,IAAG;;AAEFvM,OAAK,YAAY;;AAEhB,UAAO,KAAK4V,EAAZ;AAEA,GANC;;AAQF/H,OAAK,UAAWtO,KAAX,EAAmB;;AAEvB,QAAKqW,EAAL,GAAUrW,KAAV;AACA,QAAK2e,gBAAL;AAEA;;AAbC,EAnBsC;;AAoCzCjK,IAAG;;AAEFjU,OAAK,YAAY;;AAEhB,UAAO,KAAK6V,EAAZ;AAEA,GANC;;AAQFhI,OAAK,UAAWtO,KAAX,EAAmB;;AAEvB,QAAKsW,EAAL,GAAUtW,KAAV;AACA,QAAK2e,gBAAL;AAEA;;AAbC,EApCsC;;AAqDzCtJ,QAAO;;AAEN5U,OAAK,YAAY;;AAEhB,UAAO,KAAK2jC,MAAZ;AAEA,GANK;;AAQN91B,OAAK,UAAWtO,KAAX,EAAmB;;AAEvB,QAAKokC,MAAL,GAAcpkC,KAAd;AACA,QAAK2e,gBAAL;AAEA;;AAbK;;AArDkC,CAA1C;;AAwEApe,OAAOK,MAAP,CAAeujC,MAAM7jC,SAArB,EAAgC;;AAE/B4U,UAAS,IAFsB;;AAI/B5G,MAAK,UAAWlO,CAAX,EAAc4M,CAAd,EAAiB0H,CAAjB,EAAoBW,KAApB,EAA4B;;AAEhC,OAAKe,EAAL,GAAUhW,CAAV;AACA,OAAKiW,EAAL,GAAUrJ,CAAV;AACA,OAAKsJ,EAAL,GAAU5B,CAAV;AACA,OAAK0vB,MAAL,GAAc/uB,SAAS,KAAK+uB,MAA5B;;AAEA,OAAKzlB,gBAAL;;AAEA,SAAO,IAAP;AAEA,EAf8B;;AAiB/B5P,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,CAAsB,KAAKoH,EAA3B,EAA+B,KAAKC,EAApC,EAAwC,KAAKC,EAA7C,EAAiD,KAAK8tB,MAAtD,CAAP;AAEA,EArB8B;;AAuB/Bn1B,OAAM,UAAWgG,KAAX,EAAmB;;AAExB,OAAKmB,EAAL,GAAUnB,MAAMmB,EAAhB;AACA,OAAKC,EAAL,GAAUpB,MAAMoB,EAAhB;AACA,OAAKC,EAAL,GAAUrB,MAAMqB,EAAhB;AACA,OAAK8tB,MAAL,GAAcnvB,MAAMmvB,MAApB;;AAEA,OAAKzlB,gBAAL;;AAEA,SAAO,IAAP;AAEA,EAlC8B;;AAoC/BnC,wBAAuB,UAAW/P,CAAX,EAAc4I,KAAd,EAAqBwJ,MAArB,EAA8B;;AAEpD,MAAIzS,QAAQb,MAAMa,KAAlB;;AAEA;;AAEA,MAAI4H,KAAKvH,EAAE6D,QAAX;AACA,MAAIgP,MAAMtL,GAAI,CAAJ,CAAV;AAAA,MAAmBuL,MAAMvL,GAAI,CAAJ,CAAzB;AAAA,MAAkCwL,MAAMxL,GAAI,CAAJ,CAAxC;AACA,MAAIyL,MAAMzL,GAAI,CAAJ,CAAV;AAAA,MAAmB0L,MAAM1L,GAAI,CAAJ,CAAzB;AAAA,MAAkC2L,MAAM3L,GAAI,CAAJ,CAAxC;AACA,MAAI4L,MAAM5L,GAAI,CAAJ,CAAV;AAAA,MAAmB6L,MAAM7L,GAAI,CAAJ,CAAzB;AAAA,MAAkC8L,MAAM9L,GAAI,EAAJ,CAAxC;;AAEAqB,UAAQA,SAAS,KAAK+uB,MAAtB;;AAEA,MAAK/uB,UAAU,KAAf,EAAuB;;AAEtB,QAAKgB,EAAL,GAAUxW,KAAK0kC,IAAL,CAAWn4B,MAAOoT,GAAP,EAAY,CAAE,CAAd,EAAiB,CAAjB,CAAX,CAAV;;AAEA,OAAK3f,KAAKqR,GAAL,CAAUsO,GAAV,IAAkB,OAAvB,EAAiC;;AAEhC,SAAKpJ,EAAL,GAAUvW,KAAKwR,KAAL,CAAY,CAAEsO,GAAd,EAAmBG,GAAnB,CAAV;AACA,SAAKxJ,EAAL,GAAUzW,KAAKwR,KAAL,CAAY,CAAEkO,GAAd,EAAmBD,GAAnB,CAAV;AAEA,IALD,MAKO;;AAEN,SAAKlJ,EAAL,GAAUvW,KAAKwR,KAAL,CAAYwO,GAAZ,EAAiBH,GAAjB,CAAV;AACA,SAAKpJ,EAAL,GAAU,CAAV;AAEA;AAED,GAhBD,MAgBO,IAAKjB,UAAU,KAAf,EAAuB;;AAE7B,QAAKe,EAAL,GAAUvW,KAAK0kC,IAAL,CAAW,CAAEn4B,MAAOuT,GAAP,EAAY,CAAE,CAAd,EAAiB,CAAjB,CAAb,CAAV;;AAEA,OAAK9f,KAAKqR,GAAL,CAAUyO,GAAV,IAAkB,OAAvB,EAAiC;;AAEhC,SAAKtJ,EAAL,GAAUxW,KAAKwR,KAAL,CAAYmO,GAAZ,EAAiBM,GAAjB,CAAV;AACA,SAAKxJ,EAAL,GAAUzW,KAAKwR,KAAL,CAAYoO,GAAZ,EAAiBC,GAAjB,CAAV;AAEA,IALD,MAKO;;AAEN,SAAKrJ,EAAL,GAAUxW,KAAKwR,KAAL,CAAY,CAAEuO,GAAd,EAAmBN,GAAnB,CAAV;AACA,SAAKhJ,EAAL,GAAU,CAAV;AAEA;AAED,GAhBM,MAgBA,IAAKjB,UAAU,KAAf,EAAuB;;AAE7B,QAAKe,EAAL,GAAUvW,KAAK0kC,IAAL,CAAWn4B,MAAOyT,GAAP,EAAY,CAAE,CAAd,EAAiB,CAAjB,CAAX,CAAV;;AAEA,OAAKhgB,KAAKqR,GAAL,CAAU2O,GAAV,IAAkB,OAAvB,EAAiC;;AAEhC,SAAKxJ,EAAL,GAAUxW,KAAKwR,KAAL,CAAY,CAAEuO,GAAd,EAAmBE,GAAnB,CAAV;AACA,SAAKxJ,EAAL,GAAUzW,KAAKwR,KAAL,CAAY,CAAEkO,GAAd,EAAmBG,GAAnB,CAAV;AAEA,IALD,MAKO;;AAEN,SAAKrJ,EAAL,GAAU,CAAV;AACA,SAAKC,EAAL,GAAUzW,KAAKwR,KAAL,CAAYoO,GAAZ,EAAiBH,GAAjB,CAAV;AAEA;AAED,GAhBM,MAgBA,IAAKjK,UAAU,KAAf,EAAuB;;AAE7B,QAAKgB,EAAL,GAAUxW,KAAK0kC,IAAL,CAAW,CAAEn4B,MAAOwT,GAAP,EAAY,CAAE,CAAd,EAAiB,CAAjB,CAAb,CAAV;;AAEA,OAAK/f,KAAKqR,GAAL,CAAU0O,GAAV,IAAkB,OAAvB,EAAiC;;AAEhC,SAAKxJ,EAAL,GAAUvW,KAAKwR,KAAL,CAAYwO,GAAZ,EAAiBC,GAAjB,CAAV;AACA,SAAKxJ,EAAL,GAAUzW,KAAKwR,KAAL,CAAYoO,GAAZ,EAAiBH,GAAjB,CAAV;AAEA,IALD,MAKO;;AAEN,SAAKlJ,EAAL,GAAU,CAAV;AACA,SAAKE,EAAL,GAAUzW,KAAKwR,KAAL,CAAY,CAAEkO,GAAd,EAAmBG,GAAnB,CAAV;AAEA;AAED,GAhBM,MAgBA,IAAKrK,UAAU,KAAf,EAAuB;;AAE7B,QAAKiB,EAAL,GAAUzW,KAAK0kC,IAAL,CAAWn4B,MAAOqT,GAAP,EAAY,CAAE,CAAd,EAAiB,CAAjB,CAAX,CAAV;;AAEA,OAAK5f,KAAKqR,GAAL,CAAUuO,GAAV,IAAkB,OAAvB,EAAiC;;AAEhC,SAAKrJ,EAAL,GAAUvW,KAAKwR,KAAL,CAAY,CAAEsO,GAAd,EAAmBD,GAAnB,CAAV;AACA,SAAKrJ,EAAL,GAAUxW,KAAKwR,KAAL,CAAY,CAAEuO,GAAd,EAAmBN,GAAnB,CAAV;AAEA,IALD,MAKO;;AAEN,SAAKlJ,EAAL,GAAU,CAAV;AACA,SAAKC,EAAL,GAAUxW,KAAKwR,KAAL,CAAYmO,GAAZ,EAAiBM,GAAjB,CAAV;AAEA;AAED,GAhBM,MAgBA,IAAKzK,UAAU,KAAf,EAAuB;;AAE7B,QAAKiB,EAAL,GAAUzW,KAAK0kC,IAAL,CAAW,CAAEn4B,MAAOmT,GAAP,EAAY,CAAE,CAAd,EAAiB,CAAjB,CAAb,CAAV;;AAEA,OAAK1f,KAAKqR,GAAL,CAAUqO,GAAV,IAAkB,OAAvB,EAAiC;;AAEhC,SAAKnJ,EAAL,GAAUvW,KAAKwR,KAAL,CAAYwO,GAAZ,EAAiBH,GAAjB,CAAV;AACA,SAAKrJ,EAAL,GAAUxW,KAAKwR,KAAL,CAAYmO,GAAZ,EAAiBF,GAAjB,CAAV;AAEA,IALD,MAKO;;AAEN,SAAKlJ,EAAL,GAAUvW,KAAKwR,KAAL,CAAY,CAAEsO,GAAd,EAAmBG,GAAnB,CAAV;AACA,SAAKzJ,EAAL,GAAU,CAAV;AAEA;AAED,GAhBM,MAgBA;;AAENhH,WAAQC,IAAR,CAAc,oEAAoE+F,KAAlF;AAEA;;AAED,OAAK+uB,MAAL,GAAc/uB,KAAd;;AAEA,MAAKwJ,WAAW,KAAhB,EAAwB,KAAKF,gBAAL;;AAExB,SAAO,IAAP;AAEA,EA7J8B;;AA+J/B6lB,oBAAmB,YAAY;;AAE9B,MAAIvoB,SAAS,IAAIpJ,OAAJ,EAAb;;AAEA,SAAO,SAAS2xB,iBAAT,CAA4BruB,CAA5B,EAA+Bd,KAA/B,EAAsCwJ,MAAtC,EAA+C;;AAErD5C,UAAO/F,0BAAP,CAAmCC,CAAnC;;AAEA,UAAO,KAAKqG,qBAAL,CAA4BP,MAA5B,EAAoC5G,KAApC,EAA2CwJ,MAA3C,CAAP;AAEA,GAND;AAQA,EAZkB,EA/JY;;AA6K/B4lB,iBAAgB,UAAWv1B,CAAX,EAAcmG,KAAd,EAAsB;;AAErC,SAAO,KAAK/G,GAAL,CAAUY,EAAE9O,CAAZ,EAAe8O,EAAElC,CAAjB,EAAoBkC,EAAEwF,CAAtB,EAAyBW,SAAS,KAAK+uB,MAAvC,CAAP;AAEA,EAjL8B;;AAmL/BM,UAAS,YAAY;;AAEpB;;AAEA,MAAIvuB,IAAI,IAAIgH,UAAJ,EAAR;;AAEA,SAAO,SAASunB,OAAT,CAAkBC,QAAlB,EAA6B;;AAEnCxuB,KAAEyI,YAAF,CAAgB,IAAhB;;AAEA,UAAO,KAAK4lB,iBAAL,CAAwBruB,CAAxB,EAA2BwuB,QAA3B,CAAP;AAEA,GAND;AAQA,EAdQ,EAnLsB;;AAmM/B3yB,SAAQ,UAAWiD,KAAX,EAAmB;;AAE1B,SAASA,MAAMmB,EAAN,KAAa,KAAKA,EAApB,IAA8BnB,MAAMoB,EAAN,KAAa,KAAKA,EAAhD,IAA0DpB,MAAMqB,EAAN,KAAa,KAAKA,EAA5E,IAAsFrB,MAAMmvB,MAAN,KAAiB,KAAKA,MAAnH;AAEA,EAvM8B;;AAyM/BnyB,YAAW,UAAW5P,KAAX,EAAmB;;AAE7B,OAAK+T,EAAL,GAAU/T,MAAO,CAAP,CAAV;AACA,OAAKgU,EAAL,GAAUhU,MAAO,CAAP,CAAV;AACA,OAAKiU,EAAL,GAAUjU,MAAO,CAAP,CAAV;AACA,MAAKA,MAAO,CAAP,MAAezC,SAApB,EAAgC,KAAKwkC,MAAL,GAAc/hC,MAAO,CAAP,CAAd;;AAEhC,OAAKsc,gBAAL;;AAEA,SAAO,IAAP;AAEA,EApN8B;;AAsN/BxM,UAAS,UAAW9P,KAAX,EAAkB6P,MAAlB,EAA2B;;AAEnC,MAAK7P,UAAUzC,SAAf,EAA2ByC,QAAQ,EAAR;AAC3B,MAAK6P,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;;AAE5B7P,QAAO6P,MAAP,IAAkB,KAAKkE,EAAvB;AACA/T,QAAO6P,SAAS,CAAhB,IAAsB,KAAKmE,EAA3B;AACAhU,QAAO6P,SAAS,CAAhB,IAAsB,KAAKoE,EAA3B;AACAjU,QAAO6P,SAAS,CAAhB,IAAsB,KAAKkyB,MAA3B;;AAEA,SAAO/hC,KAAP;AAEA,EAlO8B;;AAoO/BuiC,YAAW,UAAWC,cAAX,EAA4B;;AAEtC,MAAKA,cAAL,EAAsB;;AAErB,UAAOA,eAAev2B,GAAf,CAAoB,KAAK8H,EAAzB,EAA6B,KAAKC,EAAlC,EAAsC,KAAKC,EAA3C,CAAP;AAEA,GAJD,MAIO;;AAEN,UAAO,IAAI1B,OAAJ,CAAa,KAAKwB,EAAlB,EAAsB,KAAKC,EAA3B,EAA+B,KAAKC,EAApC,CAAP;AAEA;AAED,EAhP8B;;AAkP/B+K,WAAU,UAAWC,QAAX,EAAsB;;AAE/B,OAAK3C,gBAAL,GAAwB2C,QAAxB;;AAEA,SAAO,IAAP;AAEA,EAxP8B;;AA0P/B3C,mBAAkB,YAAY,CAAE;;AA1PD,CAAhC;;AA8PA;;;;AAIA,SAASmmB,MAAT,GAAkB;;AAEjB,MAAKC,IAAL,GAAY,IAAI,CAAhB;AAEA;;AAEDxkC,OAAOK,MAAP,CAAekkC,OAAOxkC,SAAtB,EAAiC;;AAEhCgO,MAAK,UAAW02B,OAAX,EAAqB;;AAEzB,OAAKD,IAAL,GAAY,KAAKC,OAAL,GAAe,CAA3B;AAEA,EAN+B;;AAQhCC,SAAQ,UAAWD,OAAX,EAAqB;;AAE5B,OAAKD,IAAL,IAAa,KAAKC,OAAL,GAAe,CAA5B;AAEA,EAZ+B;;AAchCE,SAAQ,UAAWF,OAAX,EAAqB;;AAE5B,OAAKD,IAAL,IAAa,KAAKC,OAAL,GAAe,CAA5B;AAEA,EAlB+B;;AAoBhCG,UAAS,UAAWH,OAAX,EAAqB;;AAE7B,OAAKD,IAAL,IAAa,EAAI,KAAKC,OAAL,GAAe,CAAnB,CAAb;AAEA,EAxB+B;;AA0BhCI,OAAM,UAAWC,MAAX,EAAoB;;AAEzB,SAAO,CAAE,KAAKN,IAAL,GAAYM,OAAON,IAArB,MAAgC,CAAvC;AAEA;;AA9B+B,CAAjC;;AAkCA;;;;;;;;AAQA,IAAIO,aAAa,CAAjB;;AAEA,SAASC,QAAT,GAAoB;;AAEnBhlC,QAAOC,cAAP,CAAuB,IAAvB,EAA6B,IAA7B,EAAmC,EAAER,OAAOslC,YAAT,EAAnC;;AAEA,MAAKp5B,IAAL,GAAYX,MAAMI,YAAN,EAAZ;;AAEA,MAAK8Z,IAAL,GAAY,EAAZ;AACA,MAAKhkB,IAAL,GAAY,UAAZ;;AAEA,MAAK+jC,MAAL,GAAc,IAAd;AACA,MAAKC,QAAL,GAAgB,EAAhB;;AAEA,MAAKnuB,EAAL,GAAUiuB,SAASG,SAAT,CAAmB32B,KAAnB,EAAV;;AAEA,KAAI8M,WAAW,IAAIjH,OAAJ,EAAf;AACA,KAAI6P,WAAW,IAAI0f,KAAJ,EAAf;AACA,KAAIroB,aAAa,IAAIqB,UAAJ,EAAjB;AACA,KAAIvC,QAAQ,IAAIhG,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAZ;;AAEA,UAAS+wB,gBAAT,GAA4B;;AAE3B7pB,aAAW8C,YAAX,CAAyB6F,QAAzB,EAAmC,KAAnC;AAEA;;AAED,UAASmhB,kBAAT,GAA8B;;AAE7BnhB,WAAS+f,iBAAT,CAA4B1oB,UAA5B,EAAwClc,SAAxC,EAAmD,KAAnD;AAEA;;AAED6kB,UAASpD,QAAT,CAAmBskB,gBAAnB;AACA7pB,YAAWuF,QAAX,CAAqBukB,kBAArB;;AAEArlC,QAAO8N,gBAAP,CAAyB,IAAzB,EAA+B;AAC9BwN,YAAU;AACTgqB,eAAY,IADH;AAET7lC,UAAO6b;AAFE,GADoB;AAK9B4I,YAAU;AACTohB,eAAY,IADH;AAET7lC,UAAOykB;AAFE,GALoB;AAS9B3I,cAAY;AACX+pB,eAAY,IADD;AAEX7lC,UAAO8b;AAFI,GATkB;AAa9BlB,SAAO;AACNirB,eAAY,IADN;AAEN7lC,UAAO4a;AAFD,GAbuB;AAiB9BkrB,mBAAiB;AAChB9lC,UAAO,IAAI6S,OAAJ;AADS,GAjBa;AAoB9B8c,gBAAc;AACb3vB,UAAO,IAAIikB,OAAJ;AADM;AApBgB,EAA/B;;AAyBA,MAAKhI,MAAL,GAAc,IAAIpJ,OAAJ,EAAd;AACA,MAAK2P,WAAL,GAAmB,IAAI3P,OAAJ,EAAnB;;AAEA,MAAKiT,gBAAL,GAAwByf,SAASQ,uBAAjC;AACA,MAAKC,sBAAL,GAA8B,KAA9B;;AAEA,MAAKX,MAAL,GAAc,IAAIP,MAAJ,EAAd;AACA,MAAKmB,OAAL,GAAe,IAAf;;AAEA,MAAKC,UAAL,GAAkB,KAAlB;AACA,MAAKC,aAAL,GAAqB,KAArB;;AAEA,MAAKC,aAAL,GAAqB,IAArB;AACA,MAAKC,WAAL,GAAmB,CAAnB;;AAEA,MAAKC,QAAL,GAAgB,EAAhB;AAEA;;AAEDf,SAASG,SAAT,GAAqB,IAAI9wB,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAArB;AACA2wB,SAASQ,uBAAT,GAAmC,IAAnC;;AAEAR,SAASjlC,SAAT,GAAqBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAe9kB,gBAAgBjB,SAA/B,CAAf,EAA2D;;AAE/E0O,cAAau2B,QAFkE;;AAI/EgB,aAAY,IAJmE;;AAM/EC,iBAAgB,YAAY,CAAE,CANiD;AAO/EC,gBAAe,YAAY,CAAE,CAPkD;;AAS/EC,cAAa,UAAWzqB,MAAX,EAAoB;;AAEhC,OAAKA,MAAL,CAAYzE,gBAAZ,CAA8ByE,MAA9B,EAAsC,KAAKA,MAA3C;;AAEA,OAAKA,MAAL,CAAYF,SAAZ,CAAuB,KAAKF,QAA5B,EAAsC,KAAKC,UAA3C,EAAuD,KAAKlB,KAA5D;AAEA,EAf8E;;AAiB/E+G,kBAAiB,UAAWxL,CAAX,EAAe;;AAE/B,OAAK2F,UAAL,CAAgBrE,WAAhB,CAA6BtB,CAA7B;;AAEA,SAAO,IAAP;AAEA,EAvB8E;;AAyB/EwwB,2BAA0B,UAAWprB,IAAX,EAAiBnK,KAAjB,EAAyB;;AAElD;;AAEA,OAAK0K,UAAL,CAAgBsD,gBAAhB,CAAkC7D,IAAlC,EAAwCnK,KAAxC;AAEA,EA/B8E;;AAiC/Ew1B,uBAAsB,UAAW3xB,KAAX,EAAmB;;AAExC,OAAK6G,UAAL,CAAgB8C,YAAhB,CAA8B3J,KAA9B,EAAqC,IAArC;AAEA,EArC8E;;AAuC/E4xB,wBAAuB,UAAWp6B,CAAX,EAAe;;AAErC;;AAEA,OAAKqP,UAAL,CAAgBU,qBAAhB,CAAuC/P,CAAvC;AAEA,EA7C8E;;AA+C/Eq6B,4BAA2B,UAAW3wB,CAAX,EAAe;;AAEzC;;AAEA,OAAK2F,UAAL,CAAgB7M,IAAhB,CAAsBkH,CAAtB;AAEA,EArD8E;;AAuD/E4wB,eAAc,YAAY;;AAEzB;AACA;;AAEA,MAAIC,KAAK,IAAI7pB,UAAJ,EAAT;;AAEA,SAAO,SAAS4pB,YAAT,CAAuBxrB,IAAvB,EAA6BnK,KAA7B,EAAqC;;AAE3C41B,MAAG5nB,gBAAH,CAAqB7D,IAArB,EAA2BnK,KAA3B;;AAEA,QAAK0K,UAAL,CAAgB9L,QAAhB,CAA0Bg3B,EAA1B;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAjBa,EAvDiE;;AA0E/EC,oBAAmB,YAAY;;AAE9B;AACA;AACA;;AAEA,MAAID,KAAK,IAAI7pB,UAAJ,EAAT;;AAEA,SAAO,SAAS8pB,iBAAT,CAA4B1rB,IAA5B,EAAkCnK,KAAlC,EAA0C;;AAEhD41B,MAAG5nB,gBAAH,CAAqB7D,IAArB,EAA2BnK,KAA3B;;AAEA,QAAK0K,UAAL,CAAgBrE,WAAhB,CAA6BuvB,EAA7B;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAlBkB,EA1E4D;;AA8F/EE,UAAS,YAAY;;AAEpB,MAAIp1B,KAAK,IAAI8C,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAT;;AAEA,SAAO,SAASsyB,OAAT,CAAkB91B,KAAlB,EAA0B;;AAEhC,UAAO,KAAK21B,YAAL,CAAmBj1B,EAAnB,EAAuBV,KAAvB,CAAP;AAEA,GAJD;AAMA,EAVQ,EA9FsE;;AA0G/E+1B,UAAS,YAAY;;AAEpB,MAAIr1B,KAAK,IAAI8C,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAT;;AAEA,SAAO,SAASuyB,OAAT,CAAkB/1B,KAAlB,EAA0B;;AAEhC,UAAO,KAAK21B,YAAL,CAAmBj1B,EAAnB,EAAuBV,KAAvB,CAAP;AAEA,GAJD;AAMA,EAVQ,EA1GsE;;AAsH/Eg2B,UAAS,YAAY;;AAEpB,MAAIt1B,KAAK,IAAI8C,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAT;;AAEA,SAAO,SAASwyB,OAAT,CAAkBh2B,KAAlB,EAA0B;;AAEhC,UAAO,KAAK21B,YAAL,CAAmBj1B,EAAnB,EAAuBV,KAAvB,CAAP;AAEA,GAJD;AAMA,EAVQ,EAtHsE;;AAkI/Ei2B,kBAAiB,YAAY;;AAE5B;AACA;;AAEA,MAAIv1B,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAASyyB,eAAT,CAA0B9rB,IAA1B,EAAgCmW,QAAhC,EAA2C;;AAEjD5f,MAAG7C,IAAH,CAASsM,IAAT,EAAgBoG,eAAhB,CAAiC,KAAK7F,UAAtC;;AAEA,QAAKD,QAAL,CAAc1M,GAAd,CAAmB2C,GAAG7B,cAAH,CAAmByhB,QAAnB,CAAnB;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAjBgB,EAlI8D;;AAqJ/E4V,aAAY,YAAY;;AAEvB,MAAIx1B,KAAK,IAAI8C,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAT;;AAEA,SAAO,SAAS0yB,UAAT,CAAqB5V,QAArB,EAAgC;;AAEtC,UAAO,KAAK2V,eAAL,CAAsBv1B,EAAtB,EAA0B4f,QAA1B,CAAP;AAEA,GAJD;AAMA,EAVW,EArJmE;;AAiK/E6V,aAAY,YAAY;;AAEvB,MAAIz1B,KAAK,IAAI8C,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAT;;AAEA,SAAO,SAAS2yB,UAAT,CAAqB7V,QAArB,EAAgC;;AAEtC,UAAO,KAAK2V,eAAL,CAAsBv1B,EAAtB,EAA0B4f,QAA1B,CAAP;AAEA,GAJD;AAMA,EAVW,EAjKmE;;AA6K/E8V,aAAY,YAAY;;AAEvB,MAAI11B,KAAK,IAAI8C,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAT;;AAEA,SAAO,SAAS4yB,UAAT,CAAqB9V,QAArB,EAAgC;;AAEtC,UAAO,KAAK2V,eAAL,CAAsBv1B,EAAtB,EAA0B4f,QAA1B,CAAP;AAEA,GAJD;AAMA,EAVW,EA7KmE;;AAyL/E+V,eAAc,UAAWzrB,MAAX,EAAoB;;AAEjC,SAAOA,OAAOnC,YAAP,CAAqB,KAAK2I,WAA1B,CAAP;AAEA,EA7L8E;;AA+L/EklB,eAAc,YAAY;;AAEzB,MAAIjY,KAAK,IAAI5c,OAAJ,EAAT;;AAEA,SAAO,SAAS60B,YAAT,CAAuB1rB,MAAvB,EAAgC;;AAEtC,UAAOA,OAAOnC,YAAP,CAAqB4V,GAAGtV,UAAH,CAAe,KAAKqI,WAApB,CAArB,CAAP;AAEA,GAJD;AAMA,EAVa,EA/LiE;;AA2M/EpL,SAAQ,YAAY;;AAEnB;;AAEA,MAAIqY,KAAK,IAAI5c,OAAJ,EAAT;AACA,MAAImJ,SAAS,IAAIpH,OAAJ,EAAb;;AAEA,SAAO,SAASwC,MAAT,CAAiBhX,CAAjB,EAAoB4M,CAApB,EAAuB0H,CAAvB,EAA2B;;AAEjC,OAAKtU,EAAEmhB,SAAP,EAAmB;;AAElBvF,WAAO/M,IAAP,CAAa7O,CAAb;AAEA,IAJD,MAIO;;AAEN4b,WAAO1N,GAAP,CAAYlO,CAAZ,EAAe4M,CAAf,EAAkB0H,CAAlB;AAEA;;AAED,OAAK,KAAKizB,QAAV,EAAqB;;AAEpBlY,OAAGrY,MAAH,CAAW,KAAKyE,QAAhB,EAA0BG,MAA1B,EAAkC,KAAK1E,EAAvC;AAEA,IAJD,MAIO;;AAENmY,OAAGrY,MAAH,CAAW4E,MAAX,EAAmB,KAAKH,QAAxB,EAAkC,KAAKvE,EAAvC;AAEA;;AAED,QAAKwE,UAAL,CAAgBU,qBAAhB,CAAuCiT,EAAvC;AAEA,GAxBD;AA0BA,EAjCO,EA3MuE;;AA8O/EtgB,MAAK,UAAW4b,MAAX,EAAoB;;AAExB,MAAK9pB,UAAUC,MAAV,GAAmB,CAAxB,EAA4B;;AAE3B,QAAM,IAAIqB,IAAI,CAAd,EAAiBA,IAAItB,UAAUC,MAA/B,EAAuCqB,GAAvC,EAA8C;;AAE7C,SAAK4M,GAAL,CAAUlO,UAAWsB,CAAX,CAAV;AAEA;;AAED,UAAO,IAAP;AAEA;;AAED,MAAKwoB,WAAW,IAAhB,EAAuB;;AAEtB1b,WAAQyD,KAAR,CAAe,iEAAf,EAAkFiY,MAAlF;AACA,UAAO,IAAP;AAEA;;AAED,MAAOA,UAAUA,OAAOwb,UAAxB,EAAuC;;AAEtC,OAAKxb,OAAOya,MAAP,KAAkB,IAAvB,EAA8B;;AAE7Bza,WAAOya,MAAP,CAAcxB,MAAd,CAAsBjZ,MAAtB;AAEA;;AAEDA,UAAOya,MAAP,GAAgB,IAAhB;AACAza,UAAO5oB,aAAP,CAAsB,EAAEV,MAAM,OAAR,EAAtB;;AAEA,QAAKgkC,QAAL,CAAc3jC,IAAd,CAAoBipB,MAApB;AAEA,GAbD,MAaO;;AAEN1b,WAAQyD,KAAR,CAAe,+DAAf,EAAgFiY,MAAhF;AAEA;;AAED,SAAO,IAAP;AAEA,EAxR8E;;AA0R/EiZ,SAAQ,UAAWjZ,MAAX,EAAoB;;AAE3B,MAAK9pB,UAAUC,MAAV,GAAmB,CAAxB,EAA4B;;AAE3B,QAAM,IAAIqB,IAAI,CAAd,EAAiBA,IAAItB,UAAUC,MAA/B,EAAuCqB,GAAvC,EAA8C;;AAE7C,SAAKyhC,MAAL,CAAa/iC,UAAWsB,CAAX,CAAb;AAEA;;AAED,UAAO,IAAP;AAEA;;AAED,MAAIvB,QAAQ,KAAKykC,QAAL,CAAc5jC,OAAd,CAAuBkpB,MAAvB,CAAZ;;AAEA,MAAK/pB,UAAU,CAAE,CAAjB,EAAqB;;AAEpB+pB,UAAOya,MAAP,GAAgB,IAAhB;;AAEAza,UAAO5oB,aAAP,CAAsB,EAAEV,MAAM,SAAR,EAAtB;;AAEA,QAAKgkC,QAAL,CAAcvjC,MAAd,CAAsBlB,KAAtB,EAA6B,CAA7B;AAEA;;AAED,SAAO,IAAP;AAEA,EAtT8E;;AAwT/E4mC,gBAAe,UAAWC,EAAX,EAAgB;;AAE9B,SAAO,KAAKC,mBAAL,CAA0B,IAA1B,EAAgCD,EAAhC,CAAP;AAEA,EA5T8E;;AA8T/EE,kBAAiB,UAAWtiB,IAAX,EAAkB;;AAElC,SAAO,KAAKqiB,mBAAL,CAA0B,MAA1B,EAAkCriB,IAAlC,CAAP;AAEA,EAlU8E;;AAoU/EqiB,sBAAqB,UAAWriB,IAAX,EAAiBzlB,KAAjB,EAAyB;;AAE7C,MAAK,KAAMylB,IAAN,MAAiBzlB,KAAtB,EAA8B,OAAO,IAAP;;AAE9B,OAAM,IAAIuC,IAAI,CAAR,EAAWC,IAAI,KAAKijC,QAAL,CAAcvkC,MAAnC,EAA2CqB,IAAIC,CAA/C,EAAkDD,GAAlD,EAAyD;;AAExD,OAAIylC,QAAQ,KAAKvC,QAAL,CAAeljC,CAAf,CAAZ;AACA,OAAIwoB,SAASid,MAAMF,mBAAN,CAA2BriB,IAA3B,EAAiCzlB,KAAjC,CAAb;;AAEA,OAAK+qB,WAAWnrB,SAAhB,EAA4B;;AAE3B,WAAOmrB,MAAP;AAEA;AAED;;AAED,SAAOnrB,SAAP;AAEA,EAvV8E;;AAyV/EqoC,mBAAkB,UAAWpnC,MAAX,EAAoB;;AAErC,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,4DAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,OAAKoX,iBAAL,CAAwB,IAAxB;;AAEA,SAAOnrB,OAAOkjB,qBAAP,CAA8B,KAAKvB,WAAnC,CAAP;AAEA,EAtW8E;;AAwW/E0lB,qBAAoB,YAAY;;AAE/B,MAAIrsB,WAAW,IAAIjH,OAAJ,EAAf;AACA,MAAIgG,QAAQ,IAAIhG,OAAJ,EAAZ;;AAEA,SAAO,SAASszB,kBAAT,CAA6BrnC,MAA7B,EAAsC;;AAE5C,OAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,8DAAd;AACAzO,aAAS,IAAIsc,UAAJ,EAAT;AAEA;;AAED,QAAK6O,iBAAL,CAAwB,IAAxB;;AAEA,QAAKxJ,WAAL,CAAiBzG,SAAjB,CAA4BF,QAA5B,EAAsChb,MAAtC,EAA8C+Z,KAA9C;;AAEA,UAAO/Z,MAAP;AAEA,GAfD;AAiBA,EAtBmB,EAxW2D;;AAgY/EsnC,gBAAe,YAAY;;AAE1B,MAAItsB,WAAW,IAAIjH,OAAJ,EAAf;AACA,MAAIkH,aAAa,IAAIqB,UAAJ,EAAjB;;AAEA,SAAO,SAASgrB,aAAT,CAAwBtnC,MAAxB,EAAiC;;AAEvC,OAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,yDAAd;AACAzO,aAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,QAAKoX,iBAAL,CAAwB,IAAxB;;AAEA,QAAKxJ,WAAL,CAAiBzG,SAAjB,CAA4BF,QAA5B,EAAsCC,UAAtC,EAAkDjb,MAAlD;;AAEA,UAAOA,MAAP;AAEA,GAfD;AAiBA,EAtBc,EAhYgE;;AAwZ/EunC,oBAAmB,YAAY;;AAE9B,MAAItsB,aAAa,IAAIqB,UAAJ,EAAjB;;AAEA,SAAO,SAASirB,iBAAT,CAA4BvnC,MAA5B,EAAqC;;AAE3C,OAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,6DAAd;AACAzO,aAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,QAAKszB,kBAAL,CAAyBpsB,UAAzB;;AAEA,UAAOjb,OAAOyN,GAAP,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,EAAsBqT,eAAtB,CAAuC7F,UAAvC,CAAP;AAEA,GAbD;AAeA,EAnBkB,EAxZ4D;;AA6a/EusB,UAAS,YAAY,CAAE,CA7awD;;AA+a/E5c,WAAU,UAAWnK,QAAX,EAAsB;;AAE/BA,WAAU,IAAV;;AAEA,MAAImkB,WAAW,KAAKA,QAApB;;AAEA,OAAM,IAAIljC,IAAI,CAAR,EAAWC,IAAIijC,SAASvkC,MAA9B,EAAsCqB,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;;AAEnDkjC,YAAUljC,CAAV,EAAckpB,QAAd,CAAwBnK,QAAxB;AAEA;AAED,EA3b8E;;AA6b/EgnB,kBAAiB,UAAWhnB,QAAX,EAAsB;;AAEtC,MAAK,KAAK2kB,OAAL,KAAiB,KAAtB,EAA8B;;AAE9B3kB,WAAU,IAAV;;AAEA,MAAImkB,WAAW,KAAKA,QAApB;;AAEA,OAAM,IAAIljC,IAAI,CAAR,EAAWC,IAAIijC,SAASvkC,MAA9B,EAAsCqB,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;;AAEnDkjC,YAAUljC,CAAV,EAAc+lC,eAAd,CAA+BhnB,QAA/B;AAEA;AAED,EA3c8E;;AA6c/EinB,oBAAmB,UAAWjnB,QAAX,EAAsB;;AAExC,MAAIkkB,SAAS,KAAKA,MAAlB;;AAEA,MAAKA,WAAW,IAAhB,EAAuB;;AAEtBlkB,YAAUkkB,MAAV;;AAEAA,UAAO+C,iBAAP,CAA0BjnB,QAA1B;AAEA;AAED,EAzd8E;;AA2d/EiF,eAAc,YAAY;;AAEzB,OAAKtK,MAAL,CAAYL,OAAZ,CAAqB,KAAKC,QAA1B,EAAoC,KAAKC,UAAzC,EAAqD,KAAKlB,KAA1D;;AAEA,OAAKorB,sBAAL,GAA8B,IAA9B;AAEA,EAje8E;;AAme/Eha,oBAAmB,UAAWwc,KAAX,EAAmB;;AAErC,MAAK,KAAK1iB,gBAAV,EAA6B,KAAKS,YAAL;;AAE7B,MAAK,KAAKyf,sBAAL,IAA+BwC,KAApC,EAA4C;;AAE3C,OAAK,KAAKhD,MAAL,KAAgB,IAArB,EAA4B;;AAE3B,SAAKhjB,WAAL,CAAiBvT,IAAjB,CAAuB,KAAKgN,MAA5B;AAEA,IAJD,MAIO;;AAEN,SAAKuG,WAAL,CAAiBhL,gBAAjB,CAAmC,KAAKguB,MAAL,CAAYhjB,WAA/C,EAA4D,KAAKvG,MAAjE;AAEA;;AAED,QAAK+pB,sBAAL,GAA8B,KAA9B;;AAEAwC,WAAQ,IAAR;AAEA;;AAED;;AAEA,MAAI/C,WAAW,KAAKA,QAApB;;AAEA,OAAM,IAAIljC,IAAI,CAAR,EAAWC,IAAIijC,SAASvkC,MAA9B,EAAsCqB,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;;AAEnDkjC,YAAUljC,CAAV,EAAcypB,iBAAd,CAAiCwc,KAAjC;AAEA;AAED,EAngB8E;;AAqgB/EhiB,SAAQ,UAAWC,IAAX,EAAkB;;AAEzB;AACA,MAAIC,eAAiBD,SAAS7mB,SAAT,IAAsB,OAAO6mB,IAAP,KAAgB,QAA3D;;AAEA,MAAI1lB,SAAS,EAAb;;AAEA;AACA;AACA;AACA,MAAK2lB,YAAL,EAAoB;;AAEnB;AACAD,UAAO;AACNgiB,gBAAY,EADN;AAENC,eAAW,EAFL;AAGN/hB,cAAU,EAHJ;AAINiB,YAAQ,EAJF;AAKN+gB,YAAQ;AALF,IAAP;;AAQA5nC,UAAO0mB,QAAP,GAAkB;AACjBtB,aAAS,GADQ;AAEjB1kB,UAAM,QAFW;AAGjBimB,eAAW;AAHM,IAAlB;AAMA;;AAED;;AAEA,MAAIqD,SAAS,EAAb;;AAEAA,SAAO7e,IAAP,GAAc,KAAKA,IAAnB;AACA6e,SAAOtpB,IAAP,GAAc,KAAKA,IAAnB;;AAEA,MAAK,KAAKgkB,IAAL,KAAc,EAAnB,EAAwBsF,OAAOtF,IAAP,GAAc,KAAKA,IAAnB;AACxB,MAAK,KAAKygB,UAAL,KAAoB,IAAzB,EAAgCnb,OAAOmb,UAAP,GAAoB,IAApB;AAChC,MAAK,KAAKC,aAAL,KAAuB,IAA5B,EAAmCpb,OAAOob,aAAP,GAAuB,IAAvB;AACnC,MAAK,KAAKF,OAAL,KAAiB,KAAtB,EAA8Blb,OAAOkb,OAAP,GAAiB,KAAjB;AAC9B,MAAK,KAAKG,aAAL,KAAuB,KAA5B,EAAoCrb,OAAOqb,aAAP,GAAuB,KAAvB;AACpC,MAAK,KAAKC,WAAL,KAAqB,CAA1B,EAA8Btb,OAAOsb,WAAP,GAAqB,KAAKA,WAA1B;AAC9B,MAAKuC,KAAKC,SAAL,CAAgB,KAAKvC,QAArB,MAAoC,IAAzC,EAAgDvb,OAAOub,QAAP,GAAkB,KAAKA,QAAvB;;AAEhDvb,SAAO9O,MAAP,GAAgB,KAAKA,MAAL,CAAY9J,OAAZ,EAAhB;;AAEA,MAAK,KAAK2T,gBAAL,KAA0B,KAA/B,EAAuCiF,OAAOjF,gBAAP,GAA0B,KAA1B;;AAEvC;;AAEA,WAASgjB,SAAT,CAAoBC,OAApB,EAA6BC,OAA7B,EAAuC;;AAEtC,OAAKD,QAASC,QAAQ98B,IAAjB,MAA4BtM,SAAjC,EAA6C;;AAE5CmpC,YAASC,QAAQ98B,IAAjB,IAA0B88B,QAAQxiB,MAAR,CAAgBC,IAAhB,CAA1B;AAEA;;AAED,UAAOuiB,QAAQ98B,IAAf;AAEA;;AAED,MAAK,KAAKyf,QAAL,KAAkB/rB,SAAvB,EAAmC;;AAElCmrB,UAAOY,QAAP,GAAkBmd,UAAWriB,KAAKgiB,UAAhB,EAA4B,KAAK9c,QAAjC,CAAlB;;AAEA,OAAIsd,aAAa,KAAKtd,QAAL,CAAcsd,UAA/B;;AAEA,OAAKA,eAAerpC,SAAf,IAA4BqpC,WAAWN,MAAX,KAAsB/oC,SAAvD,EAAmE;;AAElE,QAAI+oC,SAASM,WAAWN,MAAxB;;AAEA,QAAKrP,MAAMC,OAAN,CAAeoP,MAAf,CAAL,EAA+B;;AAE9B,UAAM,IAAIpmC,IAAI,CAAR,EAAWC,IAAImmC,OAAOznC,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,UAAI2mC,QAAQP,OAAQpmC,CAAR,CAAZ;;AAEAumC,gBAAWriB,KAAKkiB,MAAhB,EAAwBO,KAAxB;AAEA;AAED,KAVD,MAUO;;AAENJ,eAAWriB,KAAKkiB,MAAhB,EAAwBA,MAAxB;AAEA;AAED;AAED;;AAED,MAAK,KAAKQ,QAAL,KAAkBvpC,SAAvB,EAAmC;;AAElC,OAAK05B,MAAMC,OAAN,CAAe,KAAK4P,QAApB,CAAL,EAAsC;;AAErC,QAAIC,QAAQ,EAAZ;;AAEA,SAAM,IAAI7mC,IAAI,CAAR,EAAWC,IAAI,KAAK2mC,QAAL,CAAcjoC,MAAnC,EAA2CqB,IAAIC,CAA/C,EAAkDD,GAAlD,EAAyD;;AAExD6mC,WAAMtnC,IAAN,CAAYgnC,UAAWriB,KAAKiiB,SAAhB,EAA2B,KAAKS,QAAL,CAAe5mC,CAAf,CAA3B,CAAZ;AAEA;;AAEDwoB,WAAOoe,QAAP,GAAkBC,KAAlB;AAEA,IAZD,MAYO;;AAENre,WAAOoe,QAAP,GAAkBL,UAAWriB,KAAKiiB,SAAhB,EAA2B,KAAKS,QAAhC,CAAlB;AAEA;AAED;;AAED;;AAEA,MAAK,KAAK1D,QAAL,CAAcvkC,MAAd,GAAuB,CAA5B,EAAgC;;AAE/B6pB,UAAO0a,QAAP,GAAkB,EAAlB;;AAEA,QAAM,IAAIljC,IAAI,CAAd,EAAiBA,IAAI,KAAKkjC,QAAL,CAAcvkC,MAAnC,EAA2CqB,GAA3C,EAAkD;;AAEjDwoB,WAAO0a,QAAP,CAAgB3jC,IAAhB,CAAsB,KAAK2jC,QAAL,CAAeljC,CAAf,EAAmBikB,MAAnB,CAA2BC,IAA3B,EAAkCsE,MAAxD;AAEA;AAED;;AAED,MAAKrE,YAAL,EAAoB;;AAEnB,OAAI+hB,aAAaY,iBAAkB5iB,KAAKgiB,UAAvB,CAAjB;AACA,OAAIC,YAAYW,iBAAkB5iB,KAAKiiB,SAAvB,CAAhB;AACA,OAAI/hB,WAAW0iB,iBAAkB5iB,KAAKE,QAAvB,CAAf;AACA,OAAIiB,SAASyhB,iBAAkB5iB,KAAKmB,MAAvB,CAAb;AACA,OAAI+gB,SAASU,iBAAkB5iB,KAAKkiB,MAAvB,CAAb;;AAEA,OAAKF,WAAWvnC,MAAX,GAAoB,CAAzB,EAA6BH,OAAO0nC,UAAP,GAAoBA,UAApB;AAC7B,OAAKC,UAAUxnC,MAAV,GAAmB,CAAxB,EAA4BH,OAAO2nC,SAAP,GAAmBA,SAAnB;AAC5B,OAAK/hB,SAASzlB,MAAT,GAAkB,CAAvB,EAA2BH,OAAO4lB,QAAP,GAAkBA,QAAlB;AAC3B,OAAKiB,OAAO1mB,MAAP,GAAgB,CAArB,EAAyBH,OAAO6mB,MAAP,GAAgBA,MAAhB;AACzB,OAAK+gB,OAAOznC,MAAP,GAAgB,CAArB,EAAyBH,OAAO4nC,MAAP,GAAgBA,MAAhB;AAEzB;;AAED5nC,SAAOgqB,MAAP,GAAgBA,MAAhB;;AAEA,SAAOhqB,MAAP;;AAEA;AACA;AACA;AACA,WAASsoC,gBAAT,CAA2BC,KAA3B,EAAmC;;AAElC,OAAIC,SAAS,EAAb;AACA,QAAM,IAAIC,GAAV,IAAiBF,KAAjB,EAAyB;;AAExB,QAAI7f,OAAO6f,MAAOE,GAAP,CAAX;AACA,WAAO/f,KAAKhC,QAAZ;AACA8hB,WAAOznC,IAAP,CAAa2nB,IAAb;AAEA;AACD,UAAO8f,MAAP;AAEA;AAED,EA1qB8E;;AA4qB/Ex6B,QAAO,UAAW06B,SAAX,EAAuB;;AAE7B,SAAO,IAAI,KAAKz6B,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,EAAmCw6B,SAAnC,CAAP;AAEA,EAhrB8E;;AAkrB/Ex6B,OAAM,UAAW9N,MAAX,EAAmBsoC,SAAnB,EAA+B;;AAEpC,MAAKA,cAAc7pC,SAAnB,EAA+B6pC,YAAY,IAAZ;;AAE/B,OAAKhkB,IAAL,GAAYtkB,OAAOskB,IAAnB;;AAEA,OAAKnO,EAAL,CAAQrI,IAAR,CAAc9N,OAAOmW,EAArB;;AAEA,OAAKuE,QAAL,CAAc5M,IAAd,CAAoB9N,OAAO0a,QAA3B;AACA,OAAKC,UAAL,CAAgB7M,IAAhB,CAAsB9N,OAAO2a,UAA7B;AACA,OAAKlB,KAAL,CAAW3L,IAAX,CAAiB9N,OAAOyZ,KAAxB;;AAEA,OAAKqB,MAAL,CAAYhN,IAAZ,CAAkB9N,OAAO8a,MAAzB;AACA,OAAKuG,WAAL,CAAiBvT,IAAjB,CAAuB9N,OAAOqhB,WAA9B;;AAEA,OAAKsD,gBAAL,GAAwB3kB,OAAO2kB,gBAA/B;AACA,OAAKkgB,sBAAL,GAA8B7kC,OAAO6kC,sBAArC;;AAEA,OAAKX,MAAL,CAAYN,IAAZ,GAAmB5jC,OAAOkkC,MAAP,CAAcN,IAAjC;AACA,OAAKkB,OAAL,GAAe9kC,OAAO8kC,OAAtB;;AAEA,OAAKC,UAAL,GAAkB/kC,OAAO+kC,UAAzB;AACA,OAAKC,aAAL,GAAqBhlC,OAAOglC,aAA5B;;AAEA,OAAKC,aAAL,GAAqBjlC,OAAOilC,aAA5B;AACA,OAAKC,WAAL,GAAmBllC,OAAOklC,WAA1B;;AAEA,OAAKC,QAAL,GAAgBsC,KAAKc,KAAL,CAAYd,KAAKC,SAAL,CAAgB1nC,OAAOmlC,QAAvB,CAAZ,CAAhB;;AAEA,MAAKmD,cAAc,IAAnB,EAA0B;;AAEzB,QAAM,IAAIlnC,IAAI,CAAd,EAAiBA,IAAIpB,OAAOskC,QAAP,CAAgBvkC,MAArC,EAA6CqB,GAA7C,EAAoD;;AAEnD,QAAIylC,QAAQ7mC,OAAOskC,QAAP,CAAiBljC,CAAjB,CAAZ;AACA,SAAK4M,GAAL,CAAU64B,MAAMj5B,KAAN,EAAV;AAEA;AAED;;AAED,SAAO,IAAP;AAEA;;AA5tB8E,CAA3D,CAArB;;AAguBA;;;;;;AAMA,SAAS46B,MAAT,GAAkB;;AAEjBpE,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,QAAZ;;AAEA,MAAKmoC,kBAAL,GAA0B,IAAI/2B,OAAJ,EAA1B;AACA,MAAK0P,gBAAL,GAAwB,IAAI1P,OAAJ,EAAxB;AAEA;;AAED82B,OAAOrpC,SAAP,GAAmBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAEtE0O,cAAa26B,MAFyD;;AAItEhC,WAAU,IAJ4D;;AAMtE14B,OAAM,UAAW9N,MAAX,EAAmBsoC,SAAnB,EAA+B;;AAEpClE,WAASjlC,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC,EAA4CsoC,SAA5C;;AAEA,OAAKG,kBAAL,CAAwB36B,IAAxB,CAA8B9N,OAAOyoC,kBAArC;AACA,OAAKrnB,gBAAL,CAAsBtT,IAAtB,CAA4B9N,OAAOohB,gBAAnC;;AAEA,SAAO,IAAP;AAEA,EAfqE;;AAiBtE6lB,oBAAmB,YAAY;;AAE9B,MAAItsB,aAAa,IAAIqB,UAAJ,EAAjB;;AAEA,SAAO,SAASirB,iBAAT,CAA4BvnC,MAA5B,EAAqC;;AAE3C,OAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,2DAAd;AACAzO,aAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,QAAKszB,kBAAL,CAAyBpsB,UAAzB;;AAEA,UAAOjb,OAAOyN,GAAP,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAE,CAApB,EAAwBqT,eAAxB,CAAyC7F,UAAzC,CAAP;AAEA,GAbD;AAeA,EAnBkB,EAjBmD;;AAsCtEkQ,oBAAmB,UAAWwc,KAAX,EAAmB;;AAErCjD,WAASjlC,SAAT,CAAmB0rB,iBAAnB,CAAqC1qB,IAArC,CAA2C,IAA3C,EAAiDknC,KAAjD;;AAEA,OAAKoB,kBAAL,CAAwBzvB,UAAxB,CAAoC,KAAKqI,WAAzC;AAEA,EA5CqE;;AA8CtEzT,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA;;AAlDqE,CAApD,CAAnB;;AAsDA;;;;;AAKA,SAAS46B,kBAAT,CAA6BntB,IAA7B,EAAmCC,KAAnC,EAA0CC,GAA1C,EAA+CC,MAA/C,EAAuDC,IAAvD,EAA6DC,GAA7D,EAAmE;;AAElE4sB,QAAOroC,IAAP,CAAa,IAAb;;AAEA,MAAKG,IAAL,GAAY,oBAAZ;;AAEA,MAAKqoC,IAAL,GAAY,CAAZ;AACA,MAAKC,IAAL,GAAY,IAAZ;;AAEA,MAAKrtB,IAAL,GAAYA,IAAZ;AACA,MAAKC,KAAL,GAAaA,KAAb;AACA,MAAKC,GAAL,GAAWA,GAAX;AACA,MAAKC,MAAL,GAAcA,MAAd;;AAEA,MAAKC,IAAL,GAAcA,SAASld,SAAX,GAAyBkd,IAAzB,GAAgC,GAA5C;AACA,MAAKC,GAAL,GAAaA,QAAQnd,SAAV,GAAwBmd,GAAxB,GAA8B,IAAzC;;AAEA,MAAKitB,sBAAL;AAEA;;AAEDH,mBAAmBvpC,SAAnB,GAA+BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAesjB,OAAOrpC,SAAtB,CAAf,EAAkD;;AAEhF0O,cAAa66B,kBAFmE;;AAIhFI,uBAAsB,IAJ0D;;AAMhFh7B,OAAM,UAAW9N,MAAX,EAAmBsoC,SAAnB,EAA+B;;AAEpCE,SAAOrpC,SAAP,CAAiB2O,IAAjB,CAAsB3N,IAAtB,CAA4B,IAA5B,EAAkCH,MAAlC,EAA0CsoC,SAA1C;;AAEA,OAAK/sB,IAAL,GAAYvb,OAAOub,IAAnB;AACA,OAAKC,KAAL,GAAaxb,OAAOwb,KAApB;AACA,OAAKC,GAAL,GAAWzb,OAAOyb,GAAlB;AACA,OAAKC,MAAL,GAAc1b,OAAO0b,MAArB;AACA,OAAKC,IAAL,GAAY3b,OAAO2b,IAAnB;AACA,OAAKC,GAAL,GAAW5b,OAAO4b,GAAlB;;AAEA,OAAK+sB,IAAL,GAAY3oC,OAAO2oC,IAAnB;AACA,OAAKC,IAAL,GAAY5oC,OAAO4oC,IAAP,KAAgB,IAAhB,GAAuB,IAAvB,GAA8BxpC,OAAOK,MAAP,CAAe,EAAf,EAAmBO,OAAO4oC,IAA1B,CAA1C;;AAEA,SAAO,IAAP;AAEA,EAtB+E;;AAwBhFG,gBAAe,UAAWC,SAAX,EAAsBC,UAAtB,EAAkChqC,CAAlC,EAAqC4M,CAArC,EAAwCia,KAAxC,EAA+CC,MAA/C,EAAwD;;AAEtE,MAAK,KAAK6iB,IAAL,KAAc,IAAnB,EAA0B;;AAEzB,QAAKA,IAAL,GAAY;AACXM,aAAS,IADE;AAEXF,eAAW,CAFA;AAGXC,gBAAY,CAHD;AAIXE,aAAS,CAJE;AAKXC,aAAS,CALE;AAMXtjB,WAAO,CANI;AAOXC,YAAQ;AAPG,IAAZ;AAUA;;AAED,OAAK6iB,IAAL,CAAUM,OAAV,GAAoB,IAApB;AACA,OAAKN,IAAL,CAAUI,SAAV,GAAsBA,SAAtB;AACA,OAAKJ,IAAL,CAAUK,UAAV,GAAuBA,UAAvB;AACA,OAAKL,IAAL,CAAUO,OAAV,GAAoBlqC,CAApB;AACA,OAAK2pC,IAAL,CAAUQ,OAAV,GAAoBv9B,CAApB;AACA,OAAK+8B,IAAL,CAAU9iB,KAAV,GAAkBA,KAAlB;AACA,OAAK8iB,IAAL,CAAU7iB,MAAV,GAAmBA,MAAnB;;AAEA,OAAK8iB,sBAAL;AAEA,EAlD+E;;AAoDhFQ,kBAAiB,YAAY;;AAE5B,MAAK,KAAKT,IAAL,KAAc,IAAnB,EAA0B;;AAEzB,QAAKA,IAAL,CAAUM,OAAV,GAAoB,KAApB;AAEA;;AAED,OAAKL,sBAAL;AAEA,EA9D+E;;AAgEhFA,yBAAwB,YAAY;;AAEnC,MAAIx4B,KAAK,CAAE,KAAKmL,KAAL,GAAa,KAAKD,IAApB,KAA+B,IAAI,KAAKotB,IAAxC,CAAT;AACA,MAAIr4B,KAAK,CAAE,KAAKmL,GAAL,GAAW,KAAKC,MAAlB,KAA+B,IAAI,KAAKitB,IAAxC,CAAT;AACA,MAAIplB,KAAK,CAAE,KAAK/H,KAAL,GAAa,KAAKD,IAApB,IAA6B,CAAtC;AACA,MAAIiI,KAAK,CAAE,KAAK/H,GAAL,GAAW,KAAKC,MAAlB,IAA6B,CAAtC;;AAEA,MAAIH,OAAOgI,KAAKlT,EAAhB;AACA,MAAImL,QAAQ+H,KAAKlT,EAAjB;AACA,MAAIoL,MAAM+H,KAAKlT,EAAf;AACA,MAAIoL,SAAS8H,KAAKlT,EAAlB;;AAEA,MAAK,KAAKs4B,IAAL,KAAc,IAAd,IAAsB,KAAKA,IAAL,CAAUM,OAArC,EAA+C;;AAE9C,OAAII,QAAQ,KAAKX,IAAL,IAAc,KAAKC,IAAL,CAAU9iB,KAAV,GAAkB,KAAK8iB,IAAL,CAAUI,SAA1C,CAAZ;AACA,OAAIO,QAAQ,KAAKZ,IAAL,IAAc,KAAKC,IAAL,CAAU7iB,MAAV,GAAmB,KAAK6iB,IAAL,CAAUK,UAA3C,CAAZ;AACA,OAAIO,SAAS,CAAE,KAAKhuB,KAAL,GAAa,KAAKD,IAApB,IAA6B,KAAKqtB,IAAL,CAAU9iB,KAApD;AACA,OAAI2jB,SAAS,CAAE,KAAKhuB,GAAL,GAAW,KAAKC,MAAlB,IAA6B,KAAKktB,IAAL,CAAU7iB,MAApD;;AAEAxK,WAAQiuB,UAAW,KAAKZ,IAAL,CAAUO,OAAV,GAAoBG,KAA/B,CAAR;AACA9tB,WAAQD,OAAOiuB,UAAW,KAAKZ,IAAL,CAAU9iB,KAAV,GAAkBwjB,KAA7B,CAAf;AACA7tB,UAAOguB,UAAW,KAAKb,IAAL,CAAUQ,OAAV,GAAoBG,KAA/B,CAAP;AACA7tB,YAASD,MAAMguB,UAAW,KAAKb,IAAL,CAAU7iB,MAAV,GAAmBwjB,KAA9B,CAAf;AAEA;;AAED,OAAKnoB,gBAAL,CAAsBvF,gBAAtB,CAAwCN,IAAxC,EAA8CC,KAA9C,EAAqDC,GAArD,EAA0DC,MAA1D,EAAkE,KAAKC,IAAvE,EAA6E,KAAKC,GAAlF;AAEA,EA5F+E;;AA8FhFyJ,SAAQ,UAAWC,IAAX,EAAkB;;AAEzB,MAAIgD,OAAO8b,SAASjlC,SAAT,CAAmBkmB,MAAnB,CAA0BllB,IAA1B,CAAgC,IAAhC,EAAsCmlB,IAAtC,CAAX;;AAEAgD,OAAKsB,MAAL,CAAY+e,IAAZ,GAAmB,KAAKA,IAAxB;AACArgB,OAAKsB,MAAL,CAAYrO,IAAZ,GAAmB,KAAKA,IAAxB;AACA+M,OAAKsB,MAAL,CAAYpO,KAAZ,GAAoB,KAAKA,KAAzB;AACA8M,OAAKsB,MAAL,CAAYnO,GAAZ,GAAkB,KAAKA,GAAvB;AACA6M,OAAKsB,MAAL,CAAYlO,MAAZ,GAAqB,KAAKA,MAA1B;AACA4M,OAAKsB,MAAL,CAAYjO,IAAZ,GAAmB,KAAKA,IAAxB;AACA2M,OAAKsB,MAAL,CAAYhO,GAAZ,GAAkB,KAAKA,GAAvB;;AAEA,MAAK,KAAKgtB,IAAL,KAAc,IAAnB,EAA0BtgB,KAAKsB,MAAL,CAAYgf,IAAZ,GAAmBxpC,OAAOK,MAAP,CAAe,EAAf,EAAmB,KAAKmpC,IAAxB,CAAnB;;AAE1B,SAAOtgB,IAAP;AAEA;;AA9G+E,CAAlD,CAA/B;;AAkHA;;;;;AAKA,SAASohB,KAAT,CAAgBn7B,CAAhB,EAAmBC,CAAnB,EAAsB+C,CAAtB,EAAyB4Q,MAAzB,EAAiC+W,KAAjC,EAAwCyQ,aAAxC,EAAwD;;AAEvD,MAAKp7B,CAAL,GAASA,CAAT;AACA,MAAKC,CAAL,GAASA,CAAT;AACA,MAAK+C,CAAL,GAASA,CAAT;;AAEA,MAAK4Q,MAAL,GAAgBA,UAAUA,OAAO/B,SAAnB,GAAiC+B,MAAjC,GAA0C,IAAI1O,OAAJ,EAAxD;AACA,MAAKm2B,aAAL,GAAqBzR,MAAMC,OAAN,CAAejW,MAAf,IAA0BA,MAA1B,GAAmC,EAAxD;;AAEA,MAAK+W,KAAL,GAAeA,SAASA,MAAMhB,OAAjB,GAA6BgB,KAA7B,GAAqC,IAAIZ,KAAJ,EAAlD;AACA,MAAKuR,YAAL,GAAoB1R,MAAMC,OAAN,CAAec,KAAf,IAAyBA,KAAzB,GAAiC,EAArD;;AAEA,MAAKyQ,aAAL,GAAqBA,kBAAkBlrC,SAAlB,GAA8BkrC,aAA9B,GAA8C,CAAnE;AAEA;;AAEDvqC,OAAOK,MAAP,CAAeiqC,MAAMvqC,SAArB,EAAgC;;AAE/ByO,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EAN8B;;AAQ/BA,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB,OAAKuO,CAAL,GAASvO,OAAOuO,CAAhB;AACA,OAAKC,CAAL,GAASxO,OAAOwO,CAAhB;AACA,OAAK+C,CAAL,GAASvR,OAAOuR,CAAhB;;AAEA,OAAK4Q,MAAL,CAAYrU,IAAZ,CAAkB9N,OAAOmiB,MAAzB;AACA,OAAK+W,KAAL,CAAWprB,IAAX,CAAiB9N,OAAOk5B,KAAxB;;AAEA,OAAKyQ,aAAL,GAAqB3pC,OAAO2pC,aAA5B;;AAEA,OAAM,IAAIvoC,IAAI,CAAR,EAAWkoB,KAAKtpB,OAAO4pC,aAAP,CAAqB7pC,MAA3C,EAAmDqB,IAAIkoB,EAAvD,EAA2DloB,GAA3D,EAAkE;;AAEjE,QAAKwoC,aAAL,CAAoBxoC,CAApB,IAA0BpB,OAAO4pC,aAAP,CAAsBxoC,CAAtB,EAA0BwM,KAA1B,EAA1B;AAEA;;AAED,OAAM,IAAIxM,IAAI,CAAR,EAAWkoB,KAAKtpB,OAAO6pC,YAAP,CAAoB9pC,MAA1C,EAAkDqB,IAAIkoB,EAAtD,EAA0DloB,GAA1D,EAAiE;;AAEhE,QAAKyoC,YAAL,CAAmBzoC,CAAnB,IAAyBpB,OAAO6pC,YAAP,CAAqBzoC,CAArB,EAAyBwM,KAAzB,EAAzB;AAEA;;AAED,SAAO,IAAP;AAEA;;AAjC8B,CAAhC;;AAqCA;;;;;;;;;AASA,IAAIk8B,aAAa,CAAjB,EAAoB;;AAEpB,SAASC,QAAT,GAAoB;;AAEnB3qC,QAAOC,cAAP,CAAuB,IAAvB,EAA6B,IAA7B,EAAmC,EAAER,OAAOirC,cAAc,CAAvB,EAAnC;;AAEA,MAAK/+B,IAAL,GAAYX,MAAMI,YAAN,EAAZ;;AAEA,MAAK8Z,IAAL,GAAY,EAAZ;AACA,MAAKhkB,IAAL,GAAY,UAAZ;;AAEA,MAAKoqB,QAAL,GAAgB,EAAhB;AACA,MAAKsf,MAAL,GAAc,EAAd;AACA,MAAKC,KAAL,GAAa,EAAb;AACA,MAAKC,aAAL,GAAqB,CAAC,EAAD,CAArB;;AAEA,MAAKC,YAAL,GAAoB,EAApB;AACA,MAAKC,YAAL,GAAoB,EAApB;;AAEA,MAAKC,WAAL,GAAmB,EAAnB;AACA,MAAKC,WAAL,GAAmB,EAAnB;;AAEA,MAAKC,aAAL,GAAqB,EAArB;;AAEA,MAAKC,WAAL,GAAmB,IAAnB;AACA,MAAKta,cAAL,GAAsB,IAAtB;;AAEA;;AAEA,MAAKua,kBAAL,GAA0B,KAA1B;AACA,MAAKC,kBAAL,GAA0B,KAA1B;AACA,MAAKC,aAAL,GAAqB,KAArB;AACA,MAAKC,iBAAL,GAAyB,KAAzB;AACA,MAAKC,gBAAL,GAAwB,KAAxB;AACA,MAAKC,uBAAL,GAA+B,KAA/B;AACA,MAAKC,gBAAL,GAAwB,KAAxB;AAEA;;AAEDhB,SAAS5qC,SAAT,GAAqBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAe9kB,gBAAgBjB,SAA/B,CAAf,EAA2D;;AAE/E0O,cAAak8B,QAFkE;;AAI/Etf,aAAY,IAJmE;;AAM/E8a,cAAa,UAAWzqB,MAAX,EAAoB;;AAEhC,MAAI0T,eAAe,IAAI1L,OAAJ,GAAcI,eAAd,CAA+BpI,MAA/B,CAAnB;;AAEA,OAAM,IAAI1Z,IAAI,CAAR,EAAWkoB,KAAK,KAAKoB,QAAL,CAAc3qB,MAApC,EAA4CqB,IAAIkoB,EAAhD,EAAoDloB,GAApD,EAA2D;;AAE1D,OAAI4pC,SAAS,KAAKtgB,QAAL,CAAetpB,CAAf,CAAb;AACA4pC,UAAOtyB,YAAP,CAAqBoC,MAArB;AAEA;;AAED,OAAM,IAAI1Z,IAAI,CAAR,EAAWkoB,KAAK,KAAK2gB,KAAL,CAAWlqC,MAAjC,EAAyCqB,IAAIkoB,EAA7C,EAAiDloB,GAAjD,EAAwD;;AAEvD,OAAI6pC,OAAO,KAAKhB,KAAL,CAAY7oC,CAAZ,CAAX;AACA6pC,QAAK9oB,MAAL,CAAYlT,YAAZ,CAA0Buf,YAA1B,EAAyCxe,SAAzC;;AAEA,QAAM,IAAImc,IAAI,CAAR,EAAW+e,KAAKD,KAAKrB,aAAL,CAAmB7pC,MAAzC,EAAiDosB,IAAI+e,EAArD,EAAyD/e,GAAzD,EAAgE;;AAE/D8e,SAAKrB,aAAL,CAAoBzd,CAApB,EAAwBld,YAAxB,CAAsCuf,YAAtC,EAAqDxe,SAArD;AAEA;AAED;;AAED,MAAK,KAAKw6B,WAAL,KAAqB,IAA1B,EAAiC;;AAEhC,QAAKW,kBAAL;AAEA;;AAED,MAAK,KAAKjb,cAAL,KAAwB,IAA7B,EAAoC;;AAEnC,QAAKC,qBAAL;AAEA;;AAED,OAAKua,kBAAL,GAA0B,IAA1B;AACA,OAAKE,iBAAL,GAAyB,IAAzB;;AAEA,SAAO,IAAP;AAEA,EA/C8E;;AAiD/E7E,UAAS,YAAY;;AAEpB;;AAEA,MAAIzX,KAAK,IAAI5c,OAAJ,EAAT;;AAEA,SAAO,SAASq0B,OAAT,CAAkB91B,KAAlB,EAA0B;;AAEhCqe,MAAGvU,aAAH,CAAkB9J,KAAlB;;AAEA,QAAKs1B,WAAL,CAAkBjX,EAAlB;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAhBQ,EAjDsE;;AAmE/E0X,UAAS,YAAY;;AAEpB;;AAEA,MAAI1X,KAAK,IAAI5c,OAAJ,EAAT;;AAEA,SAAO,SAASs0B,OAAT,CAAkB/1B,KAAlB,EAA0B;;AAEhCqe,MAAGrU,aAAH,CAAkBhK,KAAlB;;AAEA,QAAKs1B,WAAL,CAAkBjX,EAAlB;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAhBQ,EAnEsE;;AAqF/E2X,UAAS,YAAY;;AAEpB;;AAEA,MAAI3X,KAAK,IAAI5c,OAAJ,EAAT;;AAEA,SAAO,SAASu0B,OAAT,CAAkBh2B,KAAlB,EAA0B;;AAEhCqe,MAAGpU,aAAH,CAAkBjK,KAAlB;;AAEA,QAAKs1B,WAAL,CAAkBjX,EAAlB;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAhBQ,EArFsE;;AAuG/E5K,YAAW,YAAY;;AAEtB;;AAEA,MAAI4K,KAAK,IAAI5c,OAAJ,EAAT;;AAEA,SAAO,SAASgS,SAAT,CAAoBzkB,CAApB,EAAuB4M,CAAvB,EAA0B0H,CAA1B,EAA8B;;AAEpC+a,MAAGxU,eAAH,CAAoB7a,CAApB,EAAuB4M,CAAvB,EAA0B0H,CAA1B;;AAEA,QAAKgyB,WAAL,CAAkBjX,EAAlB;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAhBU,EAvGoE;;AAyH/E7U,QAAO,YAAY;;AAElB;;AAEA,MAAI6U,KAAK,IAAI5c,OAAJ,EAAT;;AAEA,SAAO,SAAS+H,KAAT,CAAgBxa,CAAhB,EAAmB4M,CAAnB,EAAsB0H,CAAtB,EAA0B;;AAEhC+a,MAAG/T,SAAH,CAActb,CAAd,EAAiB4M,CAAjB,EAAoB0H,CAApB;;AAEA,QAAKgyB,WAAL,CAAkBjX,EAAlB;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAhBM,EAzHwE;;AA2I/ErY,SAAQ,YAAY;;AAEnB,MAAIm1B,MAAM,IAAIhH,QAAJ,EAAV;;AAEA,SAAO,SAASnuB,MAAT,CAAiB4E,MAAjB,EAA0B;;AAEhCuwB,OAAIn1B,MAAJ,CAAY4E,MAAZ;;AAEAuwB,OAAIhmB,YAAJ;;AAEA,QAAKmgB,WAAL,CAAkB6F,IAAItwB,MAAtB;AAEA,GARD;AAUA,EAdO,EA3IuE;;AA2J/EuwB,qBAAoB,UAAW7gB,QAAX,EAAsB;;AAEzC,MAAIH,QAAQ,IAAZ;;AAEA,MAAIihB,UAAU9gB,SAAS3qB,KAAT,KAAmB,IAAnB,GAA0B2qB,SAAS3qB,KAAT,CAAeqB,KAAzC,GAAiDzC,SAA/D;AACA,MAAImsB,aAAaJ,SAASI,UAA1B;;AAEA,MAAI2gB,YAAY3gB,WAAWlQ,QAAX,CAAoBxZ,KAApC;AACA,MAAIsqC,UAAU5gB,WAAWzI,MAAX,KAAsB1jB,SAAtB,GAAkCmsB,WAAWzI,MAAX,CAAkBjhB,KAApD,GAA4DzC,SAA1E;AACA,MAAIurC,SAASpf,WAAWsO,KAAX,KAAqBz6B,SAArB,GAAiCmsB,WAAWsO,KAAX,CAAiBh4B,KAAlD,GAA0DzC,SAAvE;AACA,MAAIgtC,MAAM7gB,WAAW/D,EAAX,KAAkBpoB,SAAlB,GAA8BmsB,WAAW/D,EAAX,CAAc3lB,KAA5C,GAAoDzC,SAA9D;AACA,MAAIitC,OAAO9gB,WAAW+gB,GAAX,KAAmBltC,SAAnB,GAA+BmsB,WAAW+gB,GAAX,CAAezqC,KAA9C,GAAsDzC,SAAjE;;AAEA,MAAKitC,SAASjtC,SAAd,EAA0B,KAAKyrC,aAAL,CAAoB,CAApB,IAA0B,EAA1B;;AAE1B,MAAI0B,cAAc,EAAlB;AACA,MAAIC,UAAU,EAAd;AACA,MAAIC,WAAW,EAAf;;AAEA,OAAM,IAAI1qC,IAAI,CAAR,EAAW+qB,IAAI,CAArB,EAAwB/qB,IAAImqC,UAAUxrC,MAAtC,EAA8CqB,KAAK,CAAL,EAAQ+qB,KAAK,CAA3D,EAA+D;;AAE9D9B,SAAMK,QAAN,CAAe/pB,IAAf,CAAqB,IAAI8S,OAAJ,CAAa83B,UAAWnqC,CAAX,CAAb,EAA6BmqC,UAAWnqC,IAAI,CAAf,CAA7B,EAAiDmqC,UAAWnqC,IAAI,CAAf,CAAjD,CAArB;;AAEA,OAAKoqC,YAAY/sC,SAAjB,EAA6B;;AAE5BmtC,gBAAYjrC,IAAZ,CAAkB,IAAI8S,OAAJ,CAAa+3B,QAASpqC,CAAT,CAAb,EAA2BoqC,QAASpqC,IAAI,CAAb,CAA3B,EAA6CoqC,QAASpqC,IAAI,CAAb,CAA7C,CAAlB;AAEA;;AAED,OAAK4oC,WAAWvrC,SAAhB,EAA4B;;AAE3B4rB,UAAM2f,MAAN,CAAarpC,IAAb,CAAmB,IAAI23B,KAAJ,CAAW0R,OAAQ5oC,CAAR,CAAX,EAAwB4oC,OAAQ5oC,IAAI,CAAZ,CAAxB,EAAyC4oC,OAAQ5oC,IAAI,CAAZ,CAAzC,CAAnB;AAEA;;AAED,OAAKqqC,QAAQhtC,SAAb,EAAyB;;AAExBotC,YAAQlrC,IAAR,CAAc,IAAIsM,OAAJ,CAAaw+B,IAAKtf,CAAL,CAAb,EAAuBsf,IAAKtf,IAAI,CAAT,CAAvB,CAAd;AAEA;;AAED,OAAKuf,SAASjtC,SAAd,EAA0B;;AAEzBqtC,aAASnrC,IAAT,CAAe,IAAIsM,OAAJ,CAAay+B,KAAMvf,CAAN,CAAb,EAAwBuf,KAAMvf,IAAI,CAAV,CAAxB,CAAf;AAEA;AAED;;AAED,WAAS4f,OAAT,CAAkBx9B,CAAlB,EAAqBC,CAArB,EAAwB+C,CAAxB,EAA2Bo4B,aAA3B,EAA2C;;AAE1C,OAAIC,gBAAgB4B,YAAY/sC,SAAZ,GAAwB,CAAEmtC,YAAar9B,CAAb,EAAiBX,KAAjB,EAAF,EAA4Bg+B,YAAap9B,CAAb,EAAiBZ,KAAjB,EAA5B,EAAsDg+B,YAAar6B,CAAb,EAAiB3D,KAAjB,EAAtD,CAAxB,GAA2G,EAA/H;AACA,OAAIi8B,eAAeG,WAAWvrC,SAAX,GAAuB,CAAE4rB,MAAM2f,MAAN,CAAcz7B,CAAd,EAAkBX,KAAlB,EAAF,EAA6Byc,MAAM2f,MAAN,CAAcx7B,CAAd,EAAkBZ,KAAlB,EAA7B,EAAwDyc,MAAM2f,MAAN,CAAcz4B,CAAd,EAAkB3D,KAAlB,EAAxD,CAAvB,GAA6G,EAAhI;;AAEA,OAAIq9B,OAAO,IAAIvB,KAAJ,CAAWn7B,CAAX,EAAcC,CAAd,EAAiB+C,CAAjB,EAAoBq4B,aAApB,EAAmCC,YAAnC,EAAiDF,aAAjD,CAAX;;AAEAtf,SAAM4f,KAAN,CAAYtpC,IAAZ,CAAkBsqC,IAAlB;;AAEA,OAAKQ,QAAQhtC,SAAb,EAAyB;;AAExB4rB,UAAM6f,aAAN,CAAqB,CAArB,EAAyBvpC,IAAzB,CAA+B,CAAEkrC,QAASt9B,CAAT,EAAaX,KAAb,EAAF,EAAwBi+B,QAASr9B,CAAT,EAAaZ,KAAb,EAAxB,EAA8Ci+B,QAASt6B,CAAT,EAAa3D,KAAb,EAA9C,CAA/B;AAEA;;AAED,OAAK89B,SAASjtC,SAAd,EAA0B;;AAEzB4rB,UAAM6f,aAAN,CAAqB,CAArB,EAAyBvpC,IAAzB,CAA+B,CAAEmrC,SAAUv9B,CAAV,EAAcX,KAAd,EAAF,EAAyBk+B,SAAUt9B,CAAV,EAAcZ,KAAd,EAAzB,EAAgDk+B,SAAUv6B,CAAV,EAAc3D,KAAd,EAAhD,CAA/B;AAEA;AAED;;AAED,MAAIo+B,SAASxhB,SAASwhB,MAAtB;;AAEA,MAAKA,OAAOjsC,MAAP,GAAgB,CAArB,EAAyB;;AAExB,QAAM,IAAIqB,IAAI,CAAd,EAAiBA,IAAI4qC,OAAOjsC,MAA5B,EAAoCqB,GAApC,EAA2C;;AAE1C,QAAI6qC,QAAQD,OAAQ5qC,CAAR,CAAZ;;AAEA,QAAI4sB,QAAQie,MAAMje,KAAlB;AACA,QAAIxV,QAAQyzB,MAAMzzB,KAAlB;;AAEA,SAAM,IAAI2T,IAAI6B,KAAR,EAAekd,KAAKld,QAAQxV,KAAlC,EAAyC2T,IAAI+e,EAA7C,EAAiD/e,KAAK,CAAtD,EAA0D;;AAEzD,SAAKmf,YAAY7sC,SAAjB,EAA6B;;AAE5BstC,cAAST,QAASnf,CAAT,CAAT,EAAuBmf,QAASnf,IAAI,CAAb,CAAvB,EAAyCmf,QAASnf,IAAI,CAAb,CAAzC,EAA2D8f,MAAMtC,aAAjE;AAEA,MAJD,MAIO;;AAENoC,cAAS5f,CAAT,EAAYA,IAAI,CAAhB,EAAmBA,IAAI,CAAvB,EAA0B8f,MAAMtC,aAAhC;AAEA;AAED;AAED;AAED,GAzBD,MAyBO;;AAEN,OAAK2B,YAAY7sC,SAAjB,EAA6B;;AAE5B,SAAM,IAAI2C,IAAI,CAAd,EAAiBA,IAAIkqC,QAAQvrC,MAA7B,EAAqCqB,KAAK,CAA1C,EAA8C;;AAE7C2qC,aAAST,QAASlqC,CAAT,CAAT,EAAuBkqC,QAASlqC,IAAI,CAAb,CAAvB,EAAyCkqC,QAASlqC,IAAI,CAAb,CAAzC;AAEA;AAED,IARD,MAQO;;AAEN,SAAM,IAAIA,IAAI,CAAd,EAAiBA,IAAImqC,UAAUxrC,MAAV,GAAmB,CAAxC,EAA2CqB,KAAK,CAAhD,EAAoD;;AAEnD2qC,aAAS3qC,CAAT,EAAYA,IAAI,CAAhB,EAAmBA,IAAI,CAAvB;AAEA;AAED;AAED;;AAED,OAAK8qC,kBAAL;;AAEA,MAAK1hB,SAASggB,WAAT,KAAyB,IAA9B,EAAqC;;AAEpC,QAAKA,WAAL,GAAmBhgB,SAASggB,WAAT,CAAqB58B,KAArB,EAAnB;AAEA;;AAED,MAAK4c,SAAS0F,cAAT,KAA4B,IAAjC,EAAwC;;AAEvC,QAAKA,cAAL,GAAsB1F,SAAS0F,cAAT,CAAwBtiB,KAAxB,EAAtB;AAEA;;AAED,SAAO,IAAP;AAEA,EApS8E;;AAsS/E0D,SAAQ,YAAY;;AAEnB,MAAIP,SAAS,IAAI0C,OAAJ,EAAb;;AAEA,SAAO,SAASnC,MAAT,GAAkB;;AAExB,QAAK65B,kBAAL;;AAEA,QAAKX,WAAL,CAAiBxgB,SAAjB,CAA4BjZ,MAA5B,EAAqCrB,MAArC;;AAEA,QAAKgU,SAAL,CAAgB3S,OAAO9R,CAAvB,EAA0B8R,OAAOlF,CAAjC,EAAoCkF,OAAOwC,CAA3C;;AAEA,UAAO,IAAP;AAEA,GAVD;AAYA,EAhBO,EAtSuE;;AAwT/EvD,YAAW,YAAY;;AAEtB,OAAKmgB,qBAAL;;AAEA,MAAI7e,SAAS,KAAK4e,cAAL,CAAoB5e,MAAjC;AACA,MAAIoR,SAAS,KAAKwN,cAAL,CAAoBxN,MAAjC;;AAEA,MAAIpU,IAAIoU,WAAW,CAAX,GAAe,CAAf,GAAmB,MAAMA,MAAjC;;AAEA,MAAI5H,SAAS,IAAIpJ,OAAJ,EAAb;AACAoJ,SAAO3N,GAAP,CACCmB,CADD,EACI,CADJ,EACO,CADP,EACU,CAAEA,CAAF,GAAMgD,OAAOrS,CADvB,EAEC,CAFD,EAEIqP,CAFJ,EAEO,CAFP,EAEU,CAAEA,CAAF,GAAMgD,OAAOzF,CAFvB,EAGC,CAHD,EAGI,CAHJ,EAGOyC,CAHP,EAGU,CAAEA,CAAF,GAAMgD,OAAOiC,CAHvB,EAIC,CAJD,EAII,CAJJ,EAIO,CAJP,EAIU,CAJV;;AAOA,OAAKgyB,WAAL,CAAkBzqB,MAAlB;;AAEA,SAAO,IAAP;AAEA,EA7U8E;;AA+U/EoxB,qBAAoB,YAAY;;AAE/B,MAAIC,KAAK,IAAI14B,OAAJ,EAAT;AAAA,MAAwB24B,KAAK,IAAI34B,OAAJ,EAA7B;;AAEA,OAAM,IAAIQ,IAAI,CAAR,EAAWo4B,KAAK,KAAKpC,KAAL,CAAWlqC,MAAjC,EAAyCkU,IAAIo4B,EAA7C,EAAiDp4B,GAAjD,EAAwD;;AAEvD,OAAIg3B,OAAO,KAAKhB,KAAL,CAAYh2B,CAAZ,CAAX;;AAEA,OAAIq4B,KAAK,KAAK5hB,QAAL,CAAeugB,KAAK18B,CAApB,CAAT;AACA,OAAIg+B,KAAK,KAAK7hB,QAAL,CAAeugB,KAAKz8B,CAApB,CAAT;AACA,OAAIg+B,KAAK,KAAK9hB,QAAL,CAAeugB,KAAK15B,CAApB,CAAT;;AAEA46B,MAAGx9B,UAAH,CAAe69B,EAAf,EAAmBD,EAAnB;AACAH,MAAGz9B,UAAH,CAAe29B,EAAf,EAAmBC,EAAnB;AACAJ,MAAG3qB,KAAH,CAAU4qB,EAAV;;AAEAD,MAAGn8B,SAAH;;AAEAi7B,QAAK9oB,MAAL,CAAYrU,IAAZ,CAAkBq+B,EAAlB;AAEA;AAED,EArW8E;;AAuW/EM,uBAAsB,UAAWC,YAAX,EAA0B;;AAE/C,MAAKA,iBAAiBjuC,SAAtB,EAAkCiuC,eAAe,IAAf;;AAElC,MAAI3+B,CAAJ,EAAO4+B,EAAP,EAAW14B,CAAX,EAAco4B,EAAd,EAAkBpB,IAAlB,EAAwBvgB,QAAxB;;AAEAA,aAAW,IAAIyN,KAAJ,CAAW,KAAKzN,QAAL,CAAc3qB,MAAzB,CAAX;;AAEA,OAAMgO,IAAI,CAAJ,EAAO4+B,KAAK,KAAKjiB,QAAL,CAAc3qB,MAAhC,EAAwCgO,IAAI4+B,EAA5C,EAAgD5+B,GAAhD,EAAuD;;AAEtD2c,YAAU3c,CAAV,IAAgB,IAAI0F,OAAJ,EAAhB;AAEA;;AAED,MAAKi5B,YAAL,EAAoB;;AAEnB;AACA;;AAEA,OAAIJ,EAAJ,EAAQC,EAAR,EAAYC,EAAZ;AACA,OAAIL,KAAK,IAAI14B,OAAJ,EAAT;AAAA,OAAwB24B,KAAK,IAAI34B,OAAJ,EAA7B;;AAEA,QAAMQ,IAAI,CAAJ,EAAOo4B,KAAK,KAAKpC,KAAL,CAAWlqC,MAA7B,EAAqCkU,IAAIo4B,EAAzC,EAA6Cp4B,GAA7C,EAAoD;;AAEnDg3B,WAAO,KAAKhB,KAAL,CAAYh2B,CAAZ,CAAP;;AAEAq4B,SAAK,KAAK5hB,QAAL,CAAeugB,KAAK18B,CAApB,CAAL;AACAg+B,SAAK,KAAK7hB,QAAL,CAAeugB,KAAKz8B,CAApB,CAAL;AACAg+B,SAAK,KAAK9hB,QAAL,CAAeugB,KAAK15B,CAApB,CAAL;;AAEA46B,OAAGx9B,UAAH,CAAe69B,EAAf,EAAmBD,EAAnB;AACAH,OAAGz9B,UAAH,CAAe29B,EAAf,EAAmBC,EAAnB;AACAJ,OAAG3qB,KAAH,CAAU4qB,EAAV;;AAEA1hB,aAAUugB,KAAK18B,CAAf,EAAmBP,GAAnB,CAAwBm+B,EAAxB;AACAzhB,aAAUugB,KAAKz8B,CAAf,EAAmBR,GAAnB,CAAwBm+B,EAAxB;AACAzhB,aAAUugB,KAAK15B,CAAf,EAAmBvD,GAAnB,CAAwBm+B,EAAxB;AAEA;AAED,GA1BD,MA0BO;;AAEN,QAAKD,kBAAL;;AAEA,QAAMj4B,IAAI,CAAJ,EAAOo4B,KAAK,KAAKpC,KAAL,CAAWlqC,MAA7B,EAAqCkU,IAAIo4B,EAAzC,EAA6Cp4B,GAA7C,EAAoD;;AAEnDg3B,WAAO,KAAKhB,KAAL,CAAYh2B,CAAZ,CAAP;;AAEAyW,aAAUugB,KAAK18B,CAAf,EAAmBP,GAAnB,CAAwBi9B,KAAK9oB,MAA7B;AACAuI,aAAUugB,KAAKz8B,CAAf,EAAmBR,GAAnB,CAAwBi9B,KAAK9oB,MAA7B;AACAuI,aAAUugB,KAAK15B,CAAf,EAAmBvD,GAAnB,CAAwBi9B,KAAK9oB,MAA7B;AAEA;AAED;;AAED,OAAMpU,IAAI,CAAJ,EAAO4+B,KAAK,KAAKjiB,QAAL,CAAc3qB,MAAhC,EAAwCgO,IAAI4+B,EAA5C,EAAgD5+B,GAAhD,EAAuD;;AAEtD2c,YAAU3c,CAAV,EAAciC,SAAd;AAEA;;AAED,OAAMiE,IAAI,CAAJ,EAAOo4B,KAAK,KAAKpC,KAAL,CAAWlqC,MAA7B,EAAqCkU,IAAIo4B,EAAzC,EAA6Cp4B,GAA7C,EAAoD;;AAEnDg3B,UAAO,KAAKhB,KAAL,CAAYh2B,CAAZ,CAAP;;AAEA,OAAI21B,gBAAgBqB,KAAKrB,aAAzB;;AAEA,OAAKA,cAAc7pC,MAAd,KAAyB,CAA9B,EAAkC;;AAEjC6pC,kBAAe,CAAf,EAAmB97B,IAAnB,CAAyB4c,SAAUugB,KAAK18B,CAAf,CAAzB;AACAq7B,kBAAe,CAAf,EAAmB97B,IAAnB,CAAyB4c,SAAUugB,KAAKz8B,CAAf,CAAzB;AACAo7B,kBAAe,CAAf,EAAmB97B,IAAnB,CAAyB4c,SAAUugB,KAAK15B,CAAf,CAAzB;AAEA,IAND,MAMO;;AAENq4B,kBAAe,CAAf,IAAqBlf,SAAUugB,KAAK18B,CAAf,EAAmBX,KAAnB,EAArB;AACAg8B,kBAAe,CAAf,IAAqBlf,SAAUugB,KAAKz8B,CAAf,EAAmBZ,KAAnB,EAArB;AACAg8B,kBAAe,CAAf,IAAqBlf,SAAUugB,KAAK15B,CAAf,EAAmB3D,KAAnB,EAArB;AAEA;AAED;;AAED,MAAK,KAAKq8B,KAAL,CAAWlqC,MAAX,GAAoB,CAAzB,EAA6B;;AAE5B,QAAK6qC,iBAAL,GAAyB,IAAzB;AAEA;AAED,EAjc8E;;AAmc/EgC,2BAA0B,YAAY;;AAErC,MAAI34B,CAAJ,EAAOo4B,EAAP,EAAWpB,IAAX;;AAEA,OAAKiB,kBAAL;;AAEA,OAAMj4B,IAAI,CAAJ,EAAOo4B,KAAK,KAAKpC,KAAL,CAAWlqC,MAA7B,EAAqCkU,IAAIo4B,EAAzC,EAA6Cp4B,GAA7C,EAAoD;;AAEnDg3B,UAAO,KAAKhB,KAAL,CAAYh2B,CAAZ,CAAP;;AAEA,OAAI21B,gBAAgBqB,KAAKrB,aAAzB;;AAEA,OAAKA,cAAc7pC,MAAd,KAAyB,CAA9B,EAAkC;;AAEjC6pC,kBAAe,CAAf,EAAmB97B,IAAnB,CAAyBm9B,KAAK9oB,MAA9B;AACAynB,kBAAe,CAAf,EAAmB97B,IAAnB,CAAyBm9B,KAAK9oB,MAA9B;AACAynB,kBAAe,CAAf,EAAmB97B,IAAnB,CAAyBm9B,KAAK9oB,MAA9B;AAEA,IAND,MAMO;;AAENynB,kBAAe,CAAf,IAAqBqB,KAAK9oB,MAAL,CAAYvU,KAAZ,EAArB;AACAg8B,kBAAe,CAAf,IAAqBqB,KAAK9oB,MAAL,CAAYvU,KAAZ,EAArB;AACAg8B,kBAAe,CAAf,IAAqBqB,KAAK9oB,MAAL,CAAYvU,KAAZ,EAArB;AAEA;AAED;;AAED,MAAK,KAAKq8B,KAAL,CAAWlqC,MAAX,GAAoB,CAAzB,EAA6B;;AAE5B,QAAK6qC,iBAAL,GAAyB,IAAzB;AAEA;AAED,EAre8E;;AAue/EiC,sBAAqB,YAAY;;AAEhC,MAAIzrC,CAAJ,EAAOkoB,EAAP,EAAWrV,CAAX,EAAco4B,EAAd,EAAkBpB,IAAlB;;AAEA;AACA;AACA;;AAEA,OAAMh3B,IAAI,CAAJ,EAAOo4B,KAAK,KAAKpC,KAAL,CAAWlqC,MAA7B,EAAqCkU,IAAIo4B,EAAzC,EAA6Cp4B,GAA7C,EAAoD;;AAEnDg3B,UAAO,KAAKhB,KAAL,CAAYh2B,CAAZ,CAAP;;AAEA,OAAK,CAAEg3B,KAAK6B,oBAAZ,EAAmC;;AAElC7B,SAAK6B,oBAAL,GAA4B7B,KAAK9oB,MAAL,CAAYvU,KAAZ,EAA5B;AAEA,IAJD,MAIO;;AAENq9B,SAAK6B,oBAAL,CAA0Bh/B,IAA1B,CAAgCm9B,KAAK9oB,MAArC;AAEA;;AAED,OAAK,CAAE8oB,KAAK8B,uBAAZ,EAAsC9B,KAAK8B,uBAAL,GAA+B,EAA/B;;AAEtC,QAAM3rC,IAAI,CAAJ,EAAOkoB,KAAK2hB,KAAKrB,aAAL,CAAmB7pC,MAArC,EAA6CqB,IAAIkoB,EAAjD,EAAqDloB,GAArD,EAA4D;;AAE3D,QAAK,CAAE6pC,KAAK8B,uBAAL,CAA8B3rC,CAA9B,CAAP,EAA2C;;AAE1C6pC,UAAK8B,uBAAL,CAA8B3rC,CAA9B,IAAoC6pC,KAAKrB,aAAL,CAAoBxoC,CAApB,EAAwBwM,KAAxB,EAApC;AAEA,KAJD,MAIO;;AAENq9B,UAAK8B,uBAAL,CAA8B3rC,CAA9B,EAAkC0M,IAAlC,CAAwCm9B,KAAKrB,aAAL,CAAoBxoC,CAApB,CAAxC;AAEA;AAED;AAED;;AAED;;AAEA,MAAI4rC,SAAS,IAAIjD,QAAJ,EAAb;AACAiD,SAAO/C,KAAP,GAAe,KAAKA,KAApB;;AAEA,OAAM7oC,IAAI,CAAJ,EAAOkoB,KAAK,KAAK6gB,YAAL,CAAkBpqC,MAApC,EAA4CqB,IAAIkoB,EAAhD,EAAoDloB,GAApD,EAA2D;;AAE1D;;AAEA,OAAK,CAAE,KAAKgpC,YAAL,CAAmBhpC,CAAnB,CAAP,EAAgC;;AAE/B,SAAKgpC,YAAL,CAAmBhpC,CAAnB,IAAyB,EAAzB;AACA,SAAKgpC,YAAL,CAAmBhpC,CAAnB,EAAuB6rC,WAAvB,GAAqC,EAArC;AACA,SAAK7C,YAAL,CAAmBhpC,CAAnB,EAAuBwoC,aAAvB,GAAuC,EAAvC;;AAEA,QAAIsD,iBAAiB,KAAK9C,YAAL,CAAmBhpC,CAAnB,EAAuB6rC,WAA5C;AACA,QAAIE,mBAAmB,KAAK/C,YAAL,CAAmBhpC,CAAnB,EAAuBwoC,aAA9C;;AAEA,QAAIwD,UAAJ,EAAgBxD,aAAhB;;AAEA,SAAM31B,IAAI,CAAJ,EAAOo4B,KAAK,KAAKpC,KAAL,CAAWlqC,MAA7B,EAAqCkU,IAAIo4B,EAAzC,EAA6Cp4B,GAA7C,EAAoD;;AAEnDm5B,kBAAa,IAAI35B,OAAJ,EAAb;AACAm2B,qBAAgB,EAAEr7B,GAAG,IAAIkF,OAAJ,EAAL,EAAoBjF,GAAG,IAAIiF,OAAJ,EAAvB,EAAsClC,GAAG,IAAIkC,OAAJ,EAAzC,EAAhB;;AAEAy5B,oBAAevsC,IAAf,CAAqBysC,UAArB;AACAD,sBAAiBxsC,IAAjB,CAAuBipC,aAAvB;AAEA;AAED;;AAED,OAAIQ,eAAe,KAAKA,YAAL,CAAmBhpC,CAAnB,CAAnB;;AAEA;;AAEA4rC,UAAOtiB,QAAP,GAAkB,KAAKyf,YAAL,CAAmB/oC,CAAnB,EAAuBspB,QAAzC;;AAEA;;AAEAsiB,UAAOd,kBAAP;AACAc,UAAOP,oBAAP;;AAEA;;AAEA,OAAIW,UAAJ,EAAgBxD,aAAhB;;AAEA,QAAM31B,IAAI,CAAJ,EAAOo4B,KAAK,KAAKpC,KAAL,CAAWlqC,MAA7B,EAAqCkU,IAAIo4B,EAAzC,EAA6Cp4B,GAA7C,EAAoD;;AAEnDg3B,WAAO,KAAKhB,KAAL,CAAYh2B,CAAZ,CAAP;;AAEAm5B,iBAAahD,aAAa6C,WAAb,CAA0Bh5B,CAA1B,CAAb;AACA21B,oBAAgBQ,aAAaR,aAAb,CAA4B31B,CAA5B,CAAhB;;AAEAm5B,eAAWt/B,IAAX,CAAiBm9B,KAAK9oB,MAAtB;;AAEAynB,kBAAcr7B,CAAd,CAAgBT,IAAhB,CAAsBm9B,KAAKrB,aAAL,CAAoB,CAApB,CAAtB;AACAA,kBAAcp7B,CAAd,CAAgBV,IAAhB,CAAsBm9B,KAAKrB,aAAL,CAAoB,CAApB,CAAtB;AACAA,kBAAcr4B,CAAd,CAAgBzD,IAAhB,CAAsBm9B,KAAKrB,aAAL,CAAoB,CAApB,CAAtB;AAEA;AAED;;AAED;;AAEA,OAAM31B,IAAI,CAAJ,EAAOo4B,KAAK,KAAKpC,KAAL,CAAWlqC,MAA7B,EAAqCkU,IAAIo4B,EAAzC,EAA6Cp4B,GAA7C,EAAoD;;AAEnDg3B,UAAO,KAAKhB,KAAL,CAAYh2B,CAAZ,CAAP;;AAEAg3B,QAAK9oB,MAAL,GAAc8oB,KAAK6B,oBAAnB;AACA7B,QAAKrB,aAAL,GAAqBqB,KAAK8B,uBAA1B;AAEA;AAED,EA1lB8E;;AA4lB/E5B,qBAAoB,YAAY;;AAE/B,MAAK,KAAKX,WAAL,KAAqB,IAA1B,EAAiC;;AAEhC,QAAKA,WAAL,GAAmB,IAAIhiB,IAAJ,EAAnB;AAEA;;AAED,OAAKgiB,WAAL,CAAiBrhB,aAAjB,CAAgC,KAAKuB,QAArC;AAEA,EAtmB8E;;AAwmB/EyF,wBAAuB,YAAY;;AAElC,MAAK,KAAKD,cAAL,KAAwB,IAA7B,EAAoC;;AAEnC,QAAKA,cAAL,GAAsB,IAAIvD,MAAJ,EAAtB;AAEA;;AAED,OAAKuD,cAAL,CAAoB/G,aAApB,CAAmC,KAAKuB,QAAxC;AAEA,EAlnB8E;;AAonB/EiN,QAAO,UAAWnN,QAAX,EAAqB1P,MAArB,EAA6BuyB,mBAA7B,EAAmD;;AAEzD,MAAK,EAAI7iB,YAAYA,SAASC,UAAzB,CAAL,EAA6C;;AAE5Cvc,WAAQyD,KAAR,CAAe,qEAAf,EAAsF6Y,QAAtF;AACA;AAEA;;AAED,MAAIgE,YAAJ;AAAA,MACC8e,eAAe,KAAK5iB,QAAL,CAAc3qB,MAD9B;AAAA,MAECwtC,YAAY,KAAK7iB,QAFlB;AAAA,MAGC8iB,YAAYhjB,SAASE,QAHtB;AAAA,MAIC+iB,SAAS,KAAKxD,KAJf;AAAA,MAKCyD,SAASljB,SAASyf,KALnB;AAAA,MAMC0D,OAAO,KAAKzD,aAAL,CAAoB,CAApB,CANR;AAAA,MAOCwB,OAAOlhB,SAAS0f,aAAT,CAAwB,CAAxB,CAPR;AAAA,MAQC0D,UAAU,KAAK5D,MARhB;AAAA,MASC6D,UAAUrjB,SAASwf,MATpB;;AAWA,MAAKqD,wBAAwB5uC,SAA7B,EAAyC4uC,sBAAsB,CAAtB;;AAEzC,MAAKvyB,WAAWrc,SAAhB,EAA4B;;AAE3B+vB,kBAAe,IAAI1L,OAAJ,GAAcI,eAAd,CAA+BpI,MAA/B,CAAf;AAEA;;AAED;;AAEA,OAAM,IAAI1Z,IAAI,CAAR,EAAWkoB,KAAKkkB,UAAUztC,MAAhC,EAAwCqB,IAAIkoB,EAA5C,EAAgDloB,GAAhD,EAAuD;;AAEtD,OAAI4pC,SAASwC,UAAWpsC,CAAX,CAAb;;AAEA,OAAI0sC,aAAa9C,OAAOp9B,KAAP,EAAjB;;AAEA,OAAKkN,WAAWrc,SAAhB,EAA4BqvC,WAAWp1B,YAAX,CAAyBoC,MAAzB;;AAE5ByyB,aAAU5sC,IAAV,CAAgBmtC,UAAhB;AAEA;;AAED;;AAEA,OAAM,IAAI1sC,IAAI,CAAR,EAAWkoB,KAAKukB,QAAQ9tC,MAA9B,EAAsCqB,IAAIkoB,EAA1C,EAA8CloB,GAA9C,EAAqD;;AAEpDwsC,WAAQjtC,IAAR,CAAcktC,QAASzsC,CAAT,EAAawM,KAAb,EAAd;AAEA;;AAED;;AAEA,OAAMxM,IAAI,CAAJ,EAAOkoB,KAAKokB,OAAO3tC,MAAzB,EAAiCqB,IAAIkoB,EAArC,EAAyCloB,GAAzC,EAAgD;;AAE/C,OAAI6pC,OAAOyC,OAAQtsC,CAAR,CAAX;AAAA,OAAwB2sC,QAAxB;AAAA,OAAkC5rB,MAAlC;AAAA,OAA0C+W,KAA1C;AAAA,OACC8U,oBAAoB/C,KAAKrB,aAD1B;AAAA,OAECqE,mBAAmBhD,KAAKpB,YAFzB;;AAIAkE,cAAW,IAAIrE,KAAJ,CAAWuB,KAAK18B,CAAL,GAAS++B,YAApB,EAAkCrC,KAAKz8B,CAAL,GAAS8+B,YAA3C,EAAyDrC,KAAK15B,CAAL,GAAS+7B,YAAlE,CAAX;AACAS,YAAS5rB,MAAT,CAAgBrU,IAAhB,CAAsBm9B,KAAK9oB,MAA3B;;AAEA,OAAKqM,iBAAiB/vB,SAAtB,EAAkC;;AAEjCsvC,aAAS5rB,MAAT,CAAgBlT,YAAhB,CAA8Buf,YAA9B,EAA6Cxe,SAA7C;AAEA;;AAED,QAAM,IAAImc,IAAI,CAAR,EAAW+e,KAAK8C,kBAAkBjuC,MAAxC,EAAgDosB,IAAI+e,EAApD,EAAwD/e,GAAxD,EAA+D;;AAE9DhK,aAAS6rB,kBAAmB7hB,CAAnB,EAAuBve,KAAvB,EAAT;;AAEA,QAAK4gB,iBAAiB/vB,SAAtB,EAAkC;;AAEjC0jB,YAAOlT,YAAP,CAAqBuf,YAArB,EAAoCxe,SAApC;AAEA;;AAED+9B,aAASnE,aAAT,CAAuBjpC,IAAvB,CAA6BwhB,MAA7B;AAEA;;AAED4rB,YAAS7U,KAAT,CAAeprB,IAAf,CAAqBm9B,KAAK/R,KAA1B;;AAEA,QAAM,IAAI/M,IAAI,CAAR,EAAW+e,KAAK+C,iBAAiBluC,MAAvC,EAA+CosB,IAAI+e,EAAnD,EAAuD/e,GAAvD,EAA8D;;AAE7D+M,YAAQ+U,iBAAkB9hB,CAAlB,CAAR;AACA4hB,aAASlE,YAAT,CAAsBlpC,IAAtB,CAA4Bu4B,MAAMtrB,KAAN,EAA5B;AAEA;;AAEDmgC,YAASpE,aAAT,GAAyBsB,KAAKtB,aAAL,GAAqB0D,mBAA9C;;AAEAI,UAAO9sC,IAAP,CAAaotC,QAAb;AAEA;;AAED;;AAEA,OAAM3sC,IAAI,CAAJ,EAAOkoB,KAAKoiB,KAAK3rC,MAAvB,EAA+BqB,IAAIkoB,EAAnC,EAAuCloB,GAAvC,EAA8C;;AAE7C,OAAIylB,KAAK6kB,KAAMtqC,CAAN,CAAT;AAAA,OAAoB8sC,SAAS,EAA7B;;AAEA,OAAKrnB,OAAOpoB,SAAZ,EAAwB;;AAEvB;AAEA;;AAED,QAAM,IAAI0tB,IAAI,CAAR,EAAW+e,KAAKrkB,GAAG9mB,MAAzB,EAAiCosB,IAAI+e,EAArC,EAAyC/e,GAAzC,EAAgD;;AAE/C+hB,WAAOvtC,IAAP,CAAakmB,GAAIsF,CAAJ,EAAQve,KAAR,EAAb;AAEA;;AAED+/B,QAAKhtC,IAAL,CAAWutC,MAAX;AAEA;AAED,EA1uB8E;;AA4uB/EC,YAAW,UAAWC,IAAX,EAAkB;;AAE5B,MAAK,EAAIA,QAAQA,KAAKC,MAAjB,CAAL,EAAiC;;AAEhCngC,WAAQyD,KAAR,CAAe,iEAAf,EAAkFy8B,IAAlF;AACA;AAEA;;AAED,MAAKA,KAAKzpB,gBAAV,EAA6BypB,KAAKhpB,YAAL;;AAE7B,OAAKuS,KAAL,CAAYyW,KAAK5jB,QAAjB,EAA2B4jB,KAAKtzB,MAAhC;AAEA,EAzvB8E;;AA2vB/E;;;;;;AAMAwzB,gBAAe,YAAY;;AAE1B,MAAIC,cAAc,EAAlB,CAF0B,CAEJ;AACtB,MAAIC,SAAS,EAAb;AAAA,MAAiBC,UAAU,EAA3B;;AAEA,MAAI1gC,CAAJ,EAAOs6B,GAAP;AACA,MAAIqG,kBAAkB,CAAtB,CAN0B,CAMD;AACzB,MAAIC,YAAYjwC,KAAKC,GAAL,CAAU,EAAV,EAAc+vC,eAAd,CAAhB;AACA,MAAIttC,CAAJ,EAAOkoB,EAAP,EAAW2hB,IAAX;AACA,MAAIK,OAAJ,EAAanf,CAAb,EAAgB+e,EAAhB;;AAEA,OAAM9pC,IAAI,CAAJ,EAAOkoB,KAAK,KAAKoB,QAAL,CAAc3qB,MAAhC,EAAwCqB,IAAIkoB,EAA5C,EAAgDloB,GAAhD,EAAuD;;AAEtD2M,OAAI,KAAK2c,QAAL,CAAetpB,CAAf,CAAJ;AACAinC,SAAM3pC,KAAK8Q,KAAL,CAAYzB,EAAE9O,CAAF,GAAM0vC,SAAlB,IAAgC,GAAhC,GAAsCjwC,KAAK8Q,KAAL,CAAYzB,EAAElC,CAAF,GAAM8iC,SAAlB,CAAtC,GAAsE,GAAtE,GAA4EjwC,KAAK8Q,KAAL,CAAYzB,EAAEwF,CAAF,GAAMo7B,SAAlB,CAAlF;;AAEA,OAAKJ,YAAalG,GAAb,MAAuB5pC,SAA5B,EAAwC;;AAEvC8vC,gBAAalG,GAAb,IAAqBjnC,CAArB;AACAotC,WAAO7tC,IAAP,CAAa,KAAK+pB,QAAL,CAAetpB,CAAf,CAAb;AACAqtC,YAASrtC,CAAT,IAAeotC,OAAOzuC,MAAP,GAAgB,CAA/B;AAEA,IAND,MAMO;;AAEN;AACA0uC,YAASrtC,CAAT,IAAeqtC,QAASF,YAAalG,GAAb,CAAT,CAAf;AAEA;AAED;;AAGD;AACA;AACA,MAAIuG,sBAAsB,EAA1B;;AAEA,OAAMxtC,IAAI,CAAJ,EAAOkoB,KAAK,KAAK2gB,KAAL,CAAWlqC,MAA7B,EAAqCqB,IAAIkoB,EAAzC,EAA6CloB,GAA7C,EAAoD;;AAEnD6pC,UAAO,KAAKhB,KAAL,CAAY7oC,CAAZ,CAAP;;AAEA6pC,QAAK18B,CAAL,GAASkgC,QAASxD,KAAK18B,CAAd,CAAT;AACA08B,QAAKz8B,CAAL,GAASigC,QAASxD,KAAKz8B,CAAd,CAAT;AACAy8B,QAAK15B,CAAL,GAASk9B,QAASxD,KAAK15B,CAAd,CAAT;;AAEA+5B,aAAU,CAAEL,KAAK18B,CAAP,EAAU08B,KAAKz8B,CAAf,EAAkBy8B,KAAK15B,CAAvB,CAAV;;AAEA;AACA;AACA,QAAM,IAAIlG,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9B,QAAKigC,QAASjgC,CAAT,MAAiBigC,QAAS,CAAEjgC,IAAI,CAAN,IAAY,CAArB,CAAtB,EAAiD;;AAEhDujC,yBAAoBjuC,IAApB,CAA0BS,CAA1B;AACA;AAEA;AAED;AAED;;AAED,OAAMA,IAAIwtC,oBAAoB7uC,MAApB,GAA6B,CAAvC,EAA0CqB,KAAK,CAA/C,EAAkDA,GAAlD,EAAyD;;AAExD,OAAIytC,MAAMD,oBAAqBxtC,CAArB,CAAV;;AAEA,QAAK6oC,KAAL,CAAWlpC,MAAX,CAAmB8tC,GAAnB,EAAwB,CAAxB;;AAEA,QAAM1iB,IAAI,CAAJ,EAAO+e,KAAK,KAAKhB,aAAL,CAAmBnqC,MAArC,EAA6CosB,IAAI+e,EAAjD,EAAqD/e,GAArD,EAA4D;;AAE3D,SAAK+d,aAAL,CAAoB/d,CAApB,EAAwBprB,MAAxB,CAAgC8tC,GAAhC,EAAqC,CAArC;AAEA;AAED;;AAED;;AAEA,MAAIC,OAAO,KAAKpkB,QAAL,CAAc3qB,MAAd,GAAuByuC,OAAOzuC,MAAzC;AACA,OAAK2qB,QAAL,GAAgB8jB,MAAhB;AACA,SAAOM,IAAP;AAEA,EAl1B8E;;AAo1B/E3lB,gBAAe,UAAWC,MAAX,EAAoB;;AAElC,OAAKsB,QAAL,GAAgB,EAAhB;;AAEA,OAAM,IAAItpB,IAAI,CAAR,EAAWC,IAAI+nB,OAAOrpB,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,OAAI8oB,QAAQd,OAAQhoB,CAAR,CAAZ;AACA,QAAKspB,QAAL,CAAc/pB,IAAd,CAAoB,IAAI8S,OAAJ,CAAayW,MAAMjrB,CAAnB,EAAsBirB,MAAMre,CAA5B,EAA+Bqe,MAAM3W,CAAN,IAAW,CAA1C,CAApB;AAEA;;AAED,SAAO,IAAP;AAEA,EAj2B8E;;AAm2B/Ew7B,2BAA0B,YAAY;;AAErC,MAAI9E,QAAQ,KAAKA,KAAjB;AACA,MAAIlqC,SAASkqC,MAAMlqC,MAAnB;;AAEA;;AAEA,OAAM,IAAIqB,IAAI,CAAd,EAAiBA,IAAIrB,MAArB,EAA6BqB,GAA7B,EAAoC;;AAEnC6oC,SAAO7oC,CAAP,EAAW4tC,GAAX,GAAiB5tC,CAAjB;AAEA;;AAED;;AAEA,WAAS6tC,iBAAT,CAA4B1gC,CAA5B,EAA+BC,CAA/B,EAAmC;;AAElC,UAAOD,EAAEo7B,aAAF,GAAkBn7B,EAAEm7B,aAA3B;AAEA;;AAEDM,QAAMiF,IAAN,CAAYD,iBAAZ;;AAEA;;AAEA,MAAItB,OAAO,KAAKzD,aAAL,CAAoB,CAApB,CAAX;AACA,MAAIwB,OAAO,KAAKxB,aAAL,CAAoB,CAApB,CAAX;;AAEA,MAAIiF,OAAJ,EAAaC,OAAb;;AAEA,MAAKzB,QAAQA,KAAK5tC,MAAL,KAAgBA,MAA7B,EAAsCovC,UAAU,EAAV;AACtC,MAAKzD,QAAQA,KAAK3rC,MAAL,KAAgBA,MAA7B,EAAsCqvC,UAAU,EAAV;;AAEtC,OAAM,IAAIhuC,IAAI,CAAd,EAAiBA,IAAIrB,MAArB,EAA6BqB,GAA7B,EAAoC;;AAEnC,OAAIslC,KAAKuD,MAAO7oC,CAAP,EAAW4tC,GAApB;;AAEA,OAAKG,OAAL,EAAeA,QAAQxuC,IAAR,CAAcgtC,KAAMjH,EAAN,CAAd;AACf,OAAK0I,OAAL,EAAeA,QAAQzuC,IAAR,CAAc+qC,KAAMhF,EAAN,CAAd;AAEf;;AAED,MAAKyI,OAAL,EAAe,KAAKjF,aAAL,CAAoB,CAApB,IAA0BiF,OAA1B;AACf,MAAKC,OAAL,EAAe,KAAKlF,aAAL,CAAoB,CAApB,IAA0BkF,OAA1B;AAEf,EAh5B8E;;AAk5B/E/pB,SAAQ,YAAY;;AAEnB,MAAIiD,OAAO;AACVhC,aAAU;AACTtB,aAAS,GADA;AAET1kB,UAAM,UAFG;AAGTimB,eAAW;AAHF;AADA,GAAX;;AAQA;;AAEA+B,OAAKvd,IAAL,GAAY,KAAKA,IAAjB;AACAud,OAAKhoB,IAAL,GAAY,KAAKA,IAAjB;AACA,MAAK,KAAKgkB,IAAL,KAAc,EAAnB,EAAwBgE,KAAKhE,IAAL,GAAY,KAAKA,IAAjB;;AAExB,MAAK,KAAKwjB,UAAL,KAAoBrpC,SAAzB,EAAqC;;AAEpC,OAAIqpC,aAAa,KAAKA,UAAtB;;AAEA,QAAM,IAAIO,GAAV,IAAiBP,UAAjB,EAA8B;;AAE7B,QAAKA,WAAYO,GAAZ,MAAsB5pC,SAA3B,EAAuC6pB,KAAM+f,GAAN,IAAcP,WAAYO,GAAZ,CAAd;AAEvC;;AAED,UAAO/f,IAAP;AAEA;;AAED,MAAIoC,WAAW,EAAf;;AAEA,OAAM,IAAItpB,IAAI,CAAd,EAAiBA,IAAI,KAAKspB,QAAL,CAAc3qB,MAAnC,EAA2CqB,GAA3C,EAAkD;;AAEjD,OAAI4pC,SAAS,KAAKtgB,QAAL,CAAetpB,CAAf,CAAb;AACAspB,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;AAEA;;AAED,MAAI02B,QAAQ,EAAZ;AACA,MAAIuB,UAAU,EAAd;AACA,MAAI6D,cAAc,EAAlB;AACA,MAAIrF,SAAS,EAAb;AACA,MAAIsF,aAAa,EAAjB;AACA,MAAI7D,MAAM,EAAV;AACA,MAAI8D,UAAU,EAAd;;AAEA,OAAM,IAAInuC,IAAI,CAAd,EAAiBA,IAAI,KAAK6oC,KAAL,CAAWlqC,MAAhC,EAAwCqB,GAAxC,EAA+C;;AAE9C,OAAI6pC,OAAO,KAAKhB,KAAL,CAAY7oC,CAAZ,CAAX;;AAEA,OAAIouC,cAAc,IAAlB;AACA,OAAIC,YAAY,KAAhB,CAL8C,CAKvB;AACvB,OAAIC,kBAAkB,KAAKxF,aAAL,CAAoB,CAApB,EAAyB9oC,CAAzB,MAAiC3C,SAAvD;AACA,OAAIkxC,gBAAgB1E,KAAK9oB,MAAL,CAAYpiB,MAAZ,KAAuB,CAA3C;AACA,OAAI6vC,sBAAsB3E,KAAKrB,aAAL,CAAmB7pC,MAAnB,GAA4B,CAAtD;AACA,OAAI8vC,eAAe5E,KAAK/R,KAAL,CAAWpa,CAAX,KAAiB,CAAjB,IAAsBmsB,KAAK/R,KAAL,CAAWjW,CAAX,KAAiB,CAAvC,IAA4CgoB,KAAK/R,KAAL,CAAW1qB,CAAX,KAAiB,CAAhF;AACA,OAAIshC,qBAAqB7E,KAAKpB,YAAL,CAAkB9pC,MAAlB,GAA2B,CAApD;;AAEA,OAAIgwC,WAAW,CAAf;;AAEAA,cAAWC,OAAQD,QAAR,EAAkB,CAAlB,EAAqB,CAArB,CAAX,CAd8C,CAcT;AACrCA,cAAWC,OAAQD,QAAR,EAAkB,CAAlB,EAAqBP,WAArB,CAAX;AACAO,cAAWC,OAAQD,QAAR,EAAkB,CAAlB,EAAqBN,SAArB,CAAX;AACAM,cAAWC,OAAQD,QAAR,EAAkB,CAAlB,EAAqBL,eAArB,CAAX;AACAK,cAAWC,OAAQD,QAAR,EAAkB,CAAlB,EAAqBJ,aAArB,CAAX;AACAI,cAAWC,OAAQD,QAAR,EAAkB,CAAlB,EAAqBH,mBAArB,CAAX;AACAG,cAAWC,OAAQD,QAAR,EAAkB,CAAlB,EAAqBF,YAArB,CAAX;AACAE,cAAWC,OAAQD,QAAR,EAAkB,CAAlB,EAAqBD,kBAArB,CAAX;;AAEA7F,SAAMtpC,IAAN,CAAYovC,QAAZ;AACA9F,SAAMtpC,IAAN,CAAYsqC,KAAK18B,CAAjB,EAAoB08B,KAAKz8B,CAAzB,EAA4By8B,KAAK15B,CAAjC;AACA04B,SAAMtpC,IAAN,CAAYsqC,KAAKtB,aAAjB;;AAEA,OAAK+F,eAAL,EAAuB;;AAEtB,QAAIxF,gBAAgB,KAAKA,aAAL,CAAoB,CAApB,EAAyB9oC,CAAzB,CAApB;;AAEA6oC,UAAMtpC,IAAN,CACCsvC,WAAY/F,cAAe,CAAf,CAAZ,CADD,EAEC+F,WAAY/F,cAAe,CAAf,CAAZ,CAFD,EAGC+F,WAAY/F,cAAe,CAAf,CAAZ,CAHD;AAMA;;AAED,OAAKyF,aAAL,EAAqB;;AAEpB1F,UAAMtpC,IAAN,CAAYuvC,eAAgBjF,KAAK9oB,MAArB,CAAZ;AAEA;;AAED,OAAKytB,mBAAL,EAA2B;;AAE1B,QAAIhG,gBAAgBqB,KAAKrB,aAAzB;;AAEAK,UAAMtpC,IAAN,CACCuvC,eAAgBtG,cAAe,CAAf,CAAhB,CADD,EAECsG,eAAgBtG,cAAe,CAAf,CAAhB,CAFD,EAGCsG,eAAgBtG,cAAe,CAAf,CAAhB,CAHD;AAMA;;AAED,OAAKiG,YAAL,EAAoB;;AAEnB5F,UAAMtpC,IAAN,CAAYwvC,cAAelF,KAAK/R,KAApB,CAAZ;AAEA;;AAED,OAAK4W,kBAAL,EAA0B;;AAEzB,QAAIjG,eAAeoB,KAAKpB,YAAxB;;AAEAI,UAAMtpC,IAAN,CACCwvC,cAAetG,aAAc,CAAd,CAAf,CADD,EAECsG,cAAetG,aAAc,CAAd,CAAf,CAFD,EAGCsG,cAAetG,aAAc,CAAd,CAAf,CAHD;AAMA;AAED;;AAED,WAASmG,MAAT,CAAiBnxC,KAAjB,EAAwB6b,QAAxB,EAAkCwuB,OAAlC,EAA4C;;AAE3C,UAAOA,UAAUrqC,QAAU,KAAK6b,QAAzB,GAAsC7b,QAAU,EAAI,KAAK6b,QAAT,CAAvD;AAEA;;AAED,WAASw1B,cAAT,CAAyB/tB,MAAzB,EAAkC;;AAEjC,OAAIiuB,OAAOjuB,OAAOljB,CAAP,CAASM,QAAT,KAAsB4iB,OAAOtW,CAAP,CAAStM,QAAT,EAAtB,GAA4C4iB,OAAO5O,CAAP,CAAShU,QAAT,EAAvD;;AAEA,OAAK8vC,YAAae,IAAb,MAAwB3xC,SAA7B,EAAyC;;AAExC,WAAO4wC,YAAae,IAAb,CAAP;AAEA;;AAEDf,eAAae,IAAb,IAAsB5E,QAAQzrC,MAAR,GAAiB,CAAvC;AACAyrC,WAAQ7qC,IAAR,CAAcwhB,OAAOljB,CAArB,EAAwBkjB,OAAOtW,CAA/B,EAAkCsW,OAAO5O,CAAzC;;AAEA,UAAO87B,YAAae,IAAb,CAAP;AAEA;;AAED,WAASD,aAAT,CAAwBjX,KAAxB,EAAgC;;AAE/B,OAAIkX,OAAOlX,MAAMpa,CAAN,CAAQvf,QAAR,KAAqB25B,MAAMjW,CAAN,CAAQ1jB,QAAR,EAArB,GAA0C25B,MAAM1qB,CAAN,CAAQjP,QAAR,EAArD;;AAEA,OAAK+vC,WAAYc,IAAZ,MAAuB3xC,SAA5B,EAAwC;;AAEvC,WAAO6wC,WAAYc,IAAZ,CAAP;AAEA;;AAEDd,cAAYc,IAAZ,IAAqBpG,OAAOjqC,MAA5B;AACAiqC,UAAOrpC,IAAP,CAAau4B,MAAMU,MAAN,EAAb;;AAEA,UAAO0V,WAAYc,IAAZ,CAAP;AAEA;;AAED,WAASH,UAAT,CAAqBppB,EAArB,EAA0B;;AAEzB,OAAIupB,OAAOvpB,GAAG5nB,CAAH,CAAKM,QAAL,KAAkBsnB,GAAGhb,CAAH,CAAKtM,QAAL,EAA7B;;AAEA,OAAKgwC,QAASa,IAAT,MAAoB3xC,SAAzB,EAAqC;;AAEpC,WAAO8wC,QAASa,IAAT,CAAP;AAEA;;AAEDb,WAASa,IAAT,IAAkB3E,IAAI1rC,MAAJ,GAAa,CAA/B;AACA0rC,OAAI9qC,IAAJ,CAAUkmB,GAAG5nB,CAAb,EAAgB4nB,GAAGhb,CAAnB;;AAEA,UAAO0jC,QAASa,IAAT,CAAP;AAEA;;AAED9nB,OAAKA,IAAL,GAAY,EAAZ;;AAEAA,OAAKA,IAAL,CAAUoC,QAAV,GAAqBA,QAArB;AACApC,OAAKA,IAAL,CAAUkjB,OAAV,GAAoBA,OAApB;AACA,MAAKxB,OAAOjqC,MAAP,GAAgB,CAArB,EAAyBuoB,KAAKA,IAAL,CAAU0hB,MAAV,GAAmBA,MAAnB;AACzB,MAAKyB,IAAI1rC,MAAJ,GAAa,CAAlB,EAAsBuoB,KAAKA,IAAL,CAAUmjB,GAAV,GAAgB,CAAEA,GAAF,CAAhB,CA1LH,CA0L4B;AAC/CnjB,OAAKA,IAAL,CAAU2hB,KAAV,GAAkBA,KAAlB;;AAEA,SAAO3hB,IAAP;AAEA,EAjlC8E;;AAmlC/E1a,QAAO,YAAY;;AAElB;;;;;;;;;;;;;;;AAwBA,SAAO,IAAIm8B,QAAJ,GAAej8B,IAAf,CAAqB,IAArB,CAAP;AAEA,EA/mC8E;;AAinC/EA,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB,MAAIoB,CAAJ,EAAOkoB,EAAP,EAAW6C,CAAX,EAAc+e,EAAd,EAAkBmF,CAAlB,EAAqBC,EAArB;;AAEA;;AAEA,OAAK5lB,QAAL,GAAgB,EAAhB;AACA,OAAKsf,MAAL,GAAc,EAAd;AACA,OAAKC,KAAL,GAAa,EAAb;AACA,OAAKC,aAAL,GAAqB,CAAC,EAAD,CAArB;AACA,OAAKC,YAAL,GAAoB,EAApB;AACA,OAAKC,YAAL,GAAoB,EAApB;AACA,OAAKC,WAAL,GAAmB,EAAnB;AACA,OAAKC,WAAL,GAAmB,EAAnB;AACA,OAAKC,aAAL,GAAqB,EAArB;AACA,OAAKC,WAAL,GAAmB,IAAnB;AACA,OAAKta,cAAL,GAAsB,IAAtB;;AAEA;;AAEA,OAAK5L,IAAL,GAAYtkB,OAAOskB,IAAnB;;AAEA;;AAEA,MAAIoG,WAAW1qB,OAAO0qB,QAAtB;;AAEA,OAAMtpB,IAAI,CAAJ,EAAOkoB,KAAKoB,SAAS3qB,MAA3B,EAAmCqB,IAAIkoB,EAAvC,EAA2CloB,GAA3C,EAAkD;;AAEjD,QAAKspB,QAAL,CAAc/pB,IAAd,CAAoB+pB,SAAUtpB,CAAV,EAAcwM,KAAd,EAApB;AAEA;;AAED;;AAEA,MAAIo8B,SAAShqC,OAAOgqC,MAApB;;AAEA,OAAM5oC,IAAI,CAAJ,EAAOkoB,KAAK0gB,OAAOjqC,MAAzB,EAAiCqB,IAAIkoB,EAArC,EAAyCloB,GAAzC,EAAgD;;AAE/C,QAAK4oC,MAAL,CAAYrpC,IAAZ,CAAkBqpC,OAAQ5oC,CAAR,EAAYwM,KAAZ,EAAlB;AAEA;;AAED;;AAEA,MAAIq8B,QAAQjqC,OAAOiqC,KAAnB;;AAEA,OAAM7oC,IAAI,CAAJ,EAAOkoB,KAAK2gB,MAAMlqC,MAAxB,EAAgCqB,IAAIkoB,EAApC,EAAwCloB,GAAxC,EAA+C;;AAE9C,QAAK6oC,KAAL,CAAWtpC,IAAX,CAAiBspC,MAAO7oC,CAAP,EAAWwM,KAAX,EAAjB;AAEA;;AAED;;AAEA,OAAMxM,IAAI,CAAJ,EAAOkoB,KAAKtpB,OAAOkqC,aAAP,CAAqBnqC,MAAvC,EAA+CqB,IAAIkoB,EAAnD,EAAuDloB,GAAvD,EAA8D;;AAE7D,OAAI8oC,gBAAgBlqC,OAAOkqC,aAAP,CAAsB9oC,CAAtB,CAApB;;AAEA,OAAK,KAAK8oC,aAAL,CAAoB9oC,CAApB,MAA4B3C,SAAjC,EAA6C;;AAE5C,SAAKyrC,aAAL,CAAoB9oC,CAApB,IAA0B,EAA1B;AAEA;;AAED,QAAM+qB,IAAI,CAAJ,EAAO+e,KAAKhB,cAAcnqC,MAAhC,EAAwCosB,IAAI+e,EAA5C,EAAgD/e,GAAhD,EAAuD;;AAEtD,QAAIsf,MAAMvB,cAAe/d,CAAf,CAAV;AAAA,QAA8BokB,UAAU,EAAxC;;AAEA,SAAMF,IAAI,CAAJ,EAAOC,KAAK7E,IAAI1rC,MAAtB,EAA8BswC,IAAIC,EAAlC,EAAsCD,GAAtC,EAA6C;;AAE5C,SAAIxpB,KAAK4kB,IAAK4E,CAAL,CAAT;;AAEAE,aAAQ5vC,IAAR,CAAckmB,GAAGjZ,KAAH,EAAd;AAEA;;AAED,SAAKs8B,aAAL,CAAoB9oC,CAApB,EAAwBT,IAAxB,CAA8B4vC,OAA9B;AAEA;AAED;;AAED;;AAEA,MAAIpG,eAAenqC,OAAOmqC,YAA1B;;AAEA,OAAM/oC,IAAI,CAAJ,EAAOkoB,KAAK6gB,aAAapqC,MAA/B,EAAuCqB,IAAIkoB,EAA3C,EAA+CloB,GAA/C,EAAsD;;AAErD,OAAIovC,cAAc,EAAlB;AACAA,eAAYlsB,IAAZ,GAAmB6lB,aAAc/oC,CAAd,EAAkBkjB,IAArC;;AAEA;;AAEA,OAAK6lB,aAAc/oC,CAAd,EAAkBspB,QAAlB,KAA+BjsB,SAApC,EAAgD;;AAE/C+xC,gBAAY9lB,QAAZ,GAAuB,EAAvB;;AAEA,SAAMyB,IAAI,CAAJ,EAAO+e,KAAKf,aAAc/oC,CAAd,EAAkBspB,QAAlB,CAA2B3qB,MAA7C,EAAqDosB,IAAI+e,EAAzD,EAA6D/e,GAA7D,EAAoE;;AAEnEqkB,iBAAY9lB,QAAZ,CAAqB/pB,IAArB,CAA2BwpC,aAAc/oC,CAAd,EAAkBspB,QAAlB,CAA4ByB,CAA5B,EAAgCve,KAAhC,EAA3B;AAEA;AAED;;AAED;;AAEA,OAAKu8B,aAAc/oC,CAAd,EAAkBoqC,OAAlB,KAA8B/sC,SAAnC,EAA+C;;AAE9C+xC,gBAAYhF,OAAZ,GAAsB,EAAtB;;AAEA,SAAMrf,IAAI,CAAJ,EAAO+e,KAAKf,aAAc/oC,CAAd,EAAkBoqC,OAAlB,CAA0BzrC,MAA5C,EAAoDosB,IAAI+e,EAAxD,EAA4D/e,GAA5D,EAAmE;;AAElEqkB,iBAAYhF,OAAZ,CAAoB7qC,IAApB,CAA0BwpC,aAAc/oC,CAAd,EAAkBoqC,OAAlB,CAA2Brf,CAA3B,EAA+Bve,KAA/B,EAA1B;AAEA;AAED;;AAED,QAAKu8B,YAAL,CAAkBxpC,IAAlB,CAAwB6vC,WAAxB;AAEA;;AAED;;AAEA,MAAIpG,eAAepqC,OAAOoqC,YAA1B;;AAEA,OAAMhpC,IAAI,CAAJ,EAAOkoB,KAAK8gB,aAAarqC,MAA/B,EAAuCqB,IAAIkoB,EAA3C,EAA+CloB,GAA/C,EAAsD;;AAErD,OAAIqvC,cAAc,EAAlB;;AAEA;;AAEA,OAAKrG,aAAchpC,CAAd,EAAkBwoC,aAAlB,KAAoCnrC,SAAzC,EAAqD;;AAEpDgyC,gBAAY7G,aAAZ,GAA4B,EAA5B;;AAEA,SAAMzd,IAAI,CAAJ,EAAO+e,KAAKd,aAAchpC,CAAd,EAAkBwoC,aAAlB,CAAgC7pC,MAAlD,EAA0DosB,IAAI+e,EAA9D,EAAkE/e,GAAlE,EAAyE;;AAExE,SAAIukB,kBAAkBtG,aAAchpC,CAAd,EAAkBwoC,aAAlB,CAAiCzd,CAAjC,CAAtB;AACA,SAAIwkB,mBAAmB,EAAvB;;AAEAA,sBAAiBpiC,CAAjB,GAAqBmiC,gBAAgBniC,CAAhB,CAAkBX,KAAlB,EAArB;AACA+iC,sBAAiBniC,CAAjB,GAAqBkiC,gBAAgBliC,CAAhB,CAAkBZ,KAAlB,EAArB;AACA+iC,sBAAiBp/B,CAAjB,GAAqBm/B,gBAAgBn/B,CAAhB,CAAkB3D,KAAlB,EAArB;;AAEA6iC,iBAAY7G,aAAZ,CAA0BjpC,IAA1B,CAAgCgwC,gBAAhC;AAEA;AAED;;AAED;;AAEA,OAAKvG,aAAchpC,CAAd,EAAkB6rC,WAAlB,KAAkCxuC,SAAvC,EAAmD;;AAElDgyC,gBAAYxD,WAAZ,GAA0B,EAA1B;;AAEA,SAAM9gB,IAAI,CAAJ,EAAO+e,KAAKd,aAAchpC,CAAd,EAAkB6rC,WAAlB,CAA8BltC,MAAhD,EAAwDosB,IAAI+e,EAA5D,EAAgE/e,GAAhE,EAAuE;;AAEtEskB,iBAAYxD,WAAZ,CAAwBtsC,IAAxB,CAA8BypC,aAAchpC,CAAd,EAAkB6rC,WAAlB,CAA+B9gB,CAA/B,EAAmCve,KAAnC,EAA9B;AAEA;AAED;;AAED,QAAKw8B,YAAL,CAAkBzpC,IAAlB,CAAwB8vC,WAAxB;AAEA;;AAED;;AAEA,MAAIpG,cAAcrqC,OAAOqqC,WAAzB;;AAEA,OAAMjpC,IAAI,CAAJ,EAAOkoB,KAAK+gB,YAAYtqC,MAA9B,EAAsCqB,IAAIkoB,EAA1C,EAA8CloB,GAA9C,EAAqD;;AAEpD,QAAKipC,WAAL,CAAiB1pC,IAAjB,CAAuB0pC,YAAajpC,CAAb,EAAiBwM,KAAjB,EAAvB;AAEA;;AAED;;AAEA,MAAI08B,cAActqC,OAAOsqC,WAAzB;;AAEA,OAAMlpC,IAAI,CAAJ,EAAOkoB,KAAKghB,YAAYvqC,MAA9B,EAAsCqB,IAAIkoB,EAA1C,EAA8CloB,GAA9C,EAAqD;;AAEpD,QAAKkpC,WAAL,CAAiB3pC,IAAjB,CAAuB2pC,YAAalpC,CAAb,EAAiBwM,KAAjB,EAAvB;AAEA;;AAED;;AAEA,MAAI28B,gBAAgBvqC,OAAOuqC,aAA3B;;AAEA,OAAMnpC,IAAI,CAAJ,EAAOkoB,KAAKihB,cAAcxqC,MAAhC,EAAwCqB,IAAIkoB,EAA5C,EAAgDloB,GAAhD,EAAuD;;AAEtD,QAAKmpC,aAAL,CAAmB5pC,IAAnB,CAAyB4pC,cAAenpC,CAAf,CAAzB;AAEA;;AAED;;AAEA,MAAIopC,cAAcxqC,OAAOwqC,WAAzB;;AAEA,MAAKA,gBAAgB,IAArB,EAA4B;;AAE3B,QAAKA,WAAL,GAAmBA,YAAY58B,KAAZ,EAAnB;AAEA;;AAED;;AAEA,MAAIsiB,iBAAiBlwB,OAAOkwB,cAA5B;;AAEA,MAAKA,mBAAmB,IAAxB,EAA+B;;AAE9B,QAAKA,cAAL,GAAsBA,eAAetiB,KAAf,EAAtB;AAEA;;AAED;;AAEA,OAAK68B,kBAAL,GAA0BzqC,OAAOyqC,kBAAjC;AACA,OAAKC,kBAAL,GAA0B1qC,OAAO0qC,kBAAjC;AACA,OAAKC,aAAL,GAAqB3qC,OAAO2qC,aAA5B;AACA,OAAKC,iBAAL,GAAyB5qC,OAAO4qC,iBAAhC;AACA,OAAKC,gBAAL,GAAwB7qC,OAAO6qC,gBAA/B;AACA,OAAKC,uBAAL,GAA+B9qC,OAAO8qC,uBAAtC;AACA,OAAKC,gBAAL,GAAwB/qC,OAAO+qC,gBAA/B;;AAEA,SAAO,IAAP;AAEA,EAz1C8E;;AA21C/EpkB,UAAS,YAAY;;AAEpB,OAAK3lB,aAAL,CAAoB,EAAEV,MAAM,SAAR,EAApB;AAEA;;AA/1C8E,CAA3D,CAArB;;AAm2CA;;;;AAIA,SAASswC,eAAT,CAA0B1vC,KAA1B,EAAiC2vC,QAAjC,EAA2CC,UAA3C,EAAwD;;AAEvD,KAAK3Y,MAAMC,OAAN,CAAel3B,KAAf,CAAL,EAA8B;;AAE7B,QAAM,IAAIvB,SAAJ,CAAe,uDAAf,CAAN;AAEA;;AAED,MAAK2kB,IAAL,GAAY,EAAZ;;AAEA,MAAKpjB,KAAL,GAAaA,KAAb;AACA,MAAK2vC,QAAL,GAAgBA,QAAhB;AACA,MAAKr4B,KAAL,GAAatX,UAAUzC,SAAV,GAAsByC,MAAMnB,MAAN,GAAe8wC,QAArC,GAAgD,CAA7D;AACA,MAAKC,UAAL,GAAkBA,eAAe,IAAjC;;AAEA,MAAK9P,OAAL,GAAe,KAAf;AACA,MAAKyB,WAAL,GAAmB,EAAE1xB,QAAQ,CAAV,EAAayH,OAAO,CAAE,CAAtB,EAAnB;;AAEA,MAAKwM,OAAL,GAAe,CAAf;AAEA;;AAED5lB,OAAOC,cAAP,CAAuBuxC,gBAAgBzxC,SAAvC,EAAkD,aAAlD,EAAiE;;AAEhEgO,MAAK,UAAWtO,KAAX,EAAmB;;AAEvB,MAAKA,UAAU,IAAf,EAAsB,KAAKmmB,OAAL;AAEtB;;AAN+D,CAAjE;;AAUA5lB,OAAOK,MAAP,CAAemxC,gBAAgBzxC,SAA/B,EAA0C;;AAEzC4xC,oBAAmB,IAFsB;;AAIzCzP,mBAAkB,YAAY,CAAE,CAJS;;AAMzC0P,WAAU,UAAW9vC,KAAX,EAAmB;;AAE5B,MAAKi3B,MAAMC,OAAN,CAAel3B,KAAf,CAAL,EAA8B;;AAE7B,SAAM,IAAIvB,SAAJ,CAAe,uDAAf,CAAN;AAEA;;AAED,OAAK6Y,KAAL,GAAatX,UAAUzC,SAAV,GAAsByC,MAAMnB,MAAN,GAAe,KAAK8wC,QAA1C,GAAqD,CAAlE;AACA,OAAK3vC,KAAL,GAAaA,KAAb;;AAEA,SAAO,IAAP;AAEA,EAnBwC;;AAqBzC+vC,aAAY,UAAWpyC,KAAX,EAAmB;;AAE9B,OAAKmiC,OAAL,GAAeniC,KAAf;;AAEA,SAAO,IAAP;AAEA,EA3BwC;;AA6BzCiP,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB,OAAKskB,IAAL,GAAYtkB,OAAOskB,IAAnB;AACA,OAAKpjB,KAAL,GAAa,IAAIlB,OAAOkB,KAAP,CAAa2M,WAAjB,CAA8B7N,OAAOkB,KAArC,CAAb;AACA,OAAK2vC,QAAL,GAAgB7wC,OAAO6wC,QAAvB;AACA,OAAKr4B,KAAL,GAAaxY,OAAOwY,KAApB;AACA,OAAKs4B,UAAL,GAAkB9wC,OAAO8wC,UAAzB;;AAEA,OAAK9P,OAAL,GAAehhC,OAAOghC,OAAtB;;AAEA,SAAO,IAAP;AAEA,EAzCwC;;AA2CzCkQ,SAAQ,UAAWC,MAAX,EAAmBjgC,SAAnB,EAA8BkgC,MAA9B,EAAuC;;AAE9CD,YAAU,KAAKN,QAAf;AACAO,YAAUlgC,UAAU2/B,QAApB;;AAEA,OAAM,IAAIzvC,IAAI,CAAR,EAAWC,IAAI,KAAKwvC,QAA1B,EAAoCzvC,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,QAAKF,KAAL,CAAYiwC,SAAS/vC,CAArB,IAA2B8P,UAAUhQ,KAAV,CAAiBkwC,SAAShwC,CAA1B,CAA3B;AAEA;;AAED,SAAO,IAAP;AAEA,EAxDwC;;AA0DzCiwC,YAAW,UAAWnwC,KAAX,EAAmB;;AAE7B,OAAKA,KAAL,CAAWiM,GAAX,CAAgBjM,KAAhB;;AAEA,SAAO,IAAP;AAEA,EAhEwC;;AAkEzCowC,kBAAiB,UAAWtH,MAAX,EAAoB;;AAEpC,MAAI9oC,QAAQ,KAAKA,KAAjB;AAAA,MAAwB6P,SAAS,CAAjC;;AAEA,OAAM,IAAI3P,IAAI,CAAR,EAAWC,IAAI2oC,OAAOjqC,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,OAAI83B,QAAQ8Q,OAAQ5oC,CAAR,CAAZ;;AAEA,OAAK83B,UAAUz6B,SAAf,EAA2B;;AAE1ByP,YAAQC,IAAR,CAAc,6DAAd,EAA6E/M,CAA7E;AACA83B,YAAQ,IAAIZ,KAAJ,EAAR;AAEA;;AAEDp3B,SAAO6P,QAAP,IAAqBmoB,MAAMpa,CAA3B;AACA5d,SAAO6P,QAAP,IAAqBmoB,MAAMjW,CAA3B;AACA/hB,SAAO6P,QAAP,IAAqBmoB,MAAM1qB,CAA3B;AAEA;;AAED,SAAO,IAAP;AAEA,EAzFwC;;AA2FzC+iC,oBAAmB,UAAWC,OAAX,EAAqB;;AAEvC,MAAItwC,QAAQ,KAAKA,KAAjB;AAAA,MAAwB6P,SAAS,CAAjC;;AAEA,OAAM,IAAI3P,IAAI,CAAR,EAAWC,IAAImwC,QAAQzxC,MAA7B,EAAqCqB,IAAIC,CAAzC,EAA4CD,GAA5C,EAAmD;;AAElD,OAAIyZ,SAAS22B,QAASpwC,CAAT,CAAb;;AAEA,OAAKyZ,WAAWpc,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,gEAAd,EAAgF/M,CAAhF;AACAyZ,aAAS,IAAI5N,OAAJ,EAAT;AAEA;;AAED/L,SAAO6P,QAAP,IAAqB8J,OAAO5b,CAA5B;AACAiC,SAAO6P,QAAP,IAAqB8J,OAAOhP,CAA5B;AAEA;;AAED,SAAO,IAAP;AAEA,EAjHwC;;AAmHzC4lC,oBAAmB,UAAWD,OAAX,EAAqB;;AAEvC,MAAItwC,QAAQ,KAAKA,KAAjB;AAAA,MAAwB6P,SAAS,CAAjC;;AAEA,OAAM,IAAI3P,IAAI,CAAR,EAAWC,IAAImwC,QAAQzxC,MAA7B,EAAqCqB,IAAIC,CAAzC,EAA4CD,GAA5C,EAAmD;;AAElD,OAAIyZ,SAAS22B,QAASpwC,CAAT,CAAb;;AAEA,OAAKyZ,WAAWpc,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,gEAAd,EAAgF/M,CAAhF;AACAyZ,aAAS,IAAIpH,OAAJ,EAAT;AAEA;;AAEDvS,SAAO6P,QAAP,IAAqB8J,OAAO5b,CAA5B;AACAiC,SAAO6P,QAAP,IAAqB8J,OAAOhP,CAA5B;AACA3K,SAAO6P,QAAP,IAAqB8J,OAAOtH,CAA5B;AAEA;;AAED,SAAO,IAAP;AAEA,EA1IwC;;AA4IzCm+B,oBAAmB,UAAWF,OAAX,EAAqB;;AAEvC,MAAItwC,QAAQ,KAAKA,KAAjB;AAAA,MAAwB6P,SAAS,CAAjC;;AAEA,OAAM,IAAI3P,IAAI,CAAR,EAAWC,IAAImwC,QAAQzxC,MAA7B,EAAqCqB,IAAIC,CAAzC,EAA4CD,GAA5C,EAAmD;;AAElD,OAAIyZ,SAAS22B,QAASpwC,CAAT,CAAb;;AAEA,OAAKyZ,WAAWpc,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,gEAAd,EAAgF/M,CAAhF;AACAyZ,aAAS,IAAIiM,OAAJ,EAAT;AAEA;;AAED5lB,SAAO6P,QAAP,IAAqB8J,OAAO5b,CAA5B;AACAiC,SAAO6P,QAAP,IAAqB8J,OAAOhP,CAA5B;AACA3K,SAAO6P,QAAP,IAAqB8J,OAAOtH,CAA5B;AACArS,SAAO6P,QAAP,IAAqB8J,OAAO5M,CAA5B;AAEA;;AAED,SAAO,IAAP;AAEA,EApKwC;;AAsKzCd,MAAK,UAAWtO,KAAX,EAAkBkS,MAAlB,EAA2B;;AAE/B,MAAKA,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;;AAE5B,OAAK7P,KAAL,CAAWiM,GAAX,CAAgBtO,KAAhB,EAAuBkS,MAAvB;;AAEA,SAAO,IAAP;AAEA,EA9KwC;;AAgLzCI,OAAM,UAAWtR,KAAX,EAAmB;;AAExB,SAAO,KAAKqB,KAAL,CAAYrB,QAAQ,KAAKgxC,QAAzB,CAAP;AAEA,EApLwC;;AAsLzCtjC,OAAM,UAAW1N,KAAX,EAAkBZ,CAAlB,EAAsB;;AAE3B,OAAKiC,KAAL,CAAYrB,QAAQ,KAAKgxC,QAAzB,IAAsC5xC,CAAtC;;AAEA,SAAO,IAAP;AAEA,EA5LwC;;AA8LzCmS,OAAM,UAAWvR,KAAX,EAAmB;;AAExB,SAAO,KAAKqB,KAAL,CAAYrB,QAAQ,KAAKgxC,QAAb,GAAwB,CAApC,CAAP;AAEA,EAlMwC;;AAoMzCrjC,OAAM,UAAW3N,KAAX,EAAkBgM,CAAlB,EAAsB;;AAE3B,OAAK3K,KAAL,CAAYrB,QAAQ,KAAKgxC,QAAb,GAAwB,CAApC,IAA0ChlC,CAA1C;;AAEA,SAAO,IAAP;AAEA,EA1MwC;;AA4MzC4M,OAAM,UAAW5Y,KAAX,EAAmB;;AAExB,SAAO,KAAKqB,KAAL,CAAYrB,QAAQ,KAAKgxC,QAAb,GAAwB,CAApC,CAAP;AAEA,EAhNwC;;AAkNzCxwB,OAAM,UAAWxgB,KAAX,EAAkB0T,CAAlB,EAAsB;;AAE3B,OAAKrS,KAAL,CAAYrB,QAAQ,KAAKgxC,QAAb,GAAwB,CAApC,IAA0Ct9B,CAA1C;;AAEA,SAAO,IAAP;AAEA,EAxNwC;;AA0NzC8T,OAAM,UAAWxnB,KAAX,EAAmB;;AAExB,SAAO,KAAKqB,KAAL,CAAYrB,QAAQ,KAAKgxC,QAAb,GAAwB,CAApC,CAAP;AAEA,EA9NwC;;AAgOzC7pB,OAAM,UAAWnnB,KAAX,EAAkBoO,CAAlB,EAAsB;;AAE3B,OAAK/M,KAAL,CAAYrB,QAAQ,KAAKgxC,QAAb,GAAwB,CAApC,IAA0C5iC,CAA1C;;AAEA,SAAO,IAAP;AAEA,EAtOwC;;AAwOzC0jC,QAAO,UAAW9xC,KAAX,EAAkBZ,CAAlB,EAAqB4M,CAArB,EAAyB;;AAE/BhM,WAAS,KAAKgxC,QAAd;;AAEA,OAAK3vC,KAAL,CAAYrB,QAAQ,CAApB,IAA0BZ,CAA1B;AACA,OAAKiC,KAAL,CAAYrB,QAAQ,CAApB,IAA0BgM,CAA1B;;AAEA,SAAO,IAAP;AAEA,EAjPwC;;AAmPzC8M,SAAQ,UAAW9Y,KAAX,EAAkBZ,CAAlB,EAAqB4M,CAArB,EAAwB0H,CAAxB,EAA4B;;AAEnC1T,WAAS,KAAKgxC,QAAd;;AAEA,OAAK3vC,KAAL,CAAYrB,QAAQ,CAApB,IAA0BZ,CAA1B;AACA,OAAKiC,KAAL,CAAYrB,QAAQ,CAApB,IAA0BgM,CAA1B;AACA,OAAK3K,KAAL,CAAYrB,QAAQ,CAApB,IAA0B0T,CAA1B;;AAEA,SAAO,IAAP;AAEA,EA7PwC;;AA+PzCq+B,UAAS,UAAW/xC,KAAX,EAAkBZ,CAAlB,EAAqB4M,CAArB,EAAwB0H,CAAxB,EAA2BtF,CAA3B,EAA+B;;AAEvCpO,WAAS,KAAKgxC,QAAd;;AAEA,OAAK3vC,KAAL,CAAYrB,QAAQ,CAApB,IAA0BZ,CAA1B;AACA,OAAKiC,KAAL,CAAYrB,QAAQ,CAApB,IAA0BgM,CAA1B;AACA,OAAK3K,KAAL,CAAYrB,QAAQ,CAApB,IAA0B0T,CAA1B;AACA,OAAKrS,KAAL,CAAYrB,QAAQ,CAApB,IAA0BoO,CAA1B;;AAEA,SAAO,IAAP;AAEA,EA1QwC;;AA4QzC4jC,WAAU,UAAW1xB,QAAX,EAAsB;;AAE/B,OAAKmhB,gBAAL,GAAwBnhB,QAAxB;;AAEA,SAAO,IAAP;AAEA,EAlRwC;;AAoRzCvS,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,CAAsB,KAAK3M,KAA3B,EAAkC,KAAK2vC,QAAvC,EAAkD/iC,IAAlD,CAAwD,IAAxD,CAAP;AAEA;;AAxRwC,CAA1C;;AA4RA;;AAEA,SAASgkC,mBAAT,CAA8B5wC,KAA9B,EAAqC2vC,QAArC,EAA+CC,UAA/C,EAA4D;;AAE3DF,iBAAgBzwC,IAAhB,CAAsB,IAAtB,EAA4B,IAAI+hC,SAAJ,CAAehhC,KAAf,CAA5B,EAAoD2vC,QAApD,EAA8DC,UAA9D;AAEA;;AAEDgB,oBAAoB3yC,SAApB,GAAgCC,OAAO8lB,MAAP,CAAe0rB,gBAAgBzxC,SAA/B,CAAhC;AACA2yC,oBAAoB3yC,SAApB,CAA8B0O,WAA9B,GAA4CikC,mBAA5C;;AAGA,SAASC,oBAAT,CAA+B7wC,KAA/B,EAAsC2vC,QAAtC,EAAgDC,UAAhD,EAA6D;;AAE5DF,iBAAgBzwC,IAAhB,CAAsB,IAAtB,EAA4B,IAAIiiC,UAAJ,CAAgBlhC,KAAhB,CAA5B,EAAqD2vC,QAArD,EAA+DC,UAA/D;AAEA;;AAEDiB,qBAAqB5yC,SAArB,GAAiCC,OAAO8lB,MAAP,CAAe0rB,gBAAgBzxC,SAA/B,CAAjC;AACA4yC,qBAAqB5yC,SAArB,CAA+B0O,WAA/B,GAA6CkkC,oBAA7C;;AAGA,SAASC,2BAAT,CAAsC9wC,KAAtC,EAA6C2vC,QAA7C,EAAuDC,UAAvD,EAAoE;;AAEnEF,iBAAgBzwC,IAAhB,CAAsB,IAAtB,EAA4B,IAAI8xC,iBAAJ,CAAuB/wC,KAAvB,CAA5B,EAA4D2vC,QAA5D,EAAsEC,UAAtE;AAEA;;AAEDkB,4BAA4B7yC,SAA5B,GAAwCC,OAAO8lB,MAAP,CAAe0rB,gBAAgBzxC,SAA/B,CAAxC;AACA6yC,4BAA4B7yC,SAA5B,CAAsC0O,WAAtC,GAAoDmkC,2BAApD;;AAGA,SAASE,oBAAT,CAA+BhxC,KAA/B,EAAsC2vC,QAAtC,EAAgDC,UAAhD,EAA6D;;AAE5DF,iBAAgBzwC,IAAhB,CAAsB,IAAtB,EAA4B,IAAIyhC,UAAJ,CAAgB1gC,KAAhB,CAA5B,EAAqD2vC,QAArD,EAA+DC,UAA/D;AAEA;;AAEDoB,qBAAqB/yC,SAArB,GAAiCC,OAAO8lB,MAAP,CAAe0rB,gBAAgBzxC,SAA/B,CAAjC;AACA+yC,qBAAqB/yC,SAArB,CAA+B0O,WAA/B,GAA6CqkC,oBAA7C;;AAGA,SAASC,qBAAT,CAAgCjxC,KAAhC,EAAuC2vC,QAAvC,EAAiDC,UAAjD,EAA8D;;AAE7DF,iBAAgBzwC,IAAhB,CAAsB,IAAtB,EAA4B,IAAIuhC,WAAJ,CAAiBxgC,KAAjB,CAA5B,EAAsD2vC,QAAtD,EAAgEC,UAAhE;AAEA;;AAEDqB,sBAAsBhzC,SAAtB,GAAkCC,OAAO8lB,MAAP,CAAe0rB,gBAAgBzxC,SAA/B,CAAlC;AACAgzC,sBAAsBhzC,SAAtB,CAAgC0O,WAAhC,GAA8CskC,qBAA9C;;AAGA,SAASC,oBAAT,CAA+BlxC,KAA/B,EAAsC2vC,QAAtC,EAAgDC,UAAhD,EAA6D;;AAE5DF,iBAAgBzwC,IAAhB,CAAsB,IAAtB,EAA4B,IAAI6hC,UAAJ,CAAgB9gC,KAAhB,CAA5B,EAAqD2vC,QAArD,EAA+DC,UAA/D;AAEA;;AAEDsB,qBAAqBjzC,SAArB,GAAiCC,OAAO8lB,MAAP,CAAe0rB,gBAAgBzxC,SAA/B,CAAjC;AACAizC,qBAAqBjzC,SAArB,CAA+B0O,WAA/B,GAA6CukC,oBAA7C;;AAGA,SAASC,qBAAT,CAAgCnxC,KAAhC,EAAuC2vC,QAAvC,EAAiDC,UAAjD,EAA8D;;AAE7DF,iBAAgBzwC,IAAhB,CAAsB,IAAtB,EAA4B,IAAI2hC,WAAJ,CAAiB5gC,KAAjB,CAA5B,EAAsD2vC,QAAtD,EAAgEC,UAAhE;AAEA;;AAEDuB,sBAAsBlzC,SAAtB,GAAkCC,OAAO8lB,MAAP,CAAe0rB,gBAAgBzxC,SAA/B,CAAlC;AACAkzC,sBAAsBlzC,SAAtB,CAAgC0O,WAAhC,GAA8CwkC,qBAA9C;;AAGA,SAASC,sBAAT,CAAiCpxC,KAAjC,EAAwC2vC,QAAxC,EAAkDC,UAAlD,EAA+D;;AAE9DF,iBAAgBzwC,IAAhB,CAAsB,IAAtB,EAA4B,IAAIqhC,YAAJ,CAAkBtgC,KAAlB,CAA5B,EAAuD2vC,QAAvD,EAAiEC,UAAjE;AAEA;;AAEDwB,uBAAuBnzC,SAAvB,GAAmCC,OAAO8lB,MAAP,CAAe0rB,gBAAgBzxC,SAA/B,CAAnC;AACAmzC,uBAAuBnzC,SAAvB,CAAiC0O,WAAjC,GAA+CykC,sBAA/C;;AAGA,SAASC,sBAAT,CAAiCrxC,KAAjC,EAAwC2vC,QAAxC,EAAkDC,UAAlD,EAA+D;;AAE9DF,iBAAgBzwC,IAAhB,CAAsB,IAAtB,EAA4B,IAAIshC,YAAJ,CAAkBvgC,KAAlB,CAA5B,EAAuD2vC,QAAvD,EAAiEC,UAAjE;AAEA;;AAEDyB,uBAAuBpzC,SAAvB,GAAmCC,OAAO8lB,MAAP,CAAe0rB,gBAAgBzxC,SAA/B,CAAnC;AACAozC,uBAAuBpzC,SAAvB,CAAiC0O,WAAjC,GAA+C0kC,sBAA/C;;AAEA;;;;AAIA,SAASC,cAAT,GAA0B;;AAEzB,MAAK9nB,QAAL,GAAgB,EAAhB;AACA,MAAK8gB,OAAL,GAAe,EAAf;AACA,MAAKxB,MAAL,GAAc,EAAd;AACA,MAAKyB,GAAL,GAAW,EAAX;AACA,MAAKC,IAAL,GAAY,EAAZ;;AAEA,MAAKM,MAAL,GAAc,EAAd;;AAEA,MAAK7B,YAAL,GAAoB,EAApB;;AAEA,MAAKE,WAAL,GAAmB,EAAnB;AACA,MAAKC,WAAL,GAAmB,EAAnB;;AAEA;;AAEA,MAAKE,WAAL,GAAmB,IAAnB;AACA,MAAKta,cAAL,GAAsB,IAAtB;;AAEA;;AAEA,MAAKwa,kBAAL,GAA0B,KAA1B;AACA,MAAKE,iBAAL,GAAyB,KAAzB;AACA,MAAKC,gBAAL,GAAwB,KAAxB;AACA,MAAKF,aAAL,GAAqB,KAArB;AACA,MAAKI,gBAAL,GAAwB,KAAxB;AAEA;;AAED3rC,OAAOK,MAAP,CAAe+yC,eAAerzC,SAA9B,EAAyC;;AAExCszC,gBAAe,UAAWjoB,QAAX,EAAsB;;AAEpC,MAAIyhB,KAAJ;AACA,MAAID,SAAS,EAAb;AACA,MAAIrC,gBAAgBlrC,SAApB;;AAEA,MAAIwrC,QAAQzf,SAASyf,KAArB;;AAEA,OAAM,IAAI7oC,IAAI,CAAd,EAAiBA,IAAI6oC,MAAMlqC,MAA3B,EAAmCqB,GAAnC,EAA0C;;AAEzC,OAAI6pC,OAAOhB,MAAO7oC,CAAP,CAAX;;AAEA;;AAEA,OAAK6pC,KAAKtB,aAAL,KAAuBA,aAA5B,EAA4C;;AAE3CA,oBAAgBsB,KAAKtB,aAArB;;AAEA,QAAKsC,UAAUxtC,SAAf,EAA2B;;AAE1BwtC,WAAMzzB,KAAN,GAAgBpX,IAAI,CAAN,GAAY6qC,MAAMje,KAAhC;AACAge,YAAOrrC,IAAP,CAAasrC,KAAb;AAEA;;AAEDA,YAAQ;AACPje,YAAO5sB,IAAI,CADJ;AAEPuoC,oBAAeA;AAFR,KAAR;AAKA;AAED;;AAED,MAAKsC,UAAUxtC,SAAf,EAA2B;;AAE1BwtC,SAAMzzB,KAAN,GAAgBpX,IAAI,CAAN,GAAY6qC,MAAMje,KAAhC;AACAge,UAAOrrC,IAAP,CAAasrC,KAAb;AAEA;;AAED,OAAKD,MAAL,GAAcA,MAAd;AAEA,EA7CuC;;AA+CxC0G,eAAc,UAAWloB,QAAX,EAAsB;;AAEnC,MAAIyf,QAAQzf,SAASyf,KAArB;AACA,MAAIvf,WAAWF,SAASE,QAAxB;AACA,MAAIwf,gBAAgB1f,SAAS0f,aAA7B;;AAEA,MAAIwF,kBAAkBxF,cAAe,CAAf,KAAsBA,cAAe,CAAf,EAAmBnqC,MAAnB,GAA4B,CAAxE;AACA,MAAI4yC,mBAAmBzI,cAAe,CAAf,KAAsBA,cAAe,CAAf,EAAmBnqC,MAAnB,GAA4B,CAAzE;;AAEA;;AAEA,MAAIoqC,eAAe3f,SAAS2f,YAA5B;AACA,MAAIyI,qBAAqBzI,aAAapqC,MAAtC;;AAEA,MAAI8yC,oBAAJ;;AAEA,MAAKD,qBAAqB,CAA1B,EAA8B;;AAE7BC,0BAAuB,EAAvB;;AAEA,QAAM,IAAIzxC,IAAI,CAAd,EAAiBA,IAAIwxC,kBAArB,EAAyCxxC,GAAzC,EAAgD;;AAE/CyxC,yBAAsBzxC,CAAtB,IAA4B,EAA5B;AAEA;;AAED,QAAK+oC,YAAL,CAAkBzvB,QAAlB,GAA6Bm4B,oBAA7B;AAEA;;AAED,MAAIzI,eAAe5f,SAAS4f,YAA5B;AACA,MAAI0I,qBAAqB1I,aAAarqC,MAAtC;;AAEA,MAAIgzC,kBAAJ;;AAEA,MAAKD,qBAAqB,CAA1B,EAA8B;;AAE7BC,wBAAqB,EAArB;;AAEA,QAAM,IAAI3xC,IAAI,CAAd,EAAiBA,IAAI0xC,kBAArB,EAAyC1xC,GAAzC,EAAgD;;AAE/C2xC,uBAAoB3xC,CAApB,IAA0B,EAA1B;AAEA;;AAED,QAAK+oC,YAAL,CAAkBhoB,MAAlB,GAA2B4wB,kBAA3B;AAEA;;AAED;;AAEA,MAAIzI,cAAc9f,SAAS8f,WAA3B;AACA,MAAID,cAAc7f,SAAS6f,WAA3B;;AAEA,MAAI2I,iBAAiB1I,YAAYvqC,MAAZ,KAAuB2qB,SAAS3qB,MAArD;AACA,MAAIkzC,iBAAiB5I,YAAYtqC,MAAZ,KAAuB2qB,SAAS3qB,MAArD;;AAEA;;AAEA,OAAM,IAAIqB,IAAI,CAAd,EAAiBA,IAAI6oC,MAAMlqC,MAA3B,EAAmCqB,GAAnC,EAA0C;;AAEzC,OAAI6pC,OAAOhB,MAAO7oC,CAAP,CAAX;;AAEA,QAAKspB,QAAL,CAAc/pB,IAAd,CAAoB+pB,SAAUugB,KAAK18B,CAAf,CAApB,EAAwCmc,SAAUugB,KAAKz8B,CAAf,CAAxC,EAA4Dkc,SAAUugB,KAAK15B,CAAf,CAA5D;;AAEA,OAAIq4B,gBAAgBqB,KAAKrB,aAAzB;;AAEA,OAAKA,cAAc7pC,MAAd,KAAyB,CAA9B,EAAkC;;AAEjC,SAAKyrC,OAAL,CAAa7qC,IAAb,CAAmBipC,cAAe,CAAf,CAAnB,EAAuCA,cAAe,CAAf,CAAvC,EAA2DA,cAAe,CAAf,CAA3D;AAEA,IAJD,MAIO;;AAEN,QAAIznB,SAAS8oB,KAAK9oB,MAAlB;;AAEA,SAAKqpB,OAAL,CAAa7qC,IAAb,CAAmBwhB,MAAnB,EAA2BA,MAA3B,EAAmCA,MAAnC;AAEA;;AAED,OAAI0nB,eAAeoB,KAAKpB,YAAxB;;AAEA,OAAKA,aAAa9pC,MAAb,KAAwB,CAA7B,EAAiC;;AAEhC,SAAKiqC,MAAL,CAAYrpC,IAAZ,CAAkBkpC,aAAc,CAAd,CAAlB,EAAqCA,aAAc,CAAd,CAArC,EAAwDA,aAAc,CAAd,CAAxD;AAEA,IAJD,MAIO;;AAEN,QAAI3Q,QAAQ+R,KAAK/R,KAAjB;;AAEA,SAAK8Q,MAAL,CAAYrpC,IAAZ,CAAkBu4B,KAAlB,EAAyBA,KAAzB,EAAgCA,KAAhC;AAEA;;AAED,OAAKwW,oBAAoB,IAAzB,EAAgC;;AAE/B,QAAIwD,YAAYhJ,cAAe,CAAf,EAAoB9oC,CAApB,CAAhB;;AAEA,QAAK8xC,cAAcz0C,SAAnB,EAA+B;;AAE9B,UAAKgtC,GAAL,CAAS9qC,IAAT,CAAeuyC,UAAW,CAAX,CAAf,EAA+BA,UAAW,CAAX,CAA/B,EAA+CA,UAAW,CAAX,CAA/C;AAEA,KAJD,MAIO;;AAENhlC,aAAQC,IAAR,CAAc,0DAAd,EAA0E/M,CAA1E;;AAEA,UAAKqqC,GAAL,CAAS9qC,IAAT,CAAe,IAAIsM,OAAJ,EAAf,EAA8B,IAAIA,OAAJ,EAA9B,EAA6C,IAAIA,OAAJ,EAA7C;AAEA;AAED;;AAED,OAAK0lC,qBAAqB,IAA1B,EAAiC;;AAEhC,QAAIO,YAAYhJ,cAAe,CAAf,EAAoB9oC,CAApB,CAAhB;;AAEA,QAAK8xC,cAAcz0C,SAAnB,EAA+B;;AAE9B,UAAKitC,IAAL,CAAU/qC,IAAV,CAAgBuyC,UAAW,CAAX,CAAhB,EAAgCA,UAAW,CAAX,CAAhC,EAAgDA,UAAW,CAAX,CAAhD;AAEA,KAJD,MAIO;;AAENhlC,aAAQC,IAAR,CAAc,2DAAd,EAA2E/M,CAA3E;;AAEA,UAAKsqC,IAAL,CAAU/qC,IAAV,CAAgB,IAAIsM,OAAJ,EAAhB,EAA+B,IAAIA,OAAJ,EAA/B,EAA8C,IAAIA,OAAJ,EAA9C;AAEA;AAED;;AAED;;AAEA,QAAM,IAAIkf,IAAI,CAAd,EAAiBA,IAAIymB,kBAArB,EAAyCzmB,GAAzC,EAAgD;;AAE/C,QAAIqkB,cAAcrG,aAAche,CAAd,EAAkBzB,QAApC;;AAEAmoB,yBAAsB1mB,CAAtB,EAA0BxrB,IAA1B,CAAgC6vC,YAAavF,KAAK18B,CAAlB,CAAhC,EAAuDiiC,YAAavF,KAAKz8B,CAAlB,CAAvD,EAA8EgiC,YAAavF,KAAK15B,CAAlB,CAA9E;AAEA;;AAED,QAAM,IAAI4a,IAAI,CAAd,EAAiBA,IAAI2mB,kBAArB,EAAyC3mB,GAAzC,EAAgD;;AAE/C,QAAIskB,cAAcrG,aAAcje,CAAd,EAAkByd,aAAlB,CAAiCxoC,CAAjC,CAAlB;;AAEA2xC,uBAAoB5mB,CAApB,EAAwBxrB,IAAxB,CAA8B8vC,YAAYliC,CAA1C,EAA6CkiC,YAAYjiC,CAAzD,EAA4DiiC,YAAYl/B,CAAxE;AAEA;;AAED;;AAEA,OAAKyhC,cAAL,EAAsB;;AAErB,SAAK1I,WAAL,CAAiB3pC,IAAjB,CAAuB2pC,YAAaW,KAAK18B,CAAlB,CAAvB,EAA8C+7B,YAAaW,KAAKz8B,CAAlB,CAA9C,EAAqE87B,YAAaW,KAAK15B,CAAlB,CAArE;AAEA;;AAED,OAAK0hC,cAAL,EAAsB;;AAErB,SAAK5I,WAAL,CAAiB1pC,IAAjB,CAAuB0pC,YAAaY,KAAK18B,CAAlB,CAAvB,EAA8C87B,YAAaY,KAAKz8B,CAAlB,CAA9C,EAAqE67B,YAAaY,KAAK15B,CAAlB,CAArE;AAEA;AAED;;AAED,OAAKkhC,aAAL,CAAoBjoB,QAApB;;AAEA,OAAKkgB,kBAAL,GAA0BlgB,SAASkgB,kBAAnC;AACA,OAAKE,iBAAL,GAAyBpgB,SAASogB,iBAAlC;AACA,OAAKC,gBAAL,GAAwBrgB,SAASqgB,gBAAjC;AACA,OAAKF,aAAL,GAAqBngB,SAASmgB,aAA9B;AACA,OAAKI,gBAAL,GAAwBvgB,SAASugB,gBAAjC;;AAEA,SAAO,IAAP;AAEA;;AA5NuC,CAAzC;;AAgOA;;;;AAIA,SAASoI,QAAT,CAAmBjyC,KAAnB,EAA2B;;AAE1B,KAAKA,MAAMnB,MAAN,KAAiB,CAAtB,EAA0B,OAAO,CAAE0oB,QAAT;;AAE1B,KAAItd,MAAMjK,MAAO,CAAP,CAAV;;AAEA,MAAM,IAAIE,IAAI,CAAR,EAAWC,IAAIH,MAAMnB,MAA3B,EAAmCqB,IAAIC,CAAvC,EAA0C,EAAGD,CAA7C,EAAiD;;AAEhD,MAAKF,MAAOE,CAAP,IAAa+J,GAAlB,EAAwBA,MAAMjK,MAAOE,CAAP,CAAN;AAExB;;AAED,QAAO+J,GAAP;AAEA;;AAED;;;;;AAKA,IAAIioC,mBAAmB,CAAvB,EAA0B;;AAE1B,SAASC,cAAT,GAA0B;;AAEzBj0C,QAAOC,cAAP,CAAuB,IAAvB,EAA6B,IAA7B,EAAmC,EAAER,OAAOu0C,oBAAoB,CAA7B,EAAnC;;AAEA,MAAKroC,IAAL,GAAYX,MAAMI,YAAN,EAAZ;;AAEA,MAAK8Z,IAAL,GAAY,EAAZ;AACA,MAAKhkB,IAAL,GAAY,gBAAZ;;AAEA,MAAKT,KAAL,GAAa,IAAb;AACA,MAAK+qB,UAAL,GAAkB,EAAlB;;AAEA,MAAK0oB,eAAL,GAAuB,EAAvB;;AAEA,MAAKtH,MAAL,GAAc,EAAd;;AAEA,MAAKxB,WAAL,GAAmB,IAAnB;AACA,MAAKta,cAAL,GAAsB,IAAtB;;AAEA,MAAKqjB,SAAL,GAAiB,EAAEvlB,OAAO,CAAT,EAAYxV,OAAOiQ,QAAnB,EAAjB;AAEA;;AAED4qB,eAAel0C,SAAf,GAA2BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAe9kB,gBAAgBjB,SAA/B,CAAf,EAA2D;;AAErF0O,cAAawlC,cAFwE;;AAIrF1oB,mBAAkB,IAJmE;;AAMrF6oB,WAAU,YAAY;;AAErB,SAAO,KAAK3zC,KAAZ;AAEA,EAVoF;;AAYrF4zC,WAAU,UAAW5zC,KAAX,EAAmB;;AAE5B,MAAKs4B,MAAMC,OAAN,CAAev4B,KAAf,CAAL,EAA8B;;AAE7B,QAAKA,KAAL,GAAa,KAAMszC,SAAUtzC,KAAV,IAAoB,KAApB,GAA4BwyC,qBAA5B,GAAoDF,qBAA1D,EAAmFtyC,KAAnF,EAA0F,CAA1F,CAAb;AAEA,GAJD,MAIO;;AAEN,QAAKA,KAAL,GAAaA,KAAb;AAEA;AAED,EAxBoF;;AA0BrF6zC,eAAc,UAAWpvB,IAAX,EAAiBpT,SAAjB,EAA6B;;AAE1C,MAAK,EAAIA,aAAaA,UAAU6/B,iBAA3B,KAAkD,EAAI7/B,aAAaA,UAAU0xB,4BAA3B,CAAvD,EAAmH;;AAElH10B,WAAQC,IAAR,CAAc,wEAAd;;AAEA,QAAKulC,YAAL,CAAmBpvB,IAAnB,EAAyB,IAAIssB,eAAJ,CAAqB9wC,UAAW,CAAX,CAArB,EAAqCA,UAAW,CAAX,CAArC,CAAzB;;AAEA;AAEA;;AAED,MAAKwkB,SAAS,OAAd,EAAwB;;AAEvBpW,WAAQC,IAAR,CAAc,yEAAd;AACA,QAAKslC,QAAL,CAAeviC,SAAf;;AAEA;AAEA;;AAED,OAAK0Z,UAAL,CAAiBtG,IAAjB,IAA0BpT,SAA1B;;AAEA,SAAO,IAAP;AAEA,EAnDoF;;AAqDrFyiC,eAAc,UAAWrvB,IAAX,EAAkB;;AAE/B,SAAO,KAAKsG,UAAL,CAAiBtG,IAAjB,CAAP;AAEA,EAzDoF;;AA2DrFsvB,kBAAiB,UAAWtvB,IAAX,EAAkB;;AAElC,SAAO,KAAKsG,UAAL,CAAiBtG,IAAjB,CAAP;;AAEA,SAAO,IAAP;AAEA,EAjEoF;;AAmErFuvB,WAAU,UAAW7lB,KAAX,EAAkBxV,KAAlB,EAAyBmxB,aAAzB,EAAyC;;AAElD,OAAKqC,MAAL,CAAYrrC,IAAZ,CAAkB;;AAEjBqtB,UAAOA,KAFU;AAGjBxV,UAAOA,KAHU;AAIjBmxB,kBAAeA,kBAAkBlrC,SAAlB,GAA8BkrC,aAA9B,GAA8C;;AAJ5C,GAAlB;AAQA,EA7EoF;;AA+ErFmK,cAAa,YAAY;;AAExB,OAAK9H,MAAL,GAAc,EAAd;AAEA,EAnFoF;;AAqFrF+H,eAAc,UAAW/lB,KAAX,EAAkBxV,KAAlB,EAA0B;;AAEvC,OAAK+6B,SAAL,CAAevlB,KAAf,GAAuBA,KAAvB;AACA,OAAKulB,SAAL,CAAe/6B,KAAf,GAAuBA,KAAvB;AAEA,EA1FoF;;AA4FrF+sB,cAAa,UAAWzqB,MAAX,EAAoB;;AAEhC,MAAIJ,WAAW,KAAKkQ,UAAL,CAAgBlQ,QAA/B;;AAEA,MAAKA,aAAajc,SAAlB,EAA8B;;AAE7Bqc,UAAOvC,sBAAP,CAA+BmC,QAA/B;AACAA,YAASs5B,WAAT,GAAuB,IAAvB;AAEA;;AAED,MAAI7xB,SAAS,KAAKyI,UAAL,CAAgBzI,MAA7B;;AAEA,MAAKA,WAAW1jB,SAAhB,EAA4B;;AAE3B,OAAI+vB,eAAe,IAAI1L,OAAJ,GAAcI,eAAd,CAA+BpI,MAA/B,CAAnB;;AAEA0T,gBAAajW,sBAAb,CAAqC4J,MAArC;AACAA,UAAO6xB,WAAP,GAAqB,IAArB;AAEA;;AAED,MAAK,KAAKxJ,WAAL,KAAqB,IAA1B,EAAiC;;AAEhC,QAAKW,kBAAL;AAEA;;AAED,MAAK,KAAKjb,cAAL,KAAwB,IAA7B,EAAoC;;AAEnC,QAAKC,qBAAL;AAEA;;AAED,SAAO,IAAP;AAEA,EAhIoF;;AAkIrF4V,UAAS,YAAY;;AAEpB;;AAEA,MAAIzX,KAAK,IAAI5c,OAAJ,EAAT;;AAEA,SAAO,SAASq0B,OAAT,CAAkB91B,KAAlB,EAA0B;;AAEhCqe,MAAGvU,aAAH,CAAkB9J,KAAlB;;AAEA,QAAKs1B,WAAL,CAAkBjX,EAAlB;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAhBQ,EAlI4E;;AAoJrF0X,UAAS,YAAY;;AAEpB;;AAEA,MAAI1X,KAAK,IAAI5c,OAAJ,EAAT;;AAEA,SAAO,SAASs0B,OAAT,CAAkB/1B,KAAlB,EAA0B;;AAEhCqe,MAAGrU,aAAH,CAAkBhK,KAAlB;;AAEA,QAAKs1B,WAAL,CAAkBjX,EAAlB;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAhBQ,EApJ4E;;AAsKrF2X,UAAS,YAAY;;AAEpB;;AAEA,MAAI3X,KAAK,IAAI5c,OAAJ,EAAT;;AAEA,SAAO,SAASu0B,OAAT,CAAkBh2B,KAAlB,EAA0B;;AAEhCqe,MAAGpU,aAAH,CAAkBjK,KAAlB;;AAEA,QAAKs1B,WAAL,CAAkBjX,EAAlB;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAhBQ,EAtK4E;;AAwLrF5K,YAAW,YAAY;;AAEtB;;AAEA,MAAI4K,KAAK,IAAI5c,OAAJ,EAAT;;AAEA,SAAO,SAASgS,SAAT,CAAoBzkB,CAApB,EAAuB4M,CAAvB,EAA0B0H,CAA1B,EAA8B;;AAEpC+a,MAAGxU,eAAH,CAAoB7a,CAApB,EAAuB4M,CAAvB,EAA0B0H,CAA1B;;AAEA,QAAKgyB,WAAL,CAAkBjX,EAAlB;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAhBU,EAxL0E;;AA0MrF7U,QAAO,YAAY;;AAElB;;AAEA,MAAI6U,KAAK,IAAI5c,OAAJ,EAAT;;AAEA,SAAO,SAAS+H,KAAT,CAAgBxa,CAAhB,EAAmB4M,CAAnB,EAAsB0H,CAAtB,EAA0B;;AAEhC+a,MAAG/T,SAAH,CAActb,CAAd,EAAiB4M,CAAjB,EAAoB0H,CAApB;;AAEA,QAAKgyB,WAAL,CAAkBjX,EAAlB;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAhBM,EA1M8E;;AA4NrFrY,SAAQ,YAAY;;AAEnB,MAAIm1B,MAAM,IAAIhH,QAAJ,EAAV;;AAEA,SAAO,SAASnuB,MAAT,CAAiB4E,MAAjB,EAA0B;;AAEhCuwB,OAAIn1B,MAAJ,CAAY4E,MAAZ;;AAEAuwB,OAAIhmB,YAAJ;;AAEA,QAAKmgB,WAAL,CAAkB6F,IAAItwB,MAAtB;AAEA,GARD;AAUA,EAdO,EA5N6E;;AA4OrFxJ,SAAQ,YAAY;;AAEnB,MAAIP,SAAS,IAAI0C,OAAJ,EAAb;;AAEA,SAAO,SAASnC,MAAT,GAAkB;;AAExB,QAAK65B,kBAAL;;AAEA,QAAKX,WAAL,CAAiBxgB,SAAjB,CAA4BjZ,MAA5B,EAAqCrB,MAArC;;AAEA,QAAKgU,SAAL,CAAgB3S,OAAO9R,CAAvB,EAA0B8R,OAAOlF,CAAjC,EAAoCkF,OAAOwC,CAA3C;;AAEA,UAAO,IAAP;AAEA,GAVD;AAYA,EAhBO,EA5O6E;;AA8PrFoW,gBAAe,UAAWC,MAAX,EAAoB;;AAElC;;AAEA,MAAIY,WAAWZ,OAAOY,QAAtB;;AAEA,MAAKZ,OAAOqqB,QAAP,IAAmBrqB,OAAOsqB,MAA/B,EAAwC;;AAEvC,OAAI3I,YAAY,IAAI+G,sBAAJ,CAA4B9nB,SAASE,QAAT,CAAkB3qB,MAAlB,GAA2B,CAAvD,EAA0D,CAA1D,CAAhB;AACA,OAAIiqC,SAAS,IAAIsI,sBAAJ,CAA4B9nB,SAASwf,MAAT,CAAgBjqC,MAAhB,GAAyB,CAArD,EAAwD,CAAxD,CAAb;;AAEA,QAAK2zC,YAAL,CAAmB,UAAnB,EAA+BnI,UAAUkG,iBAAV,CAA6BjnB,SAASE,QAAtC,CAA/B;AACA,QAAKgpB,YAAL,CAAmB,OAAnB,EAA4B1J,OAAOsH,eAAP,CAAwB9mB,SAASwf,MAAjC,CAA5B;;AAEA,OAAKxf,SAAS+f,aAAT,IAA0B/f,SAAS+f,aAAT,CAAuBxqC,MAAvB,KAAkCyqB,SAASE,QAAT,CAAkB3qB,MAAnF,EAA4F;;AAE3F,QAAIwqC,gBAAgB,IAAI+H,sBAAJ,CAA4B9nB,SAAS+f,aAAT,CAAuBxqC,MAAnD,EAA2D,CAA3D,CAApB;;AAEA,SAAK2zC,YAAL,CAAmB,cAAnB,EAAmCnJ,cAAc8G,SAAd,CAAyB7mB,SAAS+f,aAAlC,CAAnC;AAEA;;AAED,OAAK/f,SAAS0F,cAAT,KAA4B,IAAjC,EAAwC;;AAEvC,SAAKA,cAAL,GAAsB1F,SAAS0F,cAAT,CAAwBtiB,KAAxB,EAAtB;AAEA;;AAED,OAAK4c,SAASggB,WAAT,KAAyB,IAA9B,EAAqC;;AAEpC,SAAKA,WAAL,GAAmBhgB,SAASggB,WAAT,CAAqB58B,KAArB,EAAnB;AAEA;AAED,GA5BD,MA4BO,IAAKgc,OAAOykB,MAAZ,EAAqB;;AAE3B,OAAK7jB,YAAYA,SAASC,UAA1B,EAAuC;;AAEtC,SAAKioB,YAAL,CAAmBloB,QAAnB;AAEA;AAED;;AAED,SAAO,IAAP;AAEA,EA5SoF;;AA8SrFrB,gBAAe,UAAWC,MAAX,EAAoB;;AAElC,MAAI1O,WAAW,EAAf;;AAEA,OAAM,IAAItZ,IAAI,CAAR,EAAWC,IAAI+nB,OAAOrpB,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,OAAI8oB,QAAQd,OAAQhoB,CAAR,CAAZ;AACAsZ,YAAS/Z,IAAT,CAAeupB,MAAMjrB,CAArB,EAAwBirB,MAAMre,CAA9B,EAAiCqe,MAAM3W,CAAN,IAAW,CAA5C;AAEA;;AAED,OAAKmgC,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B53B,QAA5B,EAAsC,CAAtC,CAA/B;;AAEA,SAAO,IAAP;AAEA,EA7ToF;;AA+TrFy5B,mBAAkB,UAAWvqB,MAAX,EAAoB;;AAErC,MAAIY,WAAWZ,OAAOY,QAAtB;;AAEA,MAAKZ,OAAOykB,MAAZ,EAAqB;;AAEpB,OAAI+F,SAAS5pB,SAAS6pB,gBAAtB;;AAEA,OAAK7pB,SAASigB,kBAAT,KAAgC,IAArC,EAA4C;;AAE3C2J,aAAS31C,SAAT;AACA+rB,aAASigB,kBAAT,GAA8B,KAA9B;AAEA;;AAED,OAAK2J,WAAW31C,SAAhB,EAA4B;;AAE3B,WAAO,KAAKi0C,YAAL,CAAmBloB,QAAnB,CAAP;AAEA;;AAED4pB,UAAO1J,kBAAP,GAA4BlgB,SAASkgB,kBAArC;AACA0J,UAAOxJ,iBAAP,GAA2BpgB,SAASogB,iBAApC;AACAwJ,UAAOvJ,gBAAP,GAA0BrgB,SAASqgB,gBAAnC;AACAuJ,UAAOzJ,aAAP,GAAuBngB,SAASmgB,aAAhC;AACAyJ,UAAOrJ,gBAAP,GAA0BvgB,SAASugB,gBAAnC;;AAEAvgB,YAASkgB,kBAAT,GAA8B,KAA9B;AACAlgB,YAASogB,iBAAT,GAA6B,KAA7B;AACApgB,YAASqgB,gBAAT,GAA4B,KAA5B;AACArgB,YAASmgB,aAAT,GAAyB,KAAzB;AACAngB,YAASugB,gBAAT,GAA4B,KAA5B;;AAEAvgB,cAAW4pB,MAAX;AAEA;;AAED,MAAIljC,SAAJ;;AAEA,MAAKsZ,SAASkgB,kBAAT,KAAgC,IAArC,EAA4C;;AAE3Cx5B,eAAY,KAAK0Z,UAAL,CAAgBlQ,QAA5B;;AAEA,OAAKxJ,cAAczS,SAAnB,EAA+B;;AAE9ByS,cAAUugC,iBAAV,CAA6BjnB,SAASE,QAAtC;AACAxZ,cAAU8iC,WAAV,GAAwB,IAAxB;AAEA;;AAEDxpB,YAASkgB,kBAAT,GAA8B,KAA9B;AAEA;;AAED,MAAKlgB,SAASogB,iBAAT,KAA+B,IAApC,EAA2C;;AAE1C15B,eAAY,KAAK0Z,UAAL,CAAgBzI,MAA5B;;AAEA,OAAKjR,cAAczS,SAAnB,EAA+B;;AAE9ByS,cAAUugC,iBAAV,CAA6BjnB,SAASghB,OAAtC;AACAt6B,cAAU8iC,WAAV,GAAwB,IAAxB;AAEA;;AAEDxpB,YAASogB,iBAAT,GAA6B,KAA7B;AAEA;;AAED,MAAKpgB,SAASqgB,gBAAT,KAA8B,IAAnC,EAA0C;;AAEzC35B,eAAY,KAAK0Z,UAAL,CAAgBsO,KAA5B;;AAEA,OAAKhoB,cAAczS,SAAnB,EAA+B;;AAE9ByS,cAAUogC,eAAV,CAA2B9mB,SAASwf,MAApC;AACA94B,cAAU8iC,WAAV,GAAwB,IAAxB;AAEA;;AAEDxpB,YAASqgB,gBAAT,GAA4B,KAA5B;AAEA;;AAED,MAAKrgB,SAASmgB,aAAd,EAA8B;;AAE7Bz5B,eAAY,KAAK0Z,UAAL,CAAgB/D,EAA5B;;AAEA,OAAK3V,cAAczS,SAAnB,EAA+B;;AAE9ByS,cAAUqgC,iBAAV,CAA6B/mB,SAASihB,GAAtC;AACAv6B,cAAU8iC,WAAV,GAAwB,IAAxB;AAEA;;AAEDxpB,YAASmgB,aAAT,GAAyB,KAAzB;AAEA;;AAED,MAAKngB,SAASsgB,uBAAd,EAAwC;;AAEvC55B,eAAY,KAAK0Z,UAAL,CAAgB0pB,YAA5B;;AAEA,OAAKpjC,cAAczS,SAAnB,EAA+B;;AAE9ByS,cAAUmgC,SAAV,CAAqB7mB,SAAS+f,aAA9B;AACAr5B,cAAU8iC,WAAV,GAAwB,IAAxB;AAEA;;AAEDxpB,YAASsgB,uBAAT,GAAmC,KAAnC;AAEA;;AAED,MAAKtgB,SAASugB,gBAAd,EAAiC;;AAEhCvgB,YAASioB,aAAT,CAAwB7oB,OAAOY,QAA/B;AACA,QAAKwhB,MAAL,GAAcxhB,SAASwhB,MAAvB;;AAEAxhB,YAASugB,gBAAT,GAA4B,KAA5B;AAEA;;AAED,SAAO,IAAP;AAEA,EA5boF;;AA8brF2H,eAAc,UAAWloB,QAAX,EAAsB;;AAEnCA,WAAS6pB,gBAAT,GAA4B,IAAI7B,cAAJ,GAAqBE,YAArB,CAAmCloB,QAAnC,CAA5B;;AAEA,SAAO,KAAK+pB,kBAAL,CAAyB/pB,SAAS6pB,gBAAlC,CAAP;AAEA,EApcoF;;AAscrFE,qBAAoB,UAAW/pB,QAAX,EAAsB;;AAEzC,MAAI+gB,YAAY,IAAI/J,YAAJ,CAAkBhX,SAASE,QAAT,CAAkB3qB,MAAlB,GAA2B,CAA7C,CAAhB;AACA,OAAK2zC,YAAL,CAAmB,UAAnB,EAA+B,IAAI9C,eAAJ,CAAqBrF,SAArB,EAAgC,CAAhC,EAAoCkG,iBAApC,CAAuDjnB,SAASE,QAAhE,CAA/B;;AAEA,MAAKF,SAASghB,OAAT,CAAiBzrC,MAAjB,GAA0B,CAA/B,EAAmC;;AAElC,OAAIyrC,UAAU,IAAIhK,YAAJ,CAAkBhX,SAASghB,OAAT,CAAiBzrC,MAAjB,GAA0B,CAA5C,CAAd;AACA,QAAK2zC,YAAL,CAAmB,QAAnB,EAA6B,IAAI9C,eAAJ,CAAqBpF,OAArB,EAA8B,CAA9B,EAAkCiG,iBAAlC,CAAqDjnB,SAASghB,OAA9D,CAA7B;AAEA;;AAED,MAAKhhB,SAASwf,MAAT,CAAgBjqC,MAAhB,GAAyB,CAA9B,EAAkC;;AAEjC,OAAIiqC,SAAS,IAAIxI,YAAJ,CAAkBhX,SAASwf,MAAT,CAAgBjqC,MAAhB,GAAyB,CAA3C,CAAb;AACA,QAAK2zC,YAAL,CAAmB,OAAnB,EAA4B,IAAI9C,eAAJ,CAAqB5G,MAArB,EAA6B,CAA7B,EAAiCsH,eAAjC,CAAkD9mB,SAASwf,MAA3D,CAA5B;AAEA;;AAED,MAAKxf,SAASihB,GAAT,CAAa1rC,MAAb,GAAsB,CAA3B,EAA+B;;AAE9B,OAAI0rC,MAAM,IAAIjK,YAAJ,CAAkBhX,SAASihB,GAAT,CAAa1rC,MAAb,GAAsB,CAAxC,CAAV;AACA,QAAK2zC,YAAL,CAAmB,IAAnB,EAAyB,IAAI9C,eAAJ,CAAqBnF,GAArB,EAA0B,CAA1B,EAA8B8F,iBAA9B,CAAiD/mB,SAASihB,GAA1D,CAAzB;AAEA;;AAED,MAAKjhB,SAASkhB,IAAT,CAAc3rC,MAAd,GAAuB,CAA5B,EAAgC;;AAE/B,OAAI2rC,OAAO,IAAIlK,YAAJ,CAAkBhX,SAASkhB,IAAT,CAAc3rC,MAAd,GAAuB,CAAzC,CAAX;AACA,QAAK2zC,YAAL,CAAmB,KAAnB,EAA0B,IAAI9C,eAAJ,CAAqBlF,IAArB,EAA2B,CAA3B,EAA+B6F,iBAA/B,CAAkD/mB,SAASkhB,IAA3D,CAA1B;AAEA;;AAED;;AAEA,OAAKM,MAAL,GAAcxhB,SAASwhB,MAAvB;;AAEA;;AAEA,OAAM,IAAI1nB,IAAV,IAAkBkG,SAAS2f,YAA3B,EAA0C;;AAEzC,OAAIjpC,QAAQ,EAAZ;AACA,OAAIipC,eAAe3f,SAAS2f,YAAT,CAAuB7lB,IAAvB,CAAnB;;AAEA,QAAM,IAAIljB,IAAI,CAAR,EAAWC,IAAI8oC,aAAapqC,MAAlC,EAA0CqB,IAAIC,CAA9C,EAAiDD,GAAjD,EAAwD;;AAEvD,QAAIovC,cAAcrG,aAAc/oC,CAAd,CAAlB;;AAEA,QAAI8P,YAAY,IAAIohC,sBAAJ,CAA4B9B,YAAYzwC,MAAZ,GAAqB,CAAjD,EAAoD,CAApD,CAAhB;;AAEAmB,UAAMP,IAAN,CAAYuQ,UAAUugC,iBAAV,CAA6BjB,WAA7B,CAAZ;AAEA;;AAED,QAAK8C,eAAL,CAAsBhvB,IAAtB,IAA+BpjB,KAA/B;AAEA;;AAED;;AAEA,MAAKspB,SAAS8f,WAAT,CAAqBvqC,MAArB,GAA8B,CAAnC,EAAuC;;AAEtC,OAAIuqC,cAAc,IAAIgI,sBAAJ,CAA4B9nB,SAAS8f,WAAT,CAAqBvqC,MAArB,GAA8B,CAA1D,EAA6D,CAA7D,CAAlB;AACA,QAAK2zC,YAAL,CAAmB,WAAnB,EAAgCpJ,YAAYoH,iBAAZ,CAA+BlnB,SAAS8f,WAAxC,CAAhC;AAEA;;AAED,MAAK9f,SAAS6f,WAAT,CAAqBtqC,MAArB,GAA8B,CAAnC,EAAuC;;AAEtC,OAAIsqC,cAAc,IAAIiI,sBAAJ,CAA4B9nB,SAAS6f,WAAT,CAAqBtqC,MAArB,GAA8B,CAA1D,EAA6D,CAA7D,CAAlB;AACA,QAAK2zC,YAAL,CAAmB,YAAnB,EAAiCrJ,YAAYqH,iBAAZ,CAA+BlnB,SAAS6f,WAAxC,CAAjC;AAEA;;AAED;;AAEA,MAAK7f,SAAS0F,cAAT,KAA4B,IAAjC,EAAwC;;AAEvC,QAAKA,cAAL,GAAsB1F,SAAS0F,cAAT,CAAwBtiB,KAAxB,EAAtB;AAEA;;AAED,MAAK4c,SAASggB,WAAT,KAAyB,IAA9B,EAAqC;;AAEpC,QAAKA,WAAL,GAAmBhgB,SAASggB,WAAT,CAAqB58B,KAArB,EAAnB;AAEA;;AAED,SAAO,IAAP;AAEA,EAhiBoF;;AAkiBrFu9B,qBAAoB,YAAY;;AAE/B,MAAK,KAAKX,WAAL,KAAqB,IAA1B,EAAiC;;AAEhC,QAAKA,WAAL,GAAmB,IAAIhiB,IAAJ,EAAnB;AAEA;;AAED,MAAI9N,WAAW,KAAKkQ,UAAL,CAAgBlQ,QAA/B;;AAEA,MAAKA,aAAajc,SAAlB,EAA8B;;AAE7B,QAAK+rC,WAAL,CAAiBthB,sBAAjB,CAAyCxO,QAAzC;AAEA,GAJD,MAIO;;AAEN,QAAK8vB,WAAL,CAAiBnhB,SAAjB;AAEA;;AAED,MAAKmrB,MAAO,KAAKhK,WAAL,CAAiBt/B,GAAjB,CAAqBjM,CAA5B,KAAmCu1C,MAAO,KAAKhK,WAAL,CAAiBt/B,GAAjB,CAAqBW,CAA5B,CAAnC,IAAsE2oC,MAAO,KAAKhK,WAAL,CAAiBt/B,GAAjB,CAAqBqI,CAA5B,CAA3E,EAA6G;;AAE5GrF,WAAQyD,KAAR,CAAe,mIAAf,EAAoJ,IAApJ;AAEA;AAED,EA5jBoF;;AA8jBrFwe,wBAAuB,YAAY;;AAElC,MAAIrG,MAAM,IAAItB,IAAJ,EAAV;AACA,MAAI3N,SAAS,IAAIpH,OAAJ,EAAb;;AAEA,SAAO,SAAS0c,qBAAT,GAAiC;;AAEvC,OAAK,KAAKD,cAAL,KAAwB,IAA7B,EAAoC;;AAEnC,SAAKA,cAAL,GAAsB,IAAIvD,MAAJ,EAAtB;AAEA;;AAED,OAAIjS,WAAW,KAAKkQ,UAAL,CAAgBlQ,QAA/B;;AAEA,OAAKA,QAAL,EAAgB;;AAEf,QAAIpJ,SAAS,KAAK4e,cAAL,CAAoB5e,MAAjC;;AAEAwY,QAAIZ,sBAAJ,CAA4BxO,QAA5B;AACAoP,QAAIE,SAAJ,CAAe1Y,MAAf;;AAEA;AACA;;AAEA,QAAIyb,cAAc,CAAlB;;AAEA,SAAM,IAAI3rB,IAAI,CAAR,EAAWkoB,KAAK5O,SAASlC,KAA/B,EAAsCpX,IAAIkoB,EAA1C,EAA8CloB,GAA9C,EAAqD;;AAEpDyZ,YAAO5b,CAAP,GAAWyb,SAASvJ,IAAT,CAAe/P,CAAf,CAAX;AACAyZ,YAAOhP,CAAP,GAAW6O,SAAStJ,IAAT,CAAehQ,CAAf,CAAX;AACAyZ,YAAOtH,CAAP,GAAWmH,SAASjC,IAAT,CAAerX,CAAf,CAAX;AACA2rB,mBAAcruB,KAAKyM,GAAL,CAAU4hB,WAAV,EAAuBzb,OAAOlB,iBAAP,CAA0ByK,MAA1B,CAAvB,CAAd;AAEA;;AAED,SAAKqV,cAAL,CAAoBxN,MAApB,GAA6BhkB,KAAKmR,IAAL,CAAWkd,WAAX,CAA7B;;AAEA,QAAKynB,MAAO,KAAKtkB,cAAL,CAAoBxN,MAA3B,CAAL,EAA2C;;AAE1CxU,aAAQyD,KAAR,CAAe,8HAAf,EAA+I,IAA/I;AAEA;AAED;AAED,GAzCD;AA2CA,EAhDsB,EA9jB8D;;AAgnBrFu6B,qBAAoB,YAAY;;AAE/B;;AAEA,EApnBoF;;AAsnBrFO,uBAAsB,YAAY;;AAEjC,MAAI5sC,QAAQ,KAAKA,KAAjB;AACA,MAAI+qB,aAAa,KAAKA,UAAtB;AACA,MAAIohB,SAAS,KAAKA,MAAlB;;AAEA,MAAKphB,WAAWlQ,QAAhB,EAA2B;;AAE1B,OAAI6wB,YAAY3gB,WAAWlQ,QAAX,CAAoBxZ,KAApC;;AAEA,OAAK0pB,WAAWzI,MAAX,KAAsB1jB,SAA3B,EAAuC;;AAEtC,SAAKi1C,YAAL,CAAmB,QAAnB,EAA6B,IAAI9C,eAAJ,CAAqB,IAAIpP,YAAJ,CAAkB+J,UAAUxrC,MAA5B,CAArB,EAA2D,CAA3D,CAA7B;AAEA,IAJD,MAIO;;AAEN;;AAEA,QAAImB,QAAQ0pB,WAAWzI,MAAX,CAAkBjhB,KAA9B;;AAEA,SAAM,IAAIE,IAAI,CAAR,EAAWkoB,KAAKpoB,MAAMnB,MAA5B,EAAoCqB,IAAIkoB,EAAxC,EAA4CloB,GAA5C,EAAmD;;AAElDF,WAAOE,CAAP,IAAa,CAAb;AAEA;AAED;;AAED,OAAIoqC,UAAU5gB,WAAWzI,MAAX,CAAkBjhB,KAAhC;;AAEA,OAAIorC,EAAJ,EAAQC,EAAR,EAAYC,EAAZ;AACA,OAAIiI,KAAK,IAAIhhC,OAAJ,EAAT;AAAA,OAAwBihC,KAAK,IAAIjhC,OAAJ,EAA7B;AAAA,OAA4CkhC,KAAK,IAAIlhC,OAAJ,EAAjD;AACA,OAAI04B,KAAK,IAAI14B,OAAJ,EAAT;AAAA,OAAwB24B,KAAK,IAAI34B,OAAJ,EAA7B;;AAEA;;AAEA,OAAK5T,KAAL,EAAa;;AAEZ,QAAIyrC,UAAUzrC,MAAMqB,KAApB;;AAEA,QAAK8qC,OAAOjsC,MAAP,KAAkB,CAAvB,EAA2B;;AAE1B,UAAK8zC,QAAL,CAAe,CAAf,EAAkBvI,QAAQvrC,MAA1B;AAEA;;AAED,SAAM,IAAIosB,IAAI,CAAR,EAAW+e,KAAKc,OAAOjsC,MAA7B,EAAqCosB,IAAI+e,EAAzC,EAA6C,EAAG/e,CAAhD,EAAoD;;AAEnD,SAAI8f,QAAQD,OAAQ7f,CAAR,CAAZ;;AAEA,SAAI6B,QAAQie,MAAMje,KAAlB;AACA,SAAIxV,QAAQyzB,MAAMzzB,KAAlB;;AAEA,UAAM,IAAIpX,IAAI4sB,KAAR,EAAe1E,KAAK0E,QAAQxV,KAAlC,EAAyCpX,IAAIkoB,EAA7C,EAAiDloB,KAAK,CAAtD,EAA0D;;AAEzDkrC,WAAKhB,QAASlqC,IAAI,CAAb,IAAmB,CAAxB;AACAmrC,WAAKjB,QAASlqC,IAAI,CAAb,IAAmB,CAAxB;AACAorC,WAAKlB,QAASlqC,IAAI,CAAb,IAAmB,CAAxB;;AAEAqzC,SAAG3jC,SAAH,CAAcy6B,SAAd,EAAyBe,EAAzB;AACAoI,SAAG5jC,SAAH,CAAcy6B,SAAd,EAAyBgB,EAAzB;AACAoI,SAAG7jC,SAAH,CAAcy6B,SAAd,EAAyBiB,EAAzB;;AAEAL,SAAGx9B,UAAH,CAAegmC,EAAf,EAAmBD,EAAnB;AACAtI,SAAGz9B,UAAH,CAAe8lC,EAAf,EAAmBC,EAAnB;AACAvI,SAAG3qB,KAAH,CAAU4qB,EAAV;;AAEAZ,cAASc,EAAT,KAAiBH,GAAGltC,CAApB;AACAusC,cAASc,KAAK,CAAd,KAAqBH,GAAGtgC,CAAxB;AACA2/B,cAASc,KAAK,CAAd,KAAqBH,GAAG54B,CAAxB;;AAEAi4B,cAASe,EAAT,KAAiBJ,GAAGltC,CAApB;AACAusC,cAASe,KAAK,CAAd,KAAqBJ,GAAGtgC,CAAxB;AACA2/B,cAASe,KAAK,CAAd,KAAqBJ,GAAG54B,CAAxB;;AAEAi4B,cAASgB,EAAT,KAAiBL,GAAGltC,CAApB;AACAusC,cAASgB,KAAK,CAAd,KAAqBL,GAAGtgC,CAAxB;AACA2/B,cAASgB,KAAK,CAAd,KAAqBL,GAAG54B,CAAxB;AAEA;AAED;AAED,IA/CD,MA+CO;;AAEN;;AAEA,SAAM,IAAInS,IAAI,CAAR,EAAWkoB,KAAKiiB,UAAUxrC,MAAhC,EAAwCqB,IAAIkoB,EAA5C,EAAgDloB,KAAK,CAArD,EAAyD;;AAExDqzC,QAAG3jC,SAAH,CAAcy6B,SAAd,EAAyBnqC,CAAzB;AACAszC,QAAG5jC,SAAH,CAAcy6B,SAAd,EAAyBnqC,IAAI,CAA7B;AACAuzC,QAAG7jC,SAAH,CAAcy6B,SAAd,EAAyBnqC,IAAI,CAA7B;;AAEA+qC,QAAGx9B,UAAH,CAAegmC,EAAf,EAAmBD,EAAnB;AACAtI,QAAGz9B,UAAH,CAAe8lC,EAAf,EAAmBC,EAAnB;AACAvI,QAAG3qB,KAAH,CAAU4qB,EAAV;;AAEAZ,aAASpqC,CAAT,IAAe+qC,GAAGltC,CAAlB;AACAusC,aAASpqC,IAAI,CAAb,IAAmB+qC,GAAGtgC,CAAtB;AACA2/B,aAASpqC,IAAI,CAAb,IAAmB+qC,GAAG54B,CAAtB;;AAEAi4B,aAASpqC,IAAI,CAAb,IAAmB+qC,GAAGltC,CAAtB;AACAusC,aAASpqC,IAAI,CAAb,IAAmB+qC,GAAGtgC,CAAtB;AACA2/B,aAASpqC,IAAI,CAAb,IAAmB+qC,GAAG54B,CAAtB;;AAEAi4B,aAASpqC,IAAI,CAAb,IAAmB+qC,GAAGltC,CAAtB;AACAusC,aAASpqC,IAAI,CAAb,IAAmB+qC,GAAGtgC,CAAtB;AACA2/B,aAASpqC,IAAI,CAAb,IAAmB+qC,GAAG54B,CAAtB;AAEA;AAED;;AAED,QAAKqhC,gBAAL;;AAEAhqB,cAAWzI,MAAX,CAAkB6xB,WAAlB,GAAgC,IAAhC;AAEA;AAED,EA7uBoF;;AA+uBrFrc,QAAO,UAAWnN,QAAX,EAAqBzZ,MAArB,EAA8B;;AAEpC,MAAK,EAAIyZ,YAAYA,SAASG,gBAAzB,CAAL,EAAmD;;AAElDzc,WAAQyD,KAAR,CAAe,iFAAf,EAAkG6Y,QAAlG;AACA;AAEA;;AAED,MAAKzZ,WAAWtS,SAAhB,EAA4B;;AAE3BsS,YAAS,CAAT;;AAEA7C,WAAQC,IAAR,CACC,wFACE,qEAFH;AAKA;;AAED,MAAIyc,aAAa,KAAKA,UAAtB;;AAEA,OAAM,IAAIyd,GAAV,IAAiBzd,UAAjB,EAA8B;;AAE7B,OAAKJ,SAASI,UAAT,CAAqByd,GAArB,MAA+B5pC,SAApC,EAAgD;;AAEhD,OAAIo2C,aAAajqB,WAAYyd,GAAZ,CAAjB;AACA,OAAIyM,kBAAkBD,WAAW3zC,KAAjC;;AAEA,OAAI6zC,aAAavqB,SAASI,UAAT,CAAqByd,GAArB,CAAjB;AACA,OAAI2M,kBAAkBD,WAAW7zC,KAAjC;;AAEA,OAAI+zC,gBAAgBF,WAAWlE,QAA/B;;AAEA,QAAM,IAAIzvC,IAAI,CAAR,EAAW+qB,IAAI8oB,gBAAgBlkC,MAArC,EAA6C3P,IAAI4zC,gBAAgBj1C,MAAjE,EAAyEqB,KAAM+qB,GAA/E,EAAsF;;AAErF2oB,oBAAiB3oB,CAAjB,IAAuB6oB,gBAAiB5zC,CAAjB,CAAvB;AAEA;AAED;;AAED,SAAO,IAAP;AAEA,EA3xBoF;;AA6xBrFwzC,mBAAkB,YAAY;;AAE7B,MAAI/5B,SAAS,IAAIpH,OAAJ,EAAb;;AAEA,SAAO,SAASmhC,gBAAT,GAA4B;;AAElC,OAAIpJ,UAAU,KAAK5gB,UAAL,CAAgBzI,MAA9B;;AAEA,QAAM,IAAI/gB,IAAI,CAAR,EAAWkoB,KAAKkiB,QAAQhzB,KAA9B,EAAqCpX,IAAIkoB,EAAzC,EAA6CloB,GAA7C,EAAoD;;AAEnDyZ,WAAO5b,CAAP,GAAWusC,QAAQr6B,IAAR,CAAc/P,CAAd,CAAX;AACAyZ,WAAOhP,CAAP,GAAW2/B,QAAQp6B,IAAR,CAAchQ,CAAd,CAAX;AACAyZ,WAAOtH,CAAP,GAAWi4B,QAAQ/yB,IAAR,CAAcrX,CAAd,CAAX;;AAEAyZ,WAAO7K,SAAP;;AAEAw7B,YAAQ7yB,MAAR,CAAgBvX,CAAhB,EAAmByZ,OAAO5b,CAA1B,EAA6B4b,OAAOhP,CAApC,EAAuCgP,OAAOtH,CAA9C;AAEA;AAED,GAhBD;AAkBA,EAtBiB,EA7xBmE;;AAqzBrF2hC,eAAc,YAAY;;AAEzB,MAAK,KAAKr1C,KAAL,KAAe,IAApB,EAA2B;;AAE1BqO,WAAQC,IAAR,CAAc,uEAAd;AACA,UAAO,IAAP;AAEA;;AAED,MAAIgnC,YAAY,IAAI9B,cAAJ,EAAhB;;AAEA,MAAI/H,UAAU,KAAKzrC,KAAL,CAAWqB,KAAzB;AACA,MAAI0pB,aAAa,KAAKA,UAAtB;;AAEA,OAAM,IAAItG,IAAV,IAAkBsG,UAAlB,EAA+B;;AAE9B,OAAI1Z,YAAY0Z,WAAYtG,IAAZ,CAAhB;;AAEA,OAAIpjB,QAAQgQ,UAAUhQ,KAAtB;AACA,OAAI2vC,WAAW3/B,UAAU2/B,QAAzB;;AAEA,OAAIuE,SAAS,IAAIl0C,MAAM2M,WAAV,CAAuBy9B,QAAQvrC,MAAR,GAAiB8wC,QAAxC,CAAb;;AAEA,OAAIhxC,QAAQ,CAAZ;AAAA,OAAeuxC,SAAS,CAAxB;;AAEA,QAAM,IAAIhwC,IAAI,CAAR,EAAWC,IAAIiqC,QAAQvrC,MAA7B,EAAqCqB,IAAIC,CAAzC,EAA4CD,GAA5C,EAAmD;;AAElDvB,YAAQyrC,QAASlqC,CAAT,IAAeyvC,QAAvB;;AAEA,SAAM,IAAI1kB,IAAI,CAAd,EAAiBA,IAAI0kB,QAArB,EAA+B1kB,GAA/B,EAAsC;;AAErCipB,YAAQhE,QAAR,IAAsBlwC,MAAOrB,OAAP,CAAtB;AAEA;AAED;;AAEDs1C,aAAUzB,YAAV,CAAwBpvB,IAAxB,EAA8B,IAAIssB,eAAJ,CAAqBwE,MAArB,EAA6BvE,QAA7B,CAA9B;AAEA;;AAED,MAAI7E,SAAS,KAAKA,MAAlB;;AAEA,OAAM,IAAI5qC,IAAI,CAAR,EAAWC,IAAI2qC,OAAOjsC,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,OAAI6qC,QAAQD,OAAQ5qC,CAAR,CAAZ;AACA+zC,aAAUtB,QAAV,CAAoB5H,MAAMje,KAA1B,EAAiCie,MAAMzzB,KAAvC,EAA8CyzB,MAAMtC,aAApD;AAEA;;AAED,SAAOwL,SAAP;AAEA,EAz2BoF;;AA22BrF9vB,SAAQ,YAAY;;AAEnB,MAAIiD,OAAO;AACVhC,aAAU;AACTtB,aAAS,GADA;AAET1kB,UAAM,gBAFG;AAGTimB,eAAW;AAHF;AADA,GAAX;;AAQA;;AAEA+B,OAAKvd,IAAL,GAAY,KAAKA,IAAjB;AACAud,OAAKhoB,IAAL,GAAY,KAAKA,IAAjB;AACA,MAAK,KAAKgkB,IAAL,KAAc,EAAnB,EAAwBgE,KAAKhE,IAAL,GAAY,KAAKA,IAAjB;;AAExB,MAAK,KAAKwjB,UAAL,KAAoBrpC,SAAzB,EAAqC;;AAEpC,OAAIqpC,aAAa,KAAKA,UAAtB;;AAEA,QAAM,IAAIO,GAAV,IAAiBP,UAAjB,EAA8B;;AAE7B,QAAKA,WAAYO,GAAZ,MAAsB5pC,SAA3B,EAAuC6pB,KAAM+f,GAAN,IAAcP,WAAYO,GAAZ,CAAd;AAEvC;;AAED,UAAO/f,IAAP;AAEA;;AAEDA,OAAKA,IAAL,GAAY,EAAEsC,YAAY,EAAd,EAAZ;;AAEA,MAAI/qB,QAAQ,KAAKA,KAAjB;;AAEA,MAAKA,UAAU,IAAf,EAAsB;;AAErB,OAAIqB,QAAQi3B,MAAMh5B,SAAN,CAAgBgC,KAAhB,CAAsBhB,IAAtB,CAA4BN,MAAMqB,KAAlC,CAAZ;;AAEAonB,QAAKA,IAAL,CAAUzoB,KAAV,GAAkB;AACjBS,UAAMT,MAAMqB,KAAN,CAAY2M,WAAZ,CAAwByW,IADb;AAEjBpjB,WAAOA;AAFU,IAAlB;AAKA;;AAED,MAAI0pB,aAAa,KAAKA,UAAtB;;AAEA,OAAM,IAAIyd,GAAV,IAAiBzd,UAAjB,EAA8B;;AAE7B,OAAI1Z,YAAY0Z,WAAYyd,GAAZ,CAAhB;;AAEA,OAAInnC,QAAQi3B,MAAMh5B,SAAN,CAAgBgC,KAAhB,CAAsBhB,IAAtB,CAA4B+Q,UAAUhQ,KAAtC,CAAZ;;AAEAonB,QAAKA,IAAL,CAAUsC,UAAV,CAAsByd,GAAtB,IAA8B;AAC7BwI,cAAU3/B,UAAU2/B,QADS;AAE7BvwC,UAAM4Q,UAAUhQ,KAAV,CAAgB2M,WAAhB,CAA4ByW,IAFL;AAG7BpjB,WAAOA,KAHsB;AAI7B4vC,gBAAY5/B,UAAU4/B;AAJO,IAA9B;AAOA;;AAED,MAAI9E,SAAS,KAAKA,MAAlB;;AAEA,MAAKA,OAAOjsC,MAAP,GAAgB,CAArB,EAAyB;;AAExBuoB,QAAKA,IAAL,CAAU0jB,MAAV,GAAmBvE,KAAKc,KAAL,CAAYd,KAAKC,SAAL,CAAgBsE,MAAhB,CAAZ,CAAnB;AAEA;;AAED,MAAI9b,iBAAiB,KAAKA,cAA1B;;AAEA,MAAKA,mBAAmB,IAAxB,EAA+B;;AAE9B5H,QAAKA,IAAL,CAAU4H,cAAV,GAA2B;AAC1B5e,YAAQ4e,eAAe5e,MAAf,CAAsBN,OAAtB,EADkB;AAE1B0R,YAAQwN,eAAexN;AAFG,IAA3B;AAKA;;AAED,SAAO4F,IAAP;AAEA,EA97BoF;;AAg8BrF1a,QAAO,YAAY;;AAElB;;;;;;;;;;;;;;;AAwBA,SAAO,IAAIylC,cAAJ,GAAqBvlC,IAArB,CAA2B,IAA3B,CAAP;AAEA,EA59BoF;;AA89BrFA,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB,MAAIskB,IAAJ,EAAUljB,CAAV,EAAaC,CAAb;;AAEA;;AAEA,OAAKxB,KAAL,GAAa,IAAb;AACA,OAAK+qB,UAAL,GAAkB,EAAlB;AACA,OAAK0oB,eAAL,GAAuB,EAAvB;AACA,OAAKtH,MAAL,GAAc,EAAd;AACA,OAAKxB,WAAL,GAAmB,IAAnB;AACA,OAAKta,cAAL,GAAsB,IAAtB;;AAEA;;AAEA,OAAK5L,IAAL,GAAYtkB,OAAOskB,IAAnB;;AAEA;;AAEA,MAAIzkB,QAAQG,OAAOH,KAAnB;;AAEA,MAAKA,UAAU,IAAf,EAAsB;;AAErB,QAAK4zC,QAAL,CAAe5zC,MAAM+N,KAAN,EAAf;AAEA;;AAED;;AAEA,MAAIgd,aAAa5qB,OAAO4qB,UAAxB;;AAEA,OAAMtG,IAAN,IAAcsG,UAAd,EAA2B;;AAE1B,OAAI1Z,YAAY0Z,WAAYtG,IAAZ,CAAhB;AACA,QAAKovB,YAAL,CAAmBpvB,IAAnB,EAAyBpT,UAAUtD,KAAV,EAAzB;AAEA;;AAED;;AAEA,MAAI0lC,kBAAkBtzC,OAAOszC,eAA7B;;AAEA,OAAMhvB,IAAN,IAAcgvB,eAAd,EAAgC;;AAE/B,OAAIpyC,QAAQ,EAAZ;AACA,OAAIm0C,iBAAiB/B,gBAAiBhvB,IAAjB,CAArB,CAH+B,CAGe;;AAE9C,QAAMljB,IAAI,CAAJ,EAAOC,IAAIg0C,eAAet1C,MAAhC,EAAwCqB,IAAIC,CAA5C,EAA+CD,GAA/C,EAAsD;;AAErDF,UAAMP,IAAN,CAAY00C,eAAgBj0C,CAAhB,EAAoBwM,KAApB,EAAZ;AAEA;;AAED,QAAK0lC,eAAL,CAAsBhvB,IAAtB,IAA+BpjB,KAA/B;AAEA;;AAED;;AAEA,MAAI8qC,SAAShsC,OAAOgsC,MAApB;;AAEA,OAAM5qC,IAAI,CAAJ,EAAOC,IAAI2qC,OAAOjsC,MAAxB,EAAgCqB,IAAIC,CAApC,EAAuCD,GAAvC,EAA8C;;AAE7C,OAAI6qC,QAAQD,OAAQ5qC,CAAR,CAAZ;AACA,QAAKyyC,QAAL,CAAe5H,MAAMje,KAArB,EAA4Bie,MAAMzzB,KAAlC,EAAyCyzB,MAAMtC,aAA/C;AAEA;;AAED;;AAEA,MAAIa,cAAcxqC,OAAOwqC,WAAzB;;AAEA,MAAKA,gBAAgB,IAArB,EAA4B;;AAE3B,QAAKA,WAAL,GAAmBA,YAAY58B,KAAZ,EAAnB;AAEA;;AAED;;AAEA,MAAIsiB,iBAAiBlwB,OAAOkwB,cAA5B;;AAEA,MAAKA,mBAAmB,IAAxB,EAA+B;;AAE9B,QAAKA,cAAL,GAAsBA,eAAetiB,KAAf,EAAtB;AAEA;;AAED;;AAEA,OAAK2lC,SAAL,CAAevlB,KAAf,GAAuBhuB,OAAOuzC,SAAP,CAAiBvlB,KAAxC;AACA,OAAKulB,SAAL,CAAe/6B,KAAf,GAAuBxY,OAAOuzC,SAAP,CAAiB/6B,KAAxC;;AAEA,SAAO,IAAP;AAEA,EA7jCoF;;AA+jCrFmO,UAAS,YAAY;;AAEpB,OAAK3lB,aAAL,CAAoB,EAAEV,MAAM,SAAR,EAApB;AAEA;;AAnkCoF,CAA3D,CAA3B;;AAukCA;;;;;AAKA;;AAEA,SAASg1C,WAAT,CAAsBxvB,KAAtB,EAA6BC,MAA7B,EAAqC6Z,KAArC,EAA4C2V,aAA5C,EAA2DC,cAA3D,EAA2EC,aAA3E,EAA2F;;AAE1F1L,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,aAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBhiB,SAAOA,KADU;AAEjBC,UAAQA,MAFS;AAGjB6Z,SAAOA,KAHU;AAIjB2V,iBAAeA,aAJE;AAKjBC,kBAAgBA,cALC;AAMjBC,iBAAeA;AANE,EAAlB;;AASA,MAAKpK,kBAAL,CAAyB,IAAIqK,iBAAJ,CAAuB5vB,KAAvB,EAA8BC,MAA9B,EAAsC6Z,KAAtC,EAA6C2V,aAA7C,EAA4DC,cAA5D,EAA4EC,aAA5E,CAAzB;AACA,MAAKnH,aAAL;AAEA;;AAEDgH,YAAYn2C,SAAZ,GAAwBC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAAxB;AACAm2C,YAAYn2C,SAAZ,CAAsB0O,WAAtB,GAAoCynC,WAApC;;AAEA;;AAEA,SAASI,iBAAT,CAA4B5vB,KAA5B,EAAmCC,MAAnC,EAA2C6Z,KAA3C,EAAkD2V,aAAlD,EAAiEC,cAAjE,EAAiFC,aAAjF,EAAiG;;AAEhGpC,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,mBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBhiB,SAAOA,KADU;AAEjBC,UAAQA,MAFS;AAGjB6Z,SAAOA,KAHU;AAIjB2V,iBAAeA,aAJE;AAKjBC,kBAAgBA,cALC;AAMjBC,iBAAeA;AANE,EAAlB;;AASA,KAAIprB,QAAQ,IAAZ;;AAEAvE,SAAQA,SAAS,CAAjB;AACAC,UAASA,UAAU,CAAnB;AACA6Z,SAAQA,SAAS,CAAjB;;AAEA;;AAEA2V,iBAAgB72C,KAAKK,KAAL,CAAYw2C,aAAZ,KAA+B,CAA/C;AACAC,kBAAiB92C,KAAKK,KAAL,CAAYy2C,cAAZ,KAAgC,CAAjD;AACAC,iBAAgB/2C,KAAKK,KAAL,CAAY02C,aAAZ,KAA+B,CAA/C;;AAEA;;AAEA,KAAInK,UAAU,EAAd;AACA,KAAI5gB,WAAW,EAAf;AACA,KAAI8gB,UAAU,EAAd;AACA,KAAIC,MAAM,EAAV;;AAEA;;AAEA,KAAIkK,mBAAmB,CAAvB;AACA,KAAIC,aAAa,CAAjB;;AAEA;;AAEAC,YAAY,GAAZ,EAAiB,GAAjB,EAAsB,GAAtB,EAA2B,CAAE,CAA7B,EAAgC,CAAE,CAAlC,EAAqCjW,KAArC,EAA4C7Z,MAA5C,EAAoDD,KAApD,EAA2D2vB,aAA3D,EAA0ED,cAA1E,EAA0F,CAA1F,EAzCgG,CAyCD;AAC/FK,YAAY,GAAZ,EAAiB,GAAjB,EAAsB,GAAtB,EAA2B,CAA3B,EAA8B,CAAE,CAAhC,EAAmCjW,KAAnC,EAA0C7Z,MAA1C,EAAkD,CAAED,KAApD,EAA2D2vB,aAA3D,EAA0ED,cAA1E,EAA0F,CAA1F,EA1CgG,CA0CD;AAC/FK,YAAY,GAAZ,EAAiB,GAAjB,EAAsB,GAAtB,EAA2B,CAA3B,EAA8B,CAA9B,EAAiC/vB,KAAjC,EAAwC8Z,KAAxC,EAA+C7Z,MAA/C,EAAuDwvB,aAAvD,EAAsEE,aAAtE,EAAqF,CAArF,EA3CgG,CA2CN;AAC1FI,YAAY,GAAZ,EAAiB,GAAjB,EAAsB,GAAtB,EAA2B,CAA3B,EAA8B,CAAE,CAAhC,EAAmC/vB,KAAnC,EAA0C8Z,KAA1C,EAAiD,CAAE7Z,MAAnD,EAA2DwvB,aAA3D,EAA0EE,aAA1E,EAAyF,CAAzF,EA5CgG,CA4CF;AAC9FI,YAAY,GAAZ,EAAiB,GAAjB,EAAsB,GAAtB,EAA2B,CAA3B,EAA8B,CAAE,CAAhC,EAAmC/vB,KAAnC,EAA0CC,MAA1C,EAAkD6Z,KAAlD,EAAyD2V,aAAzD,EAAwEC,cAAxE,EAAwF,CAAxF,EA7CgG,CA6CH;AAC7FK,YAAY,GAAZ,EAAiB,GAAjB,EAAsB,GAAtB,EAA2B,CAAE,CAA7B,EAAgC,CAAE,CAAlC,EAAqC/vB,KAArC,EAA4CC,MAA5C,EAAoD,CAAE6Z,KAAtD,EAA6D2V,aAA7D,EAA4EC,cAA5E,EAA4F,CAA5F,EA9CgG,CA8CC;;AAEjG;;AAEA,MAAK/B,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B9G,OAA5B,EAAqC,CAArC,CAA7B;AACA,MAAKkI,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;;AAEA,UAASoK,UAAT,CAAqB/d,CAArB,EAAwB/pB,CAAxB,EAA2BE,CAA3B,EAA8B6nC,IAA9B,EAAoCC,IAApC,EAA0CjwB,KAA1C,EAAiDC,MAAjD,EAAyD6Z,KAAzD,EAAgEoW,KAAhE,EAAuEC,KAAvE,EAA8EtM,aAA9E,EAA8F;;AAE7F,MAAIuM,eAAepwB,QAAQkwB,KAA3B;AACA,MAAIG,gBAAgBpwB,SAASkwB,KAA7B;;AAEA,MAAIG,YAAYtwB,QAAQ,CAAxB;AACA,MAAIuwB,aAAatwB,SAAS,CAA1B;AACA,MAAIuwB,YAAY1W,QAAQ,CAAxB;;AAEA,MAAI2W,SAASP,QAAQ,CAArB;AACA,MAAIQ,SAASP,QAAQ,CAArB;;AAEA,MAAIQ,gBAAgB,CAApB;AACA,MAAIC,aAAa,CAAjB;;AAEA,MAAI51B,EAAJ,EAAQC,EAAR;;AAEA,MAAIlG,SAAS,IAAIpH,OAAJ,EAAb;;AAEA;;AAEA,OAAMsN,KAAK,CAAX,EAAcA,KAAKy1B,MAAnB,EAA2Bz1B,IAA3B,EAAmC;;AAElC,OAAIlV,IAAIkV,KAAKo1B,aAAL,GAAqBE,UAA7B;;AAEA,QAAMv1B,KAAK,CAAX,EAAcA,KAAKy1B,MAAnB,EAA2Bz1B,IAA3B,EAAmC;;AAElC,QAAI7hB,IAAI6hB,KAAKo1B,YAAL,GAAoBE,SAA5B;;AAEA;;AAEAv7B,WAAQid,CAAR,IAAc74B,IAAI62C,IAAlB;AACAj7B,WAAQ9M,CAAR,IAAclC,IAAIkqC,IAAlB;AACAl7B,WAAQ5M,CAAR,IAAcqoC,SAAd;;AAEA;;AAEA5rB,aAAS/pB,IAAT,CAAeka,OAAO5b,CAAtB,EAAyB4b,OAAOhP,CAAhC,EAAmCgP,OAAOtH,CAA1C;;AAEA;;AAEAsH,WAAQid,CAAR,IAAc,CAAd;AACAjd,WAAQ9M,CAAR,IAAc,CAAd;AACA8M,WAAQ5M,CAAR,IAAc2xB,QAAQ,CAAR,GAAY,CAAZ,GAAgB,CAAE,CAAhC;;AAEA;;AAEA4L,YAAQ7qC,IAAR,CAAcka,OAAO5b,CAArB,EAAwB4b,OAAOhP,CAA/B,EAAkCgP,OAAOtH,CAAzC;;AAEA;;AAEAk4B,QAAI9qC,IAAJ,CAAUmgB,KAAKk1B,KAAf;AACAvK,QAAI9qC,IAAJ,CAAU,IAAMogB,KAAKk1B,KAArB;;AAEA;;AAEAQ,qBAAiB,CAAjB;AAEA;AAED;;AAED;;AAEA;AACA;AACA;;AAEA,OAAM11B,KAAK,CAAX,EAAcA,KAAKk1B,KAAnB,EAA0Bl1B,IAA1B,EAAkC;;AAEjC,QAAMD,KAAK,CAAX,EAAcA,KAAKk1B,KAAnB,EAA0Bl1B,IAA1B,EAAkC;;AAEjC,QAAIvS,IAAIonC,mBAAmB70B,EAAnB,GAAwBy1B,SAASx1B,EAAzC;AACA,QAAIvS,IAAImnC,mBAAmB70B,EAAnB,GAAwBy1B,UAAWx1B,KAAK,CAAhB,CAAhC;AACA,QAAIxP,IAAIokC,oBAAqB70B,KAAK,CAA1B,IAAgCy1B,UAAWx1B,KAAK,CAAhB,CAAxC;AACA,QAAI/M,IAAI2hC,oBAAqB70B,KAAK,CAA1B,IAAgCy1B,SAASx1B,EAAjD;;AAEA;;AAEAuqB,YAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBwF,CAApB;AACAs3B,YAAQ3qC,IAAR,CAAc6N,CAAd,EAAiB+C,CAAjB,EAAoByC,CAApB;;AAEA;;AAEA0iC,kBAAc,CAAd;AAEA;AAED;;AAED;;AAEArsB,QAAMwpB,QAAN,CAAgB+B,UAAhB,EAA4Bc,UAA5B,EAAwC/M,aAAxC;;AAEA;;AAEAiM,gBAAcc,UAAd;;AAEA;;AAEAf,sBAAoBc,aAApB;AAEA;AAED;;AAEDf,kBAAkBv2C,SAAlB,GAA8BC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAA9B;AACAu2C,kBAAkBv2C,SAAlB,CAA4B0O,WAA5B,GAA0C6nC,iBAA1C;;AAEA;;;;;AAKA;;AAEA,SAASiB,aAAT,CAAwB7wB,KAAxB,EAA+BC,MAA/B,EAAuCwvB,aAAvC,EAAsDC,cAAtD,EAAuE;;AAEtEzL,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,eAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBhiB,SAAOA,KADU;AAEjBC,UAAQA,MAFS;AAGjBwvB,iBAAeA,aAHE;AAIjBC,kBAAgBA;AAJC,EAAlB;;AAOA,MAAKnK,kBAAL,CAAyB,IAAIuL,mBAAJ,CAAyB9wB,KAAzB,EAAgCC,MAAhC,EAAwCwvB,aAAxC,EAAuDC,cAAvD,CAAzB;AACA,MAAKlH,aAAL;AAEA;;AAEDqI,cAAcx3C,SAAd,GAA0BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA1B;AACAw3C,cAAcx3C,SAAd,CAAwB0O,WAAxB,GAAsC8oC,aAAtC;;AAEA;;AAEA,SAASC,mBAAT,CAA8B9wB,KAA9B,EAAqCC,MAArC,EAA6CwvB,aAA7C,EAA4DC,cAA5D,EAA6E;;AAE5EnC,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,qBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBhiB,SAAOA,KADU;AAEjBC,UAAQA,MAFS;AAGjBwvB,iBAAeA,aAHE;AAIjBC,kBAAgBA;AAJC,EAAlB;;AAOA1vB,SAAQA,SAAS,CAAjB;AACAC,UAASA,UAAU,CAAnB;;AAEA,KAAI8wB,aAAa/wB,QAAQ,CAAzB;AACA,KAAIgxB,cAAc/wB,SAAS,CAA3B;;AAEA,KAAIiwB,QAAQt3C,KAAKK,KAAL,CAAYw2C,aAAZ,KAA+B,CAA3C;AACA,KAAIU,QAAQv3C,KAAKK,KAAL,CAAYy2C,cAAZ,KAAgC,CAA5C;;AAEA,KAAIe,SAASP,QAAQ,CAArB;AACA,KAAIQ,SAASP,QAAQ,CAArB;;AAEA,KAAIc,gBAAgBjxB,QAAQkwB,KAA5B;AACA,KAAIgB,iBAAiBjxB,SAASkwB,KAA9B;;AAEA,KAAIn1B,EAAJ,EAAQC,EAAR;;AAEA;;AAEA,KAAIuqB,UAAU,EAAd;AACA,KAAI5gB,WAAW,EAAf;AACA,KAAI8gB,UAAU,EAAd;AACA,KAAIC,MAAM,EAAV;;AAEA;;AAEA,MAAM1qB,KAAK,CAAX,EAAcA,KAAKy1B,MAAnB,EAA2Bz1B,IAA3B,EAAmC;;AAElC,MAAIlV,IAAIkV,KAAKi2B,cAAL,GAAsBF,WAA9B;;AAEA,OAAMh2B,KAAK,CAAX,EAAcA,KAAKy1B,MAAnB,EAA2Bz1B,IAA3B,EAAmC;;AAElC,OAAI7hB,IAAI6hB,KAAKi2B,aAAL,GAAqBF,UAA7B;;AAEAnsB,YAAS/pB,IAAT,CAAe1B,CAAf,EAAkB,CAAE4M,CAApB,EAAuB,CAAvB;;AAEA2/B,WAAQ7qC,IAAR,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB;;AAEA8qC,OAAI9qC,IAAJ,CAAUmgB,KAAKk1B,KAAf;AACAvK,OAAI9qC,IAAJ,CAAU,IAAMogB,KAAKk1B,KAArB;AAEA;AAED;;AAED;;AAEA,MAAMl1B,KAAK,CAAX,EAAcA,KAAKk1B,KAAnB,EAA0Bl1B,IAA1B,EAAkC;;AAEjC,OAAMD,KAAK,CAAX,EAAcA,KAAKk1B,KAAnB,EAA0Bl1B,IAA1B,EAAkC;;AAEjC,OAAIvS,IAAIuS,KAAKy1B,SAASx1B,EAAtB;AACA,OAAIvS,IAAIsS,KAAKy1B,UAAWx1B,KAAK,CAAhB,CAAb;AACA,OAAIxP,IAAMuP,KAAK,CAAP,GAAay1B,UAAWx1B,KAAK,CAAhB,CAArB;AACA,OAAI/M,IAAM8M,KAAK,CAAP,GAAay1B,SAASx1B,EAA9B;;AAEA;;AAEAuqB,WAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBwF,CAApB;AACAs3B,WAAQ3qC,IAAR,CAAc6N,CAAd,EAAiB+C,CAAjB,EAAoByC,CAApB;AAEA;AAED;;AAED;;AAEA,MAAKy/B,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B9G,OAA5B,EAAqC,CAArC,CAA7B;AACA,MAAKkI,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;AAEA;;AAEDmL,oBAAoBz3C,SAApB,GAAgCC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAAhC;AACAy3C,oBAAoBz3C,SAApB,CAA8B0O,WAA9B,GAA4C+oC,mBAA5C;;AAEA;;;;;AAKA,IAAIK,aAAa,CAAjB;;AAEA,SAASC,QAAT,GAAoB;;AAEnB93C,QAAOC,cAAP,CAAuB,IAAvB,EAA6B,IAA7B,EAAmC,EAAER,OAAOo4C,YAAT,EAAnC;;AAEA,MAAKlsC,IAAL,GAAYX,MAAMI,YAAN,EAAZ;;AAEA,MAAK8Z,IAAL,GAAY,EAAZ;AACA,MAAKhkB,IAAL,GAAY,UAAZ;;AAEA,MAAKw8B,GAAL,GAAW,IAAX;AACA,MAAKK,MAAL,GAAc,IAAd;;AAEA,MAAKga,QAAL,GAAgBt0C,cAAhB;AACA,MAAKu0C,IAAL,GAAYh1C,SAAZ;AACA,MAAKi1C,WAAL,GAAmB,KAAnB;AACA,MAAKxN,YAAL,GAAoBpnC,QAApB,CAfmB,CAeW;;AAE9B,MAAKi4B,OAAL,GAAe,CAAf;AACA,MAAK4c,WAAL,GAAmB,KAAnB;;AAEA,MAAKC,QAAL,GAAgB5zC,cAAhB;AACA,MAAK6zC,QAAL,GAAgB5zC,sBAAhB;AACA,MAAK6zC,aAAL,GAAqBv0C,WAArB;AACA,MAAKw0C,aAAL,GAAqB,IAArB;AACA,MAAKC,aAAL,GAAqB,IAArB;AACA,MAAKC,kBAAL,GAA0B,IAA1B;;AAEA,MAAKC,SAAL,GAAiBxzC,cAAjB;AACA,MAAKyzC,SAAL,GAAiB,IAAjB;AACA,MAAKC,UAAL,GAAkB,IAAlB;;AAEA,MAAKC,cAAL,GAAsB,IAAtB;AACA,MAAKC,gBAAL,GAAwB,KAAxB;AACA,MAAKC,WAAL,GAAmB,KAAnB;;AAEA,MAAKC,UAAL,GAAkB,IAAlB;;AAEA,MAAKC,UAAL,GAAkB,IAAlB;;AAEA,MAAKzJ,SAAL,GAAiB,IAAjB,CAvCmB,CAuCI;;AAEvB,MAAK0J,aAAL,GAAqB,KAArB;AACA,MAAKC,mBAAL,GAA2B,CAA3B;AACA,MAAKC,kBAAL,GAA0B,CAA1B;;AAEA,MAAKC,SAAL,GAAiB,KAAjB;;AAEA,MAAKC,SAAL,GAAiB,CAAjB;AACA,MAAKC,kBAAL,GAA0B,KAA1B;;AAEA,MAAKC,QAAL,GAAgB,CAAhB,CAlDmB,CAkDA;;AAEnB,MAAK7T,OAAL,GAAe,IAAf;;AAEA,MAAKK,QAAL,GAAgB,EAAhB;;AAEA,MAAK6O,WAAL,GAAmB,IAAnB;AAEA;;AAEDkD,SAAS/3C,SAAT,GAAqBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAe9kB,gBAAgBjB,SAA/B,CAAf,EAA2D;;AAE/E0O,cAAaqpC,QAFkE;;AAI/E0B,aAAY,IAJmE;;AAM/EC,kBAAiB,YAAY,CAAE,CANgD;;AAQ/EC,YAAW,UAAW1Q,MAAX,EAAoB;;AAE9B,MAAKA,WAAW3pC,SAAhB,EAA4B;;AAE5B,OAAM,IAAI4pC,GAAV,IAAiBD,MAAjB,EAA0B;;AAEzB,OAAI2Q,WAAW3Q,OAAQC,GAAR,CAAf;;AAEA,OAAK0Q,aAAat6C,SAAlB,EAA8B;;AAE7ByP,YAAQC,IAAR,CAAc,sBAAsBk6B,GAAtB,GAA4B,2BAA1C;AACA;AAEA;;AAED;AACA,OAAKA,QAAQ,SAAb,EAAyB;;AAExBn6B,YAAQC,IAAR,CAAc,WAAW,KAAK7N,IAAhB,GAAuB,oEAArC;AACA,SAAK+2C,WAAL,GAAqB0B,aAAax2C,WAAf,GAA+B,IAA/B,GAAsC,KAAzD;AACA;AAEA;;AAED,OAAIy2C,eAAe,KAAM3Q,GAAN,CAAnB;;AAEA,OAAK2Q,iBAAiBv6C,SAAtB,EAAkC;;AAEjCyP,YAAQC,IAAR,CAAc,WAAW,KAAK7N,IAAhB,GAAuB,KAAvB,GAA+B+nC,GAA/B,GAAqC,uCAAnD;AACA;AAEA;;AAED,OAAK2Q,gBAAgBA,aAAa9gB,OAAlC,EAA4C;;AAE3C8gB,iBAAa7rC,GAAb,CAAkB4rC,QAAlB;AAEA,IAJD,MAIO,IAAOC,gBAAgBA,aAAa54B,SAA/B,IAAgD24B,YAAYA,SAAS34B,SAA1E,EAAwF;;AAE9F44B,iBAAalrC,IAAb,CAAmBirC,QAAnB;AAEA,IAJM,MAIA,IAAK1Q,QAAQ,UAAb,EAA0B;;AAEhC;AACA,SAAMA,GAAN,IAAc9pC,OAAQw6C,QAAR,CAAd;AAEA,IALM,MAKA;;AAEN,SAAM1Q,GAAN,IAAc0Q,QAAd;AAEA;AAED;AAED,EA9D8E;;AAgE/E1zB,SAAQ,UAAWC,IAAX,EAAkB;;AAEzB,MAAI2zB,SAAW3zB,SAAS7mB,SAAT,IAAsB,OAAO6mB,IAAP,KAAgB,QAArD;;AAEA,MAAK2zB,MAAL,EAAc;;AAEb3zB,UAAO;AACNE,cAAU,EADJ;AAENiB,YAAQ;AAFF,IAAP;AAKA;;AAED,MAAI6B,OAAO;AACVhC,aAAU;AACTtB,aAAS,GADA;AAET1kB,UAAM,UAFG;AAGTimB,eAAW;AAHF;AADA,GAAX;;AAQA;AACA+B,OAAKvd,IAAL,GAAY,KAAKA,IAAjB;AACAud,OAAKhoB,IAAL,GAAY,KAAKA,IAAjB;;AAEA,MAAK,KAAKgkB,IAAL,KAAc,EAAnB,EAAwBgE,KAAKhE,IAAL,GAAY,KAAKA,IAAjB;;AAExB,MAAK,KAAK4U,KAAL,IAAc,KAAKA,KAAL,CAAWhB,OAA9B,EAAwC5P,KAAK4Q,KAAL,GAAa,KAAKA,KAAL,CAAWU,MAAX,EAAb;;AAExC,MAAK,KAAK0F,SAAL,KAAmB7gC,SAAxB,EAAoC6pB,KAAKgX,SAAL,GAAiB,KAAKA,SAAtB;AACpC,MAAK,KAAKC,SAAL,KAAmB9gC,SAAxB,EAAoC6pB,KAAKiX,SAAL,GAAiB,KAAKA,SAAtB;;AAEpC,MAAK,KAAKN,QAAL,IAAiB,KAAKA,QAAL,CAAc/G,OAApC,EAA8C5P,KAAK2W,QAAL,GAAgB,KAAKA,QAAL,CAAcrF,MAAd,EAAhB;AAC9C,MAAK,KAAKsf,iBAAL,KAA2B,CAAhC,EAAoC5wB,KAAK4wB,iBAAL,GAAyB,KAAKA,iBAA9B;;AAEpC,MAAK,KAAK/Z,QAAL,IAAiB,KAAKA,QAAL,CAAcjH,OAApC,EAA8C5P,KAAK6W,QAAL,GAAgB,KAAKA,QAAL,CAAcvF,MAAd,EAAhB;AAC9C,MAAK,KAAKwF,SAAL,KAAmB3gC,SAAxB,EAAoC6pB,KAAK8W,SAAL,GAAiB,KAAKA,SAAtB;AACpC,MAAK,KAAKmB,SAAL,KAAmB9hC,SAAxB,EAAoC6pB,KAAKiY,SAAL,GAAiB,KAAKA,SAAtB;AACpC,MAAK,KAAKC,kBAAL,KAA4B/hC,SAAjC,EAA6C6pB,KAAKkY,kBAAL,GAA0B,KAAKA,kBAA/B;;AAE7C,MAAK,KAAK7F,GAAL,IAAY,KAAKA,GAAL,CAASxV,SAA1B,EAAsCmD,KAAKqS,GAAL,GAAW,KAAKA,GAAL,CAAStV,MAAT,CAAiBC,IAAjB,EAAwBva,IAAnC;AACtC,MAAK,KAAK8vB,QAAL,IAAiB,KAAKA,QAAL,CAAc1V,SAApC,EAAgDmD,KAAKuS,QAAL,GAAgB,KAAKA,QAAL,CAAcxV,MAAd,CAAsBC,IAAtB,EAA6Bva,IAA7C;AAChD,MAAK,KAAK2wB,QAAL,IAAiB,KAAKA,QAAL,CAAcvW,SAApC,EAAgDmD,KAAKoT,QAAL,GAAgB,KAAKA,QAAL,CAAcrW,MAAd,CAAsBC,IAAtB,EAA6Bva,IAA7C;AAChD,MAAK,KAAKgxB,OAAL,IAAgB,KAAKA,OAAL,CAAa5W,SAAlC,EAA8C;;AAE7CmD,QAAKyT,OAAL,GAAe,KAAKA,OAAL,CAAa1W,MAAb,CAAqBC,IAArB,EAA4Bva,IAA3C;AACAud,QAAK0T,SAAL,GAAiB,KAAKA,SAAtB;AAEA;AACD,MAAK,KAAKE,SAAL,IAAkB,KAAKA,SAAL,CAAe/W,SAAtC,EAAkD;;AAEjDmD,QAAK4T,SAAL,GAAiB,KAAKA,SAAL,CAAe7W,MAAf,CAAuBC,IAAvB,EAA8Bva,IAA/C;AACAud,QAAK6T,WAAL,GAAmB,KAAKA,WAAL,CAAiBnrB,OAAjB,EAAnB;AAEA;AACD,MAAK,KAAKqrB,eAAL,IAAwB,KAAKA,eAAL,CAAqBlX,SAAlD,EAA8D;;AAE7DmD,QAAK+T,eAAL,GAAuB,KAAKA,eAAL,CAAqBhX,MAArB,CAA6BC,IAA7B,EAAoCva,IAA3D;AACAud,QAAKgU,iBAAL,GAAyB,KAAKA,iBAA9B;AACAhU,QAAKiU,gBAAL,GAAwB,KAAKA,gBAA7B;AAEA;AACD,MAAK,KAAKE,YAAL,IAAqB,KAAKA,YAAL,CAAkBtX,SAA5C,EAAwDmD,KAAKmU,YAAL,GAAoB,KAAKA,YAAL,CAAkBpX,MAAlB,CAA0BC,IAA1B,EAAiCva,IAArD;AACxD,MAAK,KAAK4xB,YAAL,IAAqB,KAAKA,YAAL,CAAkBxX,SAA5C,EAAwDmD,KAAKqU,YAAL,GAAoB,KAAKA,YAAL,CAAkBtX,MAAlB,CAA0BC,IAA1B,EAAiCva,IAArD;;AAExD,MAAK,KAAK8wB,WAAL,IAAoB,KAAKA,WAAL,CAAiB1W,SAA1C,EAAsDmD,KAAKuT,WAAL,GAAmB,KAAKA,WAAL,CAAiBxW,MAAjB,CAAyBC,IAAzB,EAAgCva,IAAnD;AACtD,MAAK,KAAKgwB,WAAL,IAAoB,KAAKA,WAAL,CAAiB5V,SAA1C,EAAsDmD,KAAKyS,WAAL,GAAmB,KAAKA,WAAL,CAAiB1V,MAAjB,CAAyBC,IAAzB,EAAgCva,IAAnD;;AAEtD,MAAK,KAAKkwB,MAAL,IAAe,KAAKA,MAAL,CAAY9V,SAAhC,EAA4C;;AAE3CmD,QAAK2S,MAAL,GAAc,KAAKA,MAAL,CAAY5V,MAAZ,CAAoBC,IAApB,EAA2Bva,IAAzC;AACAud,QAAK6S,YAAL,GAAoB,KAAKA,YAAzB,CAH2C,CAGJ;AAEvC;;AAED,MAAK,KAAK0B,WAAL,IAAoB,KAAKA,WAAL,CAAiB1X,SAA1C,EAAsD;;AAErDmD,QAAKuU,WAAL,GAAmB,KAAKA,WAAL,CAAiBxX,MAAjB,CAAyBC,IAAzB,EAAgCva,IAAnD;AAEA;;AAED,MAAK,KAAK0e,IAAL,KAAchrB,SAAnB,EAA+B6pB,KAAKmB,IAAL,GAAY,KAAKA,IAAjB;AAC/B,MAAK,KAAK0vB,eAAL,KAAyB16C,SAA9B,EAA0C6pB,KAAK6wB,eAAL,GAAuB,KAAKA,eAA5B;;AAE1C,MAAK,KAAKhC,QAAL,KAAkBt0C,cAAvB,EAAwCylB,KAAK6uB,QAAL,GAAgB,KAAKA,QAArB;AACxC,MAAK,KAAKE,WAAL,KAAqB,IAA1B,EAAiC/uB,KAAK+uB,WAAL,GAAmB,KAAKA,WAAxB;AACjC,MAAK,KAAKD,IAAL,KAAch1C,SAAnB,EAA+BkmB,KAAK8uB,IAAL,GAAY,KAAKA,IAAjB;AAC/B,MAAK,KAAKvN,YAAL,KAAsBpnC,QAA3B,EAAsC6lB,KAAKuhB,YAAL,GAAoB,KAAKA,YAAzB;;AAEtC,MAAK,KAAKnP,OAAL,GAAe,CAApB,EAAwBpS,KAAKoS,OAAL,GAAe,KAAKA,OAApB;AACxB,MAAK,KAAK4c,WAAL,KAAqB,IAA1B,EAAiChvB,KAAKgvB,WAAL,GAAmB,KAAKA,WAAxB;;AAEjChvB,OAAKuvB,SAAL,GAAiB,KAAKA,SAAtB;AACAvvB,OAAKwvB,SAAL,GAAiB,KAAKA,SAAtB;AACAxvB,OAAKyvB,UAAL,GAAkB,KAAKA,UAAvB;;AAEA;AACA,MAAK,KAAKz0B,QAAL,KAAkB,CAAvB,EAA2BgF,KAAKhF,QAAL,GAAgB,KAAKA,QAArB;;AAE3B,MAAK,KAAK81B,SAAL,KAAmB,CAAxB,EAA4B9wB,KAAK8wB,SAAL,GAAiB,KAAKA,SAAtB;AAC5B,MAAK,KAAK1Z,QAAL,KAAkBjhC,SAAvB,EAAmC6pB,KAAKoX,QAAL,GAAgB,KAAKA,QAArB;AACnC,MAAK,KAAK2Z,OAAL,KAAiB56C,SAAtB,EAAkC6pB,KAAK+wB,OAAL,GAAe,KAAKA,OAApB;AAClC,MAAK,KAAK5/B,KAAL,KAAehb,SAApB,EAAgC6pB,KAAK7O,KAAL,GAAa,KAAKA,KAAlB;;AAEhC,MAAK,KAAK++B,SAAL,KAAmB,IAAxB,EAA+BlwB,KAAKkwB,SAAL,GAAiB,IAAjB;;AAE/B,MAAK,KAAKC,SAAL,GAAiB,CAAtB,EAA0BnwB,KAAKmwB,SAAL,GAAiB,KAAKA,SAAtB;AAC1B,MAAK,KAAKC,kBAAL,KAA4B,IAAjC,EAAwCpwB,KAAKowB,kBAAL,GAA0B,KAAKA,kBAA/B;;AAExC,MAAK,KAAKY,SAAL,KAAmB,IAAxB,EAA+BhxB,KAAKgxB,SAAL,GAAiB,KAAKA,SAAtB;AAC/B,MAAK,KAAKC,kBAAL,GAA0B,CAA/B,EAAmCjxB,KAAKixB,kBAAL,GAA0B,KAAKA,kBAA/B;AACnC,MAAK,KAAKC,gBAAL,KAA0B,OAA/B,EAAyClxB,KAAKkxB,gBAAL,GAAwB,KAAKA,gBAA7B;AACzC,MAAK,KAAKC,iBAAL,KAA2B,OAAhC,EAA0CnxB,KAAKmxB,iBAAL,GAAyB,KAAKA,iBAA9B;;AAE1C,MAAK,KAAKtP,YAAL,KAAsB,IAA3B,EAAkC7hB,KAAK6hB,YAAL,GAAoB,IAApB;AAClC,MAAK,KAAKuP,QAAL,KAAkB,IAAvB,EAA8BpxB,KAAKoxB,QAAL,GAAgB,IAAhB;;AAE9B,MAAK,KAAK5U,OAAL,KAAiB,KAAtB,EAA8Bxc,KAAKwc,OAAL,GAAe,KAAf;AAC9B,MAAK2C,KAAKC,SAAL,CAAgB,KAAKvC,QAArB,MAAoC,IAAzC,EAAgD7c,KAAK6c,QAAL,GAAgB,KAAKA,QAArB;;AAEhD;;AAEA,WAAS+C,gBAAT,CAA2BC,KAA3B,EAAmC;;AAElC,OAAIC,SAAS,EAAb;;AAEA,QAAM,IAAIC,GAAV,IAAiBF,KAAjB,EAAyB;;AAExB,QAAI7f,OAAO6f,MAAOE,GAAP,CAAX;AACA,WAAO/f,KAAKhC,QAAZ;AACA8hB,WAAOznC,IAAP,CAAa2nB,IAAb;AAEA;;AAED,UAAO8f,MAAP;AAEA;;AAED,MAAK6Q,MAAL,EAAc;;AAEb,OAAIzzB,WAAW0iB,iBAAkB5iB,KAAKE,QAAvB,CAAf;AACA,OAAIiB,SAASyhB,iBAAkB5iB,KAAKmB,MAAvB,CAAb;;AAEA,OAAKjB,SAASzlB,MAAT,GAAkB,CAAvB,EAA2BuoB,KAAK9C,QAAL,GAAgBA,QAAhB;AAC3B,OAAKiB,OAAO1mB,MAAP,GAAgB,CAArB,EAAyBuoB,KAAK7B,MAAL,GAAcA,MAAd;AAEzB;;AAED,SAAO6B,IAAP;AAEA,EAtN8E;;AAwN/E1a,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EA5N8E;;AA8N/EA,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB,OAAKskB,IAAL,GAAYtkB,OAAOskB,IAAnB;;AAEA,OAAKwY,GAAL,GAAW98B,OAAO88B,GAAlB;AACA,OAAKK,MAAL,GAAcn9B,OAAOm9B,MAArB;;AAEA,OAAKga,QAAL,GAAgBn3C,OAAOm3C,QAAvB;AACA,OAAKC,IAAL,GAAYp3C,OAAOo3C,IAAnB;AACA,OAAKC,WAAL,GAAmBr3C,OAAOq3C,WAA1B;AACA,OAAKxN,YAAL,GAAoB7pC,OAAO6pC,YAA3B;;AAEA,OAAKnP,OAAL,GAAe16B,OAAO06B,OAAtB;AACA,OAAK4c,WAAL,GAAmBt3C,OAAOs3C,WAA1B;;AAEA,OAAKC,QAAL,GAAgBv3C,OAAOu3C,QAAvB;AACA,OAAKC,QAAL,GAAgBx3C,OAAOw3C,QAAvB;AACA,OAAKC,aAAL,GAAqBz3C,OAAOy3C,aAA5B;AACA,OAAKC,aAAL,GAAqB13C,OAAO03C,aAA5B;AACA,OAAKC,aAAL,GAAqB33C,OAAO23C,aAA5B;AACA,OAAKC,kBAAL,GAA0B53C,OAAO43C,kBAAjC;;AAEA,OAAKC,SAAL,GAAiB73C,OAAO63C,SAAxB;AACA,OAAKC,SAAL,GAAiB93C,OAAO83C,SAAxB;AACA,OAAKC,UAAL,GAAkB/3C,OAAO+3C,UAAzB;;AAEA,OAAKK,UAAL,GAAkBp4C,OAAOo4C,UAAzB;;AAEA,OAAKzJ,SAAL,GAAiB3uC,OAAO2uC,SAAxB;;AAEA,OAAK0J,aAAL,GAAqBr4C,OAAOq4C,aAA5B;AACA,OAAKC,mBAAL,GAA2Bt4C,OAAOs4C,mBAAlC;AACA,OAAKC,kBAAL,GAA0Bv4C,OAAOu4C,kBAAjC;;AAEA,OAAKC,SAAL,GAAiBx4C,OAAOw4C,SAAxB;;AAEA,OAAKC,SAAL,GAAiBz4C,OAAOy4C,SAAxB;AACA,OAAKC,kBAAL,GAA0B14C,OAAO04C,kBAAjC;;AAEA,OAAKC,QAAL,GAAgB34C,OAAO24C,QAAvB;;AAEA,OAAK7T,OAAL,GAAe9kC,OAAO8kC,OAAtB;AACA,OAAKK,QAAL,GAAgBsC,KAAKc,KAAL,CAAYd,KAAKC,SAAL,CAAgB1nC,OAAOmlC,QAAvB,CAAZ,CAAhB;;AAEA,OAAK+S,WAAL,GAAmBl4C,OAAOk4C,WAA1B;AACA,OAAKD,gBAAL,GAAwBj4C,OAAOi4C,gBAA/B;;AAEA,MAAI0B,YAAY35C,OAAOg4C,cAAvB;AAAA,MACC4B,YAAY,IADb;;AAGA,MAAKD,cAAc,IAAnB,EAA0B;;AAEzB,OAAItuC,IAAIsuC,UAAU55C,MAAlB;AACA65C,eAAY,IAAIzhB,KAAJ,CAAW9sB,CAAX,CAAZ;;AAEA,QAAM,IAAIjK,IAAI,CAAd,EAAiBA,MAAMiK,CAAvB,EAA0B,EAAGjK,CAA7B,EACCw4C,UAAWx4C,CAAX,IAAiBu4C,UAAWv4C,CAAX,EAAewM,KAAf,EAAjB;AAED;;AAED,OAAKoqC,cAAL,GAAsB4B,SAAtB;;AAEA,OAAKzB,UAAL,GAAkBn4C,OAAOm4C,UAAzB;;AAEA,SAAO,IAAP;AAEA,EAhS8E;;AAkS/ExxB,UAAS,YAAY;;AAEpB,OAAK3lB,aAAL,CAAoB,EAAEV,MAAM,SAAR,EAApB;AAEA;;AAtS8E,CAA3D,CAArB;;AA0SA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,SAASu5C,iBAAT,CAA4B/R,UAA5B,EAAyC;;AAExCoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,mBAAZ;;AAEA,MAAK44B,KAAL,GAAa,IAAIZ,KAAJ,CAAW,QAAX,CAAb,CANwC,CAMJ;;AAEpC,MAAKqC,GAAL,GAAW,IAAX;;AAEA,MAAKe,QAAL,GAAgB,IAAhB;AACA,MAAKC,iBAAL,GAAyB,GAAzB;;AAEA,MAAKJ,KAAL,GAAa,IAAb;AACA,MAAKC,cAAL,GAAsB,GAAtB;;AAEA,MAAKT,WAAL,GAAmB,IAAnB;;AAEA,MAAKF,QAAL,GAAgB,IAAhB;;AAEA,MAAKI,MAAL,GAAc,IAAd;AACA,MAAK6e,OAAL,GAAep1C,iBAAf;AACA,MAAKy2B,YAAL,GAAoB,CAApB;AACA,MAAKC,eAAL,GAAuB,IAAvB;;AAEA,MAAKke,SAAL,GAAiB,KAAjB;AACA,MAAKC,kBAAL,GAA0B,CAA1B;AACA,MAAKC,gBAAL,GAAwB,OAAxB;AACA,MAAKC,iBAAL,GAAyB,OAAzB;;AAEA,MAAKC,QAAL,GAAgB,KAAhB;AACA,MAAKvP,YAAL,GAAoB,KAApB;;AAEA,MAAKhN,MAAL,GAAc,KAAd;;AAEA,MAAK2b,SAAL,CAAgBhR,UAAhB;AAEA;;AAED+R,kBAAkB16C,SAAlB,GAA8BC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAA9B;AACA06C,kBAAkB16C,SAAlB,CAA4B0O,WAA5B,GAA0CgsC,iBAA1C;;AAEAA,kBAAkB16C,SAAlB,CAA4B46C,mBAA5B,GAAkD,IAAlD;;AAEAF,kBAAkB16C,SAAlB,CAA4B2O,IAA5B,GAAmC,UAAW9N,MAAX,EAAoB;;AAEtDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAKk5B,KAAL,CAAWprB,IAAX,CAAiB9N,OAAOk5B,KAAxB;;AAEA,MAAKyB,GAAL,GAAW36B,OAAO26B,GAAlB;;AAEA,MAAKe,QAAL,GAAgB17B,OAAO07B,QAAvB;AACA,MAAKC,iBAAL,GAAyB37B,OAAO27B,iBAAhC;;AAEA,MAAKJ,KAAL,GAAav7B,OAAOu7B,KAApB;AACA,MAAKC,cAAL,GAAsBx7B,OAAOw7B,cAA7B;;AAEA,MAAKT,WAAL,GAAmB/6B,OAAO+6B,WAA1B;;AAEA,MAAKF,QAAL,GAAgB76B,OAAO66B,QAAvB;;AAEA,MAAKI,MAAL,GAAcj7B,OAAOi7B,MAArB;AACA,MAAK6e,OAAL,GAAe95C,OAAO85C,OAAtB;AACA,MAAK3e,YAAL,GAAoBn7B,OAAOm7B,YAA3B;AACA,MAAKC,eAAL,GAAuBp7B,OAAOo7B,eAA9B;;AAEA,MAAKke,SAAL,GAAiBt5C,OAAOs5C,SAAxB;AACA,MAAKC,kBAAL,GAA0Bv5C,OAAOu5C,kBAAjC;AACA,MAAKC,gBAAL,GAAwBx5C,OAAOw5C,gBAA/B;AACA,MAAKC,iBAAL,GAAyBz5C,OAAOy5C,iBAAhC;;AAEA,MAAKC,QAAL,GAAgB15C,OAAO05C,QAAvB;AACA,MAAKvP,YAAL,GAAoBnqC,OAAOmqC,YAA3B;;AAEA,QAAO,IAAP;AAEA,CAjCD;;AAmCA;;;;;;;;;;;;;;;;;;;;;AAqBA,SAAS6P,cAAT,CAAyBlS,UAAzB,EAAsC;;AAErCoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,gBAAZ;;AAEA,MAAK25C,OAAL,GAAe,EAAf;AACA,MAAKriB,QAAL,GAAgB,EAAhB;;AAEA,MAAKkH,YAAL,GAAoB,+FAApB;AACA,MAAKC,cAAL,GAAsB,gEAAtB;;AAEA,MAAKqa,SAAL,GAAiB,CAAjB;;AAEA,MAAKE,SAAL,GAAiB,KAAjB;AACA,MAAKC,kBAAL,GAA0B,CAA1B;;AAEA,MAAKzc,GAAL,GAAW,KAAX,CAjBqC,CAiBnB;AAClB,MAAKK,MAAL,GAAc,KAAd,CAlBqC,CAkBhB;AACrB,MAAK+c,QAAL,GAAgB,KAAhB,CAnBqC,CAmBd;;AAEvB,MAAKR,QAAL,GAAgB,KAAhB,CArBqC,CAqBd;AACvB,MAAKvP,YAAL,GAAoB,KAApB,CAtBqC,CAsBV;AAC3B,MAAKC,YAAL,GAAoB,KAApB,CAvBqC,CAuBV;;AAE3B,MAAK+P,UAAL,GAAkB;AACjBC,eAAa,KADI,EACG;AACpBC,aAAW,KAFM,EAEC;AAClBC,eAAa,KAHI,EAGG;AACpBC,oBAAkB,KAJD,CAIO;AAJP,EAAlB;;AAOA;AACA;AACA,MAAKC,sBAAL,GAA8B;AAC7B,WAAS,CAAE,CAAF,EAAK,CAAL,EAAQ,CAAR,CADoB;AAE7B,QAAM,CAAE,CAAF,EAAK,CAAL,CAFuB;AAG7B,SAAO,CAAE,CAAF,EAAK,CAAL;AAHsB,EAA9B;;AAMA,MAAKC,mBAAL,GAA2Bh8C,SAA3B;AACA,MAAKi8C,kBAAL,GAA0B,KAA1B;;AAEA,KAAK5S,eAAerpC,SAApB,EAAgC;;AAE/B,MAAKqpC,WAAWld,UAAX,KAA0BnsB,SAA/B,EAA2C;;AAE1CyP,WAAQyD,KAAR,CAAe,yFAAf;AAEA;;AAED,OAAKmnC,SAAL,CAAgBhR,UAAhB;AAEA;AAED;;AAEDkS,eAAe76C,SAAf,GAA2BC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAA3B;AACA66C,eAAe76C,SAAf,CAAyB0O,WAAzB,GAAuCmsC,cAAvC;;AAEAA,eAAe76C,SAAf,CAAyBw7C,gBAAzB,GAA4C,IAA5C;;AAEAX,eAAe76C,SAAf,CAAyB2O,IAAzB,GAAgC,UAAW9N,MAAX,EAAoB;;AAEnDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAK++B,cAAL,GAAsB/+B,OAAO++B,cAA7B;AACA,MAAKD,YAAL,GAAoB9+B,OAAO8+B,YAA3B;;AAEA,MAAKlH,QAAL,GAAgBF,cAAc9pB,KAAd,CAAqB5N,OAAO43B,QAA5B,CAAhB;;AAEA,MAAKqiB,OAAL,GAAe76C,OAAOK,MAAP,CAAe,EAAf,EAAmBO,OAAOi6C,OAA1B,CAAf;;AAEA,MAAKX,SAAL,GAAiBt5C,OAAOs5C,SAAxB;AACA,MAAKC,kBAAL,GAA0Bv5C,OAAOu5C,kBAAjC;;AAEA,MAAKpc,MAAL,GAAcn9B,OAAOm9B,MAArB;AACA,MAAK+c,QAAL,GAAgBl6C,OAAOk6C,QAAvB;;AAEA,MAAKR,QAAL,GAAgB15C,OAAO05C,QAAvB;;AAEA,MAAKvP,YAAL,GAAoBnqC,OAAOmqC,YAA3B;AACA,MAAKC,YAAL,GAAoBpqC,OAAOoqC,YAA3B;;AAEA,MAAK+P,UAAL,GAAkBn6C,OAAOm6C,UAAzB;;AAEA,QAAO,IAAP;AAEA,CA1BD;;AA4BAH,eAAe76C,SAAf,CAAyBkmB,MAAzB,GAAkC,UAAWC,IAAX,EAAkB;;AAEnD,KAAIgD,OAAO4uB,SAAS/3C,SAAT,CAAmBkmB,MAAnB,CAA0BllB,IAA1B,CAAgC,IAAhC,EAAsCmlB,IAAtC,CAAX;;AAEAgD,MAAKsP,QAAL,GAAgB,KAAKA,QAArB;AACAtP,MAAKwW,YAAL,GAAoB,KAAKA,YAAzB;AACAxW,MAAKyW,cAAL,GAAsB,KAAKA,cAA3B;;AAEA,QAAOzW,IAAP;AAEA,CAVD;;AAYA;;;;AAIA,SAASsyB,GAAT,CAAcC,MAAd,EAAsBhtB,SAAtB,EAAkC;;AAEjC,MAAKgtB,MAAL,GAAgBA,WAAWp8C,SAAb,GAA2Bo8C,MAA3B,GAAoC,IAAIpnC,OAAJ,EAAlD;AACA,MAAKoa,SAAL,GAAmBA,cAAcpvB,SAAhB,GAA8BovB,SAA9B,GAA0C,IAAIpa,OAAJ,EAA3D;AAEA;;AAEDrU,OAAOK,MAAP,CAAem7C,IAAIz7C,SAAnB,EAA8B;;AAE7BgO,MAAK,UAAW0tC,MAAX,EAAmBhtB,SAAnB,EAA+B;;AAEnC,OAAKgtB,MAAL,CAAY/sC,IAAZ,CAAkB+sC,MAAlB;AACA,OAAKhtB,SAAL,CAAe/f,IAAf,CAAqB+f,SAArB;;AAEA,SAAO,IAAP;AAEA,EAT4B;;AAW7BjgB,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EAf4B;;AAiB7BA,OAAM,UAAWgtC,GAAX,EAAiB;;AAEtB,OAAKD,MAAL,CAAY/sC,IAAZ,CAAkBgtC,IAAID,MAAtB;AACA,OAAKhtB,SAAL,CAAe/f,IAAf,CAAqBgtC,IAAIjtB,SAAzB;;AAEA,SAAO,IAAP;AAEA,EAxB4B;;AA0B7BktB,KAAI,UAAWjvC,CAAX,EAAcpM,MAAd,EAAuB;;AAE1B,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,yCAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO/T,OAAOoO,IAAP,CAAa,KAAK+f,SAAlB,EAA8B/e,cAA9B,CAA8ChD,CAA9C,EAAkDkC,GAAlD,CAAuD,KAAK6sC,MAA5D,CAAP;AAEA,EArC4B;;AAuC7B5kC,SAAQ,UAAWlI,CAAX,EAAe;;AAEtB,OAAK8f,SAAL,CAAe/f,IAAf,CAAqBC,CAArB,EAAyBW,GAAzB,CAA8B,KAAKmsC,MAAnC,EAA4C7qC,SAA5C;;AAEA,SAAO,IAAP;AAEA,EA7C4B;;AA+C7BgrC,SAAQ,YAAY;;AAEnB,MAAIrqC,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAASunC,MAAT,CAAiBlvC,CAAjB,EAAqB;;AAE3B,QAAK+uC,MAAL,CAAY/sC,IAAZ,CAAkB,KAAKitC,EAAL,CAASjvC,CAAT,EAAY6E,EAAZ,CAAlB;;AAEA,UAAO,IAAP;AAEA,GAND;AAQA,EAZO,EA/CqB;;AA6D7BsqC,sBAAqB,UAAW/wB,KAAX,EAAkBxqB,MAAlB,EAA2B;;AAE/C,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,0DAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED/T,SAAOiP,UAAP,CAAmBub,KAAnB,EAA0B,KAAK2wB,MAA/B;;AAEA,MAAIK,oBAAoBx7C,OAAOiQ,GAAP,CAAY,KAAKke,SAAjB,CAAxB;;AAEA,MAAKqtB,oBAAoB,CAAzB,EAA6B;;AAE5B,UAAOx7C,OAAOoO,IAAP,CAAa,KAAK+sC,MAAlB,CAAP;AAEA;;AAED,SAAOn7C,OAAOoO,IAAP,CAAa,KAAK+f,SAAlB,EAA8B/e,cAA9B,CAA8CosC,iBAA9C,EAAkEltC,GAAlE,CAAuE,KAAK6sC,MAA5E,CAAP;AAEA,EAlF4B;;AAoF7BruB,kBAAiB,UAAWtC,KAAX,EAAmB;;AAEnC,SAAOxrB,KAAKmR,IAAL,CAAW,KAAKsrC,iBAAL,CAAwBjxB,KAAxB,CAAX,CAAP;AAEA,EAxF4B;;AA0F7BixB,oBAAmB,YAAY;;AAE9B,MAAIxqC,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAAS0nC,iBAAT,CAA4BjxB,KAA5B,EAAoC;;AAE1C,OAAIgxB,oBAAoBvqC,GAAGhC,UAAH,CAAeub,KAAf,EAAsB,KAAK2wB,MAA3B,EAAoClrC,GAApC,CAAyC,KAAKke,SAA9C,CAAxB;;AAEA;;AAEA,OAAKqtB,oBAAoB,CAAzB,EAA6B;;AAE5B,WAAO,KAAKL,MAAL,CAAYzqC,iBAAZ,CAA+B8Z,KAA/B,CAAP;AAEA;;AAEDvZ,MAAG7C,IAAH,CAAS,KAAK+f,SAAd,EAA0B/e,cAA1B,CAA0CosC,iBAA1C,EAA8DltC,GAA9D,CAAmE,KAAK6sC,MAAxE;;AAEA,UAAOlqC,GAAGP,iBAAH,CAAsB8Z,KAAtB,CAAP;AAEA,GAhBD;AAkBA,EAtBkB,EA1FU;;AAkH7BkxB,sBAAqB,YAAY;;AAEhC,MAAIC,YAAY,IAAI5nC,OAAJ,EAAhB;AACA,MAAI6nC,SAAS,IAAI7nC,OAAJ,EAAb;AACA,MAAIq7B,OAAO,IAAIr7B,OAAJ,EAAX;;AAEA,SAAO,SAAS2nC,mBAAT,CAA8B1vB,EAA9B,EAAkC/a,EAAlC,EAAsC4qC,kBAAtC,EAA0DC,sBAA1D,EAAmF;;AAEzF;AACA;AACA;AACA;AACA;AACA;;AAEAH,aAAUvtC,IAAV,CAAgB4d,EAAhB,EAAqB1d,GAArB,CAA0B2C,EAA1B,EAA+B7B,cAA/B,CAA+C,GAA/C;AACAwsC,UAAOxtC,IAAP,CAAa6C,EAAb,EAAkBjC,GAAlB,CAAuBgd,EAAvB,EAA4B1b,SAA5B;AACA8+B,QAAKhhC,IAAL,CAAW,KAAK+sC,MAAhB,EAAyBnsC,GAAzB,CAA8B2sC,SAA9B;;AAEA,OAAII,YAAY/vB,GAAGvb,UAAH,CAAeQ,EAAf,IAAsB,GAAtC;AACA,OAAI+qC,MAAM,CAAE,KAAK7tB,SAAL,CAAele,GAAf,CAAoB2rC,MAApB,CAAZ;AACA,OAAIK,KAAK7M,KAAKn/B,GAAL,CAAU,KAAKke,SAAf,CAAT;AACA,OAAIniB,KAAK,CAAEojC,KAAKn/B,GAAL,CAAU2rC,MAAV,CAAX;AACA,OAAI/pC,IAAIu9B,KAAKl/B,QAAL,EAAR;AACA,OAAI0J,MAAM5a,KAAKqR,GAAL,CAAU,IAAI2rC,MAAMA,GAApB,CAAV;AACA,OAAIE,EAAJ,EAAQ99B,EAAR,EAAY+9B,OAAZ,EAAqBC,MAArB;;AAEA,OAAKxiC,MAAM,CAAX,EAAe;;AAEd;;AAEAsiC,SAAKF,MAAMhwC,EAAN,GAAWiwC,EAAhB;AACA79B,SAAK49B,MAAMC,EAAN,GAAWjwC,EAAhB;AACAowC,aAASL,YAAYniC,GAArB;;AAEA,QAAKsiC,MAAM,CAAX,EAAe;;AAEd,SAAK99B,MAAM,CAAEg+B,MAAb,EAAsB;;AAErB,UAAKh+B,MAAMg+B,MAAX,EAAoB;;AAEnB;AACA;;AAEA,WAAIC,SAAS,IAAIziC,GAAjB;AACAsiC,aAAMG,MAAN;AACAj+B,aAAMi+B,MAAN;AACAF,iBAAUD,MAAOA,KAAKF,MAAM59B,EAAX,GAAgB,IAAI69B,EAA3B,IAAkC79B,MAAO49B,MAAME,EAAN,GAAW99B,EAAX,GAAgB,IAAIpS,EAA3B,CAAlC,GAAoE6F,CAA9E;AAEA,OAVD,MAUO;;AAEN;;AAEAuM,YAAK29B,SAAL;AACAG,YAAKl9C,KAAKyM,GAAL,CAAU,CAAV,EAAa,EAAIuwC,MAAM59B,EAAN,GAAW69B,EAAf,CAAb,CAAL;AACAE,iBAAU,CAAED,EAAF,GAAOA,EAAP,GAAY99B,MAAOA,KAAK,IAAIpS,EAAhB,CAAZ,GAAmC6F,CAA7C;AAEA;AAED,MAtBD,MAsBO;;AAEN;;AAEAuM,WAAK,CAAE29B,SAAP;AACAG,WAAKl9C,KAAKyM,GAAL,CAAU,CAAV,EAAa,EAAIuwC,MAAM59B,EAAN,GAAW69B,EAAf,CAAb,CAAL;AACAE,gBAAU,CAAED,EAAF,GAAOA,EAAP,GAAY99B,MAAOA,KAAK,IAAIpS,EAAhB,CAAZ,GAAmC6F,CAA7C;AAEA;AAED,KAlCD,MAkCO;;AAEN,SAAKuM,MAAM,CAAEg+B,MAAb,EAAsB;;AAErB;;AAEAF,WAAKl9C,KAAKyM,GAAL,CAAU,CAAV,EAAa,EAAI,CAAEuwC,GAAF,GAAQD,SAAR,GAAoBE,EAAxB,CAAb,CAAL;AACA79B,WAAO89B,KAAK,CAAP,GAAa,CAAEH,SAAf,GAA2B/8C,KAAKwM,GAAL,CAAUxM,KAAKyM,GAAL,CAAU,CAAEswC,SAAZ,EAAuB,CAAE/vC,EAAzB,CAAV,EAAyC+vC,SAAzC,CAAhC;AACAI,gBAAU,CAAED,EAAF,GAAOA,EAAP,GAAY99B,MAAOA,KAAK,IAAIpS,EAAhB,CAAZ,GAAmC6F,CAA7C;AAEA,MARD,MAQO,IAAKuM,MAAMg+B,MAAX,EAAoB;;AAE1B;;AAEAF,WAAK,CAAL;AACA99B,WAAKpf,KAAKwM,GAAL,CAAUxM,KAAKyM,GAAL,CAAU,CAAEswC,SAAZ,EAAuB,CAAE/vC,EAAzB,CAAV,EAAyC+vC,SAAzC,CAAL;AACAI,gBAAU/9B,MAAOA,KAAK,IAAIpS,EAAhB,IAAuB6F,CAAjC;AAEA,MARM,MAQA;;AAEN;;AAEAqqC,WAAKl9C,KAAKyM,GAAL,CAAU,CAAV,EAAa,EAAIuwC,MAAMD,SAAN,GAAkBE,EAAtB,CAAb,CAAL;AACA79B,WAAO89B,KAAK,CAAP,GAAaH,SAAb,GAAyB/8C,KAAKwM,GAAL,CAAUxM,KAAKyM,GAAL,CAAU,CAAEswC,SAAZ,EAAuB,CAAE/vC,EAAzB,CAAV,EAAyC+vC,SAAzC,CAA9B;AACAI,gBAAU,CAAED,EAAF,GAAOA,EAAP,GAAY99B,MAAOA,KAAK,IAAIpS,EAAhB,CAAZ,GAAmC6F,CAA7C;AAEA;AAED;AAED,IAxED,MAwEO;;AAEN;;AAEAuM,SAAO49B,MAAM,CAAR,GAAc,CAAED,SAAhB,GAA4BA,SAAjC;AACAG,SAAKl9C,KAAKyM,GAAL,CAAU,CAAV,EAAa,EAAIuwC,MAAM59B,EAAN,GAAW69B,EAAf,CAAb,CAAL;AACAE,cAAU,CAAED,EAAF,GAAOA,EAAP,GAAY99B,MAAOA,KAAK,IAAIpS,EAAhB,CAAZ,GAAmC6F,CAA7C;AAEA;;AAED,OAAKgqC,kBAAL,EAA0B;;AAEzBA,uBAAmBztC,IAAnB,CAAyB,KAAK+f,SAA9B,EAA0C/e,cAA1C,CAA0D8sC,EAA1D,EAA+D5tC,GAA/D,CAAoE,KAAK6sC,MAAzE;AAEA;;AAED,OAAKW,sBAAL,EAA8B;;AAE7BA,2BAAuB1tC,IAAvB,CAA6BwtC,MAA7B,EAAsCxsC,cAAtC,CAAsDgP,EAAtD,EAA2D9P,GAA3D,CAAgEqtC,SAAhE;AAEA;;AAED,UAAOQ,OAAP;AAEA,GArHD;AAuHA,EA7HoB,EAlHQ;;AAiP7BG,kBAAiB,YAAY;;AAE5B,MAAIrrC,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAASuoC,eAAT,CAA0B5wB,MAA1B,EAAkC1rB,MAAlC,EAA2C;;AAEjDiR,MAAGhC,UAAH,CAAeyc,OAAO9Z,MAAtB,EAA8B,KAAKupC,MAAnC;AACA,OAAIoB,MAAMtrC,GAAGhB,GAAH,CAAQ,KAAKke,SAAb,CAAV;AACA,OAAIhjB,KAAK8F,GAAGhB,GAAH,CAAQgB,EAAR,IAAesrC,MAAMA,GAA9B;AACA,OAAIC,UAAU9wB,OAAO1I,MAAP,GAAgB0I,OAAO1I,MAArC;;AAEA,OAAK7X,KAAKqxC,OAAV,EAAoB,OAAO,IAAP;;AAEpB,OAAIC,MAAMz9C,KAAKmR,IAAL,CAAWqsC,UAAUrxC,EAArB,CAAV;;AAEA;AACA,OAAIuxC,KAAKH,MAAME,GAAf;;AAEA;AACA,OAAIE,KAAKJ,MAAME,GAAf;;AAEA;AACA,OAAKC,KAAK,CAAL,IAAUC,KAAK,CAApB,EAAwB,OAAO,IAAP;;AAExB;AACA;AACA;AACA,OAAKD,KAAK,CAAV,EAAc,OAAO,KAAKrB,EAAL,CAASsB,EAAT,EAAa38C,MAAb,CAAP;;AAEd;AACA,UAAO,KAAKq7C,EAAL,CAASqB,EAAT,EAAa18C,MAAb,CAAP;AAEA,GA5BD;AA8BA,EAlCgB,EAjPY;;AAqR7BwrB,mBAAkB,UAAWE,MAAX,EAAoB;;AAErC,SAAO,KAAKoB,eAAL,CAAsBpB,OAAO9Z,MAA7B,KAAyC8Z,OAAO1I,MAAvD;AAEA,EAzR4B;;AA2R7B45B,kBAAiB,UAAW/wB,KAAX,EAAmB;;AAEnC,MAAIwC,cAAcxC,MAAMpJ,MAAN,CAAaxS,GAAb,CAAkB,KAAKke,SAAvB,CAAlB;;AAEA,MAAKE,gBAAgB,CAArB,EAAyB;;AAExB;AACA,OAAKxC,MAAMiB,eAAN,CAAuB,KAAKquB,MAA5B,MAAyC,CAA9C,EAAkD;;AAEjD,WAAO,CAAP;AAEA;;AAED;;AAEA,UAAO,IAAP;AAEA;;AAED,MAAI/uC,IAAI,EAAI,KAAK+uC,MAAL,CAAYlrC,GAAZ,CAAiB4b,MAAMpJ,MAAvB,IAAkCoJ,MAAMC,QAA5C,IAAyDuC,WAAjE;;AAEA;;AAEA,SAAOjiB,KAAK,CAAL,GAASA,CAAT,GAAa,IAApB;AAEA,EApT4B;;AAsT7BywC,iBAAgB,UAAWhxB,KAAX,EAAkB7rB,MAAlB,EAA2B;;AAE1C,MAAIoM,IAAI,KAAKwwC,eAAL,CAAsB/wB,KAAtB,CAAR;;AAEA,MAAKzf,MAAM,IAAX,EAAkB;;AAEjB,UAAO,IAAP;AAEA;;AAED,SAAO,KAAKivC,EAAL,CAASjvC,CAAT,EAAYpM,MAAZ,CAAP;AAEA,EAlU4B;;AAoU7B4rB,kBAAiB,UAAWC,KAAX,EAAmB;;AAEnC;;AAEA,MAAIixB,cAAcjxB,MAAMiB,eAAN,CAAuB,KAAKquB,MAA5B,CAAlB;;AAEA,MAAK2B,gBAAgB,CAArB,EAAyB;;AAExB,UAAO,IAAP;AAEA;;AAED,MAAIzuB,cAAcxC,MAAMpJ,MAAN,CAAaxS,GAAb,CAAkB,KAAKke,SAAvB,CAAlB;;AAEA,MAAKE,cAAcyuB,WAAd,GAA4B,CAAjC,EAAqC;;AAEpC,UAAO,IAAP;AAEA;;AAED;;AAEA,SAAO,KAAP;AAEA,EA5V4B;;AA8V7BC,eAAc,UAAW3yB,GAAX,EAAgBpqB,MAAhB,EAAyB;;AAEtC,MAAIg9C,IAAJ,EAAUC,IAAV,EAAgBC,KAAhB,EAAuBC,KAAvB,EAA8BC,KAA9B,EAAqCC,KAArC;;AAEA,MAAIC,UAAU,IAAI,KAAKnvB,SAAL,CAAe5uB,CAAjC;AAAA,MACCg+C,UAAU,IAAI,KAAKpvB,SAAL,CAAehiB,CAD9B;AAAA,MAECqxC,UAAU,IAAI,KAAKrvB,SAAL,CAAeta,CAF9B;;AAIA,MAAIsnC,SAAS,KAAKA,MAAlB;;AAEA,MAAKmC,WAAW,CAAhB,EAAoB;;AAEnBN,UAAO,CAAE5yB,IAAI5e,GAAJ,CAAQjM,CAAR,GAAY47C,OAAO57C,CAArB,IAA2B+9C,OAAlC;AACAL,UAAO,CAAE7yB,IAAI3e,GAAJ,CAAQlM,CAAR,GAAY47C,OAAO57C,CAArB,IAA2B+9C,OAAlC;AAEA,GALD,MAKO;;AAENN,UAAO,CAAE5yB,IAAI3e,GAAJ,CAAQlM,CAAR,GAAY47C,OAAO57C,CAArB,IAA2B+9C,OAAlC;AACAL,UAAO,CAAE7yB,IAAI5e,GAAJ,CAAQjM,CAAR,GAAY47C,OAAO57C,CAArB,IAA2B+9C,OAAlC;AAEA;;AAED,MAAKC,WAAW,CAAhB,EAAoB;;AAEnBL,WAAQ,CAAE9yB,IAAI5e,GAAJ,CAAQW,CAAR,GAAYgvC,OAAOhvC,CAArB,IAA2BoxC,OAAnC;AACAJ,WAAQ,CAAE/yB,IAAI3e,GAAJ,CAAQU,CAAR,GAAYgvC,OAAOhvC,CAArB,IAA2BoxC,OAAnC;AAEA,GALD,MAKO;;AAENL,WAAQ,CAAE9yB,IAAI3e,GAAJ,CAAQU,CAAR,GAAYgvC,OAAOhvC,CAArB,IAA2BoxC,OAAnC;AACAJ,WAAQ,CAAE/yB,IAAI5e,GAAJ,CAAQW,CAAR,GAAYgvC,OAAOhvC,CAArB,IAA2BoxC,OAAnC;AAEA;;AAED,MAAOP,OAAOG,KAAT,IAAsBD,QAAQD,IAAnC,EAA4C,OAAO,IAAP;;AAE5C;AACA;;AAEA,MAAKC,QAAQF,IAAR,IAAgBA,SAASA,IAA9B,EAAqCA,OAAOE,KAAP;;AAErC,MAAKC,QAAQF,IAAR,IAAgBA,SAASA,IAA9B,EAAqCA,OAAOE,KAAP;;AAErC,MAAKK,WAAW,CAAhB,EAAoB;;AAEnBJ,WAAQ,CAAEhzB,IAAI5e,GAAJ,CAAQqI,CAAR,GAAYsnC,OAAOtnC,CAArB,IAA2B2pC,OAAnC;AACAH,WAAQ,CAAEjzB,IAAI3e,GAAJ,CAAQoI,CAAR,GAAYsnC,OAAOtnC,CAArB,IAA2B2pC,OAAnC;AAEA,GALD,MAKO;;AAENJ,WAAQ,CAAEhzB,IAAI3e,GAAJ,CAAQoI,CAAR,GAAYsnC,OAAOtnC,CAArB,IAA2B2pC,OAAnC;AACAH,WAAQ,CAAEjzB,IAAI5e,GAAJ,CAAQqI,CAAR,GAAYsnC,OAAOtnC,CAArB,IAA2B2pC,OAAnC;AAEA;;AAED,MAAOR,OAAOK,KAAT,IAAsBD,QAAQH,IAAnC,EAA4C,OAAO,IAAP;;AAE5C,MAAKG,QAAQJ,IAAR,IAAgBA,SAASA,IAA9B,EAAqCA,OAAOI,KAAP;;AAErC,MAAKC,QAAQJ,IAAR,IAAgBA,SAASA,IAA9B,EAAqCA,OAAOI,KAAP;;AAErC;;AAEA,MAAKJ,OAAO,CAAZ,EAAgB,OAAO,IAAP;;AAEhB,SAAO,KAAK5B,EAAL,CAAS2B,QAAQ,CAAR,GAAYA,IAAZ,GAAmBC,IAA5B,EAAkCj9C,MAAlC,CAAP;AAEA,EAja4B;;AAma7BurB,gBAAiB,YAAY;;AAE5B,MAAIld,IAAI,IAAI0F,OAAJ,EAAR;;AAEA,SAAO,SAASwX,aAAT,CAAwBnB,GAAxB,EAA8B;;AAEpC,UAAO,KAAK2yB,YAAL,CAAmB3yB,GAAnB,EAAwB/b,CAAxB,MAAgC,IAAvC;AAEA,GAJD;AAMA,EAVc,EAnac;;AA+a7BovC,oBAAmB,YAAY;;AAE9B;AACA,MAAIrO,OAAO,IAAIr7B,OAAJ,EAAX;AACA,MAAI2pC,QAAQ,IAAI3pC,OAAJ,EAAZ;AACA,MAAI4pC,QAAQ,IAAI5pC,OAAJ,EAAZ;AACA,MAAI0O,SAAS,IAAI1O,OAAJ,EAAb;;AAEA,SAAO,SAAS0pC,iBAAT,CAA4B5uC,CAA5B,EAA+BC,CAA/B,EAAkC+C,CAAlC,EAAqC+rC,eAArC,EAAsD59C,MAAtD,EAA+D;;AAErE;;AAEA09C,SAAMzuC,UAAN,CAAkBH,CAAlB,EAAqBD,CAArB;AACA8uC,SAAM1uC,UAAN,CAAkB4C,CAAlB,EAAqBhD,CAArB;AACA4T,UAAO/L,YAAP,CAAqBgnC,KAArB,EAA4BC,KAA5B;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAIE,MAAM,KAAK1vB,SAAL,CAAele,GAAf,CAAoBwS,MAApB,CAAV;AACA,OAAInjB,IAAJ;;AAEA,OAAKu+C,MAAM,CAAX,EAAe;;AAEd,QAAKD,eAAL,EAAuB,OAAO,IAAP;AACvBt+C,WAAO,CAAP;AAEA,IALD,MAKO,IAAKu+C,MAAM,CAAX,EAAe;;AAErBv+C,WAAO,CAAE,CAAT;AACAu+C,UAAM,CAAEA,GAAR;AAEA,IALM,MAKA;;AAEN,WAAO,IAAP;AAEA;;AAEDzO,QAAKngC,UAAL,CAAiB,KAAKksC,MAAtB,EAA8BtsC,CAA9B;AACA,OAAIivC,SAASx+C,OAAO,KAAK6uB,SAAL,CAAele,GAAf,CAAoB0tC,MAAMjnC,YAAN,CAAoB04B,IAApB,EAA0BuO,KAA1B,CAApB,CAApB;;AAEA;AACA,OAAKG,SAAS,CAAd,EAAkB;;AAEjB,WAAO,IAAP;AAEA;;AAED,OAAIC,SAASz+C,OAAO,KAAK6uB,SAAL,CAAele,GAAf,CAAoBytC,MAAM57B,KAAN,CAAastB,IAAb,CAApB,CAApB;;AAEA;AACA,OAAK2O,SAAS,CAAd,EAAkB;;AAEjB,WAAO,IAAP;AAEA;;AAED;AACA,OAAKD,SAASC,MAAT,GAAkBF,GAAvB,EAA6B;;AAE5B,WAAO,IAAP;AAEA;;AAED;AACA,OAAIG,MAAM,CAAE1+C,IAAF,GAAS8vC,KAAKn/B,GAAL,CAAUwS,MAAV,CAAnB;;AAEA;AACA,OAAKu7B,MAAM,CAAX,EAAe;;AAEd,WAAO,IAAP;AAEA;;AAED;AACA,UAAO,KAAK3C,EAAL,CAAS2C,MAAMH,GAAf,EAAoB79C,MAApB,CAAP;AAEA,GAvED;AAyEA,EAjFkB,EA/aU;;AAkgB7BgZ,eAAc,UAAWyK,OAAX,EAAqB;;AAElC,OAAK03B,MAAL,CAAYniC,YAAZ,CAA0ByK,OAA1B;AACA,OAAK0K,SAAL,CAAetM,kBAAf,CAAmC4B,OAAnC;;AAEA,SAAO,IAAP;AAEA,EAzgB4B;;AA2gB7BtS,SAAQ,UAAWiqC,GAAX,EAAiB;;AAExB,SAAOA,IAAID,MAAJ,CAAWhqC,MAAX,CAAmB,KAAKgqC,MAAxB,KAAoCC,IAAIjtB,SAAJ,CAAchd,MAAd,CAAsB,KAAKgd,SAA3B,CAA3C;AAEA;;AA/gB4B,CAA9B;;AAmhBA;;;;AAIA,SAAS8vB,KAAT,CAAgB3vB,KAAhB,EAAuBI,GAAvB,EAA6B;;AAE5B,MAAKJ,KAAL,GAAeA,UAAUvvB,SAAZ,GAA0BuvB,KAA1B,GAAkC,IAAIva,OAAJ,EAA/C;AACA,MAAK2a,GAAL,GAAaA,QAAQ3vB,SAAV,GAAwB2vB,GAAxB,GAA8B,IAAI3a,OAAJ,EAAzC;AAEA;;AAEDrU,OAAOK,MAAP,CAAek+C,MAAMx+C,SAArB,EAAgC;;AAE/BgO,MAAK,UAAW6gB,KAAX,EAAkBI,GAAlB,EAAwB;;AAE5B,OAAKJ,KAAL,CAAWlgB,IAAX,CAAiBkgB,KAAjB;AACA,OAAKI,GAAL,CAAStgB,IAAT,CAAesgB,GAAf;;AAEA,SAAO,IAAP;AAEA,EAT8B;;AAW/BxgB,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EAf8B;;AAiB/BA,OAAM,UAAW8f,IAAX,EAAkB;;AAEvB,OAAKI,KAAL,CAAWlgB,IAAX,CAAiB8f,KAAKI,KAAtB;AACA,OAAKI,GAAL,CAAStgB,IAAT,CAAe8f,KAAKQ,GAApB;;AAEA,SAAO,IAAP;AAEA,EAxB8B;;AA0B/BpE,YAAW,UAAWtqB,MAAX,EAAoB;;AAE9B,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,kDAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO/T,OAAO0O,UAAP,CAAmB,KAAK4f,KAAxB,EAA+B,KAAKI,GAApC,EAA0Ctf,cAA1C,CAA0D,GAA1D,CAAP;AAEA,EArC8B;;AAuC/Bgf,QAAO,UAAWpuB,MAAX,EAAoB;;AAE1B,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,8CAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO/T,OAAOiP,UAAP,CAAmB,KAAKyf,GAAxB,EAA6B,KAAKJ,KAAlC,CAAP;AAEA,EAlD8B;;AAoD/B4vB,aAAY,YAAY;;AAEvB,SAAO,KAAK5vB,KAAL,CAAW5d,iBAAX,CAA8B,KAAKge,GAAnC,CAAP;AAEA,EAxD8B;;AA0D/BmC,WAAU,YAAY;;AAErB,SAAO,KAAKvC,KAAL,CAAW7d,UAAX,CAAuB,KAAKie,GAA5B,CAAP;AAEA,EA9D8B;;AAgE/B2sB,KAAI,UAAWjvC,CAAX,EAAcpM,MAAd,EAAuB;;AAE1B,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,2CAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO,KAAKqa,KAAL,CAAYpuB,MAAZ,EAAqBoP,cAArB,CAAqChD,CAArC,EAAyCkC,GAAzC,CAA8C,KAAKggB,KAAnD,CAAP;AAEA,EA3E8B;;AA6E/B6vB,+BAA8B,YAAY;;AAEzC,MAAIC,SAAS,IAAIrqC,OAAJ,EAAb;AACA,MAAIsqC,WAAW,IAAItqC,OAAJ,EAAf;;AAEA,SAAO,SAASoqC,4BAAT,CAAuC3zB,KAAvC,EAA8C8zB,WAA9C,EAA4D;;AAElEF,UAAOnvC,UAAP,CAAmBub,KAAnB,EAA0B,KAAK8D,KAA/B;AACA+vB,YAASpvC,UAAT,CAAqB,KAAKyf,GAA1B,EAA+B,KAAKJ,KAApC;;AAEA,OAAIiwB,YAAYF,SAASpuC,GAAT,CAAcouC,QAAd,CAAhB;AACA,OAAIG,kBAAkBH,SAASpuC,GAAT,CAAcmuC,MAAd,CAAtB;;AAEA,OAAIhyC,IAAIoyC,kBAAkBD,SAA1B;;AAEA,OAAKD,WAAL,EAAmB;;AAElBlyC,QAAI1B,MAAMa,KAAN,CAAaa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAJ;AAEA;;AAED,UAAOA,CAAP;AAEA,GAlBD;AAoBA,EAzB6B,EA7EC;;AAwG/BmvC,sBAAqB,UAAW/wB,KAAX,EAAkB8zB,WAAlB,EAA+Bt+C,MAA/B,EAAwC;;AAE5D,MAAIoM,IAAI,KAAK+xC,4BAAL,CAAmC3zB,KAAnC,EAA0C8zB,WAA1C,CAAR;;AAEA,MAAKt+C,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,4DAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO,KAAKqa,KAAL,CAAYpuB,MAAZ,EAAqBoP,cAArB,CAAqChD,CAArC,EAAyCkC,GAAzC,CAA8C,KAAKggB,KAAnD,CAAP;AAEA,EArH8B;;AAuH/BtV,eAAc,UAAWoC,MAAX,EAAoB;;AAEjC,OAAKkT,KAAL,CAAWtV,YAAX,CAAyBoC,MAAzB;AACA,OAAKsT,GAAL,CAAS1V,YAAT,CAAuBoC,MAAvB;;AAEA,SAAO,IAAP;AAEA,EA9H8B;;AAgI/BjK,SAAQ,UAAW+c,IAAX,EAAkB;;AAEzB,SAAOA,KAAKI,KAAL,CAAWnd,MAAX,CAAmB,KAAKmd,KAAxB,KAAmCJ,KAAKQ,GAAL,CAASvd,MAAT,CAAiB,KAAKud,GAAtB,CAA1C;AAEA;;AApI8B,CAAhC;;AAwIA;;;;;AAKA,SAAS+vB,QAAT,CAAmB5vC,CAAnB,EAAsBC,CAAtB,EAAyB+C,CAAzB,EAA6B;;AAE5B,MAAKhD,CAAL,GAAWA,MAAM9P,SAAR,GAAsB8P,CAAtB,GAA0B,IAAIkF,OAAJ,EAAnC;AACA,MAAKjF,CAAL,GAAWA,MAAM/P,SAAR,GAAsB+P,CAAtB,GAA0B,IAAIiF,OAAJ,EAAnC;AACA,MAAKlC,CAAL,GAAWA,MAAM9S,SAAR,GAAsB8S,CAAtB,GAA0B,IAAIkC,OAAJ,EAAnC;AAEA;;AAEDrU,OAAOK,MAAP,CAAe0+C,QAAf,EAAyB;;AAExBC,YAAW,YAAY;;AAEtB,MAAI1yB,KAAK,IAAIjY,OAAJ,EAAT;;AAEA,SAAO,SAAS2qC,SAAT,CAAoB7vC,CAApB,EAAuBC,CAAvB,EAA0B+C,CAA1B,EAA6B7R,MAA7B,EAAsC;;AAE5C,OAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,qDAAd;AACAzO,aAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED/T,UAAOiP,UAAP,CAAmB4C,CAAnB,EAAsB/C,CAAtB;AACAkd,MAAG/c,UAAH,CAAeJ,CAAf,EAAkBC,CAAlB;AACA9O,UAAO8hB,KAAP,CAAckK,EAAd;;AAEA,OAAI2yB,iBAAiB3+C,OAAOkQ,QAAP,EAArB;AACA,OAAKyuC,iBAAiB,CAAtB,EAA0B;;AAEzB,WAAO3+C,OAAOoP,cAAP,CAAuB,IAAIpQ,KAAKmR,IAAL,CAAWwuC,cAAX,CAA3B,CAAP;AAEA;;AAED,UAAO3+C,OAAOyN,GAAP,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,CAAP;AAEA,GAtBD;AAwBA,EA5BU,EAFa;;AAgCxB;AACA;AACAmxC,eAAc,YAAY;;AAEzB,MAAI5yB,KAAK,IAAIjY,OAAJ,EAAT;AACA,MAAI9C,KAAK,IAAI8C,OAAJ,EAAT;AACA,MAAI7C,KAAK,IAAI6C,OAAJ,EAAT;;AAEA,SAAO,SAAS6qC,YAAT,CAAuBp0B,KAAvB,EAA8B3b,CAA9B,EAAiCC,CAAjC,EAAoC+C,CAApC,EAAuC7R,MAAvC,EAAgD;;AAEtDgsB,MAAG/c,UAAH,CAAe4C,CAAf,EAAkBhD,CAAlB;AACAoC,MAAGhC,UAAH,CAAeH,CAAf,EAAkBD,CAAlB;AACAqC,MAAGjC,UAAH,CAAeub,KAAf,EAAsB3b,CAAtB;;AAEA,OAAIgwC,QAAQ7yB,GAAG/b,GAAH,CAAQ+b,EAAR,CAAZ;AACA,OAAI8yB,QAAQ9yB,GAAG/b,GAAH,CAAQgB,EAAR,CAAZ;AACA,OAAI8tC,QAAQ/yB,GAAG/b,GAAH,CAAQiB,EAAR,CAAZ;AACA,OAAI8tC,QAAQ/tC,GAAGhB,GAAH,CAAQgB,EAAR,CAAZ;AACA,OAAIguC,QAAQhuC,GAAGhB,GAAH,CAAQiB,EAAR,CAAZ;;AAEA,OAAIguC,QAAUL,QAAQG,KAAR,GAAgBF,QAAQA,KAAtC;;AAEA,OAAK9+C,WAAWjB,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,wDAAd;AACAzO,aAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED;AACA,OAAKmrC,UAAU,CAAf,EAAmB;;AAElB;AACA;AACA,WAAOl/C,OAAOyN,GAAP,CAAY,CAAE,CAAd,EAAiB,CAAE,CAAnB,EAAsB,CAAE,CAAxB,CAAP;AAEA;;AAED,OAAI0xC,WAAW,IAAID,KAAnB;AACA,OAAI9mB,IAAI,CAAE4mB,QAAQD,KAAR,GAAgBD,QAAQG,KAA1B,IAAoCE,QAA5C;AACA,OAAI9wC,IAAI,CAAEwwC,QAAQI,KAAR,GAAgBH,QAAQC,KAA1B,IAAoCI,QAA5C;;AAEA;AACA,UAAOn/C,OAAOyN,GAAP,CAAY,IAAI2qB,CAAJ,GAAQ/pB,CAApB,EAAuBA,CAAvB,EAA0B+pB,CAA1B,CAAP;AAEA,GArCD;AAuCA,EA7Ca,EAlCU;;AAiFxBhN,gBAAe,YAAY;;AAE1B,MAAIna,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAASqX,aAAT,CAAwBZ,KAAxB,EAA+B3b,CAA/B,EAAkCC,CAAlC,EAAqC+C,CAArC,EAAyC;;AAE/C4sC,YAASG,YAAT,CAAuBp0B,KAAvB,EAA8B3b,CAA9B,EAAiCC,CAAjC,EAAoC+C,CAApC,EAAuCZ,EAAvC;;AAEA,UAASA,GAAG1R,CAAH,IAAQ,CAAV,IAAmB0R,GAAG9E,CAAH,IAAQ,CAA3B,IAAsC8E,GAAG1R,CAAH,GAAO0R,GAAG9E,CAAZ,IAAmB,CAA9D;AAEA,GAND;AAQA,EAZc;;AAjFS,CAAzB;;AAiGAzM,OAAOK,MAAP,CAAe0+C,SAASh/C,SAAxB,EAAmC;;AAElCgO,MAAK,UAAWoB,CAAX,EAAcC,CAAd,EAAiB+C,CAAjB,EAAqB;;AAEzB,OAAKhD,CAAL,CAAOT,IAAP,CAAaS,CAAb;AACA,OAAKC,CAAL,CAAOV,IAAP,CAAaU,CAAb;AACA,OAAK+C,CAAL,CAAOzD,IAAP,CAAayD,CAAb;;AAEA,SAAO,IAAP;AAEA,EAViC;;AAYlCutC,0BAAyB,UAAW11B,MAAX,EAAmB21B,EAAnB,EAAuBC,EAAvB,EAA2BC,EAA3B,EAAgC;;AAExD,OAAK1wC,CAAL,CAAOT,IAAP,CAAasb,OAAQ21B,EAAR,CAAb;AACA,OAAKvwC,CAAL,CAAOV,IAAP,CAAasb,OAAQ41B,EAAR,CAAb;AACA,OAAKztC,CAAL,CAAOzD,IAAP,CAAasb,OAAQ61B,EAAR,CAAb;;AAEA,SAAO,IAAP;AAEA,EApBiC;;AAsBlCrxC,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EA1BiC;;AA4BlCA,OAAM,UAAWye,QAAX,EAAsB;;AAE3B,OAAKhe,CAAL,CAAOT,IAAP,CAAaye,SAAShe,CAAtB;AACA,OAAKC,CAAL,CAAOV,IAAP,CAAaye,SAAS/d,CAAtB;AACA,OAAK+C,CAAL,CAAOzD,IAAP,CAAaye,SAAShb,CAAtB;;AAEA,SAAO,IAAP;AAEA,EApCiC;;AAsClC2tC,UAAS,YAAY;;AAEpB,MAAIxzB,KAAK,IAAIjY,OAAJ,EAAT;AACA,MAAI9C,KAAK,IAAI8C,OAAJ,EAAT;;AAEA,SAAO,SAASyrC,OAAT,GAAmB;;AAEzBxzB,MAAG/c,UAAH,CAAe,KAAK4C,CAApB,EAAuB,KAAK/C,CAA5B;AACAmC,MAAGhC,UAAH,CAAe,KAAKJ,CAApB,EAAuB,KAAKC,CAA5B;;AAEA,UAAOkd,GAAGlK,KAAH,CAAU7Q,EAAV,EAAe5Q,MAAf,KAA0B,GAAjC;AAEA,GAPD;AASA,EAdQ,EAtCyB;;AAsDlCo/C,cAAa,UAAWz/C,MAAX,EAAoB;;AAEhC,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,uDAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO/T,OAAO0O,UAAP,CAAmB,KAAKG,CAAxB,EAA2B,KAAKC,CAAhC,EAAoCR,GAApC,CAAyC,KAAKuD,CAA9C,EAAkDzC,cAAlD,CAAkE,IAAI,CAAtE,CAAP;AAEA,EAjEiC;;AAmElCsvC,YAAW,UAAW1+C,MAAX,EAAoB;;AAE9B,SAAOy+C,SAASC,SAAT,CAAoB,KAAK7vC,CAAzB,EAA4B,KAAKC,CAAjC,EAAoC,KAAK+C,CAAzC,EAA4C7R,MAA5C,CAAP;AAEA,EAvEiC;;AAyElC0/C,WAAU,UAAW1/C,MAAX,EAAoB;;AAE7B,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,oDAAd;AACAzO,YAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,SAAO/T,OAAO6tB,qBAAP,CAA8B,KAAKhf,CAAnC,EAAsC,KAAKC,CAA3C,EAA8C,KAAK+C,CAAnD,CAAP;AAEA,EApFiC;;AAsFlC+sC,eAAc,UAAWp0B,KAAX,EAAkBxqB,MAAlB,EAA2B;;AAExC,SAAOy+C,SAASG,YAAT,CAAuBp0B,KAAvB,EAA8B,KAAK3b,CAAnC,EAAsC,KAAKC,CAA3C,EAA8C,KAAK+C,CAAnD,EAAsD7R,MAAtD,CAAP;AAEA,EA1FiC;;AA4FlCorB,gBAAe,UAAWZ,KAAX,EAAmB;;AAEjC,SAAOi0B,SAASrzB,aAAT,CAAwBZ,KAAxB,EAA+B,KAAK3b,CAApC,EAAuC,KAAKC,CAA5C,EAA+C,KAAK+C,CAApD,CAAP;AAEA,EAhGiC;;AAkGlC0Z,gBAAe,UAAWnB,GAAX,EAAiB;;AAE/B,SAAOA,IAAI2B,kBAAJ,CAAwB,IAAxB,CAAP;AAEA,EAtGiC;;AAwGlCwvB,sBAAqB,YAAY;;AAEhC,MAAI1vB,QAAQ,IAAI6B,KAAJ,EAAZ;AACA,MAAIiyB,WAAW,CAAE,IAAI1B,KAAJ,EAAF,EAAe,IAAIA,KAAJ,EAAf,EAA4B,IAAIA,KAAJ,EAA5B,CAAf;AACA,MAAI2B,iBAAiB,IAAI7rC,OAAJ,EAArB;AACA,MAAI0X,eAAe,IAAI1X,OAAJ,EAAnB;;AAEA,SAAO,SAASwnC,mBAAT,CAA8B/wB,KAA9B,EAAqCxqB,MAArC,EAA8C;;AAEpD,OAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,+DAAd;AACAzO,aAAS,IAAI+T,OAAJ,EAAT;AAEA;;AAED,OAAI8rC,cAAc92B,QAAlB;;AAEA;;AAEA8C,SAAMgC,qBAAN,CAA6B,KAAKhf,CAAlC,EAAqC,KAAKC,CAA1C,EAA6C,KAAK+C,CAAlD;AACAga,SAAMmC,YAAN,CAAoBxD,KAApB,EAA2Bo1B,cAA3B;;AAEA;;AAEA,OAAK,KAAKx0B,aAAL,CAAoBw0B,cAApB,MAAyC,IAA9C,EAAqD;;AAEpD;;AAEA5/C,WAAOoO,IAAP,CAAawxC,cAAb;AAEA,IAND,MAMO;;AAEN;;AAEAD,aAAU,CAAV,EAAclyC,GAAd,CAAmB,KAAKoB,CAAxB,EAA2B,KAAKC,CAAhC;AACA6wC,aAAU,CAAV,EAAclyC,GAAd,CAAmB,KAAKqB,CAAxB,EAA2B,KAAK+C,CAAhC;AACA8tC,aAAU,CAAV,EAAclyC,GAAd,CAAmB,KAAKoE,CAAxB,EAA2B,KAAKhD,CAAhC;;AAEA,SAAM,IAAInN,IAAI,CAAd,EAAiBA,IAAIi+C,SAASt/C,MAA9B,EAAsCqB,GAAtC,EAA6C;;AAE5Ci+C,cAAUj+C,CAAV,EAAc65C,mBAAd,CAAmCqE,cAAnC,EAAmD,IAAnD,EAAyDn0B,YAAzD;;AAEA,SAAIoF,WAAW+uB,eAAelvC,iBAAf,CAAkC+a,YAAlC,CAAf;;AAEA,SAAKoF,WAAWgvB,WAAhB,EAA8B;;AAE7BA,oBAAchvB,QAAd;;AAEA7wB,aAAOoO,IAAP,CAAaqd,YAAb;AAEA;AAED;AAED;;AAED,UAAOzrB,MAAP;AAEA,GApDD;AAsDA,EA7DoB,EAxGa;;AAuKlCmR,SAAQ,UAAW0b,QAAX,EAAsB;;AAE7B,SAAOA,SAAShe,CAAT,CAAWsC,MAAX,CAAmB,KAAKtC,CAAxB,KAA+Bge,SAAS/d,CAAT,CAAWqC,MAAX,CAAmB,KAAKrC,CAAxB,CAA/B,IAA8D+d,SAAShb,CAAT,CAAWV,MAAX,CAAmB,KAAKU,CAAxB,CAArE;AAEA;;AA3KiC,CAAnC;;AA+KA;;;;;;;AAOA,SAASiuC,IAAT,CAAeh1B,QAAf,EAAyBwd,QAAzB,EAAoC;;AAEnC5D,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,MAAZ;;AAEA,MAAKkqB,QAAL,GAAgBA,aAAa/rB,SAAb,GAAyB+rB,QAAzB,GAAoC,IAAI6oB,cAAJ,EAApD;AACA,MAAKrL,QAAL,GAAgBA,aAAavpC,SAAb,GAAyBupC,QAAzB,GAAoC,IAAI6R,iBAAJ,CAAuB,EAAE3gB,OAAOx6B,KAAKiM,MAAL,KAAgB,QAAzB,EAAvB,CAApD;;AAEA,MAAK80C,QAAL,GAAgBl2C,iBAAhB;;AAEA,MAAKm2C,kBAAL;AAEA;;AAEDF,KAAKrgD,SAAL,GAAiBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAEpE0O,cAAa2xC,IAFuD;;AAIpEnR,SAAQ,IAJ4D;;AAMpEsR,cAAa,UAAW9gD,KAAX,EAAmB;;AAE/B,OAAK4gD,QAAL,GAAgB5gD,KAAhB;AAEA,EAVmE;;AAYpEiP,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBokC,WAASjlC,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,OAAKy/C,QAAL,GAAgBz/C,OAAOy/C,QAAvB;;AAEA,MAAKz/C,OAAO4/C,qBAAP,KAAiCnhD,SAAtC,EAAkD;;AAEjD,QAAKmhD,qBAAL,GAA6B5/C,OAAO4/C,qBAAP,CAA6Bz+C,KAA7B,EAA7B;AAEA;;AAED,MAAKnB,OAAO6/C,qBAAP,KAAiCphD,SAAtC,EAAkD;;AAEjD,QAAKohD,qBAAL,GAA6BzgD,OAAOK,MAAP,CAAe,EAAf,EAAmBO,OAAO6/C,qBAA1B,CAA7B;AAEA;;AAED,SAAO,IAAP;AAEA,EAhCmE;;AAkCpEH,qBAAoB,YAAY;;AAE/B,MAAIl1B,WAAW,KAAKA,QAApB;AACA,MAAIlf,CAAJ,EAAOw0C,EAAP,EAAWx7B,IAAX;;AAEA,MAAKkG,SAASG,gBAAd,EAAiC;;AAEhC,OAAI2oB,kBAAkB9oB,SAAS8oB,eAA/B;AACA,OAAIyM,OAAO3gD,OAAO2gD,IAAP,CAAazM,eAAb,CAAX;;AAEA,OAAKyM,KAAKhgD,MAAL,GAAc,CAAnB,EAAuB;;AAEtB,QAAIs1C,iBAAiB/B,gBAAiByM,KAAM,CAAN,CAAjB,CAArB;;AAEA,QAAK1K,mBAAmB52C,SAAxB,EAAoC;;AAEnC,UAAKmhD,qBAAL,GAA6B,EAA7B;AACA,UAAKC,qBAAL,GAA6B,EAA7B;;AAEA,UAAMv0C,IAAI,CAAJ,EAAOw0C,KAAKzK,eAAet1C,MAAjC,EAAyCuL,IAAIw0C,EAA7C,EAAiDx0C,GAAjD,EAAwD;;AAEvDgZ,aAAO+wB,eAAgB/pC,CAAhB,EAAoBgZ,IAApB,IAA4B07B,OAAQ10C,CAAR,CAAnC;;AAEA,WAAKs0C,qBAAL,CAA2Bj/C,IAA3B,CAAiC,CAAjC;AACA,WAAKk/C,qBAAL,CAA4Bv7B,IAA5B,IAAqChZ,CAArC;AAEA;AAED;AAED;AAED,GA3BD,MA2BO;;AAEN,OAAI6+B,eAAe3f,SAAS2f,YAA5B;;AAEA,OAAKA,iBAAiB1rC,SAAjB,IAA8B0rC,aAAapqC,MAAb,GAAsB,CAAzD,EAA6D;;AAE5D,SAAK6/C,qBAAL,GAA6B,EAA7B;AACA,SAAKC,qBAAL,GAA6B,EAA7B;;AAEA,SAAMv0C,IAAI,CAAJ,EAAOw0C,KAAK3V,aAAapqC,MAA/B,EAAuCuL,IAAIw0C,EAA3C,EAA+Cx0C,GAA/C,EAAsD;;AAErDgZ,YAAO6lB,aAAc7+B,CAAd,EAAkBgZ,IAAlB,IAA0B07B,OAAQ10C,CAAR,CAAjC;;AAEA,UAAKs0C,qBAAL,CAA2Bj/C,IAA3B,CAAiC,CAAjC;AACA,UAAKk/C,qBAAL,CAA4Bv7B,IAA5B,IAAqChZ,CAArC;AAEA;AAED;AAED;AAED,EAxFmE;;AA0FpE47B,UAAW,YAAY;;AAEtB,MAAI+Y,gBAAgB,IAAIvuC,OAAJ,EAApB;AACA,MAAIopC,MAAM,IAAIF,GAAJ,EAAV;AACA,MAAIxvB,SAAS,IAAIuB,MAAJ,EAAb;;AAEA,MAAI2f,KAAK,IAAI74B,OAAJ,EAAT;AACA,MAAI84B,KAAK,IAAI94B,OAAJ,EAAT;AACA,MAAI+4B,KAAK,IAAI/4B,OAAJ,EAAT;;AAEA,MAAIysC,QAAQ,IAAIzsC,OAAJ,EAAZ;AACA,MAAI0sC,QAAQ,IAAI1sC,OAAJ,EAAZ;AACA,MAAI2sC,QAAQ,IAAI3sC,OAAJ,EAAZ;;AAEA,MAAI4sC,MAAM,IAAIpzC,OAAJ,EAAV;AACA,MAAIqzC,MAAM,IAAIrzC,OAAJ,EAAV;AACA,MAAIszC,MAAM,IAAItzC,OAAJ,EAAV;;AAEA,MAAIuzC,YAAY,IAAI/sC,OAAJ,EAAhB;;AAEA,MAAIgtC,oBAAoB,IAAIhtC,OAAJ,EAAxB;AACA,MAAIitC,yBAAyB,IAAIjtC,OAAJ,EAA7B;;AAEA,WAASktC,cAAT,CAAyBz2B,KAAzB,EAAgCmC,EAAhC,EAAoCC,EAApC,EAAwCqC,EAAxC,EAA4CiyB,GAA5C,EAAiDjV,GAAjD,EAAsDkV,GAAtD,EAA4D;;AAE3D1C,YAASG,YAAT,CAAuBp0B,KAAvB,EAA8BmC,EAA9B,EAAkCC,EAAlC,EAAsCqC,EAAtC,EAA0C6xB,SAA1C;;AAEAI,OAAI9xC,cAAJ,CAAoB0xC,UAAUvhD,CAA9B;AACA0sC,OAAI78B,cAAJ,CAAoB0xC,UAAU30C,CAA9B;AACAg1C,OAAI/xC,cAAJ,CAAoB0xC,UAAUjtC,CAA9B;;AAEAqtC,OAAI5yC,GAAJ,CAAS29B,GAAT,EAAe39B,GAAf,CAAoB6yC,GAApB;;AAEA,UAAOD,IAAIhzC,KAAJ,EAAP;AAEA;;AAED,WAASkzC,iBAAT,CAA4Bl3B,MAA5B,EAAoCoe,QAApC,EAA8C+Y,SAA9C,EAAyDjG,GAAzD,EAA8DrG,EAA9D,EAAkEC,EAAlE,EAAsEC,EAAtE,EAA0EzqB,KAA1E,EAAkF;;AAEjF,OAAI0C,SAAJ;;AAEA,OAAKob,SAASoP,IAAT,KAAkB/0C,QAAvB,EAAkC;;AAEjCuqB,gBAAYkuB,IAAIqC,iBAAJ,CAAuBxI,EAAvB,EAA2BD,EAA3B,EAA+BD,EAA/B,EAAmC,IAAnC,EAAyCvqB,KAAzC,CAAZ;AAEA,IAJD,MAIO;;AAEN0C,gBAAYkuB,IAAIqC,iBAAJ,CAAuB1I,EAAvB,EAA2BC,EAA3B,EAA+BC,EAA/B,EAAmC3M,SAASoP,IAAT,KAAkB90C,UAArD,EAAiE4nB,KAAjE,CAAZ;AAEA;;AAED,OAAK0C,cAAc,IAAnB,EAA0B,OAAO,IAAP;;AAE1B8zB,0BAAuB5yC,IAAvB,CAA6Boc,KAA7B;AACAw2B,0BAAuBhoC,YAAvB,CAAqCkR,OAAOvI,WAA5C;;AAEA,OAAIkP,WAAWwwB,UAAUjG,GAAV,CAAcD,MAAd,CAAqB1qC,UAArB,CAAiCuwC,sBAAjC,CAAf;;AAEA,OAAKnwB,WAAWwwB,UAAUplC,IAArB,IAA6B4U,WAAWwwB,UAAUnlC,GAAvD,EAA6D,OAAO,IAAP;;AAE7D,UAAO;AACN2U,cAAUA,QADJ;AAENrG,WAAOw2B,uBAAuB9yC,KAAvB,EAFD;AAGNgc,YAAQA;AAHF,IAAP;AAMA;;AAED,WAASo3B,+BAAT,CAA0Cp3B,MAA1C,EAAkDm3B,SAAlD,EAA6DjG,GAA7D,EAAkEpgC,QAAlE,EAA4EmM,EAA5E,EAAgFtY,CAAhF,EAAmFC,CAAnF,EAAsF+C,CAAtF,EAA0F;;AAEzF+6B,MAAGr7B,mBAAH,CAAwByJ,QAAxB,EAAkCnM,CAAlC;AACAg+B,MAAGt7B,mBAAH,CAAwByJ,QAAxB,EAAkClM,CAAlC;AACAg+B,MAAGv7B,mBAAH,CAAwByJ,QAAxB,EAAkCnJ,CAAlC;;AAEA,OAAI0vC,eAAeH,kBAAmBl3B,MAAnB,EAA2BA,OAAOoe,QAAlC,EAA4C+Y,SAA5C,EAAuDjG,GAAvD,EAA4DxO,EAA5D,EAAgEC,EAAhE,EAAoEC,EAApE,EAAwEiU,iBAAxE,CAAnB;;AAEA,OAAKQ,YAAL,EAAoB;;AAEnB,QAAKp6B,EAAL,EAAU;;AAETw5B,SAAIpvC,mBAAJ,CAAyB4V,EAAzB,EAA6BtY,CAA7B;AACA+xC,SAAIrvC,mBAAJ,CAAyB4V,EAAzB,EAA6BrY,CAA7B;AACA+xC,SAAItvC,mBAAJ,CAAyB4V,EAAzB,EAA6BtV,CAA7B;;AAEA0vC,kBAAap6B,EAAb,GAAkB85B,eAAgBF,iBAAhB,EAAmCnU,EAAnC,EAAuCC,EAAvC,EAA2CC,EAA3C,EAA+C6T,GAA/C,EAAoDC,GAApD,EAAyDC,GAAzD,CAAlB;AAEA;;AAED,QAAItV,OAAO,IAAIvB,KAAJ,CAAWn7B,CAAX,EAAcC,CAAd,EAAiB+C,CAAjB,CAAX;AACA4sC,aAASC,SAAT,CAAoB9R,EAApB,EAAwBC,EAAxB,EAA4BC,EAA5B,EAAgCvB,KAAK9oB,MAArC;;AAEA8+B,iBAAahW,IAAb,GAAoBA,IAApB;AACAgW,iBAAaC,SAAb,GAAyB3yC,CAAzB;AAEA;;AAED,UAAO0yC,YAAP;AAEA;;AAED,SAAO,SAAS/Z,OAAT,CAAkB6Z,SAAlB,EAA6BI,UAA7B,EAA0C;;AAEhD,OAAI32B,WAAW,KAAKA,QAApB;AACA,OAAIwd,WAAW,KAAKA,QAApB;AACA,OAAI3mB,cAAc,KAAKA,WAAvB;;AAEA,OAAK2mB,aAAavpC,SAAlB,EAA8B;;AAE9B;;AAEA,OAAK+rB,SAAS0F,cAAT,KAA4B,IAAjC,EAAwC1F,SAAS2F,qBAAT;;AAExC/E,UAAOtd,IAAP,CAAa0c,SAAS0F,cAAtB;AACA9E,UAAO1S,YAAP,CAAqB2I,WAArB;;AAEA,OAAK0/B,UAAUjG,GAAV,CAAc5vB,gBAAd,CAAgCE,MAAhC,MAA6C,KAAlD,EAA0D;;AAE1D;;AAEA60B,iBAAcjnC,UAAd,CAA0BqI,WAA1B;AACAy5B,OAAIhtC,IAAJ,CAAUizC,UAAUjG,GAApB,EAA0BpiC,YAA1B,CAAwCunC,aAAxC;;AAEA;;AAEA,OAAKz1B,SAASggB,WAAT,KAAyB,IAA9B,EAAqC;;AAEpC,QAAKsQ,IAAI7vB,aAAJ,CAAmBT,SAASggB,WAA5B,MAA8C,KAAnD,EAA2D;AAE3D;;AAED,OAAIyW,YAAJ;;AAEA,OAAKz2B,SAASG,gBAAd,EAAiC;;AAEhC,QAAIpc,CAAJ,EAAOC,CAAP,EAAU+C,CAAV;AACA,QAAI1R,QAAQ2qB,SAAS3qB,KAArB;AACA,QAAI6a,WAAW8P,SAASI,UAAT,CAAoBlQ,QAAnC;AACA,QAAImM,KAAK2D,SAASI,UAAT,CAAoB/D,EAA7B;AACA,QAAIzlB,CAAJ,EAAOC,CAAP;;AAEA,QAAKxB,UAAU,IAAf,EAAsB;;AAErB;;AAEA,UAAMuB,IAAI,CAAJ,EAAOC,IAAIxB,MAAM2Y,KAAvB,EAA8BpX,IAAIC,CAAlC,EAAqCD,KAAK,CAA1C,EAA8C;;AAE7CmN,UAAI1O,MAAMsR,IAAN,CAAY/P,CAAZ,CAAJ;AACAoN,UAAI3O,MAAMsR,IAAN,CAAY/P,IAAI,CAAhB,CAAJ;AACAmQ,UAAI1R,MAAMsR,IAAN,CAAY/P,IAAI,CAAhB,CAAJ;;AAEA6/C,qBAAeD,gCAAiC,IAAjC,EAAuCD,SAAvC,EAAkDjG,GAAlD,EAAuDpgC,QAAvD,EAAiEmM,EAAjE,EAAqEtY,CAArE,EAAwEC,CAAxE,EAA2E+C,CAA3E,CAAf;;AAEA,UAAK0vC,YAAL,EAAoB;;AAEnBA,oBAAaC,SAAb,GAAyBxiD,KAAKK,KAAL,CAAYqC,IAAI,CAAhB,CAAzB,CAFmB,CAE2B;AAC9C+/C,kBAAWxgD,IAAX,CAAiBsgD,YAAjB;AAEA;AAED;AAED,KArBD,MAqBO,IAAKvmC,aAAajc,SAAlB,EAA8B;;AAEpC;;AAEA,UAAM2C,IAAI,CAAJ,EAAOC,IAAIqZ,SAASlC,KAA1B,EAAiCpX,IAAIC,CAArC,EAAwCD,KAAK,CAA7C,EAAiD;;AAEhDmN,UAAInN,CAAJ;AACAoN,UAAIpN,IAAI,CAAR;AACAmQ,UAAInQ,IAAI,CAAR;;AAEA6/C,qBAAeD,gCAAiC,IAAjC,EAAuCD,SAAvC,EAAkDjG,GAAlD,EAAuDpgC,QAAvD,EAAiEmM,EAAjE,EAAqEtY,CAArE,EAAwEC,CAAxE,EAA2E+C,CAA3E,CAAf;;AAEA,UAAK0vC,YAAL,EAAoBE,WAAWxgD,IAAX,CAAiBsgD,YAAjB;AAEpB;AAED;AAED,IA/CD,MA+CO,IAAKz2B,SAASC,UAAd,EAA2B;;AAEjC,QAAI22B,GAAJ,EAASC,GAAT,EAAcC,GAAd;AACA,QAAIC,kBAAkBppB,MAAMC,OAAN,CAAe4P,QAAf,CAAtB;;AAEA,QAAItd,WAAWF,SAASE,QAAxB;AACA,QAAIuf,QAAQzf,SAASyf,KAArB;AACA,QAAIwB,GAAJ;;AAEA,QAAIvB,gBAAgB1f,SAAS0f,aAAT,CAAwB,CAAxB,CAApB;AACA,QAAKA,cAAcnqC,MAAd,GAAuB,CAA5B,EAAgC0rC,MAAMvB,aAAN;;AAEhC,SAAM,IAAIj2B,IAAI,CAAR,EAAWo4B,KAAKpC,MAAMlqC,MAA5B,EAAoCkU,IAAIo4B,EAAxC,EAA4Cp4B,GAA5C,EAAmD;;AAElD,SAAIg3B,OAAOhB,MAAOh2B,CAAP,CAAX;AACA,SAAIutC,eAAeD,kBAAkBvZ,SAAUiD,KAAKtB,aAAf,CAAlB,GAAmD3B,QAAtE;;AAEA,SAAKwZ,iBAAiB/iD,SAAtB,EAAkC;;AAElC2iD,WAAM12B,SAAUugB,KAAK18B,CAAf,CAAN;AACA8yC,WAAM32B,SAAUugB,KAAKz8B,CAAf,CAAN;AACA8yC,WAAM52B,SAAUugB,KAAK15B,CAAf,CAAN;;AAEA,SAAKiwC,aAAarX,YAAb,KAA8B,IAAnC,EAA0C;;AAEzC,UAAIA,eAAe3f,SAAS2f,YAA5B;AACA,UAAIsX,kBAAkB,KAAK7B,qBAA3B;;AAEAtT,SAAGn/B,GAAH,CAAQ,CAAR,EAAW,CAAX,EAAc,CAAd;AACAo/B,SAAGp/B,GAAH,CAAQ,CAAR,EAAW,CAAX,EAAc,CAAd;AACAq/B,SAAGr/B,GAAH,CAAQ,CAAR,EAAW,CAAX,EAAc,CAAd;;AAEA,WAAM,IAAIrB,IAAI,CAAR,EAAW41C,KAAKvX,aAAapqC,MAAnC,EAA2C+L,IAAI41C,EAA/C,EAAmD51C,GAAnD,EAA0D;;AAEzD,WAAI61C,YAAYF,gBAAiB31C,CAAjB,CAAhB;;AAEA,WAAK61C,cAAc,CAAnB,EAAuB;;AAEvB,WAAIC,UAAUzX,aAAcr+B,CAAd,EAAkB4e,QAAhC;;AAEA4hB,UAAG79B,eAAH,CAAoByxC,MAAMvxC,UAAN,CAAkBizC,QAAS3W,KAAK18B,CAAd,CAAlB,EAAqC6yC,GAArC,CAApB,EAAgEO,SAAhE;AACApV,UAAG99B,eAAH,CAAoB0xC,MAAMxxC,UAAN,CAAkBizC,QAAS3W,KAAKz8B,CAAd,CAAlB,EAAqC6yC,GAArC,CAApB,EAAgEM,SAAhE;AACAnV,UAAG/9B,eAAH,CAAoB2xC,MAAMzxC,UAAN,CAAkBizC,QAAS3W,KAAK15B,CAAd,CAAlB,EAAqC+vC,GAArC,CAApB,EAAgEK,SAAhE;AAEA;;AAEDrV,SAAGt+B,GAAH,CAAQozC,GAAR;AACA7U,SAAGv+B,GAAH,CAAQqzC,GAAR;AACA7U,SAAGx+B,GAAH,CAAQszC,GAAR;;AAEAF,YAAM9U,EAAN;AACA+U,YAAM9U,EAAN;AACA+U,YAAM9U,EAAN;AAEA;;AAEDyU,oBAAeH,kBAAmB,IAAnB,EAAyBU,YAAzB,EAAuCT,SAAvC,EAAkDjG,GAAlD,EAAuDsG,GAAvD,EAA4DC,GAA5D,EAAiEC,GAAjE,EAAsEb,iBAAtE,CAAf;;AAEA,SAAKQ,YAAL,EAAoB;;AAEnB,UAAKxV,OAAOA,IAAKx3B,CAAL,CAAZ,EAAuB;;AAEtB,WAAI4tC,QAAQpW,IAAKx3B,CAAL,CAAZ;AACAosC,WAAIvyC,IAAJ,CAAU+zC,MAAO,CAAP,CAAV;AACAvB,WAAIxyC,IAAJ,CAAU+zC,MAAO,CAAP,CAAV;AACAtB,WAAIzyC,IAAJ,CAAU+zC,MAAO,CAAP,CAAV;;AAEAZ,oBAAap6B,EAAb,GAAkB85B,eAAgBF,iBAAhB,EAAmCW,GAAnC,EAAwCC,GAAxC,EAA6CC,GAA7C,EAAkDjB,GAAlD,EAAuDC,GAAvD,EAA4DC,GAA5D,CAAlB;AAEA;;AAEDU,mBAAahW,IAAb,GAAoBA,IAApB;AACAgW,mBAAaC,SAAb,GAAyBjtC,CAAzB;AACAktC,iBAAWxgD,IAAX,CAAiBsgD,YAAjB;AAEA;AAED;AAED;AAED,GAhKD;AAkKA,EAtQU,EA1FyD;;AAkWpErzC,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,CAAsB,KAAK2c,QAA3B,EAAqC,KAAKwd,QAA1C,EAAqDl6B,IAArD,CAA2D,IAA3D,CAAP;AAEA;;AAtWmE,CAApD,CAAjB;;AA0WA;;;;AAIA,SAASg0C,eAAT,CAA0BC,QAA1B,EAAoCC,KAApC,EAA2C1a,UAA3C,EAAuDoR,kBAAvD,EAA4E;;AAE3E,KAAIuJ,aAAa,IAAI3pB,KAAJ,CAAW,QAAX,CAAjB;AACA,KAAI4pB,aAAa,CAAjB;;AAEA,KAAIC,WAAJ,EAAiBC,SAAjB;AACA,KAAIC,OAAJ;;AAEA,UAASC,MAAT,CAAiBC,UAAjB,EAA6BC,KAA7B,EAAoCrhC,MAApC,EAA4CshC,UAA5C,EAAyD;;AAExD,MAAIC,aAAaF,MAAME,UAAvB;;AAEA,MAAKA,eAAe,IAApB,EAA2B;;AAE1BC,YAAUV,UAAV,EAAsBC,UAAtB;AAEA,GAJD,MAIO,IAAKQ,cAAcA,WAAWxqB,OAA9B,EAAwC;;AAE9CyqB,YAAUD,UAAV,EAAsB,CAAtB;AACAD,gBAAa,IAAb;AAEA;;AAED,MAAKV,SAASa,SAAT,IAAsBH,UAA3B,EAAwC;;AAEvCV,YAASc,KAAT,CAAgBd,SAASe,cAAzB,EAAyCf,SAASgB,cAAlD,EAAkEhB,SAASiB,gBAA3E;AAEA;;AAED,MAAKN,cAAcA,WAAWO,aAA9B,EAA8C;;AAE7C,OAAKZ,YAAY5jD,SAAjB,EAA6B;;AAE5B4jD,cAAU,IAAI7C,IAAJ,CACT,IAAI9J,iBAAJ,CAAuB,CAAvB,EAA0B,CAA1B,EAA6B,CAA7B,CADS,EAET,IAAIsE,cAAJ,CAAoB;AACnBpiB,eAAUgH,UAAUiB,IAAV,CAAejI,QADN;AAEnBkH,mBAAcF,UAAUiB,IAAV,CAAef,YAFV;AAGnBC,qBAAgBH,UAAUiB,IAAV,CAAed,cAHZ;AAInBqY,WAAM/0C,QAJa;AAKnBy1C,gBAAW,IALQ;AAMnBC,iBAAY,KANO;AAOnBjb,UAAK;AAPc,KAApB,CAFS,CAAV;;AAaAulB,YAAQ73B,QAAR,CAAiBopB,eAAjB,CAAkC,QAAlC;AACAyO,YAAQ73B,QAAR,CAAiBopB,eAAjB,CAAkC,IAAlC;;AAEAyO,YAAQhd,cAAR,GAAyB,UAAW0c,QAAX,EAAqBS,KAArB,EAA4BrhC,MAA5B,EAAqC;;AAE7D,UAAKE,WAAL,CAAiBrO,YAAjB,CAA+BmO,OAAOE,WAAtC;AAEA,KAJD;;AAMAimB,eAAW5pB,MAAX,CAAmB2kC,QAAQ73B,QAA3B;AAEA;;AAED63B,WAAQra,QAAR,CAAiBpQ,QAAjB,CAA0BkI,KAA1B,CAAgCjhC,KAAhC,GAAwC6jD,UAAxC;;AAEAH,cAAW5hD,IAAX,CAAiB0hD,OAAjB,EAA0BA,QAAQ73B,QAAlC,EAA4C63B,QAAQra,QAApD,EAA8D,CAA9D,EAAiE,IAAjE;AAEA,GAlCD,MAkCO,IAAK0a,cAAcA,WAAWv9B,SAA9B,EAA0C;;AAEhD,OAAKg9B,gBAAgB1jD,SAArB,EAAiC;;AAEhC0jD,kBAAc,IAAIzZ,kBAAJ,CAAwB,CAAE,CAA1B,EAA6B,CAA7B,EAAgC,CAAhC,EAAmC,CAAE,CAArC,EAAwC,CAAxC,EAA2C,CAA3C,CAAd;;AAEA0Z,gBAAY,IAAI5C,IAAJ,CACX,IAAI5I,mBAAJ,CAAyB,CAAzB,EAA4B,CAA5B,CADW,EAEX,IAAIiD,iBAAJ,CAAuB,EAAE/B,WAAW,KAAb,EAAoBC,YAAY,KAAhC,EAAuCjb,KAAK,KAA5C,EAAvB,CAFW,CAAZ;;AAKAwK,eAAW5pB,MAAX,CAAmB0kC,UAAU53B,QAA7B;AAEA;;AAED43B,aAAUpa,QAAV,CAAmBrN,GAAnB,GAAyB+nB,UAAzB;;AAEA;;AAEAX,YAASmB,kBAAT,CAA6Bf,WAA7B,EAA0C,IAA1C,EAAgDC,UAAU53B,QAA1D,EAAoE43B,UAAUpa,QAA9E,EAAwFoa,SAAxF,EAAmG,IAAnG;AAEA;AAED;;AAED,UAASO,QAAT,CAAmBzpB,KAAnB,EAA0BzoB,KAA1B,EAAkC;;AAEjCuxC,QAAMrhB,OAAN,CAAczH,KAAd,CAAoBypB,QAApB,CAA8BzpB,MAAMpa,CAApC,EAAuCoa,MAAMjW,CAA7C,EAAgDiW,MAAM1qB,CAAtD,EAAyDiC,KAAzD,EAAgEioC,kBAAhE;AAEA;;AAED,QAAO;;AAENyK,iBAAe,YAAY;;AAE1B,UAAOlB,UAAP;AAEA,GANK;AAONmB,iBAAe,UAAWlqB,KAAX,EAAkBzoB,KAAlB,EAA0B;;AAExCwxC,cAAW90C,GAAX,CAAgB+rB,KAAhB;AACAgpB,gBAAazxC,UAAUhS,SAAV,GAAsBgS,KAAtB,GAA8B,CAA3C;AACAkyC,YAAUV,UAAV,EAAsBC,UAAtB;AAEA,GAbK;AAcNmB,iBAAe,YAAY;;AAE1B,UAAOnB,UAAP;AAEA,GAlBK;AAmBNoB,iBAAe,UAAW7yC,KAAX,EAAmB;;AAEjCyxC,gBAAazxC,KAAb;AACAkyC,YAAUV,UAAV,EAAsBC,UAAtB;AAEA,GAxBK;AAyBNI,UAAQA;;AAzBF,EAAP;AA6BA;;AAED;;;;AAIA,SAASiB,mBAAT,CAA8B7iB,EAA9B,EAAkCyZ,UAAlC,EAA8CqJ,IAA9C,EAAqD;;AAEpD,KAAIC,IAAJ;;AAEA,UAASC,OAAT,CAAkB7kD,KAAlB,EAA0B;;AAEzB4kD,SAAO5kD,KAAP;AAEA;;AAED,UAASyjD,MAAT,CAAiBt0B,KAAjB,EAAwBxV,KAAxB,EAAgC;;AAE/BkoB,KAAGijB,UAAH,CAAeF,IAAf,EAAqBz1B,KAArB,EAA4BxV,KAA5B;;AAEAgrC,OAAK9lC,MAAL,CAAalF,KAAb,EAAoBirC,IAApB;AAEA;;AAED,UAASG,eAAT,CAA0Bp5B,QAA1B,EAAoCwD,KAApC,EAA2CxV,KAA3C,EAAmD;;AAElD,MAAIqrC,YAAY1J,WAAW76C,GAAX,CAAgB,wBAAhB,CAAhB;;AAEA,MAAKukD,cAAc,IAAnB,EAA0B;;AAEzB31C,WAAQyD,KAAR,CAAe,gIAAf;AACA;AAEA;;AAED,MAAI+I,WAAW8P,SAASI,UAAT,CAAoBlQ,QAAnC;;AAEA,MAAKA,SAASkoB,4BAAd,EAA6C;;AAE5CpqB,WAAQkC,SAAS4N,IAAT,CAAc9P,KAAtB;;AAEAqrC,aAAUC,wBAAV,CAAoCL,IAApC,EAA0C,CAA1C,EAA6CjrC,KAA7C,EAAoDgS,SAASu5B,iBAA7D;AAEA,GAND,MAMO;;AAENF,aAAUC,wBAAV,CAAoCL,IAApC,EAA0Cz1B,KAA1C,EAAiDxV,KAAjD,EAAwDgS,SAASu5B,iBAAjE;AAEA;;AAEDP,OAAK9lC,MAAL,CAAalF,KAAb,EAAoBirC,IAApB,EAA0Bj5B,SAASu5B,iBAAnC;AAEA;;AAED;;AAEA,MAAKL,OAAL,GAAeA,OAAf;AACA,MAAKpB,MAAL,GAAcA,MAAd;AACA,MAAKsB,eAAL,GAAuBA,eAAvB;AAEA;;AAED;;;;AAIA,SAASI,iBAAT,CAA4BtjB,EAA5B,EAAgCyZ,UAAhC,EAA4CrS,UAA5C,EAAyD;;AAExD,KAAImc,aAAJ;;AAEA,UAASC,gBAAT,GAA4B;;AAE3B,MAAKD,kBAAkBxlD,SAAvB,EAAmC,OAAOwlD,aAAP;;AAEnC,MAAIJ,YAAY1J,WAAW76C,GAAX,CAAgB,gCAAhB,CAAhB;;AAEA,MAAKukD,cAAc,IAAnB,EAA0B;;AAEzBI,mBAAgBvjB,GAAG1V,YAAH,CAAiB64B,UAAUM,8BAA3B,CAAhB;AAEA,GAJD,MAIO;;AAENF,mBAAgB,CAAhB;AAEA;;AAED,SAAOA,aAAP;AAEA;;AAED,UAASG,eAAT,CAA0BzV,SAA1B,EAAsC;;AAErC,MAAKA,cAAc,OAAnB,EAA6B;;AAE5B,OAAKjO,GAAG2jB,wBAAH,CAA6B3jB,GAAG4jB,aAAhC,EAA+C5jB,GAAG6jB,UAAlD,EAA+D5V,SAA/D,GAA2E,CAA3E,IACAjO,GAAG2jB,wBAAH,CAA6B3jB,GAAG8jB,eAAhC,EAAiD9jB,GAAG6jB,UAApD,EAAiE5V,SAAjE,GAA6E,CADlF,EACsF;;AAErF,WAAO,OAAP;AAEA;;AAEDA,eAAY,SAAZ;AAEA;;AAED,MAAKA,cAAc,SAAnB,EAA+B;;AAE9B,OAAKjO,GAAG2jB,wBAAH,CAA6B3jB,GAAG4jB,aAAhC,EAA+C5jB,GAAG+jB,YAAlD,EAAiE9V,SAAjE,GAA6E,CAA7E,IACAjO,GAAG2jB,wBAAH,CAA6B3jB,GAAG8jB,eAAhC,EAAiD9jB,GAAG+jB,YAApD,EAAmE9V,SAAnE,GAA+E,CADpF,EACwF;;AAEvF,WAAO,SAAP;AAEA;AAED;;AAED,SAAO,MAAP;AAEA;;AAED,KAAIA,YAAY7G,WAAW6G,SAAX,KAAyBlwC,SAAzB,GAAqCqpC,WAAW6G,SAAhD,GAA4D,OAA5E;AACA,KAAI+V,eAAeN,gBAAiBzV,SAAjB,CAAnB;;AAEA,KAAK+V,iBAAiB/V,SAAtB,EAAkC;;AAEjCzgC,UAAQC,IAAR,CAAc,sBAAd,EAAsCwgC,SAAtC,EAAiD,sBAAjD,EAAyE+V,YAAzE,EAAuF,UAAvF;AACA/V,cAAY+V,YAAZ;AAEA;;AAED,KAAIC,yBAAyB7c,WAAW6c,sBAAX,KAAsC,IAAnE;;AAEA,KAAIC,cAAclkB,GAAG1V,YAAH,CAAiB0V,GAAGmkB,uBAApB,CAAlB;AACA,KAAIC,oBAAoBpkB,GAAG1V,YAAH,CAAiB0V,GAAGqkB,8BAApB,CAAxB;AACA,KAAIC,iBAAiBtkB,GAAG1V,YAAH,CAAiB0V,GAAGukB,gBAApB,CAArB;AACA,KAAIC,iBAAiBxkB,GAAG1V,YAAH,CAAiB0V,GAAGykB,yBAApB,CAArB;;AAEA,KAAIC,gBAAgB1kB,GAAG1V,YAAH,CAAiB0V,GAAG2kB,kBAApB,CAApB;AACA,KAAIC,oBAAoB5kB,GAAG1V,YAAH,CAAiB0V,GAAG6kB,0BAApB,CAAxB;AACA,KAAIC,cAAc9kB,GAAG1V,YAAH,CAAiB0V,GAAG+kB,mBAApB,CAAlB;AACA,KAAIC,sBAAsBhlB,GAAG1V,YAAH,CAAiB0V,GAAGilB,4BAApB,CAA1B;;AAEA,KAAIC,iBAAiBd,oBAAoB,CAAzC;AACA,KAAIe,wBAAwB,CAAC,CAAE1L,WAAW76C,GAAX,CAAgB,mBAAhB,CAA/B;AACA,KAAIwmD,sBAAsBF,kBAAkBC,qBAA5C;;AAEA,QAAO;;AAEN3B,oBAAkBA,gBAFZ;AAGNE,mBAAiBA,eAHX;;AAKNzV,aAAWA,SALL;AAMNgW,0BAAwBA,sBANlB;;AAQNC,eAAaA,WARP;AASNE,qBAAmBA,iBATb;AAUNE,kBAAgBA,cAVV;AAWNE,kBAAgBA,cAXV;;AAaNE,iBAAeA,aAbT;AAcNE,qBAAmBA,iBAdb;AAeNE,eAAaA,WAfP;AAgBNE,uBAAqBA,mBAhBf;;AAkBNE,kBAAgBA,cAlBV;AAmBNC,yBAAuBA,qBAnBjB;AAoBNC,uBAAqBA;;AApBf,EAAP;AAwBA;;AAED;;;;AAIA,SAASC,aAAT,GAAyB;;AAExB,KAAI17B,QAAQ,IAAZ;AAAA,KAEC27B,cAAc,IAFf;AAAA,KAGCC,kBAAkB,CAHnB;AAAA,KAICC,uBAAuB,KAJxB;AAAA,KAKCC,mBAAmB,KALpB;AAAA,KAOC56B,QAAQ,IAAI6B,KAAJ,EAPT;AAAA,KAQCg5B,mBAAmB,IAAItjC,OAAJ,EARpB;AAAA,KAUCujC,UAAU,EAAExnD,OAAO,IAAT,EAAem1C,aAAa,KAA5B,EAVX;;AAYA,MAAKqS,OAAL,GAAeA,OAAf;AACA,MAAKC,SAAL,GAAiB,CAAjB;AACA,MAAKC,eAAL,GAAuB,CAAvB;;AAEA,MAAKC,IAAL,GAAY,UAAW13B,MAAX,EAAmB23B,mBAAnB,EAAwCtlC,MAAxC,EAAiD;;AAE5D,MAAI+nB,UACHpa,OAAO/uB,MAAP,KAAkB,CAAlB,IACA0mD,mBADA;AAEA;AACA;AACAR,sBAAoB,CAJpB,IAKAC,oBAND;;AAQAA,yBAAuBO,mBAAvB;;AAEAT,gBAAcU,cAAe53B,MAAf,EAAuB3N,MAAvB,EAA+B,CAA/B,CAAd;AACA8kC,oBAAkBn3B,OAAO/uB,MAAzB;;AAEA,SAAOmpC,OAAP;AAEA,EAjBD;;AAmBA,MAAKyd,YAAL,GAAoB,YAAY;;AAE/BR,qBAAmB,IAAnB;AACAO,gBAAe,IAAf;AAEA,EALD;;AAOA,MAAKE,UAAL,GAAkB,YAAY;;AAE7BT,qBAAmB,KAAnB;AACAU;AAEA,EALD;;AAOA,MAAKC,QAAL,GAAgB,UAAWh4B,MAAX,EAAmBmpB,gBAAnB,EAAqCC,WAArC,EAAkD/2B,MAAlD,EAA0DgnB,KAA1D,EAAiE4e,SAAjE,EAA6E;;AAE5F,MAAK,CAAEb,oBAAF,IAA0Bp3B,WAAW,IAArC,IAA6CA,OAAO/uB,MAAP,KAAkB,CAA/D,IAAoEomD,oBAAoB,CAAEjO,WAA/F,EAA6G;;AAE5G;;AAEA,OAAKiO,gBAAL,EAAwB;;AAEvB;;AAEAO,kBAAe,IAAf;AAEA,IAND,MAMO;;AAENG;AAEA;AAED,GAhBD,MAgBO;;AAEN,OAAIG,UAAUb,mBAAmB,CAAnB,GAAuBF,eAArC;AAAA,OACCgB,UAAUD,UAAU,CADrB;AAAA,OAGCE,WAAW/e,MAAMgf,aAAN,IAAuB,IAHnC;;AAKAd,WAAQxnD,KAAR,GAAgBqoD,QAAhB,CAPM,CAOoB;;AAE1BA,cAAWR,cAAe53B,MAAf,EAAuB3N,MAAvB,EAA+B8lC,OAA/B,EAAwCF,SAAxC,CAAX;;AAEA,QAAM,IAAI3lD,IAAI,CAAd,EAAiBA,MAAM6lD,OAAvB,EAAgC,EAAG7lD,CAAnC,EAAuC;;AAEtC8lD,aAAU9lD,CAAV,IAAgB4kD,YAAa5kD,CAAb,CAAhB;AAEA;;AAED+mC,SAAMgf,aAAN,GAAsBD,QAAtB;AACA,QAAKX,eAAL,GAAuBtO,mBAAmB,KAAKqO,SAAxB,GAAoC,CAA3D;AACA,QAAKA,SAAL,IAAkBU,OAAlB;AAEA;AAGD,EA1CD;;AA4CA,UAASH,gBAAT,GAA4B;;AAE3B,MAAKR,QAAQxnD,KAAR,KAAkBmnD,WAAvB,EAAqC;;AAEpCK,WAAQxnD,KAAR,GAAgBmnD,WAAhB;AACAK,WAAQrS,WAAR,GAAsBiS,kBAAkB,CAAxC;AAEA;;AAED57B,QAAMi8B,SAAN,GAAkBL,eAAlB;AACA57B,QAAMk8B,eAAN,GAAwB,CAAxB;AAEA;;AAED,UAASG,aAAT,CAAwB53B,MAAxB,EAAgC3N,MAAhC,EAAwC5E,SAAxC,EAAmD6qC,aAAnD,EAAmE;;AAElE,MAAIC,UAAUv4B,WAAW,IAAX,GAAkBA,OAAO/uB,MAAzB,GAAkC,CAAhD;AAAA,MACCmnD,WAAW,IADZ;;AAGA,MAAKG,YAAY,CAAjB,EAAqB;;AAEpBH,cAAWb,QAAQxnD,KAAnB;;AAEA,OAAKuoD,kBAAkB,IAAlB,IAA0BF,aAAa,IAA5C,EAAmD;;AAElD,QAAII,WAAW/qC,YAAY8qC,UAAU,CAArC;AAAA,QACCE,aAAapmC,OAAOsnB,kBADrB;;AAGA2d,qBAAiBljC,eAAjB,CAAkCqkC,UAAlC;;AAEA,QAAKL,aAAa,IAAb,IAAqBA,SAASnnD,MAAT,GAAkBunD,QAA5C,EAAuD;;AAEtDJ,gBAAW,IAAI1lB,YAAJ,CAAkB8lB,QAAlB,CAAX;AAEA;;AAED,SAAM,IAAIlmD,IAAI,CAAR,EAAWomD,KAAKjrC,SAAtB,EAAiCnb,MAAMimD,OAAvC,EAAgD,EAAGjmD,CAAH,EAAMomD,MAAM,CAA5D,EAAgE;;AAE/Dj8B,WAAMzd,IAAN,CAAYghB,OAAQ1tB,CAAR,CAAZ,EAA0BsX,YAA1B,CAAwC6uC,UAAxC,EAAoDnB,gBAApD;;AAEA76B,WAAMpJ,MAAN,CAAanR,OAAb,CAAsBk2C,QAAtB,EAAgCM,EAAhC;AACAN,cAAUM,KAAK,CAAf,IAAqBj8B,MAAMC,QAA3B;AAEA;AAED;;AAED66B,WAAQxnD,KAAR,GAAgBqoD,QAAhB;AACAb,WAAQrS,WAAR,GAAsB,IAAtB;AAEA;;AAED3pB,QAAMi8B,SAAN,GAAkBe,OAAlB;;AAEA,SAAOH,QAAP;AAEA;AAED;;AAED;;;;AAIA,SAASO,eAAT,CAA0B/mB,EAA1B,EAA+B;;AAE9B,KAAIyZ,aAAa,EAAjB;;AAEA,QAAO;;AAEN76C,OAAK,UAAWglB,IAAX,EAAkB;;AAEtB,OAAK61B,WAAY71B,IAAZ,MAAuB7lB,SAA5B,EAAwC;;AAEvC,WAAO07C,WAAY71B,IAAZ,CAAP;AAEA;;AAED,OAAIu/B,SAAJ;;AAEA,WAASv/B,IAAT;;AAEC,SAAK,qBAAL;AACCu/B,iBAAYnjB,GAAGgnB,YAAH,CAAiB,qBAAjB,KAA4ChnB,GAAGgnB,YAAH,CAAiB,yBAAjB,CAA5C,IAA4FhnB,GAAGgnB,YAAH,CAAiB,4BAAjB,CAAxG;AACA;;AAED,SAAK,gCAAL;AACC7D,iBAAYnjB,GAAGgnB,YAAH,CAAiB,gCAAjB,KAAuDhnB,GAAGgnB,YAAH,CAAiB,oCAAjB,CAAvD,IAAkHhnB,GAAGgnB,YAAH,CAAiB,uCAAjB,CAA9H;AACA;;AAED,SAAK,+BAAL;AACC7D,iBAAYnjB,GAAGgnB,YAAH,CAAiB,+BAAjB,KAAsDhnB,GAAGgnB,YAAH,CAAiB,mCAAjB,CAAtD,IAAgHhnB,GAAGgnB,YAAH,CAAiB,sCAAjB,CAA5H;AACA;;AAED,SAAK,gCAAL;AACC7D,iBAAYnjB,GAAGgnB,YAAH,CAAiB,gCAAjB,KAAuDhnB,GAAGgnB,YAAH,CAAiB,uCAAjB,CAAnE;AACA;;AAED;AACC7D,iBAAYnjB,GAAGgnB,YAAH,CAAiBpjC,IAAjB,CAAZ;;AAnBF;;AAuBA,OAAKu/B,cAAc,IAAnB,EAA0B;;AAEzB31C,YAAQC,IAAR,CAAc,0BAA0BmW,IAA1B,GAAiC,2BAA/C;AAEA;;AAED61B,cAAY71B,IAAZ,IAAqBu/B,SAArB;;AAEA,UAAOA,SAAP;AAEA;;AA7CK,EAAP;AAiDA;;AAED;;;;AAIA,SAAS8D,eAAT,CAA0BjnB,EAA1B,EAA8B9V,UAA9B,EAA0C44B,IAA1C,EAAiD;;AAEhD,KAAIlc,aAAa,EAAjB;AACA,KAAIsgB,sBAAsB,EAA1B;;AAEA,UAASC,iBAAT,CAA4B5mD,KAA5B,EAAoC;;AAEnC,MAAIupB,WAAWvpB,MAAMvB,MAArB;AACA,MAAIooD,iBAAiBxgB,WAAY9c,SAASkc,EAArB,CAArB;;AAEA,MAAKohB,eAAejoD,KAAf,KAAyB,IAA9B,EAAqC;;AAEpC+qB,cAAWiY,MAAX,CAAmBilB,eAAejoD,KAAlC;AAEA;;AAED,OAAM,IAAIykB,IAAV,IAAkBwjC,eAAel9B,UAAjC,EAA8C;;AAE7CA,cAAWiY,MAAX,CAAmBilB,eAAel9B,UAAf,CAA2BtG,IAA3B,CAAnB;AAEA;;AAEDkG,WAAS3pB,mBAAT,CAA8B,SAA9B,EAAyCgnD,iBAAzC;;AAEA,SAAOvgB,WAAY9c,SAASkc,EAArB,CAAP;;AAEA;;AAEA,MAAIx1B,YAAY02C,oBAAqBp9B,SAASkc,EAA9B,CAAhB;;AAEA,MAAKx1B,SAAL,EAAiB;;AAEhB0Z,cAAWiY,MAAX,CAAmB3xB,SAAnB;AACA,UAAO02C,oBAAqBp9B,SAASkc,EAA9B,CAAP;AAEA;;AAEDx1B,cAAY02C,oBAAqBE,eAAephB,EAApC,CAAZ;;AAEA,MAAKx1B,SAAL,EAAiB;;AAEhB0Z,cAAWiY,MAAX,CAAmB3xB,SAAnB;AACA,UAAO02C,oBAAqBE,eAAephB,EAApC,CAAP;AAEA;;AAED;;AAEA8c,OAAKuE,MAAL,CAAYzgB,UAAZ;AAEA;;AAED,UAAShoC,GAAT,CAAcsqB,MAAd,EAAsBY,QAAtB,EAAiC;;AAEhC,MAAIs9B,iBAAiBxgB,WAAY9c,SAASkc,EAArB,CAArB;;AAEA,MAAKohB,cAAL,EAAsB,OAAOA,cAAP;;AAEtBt9B,WAASnqB,gBAAT,CAA2B,SAA3B,EAAsCwnD,iBAAtC;;AAEA,MAAKr9B,SAASG,gBAAd,EAAiC;;AAEhCm9B,oBAAiBt9B,QAAjB;AAEA,GAJD,MAIO,IAAKA,SAASC,UAAd,EAA2B;;AAEjC,OAAKD,SAASw9B,eAAT,KAA6BvpD,SAAlC,EAA8C;;AAE7C+rB,aAASw9B,eAAT,GAA2B,IAAI3U,cAAJ,GAAqB1pB,aAArB,CAAoCC,MAApC,CAA3B;AAEA;;AAEDk+B,oBAAiBt9B,SAASw9B,eAA1B;AAEA;;AAED1gB,aAAY9c,SAASkc,EAArB,IAA4BohB,cAA5B;;AAEAtE,OAAKuE,MAAL,CAAYzgB,UAAZ;;AAEA,SAAOwgB,cAAP;AAEA;;AAED,UAASpqC,MAAT,CAAiB8M,QAAjB,EAA4B;;AAE3B,MAAI3qB,QAAQ2qB,SAAS3qB,KAArB;AACA,MAAIooD,qBAAqBz9B,SAASI,UAAlC;;AAEA,MAAK/qB,UAAU,IAAf,EAAsB;;AAErB+qB,cAAWlN,MAAX,CAAmB7d,KAAnB,EAA0B6gC,GAAGwnB,oBAA7B;AAEA;;AAED,OAAM,IAAI5jC,IAAV,IAAkB2jC,kBAAlB,EAAuC;;AAEtCr9B,cAAWlN,MAAX,CAAmBuqC,mBAAoB3jC,IAApB,CAAnB,EAA+Coc,GAAGynB,YAAlD;AAEA;;AAED;;AAEA,MAAI7U,kBAAkB9oB,SAAS8oB,eAA/B;;AAEA,OAAM,IAAIhvB,IAAV,IAAkBgvB,eAAlB,EAAoC;;AAEnC,OAAIpyC,QAAQoyC,gBAAiBhvB,IAAjB,CAAZ;;AAEA,QAAM,IAAIljB,IAAI,CAAR,EAAWC,IAAIH,MAAMnB,MAA3B,EAAmCqB,IAAIC,CAAvC,EAA0CD,GAA1C,EAAiD;;AAEhDwpB,eAAWlN,MAAX,CAAmBxc,MAAOE,CAAP,CAAnB,EAA+Bs/B,GAAGynB,YAAlC;AAEA;AAED;AAED;;AAED,UAASC,qBAAT,CAAgC59B,QAAhC,EAA2C;;AAE1C,MAAItZ,YAAY02C,oBAAqBp9B,SAASkc,EAA9B,CAAhB;;AAEA,MAAKx1B,SAAL,EAAiB,OAAOA,SAAP;;AAEjB,MAAIo6B,UAAU,EAAd;;AAEA,MAAI+c,gBAAgB79B,SAAS3qB,KAA7B;AACA,MAAIooD,qBAAqBz9B,SAASI,UAAlC;;AAEA;;AAEA,MAAKy9B,kBAAkB,IAAvB,EAA8B;;AAE7B,OAAInnD,QAAQmnD,cAAcnnD,KAA1B;;AAEA,QAAM,IAAIE,IAAI,CAAR,EAAWC,IAAIH,MAAMnB,MAA3B,EAAmCqB,IAAIC,CAAvC,EAA0CD,KAAK,CAA/C,EAAmD;;AAElD,QAAImN,IAAIrN,MAAOE,IAAI,CAAX,CAAR;AACA,QAAIoN,IAAItN,MAAOE,IAAI,CAAX,CAAR;AACA,QAAImQ,IAAIrQ,MAAOE,IAAI,CAAX,CAAR;;AAEAkqC,YAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBA,CAApB,EAAuB+C,CAAvB,EAA0BA,CAA1B,EAA6BhD,CAA7B;AAEA;AAED,GAdD,MAcO;;AAEN,OAAIrN,QAAQ+mD,mBAAmBvtC,QAAnB,CAA4BxZ,KAAxC;;AAEA,QAAM,IAAIE,IAAI,CAAR,EAAWC,IAAMH,MAAMnB,MAAN,GAAe,CAAjB,GAAuB,CAA5C,EAA+CqB,IAAIC,CAAnD,EAAsDD,KAAK,CAA3D,EAA+D;;AAE9D,QAAImN,IAAInN,IAAI,CAAZ;AACA,QAAIoN,IAAIpN,IAAI,CAAZ;AACA,QAAImQ,IAAInQ,IAAI,CAAZ;;AAEAkqC,YAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBA,CAApB,EAAuB+C,CAAvB,EAA0BA,CAA1B,EAA6BhD,CAA7B;AAEA;AAED;;AAED;;AAEA2C,cAAY,KAAMiiC,SAAU7H,OAAV,IAAsB,KAAtB,GAA8B+G,qBAA9B,GAAsDF,qBAA5D,EAAqF7G,OAArF,EAA8F,CAA9F,CAAZ;;AAEA1gB,aAAWlN,MAAX,CAAmBxM,SAAnB,EAA8BwvB,GAAGwnB,oBAAjC;;AAEAN,sBAAqBp9B,SAASkc,EAA9B,IAAqCx1B,SAArC;;AAEA,SAAOA,SAAP;AAEA;;AAED,QAAO;;AAEN5R,OAAKA,GAFC;AAGNoe,UAAQA,MAHF;;AAKN0qC,yBAAuBA;;AALjB,EAAP;AASA;;AAED;;;;AAIA,SAASE,0BAAT,CAAqC5nB,EAArC,EAAyCyZ,UAAzC,EAAqDqJ,IAArD,EAA4D;;AAE3D,KAAIC,IAAJ;;AAEA,UAASC,OAAT,CAAkB7kD,KAAlB,EAA0B;;AAEzB4kD,SAAO5kD,KAAP;AAEA;;AAED,KAAIyB,IAAJ,EAAUgiC,eAAV;;AAEA,UAASmR,QAAT,CAAmB50C,KAAnB,EAA2B;;AAE1ByB,SAAOzB,MAAMyB,IAAb;AACAgiC,oBAAkBzjC,MAAMyjC,eAAxB;AAEA;;AAED,UAASggB,MAAT,CAAiBt0B,KAAjB,EAAwBxV,KAAxB,EAAgC;;AAE/BkoB,KAAG6nB,YAAH,CAAiB9E,IAAjB,EAAuBjrC,KAAvB,EAA8BlY,IAA9B,EAAoC0tB,QAAQsU,eAA5C;;AAEAkhB,OAAK9lC,MAAL,CAAalF,KAAb,EAAoBirC,IAApB;AAEA;;AAED,UAASG,eAAT,CAA0Bp5B,QAA1B,EAAoCwD,KAApC,EAA2CxV,KAA3C,EAAmD;;AAElD,MAAIqrC,YAAY1J,WAAW76C,GAAX,CAAgB,wBAAhB,CAAhB;;AAEA,MAAKukD,cAAc,IAAnB,EAA0B;;AAEzB31C,WAAQyD,KAAR,CAAe,uIAAf;AACA;AAEA;;AAEDkyC,YAAU2E,0BAAV,CAAsC/E,IAAtC,EAA4CjrC,KAA5C,EAAmDlY,IAAnD,EAAyD0tB,QAAQsU,eAAjE,EAAkF9X,SAASu5B,iBAA3F;;AAEAP,OAAK9lC,MAAL,CAAalF,KAAb,EAAoBirC,IAApB,EAA0Bj5B,SAASu5B,iBAAnC;AAEA;;AAED;;AAEA,MAAKL,OAAL,GAAeA,OAAf;AACA,MAAKjQ,QAAL,GAAgBA,QAAhB;AACA,MAAK6O,MAAL,GAAcA,MAAd;AACA,MAAKsB,eAAL,GAAuBA,eAAvB;AAEA;;AAED;;;;AAIA,SAAS6E,SAAT,CAAoB/nB,EAApB,EAAyB;;AAExB,KAAIqnB,SAAS;AACZzgB,cAAY,CADA;AAEZ9hB,YAAU;AAFE,EAAb;;AAKA,KAAI88B,SAAS;AACZoG,SAAO,CADK;AAEZC,SAAO,CAFK;AAGZC,aAAW,CAHC;AAIZx/B,UAAQ,CAJI;AAKZy/B,SAAO;AALK,EAAb;;AAQA,UAASnrC,MAAT,CAAiBlF,KAAjB,EAAwBirC,IAAxB,EAA8BqF,aAA9B,EAA8C;;AAE7CA,kBAAgBA,iBAAiB,CAAjC;;AAEAxG,SAAOqG,KAAP;;AAEA,UAASlF,IAAT;;AAEC,QAAK/iB,GAAGqoB,SAAR;AACCzG,WAAOsG,SAAP,IAAoBE,iBAAkBtwC,QAAQ,CAA1B,CAApB;AACA;;AAED,QAAKkoB,GAAGsoB,cAAR;AACA,QAAKtoB,GAAGuoB,YAAR;AACC3G,WAAOsG,SAAP,IAAoBE,iBAAkBtwC,QAAQ,CAA1B,CAApB;AACA;;AAED,QAAKkoB,GAAGwoB,KAAR;AACC5G,WAAOuG,KAAP,IAAgBC,iBAAkBtwC,QAAQ,CAA1B,CAAhB;AACA;;AAED,QAAKkoB,GAAGyoB,UAAR;AACC7G,WAAOuG,KAAP,IAAgBC,iBAAkBtwC,QAAQ,CAA1B,CAAhB;AACA;;AAED,QAAKkoB,GAAG0oB,SAAR;AACC9G,WAAOuG,KAAP,IAAgBC,gBAAgBtwC,KAAhC;AACA;;AAED,QAAKkoB,GAAG2oB,MAAR;AACC/G,WAAOl5B,MAAP,IAAiB0/B,gBAAgBtwC,KAAjC;AACA;;AAED;AACCtK,YAAQyD,KAAR,CAAe,qCAAf,EAAsD8xC,IAAtD;AACA;;AA7BF;AAiCA;;AAED,UAAS6F,KAAT,GAAiB;;AAEhBhH,SAAOoG,KAAP;AACApG,SAAOqG,KAAP,GAAe,CAAf;AACArG,SAAOsG,SAAP,GAAmB,CAAnB;AACAtG,SAAOl5B,MAAP,GAAgB,CAAhB;AACAk5B,SAAOuG,KAAP,GAAe,CAAf;AAEA;;AAED,QAAO;AACNd,UAAQA,MADF;AAENzF,UAAQA,MAFF;AAGNiH,YAAU,IAHJ;AAINC,aAAW,IAJL;AAKNF,SAAOA,KALD;AAMN5rC,UAAQA;AANF,EAAP;AASA;;AAED;;;;AAIA,SAAS+rC,gBAAT,CAA2Bl7C,CAA3B,EAA8BC,CAA9B,EAAkC;;AAEjC,QAAO9P,KAAKqR,GAAL,CAAUvB,EAAG,CAAH,CAAV,IAAqB9P,KAAKqR,GAAL,CAAUxB,EAAG,CAAH,CAAV,CAA5B;AAEA;;AAED,SAASm7C,iBAAT,CAA4BhpB,EAA5B,EAAiC;;AAEhC,KAAIipB,iBAAiB,EAArB;AACA,KAAIlI,kBAAkB,IAAIjgB,YAAJ,CAAkB,CAAlB,CAAtB;;AAEA,UAAS9jB,MAAT,CAAiBkM,MAAjB,EAAyBY,QAAzB,EAAmCwd,QAAnC,EAA6C4hB,OAA7C,EAAuD;;AAEtD,MAAIC,mBAAmBjgC,OAAOg2B,qBAA9B;;AAEA,MAAI7/C,SAAS8pD,iBAAiB9pD,MAA9B;;AAEA,MAAI+pD,aAAaH,eAAgBn/B,SAASkc,EAAzB,CAAjB;;AAEA,MAAKojB,eAAerrD,SAApB,EAAgC;;AAE/B;;AAEAqrD,gBAAa,EAAb;;AAEA,QAAM,IAAI1oD,IAAI,CAAd,EAAiBA,IAAIrB,MAArB,EAA6BqB,GAA7B,EAAoC;;AAEnC0oD,eAAY1oD,CAAZ,IAAkB,CAAEA,CAAF,EAAK,CAAL,CAAlB;AAEA;;AAEDuoD,kBAAgBn/B,SAASkc,EAAzB,IAAgCojB,UAAhC;AAEA;;AAED,MAAI3f,eAAenC,SAASmC,YAAT,IAAyB3f,SAAS8oB,eAAT,CAAyB54B,QAArE;AACA,MAAI0vB,eAAepC,SAASoC,YAAT,IAAyB5f,SAAS8oB,eAAT,CAAyBnxB,MAArE;;AAEA;;AAEA,OAAM,IAAI/gB,IAAI,CAAd,EAAiBA,IAAIrB,MAArB,EAA6BqB,GAA7B,EAAoC;;AAEnC,OAAIugD,YAAYmI,WAAY1oD,CAAZ,CAAhB;;AAEA,OAAKugD,UAAW,CAAX,MAAmB,CAAxB,EAA4B;;AAE3B,QAAKxX,YAAL,EAAoB3f,SAASopB,eAAT,CAA0B,gBAAgBxyC,CAA1C;AACpB,QAAKgpC,YAAL,EAAoB5f,SAASopB,eAAT,CAA0B,gBAAgBxyC,CAA1C;AAEpB;AAED;;AAED;;AAEA,OAAM,IAAIA,IAAI,CAAd,EAAiBA,IAAIrB,MAArB,EAA6BqB,GAA7B,EAAoC;;AAEnC,OAAIugD,YAAYmI,WAAY1oD,CAAZ,CAAhB;;AAEAugD,aAAW,CAAX,IAAiBvgD,CAAjB;AACAugD,aAAW,CAAX,IAAiBkI,iBAAkBzoD,CAAlB,CAAjB;AAEA;;AAED0oD,aAAW5a,IAAX,CAAiBua,gBAAjB;;AAEA;;AAEA,OAAM,IAAIroD,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9B,OAAIugD,YAAYmI,WAAY1oD,CAAZ,CAAhB;;AAEA,OAAKugD,SAAL,EAAiB;;AAEhB,QAAI9hD,QAAQ8hD,UAAW,CAAX,CAAZ;AACA,QAAI9iD,QAAQ8iD,UAAW,CAAX,CAAZ;;AAEA,QAAK9iD,KAAL,EAAa;;AAEZ,SAAKsrC,YAAL,EAAoB3f,SAASkpB,YAAT,CAAuB,gBAAgBtyC,CAAvC,EAA0C+oC,aAActqC,KAAd,CAA1C;AACpB,SAAKuqC,YAAL,EAAoB5f,SAASkpB,YAAT,CAAuB,gBAAgBtyC,CAAvC,EAA0CgpC,aAAcvqC,KAAd,CAA1C;;AAEpB4hD,qBAAiBrgD,CAAjB,IAAuBvC,KAAvB;AACA;AAEA;AAED;;AAED4iD,mBAAiBrgD,CAAjB,IAAuB,CAAvB;AAEA;;AAEDwoD,UAAQG,WAAR,GAAsBC,QAAtB,CAAgCtpB,EAAhC,EAAoC,uBAApC,EAA6D+gB,eAA7D;AAEA;;AAED,QAAO;;AAEN/jC,UAAQA;;AAFF,EAAP;AAMA;;AAED;;;;AAIA,SAASusC,YAAT,CAAuB3iB,UAAvB,EAAmCkc,IAAnC,EAA0C;;AAEzC,KAAI0G,aAAa,EAAjB;;AAEA,UAASxsC,MAAT,CAAiBkM,MAAjB,EAA0B;;AAEzB,MAAI8+B,QAAQlF,KAAKlB,MAAL,CAAYoG,KAAxB;;AAEA,MAAIl+B,WAAWZ,OAAOY,QAAtB;AACA,MAAIs9B,iBAAiBxgB,WAAWhoC,GAAX,CAAgBsqB,MAAhB,EAAwBY,QAAxB,CAArB;;AAEA;;AAEA,MAAK0/B,WAAYpC,eAAephB,EAA3B,MAAoCgiB,KAAzC,EAAiD;;AAEhD,OAAKl+B,SAASC,UAAd,EAA2B;;AAE1Bq9B,mBAAe3T,gBAAf,CAAiCvqB,MAAjC;AAEA;;AAED0d,cAAW5pB,MAAX,CAAmBoqC,cAAnB;;AAEAoC,cAAYpC,eAAephB,EAA3B,IAAkCgiB,KAAlC;AAEA;;AAED,SAAOZ,cAAP;AAEA;;AAED,UAASnhC,OAAT,GAAmB;;AAElBujC,eAAa,EAAb;AAEA;;AAED,QAAO;;AAENxsC,UAAQA,MAFF;AAGNiJ,WAASA;;AAHH,EAAP;AAOA;;AAED;;;;AAIA,SAASwjC,WAAT,CAAsB1jC,MAAtB,EAA8B3C,OAA9B,EAAuCC,KAAvC,EAA8CC,KAA9C,EAAqDC,SAArD,EAAgEC,SAAhE,EAA2EC,MAA3E,EAAmF7jB,IAAnF,EAAyF8jB,UAAzF,EAAqGC,QAArG,EAAgH;;AAE/GoC,UAASA,WAAWhoB,SAAX,GAAuBgoB,MAAvB,GAAgC,EAAzC;AACA3C,WAAUA,YAAYrlB,SAAZ,GAAwBqlB,OAAxB,GAAkC3e,qBAA5C;;AAEAye,SAAQzjB,IAAR,CAAc,IAAd,EAAoBsmB,MAApB,EAA4B3C,OAA5B,EAAqCC,KAArC,EAA4CC,KAA5C,EAAmDC,SAAnD,EAA8DC,SAA9D,EAAyEC,MAAzE,EAAiF7jB,IAAjF,EAAuF8jB,UAAvF,EAAmGC,QAAnG;;AAEA,MAAKS,KAAL,GAAa,KAAb;AAEA;;AAEDqlC,YAAYhrD,SAAZ,GAAwBC,OAAO8lB,MAAP,CAAetB,QAAQzkB,SAAvB,CAAxB;AACAgrD,YAAYhrD,SAAZ,CAAsB0O,WAAtB,GAAoCs8C,WAApC;;AAEAA,YAAYhrD,SAAZ,CAAsB8jD,aAAtB,GAAsC,IAAtC;;AAEA7jD,OAAOC,cAAP,CAAuB8qD,YAAYhrD,SAAnC,EAA8C,QAA9C,EAAwD;;AAEvDG,MAAK,YAAY;;AAEhB,SAAO,KAAKukB,KAAZ;AAEA,EANsD;;AAQvD1W,MAAK,UAAWtO,KAAX,EAAmB;;AAEvB,OAAKglB,KAAL,GAAahlB,KAAb;AAEA;;AAZsD,CAAxD;;AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,IAAIurD,eAAe,IAAIxmC,OAAJ,EAAnB;AACA,IAAIymC,mBAAmB,IAAIF,WAAJ,EAAvB;;AAEA;;AAEA,SAASG,gBAAT,GAA4B;;AAE3B,MAAKC,GAAL,GAAW,EAAX;AACA,MAAK5vB,GAAL,GAAW,EAAX;AAEA;;AAED;;AAEA;;AAEA,IAAI6vB,gBAAgB,EAApB;AACA,IAAIC,gBAAgB,EAApB;;AAEA;;AAEA,IAAIC,YAAY,IAAIlpB,YAAJ,CAAkB,EAAlB,CAAhB;AACA,IAAImpB,YAAY,IAAInpB,YAAJ,CAAkB,CAAlB,CAAhB;;AAEA;;AAEA,SAASopB,OAAT,CAAkB1pD,KAAlB,EAAyB2pD,OAAzB,EAAkCC,SAAlC,EAA8C;;AAE7C,KAAIC,YAAY7pD,MAAO,CAAP,CAAhB;;AAEA,KAAK6pD,aAAa,CAAb,IAAkBA,YAAY,CAAnC,EAAuC,OAAO7pD,KAAP;AACvC;AACA;;AAEA,KAAImK,IAAIw/C,UAAUC,SAAlB;AAAA,KACChsC,IAAI0rC,cAAen/C,CAAf,CADL;;AAGA,KAAKyT,MAAMrgB,SAAX,EAAuB;;AAEtBqgB,MAAI,IAAI0iB,YAAJ,CAAkBn2B,CAAlB,CAAJ;AACAm/C,gBAAen/C,CAAf,IAAqByT,CAArB;AAEA;;AAED,KAAK+rC,YAAY,CAAjB,EAAqB;;AAEpBE,YAAU/5C,OAAV,CAAmB8N,CAAnB,EAAsB,CAAtB;;AAEA,OAAM,IAAI1d,IAAI,CAAR,EAAW2P,SAAS,CAA1B,EAA6B3P,MAAMypD,OAAnC,EAA4C,EAAGzpD,CAA/C,EAAmD;;AAElD2P,aAAU+5C,SAAV;AACA5pD,SAAOE,CAAP,EAAW4P,OAAX,CAAoB8N,CAApB,EAAuB/N,MAAvB;AAEA;AAED;;AAED,QAAO+N,CAAP;AAEA;;AAED;;AAEA,SAASksC,aAAT,CAAwBjJ,QAAxB,EAAkC12C,CAAlC,EAAsC;;AAErC,KAAIyT,IAAI2rC,cAAep/C,CAAf,CAAR;;AAEA,KAAKyT,MAAMrgB,SAAX,EAAuB;;AAEtBqgB,MAAI,IAAIkjB,UAAJ,CAAgB32B,CAAhB,CAAJ;AACAo/C,gBAAep/C,CAAf,IAAqByT,CAArB;AAEA;;AAED,MAAM,IAAI1d,IAAI,CAAd,EAAiBA,MAAMiK,CAAvB,EAA0B,EAAGjK,CAA7B,EACC0d,EAAG1d,CAAH,IAAS2gD,SAASkJ,gBAAT,EAAT;;AAED,QAAOnsC,CAAP;AAEA;;AAED;;AAEA;AACA;;AAEA;;AAEA,SAASosC,UAAT,CAAqBxqB,EAArB,EAAyB3yB,CAAzB,EAA6B;;AAE5B2yB,IAAGyqB,SAAH,CAAc,KAAKC,IAAnB,EAAyBr9C,CAAzB;AAEA;;AAED,SAASs9C,UAAT,CAAqB3qB,EAArB,EAAyB3yB,CAAzB,EAA6B;;AAE5B2yB,IAAG4qB,SAAH,CAAc,KAAKF,IAAnB,EAAyBr9C,CAAzB;AAEA;;AAED;;AAEA,SAASw9C,WAAT,CAAsB7qB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B,KAAKA,EAAE9O,CAAF,KAAQR,SAAb,EAAyB;;AAExBiiC,KAAG8qB,UAAH,CAAe,KAAKJ,IAApB,EAA0Br9C,CAA1B;AAEA,EAJD,MAIO;;AAEN2yB,KAAG+qB,SAAH,CAAc,KAAKL,IAAnB,EAAyBr9C,EAAE9O,CAA3B,EAA8B8O,EAAElC,CAAhC;AAEA;AAED;;AAED,SAAS6/C,WAAT,CAAsBhrB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B,KAAKA,EAAE9O,CAAF,KAAQR,SAAb,EAAyB;;AAExBiiC,KAAGirB,SAAH,CAAc,KAAKP,IAAnB,EAAyBr9C,EAAE9O,CAA3B,EAA8B8O,EAAElC,CAAhC,EAAmCkC,EAAEwF,CAArC;AAEA,EAJD,MAIO,IAAKxF,EAAE+Q,CAAF,KAAQrgB,SAAb,EAAyB;;AAE/BiiC,KAAGirB,SAAH,CAAc,KAAKP,IAAnB,EAAyBr9C,EAAE+Q,CAA3B,EAA8B/Q,EAAEkV,CAAhC,EAAmClV,EAAES,CAArC;AAEA,EAJM,MAIA;;AAENkyB,KAAGkrB,UAAH,CAAe,KAAKR,IAApB,EAA0Br9C,CAA1B;AAEA;AAED;;AAED,SAAS89C,WAAT,CAAsBnrB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B,KAAKA,EAAE9O,CAAF,KAAQR,SAAb,EAAyB;;AAExBiiC,KAAGorB,UAAH,CAAe,KAAKV,IAApB,EAA0Br9C,CAA1B;AAEA,EAJD,MAIO;;AAEL2yB,KAAGqrB,SAAH,CAAc,KAAKX,IAAnB,EAAyBr9C,EAAE9O,CAA3B,EAA8B8O,EAAElC,CAAhC,EAAmCkC,EAAEwF,CAArC,EAAwCxF,EAAEE,CAA1C;AAED;AAED;;AAED;;AAEA,SAAS+9C,WAAT,CAAsBtrB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAGurB,gBAAH,CAAqB,KAAKb,IAA1B,EAAgC,KAAhC,EAAuCr9C,EAAEoB,QAAF,IAAcpB,CAArD;AAEA;;AAED,SAASm+C,WAAT,CAAsBxrB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B,KAAKA,EAAEoB,QAAF,KAAe1Q,SAApB,EAAgC;;AAE/BiiC,KAAGyrB,gBAAH,CAAqB,KAAKf,IAA1B,EAAgC,KAAhC,EAAuCr9C,CAAvC;AAEA,EAJD,MAIO;;AAEN48C,YAAUx9C,GAAV,CAAeY,EAAEoB,QAAjB;AACAuxB,KAAGyrB,gBAAH,CAAqB,KAAKf,IAA1B,EAAgC,KAAhC,EAAuCT,SAAvC;AAEA;AAED;;AAED,SAASyB,WAAT,CAAsB1rB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B,KAAKA,EAAEoB,QAAF,KAAe1Q,SAApB,EAAgC;;AAE/BiiC,KAAG2rB,gBAAH,CAAqB,KAAKjB,IAA1B,EAAgC,KAAhC,EAAuCr9C,CAAvC;AAEA,EAJD,MAIO;;AAEN28C,YAAUv9C,GAAV,CAAeY,EAAEoB,QAAjB;AACAuxB,KAAG2rB,gBAAH,CAAqB,KAAKjB,IAA1B,EAAgC,KAAhC,EAAuCV,SAAvC;AAEA;AAED;;AAED;;AAEA,SAAS4B,UAAT,CAAqB5rB,EAArB,EAAyB3yB,CAAzB,EAA4Bg0C,QAA5B,EAAuC;;AAEtC,KAAIwK,OAAOxK,SAASkJ,gBAAT,EAAX;AACAvqB,IAAG4qB,SAAH,CAAc,KAAKF,IAAnB,EAAyBmB,IAAzB;AACAxK,UAASyK,YAAT,CAAuBz+C,KAAKq8C,YAA5B,EAA0CmC,IAA1C;AAEA;;AAED,SAASE,UAAT,CAAqB/rB,EAArB,EAAyB3yB,CAAzB,EAA4Bg0C,QAA5B,EAAuC;;AAEtC,KAAIwK,OAAOxK,SAASkJ,gBAAT,EAAX;AACAvqB,IAAG4qB,SAAH,CAAc,KAAKF,IAAnB,EAAyBmB,IAAzB;AACAxK,UAAS2K,cAAT,CAAyB3+C,KAAKs8C,gBAA9B,EAAgDkC,IAAhD;AAEA;;AAED;;AAEA,SAASI,WAAT,CAAsBjsB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAGksB,UAAH,CAAe,KAAKxB,IAApB,EAA0Br9C,CAA1B;AAEA;;AAED,SAAS8+C,WAAT,CAAsBnsB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAGosB,UAAH,CAAe,KAAK1B,IAApB,EAA0Br9C,CAA1B;AAEA;;AAED,SAASg/C,WAAT,CAAsBrsB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAGssB,UAAH,CAAe,KAAK5B,IAApB,EAA0Br9C,CAA1B;AAEA;;AAED;;AAEA,SAASk/C,iBAAT,CAA4B3sD,IAA5B,EAAmC;;AAElC,SAASA,IAAT;;AAEC,OAAK,MAAL;AAAa,UAAO4qD,UAAP,CAFd,CAEiC;AAChC,OAAK,MAAL;AAAa,UAAOK,WAAP,CAHd,CAGkC;AACjC,OAAK,MAAL;AAAa,UAAOG,WAAP,CAJd,CAIkC;AACjC,OAAK,MAAL;AAAa,UAAOG,WAAP,CALd,CAKkC;;AAEjC,OAAK,MAAL;AAAa,UAAOG,WAAP,CAPd,CAOkC;AACjC,OAAK,MAAL;AAAa,UAAOE,WAAP,CARd,CAQkC;AACjC,OAAK,MAAL;AAAa,UAAOE,WAAP,CATd,CASkC;;AAEjC,OAAK,MAAL,CAAa,KAAK,MAAL;AAAa,UAAOE,UAAP,CAX3B,CAW8C;AAC7C,OAAK,MAAL;AAAa,UAAOG,UAAP,CAZd,CAYiC;;AAEhC,OAAK,MAAL,CAAa,KAAK,MAAL;AAAa,UAAOpB,UAAP,CAd3B,CAc8C;AAC7C,OAAK,MAAL,CAAa,KAAK,MAAL;AAAa,UAAOsB,WAAP,CAf3B,CAe+C;AAC9C,OAAK,MAAL,CAAa,KAAK,MAAL;AAAa,UAAOE,WAAP,CAhB3B,CAgB+C;AAC9C,OAAK,MAAL,CAAa,KAAK,MAAL;AAAa,UAAOE,WAAP,CAjB3B,CAiB+C;;AAjB/C;AAqBA;;AAED;;AAEA,SAASG,WAAT,CAAsBxsB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAGysB,UAAH,CAAe,KAAK/B,IAApB,EAA0Br9C,CAA1B;AAEA;AACD,SAASq/C,WAAT,CAAsB1sB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAG2sB,UAAH,CAAe,KAAKjC,IAApB,EAA0Br9C,CAA1B;AAEA;;AAED;;AAEA,SAASu/C,WAAT,CAAsB5sB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAG8qB,UAAH,CAAe,KAAKJ,IAApB,EAA0BR,QAAS78C,CAAT,EAAY,KAAK0b,IAAjB,EAAuB,CAAvB,CAA1B;AAEA;;AAED,SAAS8jC,WAAT,CAAsB7sB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAGkrB,UAAH,CAAe,KAAKR,IAApB,EAA0BR,QAAS78C,CAAT,EAAY,KAAK0b,IAAjB,EAAuB,CAAvB,CAA1B;AAEA;;AAED,SAAS+jC,WAAT,CAAsB9sB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAGorB,UAAH,CAAe,KAAKV,IAApB,EAA0BR,QAAS78C,CAAT,EAAY,KAAK0b,IAAjB,EAAuB,CAAvB,CAA1B;AAEA;;AAED;;AAEA,SAASgkC,WAAT,CAAsB/sB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAGurB,gBAAH,CAAqB,KAAKb,IAA1B,EAAgC,KAAhC,EAAuCR,QAAS78C,CAAT,EAAY,KAAK0b,IAAjB,EAAuB,CAAvB,CAAvC;AAEA;;AAED,SAASikC,WAAT,CAAsBhtB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAGyrB,gBAAH,CAAqB,KAAKf,IAA1B,EAAgC,KAAhC,EAAuCR,QAAS78C,CAAT,EAAY,KAAK0b,IAAjB,EAAuB,CAAvB,CAAvC;AAEA;;AAED,SAASkkC,WAAT,CAAsBjtB,EAAtB,EAA0B3yB,CAA1B,EAA8B;;AAE7B2yB,IAAG2rB,gBAAH,CAAqB,KAAKjB,IAA1B,EAAgC,KAAhC,EAAuCR,QAAS78C,CAAT,EAAY,KAAK0b,IAAjB,EAAuB,EAAvB,CAAvC;AAEA;;AAED;;AAEA,SAASmkC,WAAT,CAAsBltB,EAAtB,EAA0B3yB,CAA1B,EAA6Bg0C,QAA7B,EAAwC;;AAEvC,KAAI12C,IAAI0C,EAAEhO,MAAV;AAAA,KACC8tD,QAAQ7C,cAAejJ,QAAf,EAAyB12C,CAAzB,CADT;;AAGAq1B,IAAG2sB,UAAH,CAAe,KAAKjC,IAApB,EAA0ByC,KAA1B;;AAEA,MAAM,IAAIzsD,IAAI,CAAd,EAAiBA,MAAMiK,CAAvB,EAA0B,EAAGjK,CAA7B,EAAiC;;AAEhC2gD,WAASyK,YAAT,CAAuBz+C,EAAG3M,CAAH,KAAUgpD,YAAjC,EAA+CyD,MAAOzsD,CAAP,CAA/C;AAEA;AAED;;AAED,SAAS0sD,WAAT,CAAsBptB,EAAtB,EAA0B3yB,CAA1B,EAA6Bg0C,QAA7B,EAAwC;;AAEvC,KAAI12C,IAAI0C,EAAEhO,MAAV;AAAA,KACC8tD,QAAQ7C,cAAejJ,QAAf,EAAyB12C,CAAzB,CADT;;AAGAq1B,IAAG2sB,UAAH,CAAe,KAAKjC,IAApB,EAA0ByC,KAA1B;;AAEA,MAAM,IAAIzsD,IAAI,CAAd,EAAiBA,MAAMiK,CAAvB,EAA0B,EAAGjK,CAA7B,EAAiC;;AAEhC2gD,WAAS2K,cAAT,CAAyB3+C,EAAG3M,CAAH,KAAUipD,gBAAnC,EAAqDwD,MAAOzsD,CAAP,CAArD;AAEA;AAED;;AAED;;AAEA,SAAS2sD,kBAAT,CAA6BztD,IAA7B,EAAoC;;AAEnC,SAASA,IAAT;;AAEC,OAAK,MAAL;AAAa,UAAO4sD,WAAP,CAFd,CAEkC;AACjC,OAAK,MAAL;AAAa,UAAOI,WAAP,CAHd,CAGkC;AACjC,OAAK,MAAL;AAAa,UAAOC,WAAP,CAJd,CAIkC;AACjC,OAAK,MAAL;AAAa,UAAOC,WAAP,CALd,CAKkC;;AAEjC,OAAK,MAAL;AAAa,UAAOC,WAAP,CAPd,CAOkC;AACjC,OAAK,MAAL;AAAa,UAAOC,WAAP,CARd,CAQkC;AACjC,OAAK,MAAL;AAAa,UAAOC,WAAP,CATd,CASkC;;AAEjC,OAAK,MAAL;AAAa,UAAOC,WAAP,CAXd,CAWkC;AACjC,OAAK,MAAL;AAAa,UAAOE,WAAP,CAZd,CAYkC;;AAEjC,OAAK,MAAL,CAAa,KAAK,MAAL;AAAa,UAAOV,WAAP,CAd3B,CAc+C;AAC9C,OAAK,MAAL,CAAa,KAAK,MAAL;AAAa,UAAOT,WAAP,CAf3B,CAe+C;AAC9C,OAAK,MAAL,CAAa,KAAK,MAAL;AAAa,UAAOE,WAAP,CAhB3B,CAgB+C;AAC9C,OAAK,MAAL,CAAa,KAAK,MAAL;AAAa,UAAOE,WAAP,CAjB3B,CAiB+C;;AAjB/C;AAqBA;;AAED;;AAEA,SAASiB,aAAT,CAAwBtnB,EAAxB,EAA4BunB,UAA5B,EAAwC7C,IAAxC,EAA+C;;AAE9C,MAAK1kB,EAAL,GAAUA,EAAV;AACA,MAAK0kB,IAAL,GAAYA,IAAZ;AACA,MAAKpB,QAAL,GAAgBiD,kBAAmBgB,WAAW3tD,IAA9B,CAAhB;;AAEA;AAEA;;AAED,SAAS4tD,gBAAT,CAA2BxnB,EAA3B,EAA+BunB,UAA/B,EAA2C7C,IAA3C,EAAkD;;AAEjD,MAAK1kB,EAAL,GAAUA,EAAV;AACA,MAAK0kB,IAAL,GAAYA,IAAZ;AACA,MAAK3hC,IAAL,GAAYwkC,WAAWxkC,IAAvB;AACA,MAAKugC,QAAL,GAAgB+D,mBAAoBE,WAAW3tD,IAA/B,CAAhB;;AAEA;AAEA;;AAED,SAAS6tD,iBAAT,CAA4BznB,EAA5B,EAAiC;;AAEhC,MAAKA,EAAL,GAAUA,EAAV;;AAEA4jB,kBAAiBnqD,IAAjB,CAAuB,IAAvB,EAJgC,CAID;AAE/B;;AAEDguD,kBAAkBhvD,SAAlB,CAA4B6qD,QAA5B,GAAuC,UAAWtpB,EAAX,EAAe7hC,KAAf,EAAuB;;AAE7D;AACA;;AAEA,KAAI0rD,MAAM,KAAKA,GAAf;;AAEA,MAAM,IAAInpD,IAAI,CAAR,EAAWiK,IAAIk/C,IAAIxqD,MAAzB,EAAiCqB,MAAMiK,CAAvC,EAA0C,EAAGjK,CAA7C,EAAiD;;AAEhD,MAAI02B,IAAIyyB,IAAKnpD,CAAL,CAAR;AACA02B,IAAEkyB,QAAF,CAAYtpB,EAAZ,EAAgB7hC,MAAOi5B,EAAE4O,EAAT,CAAhB;AAEA;AAED,CAdD;;AAgBA;;AAEA;;AAEA,IAAI0nB,aAAa,0BAAjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,UAAT,CAAqBC,SAArB,EAAgCC,aAAhC,EAAgD;;AAE/CD,WAAU/D,GAAV,CAAc5pD,IAAd,CAAoB4tD,aAApB;AACAD,WAAU3zB,GAAV,CAAe4zB,cAAc7nB,EAA7B,IAAoC6nB,aAApC;AAEA;;AAED,SAASC,YAAT,CAAuBP,UAAvB,EAAmC7C,IAAnC,EAAyCkD,SAAzC,EAAqD;;AAEpD,KAAIG,OAAOR,WAAW3pC,IAAtB;AAAA,KACCoqC,aAAaD,KAAK1uD,MADnB;;AAGA;AACAquD,YAAWO,SAAX,GAAuB,CAAvB;;AAEA,UAAY;;AAEX,MAAInvD,QAAQ4uD,WAAWn1B,IAAX,CAAiBw1B,IAAjB,CAAZ;AAAA,MACCG,WAAWR,WAAWO,SADvB;AAAA,MAGCjoB,KAAKlnC,MAAO,CAAP,CAHN;AAAA,MAICqvD,YAAYrvD,MAAO,CAAP,MAAe,GAJ5B;AAAA,MAKCsvD,YAAYtvD,MAAO,CAAP,CALb;;AAOA,MAAKqvD,SAAL,EAAiBnoB,KAAKA,KAAK,CAAV,CATN,CASmB;;AAE9B,MAAKooB,cAAcrwD,SAAd,IAA2BqwD,cAAc,GAAd,IAAqBF,WAAW,CAAX,KAAiBF,UAAtE,EAAmF;;AAElF;;AAEAL,cAAYC,SAAZ,EAAuBQ,cAAcrwD,SAAd,GACtB,IAAIuvD,aAAJ,CAAmBtnB,EAAnB,EAAuBunB,UAAvB,EAAmC7C,IAAnC,CADsB,GAEtB,IAAI8C,gBAAJ,CAAsBxnB,EAAtB,EAA0BunB,UAA1B,EAAsC7C,IAAtC,CAFD;;AAIA;AAEA,GAVD,MAUO;;AAEN;;AAEA,OAAIzwB,MAAM2zB,UAAU3zB,GAApB;AAAA,OAAyBo0B,OAAOp0B,IAAK+L,EAAL,CAAhC;;AAEA,OAAKqoB,SAAStwD,SAAd,EAA0B;;AAEzBswD,WAAO,IAAIZ,iBAAJ,CAAuBznB,EAAvB,CAAP;AACA2nB,eAAYC,SAAZ,EAAuBS,IAAvB;AAEA;;AAEDT,eAAYS,IAAZ;AAEA;AAED;AAED;;AAED;;AAEA,SAASC,aAAT,CAAwBtuB,EAAxB,EAA4BkpB,OAA5B,EAAqC7H,QAArC,EAAgD;;AAE/CuI,kBAAiBnqD,IAAjB,CAAuB,IAAvB;;AAEA,MAAK4hD,QAAL,GAAgBA,QAAhB;;AAEA,KAAI12C,IAAIq1B,GAAGuuB,mBAAH,CAAwBrF,OAAxB,EAAiClpB,GAAGwuB,eAApC,CAAR;;AAEA,MAAM,IAAI9tD,IAAI,CAAd,EAAiBA,IAAIiK,CAArB,EAAwB,EAAGjK,CAA3B,EAA+B;;AAE9B,MAAIoiD,OAAO9iB,GAAGyuB,gBAAH,CAAqBvF,OAArB,EAA8BxoD,CAA9B,CAAX;AAAA,MACCgqD,OAAO1qB,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgCpG,KAAKl/B,IAArC,CADR;;AAGAkqC,eAAchL,IAAd,EAAoB4H,IAApB,EAA0B,IAA1B;AAEA;AAED;;AAED4D,cAAc7vD,SAAd,CAAwB6qD,QAAxB,GAAmC,UAAWtpB,EAAX,EAAepc,IAAf,EAAqBzlB,KAArB,EAA6B;;AAE/D,KAAIi5B,IAAI,KAAK6C,GAAL,CAAUrW,IAAV,CAAR;;AAEA,KAAKwT,MAAMr5B,SAAX,EAAuBq5B,EAAEkyB,QAAF,CAAYtpB,EAAZ,EAAgB7hC,KAAhB,EAAuB,KAAKkjD,QAA5B;AAEvB,CAND;;AAQAiN,cAAc7vD,SAAd,CAAwBkwD,WAAxB,GAAsC,UAAW3uB,EAAX,EAAe9W,MAAf,EAAuBtF,IAAvB,EAA8B;;AAEnE,KAAIvW,IAAI6b,OAAQtF,IAAR,CAAR;;AAEA,KAAKvW,MAAMtP,SAAX,EAAuB,KAAKurD,QAAL,CAAetpB,EAAf,EAAmBpc,IAAnB,EAAyBvW,CAAzB;AAEvB,CAND;;AASA;;AAEAihD,cAAcM,MAAd,GAAuB,UAAW5uB,EAAX,EAAe6pB,GAAf,EAAoBniB,MAApB,EAA4B2Z,QAA5B,EAAuC;;AAE7D,MAAM,IAAI3gD,IAAI,CAAR,EAAWiK,IAAIk/C,IAAIxqD,MAAzB,EAAiCqB,MAAMiK,CAAvC,EAA0C,EAAGjK,CAA7C,EAAiD;;AAEhD,MAAI02B,IAAIyyB,IAAKnpD,CAAL,CAAR;AAAA,MACC2M,IAAIq6B,OAAQtQ,EAAE4O,EAAV,CADL;;AAGA,MAAK34B,EAAEimC,WAAF,KAAkB,KAAvB,EAA+B;;AAE9B;AACAlc,KAAEkyB,QAAF,CAAYtpB,EAAZ,EAAgB3yB,EAAElP,KAAlB,EAAyBkjD,QAAzB;AAEA;AAED;AAED,CAhBD;;AAkBAiN,cAAcO,YAAd,GAA6B,UAAWhF,GAAX,EAAgBniB,MAAhB,EAAyB;;AAErD,KAAItpB,IAAI,EAAR;;AAEA,MAAM,IAAI1d,IAAI,CAAR,EAAWiK,IAAIk/C,IAAIxqD,MAAzB,EAAiCqB,MAAMiK,CAAvC,EAA0C,EAAGjK,CAA7C,EAAiD;;AAEhD,MAAI02B,IAAIyyB,IAAKnpD,CAAL,CAAR;AACA,MAAK02B,EAAE4O,EAAF,IAAQ0B,MAAb,EAAsBtpB,EAAEne,IAAF,CAAQm3B,CAAR;AAEtB;;AAED,QAAOhZ,CAAP;AAEA,CAbD;;AAeA;;;;AAIA,SAAS0wC,cAAT,CAAyBz2B,MAAzB,EAAkC;;AAEjC,KAAI8vB,QAAQ9vB,OAAO02B,KAAP,CAAc,IAAd,CAAZ;;AAEA,MAAM,IAAIruD,IAAI,CAAd,EAAiBA,IAAIynD,MAAM9oD,MAA3B,EAAmCqB,GAAnC,EAA0C;;AAEzCynD,QAAOznD,CAAP,IAAeA,IAAI,CAAN,GAAY,IAAZ,GAAmBynD,MAAOznD,CAAP,CAAhC;AAEA;;AAED,QAAOynD,MAAM6G,IAAN,CAAY,IAAZ,CAAP;AAEA;;AAED,SAASC,WAAT,CAAsBjvB,EAAtB,EAA0BpgC,IAA1B,EAAgCy4B,MAAhC,EAAyC;;AAExC,KAAI62B,SAASlvB,GAAGmvB,YAAH,CAAiBvvD,IAAjB,CAAb;;AAEAogC,IAAGovB,YAAH,CAAiBF,MAAjB,EAAyB72B,MAAzB;AACA2H,IAAGqvB,aAAH,CAAkBH,MAAlB;;AAEA,KAAKlvB,GAAGsvB,kBAAH,CAAuBJ,MAAvB,EAA+BlvB,GAAGuvB,cAAlC,MAAuD,KAA5D,EAAoE;;AAEnE/hD,UAAQyD,KAAR,CAAe,8CAAf;AAEA;;AAED,KAAK+uB,GAAGwvB,gBAAH,CAAqBN,MAArB,MAAkC,EAAvC,EAA4C;;AAE3C1hD,UAAQC,IAAR,CAAc,0CAAd,EAA0D7N,SAASogC,GAAG4jB,aAAZ,GAA4B,QAA5B,GAAuC,UAAjG,EAA6G5jB,GAAGwvB,gBAAH,CAAqBN,MAArB,CAA7G,EAA4IJ,eAAgBz2B,MAAhB,CAA5I;AAEA;;AAED;AACA;;AAEA,QAAO62B,MAAP;AAEA;;AAED;;;;AAIA,IAAIO,iBAAiB,CAArB;;AAEA,SAASC,qBAAT,CAAgC/rC,QAAhC,EAA2C;;AAE1C,SAASA,QAAT;;AAEC,OAAK3a,cAAL;AACC,UAAO,CAAE,QAAF,EAAY,WAAZ,CAAP;AACD,OAAKC,YAAL;AACC,UAAO,CAAE,MAAF,EAAU,WAAV,CAAP;AACD,OAAKE,YAAL;AACC,UAAO,CAAE,MAAF,EAAU,WAAV,CAAP;AACD,OAAKE,aAAL;AACC,UAAO,CAAE,MAAF,EAAU,gBAAV,CAAP;AACD,OAAKC,cAAL;AACC,UAAO,CAAE,MAAF,EAAU,iBAAV,CAAP;AACD,OAAKC,YAAL;AACC,UAAO,CAAE,MAAF,EAAU,kBAAV,CAAP;AACD,OAAKL,aAAL;AACC,UAAO,CAAE,OAAF,EAAW,kCAAX,CAAP;AACD;AACC,SAAM,IAAI8D,KAAJ,CAAW,2BAA2B2W,QAAtC,CAAN;;AAjBF;AAqBA;;AAED,SAASgsC,wBAAT,CAAmCC,YAAnC,EAAiDjsC,QAAjD,EAA4D;;AAE3D,KAAI8U,aAAai3B,sBAAuB/rC,QAAvB,CAAjB;AACA,QAAO,UAAUisC,YAAV,GAAyB,0BAAzB,GAAsDn3B,WAAY,CAAZ,CAAtD,GAAwE,UAAxE,GAAqFA,WAAY,CAAZ,CAArF,GAAuG,KAA9G;AAEA;;AAED,SAASo3B,wBAAT,CAAmCD,YAAnC,EAAiDjsC,QAAjD,EAA4D;;AAE3D,KAAI8U,aAAai3B,sBAAuB/rC,QAAvB,CAAjB;AACA,QAAO,UAAUisC,YAAV,GAAyB,kCAAzB,GAA8Dn3B,WAAY,CAAZ,CAA9D,GAAgFA,WAAY,CAAZ,CAAhF,GAAkG,KAAzG;AAEA;;AAED,SAASq3B,sBAAT,CAAiCF,YAAjC,EAA+CG,WAA/C,EAA6D;;AAE5D,KAAIC,eAAJ;;AAEA,SAASD,WAAT;;AAEC,OAAK3rD,iBAAL;AACC4rD,qBAAkB,QAAlB;AACA;;AAED,OAAK3rD,mBAAL;AACC2rD,qBAAkB,UAAlB;AACA;;AAED,OAAK1rD,qBAAL;AACC0rD,qBAAkB,YAAlB;AACA;;AAED,OAAKzrD,iBAAL;AACCyrD,qBAAkB,iBAAlB;AACA;;AAED;AACC,SAAM,IAAIhjD,KAAJ,CAAW,8BAA8B+iD,WAAzC,CAAN;;AAnBF;;AAuBA,QAAO,UAAUH,YAAV,GAAyB,0BAAzB,GAAsDI,eAAtD,GAAwE,yBAA/E;AAEA;;AAED,SAASC,kBAAT,CAA6BxW,UAA7B,EAAyCrS,UAAzC,EAAqD8oB,kBAArD,EAA0E;;AAEzEzW,cAAaA,cAAc,EAA3B;;AAEA,KAAI0W,SAAS,CACV1W,WAAWC,WAAX,IAA0BtS,WAAWgpB,YAArC,IAAqDhpB,WAAW/L,OAAhE,IAA2E+L,WAAW5L,SAAtF,IAAmG4L,WAAWuP,WAAhH,GAAgI,iDAAhI,GAAoL,EADxK,EAEZ,CAAE8C,WAAWE,SAAX,IAAwBvS,WAAW6c,sBAArC,KAAiEiM,mBAAmBtxD,GAAnB,CAAwB,gBAAxB,CAAjE,GAA8G,uCAA9G,GAAwJ,EAF5I,EAGV66C,WAAWG,WAAb,IAA8BsW,mBAAmBtxD,GAAnB,CAAwB,oBAAxB,CAA9B,GAA+E,0CAA/E,GAA4H,EAHhH,EAIZ,CAAE66C,WAAWI,gBAAX,IAA+BzS,WAAW7M,MAA5C,KAAwD21B,mBAAmBtxD,GAAnB,CAAwB,wBAAxB,CAAxD,GAA6G,+CAA7G,GAA+J,EAJnJ,CAAb;;AAOA,QAAOuxD,OAAOE,MAAP,CAAeC,eAAf,EAAiCtB,IAAjC,CAAuC,IAAvC,CAAP;AAEA;;AAED,SAASuB,eAAT,CAA0BhX,OAA1B,EAAoC;;AAEnC,KAAI4W,SAAS,EAAb;;AAEA,MAAM,IAAIvsC,IAAV,IAAkB21B,OAAlB,EAA4B;;AAE3B,MAAIp7C,QAAQo7C,QAAS31B,IAAT,CAAZ;;AAEA,MAAKzlB,UAAU,KAAf,EAAuB;;AAEvBgyD,SAAOlwD,IAAP,CAAa,aAAa2jB,IAAb,GAAoB,GAApB,GAA0BzlB,KAAvC;AAEA;;AAED,QAAOgyD,OAAOnB,IAAP,CAAa,IAAb,CAAP;AAEA;;AAED,SAASwB,uBAAT,CAAkCxwB,EAAlC,EAAsCkpB,OAAtC,EAAgD;;AAE/C,KAAIh/B,aAAa,EAAjB;;AAEA,KAAIvf,IAAIq1B,GAAGuuB,mBAAH,CAAwBrF,OAAxB,EAAiClpB,GAAGywB,iBAApC,CAAR;;AAEA,MAAM,IAAI/vD,IAAI,CAAd,EAAiBA,IAAIiK,CAArB,EAAwBjK,GAAxB,EAA+B;;AAE9B,MAAIoiD,OAAO9iB,GAAG0wB,eAAH,CAAoBxH,OAApB,EAA6BxoD,CAA7B,CAAX;AACA,MAAIkjB,OAAOk/B,KAAKl/B,IAAhB;;AAEA;;AAEAsG,aAAYtG,IAAZ,IAAqBoc,GAAG2wB,iBAAH,CAAsBzH,OAAtB,EAA+BtlC,IAA/B,CAArB;AAEA;;AAED,QAAOsG,UAAP;AAEA;;AAED,SAASomC,eAAT,CAA0Bj4B,MAA1B,EAAmC;;AAElC,QAAOA,WAAW,EAAlB;AAEA;;AAED,SAASu4B,gBAAT,CAA2Bv4B,MAA3B,EAAmC+O,UAAnC,EAAgD;;AAE/C,QAAO/O,OACLw4B,OADK,CACI,iBADJ,EACuBzpB,WAAW0pB,YADlC,EAELD,OAFK,CAEI,kBAFJ,EAEwBzpB,WAAW2pB,aAFnC,EAGLF,OAHK,CAGI,uBAHJ,EAG6BzpB,WAAW4pB,iBAHxC,EAILH,OAJK,CAII,mBAJJ,EAIyBzpB,WAAW6pB,cAJpC,EAKLJ,OALK,CAKI,kBALJ,EAKwBzpB,WAAW8pB,aALnC,CAAP;AAOA;;AAED,SAASC,wBAAT,CAAmC94B,MAAnC,EAA2C+O,UAA3C,EAAwD;;AAEvD,QAAO/O,OACLw4B,OADK,CACI,sBADJ,EAC4BzpB,WAAWgqB,iBADvC,EAELP,OAFK,CAEI,wBAFJ,EAEgCzpB,WAAWgqB,iBAAX,GAA+BhqB,WAAWiqB,mBAF1E,CAAP;AAIA;;AAED,SAASC,aAAT,CAAwBj5B,MAAxB,EAAiC;;AAEhC,KAAIk5B,UAAU,iCAAd;;AAEA,UAASV,OAAT,CAAkB/xD,KAAlB,EAAyB0yD,OAAzB,EAAmC;;AAElC,MAAIX,UAAU95B,YAAay6B,OAAb,CAAd;;AAEA,MAAKX,YAAY9yD,SAAjB,EAA6B;;AAE5B,SAAM,IAAIiP,KAAJ,CAAW,+BAA+BwkD,OAA/B,GAAyC,GAApD,CAAN;AAEA;;AAED,SAAOF,cAAeT,OAAf,CAAP;AAEA;;AAED,QAAOx4B,OAAOw4B,OAAP,CAAgBU,OAAhB,EAAyBV,OAAzB,CAAP;AAEA;;AAED,SAASY,WAAT,CAAsBp5B,MAAtB,EAA+B;;AAE9B,KAAIk5B,UAAU,8FAAd;;AAEA,UAASV,OAAT,CAAkB/xD,KAAlB,EAAyBwuB,KAAzB,EAAgCI,GAAhC,EAAqCgkC,OAArC,EAA+C;;AAE9C,MAAIC,SAAS,EAAb;;AAEA,OAAM,IAAIjxD,IAAIg4B,SAAUpL,KAAV,CAAd,EAAiC5sB,IAAIg4B,SAAUhL,GAAV,CAArC,EAAsDhtB,GAAtD,EAA6D;;AAE5DixD,aAAUD,QAAQb,OAAR,CAAiB,UAAjB,EAA6B,OAAOnwD,CAAP,GAAW,IAAxC,CAAV;AAEA;;AAED,SAAOixD,MAAP;AAEA;;AAED,QAAOt5B,OAAOw4B,OAAP,CAAgBU,OAAhB,EAAyBV,OAAzB,CAAP;AAEA;;AAED,SAASe,YAAT,CAAuBvQ,QAAvB,EAAiC5H,UAAjC,EAA6CoY,IAA7C,EAAmDvqB,QAAnD,EAA6D4nB,MAA7D,EAAqE9nB,UAArE,EAAkF;;AAEjF,KAAIpH,KAAKqhB,SAAS/7B,OAAlB;;AAEA,KAAIi0B,UAAUjS,SAASiS,OAAvB;;AAEA,KAAInb,eAAe8wB,OAAO9wB,YAA1B;AACA,KAAIC,iBAAiB6wB,OAAO7wB,cAA5B;;AAEA,KAAIyzB,sBAAsB,sBAA1B;;AAEA,KAAK1qB,WAAW2qB,aAAX,KAA6BvwD,YAAlC,EAAiD;;AAEhDswD,wBAAsB,oBAAtB;AAEA,EAJD,MAIO,IAAK1qB,WAAW2qB,aAAX,KAA6BtwD,gBAAlC,EAAqD;;AAE3DqwD,wBAAsB,yBAAtB;AAEA;;AAED,KAAIE,mBAAmB,kBAAvB;AACA,KAAIC,mBAAmB,wBAAvB;AACA,KAAIC,uBAAuB,0BAA3B;;AAEA,KAAK9qB,WAAW7M,MAAhB,EAAyB;;AAExB,UAAS+M,SAAS/M,MAAT,CAAgBnX,OAAzB;;AAEC,QAAK3e,qBAAL;AACA,QAAKC,qBAAL;AACCstD,uBAAmB,kBAAnB;AACA;;AAED,QAAKltD,uBAAL;AACA,QAAKC,uBAAL;AACCitD,uBAAmB,qBAAnB;AACA;;AAED,QAAKrtD,gCAAL;AACA,QAAKC,gCAAL;AACCotD,uBAAmB,qBAAnB;AACA;;AAED,QAAKntD,0BAAL;AACCmtD,uBAAmB,oBAAnB;AACA;;AAnBF;;AAuBA,UAAS1qB,SAAS/M,MAAT,CAAgBnX,OAAzB;;AAEC,QAAK1e,qBAAL;AACA,QAAKE,gCAAL;AACCqtD,uBAAmB,wBAAnB;AACA;;AALF;;AASA,UAAS3qB,SAAS8R,OAAlB;;AAEC,QAAKp1C,iBAAL;AACCkuD,2BAAuB,0BAAvB;AACA;;AAED,QAAKjuD,YAAL;AACCiuD,2BAAuB,qBAAvB;AACA;;AAED,QAAKhuD,YAAL;AACCguD,2BAAuB,qBAAvB;AACA;;AAZF;AAgBA;;AAED,KAAIC,oBAAsB9Q,SAASxoB,WAAT,GAAuB,CAAzB,GAA+BwoB,SAASxoB,WAAxC,GAAsD,GAA9E;;AAEA;;AAEA;;AAEA,KAAIu5B,mBAAmBnC,mBAAoB3oB,SAASmS,UAA7B,EAAyCrS,UAAzC,EAAqDqS,UAArD,CAAvB;;AAEA,KAAI4Y,gBAAgB9B,gBAAiBhX,OAAjB,CAApB;;AAEA;;AAEA,KAAI2P,UAAUlpB,GAAGsyB,aAAH,EAAd;;AAEA,KAAIC,YAAJ,EAAkBC,cAAlB;;AAEA,KAAKlrB,SAASmrB,mBAAd,EAAoC;;AAEnCF,iBAAe,CAEdF,aAFc,EAIbhC,MAJa,CAILC,eAJK,EAIatB,IAJb,CAImB,IAJnB,CAAf;;AAMA,MAAKuD,aAAalzD,MAAb,GAAsB,CAA3B,EAA+B;;AAE9BkzD,mBAAgB,IAAhB;AAEA;;AAEDC,mBAAiB,CAEhBJ,gBAFgB,EAGhBC,aAHgB,EAKfhC,MALe,CAKPC,eALO,EAKWtB,IALX,CAKiB,IALjB,CAAjB;;AAOA,MAAKwD,eAAenzD,MAAf,GAAwB,CAA7B,EAAiC;;AAEhCmzD,qBAAkB,IAAlB;AAEA;AAED,EA3BD,MA2BO;;AAEND,iBAAe,CAEd,eAAenrB,WAAW6G,SAA1B,GAAsC,SAFxB,EAGd,eAAe7G,WAAW6G,SAA1B,GAAsC,OAHxB,EAKd,yBAAyBihB,OAAOtrC,IALlB,EAOdyuC,aAPc,EASdjrB,WAAWsrB,sBAAX,GAAoC,yBAApC,GAAgE,EATlD,EAWd,0BAA0BP,iBAXZ,EAad,uBAAuB/qB,WAAWurB,QAbpB,EAcZvrB,WAAWwrB,MAAX,IAAqBxrB,WAAWhL,GAAlC,GAA0C,iBAA1C,GAA8D,EAdhD,EAeZgL,WAAWwrB,MAAX,IAAqBxrB,WAAWyrB,MAAlC,GAA6C,kBAA7C,GAAkE,EAfpD,EAiBdzrB,WAAWnN,GAAX,GAAiB,iBAAjB,GAAqC,EAjBvB,EAkBdmN,WAAW7M,MAAX,GAAoB,oBAApB,GAA2C,EAlB7B,EAmBd6M,WAAW7M,MAAX,GAAoB,aAAa03B,gBAAjC,GAAoD,EAnBtC,EAoBd7qB,WAAWpM,QAAX,GAAsB,sBAAtB,GAA+C,EApBjC,EAqBdoM,WAAWvM,KAAX,GAAmB,mBAAnB,GAAyC,EArB3B,EAsBduM,WAAWjM,WAAX,GAAyB,yBAAzB,GAAqD,EAtBvC,EAuBdiM,WAAW/L,OAAX,GAAqB,qBAArB,GAA6C,EAvB/B,EAwBd+L,WAAW5L,SAAX,GAAuB,uBAAvB,GAAiD,EAxBnC,EAyBd4L,WAAWzL,eAAX,IAA8ByL,WAAWsrB,sBAAzC,GAAkE,6BAAlE,GAAkG,EAzBpF,EA0BdtrB,WAAW/M,WAAX,GAAyB,yBAAzB,GAAqD,EA1BvC,EA2Bd+M,WAAWrL,YAAX,GAA0B,0BAA1B,GAAuD,EA3BzC,EA4BdqL,WAAWnL,YAAX,GAA0B,0BAA1B,GAAuD,EA5BzC,EA6BdmL,WAAWjN,QAAX,GAAsB,sBAAtB,GAA+C,EA7BjC,EA8BdiN,WAAW+B,YAAX,GAA0B,mBAA1B,GAAgD,EA9BlC,EAgCd/B,WAAWuP,WAAX,GAAyB,qBAAzB,GAAiD,EAhCnC,EAkCdvP,WAAW4R,QAAX,GAAsB,sBAAtB,GAA+C,EAlCjC,EAmCd5R,WAAW0rB,gBAAX,GAA8B,sBAA9B,GAAuD,EAnCzC,EAqCd1rB,WAAWqC,YAAX,GAA0B,0BAA1B,GAAuD,EArCzC,EAsCdrC,WAAWsC,YAAX,IAA2BtC,WAAWuP,WAAX,KAA2B,KAAtD,GAA8D,0BAA9D,GAA2F,EAtC7E,EAuCdvP,WAAW2rB,WAAX,GAAyB,sBAAzB,GAAkD,EAvCpC,EAwCd3rB,WAAW4rB,SAAX,GAAuB,oBAAvB,GAA8C,EAxChC,EA0Cd5rB,WAAW6rB,gBAAX,GAA8B,uBAA9B,GAAwD,EA1C1C,EA2Cd7rB,WAAW6rB,gBAAX,GAA8B,aAAanB,mBAA3C,GAAiE,EA3CnD,EA6Cd1qB,WAAWqR,eAAX,GAA6B,6BAA7B,GAA6D,EA7C/C,EA+CdrR,WAAW6c,sBAAX,GAAoC,yBAApC,GAAgE,EA/ClD,EAgDd7c,WAAW6c,sBAAX,IAAqCxK,WAAW76C,GAAX,CAAgB,gBAAhB,CAArC,GAA0E,6BAA1E,GAA0G,EAhD5F,EAkDd,2BAlDc,EAmDd,+BAnDc,EAoDd,gCApDc,EAqDd,0BArDc,EAsDd,4BAtDc,EAuDd,8BAvDc,EAyDd,0BAzDc,EA0Dd,wBA1Dc,EA2Dd,oBA3Dc,EA6Dd,kBA7Dc,EA+Dd,wBA/Dc,EAiEd,QAjEc,EAmEd,yBAnEc,EAqEd,+BArEc,EAsEd,+BAtEc,EAuEd,+BAvEc,EAwEd,+BAxEc,EA0Ed,0BA1Ec,EA4Ed,gCA5Ec,EA6Ed,gCA7Ec,EA8Ed,gCA9Ec,EA+Ed,gCA/Ec,EAiFd,QAjFc,EAmFd,gCAnFc,EAoFd,gCApFc,EAqFd,gCArFc,EAsFd,gCAtFc,EAwFd,SAxFc,EA0Fd,QA1Fc,EA4Fd,qBA5Fc,EA8Fd,4BA9Fc,EA+Fd,6BA/Fc,EAiGd,QAjGc,EAmGd,IAnGc,EAqGbyxD,MArGa,CAqGLC,eArGK,EAqGatB,IArGb,CAqGmB,IArGnB,CAAf;;AAuGAwD,mBAAiB,CAEhBJ,gBAFgB,EAIhB,eAAehrB,WAAW6G,SAA1B,GAAsC,SAJtB,EAKhB,eAAe7G,WAAW6G,SAA1B,GAAsC,OALtB,EAOhB,yBAAyBihB,OAAOtrC,IAPhB,EAShByuC,aATgB,EAWhBjrB,WAAW2Q,SAAX,GAAuB,uBAAuB3Q,WAAW2Q,SAAzD,GAAqE,EAXrD,EAahB,0BAA0Boa,iBAbV,EAed/qB,WAAWwrB,MAAX,IAAqBxrB,WAAWhL,GAAlC,GAA0C,iBAA1C,GAA8D,EAf9C,EAgBdgL,WAAWwrB,MAAX,IAAqBxrB,WAAWyrB,MAAlC,GAA6C,kBAA7C,GAAkE,EAhBlD,EAkBhBzrB,WAAWnN,GAAX,GAAiB,iBAAjB,GAAqC,EAlBrB,EAmBhBmN,WAAW7M,MAAX,GAAoB,oBAApB,GAA2C,EAnB3B,EAoBhB6M,WAAW7M,MAAX,GAAoB,aAAay3B,gBAAjC,GAAoD,EApBpC,EAqBhB5qB,WAAW7M,MAAX,GAAoB,aAAa03B,gBAAjC,GAAoD,EArBpC,EAsBhB7qB,WAAW7M,MAAX,GAAoB,aAAa23B,oBAAjC,GAAwD,EAtBxC,EAuBhB9qB,WAAWpM,QAAX,GAAsB,sBAAtB,GAA+C,EAvB/B,EAwBhBoM,WAAWvM,KAAX,GAAmB,mBAAnB,GAAyC,EAxBzB,EAyBhBuM,WAAWjM,WAAX,GAAyB,yBAAzB,GAAqD,EAzBrC,EA0BhBiM,WAAW/L,OAAX,GAAqB,qBAArB,GAA6C,EA1B7B,EA2BhB+L,WAAW5L,SAAX,GAAuB,uBAAvB,GAAiD,EA3BjC,EA4BhB4L,WAAW/M,WAAX,GAAyB,yBAAzB,GAAqD,EA5BrC,EA6BhB+M,WAAWrL,YAAX,GAA0B,0BAA1B,GAAuD,EA7BvC,EA8BhBqL,WAAWnL,YAAX,GAA0B,0BAA1B,GAAuD,EA9BvC,EA+BhBmL,WAAWjN,QAAX,GAAsB,sBAAtB,GAA+C,EA/B/B,EAgChBiN,WAAW+B,YAAX,GAA0B,mBAA1B,GAAgD,EAhChC,EAkChB/B,WAAWjL,WAAX,GAAyB,yBAAzB,GAAqD,EAlCrC,EAoChBiL,WAAWuP,WAAX,GAAyB,qBAAzB,GAAiD,EApCjC,EAsChBvP,WAAW2rB,WAAX,GAAyB,sBAAzB,GAAkD,EAtClC,EAuChB3rB,WAAW4rB,SAAX,GAAuB,oBAAvB,GAA8C,EAvC9B,EAyChB5rB,WAAW6rB,gBAAX,GAA8B,uBAA9B,GAAwD,EAzCxC,EA0ChB7rB,WAAW6rB,gBAAX,GAA8B,aAAanB,mBAA3C,GAAiE,EA1CjD,EA4ChB1qB,WAAW4Q,kBAAX,GAAgC,6BAAhC,GAAgE,EA5ChD,EA8ChB5Q,WAAW8rB,uBAAX,GAAqC,mCAArC,GAA2E,EA9C3D,EAgDhB9rB,WAAW6c,sBAAX,GAAoC,yBAApC,GAAgE,EAhDhD,EAiDhB7c,WAAW6c,sBAAX,IAAqCxK,WAAW76C,GAAX,CAAgB,gBAAhB,CAArC,GAA0E,6BAA1E,GAA0G,EAjD1F,EAmDhBwoC,WAAW7M,MAAX,IAAqBkf,WAAW76C,GAAX,CAAgB,wBAAhB,CAArB,GAAkE,yBAAlE,GAA8F,EAnD9E,EAqDhB,0BArDgB,EAsDhB,8BAtDgB,EAwDdwoC,WAAW2oB,WAAX,KAA2B5rD,aAA7B,GAA+C,sBAA/C,GAAwE,EAxDxD,EAyDdijC,WAAW2oB,WAAX,KAA2B5rD,aAA7B,GAA+C4yB,YAAa,2BAAb,CAA/C,GAA4F,EAzD5E,EAyDgF;AAC9FqQ,aAAW2oB,WAAX,KAA2B5rD,aAA7B,GAA+C2rD,uBAAwB,aAAxB,EAAuC1oB,WAAW2oB,WAAlD,CAA/C,GAAiH,EA1DjG,EA4DhB3oB,WAAW0Q,SAAX,GAAuB,mBAAvB,GAA6C,EA5D7B,EA8Dd1Q,WAAW+rB,cAAX,IAA6B/rB,WAAWgsB,WAAxC,IAAuDhsB,WAAWisB,cAAlE,IAAoFjsB,WAAWksB,mBAAjG,GAAyHv8B,YAAa,yBAAb,CAAzH,GAAoK,EA9DpJ,EA8DwJ;AACxKqQ,aAAWgsB,WAAX,GAAyBzD,yBAA0B,kBAA1B,EAA8CvoB,WAAWgsB,WAAzD,CAAzB,GAAkG,EA/DlF,EAgEhBhsB,WAAWisB,cAAX,GAA4B1D,yBAA0B,qBAA1B,EAAiDvoB,WAAWisB,cAA5D,CAA5B,GAA2G,EAhE3F,EAiEhBjsB,WAAWksB,mBAAX,GAAiC3D,yBAA0B,0BAA1B,EAAsDvoB,WAAWksB,mBAAjE,CAAjC,GAA0H,EAjE1G,EAkEhBlsB,WAAW+rB,cAAX,GAA4BtD,yBAA0B,qBAA1B,EAAiDzoB,WAAW+rB,cAA5D,CAA5B,GAA2G,EAlE3F,EAoEhB/rB,WAAWmsB,YAAX,GAA0B,2BAA2BjsB,SAASisB,YAA9D,GAA6E,EApE7D,EAsEhB,IAtEgB,EAwEflD,MAxEe,CAwEPC,eAxEO,EAwEWtB,IAxEX,CAwEiB,IAxEjB,CAAjB;AA0EA;;AAED5wB,gBAAekzB,cAAelzB,YAAf,CAAf;AACAA,gBAAewyB,iBAAkBxyB,YAAlB,EAAgCgJ,UAAhC,CAAf;AACAhJ,gBAAe+yB,yBAA0B/yB,YAA1B,EAAwCgJ,UAAxC,CAAf;;AAEA/I,kBAAiBizB,cAAejzB,cAAf,CAAjB;AACAA,kBAAiBuyB,iBAAkBvyB,cAAlB,EAAkC+I,UAAlC,CAAjB;AACA/I,kBAAiB8yB,yBAA0B9yB,cAA1B,EAA0C+I,UAA1C,CAAjB;;AAEAhJ,gBAAeqzB,YAAarzB,YAAb,CAAf;AACAC,kBAAiBozB,YAAapzB,cAAb,CAAjB;;AAEA,KAAIm1B,aAAajB,eAAen0B,YAAhC;AACA,KAAIq1B,eAAejB,iBAAiBn0B,cAApC;;AAEA;AACA;;AAEA,KAAIq1B,iBAAiBzE,YAAajvB,EAAb,EAAiBA,GAAG4jB,aAApB,EAAmC4P,UAAnC,CAArB;AACA,KAAIG,mBAAmB1E,YAAajvB,EAAb,EAAiBA,GAAG8jB,eAApB,EAAqC2P,YAArC,CAAvB;;AAEAzzB,IAAG4zB,YAAH,CAAiB1K,OAAjB,EAA0BwK,cAA1B;AACA1zB,IAAG4zB,YAAH,CAAiB1K,OAAjB,EAA0ByK,gBAA1B;;AAEA;;AAEA,KAAKrsB,SAASyS,mBAAT,KAAiCh8C,SAAtC,EAAkD;;AAEjDiiC,KAAG6zB,kBAAH,CAAuB3K,OAAvB,EAAgC,CAAhC,EAAmC5hB,SAASyS,mBAA5C;AAEA,EAJD,MAIO,IAAK3S,WAAWqC,YAAX,KAA4B,IAAjC,EAAwC;;AAE9C;AACAzJ,KAAG6zB,kBAAH,CAAuB3K,OAAvB,EAAgC,CAAhC,EAAmC,UAAnC;AAEA;;AAEDlpB,IAAG8zB,WAAH,CAAgB5K,OAAhB;;AAEA,KAAI6K,aAAa/zB,GAAGg0B,iBAAH,CAAsB9K,OAAtB,EAAgC+K,IAAhC,EAAjB;AACA,KAAIC,YAAYl0B,GAAGwvB,gBAAH,CAAqBkE,cAArB,EAAsCO,IAAtC,EAAhB;AACA,KAAIE,cAAcn0B,GAAGwvB,gBAAH,CAAqBmE,gBAArB,EAAwCM,IAAxC,EAAlB;;AAEA,KAAIG,WAAW,IAAf;AACA,KAAIC,kBAAkB,IAAtB;;AAEA;AACA;;AAEA,KAAKr0B,GAAGuuB,mBAAH,CAAwBrF,OAAxB,EAAiClpB,GAAGs0B,WAApC,MAAsD,KAA3D,EAAmE;;AAElEF,aAAW,KAAX;;AAEA5mD,UAAQyD,KAAR,CAAe,oCAAf,EAAqD+uB,GAAGu0B,QAAH,EAArD,EAAoE,oBAApE,EAA0Fv0B,GAAGuuB,mBAAH,CAAwBrF,OAAxB,EAAiClpB,GAAGw0B,eAApC,CAA1F,EAAiJ,sBAAjJ,EAAyKT,UAAzK,EAAqLG,SAArL,EAAgMC,WAAhM;AAEA,EAND,MAMO,IAAKJ,eAAe,EAApB,EAAyB;;AAE/BvmD,UAAQC,IAAR,CAAc,4CAAd,EAA4DsmD,UAA5D;AAEA,EAJM,MAIA,IAAKG,cAAc,EAAd,IAAoBC,gBAAgB,EAAzC,EAA8C;;AAEpDE,oBAAkB,KAAlB;AAEA;;AAED,KAAKA,eAAL,EAAuB;;AAEtB,OAAKI,WAAL,GAAmB;;AAElBL,aAAUA,QAFQ;AAGlB9sB,aAAUA,QAHQ;;AAKlBysB,eAAYA,UALM;;AAOlB31B,iBAAc;;AAEbhyB,SAAK8nD,SAFQ;AAGbQ,YAAQnC;;AAHK,IAPI;;AAclBl0B,mBAAgB;;AAEfjyB,SAAK+nD,WAFU;AAGfO,YAAQlC;;AAHO;;AAdE,GAAnB;AAuBA;;AAED;;AAEAxyB,IAAG20B,YAAH,CAAiBjB,cAAjB;AACA1zB,IAAG20B,YAAH,CAAiBhB,gBAAjB;;AAEA;;AAEA,KAAIiB,cAAJ;;AAEA,MAAKvL,WAAL,GAAmB,YAAY;;AAE9B,MAAKuL,mBAAmB72D,SAAxB,EAAoC;;AAEnC62D,oBAAiB,IAAItG,aAAJ,CAAmBtuB,EAAnB,EAAuBkpB,OAAvB,EAAgC7H,QAAhC,CAAjB;AAEA;;AAED,SAAOuT,cAAP;AAEA,EAVD;;AAYA;;AAEA,KAAIC,gBAAJ;;AAEA,MAAKC,aAAL,GAAqB,YAAY;;AAEhC,MAAKD,qBAAqB92D,SAA1B,EAAsC;;AAErC82D,sBAAmBrE,wBAAyBxwB,EAAzB,EAA6BkpB,OAA7B,CAAnB;AAEA;;AAED,SAAO2L,gBAAP;AAEA,EAVD;;AAYA;;AAEA,MAAKE,OAAL,GAAe,YAAY;;AAE1B/0B,KAAGg1B,aAAH,CAAkB9L,OAAlB;AACA,OAAKA,OAAL,GAAenrD,SAAf;AAEA,EALD;;AAOA;;AAEAW,QAAO8N,gBAAP,CAAyB,IAAzB,EAA+B;;AAE9B0qB,YAAU;AACTt4B,QAAK,YAAY;;AAEhB4O,YAAQC,IAAR,CAAc,sDAAd;AACA,WAAO,KAAK47C,WAAL,EAAP;AAEA;AANQ,GAFoB;;AAW9Bn/B,cAAY;AACXtrB,QAAK,YAAY;;AAEhB4O,YAAQC,IAAR,CAAc,0DAAd;AACA,WAAO,KAAKqnD,aAAL,EAAP;AAEA;AANU;;AAXkB,EAA/B;;AAuBA;;AAEA,MAAKlxC,IAAL,GAAYsrC,OAAOtrC,IAAnB;AACA,MAAKoiB,EAAL,GAAUypB,gBAAV;AACA,MAAKoC,IAAL,GAAYA,IAAZ;AACA,MAAKoD,SAAL,GAAiB,CAAjB;AACA,MAAK/L,OAAL,GAAeA,OAAf;AACA,MAAK9qB,YAAL,GAAoBs1B,cAApB;AACA,MAAKr1B,cAAL,GAAsBs1B,gBAAtB;;AAEA,QAAO,IAAP;AAEA;;AAED;;;;AAIA,SAASuB,aAAT,CAAwB7T,QAAxB,EAAkC5H,UAAlC,EAA8C0b,YAA9C,EAA6D;;AAE5D,KAAItM,WAAW,EAAf;;AAEA,KAAIuM,YAAY;AACfC,qBAAmB,OADJ;AAEfC,wBAAsB,cAFP;AAGfC,sBAAoB,QAHL;AAIfpc,qBAAmB,OAJJ;AAKfqc,uBAAqB,SALN;AAMfC,qBAAmB,OANJ;AAOfC,oBAAkB,OAPH;AAQfC,wBAAsB,UARP;AASfC,wBAAsB,UATP;AAUfC,qBAAmB,OAVJ;AAWfC,sBAAoB,QAXL;AAYfC,kBAAgB,QAZD;AAafC,kBAAgB;AAbD,EAAhB;;AAgBA,KAAIC,iBAAiB,CACpB,WADoB,EACP,wBADO,EACmB,KADnB,EAC0B,aAD1B,EACyC,QADzC,EACmD,YADnD,EACiE,gBADjE,EAEpB,UAFoB,EAER,OAFQ,EAEC,aAFD,EAEgB,qBAFhB,EAEuC,SAFvC,EAEkD,WAFlD,EAE+D,iBAF/D,EAEkF,aAFlF,EAGpB,cAHoB,EAGJ,cAHI,EAGY,aAHZ,EAIpB,UAJoB,EAIR,SAJQ,EAIG,cAJH,EAImB,KAJnB,EAI0B,QAJ1B,EAIoC,QAJpC,EAKpB,aALoB,EAKL,iBALK,EAKc,wBALd,EAKwC,UALxC,EAMpB,UANoB,EAMR,kBANQ,EAMY,cANZ,EAM4B,cAN5B,EAOpB,iBAPoB,EAOD,iBAPC,EAOkB,oBAPlB,EAQpB,cARoB,EAQJ,gBARI,EAQc,eARd,EAQ+B,eAR/B,EAQgD,mBARhD,EASpB,kBAToB,EASA,eATA,EASiB,aATjB,EASgC,yBAThC,EAUpB,WAVoB,EAUP,aAVO,EAUQ,WAVR,EAUqB,mBAVrB,EAU0C,qBAV1C,EAUiE,cAVjE,EAUiF,WAVjF,CAArB;;AAcA,UAASC,aAAT,CAAwBhtC,MAAxB,EAAiC;;AAEhC,MAAIitC,WAAWjtC,OAAOitC,QAAtB;AACA,MAAIC,QAAQD,SAASC,KAArB;;AAEA,MAAKjB,aAAa/P,mBAAlB,EAAwC;;AAEvC,UAAO,IAAP;AAEA,GAJD,MAIO;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAIiR,kBAAkBlB,aAAavQ,iBAAnC;AACA,OAAI0R,kBAAkBt4D,KAAKK,KAAL,CAAY,CAAEg4D,kBAAkB,EAApB,IAA2B,CAAvC,CAAtB;;AAEA,OAAI1D,WAAW30D,KAAKwM,GAAL,CAAU8rD,eAAV,EAA2BF,MAAM/2D,MAAjC,CAAf;;AAEA,OAAKszD,WAAWyD,MAAM/2D,MAAtB,EAA+B;;AAE9BmO,YAAQC,IAAR,CAAc,uCAAuC2oD,MAAM/2D,MAA7C,GAAsD,4BAAtD,GAAqFszD,QAArF,GAAgG,GAA9G;AACA,WAAO,CAAP;AAEA;;AAED,UAAOA,QAAP;AAEA;AAED;;AAED,UAAS4D,yBAAT,CAAoCt8B,GAApC,EAAyCu8B,mBAAzC,EAA+D;;AAE9D,MAAI7yC,QAAJ;;AAEA,MAAK,CAAEsW,GAAP,EAAa;;AAEZtW,cAAW3a,cAAX;AAEA,GAJD,MAIO,IAAKixB,IAAIxV,SAAT,EAAqB;;AAE3Bd,cAAWsW,IAAItW,QAAf;AAEA,GAJM,MAIA,IAAKsW,IAAI5S,mBAAT,EAA+B;;AAErC7Z,WAAQC,IAAR,CAAc,2HAAd;AACAkW,cAAWsW,IAAIhT,OAAJ,CAAYtD,QAAvB;AAEA;;AAED;AACA,MAAKA,aAAa3a,cAAb,IAA+BwtD,mBAApC,EAA0D;;AAEzD7yC,cAAWza,aAAX;AAEA;;AAED,SAAOya,QAAP;AAEA;;AAED,MAAK8yC,aAAL,GAAqB,UAAWnvB,QAAX,EAAqB7K,MAArB,EAA6Bi6B,OAA7B,EAAsCt6B,GAAtC,EAA2Cu6B,WAA3C,EAAwDC,iBAAxD,EAA2E1tC,MAA3E,EAAoF;;AAExG,MAAI2tC,WAAWzB,UAAW9tB,SAAS1nC,IAApB,CAAf;;AAEA;AACA;;AAEA,MAAI+yD,WAAWzpC,OAAO4tC,aAAP,GAAuBZ,cAAehtC,MAAf,CAAvB,GAAiD,CAAhE;AACA,MAAI+kB,YAAYknB,aAAalnB,SAA7B;;AAEA,MAAK3G,SAAS2G,SAAT,KAAuB,IAA5B,EAAmC;;AAElCA,eAAYknB,aAAazR,eAAb,CAA8Bpc,SAAS2G,SAAvC,CAAZ;;AAEA,OAAKA,cAAc3G,SAAS2G,SAA5B,EAAwC;;AAEvCzgC,YAAQC,IAAR,CAAc,mCAAd,EAAmD65B,SAAS2G,SAA5D,EAAuE,sBAAvE,EAA+FA,SAA/F,EAA0G,UAA1G;AAEA;AAED;;AAED,MAAI8oB,sBAAsB1V,SAAS2V,eAAT,EAA1B;;AAEA,MAAI5vB,aAAa;;AAEhByvB,aAAUA,QAFM;;AAIhB5oB,cAAWA,SAJK;AAKhBykB,2BAAwByC,aAAajQ,cALrB;AAMhBiO,mBAAgBoD,0BAA6B,CAAEQ,mBAAJ,GAA4B,IAA5B,GAAmCA,oBAAoB9vC,OAAlF,EAA2Fo6B,SAAS4V,WAApG,CANA;AAOhBh9B,QAAK,CAAC,CAAEqN,SAASrN,GAPD;AAQhBm5B,gBAAamD,0BAA2BjvB,SAASrN,GAApC,EAAyConB,SAAS6V,UAAlD,CARG;AAShB38B,WAAQ,CAAC,CAAE+M,SAAS/M,MATJ;AAUhB48B,eAAY7vB,SAAS/M,MAAT,IAAmB+M,SAAS/M,MAAT,CAAgBnX,OAV/B;AAWhBiwC,mBAAgBkD,0BAA2BjvB,SAAS/M,MAApC,EAA4C8mB,SAAS6V,UAArD,CAXA;AAYhB9G,iBAAgB,CAAC,CAAE9oB,SAAS/M,MAAd,KAA8B+M,SAAS/M,MAAT,CAAgBnX,OAAhB,KAA4Bte,uBAA9B,IAA6DwiC,SAAS/M,MAAT,CAAgBnX,OAAhB,KAA4Bre,uBAArH,CAZE;AAahBi2B,aAAU,CAAC,CAAEsM,SAAStM,QAbN;AAchBH,UAAO,CAAC,CAAEyM,SAASzM,KAdH;AAehBM,gBAAa,CAAC,CAAEmM,SAASnM,WAfT;AAgBhBm4B,wBAAqBiD,0BAA2BjvB,SAASnM,WAApC,EAAiDkmB,SAAS6V,UAA1D,CAhBL;AAiBhB77B,YAAS,CAAC,CAAEiM,SAASjM,OAjBL;AAkBhBG,cAAW,CAAC,CAAE8L,SAAS9L,SAlBP;AAmBhBG,oBAAiB,CAAC,CAAE2L,SAAS3L,eAnBb;AAoBhBI,iBAAc,CAAC,CAAEuL,SAASvL,YApBV;AAqBhBE,iBAAc,CAAC,CAAEqL,SAASrL,YArBV;AAsBhB5B,gBAAa,CAAC,CAAEiN,SAASjN,WAtBT;AAuBhBF,aAAU,CAAC,CAAEmN,SAASnN,QAvBN;;AAyBhBgC,gBAAa,CAAC,CAAEmL,SAASnL,WAzBT;;AA2BhBid,YAAS9R,SAAS8R,OA3BF;;AA6BhBjQ,iBAAc7B,SAAS6B,YA7BP;;AA+BhB/M,QAAK,CAAC,CAAEA,GA/BQ;AAgChBw2B,WAAQtrB,SAASlL,GAhCD;AAiChBy2B,WAAUz2B,OAAOA,IAAIg7B,SAjCL;;AAmChBzgB,gBAAarP,SAASqP,WAnCN;;AAqChB8B,oBAAiBnR,SAASmR,eArCV;AAsChBwL,2BAAwBkR,aAAalR,sBAtCrB;;AAwChBjL,aAAU1R,SAAS0R,QAAT,IAAqB2Z,WAAW,CAxC1B;AAyChBA,aAAUA,QAzCM;AA0ChBG,qBAAkBqC,aAAa/P,mBA1Cf;;AA4ChB3b,iBAAcnC,SAASmC,YA5CP;AA6ChBC,iBAAcpC,SAASoC,YA7CP;AA8ChB2tB,oBAAiBhW,SAASgW,eA9CV;AA+ChBC,oBAAiBjW,SAASiW,eA/CV;;AAiDhBxG,iBAAcr0B,OAAO86B,WAAP,CAAmBl4D,MAjDjB;AAkDhB4xD,mBAAgBx0B,OAAOjT,KAAP,CAAanqB,MAlDb;AAmDhB0xD,kBAAet0B,OAAO+6B,IAAP,CAAYn4D,MAnDX;AAoDhB2xD,sBAAmBv0B,OAAOg7B,QAAP,CAAgBp4D,MApDnB;AAqDhB6xD,kBAAez0B,OAAOi7B,IAAP,CAAYr4D,MArDX;;AAuDhB+xD,sBAAmBuF,WAvDH;AAwDhBtF,wBAAqBuF,iBAxDL;;AA0DhB9e,cAAWxQ,SAASwQ,SA1DJ;;AA4DhBmb,qBAAkB5R,SAASsW,SAAT,CAAmBnvB,OAAnB,IAA8Btf,OAAOob,aAArC,IAAsDoyB,QAAQr3D,MAAR,GAAiB,CA5DzE;AA6DhB0yD,kBAAe1Q,SAASsW,SAAT,CAAmB/3D,IA7DlB;;AA+DhBmwD,gBAAa1O,SAAS0O,WA/DN;AAgEhBmD,4BAAyB7R,SAAS6R,uBAhElB;;AAkEhBlb,uBAAoB1Q,SAAS0Q,kBAlEb;;AAoEhBD,cAAWzQ,SAASyQ,SApEJ;AAqEhBgb,gBAAazrB,SAASoP,IAAT,KAAkB90C,UArEf;AAsEhBoxD,cAAW1rB,SAASoP,IAAT,KAAkB/0C,QAtEb;;AAwEhB4xD,iBAAgBjsB,SAASisB,YAAT,KAA0Bx1D,SAA5B,GAA0CupC,SAASisB,YAAnD,GAAkE;;AAxEhE,GAAjB;;AA4EA,SAAOnsB,UAAP;AAEA,EAtGD;;AAwGA,MAAKwwB,cAAL,GAAsB,UAAWtwB,QAAX,EAAqBF,UAArB,EAAkC;;AAEvD,MAAI5mC,QAAQ,EAAZ;;AAEA,MAAK4mC,WAAWyvB,QAAhB,EAA2B;;AAE1Br2D,SAAMP,IAAN,CAAYmnC,WAAWyvB,QAAvB;AAEA,GAJD,MAIO;;AAENr2D,SAAMP,IAAN,CAAYqnC,SAASjJ,cAArB;AACA79B,SAAMP,IAAN,CAAYqnC,SAASlJ,YAArB;AAEA;;AAED,MAAKkJ,SAASiS,OAAT,KAAqBx7C,SAA1B,EAAsC;;AAErC,QAAM,IAAI6lB,IAAV,IAAkB0jB,SAASiS,OAA3B,EAAqC;;AAEpC/4C,UAAMP,IAAN,CAAY2jB,IAAZ;AACApjB,UAAMP,IAAN,CAAYqnC,SAASiS,OAAT,CAAkB31B,IAAlB,CAAZ;AAEA;AAED;;AAED,OAAM,IAAIljB,IAAI,CAAd,EAAiBA,IAAIu1D,eAAe52D,MAApC,EAA4CqB,GAA5C,EAAmD;;AAElDF,SAAMP,IAAN,CAAYmnC,WAAY6uB,eAAgBv1D,CAAhB,CAAZ,CAAZ;AAEA;;AAEDF,QAAMP,IAAN,CAAYqnC,SAAS6Q,eAAT,CAAyBt5C,QAAzB,EAAZ;;AAEA2B,QAAMP,IAAN,CAAYohD,SAAS4V,WAArB;;AAEA,SAAOz2D,MAAMwuD,IAAN,EAAP;AAEA,EAtCD;;AAwCA,MAAK6I,cAAL,GAAsB,UAAWvwB,QAAX,EAAqB4nB,MAArB,EAA6B9nB,UAA7B,EAAyCyqB,IAAzC,EAAgD;;AAErE,MAAI3I,OAAJ;;AAEA;AACA,OAAM,IAAI7tC,IAAI,CAAR,EAAWy8C,KAAKjP,SAASxpD,MAA/B,EAAuCgc,IAAIy8C,EAA3C,EAA+Cz8C,GAA/C,EAAsD;;AAErD,OAAI08C,cAAclP,SAAUxtC,CAAV,CAAlB;;AAEA,OAAK08C,YAAYlG,IAAZ,KAAqBA,IAA1B,EAAiC;;AAEhC3I,cAAU6O,WAAV;AACA,MAAG7O,QAAQ+L,SAAX;;AAEA;AAEA;AAED;;AAED,MAAK/L,YAAYnrD,SAAjB,EAA6B;;AAE5BmrD,aAAU,IAAI0I,YAAJ,CAAkBvQ,QAAlB,EAA4B5H,UAA5B,EAAwCoY,IAAxC,EAA8CvqB,QAA9C,EAAwD4nB,MAAxD,EAAgE9nB,UAAhE,CAAV;AACAyhB,YAAS5oD,IAAT,CAAeipD,OAAf;AAEA;;AAED,SAAOA,OAAP;AAEA,EA7BD;;AA+BA,MAAK8O,cAAL,GAAsB,UAAW9O,OAAX,EAAqB;;AAE1C,MAAK,EAAGA,QAAQ+L,SAAX,KAAyB,CAA9B,EAAkC;;AAEjC;AACA,OAAIv0D,IAAImoD,SAAS7oD,OAAT,CAAkBkpD,OAAlB,CAAR;AACAL,YAAUnoD,CAAV,IAAgBmoD,SAAUA,SAASxpD,MAAT,GAAkB,CAA5B,CAAhB;AACAwpD,YAASoP,GAAT;;AAEA;AACA/O,WAAQ6L,OAAR;AAEA;AAED,EAdD;;AAgBA;AACA,MAAKlM,QAAL,GAAgBA,QAAhB;AAEA;;AAED;;;;AAIA,SAASqP,eAAT,GAA2B;;AAE1B,KAAIt7B,aAAa,IAAIsD,OAAJ,EAAjB;;AAEA,UAASthC,GAAT,CAAcsqB,MAAd,EAAuB;;AAEtB,MAAI+Q,MAAM2C,WAAWh+B,GAAX,CAAgBsqB,MAAhB,CAAV;;AAEA,MAAK+Q,QAAQl8B,SAAb,EAAyB;;AAExBk8B,SAAM,EAAN;AACA2C,cAAWnwB,GAAX,CAAgByc,MAAhB,EAAwB+Q,GAAxB;AAEA;;AAED,SAAOA,GAAP;AAEA;;AAED,UAASkI,MAAT,CAAiBjZ,MAAjB,EAA0B;;AAEzB0T,aAAWyF,MAAX,CAAmBnZ,MAAnB;AAEA;;AAED,UAASlM,MAAT,CAAiBkM,MAAjB,EAAyBye,GAAzB,EAA8BxpC,KAA9B,EAAsC;;AAErCy+B,aAAWh+B,GAAX,CAAgBsqB,MAAhB,EAA0Bye,GAA1B,IAAkCxpC,KAAlC;AAEA;;AAED,UAAS8nB,OAAT,GAAmB;;AAElB2W,eAAa,IAAIsD,OAAJ,EAAb;AAEA;;AAED,QAAO;AACNthC,OAAKA,GADC;AAENujC,UAAQA,MAFF;AAGNnlB,UAAQA,MAHF;AAINiJ,WAASA;AAJH,EAAP;AAOA;;AAED;;;;AAIA,SAASkyC,iBAAT,CAA4BtqD,CAA5B,EAA+BC,CAA/B,EAAmC;;AAElC,KAAKD,EAAE22B,WAAF,KAAkB12B,EAAE02B,WAAzB,EAAuC;;AAEtC,SAAO32B,EAAE22B,WAAF,GAAgB12B,EAAE02B,WAAzB;AAEA,EAJD,MAIO,IAAK32B,EAAEq7C,OAAF,IAAap7C,EAAEo7C,OAAf,IAA0Br7C,EAAEq7C,OAAF,KAAcp7C,EAAEo7C,OAA/C,EAAyD;;AAE/D,SAAOr7C,EAAEq7C,OAAF,CAAUljB,EAAV,GAAel4B,EAAEo7C,OAAF,CAAUljB,EAAhC;AAEA,EAJM,MAIA,IAAKn4B,EAAEy5B,QAAF,CAAWtB,EAAX,KAAkBl4B,EAAEw5B,QAAF,CAAWtB,EAAlC,EAAuC;;AAE7C,SAAOn4B,EAAEy5B,QAAF,CAAWtB,EAAX,GAAgBl4B,EAAEw5B,QAAF,CAAWtB,EAAlC;AAEA,EAJM,MAIA,IAAKn4B,EAAEgF,CAAF,KAAQ/E,EAAE+E,CAAf,EAAmB;;AAEzB,SAAOhF,EAAEgF,CAAF,GAAM/E,EAAE+E,CAAf;AAEA,EAJM,MAIA;;AAEN,SAAOhF,EAAEm4B,EAAF,GAAOl4B,EAAEk4B,EAAhB;AAEA;AAED;;AAED,SAASoyB,wBAAT,CAAmCvqD,CAAnC,EAAsCC,CAAtC,EAA0C;;AAEzC,KAAKD,EAAE22B,WAAF,KAAkB12B,EAAE02B,WAAzB,EAAuC;;AAEtC,SAAO32B,EAAE22B,WAAF,GAAgB12B,EAAE02B,WAAzB;AAEA,EAAC,IAAK32B,EAAEgF,CAAF,KAAQ/E,EAAE+E,CAAf,EAAmB;;AAEpB,SAAO/E,EAAE+E,CAAF,GAAMhF,EAAEgF,CAAf;AAEA,EAJC,MAIK;;AAEN,SAAOhF,EAAEm4B,EAAF,GAAOl4B,EAAEk4B,EAAhB;AAEA;AAED;;AAED,SAASqyB,eAAT,GAA2B;;AAE1B,KAAIC,cAAc,EAAlB;AACA,KAAIC,mBAAmB,CAAvB;;AAEA,KAAIC,SAAS,EAAb;AACA,KAAI5hB,cAAc,EAAlB;;AAEA,UAASkP,IAAT,GAAgB;;AAEfyS,qBAAmB,CAAnB;;AAEAC,SAAOn5D,MAAP,GAAgB,CAAhB;AACAu3C,cAAYv3C,MAAZ,GAAqB,CAArB;AAEA;;AAED,UAASY,IAAT,CAAeipB,MAAf,EAAuBY,QAAvB,EAAiCwd,QAAjC,EAA2Cz0B,CAA3C,EAA8C04B,KAA9C,EAAsD;;AAErD,MAAIktB,aAAaH,YAAaC,gBAAb,CAAjB;;AAEA,MAAKE,eAAe16D,SAApB,EAAgC;;AAE/B06D,gBAAa;AACZzyB,QAAI9c,OAAO8c,EADC;AAEZ9c,YAAQA,MAFI;AAGZY,cAAUA,QAHE;AAIZwd,cAAUA,QAJE;AAKZ4hB,aAAS5hB,SAAS4hB,OALN;AAMZ1kB,iBAAatb,OAAOsb,WANR;AAOZ3xB,OAAGA,CAPS;AAQZ04B,WAAOA;AARK,IAAb;;AAWA+sB,eAAaC,gBAAb,IAAkCE,UAAlC;AAEA,GAfD,MAeO;;AAENA,cAAWzyB,EAAX,GAAgB9c,OAAO8c,EAAvB;AACAyyB,cAAWvvC,MAAX,GAAoBA,MAApB;AACAuvC,cAAW3uC,QAAX,GAAsBA,QAAtB;AACA2uC,cAAWnxB,QAAX,GAAsBA,QAAtB;AACAmxB,cAAWvP,OAAX,GAAqB5hB,SAAS4hB,OAA9B;AACAuP,cAAWj0B,WAAX,GAAyBtb,OAAOsb,WAAhC;AACAi0B,cAAW5lD,CAAX,GAAeA,CAAf;AACA4lD,cAAWltB,KAAX,GAAmBA,KAAnB;AAEA;;AAED,GAAEjE,SAASsP,WAAT,KAAyB,IAAzB,GAAgCA,WAAhC,GAA8C4hB,MAAhD,EAAyDv4D,IAAzD,CAA+Dw4D,UAA/D;;AAEAF;AAEA;;AAED,UAAS/pB,IAAT,GAAgB;;AAEf,MAAKgqB,OAAOn5D,MAAP,GAAgB,CAArB,EAAyBm5D,OAAOhqB,IAAP,CAAa2pB,iBAAb;AACzB,MAAKvhB,YAAYv3C,MAAZ,GAAqB,CAA1B,EAA8Bu3C,YAAYpI,IAAZ,CAAkB4pB,wBAAlB;AAE9B;;AAED,QAAO;AACNI,UAAQA,MADF;AAEN5hB,eAAaA,WAFP;;AAINkP,QAAMA,IAJA;AAKN7lD,QAAMA,IALA;;AAONuuC,QAAMA;AAPA,EAAP;AAUA;;AAED,SAASkqB,gBAAT,GAA4B;;AAE3B,KAAIC,QAAQ,EAAZ;;AAEA,UAAS/5D,GAAT,CAAckjD,KAAd,EAAqBrhC,MAArB,EAA8B;;AAE7B,MAAIivB,OAAOoS,MAAM9b,EAAN,GAAW,GAAX,GAAiBvlB,OAAOulB,EAAnC;AACA,MAAI4yB,OAAOD,MAAOjpB,IAAP,CAAX;;AAEA,MAAKkpB,SAAS76D,SAAd,EAA0B;;AAEzB;;AAEA66D,UAAO,IAAIP,eAAJ,EAAP;AACAM,SAAOjpB,IAAP,IAAgBkpB,IAAhB;AAEA;;AAED,SAAOA,IAAP;AAEA;;AAED,UAAS3yC,OAAT,GAAmB;;AAElB0yC,UAAQ,EAAR;AAEA;;AAED,QAAO;AACN/5D,OAAKA,GADC;AAENqnB,WAASA;AAFH,EAAP;AAKA;;AAED;;;;AAIA,SAAS4yC,aAAT,GAAyB;;AAExB,KAAIp8B,SAAS,EAAb;;AAEA,QAAO;;AAEN79B,OAAK,UAAWk6D,KAAX,EAAmB;;AAEvB,OAAKr8B,OAAQq8B,MAAM9yB,EAAd,MAAuBjoC,SAA5B,EAAwC;;AAEvC,WAAO0+B,OAAQq8B,MAAM9yB,EAAd,CAAP;AAEA;;AAED,OAAI9O,QAAJ;;AAEA,WAAS4hC,MAAMl5D,IAAf;;AAEC,SAAK,kBAAL;AACCs3B,gBAAW;AACV/J,iBAAW,IAAIpa,OAAJ,EADD;AAEVylB,aAAO,IAAIZ,KAAJ,EAFG;;AAIViF,cAAQ,KAJE;AAKVC,kBAAY,CALF;AAMVC,oBAAc,CANJ;AAOVC,qBAAe,IAAIzwB,OAAJ;AAPL,MAAX;AASA;;AAED,SAAK,WAAL;AACC2qB,gBAAW;AACVld,gBAAU,IAAIjH,OAAJ,EADA;AAEVoa,iBAAW,IAAIpa,OAAJ,EAFD;AAGVylB,aAAO,IAAIZ,KAAJ,EAHG;AAIV/H,gBAAU,CAJA;AAKVuN,eAAS,CALC;AAMVC,mBAAa,CANH;AAOVC,aAAO,CAPG;;AASVT,cAAQ,KATE;AAUVC,kBAAY,CAVF;AAWVC,oBAAc,CAXJ;AAYVC,qBAAe,IAAIzwB,OAAJ;AAZL,MAAX;AAcA;;AAED,SAAK,YAAL;AACC2qB,gBAAW;AACVld,gBAAU,IAAIjH,OAAJ,EADA;AAEVylB,aAAO,IAAIZ,KAAJ,EAFG;AAGV/H,gBAAU,CAHA;AAIVyN,aAAO,CAJG;;AAMVT,cAAQ,KANE;AAOVC,kBAAY,CAPF;AAQVC,oBAAc,CARJ;AASVC,qBAAe,IAAIzwB,OAAJ,EATL;AAUVmxB,wBAAkB,CAVR;AAWVC,uBAAiB;AAXP,MAAX;AAaA;;AAED,SAAK,iBAAL;AACCzG,gBAAW;AACV/J,iBAAW,IAAIpa,OAAJ,EADD;AAEVgrB,gBAAU,IAAInG,KAAJ,EAFA;AAGVoG,mBAAa,IAAIpG,KAAJ;AAHH,MAAX;AAKA;;AAED,SAAK,eAAL;AACCV,gBAAW;AACVsB,aAAO,IAAIZ,KAAJ,EADG;AAEV5d,gBAAU,IAAIjH,OAAJ,EAFA;AAGVgmD,iBAAW,IAAIhmD,OAAJ,EAHD;AAIVimD,kBAAY,IAAIjmD,OAAJ;AACZ;AALU,MAAX;AAOA;;AA/DF;;AAmEA0pB,UAAQq8B,MAAM9yB,EAAd,IAAqB9O,QAArB;;AAEA,UAAOA,QAAP;AAEA;;AAnFK,EAAP;AAuFA;;AAED,IAAIpf,QAAQ,CAAZ;;AAEA,SAASmhD,WAAT,GAAuB;;AAEtB,KAAIxxB,QAAQ,IAAIoxB,aAAJ,EAAZ;;AAEA,KAAIvX,QAAQ;;AAEXtb,MAAIluB,OAFO;;AAIX43B,QAAM,EAJK;;AAMXwpB,WAAS,CAAE,CAAF,EAAK,CAAL,EAAQ,CAAR,CANE;AAOX3B,eAAa,EAPF;AAQXt6B,wBAAsB,EARX;AASXC,2BAAyB,EATd;AAUXs6B,QAAM,EAVK;AAWXj6B,iBAAe,EAXJ;AAYXC,oBAAkB,EAZP;AAaXi6B,YAAU,EAbC;AAcXjuC,SAAO,EAdI;AAeXoU,kBAAgB,EAfL;AAgBXC,qBAAmB,EAhBR;AAiBX65B,QAAM;;AAjBK,EAAZ;;AAqBA,KAAIyB,UAAU,IAAIpmD,OAAJ,EAAd;AACA,KAAI0P,UAAU,IAAIzR,OAAJ,EAAd;AACA,KAAIooD,WAAW,IAAIpoD,OAAJ,EAAf;;AAEA,UAASqoD,KAAT,CAAgB58B,MAAhB,EAAwBi6B,OAAxB,EAAiCj2C,MAAjC,EAA0C;;AAEzC,MAAIrC,IAAI,CAAR;AAAA,MAAWmE,IAAI,CAAf;AAAA,MAAkBzU,IAAI,CAAtB;;AAEA,MAAIwrD,oBAAoB,CAAxB;AACA,MAAIC,cAAc,CAAlB;AACA,MAAIC,aAAa,CAAjB;AACA,MAAIC,iBAAiB,CAArB;AACA,MAAIC,aAAa,CAAjB;;AAEA,MAAI7S,aAAapmC,OAAOsnB,kBAAxB;;AAEA,OAAM,IAAIrnC,IAAI,CAAR,EAAWC,IAAI87B,OAAOp9B,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,OAAIo4D,QAAQr8B,OAAQ/7B,CAAR,CAAZ;;AAEA,OAAI83B,QAAQsgC,MAAMtgC,KAAlB;AACA,OAAImhC,YAAYb,MAAMa,SAAtB;AACA,OAAI9pC,WAAWipC,MAAMjpC,QAArB;;AAEA,OAAI8nC,YAAcmB,MAAMj8B,MAAN,IAAgBi8B,MAAMj8B,MAAN,CAAa5C,GAA/B,GAAuC6+B,MAAMj8B,MAAN,CAAa5C,GAAb,CAAiBhT,OAAxD,GAAkE,IAAlF;;AAEA,OAAK6xC,MAAMc,cAAX,EAA4B;;AAE3Bx7C,SAAKoa,MAAMpa,CAAN,GAAUu7C,SAAf;AACAp3C,SAAKiW,MAAMjW,CAAN,GAAUo3C,SAAf;AACA7rD,SAAK0qB,MAAM1qB,CAAN,GAAU6rD,SAAf;AAEA,IAND,MAMO,IAAKb,MAAMe,kBAAX,EAAgC;;AAEtC,QAAI3iC,WAAWuQ,MAAM7oC,GAAN,CAAWk6D,KAAX,CAAf;;AAEA5hC,aAASsB,KAAT,CAAeprB,IAAf,CAAqB0rD,MAAMtgC,KAA3B,EAAmCpqB,cAAnC,CAAmD0qD,MAAMa,SAAzD;AACAziC,aAAS/J,SAAT,CAAmBjL,qBAAnB,CAA0C42C,MAAMn4C,WAAhD;AACAw4C,YAAQj3C,qBAAR,CAA+B42C,MAAM95D,MAAN,CAAa2hB,WAA5C;AACAuW,aAAS/J,SAAT,CAAmBnf,GAAnB,CAAwBmrD,OAAxB;AACAjiC,aAAS/J,SAAT,CAAmBtM,kBAAnB,CAAuCgmC,UAAvC;;AAEA3vB,aAAS2F,MAAT,GAAkBi8B,MAAMz0B,UAAxB;;AAEA,QAAKy0B,MAAMz0B,UAAX,EAAwB;;AAEvB,SAAIxH,SAASi8B,MAAMj8B,MAAnB;;AAEA3F,cAAS4F,UAAT,GAAsBD,OAAOi9B,IAA7B;AACA5iC,cAAS6F,YAAT,GAAwBF,OAAO7a,MAA/B;AACAkV,cAAS8F,aAAT,GAAyBH,OAAOk9B,OAAhC;AAEA;;AAEDzY,UAAMrkB,oBAAN,CAA4Bq8B,iBAA5B,IAAkD3B,SAAlD;AACArW,UAAMpkB,uBAAN,CAA+Bo8B,iBAA/B,IAAqDR,MAAMj8B,MAAN,CAAaziB,MAAlE;AACAknC,UAAMiW,WAAN,CAAmB+B,iBAAnB,IAAyCpiC,QAAzC;;AAEAoiC;AAEA,IA5BM,MA4BA,IAAKR,MAAMkB,WAAX,EAAyB;;AAE/B,QAAI9iC,WAAWuQ,MAAM7oC,GAAN,CAAWk6D,KAAX,CAAf;;AAEA5hC,aAASld,QAAT,CAAkBkI,qBAAlB,CAAyC42C,MAAMn4C,WAA/C;AACAuW,aAASld,QAAT,CAAkBhC,YAAlB,CAAgC6uC,UAAhC;;AAEA3vB,aAASsB,KAAT,CAAeprB,IAAf,CAAqBorB,KAArB,EAA6BpqB,cAA7B,CAA6CurD,SAA7C;AACAziC,aAASrH,QAAT,GAAoBA,QAApB;;AAEAqH,aAAS/J,SAAT,CAAmBjL,qBAAnB,CAA0C42C,MAAMn4C,WAAhD;AACAw4C,YAAQj3C,qBAAR,CAA+B42C,MAAM95D,MAAN,CAAa2hB,WAA5C;AACAuW,aAAS/J,SAAT,CAAmBnf,GAAnB,CAAwBmrD,OAAxB;AACAjiC,aAAS/J,SAAT,CAAmBtM,kBAAnB,CAAuCgmC,UAAvC;;AAEA3vB,aAASkG,OAAT,GAAmBp/B,KAAK8S,GAAL,CAAUgoD,MAAMvpD,KAAhB,CAAnB;AACA2nB,aAASmG,WAAT,GAAuBr/B,KAAK8S,GAAL,CAAUgoD,MAAMvpD,KAAN,IAAgB,IAAIupD,MAAMmB,QAA1B,CAAV,CAAvB;AACA/iC,aAASoG,KAAT,GAAmBw7B,MAAMjpC,QAAN,KAAmB,CAArB,GAA2B,GAA3B,GAAiCipC,MAAMx7B,KAAxD;;AAEApG,aAAS2F,MAAT,GAAkBi8B,MAAMz0B,UAAxB;;AAEA,QAAKy0B,MAAMz0B,UAAX,EAAwB;;AAEvB,SAAIxH,SAASi8B,MAAMj8B,MAAnB;;AAEA3F,cAAS4F,UAAT,GAAsBD,OAAOi9B,IAA7B;AACA5iC,cAAS6F,YAAT,GAAwBF,OAAO7a,MAA/B;AACAkV,cAAS8F,aAAT,GAAyBH,OAAOk9B,OAAhC;AAEA;;AAEDzY,UAAM/jB,aAAN,CAAqBi8B,UAArB,IAAoC7B,SAApC;AACArW,UAAM9jB,gBAAN,CAAwBg8B,UAAxB,IAAuCV,MAAMj8B,MAAN,CAAaziB,MAApD;AACAknC,UAAMkW,IAAN,CAAYgC,UAAZ,IAA2BtiC,QAA3B;;AAEAsiC;AAEA,IArCM,MAqCA,IAAKV,MAAMoB,eAAX,EAA6B;;AAEnC,QAAIhjC,WAAWuQ,MAAM7oC,GAAN,CAAWk6D,KAAX,CAAf;;AAEA;AACA;;AAEA;AACA5hC,aAASsB,KAAT,CAAeprB,IAAf,CAAqBorB,KAArB,EAA6BpqB,cAA7B,CAA6CurD,SAA7C;;AAEAziC,aAASld,QAAT,CAAkBkI,qBAAlB,CAAyC42C,MAAMn4C,WAA/C;AACAuW,aAASld,QAAT,CAAkBhC,YAAlB,CAAgC6uC,UAAhC;;AAEA;AACAuS,aAAShnD,QAAT;AACAqQ,YAAQrV,IAAR,CAAc0rD,MAAMn4C,WAApB;AACA8B,YAAQ7M,WAAR,CAAqBixC,UAArB;AACAuS,aAAStmD,eAAT,CAA0B2P,OAA1B;;AAEAyU,aAAS6hC,SAAT,CAAmBtsD,GAAnB,CAAwBqsD,MAAM1zC,KAAN,GAAc,GAAtC,EAA2C,GAA3C,EAAgD,GAAhD;AACA8R,aAAS8hC,UAAT,CAAoBvsD,GAApB,CAAyB,GAAzB,EAA8BqsD,MAAMzzC,MAAN,GAAe,GAA7C,EAAkD,GAAlD;;AAEA6R,aAAS6hC,SAAT,CAAmB/gD,YAAnB,CAAiCohD,QAAjC;AACAliC,aAAS8hC,UAAT,CAAoBhhD,YAApB,CAAkCohD,QAAlC;;AAEA;AACA;;AAEA9X,UAAMmW,QAAN,CAAgBgC,cAAhB,IAAmCviC,QAAnC;;AAEAuiC;AAEA,IAhCM,MAgCA,IAAKX,MAAMqB,YAAX,EAA0B;;AAEhC,QAAIjjC,WAAWuQ,MAAM7oC,GAAN,CAAWk6D,KAAX,CAAf;;AAEA5hC,aAASld,QAAT,CAAkBkI,qBAAlB,CAAyC42C,MAAMn4C,WAA/C;AACAuW,aAASld,QAAT,CAAkBhC,YAAlB,CAAgC6uC,UAAhC;;AAEA3vB,aAASsB,KAAT,CAAeprB,IAAf,CAAqB0rD,MAAMtgC,KAA3B,EAAmCpqB,cAAnC,CAAmD0qD,MAAMa,SAAzD;AACAziC,aAASrH,QAAT,GAAoBipC,MAAMjpC,QAA1B;AACAqH,aAASoG,KAAT,GAAmBw7B,MAAMjpC,QAAN,KAAmB,CAArB,GAA2B,GAA3B,GAAiCipC,MAAMx7B,KAAxD;;AAEApG,aAAS2F,MAAT,GAAkBi8B,MAAMz0B,UAAxB;;AAEA,QAAKy0B,MAAMz0B,UAAX,EAAwB;;AAEvB,SAAIxH,SAASi8B,MAAMj8B,MAAnB;;AAEA3F,cAAS4F,UAAT,GAAsBD,OAAOi9B,IAA7B;AACA5iC,cAAS6F,YAAT,GAAwBF,OAAO7a,MAA/B;AACAkV,cAAS8F,aAAT,GAAyBH,OAAOk9B,OAAhC;AACA7iC,cAASwG,gBAAT,GAA4Bb,OAAOpc,MAAP,CAAcxF,IAA1C;AACAic,cAASyG,eAAT,GAA2Bd,OAAOpc,MAAP,CAAcvF,GAAzC;AAEA;;AAEDomC,UAAM1jB,cAAN,CAAsB27B,WAAtB,IAAsC5B,SAAtC;AACArW,UAAMzjB,iBAAN,CAAyB07B,WAAzB,IAAyCT,MAAMj8B,MAAN,CAAaziB,MAAtD;AACAknC,UAAM93B,KAAN,CAAa+vC,WAAb,IAA6BriC,QAA7B;;AAEAqiC;AAEA,IA/BM,MA+BA,IAAKT,MAAMsB,iBAAX,EAA+B;;AAErC,QAAIljC,WAAWuQ,MAAM7oC,GAAN,CAAWk6D,KAAX,CAAf;;AAEA5hC,aAAS/J,SAAT,CAAmBjL,qBAAnB,CAA0C42C,MAAMn4C,WAAhD;AACAuW,aAAS/J,SAAT,CAAmBtM,kBAAnB,CAAuCgmC,UAAvC;AACA3vB,aAAS/J,SAAT,CAAmB7d,SAAnB;;AAEA4nB,aAAS6G,QAAT,CAAkB3wB,IAAlB,CAAwB0rD,MAAMtgC,KAA9B,EAAsCpqB,cAAtC,CAAsDurD,SAAtD;AACAziC,aAAS8G,WAAT,CAAqB5wB,IAArB,CAA2B0rD,MAAM96B,WAAjC,EAA+C5vB,cAA/C,CAA+DurD,SAA/D;;AAEArY,UAAMoW,IAAN,CAAYgC,UAAZ,IAA2BxiC,QAA3B;;AAEAwiC;AAEA;AAED;;AAEDpY,QAAM4X,OAAN,CAAe,CAAf,IAAqB96C,CAArB;AACAkjC,QAAM4X,OAAN,CAAe,CAAf,IAAqB32C,CAArB;AACA++B,QAAM4X,OAAN,CAAe,CAAf,IAAqBprD,CAArB;;AAEAwzC,QAAMiW,WAAN,CAAkBl4D,MAAlB,GAA2Bi6D,iBAA3B;AACAhY,QAAMkW,IAAN,CAAWn4D,MAAX,GAAoBm6D,UAApB;AACAlY,QAAMmW,QAAN,CAAep4D,MAAf,GAAwBo6D,cAAxB;AACAnY,QAAM93B,KAAN,CAAYnqB,MAAZ,GAAqBk6D,WAArB;AACAjY,QAAMoW,IAAN,CAAWr4D,MAAX,GAAoBq6D,UAApB;;AAEApY,QAAM5R,IAAN,GAAa4R,MAAMtb,EAAN,GAAW,GAAX,GAAiBszB,iBAAjB,GAAqC,GAArC,GAA2CC,WAA3C,GAAyD,GAAzD,GAA+DC,UAA/D,GAA4E,GAA5E,GAAkFC,cAAlF,GAAmG,GAAnG,GAAyGC,UAAzG,GAAsH,GAAtH,GAA4HhD,QAAQr3D,MAAjJ;AAEA;;AAED,QAAO;AACNg6D,SAAOA,KADD;AAEN/X,SAAOA;AAFD,EAAP;AAKA;;AAED;;;;AAIA,SAAS+Y,gBAAT,GAA4B;;AAE3B,KAAI59B,SAAS,IAAIw8B,WAAJ,EAAb;;AAEA,KAAIqB,cAAc,EAAlB;AACA,KAAIC,eAAe,EAAnB;AACA,KAAIC,eAAe,EAAnB;;AAEA,UAAS1U,IAAT,GAAgB;;AAEfwU,cAAYj7D,MAAZ,GAAqB,CAArB;AACAk7D,eAAal7D,MAAb,GAAsB,CAAtB;AACAm7D,eAAan7D,MAAb,GAAsB,CAAtB;AAEA;;AAED,UAASo7D,SAAT,CAAoB3B,KAApB,EAA4B;;AAE3BwB,cAAYr6D,IAAZ,CAAkB64D,KAAlB;AAEA;;AAED,UAAS4B,UAAT,CAAqBC,WAArB,EAAmC;;AAElCJ,eAAat6D,IAAb,CAAmB06D,WAAnB;AAEA;;AAED,UAASC,UAAT,CAAqBD,WAArB,EAAmC;;AAElCH,eAAav6D,IAAb,CAAmB06D,WAAnB;AAEA;;AAED,UAASE,WAAT,CAAsBp6C,MAAtB,EAA+B;;AAE9Bgc,SAAO48B,KAAP,CAAciB,WAAd,EAA2BC,YAA3B,EAAyC95C,MAAzC;AAEA;;AAED,KAAI6gC,QAAQ;AACXgZ,eAAaA,WADF;AAEXC,gBAAcA,YAFH;AAGXC,gBAAcA,YAHH;;AAKX/9B,UAAQA;AALG,EAAZ;;AAQA,QAAO;AACNqpB,QAAMA,IADA;AAENxE,SAAOA,KAFD;AAGNuZ,eAAaA,WAHP;;AAKNJ,aAAWA,SALL;AAMNC,cAAYA,UANN;AAONE,cAAYA;AAPN,EAAP;AAUA;;AAED,SAASE,iBAAT,GAA6B;;AAE5B,KAAIC,eAAe,EAAnB;;AAEA,UAASn8D,GAAT,CAAckjD,KAAd,EAAqBrhC,MAArB,EAA8B;;AAE7B,MAAIivB,OAAOoS,MAAM9b,EAAN,GAAW,GAAX,GAAiBvlB,OAAOulB,EAAnC;;AAEA,MAAIg1B,cAAcD,aAAcrrB,IAAd,CAAlB;;AAEA,MAAKsrB,gBAAgBj9D,SAArB,EAAiC;;AAEhCi9D,iBAAc,IAAIX,gBAAJ,EAAd;AACAU,gBAAcrrB,IAAd,IAAuBsrB,WAAvB;AAEA;;AAED,SAAOA,WAAP;AAEA;;AAED,UAAS/0C,OAAT,GAAmB;;AAElB80C,iBAAe,EAAf;AAEA;;AAED,QAAO;AACNn8D,OAAKA,GADC;AAENqnB,WAASA;AAFH,EAAP;AAKA;;AAED;;;;;;;;;;;;;;;;;;;;;;;AAuBA,SAASovC,iBAAT,CAA4BjuB,UAA5B,EAAyC;;AAExCoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,mBAAZ;;AAEA,MAAK2zD,YAAL,GAAoB/pD,iBAApB;;AAEA,MAAKwvC,QAAL,GAAgB,KAAhB;AACA,MAAKvP,YAAL,GAAoB,KAApB;;AAEA,MAAKxP,GAAL,GAAW,IAAX;;AAEA,MAAKE,QAAL,GAAgB,IAAhB;;AAEA,MAAKwB,eAAL,GAAuB,IAAvB;AACA,MAAKC,iBAAL,GAAyB,CAAzB;AACA,MAAKC,gBAAL,GAAwB,CAAxB;;AAEA,MAAK+c,SAAL,GAAiB,KAAjB;AACA,MAAKC,kBAAL,GAA0B,CAA1B;;AAEA,MAAKzc,GAAL,GAAW,KAAX;AACA,MAAKK,MAAL,GAAc,KAAd;;AAEA,MAAK2b,SAAL,CAAgBhR,UAAhB;AAEA;;AAEDiuB,kBAAkB52D,SAAlB,GAA8BC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAA9B;AACA42D,kBAAkB52D,SAAlB,CAA4B0O,WAA5B,GAA0CkoD,iBAA1C;;AAEAA,kBAAkB52D,SAAlB,CAA4Bw8D,mBAA5B,GAAkD,IAAlD;;AAEA5F,kBAAkB52D,SAAlB,CAA4B2O,IAA5B,GAAmC,UAAW9N,MAAX,EAAoB;;AAEtDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAKi0D,YAAL,GAAoBj0D,OAAOi0D,YAA3B;;AAEA,MAAKva,QAAL,GAAgB15C,OAAO05C,QAAvB;AACA,MAAKvP,YAAL,GAAoBnqC,OAAOmqC,YAA3B;;AAEA,MAAKxP,GAAL,GAAW36B,OAAO26B,GAAlB;;AAEA,MAAKE,QAAL,GAAgB76B,OAAO66B,QAAvB;;AAEA,MAAKwB,eAAL,GAAuBr8B,OAAOq8B,eAA9B;AACA,MAAKC,iBAAL,GAAyBt8B,OAAOs8B,iBAAhC;AACA,MAAKC,gBAAL,GAAwBv8B,OAAOu8B,gBAA/B;;AAEA,MAAK+c,SAAL,GAAiBt5C,OAAOs5C,SAAxB;AACA,MAAKC,kBAAL,GAA0Bv5C,OAAOu5C,kBAAjC;;AAEA,QAAO,IAAP;AAEA,CAtBD;;AAwBA;;;;;;;;;;;;;;;;;;;;;;;AAuBA,SAASyc,oBAAT,CAA+BluB,UAA/B,EAA4C;;AAE3CoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,sBAAZ;;AAEA,MAAK6/B,iBAAL,GAAyB,IAAI1sB,OAAJ,EAAzB;AACA,MAAK2sB,YAAL,GAAoB,CAApB;AACA,MAAKC,WAAL,GAAmB,IAAnB;;AAEA,MAAKqZ,QAAL,GAAgB,KAAhB;AACA,MAAKvP,YAAL,GAAoB,KAApB;;AAEA,MAAKxP,GAAL,GAAW,IAAX;;AAEA,MAAKE,QAAL,GAAgB,IAAhB;;AAEA,MAAKwB,eAAL,GAAuB,IAAvB;AACA,MAAKC,iBAAL,GAAyB,CAAzB;AACA,MAAKC,gBAAL,GAAwB,CAAxB;;AAEA,MAAKO,GAAL,GAAW,KAAX;AACA,MAAKK,MAAL,GAAc,KAAd;;AAEA,MAAK2b,SAAL,CAAgBhR,UAAhB;AAEA;;AAEDkuB,qBAAqB72D,SAArB,GAAiCC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAAjC;AACA62D,qBAAqB72D,SAArB,CAA+B0O,WAA/B,GAA6CmoD,oBAA7C;;AAEAA,qBAAqB72D,SAArB,CAA+By8D,sBAA/B,GAAwD,IAAxD;;AAEA5F,qBAAqB72D,SAArB,CAA+B2O,IAA/B,GAAsC,UAAW9N,MAAX,EAAoB;;AAEzDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAKmgC,iBAAL,CAAuBryB,IAAvB,CAA6B9N,OAAOmgC,iBAApC;AACA,MAAKC,YAAL,GAAoBpgC,OAAOogC,YAA3B;AACA,MAAKC,WAAL,GAAmBrgC,OAAOqgC,WAA1B;;AAEA,MAAKqZ,QAAL,GAAgB15C,OAAO05C,QAAvB;AACA,MAAKvP,YAAL,GAAoBnqC,OAAOmqC,YAA3B;;AAEA,MAAKxP,GAAL,GAAW36B,OAAO26B,GAAlB;;AAEA,MAAKE,QAAL,GAAgB76B,OAAO66B,QAAvB;;AAEA,MAAKwB,eAAL,GAAuBr8B,OAAOq8B,eAA9B;AACA,MAAKC,iBAAL,GAAyBt8B,OAAOs8B,iBAAhC;AACA,MAAKC,gBAAL,GAAwBv8B,OAAOu8B,gBAA/B;;AAEA,QAAO,IAAP;AAEA,CArBD;;AAuBA;;;;;AAKA,SAASs/B,cAAT,CAAyBC,SAAzB,EAAoCC,QAApC,EAA8C/W,cAA9C,EAA+D;;AAE9D,KAAIgX,WAAW,IAAIttC,OAAJ,EAAf;AAAA,KACCutC,oBAAoB,IAAIvqD,OAAJ,EADrB;AAAA,KAGCwqD,iBAAiB,IAAIjvD,OAAJ,EAHlB;AAAA,KAICkvD,oBAAoB,IAAIlvD,OAAJ,CAAa+3C,cAAb,EAA6BA,cAA7B,CAJrB;AAAA,KAMCoX,cAAc,IAAI3oD,OAAJ,EANf;AAAA,KAOC4oD,sBAAsB,IAAI5oD,OAAJ,EAPvB;AAAA,KASC6oD,gBAAgB,CATjB;AAAA,KAUCC,gBAAgB,CAVjB;AAAA,KAYCC,4BAA4B,CAAEF,gBAAgBC,aAAlB,IAAoC,CAZjE;AAAA,KAcCE,kBAAkB,IAAItkC,KAAJ,CAAWqkC,yBAAX,CAdnB;AAAA,KAeCE,qBAAqB,IAAIvkC,KAAJ,CAAWqkC,yBAAX,CAftB;AAAA,KAiBCG,iBAAiB,EAjBlB;;AAmBA,KAAIxkB,aAAa,EAAE,GAAG91C,QAAL,EAAe,GAAGD,SAAlB,EAA6B,GAAGE,UAAhC,EAAjB;;AAEA,KAAIs6D,iBAAiB,CACpB,IAAInpD,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CADoB,EACI,IAAIA,OAAJ,CAAa,CAAE,CAAf,EAAkB,CAAlB,EAAqB,CAArB,CADJ,EAC8B,IAAIA,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAD9B,EAEpB,IAAIA,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAE,CAArB,CAFoB,EAEM,IAAIA,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAFN,EAE8B,IAAIA,OAAJ,CAAa,CAAb,EAAgB,CAAE,CAAlB,EAAqB,CAArB,CAF9B,CAArB;;AAKA,KAAIopD,UAAU,CACb,IAAIppD,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CADa,EACW,IAAIA,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CADX,EACmC,IAAIA,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CADnC,EAEb,IAAIA,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAFa,EAEW,IAAIA,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAFX,EAEmC,IAAIA,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAE,CAArB,CAFnC,CAAd;;AAKA,KAAIqpD,kBAAkB,CACrB,IAAIh2C,OAAJ,EADqB,EACN,IAAIA,OAAJ,EADM,EACS,IAAIA,OAAJ,EADT,EAErB,IAAIA,OAAJ,EAFqB,EAEN,IAAIA,OAAJ,EAFM,EAES,IAAIA,OAAJ,EAFT,CAAtB;;AAKA;;AAEA,MAAM,IAAI1lB,IAAI,CAAd,EAAiBA,MAAMo7D,yBAAvB,EAAkD,EAAGp7D,CAArD,EAAyD;;AAExD,MAAI27D,cAAc,CAAE37D,IAAIk7D,aAAN,MAA0B,CAA5C;AACA,MAAIU,cAAc,CAAE57D,IAAIm7D,aAAN,MAA0B,CAA5C;;AAEA,MAAIU,gBAAgB,IAAIlH,iBAAJ,CAAuB;;AAE1C9B,iBAAc9pD,gBAF4B;;AAI1CggC,iBAAc4yB,WAJ4B;AAK1CrjB,aAAUsjB;;AALgC,GAAvB,CAApB;;AASAP,kBAAiBr7D,CAAjB,IAAuB67D,aAAvB;;AAEA;;AAEA,MAAIC,mBAAmB,IAAIlH,oBAAJ,CAA0B;;AAEhD7rB,iBAAc4yB,WAFkC;AAGhDrjB,aAAUsjB;;AAHsC,GAA1B,CAAvB;;AAOAN,qBAAoBt7D,CAApB,IAA0B87D,gBAA1B;AAEA;;AAED;;AAEA,KAAI7yC,QAAQ,IAAZ;;AAEA,MAAK6e,OAAL,GAAe,KAAf;;AAEA,MAAKi0B,UAAL,GAAkB,IAAlB;AACA,MAAKnpB,WAAL,GAAmB,KAAnB;;AAEA,MAAK1zC,IAAL,GAAY4B,YAAZ;;AAEA,MAAKogD,MAAL,GAAc,UAAWnlB,MAAX,EAAmBqlB,KAAnB,EAA0BrhC,MAA1B,EAAmC;;AAEhD,MAAKkJ,MAAM6e,OAAN,KAAkB,KAAvB,EAA+B;AAC/B,MAAK7e,MAAM8yC,UAAN,KAAqB,KAArB,IAA8B9yC,MAAM2pB,WAAN,KAAsB,KAAzD,EAAiE;;AAEjE,MAAK7W,OAAOp9B,MAAP,KAAkB,CAAvB,EAA2B;;AAE3B;AACA,MAAIq9D,MAAMtB,UAAU91C,OAApB;AACA,MAAIq3C,SAASvB,UAAU9Z,KAAvB;;AAEA;AACAqb,SAAOr5B,OAAP,CAAgBo5B,IAAIE,KAApB;AACAD,SAAO18B,OAAP,CAAezH,KAAf,CAAqBypB,QAArB,CAA+B,CAA/B,EAAkC,CAAlC,EAAqC,CAArC,EAAwC,CAAxC;AACA0a,SAAO18B,OAAP,CAAef,KAAf,CAAqB29B,OAArB,CAA8B,IAA9B;AACAF,SAAOG,cAAP,CAAuB,KAAvB;;AAEA;;AAEA,MAAIC,SAAJ;;AAEA,OAAM,IAAIr8D,IAAI,CAAR,EAAWkoB,KAAK6T,OAAOp9B,MAA7B,EAAqCqB,IAAIkoB,EAAzC,EAA6CloB,GAA7C,EAAoD;;AAEnD,OAAIo4D,QAAQr8B,OAAQ/7B,CAAR,CAAZ;AACA,OAAIm8B,SAASi8B,MAAMj8B,MAAnB;AACA,OAAIs9B,eAAerB,SAASA,MAAMqB,YAAlC;;AAEA,OAAKt9B,WAAW9+B,SAAhB,EAA4B;;AAE3ByP,YAAQC,IAAR,CAAc,uBAAd,EAAuCqrD,KAAvC,EAA8C,gBAA9C;AACA;AAEA;;AAED,OAAIkE,eAAengC,OAAOpc,MAA1B;;AAEA+6C,kBAAepuD,IAAf,CAAqByvB,OAAOk9B,OAA5B;AACAyB,kBAAehxD,GAAf,CAAoBixD,iBAApB;;AAEA,OAAKtB,YAAL,EAAoB;;AAEnB,QAAI8C,UAAUzB,eAAej9D,CAA7B;AACA,QAAI2+D,WAAW1B,eAAerwD,CAA9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACAixD,oBAAiB,CAAjB,EAAqB3vD,GAArB,CAA0BwwD,UAAU,CAApC,EAAuCC,QAAvC,EAAiDD,OAAjD,EAA0DC,QAA1D;AACA;AACAd,oBAAiB,CAAjB,EAAqB3vD,GAArB,CAA0B,CAA1B,EAA6BywD,QAA7B,EAAuCD,OAAvC,EAAgDC,QAAhD;AACA;AACAd,oBAAiB,CAAjB,EAAqB3vD,GAArB,CAA0BwwD,UAAU,CAApC,EAAuCC,QAAvC,EAAiDD,OAAjD,EAA0DC,QAA1D;AACA;AACAd,oBAAiB,CAAjB,EAAqB3vD,GAArB,CAA0BwwD,OAA1B,EAAmCC,QAAnC,EAA6CD,OAA7C,EAAsDC,QAAtD;AACA;AACAd,oBAAiB,CAAjB,EAAqB3vD,GAArB,CAA0BwwD,UAAU,CAApC,EAAuC,CAAvC,EAA0CA,OAA1C,EAAmDC,QAAnD;AACA;AACAd,oBAAiB,CAAjB,EAAqB3vD,GAArB,CAA0BwwD,OAA1B,EAAmC,CAAnC,EAAsCA,OAAtC,EAA+CC,QAA/C;;AAEA1B,mBAAej9D,CAAf,IAAoB,GAApB;AACAi9D,mBAAerwD,CAAf,IAAoB,GAApB;AAEA;;AAED,OAAK0xB,OAAO5C,GAAP,KAAe,IAApB,EAA2B;;AAE1B,QAAIkjC,OAAO,EAAE35C,WAAWre,aAAb,EAA4Boe,WAAWpe,aAAvC,EAAsDse,QAAQld,UAA9D,EAAX;;AAEAs2B,WAAO5C,GAAP,GAAa,IAAIrT,iBAAJ,CAAuB40C,eAAej9D,CAAtC,EAAyCi9D,eAAerwD,CAAxD,EAA2DgyD,IAA3D,CAAb;AACAtgC,WAAO5C,GAAP,CAAWhT,OAAX,CAAmBrD,IAAnB,GAA0Bk1C,MAAMl1C,IAAN,GAAa,YAAvC;;AAEAo5C,iBAAa70B,sBAAb;AAEA;;AAED,OAAKtL,OAAOugC,iBAAZ,EAAgC;;AAE/BvgC,WAAO7f,MAAP,CAAe87C,KAAf;AAEA;;AAED,OAAInB,YAAY96B,OAAO5C,GAAvB;AACA,OAAIojC,eAAexgC,OAAOziB,MAA1B;;AAEAuhD,uBAAoBz5C,qBAApB,CAA2C42C,MAAMn4C,WAAjD;AACAq8C,gBAAahjD,QAAb,CAAsB5M,IAAtB,CAA4BuuD,mBAA5B;;AAEA,OAAKxB,YAAL,EAAoB;;AAEnB4C,gBAAY,CAAZ;;AAEA;AACA;;AAEAM,iBAAajkD,eAAb,CAA8B,CAAEuiD,oBAAoBp9D,CAApD,EAAuD,CAAEo9D,oBAAoBxwD,CAA7E,EAAgF,CAAEwwD,oBAAoB9oD,CAAtG;AAEA,IATD,MASO;;AAENkqD,gBAAY,CAAZ;;AAEArB,gBAAYx5C,qBAAZ,CAAmC42C,MAAM95D,MAAN,CAAa2hB,WAAhD;AACAq8C,iBAAaznD,MAAb,CAAqBmmD,WAArB;AACAsB,iBAAa7yC,iBAAb;;AAEA;;AAEAkzC,iBAAa5wD,GAAb,CACC,GADD,EACM,GADN,EACW,GADX,EACgB,GADhB,EAEC,GAFD,EAEM,GAFN,EAEW,GAFX,EAEgB,GAFhB,EAGC,GAHD,EAGM,GAHN,EAGW,GAHX,EAGgB,GAHhB,EAIC,GAJD,EAIM,GAJN,EAIW,GAJX,EAIgB,GAJhB;;AAOA4wD,iBAAalvD,QAAb,CAAuB6uD,aAAat8C,gBAApC;AACA28C,iBAAalvD,QAAb,CAAuB6uD,aAAaj1B,kBAApC;AAEA;;AAEDqzB,aAAUkC,eAAV,CAA2B3F,SAA3B;AACAyD,aAAUjZ,KAAV;;AAEA;AACA;;AAEA,QAAM,IAAI5X,OAAO,CAAjB,EAAoBA,OAAOwyB,SAA3B,EAAsCxyB,MAAtC,EAAgD;;AAE/C,QAAK4vB,YAAL,EAAoB;;AAEnBuB,iBAAYtuD,IAAZ,CAAkB4vD,aAAahjD,QAA/B;AACA0hD,iBAAYpuD,GAAZ,CAAiB4uD,eAAgB3xB,IAAhB,CAAjB;AACAyyB,kBAAavnD,EAAb,CAAgBrI,IAAhB,CAAsB+uD,QAAS5xB,IAAT,CAAtB;AACAyyB,kBAAaznD,MAAb,CAAqBmmD,WAArB;AACAsB,kBAAa7yC,iBAAb;;AAEA,SAAIozC,eAAenB,gBAAiB7xB,IAAjB,CAAnB;AACAoyB,YAAO31C,QAAP,CAAiBu2C,YAAjB;AAEA;;AAED;;AAEAhC,sBAAkB5lD,gBAAlB,CAAoCqnD,aAAat8C,gBAAjD,EAAmEs8C,aAAaj1B,kBAAhF;AACAuzB,aAAShtC,aAAT,CAAwBitC,iBAAxB;;AAEA;;AAEAiC,iBAAc1b,KAAd,EAAqBrhC,MAArB,EAA6Bu8C,YAA7B,EAA2C7C,YAA3C;AAEA;AAED;;AAEDxwC,QAAM2pB,WAAN,GAAoB,KAApB;AAEA,EArKD;;AAuKA,UAASmqB,gBAAT,CAA2Bv0C,MAA3B,EAAmCoe,QAAnC,EAA6C6yB,YAA7C,EAA2DuD,kBAA3D,EAA+EhgC,gBAA/E,EAAiGC,eAAjG,EAAmH;;AAElH,MAAI7T,WAAWZ,OAAOY,QAAtB;;AAEA,MAAI6zC,SAAS,IAAb;;AAEA,MAAIC,mBAAmB7B,eAAvB;AACA,MAAI8B,iBAAiB30C,OAAO40C,mBAA5B;;AAEA,MAAK3D,YAAL,EAAoB;;AAEnByD,sBAAmB5B,kBAAnB;AACA6B,oBAAiB30C,OAAO60C,sBAAxB;AAEA;;AAED,MAAK,CAAEF,cAAP,EAAwB;;AAEvB,OAAIxB,cAAc,KAAlB;;AAEA,OAAK/0B,SAASmC,YAAd,EAA6B;;AAE5B,QAAK3f,YAAYA,SAASG,gBAA1B,EAA6C;;AAE5CoyC,mBAAcvyC,SAAS8oB,eAAT,IAA4B9oB,SAAS8oB,eAAT,CAAyB54B,QAArD,IAAiE8P,SAAS8oB,eAAT,CAAyB54B,QAAzB,CAAkC3a,MAAlC,GAA2C,CAA1H;AAEA,KAJD,MAIO,IAAKyqB,YAAYA,SAASC,UAA1B,EAAuC;;AAE7CsyC,mBAAcvyC,SAAS2f,YAAT,IAAyB3f,SAAS2f,YAAT,CAAsBpqC,MAAtB,GAA+B,CAAtE;AAEA;AAED;;AAED,OAAK6pB,OAAO4tC,aAAP,IAAwBxvB,SAAS0R,QAAT,KAAsB,KAAnD,EAA2D;;AAE1DxrC,YAAQC,IAAR,CAAc,8EAAd,EAA8Fyb,MAA9F;AAEA;;AAED,OAAIozC,cAAcpzC,OAAO4tC,aAAP,IAAwBxvB,SAAS0R,QAAnD;;AAEA,OAAIglB,eAAe,CAAnB;;AAEA,OAAK3B,WAAL,EAAmB2B,gBAAgBpC,aAAhB;AACnB,OAAKU,WAAL,EAAmB0B,gBAAgBnC,aAAhB;;AAEnB8B,YAASC,iBAAkBI,YAAlB,CAAT;AAEA,GAjCD,MAiCO;;AAENL,YAASE,cAAT;AAEA;;AAED,MAAKzC,UAAU5V,oBAAV,IACHle,SAASkQ,WAAT,KAAyB,IADtB,IAEHlQ,SAASgQ,cAAT,CAAwBj4C,MAAxB,KAAmC,CAFrC,EAEyC;;AAExC;AACA;;AAEA,OAAI4+D,OAAON,OAAOtzD,IAAlB;AAAA,OAAwB6zD,OAAO52B,SAASj9B,IAAxC;;AAEA,OAAI8zD,sBAAsBlC,eAAgBgC,IAAhB,CAA1B;;AAEA,OAAKE,wBAAwBpgE,SAA7B,EAAyC;;AAExCogE,0BAAsB,EAAtB;AACAlC,mBAAgBgC,IAAhB,IAAyBE,mBAAzB;AAEA;;AAED,OAAIC,iBAAiBD,oBAAqBD,IAArB,CAArB;;AAEA,OAAKE,mBAAmBrgE,SAAxB,EAAoC;;AAEnCqgE,qBAAiBT,OAAOzwD,KAAP,EAAjB;AACAixD,wBAAqBD,IAArB,IAA8BE,cAA9B;AAEA;;AAEDT,YAASS,cAAT;AAEA;;AAEDT,SAAOv5B,OAAP,GAAiBkD,SAASlD,OAA1B;AACAu5B,SAAO/kB,SAAP,GAAmBtR,SAASsR,SAA5B;;AAEA+kB,SAAOjnB,IAAP,GAAgBpP,SAASmQ,UAAT,IAAuB,IAAzB,GAAkCnQ,SAASmQ,UAA3C,GAAwDA,WAAYnQ,SAASoP,IAArB,CAAtE;;AAEAinB,SAAOnmB,WAAP,GAAqBlQ,SAASkQ,WAA9B;AACAmmB,SAAOrmB,cAAP,GAAwBhQ,SAASgQ,cAAjC;AACAqmB,SAAOpmB,gBAAP,GAA0BjQ,SAASiQ,gBAAnC;;AAEAomB,SAAO9kB,kBAAP,GAA4BvR,SAASuR,kBAArC;AACA8kB,SAAOjlB,SAAP,GAAmBpR,SAASoR,SAA5B;;AAEA,MAAKyhB,gBAAgBwD,OAAOzC,sBAA5B,EAAqD;;AAEpDyC,UAAOl+B,iBAAP,CAAyBryB,IAAzB,CAA+BswD,kBAA/B;AACAC,UAAOj+B,YAAP,GAAsBhC,gBAAtB;AACAigC,UAAOh+B,WAAP,GAAqBhC,eAArB;AAEA;;AAED,SAAOggC,MAAP;AAEA;;AAED,UAASH,YAAT,CAAuBt0C,MAAvB,EAA+BzI,MAA/B,EAAuCu8C,YAAvC,EAAqD7C,YAArD,EAAoE;;AAEnE,MAAKjxC,OAAOkb,OAAP,KAAmB,KAAxB,EAAgC;;AAEhC,MAAIA,UAAUlb,OAAOsa,MAAP,CAAcD,IAAd,CAAoB9iB,OAAO+iB,MAA3B,CAAd;;AAEA,MAAKY,YAAalb,OAAOykB,MAAP,IAAiBzkB,OAAOsqB,MAAxB,IAAkCtqB,OAAOqqB,QAAtD,CAAL,EAAwE;;AAEvE,OAAKrqB,OAAOmb,UAAP,KAAuB,CAAEnb,OAAOqb,aAAT,IAA0B+2B,SAAS/rC,gBAAT,CAA2BrG,MAA3B,CAAjD,CAAL,EAA8F;;AAE7FA,WAAO+a,eAAP,CAAuBtuB,gBAAvB,CAAyCqnD,aAAaj1B,kBAAtD,EAA0E7e,OAAOvI,WAAjF;;AAEA,QAAImJ,WAAWuxC,SAASr+C,MAAT,CAAiBkM,MAAjB,CAAf;AACA,QAAIoe,WAAWpe,OAAOoe,QAAtB;;AAEA,QAAK7P,MAAMC,OAAN,CAAe4P,QAAf,CAAL,EAAiC;;AAEhC,SAAIgE,SAASxhB,SAASwhB,MAAtB;;AAEA,UAAM,IAAIqE,IAAI,CAAR,EAAWC,KAAKtE,OAAOjsC,MAA7B,EAAqCswC,IAAIC,EAAzC,EAA6CD,GAA7C,EAAoD;;AAEnD,UAAIpE,QAAQD,OAAQqE,CAAR,CAAZ;AACA,UAAI0uB,gBAAgB/2B,SAAUiE,MAAMtC,aAAhB,CAApB;;AAEA,UAAKo1B,iBAAiBA,cAAcj6B,OAApC,EAA8C;;AAE7C,WAAIm4B,gBAAgBkB,iBAAkBv0C,MAAlB,EAA0Bm1C,aAA1B,EAAyClE,YAAzC,EAAuDwB,mBAAvD,EAA4EqB,aAAa/hD,IAAzF,EAA+F+hD,aAAa9hD,GAA5G,CAApB;AACAkgD,iBAAU5Y,kBAAV,CAA8Bwa,YAA9B,EAA4C,IAA5C,EAAkDlzC,QAAlD,EAA4DyyC,aAA5D,EAA2ErzC,MAA3E,EAAmFqiB,KAAnF;AAEA;AAED;AAED,KAlBD,MAkBO,IAAKjE,SAASlD,OAAd,EAAwB;;AAE9B,SAAIm4B,gBAAgBkB,iBAAkBv0C,MAAlB,EAA0Boe,QAA1B,EAAoC6yB,YAApC,EAAkDwB,mBAAlD,EAAuEqB,aAAa/hD,IAApF,EAA0F+hD,aAAa9hD,GAAvG,CAApB;AACAkgD,eAAU5Y,kBAAV,CAA8Bwa,YAA9B,EAA4C,IAA5C,EAAkDlzC,QAAlD,EAA4DyyC,aAA5D,EAA2ErzC,MAA3E,EAAmF,IAAnF;AAEA;AAED;AAED;;AAED,MAAI0a,WAAW1a,OAAO0a,QAAtB;;AAEA,OAAM,IAAIljC,IAAI,CAAR,EAAWC,IAAIijC,SAASvkC,MAA9B,EAAsCqB,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;;AAEnD88D,gBAAc55B,SAAUljC,CAAV,CAAd,EAA6B+f,MAA7B,EAAqCu8C,YAArC,EAAmD7C,YAAnD;AAEA;AAED;AAED;;AAED;;;;AAIA,SAASmE,aAAT,CAAwBt5C,MAAxB,EAAgC5B,OAAhC,EAAyCC,KAAzC,EAAgDC,KAAhD,EAAuDC,SAAvD,EAAkEC,SAAlE,EAA6EC,MAA7E,EAAqF7jB,IAArF,EAA2F8jB,UAA3F,EAAwG;;AAEvGR,SAAQzjB,IAAR,CAAc,IAAd,EAAoBulB,MAApB,EAA4B5B,OAA5B,EAAqCC,KAArC,EAA4CC,KAA5C,EAAmDC,SAAnD,EAA8DC,SAA9D,EAAyEC,MAAzE,EAAiF7jB,IAAjF,EAAuF8jB,UAAvF;;AAEA,MAAK4vB,WAAL,GAAmB,IAAnB;AAEA;;AAEDgrB,cAAc7/D,SAAd,GAA0BC,OAAO8lB,MAAP,CAAetB,QAAQzkB,SAAvB,CAA1B;AACA6/D,cAAc7/D,SAAd,CAAwB0O,WAAxB,GAAsCmxD,aAAtC;;AAEA;;;;;AAKA,SAASC,mBAAT,CAA8Bld,QAA9B,EAAwCrhB,EAAxC,EAA4CshB,KAA5C,EAAmDx8B,QAAnD,EAA6DqwC,YAA7D,EAA4E;;AAE3E,KAAIqJ,YAAJ,EAAkBC,aAAlB;AACA,KAAIvV,OAAJ,EAAah/B,UAAb,EAAyBgN,QAAzB;;AAEA,KAAIjQ,OAAJ;;AAEA;;AAEA,KAAIy3C,iBAAiB,IAAI3rD,OAAJ,EAArB;AACA,KAAI4rD,iBAAiB,IAAIrjD,UAAJ,EAArB;AACA,KAAIsjD,cAAc,IAAI7rD,OAAJ,EAAlB;;AAEA,UAAS+yC,IAAT,GAAgB;;AAEf,MAAI97B,WAAW,IAAI8W,YAAJ,CAAkB,CAChC,CAAE,GAD8B,EACzB,CAAE,GADuB,EAClB,CADkB,EACf,CADe,EAE9B,GAF8B,EAEzB,CAAE,GAFuB,EAElB,CAFkB,EAEf,CAFe,EAG9B,GAH8B,EAGzB,GAHyB,EAGpB,CAHoB,EAGjB,CAHiB,EAIhC,CAAE,GAJ8B,EAIzB,GAJyB,EAIpB,CAJoB,EAIjB,CAJiB,CAAlB,CAAf;;AAOA,MAAIyI,QAAQ,IAAIvI,WAAJ,CAAiB,CAC5B,CAD4B,EACzB,CADyB,EACtB,CADsB,EAE5B,CAF4B,EAEzB,CAFyB,EAEtB,CAFsB,CAAjB,CAAZ;;AAKAw9B,iBAAex+B,GAAGG,YAAH,EAAf;AACAs+B,kBAAgBz+B,GAAGG,YAAH,EAAhB;;AAEAH,KAAGU,UAAH,CAAeV,GAAGynB,YAAlB,EAAgC+W,YAAhC;AACAx+B,KAAGW,UAAH,CAAeX,GAAGynB,YAAlB,EAAgCz9B,QAAhC,EAA0CgW,GAAGQ,WAA7C;;AAEAR,KAAGU,UAAH,CAAeV,GAAGwnB,oBAAlB,EAAwCiX,aAAxC;AACAz+B,KAAGW,UAAH,CAAeX,GAAGwnB,oBAAlB,EAAwCje,KAAxC,EAA+CvJ,GAAGQ,WAAlD;;AAEA0oB,YAAUoJ,eAAV;;AAEApoC,eAAa;AACZlQ,aAAUgmB,GAAG2wB,iBAAH,CAAsBzH,OAAtB,EAA+B,UAA/B,CADE;AAEZ/iC,OAAI6Z,GAAG2wB,iBAAH,CAAsBzH,OAAtB,EAA+B,IAA/B;AAFQ,GAAb;;AAKAhyB,aAAW;AACV2nC,aAAU7+B,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,UAAhC,CADA;AAEV4V,YAAS9+B,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,SAAhC,CAFC;;AAIVtmC,aAAUod,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,UAAhC,CAJA;AAKVt4C,WAAQovB,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,QAAhC,CALE;AAMVnwC,UAAOinB,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,OAAhC,CANG;;AAQV1wB,UAAOwH,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,OAAhC,CARG;AASVjvB,QAAK+F,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,KAAhC,CATK;AAUVlvB,YAASgG,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,SAAhC,CAVC;;AAYVjlB,oBAAiBjE,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,iBAAhC,CAZP;AAaVxoC,qBAAkBsf,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,kBAAhC,CAbR;;AAeV6V,YAAS/+B,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,SAAhC,CAfC;AAgBV7sB,eAAY2D,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,YAAhC,CAhBF;AAiBV5sB,YAAS0D,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,SAAhC,CAjBC;AAkBV3sB,WAAQyD,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,QAAhC,CAlBE;AAmBV1sB,aAAUwD,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,UAAhC,CAnBA;AAoBV8V,aAAUh/B,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,UAAhC,CApBA;;AAsBVnR,cAAW/X,GAAG0uB,kBAAH,CAAuBxF,OAAvB,EAAgC,WAAhC;AAtBD,GAAX;;AAyBA,MAAIlkC,SAASE,SAASC,eAAT,CAA0B,8BAA1B,EAA0D,QAA1D,CAAb;AACAH,SAAOI,KAAP,GAAe,CAAf;AACAJ,SAAOK,MAAP,GAAgB,CAAhB;;AAEA,MAAIC,UAAUN,OAAOO,UAAP,CAAmB,IAAnB,CAAd;AACAD,UAAQ25C,SAAR,GAAoB,OAApB;AACA35C,UAAQ45C,QAAR,CAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB,EAA2B,CAA3B;;AAEAj4C,YAAU,IAAIq3C,aAAJ,CAAmBt5C,MAAnB,CAAV;AAEA;;AAED,MAAK48B,MAAL,GAAc,UAAWud,OAAX,EAAoBrd,KAApB,EAA2BrhC,MAA3B,EAAoC;;AAEjD,MAAK0+C,QAAQ9/D,MAAR,KAAmB,CAAxB,EAA4B;;AAE5B;;AAEA,MAAK6pD,YAAYnrD,SAAjB,EAA6B;;AAE5B+nD;AAEA;;AAEDxE,QAAM8d,UAAN,CAAkBlW,OAAlB;;AAEA5H,QAAM+d,cAAN;AACA/d,QAAMge,eAAN,CAAuBp1C,WAAWlQ,QAAlC;AACAsnC,QAAMge,eAAN,CAAuBp1C,WAAW/D,EAAlC;AACAm7B,QAAMie,uBAAN;;AAEAje,QAAMhe,OAAN,CAAetD,GAAGw/B,SAAlB;AACAle,QAAMle,MAAN,CAAcpD,GAAG48B,KAAjB;;AAEA58B,KAAGU,UAAH,CAAeV,GAAGynB,YAAlB,EAAgC+W,YAAhC;AACAx+B,KAAGy/B,mBAAH,CAAwBv1C,WAAWlQ,QAAnC,EAA6C,CAA7C,EAAgDgmB,GAAGa,KAAnD,EAA0D,KAA1D,EAAiE,IAAI,CAArE,EAAwE,CAAxE;AACAb,KAAGy/B,mBAAH,CAAwBv1C,WAAW/D,EAAnC,EAAuC,CAAvC,EAA0C6Z,GAAGa,KAA7C,EAAoD,KAApD,EAA2D,IAAI,CAA/D,EAAkE,CAAlE;;AAEAb,KAAGU,UAAH,CAAeV,GAAGwnB,oBAAlB,EAAwCiX,aAAxC;;AAEAz+B,KAAG2rB,gBAAH,CAAqBz0B,SAASxW,gBAA9B,EAAgD,KAAhD,EAAuDD,OAAOC,gBAAP,CAAwBjS,QAA/E;;AAEA6yC,QAAMoe,aAAN,CAAqB1/B,GAAG2/B,QAAxB;AACA3/B,KAAG4qB,SAAH,CAAc1zB,SAAS+C,GAAvB,EAA4B,CAA5B;;AAEA,MAAI2lC,aAAa,CAAjB;AACA,MAAIC,eAAe,CAAnB;AACA,MAAIzjC,MAAM0lB,MAAM1lB,GAAhB;;AAEA,MAAKA,GAAL,EAAW;;AAEV4D,MAAGirB,SAAH,CAAc/zB,SAASsF,QAAvB,EAAiCJ,IAAI5D,KAAJ,CAAUpa,CAA3C,EAA8Cge,IAAI5D,KAAJ,CAAUjW,CAAxD,EAA2D6Z,IAAI5D,KAAJ,CAAU1qB,CAArE;;AAEA,OAAKsuB,IAAI0jC,KAAT,EAAiB;;AAEhB9/B,OAAGyqB,SAAH,CAAcvzB,SAASoF,OAAvB,EAAgCF,IAAInhB,IAApC;AACA+kB,OAAGyqB,SAAH,CAAcvzB,SAASqF,MAAvB,EAA+BH,IAAIlhB,GAAnC;;AAEA8kB,OAAG4qB,SAAH,CAAc1zB,SAAS6nC,OAAvB,EAAgC,CAAhC;AACAa,iBAAa,CAAb;AACAC,mBAAe,CAAf;AAEA,IATD,MASO,IAAKzjC,IAAIg7B,SAAT,EAAqB;;AAE3Bp3B,OAAGyqB,SAAH,CAAcvzB,SAASmF,UAAvB,EAAmCD,IAAI2jC,OAAvC;;AAEA//B,OAAG4qB,SAAH,CAAc1zB,SAAS6nC,OAAvB,EAAgC,CAAhC;AACAa,iBAAa,CAAb;AACAC,mBAAe,CAAf;AAEA;AAED,GAvBD,MAuBO;;AAEN7/B,MAAG4qB,SAAH,CAAc1zB,SAAS6nC,OAAvB,EAAgC,CAAhC;AACAa,gBAAa,CAAb;AACAC,kBAAe,CAAf;AAEA;;AAGD;;AAEA,OAAM,IAAIn/D,IAAI,CAAR,EAAWC,IAAIw+D,QAAQ9/D,MAA7B,EAAqCqB,IAAIC,CAAzC,EAA4CD,GAA5C,EAAmD;;AAElD,OAAIivB,SAASwvC,QAASz+D,CAAT,CAAb;;AAEAivB,UAAOsU,eAAP,CAAuBtuB,gBAAvB,CAAyC8K,OAAOsnB,kBAAhD,EAAoEpY,OAAOhP,WAA3E;AACAgP,UAAO9c,CAAP,GAAW,CAAE8c,OAAOsU,eAAP,CAAuBx1B,QAAvB,CAAiC,EAAjC,CAAb;AAEA;;AAED0wD,UAAQ3wB,IAAR,CAAc2pB,iBAAd;;AAEA;;AAEA,MAAIp/C,QAAQ,EAAZ;AACA,MAAInI,SAAS,EAAb;;AAEA,OAAM,IAAIlQ,IAAI,CAAR,EAAWC,IAAIw+D,QAAQ9/D,MAA7B,EAAqCqB,IAAIC,CAAzC,EAA4CD,GAA5C,EAAmD;;AAElD,OAAIivB,SAASwvC,QAASz+D,CAAT,CAAb;AACA,OAAI4mC,WAAW3X,OAAO2X,QAAtB;;AAEA,OAAKA,SAASlD,OAAT,KAAqB,KAA1B,EAAkC;;AAElCzU,UAAOgV,cAAP,CAAuB0c,QAAvB,EAAiCS,KAAjC,EAAwCrhC,MAAxC,EAAgD1iB,SAAhD,EAA2DupC,QAA3D,EAAqEvpC,SAArE;;AAEAiiC,MAAGyqB,SAAH,CAAcvzB,SAAS6gB,SAAvB,EAAkCzQ,SAASyQ,SAA3C;AACA/X,MAAG2rB,gBAAH,CAAqBz0B,SAAS+M,eAA9B,EAA+C,KAA/C,EAAsDtU,OAAOsU,eAAP,CAAuBx1B,QAA7E;;AAEAkhB,UAAOhP,WAAP,CAAmBzG,SAAnB,CAA8BwkD,cAA9B,EAA8CC,cAA9C,EAA8DC,WAA9D;;AAEA7lD,SAAO,CAAP,IAAa6lD,YAAYrgE,CAAzB;AACAwa,SAAO,CAAP,IAAa6lD,YAAYzzD,CAAzB;;AAEAyF,UAAQ,CAAR,IAAc+e,OAAO/e,MAAP,CAAcrS,CAAd,GAAkB,GAAhC;AACAqS,UAAQ,CAAR,IAAc+e,OAAO/e,MAAP,CAAczF,CAAd,GAAkB,GAAhC;;AAEA,OAAI4zD,UAAU,CAAd;;AAEA,OAAKjd,MAAM1lB,GAAN,IAAakL,SAASlL,GAA3B,EAAiC;;AAEhC2iC,cAAUc,YAAV;AAEA;;AAED,OAAKD,eAAeb,OAApB,EAA8B;;AAE7B/+B,OAAG4qB,SAAH,CAAc1zB,SAAS6nC,OAAvB,EAAgCA,OAAhC;AACAa,iBAAab,OAAb;AAEA;;AAED,OAAKz3B,SAASrN,GAAT,KAAiB,IAAtB,EAA6B;;AAE5B+F,OAAG+qB,SAAH,CAAc7zB,SAAS2nC,QAAvB,EAAiCv3B,SAASrN,GAAT,CAAa5pB,MAAb,CAAoB9R,CAArD,EAAwD+oC,SAASrN,GAAT,CAAa5pB,MAAb,CAAoBlF,CAA5E;AACA60B,OAAG+qB,SAAH,CAAc7zB,SAAS4nC,OAAvB,EAAgCx3B,SAASrN,GAAT,CAAajW,MAAb,CAAoBzlB,CAApD,EAAuD+oC,SAASrN,GAAT,CAAajW,MAAb,CAAoB7Y,CAA3E;AAEA,IALD,MAKO;;AAEN60B,OAAG+qB,SAAH,CAAc7zB,SAAS2nC,QAAvB,EAAiC,CAAjC,EAAoC,CAApC;AACA7+B,OAAG+qB,SAAH,CAAc7zB,SAAS4nC,OAAvB,EAAgC,CAAhC,EAAmC,CAAnC;AAEA;;AAED9+B,MAAGyqB,SAAH,CAAcvzB,SAAS8C,OAAvB,EAAgCsN,SAAStN,OAAzC;AACAgG,MAAGirB,SAAH,CAAc/zB,SAASsB,KAAvB,EAA8B8O,SAAS9O,KAAT,CAAepa,CAA7C,EAAgDkpB,SAAS9O,KAAT,CAAejW,CAA/D,EAAkE+kB,SAAS9O,KAAT,CAAe1qB,CAAjF;;AAEAkyB,MAAGyqB,SAAH,CAAcvzB,SAAStU,QAAvB,EAAiC0kB,SAAS1kB,QAA1C;AACAod,MAAG8qB,UAAH,CAAe5zB,SAAStmB,MAAxB,EAAgCA,MAAhC;AACAovB,MAAG8qB,UAAH,CAAe5zB,SAASne,KAAxB,EAA+BA,KAA/B;;AAEAuoC,SAAM0e,WAAN,CAAmB14B,SAASmP,QAA5B,EAAsCnP,SAASyP,aAA/C,EAA8DzP,SAASuP,QAAvE,EAAiFvP,SAASwP,QAA1F,EAAoGxP,SAAS4P,kBAA7G,EAAiI5P,SAAS0P,aAA1I,EAAyJ1P,SAAS2P,aAAlK,EAAiL3P,SAAS0Q,kBAA1L;AACAsJ,SAAMrhB,OAAN,CAAcf,KAAd,CAAoB29B,OAApB,CAA6Bv1B,SAAS8P,SAAtC;AACAkK,SAAMrhB,OAAN,CAAcf,KAAd,CAAoB+gC,OAApB,CAA6B34B,SAAS+P,UAAtC;AACAiK,SAAMrhB,OAAN,CAAczH,KAAd,CAAoBynC,OAApB,CAA6B34B,SAASoQ,UAAtC;;AAEA5yB,YAASgnC,YAAT,CAAuBxkB,SAASrN,GAAT,IAAgBhT,OAAvC,EAAgD,CAAhD;;AAEA+Y,MAAG6nB,YAAH,CAAiB7nB,GAAGqoB,SAApB,EAA+B,CAA/B,EAAkCroB,GAAGiB,cAArC,EAAqD,CAArD;;AAEAtR,UAAOiV,aAAP,CAAsByc,QAAtB,EAAgCS,KAAhC,EAAuCrhC,MAAvC,EAA+C1iB,SAA/C,EAA0DupC,QAA1D,EAAoEvpC,SAApE;AAEA;;AAED;;AAEAujD,QAAMle,MAAN,CAAcpD,GAAGw/B,SAAjB;;AAEAle,QAAMsH,KAAN;AAEA,EAhKD;;AAkKA,UAAS0J,aAAT,GAAyB;;AAExB,MAAIpJ,UAAUlpB,GAAGsyB,aAAH,EAAd;;AAEA,MAAIl0B,eAAe4B,GAAGmvB,YAAH,CAAiBnvB,GAAG4jB,aAApB,CAAnB;AACA,MAAIvlB,iBAAiB2B,GAAGmvB,YAAH,CAAiBnvB,GAAG8jB,eAApB,CAArB;;AAEA9jB,KAAGovB,YAAH,CAAiBhxB,YAAjB,EAA+B,CAE9B,eAAe+2B,aAAalnB,SAA5B,GAAwC,SAFV,EAI9B,yBAAyB,gBAJK,EAM9B,+BAN8B,EAO9B,gCAP8B,EAQ9B,yBAR8B,EAS9B,sBAT8B,EAU9B,qBAV8B,EAW9B,wBAX8B,EAY9B,uBAZ8B,EAc9B,0BAd8B,EAe9B,oBAf8B,EAiB9B,mBAjB8B,EAkB9B,yBAlB8B,EAoB9B,eApB8B,EAsB9B,iCAtB8B,EAwB9B,wDAxB8B,EA0B9B,wBA1B8B,EA2B9B,iGA3B8B,EA4B9B,iGA5B8B,EA8B9B,mBA9B8B,EAgC9B,6DAhC8B,EAiC9B,oCAjC8B,EAmC9B,+CAnC8B,EAqC9B,6BArC8B,EAuC9B,GAvC8B,EAyC7B+gB,IAzC6B,CAyCvB,IAzCuB,CAA/B;;AA2CAhvB,KAAGovB,YAAH,CAAiB/wB,cAAjB,EAAiC,CAEhC,eAAe82B,aAAalnB,SAA5B,GAAwC,SAFR,EAIhC,yBAAyB,gBAJO,EAMhC,qBANgC,EAOhC,wBAPgC,EAQhC,wBARgC,EAUhC,sBAVgC,EAWhC,wBAXgC,EAYhC,2BAZgC,EAahC,wBAbgC,EAchC,uBAdgC,EAehC,0BAfgC,EAiBhC,mBAjBgC,EAkBhC,yBAlBgC,EAoBhC,eApBgC,EAsBhC,wCAtBgC,EAwBhC,mEAxBgC,EA0BhC,6CA1BgC,EA4BhC,uBA5BgC,EA8BhC,0BA9BgC,EAgChC,yBAhCgC,EAkChC,yDAlCgC,EAoChC,YApCgC,EAsChC,iCAtCgC,EAuChC,gFAvCgC,EAwChC,oDAxCgC,EA0ChC,KA1CgC,EA4ChC,oEA5CgC,EA8ChC,IA9CgC,EAgDhC,GAhDgC,EAkD/B+gB,IAlD+B,CAkDzB,IAlDyB,CAAjC;;AAoDAhvB,KAAGqvB,aAAH,CAAkBjxB,YAAlB;AACA4B,KAAGqvB,aAAH,CAAkBhxB,cAAlB;;AAEA2B,KAAG4zB,YAAH,CAAiB1K,OAAjB,EAA0B9qB,YAA1B;AACA4B,KAAG4zB,YAAH,CAAiB1K,OAAjB,EAA0B7qB,cAA1B;;AAEA2B,KAAG8zB,WAAH,CAAgB5K,OAAhB;;AAEA,SAAOA,OAAP;AAEA;;AAED,UAASiP,iBAAT,CAA4BtqD,CAA5B,EAA+BC,CAA/B,EAAmC;;AAElC,MAAKD,EAAE22B,WAAF,KAAkB12B,EAAE02B,WAAzB,EAAuC;;AAEtC,UAAO32B,EAAE22B,WAAF,GAAgB12B,EAAE02B,WAAzB;AAEA,GAJD,MAIO,IAAK32B,EAAEgF,CAAF,KAAQ/E,EAAE+E,CAAf,EAAmB;;AAEzB,UAAO/E,EAAE+E,CAAF,GAAMhF,EAAEgF,CAAf;AAEA,GAJM,MAIA;;AAEN,UAAO/E,EAAEk4B,EAAF,GAAOn4B,EAAEm4B,EAAhB;AAEA;AAED;AAED;;AAED;;;;AAIA,SAASk6B,UAAT,CAAqBlgC,EAArB,EAAyByZ,UAAzB,EAAqC0mB,KAArC,EAA6C;;AAE5C,UAASC,WAAT,GAAuB;;AAEtB,MAAIC,SAAS,KAAb;;AAEA,MAAI7nC,QAAQ,IAAIpS,OAAJ,EAAZ;AACA,MAAIk6C,mBAAmB,IAAvB;AACA,MAAIC,oBAAoB,IAAIn6C,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,CAAxB;;AAEA,SAAO;;AAEN65C,YAAS,UAAWO,SAAX,EAAuB;;AAE/B,QAAKF,qBAAqBE,SAArB,IAAkC,CAAEH,MAAzC,EAAkD;;AAEjDrgC,QAAGwgC,SAAH,CAAcA,SAAd,EAAyBA,SAAzB,EAAoCA,SAApC,EAA+CA,SAA/C;AACAF,wBAAmBE,SAAnB;AAEA;AAED,IAXK;;AAaNC,cAAW,UAAWC,IAAX,EAAkB;;AAE5BL,aAASK,IAAT;AAEA,IAjBK;;AAmBNze,aAAU,UAAW7jC,CAAX,EAAcmE,CAAd,EAAiBzU,CAAjB,EAAoBD,CAApB,EAAuBmqC,kBAAvB,EAA4C;;AAErD,QAAKA,uBAAuB,IAA5B,EAAmC;;AAElC55B,UAAKvQ,CAAL,CAAQ0U,KAAK1U,CAAL,CAAQC,KAAKD,CAAL;AAEhB;;AAED2qB,UAAM/rB,GAAN,CAAW2R,CAAX,EAAcmE,CAAd,EAAiBzU,CAAjB,EAAoBD,CAApB;;AAEA,QAAK0yD,kBAAkBpwD,MAAlB,CAA0BqoB,KAA1B,MAAsC,KAA3C,EAAmD;;AAElDwH,QAAGuhB,UAAH,CAAenjC,CAAf,EAAkBmE,CAAlB,EAAqBzU,CAArB,EAAwBD,CAAxB;AACA0yD,uBAAkBnzD,IAAlB,CAAwBorB,KAAxB;AAEA;AAED,IApCK;;AAsCNowB,UAAO,YAAY;;AAElByX,aAAS,KAAT;;AAEAC,uBAAmB,IAAnB;AACAC,sBAAkB9zD,GAAlB,CAAuB,CAAE,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC,EALkB,CAKqB;AAEvC;;AA7CK,GAAP;AAiDA;;AAED,UAASk0D,WAAT,GAAuB;;AAEtB,MAAIN,SAAS,KAAb;;AAEA,MAAIO,mBAAmB,IAAvB;AACA,MAAIC,mBAAmB,IAAvB;AACA,MAAIC,oBAAoB,IAAxB;;AAEA,SAAO;;AAENjE,YAAS,UAAWzlB,SAAX,EAAuB;;AAE/B,QAAKA,SAAL,EAAiB;;AAEhBhU,YAAQpD,GAAG+gC,UAAX;AAEA,KAJD,MAIO;;AAENz9B,aAAStD,GAAG+gC,UAAZ;AAEA;AAED,IAdK;;AAgBNd,YAAS,UAAWe,SAAX,EAAuB;;AAE/B,QAAKJ,qBAAqBI,SAArB,IAAkC,CAAEX,MAAzC,EAAkD;;AAEjDrgC,QAAGghC,SAAH,CAAcA,SAAd;AACAJ,wBAAmBI,SAAnB;AAEA;AAED,IAzBK;;AA2BNC,YAAS,UAAW9pB,SAAX,EAAuB;;AAE/B,QAAK0pB,qBAAqB1pB,SAA1B,EAAsC;;AAErC,SAAKA,SAAL,EAAiB;;AAEhB,cAASA,SAAT;;AAEC,YAAK3zC,UAAL;;AAECw8B,WAAGmX,SAAH,CAAcnX,GAAGkhC,KAAjB;AACA;;AAED,YAAKz9D,WAAL;;AAECu8B,WAAGmX,SAAH,CAAcnX,GAAGmhC,MAAjB;AACA;;AAED,YAAKz9D,SAAL;;AAECs8B,WAAGmX,SAAH,CAAcnX,GAAGohC,IAAjB;AACA;;AAED,YAAKz9D,cAAL;;AAECq8B,WAAGmX,SAAH,CAAcnX,GAAGqhC,MAAjB;AACA;;AAED,YAAKz9D,UAAL;;AAECo8B,WAAGmX,SAAH,CAAcnX,GAAGshC,KAAjB;AACA;;AAED,YAAKz9D,iBAAL;;AAECm8B,WAAGmX,SAAH,CAAcnX,GAAGuhC,MAAjB;AACA;;AAED,YAAKz9D,YAAL;;AAECk8B,WAAGmX,SAAH,CAAcnX,GAAGwhC,OAAjB;AACA;;AAED,YAAKz9D,aAAL;;AAECi8B,WAAGmX,SAAH,CAAcnX,GAAGyhC,QAAjB;AACA;;AAED;;AAECzhC,WAAGmX,SAAH,CAAcnX,GAAGqhC,MAAjB;;AA5CF;AAgDA,MAlDD,MAkDO;;AAENrhC,SAAGmX,SAAH,CAAcnX,GAAGqhC,MAAjB;AAEA;;AAEDR,wBAAmB1pB,SAAnB;AAEA;AAED,IA3FK;;AA6FNspB,cAAW,UAAWC,IAAX,EAAkB;;AAE5BL,aAASK,IAAT;AAEA,IAjGK;;AAmGNze,aAAU,UAAW/iB,KAAX,EAAmB;;AAE5B,QAAK4hC,sBAAsB5hC,KAA3B,EAAmC;;AAElCc,QAAG0hC,UAAH,CAAexiC,KAAf;AACA4hC,yBAAoB5hC,KAApB;AAEA;AAED,IA5GK;;AA8GN0pB,UAAO,YAAY;;AAElByX,aAAS,KAAT;;AAEAO,uBAAmB,IAAnB;AACAC,uBAAmB,IAAnB;AACAC,wBAAoB,IAApB;AAEA;;AAtHK,GAAP;AA0HA;;AAED,UAASa,aAAT,GAAyB;;AAExB,MAAItB,SAAS,KAAb;;AAEA,MAAIuB,qBAAqB,IAAzB;AACA,MAAIC,qBAAqB,IAAzB;AACA,MAAIC,oBAAoB,IAAxB;AACA,MAAIC,yBAAyB,IAA7B;AACA,MAAIC,qBAAqB,IAAzB;AACA,MAAIC,sBAAsB,IAA1B;AACA,MAAIC,sBAAsB,IAA1B;AACA,MAAIC,sBAAsB,IAA1B;;AAEA,SAAO;;AAENtF,YAAS,UAAWuF,WAAX,EAAyB;;AAEjC,QAAKA,WAAL,EAAmB;;AAElBh/B,YAAQpD,GAAGqiC,YAAX;AAEA,KAJD,MAIO;;AAEN/+B,aAAStD,GAAGqiC,YAAZ;AAEA;AAED,IAdK;;AAgBNpC,YAAS,UAAWqC,WAAX,EAAyB;;AAEjC,QAAKV,uBAAuBU,WAAvB,IAAsC,CAAEjC,MAA7C,EAAsD;;AAErDrgC,QAAGsiC,WAAH,CAAgBA,WAAhB;AACAV,0BAAqBU,WAArB;AAEA;AAED,IAzBK;;AA2BNrB,YAAS,UAAWsB,WAAX,EAAwBC,UAAxB,EAAoCF,WAApC,EAAkD;;AAE1D,QAAKT,uBAAuBU,WAAvB,IACAT,sBAAuBU,UADvB,IAEAT,2BAA2BO,WAFhC,EAE8C;;AAE7CtiC,QAAGuiC,WAAH,CAAgBA,WAAhB,EAA6BC,UAA7B,EAAyCF,WAAzC;;AAEAT,0BAAqBU,WAArB;AACAT,yBAAoBU,UAApB;AACAT,8BAAyBO,WAAzB;AAEA;AAED,IAzCK;;AA2CNG,UAAO,UAAWC,WAAX,EAAwBC,YAAxB,EAAsCC,YAAtC,EAAqD;;AAE3D,QAAKZ,uBAAwBU,WAAxB,IACAT,wBAAwBU,YADxB,IAEAT,wBAAwBU,YAF7B,EAE4C;;AAE3C5iC,QAAG6iC,SAAH,CAAcH,WAAd,EAA2BC,YAA3B,EAAyCC,YAAzC;;AAEAZ,0BAAqBU,WAArB;AACAT,2BAAsBU,YAAtB;AACAT,2BAAsBU,YAAtB;AAEA;AAED,IAzDK;;AA2DNnC,cAAW,UAAWC,IAAX,EAAkB;;AAE5BL,aAASK,IAAT;AAEA,IA/DK;;AAiENze,aAAU,UAAW6gB,OAAX,EAAqB;;AAE9B,QAAKX,wBAAwBW,OAA7B,EAAuC;;AAEtC9iC,QAAG+iC,YAAH,CAAiBD,OAAjB;AACAX,2BAAsBW,OAAtB;AAEA;AAED,IA1EK;;AA4ENla,UAAO,YAAY;;AAElByX,aAAS,KAAT;;AAEAuB,yBAAqB,IAArB;AACAC,yBAAqB,IAArB;AACAC,wBAAoB,IAApB;AACAC,6BAAyB,IAAzB;AACAC,yBAAqB,IAArB;AACAC,0BAAsB,IAAtB;AACAC,0BAAsB,IAAtB;AACAC,0BAAsB,IAAtB;AAEA;;AAzFK,GAAP;AA6FA;;AAED;;AAEA,KAAIa,cAAc,IAAI5C,WAAJ,EAAlB;AACA,KAAIl5C,cAAc,IAAIy5C,WAAJ,EAAlB;AACA,KAAIx5C,gBAAgB,IAAIw6C,aAAJ,EAApB;;AAEA,KAAIsB,sBAAsBjjC,GAAG1V,YAAH,CAAiB0V,GAAG2kB,kBAApB,CAA1B;AACA,KAAIue,gBAAgB,IAAIxhC,UAAJ,CAAgBuhC,mBAAhB,CAApB;AACA,KAAIE,oBAAoB,IAAIzhC,UAAJ,CAAgBuhC,mBAAhB,CAAxB;AACA,KAAIG,oBAAoB,IAAI1hC,UAAJ,CAAgBuhC,mBAAhB,CAAxB;;AAEA,KAAI9N,eAAe,EAAnB;;AAEA,KAAIkO,2BAA2B,IAA/B;;AAEA,KAAIC,iBAAiB,IAArB;;AAEA,KAAIC,kBAAkB,IAAtB;AACA,KAAIC,uBAAuB,IAA3B;AACA,KAAIC,kBAAkB,IAAtB;AACA,KAAIC,kBAAkB,IAAtB;AACA,KAAIC,4BAA4B,IAAhC;AACA,KAAIC,uBAAuB,IAA3B;AACA,KAAIC,uBAAuB,IAA3B;AACA,KAAIC,2BAA2B,KAA/B;;AAEA,KAAIC,mBAAmB,IAAvB;AACA,KAAIC,kBAAkB,IAAtB;;AAEA,KAAIC,mBAAmB,IAAvB;;AAEA,KAAIC,6BAA6B,IAAjC;AACA,KAAIC,4BAA4B,IAAhC;;AAEA,KAAIjgB,cAAclkB,GAAG1V,YAAH,CAAiB0V,GAAGokC,gCAApB,CAAlB;;AAEA,KAAIC,qBAAqB,KAAzB;AACA,KAAI//C,UAAU,CAAd;AACA,KAAIggD,YAAYtkC,GAAG1V,YAAH,CAAiB0V,GAAGukC,OAApB,CAAhB;;AAEA,KAAKD,UAAUtkE,OAAV,CAAmB,OAAnB,MAAiC,CAAE,CAAxC,EAA4C;;AAE3CskB,YAAUgU,WAAY,kBAAkBC,IAAlB,CAAwB+rC,SAAxB,EAAqC,CAArC,CAAZ,CAAV;AACAD,uBAAuB//C,WAAW,GAAlC;AAEA,EALD,MAKO,IAAKggD,UAAUtkE,OAAV,CAAmB,WAAnB,MAAqC,CAAE,CAA5C,EAAgD;;AAEtDskB,YAAUgU,WAAY,uBAAuBC,IAAvB,CAA6B+rC,SAA7B,EAA0C,CAA1C,CAAZ,CAAV;AACAD,uBAAuB//C,WAAW,GAAlC;AAEA;;AAED,KAAIkgD,qBAAqB,IAAzB;AACA,KAAIC,uBAAuB,EAA3B;;AAEA,KAAIC,iBAAiB,IAAIt+C,OAAJ,EAArB;AACA,KAAIu+C,kBAAkB,IAAIv+C,OAAJ,EAAtB;;AAEA,UAASw+C,aAAT,CAAwBhlE,IAAxB,EAA8BZ,MAA9B,EAAsC8Y,KAAtC,EAA8C;;AAE7C,MAAI8P,OAAO,IAAI8Z,UAAJ,CAAgB,CAAhB,CAAX,CAF6C,CAEb;AAChC,MAAIza,UAAU+Y,GAAG4kC,aAAH,EAAd;;AAEA5kC,KAAG6kC,WAAH,CAAgBjlE,IAAhB,EAAsBqnB,OAAtB;AACA+Y,KAAG8kC,aAAH,CAAkBllE,IAAlB,EAAwBogC,GAAG+kC,kBAA3B,EAA+C/kC,GAAGglC,OAAlD;AACAhlC,KAAG8kC,aAAH,CAAkBllE,IAAlB,EAAwBogC,GAAGilC,kBAA3B,EAA+CjlC,GAAGglC,OAAlD;;AAEA,OAAM,IAAItkE,IAAI,CAAd,EAAiBA,IAAIoX,KAArB,EAA4BpX,GAA5B,EAAmC;;AAElCs/B,MAAGklC,UAAH,CAAelmE,SAAS0B,CAAxB,EAA2B,CAA3B,EAA8Bs/B,GAAGmlC,IAAjC,EAAuC,CAAvC,EAA0C,CAA1C,EAA6C,CAA7C,EAAgDnlC,GAAGmlC,IAAnD,EAAyDnlC,GAAG2B,aAA5D,EAA2E/Z,IAA3E;AAEA;;AAED,SAAOX,OAAP;AAEA;;AAED,KAAIm+C,gBAAgB,EAApB;AACAA,eAAeplC,GAAGqlC,UAAlB,IAAiCT,cAAe5kC,GAAGqlC,UAAlB,EAA8BrlC,GAAGqlC,UAAjC,EAA6C,CAA7C,CAAjC;AACAD,eAAeplC,GAAGslC,gBAAlB,IAAuCV,cAAe5kC,GAAGslC,gBAAlB,EAAoCtlC,GAAGulC,2BAAvC,EAAoE,CAApE,CAAvC;;AAEA;;AAEAvC,aAAY/gB,QAAZ,CAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B;AACA/6B,aAAY+6B,QAAZ,CAAsB,CAAtB;AACA96B,eAAc86B,QAAd,CAAwB,CAAxB;;AAEA7e,QAAQpD,GAAG+gC,UAAX;AACA75C,aAAY+5C,OAAZ,CAAqBt9D,cAArB;;AAEA6hE,cAAc,KAAd;AACAC,aAAavkE,YAAb;AACAkiC,QAAQpD,GAAGw/B,SAAX;;AAEAp8B,QAAQpD,GAAG48B,KAAX;AACAoD,aAAa79D,cAAb;;AAEA;;AAEA,UAASk9D,cAAT,GAA0B;;AAEzB,OAAM,IAAI3+D,IAAI,CAAR,EAAWC,IAAIuiE,cAAc7jE,MAAnC,EAA2CqB,IAAIC,CAA/C,EAAkDD,GAAlD,EAAyD;;AAExDwiE,iBAAexiE,CAAf,IAAqB,CAArB;AAEA;AAED;;AAED,UAAS4+D,eAAT,CAA0B9uD,SAA1B,EAAsC;;AAErC0yD,gBAAe1yD,SAAf,IAA6B,CAA7B;;AAEA,MAAK2yD,kBAAmB3yD,SAAnB,MAAmC,CAAxC,EAA4C;;AAE3CwvB,MAAG0lC,uBAAH,CAA4Bl1D,SAA5B;AACA2yD,qBAAmB3yD,SAAnB,IAAiC,CAAjC;AAEA;;AAED,MAAK4yD,kBAAmB5yD,SAAnB,MAAmC,CAAxC,EAA4C;;AAE3C,OAAI2yC,YAAY1J,WAAW76C,GAAX,CAAgB,wBAAhB,CAAhB;;AAEAukD,aAAUwiB,wBAAV,CAAoCn1D,SAApC,EAA+C,CAA/C;AACA4yD,qBAAmB5yD,SAAnB,IAAiC,CAAjC;AAEA;AAED;;AAED,UAASo1D,yBAAT,CAAoCp1D,SAApC,EAA+Cq1D,gBAA/C,EAAkE;;AAEjE3C,gBAAe1yD,SAAf,IAA6B,CAA7B;;AAEA,MAAK2yD,kBAAmB3yD,SAAnB,MAAmC,CAAxC,EAA4C;;AAE3CwvB,MAAG0lC,uBAAH,CAA4Bl1D,SAA5B;AACA2yD,qBAAmB3yD,SAAnB,IAAiC,CAAjC;AAEA;;AAED,MAAK4yD,kBAAmB5yD,SAAnB,MAAmCq1D,gBAAxC,EAA2D;;AAE1D,OAAI1iB,YAAY1J,WAAW76C,GAAX,CAAgB,wBAAhB,CAAhB;;AAEAukD,aAAUwiB,wBAAV,CAAoCn1D,SAApC,EAA+Cq1D,gBAA/C;AACAzC,qBAAmB5yD,SAAnB,IAAiCq1D,gBAAjC;AAEA;AAED;;AAED,UAAStG,uBAAT,GAAmC;;AAElC,OAAM,IAAI7+D,IAAI,CAAR,EAAWC,IAAIwiE,kBAAkB9jE,MAAvC,EAA+CqB,MAAMC,CAArD,EAAwD,EAAGD,CAA3D,EAA+D;;AAE9D,OAAKyiE,kBAAmBziE,CAAnB,MAA2BwiE,cAAexiE,CAAf,CAAhC,EAAqD;;AAEpDs/B,OAAG8lC,wBAAH,CAA6BplE,CAA7B;AACAyiE,sBAAmBziE,CAAnB,IAAyB,CAAzB;AAEA;AAED;AAED;;AAED,UAAS0iC,MAAT,CAAiB4C,EAAjB,EAAsB;;AAErB,MAAKmvB,aAAcnvB,EAAd,MAAuB,IAA5B,EAAmC;;AAElChG,MAAGoD,MAAH,CAAW4C,EAAX;AACAmvB,gBAAcnvB,EAAd,IAAqB,IAArB;AAEA;AAED;;AAED,UAAS1C,OAAT,CAAkB0C,EAAlB,EAAuB;;AAEtB,MAAKmvB,aAAcnvB,EAAd,MAAuB,KAA5B,EAAoC;;AAEnChG,MAAGsD,OAAH,CAAY0C,EAAZ;AACAmvB,gBAAcnvB,EAAd,IAAqB,KAArB;AAEA;AAED;;AAED,UAAS+/B,2BAAT,GAAuC;;AAEtC,MAAK1C,6BAA6B,IAAlC,EAAyC;;AAExCA,8BAA2B,EAA3B;;AAEA,OAAK5pB,WAAW76C,GAAX,CAAgB,gCAAhB,KACA66C,WAAW76C,GAAX,CAAgB,+BAAhB,CADA,IAEA66C,WAAW76C,GAAX,CAAgB,+BAAhB,CAFA,IAGA66C,WAAW76C,GAAX,CAAgB,+BAAhB,CAHL,EAGyD;;AAExD,QAAIonE,UAAUhmC,GAAG1V,YAAH,CAAiB0V,GAAGimC,0BAApB,CAAd;;AAEA,SAAM,IAAIvlE,IAAI,CAAd,EAAiBA,IAAIslE,QAAQ3mE,MAA7B,EAAqCqB,GAArC,EAA4C;;AAE3C2iE,8BAAyBpjE,IAAzB,CAA+B+lE,QAAStlE,CAAT,CAA/B;AAEA;AAED;AAED;;AAED,SAAO2iE,wBAAP;AAEA;;AAED,UAASjE,UAAT,CAAqBlW,OAArB,EAA+B;;AAE9B,MAAKoa,mBAAmBpa,OAAxB,EAAkC;;AAEjClpB,MAAGo/B,UAAH,CAAelW,OAAf;;AAEAoa,oBAAiBpa,OAAjB;;AAEA,UAAO,IAAP;AAEA;;AAED,SAAO,KAAP;AAEA;;AAED,UAAS8W,WAAT,CAAsBvpB,QAAtB,EAAgCM,aAAhC,EAA+CF,QAA/C,EAAyDC,QAAzD,EAAmEI,kBAAnE,EAAuFF,aAAvF,EAAsGC,aAAtG,EAAqHe,kBAArH,EAA0I;;AAEzI,MAAKvB,aAAav0C,UAAlB,EAA+B;;AAE9BkhC,UAAQpD,GAAG48B,KAAX;AAEA,GAJD,MAIO;;AAENt5B,WAAStD,GAAG48B,KAAZ;AAEA;;AAED,MAAKnmB,aAAal0C,cAAlB,EAAmC;;AAElC,OAAKk0C,aAAa8sB,eAAb,IAAgCvrB,uBAAuB8rB,wBAA5D,EAAuF;;AAEtF,YAASrtB,QAAT;;AAEC,UAAKr0C,gBAAL;;AAEC,UAAK41C,kBAAL,EAA0B;;AAEzBhY,UAAGkmC,qBAAH,CAA0BlmC,GAAGmmC,QAA7B,EAAuCnmC,GAAGmmC,QAA1C;AACAnmC,UAAGomC,iBAAH,CAAsBpmC,GAAGqmC,GAAzB,EAA8BrmC,GAAGqmC,GAAjC,EAAsCrmC,GAAGqmC,GAAzC,EAA8CrmC,GAAGqmC,GAAjD;AAEA,OALD,MAKO;;AAENrmC,UAAG+W,aAAH,CAAkB/W,GAAGmmC,QAArB;AACAnmC,UAAGsmC,SAAH,CAActmC,GAAGumC,SAAjB,EAA4BvmC,GAAGqmC,GAA/B;AAEA;AACD;;AAED,UAAKhkE,mBAAL;;AAEC,UAAK21C,kBAAL,EAA0B;;AAEzBhY,UAAGkmC,qBAAH,CAA0BlmC,GAAGmmC,QAA7B,EAAuCnmC,GAAGmmC,QAA1C;AACAnmC,UAAGomC,iBAAH,CAAsBpmC,GAAGwmC,IAAzB,EAA+BxmC,GAAGwmC,IAAlC,EAAwCxmC,GAAGymC,mBAA3C,EAAgEzmC,GAAG0mC,mBAAnE;AAEA,OALD,MAKO;;AAEN1mC,UAAG+W,aAAH,CAAkB/W,GAAGmmC,QAArB;AACAnmC,UAAGsmC,SAAH,CAActmC,GAAGwmC,IAAjB,EAAuBxmC,GAAGymC,mBAA1B;AAEA;AACD;;AAED,UAAKnkE,gBAAL;;AAEC,UAAK01C,kBAAL,EAA0B;;AAEzBhY,UAAGkmC,qBAAH,CAA0BlmC,GAAGmmC,QAA7B,EAAuCnmC,GAAGmmC,QAA1C;AACAnmC,UAAGomC,iBAAH,CAAsBpmC,GAAGwmC,IAAzB,EAA+BxmC,GAAG2mC,SAAlC,EAA6C3mC,GAAGwmC,IAAhD,EAAsDxmC,GAAGumC,SAAzD;AAEA,OALD,MAKO;;AAENvmC,UAAG+W,aAAH,CAAkB/W,GAAGmmC,QAArB;AACAnmC,UAAGsmC,SAAH,CAActmC,GAAGwmC,IAAjB,EAAuBxmC,GAAG2mC,SAA1B;AAEA;AACD;;AAED;;AAEC,UAAK3uB,kBAAL,EAA0B;;AAEzBhY,UAAGkmC,qBAAH,CAA0BlmC,GAAGmmC,QAA7B,EAAuCnmC,GAAGmmC,QAA1C;AACAnmC,UAAGomC,iBAAH,CAAsBpmC,GAAGqmC,GAAzB,EAA8BrmC,GAAG0mC,mBAAjC,EAAsD1mC,GAAGqmC,GAAzD,EAA8DrmC,GAAG0mC,mBAAjE;AAEA,OALD,MAKO;;AAEN1mC,UAAGkmC,qBAAH,CAA0BlmC,GAAGmmC,QAA7B,EAAuCnmC,GAAGmmC,QAA1C;AACAnmC,UAAGomC,iBAAH,CAAsBpmC,GAAGumC,SAAzB,EAAoCvmC,GAAG0mC,mBAAvC,EAA4D1mC,GAAGqmC,GAA/D,EAAoErmC,GAAG0mC,mBAAvE;AAEA;;AA3DH;AA+DA;;AAEDlD,0BAAuB,IAAvB;AACAC,qBAAkB,IAAlB;AACAC,qBAAkB,IAAlB;AACAC,+BAA4B,IAA5B;AACAC,0BAAuB,IAAvB;AACAC,0BAAuB,IAAvB;AAEA,GA5ED,MA4EO;;AAEN3sB,wBAAqBA,sBAAsBH,aAA3C;AACAC,mBAAgBA,iBAAiBH,QAAjC;AACAI,mBAAgBA,iBAAiBH,QAAjC;;AAEA,OAAKC,kBAAkBysB,oBAAlB,IAA0CtsB,uBAAuBysB,yBAAtE,EAAkG;;AAEjG3jC,OAAGkmC,qBAAH,CAA0B/F,MAAMyG,OAAN,CAAe7vB,aAAf,CAA1B,EAA0DopB,MAAMyG,OAAN,CAAe1vB,kBAAf,CAA1D;;AAEAssB,2BAAuBzsB,aAAvB;AACA4sB,gCAA4BzsB,kBAA5B;AAEA;;AAED,OAAKL,aAAa4sB,eAAb,IAAgC3sB,aAAa4sB,eAA7C,IAAgE1sB,kBAAkB4sB,oBAAlF,IAA0G3sB,kBAAkB4sB,oBAAjI,EAAwJ;;AAEvJ7jC,OAAGomC,iBAAH,CAAsBjG,MAAMyG,OAAN,CAAe/vB,QAAf,CAAtB,EAAiDspB,MAAMyG,OAAN,CAAe9vB,QAAf,CAAjD,EAA4EqpB,MAAMyG,OAAN,CAAe5vB,aAAf,CAA5E,EAA4GmpB,MAAMyG,OAAN,CAAe3vB,aAAf,CAA5G;;AAEAwsB,sBAAkB5sB,QAAlB;AACA6sB,sBAAkB5sB,QAAlB;AACA8sB,2BAAuB5sB,aAAvB;AACA6sB,2BAAuB5sB,aAAvB;AAEA;AAED;;AAEDssB,oBAAkB9sB,QAAlB;AACAqtB,6BAA2B9rB,kBAA3B;AAEA;;AAED,UAAS6uB,WAAT,CAAsBv/B,QAAtB,EAAgCw/B,WAAhC,EAA8C;;AAE7Cx/B,WAASoP,IAAT,KAAkB90C,UAAlB,GACG0hC,QAAStD,GAAGw/B,SAAZ,CADH,GAEGp8B,OAAQpD,GAAGw/B,SAAX,CAFH;;AAIA,MAAIxM,YAAc1rB,SAASoP,IAAT,KAAkB/0C,QAApC;AACA,MAAKmlE,WAAL,EAAmB9T,YAAY,CAAEA,SAAd;;AAEnBwS,eAAcxS,SAAd;;AAEA1rB,WAASsP,WAAT,KAAyB,IAAzB,GACGopB,YAAa14B,SAASmP,QAAtB,EAAgCnP,SAASyP,aAAzC,EAAwDzP,SAASuP,QAAjE,EAA2EvP,SAASwP,QAApF,EAA8FxP,SAAS4P,kBAAvG,EAA2H5P,SAAS0P,aAApI,EAAmJ1P,SAAS2P,aAA5J,EAA2K3P,SAAS0Q,kBAApL,CADH,GAEGgoB,YAAa99D,UAAb,CAFH;;AAIAglB,cAAY+5C,OAAZ,CAAqB35B,SAAS6P,SAA9B;AACAjwB,cAAY21C,OAAZ,CAAqBv1B,SAAS8P,SAA9B;AACAlwB,cAAY+4C,OAAZ,CAAqB34B,SAAS+P,UAA9B;AACA2rB,cAAY/C,OAAZ,CAAqB34B,SAASoQ,UAA9B;;AAEAqvB,mBAAkBz/B,SAASqQ,aAA3B,EAA0CrQ,SAASsQ,mBAAnD,EAAwEtQ,SAASuQ,kBAAjF;AAEA;;AAED;;AAEA,UAAS2tB,YAAT,CAAuBxS,SAAvB,EAAmC;;AAElC,MAAK+Q,qBAAqB/Q,SAA1B,EAAsC;;AAErC,OAAKA,SAAL,EAAiB;;AAEhBhzB,OAAGgnC,SAAH,CAAchnC,GAAGinC,EAAjB;AAEA,IAJD,MAIO;;AAENjnC,OAAGgnC,SAAH,CAAchnC,GAAGknC,GAAjB;AAEA;;AAEDnD,sBAAmB/Q,SAAnB;AAEA;AAED;;AAED,UAASyS,WAAT,CAAsB0B,QAAtB,EAAiC;;AAEhC,MAAKA,aAAalmE,YAAlB,EAAiC;;AAEhCmiC,UAAQpD,GAAGw/B,SAAX;;AAEA,OAAK2H,aAAanD,eAAlB,EAAoC;;AAEnC,QAAKmD,aAAajmE,YAAlB,EAAiC;;AAEhC8+B,QAAGmnC,QAAH,CAAannC,GAAGonC,IAAhB;AAEA,KAJD,MAIO,IAAKD,aAAahmE,aAAlB,EAAkC;;AAExC6+B,QAAGmnC,QAAH,CAAannC,GAAGqnC,KAAhB;AAEA,KAJM,MAIA;;AAENrnC,QAAGmnC,QAAH,CAAannC,GAAGsnC,cAAhB;AAEA;AAED;AAED,GAtBD,MAsBO;;AAENhkC,WAAStD,GAAGw/B,SAAZ;AAEA;;AAEDwE,oBAAkBmD,QAAlB;AAEA;;AAED,UAASI,YAAT,CAAuBniD,KAAvB,EAA+B;;AAE9B,MAAKA,UAAU6+C,gBAAf,EAAkC;;AAEjC,OAAKI,kBAAL,EAA0BrkC,GAAGwnC,SAAH,CAAcpiD,KAAd;;AAE1B6+C,sBAAmB7+C,KAAnB;AAEA;AAED;;AAED,UAAS2hD,gBAAT,CAA2BpvB,aAA3B,EAA0C8vB,MAA1C,EAAkDta,KAAlD,EAA0D;;AAEzD,MAAKxV,aAAL,EAAqB;;AAEpBvU,UAAQpD,GAAG0nC,mBAAX;;AAEA,OAAKxD,+BAA+BuD,MAA/B,IAAyCtD,8BAA8BhX,KAA5E,EAAoF;;AAEnFntB,OAAG2X,aAAH,CAAkB8vB,MAAlB,EAA0Bta,KAA1B;;AAEA+W,iCAA6BuD,MAA7B;AACAtD,gCAA4BhX,KAA5B;AAEA;AAED,GAbD,MAaO;;AAEN7pB,WAAStD,GAAG0nC,mBAAZ;AAEA;AAED;;AAED,UAAS5K,cAAT,CAAyB/1C,WAAzB,EAAuC;;AAEtC,MAAKA,WAAL,EAAmB;;AAElBqc,UAAQpD,GAAG2nC,YAAX;AAEA,GAJD,MAIO;;AAENrkC,WAAStD,GAAG2nC,YAAZ;AAEA;AAED;;AAED;;AAEA,UAASjI,aAAT,CAAwBkI,SAAxB,EAAoC;;AAEnC,MAAKA,cAAc7pE,SAAnB,EAA+B6pE,YAAY5nC,GAAG2/B,QAAH,GAAczb,WAAd,GAA4B,CAAxC;;AAE/B,MAAKsgB,uBAAuBoD,SAA5B,EAAwC;;AAEvC5nC,MAAG0/B,aAAH,CAAkBkI,SAAlB;AACApD,wBAAqBoD,SAArB;AAEA;AAED;;AAED,UAAS/C,WAAT,CAAsBgD,SAAtB,EAAiCC,YAAjC,EAAgD;;AAE/C,MAAKtD,uBAAuB,IAA5B,EAAmC;;AAElC9E;AAEA;;AAED,MAAIqI,eAAetD,qBAAsBD,kBAAtB,CAAnB;;AAEA,MAAKuD,iBAAiBhqE,SAAtB,EAAkC;;AAEjCgqE,kBAAe,EAAEnoE,MAAM7B,SAAR,EAAmBkpB,SAASlpB,SAA5B,EAAf;AACA0mE,wBAAsBD,kBAAtB,IAA6CuD,YAA7C;AAEA;;AAED,MAAKA,aAAanoE,IAAb,KAAsBioE,SAAtB,IAAmCE,aAAa9gD,OAAb,KAAyB6gD,YAAjE,EAAgF;;AAE/E9nC,MAAG6kC,WAAH,CAAgBgD,SAAhB,EAA2BC,gBAAgB1C,cAAeyC,SAAf,CAA3C;;AAEAE,gBAAanoE,IAAb,GAAoBioE,SAApB;AACAE,gBAAa9gD,OAAb,GAAuB6gD,YAAvB;AAEA;AAED;;AAED,UAASE,oBAAT,GAAgC;;AAE/B,MAAI;;AAEHhoC,MAAGgoC,oBAAH,CAAwBC,KAAxB,CAA+BjoC,EAA/B,EAAmC5gC,SAAnC;AAEA,GAJD,CAIE,OAAQ6R,KAAR,EAAgB;;AAEjBzD,WAAQyD,KAAR,CAAe,mBAAf,EAAoCA,KAApC;AAEA;AAED;;AAED,UAASi0D,UAAT,GAAsB;;AAErB,MAAI;;AAEHllC,MAAGklC,UAAH,CAAc+C,KAAd,CAAqBjoC,EAArB,EAAyB5gC,SAAzB;AAEA,GAJD,CAIE,OAAQ6R,KAAR,EAAgB;;AAEjBzD,WAAQyD,KAAR,CAAe,mBAAf,EAAoCA,KAApC;AAEA;AAED;;AAED;;AAEA,UAAS6V,OAAT,CAAkBA,OAAlB,EAA4B;;AAE3B,MAAK49C,eAAev0D,MAAf,CAAuB2W,OAAvB,MAAqC,KAA1C,EAAkD;;AAEjDkZ,MAAGlZ,OAAH,CAAYA,QAAQvoB,CAApB,EAAuBuoB,QAAQ3b,CAA/B,EAAkC2b,QAAQjU,CAA1C,EAA6CiU,QAAQvZ,CAArD;AACAm3D,kBAAet3D,IAAf,CAAqB0Z,OAArB;AAEA;AAED;;AAED,UAASE,QAAT,CAAmBA,QAAnB,EAA8B;;AAE7B,MAAK29C,gBAAgBx0D,MAAhB,CAAwB6W,QAAxB,MAAuC,KAA5C,EAAoD;;AAEnDgZ,MAAGhZ,QAAH,CAAaA,SAASzoB,CAAtB,EAAyByoB,SAAS7b,CAAlC,EAAqC6b,SAASnU,CAA9C,EAAiDmU,SAASzZ,CAA1D;AACAo3D,mBAAgBv3D,IAAhB,CAAsB4Z,QAAtB;AAEA;AAED;;AAED;;AAEA,UAAS4hC,KAAT,GAAiB;;AAEhB,OAAM,IAAIloD,IAAI,CAAd,EAAiBA,IAAIyiE,kBAAkB9jE,MAAvC,EAA+CqB,GAA/C,EAAsD;;AAErD,OAAKyiE,kBAAmBziE,CAAnB,MAA2B,CAAhC,EAAoC;;AAEnCs/B,OAAG8lC,wBAAH,CAA6BplE,CAA7B;AACAyiE,sBAAmBziE,CAAnB,IAAyB,CAAzB;AAEA;AAED;;AAEDy0D,iBAAe,EAAf;;AAEAkO,6BAA2B,IAA3B;;AAEAmB,uBAAqB,IAArB;AACAC,yBAAuB,EAAvB;;AAEAnB,mBAAiB,IAAjB;;AAEAC,oBAAkB,IAAlB;;AAEAQ,qBAAmB,IAAnB;AACAC,oBAAkB,IAAlB;;AAEAhB,cAAYpa,KAAZ;AACA1hC,cAAY0hC,KAAZ;AACAzhC,gBAAcyhC,KAAd;AAEA;;AAED,QAAO;;AAEN3oB,WAAS;AACRzH,UAAOwqC,WADC;AAER9jC,UAAOhY,WAFC;AAGR47C,YAAS37C;AAHD,GAFH;;AAQNk4C,kBAAgBA,cARV;AASNC,mBAAiBA,eATX;AAUNsG,6BAA2BA,yBAVrB;AAWNrG,2BAAyBA,uBAXnB;AAYNn8B,UAAQA,MAZF;AAaNE,WAASA,OAbH;AAcNyiC,+BAA6BA,2BAdvB;;AAgBN3G,cAAYA,UAhBN;;AAkBNY,eAAaA,WAlBP;AAmBN6G,eAAaA,WAnBP;;AAqBNrB,gBAAcA,YArBR;AAsBNC,eAAaA,WAtBP;;AAwBN8B,gBAAcA,YAxBR;AAyBNR,oBAAkBA,gBAzBZ;;AA2BNjK,kBAAgBA,cA3BV;;AA6BN4C,iBAAeA,aA7BT;AA8BNmF,eAAaA,WA9BP;AA+BNmD,wBAAsBA,oBA/BhB;AAgCN9C,cAAYA,UAhCN;;AAkCNp+C,WAASA,OAlCH;AAmCNE,YAAUA,QAnCJ;;AAqCN4hC,SAAOA;;AArCD,EAAP;AAyCA;;AAED;;;;AAIA,SAASsf,aAAT,CAAwBxL,GAAxB,EAA6BjjB,UAA7B,EAAyC6H,KAAzC,EAAgD1kB,UAAhD,EAA4Du4B,YAA5D,EAA0EgL,KAA1E,EAAiFrd,IAAjF,EAAwF;;AAEvF,KAAIqlB,YAAc,OAAOC,sBAAP,KAAkC,WAAlC,IAAiD1L,eAAe0L,sBAAlF,CAFuF,CAEqB;AAC5G,KAAIC,iBAAiB,EAArB;AACA,KAAIC,OAAJ;;AAEA;;AAEA,UAASC,cAAT,CAAyBplD,KAAzB,EAAgCqlD,OAAhC,EAA0C;;AAEzC,MAAKrlD,MAAMiC,KAAN,GAAcojD,OAAd,IAAyBrlD,MAAMkC,MAAN,GAAemjD,OAA7C,EAAuD;;AAEtD,OAAK,UAAUrlD,KAAf,EAAuB;;AAEtB3V,YAAQC,IAAR,CAAc,2DAA2D0V,MAAMiC,KAAjE,GAAyE,GAAzE,GAA+EjC,MAAMkC,MAArF,GAA8F,IAA5G;AACA;AAEA;;AAED;AACA;;AAEA,OAAItM,QAAQyvD,UAAUxqE,KAAKyM,GAAL,CAAU0Y,MAAMiC,KAAhB,EAAuBjC,MAAMkC,MAA7B,CAAtB;;AAEA,OAAIL,SAASE,SAASC,eAAT,CAA0B,8BAA1B,EAA0D,QAA1D,CAAb;AACAH,UAAOI,KAAP,GAAepnB,KAAKK,KAAL,CAAY8kB,MAAMiC,KAAN,GAAcrM,KAA1B,CAAf;AACAiM,UAAOK,MAAP,GAAgBrnB,KAAKK,KAAL,CAAY8kB,MAAMkC,MAAN,GAAetM,KAA3B,CAAhB;;AAEA,OAAIuM,UAAUN,OAAOO,UAAP,CAAmB,IAAnB,CAAd;AACAD,WAAQI,SAAR,CAAmBvC,KAAnB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgCA,MAAMiC,KAAtC,EAA6CjC,MAAMkC,MAAnD,EAA2D,CAA3D,EAA8D,CAA9D,EAAiEL,OAAOI,KAAxE,EAA+EJ,OAAOK,MAAtF;;AAEA7X,WAAQC,IAAR,CAAc,4CAA4C0V,MAAMiC,KAAlD,GAA0D,GAA1D,GAAgEjC,MAAMkC,MAAtE,GAA+E,gBAA/E,GAAkGL,OAAOI,KAAzG,GAAiH,GAAjH,GAAuHJ,OAAOK,MAA5I,EAAoJlC,KAApJ;;AAEA,UAAO6B,MAAP;AAEA;;AAED,SAAO7B,KAAP;AAEA;;AAED,UAASlX,YAAT,CAAuBkX,KAAvB,EAA+B;;AAE9B,SAAOzZ,MAAMuC,YAAN,CAAoBkX,MAAMiC,KAA1B,KAAqC1b,MAAMuC,YAAN,CAAoBkX,MAAMkC,MAA1B,CAA5C;AAEA;;AAED,UAASojD,cAAT,CAAyBtlD,KAAzB,EAAiC;;AAEhC,MAAKA,iBAAiBulD,gBAAjB,IAAqCvlD,iBAAiB8B,iBAAtD,IAA2E9B,iBAAiBwlD,WAAjG,EAA+G;;AAE9G,OAAKL,YAAYvqE,SAAjB,EAA6BuqE,UAAUpjD,SAASC,eAAT,CAA0B,8BAA1B,EAA0D,QAA1D,CAAV;;AAE7BmjD,WAAQljD,KAAR,GAAgB1b,MAAM4C,eAAN,CAAuB6W,MAAMiC,KAA7B,CAAhB;AACAkjD,WAAQjjD,MAAR,GAAiB3b,MAAM4C,eAAN,CAAuB6W,MAAMkC,MAA7B,CAAjB;;AAEA,OAAIC,UAAUgjD,QAAQ/iD,UAAR,CAAoB,IAApB,CAAd;AACAD,WAAQI,SAAR,CAAmBvC,KAAnB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgCmlD,QAAQljD,KAAxC,EAA+CkjD,QAAQjjD,MAAvD;;AAEA7X,WAAQC,IAAR,CAAc,qDAAqD0V,MAAMiC,KAA3D,GAAmE,GAAnE,GAAyEjC,MAAMkC,MAA/E,GAAwF,gBAAxF,GAA2GijD,QAAQljD,KAAnH,GAA2H,GAA3H,GAAiIkjD,QAAQjjD,MAAvJ,EAA+JlC,KAA/J;;AAEA,UAAOmlD,OAAP;AAEA;;AAED,SAAOnlD,KAAP;AAEA;;AAED,UAASylD,sBAAT,CAAiC3hD,OAAjC,EAA2C;;AAE1C,SAASA,QAAQ5D,KAAR,KAAkBpe,mBAAlB,IAAyCgiB,QAAQ3D,KAAR,KAAkBre,mBAA7D,IACJgiB,QAAQzD,SAAR,KAAsBre,aAAtB,IAAuC8hB,QAAQzD,SAAR,KAAsBle,YADhE;AAGA;;AAED,UAASujE,2BAAT,CAAsC5hD,OAAtC,EAA+Chb,YAA/C,EAA8D;;AAE7D,SAAOgb,QAAQ/C,eAAR,IAA2BjY,YAA3B,IACNgb,QAAQzD,SAAR,KAAsBre,aADhB,IACiC8hB,QAAQzD,SAAR,KAAsBle,YAD9D;AAGA;;AAED,UAASwjE,cAAT,CAAyB9pE,MAAzB,EAAiCioB,OAAjC,EAA0C7B,KAA1C,EAAiDC,MAAjD,EAA0D;;AAEzDq3C,MAAIoM,cAAJ,CAAoB9pE,MAApB;;AAEA,MAAI+pE,oBAAoBnsC,WAAWh+B,GAAX,CAAgBqoB,OAAhB,CAAxB;;AAEA;AACA8hD,oBAAkBC,aAAlB,GAAkChrE,KAAKoO,GAAL,CAAUpO,KAAKyM,GAAL,CAAU2a,KAAV,EAAiBC,MAAjB,CAAV,IAAwCrnB,KAAKirE,KAA/E;AAEA;;AAED;;AAEA,UAASC,cAAT,CAAyB31D,CAAzB,EAA6B;;AAE5B,MAAKA,MAAMpO,aAAN,IAAuBoO,MAAMnO,0BAA7B,IAA2DmO,MAAMlO,yBAAtE,EAAkG;;AAEjG,UAAOq3D,IAAIsI,OAAX;AAEA;;AAED,SAAOtI,IAAIyM,MAAX;AAEA;;AAED;;AAEA,UAASC,gBAAT,CAA2B7oE,KAA3B,EAAmC;;AAElC,MAAI0mB,UAAU1mB,MAAMvB,MAApB;;AAEAioB,UAAQ9mB,mBAAR,CAA6B,SAA7B,EAAwCipE,gBAAxC;;AAEAC,oBAAmBpiD,OAAnB;;AAEA,MAAKA,QAAQqiD,cAAb,EAA8B;;AAE7B,UAAOjB,eAAgBphD,QAAQ+e,EAAxB,CAAP;AAEA;;AAED8c,OAAKuE,MAAL,CAAYviC,QAAZ;AAEA;;AAED,UAASykD,qBAAT,CAAgChpE,KAAhC,EAAwC;;AAEvC,MAAIipE,eAAejpE,MAAMvB,MAAzB;;AAEAwqE,eAAarpE,mBAAb,CAAkC,SAAlC,EAA6CopE,qBAA7C;;AAEAE,yBAAwBD,YAAxB;;AAEA1mB,OAAKuE,MAAL,CAAYviC,QAAZ;AAEA;;AAED;;AAEA,UAASukD,iBAAT,CAA4BpiD,OAA5B,EAAsC;;AAErC,MAAI8hD,oBAAoBnsC,WAAWh+B,GAAX,CAAgBqoB,OAAhB,CAAxB;;AAEA,MAAKA,QAAQ9D,KAAR,IAAiB4lD,kBAAkBW,yBAAxC,EAAoE;;AAEnE;;AAEAhN,OAAIiN,aAAJ,CAAmBZ,kBAAkBW,yBAArC;AAEA,GAND,MAMO;;AAEN;;AAEA,OAAKX,kBAAkBa,WAAlB,KAAkC7rE,SAAvC,EAAmD;;AAEnD2+D,OAAIiN,aAAJ,CAAmBZ,kBAAkBc,cAArC;AAEA;;AAED;AACAjtC,aAAWuF,MAAX,CAAmBlb,OAAnB;AAEA;;AAED,UAASwiD,sBAAT,CAAiCD,YAAjC,EAAgD;;AAE/C,MAAIM,yBAAyBltC,WAAWh+B,GAAX,CAAgB4qE,YAAhB,CAA7B;AACA,MAAIT,oBAAoBnsC,WAAWh+B,GAAX,CAAgB4qE,aAAaviD,OAA7B,CAAxB;;AAEA,MAAK,CAAEuiD,YAAP,EAAsB;;AAEtB,MAAKT,kBAAkBc,cAAlB,KAAqC9rE,SAA1C,EAAsD;;AAErD2+D,OAAIiN,aAAJ,CAAmBZ,kBAAkBc,cAArC;AAEA;;AAED,MAAKL,aAAapiD,YAAlB,EAAiC;;AAEhCoiD,gBAAapiD,YAAb,CAA0BnB,OAA1B;AAEA;;AAED,MAAKujD,aAAa9hD,uBAAlB,EAA4C;;AAE3C,QAAM,IAAIhnB,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9Bg8D,QAAIqN,iBAAJ,CAAuBD,uBAAuBE,kBAAvB,CAA2CtpE,CAA3C,CAAvB;AACA,QAAKopE,uBAAuBG,kBAA5B,EAAiDvN,IAAIwN,kBAAJ,CAAwBJ,uBAAuBG,kBAAvB,CAA2CvpE,CAA3C,CAAxB;AAEjD;AAED,GATD,MASO;;AAENg8D,OAAIqN,iBAAJ,CAAuBD,uBAAuBE,kBAA9C;AACA,OAAKF,uBAAuBG,kBAA5B,EAAiDvN,IAAIwN,kBAAJ,CAAwBJ,uBAAuBG,kBAA/C;AAEjD;;AAEDrtC,aAAWuF,MAAX,CAAmBqnC,aAAaviD,OAAhC;AACA2V,aAAWuF,MAAX,CAAmBqnC,YAAnB;AAEA;;AAED;;;AAIA,UAAS1d,YAAT,CAAuB7kC,OAAvB,EAAgCkjD,IAAhC,EAAuC;;AAEtC,MAAIpB,oBAAoBnsC,WAAWh+B,GAAX,CAAgBqoB,OAAhB,CAAxB;;AAEA,MAAKA,QAAQqiD,cAAb,EAA8Bc,mBAAoBnjD,OAApB;;AAE9B,MAAKA,QAAQ3C,OAAR,GAAkB,CAAlB,IAAuBykD,kBAAkBsB,SAAlB,KAAgCpjD,QAAQ3C,OAApE,EAA8E;;AAE7E,OAAInB,QAAQ8D,QAAQ9D,KAApB;;AAEA,OAAKA,UAAUplB,SAAf,EAA2B;;AAE1ByP,YAAQC,IAAR,CAAc,uEAAd,EAAuFwZ,OAAvF;AAEA,IAJD,MAIO,IAAK9D,MAAMmnD,QAAN,KAAmB,KAAxB,EAAgC;;AAEtC98D,YAAQC,IAAR,CAAc,wEAAd,EAAwFwZ,OAAxF;AAEA,IAJM,MAIA;;AAENsjD,kBAAexB,iBAAf,EAAkC9hD,OAAlC,EAA2CkjD,IAA3C;AACA;AAEA;AAED;;AAED7oB,QAAMoe,aAAN,CAAqBhD,IAAIiD,QAAJ,GAAewK,IAApC;AACA7oB,QAAMujB,WAAN,CAAmBnI,IAAI2I,UAAvB,EAAmC0D,kBAAkBc,cAArD;AAEA;;AAED,UAAS7d,cAAT,CAAyB/kC,OAAzB,EAAkCkjD,IAAlC,EAAyC;;AAExC,MAAIpB,oBAAoBnsC,WAAWh+B,GAAX,CAAgBqoB,OAAhB,CAAxB;;AAEA,MAAKA,QAAQ9D,KAAR,CAAc9jB,MAAd,KAAyB,CAA9B,EAAkC;;AAEjC,OAAK4nB,QAAQ3C,OAAR,GAAkB,CAAlB,IAAuBykD,kBAAkBsB,SAAlB,KAAgCpjD,QAAQ3C,OAApE,EAA8E;;AAE7E,QAAK,CAAEykD,kBAAkBW,yBAAzB,EAAqD;;AAEpDziD,aAAQtnB,gBAAR,CAA0B,SAA1B,EAAqCypE,gBAArC;;AAEAL,uBAAkBW,yBAAlB,GAA8ChN,IAAIkI,aAAJ,EAA9C;;AAEA9hB,UAAKuE,MAAL,CAAYviC,QAAZ;AAEA;;AAEDw8B,UAAMoe,aAAN,CAAqBhD,IAAIiD,QAAJ,GAAewK,IAApC;AACA7oB,UAAMujB,WAAN,CAAmBnI,IAAI4I,gBAAvB,EAAyCyD,kBAAkBW,yBAA3D;;AAEAhN,QAAI8N,WAAJ,CAAiB9N,IAAI+N,mBAArB,EAA0CxjD,QAAQ7C,KAAlD;;AAEA,QAAIsmD,eAAiBzjD,WAAWA,QAAQ0jD,mBAAxC;AACA,QAAI9iD,gBAAkBZ,QAAQ9D,KAAR,CAAe,CAAf,KAAsB8D,QAAQ9D,KAAR,CAAe,CAAf,EAAmB0E,aAA/D;;AAEA,QAAI+iD,YAAY,EAAhB;;AAEA,SAAM,IAAIlqE,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9B,SAAK,CAAEgqE,YAAF,IAAkB,CAAE7iD,aAAzB,EAAyC;;AAExC+iD,gBAAWlqE,CAAX,IAAiB6nE,eAAgBthD,QAAQ9D,KAAR,CAAeziB,CAAf,CAAhB,EAAoCy0D,aAAa3Q,cAAjD,CAAjB;AAEA,MAJD,MAIO;;AAENomB,gBAAWlqE,CAAX,IAAiBmnB,gBAAgBZ,QAAQ9D,KAAR,CAAeziB,CAAf,EAAmByiB,KAAnC,GAA2C8D,QAAQ9D,KAAR,CAAeziB,CAAf,CAA5D;AAEA;AAED;;AAED,QAAIyiB,QAAQynD,UAAW,CAAX,CAAZ;AAAA,QACCC,oBAAoB5+D,aAAckX,KAAd,CADrB;AAAA,QAEC2nD,WAAW3K,MAAMyG,OAAN,CAAe3/C,QAAQxD,MAAvB,CAFZ;AAAA,QAGCsnD,SAAS5K,MAAMyG,OAAN,CAAe3/C,QAAQrnB,IAAvB,CAHV;;AAKAorE,yBAAsBtO,IAAI4I,gBAA1B,EAA4Cr+C,OAA5C,EAAqD4jD,iBAArD;;AAEA,SAAM,IAAInqE,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9B,SAAK,CAAEgqE,YAAP,EAAsB;;AAErB,UAAK7iD,aAAL,EAAqB;;AAEpBy5B,aAAM4jB,UAAN,CAAkBxI,IAAI6I,2BAAJ,GAAkC7kE,CAApD,EAAuD,CAAvD,EAA0DoqE,QAA1D,EAAoEF,UAAWlqE,CAAX,EAAe0kB,KAAnF,EAA0FwlD,UAAWlqE,CAAX,EAAe2kB,MAAzG,EAAiH,CAAjH,EAAoHylD,QAApH,EAA8HC,MAA9H,EAAsIH,UAAWlqE,CAAX,EAAeknB,IAArJ;AAEA,OAJD,MAIO;;AAEN05B,aAAM4jB,UAAN,CAAkBxI,IAAI6I,2BAAJ,GAAkC7kE,CAApD,EAAuD,CAAvD,EAA0DoqE,QAA1D,EAAoEA,QAApE,EAA8EC,MAA9E,EAAsFH,UAAWlqE,CAAX,CAAtF;AAEA;AAED,MAZD,MAYO;;AAEN,UAAIuqE,MAAJ;AAAA,UAAYnnD,UAAU8mD,UAAWlqE,CAAX,EAAeojB,OAArC;;AAEA,WAAM,IAAI2H,IAAI,CAAR,EAAW+e,KAAK1mB,QAAQzkB,MAA9B,EAAsCosB,IAAI+e,EAA1C,EAA8C/e,GAA9C,EAAqD;;AAEpDw/C,gBAASnnD,QAAS2H,CAAT,CAAT;;AAEA,WAAKxE,QAAQxD,MAAR,KAAmBld,UAAnB,IAAiC0gB,QAAQxD,MAAR,KAAmBnd,SAAzD,EAAqE;;AAEpE,YAAKg7C,MAAMykB,2BAAN,GAAoC/lE,OAApC,CAA6C8qE,QAA7C,IAA0D,CAAE,CAAjE,EAAqE;;AAEpExpB,eAAM0mB,oBAAN,CAA4BtL,IAAI6I,2BAAJ,GAAkC7kE,CAA9D,EAAiE+qB,CAAjE,EAAoEq/C,QAApE,EAA8EG,OAAO7lD,KAArF,EAA4F6lD,OAAO5lD,MAAnG,EAA2G,CAA3G,EAA8G4lD,OAAOrjD,IAArH;AAEA,SAJD,MAIO;;AAENpa,iBAAQC,IAAR,CAAc,iGAAd;AAEA;AAED,QAZD,MAYO;;AAEN6zC,cAAM4jB,UAAN,CAAkBxI,IAAI6I,2BAAJ,GAAkC7kE,CAApD,EAAuD+qB,CAAvD,EAA0Dq/C,QAA1D,EAAoEG,OAAO7lD,KAA3E,EAAkF6lD,OAAO5lD,MAAzF,EAAiG,CAAjG,EAAoGylD,QAApG,EAA8GC,MAA9G,EAAsHE,OAAOrjD,IAA7H;AAEA;AAED;AAED;AAED;;AAED,QAAK,CAAE8iD,YAAP,EAAsB;;AAErB3B,uBAAkBC,aAAlB,GAAkC,CAAlC;AAEA,KAJD,MAIO;;AAEND,uBAAkBC,aAAlB,GAAkCllD,QAAQzkB,MAAR,GAAiB,CAAnD;AAEA;;AAED,QAAKwpE,4BAA6B5hD,OAA7B,EAAsC4jD,iBAAtC,CAAL,EAAiE;;AAEhE;AACA/B,oBAAgBpM,IAAI4I,gBAApB,EAAsCr+C,OAAtC,EAA+C9D,MAAMiC,KAArD,EAA4DjC,MAAMkC,MAAlE;AAEA;;AAED0jD,sBAAkBsB,SAAlB,GAA8BpjD,QAAQ3C,OAAtC;;AAEA,QAAK2C,QAAQ1C,QAAb,EAAwB0C,QAAQ1C,QAAR,CAAkB0C,OAAlB;AAExB,IA9GD,MA8GO;;AAENq6B,UAAMoe,aAAN,CAAqBhD,IAAIiD,QAAJ,GAAewK,IAApC;AACA7oB,UAAMujB,WAAN,CAAmBnI,IAAI4I,gBAAvB,EAAyCyD,kBAAkBW,yBAA3D;AAEA;AAED;AAED;;AAED,UAASwB,qBAAT,CAAgCjkD,OAAhC,EAAyCkjD,IAAzC,EAAgD;;AAE/C7oB,QAAMoe,aAAN,CAAqBhD,IAAIiD,QAAJ,GAAewK,IAApC;AACA7oB,QAAMujB,WAAN,CAAmBnI,IAAI4I,gBAAvB,EAAyC1oC,WAAWh+B,GAAX,CAAgBqoB,OAAhB,EAA0B4iD,cAAnE;AAEA;;AAED,UAASmB,oBAAT,CAA+BG,WAA/B,EAA4ClkD,OAA5C,EAAqD4jD,iBAArD,EAAyE;;AAExE,MAAI1nB,SAAJ;;AAEA,MAAK0nB,iBAAL,EAAyB;;AAExBnO,OAAIoI,aAAJ,CAAmBqG,WAAnB,EAAgCzO,IAAI0O,cAApC,EAAoDjL,MAAMyG,OAAN,CAAe3/C,QAAQ5D,KAAvB,CAApD;AACAq5C,OAAIoI,aAAJ,CAAmBqG,WAAnB,EAAgCzO,IAAI2O,cAApC,EAAoDlL,MAAMyG,OAAN,CAAe3/C,QAAQ3D,KAAvB,CAApD;;AAEAo5C,OAAIoI,aAAJ,CAAmBqG,WAAnB,EAAgCzO,IAAIuI,kBAApC,EAAwD9E,MAAMyG,OAAN,CAAe3/C,QAAQ1D,SAAvB,CAAxD;AACAm5C,OAAIoI,aAAJ,CAAmBqG,WAAnB,EAAgCzO,IAAIqI,kBAApC,EAAwD5E,MAAMyG,OAAN,CAAe3/C,QAAQzD,SAAvB,CAAxD;AAEA,GARD,MAQO;;AAENk5C,OAAIoI,aAAJ,CAAmBqG,WAAnB,EAAgCzO,IAAI0O,cAApC,EAAoD1O,IAAI4O,aAAxD;AACA5O,OAAIoI,aAAJ,CAAmBqG,WAAnB,EAAgCzO,IAAI2O,cAApC,EAAoD3O,IAAI4O,aAAxD;;AAEA,OAAKrkD,QAAQ5D,KAAR,KAAkBpe,mBAAlB,IAAyCgiB,QAAQ3D,KAAR,KAAkBre,mBAAhE,EAAsF;;AAErFuI,YAAQC,IAAR,CAAc,+HAAd,EAA+IwZ,OAA/I;AAEA;;AAEDy1C,OAAIoI,aAAJ,CAAmBqG,WAAnB,EAAgCzO,IAAIuI,kBAApC,EAAwDiE,eAAgBjiD,QAAQ1D,SAAxB,CAAxD;AACAm5C,OAAIoI,aAAJ,CAAmBqG,WAAnB,EAAgCzO,IAAIqI,kBAApC,EAAwDmE,eAAgBjiD,QAAQzD,SAAxB,CAAxD;;AAEA,OAAKyD,QAAQzD,SAAR,KAAsBre,aAAtB,IAAuC8hB,QAAQzD,SAAR,KAAsBle,YAAlE,EAAiF;;AAEhFkI,YAAQC,IAAR,CAAc,iIAAd,EAAiJwZ,OAAjJ;AAEA;AAED;;AAEDk8B,cAAY1J,WAAW76C,GAAX,CAAgB,gCAAhB,CAAZ;;AAEA,MAAKukD,SAAL,EAAiB;;AAEhB,OAAKl8B,QAAQrnB,IAAR,KAAiBmG,SAAjB,IAA8B0zC,WAAW76C,GAAX,CAAgB,0BAAhB,MAAiD,IAApF,EAA2F;AAC3F,OAAKqoB,QAAQrnB,IAAR,KAAiBoG,aAAjB,IAAkCyzC,WAAW76C,GAAX,CAAgB,+BAAhB,MAAsD,IAA7F,EAAoG;;AAEpG,OAAKqoB,QAAQvD,UAAR,GAAqB,CAArB,IAA0BkZ,WAAWh+B,GAAX,CAAgBqoB,OAAhB,EAA0BskD,mBAAzD,EAA+E;;AAE9E7O,QAAI8O,aAAJ,CAAmBL,WAAnB,EAAgChoB,UAAUsoB,0BAA1C,EAAsEztE,KAAKwM,GAAL,CAAUyc,QAAQvD,UAAlB,EAA8ByxC,aAAa3R,gBAAb,EAA9B,CAAtE;AACA5mB,eAAWh+B,GAAX,CAAgBqoB,OAAhB,EAA0BskD,mBAA1B,GAAgDtkD,QAAQvD,UAAxD;AAEA;AAED;AAED;;AAED,UAAS6mD,aAAT,CAAwBxB,iBAAxB,EAA2C9hD,OAA3C,EAAoDkjD,IAApD,EAA2D;;AAE1D,MAAKpB,kBAAkBa,WAAlB,KAAkC7rE,SAAvC,EAAmD;;AAElDgrE,qBAAkBa,WAAlB,GAAgC,IAAhC;;AAEA3iD,WAAQtnB,gBAAR,CAA0B,SAA1B,EAAqCypE,gBAArC;;AAEAL,qBAAkBc,cAAlB,GAAmCnN,IAAIkI,aAAJ,EAAnC;;AAEA9hB,QAAKuE,MAAL,CAAYviC,QAAZ;AAEA;;AAEDw8B,QAAMoe,aAAN,CAAqBhD,IAAIiD,QAAJ,GAAewK,IAApC;AACA7oB,QAAMujB,WAAN,CAAmBnI,IAAI2I,UAAvB,EAAmC0D,kBAAkBc,cAArD;;AAEAnN,MAAI8N,WAAJ,CAAiB9N,IAAI+N,mBAArB,EAA0CxjD,QAAQ7C,KAAlD;AACAs4C,MAAI8N,WAAJ,CAAiB9N,IAAIgP,8BAArB,EAAqDzkD,QAAQ9C,gBAA7D;AACAu4C,MAAI8N,WAAJ,CAAiB9N,IAAIiP,gBAArB,EAAuC1kD,QAAQ5C,eAA/C;;AAEA,MAAIlB,QAAQolD,eAAgBthD,QAAQ9D,KAAxB,EAA+BgyC,aAAa7Q,cAA5C,CAAZ;;AAEA,MAAKskB,uBAAwB3hD,OAAxB,KAAqChb,aAAckX,KAAd,MAA0B,KAApE,EAA4E;;AAE3EA,WAAQslD,eAAgBtlD,KAAhB,CAAR;AAEA;;AAED,MAAI0nD,oBAAoB5+D,aAAckX,KAAd,CAAxB;AAAA,MACC2nD,WAAW3K,MAAMyG,OAAN,CAAe3/C,QAAQxD,MAAvB,CADZ;AAAA,MAECsnD,SAAS5K,MAAMyG,OAAN,CAAe3/C,QAAQrnB,IAAvB,CAFV;;AAIAorE,uBAAsBtO,IAAI2I,UAA1B,EAAsCp+C,OAAtC,EAA+C4jD,iBAA/C;;AAEA,MAAII,MAAJ;AAAA,MAAYnnD,UAAUmD,QAAQnD,OAA9B;;AAEA,MAAKmD,QAAQ2kD,cAAb,EAA8B;;AAE7B;;AAEA,OAAIC,iBAAiBnP,IAAIoP,eAAzB;;AAEA,OAAK7kD,QAAQrnB,IAAR,KAAiBmG,SAAtB,EAAkC;;AAEjC,QAAK,CAAEoiE,SAAP,EAAmB,MAAM,IAAIn7D,KAAJ,CAAW,gDAAX,CAAN;AACnB6+D,qBAAiBnP,IAAIqP,kBAArB;AAEA,IALD,MAKO,IAAK5D,SAAL,EAAiB;;AAEvB;AACA0D,qBAAiBnP,IAAIsP,iBAArB;AAEA;;AAED,OAAK/kD,QAAQxD,MAAR,KAAmB9c,WAAnB,IAAkCklE,mBAAmBnP,IAAIoP,eAA9D,EAAgF;;AAE/E;AACA;AACA;AACA,QAAK7kD,QAAQrnB,IAAR,KAAiBgG,iBAAjB,IAAsCqhB,QAAQrnB,IAAR,KAAiBkG,eAA5D,EAA8E;;AAE7E0H,aAAQC,IAAR,CAAc,6FAAd;;AAEAwZ,aAAQrnB,IAAR,GAAegG,iBAAf;AACAmlE,cAAS5K,MAAMyG,OAAN,CAAe3/C,QAAQrnB,IAAvB,CAAT;AAEA;AAED;;AAED;AACA;AACA,OAAKqnB,QAAQxD,MAAR,KAAmB7c,kBAAxB,EAA6C;;AAE5CilE,qBAAiBnP,IAAIuP,aAArB;;AAEA;AACA;AACA;AACA,QAAKhlD,QAAQrnB,IAAR,KAAiBwG,kBAAtB,EAA2C;;AAE1CoH,aAAQC,IAAR,CAAc,kFAAd;;AAEAwZ,aAAQrnB,IAAR,GAAewG,kBAAf;AACA2kE,cAAS5K,MAAMyG,OAAN,CAAe3/C,QAAQrnB,IAAvB,CAAT;AAEA;AAED;;AAED0hD,SAAM4jB,UAAN,CAAkBxI,IAAI2I,UAAtB,EAAkC,CAAlC,EAAqCwG,cAArC,EAAqD1oD,MAAMiC,KAA3D,EAAkEjC,MAAMkC,MAAxE,EAAgF,CAAhF,EAAmFylD,QAAnF,EAA6FC,MAA7F,EAAqG,IAArG;AAEA,GAxDD,MAwDO,IAAK9jD,QAAQY,aAAb,EAA6B;;AAEnC;AACA;AACA;;AAEA,OAAK/D,QAAQzkB,MAAR,GAAiB,CAAjB,IAAsBwrE,iBAA3B,EAA+C;;AAE9C,SAAM,IAAInqE,IAAI,CAAR,EAAWkoB,KAAK9E,QAAQzkB,MAA9B,EAAsCqB,IAAIkoB,EAA1C,EAA8CloB,GAA9C,EAAqD;;AAEpDuqE,cAASnnD,QAASpjB,CAAT,CAAT;AACA4gD,WAAM4jB,UAAN,CAAkBxI,IAAI2I,UAAtB,EAAkC3kE,CAAlC,EAAqCoqE,QAArC,EAA+CG,OAAO7lD,KAAtD,EAA6D6lD,OAAO5lD,MAApE,EAA4E,CAA5E,EAA+EylD,QAA/E,EAAyFC,MAAzF,EAAiGE,OAAOrjD,IAAxG;AAEA;;AAEDX,YAAQ/C,eAAR,GAA0B,KAA1B;AACA6kD,sBAAkBC,aAAlB,GAAkCllD,QAAQzkB,MAAR,GAAiB,CAAnD;AAEA,IAZD,MAYO;;AAENiiD,UAAM4jB,UAAN,CAAkBxI,IAAI2I,UAAtB,EAAkC,CAAlC,EAAqCyF,QAArC,EAA+C3nD,MAAMiC,KAArD,EAA4DjC,MAAMkC,MAAlE,EAA0E,CAA1E,EAA6EylD,QAA7E,EAAuFC,MAAvF,EAA+F5nD,MAAMyE,IAArG;AACAmhD,sBAAkBC,aAAlB,GAAkC,CAAlC;AAEA;AAED,GAzBM,MAyBA,IAAK/hD,QAAQ0jD,mBAAb,EAAmC;;AAEzC,QAAM,IAAIjqE,IAAI,CAAR,EAAWkoB,KAAK9E,QAAQzkB,MAA9B,EAAsCqB,IAAIkoB,EAA1C,EAA8CloB,GAA9C,EAAqD;;AAEpDuqE,aAASnnD,QAASpjB,CAAT,CAAT;;AAEA,QAAKumB,QAAQxD,MAAR,KAAmBld,UAAnB,IAAiC0gB,QAAQxD,MAAR,KAAmBnd,SAAzD,EAAqE;;AAEpE,SAAKg7C,MAAMykB,2BAAN,GAAoC/lE,OAApC,CAA6C8qE,QAA7C,IAA0D,CAAE,CAAjE,EAAqE;;AAEpExpB,YAAM0mB,oBAAN,CAA4BtL,IAAI2I,UAAhC,EAA4C3kE,CAA5C,EAA+CoqE,QAA/C,EAAyDG,OAAO7lD,KAAhE,EAAuE6lD,OAAO5lD,MAA9E,EAAsF,CAAtF,EAAyF4lD,OAAOrjD,IAAhG;AAEA,MAJD,MAIO;;AAENpa,cAAQC,IAAR,CAAc,gGAAd;AAEA;AAED,KAZD,MAYO;;AAEN6zC,WAAM4jB,UAAN,CAAkBxI,IAAI2I,UAAtB,EAAkC3kE,CAAlC,EAAqCoqE,QAArC,EAA+CG,OAAO7lD,KAAtD,EAA6D6lD,OAAO5lD,MAApE,EAA4E,CAA5E,EAA+EylD,QAA/E,EAAyFC,MAAzF,EAAiGE,OAAOrjD,IAAxG;AAEA;AAED;;AAEDmhD,qBAAkBC,aAAlB,GAAkCllD,QAAQzkB,MAAR,GAAiB,CAAnD;AAEA,GA5BM,MA4BA;;AAEN;;AAEA;AACA;AACA;;AAEA,OAAKykB,QAAQzkB,MAAR,GAAiB,CAAjB,IAAsBwrE,iBAA3B,EAA+C;;AAE9C,SAAM,IAAInqE,IAAI,CAAR,EAAWkoB,KAAK9E,QAAQzkB,MAA9B,EAAsCqB,IAAIkoB,EAA1C,EAA8CloB,GAA9C,EAAqD;;AAEpDuqE,cAASnnD,QAASpjB,CAAT,CAAT;AACA4gD,WAAM4jB,UAAN,CAAkBxI,IAAI2I,UAAtB,EAAkC3kE,CAAlC,EAAqCoqE,QAArC,EAA+CA,QAA/C,EAAyDC,MAAzD,EAAiEE,MAAjE;AAEA;;AAEDhkD,YAAQ/C,eAAR,GAA0B,KAA1B;AACA6kD,sBAAkBC,aAAlB,GAAkCllD,QAAQzkB,MAAR,GAAiB,CAAnD;AAEA,IAZD,MAYO;;AAENiiD,UAAM4jB,UAAN,CAAkBxI,IAAI2I,UAAtB,EAAkC,CAAlC,EAAqCyF,QAArC,EAA+CA,QAA/C,EAAyDC,MAAzD,EAAiE5nD,KAAjE;AACA4lD,sBAAkBC,aAAlB,GAAkC,CAAlC;AAEA;AAED;;AAED,MAAKH,4BAA6B5hD,OAA7B,EAAsC4jD,iBAAtC,CAAL,EAAiE;;AAEhE/B,kBAAgBpM,IAAI2I,UAApB,EAAgCp+C,OAAhC,EAAyC9D,MAAMiC,KAA/C,EAAsDjC,MAAMkC,MAA5D;AAEA;;AAED0jD,oBAAkBsB,SAAlB,GAA8BpjD,QAAQ3C,OAAtC;;AAEA,MAAK2C,QAAQ1C,QAAb,EAAwB0C,QAAQ1C,QAAR,CAAkB0C,OAAlB;AAExB;;AAED;;AAEA;AACA,UAASilD,uBAAT,CAAkCC,WAAlC,EAA+C3C,YAA/C,EAA6D4C,UAA7D,EAAyEC,aAAzE,EAAyF;;AAExF,MAAIvB,WAAW3K,MAAMyG,OAAN,CAAe4C,aAAaviD,OAAb,CAAqBxD,MAApC,CAAf;AACA,MAAIsnD,SAAS5K,MAAMyG,OAAN,CAAe4C,aAAaviD,OAAb,CAAqBrnB,IAApC,CAAb;AACA0hD,QAAM4jB,UAAN,CAAkBmH,aAAlB,EAAiC,CAAjC,EAAoCvB,QAApC,EAA8CtB,aAAapkD,KAA3D,EAAkEokD,aAAankD,MAA/E,EAAuF,CAAvF,EAA0FylD,QAA1F,EAAoGC,MAApG,EAA4G,IAA5G;AACArO,MAAI4P,eAAJ,CAAqB5P,IAAI6P,WAAzB,EAAsCJ,WAAtC;AACAzP,MAAI8P,oBAAJ,CAA0B9P,IAAI6P,WAA9B,EAA2CH,UAA3C,EAAuDC,aAAvD,EAAsEzvC,WAAWh+B,GAAX,CAAgB4qE,aAAaviD,OAA7B,EAAuC4iD,cAA7G,EAA6H,CAA7H;AACAnN,MAAI4P,eAAJ,CAAqB5P,IAAI6P,WAAzB,EAAsC,IAAtC;AAEA;;AAED;AACA,UAASE,wBAAT,CAAmCC,YAAnC,EAAiDlD,YAAjD,EAAgE;;AAE/D9M,MAAIiQ,gBAAJ,CAAsBjQ,IAAIkQ,YAA1B,EAAwCF,YAAxC;;AAEA,MAAKlD,aAAatiD,WAAb,IAA4B,CAAEsiD,aAAariD,aAAhD,EAAgE;;AAE/Du1C,OAAImQ,mBAAJ,CAAyBnQ,IAAIkQ,YAA7B,EAA2ClQ,IAAIsP,iBAA/C,EAAkExC,aAAapkD,KAA/E,EAAsFokD,aAAankD,MAAnG;AACAq3C,OAAIoQ,uBAAJ,CAA6BpQ,IAAI6P,WAAjC,EAA8C7P,IAAIqQ,gBAAlD,EAAoErQ,IAAIkQ,YAAxE,EAAsFF,YAAtF;AAEA,GALD,MAKO,IAAKlD,aAAatiD,WAAb,IAA4BsiD,aAAariD,aAA9C,EAA8D;;AAEpEu1C,OAAImQ,mBAAJ,CAAyBnQ,IAAIkQ,YAA7B,EAA2ClQ,IAAIuP,aAA/C,EAA8DzC,aAAapkD,KAA3E,EAAkFokD,aAAankD,MAA/F;AACAq3C,OAAIoQ,uBAAJ,CAA6BpQ,IAAI6P,WAAjC,EAA8C7P,IAAIsQ,wBAAlD,EAA4EtQ,IAAIkQ,YAAhF,EAA8FF,YAA9F;AAEA,GALM,MAKA;;AAEN;AACAhQ,OAAImQ,mBAAJ,CAAyBnQ,IAAIkQ,YAA7B,EAA2ClQ,IAAIuQ,KAA/C,EAAsDzD,aAAapkD,KAAnE,EAA0EokD,aAAankD,MAAvF;AAEA;;AAEDq3C,MAAIiQ,gBAAJ,CAAsBjQ,IAAIkQ,YAA1B,EAAwC,IAAxC;AAEA;;AAED;AACA,UAASM,iBAAT,CAA4Bf,WAA5B,EAAyC3C,YAAzC,EAAwD;;AAEvD,MAAI2D,SAAW3D,gBAAgBA,aAAa9hD,uBAA5C;AACA,MAAKylD,MAAL,EAAc,MAAM,IAAIngE,KAAJ,CAAW,yDAAX,CAAN;;AAEd0vD,MAAI4P,eAAJ,CAAqB5P,IAAI6P,WAAzB,EAAsCJ,WAAtC;;AAEA,MAAK,EAAI3C,aAAapiD,YAAb,IAA6BoiD,aAAapiD,YAAb,CAA0BwkD,cAA3D,CAAL,EAAmF;;AAElF,SAAM,IAAI5+D,KAAJ,CAAW,qEAAX,CAAN;AAEA;;AAED;AACA,MAAK,CAAE4vB,WAAWh+B,GAAX,CAAgB4qE,aAAapiD,YAA7B,EAA4CyiD,cAA9C,IACHL,aAAapiD,YAAb,CAA0BjE,KAA1B,CAAgCiC,KAAhC,KAA0CokD,aAAapkD,KADpD,IAEHokD,aAAapiD,YAAb,CAA0BjE,KAA1B,CAAgCkC,MAAhC,KAA2CmkD,aAAankD,MAF1D,EAEmE;;AAElEmkD,gBAAapiD,YAAb,CAA0BjE,KAA1B,CAAgCiC,KAAhC,GAAwCokD,aAAapkD,KAArD;AACAokD,gBAAapiD,YAAb,CAA0BjE,KAA1B,CAAgCkC,MAAhC,GAAyCmkD,aAAankD,MAAtD;AACAmkD,gBAAapiD,YAAb,CAA0BksB,WAA1B,GAAwC,IAAxC;AAEA;;AAEDwY,eAAc0d,aAAapiD,YAA3B,EAAyC,CAAzC;;AAEA,MAAIgmD,oBAAoBxwC,WAAWh+B,GAAX,CAAgB4qE,aAAapiD,YAA7B,EAA4CyiD,cAApE;;AAEA,MAAKL,aAAapiD,YAAb,CAA0B3D,MAA1B,KAAqC9c,WAA1C,EAAwD;;AAEvD+1D,OAAI8P,oBAAJ,CAA0B9P,IAAI6P,WAA9B,EAA2C7P,IAAIqQ,gBAA/C,EAAiErQ,IAAI2I,UAArE,EAAiF+H,iBAAjF,EAAoG,CAApG;AAEA,GAJD,MAIO,IAAK5D,aAAapiD,YAAb,CAA0B3D,MAA1B,KAAqC7c,kBAA1C,EAA+D;;AAErE81D,OAAI8P,oBAAJ,CAA0B9P,IAAI6P,WAA9B,EAA2C7P,IAAIsQ,wBAA/C,EAAyEtQ,IAAI2I,UAA7E,EAAyF+H,iBAAzF,EAA4G,CAA5G;AAEA,GAJM,MAIA;;AAEN,SAAM,IAAIpgE,KAAJ,CAAW,6BAAX,CAAN;AAEA;AAED;;AAED;AACA,UAASqgE,sBAAT,CAAiC7D,YAAjC,EAAgD;;AAE/C,MAAIM,yBAAyBltC,WAAWh+B,GAAX,CAAgB4qE,YAAhB,CAA7B;;AAEA,MAAI2D,SAAW3D,aAAa9hD,uBAAb,KAAyC,IAAxD;;AAEA,MAAK8hD,aAAapiD,YAAlB,EAAiC;;AAEhC,OAAK+lD,MAAL,EAAc,MAAM,IAAIngE,KAAJ,CAAW,0DAAX,CAAN;;AAEdkgE,qBAAmBpD,uBAAuBE,kBAA1C,EAA8DR,YAA9D;AAEA,GAND,MAMO;;AAEN,OAAK2D,MAAL,EAAc;;AAEbrD,2BAAuBG,kBAAvB,GAA4C,EAA5C;;AAEA,SAAM,IAAIvpE,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9Bg8D,SAAI4P,eAAJ,CAAqB5P,IAAI6P,WAAzB,EAAsCzC,uBAAuBE,kBAAvB,CAA2CtpE,CAA3C,CAAtC;AACAopE,4BAAuBG,kBAAvB,CAA2CvpE,CAA3C,IAAiDg8D,IAAI4Q,kBAAJ,EAAjD;AACAb,8BAA0B3C,uBAAuBG,kBAAvB,CAA2CvpE,CAA3C,CAA1B,EAA0E8oE,YAA1E;AAEA;AAED,IAZD,MAYO;;AAEN9M,QAAI4P,eAAJ,CAAqB5P,IAAI6P,WAAzB,EAAsCzC,uBAAuBE,kBAA7D;AACAF,2BAAuBG,kBAAvB,GAA4CvN,IAAI4Q,kBAAJ,EAA5C;AACAb,6BAA0B3C,uBAAuBG,kBAAjD,EAAqET,YAArE;AAEA;AAED;;AAED9M,MAAI4P,eAAJ,CAAqB5P,IAAI6P,WAAzB,EAAsC,IAAtC;AAEA;;AAED;AACA,UAASgB,iBAAT,CAA4B/D,YAA5B,EAA2C;;AAE1C,MAAIM,yBAAyBltC,WAAWh+B,GAAX,CAAgB4qE,YAAhB,CAA7B;AACA,MAAIT,oBAAoBnsC,WAAWh+B,GAAX,CAAgB4qE,aAAaviD,OAA7B,CAAxB;;AAEAuiD,eAAa7pE,gBAAb,CAA+B,SAA/B,EAA0C4pE,qBAA1C;;AAEAR,oBAAkBc,cAAlB,GAAmCnN,IAAIkI,aAAJ,EAAnC;;AAEA9hB,OAAKuE,MAAL,CAAYviC,QAAZ;;AAEA,MAAIqoD,SAAW3D,aAAa9hD,uBAAb,KAAyC,IAAxD;AACA,MAAI8lD,qBAAqBvhE,aAAcu9D,YAAd,CAAzB;;AAEA;;AAEA,MAAK2D,MAAL,EAAc;;AAEbrD,0BAAuBE,kBAAvB,GAA4C,EAA5C;;AAEA,QAAM,IAAItpE,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9BopE,2BAAuBE,kBAAvB,CAA2CtpE,CAA3C,IAAiDg8D,IAAI+Q,iBAAJ,EAAjD;AAEA;AAED,GAVD,MAUO;;AAEN3D,0BAAuBE,kBAAvB,GAA4CtN,IAAI+Q,iBAAJ,EAA5C;AAEA;;AAED;;AAEA,MAAKN,MAAL,EAAc;;AAEb7rB,SAAMujB,WAAN,CAAmBnI,IAAI4I,gBAAvB,EAAyCyD,kBAAkBc,cAA3D;AACAmB,wBAAsBtO,IAAI4I,gBAA1B,EAA4CkE,aAAaviD,OAAzD,EAAkEumD,kBAAlE;;AAEA,QAAM,IAAI9sE,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9BwrE,4BAAyBpC,uBAAuBE,kBAAvB,CAA2CtpE,CAA3C,CAAzB,EAAyE8oE,YAAzE,EAAuF9M,IAAIgR,iBAA3F,EAA8GhR,IAAI6I,2BAAJ,GAAkC7kE,CAAhJ;AAEA;;AAED,OAAKmoE,4BAA6BW,aAAaviD,OAA1C,EAAmDumD,kBAAnD,CAAL,EAA+E;;AAE9E1E,mBAAgBpM,IAAI4I,gBAApB,EAAsCkE,aAAaviD,OAAnD,EAA4DuiD,aAAapkD,KAAzE,EAAgFokD,aAAankD,MAA7F;AAEA;;AAEDi8B,SAAMujB,WAAN,CAAmBnI,IAAI4I,gBAAvB,EAAyC,IAAzC;AAEA,GAnBD,MAmBO;;AAENhkB,SAAMujB,WAAN,CAAmBnI,IAAI2I,UAAvB,EAAmC0D,kBAAkBc,cAArD;AACAmB,wBAAsBtO,IAAI2I,UAA1B,EAAsCmE,aAAaviD,OAAnD,EAA4DumD,kBAA5D;AACAtB,2BAAyBpC,uBAAuBE,kBAAhD,EAAoER,YAApE,EAAkF9M,IAAIgR,iBAAtF,EAAyGhR,IAAI2I,UAA7G;;AAEA,OAAKwD,4BAA6BW,aAAaviD,OAA1C,EAAmDumD,kBAAnD,CAAL,EAA+E;;AAE9E1E,mBAAgBpM,IAAI2I,UAApB,EAAgCmE,aAAaviD,OAA7C,EAAsDuiD,aAAapkD,KAAnE,EAA0EokD,aAAankD,MAAvF;AAEA;;AAEDi8B,SAAMujB,WAAN,CAAmBnI,IAAI2I,UAAvB,EAAmC,IAAnC;AAEA;;AAED;;AAEA,MAAKmE,aAAatiD,WAAlB,EAAgC;;AAE/BmmD,0BAAwB7D,YAAxB;AAEA;AAED;;AAED,UAASmE,wBAAT,CAAmCnE,YAAnC,EAAkD;;AAEjD,MAAIviD,UAAUuiD,aAAaviD,OAA3B;AACA,MAAIumD,qBAAqBvhE,aAAcu9D,YAAd,CAAzB;;AAEA,MAAKX,4BAA6B5hD,OAA7B,EAAsCumD,kBAAtC,CAAL,EAAkE;;AAEjE,OAAIxuE,SAASwqE,aAAa9hD,uBAAb,GAAuCg1C,IAAI4I,gBAA3C,GAA8D5I,IAAI2I,UAA/E;AACA,OAAIyC,eAAelrC,WAAWh+B,GAAX,CAAgBqoB,OAAhB,EAA0B4iD,cAA7C;;AAEAvoB,SAAMujB,WAAN,CAAmB7lE,MAAnB,EAA2B8oE,YAA3B;AACAgB,kBAAgB9pE,MAAhB,EAAwBioB,OAAxB,EAAiCuiD,aAAapkD,KAA9C,EAAqDokD,aAAankD,MAAlE;AACAi8B,SAAMujB,WAAN,CAAmB7lE,MAAnB,EAA2B,IAA3B;AAEA;AAED;;AAED,UAASorE,kBAAT,CAA6BnjD,OAA7B,EAAuC;;AAEtC,MAAI+e,KAAK/e,QAAQ+e,EAAjB;AACA,MAAIgiB,QAAQlF,KAAKlB,MAAL,CAAYoG,KAAxB;;AAEA;;AAEA,MAAKqgB,eAAgBriC,EAAhB,MAAyBgiB,KAA9B,EAAsC;;AAErCqgB,kBAAgBriC,EAAhB,IAAuBgiB,KAAvB;AACA/gC,WAAQjK,MAAR;AAEA;AAED;;AAED,MAAK8uC,YAAL,GAAoBA,YAApB;AACA,MAAKE,cAAL,GAAsBA,cAAtB;AACA,MAAKkf,qBAAL,GAA6BA,qBAA7B;AACA,MAAKqC,iBAAL,GAAyBA,iBAAzB;AACA,MAAKI,wBAAL,GAAgCA,wBAAhC;AAEA;;AAED;;;;AAIA,SAASC,UAAT,CAAqB5tC,EAArB,EAAyByZ,UAAzB,EAAsC;;AAErC,UAASmtB,OAAT,CAAkBvrD,CAAlB,EAAsB;;AAErB,MAAI8nC,SAAJ;;AAEA,MAAK9nC,MAAMrW,cAAX,EAA4B,OAAOg7B,GAAG6tC,MAAV;AAC5B,MAAKxyD,MAAMpW,mBAAX,EAAiC,OAAO+6B,GAAGsrC,aAAV;AACjC,MAAKjwD,MAAMnW,sBAAX,EAAoC,OAAO86B,GAAG8tC,eAAV;;AAEpC,MAAKzyD,MAAMlW,aAAX,EAA2B,OAAO66B,GAAGglC,OAAV;AAC3B,MAAK3pD,MAAMjW,0BAAX,EAAwC,OAAO46B,GAAG+tC,sBAAV;AACxC,MAAK1yD,MAAMhW,yBAAX,EAAuC,OAAO26B,GAAGguC,qBAAV;;AAEvC,MAAK3yD,MAAM/V,YAAX,EAA0B,OAAO06B,GAAGmpC,MAAV;AAC1B,MAAK9tD,MAAM9V,yBAAX,EAAuC,OAAOy6B,GAAGiuC,qBAAV;AACvC,MAAK5yD,MAAM7V,wBAAX,EAAsC,OAAOw6B,GAAGkuC,oBAAV;;AAEtC,MAAK7yD,MAAM5V,gBAAX,EAA8B,OAAOu6B,GAAG2B,aAAV;AAC9B,MAAKtmB,MAAMpV,qBAAX,EAAmC,OAAO+5B,GAAGmuC,sBAAV;AACnC,MAAK9yD,MAAMnV,qBAAX,EAAmC,OAAO85B,GAAGouC,sBAAV;AACnC,MAAK/yD,MAAMlV,oBAAX,EAAkC,OAAO65B,GAAGquC,oBAAV;;AAElC,MAAKhzD,MAAM3V,QAAX,EAAsB,OAAOs6B,GAAGyB,IAAV;AACtB,MAAKpmB,MAAM1V,SAAX,EAAuB,OAAOq6B,GAAGmB,KAAV;AACvB,MAAK9lB,MAAMzV,iBAAX,EAA+B,OAAOo6B,GAAGiB,cAAV;AAC/B,MAAK5lB,MAAMxV,OAAX,EAAqB,OAAOm6B,GAAGuB,GAAV;AACrB,MAAKlmB,MAAMvV,eAAX,EAA6B,OAAOk6B,GAAGqB,YAAV;AAC7B,MAAKhmB,MAAMtV,SAAX,EAAuB,OAAOi6B,GAAGa,KAAV;;AAEvB,MAAKxlB,MAAMrV,aAAX,EAA2B;;AAE1Bm9C,eAAY1J,WAAW76C,GAAX,CAAgB,wBAAhB,CAAZ;;AAEA,OAAKukD,cAAc,IAAnB,EAA0B,OAAOA,UAAUmrB,cAAjB;AAE1B;;AAED,MAAKjzD,MAAMhV,WAAX,EAAyB,OAAO25B,GAAGuuC,KAAV;AACzB,MAAKlzD,MAAM/U,SAAX,EAAuB,OAAO05B,GAAGwuC,GAAV;AACvB,MAAKnzD,MAAM9U,UAAX,EAAwB,OAAOy5B,GAAGmlC,IAAV;AACxB,MAAK9pD,MAAM7U,eAAX,EAA6B,OAAOw5B,GAAGyuC,SAAV;AAC7B,MAAKpzD,MAAM5U,oBAAX,EAAkC,OAAOu5B,GAAG0uC,eAAV;AAClC,MAAKrzD,MAAM1U,WAAX,EAAyB,OAAOq5B,GAAG8rC,eAAV;AACzB,MAAKzwD,MAAMzU,kBAAX,EAAgC,OAAOo5B,GAAGisC,aAAV;;AAEhC,MAAK5wD,MAAM7Y,WAAX,EAAyB,OAAOw9B,GAAGmmC,QAAV;AACzB,MAAK9qD,MAAM5Y,gBAAX,EAA8B,OAAOu9B,GAAG2uC,aAAV;AAC9B,MAAKtzD,MAAM3Y,uBAAX,EAAqC,OAAOs9B,GAAG4uC,qBAAV;;AAErC,MAAKvzD,MAAMxY,UAAX,EAAwB,OAAOm9B,GAAGwmC,IAAV;AACxB,MAAKnrD,MAAMvY,SAAX,EAAuB,OAAOk9B,GAAGqmC,GAAV;AACvB,MAAKhrD,MAAMtY,cAAX,EAA4B,OAAOi9B,GAAG2mC,SAAV;AAC5B,MAAKtrD,MAAMrY,sBAAX,EAAoC,OAAOg9B,GAAGymC,mBAAV;AACpC,MAAKprD,MAAMpY,cAAX,EAA4B,OAAO+8B,GAAGumC,SAAV;AAC5B,MAAKlrD,MAAMnY,sBAAX,EAAoC,OAAO88B,GAAG0mC,mBAAV;AACpC,MAAKrrD,MAAMlY,cAAX,EAA4B,OAAO68B,GAAG6uC,SAAV;AAC5B,MAAKxzD,MAAMjY,sBAAX,EAAoC,OAAO48B,GAAG8uC,mBAAV;;AAEpC,MAAKzzD,MAAMhY,cAAX,EAA4B,OAAO28B,GAAG+uC,SAAV;AAC5B,MAAK1zD,MAAM/X,sBAAX,EAAoC,OAAO08B,GAAGgvC,mBAAV;AACpC,MAAK3zD,MAAM9X,sBAAX,EAAoC,OAAOy8B,GAAGivC,kBAAV;;AAEpC,MAAK5zD,MAAMxU,oBAAN,IAA8BwU,MAAMvU,qBAApC,IACJuU,MAAMtU,qBADF,IAC2BsU,MAAMrU,qBADtC,EAC8D;;AAE7Dm8C,eAAY1J,WAAW76C,GAAX,CAAgB,+BAAhB,CAAZ;;AAEA,OAAKukD,cAAc,IAAnB,EAA0B;;AAEzB,QAAK9nC,MAAMxU,oBAAX,EAAkC,OAAOs8C,UAAU+rB,4BAAjB;AAClC,QAAK7zD,MAAMvU,qBAAX,EAAmC,OAAOq8C,UAAUgsB,6BAAjB;AACnC,QAAK9zD,MAAMtU,qBAAX,EAAmC,OAAOo8C,UAAUisB,6BAAjB;AACnC,QAAK/zD,MAAMrU,qBAAX,EAAmC,OAAOm8C,UAAUksB,6BAAjB;AAEnC;AAED;;AAED,MAAKh0D,MAAMpU,uBAAN,IAAiCoU,MAAMnU,uBAAvC,IACJmU,MAAMlU,wBADF,IAC8BkU,MAAMjU,wBADzC,EACoE;;AAEnE+7C,eAAY1J,WAAW76C,GAAX,CAAgB,gCAAhB,CAAZ;;AAEA,OAAKukD,cAAc,IAAnB,EAA0B;;AAEzB,QAAK9nC,MAAMpU,uBAAX,EAAqC,OAAOk8C,UAAUmsB,+BAAjB;AACrC,QAAKj0D,MAAMnU,uBAAX,EAAqC,OAAOi8C,UAAUosB,+BAAjB;AACrC,QAAKl0D,MAAMlU,wBAAX,EAAsC,OAAOg8C,UAAUqsB,gCAAjB;AACtC,QAAKn0D,MAAMjU,wBAAX,EAAsC,OAAO+7C,UAAUssB,gCAAjB;AAEtC;AAED;;AAED,MAAKp0D,MAAMhU,eAAX,EAA6B;;AAE5B87C,eAAY1J,WAAW76C,GAAX,CAAgB,+BAAhB,CAAZ;;AAEA,OAAKukD,cAAc,IAAnB,EAA0B,OAAOA,UAAUusB,yBAAjB;AAE1B;;AAED,MAAKr0D,MAAM/T,oBAAN,IAA8B+T,MAAM9T,oBAApC,IAA4D8T,MAAM7T,oBAAlE,IACJ6T,MAAM5T,oBADF,IAC0B4T,MAAM3T,oBADhC,IACwD2T,MAAM1T,oBAD9D,IAEJ0T,MAAMzT,oBAFF,IAE0ByT,MAAMxT,oBAFhC,IAEwDwT,MAAMvT,qBAF9D,IAGJuT,MAAMtT,qBAHF,IAG2BsT,MAAMrT,qBAHjC,IAG0DqT,MAAMpT,sBAHhE,IAIJoT,MAAMnT,sBAJF,IAI4BmT,MAAMlT,sBAJvC,EAIgE;;AAE/Dg7C,eAAY1J,WAAW76C,GAAX,CAAgB,+BAAhB,CAAZ;;AAEA,OAAKukD,cAAc,IAAnB,EAA0B;;AAEzB,WAAO9nC,CAAP;AAEA;AAED;;AAED,MAAKA,MAAM1Y,WAAN,IAAqB0Y,MAAMzY,WAAhC,EAA8C;;AAE7CugD,eAAY1J,WAAW76C,GAAX,CAAgB,kBAAhB,CAAZ;;AAEA,OAAKukD,cAAc,IAAnB,EAA0B;;AAEzB,QAAK9nC,MAAM1Y,WAAX,EAAyB,OAAOwgD,UAAUwsB,OAAjB;AACzB,QAAKt0D,MAAMzY,WAAX,EAAyB,OAAOugD,UAAUysB,OAAjB;AAEzB;AAED;;AAED,MAAKv0D,MAAMjV,kBAAX,EAAgC;;AAE/B+8C,eAAY1J,WAAW76C,GAAX,CAAgB,qBAAhB,CAAZ;;AAEA,OAAKukD,cAAc,IAAnB,EAA0B,OAAOA,UAAU0sB,uBAAjB;AAE1B;;AAED,SAAO,CAAP;AAEA;;AAED,QAAO,EAAEjJ,SAASA,OAAX,EAAP;AAEA;;AAED;;;;;;;AAOA,SAASkJ,iBAAT,CAA4BC,GAA5B,EAAiCC,MAAjC,EAAyC/0D,IAAzC,EAA+CC,GAA/C,EAAqD;;AAEpD4sB,QAAOroC,IAAP,CAAa,IAAb;;AAEA,MAAKG,IAAL,GAAY,mBAAZ;;AAEA,MAAKmwE,GAAL,GAAWA,QAAQhyE,SAAR,GAAoBgyE,GAApB,GAA0B,EAArC;AACA,MAAK9nC,IAAL,GAAY,CAAZ;;AAEA,MAAKhtB,IAAL,GAAYA,SAASld,SAAT,GAAqBkd,IAArB,GAA4B,GAAxC;AACA,MAAKC,GAAL,GAAWA,QAAQnd,SAAR,GAAoBmd,GAApB,GAA0B,IAArC;AACA,MAAK+0D,KAAL,GAAa,EAAb;;AAEA,MAAKD,MAAL,GAAcA,WAAWjyE,SAAX,GAAuBiyE,MAAvB,GAAgC,CAA9C;AACA,MAAK9nC,IAAL,GAAY,IAAZ;;AAEA,MAAKgoC,SAAL,GAAiB,EAAjB,CAhBoD,CAgB/B;AACrB,MAAKC,UAAL,GAAkB,CAAlB,CAjBoD,CAiB/B;;AAErB,MAAKhoC,sBAAL;AAEA;;AAED2nC,kBAAkBrxE,SAAlB,GAA8BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAesjB,OAAOrpC,SAAtB,CAAf,EAAkD;;AAE/E0O,cAAa2iE,iBAFkE;;AAI/EM,sBAAqB,IAJ0D;;AAM/EhjE,OAAM,UAAW9N,MAAX,EAAmBsoC,SAAnB,EAA+B;;AAEpCE,SAAOrpC,SAAP,CAAiB2O,IAAjB,CAAsB3N,IAAtB,CAA4B,IAA5B,EAAkCH,MAAlC,EAA0CsoC,SAA1C;;AAEA,OAAKmoC,GAAL,GAAWzwE,OAAOywE,GAAlB;AACA,OAAK9nC,IAAL,GAAY3oC,OAAO2oC,IAAnB;;AAEA,OAAKhtB,IAAL,GAAY3b,OAAO2b,IAAnB;AACA,OAAKC,GAAL,GAAW5b,OAAO4b,GAAlB;AACA,OAAK+0D,KAAL,GAAa3wE,OAAO2wE,KAApB;;AAEA,OAAKD,MAAL,GAAc1wE,OAAO0wE,MAArB;AACA,OAAK9nC,IAAL,GAAY5oC,OAAO4oC,IAAP,KAAgB,IAAhB,GAAuB,IAAvB,GAA8BxpC,OAAOK,MAAP,CAAe,EAAf,EAAmBO,OAAO4oC,IAA1B,CAA1C;;AAEA,OAAKgoC,SAAL,GAAiB5wE,OAAO4wE,SAAxB;AACA,OAAKC,UAAL,GAAkB7wE,OAAO6wE,UAAzB;;AAEA,SAAO,IAAP;AAEA,EAzB8E;;AA2B/E;;;;;;;;AAQAE,iBAAgB,UAAWC,WAAX,EAAyB;;AAExC;AACA,MAAIC,eAAe,MAAM,KAAKC,aAAL,EAAN,GAA6BF,WAAhD;;AAEA,OAAKP,GAAL,GAAWrmE,MAAMG,OAAN,GAAgB,CAAhB,GAAoB7L,KAAKyyE,IAAL,CAAWF,YAAX,CAA/B;AACA,OAAKpoC,sBAAL;AAEA,EA3C8E;;AA6C/E;;;AAGAuoC,iBAAgB,YAAY;;AAE3B,MAAIH,eAAevyE,KAAK2yE,GAAL,CAAUjnE,MAAMC,OAAN,GAAgB,GAAhB,GAAsB,KAAKomE,GAArC,CAAnB;;AAEA,SAAO,MAAM,KAAKS,aAAL,EAAN,GAA6BD,YAApC;AAEA,EAtD8E;;AAwD/EK,kBAAiB,YAAY;;AAE5B,SAAOlnE,MAAMG,OAAN,GAAgB,CAAhB,GAAoB7L,KAAKyyE,IAAL,CAC1BzyE,KAAK2yE,GAAL,CAAUjnE,MAAMC,OAAN,GAAgB,GAAhB,GAAsB,KAAKomE,GAArC,IAA6C,KAAK9nC,IADxB,CAA3B;AAGA,EA7D8E;;AA+D/E4oC,eAAc,YAAY;;AAEzB;AACA,SAAO,KAAKX,SAAL,GAAiBlyE,KAAKwM,GAAL,CAAU,KAAKwlE,MAAf,EAAuB,CAAvB,CAAxB;AAEA,EApE8E;;AAsE/EQ,gBAAe,YAAY;;AAE1B;AACA,SAAO,KAAKN,SAAL,GAAiBlyE,KAAKyM,GAAL,CAAU,KAAKulE,MAAf,EAAuB,CAAvB,CAAxB;AAEA,EA3E8E;;AA6E/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA3nC,gBAAe,UAAWC,SAAX,EAAsBC,UAAtB,EAAkChqC,CAAlC,EAAqC4M,CAArC,EAAwCia,KAAxC,EAA+CC,MAA/C,EAAwD;;AAEtE,OAAK2qD,MAAL,GAAc1nC,YAAYC,UAA1B;;AAEA,MAAK,KAAKL,IAAL,KAAc,IAAnB,EAA0B;;AAEzB,QAAKA,IAAL,GAAY;AACXM,aAAS,IADE;AAEXF,eAAW,CAFA;AAGXC,gBAAY,CAHD;AAIXE,aAAS,CAJE;AAKXC,aAAS,CALE;AAMXtjB,WAAO,CANI;AAOXC,YAAQ;AAPG,IAAZ;AAUA;;AAED,OAAK6iB,IAAL,CAAUM,OAAV,GAAoB,IAApB;AACA,OAAKN,IAAL,CAAUI,SAAV,GAAsBA,SAAtB;AACA,OAAKJ,IAAL,CAAUK,UAAV,GAAuBA,UAAvB;AACA,OAAKL,IAAL,CAAUO,OAAV,GAAoBlqC,CAApB;AACA,OAAK2pC,IAAL,CAAUQ,OAAV,GAAoBv9B,CAApB;AACA,OAAK+8B,IAAL,CAAU9iB,KAAV,GAAkBA,KAAlB;AACA,OAAK8iB,IAAL,CAAU7iB,MAAV,GAAmBA,MAAnB;;AAEA,OAAK8iB,sBAAL;AAEA,EA5I8E;;AA8I/EQ,kBAAiB,YAAY;;AAE5B,MAAK,KAAKT,IAAL,KAAc,IAAnB,EAA0B;;AAEzB,QAAKA,IAAL,CAAUM,OAAV,GAAoB,KAApB;AAEA;;AAED,OAAKL,sBAAL;AAEA,EAxJ8E;;AA0J/EA,yBAAwB,YAAY;;AAEnC,MAAIltB,OAAO,KAAKA,IAAhB;AAAA,MACCF,MAAME,OAAOjd,KAAK2yE,GAAL,CACZjnE,MAAMC,OAAN,GAAgB,GAAhB,GAAsB,KAAKomE,GADf,CAAP,GAC8B,KAAK9nC,IAF1C;AAAA,MAGC5iB,SAAS,IAAItK,GAHd;AAAA,MAICqK,QAAQ,KAAK4qD,MAAL,GAAc3qD,MAJvB;AAAA,MAKCxK,OAAO,CAAE,GAAF,GAAQuK,KALhB;AAAA,MAMC8iB,OAAO,KAAKA,IANb;;AAQA,MAAK,KAAKA,IAAL,KAAc,IAAd,IAAsB,KAAKA,IAAL,CAAUM,OAArC,EAA+C;;AAE9C,OAAIF,YAAYJ,KAAKI,SAArB;AAAA,OACCC,aAAaL,KAAKK,UADnB;;AAGA1tB,WAAQqtB,KAAKO,OAAL,GAAerjB,KAAf,GAAuBkjB,SAA/B;AACAvtB,UAAOmtB,KAAKQ,OAAL,GAAerjB,MAAf,GAAwBkjB,UAA/B;AACAnjB,YAAS8iB,KAAK9iB,KAAL,GAAakjB,SAAtB;AACAjjB,aAAU6iB,KAAK7iB,MAAL,GAAckjB,UAAxB;AAEA;;AAED,MAAIuoC,OAAO,KAAKX,UAAhB;AACA,MAAKW,SAAS,CAAd,EAAkBj2D,QAAQI,OAAO61D,IAAP,GAAc,KAAKD,YAAL,EAAtB;;AAElB,OAAKnwD,gBAAL,CAAsB9F,eAAtB,CAAuCC,IAAvC,EAA6CA,OAAOuK,KAApD,EAA2DrK,GAA3D,EAAgEA,MAAMsK,MAAtE,EAA8EpK,IAA9E,EAAoF,KAAKC,GAAzF;AAEA,EArL8E;;AAuL/EyJ,SAAQ,UAAWC,IAAX,EAAkB;;AAEzB,MAAIgD,OAAO8b,SAASjlC,SAAT,CAAmBkmB,MAAnB,CAA0BllB,IAA1B,CAAgC,IAAhC,EAAsCmlB,IAAtC,CAAX;;AAEAgD,OAAKsB,MAAL,CAAY6mD,GAAZ,GAAkB,KAAKA,GAAvB;AACAnoD,OAAKsB,MAAL,CAAY+e,IAAZ,GAAmB,KAAKA,IAAxB;;AAEArgB,OAAKsB,MAAL,CAAYjO,IAAZ,GAAmB,KAAKA,IAAxB;AACA2M,OAAKsB,MAAL,CAAYhO,GAAZ,GAAkB,KAAKA,GAAvB;AACA0M,OAAKsB,MAAL,CAAY+mD,KAAZ,GAAoB,KAAKA,KAAzB;;AAEAroD,OAAKsB,MAAL,CAAY8mD,MAAZ,GAAqB,KAAKA,MAA1B;;AAEA,MAAK,KAAK9nC,IAAL,KAAc,IAAnB,EAA0BtgB,KAAKsB,MAAL,CAAYgf,IAAZ,GAAmBxpC,OAAOK,MAAP,CAAe,EAAf,EAAmB,KAAKmpC,IAAxB,CAAnB;;AAE1BtgB,OAAKsB,MAAL,CAAYgnD,SAAZ,GAAwB,KAAKA,SAA7B;AACAtoD,OAAKsB,MAAL,CAAYinD,UAAZ,GAAyB,KAAKA,UAA9B;;AAEA,SAAOvoD,IAAP;AAEA;;AA3M8E,CAAlD,CAA9B;;AA+MA;;;;AAIA,SAASmpD,WAAT,CAAsBvwE,KAAtB,EAA8B;;AAE7BsvE,mBAAkBrwE,IAAlB,CAAwB,IAAxB;;AAEA,MAAKuxE,OAAL,GAAexwE,SAAS,EAAxB;AAEA;;AAEDuwE,YAAYtyE,SAAZ,GAAwBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAesrD,kBAAkBrxE,SAAjC,CAAf,EAA6D;;AAEpF0O,cAAa4jE,WAFuE;;AAIpFE,gBAAe;;AAJqE,CAA7D,CAAxB;;AAQA;;;;AAIA,SAASC,YAAT,CAAuB7vB,QAAvB,EAAkC;;AAEjC,KAAI13B,QAAQ,IAAZ;;AAEA,KAAIwnD,SAAS,IAAb;AACA,KAAIC,YAAY,IAAhB;;AAEA,KAAIC,aAAa,IAAjB;;AAEA,KAAIC,iBAAiB,IAAItgE,OAAJ,EAArB;AACA,KAAIugE,wBAAwB,IAAIvgE,OAAJ,EAA5B;;AAEA,KAAK,OAAOwgE,MAAP,KAAkB,WAAlB,IAAiC,iBAAiBA,MAAvD,EAAgE;;AAE/DJ,cAAY,IAAII,OAAOC,WAAX,EAAZ;AACAD,SAAO7xE,gBAAP,CAAyB,wBAAzB,EAAmD+xE,wBAAnD,EAA6E,KAA7E;AAEA;;AAED,KAAI3pC,qBAAqB,IAAI/2B,OAAJ,EAAzB;AACA,KAAI2gE,iBAAiB,IAAIr2D,UAAJ,EAArB;AACA,KAAIs2D,eAAe,IAAI7+D,OAAJ,EAAnB;;AAEA,KAAI8+D,UAAU,IAAI/B,iBAAJ,EAAd;AACA+B,SAAQC,MAAR,GAAiB,IAAI1rD,OAAJ,CAAa,GAAb,EAAkB,GAAlB,EAAuB,GAAvB,EAA4B,GAA5B,CAAjB;AACAyrD,SAAQruC,MAAR,CAAeJ,MAAf,CAAuB,CAAvB;;AAEA,KAAI2uC,UAAU,IAAIjC,iBAAJ,EAAd;AACAiC,SAAQD,MAAR,GAAiB,IAAI1rD,OAAJ,CAAa,GAAb,EAAkB,GAAlB,EAAuB,GAAvB,EAA4B,GAA5B,CAAjB;AACA2rD,SAAQvuC,MAAR,CAAeJ,MAAf,CAAuB,CAAvB;;AAEA,KAAI4uC,WAAW,IAAIjB,WAAJ,CAAiB,CAAEc,OAAF,EAAWE,OAAX,CAAjB,CAAf;AACAC,UAASxuC,MAAT,CAAgBJ,MAAhB,CAAwB,CAAxB;AACA4uC,UAASxuC,MAAT,CAAgBJ,MAAhB,CAAwB,CAAxB;;AAEA;;AAEA,UAAS6uC,YAAT,GAAwB;;AAEvB,SAAOd,WAAW,IAAX,IAAmBA,OAAOc,YAAP,KAAwB,IAAlD;AAEA;;AAED,KAAIC,WAAJ,EAAiBC,iBAAjB;;AAEA,UAAST,wBAAT,GAAoC;;AAEnC,MAAKO,cAAL,EAAsB;;AAErB,OAAIG,gBAAgBjB,OAAOkB,gBAAP,CAAyB,MAAzB,CAApB;AACA,OAAIC,cAAcF,cAAcE,WAAhC;AACA,OAAIC,eAAeH,cAAcG,YAAjC;;AAEAJ,uBAAoB9wB,SAASmxB,aAAT,EAApB;AACAN,iBAAc7wB,SAAS93B,OAAT,EAAd;;AAEA83B,YAASoxB,oBAAT,CAA+BH,cAAc,CAA7C,EAAgDC,YAAhD,EAA8D,CAA9D;AAEA,GAXD,MAWO,IAAK5oD,MAAM6e,OAAX,EAAqB;;AAE3B6Y,YAASoxB,oBAAT,CAA+BP,YAAY9sD,KAA3C,EAAkD8sD,YAAY7sD,MAA9D,EAAsE8sD,iBAAtE;AAEA;AAED;;AAED;;AAEA,MAAK3pC,OAAL,GAAe,KAAf;AACA,MAAKkqC,UAAL,GAAkB,GAAlB;;AAEA,MAAKC,SAAL,GAAiB,YAAY;;AAE5B,SAAOxB,MAAP;AAEA,EAJD;;AAMA,MAAKyB,SAAL,GAAiB,UAAWz0E,KAAX,EAAmB;;AAEnC,MAAKA,UAAUJ,SAAf,EAA2BozE,SAAShzE,KAAT;AAE3B,EAJD;;AAMA,MAAK00E,aAAL,GAAqB,UAAW3pD,MAAX,EAAoB;;AAExC,MAAKA,WAAWnrB,SAAhB,EAA4BszE,aAAanoD,MAAb;AAE5B,EAJD;;AAMA,MAAK4pD,SAAL,GAAiB,UAAWryD,MAAX,EAAoB;;AAEpC,MAAK0wD,WAAW,IAAhB,EAAuB,OAAO1wD,MAAP;;AAEvB0wD,SAAO4B,SAAP,GAAmBtyD,OAAOxF,IAA1B;AACAk2D,SAAO6B,QAAP,GAAkBvyD,OAAOvF,GAAzB;;AAEAi2D,SAAO8B,YAAP,CAAqB7B,SAArB;;AAEA;;AAEA,MAAI8B,kBAAkB/B,OAAO+B,eAA7B;;AAEA,MAAKA,eAAL,EAAuB;;AAEtB5B,kBAAelhE,SAAf,CAA0B8iE,gBAAgBC,0BAA1C;AAEA,GAJD,MAIO;;AAEN7B,kBAAel4D,eAAf,CAAgC,CAAhC,EAAmCuQ,MAAM+oD,UAAzC,EAAqD,CAArD;AAEA;;AAGD,MAAIU,OAAOhC,UAAUgC,IAArB;AACA,MAAIC,aAAahC,eAAe,IAAf,GAAsBA,UAAtB,GAAmC5wD,MAApD;;AAEA;AACA4yD,aAAWj5D,MAAX,CAAkBhN,IAAlB,CAAwBkkE,cAAxB;AACA+B,aAAWj5D,MAAX,CAAkBF,SAAlB,CAA6Bm5D,WAAWr5D,QAAxC,EAAkDq5D,WAAWp5D,UAA7D,EAAyEo5D,WAAWt6D,KAApF;;AAEA,MAAKq6D,KAAKE,WAAL,KAAqB,IAA1B,EAAiC;;AAEhC3B,kBAAevhE,SAAf,CAA0BgjE,KAAKE,WAA/B;AACAD,cAAWp5D,UAAX,CAAsB9L,QAAtB,CAAgCwjE,cAAhC;AAEA;;AAED,MAAKyB,KAAKp5D,QAAL,KAAkB,IAAvB,EAA8B;;AAE7B23D,kBAAeh3D,qBAAf,CAAsC22D,cAAtC;AACAM,gBAAaxhE,SAAb,CAAwBgjE,KAAKp5D,QAA7B;AACA43D,gBAAa9xD,eAAb,CAA8B6xD,cAA9B;AACA0B,cAAWr5D,QAAX,CAAoB1M,GAApB,CAAyBskE,YAAzB;AAEA;;AAEDyB,aAAWlpD,iBAAX;;AAEA,MAAKgnD,OAAOc,YAAP,KAAwB,KAA7B,EAAqC,OAAOxxD,MAAP;;AAErC;;AAEAoxD,UAAQ52D,IAAR,GAAewF,OAAOxF,IAAtB;AACA82D,UAAQ92D,IAAR,GAAewF,OAAOxF,IAAtB;;AAEA42D,UAAQ32D,GAAR,GAAcuF,OAAOvF,GAArB;AACA62D,UAAQ72D,GAAR,GAAcuF,OAAOvF,GAArB;;AAEA82D,WAASrxD,WAAT,CAAqBvT,IAArB,CAA2BqT,OAAOE,WAAlC;AACAqxD,WAASjqC,kBAAT,CAA4B36B,IAA5B,CAAkCqT,OAAOsnB,kBAAzC;;AAEA8pC,UAAQ9pC,kBAAR,CAA2B33B,SAA3B,CAAsCghE,UAAUmC,cAAhD;AACAxB,UAAQhqC,kBAAR,CAA2B33B,SAA3B,CAAsCghE,UAAUoC,eAAhD;;AAEA;;AAEAjC,wBAAsBj5D,UAAtB,CAAkCg5D,cAAlC;;AAEAO,UAAQ9pC,kBAAR,CAA2B55B,QAA3B,CAAqCojE,qBAArC;AACAQ,UAAQhqC,kBAAR,CAA2B55B,QAA3B,CAAqCojE,qBAArC;;AAEA,MAAI5tC,SAAS0vC,WAAW1vC,MAAxB;;AAEA,MAAKA,WAAW,IAAhB,EAAuB;;AAEtBoE,sBAAmBzvB,UAAnB,CAA+BqrB,OAAOhjB,WAAtC;;AAEAkxD,WAAQ9pC,kBAAR,CAA2B55B,QAA3B,CAAqC45B,kBAArC;AACAgqC,WAAQhqC,kBAAR,CAA2B55B,QAA3B,CAAqC45B,kBAArC;AAEA;;AAED;;AAEA8pC,UAAQlxD,WAAR,CAAoBrI,UAApB,CAAgCu5D,QAAQ9pC,kBAAxC;AACAgqC,UAAQpxD,WAAR,CAAoBrI,UAApB,CAAgCy5D,QAAQhqC,kBAAxC;;AAEA8pC,UAAQnxD,gBAAR,CAAyBtQ,SAAzB,CAAoCghE,UAAUqC,oBAA9C;AACA1B,UAAQrxD,gBAAR,CAAyBtQ,SAAzB,CAAoCghE,UAAUsC,qBAA9C;;AAEA;AACA;;AAEA1B,WAAStxD,gBAAT,CAA0BtT,IAA1B,CAAgCykE,QAAQnxD,gBAAxC;;AAEA;;AAEA,MAAI8iB,SAAS2tC,OAAOwC,SAAP,EAAb;;AAEA,MAAKnwC,OAAOnkC,MAAZ,EAAqB;;AAEpB,OAAIu0E,QAAQpwC,OAAQ,CAAR,CAAZ;;AAEA,OAAKowC,MAAMC,UAAN,KAAqB,IAArB,IAA6BD,MAAMC,UAAN,CAAiBx0E,MAAjB,KAA4B,CAA9D,EAAkE;;AAEjEwyE,YAAQC,MAAR,CAAe1hE,SAAf,CAA0BwjE,MAAMC,UAAhC;AAEA;;AAED,OAAKD,MAAME,WAAN,KAAsB,IAAtB,IAA8BF,MAAME,WAAN,CAAkBz0E,MAAlB,KAA6B,CAAhE,EAAoE;;AAEnE0yE,YAAQD,MAAR,CAAe1hE,SAAf,CAA0BwjE,MAAME,WAAhC;AAEA;AAED;;AAED,SAAO9B,QAAP;AAEA,EAxHD;;AA0HA,MAAK+B,iBAAL,GAAyB,YAAY;;AAEpC,SAAOzC,cAAP;AAEA,EAJD;;AAMA,MAAK0C,WAAL,GAAmB,YAAY;;AAE9B,MAAK/B,cAAL,EAAsBd,OAAO6C,WAAP;AAEtB,EAJD;;AAMA,MAAK/tD,OAAL,GAAe,YAAY;;AAE1B,MAAK,OAAOurD,MAAP,KAAkB,WAAvB,EAAqC;;AAEpCA,UAAOrxE,mBAAP,CAA4B,wBAA5B,EAAsDuxE,wBAAtD;AAEA;AAED,EARD;AAUA;;AAED;;;;;;;;AAQA,SAASuC,aAAT,CAAwB7sC,UAAxB,EAAqC;;AAEpC55B,SAAQpB,GAAR,CAAa,qBAAb,EAAoCxL,QAApC;;AAEAwmC,cAAaA,cAAc,EAA3B;;AAEA,KAAIkhC,UAAUlhC,WAAWpiB,MAAX,KAAsBjnB,SAAtB,GAAkCqpC,WAAWpiB,MAA7C,GAAsDE,SAASC,eAAT,CAA0B,8BAA1B,EAA0D,QAA1D,CAApE;AAAA,KACC+uD,WAAW9sC,WAAW9hB,OAAX,KAAuBvnB,SAAvB,GAAmCqpC,WAAW9hB,OAA9C,GAAwD,IADpE;AAAA,KAGC6uD,SAAS/sC,WAAWr3B,KAAX,KAAqBhS,SAArB,GAAiCqpC,WAAWr3B,KAA5C,GAAoD,KAH9D;AAAA,KAICqkE,SAAShtC,WAAWlI,KAAX,KAAqBnhC,SAArB,GAAiCqpC,WAAWlI,KAA5C,GAAoD,IAJ9D;AAAA,KAKCm1C,WAAWjtC,WAAW07B,OAAX,KAAuB/kE,SAAvB,GAAmCqpC,WAAW07B,OAA9C,GAAwD,IALpE;AAAA,KAMCwR,aAAaltC,WAAWmtC,SAAX,KAAyBx2E,SAAzB,GAAqCqpC,WAAWmtC,SAAhD,GAA4D,KAN1E;AAAA,KAOCC,sBAAsBptC,WAAW4Q,kBAAX,KAAkCj6C,SAAlC,GAA8CqpC,WAAW4Q,kBAAzD,GAA8E,IAPrG;AAAA,KAQCy8B,yBAAyBrtC,WAAWstC,qBAAX,KAAqC32E,SAArC,GAAiDqpC,WAAWstC,qBAA5D,GAAoF,KAR9G;AAAA,KASCC,mBAAmBvtC,WAAWwtC,eAAX,KAA+B72E,SAA/B,GAA2CqpC,WAAWwtC,eAAtD,GAAwE,SAT5F;;AAWA,KAAIC,oBAAoB,IAAxB;AACA,KAAIC,qBAAqB,IAAzB;;AAEA;;AAEA,MAAKC,UAAL,GAAkBzM,OAAlB;AACA,MAAKhjD,OAAL,GAAe,IAAf;;AAEA;;AAEA,MAAK48B,SAAL,GAAiB,IAAjB;AACA,MAAKE,cAAL,GAAsB,IAAtB;AACA,MAAKC,cAAL,GAAsB,IAAtB;AACA,MAAKC,gBAAL,GAAwB,IAAxB;;AAEA;;AAEA,MAAK0yB,WAAL,GAAmB,IAAnB;;AAEA;;AAEA,MAAK19B,cAAL,GAAsB,EAAtB;AACA,MAAKkO,oBAAL,GAA4B,KAA5B;;AAEA;;AAEA,MAAK3sB,WAAL,GAAmB,GAAnB,CA3CoC,CA2CZ;AACxB,MAAKq+B,UAAL,GAAkB,KAAlB;AACA,MAAKD,WAAL,GAAmB,KAAnB;;AAEA;;AAEA,MAAK/D,uBAAL,GAA+B,KAA/B;;AAEA;;AAEA,MAAKnD,WAAL,GAAmB3rD,iBAAnB;AACA,MAAK6wE,mBAAL,GAA2B,GAA3B;AACA,MAAKC,qBAAL,GAA6B,GAA7B;;AAEA;;AAEA,MAAK7d,eAAL,GAAuB,CAAvB;AACA,MAAKC,eAAL,GAAuB,CAAvB;;AAEA;;AAEA,KAAI6d,QAAQ,IAAZ;AAAA,KAECC,iBAAiB,KAFlB;;;AAIC;;AAEAC,wBAAuB,IANxB;AAAA,KAOCC,sBAAsB,IAPvB;AAAA,KAQCC,qBAAqB,CAAE,CARxB;AAAA,KASCC,0BAA0B,EAT3B;AAAA,KAWCC,iBAAiB,IAXlB;AAAA,KAYCC,sBAAsB,IAZvB;AAAA,KAcCC,mBAAmB,IAAIvvD,OAAJ,EAdpB;AAAA,KAeCwvD,kBAAkB,IAAIxvD,OAAJ,EAfnB;AAAA,KAgBCyvD,sBAAsB,IAhBvB;;;AAkBC;;AAEAC,qBAAoB,CApBrB;;;AAsBC;;AAEAC,UAASzN,QAAQljD,KAxBlB;AAAA,KAyBC4wD,UAAU1N,QAAQjjD,MAzBnB;AAAA,KA2BC4wD,cAAc,CA3Bf;AAAA,KA6BCC,YAAY,IAAI9vD,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB2vD,MAAnB,EAA2BC,OAA3B,CA7Bb;AAAA,KA8BCG,WAAW,IAAI/vD,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB2vD,MAAnB,EAA2BC,OAA3B,CA9BZ;AAAA,KA+BCI,eAAe,KA/BhB;;;AAiCC;;AAEA9a,YAAW,IAAIttC,OAAJ,EAnCZ;;;AAqCC;;AAEAqoD,aAAY,IAAIhxB,aAAJ,EAvCb;AAAA,KAwCCixB,mBAAmB,KAxCpB;AAAA,KAyCCC,wBAAwB,KAzCzB;;;AA2CC;;AAEAhb,qBAAoB,IAAIvqD,OAAJ,EA7CrB;AAAA,KA+CCwlE,WAAW,IAAIzjE,OAAJ,EA/CZ;;AAiDA,UAAS0jE,mBAAT,GAA+B;;AAE9B,SAAOpB,yBAAyB,IAAzB,GAAgCY,WAAhC,GAA8C,CAArD;AAEA;;AAED;;AAEA,KAAIvZ,GAAJ;;AAEA,KAAI;;AAEH,MAAIga,oBAAoB;AACvB3mE,UAAOokE,MADgB;AAEvBj1C,UAAOk1C,MAFgB;AAGvBtR,YAASuR,QAHc;AAIvBE,cAAWD,UAJY;AAKvBt8B,uBAAoBw8B,mBALG;AAMvBE,0BAAuBD,sBANA;AAOvBG,oBAAiBD;AAPM,GAAxB;;AAUA;;AAEArM,UAAQ3oE,gBAAR,CAA0B,kBAA1B,EAA8Cg3E,aAA9C,EAA6D,KAA7D;AACArO,UAAQ3oE,gBAAR,CAA0B,sBAA1B,EAAkDi3E,gBAAlD,EAAoE,KAApE;;AAEAla,QAAMwX,YAAY5L,QAAQ/iD,UAAR,CAAoB,OAApB,EAA6BmxD,iBAA7B,CAAZ,IAAgEpO,QAAQ/iD,UAAR,CAAoB,oBAApB,EAA0CmxD,iBAA1C,CAAtE;;AAEA,MAAKha,QAAQ,IAAb,EAAoB;;AAEnB,OAAK4L,QAAQ/iD,UAAR,CAAoB,OAApB,MAAkC,IAAvC,EAA8C;;AAE7C,UAAM,IAAIvY,KAAJ,CAAW,6DAAX,CAAN;AAEA,IAJD,MAIO;;AAEN,UAAM,IAAIA,KAAJ,CAAW,+BAAX,CAAN;AAEA;AAED;;AAED;;AAEA,MAAK0vD,IAAI/Y,wBAAJ,KAAiC5lD,SAAtC,EAAkD;;AAEjD2+D,OAAI/Y,wBAAJ,GAA+B,YAAY;;AAE1C,WAAO,EAAE,YAAY,CAAd,EAAiB,YAAY,CAA7B,EAAgC,aAAa,CAA7C,EAAP;AAEA,IAJD;AAMA;AAED,EA7CD,CA6CE,OAAQ1yC,KAAR,EAAgB;;AAEjBzD,UAAQyD,KAAR,CAAe,0BAA0BA,MAAM4lE,OAA/C;AAEA;;AAED,KAAIp9B,UAAJ,EAAgB0b,YAAhB,EAA8B7T,KAA9B,EAAqCwB,IAArC;AACA,KAAIlmB,UAAJ,EAAgB9X,QAAhB,EAA0BoF,UAA1B,EAAsC0c,UAAtC,EAAkDkwC,OAAlD;AACA,KAAIC,YAAJ,EAAkBC,WAAlB,EAA+Bjc,YAA/B;;AAEA,KAAI/Y,UAAJ,EAAgBi1B,YAAhB,EAA8BC,cAA9B,EAA8CC,qBAA9C;AACA,KAAIC,cAAJ;;AAEA,KAAIjX,KAAJ;;AAEA,UAASkX,aAAT,GAAyB;;AAExB59B,eAAa,IAAIsN,eAAJ,CAAqB2V,GAArB,CAAb;AACAjjB,aAAW76C,GAAX,CAAgB,qBAAhB;AACA66C,aAAW76C,GAAX,CAAgB,mBAAhB;AACA66C,aAAW76C,GAAX,CAAgB,0BAAhB;AACA66C,aAAW76C,GAAX,CAAgB,wBAAhB;AACA66C,aAAW76C,GAAX,CAAgB,+BAAhB;AACA66C,aAAW76C,GAAX,CAAgB,0BAAhB;AACA66C,aAAW76C,GAAX,CAAgB,wBAAhB;AACA66C,aAAW76C,GAAX,CAAgB,wBAAhB;;AAEAuhE,UAAQ,IAAIyN,UAAJ,CAAgBlR,GAAhB,EAAqBjjB,UAArB,CAAR;;AAEA0b,iBAAe,IAAI7R,iBAAJ,CAAuBoZ,GAAvB,EAA4BjjB,UAA5B,EAAwCrS,UAAxC,CAAf;;AAEAka,UAAQ,IAAI4e,UAAJ,CAAgBxD,GAAhB,EAAqBjjB,UAArB,EAAiC0mB,KAAjC,CAAR;AACA7e,QAAMx6B,OAAN,CAAe8uD,gBAAgBxoE,IAAhB,CAAsB+oE,QAAtB,EAAiC/nE,cAAjC,CAAiD6nE,WAAjD,CAAf;AACA30B,QAAMt6B,QAAN,CAAgB2uD,iBAAiBvoE,IAAjB,CAAuB8oE,SAAvB,EAAmC9nE,cAAnC,CAAmD6nE,WAAnD,CAAhB;;AAEAnzB,SAAO,IAAIiF,SAAJ,CAAe2U,GAAf,CAAP;AACA9/B,eAAa,IAAIs7B,eAAJ,EAAb;AACApzC,aAAW,IAAIojD,aAAJ,CAAmBxL,GAAnB,EAAwBjjB,UAAxB,EAAoC6H,KAApC,EAA2C1kB,UAA3C,EAAuDu4B,YAAvD,EAAqEgL,KAArE,EAA4Erd,IAA5E,CAAX;AACA54B,eAAa,IAAI6V,eAAJ,CAAqB28B,GAArB,CAAb;AACA91B,eAAa,IAAIqgB,eAAJ,CAAqByV,GAArB,EAA0BxyC,UAA1B,EAAsC44B,IAAtC,CAAb;AACAg0B,YAAU,IAAIvtB,YAAJ,CAAkB3iB,UAAlB,EAA8Bkc,IAA9B,CAAV;AACAm0B,iBAAe,IAAIjuB,iBAAJ,CAAuB0T,GAAvB,CAAf;AACAqa,iBAAe,IAAI7hB,aAAJ,CAAmBigB,KAAnB,EAA0B17B,UAA1B,EAAsC0b,YAAtC,CAAf;AACA6hB,gBAAc,IAAIte,gBAAJ,EAAd;AACAqC,iBAAe,IAAID,iBAAJ,EAAf;;AAEA9Y,eAAa,IAAIZ,eAAJ,CAAqB+zB,KAArB,EAA4B7zB,KAA5B,EAAmC1a,UAAnC,EAA+C4tC,mBAA/C,CAAb;;AAEA0C,mBAAiB,IAAIr0B,mBAAJ,CAAyB6Z,GAAzB,EAA8BjjB,UAA9B,EAA0CqJ,IAA1C,CAAjB;AACAq0B,0BAAwB,IAAIvvB,0BAAJ,CAAgC8U,GAAhC,EAAqCjjB,UAArC,EAAiDqJ,IAAjD,CAAxB;;AAEAs0B,mBAAiB,IAAI7Y,mBAAJ,CAAyB4W,KAAzB,EAAgCzY,GAAhC,EAAqCpb,KAArC,EAA4Cx8B,QAA5C,EAAsDqwC,YAAtD,CAAjB;;AAEArS,OAAK+F,QAAL,GAAgBkuB,aAAaluB,QAA7B;;AAEAssB,QAAM7vD,OAAN,GAAgBo3C,GAAhB;AACAyY,QAAMhgB,YAAN,GAAqBA,YAArB;AACAggB,QAAM17B,UAAN,GAAmBA,UAAnB;AACA07B,QAAMv4C,UAAN,GAAmBA,UAAnB;AACAu4C,QAAM6B,WAAN,GAAoBA,WAApB;AACA7B,QAAM7zB,KAAN,GAAcA,KAAd;AACA6zB,QAAMryB,IAAN,GAAaA,IAAb;AAEA;;AAEDu0B;;AAEA;;AAEA,KAAIC,KAAK,IAAIpG,YAAJ,CAAkBiE,KAAlB,CAAT;;AAEA,MAAKmC,EAAL,GAAUA,EAAV;;AAEA;;AAEA,KAAI3f,YAAY,IAAIwD,cAAJ,CAAoBga,KAApB,EAA2B2B,OAA3B,EAAoC3hB,aAAa7Q,cAAjD,CAAhB;;AAEA,MAAKqT,SAAL,GAAiBA,SAAjB;;AAEA;;AAEA,MAAKpyC,UAAL,GAAkB,YAAY;;AAE7B,SAAOm3C,GAAP;AAEA,EAJD;;AAMA,MAAK6a,oBAAL,GAA4B,YAAY;;AAEvC,SAAO7a,IAAI6a,oBAAJ,EAAP;AAEA,EAJD;;AAMA,MAAKC,gBAAL,GAAwB,YAAY;;AAEnC,MAAIr0B,YAAY1J,WAAW76C,GAAX,CAAgB,oBAAhB,CAAhB;AACA,MAAKukD,SAAL,EAAiBA,UAAUs0B,WAAV;AAEjB,EALD;;AAOA,MAAKC,mBAAL,GAA2B,YAAY;;AAEtC,MAAIv0B,YAAY1J,WAAW76C,GAAX,CAAgB,oBAAhB,CAAhB;AACA,MAAKukD,SAAL,EAAiBA,UAAUw0B,cAAV;AAEjB,EALD;;AAOA,MAAKnF,aAAL,GAAqB,YAAY;;AAEhC,SAAOyD,WAAP;AAEA,EAJD;;AAMA,MAAK2B,aAAL,GAAqB,UAAWz5E,KAAX,EAAmB;;AAEvC,MAAKA,UAAUJ,SAAf,EAA2B;;AAE3Bk4E,gBAAc93E,KAAd;;AAEA,OAAKmpB,OAAL,CAAcyuD,MAAd,EAAsBC,OAAtB,EAA+B,KAA/B;AAEA,EARD;;AAUA,MAAKzsD,OAAL,GAAe,YAAY;;AAE1B,SAAO;AACNnE,UAAO2wD,MADD;AAEN1wD,WAAQ2wD;AAFF,GAAP;AAKA,EAPD;;AASA,MAAK1uD,OAAL,GAAe,UAAWlC,KAAX,EAAkBC,MAAlB,EAA0BwyD,WAA1B,EAAwC;;AAEtD,MAAI1G,SAASmG,GAAG3E,SAAH,EAAb;;AAEA,MAAKxB,UAAUA,OAAOc,YAAtB,EAAqC;;AAEpCzkE,WAAQC,IAAR,CAAc,wEAAd;AACA;AAEA;;AAEDsoE,WAAS3wD,KAAT;AACA4wD,YAAU3wD,MAAV;;AAEAijD,UAAQljD,KAAR,GAAgBA,QAAQ6wD,WAAxB;AACA3N,UAAQjjD,MAAR,GAAiBA,SAAS4wD,WAA1B;;AAEA,MAAK4B,gBAAgB,KAArB,EAA6B;;AAE5BvP,WAAQnwC,KAAR,CAAc/S,KAAd,GAAsBA,QAAQ,IAA9B;AACAkjD,WAAQnwC,KAAR,CAAc9S,MAAd,GAAuBA,SAAS,IAAhC;AAEA;;AAED,OAAKyyD,WAAL,CAAkB,CAAlB,EAAqB,CAArB,EAAwB1yD,KAAxB,EAA+BC,MAA/B;AAEA,EA1BD;;AA4BA,MAAK0yD,oBAAL,GAA4B,YAAY;;AAEvC,SAAO;AACN3yD,UAAO2wD,SAASE,WADV;AAEN5wD,WAAQ2wD,UAAUC;AAFZ,GAAP;AAKA,EAPD;;AASA,MAAKxD,oBAAL,GAA4B,UAAWrtD,KAAX,EAAkBC,MAAlB,EAA0B2yD,UAA1B,EAAuC;;AAElEjC,WAAS3wD,KAAT;AACA4wD,YAAU3wD,MAAV;;AAEA4wD,gBAAc+B,UAAd;;AAEA1P,UAAQljD,KAAR,GAAgBA,QAAQ4yD,UAAxB;AACA1P,UAAQjjD,MAAR,GAAiBA,SAAS2yD,UAA1B;;AAEA,OAAKF,WAAL,CAAkB,CAAlB,EAAqB,CAArB,EAAwB1yD,KAAxB,EAA+BC,MAA/B;AAEA,EAZD;;AAcA,MAAK4yD,kBAAL,GAA0B,YAAY;;AAErC,SAAOtC,gBAAP;AAEA,EAJD;;AAMA,MAAKmC,WAAL,GAAmB,UAAWv5E,CAAX,EAAc4M,CAAd,EAAiBia,KAAjB,EAAwBC,MAAxB,EAAiC;;AAEnD6wD,YAAUzpE,GAAV,CAAelO,CAAf,EAAkBy3E,UAAU7qE,CAAV,GAAcka,MAAhC,EAAwCD,KAAxC,EAA+CC,MAA/C;AACAi8B,QAAMt6B,QAAN,CAAgB2uD,iBAAiBvoE,IAAjB,CAAuB8oE,SAAvB,EAAmC9nE,cAAnC,CAAmD6nE,WAAnD,CAAhB;AAEA,EALD;;AAOA,MAAKiC,UAAL,GAAkB,UAAW35E,CAAX,EAAc4M,CAAd,EAAiBia,KAAjB,EAAwBC,MAAxB,EAAiC;;AAElD8wD,WAAS1pE,GAAT,CAAclO,CAAd,EAAiBy3E,UAAU7qE,CAAV,GAAcka,MAA/B,EAAuCD,KAAvC,EAA8CC,MAA9C;AACAi8B,QAAMx6B,OAAN,CAAe8uD,gBAAgBxoE,IAAhB,CAAsB+oE,QAAtB,EAAiC/nE,cAAjC,CAAiD6nE,WAAjD,CAAf;AAEA,EALD;;AAOA,MAAKnZ,cAAL,GAAsB,UAAWqb,OAAX,EAAqB;;AAE1C72B,QAAMwb,cAAN,CAAsBsZ,eAAe+B,OAArC;AAEA,EAJD;;AAMA;;AAEA,MAAK11B,aAAL,GAAqB,YAAY;;AAEhC,SAAOT,WAAWS,aAAX,EAAP;AAEA,EAJD;;AAMA,MAAKC,aAAL,GAAqB,YAAY;;AAEhCV,aAAWU,aAAX,CAAyBulB,KAAzB,CAAgCjmB,UAAhC,EAA4C5iD,SAA5C;AAEA,EAJD;;AAMA,MAAKujD,aAAL,GAAqB,YAAY;;AAEhC,SAAOX,WAAWW,aAAX,EAAP;AAEA,EAJD;;AAMA,MAAKC,aAAL,GAAqB,YAAY;;AAEhCZ,aAAWY,aAAX,CAAyBqlB,KAAzB,CAAgCjmB,UAAhC,EAA4C5iD,SAA5C;AAEA,EAJD;;AAMA,MAAK+iD,KAAL,GAAa,UAAW3pB,KAAX,EAAkB0G,KAAlB,EAAyB4jC,OAAzB,EAAmC;;AAE/C,MAAIsV,OAAO,CAAX;;AAEA,MAAK5/C,UAAUz6B,SAAV,IAAuBy6B,KAA5B,EAAoC4/C,QAAQ1b,IAAI2b,gBAAZ;AACpC,MAAKn5C,UAAUnhC,SAAV,IAAuBmhC,KAA5B,EAAoCk5C,QAAQ1b,IAAI4b,gBAAZ;AACpC,MAAKxV,YAAY/kE,SAAZ,IAAyB+kE,OAA9B,EAAwCsV,QAAQ1b,IAAI6b,kBAAZ;;AAExC7b,MAAIva,KAAJ,CAAWi2B,IAAX;AAEA,EAVD;;AAYA,MAAK72B,UAAL,GAAkB,YAAY;;AAE7B,OAAKY,KAAL,CAAY,IAAZ,EAAkB,KAAlB,EAAyB,KAAzB;AAEA,EAJD;;AAMA,MAAKuf,UAAL,GAAkB,YAAY;;AAE7B,OAAKvf,KAAL,CAAY,KAAZ,EAAmB,IAAnB,EAAyB,KAAzB;AAEA,EAJD;;AAMA,MAAK4gB,YAAL,GAAoB,YAAY;;AAE/B,OAAK5gB,KAAL,CAAY,KAAZ,EAAmB,KAAnB,EAA0B,IAA1B;AAEA,EAJD;;AAMA,MAAKq2B,WAAL,GAAmB,UAAWhP,YAAX,EAAyBhxC,KAAzB,EAAgC0G,KAAhC,EAAuC4jC,OAAvC,EAAiD;;AAEnE,OAAKxF,eAAL,CAAsBkM,YAAtB;AACA,OAAKrnB,KAAL,CAAY3pB,KAAZ,EAAmB0G,KAAnB,EAA0B4jC,OAA1B;AAEA,EALD;;AAOA;;AAEA,MAAK78C,OAAL,GAAe,YAAY;;AAE1BqiD,UAAQnoE,mBAAR,CAA6B,kBAA7B,EAAiDw2E,aAAjD,EAAgE,KAAhE;AACArO,UAAQnoE,mBAAR,CAA6B,sBAA7B,EAAqDy2E,gBAArD,EAAuE,KAAvE;;AAEAI,cAAY/wD,OAAZ;AACA80C,eAAa90C,OAAb;AACA2W,aAAW3W,OAAX;AACA6wD,UAAQ7wD,OAAR;;AAEAqxD,KAAGrxD,OAAH;;AAEAwyD;AAEA,EAdD;;AAgBA;;AAEA,UAAS9B,aAAT,CAAwBp2E,KAAxB,EAAgC;;AAE/BA,QAAMm4E,cAAN;;AAEAlrE,UAAQpB,GAAR,CAAa,oCAAb;;AAEAgpE,mBAAiB,IAAjB;AAEA;;AAED,UAASwB,gBAAT,GAA2B,WAAc;;AAExCppE,UAAQpB,GAAR,CAAa,wCAAb;;AAEAgpE,mBAAiB,KAAjB;;AAEAiC;AAEA;;AAED,UAASsB,iBAAT,CAA4Bp4E,KAA5B,EAAoC;;AAEnC,MAAI+mC,WAAW/mC,MAAMvB,MAArB;;AAEAsoC,WAASnnC,mBAAT,CAA8B,SAA9B,EAAyCw4E,iBAAzC;;AAEAC,qBAAoBtxC,QAApB;AAEA;;AAED;;AAEA,UAASsxC,kBAAT,CAA6BtxC,QAA7B,EAAwC;;AAEvCuxC,kCAAiCvxC,QAAjC;;AAEA1K,aAAWuF,MAAX,CAAmBmF,QAAnB;AAEA;;AAGD,UAASuxC,+BAAT,CAA0CvxC,QAA1C,EAAqD;;AAEpD,MAAIywB,cAAcn7B,WAAWh+B,GAAX,CAAgB0oC,QAAhB,EAA2B4hB,OAA7C;;AAEA5hB,WAAS4hB,OAAT,GAAmBnrD,SAAnB;;AAEA,MAAKg6D,gBAAgBh6D,SAArB,EAAiC;;AAEhCg5E,gBAAa/e,cAAb,CAA6BD,WAA7B;AAEA;AAED;;AAED;;AAEA,UAAS+gB,qBAAT,CAAgC5vD,MAAhC,EAAwCggC,OAAxC,EAAiD5hB,QAAjD,EAA4D;;AAE3Dpe,SAAO04B,MAAP,CAAe,UAAW14B,MAAX,EAAoB;;AAElCisD,SAAM4D,qBAAN,CAA6B7vD,MAA7B,EAAqCggC,OAArC,EAA8C5hB,QAA9C;AAEA,GAJD;AAMA;;AAED,MAAKyxC,qBAAL,GAA6B,UAAW7vD,MAAX,EAAmBggC,OAAnB,EAA4B5hB,QAA5B,EAAuC;;AAEnEga,QAAM+d,cAAN;;AAEA,MAAIp/B,UAAUrD,WAAWh+B,GAAX,CAAgBsqB,MAAhB,CAAd;;AAEA,MAAKA,OAAO8vD,YAAP,IAAuB,CAAE/4C,QAAQjmB,QAAtC,EAAiDimB,QAAQjmB,QAAR,GAAmB0iD,IAAIv8B,YAAJ,EAAnB;AACjD,MAAKjX,OAAO+vD,UAAP,IAAqB,CAAEh5C,QAAQxe,MAApC,EAA6Cwe,QAAQxe,MAAR,GAAiBi7C,IAAIv8B,YAAJ,EAAjB;AAC7C,MAAKjX,OAAOgwD,MAAP,IAAiB,CAAEj5C,QAAQ9Z,EAAhC,EAAqC8Z,QAAQ9Z,EAAR,GAAau2C,IAAIv8B,YAAJ,EAAb;AACrC,MAAKjX,OAAOiwD,SAAP,IAAoB,CAAEl5C,QAAQzH,KAAnC,EAA2CyH,QAAQzH,KAAR,GAAgBkkC,IAAIv8B,YAAJ,EAAhB;;AAE3C,MAAIi5C,oBAAoBlwB,QAAQ4L,aAAR,EAAxB;;AAEA,MAAK5rC,OAAO8vD,YAAZ,EAA2B;;AAE1Btc,OAAIh8B,UAAJ,CAAgBg8B,IAAIjV,YAApB,EAAkCxnB,QAAQjmB,QAA1C;AACA0iD,OAAI/7B,UAAJ,CAAgB+7B,IAAIjV,YAApB,EAAkCv+B,OAAOmwD,aAAzC,EAAwD3c,IAAIn8B,YAA5D;;AAEA+gB,SAAMge,eAAN,CAAuB8Z,kBAAkBp/D,QAAzC;AACA0iD,OAAI+C,mBAAJ,CAAyB2Z,kBAAkBp/D,QAA3C,EAAqD,CAArD,EAAwD0iD,IAAI77B,KAA5D,EAAmE,KAAnE,EAA0E,CAA1E,EAA6E,CAA7E;AAEA;;AAED,MAAK3X,OAAO+vD,UAAZ,EAAyB;;AAExBvc,OAAIh8B,UAAJ,CAAgBg8B,IAAIjV,YAApB,EAAkCxnB,QAAQxe,MAA1C;;AAEA,OAAK,CAAE6lB,SAASgyC,mBAAX,IACJ,CAAEhyC,SAASiyC,sBADP,IAEJ,CAAEjyC,SAASkyC,oBAFP,IAGJlyC,SAASqP,WAAT,KAAyB,IAH1B,EAGiC;;AAEhC,SAAM,IAAIj2C,IAAI,CAAR,EAAWC,IAAIuoB,OAAOpR,KAAP,GAAe,CAApC,EAAuCpX,IAAIC,CAA3C,EAA8CD,KAAK,CAAnD,EAAuD;;AAEtD,SAAIF,QAAQ0oB,OAAOuwD,WAAnB;;AAEA,SAAIC,KAAK,CAAEl5E,MAAOE,IAAI,CAAX,IAAiBF,MAAOE,IAAI,CAAX,CAAjB,GAAkCF,MAAOE,IAAI,CAAX,CAApC,IAAuD,CAAhE;AACA,SAAIi5E,KAAK,CAAEn5E,MAAOE,IAAI,CAAX,IAAiBF,MAAOE,IAAI,CAAX,CAAjB,GAAkCF,MAAOE,IAAI,CAAX,CAApC,IAAuD,CAAhE;AACA,SAAIk5E,KAAK,CAAEp5E,MAAOE,IAAI,CAAX,IAAiBF,MAAOE,IAAI,CAAX,CAAjB,GAAkCF,MAAOE,IAAI,CAAX,CAApC,IAAuD,CAAhE;;AAEAF,WAAOE,IAAI,CAAX,IAAiBg5E,EAAjB;AACAl5E,WAAOE,IAAI,CAAX,IAAiBi5E,EAAjB;AACAn5E,WAAOE,IAAI,CAAX,IAAiBk5E,EAAjB;;AAEAp5E,WAAOE,IAAI,CAAX,IAAiBg5E,EAAjB;AACAl5E,WAAOE,IAAI,CAAX,IAAiBi5E,EAAjB;AACAn5E,WAAOE,IAAI,CAAX,IAAiBk5E,EAAjB;;AAEAp5E,WAAOE,IAAI,CAAX,IAAiBg5E,EAAjB;AACAl5E,WAAOE,IAAI,CAAX,IAAiBi5E,EAAjB;AACAn5E,WAAOE,IAAI,CAAX,IAAiBk5E,EAAjB;AAEA;AAED;;AAEDld,OAAI/7B,UAAJ,CAAgB+7B,IAAIjV,YAApB,EAAkCv+B,OAAOuwD,WAAzC,EAAsD/c,IAAIn8B,YAA1D;;AAEA+gB,SAAMge,eAAN,CAAuB8Z,kBAAkB33D,MAAzC;;AAEAi7C,OAAI+C,mBAAJ,CAAyB2Z,kBAAkB33D,MAA3C,EAAmD,CAAnD,EAAsDi7C,IAAI77B,KAA1D,EAAiE,KAAjE,EAAwE,CAAxE,EAA2E,CAA3E;AAEA;;AAED,MAAK3X,OAAOgwD,MAAP,IAAiB5xC,SAASrN,GAA/B,EAAqC;;AAEpCyiC,OAAIh8B,UAAJ,CAAgBg8B,IAAIjV,YAApB,EAAkCxnB,QAAQ9Z,EAA1C;AACAu2C,OAAI/7B,UAAJ,CAAgB+7B,IAAIjV,YAApB,EAAkCv+B,OAAO2wD,OAAzC,EAAkDnd,IAAIn8B,YAAtD;;AAEA+gB,SAAMge,eAAN,CAAuB8Z,kBAAkBjzD,EAAzC;;AAEAu2C,OAAI+C,mBAAJ,CAAyB2Z,kBAAkBjzD,EAA3C,EAA+C,CAA/C,EAAkDu2C,IAAI77B,KAAtD,EAA6D,KAA7D,EAAoE,CAApE,EAAuE,CAAvE;AAEA;;AAED,MAAK3X,OAAOiwD,SAAP,IAAoB7xC,SAAS6B,YAAT,KAA0BpnC,QAAnD,EAA8D;;AAE7D26D,OAAIh8B,UAAJ,CAAgBg8B,IAAIjV,YAApB,EAAkCxnB,QAAQzH,KAA1C;AACAkkC,OAAI/7B,UAAJ,CAAgB+7B,IAAIjV,YAApB,EAAkCv+B,OAAO4wD,UAAzC,EAAqDpd,IAAIn8B,YAAzD;;AAEA+gB,SAAMge,eAAN,CAAuB8Z,kBAAkB5gD,KAAzC;;AAEAkkC,OAAI+C,mBAAJ,CAAyB2Z,kBAAkB5gD,KAA3C,EAAkD,CAAlD,EAAqDkkC,IAAI77B,KAAzD,EAAgE,KAAhE,EAAuE,CAAvE,EAA0E,CAA1E;AAEA;;AAEDygB,QAAMie,uBAAN;;AAEA7C,MAAIzZ,UAAJ,CAAgByZ,IAAIrU,SAApB,EAA+B,CAA/B,EAAkCn/B,OAAOpR,KAAzC;;AAEAoR,SAAOpR,KAAP,GAAe,CAAf;AAEA,EA5FD;;AA8FA,MAAK0qC,kBAAL,GAA0B,UAAW/hC,MAAX,EAAmB2b,GAAnB,EAAwBtS,QAAxB,EAAkCwd,QAAlC,EAA4Cpe,MAA5C,EAAoDqiB,KAApD,EAA4D;;AAErF,MAAIu7B,cAAgB59C,OAAOykB,MAAP,IAAiBzkB,OAAOvI,WAAP,CAAmBzI,WAAnB,KAAmC,CAAxE;;AAEAopC,QAAMulB,WAAN,CAAmBv/B,QAAnB,EAA6Bw/B,WAA7B;;AAEA,MAAI5d,UAAU6wB,WAAYt5D,MAAZ,EAAoB2b,GAApB,EAAyBkL,QAAzB,EAAmCpe,MAAnC,CAAd;AACA,MAAI8wD,kBAAkBlwD,SAASkc,EAAT,GAAc,GAAd,GAAoBkjB,QAAQljB,EAA5B,GAAiC,GAAjC,IAAyCsB,SAASsR,SAAT,KAAuB,IAAhE,CAAtB;;AAEA,MAAIqhC,gBAAgB,KAApB;;AAEA,MAAKD,oBAAoBxE,uBAAzB,EAAmD;;AAElDA,6BAA0BwE,eAA1B;AACAC,mBAAgB,IAAhB;AAEA;;AAED,MAAK/wD,OAAOg2B,qBAAZ,EAAoC;;AAEnC+3B,gBAAaj6D,MAAb,CAAqBkM,MAArB,EAA6BY,QAA7B,EAAuCwd,QAAvC,EAAiD4hB,OAAjD;;AAEA+wB,mBAAgB,IAAhB;AAEA;;AAED;;AAEA,MAAI96E,QAAQ2qB,SAAS3qB,KAArB;AACA,MAAI6a,WAAW8P,SAASI,UAAT,CAAoBlQ,QAAnC;AACA,MAAIkgE,cAAc,CAAlB;;AAEA,MAAK5yC,SAASsR,SAAT,KAAuB,IAA5B,EAAmC;;AAElCz5C,WAAQynC,WAAW8gB,qBAAX,CAAkC59B,QAAlC,CAAR;AACAowD,iBAAc,CAAd;AAEA;;AAED,MAAI1pE,SAAJ;AACA,MAAI6wC,WAAW61B,cAAf;;AAEA,MAAK/3E,UAAU,IAAf,EAAsB;;AAErBqR,eAAY0Z,WAAWtrB,GAAX,CAAgBO,KAAhB,CAAZ;;AAEAkiD,cAAW81B,qBAAX;AACA91B,YAAStO,QAAT,CAAmBviC,SAAnB;AAEA;;AAED,MAAKypE,aAAL,EAAqB;;AAEpBE,yBAAuB7yC,QAAvB,EAAiC4hB,OAAjC,EAA0Cp/B,QAA1C;;AAEA,OAAK3qB,UAAU,IAAf,EAAsB;;AAErBu9D,QAAIh8B,UAAJ,CAAgBg8B,IAAIlV,oBAApB,EAA0Ch3C,UAAUiwB,MAApD;AAEA;AAED;;AAED;;AAEA,MAAI25C,YAAYryD,QAAhB;;AAEA,MAAK5oB,UAAU,IAAf,EAAsB;;AAErBi7E,eAAYj7E,MAAM2Y,KAAlB;AAEA,GAJD,MAIO,IAAKkC,aAAajc,SAAlB,EAA8B;;AAEpCq8E,eAAYpgE,SAASlC,KAArB;AAEA;;AAED,MAAIuiE,aAAavwD,SAAS+oB,SAAT,CAAmBvlB,KAAnB,GAA2B4sD,WAA5C;AACA,MAAII,aAAaxwD,SAAS+oB,SAAT,CAAmB/6B,KAAnB,GAA2BoiE,WAA5C;;AAEA,MAAIhlC,aAAa3J,UAAU,IAAV,GAAiBA,MAAMje,KAAN,GAAc4sD,WAA/B,GAA6C,CAA9D;AACA,MAAIlkC,aAAazK,UAAU,IAAV,GAAiBA,MAAMzzB,KAAN,GAAcoiE,WAA/B,GAA6CnyD,QAA9D;;AAEA,MAAIwyD,YAAYv8E,KAAKyM,GAAL,CAAU4vE,UAAV,EAAsBnlC,UAAtB,CAAhB;AACA,MAAIslC,UAAUx8E,KAAKwM,GAAL,CAAU4vE,SAAV,EAAqBC,aAAaC,UAAlC,EAA8CplC,aAAac,UAA3D,IAA0E,CAAxF;;AAEA,MAAIykC,YAAYz8E,KAAKyM,GAAL,CAAU,CAAV,EAAa+vE,UAAUD,SAAV,GAAsB,CAAnC,CAAhB;;AAEA,MAAKE,cAAc,CAAnB,EAAuB;;AAEvB;;AAEA,MAAKvxD,OAAOykB,MAAZ,EAAqB;;AAEpB,OAAKrG,SAASsR,SAAT,KAAuB,IAA5B,EAAmC;;AAElC0I,UAAMimB,YAAN,CAAoBjgC,SAASuR,kBAAT,GAA8B49B,qBAAlD;AACAp1B,aAAS2B,OAAT,CAAkB0Z,IAAIlU,KAAtB;AAEA,IALD,MAKO;;AAEN,YAASt/B,OAAO61B,QAAhB;;AAEC,UAAKl2C,iBAAL;AACCw4C,eAAS2B,OAAT,CAAkB0Z,IAAIrU,SAAtB;AACA;;AAED,UAAKv/C,qBAAL;AACCu4C,eAAS2B,OAAT,CAAkB0Z,IAAIpU,cAAtB;AACA;;AAED,UAAKv/C,mBAAL;AACCs4C,eAAS2B,OAAT,CAAkB0Z,IAAInU,YAAtB;AACA;;AAZF;AAgBA;AAGD,GA5BD,MA4BO,IAAKr/B,OAAOsqB,MAAZ,EAAqB;;AAE3B,OAAIg0B,YAAYlgC,SAASoR,SAAzB;;AAEA,OAAK8uB,cAAczpE,SAAnB,EAA+BypE,YAAY,CAAZ,CAJJ,CAImB;;AAE9ClmB,SAAMimB,YAAN,CAAoBC,YAAYiP,qBAAhC;;AAEA,OAAKvtD,OAAOwxD,cAAZ,EAA6B;;AAE5Br5B,aAAS2B,OAAT,CAAkB0Z,IAAIlU,KAAtB;AAEA,IAJD,MAIO,IAAKt/B,OAAOyxD,UAAZ,EAAyB;;AAE/Bt5B,aAAS2B,OAAT,CAAkB0Z,IAAIhU,SAAtB;AAEA,IAJM,MAIA;;AAENrH,aAAS2B,OAAT,CAAkB0Z,IAAIjU,UAAtB;AAEA;AAED,GAtBM,MAsBA,IAAKv/B,OAAOqqB,QAAZ,EAAuB;;AAE7B8N,YAAS2B,OAAT,CAAkB0Z,IAAI/T,MAAtB;AAEA;;AAED,MAAK7+B,YAAYA,SAAS8wD,yBAA1B,EAAsD;;AAErD,OAAK9wD,SAASu5B,iBAAT,GAA6B,CAAlC,EAAsC;;AAErChC,aAAS6B,eAAT,CAA0Bp5B,QAA1B,EAAoCywD,SAApC,EAA+CE,SAA/C;AAEA;AAED,GARD,MAQO;;AAENp5B,YAASO,MAAT,CAAiB24B,SAAjB,EAA4BE,SAA5B;AAEA;AAED,EAlKD;;AAoKA,UAASN,qBAAT,CAAgC7yC,QAAhC,EAA0C4hB,OAA1C,EAAmDp/B,QAAnD,EAA8D;;AAE7D,MAAKA,YAAYA,SAAS8wD,yBAA1B,EAAsD;;AAErD,OAAKnhC,WAAW76C,GAAX,CAAgB,wBAAhB,MAA+C,IAApD,EAA2D;;AAE1D4O,YAAQyD,KAAR,CAAe,gJAAf;AACA;AAEA;AAED;;AAEDqwC,QAAM+d,cAAN;;AAEA,MAAI9X,qBAAqBz9B,SAASI,UAAlC;;AAEA,MAAIkvD,oBAAoBlwB,QAAQ4L,aAAR,EAAxB;;AAEA,MAAI+lB,iCAAiCvzC,SAASwS,sBAA9C;;AAEA,OAAM,IAAIl2B,IAAV,IAAkBw1D,iBAAlB,EAAsC;;AAErC,OAAI0B,mBAAmB1B,kBAAmBx1D,IAAnB,CAAvB;;AAEA,OAAKk3D,oBAAoB,CAAzB,EAA6B;;AAE5B,QAAIC,oBAAoBxzB,mBAAoB3jC,IAApB,CAAxB;;AAEA,QAAKm3D,sBAAsBh9E,SAA3B,EAAuC;;AAEtC,SAAIqyC,aAAa2qC,kBAAkB3qC,UAAnC;AACA,SAAIrnB,OAAOgyD,kBAAkB5qC,QAA7B;;AAEA,SAAI3/B,YAAY0Z,WAAWtrB,GAAX,CAAgBm8E,iBAAhB,CAAhB;;AAEA;;AAEA,SAAKvqE,cAAczS,SAAnB,EAA+B;;AAE/B,SAAI0iC,SAASjwB,UAAUiwB,MAAvB;AACA,SAAI7gC,OAAO4Q,UAAU5Q,IAArB;AACA,SAAIgiC,kBAAkBpxB,UAAUoxB,eAAhC;;AAEA,SAAKm5C,kBAAkB74C,4BAAvB,EAAsD;;AAErD,UAAIta,OAAOmzD,kBAAkBnzD,IAA7B;AACA,UAAIozD,SAASpzD,KAAKozD,MAAlB;AACA,UAAI3qE,SAAS0qE,kBAAkB1qE,MAA/B;;AAEA,UAAKuX,QAAQA,KAAKqzD,4BAAlB,EAAiD;;AAEhD35B,aAAMskB,yBAAN,CAAiCkV,gBAAjC,EAAmDlzD,KAAKi+C,gBAAxD;;AAEA,WAAK/7C,SAASu5B,iBAAT,KAA+BtlD,SAApC,EAAgD;;AAE/C+rB,iBAASu5B,iBAAT,GAA6Bz7B,KAAKi+C,gBAAL,GAAwBj+C,KAAK9P,KAA1D;AAEA;AAED,OAVD,MAUO;;AAENwpC,aAAMge,eAAN,CAAuBwb,gBAAvB;AAEA;;AAEDpe,UAAIh8B,UAAJ,CAAgBg8B,IAAIjV,YAApB,EAAkChnB,MAAlC;AACAi8B,UAAI+C,mBAAJ,CAAyBqb,gBAAzB,EAA2C/xD,IAA3C,EAAiDnpB,IAAjD,EAAuDwwC,UAAvD,EAAmE4qC,SAASp5C,eAA5E,EAA6FvxB,SAASuxB,eAAtG;AAEA,MAzBD,MAyBO;;AAEN,UAAKm5C,kBAAkBG,0BAAvB,EAAoD;;AAEnD55B,aAAMskB,yBAAN,CAAiCkV,gBAAjC,EAAmDC,kBAAkBlV,gBAArE;;AAEA,WAAK/7C,SAASu5B,iBAAT,KAA+BtlD,SAApC,EAAgD;;AAE/C+rB,iBAASu5B,iBAAT,GAA6B03B,kBAAkBlV,gBAAlB,GAAqCkV,kBAAkBjjE,KAApF;AAEA;AAED,OAVD,MAUO;;AAENwpC,aAAMge,eAAN,CAAuBwb,gBAAvB;AAEA;;AAEDpe,UAAIh8B,UAAJ,CAAgBg8B,IAAIjV,YAApB,EAAkChnB,MAAlC;AACAi8B,UAAI+C,mBAAJ,CAAyBqb,gBAAzB,EAA2C/xD,IAA3C,EAAiDnpB,IAAjD,EAAuDwwC,UAAvD,EAAmE,CAAnE,EAAsE,CAAtE;AAEA;AAED,KA/DD,MA+DO,IAAKyqC,mCAAmC98E,SAAxC,EAAoD;;AAE1D,SAAII,QAAQ08E,+BAAgCj3D,IAAhC,CAAZ;;AAEA,SAAKzlB,UAAUJ,SAAf,EAA2B;;AAE1B,cAASI,MAAMkB,MAAf;;AAEC,YAAK,CAAL;AACCq9D,YAAIye,eAAJ,CAAqBL,gBAArB,EAAuC38E,KAAvC;AACA;;AAED,YAAK,CAAL;AACCu+D,YAAI0e,eAAJ,CAAqBN,gBAArB,EAAuC38E,KAAvC;AACA;;AAED,YAAK,CAAL;AACCu+D,YAAI2e,eAAJ,CAAqBP,gBAArB,EAAuC38E,KAAvC;AACA;;AAED;AACCu+D,YAAI4e,eAAJ,CAAqBR,gBAArB,EAAuC38E,KAAvC;;AAfF;AAmBA;AAED;AAED;AAED;;AAEDmjD,QAAMie,uBAAN;AAEA;;AAED;;AAEA,MAAKgc,OAAL,GAAe,UAAWz5B,KAAX,EAAkBrhC,MAAlB,EAA2B;;AAEzCq0D,uBAAqB/Z,aAAan8D,GAAb,CAAkBkjD,KAAlB,EAAyBrhC,MAAzB,CAArB;AACAq0D,qBAAmBhvB,IAAnB;;AAEAhE,QAAMl4B,QAAN,CAAgB,UAAWV,MAAX,EAAoB;;AAEnC,OAAKA,OAAOsyD,OAAZ,EAAsB;;AAErB1G,uBAAmBra,SAAnB,CAA8BvxC,MAA9B;;AAEA,QAAKA,OAAOmb,UAAZ,EAAyB;;AAExBywC,wBAAmBpa,UAAnB,CAA+BxxC,MAA/B;AAEA;AAED;AAED,GAdD;;AAgBA4rD,qBAAmBja,WAAnB,CAAgCp6C,MAAhC;;AAEAqhC,QAAMl4B,QAAN,CAAgB,UAAWV,MAAX,EAAoB;;AAEnC,OAAKA,OAAOoe,QAAZ,EAAuB;;AAEtB,QAAK7P,MAAMC,OAAN,CAAexO,OAAOoe,QAAtB,CAAL,EAAwC;;AAEvC,UAAM,IAAI5mC,IAAI,CAAd,EAAiBA,IAAIwoB,OAAOoe,QAAP,CAAgBjoC,MAArC,EAA6CqB,GAA7C,EAAoD;;AAEnD+6E,mBAAcvyD,OAAOoe,QAAP,CAAiB5mC,CAAjB,CAAd,EAAoCohD,MAAM1lB,GAA1C,EAA+ClT,MAA/C;AAEA;AAED,KARD,MAQO;;AAENuyD,kBAAcvyD,OAAOoe,QAArB,EAA+Bwa,MAAM1lB,GAArC,EAA0ClT,MAA1C;AAEA;AAED;AAED,GApBD;AAsBA,EA7CD;;AA+CA;;AAEA,KAAIwyD,cAAc,KAAlB;AACA,KAAIC,mBAAmB,IAAvB;;AAEA,UAASC,cAAT,GAA0B;;AAEzB,MAAKF,WAAL,EAAmB;;AAEnBG;;AAEAH,gBAAc,IAAd;AAEA;;AAED,UAASjD,aAAT,GAAyB;;AAExBiD,gBAAc,KAAd;AAEA;;AAED,UAASG,yBAAT,GAAqC;;AAEpC,MAAI1K,SAASmG,GAAG3E,SAAH,EAAb;;AAEA,MAAKxB,UAAUA,OAAOc,YAAtB,EAAqC;;AAEpCd,UAAO2K,qBAAP,CAA8BC,aAA9B;AAEA,GAJD,MAIO;;AAENvK,UAAOsK,qBAAP,CAA8BC,aAA9B;AAEA;AAED;;AAED,UAASA,aAAT,CAAwBC,IAAxB,EAA+B;;AAE9B,MAAKN,gBAAgB,KAArB,EAA6B;;AAE7BC,mBAAkBK,IAAlB;;AAEAH;AAEA;;AAED,MAAKI,OAAL,GAAe,UAAWx8D,QAAX,EAAsB;;AAEpCk8D,qBAAmBl8D,QAAnB;AACAk8D,uBAAqB,IAArB,GAA4BC,gBAA5B,GAA+CnD,eAA/C;AAEA,EALD;;AAOA;;AAEA,MAAK72B,MAAL,GAAc,UAAWE,KAAX,EAAkBrhC,MAAlB,EAA0B+oD,YAA1B,EAAwCznB,UAAxC,EAAqD;;AAElE,MAAK,EAAIthC,UAAUA,OAAOqlB,QAArB,CAAL,EAAuC;;AAEtCt4B,WAAQyD,KAAR,CAAe,wEAAf;AACA;AAEA;;AAED,MAAKmkE,cAAL,EAAsB;;AAEtB;;AAEAI,4BAA0B,EAA1B;AACAD,uBAAqB,CAAE,CAAvB;AACAE,mBAAiB,IAAjB;;AAEA;;AAEA,MAAK3zB,MAAM2a,UAAN,KAAqB,IAA1B,EAAiC3a,MAAM33B,iBAAN;;AAEjC;;AAEA,MAAK1J,OAAOkjB,MAAP,KAAkB,IAAvB,EAA8BljB,OAAO0J,iBAAP;;AAE9B,MAAKmtD,GAAG9uC,OAAR,EAAkB;;AAEjB/nB,YAAS62D,GAAGxE,SAAH,CAAcryD,MAAd,CAAT;AAEA;;AAED;;AAEAq0D,uBAAqB/Z,aAAan8D,GAAb,CAAkBkjD,KAAlB,EAAyBrhC,MAAzB,CAArB;AACAq0D,qBAAmBhvB,IAAnB;;AAEAhE,QAAMnd,cAAN,CAAsBwwC,KAAtB,EAA6BrzB,KAA7B,EAAoCrhC,MAApC,EAA4C+oD,YAA5C;;AAEAjO,oBAAkB5lD,gBAAlB,CAAoC8K,OAAOC,gBAA3C,EAA6DD,OAAOsnB,kBAApE;AACAuzB,WAAShtC,aAAT,CAAwBitC,iBAAxB;;AAEAgb,0BAAwB,KAAK/wB,oBAA7B;AACA8wB,qBAAmBD,UAAUvwB,IAAV,CAAgB,KAAKxO,cAArB,EAAqCi/B,qBAArC,EAA4D91D,MAA5D,CAAnB;;AAEAo0D,sBAAoBmC,YAAYp4E,GAAZ,CAAiBkjD,KAAjB,EAAwBrhC,MAAxB,CAApB;AACAo0D,oBAAkB/uB,IAAlB;;AAEAo2B,gBAAep6B,KAAf,EAAsBrhC,MAAtB,EAA8B00D,MAAMH,WAApC;;AAEA,MAAKG,MAAMH,WAAN,KAAsB,IAA3B,EAAkC;;AAEjCH,qBAAkBrmC,IAAlB;AAEA;;AAED;;AAEA,MAAK8nC,gBAAL,EAAwBD,UAAUpwB,YAAV;;AAExB,MAAIsU,eAAeua,mBAAmBxzB,KAAnB,CAAyBiZ,YAA5C;;AAEA5C,YAAU/V,MAAV,CAAkB2Y,YAAlB,EAAgCzY,KAAhC,EAAuCrhC,MAAvC;;AAEAq0D,qBAAmBja,WAAnB,CAAgCp6C,MAAhC;;AAEA,MAAK61D,gBAAL,EAAwBD,UAAUnwB,UAAV;;AAExB;;AAEA,MAAK,KAAKpD,IAAL,CAAUgG,SAAf,EAA2B,KAAKhG,IAAL,CAAU8F,KAAV;;AAE3B,MAAK4gB,iBAAiBzrE,SAAtB,EAAkC;;AAEjCyrE,kBAAe,IAAf;AAEA;;AAED,OAAKlM,eAAL,CAAsBkM,YAAtB;;AAEA;;AAEAxnB,aAAWJ,MAAX,CAAmBizB,iBAAnB,EAAsC/yB,KAAtC,EAA6CrhC,MAA7C,EAAqDshC,UAArD;;AAEA;;AAEA,MAAIo6B,gBAAgBtH,kBAAkBrc,MAAtC;AACA,MAAI4jB,qBAAqBvH,kBAAkBj+B,WAA3C;;AAEA,MAAKkL,MAAMu6B,gBAAX,EAA8B;;AAE7B,OAAIA,mBAAmBv6B,MAAMu6B,gBAA7B;;AAEA,OAAKF,cAAc98E,MAAnB,EAA4Bi9E,cAAeH,aAAf,EAA8Br6B,KAA9B,EAAqCrhC,MAArC,EAA6C47D,gBAA7C;AAC5B,OAAKD,mBAAmB/8E,MAAxB,EAAiCi9E,cAAeF,kBAAf,EAAmCt6B,KAAnC,EAA0CrhC,MAA1C,EAAkD47D,gBAAlD;AAEjC,GAPD,MAOO;;AAEN;;AAEA,OAAKF,cAAc98E,MAAnB,EAA4Bi9E,cAAeH,aAAf,EAA8Br6B,KAA9B,EAAqCrhC,MAArC;;AAE5B;;AAEA,OAAK27D,mBAAmB/8E,MAAxB,EAAiCi9E,cAAeF,kBAAf,EAAmCt6B,KAAnC,EAA0CrhC,MAA1C;AAEjC;;AAED;;AAEA,MAAI+5C,eAAesa,mBAAmBxzB,KAAnB,CAAyBkZ,YAA5C;;AAEA4c,iBAAex1B,MAAf,CAAuB4Y,YAAvB,EAAqC1Y,KAArC,EAA4CrhC,MAA5C;;AAEA;;AAEA,MAAK+oD,YAAL,EAAoB;;AAEnB1kD,YAAS6oD,wBAAT,CAAmCnE,YAAnC;AAEA;;AAED;;AAEAloB,QAAMrhB,OAAN,CAAcf,KAAd,CAAoB29B,OAApB,CAA6B,IAA7B;AACAvb,QAAMrhB,OAAN,CAAcf,KAAd,CAAoB+gC,OAApB,CAA6B,IAA7B;AACA3e,QAAMrhB,OAAN,CAAczH,KAAd,CAAoBynC,OAApB,CAA6B,IAA7B;;AAEA3e,QAAMylB,gBAAN,CAAwB,KAAxB;;AAEAjlB,QAAMld,aAAN,CAAqBuwC,KAArB,EAA4BrzB,KAA5B,EAAmCrhC,MAAnC;;AAEA,MAAK62D,GAAG9uC,OAAR,EAAkB;;AAEjB8uC,MAAGtD,WAAH;AAEA;;AAED;;AAEAa,sBAAoB,IAApB;AACAC,uBAAqB,IAArB;AAEA,EA9ID;;AAgJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,UAASoH,aAAT,CAAwBhzD,MAAxB,EAAgCzI,MAAhC,EAAwCu0D,WAAxC,EAAsD;;AAErD,MAAK9rD,OAAOkb,OAAP,KAAmB,KAAxB,EAAgC;;AAEhC,MAAIA,UAAUlb,OAAOsa,MAAP,CAAcD,IAAd,CAAoB9iB,OAAO+iB,MAA3B,CAAd;;AAEA,MAAKY,OAAL,EAAe;;AAEd,OAAKlb,OAAOsyD,OAAZ,EAAsB;;AAErB1G,uBAAmBra,SAAnB,CAA8BvxC,MAA9B;;AAEA,QAAKA,OAAOmb,UAAZ,EAAyB;;AAExBywC,wBAAmBpa,UAAnB,CAA+BxxC,MAA/B;AAEA;AAED,IAVD,MAUO,IAAKA,OAAOqzD,QAAZ,EAAuB;;AAE7B,QAAK,CAAErzD,OAAOqb,aAAT,IAA0B+2B,SAAS5rC,gBAAT,CAA2BxG,MAA3B,CAA/B,EAAqE;;AAEpE4rD,wBAAmBla,UAAnB,CAA+B1xC,MAA/B;AAEA;AAED,IARM,MAQA,IAAKA,OAAOszD,uBAAZ,EAAsC;;AAE5C,QAAKxH,WAAL,EAAmB;;AAElBwB,cAASt0D,qBAAT,CAAgCgH,OAAOvI,WAAvC,EACE3I,YADF,CACgBujD,iBADhB;AAGA;;AAEDsZ,sBAAkB50E,IAAlB,CAAwBipB,MAAxB,EAAgC,IAAhC,EAAsCA,OAAOoe,QAA7C,EAAuDkvC,SAAS3jE,CAAhE,EAAmE,IAAnE;AAEA,IAXM,MAWA,IAAKqW,OAAOykB,MAAP,IAAiBzkB,OAAOsqB,MAAxB,IAAkCtqB,OAAOqqB,QAA9C,EAAyD;;AAE/D,QAAKrqB,OAAO4tC,aAAZ,EAA4B;;AAE3B5tC,YAAOitC,QAAP,CAAgBn5C,MAAhB;AAEA;;AAED,QAAK,CAAEkM,OAAOqb,aAAT,IAA0B+2B,SAAS/rC,gBAAT,CAA2BrG,MAA3B,CAA/B,EAAqE;;AAEpE,SAAK8rD,WAAL,EAAmB;;AAElBwB,eAASt0D,qBAAT,CAAgCgH,OAAOvI,WAAvC,EACE3I,YADF,CACgBujD,iBADhB;AAGA;;AAED,SAAIzxC,WAAWgtD,QAAQ95D,MAAR,CAAgBkM,MAAhB,CAAf;AACA,SAAIoe,WAAWpe,OAAOoe,QAAtB;;AAEA,SAAK7P,MAAMC,OAAN,CAAe4P,QAAf,CAAL,EAAiC;;AAEhC,UAAIgE,SAASxhB,SAASwhB,MAAtB;;AAEA,WAAM,IAAI5qC,IAAI,CAAR,EAAWC,IAAI2qC,OAAOjsC,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,WAAI6qC,QAAQD,OAAQ5qC,CAAR,CAAZ;AACA,WAAI29D,gBAAgB/2B,SAAUiE,MAAMtC,aAAhB,CAApB;;AAEA,WAAKo1B,iBAAiBA,cAAcj6B,OAApC,EAA8C;;AAE7CywC,0BAAkB50E,IAAlB,CAAwBipB,MAAxB,EAAgCY,QAAhC,EAA0Cu0C,aAA1C,EAAyDmY,SAAS3jE,CAAlE,EAAqE04B,KAArE;AAEA;AAED;AAED,MAjBD,MAiBO,IAAKjE,SAASlD,OAAd,EAAwB;;AAE9BywC,wBAAkB50E,IAAlB,CAAwBipB,MAAxB,EAAgCY,QAAhC,EAA0Cwd,QAA1C,EAAoDkvC,SAAS3jE,CAA7D,EAAgE,IAAhE;AAEA;AAED;AAED;AAED;;AAED,MAAI+wB,WAAW1a,OAAO0a,QAAtB;;AAEA,OAAM,IAAIljC,IAAI,CAAR,EAAWC,IAAIijC,SAASvkC,MAA9B,EAAsCqB,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;;AAEnDw7E,iBAAet4C,SAAUljC,CAAV,CAAf,EAA8B+f,MAA9B,EAAsCu0D,WAAtC;AAEA;AAED;;AAED,UAASsH,aAAT,CAAwBz6B,UAAxB,EAAoCC,KAApC,EAA2CrhC,MAA3C,EAAmD47D,gBAAnD,EAAsE;;AAErE,OAAM,IAAI37E,IAAI,CAAR,EAAWC,IAAIkhD,WAAWxiD,MAAhC,EAAwCqB,IAAIC,CAA5C,EAA+CD,GAA/C,EAAsD;;AAErD,OAAI+3D,aAAa5W,WAAYnhD,CAAZ,CAAjB;;AAEA,OAAIwoB,SAASuvC,WAAWvvC,MAAxB;AACA,OAAIY,WAAW2uC,WAAW3uC,QAA1B;AACA,OAAIwd,WAAW+0C,qBAAqBt+E,SAArB,GAAiC06D,WAAWnxB,QAA5C,GAAuD+0C,gBAAtE;AACA,OAAI9wC,QAAQktB,WAAWltB,KAAvB;;AAEA,OAAK9qB,OAAOwwD,aAAZ,EAA4B;;AAE3ByE,0BAAsBj1D,MAAtB;;AAEA,QAAIuwD,UAAUvwD,OAAOuwD,OAArB;;AAEA,SAAM,IAAIvlD,IAAI,CAAR,EAAW+e,KAAKwmC,QAAQ3xE,MAA9B,EAAsCosB,IAAI+e,EAA1C,EAA8C/e,GAA9C,EAAqD;;AAEpD,SAAIgxD,UAAUzL,QAASvlD,CAAT,CAAd;;AAEA,SAAKvC,OAAOsa,MAAP,CAAcD,IAAd,CAAoBk5C,QAAQj5C,MAA5B,CAAL,EAA4C;;AAE3C,UAAIsuC,SAAS2K,QAAQ3K,MAArB;;AAEA,UAAIvzE,IAAIuzE,OAAOvzE,CAAP,GAAWw3E,MAAnB;AACA,UAAI5qE,IAAI2mE,OAAO3mE,CAAP,GAAW6qE,OAAnB;AACA,UAAI5wD,QAAQ0sD,OAAOj/D,CAAP,GAAWkjE,MAAvB;AACA,UAAI1wD,SAASysD,OAAOvkE,CAAP,GAAWyoE,OAAxB;;AAEA10B,YAAMt6B,QAAN,CAAgB2uD,iBAAiBlpE,GAAjB,CAAsBlO,CAAtB,EAAyB4M,CAAzB,EAA4Bia,KAA5B,EAAmCC,MAAnC,EAA4CjX,cAA5C,CAA4D6nE,WAA5D,CAAhB;;AAEAzY,mBAAct0C,MAAd,EAAsB44B,KAAtB,EAA6B26B,OAA7B,EAAsC3yD,QAAtC,EAAgDwd,QAAhD,EAA0DiE,KAA1D;AAEA;AAED;AAED,IA3BD,MA2BO;;AAENmqC,0BAAsB,IAAtB;;AAEAlY,iBAAct0C,MAAd,EAAsB44B,KAAtB,EAA6BrhC,MAA7B,EAAqCqJ,QAArC,EAA+Cwd,QAA/C,EAAyDiE,KAAzD;AAEA;AAED;AAED;;AAED,UAASiyB,YAAT,CAAuBt0C,MAAvB,EAA+B44B,KAA/B,EAAsCrhC,MAAtC,EAA8CqJ,QAA9C,EAAwDwd,QAAxD,EAAkEiE,KAAlE,EAA0E;;AAEzEriB,SAAOyb,cAAP,CAAuBwwC,KAAvB,EAA8BrzB,KAA9B,EAAqCrhC,MAArC,EAA6CqJ,QAA7C,EAAuDwd,QAAvD,EAAiEiE,KAAjE;AACAupC,uBAAqB/Z,aAAan8D,GAAb,CAAkBkjD,KAAlB,EAAyB4zB,uBAAuBj1D,MAAhD,CAArB;;AAEAyI,SAAO+a,eAAP,CAAuBtuB,gBAAvB,CAAyC8K,OAAOsnB,kBAAhD,EAAoE7e,OAAOvI,WAA3E;AACAuI,SAAO4E,YAAP,CAAoBtL,eAApB,CAAqC0G,OAAO+a,eAA5C;;AAEA,MAAK/a,OAAOszD,uBAAZ,EAAsC;;AAErC,OAAI1V,cAAgB59C,OAAOykB,MAAP,IAAiBzkB,OAAOvI,WAAP,CAAmBzI,WAAnB,KAAmC,CAAxE;;AAEAopC,SAAMulB,WAAN,CAAmBv/B,QAAnB,EAA6Bw/B,WAA7B;;AAEA,OAAI5d,UAAU6wB,WAAYt5D,MAAZ,EAAoBqhC,MAAM1lB,GAA1B,EAA+BkL,QAA/B,EAAyCpe,MAAzC,CAAd;;AAEAssD,6BAA0B,EAA1B;;AAEAsD,yBAAuB5vD,MAAvB,EAA+BggC,OAA/B,EAAwC5hB,QAAxC;AAEA,GAZD,MAYO;;AAEN6tC,SAAM3yB,kBAAN,CAA0B/hC,MAA1B,EAAkCqhC,MAAM1lB,GAAxC,EAA6CtS,QAA7C,EAAuDwd,QAAvD,EAAiEpe,MAAjE,EAAyEqiB,KAAzE;AAEA;;AAEDriB,SAAO0b,aAAP,CAAsBuwC,KAAtB,EAA6BrzB,KAA7B,EAAoCrhC,MAApC,EAA4CqJ,QAA5C,EAAsDwd,QAAtD,EAAgEiE,KAAhE;AACAupC,uBAAqB/Z,aAAan8D,GAAb,CAAkBkjD,KAAlB,EAAyB4zB,uBAAuBj1D,MAAhD,CAArB;AAEA;;AAED,UAASg7D,YAAT,CAAuBn0C,QAAvB,EAAiClL,GAAjC,EAAsClT,MAAtC,EAA+C;;AAE9C,MAAIwzD,qBAAqB9/C,WAAWh+B,GAAX,CAAgB0oC,QAAhB,CAAzB;;AAEA,MAAI7K,SAASq4C,mBAAmBxzB,KAAnB,CAAyB7kB,MAAtC;AACA,MAAI89B,eAAeua,mBAAmBxzB,KAAnB,CAAyBiZ,YAA5C;;AAEA,MAAInzB,aAAa2vC,aAAatgB,aAAb,CAChBnvB,QADgB,EACN7K,OAAO6kB,KADD,EACQiZ,YADR,EACsBn+B,GADtB,EAC2Bi6C,UAAUzwB,SADrC,EACgDywB,UAAUxwB,eAD1D,EAC2E38B,MAD3E,CAAjB;;AAGA,MAAI2oC,OAAOklB,aAAanf,cAAb,CAA6BtwB,QAA7B,EAAuCF,UAAvC,CAAX;;AAEA,MAAI8hB,UAAUwzB,mBAAmBxzB,OAAjC;AACA,MAAIyzB,gBAAgB,IAApB;;AAEA,MAAKzzB,YAAYnrD,SAAjB,EAA6B;;AAE5B;AACAupC,YAAS3nC,gBAAT,CAA2B,SAA3B,EAAsCg5E,iBAAtC;AAEA,GALD,MAKO,IAAKzvB,QAAQ2I,IAAR,KAAiBA,IAAtB,EAA6B;;AAEnC;AACAgnB,mCAAiCvxC,QAAjC;AAEA,GALM,MAKA,IAAKo1C,mBAAmBE,UAAnB,KAAkCngD,OAAO6kB,KAAP,CAAa5R,IAApD,EAA2D;;AAEjE9S,cAAW5f,MAAX,CAAmBsqB,QAAnB,EAA6B,YAA7B,EAA2C7K,OAAO6kB,KAAP,CAAa5R,IAAxD;AACAitC,mBAAgB,KAAhB;AAEA,GALM,MAKA,IAAKv1C,WAAWyvB,QAAX,KAAwB94D,SAA7B,EAAyC;;AAE/C;AACA;AAEA,GALM,MAKA;;AAEN;AACA4+E,mBAAgB,KAAhB;AAEA;;AAED,MAAKA,aAAL,EAAqB;;AAEpB,OAAKv1C,WAAWyvB,QAAhB,EAA2B;;AAE1B,QAAI3H,SAAShxB,UAAWkJ,WAAWyvB,QAAtB,CAAb;;AAEA6lB,uBAAmBxtB,MAAnB,GAA4B;AAC3BtrC,WAAM0jB,SAAS1nC,IADY;AAE3Bs3B,eAAUF,cAAc9pB,KAAd,CAAqBgiD,OAAOh4B,QAA5B,CAFiB;AAG3BkH,mBAAc8wB,OAAO9wB,YAHM;AAI3BC,qBAAgB6wB,OAAO7wB;AAJI,KAA5B;AAOA,IAXD,MAWO;;AAENq+C,uBAAmBxtB,MAAnB,GAA4B;AAC3BtrC,WAAM0jB,SAAS1nC,IADY;AAE3Bs3B,eAAUoQ,SAASpQ,QAFQ;AAG3BkH,mBAAckJ,SAASlJ,YAHI;AAI3BC,qBAAgBiJ,SAASjJ;AAJE,KAA5B;AAOA;;AAEDiJ,YAAS6Q,eAAT,CAA0BukC,mBAAmBxtB,MAA7C,EAAqDimB,KAArD;;AAEAjsB,aAAU6tB,aAAalf,cAAb,CAA6BvwB,QAA7B,EAAuCo1C,mBAAmBxtB,MAA1D,EAAkE9nB,UAAlE,EAA8EyqB,IAA9E,CAAV;;AAEA6qB,sBAAmBxzB,OAAnB,GAA6BA,OAA7B;AACA5hB,YAAS4hB,OAAT,GAAmBA,OAAnB;AAEA;;AAED,MAAIkwB,oBAAoBlwB,QAAQ4L,aAAR,EAAxB;;AAEA,MAAKxtB,SAASmC,YAAd,EAA6B;;AAE5BnC,YAASu1C,wBAAT,GAAoC,CAApC;;AAEA,QAAM,IAAIn8E,IAAI,CAAd,EAAiBA,IAAIy0E,MAAM9d,eAA3B,EAA4C32D,GAA5C,EAAmD;;AAElD,QAAK04E,kBAAmB,gBAAgB14E,CAAnC,KAA0C,CAA/C,EAAmD;;AAElD4mC,cAASu1C,wBAAT;AAEA;AAED;AAED;;AAED,MAAKv1C,SAASoC,YAAd,EAA6B;;AAE5BpC,YAASw1C,wBAAT,GAAoC,CAApC;;AAEA,QAAM,IAAIp8E,IAAI,CAAd,EAAiBA,IAAIy0E,MAAM7d,eAA3B,EAA4C52D,GAA5C,EAAmD;;AAElD,QAAK04E,kBAAmB,gBAAgB14E,CAAnC,KAA0C,CAA/C,EAAmD;;AAElD4mC,cAASw1C,wBAAT;AAEA;AAED;AAED;;AAED,MAAI5lD,WAAWwlD,mBAAmBxtB,MAAnB,CAA0Bh4B,QAAzC;;AAEA,MAAK,CAAEoQ,SAAS2S,gBAAX,IACJ,CAAE3S,SAASmrB,mBADP,IAEJnrB,SAASkS,QAAT,KAAsB,IAFvB,EAE8B;;AAE7BkjC,sBAAmBtrB,iBAAnB,GAAuCilB,UAAUzwB,SAAjD;AACA82B,sBAAmB72B,eAAnB,GAAqCwwB,UAAUxwB,eAA/C;AACA3uB,YAASogB,cAAT,GAA0B++B,UAAU1wB,OAApC;AAEA;;AAED+2B,qBAAmBtgD,GAAnB,GAAyBA,GAAzB;;AAEA;;AAEAsgD,qBAAmBE,UAAnB,GAAgCngD,OAAO6kB,KAAP,CAAa5R,IAA7C;;AAEA,MAAKpI,SAAS7K,MAAd,EAAuB;;AAEtB;;AAEAvF,YAASwF,iBAAT,CAA2Bv+B,KAA3B,GAAmCs+B,OAAO6kB,KAAP,CAAa4X,OAAhD;AACAhiC,YAASyF,iBAAT,CAA2Bx+B,KAA3B,GAAmCs+B,OAAO6kB,KAAP,CAAaiW,WAAhD;AACArgC,YAASiG,UAAT,CAAoBh/B,KAApB,GAA4Bs+B,OAAO6kB,KAAP,CAAakW,IAAzC;AACAtgC,YAAS+G,cAAT,CAAwB9/B,KAAxB,GAAgCs+B,OAAO6kB,KAAP,CAAamW,QAA7C;AACAvgC,YAASuG,WAAT,CAAqBt/B,KAArB,GAA6Bs+B,OAAO6kB,KAAP,CAAa93B,KAA1C;AACA0N,YAAS4G,gBAAT,CAA0B3/B,KAA1B,GAAkCs+B,OAAO6kB,KAAP,CAAaoW,IAA/C;;AAEAxgC,YAAS+F,oBAAT,CAA8B9+B,KAA9B,GAAsCs+B,OAAO6kB,KAAP,CAAarkB,oBAAnD;AACA/F,YAASgG,uBAAT,CAAiC/+B,KAAjC,GAAyCs+B,OAAO6kB,KAAP,CAAapkB,uBAAtD;AACAhG,YAASqG,aAAT,CAAuBp/B,KAAvB,GAA+Bs+B,OAAO6kB,KAAP,CAAa/jB,aAA5C;AACArG,YAASsG,gBAAT,CAA0Br/B,KAA1B,GAAkCs+B,OAAO6kB,KAAP,CAAa9jB,gBAA/C;AACAtG,YAAS0G,cAAT,CAAwBz/B,KAAxB,GAAgCs+B,OAAO6kB,KAAP,CAAa1jB,cAA7C;AACA1G,YAAS2G,iBAAT,CAA2B1/B,KAA3B,GAAmCs+B,OAAO6kB,KAAP,CAAazjB,iBAAhD;AACA;AAEA;;AAED,MAAIk/C,eAAeL,mBAAmBxzB,OAAnB,CAA2BG,WAA3B,EAAnB;AAAA,MACC2zB,eACC1uB,cAAcO,YAAd,CAA4BkuB,aAAalzB,GAAzC,EAA8C3yB,QAA9C,CAFF;;AAIAwlD,qBAAmBM,YAAnB,GAAkCA,YAAlC;AAEA;;AAED,UAASjD,UAAT,CAAqBt5D,MAArB,EAA6B2b,GAA7B,EAAkCkL,QAAlC,EAA4Cpe,MAA5C,EAAqD;;AAEpD4sD,sBAAoB,CAApB;;AAEA,MAAI4G,qBAAqB9/C,WAAWh+B,GAAX,CAAgB0oC,QAAhB,CAAzB;AACA,MAAI7K,SAASq4C,mBAAmBxzB,KAAnB,CAAyB7kB,MAAtC;;AAEA,MAAK65C,gBAAL,EAAwB;;AAEvB,OAAKC,yBAAyB91D,WAAWg1D,cAAzC,EAA0D;;AAEzD,QAAIwH,WACHx8D,WAAWg1D,cAAX,IACAnuC,SAAStB,EAAT,KAAgBuvC,kBAFjB;;AAIA;AACA;AACA;AACAc,cAAUjwB,QAAV,CACC9e,SAASgQ,cADV,EAC0BhQ,SAASiQ,gBADnC,EACqDjQ,SAASkQ,WAD9D,EAEC/2B,MAFD,EAESi8D,kBAFT,EAE6BO,QAF7B;AAIA;AAED;;AAED,MAAK31C,SAASgM,WAAT,KAAyB,KAA9B,EAAsC;;AAErC,OAAKopC,mBAAmBxzB,OAAnB,KAA+BnrD,SAApC,EAAgD;;AAE/CupC,aAASgM,WAAT,GAAuB,IAAvB;AAEA,IAJD,MAIO,IAAKhM,SAASlL,GAAT,IAAgBsgD,mBAAmBtgD,GAAnB,KAA2BA,GAAhD,EAAsD;;AAE5DkL,aAASgM,WAAT,GAAuB,IAAvB;AAEA,IAJM,MAIA,IAAKhM,SAAS7K,MAAT,IAAmBigD,mBAAmBE,UAAnB,KAAkCngD,OAAO6kB,KAAP,CAAa5R,IAAvE,EAA8E;;AAEpFpI,aAASgM,WAAT,GAAuB,IAAvB;AAEA,IAJM,MAIA,IAAKopC,mBAAmBtrB,iBAAnB,KAAyCrzD,SAAzC,KACT2+E,mBAAmBtrB,iBAAnB,KAAyCilB,UAAUzwB,SAAnD,IACF82B,mBAAmB72B,eAAnB,KAAuCwwB,UAAUxwB,eAFtC,CAAL,EAE+D;;AAErEve,aAASgM,WAAT,GAAuB,IAAvB;AAEA;AAED;;AAED,MAAKhM,SAASgM,WAAd,EAA4B;;AAE3BmoC,gBAAcn0C,QAAd,EAAwBlL,GAAxB,EAA6BlT,MAA7B;AACAoe,YAASgM,WAAT,GAAuB,KAAvB;AAEA;;AAED,MAAI4pC,iBAAiB,KAArB;AACA,MAAIC,kBAAkB,KAAtB;AACA,MAAIC,gBAAgB,KAApB;;AAEA,MAAIl0B,UAAUwzB,mBAAmBxzB,OAAjC;AAAA,MACCm0B,aAAan0B,QAAQG,WAAR,EADd;AAAA,MAECi0B,aAAaZ,mBAAmBxtB,MAAnB,CAA0Bh4B,QAFxC;;AAIA,MAAKoqB,MAAM8d,UAAN,CAAkBlW,QAAQA,OAA1B,CAAL,EAA2C;;AAE1Cg0B,oBAAiB,IAAjB;AACAC,qBAAkB,IAAlB;AACAC,mBAAgB,IAAhB;AAEA;;AAED,MAAK91C,SAAStB,EAAT,KAAgBuvC,kBAArB,EAA0C;;AAEzCA,wBAAqBjuC,SAAStB,EAA9B;;AAEAm3C,qBAAkB,IAAlB;AAEA;;AAED,MAAKD,kBAAkBz8D,WAAWg1D,cAAlC,EAAmD;;AAElD4H,cAAW/zB,QAAX,CAAqBoT,GAArB,EAA0B,kBAA1B,EAA8Cj8C,OAAOC,gBAArD;;AAEA,OAAKy0C,aAAalR,sBAAlB,EAA2C;;AAE1Co5B,eAAW/zB,QAAX,CAAqBoT,GAArB,EAA0B,eAA1B,EACC,OAAQ1+D,KAAKoO,GAAL,CAAUqU,OAAOvF,GAAP,GAAa,GAAvB,IAA+Bld,KAAKqO,GAA5C,CADD;AAGA;;AAED;;AAEA,OAAKopE,oBAAqBC,uBAAuBj1D,MAA5C,CAAL,EAA4D;;AAE3Dg1D,qBAAmBC,uBAAuBj1D,MAA1C;;AAEA;AACA;AACA;;AAEA08D,sBAAkB,IAAlB,CAR2D,CAQlC;AACzBC,oBAAgB,IAAhB,CAT2D,CASpC;AAEvB;;AAED;AACA;;AAEA,OAAK91C,SAAS2S,gBAAT,IACJ3S,SAASgyC,mBADL,IAEJhyC,SAASiyC,sBAFL,IAGJjyC,SAAS/M,MAHV,EAGmB;;AAElB,QAAIgjD,UAAUF,WAAWpjD,GAAX,CAAeujD,cAA7B;;AAEA,QAAKD,YAAYx/E,SAAjB,EAA6B;;AAE5Bw/E,aAAQj0B,QAAR,CAAkBoT,GAAlB,EACC8Z,SAASt0D,qBAAT,CAAgCzB,OAAOE,WAAvC,CADD;AAGA;AAED;;AAED,OAAK2mB,SAASgyC,mBAAT,IACJhyC,SAASm2C,qBADL,IAEJn2C,SAAS+R,mBAFL,IAGJ/R,SAASiyC,sBAHL,IAIJjyC,SAAS2S,gBAJL,IAKJ3S,SAAS0R,QALV,EAKqB;;AAEpBqkC,eAAW/zB,QAAX,CAAqBoT,GAArB,EAA0B,YAA1B,EAAwCj8C,OAAOsnB,kBAA/C;AAEA;AAED;;AAED;AACA;AACA;;AAEA,MAAKT,SAAS0R,QAAd,EAAyB;;AAExBqkC,cAAW1uB,WAAX,CAAwB+N,GAAxB,EAA6BxzC,MAA7B,EAAqC,YAArC;AACAm0D,cAAW1uB,WAAX,CAAwB+N,GAAxB,EAA6BxzC,MAA7B,EAAqC,mBAArC;;AAEA,OAAIitC,WAAWjtC,OAAOitC,QAAtB;;AAEA,OAAKA,QAAL,EAAgB;;AAEf,QAAIC,QAAQD,SAASC,KAArB;;AAEA,QAAKjB,aAAa/P,mBAAlB,EAAwC;;AAEvC,SAAK+Q,SAASunB,WAAT,KAAyB3/E,SAA9B,EAA0C;;AAEzC;AACA;AACA;AACA;AACA;AACA;;;AAGA,UAAIgrB,OAAO/qB,KAAKmR,IAAL,CAAWinD,MAAM/2D,MAAN,GAAe,CAA1B,CAAX,CAVyC,CAUC;AAC1C0pB,aAAOrf,MAAMwC,cAAN,CAAsB6c,IAAtB,CAAP;AACAA,aAAO/qB,KAAKyM,GAAL,CAAUse,IAAV,EAAgB,CAAhB,CAAP;;AAEA,UAAI40D,eAAe,IAAI78C,YAAJ,CAAkB/X,OAAOA,IAAP,GAAc,CAAhC,CAAnB,CAdyC,CAce;AACxD40D,mBAAalxE,GAAb,CAAkB0pD,SAASwnB,YAA3B,EAfyC,CAeE;;AAE3C,UAAID,cAAc,IAAI/1D,WAAJ,CAAiBg2D,YAAjB,EAA+B50D,IAA/B,EAAqCA,IAArC,EAA2CxiB,UAA3C,EAAuDR,SAAvD,CAAlB;AACA23E,kBAAYpqC,WAAZ,GAA0B,IAA1B;;AAEA6iB,eAASwnB,YAAT,GAAwBA,YAAxB;AACAxnB,eAASunB,WAAT,GAAuBA,WAAvB;AACAvnB,eAASynB,eAAT,GAA2B70D,IAA3B;AAEA;;AAEDs0D,gBAAW/zB,QAAX,CAAqBoT,GAArB,EAA0B,aAA1B,EAAyCvG,SAASunB,WAAlD;AACAL,gBAAW/zB,QAAX,CAAqBoT,GAArB,EAA0B,iBAA1B,EAA6CvG,SAASynB,eAAtD;AAEA,KA/BD,MA+BO;;AAENP,gBAAW1uB,WAAX,CAAwB+N,GAAxB,EAA6BvG,QAA7B,EAAuC,cAAvC;AAEA;AAED;AAED;;AAED,MAAKgnB,eAAL,EAAuB;;AAEtBE,cAAW/zB,QAAX,CAAqBoT,GAArB,EAA0B,qBAA1B,EAAiDyY,MAAMF,mBAAvD;AACAoI,cAAW/zB,QAAX,CAAqBoT,GAArB,EAA0B,uBAA1B,EAAmDyY,MAAMD,qBAAzD;;AAEA,OAAK5tC,SAAS7K,MAAd,EAAuB;;AAEtB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEAohD,kCAA+BP,UAA/B,EAA2CF,aAA3C;AAEA;;AAED;;AAEA,OAAKhhD,OAAOkL,SAASlL,GAArB,EAA2B;;AAE1B0hD,uBAAoBR,UAApB,EAAgClhD,GAAhC;AAEA;;AAED,OAAKkL,SAAS+R,mBAAd,EAAoC;;AAEnC0kC,0BAAuBT,UAAvB,EAAmCh2C,QAAnC;AAEA,IAJD,MAIO,IAAKA,SAASm2C,qBAAd,EAAsC;;AAE5CM,0BAAuBT,UAAvB,EAAmCh2C,QAAnC;AACA02C,2BAAwBV,UAAxB,EAAoCh2C,QAApC;AAEA,IALM,MAKA,IAAKA,SAASgyC,mBAAd,EAAoC;;AAE1CyE,0BAAuBT,UAAvB,EAAmCh2C,QAAnC;;AAEA,QAAKA,SAAS22C,kBAAd,EAAmC;;AAElCC,yBAAqBZ,UAArB,EAAiCh2C,QAAjC;AAEA,KAJD,MAIO;;AAEN62C,0BAAsBb,UAAtB,EAAkCh2C,QAAlC;AAEA;AAED,IAdM,MAcA,IAAKA,SAASiyC,sBAAd,EAAuC;;AAE7CwE,0BAAuBT,UAAvB,EAAmCh2C,QAAnC;;AAEA,QAAKA,SAAS82C,sBAAd,EAAuC;;AAEtCC,6BAAyBf,UAAzB,EAAqCh2C,QAArC;AAEA,KAJD,MAIO;;AAENg3C,6BAAyBhB,UAAzB,EAAqCh2C,QAArC;AAEA;AAED,IAdM,MAcA,IAAKA,SAAS2zB,mBAAd,EAAoC;;AAE1C8iB,0BAAuBT,UAAvB,EAAmCh2C,QAAnC;AACAi3C,yBAAsBjB,UAAtB,EAAkCh2C,QAAlC;AAEA,IALM,MAKA,IAAKA,SAAS4zB,sBAAd,EAAuC;;AAE7C6iB,0BAAuBT,UAAvB,EAAmCh2C,QAAnC;AACAk3C,4BAAyBlB,UAAzB,EAAqCh2C,QAArC;AAEA,IALM,MAKA,IAAKA,SAASkyC,oBAAd,EAAqC;;AAE3CuE,0BAAuBT,UAAvB,EAAmCh2C,QAAnC;AACAm3C,0BAAuBnB,UAAvB,EAAmCh2C,QAAnC;AAEA,IALM,MAKA,IAAKA,SAASo3C,mBAAd,EAAoC;;AAE1CC,wBAAqBrB,UAArB,EAAiCh2C,QAAjC;;AAEA,QAAKA,SAASs3C,oBAAd,EAAqC;;AAEpCC,yBAAqBvB,UAArB,EAAiCh2C,QAAjC;AAEA;AAED,IAVM,MAUA,IAAKA,SAASw3C,gBAAd,EAAiC;;AAEvCC,0BAAuBzB,UAAvB,EAAmCh2C,QAAnC;AAEA,IAJM,MAIA,IAAKA,SAAS03C,gBAAd,EAAiC;;AAEvC1B,eAAW9kD,KAAX,CAAiBr6B,KAAjB,GAAyBmpC,SAAS9O,KAAlC;AACA8kD,eAAWtjD,OAAX,CAAmB77B,KAAnB,GAA2BmpC,SAAStN,OAApC;AAEA;;AAED;AACA;;AAEA,OAAKsjD,WAAW2B,KAAX,KAAqBlhF,SAA1B,EAAsCu/E,WAAW2B,KAAX,CAAiB9gF,KAAjB,GAAyB27B,YAAYolD,KAArC;AACtC,OAAK5B,WAAW6B,KAAX,KAAqBphF,SAA1B,EAAsCu/E,WAAW6B,KAAX,CAAiBhhF,KAAjB,GAAyB27B,YAAYslD,KAArC;;AAEtC9wB,iBAAcM,MAAd,CAAsB8N,GAAtB,EAA2BggB,mBAAmBM,YAA9C,EAA4DM,UAA5D,EAAwEnI,KAAxE;AAEA;;AAED,MAAK7tC,SAAS2S,gBAAT,IAA6B3S,SAAS0S,kBAAT,KAAgC,IAAlE,EAAyE;;AAExEsU,iBAAcM,MAAd,CAAsB8N,GAAtB,EAA2BggB,mBAAmBM,YAA9C,EAA4DM,UAA5D,EAAwEnI,KAAxE;AACA7tC,YAAS0S,kBAAT,GAA8B,KAA9B;AAEA;;AAED;;AAEAqjC,aAAW/zB,QAAX,CAAqBoT,GAArB,EAA0B,iBAA1B,EAA6CxzC,OAAO+a,eAApD;AACAo5C,aAAW/zB,QAAX,CAAqBoT,GAArB,EAA0B,cAA1B,EAA0CxzC,OAAO4E,YAAjD;AACAuvD,aAAW/zB,QAAX,CAAqBoT,GAArB,EAA0B,aAA1B,EAAyCxzC,OAAOvI,WAAhD;;AAEA,SAAOuoC,OAAP;AAEA;;AAED;;AAEA,UAAS60B,qBAAT,CAAgC7mD,QAAhC,EAA0CoQ,QAA1C,EAAqD;;AAEpDpQ,WAAS8C,OAAT,CAAiB77B,KAAjB,GAAyBmpC,SAAStN,OAAlC;;AAEA,MAAKsN,SAAS9O,KAAd,EAAsB;;AAErBtB,YAAS6C,OAAT,CAAiB57B,KAAjB,GAAyBmpC,SAAS9O,KAAlC;AAEA;;AAED,MAAK8O,SAAS/I,QAAd,EAAyB;;AAExBrH,YAASqH,QAAT,CAAkBpgC,KAAlB,CAAwBiP,IAAxB,CAA8Bk6B,SAAS/I,QAAvC,EAAkDnwB,cAAlD,CAAkEk5B,SAASkR,iBAA3E;AAEA;;AAED,MAAKlR,SAASrN,GAAd,EAAoB;;AAEnB/C,YAAS+C,GAAT,CAAa97B,KAAb,GAAqBmpC,SAASrN,GAA9B;AAEA;;AAED,MAAKqN,SAASnN,QAAd,EAAyB;;AAExBjD,YAASiD,QAAT,CAAkBh8B,KAAlB,GAA0BmpC,SAASnN,QAAnC;AAEA;;AAED,MAAKmN,SAASjN,WAAd,EAA4B;;AAE3BnD,YAASmD,WAAT,CAAqBl8B,KAArB,GAA6BmpC,SAASjN,WAAtC;AAEA;;AAED,MAAKiN,SAAS/M,MAAd,EAAuB;;AAEtBrD,YAASqD,MAAT,CAAgBp8B,KAAhB,GAAwBmpC,SAAS/M,MAAjC;;AAEA;AACA;AACA;AACA;AACArD,YAASsD,UAAT,CAAoBr8B,KAApB,GAA8B,EAAImpC,SAAS/M,MAAT,IAAmB+M,SAAS/M,MAAT,CAAgBgoB,aAAvC,CAAF,GAA6D,CAA7D,GAAiE,CAAE,CAA/F;;AAEArrB,YAASuD,YAAT,CAAsBt8B,KAAtB,GAA8BmpC,SAAS7M,YAAvC;AACAvD,YAASwD,eAAT,CAAyBv8B,KAAzB,GAAiCmpC,SAAS5M,eAA1C;;AAEAxD,YAASyD,WAAT,CAAqBx8B,KAArB,GAA6By+B,WAAWh+B,GAAX,CAAgB0oC,SAAS/M,MAAzB,EAAkCyuC,aAA/D;AAEA;;AAED,MAAK1hC,SAAStM,QAAd,EAAyB;;AAExB9D,YAAS8D,QAAT,CAAkB78B,KAAlB,GAA0BmpC,SAAStM,QAAnC;AACA9D,YAAS+D,iBAAT,CAA2B98B,KAA3B,GAAmCmpC,SAASrM,iBAA5C;AAEA;;AAED,MAAKqM,SAASzM,KAAd,EAAsB;;AAErB3D,YAAS2D,KAAT,CAAe18B,KAAf,GAAuBmpC,SAASzM,KAAhC;AACA3D,YAAS4D,cAAT,CAAwB38B,KAAxB,GAAgCmpC,SAASxM,cAAzC;AAEA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAIukD,UAAJ;;AAEA,MAAK/3C,SAASrN,GAAd,EAAoB;;AAEnBolD,gBAAa/3C,SAASrN,GAAtB;AAEA,GAJD,MAIO,IAAKqN,SAASjN,WAAd,EAA4B;;AAElCglD,gBAAa/3C,SAASjN,WAAtB;AAEA,GAJM,MAIA,IAAKiN,SAAS3L,eAAd,EAAgC;;AAEtC0jD,gBAAa/3C,SAAS3L,eAAtB;AAEA,GAJM,MAIA,IAAK2L,SAAS9L,SAAd,EAA0B;;AAEhC6jD,gBAAa/3C,SAAS9L,SAAtB;AAEA,GAJM,MAIA,IAAK8L,SAASjM,OAAd,EAAwB;;AAE9BgkD,gBAAa/3C,SAASjM,OAAtB;AAEA,GAJM,MAIA,IAAKiM,SAASvL,YAAd,EAA6B;;AAEnCsjD,gBAAa/3C,SAASvL,YAAtB;AAEA,GAJM,MAIA,IAAKuL,SAASrL,YAAd,EAA6B;;AAEnCojD,gBAAa/3C,SAASrL,YAAtB;AAEA,GAJM,MAIA,IAAKqL,SAASnN,QAAd,EAAyB;;AAE/BklD,gBAAa/3C,SAASnN,QAAtB;AAEA,GAJM,MAIA,IAAKmN,SAASnM,WAAd,EAA4B;;AAElCkkD,gBAAa/3C,SAASnM,WAAtB;AAEA;;AAED,MAAKkkD,eAAethF,SAApB,EAAgC;;AAE/B;AACA,OAAKshF,WAAWh4D,mBAAhB,EAAsC;;AAErCg4D,iBAAaA,WAAWp4D,OAAxB;AAEA;;AAED,OAAKo4D,WAAWp7D,gBAAX,KAAgC,IAArC,EAA4C;;AAE3Co7D,eAAW36D,YAAX;AAEA;;AAEDwS,YAASgD,WAAT,CAAqB/7B,KAArB,CAA2BiP,IAA3B,CAAiCiyE,WAAWjlE,MAA5C;AAEA;AAED;;AAED,UAASukE,mBAAT,CAA8BznD,QAA9B,EAAwCoQ,QAAxC,EAAmD;;AAElDpQ,WAAS6C,OAAT,CAAiB57B,KAAjB,GAAyBmpC,SAAS9O,KAAlC;AACAtB,WAAS8C,OAAT,CAAiB77B,KAAjB,GAAyBmpC,SAAStN,OAAlC;AAEA;;AAED,UAAS6kD,mBAAT,CAA8B3nD,QAA9B,EAAwCoQ,QAAxC,EAAmD;;AAElDpQ,WAAS8H,QAAT,CAAkB7gC,KAAlB,GAA0BmpC,SAAStI,QAAnC;AACA9H,WAAS+H,SAAT,CAAmB9gC,KAAnB,GAA2BmpC,SAAStI,QAAT,GAAoBsI,SAASqR,OAAxD;AACAzhB,WAASne,KAAT,CAAe5a,KAAf,GAAuBmpC,SAASvuB,KAAhC;AAEA;;AAED,UAASgmE,qBAAT,CAAgC7nD,QAAhC,EAA0CoQ,QAA1C,EAAqD;;AAEpDpQ,WAAS6C,OAAT,CAAiB57B,KAAjB,GAAyBmpC,SAAS9O,KAAlC;AACAtB,WAAS8C,OAAT,CAAiB77B,KAAjB,GAAyBmpC,SAAStN,OAAlC;AACA9C,WAASnO,IAAT,CAAc5qB,KAAd,GAAsBmpC,SAASve,IAAT,GAAgBktD,WAAtC;AACA/+C,WAASne,KAAT,CAAe5a,KAAf,GAAuB63E,UAAU,GAAjC;;AAEA9+C,WAAS+C,GAAT,CAAa97B,KAAb,GAAqBmpC,SAASrN,GAA9B;;AAEA,MAAKqN,SAASrN,GAAT,KAAiB,IAAtB,EAA6B;;AAE5B,OAAKqN,SAASrN,GAAT,CAAahW,gBAAb,KAAkC,IAAvC,EAA8C;;AAE7CqjB,aAASrN,GAAT,CAAavV,YAAb;AAEA;;AAEDwS,YAASgD,WAAT,CAAqB/7B,KAArB,CAA2BiP,IAA3B,CAAiCk6B,SAASrN,GAAT,CAAa7f,MAA9C;AAEA;AAED;;AAED,UAAS0jE,kBAAT,CAA6B5mD,QAA7B,EAAuCkF,GAAvC,EAA6C;;AAE5ClF,WAASsF,QAAT,CAAkBr+B,KAAlB,GAA0Bi+B,IAAI5D,KAA9B;;AAEA,MAAK4D,IAAI0jC,KAAT,EAAiB;;AAEhB5oC,YAASoF,OAAT,CAAiBn+B,KAAjB,GAAyBi+B,IAAInhB,IAA7B;AACAic,YAASqF,MAAT,CAAgBp+B,KAAhB,GAAwBi+B,IAAIlhB,GAA5B;AAEA,GALD,MAKO,IAAKkhB,IAAIg7B,SAAT,EAAqB;;AAE3BlgC,YAASmF,UAAT,CAAoBl+B,KAApB,GAA4Bi+B,IAAI2jC,OAAhC;AAEA;AAED;;AAED,UAASie,sBAAT,CAAiC9mD,QAAjC,EAA2CoQ,QAA3C,EAAsD;;AAErD,MAAKA,SAASnM,WAAd,EAA4B;;AAE3BjE,YAASiE,WAAT,CAAqBh9B,KAArB,GAA6BmpC,SAASnM,WAAtC;AAEA;AAED;;AAED,UAASgjD,oBAAT,CAA+BjnD,QAA/B,EAAyCoQ,QAAzC,EAAoD;;AAEnDpQ,WAASuH,QAAT,CAAkBtgC,KAAlB,GAA0BmpC,SAAS7I,QAAnC;AACAvH,WAASwH,SAAT,CAAmBvgC,KAAnB,GAA2BH,KAAKyM,GAAL,CAAU68B,SAAS5I,SAAnB,EAA8B,IAA9B,CAA3B,CAHmD,CAGc;;AAEjE,MAAK4I,SAASnM,WAAd,EAA4B;;AAE3BjE,YAASiE,WAAT,CAAqBh9B,KAArB,GAA6BmpC,SAASnM,WAAtC;AAEA;;AAED,MAAKmM,SAASjM,OAAd,EAAwB;;AAEvBnE,YAASmE,OAAT,CAAiBl9B,KAAjB,GAAyBmpC,SAASjM,OAAlC;AACAnE,YAASoE,SAAT,CAAmBn9B,KAAnB,GAA2BmpC,SAAShM,SAApC;AAEA;;AAED,MAAKgM,SAAS9L,SAAd,EAA0B;;AAEzBtE,YAASsE,SAAT,CAAmBr9B,KAAnB,GAA2BmpC,SAAS9L,SAApC;AACAtE,YAASuE,WAAT,CAAqBt9B,KAArB,CAA2BiP,IAA3B,CAAiCk6B,SAAS7L,WAA1C;AAEA;;AAED,MAAK6L,SAAS3L,eAAd,EAAgC;;AAE/BzE,YAASyE,eAAT,CAAyBx9B,KAAzB,GAAiCmpC,SAAS3L,eAA1C;AACAzE,YAAS0E,iBAAT,CAA2Bz9B,KAA3B,GAAmCmpC,SAAS1L,iBAA5C;AACA1E,YAAS2E,gBAAT,CAA0B19B,KAA1B,GAAkCmpC,SAASzL,gBAA3C;AAEA;AAED;;AAED,UAASqiD,mBAAT,CAA8BhnD,QAA9B,EAAwCoQ,QAAxC,EAAmD;;AAElD62C,uBAAsBjnD,QAAtB,EAAgCoQ,QAAhC;;AAEA,MAAKA,SAASnL,WAAd,EAA4B;;AAE3BjF,YAASiF,WAAT,CAAqBh+B,KAArB,GAA6BmpC,SAASnL,WAAtC;AAEA;AAED;;AAED,UAASmiD,uBAAT,CAAkCpnD,QAAlC,EAA4CoQ,QAA5C,EAAuD;;AAEtDpQ,WAAS0H,SAAT,CAAmBzgC,KAAnB,GAA2BmpC,SAAS1I,SAApC;AACA1H,WAAS2H,SAAT,CAAmB1gC,KAAnB,GAA2BmpC,SAASzI,SAApC;;AAEA,MAAKyI,SAASvL,YAAd,EAA6B;;AAE5B7E,YAAS6E,YAAT,CAAsB59B,KAAtB,GAA8BmpC,SAASvL,YAAvC;AAEA;;AAED,MAAKuL,SAASrL,YAAd,EAA6B;;AAE5B/E,YAAS+E,YAAT,CAAsB99B,KAAtB,GAA8BmpC,SAASrL,YAAvC;AAEA;;AAED,MAAKqL,SAASnM,WAAd,EAA4B;;AAE3BjE,YAASiE,WAAT,CAAqBh9B,KAArB,GAA6BmpC,SAASnM,WAAtC;AAEA;;AAED,MAAKmM,SAASjM,OAAd,EAAwB;;AAEvBnE,YAASmE,OAAT,CAAiBl9B,KAAjB,GAAyBmpC,SAASjM,OAAlC;AACAnE,YAASoE,SAAT,CAAmBn9B,KAAnB,GAA2BmpC,SAAShM,SAApC;AAEA;;AAED,MAAKgM,SAAS9L,SAAd,EAA0B;;AAEzBtE,YAASsE,SAAT,CAAmBr9B,KAAnB,GAA2BmpC,SAAS9L,SAApC;AACAtE,YAASuE,WAAT,CAAqBt9B,KAArB,CAA2BiP,IAA3B,CAAiCk6B,SAAS7L,WAA1C;AAEA;;AAED,MAAK6L,SAAS3L,eAAd,EAAgC;;AAE/BzE,YAASyE,eAAT,CAAyBx9B,KAAzB,GAAiCmpC,SAAS3L,eAA1C;AACAzE,YAAS0E,iBAAT,CAA2Bz9B,KAA3B,GAAmCmpC,SAAS1L,iBAA5C;AACA1E,YAAS2E,gBAAT,CAA0B19B,KAA1B,GAAkCmpC,SAASzL,gBAA3C;AAEA;;AAED,MAAKyL,SAAS/M,MAAd,EAAuB;;AAEtB;AACArD,YAAS4H,eAAT,CAAyB3gC,KAAzB,GAAiCmpC,SAASxI,eAA1C;AAEA;AAED;;AAED,UAASu/C,uBAAT,CAAkCnnD,QAAlC,EAA4CoQ,QAA5C,EAAuD;;AAEtDpQ,WAAS2I,SAAT,CAAmB1hC,KAAnB,GAA2BmpC,SAASzH,SAApC;AACA3I,WAAS4I,kBAAT,CAA4B3hC,KAA5B,GAAoCmpC,SAASxH,kBAA7C;;AAEAw+C,0BAAyBpnD,QAAzB,EAAmCoQ,QAAnC;AAEA;;AAED,UAASi3C,oBAAT,CAA+BrnD,QAA/B,EAAyCoQ,QAAzC,EAAoD;;AAEnD,MAAKA,SAAS3L,eAAd,EAAgC;;AAE/BzE,YAASyE,eAAT,CAAyBx9B,KAAzB,GAAiCmpC,SAAS3L,eAA1C;AACAzE,YAAS0E,iBAAT,CAA2Bz9B,KAA3B,GAAmCmpC,SAAS1L,iBAA5C;AACA1E,YAAS2E,gBAAT,CAA0B19B,KAA1B,GAAkCmpC,SAASzL,gBAA3C;AAEA;AAED;;AAED,UAAS2iD,uBAAT,CAAkCtnD,QAAlC,EAA4CoQ,QAA5C,EAAuD;;AAEtD,MAAKA,SAAS3L,eAAd,EAAgC;;AAE/BzE,YAASyE,eAAT,CAAyBx9B,KAAzB,GAAiCmpC,SAAS3L,eAA1C;AACAzE,YAAS0E,iBAAT,CAA2Bz9B,KAA3B,GAAmCmpC,SAAS1L,iBAA5C;AACA1E,YAAS2E,gBAAT,CAA0B19B,KAA1B,GAAkCmpC,SAASzL,gBAA3C;AAEA;;AAED3E,WAASuI,iBAAT,CAA2BthC,KAA3B,CAAiCiP,IAAjC,CAAuCk6B,SAAS7H,iBAAhD;AACAvI,WAASwI,YAAT,CAAsBvhC,KAAtB,GAA8BmpC,SAAS5H,YAAvC;AACAxI,WAASyI,WAAT,CAAqBxhC,KAArB,GAA6BmpC,SAAS3H,WAAtC;AAEA;;AAED,UAAS8+C,qBAAT,CAAgCvnD,QAAhC,EAA0CoQ,QAA1C,EAAqD;;AAEpD,MAAKA,SAASjM,OAAd,EAAwB;;AAEvBnE,YAASmE,OAAT,CAAiBl9B,KAAjB,GAAyBmpC,SAASjM,OAAlC;AACAnE,YAASoE,SAAT,CAAmBn9B,KAAnB,GAA2BmpC,SAAShM,SAApC;AAEA;;AAED,MAAKgM,SAAS9L,SAAd,EAA0B;;AAEzBtE,YAASsE,SAAT,CAAmBr9B,KAAnB,GAA2BmpC,SAAS9L,SAApC;AACAtE,YAASuE,WAAT,CAAqBt9B,KAArB,CAA2BiP,IAA3B,CAAiCk6B,SAAS7L,WAA1C;AAEA;;AAED,MAAK6L,SAAS3L,eAAd,EAAgC;;AAE/BzE,YAASyE,eAAT,CAAyBx9B,KAAzB,GAAiCmpC,SAAS3L,eAA1C;AACAzE,YAAS0E,iBAAT,CAA2Bz9B,KAA3B,GAAmCmpC,SAAS1L,iBAA5C;AACA1E,YAAS2E,gBAAT,CAA0B19B,KAA1B,GAAkCmpC,SAASzL,gBAA3C;AAEA;AAED;;AAED;;AAEA,UAASgiD,6BAAT,CAAwC3mD,QAAxC,EAAkD/4B,KAAlD,EAA0D;;AAEzD+4B,WAASwF,iBAAT,CAA2B4W,WAA3B,GAAyCn1C,KAAzC;;AAEA+4B,WAASyF,iBAAT,CAA2B2W,WAA3B,GAAyCn1C,KAAzC;AACA+4B,WAASuG,WAAT,CAAqB6V,WAArB,GAAmCn1C,KAAnC;AACA+4B,WAASiG,UAAT,CAAoBmW,WAApB,GAAkCn1C,KAAlC;AACA+4B,WAAS+G,cAAT,CAAwBqV,WAAxB,GAAsCn1C,KAAtC;AACA+4B,WAAS4G,gBAAT,CAA0BwV,WAA1B,GAAwCn1C,KAAxC;AAEA;;AAED;;AAEA,UAASosD,gBAAT,GAA4B;;AAE3B,MAAI+0B,cAAcxJ,iBAAlB;;AAEA,MAAKwJ,eAAenqB,aAAajR,WAAjC,EAA+C;;AAE9C12C,WAAQC,IAAR,CAAc,wCAAwC6xE,WAAxC,GAAsD,8CAAtD,GAAuGnqB,aAAajR,WAAlI;AAEA;;AAED4xB,uBAAqB,CAArB;;AAEA,SAAOwJ,WAAP;AAEA;;AAED,MAAK/0B,gBAAL,GAAwBA,gBAAxB;;AAEA;AACA,MAAKuB,YAAL,GAAsB,YAAY;;AAEjC,MAAIyzB,SAAS,KAAb;;AAEA;AACA,SAAO,SAASzzB,YAAT,CAAuB7kC,OAAvB,EAAgCkjD,IAAhC,EAAuC;;AAE7C,OAAKljD,WAAWA,QAAQI,mBAAxB,EAA8C;;AAE7C,QAAK,CAAEk4D,MAAP,EAAgB;;AAEf/xE,aAAQC,IAAR,CAAc,8GAAd;AACA8xE,cAAS,IAAT;AAEA;;AAEDt4D,cAAUA,QAAQA,OAAlB;AAEA;;AAEDnC,YAASgnC,YAAT,CAAuB7kC,OAAvB,EAAgCkjD,IAAhC;AAEA,GAjBD;AAmBA,EAxBqB,EAAtB;;AA0BA,MAAKqV,UAAL,GAAoB,YAAY;;AAE/B,MAAID,SAAS,KAAb;;AAEA,SAAO,SAASC,UAAT,CAAqBv4D,OAArB,EAA8BkjD,IAA9B,EAAqC;;AAE3C,OAAK,CAAEoV,MAAP,EAAgB;;AAEf/xE,YAAQC,IAAR,CAAc,2EAAd;AACA8xE,aAAS,IAAT;AAEA;;AAEDz6D,YAASgnC,YAAT,CAAuB7kC,OAAvB,EAAgCkjD,IAAhC;AAEA,GAXD;AAaA,EAjBmB,EAApB;;AAmBA,MAAKne,cAAL,GAAwB,YAAY;;AAEnC,MAAIuzB,SAAS,KAAb;;AAEA,SAAO,SAASvzB,cAAT,CAAyB/kC,OAAzB,EAAkCkjD,IAAlC,EAAyC;;AAE/C;AACA,OAAKljD,WAAWA,QAAQS,uBAAxB,EAAkD;;AAEjD,QAAK,CAAE63D,MAAP,EAAgB;;AAEf/xE,aAAQC,IAAR,CAAc,qHAAd;AACA8xE,cAAS,IAAT;AAEA;;AAEDt4D,cAAUA,QAAQA,OAAlB;AAEA;;AAED;AACA;AACA,OAAOA,WAAWA,QAAQs7B,aAArB,IACF9qB,MAAMC,OAAN,CAAezQ,QAAQ9D,KAAvB,KAAkC8D,QAAQ9D,KAAR,CAAc9jB,MAAd,KAAyB,CAD9D,EACoE;;AAEnE;;AAEA;AACAylB,aAASknC,cAAT,CAAyB/kC,OAAzB,EAAkCkjD,IAAlC;AAEA,IARD,MAQO;;AAEN;;AAEArlD,aAASomD,qBAAT,CAAgCjkD,OAAhC,EAAyCkjD,IAAzC;AAEA;AAED,GAlCD;AAoCA,EAxCuB,EAAxB;;AA0CA,MAAKnT,eAAL,GAAuB,YAAY;;AAElC,SAAOqe,oBAAP;AAEA,EAJD;;AAMA,MAAK/X,eAAL,GAAuB,UAAWkM,YAAX,EAA0B;;AAEhD6L,yBAAuB7L,YAAvB;;AAEA,MAAKA,gBAAgB5sC,WAAWh+B,GAAX,CAAgB4qE,YAAhB,EAA+BQ,kBAA/B,KAAsDjsE,SAA3E,EAAuF;;AAEtF+mB,YAASyoD,iBAAT,CAA4B/D,YAA5B;AAEA;;AAED,MAAI2C,cAAc,IAAlB;AACA,MAAIgB,SAAS,KAAb;;AAEA,MAAK3D,YAAL,EAAoB;;AAEnB,OAAIQ,qBAAqBptC,WAAWh+B,GAAX,CAAgB4qE,YAAhB,EAA+BQ,kBAAxD;;AAEA,OAAKR,aAAa9hD,uBAAlB,EAA4C;;AAE3CykD,kBAAcnC,mBAAoBR,aAAahiD,cAAjC,CAAd;AACA2lD,aAAS,IAAT;AAEA,IALD,MAKO;;AAENhB,kBAAcnC,kBAAd;AAEA;;AAED2L,oBAAiBvoE,IAAjB,CAAuBo8D,aAAaxiD,QAApC;AACA4uD,mBAAgBxoE,IAAhB,CAAsBo8D,aAAa1iD,OAAnC;AACA+uD,yBAAsBrM,aAAaziD,WAAnC;AAEA,GAnBD,MAmBO;;AAEN4uD,oBAAiBvoE,IAAjB,CAAuB8oE,SAAvB,EAAmC9nE,cAAnC,CAAmD6nE,WAAnD;AACAL,mBAAgBxoE,IAAhB,CAAsB+oE,QAAtB,EAAiC/nE,cAAjC,CAAiD6nE,WAAjD;AACAJ,yBAAsBO,YAAtB;AAEA;;AAED,MAAKd,wBAAwBnJ,WAA7B,EAA2C;;AAE1CzP,OAAI4P,eAAJ,CAAqB5P,IAAI6P,WAAzB,EAAsCJ,WAAtC;AACAmJ,yBAAsBnJ,WAAtB;AAEA;;AAED7qB,QAAMt6B,QAAN,CAAgB2uD,gBAAhB;AACAr0B,QAAMx6B,OAAN,CAAe8uD,eAAf;AACAt0B,QAAMwb,cAAN,CAAsB+Y,mBAAtB;;AAEA,MAAK1I,MAAL,EAAc;;AAEb,OAAIpE,oBAAoBnsC,WAAWh+B,GAAX,CAAgB4qE,aAAaviD,OAA7B,CAAxB;AACAy1C,OAAI8P,oBAAJ,CAA0B9P,IAAI6P,WAA9B,EAA2C7P,IAAIgR,iBAA/C,EAAkEhR,IAAI6I,2BAAJ,GAAkCiE,aAAahiD,cAAjH,EAAiIuhD,kBAAkBc,cAAnJ,EAAmKL,aAAa/hD,iBAAhL;AAEA;AAED,EA1DD;;AA4DA,MAAKg4D,sBAAL,GAA8B,UAAWjW,YAAX,EAAyBjrE,CAAzB,EAA4B4M,CAA5B,EAA+Bia,KAA/B,EAAsCC,MAAtC,EAA8Cob,MAA9C,EAAuD;;AAEpF,MAAK,EAAI+oC,gBAAgBA,aAAaniD,mBAAjC,CAAL,EAA8D;;AAE7D7Z,WAAQyD,KAAR,CAAe,0FAAf;AACA;AAEA;;AAED,MAAIk7D,cAAcvvC,WAAWh+B,GAAX,CAAgB4qE,YAAhB,EAA+BQ,kBAAjD;;AAEA,MAAKmC,WAAL,EAAmB;;AAElB,OAAIuT,UAAU,KAAd;;AAEA,OAAKvT,gBAAgBmJ,mBAArB,EAA2C;;AAE1C5Y,QAAI4P,eAAJ,CAAqB5P,IAAI6P,WAAzB,EAAsCJ,WAAtC;;AAEAuT,cAAU,IAAV;AAEA;;AAED,OAAI;;AAEH,QAAIz4D,UAAUuiD,aAAaviD,OAA3B;AACA,QAAI04D,gBAAgB14D,QAAQxD,MAA5B;AACA,QAAI0nD,cAAclkD,QAAQrnB,IAA1B;;AAEA,QAAK+/E,kBAAkBp5E,UAAlB,IAAgC45D,MAAMyG,OAAN,CAAe+Y,aAAf,MAAmCjjB,IAAIpyC,YAAJ,CAAkBoyC,IAAIkjB,gCAAtB,CAAxE,EAAmI;;AAElIpyE,aAAQyD,KAAR,CAAe,2GAAf;AACA;AAEA;;AAED,QAAKk6D,gBAAgB1lE,gBAAhB,IAAoC06D,MAAMyG,OAAN,CAAeuE,WAAf,MAAiCzO,IAAIpyC,YAAJ,CAAkBoyC,IAAImjB,8BAAtB,CAArE,IAA+H;AACnI,MAAI1U,gBAAgBplE,SAAhB,KAA+B0zC,WAAW76C,GAAX,CAAgB,mBAAhB,KAAyC66C,WAAW76C,GAAX,CAAgB,0BAAhB,CAAxE,CAAJ,CADI,IAC4H;AAChI,MAAIusE,gBAAgBnlE,aAAhB,IAAiCyzC,WAAW76C,GAAX,CAAgB,6BAAhB,CAArC,CAFD,EAE0F;;AAEzF4O,aAAQyD,KAAR,CAAe,qHAAf;AACA;AAEA;;AAED,QAAKyrD,IAAIojB,sBAAJ,CAA4BpjB,IAAI6P,WAAhC,MAAkD7P,IAAIqjB,oBAA3D,EAAkF;;AAEjF;;AAEA,SAAOxhF,KAAK,CAAL,IAAUA,KAAOirE,aAAapkD,KAAb,GAAqBA,KAAxC,IAAuDja,KAAK,CAAL,IAAUA,KAAOq+D,aAAankD,MAAb,GAAsBA,MAAnG,EAAgH;;AAE/Gq3C,UAAIsjB,UAAJ,CAAgBzhF,CAAhB,EAAmB4M,CAAnB,EAAsBia,KAAtB,EAA6BC,MAA7B,EAAqC86C,MAAMyG,OAAN,CAAe+Y,aAAf,CAArC,EAAqExf,MAAMyG,OAAN,CAAeuE,WAAf,CAArE,EAAmG1qC,MAAnG;AAEA;AAED,KAVD,MAUO;;AAENjzB,aAAQyD,KAAR,CAAe,4GAAf;AAEA;AAED,IAtCD,SAsCU;;AAET,QAAKyuE,OAAL,EAAe;;AAEdhjB,SAAI4P,eAAJ,CAAqB5P,IAAI6P,WAAzB,EAAsC+I,mBAAtC;AAEA;AAED;AAED;AAED,EAzED;;AA2EA,MAAK2K,wBAAL,GAAgC,UAAWjmE,QAAX,EAAqBiN,OAArB,EAA8Bi5D,KAA9B,EAAsC;;AAErE,MAAI96D,QAAQ6B,QAAQ9D,KAAR,CAAciC,KAA1B;AACA,MAAIC,SAAS4B,QAAQ9D,KAAR,CAAckC,MAA3B;AACA,MAAIylD,WAAW3K,MAAMyG,OAAN,CAAe3/C,QAAQxD,MAAvB,CAAf;;AAEA,OAAKqoC,YAAL,CAAmB7kC,OAAnB,EAA4B,CAA5B;;AAEAy1C,MAAIyjB,cAAJ,CAAoBzjB,IAAI2I,UAAxB,EAAoC6a,SAAS,CAA7C,EAAgDpV,QAAhD,EAA0D9wD,SAASzb,CAAnE,EAAsEyb,SAAS7O,CAA/E,EAAkFia,KAAlF,EAAyFC,MAAzF,EAAiG,CAAjG;AAEA,EAVD;;AAYA,MAAK+6D,oBAAL,GAA4B,UAAWpmE,QAAX,EAAqBqmE,UAArB,EAAiCC,UAAjC,EAA6CJ,KAA7C,EAAqD;;AAEhF,MAAI96D,QAAQi7D,WAAWl9D,KAAX,CAAiBiC,KAA7B;AACA,MAAIC,SAASg7D,WAAWl9D,KAAX,CAAiBkC,MAA9B;AACA,MAAIylD,WAAW3K,MAAMyG,OAAN,CAAe0Z,WAAW78D,MAA1B,CAAf;AACA,MAAIsnD,SAAS5K,MAAMyG,OAAN,CAAe0Z,WAAW1gF,IAA1B,CAAb;AACA,MAAI2gF,SAASF,WAAWx4D,aAAX,GAA2Bw4D,WAAWl9D,KAAX,CAAiByE,IAA5C,GAAmDy4D,WAAWl9D,KAA3E;;AAEA,OAAK2oC,YAAL,CAAmBw0B,UAAnB,EAA+B,CAA/B;;AAEA5jB,MAAI8jB,aAAJ,CAAmB9jB,IAAI2I,UAAvB,EAAmC6a,SAAS,CAA5C,EAA+ClmE,SAASzb,CAAxD,EAA2Dyb,SAAS7O,CAApE,EAAuEia,KAAvE,EAA8EC,MAA9E,EAAsFylD,QAAtF,EAAgGC,MAAhG,EAAwGwV,MAAxG;AAEA,EAZD;AAcA;;AAED;;;;;AAKA,SAASE,OAAT,CAAkBjoD,KAAlB,EAAyBunC,OAAzB,EAAmC;;AAElC,MAAKn8C,IAAL,GAAY,EAAZ;;AAEA,MAAK4U,KAAL,GAAa,IAAIZ,KAAJ,CAAWY,KAAX,CAAb;AACA,MAAKunC,OAAL,GAAiBA,YAAYhiE,SAAd,GAA4BgiE,OAA5B,GAAsC,OAArD;AAEA;;AAED0gB,QAAQhiF,SAAR,CAAkB24D,SAAlB,GAA8B,IAA9B;;AAEAqpB,QAAQhiF,SAAR,CAAkByO,KAAlB,GAA0B,YAAY;;AAErC,QAAO,IAAIuzE,OAAJ,CAAa,KAAKjoD,KAAL,CAAWU,MAAX,EAAb,EAAkC,KAAK6mC,OAAvC,CAAP;AAEA,CAJD;;AAMA0gB,QAAQhiF,SAAR,CAAkBkmB,MAAlB,GAA2B,YAAW,UAAa;;AAElD,QAAO;AACN/kB,QAAM,SADA;AAEN44B,SAAO,KAAKA,KAAL,CAAWU,MAAX,EAFD;AAGN6mC,WAAS,KAAKA;AAHR,EAAP;AAMA,CARD;;AAUA;;;;;AAKA,SAAS2gB,GAAT,CAAcloD,KAAd,EAAqBvd,IAArB,EAA2BC,GAA3B,EAAiC;;AAEhC,MAAK0I,IAAL,GAAY,EAAZ;;AAEA,MAAK4U,KAAL,GAAa,IAAIZ,KAAJ,CAAWY,KAAX,CAAb;;AAEA,MAAKvd,IAAL,GAAcA,SAASld,SAAX,GAAyBkd,IAAzB,GAAgC,CAA5C;AACA,MAAKC,GAAL,GAAaA,QAAQnd,SAAV,GAAwBmd,GAAxB,GAA8B,IAAzC;AAEA;;AAEDwlE,IAAIjiF,SAAJ,CAAcqhE,KAAd,GAAsB,IAAtB;;AAEA4gB,IAAIjiF,SAAJ,CAAcyO,KAAd,GAAsB,YAAY;;AAEjC,QAAO,IAAIwzE,GAAJ,CAAS,KAAKloD,KAAL,CAAWU,MAAX,EAAT,EAA8B,KAAKje,IAAnC,EAAyC,KAAKC,GAA9C,CAAP;AAEA,CAJD;;AAMAwlE,IAAIjiF,SAAJ,CAAckmB,MAAd,GAAuB,YAAW,UAAa;;AAE9C,QAAO;AACN/kB,QAAM,KADA;AAEN44B,SAAO,KAAKA,KAAL,CAAWU,MAAX,EAFD;AAGNje,QAAM,KAAKA,IAHL;AAINC,OAAK,KAAKA;AAJJ,EAAP;AAOA,CATD;;AAWA;;;;AAIA,SAASylE,KAAT,GAAiB;;AAEhBj9C,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,OAAZ;;AAEA,MAAKoiD,UAAL,GAAkB,IAAlB;AACA,MAAK5lB,GAAL,GAAW,IAAX;AACA,MAAKigD,gBAAL,GAAwB,IAAxB;;AAEA,MAAK5f,UAAL,GAAkB,IAAlB,CAVgB,CAUQ;AAExB;;AAEDkkB,MAAMliF,SAAN,GAAkBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAErE0O,cAAawzE,KAFwD;;AAIrEvzE,OAAM,UAAW9N,MAAX,EAAmBsoC,SAAnB,EAA+B;;AAEpClE,WAASjlC,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC,EAA4CsoC,SAA5C;;AAEA,MAAKtoC,OAAO0iD,UAAP,KAAsB,IAA3B,EAAkC,KAAKA,UAAL,GAAkB1iD,OAAO0iD,UAAP,CAAkB90C,KAAlB,EAAlB;AAClC,MAAK5N,OAAO88B,GAAP,KAAe,IAApB,EAA2B,KAAKA,GAAL,GAAW98B,OAAO88B,GAAP,CAAWlvB,KAAX,EAAX;AAC3B,MAAK5N,OAAO+8E,gBAAP,KAA4B,IAAjC,EAAwC,KAAKA,gBAAL,GAAwB/8E,OAAO+8E,gBAAP,CAAwBnvE,KAAxB,EAAxB;;AAExC,OAAKuvD,UAAL,GAAkBn9D,OAAOm9D,UAAzB;AACA,OAAKx4C,gBAAL,GAAwB3kB,OAAO2kB,gBAA/B;;AAEA,SAAO,IAAP;AAEA,EAjBoE;;AAmBrEU,SAAQ,UAAWC,IAAX,EAAkB;;AAEzB,MAAIgD,OAAO8b,SAASjlC,SAAT,CAAmBkmB,MAAnB,CAA0BllB,IAA1B,CAAgC,IAAhC,EAAsCmlB,IAAtC,CAAX;;AAEA,MAAK,KAAKo9B,UAAL,KAAoB,IAAzB,EAAgCp6B,KAAKsB,MAAL,CAAY84B,UAAZ,GAAyB,KAAKA,UAAL,CAAgBr9B,MAAhB,CAAwBC,IAAxB,CAAzB;AAChC,MAAK,KAAKwX,GAAL,KAAa,IAAlB,EAAyBxU,KAAKsB,MAAL,CAAYkT,GAAZ,GAAkB,KAAKA,GAAL,CAASzX,MAAT,EAAlB;;AAEzB,SAAOiD,IAAP;AAEA;;AA5BoE,CAApD,CAAlB;;AAgCA;;;;;;;;;;;;;AAaA,SAASg5D,cAAT,CAAyBx5C,UAAzB,EAAsC;;AAErCoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,gBAAZ;;AAEA,MAAK44B,KAAL,GAAa,IAAIZ,KAAJ,CAAW,QAAX,CAAb;AACA,MAAKqC,GAAL,GAAW,IAAX;;AAEA,MAAKrX,QAAL,GAAgB,CAAhB;;AAEA,MAAKwZ,GAAL,GAAW,KAAX;AACA,MAAKK,MAAL,GAAc,KAAd;;AAEA,MAAK2b,SAAL,CAAgBhR,UAAhB;AAEA;;AAEDw5C,eAAeniF,SAAf,GAA2BC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAA3B;AACAmiF,eAAeniF,SAAf,CAAyB0O,WAAzB,GAAuCyzE,cAAvC;AACAA,eAAeniF,SAAf,CAAyBoiF,gBAAzB,GAA4C,IAA5C;;AAEAD,eAAeniF,SAAf,CAAyB2O,IAAzB,GAAgC,UAAW9N,MAAX,EAAoB;;AAEnDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAKk5B,KAAL,CAAWprB,IAAX,CAAiB9N,OAAOk5B,KAAxB;AACA,MAAKyB,GAAL,GAAW36B,OAAO26B,GAAlB;;AAEA,MAAKrX,QAAL,GAAgBtjB,OAAOsjB,QAAvB;;AAEA,QAAO,IAAP;AAEA,CAXD;;AAaA;;;;;AAKA,SAASk+D,MAAT,CAAiBx5C,QAAjB,EAA4B;;AAE3B5D,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,QAAZ;;AAEA,MAAK0nC,QAAL,GAAkBA,aAAavpC,SAAf,GAA6BupC,QAA7B,GAAwC,IAAIs5C,cAAJ,EAAxD;;AAEA,MAAKhwE,MAAL,GAAc,IAAIrE,OAAJ,CAAa,GAAb,EAAkB,GAAlB,CAAd;AAEA;;AAEDu0E,OAAOriF,SAAP,GAAmBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAEtE0O,cAAa2zE,MAFyD;;AAItEvE,WAAU,IAJ4D;;AAMtE/1C,UAAW,YAAY;;AAEtB,MAAIu6C,iBAAiB,IAAIhuE,OAAJ,EAArB;AACA,MAAIiuE,gBAAgB,IAAIjuE,OAAJ,EAApB;AACA,MAAIkuE,aAAa,IAAIluE,OAAJ,EAAjB;;AAEA,SAAO,SAASyzB,OAAT,CAAkB6Z,SAAlB,EAA6BI,UAA7B,EAA0C;;AAEhDugC,iBAAc9+D,qBAAd,CAAqC,KAAKvB,WAA1C;AACA0/B,aAAUjG,GAAV,CAAcG,mBAAd,CAAmCymC,aAAnC,EAAkDD,cAAlD;;AAEAE,cAAW9+D,kBAAX,CAA+B,KAAKxB,WAApC;AACA,OAAIugE,cAAcD,WAAW1iF,CAAX,GAAe0iF,WAAW91E,CAA1B,GAA8B,CAAhD;;AAEA,OAAK61E,cAActxE,iBAAd,CAAiCqxE,cAAjC,IAAoDG,WAAzD,EAAuE;;AAEvE,OAAIrxD,WAAWwwB,UAAUjG,GAAV,CAAcD,MAAd,CAAqB1qC,UAArB,CAAiCsxE,cAAjC,CAAf;;AAEA,OAAKlxD,WAAWwwB,UAAUplC,IAArB,IAA6B4U,WAAWwwB,UAAUnlC,GAAvD,EAA6D;;AAE7DulC,cAAWxgD,IAAX,CAAiB;;AAEhB4vB,cAAUA,QAFM;AAGhBrG,WAAOu3D,eAAe7zE,KAAf,EAHS;AAIhBq9B,UAAM,IAJU;AAKhBrhB,YAAQ;;AALQ,IAAjB;AASA,GAvBD;AAyBA,EA/BU,EAN2D;;AAuCtEhc,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,CAAsB,KAAKm6B,QAA3B,EAAsCl6B,IAAtC,CAA4C,IAA5C,CAAP;AAEA,EA3CqE;;AA6CtEA,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBokC,WAASjlC,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAKA,OAAOsR,MAAP,KAAkB7S,SAAvB,EAAmC,KAAK6S,MAAL,CAAYxD,IAAZ,CAAkB9N,OAAOsR,MAAzB;;AAEnC,SAAO,IAAP;AAEA;;AArDqE,CAApD,CAAnB;;AA0DA;;;;;;AAMA,SAASuwE,GAAT,GAAe;;AAEdz9C,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,KAAZ;;AAEAlB,QAAO8N,gBAAP,CAAyB,IAAzB,EAA+B;AAC9B40E,UAAQ;AACPp9C,eAAY,IADL;AAEP7lC,UAAO;AAFA;AADsB,EAA/B;AAOA;;AAEDgjF,IAAI1iF,SAAJ,GAAgBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAEnE0O,cAAag0E,GAFsD;;AAInE/zE,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBokC,WAASjlC,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC,EAA4C,KAA5C;;AAEA,MAAI8hF,SAAS9hF,OAAO8hF,MAApB;;AAEA,OAAM,IAAI1gF,IAAI,CAAR,EAAWC,IAAIygF,OAAO/hF,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,OAAIw/E,QAAQkB,OAAQ1gF,CAAR,CAAZ;;AAEA,QAAK2gF,QAAL,CAAenB,MAAMh3D,MAAN,CAAahc,KAAb,EAAf,EAAqCgzE,MAAMrwD,QAA3C;AAEA;;AAED,SAAO,IAAP;AAEA,EApBkE;;AAsBnEwxD,WAAU,UAAWn4D,MAAX,EAAmB2G,QAAnB,EAA8B;;AAEvC,MAAKA,aAAa9xB,SAAlB,EAA8B8xB,WAAW,CAAX;;AAE9BA,aAAW7xB,KAAKqR,GAAL,CAAUwgB,QAAV,CAAX;;AAEA,MAAIuxD,SAAS,KAAKA,MAAlB;;AAEA,OAAM,IAAIzgF,IAAI,CAAd,EAAiBA,IAAIygF,OAAO/hF,MAA5B,EAAoCsB,GAApC,EAA2C;;AAE1C,OAAKkvB,WAAWuxD,OAAQzgF,CAAR,EAAYkvB,QAA5B,EAAuC;;AAEtC;AAEA;AAED;;AAEDuxD,SAAO/gF,MAAP,CAAeM,CAAf,EAAkB,CAAlB,EAAqB,EAAEkvB,UAAUA,QAAZ,EAAsB3G,QAAQA,MAA9B,EAArB;;AAEA,OAAK5b,GAAL,CAAU4b,MAAV;AAEA,EA5CkE;;AA8CnEo4D,uBAAsB,UAAWzxD,QAAX,EAAsB;;AAE3C,MAAIuxD,SAAS,KAAKA,MAAlB;;AAEA,OAAM,IAAI1gF,IAAI,CAAR,EAAWC,IAAIygF,OAAO/hF,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,OAAKmvB,WAAWuxD,OAAQ1gF,CAAR,EAAYmvB,QAA5B,EAAuC;;AAEtC;AAEA;AAED;;AAED,SAAOuxD,OAAQ1gF,IAAI,CAAZ,EAAgBwoB,MAAvB;AAEA,EA9DkE;;AAgEnEsd,UAAW,YAAY;;AAEtB,MAAI+6C,iBAAiB,IAAIxuE,OAAJ,EAArB;;AAEA,SAAO,SAASyzB,OAAT,CAAkB6Z,SAAlB,EAA6BI,UAA7B,EAA0C;;AAEhD8gC,kBAAer/D,qBAAf,CAAsC,KAAKvB,WAA3C;;AAEA,OAAIkP,WAAWwwB,UAAUjG,GAAV,CAAcD,MAAd,CAAqB1qC,UAArB,CAAiC8xE,cAAjC,CAAf;;AAEA,QAAKD,oBAAL,CAA2BzxD,QAA3B,EAAsC2W,OAAtC,CAA+C6Z,SAA/C,EAA0DI,UAA1D;AAEA,GARD;AAUA,EAdU,EAhEwD;;AAgFnEzjC,SAAQ,YAAY;;AAEnB,MAAI/M,KAAK,IAAI8C,OAAJ,EAAT;AACA,MAAI7C,KAAK,IAAI6C,OAAJ,EAAT;;AAEA,SAAO,SAASiK,MAAT,CAAiByD,MAAjB,EAA0B;;AAEhC,OAAI2gE,SAAS,KAAKA,MAAlB;;AAEA,OAAKA,OAAO/hF,MAAP,GAAgB,CAArB,EAAyB;;AAExB4Q,OAAGiS,qBAAH,CAA0BzB,OAAOE,WAAjC;AACAzQ,OAAGgS,qBAAH,CAA0B,KAAKvB,WAA/B;;AAEA,QAAIkP,WAAW5f,GAAGR,UAAH,CAAeS,EAAf,CAAf;;AAEAkxE,WAAQ,CAAR,EAAYl4D,MAAZ,CAAmBkb,OAAnB,GAA6B,IAA7B;;AAEA,SAAM,IAAI1jC,IAAI,CAAR,EAAWC,IAAIygF,OAAO/hF,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,SAAKmvB,YAAYuxD,OAAQ1gF,CAAR,EAAYmvB,QAA7B,EAAwC;;AAEvCuxD,aAAQ1gF,IAAI,CAAZ,EAAgBwoB,MAAhB,CAAuBkb,OAAvB,GAAiC,KAAjC;AACAg9C,aAAQ1gF,CAAR,EAAYwoB,MAAZ,CAAmBkb,OAAnB,GAA6B,IAA7B;AAEA,MALD,MAKO;;AAEN;AAEA;AAED;;AAED,WAAQ1jC,IAAIC,CAAZ,EAAeD,GAAf,EAAsB;;AAErB0gF,YAAQ1gF,CAAR,EAAYwoB,MAAZ,CAAmBkb,OAAnB,GAA6B,KAA7B;AAEA;AAED;AAED,GApCD;AAsCA,EA3CO,EAhF2D;;AA6HnEzf,SAAQ,UAAWC,IAAX,EAAkB;;AAEzB,MAAIgD,OAAO8b,SAASjlC,SAAT,CAAmBkmB,MAAnB,CAA0BllB,IAA1B,CAAgC,IAAhC,EAAsCmlB,IAAtC,CAAX;;AAEAgD,OAAKsB,MAAL,CAAYk4D,MAAZ,GAAqB,EAArB;;AAEA,MAAIA,SAAS,KAAKA,MAAlB;;AAEA,OAAM,IAAI1gF,IAAI,CAAR,EAAWC,IAAIygF,OAAO/hF,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,OAAIw/E,QAAQkB,OAAQ1gF,CAAR,CAAZ;;AAEAknB,QAAKsB,MAAL,CAAYk4D,MAAZ,CAAmBnhF,IAAnB,CAAyB;AACxBipB,YAAQg3D,MAAMh3D,MAAN,CAAa7e,IADG;AAExBwlB,cAAUqwD,MAAMrwD;AAFQ,IAAzB;AAKA;;AAED,SAAOjI,IAAP;AAEA;;AAlJkE,CAApD,CAAhB;;AAsJA;;;;;;;AAOA,SAAS45D,QAAT,CAAmBprB,KAAnB,EAA0BqrB,YAA1B,EAAyC;;AAExC;;AAEArrB,SAAQA,SAAS,EAAjB;;AAEA,MAAKA,KAAL,GAAaA,MAAM31D,KAAN,CAAa,CAAb,CAAb;AACA,MAAKk9E,YAAL,GAAoB,IAAI78C,YAAJ,CAAkB,KAAKs1B,KAAL,CAAW/2D,MAAX,GAAoB,EAAtC,CAApB;;AAEA;;AAEA,KAAKoiF,iBAAiB1jF,SAAtB,EAAkC;;AAEjC,OAAK2jF,iBAAL;AAEA,EAJD,MAIO;;AAEN,MAAK,KAAKtrB,KAAL,CAAW/2D,MAAX,KAAsBoiF,aAAapiF,MAAxC,EAAiD;;AAEhD,QAAKoiF,YAAL,GAAoBA,aAAahhF,KAAb,CAAoB,CAApB,CAApB;AAEA,GAJD,MAIO;;AAEN+M,WAAQC,IAAR,CAAc,kDAAd;;AAEA,QAAKg0E,YAAL,GAAoB,EAApB;;AAEA,QAAM,IAAI/gF,IAAI,CAAR,EAAWkoB,KAAK,KAAKwtC,KAAL,CAAW/2D,MAAjC,EAAyCqB,IAAIkoB,EAA7C,EAAiDloB,GAAjD,EAAwD;;AAEvD,SAAK+gF,YAAL,CAAkBxhF,IAAlB,CAAwB,IAAI+Q,OAAJ,EAAxB;AAEA;AAED;AAED;AAED;;AAEDtS,OAAOK,MAAP,CAAeyiF,SAAS/iF,SAAxB,EAAmC;;AAElCijF,oBAAmB,YAAY;;AAE9B,OAAKD,YAAL,GAAoB,EAApB;;AAEA,OAAM,IAAI/gF,IAAI,CAAR,EAAWkoB,KAAK,KAAKwtC,KAAL,CAAW/2D,MAAjC,EAAyCqB,IAAIkoB,EAA7C,EAAiDloB,GAAjD,EAAwD;;AAEvD,OAAI8d,UAAU,IAAIxN,OAAJ,EAAd;;AAEA,OAAK,KAAKolD,KAAL,CAAY11D,CAAZ,CAAL,EAAuB;;AAEtB8d,YAAQlG,UAAR,CAAoB,KAAK89C,KAAL,CAAY11D,CAAZ,EAAgBigB,WAApC;AAEA;;AAED,QAAK8gE,YAAL,CAAkBxhF,IAAlB,CAAwBue,OAAxB;AAEA;AAED,EApBiC;;AAsBlC40D,OAAM,YAAY;;AAEjB,MAAIuO,IAAJ,EAAUjhF,CAAV,EAAakoB,EAAb;;AAEA;;AAEA,OAAMloB,IAAI,CAAJ,EAAOkoB,KAAK,KAAKwtC,KAAL,CAAW/2D,MAA7B,EAAqCqB,IAAIkoB,EAAzC,EAA6CloB,GAA7C,EAAoD;;AAEnDihF,UAAO,KAAKvrB,KAAL,CAAY11D,CAAZ,CAAP;;AAEA,OAAKihF,IAAL,EAAY;;AAEXA,SAAKhhE,WAAL,CAAiBrI,UAAjB,CAA6B,KAAKmpE,YAAL,CAAmB/gF,CAAnB,CAA7B;AAEA;AAED;;AAED;;AAEA,OAAMA,IAAI,CAAJ,EAAOkoB,KAAK,KAAKwtC,KAAL,CAAW/2D,MAA7B,EAAqCqB,IAAIkoB,EAAzC,EAA6CloB,GAA7C,EAAoD;;AAEnDihF,UAAO,KAAKvrB,KAAL,CAAY11D,CAAZ,CAAP;;AAEA,OAAKihF,IAAL,EAAY;;AAEX,QAAKA,KAAKh+C,MAAL,IAAeg+C,KAAKh+C,MAAL,CAAYi+C,MAAhC,EAAyC;;AAExCD,UAAKvnE,MAAL,CAAY9B,UAAZ,CAAwBqpE,KAAKh+C,MAAL,CAAYhjB,WAApC;AACAghE,UAAKvnE,MAAL,CAAYjM,QAAZ,CAAsBwzE,KAAKhhE,WAA3B;AAEA,KALD,MAKO;;AAENghE,UAAKvnE,MAAL,CAAYhN,IAAZ,CAAkBu0E,KAAKhhE,WAAvB;AAEA;;AAEDghE,SAAKvnE,MAAL,CAAYF,SAAZ,CAAuBynE,KAAK3nE,QAA5B,EAAsC2nE,KAAK1nE,UAA3C,EAAuD0nE,KAAK5oE,KAA5D;AAEA;AAED;AAED,EAjEiC;;AAmElCiE,SAAU,YAAY;;AAErB,MAAI6kE,eAAe,IAAI7wE,OAAJ,EAAnB;AACA,MAAI8wE,iBAAiB,IAAI9wE,OAAJ,EAArB;;AAEA,SAAO,SAASgM,MAAT,GAAkB;;AAExB,OAAIo5C,QAAQ,KAAKA,KAAjB;AACA,OAAIqrB,eAAe,KAAKA,YAAxB;AACA,OAAI9D,eAAe,KAAKA,YAAxB;AACA,OAAID,cAAc,KAAKA,WAAvB;;AAEA;;AAEA,QAAM,IAAIh9E,IAAI,CAAR,EAAWkoB,KAAKwtC,MAAM/2D,MAA5B,EAAoCqB,IAAIkoB,EAAxC,EAA4CloB,GAA5C,EAAmD;;AAElD;;AAEA,QAAI0Z,SAASg8C,MAAO11D,CAAP,IAAa01D,MAAO11D,CAAP,EAAWigB,WAAxB,GAAsCmhE,cAAnD;;AAEAD,iBAAalsE,gBAAb,CAA+ByE,MAA/B,EAAuCqnE,aAAc/gF,CAAd,CAAvC;AACAmhF,iBAAavxE,OAAb,CAAsBqtE,YAAtB,EAAoCj9E,IAAI,EAAxC;AAEA;;AAED,OAAKg9E,gBAAgB3/E,SAArB,EAAiC;;AAEhC2/E,gBAAYpqC,WAAZ,GAA0B,IAA1B;AAEA;AAED,GA1BD;AA4BA,EAjCO,EAnE0B;;AAsGlCpmC,QAAO,YAAY;;AAElB,SAAO,IAAIs0E,QAAJ,CAAc,KAAKprB,KAAnB,EAA0B,KAAKqrB,YAA/B,CAAP;AAEA,EA1GiC;;AA4GlCM,gBAAe,UAAWn+D,IAAX,EAAkB;;AAEhC,OAAM,IAAIljB,IAAI,CAAR,EAAWkoB,KAAK,KAAKwtC,KAAL,CAAW/2D,MAAjC,EAAyCqB,IAAIkoB,EAA7C,EAAiDloB,GAAjD,EAAwD;;AAEvD,OAAIihF,OAAO,KAAKvrB,KAAL,CAAY11D,CAAZ,CAAX;;AAEA,OAAKihF,KAAK/9D,IAAL,KAAcA,IAAnB,EAA0B;;AAEzB,WAAO+9D,IAAP;AAEA;AAED;;AAED,SAAO5jF,SAAP;AAEA;;AA5HiC,CAAnC;;AAgIA;;;;;;AAMA,SAASikF,IAAT,GAAgB;;AAEft+C,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,MAAZ;AAEA;;AAEDoiF,KAAKvjF,SAAL,GAAiBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAEpE0O,cAAa60E,IAFuD;;AAIpEJ,SAAQ;;AAJ4D,CAApD,CAAjB;;AAQA;;;;;;AAMA,SAASK,WAAT,CAAsBn4D,QAAtB,EAAgCwd,QAAhC,EAA2C;;AAE1CwX,MAAKr/C,IAAL,CAAW,IAAX,EAAiBqqB,QAAjB,EAA2Bwd,QAA3B;;AAEA,MAAK1nC,IAAL,GAAY,aAAZ;;AAEA,MAAKsiF,QAAL,GAAgB,UAAhB;AACA,MAAKC,UAAL,GAAkB,IAAInxE,OAAJ,EAAlB;AACA,MAAKoxE,iBAAL,GAAyB,IAAIpxE,OAAJ,EAAzB;;AAEA,KAAIolD,QAAQ,KAAKisB,SAAL,EAAZ;AACA,KAAIlsB,WAAW,IAAIqrB,QAAJ,CAAcprB,KAAd,CAAf;;AAEA,MAAKksB,IAAL,CAAWnsB,QAAX,EAAqB,KAAKx1C,WAA1B;;AAEA,MAAK4hE,oBAAL;AAEA;;AAEDN,YAAYxjF,SAAZ,GAAwBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAes6B,KAAKrgD,SAApB,CAAf,EAAgD;;AAEvE0O,cAAa80E,WAF0D;;AAIvEnrB,gBAAe,IAJwD;;AAMvEurB,YAAW,YAAY;;AAEtB,MAAIjsB,QAAQ,EAAZ;AAAA,MAAgBurB,IAAhB;AAAA,MAAsBa,KAAtB;AACA,MAAI9hF,CAAJ,EAAOkoB,EAAP;;AAEA,MAAK,KAAKkB,QAAL,IAAiB,KAAKA,QAAL,CAAcssC,KAAd,KAAwBr4D,SAA9C,EAA0D;;AAEzD;;AAEA,QAAM2C,IAAI,CAAJ,EAAOkoB,KAAK,KAAKkB,QAAL,CAAcssC,KAAd,CAAoB/2D,MAAtC,EAA8CqB,IAAIkoB,EAAlD,EAAsDloB,GAAtD,EAA6D;;AAE5D8hF,YAAQ,KAAK14D,QAAL,CAAcssC,KAAd,CAAqB11D,CAArB,CAAR;;AAEA;;AAEAihF,WAAO,IAAIK,IAAJ,EAAP;AACA5rB,UAAMn2D,IAAN,CAAY0hF,IAAZ;;AAEA;;AAEAA,SAAK/9D,IAAL,GAAY4+D,MAAM5+D,IAAlB;AACA+9D,SAAK3nE,QAAL,CAAc5J,SAAd,CAAyBoyE,MAAMC,GAA/B;AACAd,SAAK1nE,UAAL,CAAgB7J,SAAhB,CAA2BoyE,MAAME,IAAjC;AACA,QAAKF,MAAMG,GAAN,KAAc5kF,SAAnB,EAA+B4jF,KAAK5oE,KAAL,CAAW3I,SAAX,CAAsBoyE,MAAMG,GAA5B;AAE/B;;AAED;;AAEA,QAAMjiF,IAAI,CAAJ,EAAOkoB,KAAK,KAAKkB,QAAL,CAAcssC,KAAd,CAAoB/2D,MAAtC,EAA8CqB,IAAIkoB,EAAlD,EAAsDloB,GAAtD,EAA6D;;AAE5D8hF,YAAQ,KAAK14D,QAAL,CAAcssC,KAAd,CAAqB11D,CAArB,CAAR;;AAEA,QAAO8hF,MAAM7+C,MAAN,KAAiB,CAAE,CAArB,IAA8B6+C,MAAM7+C,MAAN,KAAiB,IAA/C,IAA2DyyB,MAAOosB,MAAM7+C,MAAb,MAA0B5lC,SAA1F,EAAwG;;AAEvG;;AAEAq4D,WAAOosB,MAAM7+C,MAAb,EAAsBr2B,GAAtB,CAA2B8oD,MAAO11D,CAAP,CAA3B;AAEA,KAND,MAMO;;AAEN;;AAEA,UAAK4M,GAAL,CAAU8oD,MAAO11D,CAAP,CAAV;AAEA;AAED;AAED;;AAED;AACA;;AAEA,OAAKypB,iBAAL,CAAwB,IAAxB;;AAEA,SAAOisC,KAAP;AAEA,EAhEsE;;AAkEvEksB,OAAM,UAAWnsB,QAAX,EAAqBgsB,UAArB,EAAkC;;AAEvC,OAAKhsB,QAAL,GAAgBA,QAAhB;;AAEA,MAAKgsB,eAAepkF,SAApB,EAAgC;;AAE/B,QAAKosB,iBAAL,CAAwB,IAAxB;;AAEA,QAAKgsC,QAAL,CAAcurB,iBAAd;;AAEAS,gBAAa,KAAKxhE,WAAlB;AAEA;;AAED,OAAKwhE,UAAL,CAAgB/0E,IAAhB,CAAsB+0E,UAAtB;AACA,OAAKC,iBAAL,CAAuB9pE,UAAvB,CAAmC6pE,UAAnC;AAEA,EAnFsE;;AAqFvE/O,OAAM,YAAY;;AAEjB,OAAKjd,QAAL,CAAcid,IAAd;AAEA,EAzFsE;;AA2FvEmP,uBAAsB,YAAY;;AAEjC,MAAIxpE,KAAJ,EAAWrY,CAAX;;AAEA,MAAK,KAAKopB,QAAL,IAAiB,KAAKA,QAAL,CAAcC,UAApC,EAAiD;;AAEhD,QAAMrpB,IAAI,CAAV,EAAaA,IAAI,KAAKopB,QAAL,CAAc6f,WAAd,CAA0BtqC,MAA3C,EAAmDqB,GAAnD,EAA0D;;AAEzD,QAAIkiF,KAAK,KAAK94D,QAAL,CAAc6f,WAAd,CAA2BjpC,CAA3B,CAAT;;AAEAqY,YAAQ,MAAM6pE,GAAGxzE,eAAH,EAAd;;AAEA,QAAK2J,UAAUgP,QAAf,EAA0B;;AAEzB66D,QAAGx0E,cAAH,CAAmB2K,KAAnB;AAEA,KAJD,MAIO;;AAEN6pE,QAAGn2E,GAAH,CAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAFM,CAEgB;AAEtB;AAED;AAED,GApBD,MAoBO,IAAK,KAAKqd,QAAL,IAAiB,KAAKA,QAAL,CAAcG,gBAApC,EAAuD;;AAE7D,OAAI44D,MAAM,IAAIz8D,OAAJ,EAAV;;AAEA,OAAI08D,aAAa,KAAKh5D,QAAL,CAAcI,UAAd,CAAyB44D,UAA1C;;AAEA,QAAMpiF,IAAI,CAAV,EAAaA,IAAIoiF,WAAWhrE,KAA5B,EAAmCpX,GAAnC,EAA0C;;AAEzCmiF,QAAItkF,CAAJ,GAAQukF,WAAWryE,IAAX,CAAiB/P,CAAjB,CAAR;AACAmiF,QAAI13E,CAAJ,GAAQ23E,WAAWpyE,IAAX,CAAiBhQ,CAAjB,CAAR;AACAmiF,QAAIhwE,CAAJ,GAAQiwE,WAAW/qE,IAAX,CAAiBrX,CAAjB,CAAR;AACAmiF,QAAIt1E,CAAJ,GAAQu1E,WAAWn8D,IAAX,CAAiBjmB,CAAjB,CAAR;;AAEAqY,YAAQ,MAAM8pE,IAAIzzE,eAAJ,EAAd;;AAEA,QAAK2J,UAAUgP,QAAf,EAA0B;;AAEzB86D,SAAIz0E,cAAJ,CAAoB2K,KAApB;AAEA,KAJD,MAIO;;AAEN8pE,SAAIp2E,GAAJ,CAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,EAFM,CAEiB;AAEvB;;AAEDq2E,eAAW5xC,OAAX,CAAoBxwC,CAApB,EAAuBmiF,IAAItkF,CAA3B,EAA8BskF,IAAI13E,CAAlC,EAAqC03E,IAAIhwE,CAAzC,EAA4CgwE,IAAIt1E,CAAhD;AAEA;AAED;AAED,EAlJsE;;AAoJvE4c,oBAAmB,UAAWwc,KAAX,EAAmB;;AAErCmY,OAAKrgD,SAAL,CAAe0rB,iBAAf,CAAiC1qB,IAAjC,CAAuC,IAAvC,EAA6CknC,KAA7C;;AAEA,MAAK,KAAKu7C,QAAL,KAAkB,UAAvB,EAAoC;;AAEnC,QAAKE,iBAAL,CAAuB9pE,UAAvB,CAAmC,KAAKqI,WAAxC;AAEA,GAJD,MAIO,IAAK,KAAKuhE,QAAL,KAAkB,UAAvB,EAAoC;;AAE1C,QAAKE,iBAAL,CAAuB9pE,UAAvB,CAAmC,KAAK6pE,UAAxC;AAEA,GAJM,MAIA;;AAEN30E,WAAQC,IAAR,CAAc,+CAA+C,KAAKy0E,QAAlE;AAEA;AAED,EAtKsE;;AAwKvEh1E,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,CAAsB,KAAK2c,QAA3B,EAAqC,KAAKwd,QAA1C,EAAqDl6B,IAArD,CAA2D,IAA3D,CAAP;AAEA;;AA5KsE,CAAhD,CAAxB;;AAgLA;;;;;;;;;;;;;;AAcA,SAASyoD,iBAAT,CAA4BzuB,UAA5B,EAAyC;;AAExCoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,mBAAZ;;AAEA,MAAK44B,KAAL,GAAa,IAAIZ,KAAJ,CAAW,QAAX,CAAb;;AAEA,MAAK8gB,SAAL,GAAiB,CAAjB;AACA,MAAKqqC,OAAL,GAAe,OAAf;AACA,MAAKC,QAAL,GAAgB,OAAhB;;AAEA,MAAKvmD,MAAL,GAAc,KAAd;;AAEA,MAAK2b,SAAL,CAAgBhR,UAAhB;AAEA;;AAEDyuB,kBAAkBp3D,SAAlB,GAA8BC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAA9B;AACAo3D,kBAAkBp3D,SAAlB,CAA4B0O,WAA5B,GAA0C0oD,iBAA1C;;AAEAA,kBAAkBp3D,SAAlB,CAA4BigF,mBAA5B,GAAkD,IAAlD;;AAEA7oB,kBAAkBp3D,SAAlB,CAA4B2O,IAA5B,GAAmC,UAAW9N,MAAX,EAAoB;;AAEtDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAKk5B,KAAL,CAAWprB,IAAX,CAAiB9N,OAAOk5B,KAAxB;;AAEA,MAAKkgB,SAAL,GAAiBp5C,OAAOo5C,SAAxB;AACA,MAAKqqC,OAAL,GAAezjF,OAAOyjF,OAAtB;AACA,MAAKC,QAAL,GAAgB1jF,OAAO0jF,QAAvB;;AAEA,QAAO,IAAP;AAEA,CAZD;;AAcA;;;;AAIA,SAASC,IAAT,CAAen5D,QAAf,EAAyBwd,QAAzB,EAAmCyb,IAAnC,EAA0C;;AAEzC,KAAKA,SAAS,CAAd,EAAkB;;AAEjBv1C,UAAQC,IAAR,CAAc,iGAAd;AACA,SAAO,IAAIy1E,YAAJ,CAAkBp5D,QAAlB,EAA4Bwd,QAA5B,CAAP;AAEA;;AAED5D,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,MAAZ;;AAEA,MAAKkqB,QAAL,GAAgBA,aAAa/rB,SAAb,GAAyB+rB,QAAzB,GAAoC,IAAI6oB,cAAJ,EAApD;AACA,MAAKrL,QAAL,GAAgBA,aAAavpC,SAAb,GAAyBupC,QAAzB,GAAoC,IAAIuuB,iBAAJ,CAAuB,EAAEr9B,OAAOx6B,KAAKiM,MAAL,KAAgB,QAAzB,EAAvB,CAApD;AAEA;;AAEDg5E,KAAKxkF,SAAL,GAAiBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAEpE0O,cAAa81E,IAFuD;;AAIpEzvC,SAAQ,IAJ4D;;AAMpE2vC,uBAAwB,YAAY;;AAEnC,MAAI71D,QAAQ,IAAIva,OAAJ,EAAZ;AACA,MAAI2a,MAAM,IAAI3a,OAAJ,EAAV;;AAEA,SAAO,SAASowE,oBAAT,GAAgC;;AAEtC,OAAIr5D,WAAW,KAAKA,QAApB;;AAEA,OAAKA,SAASG,gBAAd,EAAiC;;AAEhC;;AAEA,QAAKH,SAAS3qB,KAAT,KAAmB,IAAxB,EAA+B;;AAE9B,SAAIikF,oBAAoBt5D,SAASI,UAAT,CAAoBlQ,QAA5C;AACA,SAAI6vB,gBAAgB,CAAE,CAAF,CAApB;;AAEA,UAAM,IAAInpC,IAAI,CAAR,EAAWC,IAAIyiF,kBAAkBtrE,KAAvC,EAA8CpX,IAAIC,CAAlD,EAAqDD,GAArD,EAA4D;;AAE3D4sB,YAAM/c,mBAAN,CAA2B6yE,iBAA3B,EAA8C1iF,IAAI,CAAlD;AACAgtB,UAAInd,mBAAJ,CAAyB6yE,iBAAzB,EAA4C1iF,CAA5C;;AAEAmpC,oBAAenpC,CAAf,IAAqBmpC,cAAenpC,IAAI,CAAnB,CAArB;AACAmpC,oBAAenpC,CAAf,KAAsB4sB,MAAM7d,UAAN,CAAkBie,GAAlB,CAAtB;AAEA;;AAED5D,cAASkpB,YAAT,CAAuB,cAAvB,EAAuC,IAAIpB,sBAAJ,CAA4B/H,aAA5B,EAA2C,CAA3C,CAAvC;AAEA,KAjBD,MAiBO;;AAENr8B,aAAQC,IAAR,CAAc,+FAAd;AAEA;AAED,IA3BD,MA2BO,IAAKqc,SAASC,UAAd,EAA2B;;AAEjC,QAAIC,WAAWF,SAASE,QAAxB;AACA,QAAI6f,gBAAgB/f,SAAS+f,aAA7B;;AAEAA,kBAAe,CAAf,IAAqB,CAArB;;AAEA,SAAM,IAAInpC,IAAI,CAAR,EAAWC,IAAIqpB,SAAS3qB,MAA9B,EAAsCqB,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;;AAEnDmpC,mBAAenpC,CAAf,IAAqBmpC,cAAenpC,IAAI,CAAnB,CAArB;AACAmpC,mBAAenpC,CAAf,KAAsBspB,SAAUtpB,IAAI,CAAd,EAAkB+O,UAAlB,CAA8Bua,SAAUtpB,CAAV,CAA9B,CAAtB;AAEA;AAED;;AAED,UAAO,IAAP;AAEA,GAjDD;AAmDA,EAxDuB,EAN4C;;AAgEpE8lC,UAAW,YAAY;;AAEtB,MAAI+Y,gBAAgB,IAAIvuC,OAAJ,EAApB;AACA,MAAIopC,MAAM,IAAIF,GAAJ,EAAV;AACA,MAAIxvB,SAAS,IAAIuB,MAAJ,EAAb;;AAEA,SAAO,SAASua,OAAT,CAAkB6Z,SAAlB,EAA6BI,UAA7B,EAA0C;;AAEhD,OAAIxS,YAAYoS,UAAUgjC,aAA1B;AACA,OAAIC,cAAcr1C,YAAYA,SAA9B;;AAEA,OAAInkB,WAAW,KAAKA,QAApB;AACA,OAAInJ,cAAc,KAAKA,WAAvB;;AAEA;;AAEA,OAAKmJ,SAAS0F,cAAT,KAA4B,IAAjC,EAAwC1F,SAAS2F,qBAAT;;AAExC/E,UAAOtd,IAAP,CAAa0c,SAAS0F,cAAtB;AACA9E,UAAO1S,YAAP,CAAqB2I,WAArB;;AAEA,OAAK0/B,UAAUjG,GAAV,CAAc5vB,gBAAd,CAAgCE,MAAhC,MAA6C,KAAlD,EAA0D;;AAE1D;;AAEA60B,iBAAcjnC,UAAd,CAA0BqI,WAA1B;AACAy5B,OAAIhtC,IAAJ,CAAUizC,UAAUjG,GAApB,EAA0BpiC,YAA1B,CAAwCunC,aAAxC;;AAEA,OAAIgkC,SAAS,IAAIxwE,OAAJ,EAAb;AACA,OAAIywE,OAAO,IAAIzwE,OAAJ,EAAX;AACA,OAAI0wE,eAAe,IAAI1wE,OAAJ,EAAnB;AACA,OAAI2wE,WAAW,IAAI3wE,OAAJ,EAAf;AACA,OAAI4wE,OAAS,QAAQ,KAAKjJ,cAAf,GAAkC,CAAlC,GAAsC,CAAjD;;AAEA,OAAK5wD,SAASG,gBAAd,EAAiC;;AAEhC,QAAI9qB,QAAQ2qB,SAAS3qB,KAArB;AACA,QAAI+qB,aAAaJ,SAASI,UAA1B;AACA,QAAI2gB,YAAY3gB,WAAWlQ,QAAX,CAAoBxZ,KAApC;;AAEA,QAAKrB,UAAU,IAAf,EAAsB;;AAErB,SAAIyrC,UAAUzrC,MAAMqB,KAApB;;AAEA,UAAM,IAAIE,IAAI,CAAR,EAAWC,IAAIiqC,QAAQvrC,MAAR,GAAiB,CAAtC,EAAyCqB,IAAIC,CAA7C,EAAgDD,KAAKijF,IAArD,EAA4D;;AAE3D,UAAI91E,IAAI+8B,QAASlqC,CAAT,CAAR;AACA,UAAIoN,IAAI88B,QAASlqC,IAAI,CAAb,CAAR;;AAEA6iF,aAAOnzE,SAAP,CAAkBy6B,SAAlB,EAA6Bh9B,IAAI,CAAjC;AACA21E,WAAKpzE,SAAL,CAAgBy6B,SAAhB,EAA2B/8B,IAAI,CAA/B;;AAEA,UAAI81E,SAASxpC,IAAIM,mBAAJ,CAAyB6oC,MAAzB,EAAiCC,IAAjC,EAAuCE,QAAvC,EAAiDD,YAAjD,CAAb;;AAEA,UAAKG,SAASN,WAAd,EAA4B;;AAE5BI,eAAS1rE,YAAT,CAAuB,KAAK2I,WAA5B,EAZ2D,CAYhB;;AAE3C,UAAIkP,WAAWwwB,UAAUjG,GAAV,CAAcD,MAAd,CAAqB1qC,UAArB,CAAiCi0E,QAAjC,CAAf;;AAEA,UAAK7zD,WAAWwwB,UAAUplC,IAArB,IAA6B4U,WAAWwwB,UAAUnlC,GAAvD,EAA6D;;AAE7DulC,iBAAWxgD,IAAX,CAAiB;;AAEhB4vB,iBAAUA,QAFM;AAGhB;AACA;AACArG,cAAOi6D,aAAav2E,KAAb,GAAqB8K,YAArB,CAAmC,KAAK2I,WAAxC,CALS;AAMhBxhB,cAAOuB,CANS;AAOhB6pC,aAAM,IAPU;AAQhBiW,kBAAW,IARK;AAShBt3B,eAAQ;;AATQ,OAAjB;AAaA;AAED,KArCD,MAqCO;;AAEN,UAAM,IAAIxoB,IAAI,CAAR,EAAWC,IAAIkqC,UAAUxrC,MAAV,GAAmB,CAAnB,GAAuB,CAA5C,EAA+CqB,IAAIC,CAAnD,EAAsDD,KAAKijF,IAA3D,EAAkE;;AAEjEJ,aAAOnzE,SAAP,CAAkBy6B,SAAlB,EAA6B,IAAInqC,CAAjC;AACA8iF,WAAKpzE,SAAL,CAAgBy6B,SAAhB,EAA2B,IAAInqC,CAAJ,GAAQ,CAAnC;;AAEA,UAAIkjF,SAASxpC,IAAIM,mBAAJ,CAAyB6oC,MAAzB,EAAiCC,IAAjC,EAAuCE,QAAvC,EAAiDD,YAAjD,CAAb;;AAEA,UAAKG,SAASN,WAAd,EAA4B;;AAE5BI,eAAS1rE,YAAT,CAAuB,KAAK2I,WAA5B,EATiE,CAStB;;AAE3C,UAAIkP,WAAWwwB,UAAUjG,GAAV,CAAcD,MAAd,CAAqB1qC,UAArB,CAAiCi0E,QAAjC,CAAf;;AAEA,UAAK7zD,WAAWwwB,UAAUplC,IAArB,IAA6B4U,WAAWwwB,UAAUnlC,GAAvD,EAA6D;;AAE7DulC,iBAAWxgD,IAAX,CAAiB;;AAEhB4vB,iBAAUA,QAFM;AAGhB;AACA;AACArG,cAAOi6D,aAAav2E,KAAb,GAAqB8K,YAArB,CAAmC,KAAK2I,WAAxC,CALS;AAMhBxhB,cAAOuB,CANS;AAOhB6pC,aAAM,IAPU;AAQhBiW,kBAAW,IARK;AAShBt3B,eAAQ;;AATQ,OAAjB;AAaA;AAED;AAED,IA7ED,MA6EO,IAAKY,SAASC,UAAd,EAA2B;;AAEjC,QAAIC,WAAWF,SAASE,QAAxB;AACA,QAAI65D,aAAa75D,SAAS3qB,MAA1B;;AAEA,SAAM,IAAIqB,IAAI,CAAd,EAAiBA,IAAImjF,aAAa,CAAlC,EAAqCnjF,KAAKijF,IAA1C,EAAiD;;AAEhD,SAAIC,SAASxpC,IAAIM,mBAAJ,CAAyB1wB,SAAUtpB,CAAV,CAAzB,EAAwCspB,SAAUtpB,IAAI,CAAd,CAAxC,EAA2DgjF,QAA3D,EAAqED,YAArE,CAAb;;AAEA,SAAKG,SAASN,WAAd,EAA4B;;AAE5BI,cAAS1rE,YAAT,CAAuB,KAAK2I,WAA5B,EANgD,CAML;;AAE3C,SAAIkP,WAAWwwB,UAAUjG,GAAV,CAAcD,MAAd,CAAqB1qC,UAArB,CAAiCi0E,QAAjC,CAAf;;AAEA,SAAK7zD,WAAWwwB,UAAUplC,IAArB,IAA6B4U,WAAWwwB,UAAUnlC,GAAvD,EAA6D;;AAE7DulC,gBAAWxgD,IAAX,CAAiB;;AAEhB4vB,gBAAUA,QAFM;AAGhB;AACA;AACArG,aAAOi6D,aAAav2E,KAAb,GAAqB8K,YAArB,CAAmC,KAAK2I,WAAxC,CALS;AAMhBxhB,aAAOuB,CANS;AAOhB6pC,YAAM,IAPU;AAQhBiW,iBAAW,IARK;AAShBt3B,cAAQ;;AATQ,MAAjB;AAaA;AAED;AAED,GA3ID;AA6IA,EAnJU,EAhEyD;;AAqNpEhc,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,CAAsB,KAAK2c,QAA3B,EAAqC,KAAKwd,QAA1C,EAAqDl6B,IAArD,CAA2D,IAA3D,CAAP;AAEA;;AAzNmE,CAApD,CAAjB;;AA6NA;;;;AAIA,SAAS81E,YAAT,CAAuBp5D,QAAvB,EAAiCwd,QAAjC,EAA4C;;AAE3C27C,MAAKxjF,IAAL,CAAW,IAAX,EAAiBqqB,QAAjB,EAA2Bwd,QAA3B;;AAEA,MAAK1nC,IAAL,GAAY,cAAZ;AAEA;;AAEDsjF,aAAazkF,SAAb,GAAyBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAey+D,KAAKxkF,SAApB,CAAf,EAAgD;;AAExE0O,cAAa+1E,YAF2D;;AAIxExI,iBAAgB,IAJwD;;AAMxEyI,uBAAwB,YAAY;;AAEnC,MAAI71D,QAAQ,IAAIva,OAAJ,EAAZ;AACA,MAAI2a,MAAM,IAAI3a,OAAJ,EAAV;;AAEA,SAAO,SAASowE,oBAAT,GAAgC;;AAEtC,OAAIr5D,WAAW,KAAKA,QAApB;;AAEA,OAAKA,SAASG,gBAAd,EAAiC;;AAEhC;;AAEA,QAAKH,SAAS3qB,KAAT,KAAmB,IAAxB,EAA+B;;AAE9B,SAAIikF,oBAAoBt5D,SAASI,UAAT,CAAoBlQ,QAA5C;AACA,SAAI6vB,gBAAgB,EAApB;;AAEA,UAAM,IAAInpC,IAAI,CAAR,EAAWC,IAAIyiF,kBAAkBtrE,KAAvC,EAA8CpX,IAAIC,CAAlD,EAAqDD,KAAK,CAA1D,EAA8D;;AAE7D4sB,YAAM/c,mBAAN,CAA2B6yE,iBAA3B,EAA8C1iF,CAA9C;AACAgtB,UAAInd,mBAAJ,CAAyB6yE,iBAAzB,EAA4C1iF,IAAI,CAAhD;;AAEAmpC,oBAAenpC,CAAf,IAAuBA,MAAM,CAAR,GAAc,CAAd,GAAkBmpC,cAAenpC,IAAI,CAAnB,CAAvC;AACAmpC,oBAAenpC,IAAI,CAAnB,IAAyBmpC,cAAenpC,CAAf,IAAqB4sB,MAAM7d,UAAN,CAAkBie,GAAlB,CAA9C;AAEA;;AAED5D,cAASkpB,YAAT,CAAuB,cAAvB,EAAuC,IAAIpB,sBAAJ,CAA4B/H,aAA5B,EAA2C,CAA3C,CAAvC;AAEA,KAjBD,MAiBO;;AAENr8B,aAAQC,IAAR,CAAc,uGAAd;AAEA;AAED,IA3BD,MA2BO,IAAKqc,SAASC,UAAd,EAA2B;;AAEjC,QAAIC,WAAWF,SAASE,QAAxB;AACA,QAAI6f,gBAAgB/f,SAAS+f,aAA7B;;AAEA,SAAM,IAAInpC,IAAI,CAAR,EAAWC,IAAIqpB,SAAS3qB,MAA9B,EAAsCqB,IAAIC,CAA1C,EAA6CD,KAAK,CAAlD,EAAsD;;AAErD4sB,WAAMlgB,IAAN,CAAY4c,SAAUtpB,CAAV,CAAZ;AACAgtB,SAAItgB,IAAJ,CAAU4c,SAAUtpB,IAAI,CAAd,CAAV;;AAEAmpC,mBAAenpC,CAAf,IAAuBA,MAAM,CAAR,GAAc,CAAd,GAAkBmpC,cAAenpC,IAAI,CAAnB,CAAvC;AACAmpC,mBAAenpC,IAAI,CAAnB,IAAyBmpC,cAAenpC,CAAf,IAAqB4sB,MAAM7d,UAAN,CAAkBie,GAAlB,CAA9C;AAEA;AAED;;AAED,UAAO,IAAP;AAEA,GAlDD;AAoDA,EAzDuB;;AANgD,CAAhD,CAAzB;;AAmEA;;;;AAIA,SAASo2D,QAAT,CAAmBh6D,QAAnB,EAA6Bwd,QAA7B,EAAwC;;AAEvC27C,MAAKxjF,IAAL,CAAW,IAAX,EAAiBqqB,QAAjB,EAA2Bwd,QAA3B;;AAEA,MAAK1nC,IAAL,GAAY,UAAZ;AAEA;;AAEDkkF,SAASrlF,SAAT,GAAqBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAey+D,KAAKxkF,SAApB,CAAf,EAAgD;;AAEpE0O,cAAa22E,QAFuD;;AAIpEnJ,aAAY;;AAJwD,CAAhD,CAArB;;AAQA;;;;;;;;;;;;;;AAcA,SAAS5kB,cAAT,CAAyB3uB,UAAzB,EAAsC;;AAErCoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,gBAAZ;;AAEA,MAAK44B,KAAL,GAAa,IAAIZ,KAAJ,CAAW,QAAX,CAAb;;AAEA,MAAKqC,GAAL,GAAW,IAAX;;AAEA,MAAKlR,IAAL,GAAY,CAAZ;AACA,MAAK0vB,eAAL,GAAuB,IAAvB;;AAEA,MAAKhc,MAAL,GAAc,KAAd;;AAEA,MAAK2b,SAAL,CAAgBhR,UAAhB;AAEA;;AAED2uB,eAAet3D,SAAf,GAA2BC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAA3B;AACAs3D,eAAet3D,SAAf,CAAyB0O,WAAzB,GAAuC4oD,cAAvC;;AAEAA,eAAet3D,SAAf,CAAyBqgF,gBAAzB,GAA4C,IAA5C;;AAEA/oB,eAAet3D,SAAf,CAAyB2O,IAAzB,GAAgC,UAAW9N,MAAX,EAAoB;;AAEnDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAKk5B,KAAL,CAAWprB,IAAX,CAAiB9N,OAAOk5B,KAAxB;;AAEA,MAAKyB,GAAL,GAAW36B,OAAO26B,GAAlB;;AAEA,MAAKlR,IAAL,GAAYzpB,OAAOypB,IAAnB;AACA,MAAK0vB,eAAL,GAAuBn5C,OAAOm5C,eAA9B;;AAEA,QAAO,IAAP;AAEA,CAbD;;AAeA;;;;AAIA,SAASsrC,MAAT,CAAiBj6D,QAAjB,EAA2Bwd,QAA3B,EAAsC;;AAErC5D,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,QAAZ;;AAEA,MAAKkqB,QAAL,GAAgBA,aAAa/rB,SAAb,GAAyB+rB,QAAzB,GAAoC,IAAI6oB,cAAJ,EAApD;AACA,MAAKrL,QAAL,GAAgBA,aAAavpC,SAAb,GAAyBupC,QAAzB,GAAoC,IAAIyuB,cAAJ,CAAoB,EAAEv9B,OAAOx6B,KAAKiM,MAAL,KAAgB,QAAzB,EAApB,CAApD;AAEA;;AAED85E,OAAOtlF,SAAP,GAAmBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAEtE0O,cAAa42E,MAFyD;;AAItExwC,WAAU,IAJ4D;;AAMtE/M,UAAW,YAAY;;AAEtB,MAAI+Y,gBAAgB,IAAIvuC,OAAJ,EAApB;AACA,MAAIopC,MAAM,IAAIF,GAAJ,EAAV;AACA,MAAIxvB,SAAS,IAAIuB,MAAJ,EAAb;;AAEA,SAAO,SAASua,OAAT,CAAkB6Z,SAAlB,EAA6BI,UAA7B,EAA0C;;AAEhD,OAAIv3B,SAAS,IAAb;AACA,OAAIY,WAAW,KAAKA,QAApB;AACA,OAAInJ,cAAc,KAAKA,WAAvB;AACA,OAAIqjE,YAAY3jC,UAAU4jC,MAAV,CAAiBF,MAAjB,CAAwBC,SAAxC;;AAEA;;AAEA,OAAKl6D,SAAS0F,cAAT,KAA4B,IAAjC,EAAwC1F,SAAS2F,qBAAT;;AAExC/E,UAAOtd,IAAP,CAAa0c,SAAS0F,cAAtB;AACA9E,UAAO1S,YAAP,CAAqB2I,WAArB;AACA+J,UAAO1I,MAAP,IAAiBgiE,SAAjB;;AAEA,OAAK3jC,UAAUjG,GAAV,CAAc5vB,gBAAd,CAAgCE,MAAhC,MAA6C,KAAlD,EAA0D;;AAE1D;;AAEA60B,iBAAcjnC,UAAd,CAA0BqI,WAA1B;AACAy5B,OAAIhtC,IAAJ,CAAUizC,UAAUjG,GAApB,EAA0BpiC,YAA1B,CAAwCunC,aAAxC;;AAEA,OAAI2kC,iBAAiBF,aAAc,CAAE,KAAKjrE,KAAL,CAAWxa,CAAX,GAAe,KAAKwa,KAAL,CAAW5N,CAA1B,GAA8B,KAAK4N,KAAL,CAAWlG,CAA3C,IAAiD,CAA/D,CAArB;AACA,OAAIsxE,mBAAmBD,iBAAiBA,cAAxC;AACA,OAAIlqE,WAAW,IAAIjH,OAAJ,EAAf;AACA,OAAIguE,iBAAiB,IAAIhuE,OAAJ,EAArB;;AAEA,YAASqxE,SAAT,CAAoB56D,KAApB,EAA2BrqB,KAA3B,EAAmC;;AAElC,QAAIklF,qBAAqBjqC,IAAIK,iBAAJ,CAAuBjxB,KAAvB,CAAzB;;AAEA,QAAK66D,qBAAqBF,gBAA1B,EAA6C;;AAE5C/pC,SAAIG,mBAAJ,CAAyB/wB,KAAzB,EAAgCu3D,cAAhC;AACAA,oBAAe/oE,YAAf,CAA6B2I,WAA7B;;AAEA,SAAIkP,WAAWwwB,UAAUjG,GAAV,CAAcD,MAAd,CAAqB1qC,UAArB,CAAiCsxE,cAAjC,CAAf;;AAEA,SAAKlxD,WAAWwwB,UAAUplC,IAArB,IAA6B4U,WAAWwwB,UAAUnlC,GAAvD,EAA6D;;AAE7DulC,gBAAWxgD,IAAX,CAAiB;;AAEhB4vB,gBAAUA,QAFM;AAGhBy0D,qBAAetmF,KAAKmR,IAAL,CAAWk1E,kBAAX,CAHC;AAIhB76D,aAAOu3D,eAAe7zE,KAAf,EAJS;AAKhB/N,aAAOA,KALS;AAMhBorC,YAAM,IANU;AAOhBrhB,cAAQA;;AAPQ,MAAjB;AAWA;AAED;;AAED,OAAKY,SAASG,gBAAd,EAAiC;;AAEhC,QAAI9qB,QAAQ2qB,SAAS3qB,KAArB;AACA,QAAI+qB,aAAaJ,SAASI,UAA1B;AACA,QAAI2gB,YAAY3gB,WAAWlQ,QAAX,CAAoBxZ,KAApC;;AAEA,QAAKrB,UAAU,IAAf,EAAsB;;AAErB,SAAIyrC,UAAUzrC,MAAMqB,KAApB;;AAEA,UAAM,IAAIE,IAAI,CAAR,EAAWkoB,KAAKgiB,QAAQvrC,MAA9B,EAAsCqB,IAAIkoB,EAA1C,EAA8CloB,GAA9C,EAAqD;;AAEpD,UAAImN,IAAI+8B,QAASlqC,CAAT,CAAR;;AAEAsZ,eAAS5J,SAAT,CAAoBy6B,SAApB,EAA+Bh9B,IAAI,CAAnC;;AAEAu2E,gBAAWpqE,QAAX,EAAqBnM,CAArB;AAEA;AAED,KAdD,MAcO;;AAEN,UAAM,IAAInN,IAAI,CAAR,EAAWC,IAAIkqC,UAAUxrC,MAAV,GAAmB,CAAxC,EAA2CqB,IAAIC,CAA/C,EAAkDD,GAAlD,EAAyD;;AAExDsZ,eAAS5J,SAAT,CAAoBy6B,SAApB,EAA+BnqC,IAAI,CAAnC;;AAEA0jF,gBAAWpqE,QAAX,EAAqBtZ,CAArB;AAEA;AAED;AAED,IAhCD,MAgCO;;AAEN,QAAIspB,WAAWF,SAASE,QAAxB;;AAEA,SAAM,IAAItpB,IAAI,CAAR,EAAWC,IAAIqpB,SAAS3qB,MAA9B,EAAsCqB,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;;AAEnD0jF,eAAWp6D,SAAUtpB,CAAV,CAAX,EAA0BA,CAA1B;AAEA;AAED;AAED,GAnGD;AAqGA,EA3GU,EAN2D;;AAmHtEwM,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,CAAsB,KAAK2c,QAA3B,EAAqC,KAAKwd,QAA1C,EAAqDl6B,IAArD,CAA2D,IAA3D,CAAP;AAEA;;AAvHqE,CAApD,CAAnB;;AA2HA;;;;AAIA,SAASm3E,KAAT,GAAiB;;AAEhB7gD,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,OAAZ;AAEA;;AAED2kF,MAAM9lF,SAAN,GAAkBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAErE0O,cAAao3E,KAFwD;;AAIrEC,UAAS;;AAJ4D,CAApD,CAAlB;;AAQA;;;;AAIA,SAASC,YAAT,CAAuBC,KAAvB,EAA8BthE,OAA9B,EAAuCC,KAAvC,EAA8CC,KAA9C,EAAqDC,SAArD,EAAgEC,SAAhE,EAA2EC,MAA3E,EAAmF7jB,IAAnF,EAAyF8jB,UAAzF,EAAsG;;AAErGR,SAAQzjB,IAAR,CAAc,IAAd,EAAoBilF,KAApB,EAA2BthE,OAA3B,EAAoCC,KAApC,EAA2CC,KAA3C,EAAkDC,SAAlD,EAA6DC,SAA7D,EAAwEC,MAAxE,EAAgF7jB,IAAhF,EAAsF8jB,UAAtF;;AAEA,MAAKQ,eAAL,GAAuB,KAAvB;AAEA;;AAEDugE,aAAahmF,SAAb,GAAyBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAetB,QAAQzkB,SAAvB,CAAf,EAAmD;;AAE3E0O,cAAas3E,YAF8D;;AAI3Enb,iBAAgB,IAJ2D;;AAM3EtsD,SAAQ,YAAY;;AAEnB,MAAI0nE,QAAQ,KAAKvhE,KAAjB;;AAEA,MAAKuhE,MAAMC,UAAN,IAAoBD,MAAME,iBAA/B,EAAmD;;AAElD,QAAKtxC,WAAL,GAAmB,IAAnB;AAEA;AAED;;AAhB0E,CAAnD,CAAzB;;AAoBA;;;;AAIA,SAASuxC,iBAAT,CAA4B/gE,OAA5B,EAAqCsB,KAArC,EAA4CC,MAA5C,EAAoD5B,MAApD,EAA4D7jB,IAA5D,EAAkEwjB,OAAlE,EAA2EC,KAA3E,EAAkFC,KAAlF,EAAyFC,SAAzF,EAAoGC,SAApG,EAA+GE,UAA/G,EAA2HC,QAA3H,EAAsI;;AAErIT,SAAQzjB,IAAR,CAAc,IAAd,EAAoB,IAApB,EAA0B2jB,OAA1B,EAAmCC,KAAnC,EAA0CC,KAA1C,EAAiDC,SAAjD,EAA4DC,SAA5D,EAAuEC,MAAvE,EAA+E7jB,IAA/E,EAAqF8jB,UAArF,EAAiGC,QAAjG;;AAEA,MAAKR,KAAL,GAAa,EAAEiC,OAAOA,KAAT,EAAgBC,QAAQA,MAAxB,EAAb;AACA,MAAKvB,OAAL,GAAeA,OAAf;;AAEA;AACA;;AAEA,MAAKM,KAAL,GAAa,KAAb;;AAEA;AACA;;AAEA,MAAKF,eAAL,GAAuB,KAAvB;AAEA;;AAED2gE,kBAAkBpmF,SAAlB,GAA8BC,OAAO8lB,MAAP,CAAetB,QAAQzkB,SAAvB,CAA9B;AACAomF,kBAAkBpmF,SAAlB,CAA4B0O,WAA5B,GAA0C03E,iBAA1C;;AAEAA,kBAAkBpmF,SAAlB,CAA4BksE,mBAA5B,GAAkD,IAAlD;;AAEA;;;;;AAKA,SAASma,YAAT,CAAuB1/D,KAAvB,EAA8BC,MAA9B,EAAsCzlB,IAAtC,EAA4CwjB,OAA5C,EAAqDC,KAArD,EAA4DC,KAA5D,EAAmEC,SAAnE,EAA8EC,SAA9E,EAAyFE,UAAzF,EAAqGD,MAArG,EAA8G;;AAE7GA,UAASA,WAAW1lB,SAAX,GAAuB0lB,MAAvB,GAAgC9c,WAAzC;;AAEA,KAAK8c,WAAW9c,WAAX,IAA0B8c,WAAW7c,kBAA1C,EAA+D;;AAE9D,QAAM,IAAIoG,KAAJ,CAAW,kFAAX,CAAN;AAEA;;AAED,KAAKpN,SAAS7B,SAAT,IAAsB0lB,WAAW9c,WAAtC,EAAoD/G,OAAOgG,iBAAP;AACpD,KAAKhG,SAAS7B,SAAT,IAAsB0lB,WAAW7c,kBAAtC,EAA2DhH,OAAOwG,kBAAP;;AAE3D8c,SAAQzjB,IAAR,CAAc,IAAd,EAAoB,IAApB,EAA0B2jB,OAA1B,EAAmCC,KAAnC,EAA0CC,KAA1C,EAAiDC,SAAjD,EAA4DC,SAA5D,EAAuEC,MAAvE,EAA+E7jB,IAA/E,EAAqF8jB,UAArF;;AAEA,MAAKP,KAAL,GAAa,EAAEiC,OAAOA,KAAT,EAAgBC,QAAQA,MAAxB,EAAb;;AAEA,MAAK9B,SAAL,GAAiBA,cAAcxlB,SAAd,GAA0BwlB,SAA1B,GAAsCpe,aAAvD;AACA,MAAKqe,SAAL,GAAiBA,cAAczlB,SAAd,GAA0BylB,SAA1B,GAAsCre,aAAvD;;AAEA,MAAKif,KAAL,GAAa,KAAb;AACA,MAAKF,eAAL,GAAuB,KAAvB;AAEA;;AAED4gE,aAAarmF,SAAb,GAAyBC,OAAO8lB,MAAP,CAAetB,QAAQzkB,SAAvB,CAAzB;AACAqmF,aAAarmF,SAAb,CAAuB0O,WAAvB,GAAqC23E,YAArC;AACAA,aAAarmF,SAAb,CAAuBmtE,cAAvB,GAAwC,IAAxC;;AAEA;;;;;AAKA,SAASmZ,iBAAT,CAA4Bj7D,QAA5B,EAAuC;;AAEtC6oB,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,mBAAZ;;AAEA;;AAEA,KAAIoqB,WAAW,EAAf;;AAEA;;AAEA,KAAItpB,CAAJ,EAAO+qB,CAAP,EAAU9qB,CAAV,EAAaqkF,CAAb,EAAgBC,EAAhB;AACA,KAAIC,OAAO,CAAE,CAAF,EAAK,CAAL,CAAX;AAAA,KAAqBC,QAAQ,EAA7B;AAAA,KAAiC32E,CAAjC;AAAA,KAAoCkuC,KAApC;AAAA,KAA2CC,KAA3C;AACA,KAAIhV,GAAJ;AAAA,KAAS0X,OAAO,CAAE,GAAF,EAAO,GAAP,EAAY,GAAZ,CAAhB;AACA,KAAI/U,MAAJ;;AAEA;;AAEA,KAAKxgB,YAAYA,SAASC,UAA1B,EAAuC;;AAEtC;;AAEA,MAAIwf,QAAQzf,SAASyf,KAArB;;AAEA,OAAM7oC,IAAI,CAAJ,EAAOC,IAAI4oC,MAAMlqC,MAAvB,EAA+BqB,IAAIC,CAAnC,EAAsCD,GAAtC,EAA6C;;AAE5C,OAAI6pC,OAAOhB,MAAO7oC,CAAP,CAAX;;AAEA,QAAM+qB,IAAI,CAAV,EAAaA,IAAI,CAAjB,EAAoBA,GAApB,EAA2B;;AAE1BixB,YAAQnS,KAAM8U,KAAM5zB,CAAN,CAAN,CAAR;AACAkxB,YAAQpS,KAAM8U,KAAM,CAAE5zB,IAAI,CAAN,IAAY,CAAlB,CAAN,CAAR;AACAy5D,SAAM,CAAN,IAAYlnF,KAAKwM,GAAL,CAAUkyC,KAAV,EAAiBC,KAAjB,CAAZ,CAJ0B,CAIY;AACtCuoC,SAAM,CAAN,IAAYlnF,KAAKyM,GAAL,CAAUiyC,KAAV,EAAiBC,KAAjB,CAAZ;;AAEAhV,UAAMu9C,KAAM,CAAN,IAAY,GAAZ,GAAkBA,KAAM,CAAN,CAAxB;;AAEA,QAAKC,MAAOx9C,GAAP,MAAiB5pC,SAAtB,EAAkC;;AAEjConF,WAAOx9C,GAAP,IAAe,EAAE8I,QAAQy0C,KAAM,CAAN,CAAV,EAAqBx0C,QAAQw0C,KAAM,CAAN,CAA7B,EAAf;AAEA;AAED;AAED;;AAED;;AAEA,OAAMv9C,GAAN,IAAaw9C,KAAb,EAAqB;;AAEpB32E,OAAI22E,MAAOx9C,GAAP,CAAJ;;AAEA2C,YAASxgB,SAASE,QAAT,CAAmBxb,EAAEiiC,MAArB,CAAT;AACAzmB,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEAy3B,YAASxgB,SAASE,QAAT,CAAmBxb,EAAEkiC,MAArB,CAAT;AACA1mB,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;AAEA;AAED,EA3CD,MA2CO,IAAKiX,YAAYA,SAASG,gBAA1B,EAA6C;;AAEnD,MAAIjQ,QAAJ,EAAc4wB,OAAd,EAAuBU,MAAvB;AACA,MAAIC,KAAJ,EAAWje,KAAX,EAAkBxV,KAAlB;AACA,MAAI24B,MAAJ,EAAYC,MAAZ;;AAEApG,WAAS,IAAIv3B,OAAJ,EAAT;;AAEA,MAAK+W,SAAS3qB,KAAT,KAAmB,IAAxB,EAA+B;;AAE9B;;AAEA6a,cAAW8P,SAASI,UAAT,CAAoBlQ,QAA/B;AACA4wB,aAAU9gB,SAAS3qB,KAAnB;AACAmsC,YAASxhB,SAASwhB,MAAlB;;AAEA,OAAKA,OAAOjsC,MAAP,KAAkB,CAAvB,EAA2B;;AAE1BisC,aAAS,CAAE,EAAEhe,OAAO,CAAT,EAAYxV,OAAO8yB,QAAQ9yB,KAA3B,EAAkCmxB,eAAe,CAAjD,EAAF,CAAT;AAEA;;AAED;;AAEA,QAAM+7C,IAAI,CAAJ,EAAOC,KAAK35C,OAAOjsC,MAAzB,EAAiC2lF,IAAIC,EAArC,EAAyC,EAAGD,CAA5C,EAAgD;;AAE/Cz5C,YAAQD,OAAQ05C,CAAR,CAAR;;AAEA13D,YAAQie,MAAMje,KAAd;AACAxV,YAAQyzB,MAAMzzB,KAAd;;AAEA,SAAMpX,IAAI4sB,KAAJ,EAAW3sB,IAAM2sB,QAAQxV,KAA/B,EAAwCpX,IAAIC,CAA5C,EAA+CD,KAAK,CAApD,EAAwD;;AAEvD,UAAM+qB,IAAI,CAAV,EAAaA,IAAI,CAAjB,EAAoBA,GAApB,EAA2B;;AAE1BixB,cAAQ9R,QAAQn6B,IAAR,CAAc/P,IAAI+qB,CAAlB,CAAR;AACAkxB,cAAQ/R,QAAQn6B,IAAR,CAAc/P,IAAI,CAAE+qB,IAAI,CAAN,IAAY,CAA9B,CAAR;AACAy5D,WAAM,CAAN,IAAYlnF,KAAKwM,GAAL,CAAUkyC,KAAV,EAAiBC,KAAjB,CAAZ,CAJ0B,CAIY;AACtCuoC,WAAM,CAAN,IAAYlnF,KAAKyM,GAAL,CAAUiyC,KAAV,EAAiBC,KAAjB,CAAZ;;AAEAhV,YAAMu9C,KAAM,CAAN,IAAY,GAAZ,GAAkBA,KAAM,CAAN,CAAxB;;AAEA,UAAKC,MAAOx9C,GAAP,MAAiB5pC,SAAtB,EAAkC;;AAEjConF,aAAOx9C,GAAP,IAAe,EAAE8I,QAAQy0C,KAAM,CAAN,CAAV,EAAqBx0C,QAAQw0C,KAAM,CAAN,CAA7B,EAAf;AAEA;AAED;AAED;AAED;;AAED;;AAEA,QAAMv9C,GAAN,IAAaw9C,KAAb,EAAqB;;AAEpB32E,QAAI22E,MAAOx9C,GAAP,CAAJ;;AAEA2C,WAAO/5B,mBAAP,CAA4ByJ,QAA5B,EAAsCxL,EAAEiiC,MAAxC;AACAzmB,aAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEAy3B,WAAO/5B,mBAAP,CAA4ByJ,QAA5B,EAAsCxL,EAAEkiC,MAAxC;AACA1mB,aAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;AAEA;AAED,GA5DD,MA4DO;;AAEN;;AAEAmH,cAAW8P,SAASI,UAAT,CAAoBlQ,QAA/B;;AAEA,QAAMtZ,IAAI,CAAJ,EAAOC,IAAMqZ,SAASlC,KAAT,GAAiB,CAApC,EAAyCpX,IAAIC,CAA7C,EAAgDD,GAAhD,EAAuD;;AAEtD,SAAM+qB,IAAI,CAAV,EAAaA,IAAI,CAAjB,EAAoBA,GAApB,EAA2B;;AAE1B;AACA;;AAEAglB,cAAS,IAAI/vC,CAAJ,GAAQ+qB,CAAjB;AACA6e,YAAO/5B,mBAAP,CAA4ByJ,QAA5B,EAAsCy2B,MAAtC;AACAzmB,cAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEA69B,cAAS,IAAIhwC,CAAJ,GAAU,CAAE+qB,IAAI,CAAN,IAAY,CAA/B;AACA6e,YAAO/5B,mBAAP,CAA4ByJ,QAA5B,EAAsC02B,MAAtC;AACA1mB,cAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;AAEA;AAED;AAED;AAED;;AAED;;AAEA,MAAKmgC,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AAEA;;AAED+6D,kBAAkBtmF,SAAlB,GAA8BC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAA9B;AACAsmF,kBAAkBtmF,SAAlB,CAA4B0O,WAA5B,GAA0C43E,iBAA1C;;AAEA;;;;;;;;AAQA;;AAEA,SAASK,kBAAT,CAA6BC,IAA7B,EAAmCC,MAAnC,EAA2CC,MAA3C,EAAoD;;AAEnDl8C,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,oBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBi+C,QAAMA,IADW;AAEjBC,UAAQA,MAFS;AAGjBC,UAAQA;AAHS,EAAlB;;AAMA,MAAK56C,kBAAL,CAAyB,IAAI66C,wBAAJ,CAA8BH,IAA9B,EAAoCC,MAApC,EAA4CC,MAA5C,CAAzB;AACA,MAAK33C,aAAL;AAEA;;AAEDw3C,mBAAmB3mF,SAAnB,GAA+BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA/B;AACA2mF,mBAAmB3mF,SAAnB,CAA6B0O,WAA7B,GAA2Ci4E,kBAA3C;;AAEA;;AAEA,SAASI,wBAAT,CAAmCH,IAAnC,EAAyCC,MAAzC,EAAiDC,MAAjD,EAA0D;;AAEzD5yC,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,0BAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBi+C,QAAMA,IADW;AAEjBC,UAAQA,MAFS;AAGjBC,UAAQA;AAHS,EAAlB;;AAMA;;AAEA,KAAI36C,UAAU,EAAd;AACA,KAAI5gB,WAAW,EAAf;AACA,KAAI8gB,UAAU,EAAd;AACA,KAAIC,MAAM,EAAV;;AAEA,KAAI1sB,MAAM,OAAV;;AAEA,KAAIoD,SAAS,IAAI1O,OAAJ,EAAb;;AAEA,KAAI2Y,KAAK,IAAI3Y,OAAJ,EAAT;AAAA,KAAwB4Y,KAAK,IAAI5Y,OAAJ,EAA7B;AACA,KAAI0yE,KAAK,IAAI1yE,OAAJ,EAAT;AAAA,KAAwB2yE,KAAK,IAAI3yE,OAAJ,EAA7B;;AAEA,KAAIrS,CAAJ,EAAO+qB,CAAP;;AAEA;;AAEA,KAAIk6D,aAAaL,SAAS,CAA1B;;AAEA,MAAM5kF,IAAI,CAAV,EAAaA,KAAK6kF,MAAlB,EAA0B7kF,GAA1B,EAAiC;;AAEhC,MAAI2M,IAAI3M,IAAI6kF,MAAZ;;AAEA,OAAM95D,IAAI,CAAV,EAAaA,KAAK65D,MAAlB,EAA0B75D,GAA1B,EAAiC;;AAEhC,OAAI2L,IAAI3L,IAAI65D,MAAZ;;AAEA;;AAEAD,QAAMjuD,CAAN,EAAS/pB,CAAT,EAAYqe,EAAZ;AACA1B,YAAS/pB,IAAT,CAAeyrB,GAAGntB,CAAlB,EAAqBmtB,GAAGvgB,CAAxB,EAA2BugB,GAAG7Y,CAA9B;;AAEA;;AAEA;;AAEA,OAAKukB,IAAI/Y,GAAJ,IAAW,CAAhB,EAAoB;;AAEnBgnE,SAAMjuD,IAAI/Y,GAAV,EAAehR,CAAf,EAAkBse,EAAlB;AACA85D,OAAGx3E,UAAH,CAAeyd,EAAf,EAAmBC,EAAnB;AAEA,IALD,MAKO;;AAEN05D,SAAMjuD,IAAI/Y,GAAV,EAAehR,CAAf,EAAkBse,EAAlB;AACA85D,OAAGx3E,UAAH,CAAe0d,EAAf,EAAmBD,EAAnB;AAEA;;AAED,OAAKre,IAAIgR,GAAJ,IAAW,CAAhB,EAAoB;;AAEnBgnE,SAAMjuD,CAAN,EAAS/pB,IAAIgR,GAAb,EAAkBsN,EAAlB;AACA+5D,OAAGz3E,UAAH,CAAeyd,EAAf,EAAmBC,EAAnB;AAEA,IALD,MAKO;;AAEN05D,SAAMjuD,CAAN,EAAS/pB,IAAIgR,GAAb,EAAkBsN,EAAlB;AACA+5D,OAAGz3E,UAAH,CAAe0d,EAAf,EAAmBD,EAAnB;AAEA;;AAED;;AAEAjK,UAAO/L,YAAP,CAAqB+vE,EAArB,EAAyBC,EAAzB,EAA8Bp2E,SAA9B;AACAw7B,WAAQ7qC,IAAR,CAAcwhB,OAAOljB,CAArB,EAAwBkjB,OAAOtW,CAA/B,EAAkCsW,OAAO5O,CAAzC;;AAEA;;AAEAk4B,OAAI9qC,IAAJ,CAAUm3B,CAAV,EAAa/pB,CAAb;AAEA;AAED;;AAED;;AAEA,MAAM3M,IAAI,CAAV,EAAaA,IAAI6kF,MAAjB,EAAyB7kF,GAAzB,EAAgC;;AAE/B,OAAM+qB,IAAI,CAAV,EAAaA,IAAI65D,MAAjB,EAAyB75D,GAAzB,EAAgC;;AAE/B,OAAI5d,IAAInN,IAAIilF,UAAJ,GAAiBl6D,CAAzB;AACA,OAAI3d,IAAIpN,IAAIilF,UAAJ,GAAiBl6D,CAAjB,GAAqB,CAA7B;AACA,OAAI5a,IAAI,CAAEnQ,IAAI,CAAN,IAAYilF,UAAZ,GAAyBl6D,CAAzB,GAA6B,CAArC;AACA,OAAInY,IAAI,CAAE5S,IAAI,CAAN,IAAYilF,UAAZ,GAAyBl6D,CAAjC;;AAEA;;AAEAmf,WAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBwF,CAApB;AACAs3B,WAAQ3qC,IAAR,CAAc6N,CAAd,EAAiB+C,CAAjB,EAAoByC,CAApB;AAEA;AAED;;AAED;;AAEA,MAAKy/B,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B9G,OAA5B,EAAqC,CAArC,CAA7B;AACA,MAAKkI,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;AAEA;;AAEDy6C,yBAAyB/mF,SAAzB,GAAqCC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAArC;AACA+mF,yBAAyB/mF,SAAzB,CAAmC0O,WAAnC,GAAiDq4E,wBAAjD;;AAEA;;;;;;;AAOA;;AAEA,SAASI,kBAAT,CAA6B57D,QAA7B,EAAuC4gB,OAAvC,EAAgD5oB,MAAhD,EAAwD6jE,MAAxD,EAAiE;;AAEhEx8C,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,oBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBpd,YAAUA,QADO;AAEjB4gB,WAASA,OAFQ;AAGjB5oB,UAAQA,MAHS;AAIjB6jE,UAAQA;AAJS,EAAlB;;AAOA,MAAKl7C,kBAAL,CAAyB,IAAIm7C,wBAAJ,CAA8B97D,QAA9B,EAAwC4gB,OAAxC,EAAiD5oB,MAAjD,EAAyD6jE,MAAzD,CAAzB;AACA,MAAKj4C,aAAL;AAEA;;AAEDg4C,mBAAmBnnF,SAAnB,GAA+BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA/B;AACAmnF,mBAAmBnnF,SAAnB,CAA6B0O,WAA7B,GAA2Cy4E,kBAA3C;;AAEA;;AAEA,SAASE,wBAAT,CAAmC97D,QAAnC,EAA6C4gB,OAA7C,EAAsD5oB,MAAtD,EAA8D6jE,MAA9D,EAAuE;;AAEtElzC,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,0BAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBpd,YAAUA,QADO;AAEjB4gB,WAASA,OAFQ;AAGjB5oB,UAAQA,MAHS;AAIjB6jE,UAAQA;AAJS,EAAlB;;AAOA7jE,UAASA,UAAU,CAAnB;AACA6jE,UAASA,UAAU,CAAnB;;AAEA;;AAEA,KAAIrnB,eAAe,EAAnB;AACA,KAAIunB,WAAW,EAAf;;AAEA;;AAEAC,WAAWH,MAAX;;AAEA;;AAEAI,cAAcjkE,MAAd;;AAEA;;AAEAkkE;;AAEA;;AAEA,MAAKlzC,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B4sB,YAA5B,EAA0C,CAA1C,CAA/B;AACA,MAAKxrB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B4sB,aAAa/9D,KAAb,EAA5B,EAAkD,CAAlD,CAA7B;AACA,MAAKuyC,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4Bm0C,QAA5B,EAAsC,CAAtC,CAAzB;;AAEA,KAAKF,WAAW,CAAhB,EAAoB;;AAEnB,OAAK95C,oBAAL,GAFmB,CAEU;AAE7B,EAJD,MAIO;;AAEN,OAAKmI,gBAAL,GAFM,CAEmB;AAEzB;;AAED;;AAEA,UAAS8xC,SAAT,CAAoBH,MAApB,EAA6B;;AAE5B,MAAIh4E,IAAI,IAAIkF,OAAJ,EAAR;AACA,MAAIjF,IAAI,IAAIiF,OAAJ,EAAR;AACA,MAAIlC,IAAI,IAAIkC,OAAJ,EAAR;;AAEA;;AAEA,OAAM,IAAIrS,IAAI,CAAd,EAAiBA,IAAIkqC,QAAQvrC,MAA7B,EAAqCqB,KAAK,CAA1C,EAA8C;;AAE7C;;AAEAylF,oBAAkBv7C,QAASlqC,IAAI,CAAb,CAAlB,EAAoCmN,CAApC;AACAs4E,oBAAkBv7C,QAASlqC,IAAI,CAAb,CAAlB,EAAoCoN,CAApC;AACAq4E,oBAAkBv7C,QAASlqC,IAAI,CAAb,CAAlB,EAAoCmQ,CAApC;;AAEA;;AAEAu1E,iBAAev4E,CAAf,EAAkBC,CAAlB,EAAqB+C,CAArB,EAAwBg1E,MAAxB;AAEA;AAED;;AAED,UAASO,aAAT,CAAwBv4E,CAAxB,EAA2BC,CAA3B,EAA8B+C,CAA9B,EAAiCg1E,MAAjC,EAA0C;;AAEzC,MAAIQ,OAAOroF,KAAKC,GAAL,CAAU,CAAV,EAAa4nF,MAAb,CAAX;;AAEA;;AAEA,MAAIx4E,IAAI,EAAR;;AAEA,MAAI3M,CAAJ,EAAO+qB,CAAP;;AAEA;;AAEA,OAAM/qB,IAAI,CAAV,EAAaA,KAAK2lF,IAAlB,EAAwB3lF,GAAxB,EAA+B;;AAE9B2M,KAAG3M,CAAH,IAAS,EAAT;;AAEA,OAAI4lF,KAAKz4E,EAAEX,KAAF,GAAUhC,IAAV,CAAgB2F,CAAhB,EAAmBnQ,IAAI2lF,IAAvB,CAAT;AACA,OAAIE,KAAKz4E,EAAEZ,KAAF,GAAUhC,IAAV,CAAgB2F,CAAhB,EAAmBnQ,IAAI2lF,IAAvB,CAAT;;AAEA,OAAIG,OAAOH,OAAO3lF,CAAlB;;AAEA,QAAM+qB,IAAI,CAAV,EAAaA,KAAK+6D,IAAlB,EAAwB/6D,GAAxB,EAA+B;;AAE9B,QAAKA,MAAM,CAAN,IAAW/qB,MAAM2lF,IAAtB,EAA6B;;AAE5Bh5E,OAAG3M,CAAH,EAAQ+qB,CAAR,IAAc66D,EAAd;AAEA,KAJD,MAIO;;AAENj5E,OAAG3M,CAAH,EAAQ+qB,CAAR,IAAc66D,GAAGp5E,KAAH,GAAWhC,IAAX,CAAiBq7E,EAAjB,EAAqB96D,IAAI+6D,IAAzB,CAAd;AAEA;AAED;AAED;;AAED;;AAEA,OAAM9lF,IAAI,CAAV,EAAaA,IAAI2lF,IAAjB,EAAuB3lF,GAAvB,EAA8B;;AAE7B,QAAM+qB,IAAI,CAAV,EAAaA,IAAI,KAAM46D,OAAO3lF,CAAb,IAAmB,CAApC,EAAuC+qB,GAAvC,EAA8C;;AAE7C,QAAIkkB,IAAI3xC,KAAKK,KAAL,CAAYotB,IAAI,CAAhB,CAAR;;AAEA,QAAKA,IAAI,CAAJ,KAAU,CAAf,EAAmB;;AAElBg7D,gBAAYp5E,EAAG3M,CAAH,EAAQivC,IAAI,CAAZ,CAAZ;AACA82C,gBAAYp5E,EAAG3M,IAAI,CAAP,EAAYivC,CAAZ,CAAZ;AACA82C,gBAAYp5E,EAAG3M,CAAH,EAAQivC,CAAR,CAAZ;AAEA,KAND,MAMO;;AAEN82C,gBAAYp5E,EAAG3M,CAAH,EAAQivC,IAAI,CAAZ,CAAZ;AACA82C,gBAAYp5E,EAAG3M,IAAI,CAAP,EAAYivC,IAAI,CAAhB,CAAZ;AACA82C,gBAAYp5E,EAAG3M,IAAI,CAAP,EAAYivC,CAAZ,CAAZ;AAEA;AAED;AAED;AAED;;AAED,UAASs2C,YAAT,CAAuBjkE,MAAvB,EAAgC;;AAE/B,MAAIsoB,SAAS,IAAIv3B,OAAJ,EAAb;;AAEA;;AAEA,OAAM,IAAIrS,IAAI,CAAd,EAAiBA,IAAI89D,aAAan/D,MAAlC,EAA0CqB,KAAK,CAA/C,EAAmD;;AAElD4pC,UAAO/rC,CAAP,GAAWigE,aAAc99D,IAAI,CAAlB,CAAX;AACA4pC,UAAOn/B,CAAP,GAAWqzD,aAAc99D,IAAI,CAAlB,CAAX;AACA4pC,UAAOz3B,CAAP,GAAW2rD,aAAc99D,IAAI,CAAlB,CAAX;;AAEA4pC,UAAOh7B,SAAP,GAAmBlB,cAAnB,CAAmC4T,MAAnC;;AAEAw8C,gBAAc99D,IAAI,CAAlB,IAAwB4pC,OAAO/rC,CAA/B;AACAigE,gBAAc99D,IAAI,CAAlB,IAAwB4pC,OAAOn/B,CAA/B;AACAqzD,gBAAc99D,IAAI,CAAlB,IAAwB4pC,OAAOz3B,CAA/B;AAEA;AAED;;AAED,UAASqzE,WAAT,GAAuB;;AAEtB,MAAI57C,SAAS,IAAIv3B,OAAJ,EAAb;;AAEA,OAAM,IAAIrS,IAAI,CAAd,EAAiBA,IAAI89D,aAAan/D,MAAlC,EAA0CqB,KAAK,CAA/C,EAAmD;;AAElD4pC,UAAO/rC,CAAP,GAAWigE,aAAc99D,IAAI,CAAlB,CAAX;AACA4pC,UAAOn/B,CAAP,GAAWqzD,aAAc99D,IAAI,CAAlB,CAAX;AACA4pC,UAAOz3B,CAAP,GAAW2rD,aAAc99D,IAAI,CAAlB,CAAX;;AAEA,OAAI02B,IAAIsvD,QAASp8C,MAAT,IAAoB,CAApB,GAAwBtsC,KAAK4L,EAA7B,GAAkC,GAA1C;AACA,OAAIyD,IAAIs5E,YAAar8C,MAAb,IAAwBtsC,KAAK4L,EAA7B,GAAkC,GAA1C;AACAm8E,YAAS9lF,IAAT,CAAem3B,CAAf,EAAkB,IAAI/pB,CAAtB;AAEA;;AAEDu5E;;AAEAC;AAEA;;AAED,UAASA,WAAT,GAAuB;;AAEtB;;AAEA,OAAM,IAAInmF,IAAI,CAAd,EAAiBA,IAAIqlF,SAAS1mF,MAA9B,EAAsCqB,KAAK,CAA3C,EAA+C;;AAE9C;;AAEA,OAAIwb,KAAK6pE,SAAUrlF,IAAI,CAAd,CAAT;AACA,OAAI4b,KAAKypE,SAAUrlF,IAAI,CAAd,CAAT;AACA,OAAIiU,KAAKoxE,SAAUrlF,IAAI,CAAd,CAAT;;AAEA,OAAI+J,MAAMzM,KAAKyM,GAAL,CAAUyR,EAAV,EAAcI,EAAd,EAAkB3H,EAAlB,CAAV;AACA,OAAInK,MAAMxM,KAAKwM,GAAL,CAAU0R,EAAV,EAAcI,EAAd,EAAkB3H,EAAlB,CAAV;;AAEA;;AAEA,OAAKlK,MAAM,GAAN,IAAaD,MAAM,GAAxB,EAA8B;;AAE7B,QAAK0R,KAAK,GAAV,EAAgB6pE,SAAUrlF,IAAI,CAAd,KAAqB,CAArB;AAChB,QAAK4b,KAAK,GAAV,EAAgBypE,SAAUrlF,IAAI,CAAd,KAAqB,CAArB;AAChB,QAAKiU,KAAK,GAAV,EAAgBoxE,SAAUrlF,IAAI,CAAd,KAAqB,CAArB;AAEhB;AAED;AAED;;AAED,UAAS+lF,UAAT,CAAqBn8C,MAArB,EAA8B;;AAE7Bk0B,eAAav+D,IAAb,CAAmBqqC,OAAO/rC,CAA1B,EAA6B+rC,OAAOn/B,CAApC,EAAuCm/B,OAAOz3B,CAA9C;AAEA;;AAED,UAASszE,gBAAT,CAA2BhnF,KAA3B,EAAkCmrC,MAAlC,EAA2C;;AAE1C,MAAI0wC,SAAS77E,QAAQ,CAArB;;AAEAmrC,SAAO/rC,CAAP,GAAWyrB,SAAUgxD,SAAS,CAAnB,CAAX;AACA1wC,SAAOn/B,CAAP,GAAW6e,SAAUgxD,SAAS,CAAnB,CAAX;AACA1wC,SAAOz3B,CAAP,GAAWmX,SAAUgxD,SAAS,CAAnB,CAAX;AAEA;;AAED,UAAS4L,UAAT,GAAsB;;AAErB,MAAI/4E,IAAI,IAAIkF,OAAJ,EAAR;AACA,MAAIjF,IAAI,IAAIiF,OAAJ,EAAR;AACA,MAAIlC,IAAI,IAAIkC,OAAJ,EAAR;;AAEA,MAAI+zE,WAAW,IAAI/zE,OAAJ,EAAf;;AAEA,MAAI4sC,MAAM,IAAIpzC,OAAJ,EAAV;AACA,MAAIqzC,MAAM,IAAIrzC,OAAJ,EAAV;AACA,MAAIszC,MAAM,IAAItzC,OAAJ,EAAV;;AAEA,OAAM,IAAI7L,IAAI,CAAR,EAAW+qB,IAAI,CAArB,EAAwB/qB,IAAI89D,aAAan/D,MAAzC,EAAiDqB,KAAK,CAAL,EAAQ+qB,KAAK,CAA9D,EAAkE;;AAEjE5d,KAAEpB,GAAF,CAAO+xD,aAAc99D,IAAI,CAAlB,CAAP,EAA8B89D,aAAc99D,IAAI,CAAlB,CAA9B,EAAqD89D,aAAc99D,IAAI,CAAlB,CAArD;AACAoN,KAAErB,GAAF,CAAO+xD,aAAc99D,IAAI,CAAlB,CAAP,EAA8B89D,aAAc99D,IAAI,CAAlB,CAA9B,EAAqD89D,aAAc99D,IAAI,CAAlB,CAArD;AACAmQ,KAAEpE,GAAF,CAAO+xD,aAAc99D,IAAI,CAAlB,CAAP,EAA8B89D,aAAc99D,IAAI,CAAlB,CAA9B,EAAqD89D,aAAc99D,IAAI,CAAlB,CAArD;;AAEAi/C,OAAIlzC,GAAJ,CAASs5E,SAAUt6D,IAAI,CAAd,CAAT,EAA4Bs6D,SAAUt6D,IAAI,CAAd,CAA5B;AACAm0B,OAAInzC,GAAJ,CAASs5E,SAAUt6D,IAAI,CAAd,CAAT,EAA4Bs6D,SAAUt6D,IAAI,CAAd,CAA5B;AACAo0B,OAAIpzC,GAAJ,CAASs5E,SAAUt6D,IAAI,CAAd,CAAT,EAA4Bs6D,SAAUt6D,IAAI,CAAd,CAA5B;;AAEAq7D,YAAS15E,IAAT,CAAeS,CAAf,EAAmBP,GAAnB,CAAwBQ,CAAxB,EAA4BR,GAA5B,CAAiCuD,CAAjC,EAAqCvC,YAArC,CAAmD,CAAnD;;AAEA,OAAIy4E,MAAML,QAASI,QAAT,CAAV;;AAEAE,aAAWrnC,GAAX,EAAgBl0B,IAAI,CAApB,EAAuB5d,CAAvB,EAA0Bk5E,GAA1B;AACAC,aAAWpnC,GAAX,EAAgBn0B,IAAI,CAApB,EAAuB3d,CAAvB,EAA0Bi5E,GAA1B;AACAC,aAAWnnC,GAAX,EAAgBp0B,IAAI,CAApB,EAAuB5a,CAAvB,EAA0Bk2E,GAA1B;AAEA;AAED;;AAED,UAASC,SAAT,CAAoB7gE,EAApB,EAAwB60D,MAAxB,EAAgC7gE,MAAhC,EAAwCusE,OAAxC,EAAkD;;AAEjD,MAAOA,UAAU,CAAZ,IAAqBvgE,GAAG5nB,CAAH,KAAS,CAAnC,EAAyC;;AAExCwnF,YAAU/K,MAAV,IAAqB70D,GAAG5nB,CAAH,GAAO,CAA5B;AAEA;;AAED,MAAO4b,OAAO5b,CAAP,KAAa,CAAf,IAAwB4b,OAAOtH,CAAP,KAAa,CAA1C,EAAgD;;AAE/CkzE,YAAU/K,MAAV,IAAqB0L,UAAU,CAAV,GAAc1oF,KAAK4L,EAAnB,GAAwB,GAA7C;AAEA;AAED;;AAED;;AAEA,UAAS88E,OAAT,CAAkBvsE,MAAlB,EAA2B;;AAE1B,SAAOnc,KAAKwR,KAAL,CAAY2K,OAAOtH,CAAnB,EAAsB,CAAEsH,OAAO5b,CAA/B,CAAP;AAEA;;AAGD;;AAEA,UAASooF,WAAT,CAAsBxsE,MAAtB,EAA+B;;AAE9B,SAAOnc,KAAKwR,KAAL,CAAY,CAAE2K,OAAOhP,CAArB,EAAwBnN,KAAKmR,IAAL,CAAagL,OAAO5b,CAAP,GAAW4b,OAAO5b,CAApB,GAA4B4b,OAAOtH,CAAP,GAAWsH,OAAOtH,CAAzD,CAAxB,CAAP;AAEA;AAED;;AAEDizE,yBAAyBrnF,SAAzB,GAAqCC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAArC;AACAqnF,yBAAyBrnF,SAAzB,CAAmC0O,WAAnC,GAAiD24E,wBAAjD;;AAEA;;;;;AAKA;;AAEA,SAASmB,mBAAT,CAA8BjlE,MAA9B,EAAsC6jE,MAAtC,EAA+C;;AAE9Cx8C,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,qBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB6jE,UAAQA;AAFS,EAAlB;;AAKA,MAAKl7C,kBAAL,CAAyB,IAAIu8C,yBAAJ,CAA+BllE,MAA/B,EAAuC6jE,MAAvC,CAAzB;AACA,MAAKj4C,aAAL;AAEA;;AAEDq5C,oBAAoBxoF,SAApB,GAAgCC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAAhC;AACAwoF,oBAAoBxoF,SAApB,CAA8B0O,WAA9B,GAA4C85E,mBAA5C;;AAEA;;AAEA,SAASC,yBAAT,CAAoCllE,MAApC,EAA4C6jE,MAA5C,EAAqD;;AAEpD,KAAI77D,WAAW,CACd,CADc,EACX,CADW,EACR,CADQ,EACJ,CAAE,CADE,EACC,CAAE,CADH,EACM,CADN,EACU,CAAE,CADZ,EACe,CADf,EACkB,CAAE,CADpB,EACwB,CADxB,EAC2B,CAAE,CAD7B,EACgC,CAAE,CADlC,CAAf;;AAIA,KAAI4gB,UAAU,CACb,CADa,EACV,CADU,EACP,CADO,EACH,CADG,EACA,CADA,EACG,CADH,EACM,CADN,EACS,CADT,EACY,CADZ,EACe,CADf,EACkB,CADlB,EACqB,CADrB,CAAd;;AAIAk7C,0BAAyBrmF,IAAzB,CAA+B,IAA/B,EAAqCuqB,QAArC,EAA+C4gB,OAA/C,EAAwD5oB,MAAxD,EAAgE6jE,MAAhE;;AAEA,MAAKjmF,IAAL,GAAY,2BAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB6jE,UAAQA;AAFS,EAAlB;AAKA;;AAEDqB,0BAA0BzoF,SAA1B,GAAsCC,OAAO8lB,MAAP,CAAeshE,yBAAyBrnF,SAAxC,CAAtC;AACAyoF,0BAA0BzoF,SAA1B,CAAoC0O,WAApC,GAAkD+5E,yBAAlD;;AAEA;;;;;AAKA;;AAEA,SAASC,kBAAT,CAA6BnlE,MAA7B,EAAqC6jE,MAArC,EAA8C;;AAE7Cx8C,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,oBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB6jE,UAAQA;AAFS,EAAlB;;AAKA,MAAKl7C,kBAAL,CAAyB,IAAIy8C,wBAAJ,CAA8BplE,MAA9B,EAAsC6jE,MAAtC,CAAzB;AACA,MAAKj4C,aAAL;AAEA;;AAEDu5C,mBAAmB1oF,SAAnB,GAA+BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA/B;AACA0oF,mBAAmB1oF,SAAnB,CAA6B0O,WAA7B,GAA2Cg6E,kBAA3C;;AAEA;;AAEA,SAASC,wBAAT,CAAmCplE,MAAnC,EAA2C6jE,MAA3C,EAAoD;;AAEnD,KAAI77D,WAAW,CACd,CADc,EACX,CADW,EACR,CADQ,EACJ,CAAE,CADE,EACC,CADD,EACI,CADJ,EACO,CADP,EACU,CADV,EACa,CADb,EAEd,CAFc,EAEX,CAAE,CAFS,EAEN,CAFM,EAEF,CAFE,EAEC,CAFD,EAEI,CAFJ,EAEO,CAFP,EAEU,CAFV,EAEa,CAAE,CAFf,CAAf;;AAKA,KAAI4gB,UAAU,CACb,CADa,EACV,CADU,EACP,CADO,EACJ,CADI,EACD,CADC,EACE,CADF,EACK,CADL,EACQ,CADR,EACW,CADX,EAEb,CAFa,EAEV,CAFU,EAEP,CAFO,EAEJ,CAFI,EAED,CAFC,EAEE,CAFF,EAEK,CAFL,EAEQ,CAFR,EAEW,CAFX,EAGb,CAHa,EAGV,CAHU,EAGP,CAHO,EAGJ,CAHI,EAGD,CAHC,EAGE,CAHF,CAAd;;AAMAk7C,0BAAyBrmF,IAAzB,CAA+B,IAA/B,EAAqCuqB,QAArC,EAA+C4gB,OAA/C,EAAwD5oB,MAAxD,EAAgE6jE,MAAhE;;AAEA,MAAKjmF,IAAL,GAAY,0BAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB6jE,UAAQA;AAFS,EAAlB;AAKA;;AAEDuB,yBAAyB3oF,SAAzB,GAAqCC,OAAO8lB,MAAP,CAAeshE,yBAAyBrnF,SAAxC,CAArC;AACA2oF,yBAAyB3oF,SAAzB,CAAmC0O,WAAnC,GAAiDi6E,wBAAjD;;AAEA;;;;;AAKA;;AAEA,SAASC,mBAAT,CAA8BrlE,MAA9B,EAAsC6jE,MAAtC,EAA+C;;AAE9Cx8C,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,qBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB6jE,UAAQA;AAFS,EAAlB;;AAKA,MAAKl7C,kBAAL,CAAyB,IAAI28C,yBAAJ,CAA+BtlE,MAA/B,EAAuC6jE,MAAvC,CAAzB;AACA,MAAKj4C,aAAL;AAEA;;AAEDy5C,oBAAoB5oF,SAApB,GAAgCC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAAhC;AACA4oF,oBAAoB5oF,SAApB,CAA8B0O,WAA9B,GAA4Ck6E,mBAA5C;;AAEA;;AAEA,SAASC,yBAAT,CAAoCtlE,MAApC,EAA4C6jE,MAA5C,EAAqD;;AAEpD,KAAIz6E,IAAI,CAAE,IAAIpN,KAAKmR,IAAL,CAAW,CAAX,CAAN,IAAyB,CAAjC;;AAEA,KAAI6a,WAAW,CACd,CAAE,CADY,EACT5e,CADS,EACN,CADM,EACF,CADE,EACCA,CADD,EACI,CADJ,EACQ,CAAE,CADV,EACa,CAAEA,CADf,EACkB,CADlB,EACsB,CADtB,EACyB,CAAEA,CAD3B,EAC8B,CAD9B,EAEb,CAFa,EAEV,CAAE,CAFQ,EAELA,CAFK,EAED,CAFC,EAEE,CAFF,EAEKA,CAFL,EAEQ,CAFR,EAEW,CAAE,CAFb,EAEgB,CAAEA,CAFlB,EAEsB,CAFtB,EAEyB,CAFzB,EAE4B,CAAEA,CAF9B,EAGbA,CAHa,EAGV,CAHU,EAGP,CAAE,CAHK,EAGDA,CAHC,EAGE,CAHF,EAGK,CAHL,EAGS,CAAEA,CAHX,EAGc,CAHd,EAGiB,CAAE,CAHnB,EAGuB,CAAEA,CAHzB,EAG4B,CAH5B,EAG+B,CAH/B,CAAf;;AAMA,KAAIw/B,UAAU,CACZ,CADY,EACT,EADS,EACL,CADK,EACD,CADC,EACE,CADF,EACK,CADL,EACS,CADT,EACY,CADZ,EACe,CADf,EACmB,CADnB,EACsB,CADtB,EACyB,EADzB,EAC8B,CAD9B,EACiC,EADjC,EACqC,EADrC,EAEZ,CAFY,EAET,CAFS,EAEN,CAFM,EAEF,CAFE,EAEC,EAFD,EAEK,CAFL,EAEQ,EAFR,EAEY,EAFZ,EAEgB,CAFhB,EAEmB,EAFnB,EAEuB,CAFvB,EAE0B,CAF1B,EAE6B,CAF7B,EAEgC,CAFhC,EAEmC,CAFnC,EAGZ,CAHY,EAGT,CAHS,EAGN,CAHM,EAGF,CAHE,EAGC,CAHD,EAGI,CAHJ,EAGO,CAHP,EAGU,CAHV,EAGa,CAHb,EAGgB,CAHhB,EAGmB,CAHnB,EAGsB,CAHtB,EAGyB,CAHzB,EAG4B,CAH5B,EAG+B,CAH/B,EAIZ,CAJY,EAIT,CAJS,EAIN,CAJM,EAIF,CAJE,EAIC,CAJD,EAII,EAJJ,EAIQ,CAJR,EAIW,CAJX,EAIc,EAJd,EAIkB,CAJlB,EAIqB,CAJrB,EAIwB,CAJxB,EAI2B,CAJ3B,EAI8B,CAJ9B,EAIiC,CAJjC,CAAd;;AAOAk7C,0BAAyBrmF,IAAzB,CAA+B,IAA/B,EAAqCuqB,QAArC,EAA+C4gB,OAA/C,EAAwD5oB,MAAxD,EAAgE6jE,MAAhE;;AAEA,MAAKjmF,IAAL,GAAY,2BAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB6jE,UAAQA;AAFS,EAAlB;AAKA;;AAEDyB,0BAA0B7oF,SAA1B,GAAsCC,OAAO8lB,MAAP,CAAeshE,yBAAyBrnF,SAAxC,CAAtC;AACA6oF,0BAA0B7oF,SAA1B,CAAoC0O,WAApC,GAAkDm6E,yBAAlD;;AAEA;;;;;AAKA;;AAEA,SAASC,oBAAT,CAA+BvlE,MAA/B,EAAuC6jE,MAAvC,EAAgD;;AAE/Cx8C,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,sBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB6jE,UAAQA;AAFS,EAAlB;;AAKA,MAAKl7C,kBAAL,CAAyB,IAAI68C,0BAAJ,CAAgCxlE,MAAhC,EAAwC6jE,MAAxC,CAAzB;AACA,MAAKj4C,aAAL;AAEA;;AAED25C,qBAAqB9oF,SAArB,GAAiCC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAAjC;AACA8oF,qBAAqB9oF,SAArB,CAA+B0O,WAA/B,GAA6Co6E,oBAA7C;;AAEA;;AAEA,SAASC,0BAAT,CAAqCxlE,MAArC,EAA6C6jE,MAA7C,EAAsD;;AAErD,KAAIz6E,IAAI,CAAE,IAAIpN,KAAKmR,IAAL,CAAW,CAAX,CAAN,IAAyB,CAAjC;AACA,KAAIiP,IAAI,IAAIhT,CAAZ;;AAEA,KAAI4e,WAAW;;AAEd;AACA,EAAE,CAHY,EAGT,CAAE,CAHO,EAGJ,CAAE,CAHE,EAGC,CAAE,CAHH,EAGM,CAAE,CAHR,EAGW,CAHX,EAId,CAAE,CAJY,EAIT,CAJS,EAIN,CAAE,CAJI,EAID,CAAE,CAJD,EAII,CAJJ,EAIO,CAJP,EAKd,CALc,EAKX,CAAE,CALS,EAKN,CAAE,CALI,EAKD,CALC,EAKE,CAAE,CALJ,EAKO,CALP,EAMd,CANc,EAMX,CANW,EAMR,CAAE,CANM,EAMH,CANG,EAMA,CANA,EAMG,CANH;;AAQd;AACC,EATa,EASV,CAAE5L,CATQ,EASL,CAAEhT,CATG,EASA,CATA,EASG,CAAEgT,CATL,EASQhT,CATR,EAUb,CAVa,EAUVgT,CAVU,EAUP,CAAEhT,CAVK,EAUF,CAVE,EAUCgT,CAVD,EAUIhT,CAVJ;;AAYd;AACA,EAAEgT,CAbY,EAaT,CAAEhT,CAbO,EAaJ,CAbI,EAaD,CAAEgT,CAbD,EAaIhT,CAbJ,EAaO,CAbP,EAcbgT,CAda,EAcV,CAAEhT,CAdQ,EAcL,CAdK,EAcFgT,CAdE,EAcChT,CAdD,EAcI,CAdJ;;AAgBd;AACA,EAAEA,CAjBY,EAiBT,CAjBS,EAiBN,CAAEgT,CAjBI,EAiBDhT,CAjBC,EAiBE,CAjBF,EAiBK,CAAEgT,CAjBP,EAkBd,CAAEhT,CAlBY,EAkBT,CAlBS,EAkBNgT,CAlBM,EAkBHhT,CAlBG,EAkBA,CAlBA,EAkBGgT,CAlBH,CAAf;;AAqBA,KAAIwsB,UAAU,CACb,CADa,EACV,EADU,EACN,CADM,EACF,CADE,EACC,CADD,EACI,EADJ,EACS,CADT,EACY,EADZ,EACgB,EADhB,EAEb,CAFa,EAEV,EAFU,EAEN,EAFM,EAED,CAFC,EAEE,EAFF,EAEM,CAFN,EAEU,CAFV,EAEa,CAFb,EAEgB,EAFhB,EAGb,EAHa,EAGT,CAHS,EAGN,CAHM,EAGF,EAHE,EAGE,CAHF,EAGK,EAHL,EAGU,EAHV,EAGc,EAHd,EAGkB,CAHlB,EAIb,CAJa,EAIV,CAJU,EAIP,EAJO,EAIF,CAJE,EAIC,EAJD,EAIK,CAJL,EAIS,CAJT,EAIY,CAJZ,EAIe,EAJf,EAKb,CALa,EAKV,EALU,EAKN,CALM,EAKF,CALE,EAKC,CALD,EAKI,EALJ,EAKS,CALT,EAKY,EALZ,EAKgB,EALhB,EAMb,CANa,EAMV,EANU,EAMN,CANM,EAMF,CANE,EAMC,CAND,EAMI,EANJ,EAMS,CANT,EAMY,EANZ,EAMgB,EANhB,EAOb,CAPa,EAOV,EAPU,EAON,EAPM,EAOD,CAPC,EAOE,EAPF,EAOM,CAPN,EAOU,CAPV,EAOa,CAPb,EAOgB,EAPhB,EAQb,EARa,EAQT,CARS,EAQN,CARM,EAQF,EARE,EAQE,CARF,EAQK,EARL,EAQU,EARV,EAQc,EARd,EAQkB,CARlB,EASb,CATa,EASV,EATU,EASN,EATM,EASD,CATC,EASE,EATF,EASM,CATN,EASU,CATV,EASa,CATb,EASgB,CAThB,EAUb,EAVa,EAUT,CAVS,EAUN,CAVM,EAUF,EAVE,EAUE,CAVF,EAUK,EAVL,EAUU,EAVV,EAUc,EAVd,EAUkB,CAVlB,EAWb,EAXa,EAWT,CAXS,EAWN,EAXM,EAWD,EAXC,EAWG,EAXH,EAWO,CAXP,EAWW,EAXX,EAWe,CAXf,EAWkB,EAXlB,EAYb,CAZa,EAYV,EAZU,EAYN,EAZM,EAYD,CAZC,EAYE,EAZF,EAYM,CAZN,EAYU,CAZV,EAYa,CAZb,EAYgB,CAZhB,CAAd;;AAeAk7C,0BAAyBrmF,IAAzB,CAA+B,IAA/B,EAAqCuqB,QAArC,EAA+C4gB,OAA/C,EAAwD5oB,MAAxD,EAAgE6jE,MAAhE;;AAEA,MAAKjmF,IAAL,GAAY,4BAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB6jE,UAAQA;AAFS,EAAlB;AAKA;;AAED2B,2BAA2B/oF,SAA3B,GAAuCC,OAAO8lB,MAAP,CAAeshE,yBAAyBrnF,SAAxC,CAAvC;AACA+oF,2BAA2B/oF,SAA3B,CAAqC0O,WAArC,GAAmDq6E,0BAAnD;;AAEA;;;;;;;;;;AAUA;;AAEA,SAASC,YAAT,CAAuB15B,IAAvB,EAA6B25B,eAA7B,EAA8C1lE,MAA9C,EAAsD2lE,cAAtD,EAAsEC,MAAtE,EAA8EC,KAA9E,EAAsF;;AAErFx+C,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,cAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjB2mB,QAAMA,IADW;AAEjB25B,mBAAiBA,eAFA;AAGjB1lE,UAAQA,MAHS;AAIjB2lE,kBAAgBA,cAJC;AAKjBC,UAAQA;AALS,EAAlB;;AAQA,KAAKC,UAAU9pF,SAAf,EAA2ByP,QAAQC,IAAR,CAAc,6CAAd;;AAE3B,KAAIq6E,iBAAiB,IAAIC,kBAAJ,CAAwBh6B,IAAxB,EAA8B25B,eAA9B,EAA+C1lE,MAA/C,EAAuD2lE,cAAvD,EAAuEC,MAAvE,CAArB;;AAEA;;AAEA,MAAKI,QAAL,GAAgBF,eAAeE,QAA/B;AACA,MAAKl9C,OAAL,GAAeg9C,eAAeh9C,OAA9B;AACA,MAAKm9C,SAAL,GAAiBH,eAAeG,SAAhC;;AAEA;;AAEA,MAAKt9C,kBAAL,CAAyBm9C,cAAzB;AACA,MAAKl6C,aAAL;AAEA;;AAED65C,aAAahpF,SAAb,GAAyBC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAAzB;AACAgpF,aAAahpF,SAAb,CAAuB0O,WAAvB,GAAqCs6E,YAArC;;AAEA;;AAEA,SAASM,kBAAT,CAA6Bh6B,IAA7B,EAAmC25B,eAAnC,EAAoD1lE,MAApD,EAA4D2lE,cAA5D,EAA4EC,MAA5E,EAAqF;;AAEpFj1C,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,oBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjB2mB,QAAMA,IADW;AAEjB25B,mBAAiBA,eAFA;AAGjB1lE,UAAQA,MAHS;AAIjB2lE,kBAAgBA,cAJC;AAKjBC,UAAQA;AALS,EAAlB;;AAQAF,mBAAkBA,mBAAmB,EAArC;AACA1lE,UAASA,UAAU,CAAnB;AACA2lE,kBAAiBA,kBAAkB,CAAnC;AACAC,UAASA,UAAU,KAAnB;;AAEA,KAAIM,SAASn6B,KAAKo6B,mBAAL,CAA0BT,eAA1B,EAA2CE,MAA3C,CAAb;;AAEA;;AAEA,MAAKI,QAAL,GAAgBE,OAAOF,QAAvB;AACA,MAAKl9C,OAAL,GAAeo9C,OAAOp9C,OAAtB;AACA,MAAKm9C,SAAL,GAAiBC,OAAOD,SAAxB;;AAEA;;AAEA,KAAI39C,SAAS,IAAIv3B,OAAJ,EAAb;AACA,KAAI0O,SAAS,IAAI1O,OAAJ,EAAb;AACA,KAAIoT,KAAK,IAAI5Z,OAAJ,EAAT;AACA,KAAI67E,IAAI,IAAIr1E,OAAJ,EAAR;;AAEA,KAAIrS,CAAJ,EAAO+qB,CAAP;;AAEA;;AAEA,KAAIzB,WAAW,EAAf;AACA,KAAI8gB,UAAU,EAAd;AACA,KAAIC,MAAM,EAAV;AACA,KAAIH,UAAU,EAAd;;AAEA;;AAEAy9C;;AAEA;;AAEA,MAAKt1C,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B9G,OAA5B,EAAqC,CAArC,CAA7B;AACA,MAAKkI,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;;AAEA;;AAEA,UAASs9C,kBAAT,GAA8B;;AAE7B,OAAM3nF,IAAI,CAAV,EAAaA,IAAIgnF,eAAjB,EAAkChnF,GAAlC,EAAyC;;AAExC4nF,mBAAiB5nF,CAAjB;AAEA;;AAED;AACA;AACA;AACA;;AAEA4nF,kBAAmBV,WAAW,KAAb,GAAuBF,eAAvB,GAAyC,CAA1D;;AAEA;AACA;;AAEAxB;;AAEA;;AAEAqC;AAEA;;AAED,UAASD,eAAT,CAA0B5nF,CAA1B,EAA8B;;AAE7B;;AAEA0nF,MAAIr6B,KAAKy6B,UAAL,CAAiB9nF,IAAIgnF,eAArB,EAAsCU,CAAtC,CAAJ;;AAEA;;AAEA,MAAIK,IAAIP,OAAOp9C,OAAP,CAAgBpqC,CAAhB,CAAR;AACA,MAAIgoF,IAAIR,OAAOD,SAAP,CAAkBvnF,CAAlB,CAAR;;AAEA;;AAEA,OAAM+qB,IAAI,CAAV,EAAaA,KAAKk8D,cAAlB,EAAkCl8D,GAAlC,EAAyC;;AAExC,OAAIpe,IAAIoe,IAAIk8D,cAAJ,GAAqB3pF,KAAK4L,EAA1B,GAA+B,CAAvC;;AAEA,OAAImH,MAAM/S,KAAK+S,GAAL,CAAU1D,CAAV,CAAV;AACA,OAAIyD,MAAM,CAAE9S,KAAK8S,GAAL,CAAUzD,CAAV,CAAZ;;AAEA;;AAEAoU,UAAOljB,CAAP,GAAauS,MAAM23E,EAAElqF,CAAR,GAAYwS,MAAM23E,EAAEnqF,CAAjC;AACAkjB,UAAOtW,CAAP,GAAa2F,MAAM23E,EAAEt9E,CAAR,GAAY4F,MAAM23E,EAAEv9E,CAAjC;AACAsW,UAAO5O,CAAP,GAAa/B,MAAM23E,EAAE51E,CAAR,GAAY9B,MAAM23E,EAAE71E,CAAjC;AACA4O,UAAOnS,SAAP;;AAEAw7B,WAAQ7qC,IAAR,CAAcwhB,OAAOljB,CAArB,EAAwBkjB,OAAOtW,CAA/B,EAAkCsW,OAAO5O,CAAzC;;AAEA;;AAEAy3B,UAAO/rC,CAAP,GAAW6pF,EAAE7pF,CAAF,GAAMyjB,SAASP,OAAOljB,CAAjC;AACA+rC,UAAOn/B,CAAP,GAAWi9E,EAAEj9E,CAAF,GAAM6W,SAASP,OAAOtW,CAAjC;AACAm/B,UAAOz3B,CAAP,GAAWu1E,EAAEv1E,CAAF,GAAMmP,SAASP,OAAO5O,CAAjC;;AAEAmX,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;AAEA;AAED;;AAED,UAAS01E,eAAT,GAA2B;;AAE1B,OAAM98D,IAAI,CAAV,EAAaA,KAAKi8D,eAAlB,EAAmCj8D,GAAnC,EAA0C;;AAEzC,QAAM/qB,IAAI,CAAV,EAAaA,KAAKinF,cAAlB,EAAkCjnF,GAAlC,EAAyC;;AAExC,QAAImN,IAAI,CAAE85E,iBAAiB,CAAnB,KAA2Bl8D,IAAI,CAA/B,KAAuC/qB,IAAI,CAA3C,CAAR;AACA,QAAIoN,IAAI,CAAE65E,iBAAiB,CAAnB,IAAyBl8D,CAAzB,IAA+B/qB,IAAI,CAAnC,CAAR;AACA,QAAImQ,IAAI,CAAE82E,iBAAiB,CAAnB,IAAyBl8D,CAAzB,GAA6B/qB,CAArC;AACA,QAAI4S,IAAI,CAAEq0E,iBAAiB,CAAnB,KAA2Bl8D,IAAI,CAA/B,IAAqC/qB,CAA7C;;AAEA;;AAEAkqC,YAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBwF,CAApB;AACAs3B,YAAQ3qC,IAAR,CAAc6N,CAAd,EAAiB+C,CAAjB,EAAoByC,CAApB;AAEA;AAED;AAED;;AAED,UAAS4yE,WAAT,GAAuB;;AAEtB,OAAMxlF,IAAI,CAAV,EAAaA,KAAKgnF,eAAlB,EAAmChnF,GAAnC,EAA0C;;AAEzC,QAAM+qB,IAAI,CAAV,EAAaA,KAAKk8D,cAAlB,EAAkCl8D,GAAlC,EAAyC;;AAExCtF,OAAG5nB,CAAH,GAAOmC,IAAIgnF,eAAX;AACAvhE,OAAGhb,CAAH,GAAOsgB,IAAIk8D,cAAX;;AAEA58C,QAAI9qC,IAAJ,CAAUkmB,GAAG5nB,CAAb,EAAgB4nB,GAAGhb,CAAnB;AAEA;AAED;AAED;AAED;;AAED48E,mBAAmBtpF,SAAnB,GAA+BC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAA/B;AACAspF,mBAAmBtpF,SAAnB,CAA6B0O,WAA7B,GAA2C46E,kBAA3C;;AAEA;;;;;;;AAOA;;AAEA,SAASY,iBAAT,CAA4B3mE,MAA5B,EAAoC4mE,IAApC,EAA0ClB,eAA1C,EAA2DC,cAA3D,EAA2EtsE,CAA3E,EAA8E/G,CAA9E,EAAiFu0E,WAAjF,EAA+F;;AAE9Fx/C,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,mBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB4mE,QAAMA,IAFW;AAGjBlB,mBAAiBA,eAHA;AAIjBC,kBAAgBA,cAJC;AAKjBtsE,KAAGA,CALc;AAMjB/G,KAAGA;AANc,EAAlB;;AASA,KAAKu0E,gBAAgB9qF,SAArB,EAAiCyP,QAAQC,IAAR,CAAc,0FAAd;;AAEjC,MAAKk9B,kBAAL,CAAyB,IAAIm+C,uBAAJ,CAA6B9mE,MAA7B,EAAqC4mE,IAArC,EAA2ClB,eAA3C,EAA4DC,cAA5D,EAA4EtsE,CAA5E,EAA+E/G,CAA/E,CAAzB;AACA,MAAKs5B,aAAL;AAEA;;AAED+6C,kBAAkBlqF,SAAlB,GAA8BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA9B;AACAkqF,kBAAkBlqF,SAAlB,CAA4B0O,WAA5B,GAA0Cw7E,iBAA1C;;AAEA;;AAEA,SAASG,uBAAT,CAAkC9mE,MAAlC,EAA0C4mE,IAA1C,EAAgDlB,eAAhD,EAAiEC,cAAjE,EAAiFtsE,CAAjF,EAAoF/G,CAApF,EAAwF;;AAEvFq+B,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,yBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB4mE,QAAMA,IAFW;AAGjBlB,mBAAiBA,eAHA;AAIjBC,kBAAgBA,cAJC;AAKjBtsE,KAAGA,CALc;AAMjB/G,KAAGA;AANc,EAAlB;;AASA0N,UAASA,UAAU,CAAnB;AACA4mE,QAAOA,QAAQ,GAAf;AACAlB,mBAAkB1pF,KAAKK,KAAL,CAAYqpF,eAAZ,KAAiC,EAAnD;AACAC,kBAAiB3pF,KAAKK,KAAL,CAAYspF,cAAZ,KAAgC,CAAjD;AACAtsE,KAAIA,KAAK,CAAT;AACA/G,KAAIA,KAAK,CAAT;;AAEA;;AAEA,KAAIs2B,UAAU,EAAd;AACA,KAAI5gB,WAAW,EAAf;AACA,KAAI8gB,UAAU,EAAd;AACA,KAAIC,MAAM,EAAV;;AAEA;;AAEA,KAAIrqC,CAAJ,EAAO+qB,CAAP;;AAEA,KAAI6e,SAAS,IAAIv3B,OAAJ,EAAb;AACA,KAAI0O,SAAS,IAAI1O,OAAJ,EAAb;;AAEA,KAAIg2E,KAAK,IAAIh2E,OAAJ,EAAT;AACA,KAAIi2E,KAAK,IAAIj2E,OAAJ,EAAT;;AAEA,KAAI21E,IAAI,IAAI31E,OAAJ,EAAR;AACA,KAAIk2E,IAAI,IAAIl2E,OAAJ,EAAR;AACA,KAAI01E,IAAI,IAAI11E,OAAJ,EAAR;;AAEA;;AAEA,MAAMrS,IAAI,CAAV,EAAaA,KAAKgnF,eAAlB,EAAmC,EAAGhnF,CAAtC,EAA0C;;AAEzC;;AAEA,MAAI02B,IAAI12B,IAAIgnF,eAAJ,GAAsBrsE,CAAtB,GAA0Brd,KAAK4L,EAA/B,GAAoC,CAA5C;;AAEA;AACA;;AAEAs/E,2BAA0B9xD,CAA1B,EAA6B/b,CAA7B,EAAgC/G,CAAhC,EAAmC0N,MAAnC,EAA2C+mE,EAA3C;AACAG,2BAA0B9xD,IAAI,IAA9B,EAAoC/b,CAApC,EAAuC/G,CAAvC,EAA0C0N,MAA1C,EAAkDgnE,EAAlD;;AAEA;;AAEAC,IAAEh7E,UAAF,CAAc+6E,EAAd,EAAkBD,EAAlB;AACAN,IAAE/6E,UAAF,CAAcs7E,EAAd,EAAkBD,EAAlB;AACAL,IAAEhzE,YAAF,CAAgBuzE,CAAhB,EAAmBR,CAAnB;AACAA,IAAE/yE,YAAF,CAAgBgzE,CAAhB,EAAmBO,CAAnB;;AAEA;;AAEAP,IAAEp5E,SAAF;AACAm5E,IAAEn5E,SAAF;;AAEA,OAAMmc,IAAI,CAAV,EAAaA,KAAKk8D,cAAlB,EAAkC,EAAGl8D,CAArC,EAAyC;;AAExC;AACA;;AAEA,OAAIpe,IAAIoe,IAAIk8D,cAAJ,GAAqB3pF,KAAK4L,EAA1B,GAA+B,CAAvC;AACA,OAAIiZ,KAAK,CAAE+lE,IAAF,GAAS5qF,KAAK8S,GAAL,CAAUzD,CAAV,CAAlB;AACA,OAAIyV,KAAK8lE,OAAO5qF,KAAK+S,GAAL,CAAU1D,CAAV,CAAhB;;AAEA;AACA;;AAEAi9B,UAAO/rC,CAAP,GAAWwqF,GAAGxqF,CAAH,IAASskB,KAAK4lE,EAAElqF,CAAP,GAAWukB,KAAK4lE,EAAEnqF,CAA3B,CAAX;AACA+rC,UAAOn/B,CAAP,GAAW49E,GAAG59E,CAAH,IAAS0X,KAAK4lE,EAAEt9E,CAAP,GAAW2X,KAAK4lE,EAAEv9E,CAA3B,CAAX;AACAm/B,UAAOz3B,CAAP,GAAWk2E,GAAGl2E,CAAH,IAASgQ,KAAK4lE,EAAE51E,CAAP,GAAWiQ,KAAK4lE,EAAE71E,CAA3B,CAAX;;AAEAmX,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEA;;AAEA4O,UAAOxT,UAAP,CAAmBq8B,MAAnB,EAA2By+C,EAA3B,EAAgCz5E,SAAhC;;AAEAw7B,WAAQ7qC,IAAR,CAAcwhB,OAAOljB,CAArB,EAAwBkjB,OAAOtW,CAA/B,EAAkCsW,OAAO5O,CAAzC;;AAEA;;AAEAk4B,OAAI9qC,IAAJ,CAAUS,IAAIgnF,eAAd;AACA38C,OAAI9qC,IAAJ,CAAUwrB,IAAIk8D,cAAd;AAEA;AAED;;AAED;;AAEA,MAAMl8D,IAAI,CAAV,EAAaA,KAAKi8D,eAAlB,EAAmCj8D,GAAnC,EAA0C;;AAEzC,OAAM/qB,IAAI,CAAV,EAAaA,KAAKinF,cAAlB,EAAkCjnF,GAAlC,EAAyC;;AAExC;;AAEA,OAAImN,IAAI,CAAE85E,iBAAiB,CAAnB,KAA2Bl8D,IAAI,CAA/B,KAAuC/qB,IAAI,CAA3C,CAAR;AACA,OAAIoN,IAAI,CAAE65E,iBAAiB,CAAnB,IAAyBl8D,CAAzB,IAA+B/qB,IAAI,CAAnC,CAAR;AACA,OAAImQ,IAAI,CAAE82E,iBAAiB,CAAnB,IAAyBl8D,CAAzB,GAA6B/qB,CAArC;AACA,OAAI4S,IAAI,CAAEq0E,iBAAiB,CAAnB,KAA2Bl8D,IAAI,CAA/B,IAAqC/qB,CAA7C;;AAEA;;AAEAkqC,WAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBwF,CAApB;AACAs3B,WAAQ3qC,IAAR,CAAc6N,CAAd,EAAiB+C,CAAjB,EAAoByC,CAApB;AAEA;AAED;;AAED;;AAEA,MAAKy/B,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B9G,OAA5B,EAAqC,CAArC,CAA7B;AACA,MAAKkI,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;;AAEA;;AAEA,UAASm+C,wBAAT,CAAmC9xD,CAAnC,EAAsC/b,CAAtC,EAAyC/G,CAAzC,EAA4C0N,MAA5C,EAAoDhI,QAApD,EAA+D;;AAE9D,MAAImvE,KAAKnrF,KAAK8S,GAAL,CAAUsmB,CAAV,CAAT;AACA,MAAIgyD,KAAKprF,KAAK+S,GAAL,CAAUqmB,CAAV,CAAT;AACA,MAAIiyD,UAAU/0E,IAAI+G,CAAJ,GAAQ+b,CAAtB;AACA,MAAIkyD,KAAKtrF,KAAK8S,GAAL,CAAUu4E,OAAV,CAAT;;AAEArvE,WAASzb,CAAT,GAAayjB,UAAW,IAAIsnE,EAAf,IAAsB,GAAtB,GAA4BH,EAAzC;AACAnvE,WAAS7O,CAAT,GAAa6W,UAAW,IAAIsnE,EAAf,IAAsBF,EAAtB,GAA2B,GAAxC;AACApvE,WAASnH,CAAT,GAAamP,SAAShkB,KAAK+S,GAAL,CAAUs4E,OAAV,CAAT,GAA+B,GAA5C;AAEA;AAED;;AAEDP,wBAAwBrqF,SAAxB,GAAoCC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAApC;AACAqqF,wBAAwBrqF,SAAxB,CAAkC0O,WAAlC,GAAgD27E,uBAAhD;;AAEA;;;;;;AAMA;;AAEA,SAASS,aAAT,CAAwBvnE,MAAxB,EAAgC4mE,IAAhC,EAAsCjB,cAAtC,EAAsDD,eAAtD,EAAuE8B,GAAvE,EAA6E;;AAE5EngD,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,eAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB4mE,QAAMA,IAFW;AAGjBjB,kBAAgBA,cAHC;AAIjBD,mBAAiBA,eAJA;AAKjB8B,OAAKA;AALY,EAAlB;;AAQA,MAAK7+C,kBAAL,CAAyB,IAAI8+C,mBAAJ,CAAyBznE,MAAzB,EAAiC4mE,IAAjC,EAAuCjB,cAAvC,EAAuDD,eAAvD,EAAwE8B,GAAxE,CAAzB;AACA,MAAK57C,aAAL;AAEA;;AAED27C,cAAc9qF,SAAd,GAA0BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA1B;AACA8qF,cAAc9qF,SAAd,CAAwB0O,WAAxB,GAAsCo8E,aAAtC;;AAEA;;AAEA,SAASE,mBAAT,CAA8BznE,MAA9B,EAAsC4mE,IAAtC,EAA4CjB,cAA5C,EAA4DD,eAA5D,EAA6E8B,GAA7E,EAAmF;;AAElF72C,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,qBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB4mE,QAAMA,IAFW;AAGjBjB,kBAAgBA,cAHC;AAIjBD,mBAAiBA,eAJA;AAKjB8B,OAAKA;AALY,EAAlB;;AAQAxnE,UAASA,UAAU,CAAnB;AACA4mE,QAAOA,QAAQ,GAAf;AACAjB,kBAAiB3pF,KAAKK,KAAL,CAAYspF,cAAZ,KAAgC,CAAjD;AACAD,mBAAkB1pF,KAAKK,KAAL,CAAYqpF,eAAZ,KAAiC,CAAnD;AACA8B,OAAMA,OAAOxrF,KAAK4L,EAAL,GAAU,CAAvB;;AAEA;;AAEA,KAAIghC,UAAU,EAAd;AACA,KAAI5gB,WAAW,EAAf;AACA,KAAI8gB,UAAU,EAAd;AACA,KAAIC,MAAM,EAAV;;AAEA;;AAEA,KAAIn6B,SAAS,IAAImC,OAAJ,EAAb;AACA,KAAIu3B,SAAS,IAAIv3B,OAAJ,EAAb;AACA,KAAI0O,SAAS,IAAI1O,OAAJ,EAAb;;AAEA,KAAI0Y,CAAJ,EAAO/qB,CAAP;;AAEA;;AAEA,MAAM+qB,IAAI,CAAV,EAAaA,KAAKk8D,cAAlB,EAAkCl8D,GAAlC,EAAyC;;AAExC,OAAM/qB,IAAI,CAAV,EAAaA,KAAKgnF,eAAlB,EAAmChnF,GAAnC,EAA0C;;AAEzC,OAAI02B,IAAI12B,IAAIgnF,eAAJ,GAAsB8B,GAA9B;AACA,OAAIn8E,IAAIoe,IAAIk8D,cAAJ,GAAqB3pF,KAAK4L,EAA1B,GAA+B,CAAvC;;AAEA;;AAEA0gC,UAAO/rC,CAAP,GAAW,CAAEyjB,SAAS4mE,OAAO5qF,KAAK8S,GAAL,CAAUzD,CAAV,CAAlB,IAAoCrP,KAAK8S,GAAL,CAAUsmB,CAAV,CAA/C;AACAkT,UAAOn/B,CAAP,GAAW,CAAE6W,SAAS4mE,OAAO5qF,KAAK8S,GAAL,CAAUzD,CAAV,CAAlB,IAAoCrP,KAAK+S,GAAL,CAAUqmB,CAAV,CAA/C;AACAkT,UAAOz3B,CAAP,GAAW+1E,OAAO5qF,KAAK+S,GAAL,CAAU1D,CAAV,CAAlB;;AAEA2c,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEA;;AAEAjC,UAAOrS,CAAP,GAAWyjB,SAAShkB,KAAK8S,GAAL,CAAUsmB,CAAV,CAApB;AACAxmB,UAAOzF,CAAP,GAAW6W,SAAShkB,KAAK+S,GAAL,CAAUqmB,CAAV,CAApB;AACA3V,UAAOxT,UAAP,CAAmBq8B,MAAnB,EAA2B15B,MAA3B,EAAoCtB,SAApC;;AAEAw7B,WAAQ7qC,IAAR,CAAcwhB,OAAOljB,CAArB,EAAwBkjB,OAAOtW,CAA/B,EAAkCsW,OAAO5O,CAAzC;;AAEA;;AAEAk4B,OAAI9qC,IAAJ,CAAUS,IAAIgnF,eAAd;AACA38C,OAAI9qC,IAAJ,CAAUwrB,IAAIk8D,cAAd;AAEA;AAED;;AAED;;AAEA,MAAMl8D,IAAI,CAAV,EAAaA,KAAKk8D,cAAlB,EAAkCl8D,GAAlC,EAAyC;;AAExC,OAAM/qB,IAAI,CAAV,EAAaA,KAAKgnF,eAAlB,EAAmChnF,GAAnC,EAA0C;;AAEzC;;AAEA,OAAImN,IAAI,CAAE65E,kBAAkB,CAApB,IAA0Bj8D,CAA1B,GAA8B/qB,CAA9B,GAAkC,CAA1C;AACA,OAAIoN,IAAI,CAAE45E,kBAAkB,CAApB,KAA4Bj8D,IAAI,CAAhC,IAAsC/qB,CAAtC,GAA0C,CAAlD;AACA,OAAImQ,IAAI,CAAE62E,kBAAkB,CAApB,KAA4Bj8D,IAAI,CAAhC,IAAsC/qB,CAA9C;AACA,OAAI4S,IAAI,CAAEo0E,kBAAkB,CAApB,IAA0Bj8D,CAA1B,GAA8B/qB,CAAtC;;AAEA;;AAEAkqC,WAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBwF,CAApB;AACAs3B,WAAQ3qC,IAAR,CAAc6N,CAAd,EAAiB+C,CAAjB,EAAoByC,CAApB;AAEA;AAED;;AAED;;AAEA,MAAKy/B,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B9G,OAA5B,EAAqC,CAArC,CAA7B;AACA,MAAKkI,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;AAEA;;AAED0+C,oBAAoBhrF,SAApB,GAAgCC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAAhC;AACAgrF,oBAAoBhrF,SAApB,CAA8B0O,WAA9B,GAA4Cs8E,mBAA5C;;AAEA;;;;;AAKA,IAAIC,SAAS;;AAEZC,cAAa,UAAW/hE,IAAX,EAAiBgiE,WAAjB,EAA8BC,GAA9B,EAAoC;;AAEhDA,QAAMA,OAAO,CAAb;;AAEA,MAAIC,WAAWF,eAAeA,YAAYvqF,MAA1C;AAAA,MACC0qF,WAAWD,WAAWF,YAAa,CAAb,IAAmBC,GAA9B,GAAoCjiE,KAAKvoB,MADrD;AAAA,MAEC2qF,YAAYC,WAAYriE,IAAZ,EAAkB,CAAlB,EAAqBmiE,QAArB,EAA+BF,GAA/B,EAAoC,IAApC,CAFb;AAAA,MAGC3hC,YAAY,EAHb;;AAKA,MAAK,CAAE8hC,SAAP,EAAmB,OAAO9hC,SAAP;;AAEnB,MAAIhgC,IAAJ,EAAUC,IAAV,EAAgBE,IAAhB,EAAsBC,IAAtB,EAA4B/pB,CAA5B,EAA+B4M,CAA/B,EAAkC++E,OAAlC;;AAEA,MAAKJ,QAAL,EAAgBE,YAAYG,eAAgBviE,IAAhB,EAAsBgiE,WAAtB,EAAmCI,SAAnC,EAA8CH,GAA9C,CAAZ;;AAEhB;;AAEA,MAAKjiE,KAAKvoB,MAAL,GAAc,KAAKwqF,GAAxB,EAA8B;;AAE7B3hE,UAAOG,OAAOT,KAAM,CAAN,CAAd;AACAO,UAAOG,OAAOV,KAAM,CAAN,CAAd;;AAEA,QAAM,IAAIlnB,IAAImpF,GAAd,EAAmBnpF,IAAIqpF,QAAvB,EAAiCrpF,KAAKmpF,GAAtC,EAA4C;;AAE3CtrF,QAAIqpB,KAAMlnB,CAAN,CAAJ;AACAyK,QAAIyc,KAAMlnB,IAAI,CAAV,CAAJ;AACA,QAAKnC,IAAI2pB,IAAT,EAAgBA,OAAO3pB,CAAP;AAChB,QAAK4M,IAAIgd,IAAT,EAAgBA,OAAOhd,CAAP;AAChB,QAAK5M,IAAI8pB,IAAT,EAAgBA,OAAO9pB,CAAP;AAChB,QAAK4M,IAAImd,IAAT,EAAgBA,OAAOnd,CAAP;AAEhB;;AAED;;AAEA++E,aAAUlsF,KAAKyM,GAAL,CAAU4d,OAAOH,IAAjB,EAAuBI,OAAOH,IAA9B,CAAV;AACA+hE,aAAUA,YAAY,CAAZ,GAAgB,IAAIA,OAApB,GAA8B,CAAxC;AAEA;;AAEDE,eAAcJ,SAAd,EAAyB9hC,SAAzB,EAAoC2hC,GAApC,EAAyC3hE,IAAzC,EAA+CC,IAA/C,EAAqD+hE,OAArD;;AAEA,SAAOhiC,SAAP;AAEA;;AA9CW,CAAb;;AAkDA;;AAEA,SAAS+hC,UAAT,CAAqBriE,IAArB,EAA2B0F,KAA3B,EAAkCI,GAAlC,EAAuCm8D,GAAvC,EAA4CQ,SAA5C,EAAwD;;AAEvD,KAAI3pF,CAAJ,EAAO4pF,IAAP;;AAEA,KAAKD,cAAgBE,WAAY3iE,IAAZ,EAAkB0F,KAAlB,EAAyBI,GAAzB,EAA8Bm8D,GAA9B,IAAsC,CAA3D,EAAiE;;AAEhE,OAAMnpF,IAAI4sB,KAAV,EAAiB5sB,IAAIgtB,GAArB,EAA0BhtB,KAAKmpF,GAA/B,EAAqCS,OAAOE,WAAY9pF,CAAZ,EAAeknB,KAAMlnB,CAAN,CAAf,EAA0BknB,KAAMlnB,IAAI,CAAV,CAA1B,EAAyC4pF,IAAzC,CAAP;AAErC,EAJD,MAIO;;AAEN,OAAM5pF,IAAIgtB,MAAMm8D,GAAhB,EAAqBnpF,KAAK4sB,KAA1B,EAAiC5sB,KAAKmpF,GAAtC,EAA4CS,OAAOE,WAAY9pF,CAAZ,EAAeknB,KAAMlnB,CAAN,CAAf,EAA0BknB,KAAMlnB,IAAI,CAAV,CAA1B,EAAyC4pF,IAAzC,CAAP;AAE5C;;AAED,KAAKA,QAAQn6E,OAAQm6E,IAAR,EAAcA,KAAKj8B,IAAnB,CAAb,EAAyC;;AAExCo8B,aAAYH,IAAZ;AACAA,SAAOA,KAAKj8B,IAAZ;AAEA;;AAED,QAAOi8B,IAAP;AAEA;;AAED;;AAEA,SAASI,YAAT,CAAuBp9D,KAAvB,EAA8BI,GAA9B,EAAoC;;AAEnC,KAAK,CAAEJ,KAAP,EAAe,OAAOA,KAAP;AACf,KAAK,CAAEI,GAAP,EAAaA,MAAMJ,KAAN;;AAEb,KAAIjS,IAAIiS,KAAR;AAAA,KAAeq9D,KAAf;;AAEA,IAAG;;AAEFA,UAAQ,KAAR;;AAEA,MAAK,CAAEtvE,EAAEuvE,OAAJ,KAAiBz6E,OAAQkL,CAAR,EAAWA,EAAEgzC,IAAb,KAAuBw8B,KAAMxvE,EAAEyvE,IAAR,EAAczvE,CAAd,EAAiBA,EAAEgzC,IAAnB,MAA8B,CAAtE,CAAL,EAAiF;;AAEhFo8B,cAAYpvE,CAAZ;AACAA,OAAIqS,MAAMrS,EAAEyvE,IAAZ;AACA,OAAKzvE,MAAMA,EAAEgzC,IAAb,EAAoB;AACpBs8B,WAAQ,IAAR;AAEA,GAPD,MAOO;;AAENtvE,OAAIA,EAAEgzC,IAAN;AAEA;AAED,EAjBD,QAiBUs8B,SAAStvE,MAAMqS,GAjBzB;;AAmBA,QAAOA,GAAP;AAEA;;AAED;;AAEA,SAAS08D,YAAT,CAAuBW,GAAvB,EAA4B7iC,SAA5B,EAAuC2hC,GAAvC,EAA4C3hE,IAA5C,EAAkDC,IAAlD,EAAwD+hE,OAAxD,EAAiEc,IAAjE,EAAwE;;AAEvE,KAAK,CAAED,GAAP,EAAa;;AAEb;;AAEA,KAAK,CAAEC,IAAF,IAAUd,OAAf,EAAyBe,WAAYF,GAAZ,EAAiB7iE,IAAjB,EAAuBC,IAAvB,EAA6B+hE,OAA7B;;AAEzB,KAAIgB,OAAOH,GAAX;AAAA,KAAgBD,IAAhB;AAAA,KAAsBz8B,IAAtB;;AAEA;;AAEA,QAAQ08B,IAAID,IAAJ,KAAaC,IAAI18B,IAAzB,EAAgC;;AAE/By8B,SAAOC,IAAID,IAAX;AACAz8B,SAAO08B,IAAI18B,IAAX;;AAEA,MAAK67B,UAAUiB,YAAaJ,GAAb,EAAkB7iE,IAAlB,EAAwBC,IAAxB,EAA8B+hE,OAA9B,CAAV,GAAoDkB,MAAOL,GAAP,CAAzD,EAAwE;;AAEvE;AACA7iC,aAAUjoD,IAAV,CAAgB6qF,KAAKpqF,CAAL,GAASmpF,GAAzB;AACA3hC,aAAUjoD,IAAV,CAAgB8qF,IAAIrqF,CAAJ,GAAQmpF,GAAxB;AACA3hC,aAAUjoD,IAAV,CAAgBouD,KAAK3tD,CAAL,GAASmpF,GAAzB;;AAEAY,cAAYM,GAAZ;;AAEA;AACAA,SAAM18B,KAAKA,IAAX;AACA68B,UAAO78B,KAAKA,IAAZ;;AAEA;AAEA;;AAED08B,QAAM18B,IAAN;;AAEA;;AAEA,MAAK08B,QAAQG,IAAb,EAAoB;;AAEnB;;AAEA,OAAK,CAAEF,IAAP,EAAc;;AAEbZ,iBAAcM,aAAcK,GAAd,CAAd,EAAmC7iC,SAAnC,EAA8C2hC,GAA9C,EAAmD3hE,IAAnD,EAAyDC,IAAzD,EAA+D+hE,OAA/D,EAAwE,CAAxE;;AAEA;AAEA,IAND,MAMO,IAAKc,SAAS,CAAd,EAAkB;;AAExBD,UAAMM,uBAAwBN,GAAxB,EAA6B7iC,SAA7B,EAAwC2hC,GAAxC,CAAN;AACAO,iBAAcW,GAAd,EAAmB7iC,SAAnB,EAA8B2hC,GAA9B,EAAmC3hE,IAAnC,EAAyCC,IAAzC,EAA+C+hE,OAA/C,EAAwD,CAAxD;;AAED;AAEC,IAPM,MAOA,IAAKc,SAAS,CAAd,EAAkB;;AAExBM,gBAAaP,GAAb,EAAkB7iC,SAAlB,EAA6B2hC,GAA7B,EAAkC3hE,IAAlC,EAAwCC,IAAxC,EAA8C+hE,OAA9C;AAEA;;AAED;AAEA;AAED;AAED;;AAED;;AAEA,SAASkB,KAAT,CAAgBL,GAAhB,EAAsB;;AAErB,KAAIl9E,IAAIk9E,IAAID,IAAZ;AAAA,KACCh9E,IAAIi9E,GADL;AAAA,KAECl6E,IAAIk6E,IAAI18B,IAFT;;AAIA,KAAKw8B,KAAMh9E,CAAN,EAASC,CAAT,EAAY+C,CAAZ,KAAmB,CAAxB,EAA4B,OAAO,KAAP,CANP,CAMqB;;AAE1C;AACA,KAAIwK,IAAI0vE,IAAI18B,IAAJ,CAASA,IAAjB;;AAEA,QAAQhzC,MAAM0vE,IAAID,IAAlB,EAAyB;;AAExB,MAAKS,gBAAiB19E,EAAEtP,CAAnB,EAAsBsP,EAAE1C,CAAxB,EAA2B2C,EAAEvP,CAA7B,EAAgCuP,EAAE3C,CAAlC,EAAqC0F,EAAEtS,CAAvC,EAA0CsS,EAAE1F,CAA5C,EAA+CkQ,EAAE9c,CAAjD,EAAoD8c,EAAElQ,CAAtD,KAA6D0/E,KAAMxvE,EAAEyvE,IAAR,EAAczvE,CAAd,EAAiBA,EAAEgzC,IAAnB,KAA6B,CAA/F,EAAmG;;AAElG,UAAO,KAAP;AAEA;;AAEDhzC,MAAIA,EAAEgzC,IAAN;AAEA;;AAED,QAAO,IAAP;AAEA;;AAED,SAAS88B,WAAT,CAAsBJ,GAAtB,EAA2B7iE,IAA3B,EAAiCC,IAAjC,EAAuC+hE,OAAvC,EAAiD;;AAEhD,KAAIr8E,IAAIk9E,IAAID,IAAZ;AAAA,KACCh9E,IAAIi9E,GADL;AAAA,KAECl6E,IAAIk6E,IAAI18B,IAFT;;AAIA,KAAKw8B,KAAMh9E,CAAN,EAASC,CAAT,EAAY+C,CAAZ,KAAmB,CAAxB,EAA4B,OAAO,KAAP,CANoB,CAMN;;AAE1C;;AAEA,KAAI26E,QAAQ39E,EAAEtP,CAAF,GAAMuP,EAAEvP,CAAR,GAAcsP,EAAEtP,CAAF,GAAMsS,EAAEtS,CAAR,GAAYsP,EAAEtP,CAAd,GAAkBsS,EAAEtS,CAAlC,GAA0CuP,EAAEvP,CAAF,GAAMsS,EAAEtS,CAAR,GAAYuP,EAAEvP,CAAd,GAAkBsS,EAAEtS,CAA1E;AAAA,KACCktF,QAAQ59E,EAAE1C,CAAF,GAAM2C,EAAE3C,CAAR,GAAc0C,EAAE1C,CAAF,GAAM0F,EAAE1F,CAAR,GAAY0C,EAAE1C,CAAd,GAAkB0F,EAAE1F,CAAlC,GAA0C2C,EAAE3C,CAAF,GAAM0F,EAAE1F,CAAR,GAAY2C,EAAE3C,CAAd,GAAkB0F,EAAE1F,CADvE;AAAA,KAECugF,QAAQ79E,EAAEtP,CAAF,GAAMuP,EAAEvP,CAAR,GAAcsP,EAAEtP,CAAF,GAAMsS,EAAEtS,CAAR,GAAYsP,EAAEtP,CAAd,GAAkBsS,EAAEtS,CAAlC,GAA0CuP,EAAEvP,CAAF,GAAMsS,EAAEtS,CAAR,GAAYuP,EAAEvP,CAAd,GAAkBsS,EAAEtS,CAFvE;AAAA,KAGCotF,QAAQ99E,EAAE1C,CAAF,GAAM2C,EAAE3C,CAAR,GAAc0C,EAAE1C,CAAF,GAAM0F,EAAE1F,CAAR,GAAY0C,EAAE1C,CAAd,GAAkB0F,EAAE1F,CAAlC,GAA0C2C,EAAE3C,CAAF,GAAM0F,EAAE1F,CAAR,GAAY2C,EAAE3C,CAAd,GAAkB0F,EAAE1F,CAHvE;;AAKA;;AAEA,KAAIid,OAAOwjE,OAAQJ,KAAR,EAAeC,KAAf,EAAsBvjE,IAAtB,EAA4BC,IAA5B,EAAkC+hE,OAAlC,CAAX;AAAA,KACC3hE,OAAOqjE,OAAQF,KAAR,EAAeC,KAAf,EAAsBzjE,IAAtB,EAA4BC,IAA5B,EAAkC+hE,OAAlC,CADR;;AAGA;;AAEA,KAAI7uE,IAAI0vE,IAAIc,KAAZ;;AAEA,QAAQxwE,KAAKA,EAAExI,CAAF,IAAO0V,IAApB,EAA2B;;AAE1B,MAAKlN,MAAM0vE,IAAID,IAAV,IAAkBzvE,MAAM0vE,IAAI18B,IAA5B,IACHk9B,gBAAiB19E,EAAEtP,CAAnB,EAAsBsP,EAAE1C,CAAxB,EAA2B2C,EAAEvP,CAA7B,EAAgCuP,EAAE3C,CAAlC,EAAqC0F,EAAEtS,CAAvC,EAA0CsS,EAAE1F,CAA5C,EAA+CkQ,EAAE9c,CAAjD,EAAoD8c,EAAElQ,CAAtD,CADG,IAEH0/E,KAAMxvE,EAAEyvE,IAAR,EAAczvE,CAAd,EAAiBA,EAAEgzC,IAAnB,KAA6B,CAF/B,EAEmC,OAAO,KAAP;AACnChzC,MAAIA,EAAEwwE,KAAN;AAEA;;AAED;;AAEAxwE,KAAI0vE,IAAIe,KAAR;;AAEA,QAAQzwE,KAAKA,EAAExI,CAAF,IAAOuV,IAApB,EAA2B;;AAE1B,MAAK/M,MAAM0vE,IAAID,IAAV,IAAkBzvE,MAAM0vE,IAAI18B,IAA5B,IACHk9B,gBAAiB19E,EAAEtP,CAAnB,EAAsBsP,EAAE1C,CAAxB,EAA2B2C,EAAEvP,CAA7B,EAAgCuP,EAAE3C,CAAlC,EAAqC0F,EAAEtS,CAAvC,EAA0CsS,EAAE1F,CAA5C,EAA+CkQ,EAAE9c,CAAjD,EAAoD8c,EAAElQ,CAAtD,CADG,IAEH0/E,KAAMxvE,EAAEyvE,IAAR,EAAczvE,CAAd,EAAiBA,EAAEgzC,IAAnB,KAA6B,CAF/B,EAEmC,OAAO,KAAP;;AAEnChzC,MAAIA,EAAEywE,KAAN;AAEA;;AAED,QAAO,IAAP;AAEA;;AAED;;AAEA,SAAST,sBAAT,CAAiC/9D,KAAjC,EAAwC46B,SAAxC,EAAmD2hC,GAAnD,EAAyD;;AAExD,KAAIxuE,IAAIiS,KAAR;;AAEA,IAAG;;AAEF,MAAIzf,IAAIwN,EAAEyvE,IAAV;AAAA,MAAgBh9E,IAAIuN,EAAEgzC,IAAF,CAAOA,IAA3B;;AAEA,MAAK,CAAEl+C,OAAQtC,CAAR,EAAWC,CAAX,CAAF,IAAoB2yC,WAAY5yC,CAAZ,EAAewN,CAAf,EAAkBA,EAAEgzC,IAApB,EAA0BvgD,CAA1B,CAApB,IAAqDi+E,cAAel+E,CAAf,EAAkBC,CAAlB,CAArD,IAA8Ei+E,cAAej+E,CAAf,EAAkBD,CAAlB,CAAnF,EAA2G;;AAE1Gq6C,aAAUjoD,IAAV,CAAgB4N,EAAEnN,CAAF,GAAMmpF,GAAtB;AACA3hC,aAAUjoD,IAAV,CAAgBob,EAAE3a,CAAF,GAAMmpF,GAAtB;AACA3hC,aAAUjoD,IAAV,CAAgB6N,EAAEpN,CAAF,GAAMmpF,GAAtB;;AAEA;;AAEAY,cAAYpvE,CAAZ;AACAovE,cAAYpvE,EAAEgzC,IAAd;;AAEAhzC,OAAIiS,QAAQxf,CAAZ;AAEA;;AAEDuN,MAAIA,EAAEgzC,IAAN;AAEA,EArBD,QAqBUhzC,MAAMiS,KArBhB;;AAuBA,QAAOjS,CAAP;AAEA;;AAED;;AAEA,SAASiwE,WAAT,CAAsBh+D,KAAtB,EAA6B46B,SAA7B,EAAwC2hC,GAAxC,EAA6C3hE,IAA7C,EAAmDC,IAAnD,EAAyD+hE,OAAzD,EAAmE;;AAElE;;AAEA,KAAIr8E,IAAIyf,KAAR;;AAEA,IAAG;;AAEF,MAAIxf,IAAID,EAAEwgD,IAAF,CAAOA,IAAf;;AAEA,SAAQvgD,MAAMD,EAAEi9E,IAAhB,EAAuB;;AAEtB,OAAKj9E,EAAEnN,CAAF,KAAQoN,EAAEpN,CAAV,IAAesrF,gBAAiBn+E,CAAjB,EAAoBC,CAApB,CAApB,EAA8C;;AAE7C;;AAEA,QAAI+C,IAAIo7E,aAAcp+E,CAAd,EAAiBC,CAAjB,CAAR;;AAEA;;AAEAD,QAAI68E,aAAc78E,CAAd,EAAiBA,EAAEwgD,IAAnB,CAAJ;AACAx9C,QAAI65E,aAAc75E,CAAd,EAAiBA,EAAEw9C,IAAnB,CAAJ;;AAEA;;AAEA+7B,iBAAcv8E,CAAd,EAAiBq6C,SAAjB,EAA4B2hC,GAA5B,EAAiC3hE,IAAjC,EAAuCC,IAAvC,EAA6C+hE,OAA7C;AACAE,iBAAcv5E,CAAd,EAAiBq3C,SAAjB,EAA4B2hC,GAA5B,EAAiC3hE,IAAjC,EAAuCC,IAAvC,EAA6C+hE,OAA7C;AACA;AAEA;;AAEDp8E,OAAIA,EAAEugD,IAAN;AAEA;;AAEDxgD,MAAIA,EAAEwgD,IAAN;AAEA,EA/BD,QA+BUxgD,MAAMyf,KA/BhB;AAiCA;;AAED;;AAEA,SAAS68D,cAAT,CAAyBviE,IAAzB,EAA+BgiE,WAA/B,EAA4CI,SAA5C,EAAuDH,GAAvD,EAA6D;;AAE5D,KAAIqC,QAAQ,EAAZ;AAAA,KAAgBxrF,CAAhB;AAAA,KAAmBkc,GAAnB;AAAA,KAAwB0Q,KAAxB;AAAA,KAA+BI,GAA/B;AAAA,KAAoCkrC,IAApC;;AAEA,MAAMl4D,IAAI,CAAJ,EAAOkc,MAAMgtE,YAAYvqF,MAA/B,EAAuCqB,IAAIkc,GAA3C,EAAgDlc,GAAhD,EAAuD;;AAEtD4sB,UAAQs8D,YAAalpF,CAAb,IAAmBmpF,GAA3B;AACAn8D,QAAMhtB,IAAIkc,MAAM,CAAV,GAAcgtE,YAAalpF,IAAI,CAAjB,IAAuBmpF,GAArC,GAA2CjiE,KAAKvoB,MAAtD;AACAu5D,SAAOqxB,WAAYriE,IAAZ,EAAkB0F,KAAlB,EAAyBI,GAAzB,EAA8Bm8D,GAA9B,EAAmC,KAAnC,CAAP;AACA,MAAKjxB,SAASA,KAAKvK,IAAnB,EAA0BuK,KAAKgyB,OAAL,GAAe,IAAf;AAC1BsB,QAAMjsF,IAAN,CAAYksF,YAAavzB,IAAb,CAAZ;AAEA;;AAEDszB,OAAM19C,IAAN,CAAY49C,QAAZ;;AAEA;;AAEA,MAAM1rF,IAAI,CAAV,EAAaA,IAAIwrF,MAAM7sF,MAAvB,EAA+BqB,GAA/B,EAAsC;;AAErC2rF,gBAAeH,MAAOxrF,CAAP,CAAf,EAA2BspF,SAA3B;AACAA,cAAYU,aAAcV,SAAd,EAAyBA,UAAU37B,IAAnC,CAAZ;AAEA;;AAED,QAAO27B,SAAP;AAEA;;AAED,SAASoC,QAAT,CAAmBv+E,CAAnB,EAAsBC,CAAtB,EAA0B;;AAEzB,QAAOD,EAAEtP,CAAF,GAAMuP,EAAEvP,CAAf;AAEA;;AAED;;AAEA,SAAS8tF,aAAT,CAAwBC,IAAxB,EAA8BtC,SAA9B,EAA0C;;AAEzCA,aAAYuC,eAAgBD,IAAhB,EAAsBtC,SAAtB,CAAZ;;AAEA,KAAKA,SAAL,EAAiB;;AAEhB,MAAIl8E,IAAIm+E,aAAcjC,SAAd,EAAyBsC,IAAzB,CAAR;;AAEA5B,eAAc58E,CAAd,EAAiBA,EAAEugD,IAAnB;AAEA;AAED;;AAED;;AAEA,SAASk+B,cAAT,CAAyBD,IAAzB,EAA+BtC,SAA/B,EAA2C;;AAE1C,KAAI3uE,IAAI2uE,SAAR;AAAA,KACCwC,KAAKF,KAAK/tF,CADX;AAAA,KAECkuF,KAAKH,KAAKnhF,CAFX;AAAA,KAGC6U,KAAK,CAAE+H,QAHR;AAAA,KAICnd,CAJD;;AAMA;AACA;;AAEA,IAAG;;AAEF,MAAK6hF,MAAMpxE,EAAElQ,CAAR,IAAashF,MAAMpxE,EAAEgzC,IAAF,CAAOljD,CAA1B,IAA+BkQ,EAAEgzC,IAAF,CAAOljD,CAAP,KAAakQ,EAAElQ,CAAnD,EAAuD;;AAEtD,OAAI5M,IAAI8c,EAAE9c,CAAF,GAAM,CAAEkuF,KAAKpxE,EAAElQ,CAAT,KAAiBkQ,EAAEgzC,IAAF,CAAO9vD,CAAP,GAAW8c,EAAE9c,CAA9B,KAAsC8c,EAAEgzC,IAAF,CAAOljD,CAAP,GAAWkQ,EAAElQ,CAAnD,CAAd;;AAEA,OAAK5M,KAAKiuF,EAAL,IAAWjuF,IAAIyhB,EAApB,EAAyB;;AAExBA,SAAKzhB,CAAL;;AAEA,QAAKA,MAAMiuF,EAAX,EAAgB;;AAEf,SAAKC,OAAOpxE,EAAElQ,CAAd,EAAkB,OAAOkQ,CAAP;AAClB,SAAKoxE,OAAOpxE,EAAEgzC,IAAF,CAAOljD,CAAnB,EAAuB,OAAOkQ,EAAEgzC,IAAT;AAEvB;;AAEDzjD,QAAIyQ,EAAE9c,CAAF,GAAM8c,EAAEgzC,IAAF,CAAO9vD,CAAb,GAAiB8c,CAAjB,GAAqBA,EAAEgzC,IAA3B;AAEA;AAED;;AAEDhzC,MAAIA,EAAEgzC,IAAN;AAEA,EAzBD,QAyBUhzC,MAAM2uE,SAzBhB;;AA2BA,KAAK,CAAEp/E,CAAP,EAAW,OAAO,IAAP;;AAEX,KAAK4hF,OAAOxsE,EAAZ,EAAiB,OAAOpV,EAAEkgF,IAAT,CAxCyB,CAwCV;;AAEhC;AACA;AACA;;AAEA,KAAII,OAAOtgF,CAAX;AAAA,KACC8hF,KAAK9hF,EAAErM,CADR;AAAA,KAECouF,KAAK/hF,EAAEO,CAFR;AAAA,KAGCyhF,SAAS7kE,QAHV;AAAA,KAIC4oD,GAJD;;AAMAt1D,KAAIzQ,EAAEyjD,IAAN;;AAEA,QAAQhzC,MAAM6vE,IAAd,EAAqB;;AAEpB,MAAKsB,MAAMnxE,EAAE9c,CAAR,IAAa8c,EAAE9c,CAAF,IAAOmuF,EAApB,IAA0BF,OAAOnxE,EAAE9c,CAAnC,IACDgtF,gBAAiBkB,KAAKE,EAAL,GAAUH,EAAV,GAAexsE,EAAhC,EAAoCysE,EAApC,EAAwCC,EAAxC,EAA4CC,EAA5C,EAAgDF,KAAKE,EAAL,GAAU3sE,EAAV,GAAewsE,EAA/D,EAAmEC,EAAnE,EAAuEpxE,EAAE9c,CAAzE,EAA4E8c,EAAElQ,CAA9E,CADJ,EACwF;;AAEvFwlE,SAAM3yE,KAAKqR,GAAL,CAAUo9E,KAAKpxE,EAAElQ,CAAjB,KAAyBqhF,KAAKnxE,EAAE9c,CAAhC,CAAN,CAFuF,CAE5C;;AAE3C,OAAK,CAAEoyE,MAAMic,MAAN,IAAkBjc,QAAQic,MAAR,IAAkBvxE,EAAE9c,CAAF,GAAMqM,EAAErM,CAA9C,KAAuDwtF,cAAe1wE,CAAf,EAAkBixE,IAAlB,CAA5D,EAAuF;;AAEtF1hF,QAAIyQ,CAAJ;AACAuxE,aAASjc,GAAT;AAEA;AAED;;AAEDt1D,MAAIA,EAAEgzC,IAAN;AAEA;;AAED,QAAOzjD,CAAP;AAEA;;AAED;;AAEA,SAASqgF,UAAT,CAAqB39D,KAArB,EAA4BpF,IAA5B,EAAkCC,IAAlC,EAAwC+hE,OAAxC,EAAkD;;AAEjD,KAAI7uE,IAAIiS,KAAR;;AAEA,IAAG;;AAEF,MAAKjS,EAAExI,CAAF,KAAQ,IAAb,EAAoBwI,EAAExI,CAAF,GAAM+4E,OAAQvwE,EAAE9c,CAAV,EAAa8c,EAAElQ,CAAf,EAAkB+c,IAAlB,EAAwBC,IAAxB,EAA8B+hE,OAA9B,CAAN;AACpB7uE,IAAEywE,KAAF,GAAUzwE,EAAEyvE,IAAZ;AACAzvE,IAAEwwE,KAAF,GAAUxwE,EAAEgzC,IAAZ;AACAhzC,MAAIA,EAAEgzC,IAAN;AAEA,EAPD,QAOUhzC,MAAMiS,KAPhB;;AASAjS,GAAEywE,KAAF,CAAQD,KAAR,GAAgB,IAAhB;AACAxwE,GAAEywE,KAAF,GAAU,IAAV;;AAEAe,YAAYxxE,CAAZ;AAEA;;AAED;AACA;;AAEA,SAASwxE,UAAT,CAAqBj0B,IAArB,EAA4B;;AAE3B,KAAIl4D,CAAJ;AAAA,KAAO2a,CAAP;AAAA,KAAU/G,CAAV;AAAA,KAAa9F,CAAb;AAAA,KAAgBs+E,IAAhB;AAAA,KAAsBC,SAAtB;AAAA,KAAiCC,KAAjC;AAAA,KAAwCC,KAAxC;AAAA,KAA+CC,SAAS,CAAxD;;AAEA,IAAG;;AAEF7xE,MAAIu9C,IAAJ;AACAA,SAAO,IAAP;AACAk0B,SAAO,IAAP;AACAC,cAAY,CAAZ;;AAEA,SAAQ1xE,CAAR,EAAY;;AAEX0xE;AACAz4E,OAAI+G,CAAJ;AACA2xE,WAAQ,CAAR;;AAEA,QAAMtsF,IAAI,CAAV,EAAaA,IAAIwsF,MAAjB,EAAyBxsF,GAAzB,EAAgC;;AAE/BssF;AACA14E,QAAIA,EAAEu3E,KAAN;AACA,QAAK,CAAEv3E,CAAP,EAAW;AAEX;;AAED24E,WAAQC,MAAR;;AAEA,UAAQF,QAAQ,CAAR,IAAeC,QAAQ,CAAR,IAAa34E,CAApC,EAA0C;;AAEzC,QAAK04E,UAAU,CAAV,KAAiBC,UAAU,CAAV,IAAe,CAAE34E,CAAjB,IAAsB+G,EAAExI,CAAF,IAAOyB,EAAEzB,CAAhD,CAAL,EAA2D;;AAE1DrE,SAAI6M,CAAJ;AACAA,SAAIA,EAAEwwE,KAAN;AACAmB;AAEA,KAND,MAMO;;AAENx+E,SAAI8F,CAAJ;AACAA,SAAIA,EAAEu3E,KAAN;AACAoB;AAEA;;AAED,QAAKH,IAAL,EAAYA,KAAKjB,KAAL,GAAar9E,CAAb,CAAZ,KACKoqD,OAAOpqD,CAAP;;AAELA,MAAEs9E,KAAF,GAAUgB,IAAV;AACAA,WAAOt+E,CAAP;AAEA;;AAED6M,OAAI/G,CAAJ;AAEA;;AAEDw4E,OAAKjB,KAAL,GAAa,IAAb;AACAqB,YAAU,CAAV;AAEA,EAtDD,QAsDUH,YAAY,CAtDtB;;AAwDA,QAAOn0B,IAAP;AAEA;;AAED;;AAEA,SAASgzB,MAAT,CAAiBrtF,CAAjB,EAAoB4M,CAApB,EAAuB+c,IAAvB,EAA6BC,IAA7B,EAAmC+hE,OAAnC,EAA6C;;AAE5C;;AAEA3rF,KAAI,SAAUA,IAAI2pB,IAAd,IAAuBgiE,OAA3B;AACA/+E,KAAI,SAAUA,IAAIgd,IAAd,IAAuB+hE,OAA3B;;AAEA3rF,KAAI,CAAEA,IAAMA,KAAK,CAAb,IAAqB,UAAzB;AACAA,KAAI,CAAEA,IAAMA,KAAK,CAAb,IAAqB,UAAzB;AACAA,KAAI,CAAEA,IAAMA,KAAK,CAAb,IAAqB,UAAzB;AACAA,KAAI,CAAEA,IAAMA,KAAK,CAAb,IAAqB,UAAzB;;AAEA4M,KAAI,CAAEA,IAAMA,KAAK,CAAb,IAAqB,UAAzB;AACAA,KAAI,CAAEA,IAAMA,KAAK,CAAb,IAAqB,UAAzB;AACAA,KAAI,CAAEA,IAAMA,KAAK,CAAb,IAAqB,UAAzB;AACAA,KAAI,CAAEA,IAAMA,KAAK,CAAb,IAAqB,UAAzB;;AAEA,QAAO5M,IAAM4M,KAAK,CAAlB;AAEA;;AAED;;AAEA,SAASghF,WAAT,CAAsB7+D,KAAtB,EAA8B;;AAE7B,KAAIjS,IAAIiS,KAAR;AAAA,KAAe6/D,WAAW7/D,KAA1B;;AAEA,IAAG;;AAEF,MAAKjS,EAAE9c,CAAF,GAAM4uF,SAAS5uF,CAApB,EAAwB4uF,WAAW9xE,CAAX;AACxBA,MAAIA,EAAEgzC,IAAN;AAEA,EALD,QAKUhzC,MAAMiS,KALhB;;AAOA,QAAO6/D,QAAP;AAEA;;AAED;;AAEA,SAAS5B,eAAT,CAA0BxqE,EAA1B,EAA8BC,EAA9B,EAAkCE,EAAlC,EAAsCC,EAAtC,EAA0C0B,EAA1C,EAA8CC,EAA9C,EAAkDsqE,EAAlD,EAAsDC,EAAtD,EAA2D;;AAE1D,QAAO,CAAExqE,KAAKuqE,EAAP,KAAgBpsE,KAAKqsE,EAArB,IAA4B,CAAEtsE,KAAKqsE,EAAP,KAAgBtqE,KAAKuqE,EAArB,CAA5B,IAAyD,CAAzD,IACN,CAAEtsE,KAAKqsE,EAAP,KAAgBjsE,KAAKksE,EAArB,IAA4B,CAAEnsE,KAAKksE,EAAP,KAAgBpsE,KAAKqsE,EAArB,CAA5B,IAAyD,CADnD,IAEN,CAAEnsE,KAAKksE,EAAP,KAAgBtqE,KAAKuqE,EAArB,IAA4B,CAAExqE,KAAKuqE,EAAP,KAAgBjsE,KAAKksE,EAArB,CAA5B,IAAyD,CAF1D;AAIA;;AAED;;AAEA,SAASrB,eAAT,CAA0Bn+E,CAA1B,EAA6BC,CAA7B,EAAiC;;AAEhC,QAAOD,EAAEwgD,IAAF,CAAO3tD,CAAP,KAAaoN,EAAEpN,CAAf,IAAoBmN,EAAEi9E,IAAF,CAAOpqF,CAAP,KAAaoN,EAAEpN,CAAnC,IAAwC,CAAE4sF,kBAAmBz/E,CAAnB,EAAsBC,CAAtB,CAA1C,IACNi+E,cAAel+E,CAAf,EAAkBC,CAAlB,CADM,IACmBi+E,cAAej+E,CAAf,EAAkBD,CAAlB,CADnB,IAC4C0/E,aAAc1/E,CAAd,EAAiBC,CAAjB,CADnD;AAGA;;AAED;;AAEA,SAAS+8E,IAAT,CAAexvE,CAAf,EAAkB/G,CAAlB,EAAqB8J,CAArB,EAAyB;;AAExB,QAAO,CAAE9J,EAAEnJ,CAAF,GAAMkQ,EAAElQ,CAAV,KAAkBiT,EAAE7f,CAAF,GAAM+V,EAAE/V,CAA1B,IAAgC,CAAE+V,EAAE/V,CAAF,GAAM8c,EAAE9c,CAAV,KAAkB6f,EAAEjT,CAAF,GAAMmJ,EAAEnJ,CAA1B,CAAvC;AAEA;;AAED;;AAEA,SAASgF,MAAT,CAAiBwb,EAAjB,EAAqBC,EAArB,EAA0B;;AAEzB,QAAOD,GAAGptB,CAAH,KAASqtB,GAAGrtB,CAAZ,IAAiBotB,GAAGxgB,CAAH,KAASygB,GAAGzgB,CAApC;AAEA;;AAED;;AAEA,SAASs1C,UAAT,CAAqB90B,EAArB,EAAyBwZ,EAAzB,EAA6BvZ,EAA7B,EAAiC4hE,EAAjC,EAAsC;;AAErC,KAAOr9E,OAAQwb,EAAR,EAAYwZ,EAAZ,KAAoBh1B,OAAQyb,EAAR,EAAY4hE,EAAZ,CAAtB,IACDr9E,OAAQwb,EAAR,EAAY6hE,EAAZ,KAAoBr9E,OAAQyb,EAAR,EAAYuZ,EAAZ,CADxB,EAC6C,OAAO,IAAP;;AAE7C,QAAO0lD,KAAMl/D,EAAN,EAAUwZ,EAAV,EAAcvZ,EAAd,IAAqB,CAArB,KAA2Bi/D,KAAMl/D,EAAN,EAAUwZ,EAAV,EAAcqoD,EAAd,IAAqB,CAAhD,IACH3C,KAAMj/D,EAAN,EAAU4hE,EAAV,EAAc7hE,EAAd,IAAqB,CAArB,KAA2Bk/D,KAAMj/D,EAAN,EAAU4hE,EAAV,EAAcroD,EAAd,IAAqB,CADpD;AAGA;;AAED;;AAEA,SAASmoD,iBAAT,CAA4Bz/E,CAA5B,EAA+BC,CAA/B,EAAmC;;AAElC,KAAIuN,IAAIxN,CAAR;;AAEA,IAAG;;AAEF,MAAKwN,EAAE3a,CAAF,KAAQmN,EAAEnN,CAAV,IAAe2a,EAAEgzC,IAAF,CAAO3tD,CAAP,KAAamN,EAAEnN,CAA9B,IAAmC2a,EAAE3a,CAAF,KAAQoN,EAAEpN,CAA7C,IAAkD2a,EAAEgzC,IAAF,CAAO3tD,CAAP,KAAaoN,EAAEpN,CAAjE,IACD+/C,WAAYplC,CAAZ,EAAeA,EAAEgzC,IAAjB,EAAuBxgD,CAAvB,EAA0BC,CAA1B,CADJ,EACoC;;AAEnC,UAAO,IAAP;AAEA;;AAEDuN,MAAIA,EAAEgzC,IAAN;AAEA,EAXD,QAWUhzC,MAAMxN,CAXhB;;AAaA,QAAO,KAAP;AAEA;;AAED;;AAEA,SAASk+E,aAAT,CAAwBl+E,CAAxB,EAA2BC,CAA3B,EAA+B;;AAE9B,QAAO+8E,KAAMh9E,EAAEi9E,IAAR,EAAcj9E,CAAd,EAAiBA,EAAEwgD,IAAnB,IAA4B,CAA5B,GACNw8B,KAAMh9E,CAAN,EAASC,CAAT,EAAYD,EAAEwgD,IAAd,KAAwB,CAAxB,IAA6Bw8B,KAAMh9E,CAAN,EAASA,EAAEi9E,IAAX,EAAiBh9E,CAAjB,KAAwB,CAD/C,GAEN+8E,KAAMh9E,CAAN,EAASC,CAAT,EAAYD,EAAEi9E,IAAd,IAAuB,CAAvB,IAA4BD,KAAMh9E,CAAN,EAASA,EAAEwgD,IAAX,EAAiBvgD,CAAjB,IAAuB,CAFpD;AAIA;;AAED;;AAEA,SAASy/E,YAAT,CAAuB1/E,CAAvB,EAA0BC,CAA1B,EAA8B;;AAE7B,KAAIuN,IAAIxN,CAAR;AAAA,KACC4/E,SAAS,KADV;AAAA,KAECL,KAAK,CAAEv/E,EAAEtP,CAAF,GAAMuP,EAAEvP,CAAV,IAAgB,CAFtB;AAAA,KAGC8uF,KAAK,CAAEx/E,EAAE1C,CAAF,GAAM2C,EAAE3C,CAAV,IAAgB,CAHtB;;AAKA,IAAG;;AAEF,MAASkQ,EAAElQ,CAAF,GAAMkiF,EAAR,KAAmBhyE,EAAEgzC,IAAF,CAAOljD,CAAP,GAAWkiF,EAAhC,IAA0ChyE,EAAEgzC,IAAF,CAAOljD,CAAP,KAAakQ,EAAElQ,CAAzD,IACCiiF,KAAK,CAAE/xE,EAAEgzC,IAAF,CAAO9vD,CAAP,GAAW8c,EAAE9c,CAAf,KAAuB8uF,KAAKhyE,EAAElQ,CAA9B,KAAsCkQ,EAAEgzC,IAAF,CAAOljD,CAAP,GAAWkQ,EAAElQ,CAAnD,IAAyDkQ,EAAE9c,CADtE,EAC4E;;AAE3EkvF,YAAS,CAAEA,MAAX;AAEA;;AAEDpyE,MAAIA,EAAEgzC,IAAN;AAEA,EAXD,QAWUhzC,MAAMxN,CAXhB;;AAaA,QAAO4/E,MAAP;AAEA;;AAED;AACA;;AAEA,SAASxB,YAAT,CAAuBp+E,CAAvB,EAA0BC,CAA1B,EAA8B;;AAE7B,KAAI/C,KAAK,IAAI2iF,IAAJ,CAAU7/E,EAAEnN,CAAZ,EAAemN,EAAEtP,CAAjB,EAAoBsP,EAAE1C,CAAtB,CAAT;AAAA,KACCF,KAAK,IAAIyiF,IAAJ,CAAU5/E,EAAEpN,CAAZ,EAAeoN,EAAEvP,CAAjB,EAAoBuP,EAAE3C,CAAtB,CADN;AAAA,KAECwiF,KAAK9/E,EAAEwgD,IAFR;AAAA,KAGCu/B,KAAK9/E,EAAEg9E,IAHR;;AAKAj9E,GAAEwgD,IAAF,GAASvgD,CAAT;AACAA,GAAEg9E,IAAF,GAASj9E,CAAT;;AAEA9C,IAAGsjD,IAAH,GAAUs/B,EAAV;AACAA,IAAG7C,IAAH,GAAU//E,EAAV;;AAEAE,IAAGojD,IAAH,GAAUtjD,EAAV;AACAA,IAAG+/E,IAAH,GAAU7/E,EAAV;;AAEA2iF,IAAGv/B,IAAH,GAAUpjD,EAAV;AACAA,IAAG6/E,IAAH,GAAU8C,EAAV;;AAEA,QAAO3iF,EAAP;AAEA;;AAED;;AAEA,SAASu/E,UAAT,CAAqB9pF,CAArB,EAAwBnC,CAAxB,EAA2B4M,CAA3B,EAA8Bm/E,IAA9B,EAAqC;;AAEpC,KAAIjvE,IAAI,IAAIqyE,IAAJ,CAAUhtF,CAAV,EAAanC,CAAb,EAAgB4M,CAAhB,CAAR;;AAEA,KAAK,CAAEm/E,IAAP,EAAc;;AAEbjvE,IAAEyvE,IAAF,GAASzvE,CAAT;AACAA,IAAEgzC,IAAF,GAAShzC,CAAT;AAEA,EALD,MAKO;;AAENA,IAAEgzC,IAAF,GAASi8B,KAAKj8B,IAAd;AACAhzC,IAAEyvE,IAAF,GAASR,IAAT;AACAA,OAAKj8B,IAAL,CAAUy8B,IAAV,GAAiBzvE,CAAjB;AACAivE,OAAKj8B,IAAL,GAAYhzC,CAAZ;AAEA;;AAED,QAAOA,CAAP;AAEA;;AAED,SAASovE,UAAT,CAAqBpvE,CAArB,EAAyB;;AAExBA,GAAEgzC,IAAF,CAAOy8B,IAAP,GAAczvE,EAAEyvE,IAAhB;AACAzvE,GAAEyvE,IAAF,CAAOz8B,IAAP,GAAchzC,EAAEgzC,IAAhB;;AAEA,KAAKhzC,EAAEywE,KAAP,EAAezwE,EAAEywE,KAAF,CAAQD,KAAR,GAAgBxwE,EAAEwwE,KAAlB;AACf,KAAKxwE,EAAEwwE,KAAP,EAAexwE,EAAEwwE,KAAF,CAAQC,KAAR,GAAgBzwE,EAAEywE,KAAlB;AAEf;;AAED,SAAS4B,IAAT,CAAehtF,CAAf,EAAkBnC,CAAlB,EAAqB4M,CAArB,EAAyB;;AAExB;AACA,MAAKzK,CAAL,GAASA,CAAT;;AAEA;AACA,MAAKnC,CAAL,GAASA,CAAT;AACA,MAAK4M,CAAL,GAASA,CAAT;;AAEA;AACA,MAAK2/E,IAAL,GAAY,IAAZ;AACA,MAAKz8B,IAAL,GAAY,IAAZ;;AAEA;AACA,MAAKx7C,CAAL,GAAS,IAAT;;AAEA;AACA,MAAKi5E,KAAL,GAAa,IAAb;AACA,MAAKD,KAAL,GAAa,IAAb;;AAEA;AACA,MAAKjB,OAAL,GAAe,KAAf;AAEA;;AAED,SAASL,UAAT,CAAqB3iE,IAArB,EAA2B0F,KAA3B,EAAkCI,GAAlC,EAAuCm8D,GAAvC,EAA6C;;AAE5C,KAAIgE,MAAM,CAAV;;AAEA,MAAM,IAAIntF,IAAI4sB,KAAR,EAAe7B,IAAIiC,MAAMm8D,GAA/B,EAAoCnpF,IAAIgtB,GAAxC,EAA6ChtB,KAAKmpF,GAAlD,EAAwD;;AAEvDgE,SAAO,CAAEjmE,KAAM6D,CAAN,IAAY7D,KAAMlnB,CAAN,CAAd,KAA8BknB,KAAMlnB,IAAI,CAAV,IAAgBknB,KAAM6D,IAAI,CAAV,CAA9C,CAAP;AACAA,MAAI/qB,CAAJ;AAEA;;AAED,QAAOmtF,GAAP;AAEA;;AAED;;;;AAIA,IAAIC,aAAa;;AAEhB;;AAEAjD,OAAM,UAAWkD,OAAX,EAAqB;;AAE1B,MAAIpjF,IAAIojF,QAAQ1uF,MAAhB;AACA,MAAIwO,IAAI,GAAR;;AAEA,OAAM,IAAIwN,IAAI1Q,IAAI,CAAZ,EAAe2J,IAAI,CAAzB,EAA4BA,IAAI3J,CAAhC,EAAmC0Q,IAAI/G,GAAvC,EAA8C;;AAE7CzG,QAAKkgF,QAAS1yE,CAAT,EAAa9c,CAAb,GAAiBwvF,QAASz5E,CAAT,EAAanJ,CAA9B,GAAkC4iF,QAASz5E,CAAT,EAAa/V,CAAb,GAAiBwvF,QAAS1yE,CAAT,EAAalQ,CAArE;AAEA;;AAED,SAAO0C,IAAI,GAAX;AAEA,EAjBe;;AAmBhBmgF,cAAa,UAAWC,GAAX,EAAiB;;AAE7B,SAAOH,WAAWjD,IAAX,CAAiBoD,GAAjB,IAAyB,CAAhC;AAEA,EAvBe;;AAyBhBC,mBAAkB,UAAWH,OAAX,EAAoBI,KAApB,EAA4B;;AAE7C,MAAInkE,WAAW,EAAf,CAF6C,CAE1B;AACnB,MAAI4/D,cAAc,EAAlB,CAH6C,CAGvB;AACtB,MAAIrgD,QAAQ,EAAZ,CAJ6C,CAI7B;;AAEhB6kD,kBAAiBL,OAAjB;AACAM,aAAYrkE,QAAZ,EAAsB+jE,OAAtB;;AAEA;;AAEA,MAAIO,YAAYP,QAAQ1uF,MAAxB;;AAEA8uF,QAAMI,OAAN,CAAeH,eAAf;;AAEA,OAAM,IAAI1tF,IAAI,CAAd,EAAiBA,IAAIytF,MAAM9uF,MAA3B,EAAmCqB,GAAnC,EAA0C;;AAEzCkpF,eAAY3pF,IAAZ,CAAkBquF,SAAlB;AACAA,gBAAaH,MAAOztF,CAAP,EAAWrB,MAAxB;AACAgvF,cAAYrkE,QAAZ,EAAsBmkE,MAAOztF,CAAP,CAAtB;AAEA;;AAED;;AAEA,MAAIwnD,YAAYwhC,OAAOC,WAAP,CAAoB3/D,QAApB,EAA8B4/D,WAA9B,CAAhB;;AAEA;;AAEA,OAAM,IAAIlpF,IAAI,CAAd,EAAiBA,IAAIwnD,UAAU7oD,MAA/B,EAAuCqB,KAAK,CAA5C,EAAgD;;AAE/C6oC,SAAMtpC,IAAN,CAAYioD,UAAUznD,KAAV,CAAiBC,CAAjB,EAAoBA,IAAI,CAAxB,CAAZ;AAEA;;AAED,SAAO6oC,KAAP;AAEA;;AA9De,CAAjB;;AAkEA,SAAS6kD,eAAT,CAA0B1lE,MAA1B,EAAmC;;AAElC,KAAI/nB,IAAI+nB,OAAOrpB,MAAf;;AAEA,KAAKsB,IAAI,CAAJ,IAAS+nB,OAAQ/nB,IAAI,CAAZ,EAAgBwP,MAAhB,CAAwBuY,OAAQ,CAAR,CAAxB,CAAd,EAAsD;;AAErDA,SAAOuvC,GAAP;AAEA;AAED;;AAED,SAASo2B,UAAT,CAAqBrkE,QAArB,EAA+B+jE,OAA/B,EAAyC;;AAExC,MAAM,IAAIrtF,IAAI,CAAd,EAAiBA,IAAIqtF,QAAQ1uF,MAA7B,EAAqCqB,GAArC,EAA4C;;AAE3CspB,WAAS/pB,IAAT,CAAe8tF,QAASrtF,CAAT,EAAanC,CAA5B;AACAyrB,WAAS/pB,IAAT,CAAe8tF,QAASrtF,CAAT,EAAayK,CAA5B;AAEA;AAED;;AAED;;;;;;;;;;;;;;;;;;;;;;;AAuBA;;AAEA,SAASqjF,eAAT,CAA0B1nD,MAA1B,EAAkCjgB,OAAlC,EAA4C;;AAE3CwiB,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,iBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBN,UAAQA,MADS;AAEjBjgB,WAASA;AAFQ,EAAlB;;AAKA,MAAK8jB,kBAAL,CAAyB,IAAI8jD,qBAAJ,CAA2B3nD,MAA3B,EAAmCjgB,OAAnC,CAAzB;AACA,MAAK+mB,aAAL;AAEA;;AAED4gD,gBAAgB/vF,SAAhB,GAA4BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA5B;AACA+vF,gBAAgB/vF,SAAhB,CAA0B0O,WAA1B,GAAwCqhF,eAAxC;;AAEA;;AAEA,SAASC,qBAAT,CAAgC3nD,MAAhC,EAAwCjgB,OAAxC,EAAkD;;AAEjD8rB,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,uBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBN,UAAQA,MADS;AAEjBjgB,WAASA;AAFQ,EAAlB;;AAKAigB,UAASrP,MAAMC,OAAN,CAAeoP,MAAf,IAA0BA,MAA1B,GAAmC,CAAEA,MAAF,CAA5C;;AAEA,KAAInd,QAAQ,IAAZ;;AAEA,KAAI+kE,gBAAgB,EAApB;AACA,KAAI7U,UAAU,EAAd;;AAEA,MAAM,IAAIn5E,IAAI,CAAR,EAAWC,IAAImmC,OAAOznC,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,MAAI2mC,QAAQP,OAAQpmC,CAAR,CAAZ;AACAiuF,WAAUtnD,KAAV,EAAiBxgB,OAAjB;AAEA;;AAED;;AAEA,MAAKmsB,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B88C,aAA5B,EAA2C,CAA3C,CAA/B;AACA,MAAK17C,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4BioC,OAA5B,EAAqC,CAArC,CAAzB;;AAEA,MAAK9tC,oBAAL;;AAEA;;AAEA,UAAS4iD,QAAT,CAAmBtnD,KAAnB,EAA2B;;AAE1B,MAAIunD,cAAc,EAAlB;;AAEA;;AAEA,MAAIC,gBAAgBhoE,QAAQgoE,aAAR,KAA0B9wF,SAA1B,GAAsC8oB,QAAQgoE,aAA9C,GAA8D,EAAlF;AACA,MAAIC,QAAQjoE,QAAQioE,KAAR,KAAkB/wF,SAAlB,GAA8B8oB,QAAQioE,KAAtC,GAA8C,CAA1D;AACA,MAAIC,SAASloE,QAAQkoE,MAAR,KAAmBhxF,SAAnB,GAA+B8oB,QAAQkoE,MAAvC,GAAgD,GAA7D;;AAEA,MAAIC,eAAenoE,QAAQmoE,YAAR,KAAyBjxF,SAAzB,GAAqC8oB,QAAQmoE,YAA7C,GAA4D,IAA/E;AACA,MAAIC,iBAAiBpoE,QAAQooE,cAAR,KAA2BlxF,SAA3B,GAAuC8oB,QAAQooE,cAA/C,GAAgE,CAArF;AACA,MAAIC,YAAYroE,QAAQqoE,SAAR,KAAsBnxF,SAAtB,GAAkC8oB,QAAQqoE,SAA1C,GAAsDD,iBAAiB,CAAvF;AACA,MAAIE,gBAAgBtoE,QAAQsoE,aAAR,KAA0BpxF,SAA1B,GAAsC8oB,QAAQsoE,aAA9C,GAA8D,CAAlF;;AAEA,MAAIC,cAAcvoE,QAAQuoE,WAA1B;;AAEA,MAAIC,QAAQxoE,QAAQyoE,WAAR,KAAwBvxF,SAAxB,GAAoC8oB,QAAQyoE,WAA5C,GAA0DC,gBAAtE;;AAEA;;AAEA,MAAIC,UAAJ;AAAA,MAAgBC,gBAAgB,KAAhC;AACA,MAAIC,UAAJ,EAAgBC,QAAhB,EAA0BluE,MAA1B,EAAkCmuE,SAAlC;;AAEA,MAAKR,WAAL,EAAmB;;AAElBI,gBAAaJ,YAAYS,eAAZ,CAA6Bf,KAA7B,CAAb;;AAEAW,mBAAgB,IAAhB;AACAT,kBAAe,KAAf,CALkB,CAKI;;AAEtB;;AAEA;;AAEAU,gBAAaN,YAAYjH,mBAAZ,CAAiC2G,KAAjC,EAAwC,KAAxC,CAAb;;AAEA;;AAEAa,cAAW,IAAI58E,OAAJ,EAAX;AACA0O,YAAS,IAAI1O,OAAJ,EAAT;AACA68E,eAAY,IAAI78E,OAAJ,EAAZ;AAEA;;AAED;;AAEA,MAAK,CAAEi8E,YAAP,EAAsB;;AAErBG,mBAAgB,CAAhB;AACAF,oBAAiB,CAAjB;AACAC,eAAY,CAAZ;AAEA;;AAED;;AAEA,MAAIY,KAAJ,EAAW10E,CAAX,EAAc20E,EAAd,CAzD0B,CAyDR;;AAElB,MAAIC,cAAc3oD,MAAM4oD,aAAN,CAAqBpB,aAArB,CAAlB;;AAEA,MAAI7kE,WAAWgmE,YAAY3oD,KAA3B;AACA,MAAI8mD,QAAQ6B,YAAY7B,KAAxB;;AAEA,MAAI+B,UAAU,CAAEpC,WAAWE,WAAX,CAAwBhkE,QAAxB,CAAhB;;AAEA,MAAKkmE,OAAL,EAAe;;AAEdlmE,cAAWA,SAASkmE,OAAT,EAAX;;AAEA;;AAEA,QAAM90E,IAAI,CAAJ,EAAO20E,KAAK5B,MAAM9uF,MAAxB,EAAgC+b,IAAI20E,EAApC,EAAwC30E,GAAxC,EAA+C;;AAE9C00E,YAAQ3B,MAAO/yE,CAAP,CAAR;;AAEA,QAAK0yE,WAAWE,WAAX,CAAwB8B,KAAxB,CAAL,EAAuC;;AAEtC3B,WAAO/yE,CAAP,IAAa00E,MAAMI,OAAN,EAAb;AAEA;AAED;AAED;;AAGD,MAAI3mD,QAAQukD,WAAWI,gBAAX,CAA6BlkE,QAA7B,EAAuCmkE,KAAvC,CAAZ;;AAEA;;AAEA,MAAIJ,UAAU/jE,QAAd,CA3F0B,CA2FF;;AAExB,OAAM5O,IAAI,CAAJ,EAAO20E,KAAK5B,MAAM9uF,MAAxB,EAAgC+b,IAAI20E,EAApC,EAAwC30E,GAAxC,EAA+C;;AAE9C00E,WAAQ3B,MAAO/yE,CAAP,CAAR;;AAEA4O,cAAWA,SAASmmE,MAAT,CAAiBL,KAAjB,CAAX;AAEA;;AAGD,WAASM,QAAT,CAAmBC,EAAnB,EAAuBxN,GAAvB,EAA4B95D,IAA5B,EAAmC;;AAElC,OAAK,CAAE85D,GAAP,EAAar1E,QAAQyD,KAAR,CAAe,2CAAf;;AAEb,UAAO4xE,IAAI31E,KAAJ,GAAYkB,cAAZ,CAA4B2a,IAA5B,EAAmCzb,GAAnC,CAAwC+iF,EAAxC,CAAP;AAEA;;AAED,MAAIviF,CAAJ;AAAA,MAAOwiF,EAAP;AAAA,MAAWllF,CAAX;AAAA,MAAcyH,CAAd;AAAA,MACC09E,IADD;AAAA,MACOC,OAAOxmE,SAAS3qB,MADvB;AAAA,MAECkrC,IAFD;AAAA,MAEOkmD,OAAOlnD,MAAMlqC,MAFpB;;AAKA;;;AAGA,WAASqxF,WAAT,CAAsBC,IAAtB,EAA4BC,MAA5B,EAAoCC,MAApC,EAA6C;;AAE5C;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAIC,SAAJ,EAAeC,SAAf,EAA0BC,SAA1B,CAT4C,CASP;;AAErC;AACA;;AAEA,OAAIC,WAAWN,KAAKpyF,CAAL,GAASqyF,OAAOryF,CAA/B;AAAA,OACC2yF,WAAWP,KAAKxlF,CAAL,GAASylF,OAAOzlF,CAD5B;AAEA,OAAIgmF,WAAWN,OAAOtyF,CAAP,GAAWoyF,KAAKpyF,CAA/B;AAAA,OACC6yF,WAAWP,OAAO1lF,CAAP,GAAWwlF,KAAKxlF,CAD5B;;AAGA,OAAIkmF,eAAiBJ,WAAWA,QAAX,GAAsBC,WAAWA,QAAtD;;AAEA;AACA,OAAII,aAAeL,WAAWG,QAAX,GAAsBF,WAAWC,QAApD;;AAEA,OAAKnzF,KAAKqR,GAAL,CAAUiiF,UAAV,IAAyBzzF,OAAOC,OAArC,EAA+C;;AAE9C;;AAEA;;AAEA,QAAIyzF,aAAavzF,KAAKmR,IAAL,CAAWkiF,YAAX,CAAjB;AACA,QAAIG,aAAaxzF,KAAKmR,IAAL,CAAWgiF,WAAWA,QAAX,GAAsBC,WAAWA,QAA5C,CAAjB;;AAEA;;AAEA,QAAIK,gBAAkBb,OAAOryF,CAAP,GAAW2yF,WAAWK,UAA5C;AACA,QAAIG,gBAAkBd,OAAOzlF,CAAP,GAAW8lF,WAAWM,UAA5C;;AAEA,QAAII,gBAAkBd,OAAOtyF,CAAP,GAAW6yF,WAAWI,UAA5C;AACA,QAAII,gBAAkBf,OAAO1lF,CAAP,GAAWgmF,WAAWK,UAA5C;;AAEA;;AAEA,QAAIK,KAAK,CAAE,CAAEF,gBAAgBF,aAAlB,IAAoCL,QAApC,GACT,CAAEQ,gBAAgBF,aAAlB,IAAoCP,QAD7B,KAENF,WAAWG,QAAX,GAAsBF,WAAWC,QAF3B,CAAT;;AAIA;;AAEAL,gBAAcW,gBAAgBR,WAAWY,EAA3B,GAAgClB,KAAKpyF,CAAnD;AACAwyF,gBAAcW,gBAAgBR,WAAWW,EAA3B,GAAgClB,KAAKxlF,CAAnD;;AAEA;AACA;AACA,QAAI2mF,gBAAkBhB,YAAYA,SAAZ,GAAwBC,YAAYA,SAA1D;AACA,QAAKe,iBAAiB,CAAtB,EAA0B;;AAEzB,YAAO,IAAIvlF,OAAJ,CAAaukF,SAAb,EAAwBC,SAAxB,CAAP;AAEA,KAJD,MAIO;;AAENC,iBAAYhzF,KAAKmR,IAAL,CAAW2iF,gBAAgB,CAA3B,CAAZ;AAEA;AAED,IAzCD,MAyCO;;AAEN;;AAEA,QAAIC,eAAe,KAAnB,CAJM,CAIoB;AAC1B,QAAKd,WAAWpzF,OAAOC,OAAvB,EAAiC;;AAEhC,SAAKqzF,WAAWtzF,OAAOC,OAAvB,EAAiC;;AAEhCi0F,qBAAe,IAAf;AAEA;AAED,KARD,MAQO;;AAEN,SAAKd,WAAW,CAAEpzF,OAAOC,OAAzB,EAAmC;;AAElC,UAAKqzF,WAAW,CAAEtzF,OAAOC,OAAzB,EAAmC;;AAElCi0F,sBAAe,IAAf;AAEA;AAED,MARD,MAQO;;AAEN,UAAK/zF,KAAKM,IAAL,CAAW4yF,QAAX,MAA0BlzF,KAAKM,IAAL,CAAW8yF,QAAX,CAA/B,EAAuD;;AAEtDW,sBAAe,IAAf;AAEA;AAED;AAED;;AAED,QAAKA,YAAL,EAAoB;;AAEnB;AACAjB,iBAAY,CAAEI,QAAd;AACAH,iBAAYE,QAAZ;AACAD,iBAAYhzF,KAAKmR,IAAL,CAAWkiF,YAAX,CAAZ;AAEA,KAPD,MAOO;;AAEN;AACAP,iBAAYG,QAAZ;AACAF,iBAAYG,QAAZ;AACAF,iBAAYhzF,KAAKmR,IAAL,CAAWkiF,eAAe,CAA1B,CAAZ;AAEA;AAED;;AAED,UAAO,IAAI9kF,OAAJ,CAAaukF,YAAYE,SAAzB,EAAoCD,YAAYC,SAAhD,CAAP;AAEA;;AAGD,MAAIgB,mBAAmB,EAAvB;;AAEA,OAAM,IAAItxF,IAAI,CAAR,EAAWkoB,KAAKmlE,QAAQ1uF,MAAxB,EAAgCosB,IAAI7C,KAAK,CAAzC,EAA4C+mB,IAAIjvC,IAAI,CAA1D,EAA6DA,IAAIkoB,EAAjE,EAAqEloB,KAAM+qB,GAAN,EAAYkkB,GAAjF,EAAwF;;AAEvF,OAAKlkB,MAAM7C,EAAX,EAAgB6C,IAAI,CAAJ;AAChB,OAAKkkB,MAAM/mB,EAAX,EAAgB+mB,IAAI,CAAJ;;AAEhB;AACA;;AAEAqiD,oBAAkBtxF,CAAlB,IAAwBgwF,YAAa3C,QAASrtF,CAAT,CAAb,EAA2BqtF,QAAStiE,CAAT,CAA3B,EAAyCsiE,QAASp+C,CAAT,CAAzC,CAAxB;AAEA;;AAED,MAAIsiD,iBAAiB,EAArB;AAAA,MACCC,gBADD;AAAA,MACmBC,oBAAoBH,iBAAiB7B,MAAjB,EADvC;;AAGA,OAAM/0E,IAAI,CAAJ,EAAO20E,KAAK5B,MAAM9uF,MAAxB,EAAgC+b,IAAI20E,EAApC,EAAwC30E,GAAxC,EAA+C;;AAE9C00E,WAAQ3B,MAAO/yE,CAAP,CAAR;;AAEA82E,sBAAmB,EAAnB;;AAEA,QAAMxxF,IAAI,CAAJ,EAAOkoB,KAAKknE,MAAMzwF,MAAlB,EAA0BosB,IAAI7C,KAAK,CAAnC,EAAsC+mB,IAAIjvC,IAAI,CAApD,EAAuDA,IAAIkoB,EAA3D,EAA+DloB,KAAM+qB,GAAN,EAAYkkB,GAA3E,EAAkF;;AAEjF,QAAKlkB,MAAM7C,EAAX,EAAgB6C,IAAI,CAAJ;AAChB,QAAKkkB,MAAM/mB,EAAX,EAAgB+mB,IAAI,CAAJ;;AAEhB;AACAuiD,qBAAkBxxF,CAAlB,IAAwBgwF,YAAaZ,MAAOpvF,CAAP,CAAb,EAAyBovF,MAAOrkE,CAAP,CAAzB,EAAqCqkE,MAAOngD,CAAP,CAArC,CAAxB;AAEA;;AAEDsiD,kBAAehyF,IAAf,CAAqBiyF,gBAArB;AACAC,uBAAoBA,kBAAkBhC,MAAlB,CAA0B+B,gBAA1B,CAApB;AAEA;;AAGD;;AAEA,OAAMpkF,IAAI,CAAV,EAAaA,IAAIqhF,aAAjB,EAAgCrhF,GAAhC,EAAuC;;AAEtC;;AAEA1C,OAAI0C,IAAIqhF,aAAR;AACAt8E,OAAIo8E,iBAAiBjxF,KAAK8S,GAAL,CAAU1F,IAAIpN,KAAK4L,EAAT,GAAc,CAAxB,CAArB;AACA0mF,QAAKpB,YAAYlxF,KAAK+S,GAAL,CAAU3F,IAAIpN,KAAK4L,EAAT,GAAc,CAAxB,CAAjB;;AAEA;;AAEA,QAAMlJ,IAAI,CAAJ,EAAOkoB,KAAKmlE,QAAQ1uF,MAA1B,EAAkCqB,IAAIkoB,EAAtC,EAA0CloB,GAA1C,EAAiD;;AAEhD6vF,WAAOH,SAAUrC,QAASrtF,CAAT,CAAV,EAAwBsxF,iBAAkBtxF,CAAlB,CAAxB,EAA+C4vF,EAA/C,CAAP;;AAEAjjF,MAAGkjF,KAAKhyF,CAAR,EAAWgyF,KAAKplF,CAAhB,EAAmB,CAAE0H,CAArB;AAEA;;AAED;;AAEA,QAAMuI,IAAI,CAAJ,EAAO20E,KAAK5B,MAAM9uF,MAAxB,EAAgC+b,IAAI20E,EAApC,EAAwC30E,GAAxC,EAA+C;;AAE9C00E,YAAQ3B,MAAO/yE,CAAP,CAAR;AACA82E,uBAAmBD,eAAgB72E,CAAhB,CAAnB;;AAEA,SAAM1a,IAAI,CAAJ,EAAOkoB,KAAKknE,MAAMzwF,MAAxB,EAAgCqB,IAAIkoB,EAApC,EAAwCloB,GAAxC,EAA+C;;AAE9C6vF,YAAOH,SAAUN,MAAOpvF,CAAP,CAAV,EAAsBwxF,iBAAkBxxF,CAAlB,CAAtB,EAA6C4vF,EAA7C,CAAP;;AAEAjjF,OAAGkjF,KAAKhyF,CAAR,EAAWgyF,KAAKplF,CAAhB,EAAmB,CAAE0H,CAArB;AAEA;AAED;AAED;;AAEDy9E,OAAKpB,SAAL;;AAEA;;AAEA,OAAMxuF,IAAI,CAAV,EAAaA,IAAI8vF,IAAjB,EAAuB9vF,GAAvB,EAA8B;;AAE7B6vF,UAAOvB,eAAeoB,SAAUpmE,SAAUtpB,CAAV,CAAV,EAAyByxF,kBAAmBzxF,CAAnB,CAAzB,EAAiD4vF,EAAjD,CAAf,GAAuEtmE,SAAUtpB,CAAV,CAA9E;;AAEA,OAAK,CAAE+uF,aAAP,EAAuB;;AAEtBpiF,MAAGkjF,KAAKhyF,CAAR,EAAWgyF,KAAKplF,CAAhB,EAAmB,CAAnB;AAEA,IAJD,MAIO;;AAEN;;AAEAsW,WAAOrU,IAAP,CAAasiF,WAAW5kD,OAAX,CAAoB,CAApB,CAAb,EAAuC18B,cAAvC,CAAuDmiF,KAAKhyF,CAA5D;AACAoxF,aAASviF,IAAT,CAAesiF,WAAWzH,SAAX,CAAsB,CAAtB,CAAf,EAA2C75E,cAA3C,CAA2DmiF,KAAKplF,CAAhE;;AAEAykF,cAAUxiF,IAAV,CAAgBoiF,WAAY,CAAZ,CAAhB,EAAkCliF,GAAlC,CAAuCmU,MAAvC,EAAgDnU,GAAhD,CAAqDqiF,QAArD;;AAEAtiF,MAAGuiF,UAAUrxF,CAAb,EAAgBqxF,UAAUzkF,CAA1B,EAA6BykF,UAAU/8E,CAAvC;AAEA;AAED;;AAED;AACA;;AAEA,MAAIjF,CAAJ;;AAEA,OAAMA,IAAI,CAAV,EAAaA,KAAKkhF,KAAlB,EAAyBlhF,GAAzB,EAAgC;;AAE/B,QAAMlN,IAAI,CAAV,EAAaA,IAAI8vF,IAAjB,EAAuB9vF,GAAvB,EAA8B;;AAE7B6vF,WAAOvB,eAAeoB,SAAUpmE,SAAUtpB,CAAV,CAAV,EAAyByxF,kBAAmBzxF,CAAnB,CAAzB,EAAiD4vF,EAAjD,CAAf,GAAuEtmE,SAAUtpB,CAAV,CAA9E;;AAEA,QAAK,CAAE+uF,aAAP,EAAuB;;AAEtBpiF,OAAGkjF,KAAKhyF,CAAR,EAAWgyF,KAAKplF,CAAhB,EAAmB4jF,SAASD,KAAT,GAAiBlhF,CAApC;AAEA,KAJD,MAIO;;AAEN;;AAEA6T,YAAOrU,IAAP,CAAasiF,WAAW5kD,OAAX,CAAoBl9B,CAApB,CAAb,EAAuCQ,cAAvC,CAAuDmiF,KAAKhyF,CAA5D;AACAoxF,cAASviF,IAAT,CAAesiF,WAAWzH,SAAX,CAAsBr6E,CAAtB,CAAf,EAA2CQ,cAA3C,CAA2DmiF,KAAKplF,CAAhE;;AAEAykF,eAAUxiF,IAAV,CAAgBoiF,WAAY5hF,CAAZ,CAAhB,EAAkCN,GAAlC,CAAuCmU,MAAvC,EAAgDnU,GAAhD,CAAqDqiF,QAArD;;AAEAtiF,OAAGuiF,UAAUrxF,CAAb,EAAgBqxF,UAAUzkF,CAA1B,EAA6BykF,UAAU/8E,CAAvC;AAEA;AAED;AAED;;AAGD;;AAEA;AACA,OAAM/E,IAAIqhF,gBAAgB,CAA1B,EAA6BrhF,KAAK,CAAlC,EAAqCA,GAArC,EAA4C;;AAE3C1C,OAAI0C,IAAIqhF,aAAR;AACAt8E,OAAIo8E,iBAAiBjxF,KAAK8S,GAAL,CAAU1F,IAAIpN,KAAK4L,EAAT,GAAc,CAAxB,CAArB;AACA0mF,QAAKpB,YAAYlxF,KAAK+S,GAAL,CAAU3F,IAAIpN,KAAK4L,EAAT,GAAc,CAAxB,CAAjB;;AAEA;;AAEA,QAAMlJ,IAAI,CAAJ,EAAOkoB,KAAKmlE,QAAQ1uF,MAA1B,EAAkCqB,IAAIkoB,EAAtC,EAA0CloB,GAA1C,EAAiD;;AAEhD6vF,WAAOH,SAAUrC,QAASrtF,CAAT,CAAV,EAAwBsxF,iBAAkBtxF,CAAlB,CAAxB,EAA+C4vF,EAA/C,CAAP;AACAjjF,MAAGkjF,KAAKhyF,CAAR,EAAWgyF,KAAKplF,CAAhB,EAAmB4jF,SAASl8E,CAA5B;AAEA;;AAED;;AAEA,QAAMuI,IAAI,CAAJ,EAAO20E,KAAK5B,MAAM9uF,MAAxB,EAAgC+b,IAAI20E,EAApC,EAAwC30E,GAAxC,EAA+C;;AAE9C00E,YAAQ3B,MAAO/yE,CAAP,CAAR;AACA82E,uBAAmBD,eAAgB72E,CAAhB,CAAnB;;AAEA,SAAM1a,IAAI,CAAJ,EAAOkoB,KAAKknE,MAAMzwF,MAAxB,EAAgCqB,IAAIkoB,EAApC,EAAwCloB,GAAxC,EAA+C;;AAE9C6vF,YAAOH,SAAUN,MAAOpvF,CAAP,CAAV,EAAsBwxF,iBAAkBxxF,CAAlB,CAAtB,EAA6C4vF,EAA7C,CAAP;;AAEA,SAAK,CAAEb,aAAP,EAAuB;;AAEtBpiF,QAAGkjF,KAAKhyF,CAAR,EAAWgyF,KAAKplF,CAAhB,EAAmB4jF,SAASl8E,CAA5B;AAEA,MAJD,MAIO;;AAENxF,QAAGkjF,KAAKhyF,CAAR,EAAWgyF,KAAKplF,CAAL,GAASqkF,WAAYV,QAAQ,CAApB,EAAwB3jF,CAA5C,EAA+CqkF,WAAYV,QAAQ,CAApB,EAAwBvwF,CAAxB,GAA4BsU,CAA3E;AAEA;AAED;AAED;AAED;;AAED;;AAEA;;AAEAu/E;;AAEA;;AAEAC;;AAGA;;AAEA,WAASD,aAAT,GAAyB;;AAExB,OAAI9kE,QAAQohE,cAAcrvF,MAAd,GAAuB,CAAnC;;AAEA,OAAK2vF,YAAL,EAAoB;;AAEnB,QAAIpb,QAAQ,CAAZ,CAFmB,CAEJ;AACf,QAAIvjE,SAASmgF,OAAO5c,KAApB;;AAEA;;AAEA,SAAMlzE,IAAI,CAAV,EAAaA,IAAI+vF,IAAjB,EAAuB/vF,GAAvB,EAA8B;;AAE7B6pC,YAAOhB,MAAO7oC,CAAP,CAAP;AACA4xF,QAAI/nD,KAAM,CAAN,IAAYl6B,MAAhB,EAAwBk6B,KAAM,CAAN,IAAYl6B,MAApC,EAA4Ck6B,KAAM,CAAN,IAAYl6B,MAAxD;AAEA;;AAEDujE,YAAQkb,QAAQK,gBAAgB,CAAhC;AACA9+E,aAASmgF,OAAO5c,KAAhB;;AAEA;;AAEA,SAAMlzE,IAAI,CAAV,EAAaA,IAAI+vF,IAAjB,EAAuB/vF,GAAvB,EAA8B;;AAE7B6pC,YAAOhB,MAAO7oC,CAAP,CAAP;AACA4xF,QAAI/nD,KAAM,CAAN,IAAYl6B,MAAhB,EAAwBk6B,KAAM,CAAN,IAAYl6B,MAApC,EAA4Ck6B,KAAM,CAAN,IAAYl6B,MAAxD;AAEA;AAED,IA1BD,MA0BO;;AAEN;;AAEA,SAAM3P,IAAI,CAAV,EAAaA,IAAI+vF,IAAjB,EAAuB/vF,GAAvB,EAA8B;;AAE7B6pC,YAAOhB,MAAO7oC,CAAP,CAAP;AACA4xF,QAAI/nD,KAAM,CAAN,CAAJ,EAAeA,KAAM,CAAN,CAAf,EAA0BA,KAAM,CAAN,CAA1B;AAEA;;AAED;;AAEA,SAAM7pC,IAAI,CAAV,EAAaA,IAAI+vF,IAAjB,EAAuB/vF,GAAvB,EAA8B;;AAE7B6pC,YAAOhB,MAAO7oC,CAAP,CAAP;AACA4xF,QAAI/nD,KAAM,CAAN,IAAYimD,OAAO1B,KAAvB,EAA8BvkD,KAAM,CAAN,IAAYimD,OAAO1B,KAAjD,EAAwDvkD,KAAM,CAAN,IAAYimD,OAAO1B,KAA3E;AAEA;AAED;;AAEDnlE,SAAMwpB,QAAN,CAAgB7lB,KAAhB,EAAuBohE,cAAcrvF,MAAd,GAAuB,CAAvB,GAA2BiuB,KAAlD,EAAyD,CAAzD;AAEA;;AAED;;AAEA,WAAS+kE,cAAT,GAA0B;;AAEzB,OAAI/kE,QAAQohE,cAAcrvF,MAAd,GAAuB,CAAnC;AACA,OAAIkzF,cAAc,CAAlB;AACAC,aAAWzE,OAAX,EAAoBwE,WAApB;AACAA,kBAAexE,QAAQ1uF,MAAvB;;AAEA,QAAM+b,IAAI,CAAJ,EAAO20E,KAAK5B,MAAM9uF,MAAxB,EAAgC+b,IAAI20E,EAApC,EAAwC30E,GAAxC,EAA+C;;AAE9C00E,YAAQ3B,MAAO/yE,CAAP,CAAR;AACAo3E,cAAW1C,KAAX,EAAkByC,WAAlB;;AAEA;AACAA,mBAAezC,MAAMzwF,MAArB;AAEA;;AAGDsqB,SAAMwpB,QAAN,CAAgB7lB,KAAhB,EAAuBohE,cAAcrvF,MAAd,GAAuB,CAAvB,GAA2BiuB,KAAlD,EAAyD,CAAzD;AAGA;;AAED,WAASklE,SAAT,CAAoBzE,OAApB,EAA6BwE,WAA7B,EAA2C;;AAE1C,OAAI9mE,CAAJ,EAAOkkB,CAAP;AACAjvC,OAAIqtF,QAAQ1uF,MAAZ;;AAEA,UAAQ,EAAGqB,CAAH,IAAQ,CAAhB,EAAoB;;AAEnB+qB,QAAI/qB,CAAJ;AACAivC,QAAIjvC,IAAI,CAAR;AACA,QAAKivC,IAAI,CAAT,EAAaA,IAAIo+C,QAAQ1uF,MAAR,GAAiB,CAArB;;AAEb;;AAEA,QAAIuO,IAAI,CAAR;AAAA,QACC6kF,KAAK3D,QAAQK,gBAAgB,CAD9B;;AAGA,SAAMvhF,IAAI,CAAV,EAAaA,IAAI6kF,EAAjB,EAAqB7kF,GAArB,EAA4B;;AAE3B,SAAI8kF,QAAQlC,OAAO5iF,CAAnB;AACA,SAAI+kF,QAAQnC,QAAS5iF,IAAI,CAAb,CAAZ;;AAEA,SAAIC,IAAI0kF,cAAc9mE,CAAd,GAAkBinE,KAA1B;AAAA,SACC5kF,IAAIykF,cAAc5iD,CAAd,GAAkB+iD,KADvB;AAAA,SAEC7hF,IAAI0hF,cAAc5iD,CAAd,GAAkBgjD,KAFvB;AAAA,SAGCr/E,IAAIi/E,cAAc9mE,CAAd,GAAkBknE,KAHvB;;AAKAC,QAAI/kF,CAAJ,EAAOC,CAAP,EAAU+C,CAAV,EAAayC,CAAb;AAEA;AAED;AAED;;AAED,WAASjG,CAAT,CAAY9O,CAAZ,EAAe4M,CAAf,EAAkB0H,CAAlB,EAAsB;;AAErB+7E,eAAY3uF,IAAZ,CAAkB1B,CAAlB;AACAqwF,eAAY3uF,IAAZ,CAAkBkL,CAAlB;AACAyjF,eAAY3uF,IAAZ,CAAkB4S,CAAlB;AAEA;;AAGD,WAASy/E,EAAT,CAAazkF,CAAb,EAAgBC,CAAhB,EAAmB+C,CAAnB,EAAuB;;AAEtBgiF,aAAWhlF,CAAX;AACAglF,aAAW/kF,CAAX;AACA+kF,aAAWhiF,CAAX;;AAEA,OAAIiiF,YAAYpE,cAAcrvF,MAAd,GAAuB,CAAvC;AACA,OAAI0rC,MAAMskD,MAAM0D,aAAN,CAAqBppE,KAArB,EAA4B+kE,aAA5B,EAA2CoE,YAAY,CAAvD,EAA0DA,YAAY,CAAtE,EAAyEA,YAAY,CAArF,CAAV;;AAEAE,SAAOjoD,IAAK,CAAL,CAAP;AACAioD,SAAOjoD,IAAK,CAAL,CAAP;AACAioD,SAAOjoD,IAAK,CAAL,CAAP;AAEA;;AAED,WAAS6nD,EAAT,CAAa/kF,CAAb,EAAgBC,CAAhB,EAAmB+C,CAAnB,EAAsByC,CAAtB,EAA0B;;AAEzBu/E,aAAWhlF,CAAX;AACAglF,aAAW/kF,CAAX;AACA+kF,aAAWv/E,CAAX;;AAEAu/E,aAAW/kF,CAAX;AACA+kF,aAAWhiF,CAAX;AACAgiF,aAAWv/E,CAAX;;AAGA,OAAIw/E,YAAYpE,cAAcrvF,MAAd,GAAuB,CAAvC;AACA,OAAI0rC,MAAMskD,MAAM4D,kBAAN,CAA0BtpE,KAA1B,EAAiC+kE,aAAjC,EAAgDoE,YAAY,CAA5D,EAA+DA,YAAY,CAA3E,EAA8EA,YAAY,CAA1F,EAA6FA,YAAY,CAAzG,CAAV;;AAEAE,SAAOjoD,IAAK,CAAL,CAAP;AACAioD,SAAOjoD,IAAK,CAAL,CAAP;AACAioD,SAAOjoD,IAAK,CAAL,CAAP;;AAEAioD,SAAOjoD,IAAK,CAAL,CAAP;AACAioD,SAAOjoD,IAAK,CAAL,CAAP;AACAioD,SAAOjoD,IAAK,CAAL,CAAP;AAEA;;AAED,WAAS8nD,SAAT,CAAoB1zF,KAApB,EAA4B;;AAE3BuvF,iBAAczuF,IAAd,CAAoB2uF,YAAazvF,QAAQ,CAAR,GAAY,CAAzB,CAApB;AACAuvF,iBAAczuF,IAAd,CAAoB2uF,YAAazvF,QAAQ,CAAR,GAAY,CAAzB,CAApB;AACAuvF,iBAAczuF,IAAd,CAAoB2uF,YAAazvF,QAAQ,CAAR,GAAY,CAAzB,CAApB;AAEA;;AAGD,WAAS6zF,KAAT,CAAgBE,OAAhB,EAA0B;;AAEzBrZ,WAAQ55E,IAAR,CAAcizF,QAAQ30F,CAAtB;AACAs7E,WAAQ55E,IAAR,CAAcizF,QAAQ/nF,CAAtB;AAEA;AAED;AAED;;AAEDsjF,sBAAsBhwF,SAAtB,GAAkCC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAAlC;AACAgwF,sBAAsBhwF,SAAtB,CAAgC0O,WAAhC,GAA8CshF,qBAA9C;;AAEA,IAAIc,mBAAmB;;AAEtBwD,gBAAe,UAAWjpE,QAAX,EAAqBE,QAArB,EAA+BmpE,MAA/B,EAAuCC,MAAvC,EAA+CC,MAA/C,EAAwD;;AAEtE,MAAIC,MAAMtpE,SAAUmpE,SAAS,CAAnB,CAAV;AACA,MAAII,MAAMvpE,SAAUmpE,SAAS,CAAT,GAAa,CAAvB,CAAV;AACA,MAAIK,MAAMxpE,SAAUopE,SAAS,CAAnB,CAAV;AACA,MAAIK,MAAMzpE,SAAUopE,SAAS,CAAT,GAAa,CAAvB,CAAV;AACA,MAAIM,MAAM1pE,SAAUqpE,SAAS,CAAnB,CAAV;AACA,MAAIM,MAAM3pE,SAAUqpE,SAAS,CAAT,GAAa,CAAvB,CAAV;;AAEA,SAAO,CACN,IAAI9mF,OAAJ,CAAa+mF,GAAb,EAAkBC,GAAlB,CADM,EAEN,IAAIhnF,OAAJ,CAAainF,GAAb,EAAkBC,GAAlB,CAFM,EAGN,IAAIlnF,OAAJ,CAAamnF,GAAb,EAAkBC,GAAlB,CAHM,CAAP;AAMA,EAjBqB;;AAmBtBV,qBAAoB,UAAWnpE,QAAX,EAAqBE,QAArB,EAA+BmpE,MAA/B,EAAuCC,MAAvC,EAA+CC,MAA/C,EAAuDO,MAAvD,EAAgE;;AAEnF,MAAIN,MAAMtpE,SAAUmpE,SAAS,CAAnB,CAAV;AACA,MAAII,MAAMvpE,SAAUmpE,SAAS,CAAT,GAAa,CAAvB,CAAV;AACA,MAAIU,MAAM7pE,SAAUmpE,SAAS,CAAT,GAAa,CAAvB,CAAV;AACA,MAAIK,MAAMxpE,SAAUopE,SAAS,CAAnB,CAAV;AACA,MAAIK,MAAMzpE,SAAUopE,SAAS,CAAT,GAAa,CAAvB,CAAV;AACA,MAAIU,MAAM9pE,SAAUopE,SAAS,CAAT,GAAa,CAAvB,CAAV;AACA,MAAIM,MAAM1pE,SAAUqpE,SAAS,CAAnB,CAAV;AACA,MAAIM,MAAM3pE,SAAUqpE,SAAS,CAAT,GAAa,CAAvB,CAAV;AACA,MAAIU,MAAM/pE,SAAUqpE,SAAS,CAAT,GAAa,CAAvB,CAAV;AACA,MAAIW,MAAMhqE,SAAU4pE,SAAS,CAAnB,CAAV;AACA,MAAIK,MAAMjqE,SAAU4pE,SAAS,CAAT,GAAa,CAAvB,CAAV;AACA,MAAIM,MAAMlqE,SAAU4pE,SAAS,CAAT,GAAa,CAAvB,CAAV;;AAEA,MAAK51F,KAAKqR,GAAL,CAAUkkF,MAAME,GAAhB,IAAwB,IAA7B,EAAoC;;AAEnC,UAAO,CACN,IAAIlnF,OAAJ,CAAa+mF,GAAb,EAAkB,IAAIO,GAAtB,CADM,EAEN,IAAItnF,OAAJ,CAAainF,GAAb,EAAkB,IAAIM,GAAtB,CAFM,EAGN,IAAIvnF,OAAJ,CAAamnF,GAAb,EAAkB,IAAIK,GAAtB,CAHM,EAIN,IAAIxnF,OAAJ,CAAaynF,GAAb,EAAkB,IAAIE,GAAtB,CAJM,CAAP;AAOA,GATD,MASO;;AAEN,UAAO,CACN,IAAI3nF,OAAJ,CAAagnF,GAAb,EAAkB,IAAIM,GAAtB,CADM,EAEN,IAAItnF,OAAJ,CAAaknF,GAAb,EAAkB,IAAIK,GAAtB,CAFM,EAGN,IAAIvnF,OAAJ,CAAaonF,GAAb,EAAkB,IAAII,GAAtB,CAHM,EAIN,IAAIxnF,OAAJ,CAAa0nF,GAAb,EAAkB,IAAIC,GAAtB,CAJM,CAAP;AAOA;AAED;AAtDqB,CAAvB;;AAyDA;;;;;;;;;;;;;;;;;;;AAmBA;;AAEA,SAASC,YAAT,CAAuBC,IAAvB,EAA6BhtD,UAA7B,EAA0C;;AAEzCiC,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,cAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBgtD,QAAMA,IADW;AAEjBhtD,cAAYA;AAFK,EAAlB;;AAKA,MAAKuD,kBAAL,CAAyB,IAAI0pD,kBAAJ,CAAwBD,IAAxB,EAA8BhtD,UAA9B,CAAzB;AACA,MAAKwG,aAAL;AAEA;;AAEDumD,aAAa11F,SAAb,GAAyBC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAAzB;AACA01F,aAAa11F,SAAb,CAAuB0O,WAAvB,GAAqCgnF,YAArC;;AAEA;;AAEA,SAASE,kBAAT,CAA6BD,IAA7B,EAAmChtD,UAAnC,EAAgD;;AAE/CA,cAAaA,cAAc,EAA3B;;AAEA,KAAIktD,OAAOltD,WAAWktD,IAAtB;;AAEA,KAAK,EAAIA,QAAQA,KAAKC,MAAjB,CAAL,EAAiC;;AAEhC/mF,UAAQyD,KAAR,CAAe,sEAAf;AACA,SAAO,IAAIo4B,QAAJ,EAAP;AAEA;;AAED,KAAIvC,SAASwtD,KAAKE,cAAL,CAAqBJ,IAArB,EAA2BhtD,WAAWre,IAAtC,EAA4Cqe,WAAWynD,aAAvD,CAAb;;AAEA;;AAEAznD,YAAW2nD,MAAX,GAAoB3nD,WAAW/hB,MAAX,KAAsBtnB,SAAtB,GAAkCqpC,WAAW/hB,MAA7C,GAAsD,EAA1E;;AAEA;;AAEA,KAAK+hB,WAAW6nD,cAAX,KAA8BlxF,SAAnC,EAA+CqpC,WAAW6nD,cAAX,GAA4B,EAA5B;AAC/C,KAAK7nD,WAAW8nD,SAAX,KAAyBnxF,SAA9B,EAA0CqpC,WAAW8nD,SAAX,GAAuB,CAAvB;AAC1C,KAAK9nD,WAAW4nD,YAAX,KAA4BjxF,SAAjC,EAA6CqpC,WAAW4nD,YAAX,GAA0B,KAA1B;;AAE7CP,uBAAsBhvF,IAAtB,CAA4B,IAA5B,EAAkCqnC,MAAlC,EAA0CM,UAA1C;;AAEA,MAAKxnC,IAAL,GAAY,oBAAZ;AAEA;;AAEDy0F,mBAAmB51F,SAAnB,GAA+BC,OAAO8lB,MAAP,CAAeiqE,sBAAsBhwF,SAArC,CAA/B;AACA41F,mBAAmB51F,SAAnB,CAA6B0O,WAA7B,GAA2CknF,kBAA3C;;AAEA;;;;;;AAMA;;AAEA,SAASI,cAAT,CAAyBzyE,MAAzB,EAAiC6yB,aAAjC,EAAgDC,cAAhD,EAAgE4/C,QAAhE,EAA0EC,SAA1E,EAAqFC,UAArF,EAAiGC,WAAjG,EAA+G;;AAE9GxrD,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,gBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB6yB,iBAAeA,aAFE;AAGjBC,kBAAgBA,cAHC;AAIjB4/C,YAAUA,QAJO;AAKjBC,aAAWA,SALM;AAMjBC,cAAYA,UANK;AAOjBC,eAAaA;AAPI,EAAlB;;AAUA,MAAKlqD,kBAAL,CAAyB,IAAImqD,oBAAJ,CAA0B9yE,MAA1B,EAAkC6yB,aAAlC,EAAiDC,cAAjD,EAAiE4/C,QAAjE,EAA2EC,SAA3E,EAAsFC,UAAtF,EAAkGC,WAAlG,CAAzB;AACA,MAAKjnD,aAAL;AAEA;;AAED6mD,eAAeh2F,SAAf,GAA2BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA3B;AACAg2F,eAAeh2F,SAAf,CAAyB0O,WAAzB,GAAuCsnF,cAAvC;;AAEA;;AAEA,SAASK,oBAAT,CAA+B9yE,MAA/B,EAAuC6yB,aAAvC,EAAsDC,cAAtD,EAAsE4/C,QAAtE,EAAgFC,SAAhF,EAA2FC,UAA3F,EAAuGC,WAAvG,EAAqH;;AAEpHliD,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,sBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB6yB,iBAAeA,aAFE;AAGjBC,kBAAgBA,cAHC;AAIjB4/C,YAAUA,QAJO;AAKjBC,aAAWA,SALM;AAMjBC,cAAYA,UANK;AAOjBC,eAAaA;AAPI,EAAlB;;AAUA7yE,UAASA,UAAU,CAAnB;;AAEA6yB,iBAAgB72C,KAAKyM,GAAL,CAAU,CAAV,EAAazM,KAAKK,KAAL,CAAYw2C,aAAZ,KAA+B,CAA5C,CAAhB;AACAC,kBAAiB92C,KAAKyM,GAAL,CAAU,CAAV,EAAazM,KAAKK,KAAL,CAAYy2C,cAAZ,KAAgC,CAA7C,CAAjB;;AAEA4/C,YAAWA,aAAa32F,SAAb,GAAyB22F,QAAzB,GAAoC,CAA/C;AACAC,aAAYA,cAAc52F,SAAd,GAA0B42F,SAA1B,GAAsC32F,KAAK4L,EAAL,GAAU,CAA5D;;AAEAgrF,cAAaA,eAAe72F,SAAf,GAA2B62F,UAA3B,GAAwC,CAArD;AACAC,eAAcA,gBAAgB92F,SAAhB,GAA4B82F,WAA5B,GAA0C72F,KAAK4L,EAA7D;;AAEA,KAAImrF,WAAWH,aAAaC,WAA5B;;AAEA,KAAIz0E,EAAJ,EAAQC,EAAR;;AAEA,KAAIlhB,QAAQ,CAAZ;AACA,KAAI61F,OAAO,EAAX;;AAEA,KAAI1qD,SAAS,IAAIv3B,OAAJ,EAAb;AACA,KAAI0O,SAAS,IAAI1O,OAAJ,EAAb;;AAEA;;AAEA,KAAI63B,UAAU,EAAd;AACA,KAAI5gB,WAAW,EAAf;AACA,KAAI8gB,UAAU,EAAd;AACA,KAAIC,MAAM,EAAV;;AAEA;;AAEA,MAAM1qB,KAAK,CAAX,EAAcA,MAAMy0B,cAApB,EAAoCz0B,IAApC,EAA4C;;AAE3C,MAAI40E,cAAc,EAAlB;;AAEA,MAAI5nF,IAAIgT,KAAKy0B,cAAb;;AAEA,OAAM10B,KAAK,CAAX,EAAcA,MAAMy0B,aAApB,EAAmCz0B,IAAnC,EAA2C;;AAE1C,OAAIgX,IAAIhX,KAAKy0B,aAAb;;AAEA;;AAEAvK,UAAO/rC,CAAP,GAAW,CAAEyjB,MAAF,GAAWhkB,KAAK8S,GAAL,CAAU4jF,WAAWt9D,IAAIu9D,SAAzB,CAAX,GAAkD32F,KAAK+S,GAAL,CAAU6jF,aAAavnF,IAAIwnF,WAA3B,CAA7D;AACAvqD,UAAOn/B,CAAP,GAAW6W,SAAShkB,KAAK8S,GAAL,CAAU8jF,aAAavnF,IAAIwnF,WAA3B,CAApB;AACAvqD,UAAOz3B,CAAP,GAAWmP,SAAShkB,KAAK+S,GAAL,CAAU2jF,WAAWt9D,IAAIu9D,SAAzB,CAAT,GAAgD32F,KAAK+S,GAAL,CAAU6jF,aAAavnF,IAAIwnF,WAA3B,CAA3D;;AAEA7qE,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEA;;AAEA4O,UAAOhV,GAAP,CAAY69B,OAAO/rC,CAAnB,EAAsB+rC,OAAOn/B,CAA7B,EAAgCm/B,OAAOz3B,CAAvC,EAA2CvD,SAA3C;AACAw7B,WAAQ7qC,IAAR,CAAcwhB,OAAOljB,CAArB,EAAwBkjB,OAAOtW,CAA/B,EAAkCsW,OAAO5O,CAAzC;;AAEA;;AAEAk4B,OAAI9qC,IAAJ,CAAUm3B,CAAV,EAAa,IAAI/pB,CAAjB;;AAEA4nF,eAAYh1F,IAAZ,CAAkBd,OAAlB;AAEA;;AAED61F,OAAK/0F,IAAL,CAAWg1F,WAAX;AAEA;;AAED;;AAEA,MAAM50E,KAAK,CAAX,EAAcA,KAAKy0B,cAAnB,EAAmCz0B,IAAnC,EAA2C;;AAE1C,OAAMD,KAAK,CAAX,EAAcA,KAAKy0B,aAAnB,EAAkCz0B,IAAlC,EAA0C;;AAEzC,OAAIvS,IAAImnF,KAAM30E,EAAN,EAAYD,KAAK,CAAjB,CAAR;AACA,OAAItS,IAAIknF,KAAM30E,EAAN,EAAYD,EAAZ,CAAR;AACA,OAAIvP,IAAImkF,KAAM30E,KAAK,CAAX,EAAgBD,EAAhB,CAAR;AACA,OAAI9M,IAAI0hF,KAAM30E,KAAK,CAAX,EAAgBD,KAAK,CAArB,CAAR;;AAEA,OAAKC,OAAO,CAAP,IAAYu0E,aAAa,CAA9B,EAAkChqD,QAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBwF,CAApB;AAClC,OAAK+M,OAAOy0B,iBAAiB,CAAxB,IAA6BigD,WAAW/2F,KAAK4L,EAAlD,EAAuDghC,QAAQ3qC,IAAR,CAAc6N,CAAd,EAAiB+C,CAAjB,EAAoByC,CAApB;AAEvD;AAED;;AAED;;AAEA,MAAKy/B,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B9G,OAA5B,EAAqC,CAArC,CAA7B;AACA,MAAKkI,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;AAEA;;AAED+pD,qBAAqBr2F,SAArB,GAAiCC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAAjC;AACAq2F,qBAAqBr2F,SAArB,CAA+B0O,WAA/B,GAA6C2nF,oBAA7C;;AAEA;;;;;AAKA;;AAEA,SAASI,YAAT,CAAuBC,WAAvB,EAAoCC,WAApC,EAAiDC,aAAjD,EAAgEC,WAAhE,EAA6EV,UAA7E,EAAyFC,WAAzF,EAAuG;;AAEtGxrD,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,cAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjB+tD,eAAaA,WADI;AAEjBC,eAAaA,WAFI;AAGjBC,iBAAeA,aAHE;AAIjBC,eAAaA,WAJI;AAKjBV,cAAYA,UALK;AAMjBC,eAAaA;AANI,EAAlB;;AASA,MAAKlqD,kBAAL,CAAyB,IAAI4qD,kBAAJ,CAAwBJ,WAAxB,EAAqCC,WAArC,EAAkDC,aAAlD,EAAiEC,WAAjE,EAA8EV,UAA9E,EAA0FC,WAA1F,CAAzB;AACA,MAAKjnD,aAAL;AAEA;;AAEDsnD,aAAaz2F,SAAb,GAAyBC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAAzB;AACAy2F,aAAaz2F,SAAb,CAAuB0O,WAAvB,GAAqC+nF,YAArC;;AAEA;;AAEA,SAASK,kBAAT,CAA6BJ,WAA7B,EAA0CC,WAA1C,EAAuDC,aAAvD,EAAsEC,WAAtE,EAAmFV,UAAnF,EAA+FC,WAA/F,EAA6G;;AAE5GliD,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,oBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjB+tD,eAAaA,WADI;AAEjBC,eAAaA,WAFI;AAGjBC,iBAAeA,aAHE;AAIjBC,eAAaA,WAJI;AAKjBV,cAAYA,UALK;AAMjBC,eAAaA;AANI,EAAlB;;AASAM,eAAcA,eAAe,GAA7B;AACAC,eAAcA,eAAe,CAA7B;;AAEAR,cAAaA,eAAe72F,SAAf,GAA2B62F,UAA3B,GAAwC,CAArD;AACAC,eAAcA,gBAAgB92F,SAAhB,GAA4B82F,WAA5B,GAA0C72F,KAAK4L,EAAL,GAAU,CAAlE;;AAEAyrF,iBAAgBA,kBAAkBt3F,SAAlB,GAA8BC,KAAKyM,GAAL,CAAU,CAAV,EAAa4qF,aAAb,CAA9B,GAA6D,CAA7E;AACAC,eAAcA,gBAAgBv3F,SAAhB,GAA4BC,KAAKyM,GAAL,CAAU,CAAV,EAAa6qF,WAAb,CAA5B,GAAyD,CAAvE;;AAEA;;AAEA,KAAI1qD,UAAU,EAAd;AACA,KAAI5gB,WAAW,EAAf;AACA,KAAI8gB,UAAU,EAAd;AACA,KAAIC,MAAM,EAAV;;AAEA;;AAEA,KAAIyqD,OAAJ;AACA,KAAIxzE,SAASmzE,WAAb;AACA,KAAIM,aAAe,CAAEL,cAAcD,WAAhB,IAAgCG,WAAnD;AACA,KAAIhrD,SAAS,IAAIv3B,OAAJ,EAAb;AACA,KAAIoT,KAAK,IAAI5Z,OAAJ,EAAT;AACA,KAAIkf,CAAJ,EAAO/qB,CAAP;;AAEA;;AAEA,MAAM+qB,IAAI,CAAV,EAAaA,KAAK6pE,WAAlB,EAA+B7pE,GAA/B,EAAsC;;AAErC,OAAM/qB,IAAI,CAAV,EAAaA,KAAK20F,aAAlB,EAAiC30F,GAAjC,EAAwC;;AAEvC;;AAEA80F,aAAUZ,aAAal0F,IAAI20F,aAAJ,GAAoBR,WAA3C;;AAEA;;AAEAvqD,UAAO/rC,CAAP,GAAWyjB,SAAShkB,KAAK8S,GAAL,CAAU0kF,OAAV,CAApB;AACAlrD,UAAOn/B,CAAP,GAAW6W,SAAShkB,KAAK+S,GAAL,CAAUykF,OAAV,CAApB;;AAEAxrE,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEA;;AAEAi4B,WAAQ7qC,IAAR,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB;;AAEA;;AAEAkmB,MAAG5nB,CAAH,GAAO,CAAE+rC,OAAO/rC,CAAP,GAAW62F,WAAX,GAAyB,CAA3B,IAAiC,CAAxC;AACAjvE,MAAGhb,CAAH,GAAO,CAAEm/B,OAAOn/B,CAAP,GAAWiqF,WAAX,GAAyB,CAA3B,IAAiC,CAAxC;;AAEArqD,OAAI9qC,IAAJ,CAAUkmB,GAAG5nB,CAAb,EAAgB4nB,GAAGhb,CAAnB;AAEA;;AAED;;AAEA6W,YAAUyzE,UAAV;AAEA;;AAED;;AAEA,MAAMhqE,IAAI,CAAV,EAAaA,IAAI6pE,WAAjB,EAA8B7pE,GAA9B,EAAqC;;AAEpC,MAAIiqE,oBAAoBjqE,KAAM4pE,gBAAgB,CAAtB,CAAxB;;AAEA,OAAM30F,IAAI,CAAV,EAAaA,IAAI20F,aAAjB,EAAgC30F,GAAhC,EAAuC;;AAEtC80F,aAAU90F,IAAIg1F,iBAAd;;AAEA,OAAI7nF,IAAI2nF,OAAR;AACA,OAAI1nF,IAAI0nF,UAAUH,aAAV,GAA0B,CAAlC;AACA,OAAIxkF,IAAI2kF,UAAUH,aAAV,GAA0B,CAAlC;AACA,OAAI/hF,IAAIkiF,UAAU,CAAlB;;AAEA;;AAEA5qD,WAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBwF,CAApB;AACAs3B,WAAQ3qC,IAAR,CAAc6N,CAAd,EAAiB+C,CAAjB,EAAoByC,CAApB;AAEA;AAED;;AAED;;AAEA,MAAKy/B,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B9G,OAA5B,EAAqC,CAArC,CAA7B;AACA,MAAKkI,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;AAEA;;AAEDwqD,mBAAmB92F,SAAnB,GAA+BC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAA/B;AACA82F,mBAAmB92F,SAAnB,CAA6B0O,WAA7B,GAA2CooF,kBAA3C;;AAEA;;;;;;;AAOA;;AAEA,SAASI,aAAT,CAAwBjtE,MAAxB,EAAgCktE,QAAhC,EAA0ClB,QAA1C,EAAoDC,SAApD,EAAgE;;AAE/DtrD,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,eAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjB1e,UAAQA,MADS;AAEjBktE,YAAUA,QAFO;AAGjBlB,YAAUA,QAHO;AAIjBC,aAAWA;AAJM,EAAlB;;AAOA,MAAKhqD,kBAAL,CAAyB,IAAIkrD,mBAAJ,CAAyBntE,MAAzB,EAAiCktE,QAAjC,EAA2ClB,QAA3C,EAAqDC,SAArD,CAAzB;AACA,MAAK/mD,aAAL;AAEA;;AAED+nD,cAAcl3F,SAAd,GAA0BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA1B;AACAk3F,cAAcl3F,SAAd,CAAwB0O,WAAxB,GAAsCwoF,aAAtC;;AAEA;;AAEA,SAASE,mBAAT,CAA8BntE,MAA9B,EAAsCktE,QAAtC,EAAgDlB,QAAhD,EAA0DC,SAA1D,EAAsE;;AAErEhiD,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,qBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjB1e,UAAQA,MADS;AAEjBktE,YAAUA,QAFO;AAGjBlB,YAAUA,QAHO;AAIjBC,aAAWA;AAJM,EAAlB;;AAOAiB,YAAW53F,KAAKK,KAAL,CAAYu3F,QAAZ,KAA0B,EAArC;AACAlB,YAAWA,YAAY,CAAvB;AACAC,aAAYA,aAAa32F,KAAK4L,EAAL,GAAU,CAAnC;;AAEA;;AAEA+qF,aAAYjrF,MAAMa,KAAN,CAAaoqF,SAAb,EAAwB,CAAxB,EAA2B32F,KAAK4L,EAAL,GAAU,CAArC,CAAZ;;AAGA;;AAEA,KAAIghC,UAAU,EAAd;AACA,KAAI5gB,WAAW,EAAf;AACA,KAAI+gB,MAAM,EAAV;;AAEA;;AAEA,KAAI+qD,IAAJ;AACA,KAAIC,kBAAkB,MAAMH,QAA5B;AACA,KAAItrD,SAAS,IAAIv3B,OAAJ,EAAb;AACA,KAAIoT,KAAK,IAAI5Z,OAAJ,EAAT;AACA,KAAI7L,CAAJ,EAAO+qB,CAAP;;AAEA;;AAEA,MAAM/qB,IAAI,CAAV,EAAaA,KAAKk1F,QAAlB,EAA4Bl1F,GAA5B,EAAmC;;AAElC,MAAIqhB,MAAM2yE,WAAWh0F,IAAIq1F,eAAJ,GAAsBpB,SAA3C;;AAEA,MAAI5jF,MAAM/S,KAAK+S,GAAL,CAAUgR,GAAV,CAAV;AACA,MAAIjR,MAAM9S,KAAK8S,GAAL,CAAUiR,GAAV,CAAV;;AAEA,OAAM0J,IAAI,CAAV,EAAaA,KAAO/C,OAAOrpB,MAAP,GAAgB,CAApC,EAAyCosB,GAAzC,EAAgD;;AAE/C;;AAEA6e,UAAO/rC,CAAP,GAAWmqB,OAAQ+C,CAAR,EAAYltB,CAAZ,GAAgBwS,GAA3B;AACAu5B,UAAOn/B,CAAP,GAAWud,OAAQ+C,CAAR,EAAYtgB,CAAvB;AACAm/B,UAAOz3B,CAAP,GAAW6V,OAAQ+C,CAAR,EAAYltB,CAAZ,GAAgBuS,GAA3B;;AAEAkZ,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEA;;AAEAsT,MAAG5nB,CAAH,GAAOmC,IAAIk1F,QAAX;AACAzvE,MAAGhb,CAAH,GAAOsgB,KAAM/C,OAAOrpB,MAAP,GAAgB,CAAtB,CAAP;;AAEA0rC,OAAI9qC,IAAJ,CAAUkmB,GAAG5nB,CAAb,EAAgB4nB,GAAGhb,CAAnB;AAGA;AAED;;AAED;;AAEA,MAAMzK,IAAI,CAAV,EAAaA,IAAIk1F,QAAjB,EAA2Bl1F,GAA3B,EAAkC;;AAEjC,OAAM+qB,IAAI,CAAV,EAAaA,IAAM/C,OAAOrpB,MAAP,GAAgB,CAAnC,EAAwCosB,GAAxC,EAA+C;;AAE9CqqE,UAAOrqE,IAAI/qB,IAAIgoB,OAAOrpB,MAAtB;;AAEA,OAAIwO,IAAIioF,IAAR;AACA,OAAIhoF,IAAIgoF,OAAOptE,OAAOrpB,MAAtB;AACA,OAAIwR,IAAIilF,OAAOptE,OAAOrpB,MAAd,GAAuB,CAA/B;AACA,OAAIiU,IAAIwiF,OAAO,CAAf;;AAEA;;AAEAlrD,WAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBwF,CAApB;AACAs3B,WAAQ3qC,IAAR,CAAc6N,CAAd,EAAiB+C,CAAjB,EAAoByC,CAApB;AAEA;AAED;;AAED;;AAEA,MAAKy/B,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;;AAEA;;AAEA,MAAKgB,oBAAL;;AAEA;AACA;;AAEA,KAAK4oD,cAAc32F,KAAK4L,EAAL,GAAU,CAA7B,EAAiC;;AAEhC,MAAIkhC,UAAU,KAAK5gB,UAAL,CAAgBzI,MAAhB,CAAuBjhB,KAArC;AACA,MAAIw1F,KAAK,IAAIjjF,OAAJ,EAAT;AACA,MAAIkjF,KAAK,IAAIljF,OAAJ,EAAT;AACA,MAAIpI,IAAI,IAAIoI,OAAJ,EAAR;;AAEA;;AAEA+iF,SAAOF,WAAWltE,OAAOrpB,MAAlB,GAA2B,CAAlC;;AAEA,OAAMqB,IAAI,CAAJ,EAAO+qB,IAAI,CAAjB,EAAoB/qB,IAAIgoB,OAAOrpB,MAA/B,EAAuCqB,KAAM+qB,KAAK,CAAlD,EAAsD;;AAErD;;AAEAuqE,MAAGz3F,CAAH,GAAOusC,QAASrf,IAAI,CAAb,CAAP;AACAuqE,MAAG7qF,CAAH,GAAO2/B,QAASrf,IAAI,CAAb,CAAP;AACAuqE,MAAGnjF,CAAH,GAAOi4B,QAASrf,IAAI,CAAb,CAAP;;AAEA;;AAEAwqE,MAAG13F,CAAH,GAAOusC,QAASgrD,OAAOrqE,CAAP,GAAW,CAApB,CAAP;AACAwqE,MAAG9qF,CAAH,GAAO2/B,QAASgrD,OAAOrqE,CAAP,GAAW,CAApB,CAAP;AACAwqE,MAAGpjF,CAAH,GAAOi4B,QAASgrD,OAAOrqE,CAAP,GAAW,CAApB,CAAP;;AAEA;;AAEA9gB,KAAE+C,UAAF,CAAcsoF,EAAd,EAAkBC,EAAlB,EAAuB3mF,SAAvB;;AAEA;;AAEAw7B,WAASrf,IAAI,CAAb,IAAmBqf,QAASgrD,OAAOrqE,CAAP,GAAW,CAApB,IAA0B9gB,EAAEpM,CAA/C;AACAusC,WAASrf,IAAI,CAAb,IAAmBqf,QAASgrD,OAAOrqE,CAAP,GAAW,CAApB,IAA0B9gB,EAAEQ,CAA/C;AACA2/B,WAASrf,IAAI,CAAb,IAAmBqf,QAASgrD,OAAOrqE,CAAP,GAAW,CAApB,IAA0B9gB,EAAEkI,CAA/C;AAEA;AAED;AAED;;AAEDgjF,oBAAoBp3F,SAApB,GAAgCC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAAhC;AACAo3F,oBAAoBp3F,SAApB,CAA8B0O,WAA9B,GAA4C0oF,mBAA5C;;AAEA;;;;;AAKA;;AAEA,SAASK,aAAT,CAAwBpvD,MAAxB,EAAgC+nD,aAAhC,EAAgD;;AAE/CxlD,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,eAAZ;;AAEA,KAAK,OAAOivF,aAAP,KAAyB,QAA9B,EAAyC;;AAExCrhF,UAAQC,IAAR,CAAc,0DAAd;;AAEAohF,kBAAgBA,cAAcA,aAA9B;AAEA;;AAED,MAAKznD,UAAL,GAAkB;AACjBN,UAAQA,MADS;AAEjB+nD,iBAAeA;AAFE,EAAlB;;AAKA,MAAKlkD,kBAAL,CAAyB,IAAIwrD,mBAAJ,CAAyBrvD,MAAzB,EAAiC+nD,aAAjC,CAAzB;AACA,MAAKjhD,aAAL;AAEA;;AAEDsoD,cAAcz3F,SAAd,GAA0BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA1B;AACAy3F,cAAcz3F,SAAd,CAAwB0O,WAAxB,GAAsC+oF,aAAtC;;AAEAA,cAAcz3F,SAAd,CAAwBkmB,MAAxB,GAAiC,YAAY;;AAE5C,KAAIiD,OAAOyhB,SAAS5qC,SAAT,CAAmBkmB,MAAnB,CAA0BllB,IAA1B,CAAgC,IAAhC,CAAX;;AAEA,KAAIqnC,SAAS,KAAKM,UAAL,CAAgBN,MAA7B;;AAEA,QAAOniB,OAAQmiB,MAAR,EAAgBlf,IAAhB,CAAP;AAEA,CARD;;AAUA;;AAEA,SAASuuE,mBAAT,CAA8BrvD,MAA9B,EAAsC+nD,aAAtC,EAAsD;;AAErDl8C,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,qBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBN,UAAQA,MADS;AAEjB+nD,iBAAeA;AAFE,EAAlB;;AAKAA,iBAAgBA,iBAAiB,EAAjC;;AAEA;;AAEA,KAAIjkD,UAAU,EAAd;AACA,KAAI5gB,WAAW,EAAf;AACA,KAAI8gB,UAAU,EAAd;AACA,KAAIC,MAAM,EAAV;;AAEA;;AAEA,KAAImK,aAAa,CAAjB;AACA,KAAIc,aAAa,CAAjB;;AAEA;;AAEA,KAAKve,MAAMC,OAAN,CAAeoP,MAAf,MAA4B,KAAjC,EAAyC;;AAExC6nD,WAAU7nD,MAAV;AAEA,EAJD,MAIO;;AAEN,OAAM,IAAIpmC,IAAI,CAAd,EAAiBA,IAAIomC,OAAOznC,MAA5B,EAAoCqB,GAApC,EAA2C;;AAE1CiuF,YAAU7nD,OAAQpmC,CAAR,CAAV;;AAEA,QAAKyyC,QAAL,CAAe+B,UAAf,EAA2Bc,UAA3B,EAAuCt1C,CAAvC,EAJ0C,CAIE;;AAE5Cw0C,iBAAcc,UAAd;AACAA,gBAAa,CAAb;AAEA;AAED;;AAED;;AAEA,MAAKjD,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B9G,OAA5B,EAAqC,CAArC,CAA7B;AACA,MAAKkI,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;;AAGA;;AAEA,UAAS4jD,QAAT,CAAmBtnD,KAAnB,EAA2B;;AAE1B,MAAI3mC,CAAJ,EAAOC,CAAP,EAAUy1F,SAAV;;AAEA,MAAIC,cAAcrsE,SAAS3qB,MAAT,GAAkB,CAApC;AACA,MAAIqpB,SAAS2e,MAAM4oD,aAAN,CAAqBpB,aAArB,CAAb;;AAEA,MAAIyH,gBAAgB5tE,OAAO2e,KAA3B;AACA,MAAIkvD,aAAa7tE,OAAOylE,KAAxB;;AAEA;;AAEA,MAAKL,WAAWE,WAAX,CAAwBsI,aAAxB,MAA4C,KAAjD,EAAyD;;AAExDA,mBAAgBA,cAAcpG,OAAd,EAAhB;;AAEA;;AAEA,QAAMxvF,IAAI,CAAJ,EAAOC,IAAI41F,WAAWl3F,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD01F,gBAAYG,WAAY71F,CAAZ,CAAZ;;AAEA,QAAKotF,WAAWE,WAAX,CAAwBoI,SAAxB,MAAwC,IAA7C,EAAoD;;AAEnDG,gBAAY71F,CAAZ,IAAkB01F,UAAUlG,OAAV,EAAlB;AAEA;AAED;AAED;;AAED,MAAI3mD,QAAQukD,WAAWI,gBAAX,CAA6BoI,aAA7B,EAA4CC,UAA5C,CAAZ;;AAEA;;AAEA,OAAM71F,IAAI,CAAJ,EAAOC,IAAI41F,WAAWl3F,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD01F,eAAYG,WAAY71F,CAAZ,CAAZ;AACA41F,mBAAgBA,cAAcnG,MAAd,CAAsBiG,SAAtB,CAAhB;AAEA;;AAED;;AAEA,OAAM11F,IAAI,CAAJ,EAAOC,IAAI21F,cAAcj3F,MAA/B,EAAuCqB,IAAIC,CAA3C,EAA8CD,GAA9C,EAAqD;;AAEpD,OAAI4pC,SAASgsD,cAAe51F,CAAf,CAAb;;AAEAspB,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmC,CAAnC;AACA2/B,WAAQ7qC,IAAR,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB;AACA8qC,OAAI9qC,IAAJ,CAAUqqC,OAAO/rC,CAAjB,EAAoB+rC,OAAOn/B,CAA3B,EANoD,CAMpB;AAEhC;;AAED;;AAEA,OAAMzK,IAAI,CAAJ,EAAOC,IAAI4oC,MAAMlqC,MAAvB,EAA+BqB,IAAIC,CAAnC,EAAsCD,GAAtC,EAA6C;;AAE5C,OAAI6pC,OAAOhB,MAAO7oC,CAAP,CAAX;;AAEA,OAAImN,IAAI08B,KAAM,CAAN,IAAY8rD,WAApB;AACA,OAAIvoF,IAAIy8B,KAAM,CAAN,IAAY8rD,WAApB;AACA,OAAIxlF,IAAI05B,KAAM,CAAN,IAAY8rD,WAApB;;AAEAzrD,WAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoB+C,CAApB;AACAmlC,iBAAc,CAAd;AAEA;AAED;AAED;;AAEDmgD,oBAAoB13F,SAApB,GAAgCC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAAhC;AACA03F,oBAAoB13F,SAApB,CAA8B0O,WAA9B,GAA4CgpF,mBAA5C;;AAEAA,oBAAoB13F,SAApB,CAA8BkmB,MAA9B,GAAuC,YAAY;;AAElD,KAAIiD,OAAO+qB,eAAel0C,SAAf,CAAyBkmB,MAAzB,CAAgCllB,IAAhC,CAAsC,IAAtC,CAAX;;AAEA,KAAIqnC,SAAS,KAAKM,UAAL,CAAgBN,MAA7B;;AAEA,QAAOniB,OAAQmiB,MAAR,EAAgBlf,IAAhB,CAAP;AAEA,CARD;;AAUA;;AAEA,SAASjD,MAAT,CAAiBmiB,MAAjB,EAAyBlf,IAAzB,EAAgC;;AAE/BA,MAAKkf,MAAL,GAAc,EAAd;;AAEA,KAAKrP,MAAMC,OAAN,CAAeoP,MAAf,CAAL,EAA+B;;AAE9B,OAAM,IAAIpmC,IAAI,CAAR,EAAWC,IAAImmC,OAAOznC,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,OAAI2mC,QAAQP,OAAQpmC,CAAR,CAAZ;;AAEAknB,QAAKkf,MAAL,CAAY7mC,IAAZ,CAAkBonC,MAAMh9B,IAAxB;AAEA;AAED,EAVD,MAUO;;AAENud,OAAKkf,MAAL,CAAY7mC,IAAZ,CAAkB6mC,OAAOz8B,IAAzB;AAEA;;AAED,QAAOud,IAAP;AAEA;;AAED;;;;;AAKA,SAAS4uE,aAAT,CAAwB1sE,QAAxB,EAAkC2sE,cAAlC,EAAmD;;AAElD9jD,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,eAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBqvD,kBAAgBA;AADC,EAAlB;;AAIAA,kBAAmBA,mBAAmB14F,SAArB,GAAmC04F,cAAnC,GAAoD,CAArE;;AAEA;;AAEA,KAAIzsE,WAAW,EAAf;;AAEA;;AAEA,KAAI0sE,eAAe14F,KAAK8S,GAAL,CAAUpH,MAAMC,OAAN,GAAgB8sF,cAA1B,CAAnB;AACA,KAAIvR,OAAO,CAAE,CAAF,EAAK,CAAL,CAAX;AAAA,KAAqBC,QAAQ,EAA7B;AAAA,KAAiCzoC,KAAjC;AAAA,KAAwCC,KAAxC;AACA,KAAIhV,GAAJ;AAAA,KAAS0X,OAAO,CAAE,GAAF,EAAO,GAAP,EAAY,GAAZ,CAAhB;;AAEA;;AAEA,KAAI5K,SAAJ;;AAEA,KAAK3qB,SAASG,gBAAd,EAAiC;;AAEhCwqB,cAAY,IAAIpL,QAAJ,EAAZ;AACAoL,YAAU9J,kBAAV,CAA8B7gB,QAA9B;AAEA,EALD,MAKO;;AAEN2qB,cAAY3qB,SAAS5c,KAAT,EAAZ;AAEA;;AAEDunC,WAAU7G,aAAV;AACA6G,WAAUjJ,kBAAV;;AAEA,KAAImrD,iBAAiBliD,UAAUzqB,QAA/B;AACA,KAAIuf,QAAQkL,UAAUlL,KAAtB;;AAEA;;AAEA,MAAM,IAAI7oC,IAAI,CAAR,EAAWC,IAAI4oC,MAAMlqC,MAA3B,EAAmCqB,IAAIC,CAAvC,EAA0CD,GAA1C,EAAiD;;AAEhD,MAAI6pC,OAAOhB,MAAO7oC,CAAP,CAAX;;AAEA,OAAM,IAAI+qB,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9BixB,WAAQnS,KAAM8U,KAAM5zB,CAAN,CAAN,CAAR;AACAkxB,WAAQpS,KAAM8U,KAAM,CAAE5zB,IAAI,CAAN,IAAY,CAAlB,CAAN,CAAR;AACAy5D,QAAM,CAAN,IAAYlnF,KAAKwM,GAAL,CAAUkyC,KAAV,EAAiBC,KAAjB,CAAZ;AACAuoC,QAAM,CAAN,IAAYlnF,KAAKyM,GAAL,CAAUiyC,KAAV,EAAiBC,KAAjB,CAAZ;;AAEAhV,SAAMu9C,KAAM,CAAN,IAAY,GAAZ,GAAkBA,KAAM,CAAN,CAAxB;;AAEA,OAAKC,MAAOx9C,GAAP,MAAiB5pC,SAAtB,EAAkC;;AAEjConF,UAAOx9C,GAAP,IAAe,EAAE8I,QAAQy0C,KAAM,CAAN,CAAV,EAAqBx0C,QAAQw0C,KAAM,CAAN,CAA7B,EAAwC0R,OAAOl2F,CAA/C,EAAkDm2F,OAAO94F,SAAzD,EAAf;AAEA,IAJD,MAIO;;AAENonF,UAAOx9C,GAAP,EAAakvD,KAAb,GAAqBn2F,CAArB;AAEA;AAED;AAED;;AAED;;AAEA,MAAMinC,GAAN,IAAaw9C,KAAb,EAAqB;;AAEpB,MAAI32E,IAAI22E,MAAOx9C,GAAP,CAAR;;AAEA;;AAEA,MAAKn5B,EAAEqoF,KAAF,KAAY94F,SAAZ,IAAyBwrC,MAAO/6B,EAAEooF,KAAT,EAAiBn1E,MAAjB,CAAwBxS,GAAxB,CAA6Bs6B,MAAO/6B,EAAEqoF,KAAT,EAAiBp1E,MAA9C,KAA0Di1E,YAAxF,EAAuG;;AAEtG,OAAIpsD,SAASqsD,eAAgBnoF,EAAEiiC,MAAlB,CAAb;AACAzmB,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEAy3B,YAASqsD,eAAgBnoF,EAAEkiC,MAAlB,CAAT;AACA1mB,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;AAEA;AAED;;AAED;;AAEA,MAAKmgC,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AAEA;;AAEDwsE,cAAc/3F,SAAd,GAA0BC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAA1B;AACA+3F,cAAc/3F,SAAd,CAAwB0O,WAAxB,GAAsCqpF,aAAtC;;AAEA;;;;;AAKA;;AAEA,SAASM,gBAAT,CAA2BC,SAA3B,EAAsCC,YAAtC,EAAoD3xE,MAApD,EAA4DsiE,cAA5D,EAA4E7yC,cAA5E,EAA4FmiD,SAA5F,EAAuGrC,UAAvG,EAAmHC,WAAnH,EAAiI;;AAEhIxrD,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,kBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjB2vD,aAAWA,SADM;AAEjBC,gBAAcA,YAFG;AAGjB3xE,UAAQA,MAHS;AAIjBsiE,kBAAgBA,cAJC;AAKjB7yC,kBAAgBA,cALC;AAMjBmiD,aAAWA,SANM;AAOjBrC,cAAYA,UAPK;AAQjBC,eAAaA;AARI,EAAlB;;AAWA,MAAKlqD,kBAAL,CAAyB,IAAIusD,sBAAJ,CAA4BH,SAA5B,EAAuCC,YAAvC,EAAqD3xE,MAArD,EAA6DsiE,cAA7D,EAA6E7yC,cAA7E,EAA6FmiD,SAA7F,EAAwGrC,UAAxG,EAAoHC,WAApH,CAAzB;AACA,MAAKjnD,aAAL;AAEA;;AAEDkpD,iBAAiBr4F,SAAjB,GAA6BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA7B;AACAq4F,iBAAiBr4F,SAAjB,CAA2B0O,WAA3B,GAAyC2pF,gBAAzC;;AAEA;;AAEA,SAASI,sBAAT,CAAiCH,SAAjC,EAA4CC,YAA5C,EAA0D3xE,MAA1D,EAAkEsiE,cAAlE,EAAkF7yC,cAAlF,EAAkGmiD,SAAlG,EAA6GrC,UAA7G,EAAyHC,WAAzH,EAAuI;;AAEtIliD,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,wBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjB2vD,aAAWA,SADM;AAEjBC,gBAAcA,YAFG;AAGjB3xE,UAAQA,MAHS;AAIjBsiE,kBAAgBA,cAJC;AAKjB7yC,kBAAgBA,cALC;AAMjBmiD,aAAWA,SANM;AAOjBrC,cAAYA,UAPK;AAQjBC,eAAaA;AARI,EAAlB;;AAWA,KAAIlrE,QAAQ,IAAZ;;AAEAotE,aAAYA,cAAch5F,SAAd,GAA0Bg5F,SAA1B,GAAsC,CAAlD;AACAC,gBAAeA,iBAAiBj5F,SAAjB,GAA6Bi5F,YAA7B,GAA4C,CAA3D;AACA3xE,UAASA,UAAU,CAAnB;;AAEAsiE,kBAAiB3pF,KAAKK,KAAL,CAAYspF,cAAZ,KAAgC,CAAjD;AACA7yC,kBAAiB92C,KAAKK,KAAL,CAAYy2C,cAAZ,KAAgC,CAAjD;;AAEAmiD,aAAYA,cAAcl5F,SAAd,GAA0Bk5F,SAA1B,GAAsC,KAAlD;AACArC,cAAaA,eAAe72F,SAAf,GAA2B62F,UAA3B,GAAwC,GAArD;AACAC,eAAcA,gBAAgB92F,SAAhB,GAA4B82F,WAA5B,GAA0C72F,KAAK4L,EAAL,GAAU,CAAlE;;AAEA;;AAEA,KAAIghC,UAAU,EAAd;AACA,KAAI5gB,WAAW,EAAf;AACA,KAAI8gB,UAAU,EAAd;AACA,KAAIC,MAAM,EAAV;;AAEA;;AAEA,KAAI5rC,QAAQ,CAAZ;AACA,KAAIg4F,aAAa,EAAjB;AACA,KAAIn+B,aAAa3zC,SAAS,CAA1B;AACA,KAAI6vB,aAAa,CAAjB;;AAEA;;AAEAkiD;;AAEA,KAAKH,cAAc,KAAnB,EAA2B;;AAE1B,MAAKF,YAAY,CAAjB,EAAqBM,YAAa,IAAb;AACrB,MAAKL,eAAe,CAApB,EAAwBK,YAAa,KAAb;AAExB;;AAED;;AAEA,MAAKtkD,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B9G,OAA5B,EAAqC,CAArC,CAA7B;AACA,MAAKkI,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;;AAEA,UAASqsD,aAAT,GAAyB;;AAExB,MAAI74F,CAAJ,EAAO4M,CAAP;AACA,MAAIsW,SAAS,IAAI1O,OAAJ,EAAb;AACA,MAAIu3B,SAAS,IAAIv3B,OAAJ,EAAb;;AAEA,MAAIijC,aAAa,CAAjB;;AAEA;AACA,MAAIshD,QAAQ,CAAEN,eAAeD,SAAjB,IAA+B1xE,MAA3C;;AAEA;;AAEA,OAAMla,IAAI,CAAV,EAAaA,KAAK2pC,cAAlB,EAAkC3pC,GAAlC,EAAyC;;AAExC,OAAIosF,WAAW,EAAf;;AAEA,OAAIlqF,IAAIlC,IAAI2pC,cAAZ;;AAEA;;AAEA,OAAI9yB,SAAS3U,KAAM2pF,eAAeD,SAArB,IAAmCA,SAAhD;;AAEA,QAAMx4F,IAAI,CAAV,EAAaA,KAAKopF,cAAlB,EAAkCppF,GAAlC,EAAyC;;AAExC,QAAI64B,IAAI74B,IAAIopF,cAAZ;;AAEA,QAAIruE,QAAQ8d,IAAIy9D,WAAJ,GAAkBD,UAA9B;;AAEA,QAAI4C,WAAWx5F,KAAK+S,GAAL,CAAUuI,KAAV,CAAf;AACA,QAAIm+E,WAAWz5F,KAAK8S,GAAL,CAAUwI,KAAV,CAAf;;AAEA;;AAEAgxB,WAAO/rC,CAAP,GAAWyjB,SAASw1E,QAApB;AACAltD,WAAOn/B,CAAP,GAAW,CAAEkC,CAAF,GAAMgY,MAAN,GAAe2zC,UAA1B;AACA1uB,WAAOz3B,CAAP,GAAWmP,SAASy1E,QAApB;AACAztE,aAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEA;;AAEA4O,WAAOhV,GAAP,CAAY+qF,QAAZ,EAAsBF,KAAtB,EAA6BG,QAA7B,EAAwCnoF,SAAxC;AACAw7B,YAAQ7qC,IAAR,CAAcwhB,OAAOljB,CAArB,EAAwBkjB,OAAOtW,CAA/B,EAAkCsW,OAAO5O,CAAzC;;AAEA;;AAEAk4B,QAAI9qC,IAAJ,CAAUm3B,CAAV,EAAa,IAAI/pB,CAAjB;;AAEA;;AAEAkqF,aAASt3F,IAAT,CAAed,OAAf;AAEA;;AAED;;AAEAg4F,cAAWl3F,IAAX,CAAiBs3F,QAAjB;AAEA;;AAED;;AAEA,OAAMh5F,IAAI,CAAV,EAAaA,IAAIopF,cAAjB,EAAiCppF,GAAjC,EAAwC;;AAEvC,QAAM4M,IAAI,CAAV,EAAaA,IAAI2pC,cAAjB,EAAiC3pC,GAAjC,EAAwC;;AAEvC;;AAEA,QAAI0C,IAAIspF,WAAYhsF,CAAZ,EAAiB5M,CAAjB,CAAR;AACA,QAAIuP,IAAIqpF,WAAYhsF,IAAI,CAAhB,EAAqB5M,CAArB,CAAR;AACA,QAAIsS,IAAIsmF,WAAYhsF,IAAI,CAAhB,EAAqB5M,IAAI,CAAzB,CAAR;AACA,QAAI+U,IAAI6jF,WAAYhsF,CAAZ,EAAiB5M,IAAI,CAArB,CAAR;;AAEA;;AAEAqsC,YAAQ3qC,IAAR,CAAc4N,CAAd,EAAiBC,CAAjB,EAAoBwF,CAApB;AACAs3B,YAAQ3qC,IAAR,CAAc6N,CAAd,EAAiB+C,CAAjB,EAAoByC,CAApB;;AAEA;;AAEA0iC,kBAAc,CAAd;AAEA;AAED;;AAED;;AAEArsB,QAAMwpB,QAAN,CAAgB+B,UAAhB,EAA4Bc,UAA5B,EAAwC,CAAxC;;AAEA;;AAEAd,gBAAcc,UAAd;AAEA;;AAED,UAASqhD,WAAT,CAAsBt8E,GAAtB,EAA4B;;AAE3B,MAAIxc,CAAJ,EAAOm5F,gBAAP,EAAyBC,cAAzB;;AAEA,MAAIxxE,KAAK,IAAI5Z,OAAJ,EAAT;AACA,MAAI+9B,SAAS,IAAIv3B,OAAJ,EAAb;;AAEA,MAAIijC,aAAa,CAAjB;;AAEA,MAAIh0B,SAAWjH,QAAQ,IAAV,GAAmBg8E,SAAnB,GAA+BC,YAA5C;AACA,MAAI14F,OAASyc,QAAQ,IAAV,GAAmB,CAAnB,GAAuB,CAAE,CAApC;;AAEA;AACA28E,qBAAmBv4F,KAAnB;;AAEA;AACA;AACA;;AAEA,OAAMZ,IAAI,CAAV,EAAaA,KAAKopF,cAAlB,EAAkCppF,GAAlC,EAAyC;;AAExC;;AAEAyrB,YAAS/pB,IAAT,CAAe,CAAf,EAAkB+4D,aAAa16D,IAA/B,EAAqC,CAArC;;AAEA;;AAEAwsC,WAAQ7qC,IAAR,CAAc,CAAd,EAAiB3B,IAAjB,EAAuB,CAAvB;;AAEA;;AAEAysC,OAAI9qC,IAAJ,CAAU,GAAV,EAAe,GAAf;;AAEA;;AAEAd;AAEA;;AAED;;AAEAw4F,mBAAiBx4F,KAAjB;;AAEA;;AAEA,OAAMZ,IAAI,CAAV,EAAaA,KAAKopF,cAAlB,EAAkCppF,GAAlC,EAAyC;;AAExC,OAAI64B,IAAI74B,IAAIopF,cAAZ;AACA,OAAIruE,QAAQ8d,IAAIy9D,WAAJ,GAAkBD,UAA9B;;AAEA,OAAI6C,WAAWz5F,KAAK8S,GAAL,CAAUwI,KAAV,CAAf;AACA,OAAIk+E,WAAWx5F,KAAK+S,GAAL,CAAUuI,KAAV,CAAf;;AAEA;;AAEAgxB,UAAO/rC,CAAP,GAAWyjB,SAASw1E,QAApB;AACAltD,UAAOn/B,CAAP,GAAW6tD,aAAa16D,IAAxB;AACAgsC,UAAOz3B,CAAP,GAAWmP,SAASy1E,QAApB;AACAztE,YAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEA;;AAEAi4B,WAAQ7qC,IAAR,CAAc,CAAd,EAAiB3B,IAAjB,EAAuB,CAAvB;;AAEA;;AAEA6nB,MAAG5nB,CAAH,GAASk5F,WAAW,GAAb,GAAqB,GAA5B;AACAtxE,MAAGhb,CAAH,GAASqsF,WAAW,GAAX,GAAiBl5F,IAAnB,GAA4B,GAAnC;AACAysC,OAAI9qC,IAAJ,CAAUkmB,GAAG5nB,CAAb,EAAgB4nB,GAAGhb,CAAnB;;AAEA;;AAEAhM;AAEA;;AAED;;AAEA,OAAMZ,IAAI,CAAV,EAAaA,IAAIopF,cAAjB,EAAiCppF,GAAjC,EAAwC;;AAEvC,OAAIsS,IAAI6mF,mBAAmBn5F,CAA3B;AACA,OAAImC,IAAIi3F,iBAAiBp5F,CAAzB;;AAEA,OAAKwc,QAAQ,IAAb,EAAoB;;AAEnB;;AAEA6vB,YAAQ3qC,IAAR,CAAcS,CAAd,EAAiBA,IAAI,CAArB,EAAwBmQ,CAAxB;AAEA,IAND,MAMO;;AAEN;;AAEA+5B,YAAQ3qC,IAAR,CAAcS,IAAI,CAAlB,EAAqBA,CAArB,EAAwBmQ,CAAxB;AAEA;;AAEDmlC,iBAAc,CAAd;AAEA;;AAED;;AAEArsB,QAAMwpB,QAAN,CAAgB+B,UAAhB,EAA4Bc,UAA5B,EAAwCj7B,QAAQ,IAAR,GAAe,CAAf,GAAmB,CAA3D;;AAEA;;AAEAm6B,gBAAcc,UAAd;AAEA;AAED;;AAEDkhD,uBAAuBz4F,SAAvB,GAAmCC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAAnC;AACAy4F,uBAAuBz4F,SAAvB,CAAiC0O,WAAjC,GAA+C+pF,sBAA/C;;AAEA;;;;AAIA;;AAEA,SAASU,YAAT,CAAuB51E,MAAvB,EAA+BqD,MAA/B,EAAuCsiE,cAAvC,EAAuD7yC,cAAvD,EAAuEmiD,SAAvE,EAAkFrC,UAAlF,EAA8FC,WAA9F,EAA4G;;AAE3GiC,kBAAiBr3F,IAAjB,CAAuB,IAAvB,EAA6B,CAA7B,EAAgCuiB,MAAhC,EAAwCqD,MAAxC,EAAgDsiE,cAAhD,EAAgE7yC,cAAhE,EAAgFmiD,SAAhF,EAA2FrC,UAA3F,EAAuGC,WAAvG;;AAEA,MAAKj1F,IAAL,GAAY,cAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjBqD,UAAQA,MAFS;AAGjBsiE,kBAAgBA,cAHC;AAIjB7yC,kBAAgBA,cAJC;AAKjBmiD,aAAWA,SALM;AAMjBrC,cAAYA,UANK;AAOjBC,eAAaA;AAPI,EAAlB;AAUA;;AAED+C,aAAan5F,SAAb,GAAyBC,OAAO8lB,MAAP,CAAesyE,iBAAiBr4F,SAAhC,CAAzB;AACAm5F,aAAan5F,SAAb,CAAuB0O,WAAvB,GAAqCyqF,YAArC;;AAEA;;AAEA,SAASC,kBAAT,CAA6B71E,MAA7B,EAAqCqD,MAArC,EAA6CsiE,cAA7C,EAA6D7yC,cAA7D,EAA6EmiD,SAA7E,EAAwFrC,UAAxF,EAAoGC,WAApG,EAAkH;;AAEjHqC,wBAAuBz3F,IAAvB,CAA6B,IAA7B,EAAmC,CAAnC,EAAsCuiB,MAAtC,EAA8CqD,MAA9C,EAAsDsiE,cAAtD,EAAsE7yC,cAAtE,EAAsFmiD,SAAtF,EAAiGrC,UAAjG,EAA6GC,WAA7G;;AAEA,MAAKj1F,IAAL,GAAY,oBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjBqD,UAAQA,MAFS;AAGjBsiE,kBAAgBA,cAHC;AAIjB7yC,kBAAgBA,cAJC;AAKjBmiD,aAAWA,SALM;AAMjBrC,cAAYA,UANK;AAOjBC,eAAaA;AAPI,EAAlB;AAUA;;AAEDgD,mBAAmBp5F,SAAnB,GAA+BC,OAAO8lB,MAAP,CAAe0yE,uBAAuBz4F,SAAtC,CAA/B;AACAo5F,mBAAmBp5F,SAAnB,CAA6B0O,WAA7B,GAA2C0qF,kBAA3C;;AAEA;;;;;;AAMA;;AAEA,SAASC,cAAT,CAAyB91E,MAAzB,EAAiC4zE,QAAjC,EAA2ChB,UAA3C,EAAuDC,WAAvD,EAAqE;;AAEpExrD,UAAS5pC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,gBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB4zE,YAAUA,QAFO;AAGjBhB,cAAYA,UAHK;AAIjBC,eAAaA;AAJI,EAAlB;;AAOA,MAAKlqD,kBAAL,CAAyB,IAAIotD,oBAAJ,CAA0B/1E,MAA1B,EAAkC4zE,QAAlC,EAA4ChB,UAA5C,EAAwDC,WAAxD,CAAzB;AACA,MAAKjnD,aAAL;AAEA;;AAEDkqD,eAAer5F,SAAf,GAA2BC,OAAO8lB,MAAP,CAAe6kB,SAAS5qC,SAAxB,CAA3B;AACAq5F,eAAer5F,SAAf,CAAyB0O,WAAzB,GAAuC2qF,cAAvC;;AAEA;;AAEA,SAASC,oBAAT,CAA+B/1E,MAA/B,EAAuC4zE,QAAvC,EAAiDhB,UAAjD,EAA6DC,WAA7D,EAA2E;;AAE1EliD,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,sBAAZ;;AAEA,MAAKwnC,UAAL,GAAkB;AACjBplB,UAAQA,MADS;AAEjB4zE,YAAUA,QAFO;AAGjBhB,cAAYA,UAHK;AAIjBC,eAAaA;AAJI,EAAlB;;AAOA7yE,UAASA,UAAU,CAAnB;AACA4zE,YAAWA,aAAa73F,SAAb,GAAyBC,KAAKyM,GAAL,CAAU,CAAV,EAAamrF,QAAb,CAAzB,GAAmD,CAA9D;;AAEAhB,cAAaA,eAAe72F,SAAf,GAA2B62F,UAA3B,GAAwC,CAArD;AACAC,eAAcA,gBAAgB92F,SAAhB,GAA4B82F,WAA5B,GAA0C72F,KAAK4L,EAAL,GAAU,CAAlE;;AAEA;;AAEA,KAAIghC,UAAU,EAAd;AACA,KAAI5gB,WAAW,EAAf;AACA,KAAI8gB,UAAU,EAAd;AACA,KAAIC,MAAM,EAAV;;AAEA;;AAEA,KAAIrqC,CAAJ,EAAOkN,CAAP;AACA,KAAI08B,SAAS,IAAIv3B,OAAJ,EAAb;AACA,KAAIoT,KAAK,IAAI5Z,OAAJ,EAAT;;AAEA;;AAEAyd,UAAS/pB,IAAT,CAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB;AACA6qC,SAAQ7qC,IAAR,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB;AACA8qC,KAAI9qC,IAAJ,CAAU,GAAV,EAAe,GAAf;;AAEA,MAAM2N,IAAI,CAAJ,EAAOlN,IAAI,CAAjB,EAAoBkN,KAAKgoF,QAAzB,EAAmChoF,KAAMlN,KAAK,CAA9C,EAAkD;;AAEjD,MAAI80F,UAAUZ,aAAahnF,IAAIgoF,QAAJ,GAAef,WAA1C;;AAEA;;AAEAvqD,SAAO/rC,CAAP,GAAWyjB,SAAShkB,KAAK8S,GAAL,CAAU0kF,OAAV,CAApB;AACAlrD,SAAOn/B,CAAP,GAAW6W,SAAShkB,KAAK+S,GAAL,CAAUykF,OAAV,CAApB;;AAEAxrE,WAAS/pB,IAAT,CAAeqqC,OAAO/rC,CAAtB,EAAyB+rC,OAAOn/B,CAAhC,EAAmCm/B,OAAOz3B,CAA1C;;AAEA;;AAEAi4B,UAAQ7qC,IAAR,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB;;AAEA;;AAEAkmB,KAAG5nB,CAAH,GAAO,CAAEyrB,SAAUtpB,CAAV,IAAgBshB,MAAhB,GAAyB,CAA3B,IAAiC,CAAxC;AACAmE,KAAGhb,CAAH,GAAO,CAAE6e,SAAUtpB,IAAI,CAAd,IAAoBshB,MAApB,GAA6B,CAA/B,IAAqC,CAA5C;;AAEA+oB,MAAI9qC,IAAJ,CAAUkmB,GAAG5nB,CAAb,EAAgB4nB,GAAGhb,CAAnB;AAEA;;AAED;;AAEA,MAAMzK,IAAI,CAAV,EAAaA,KAAKk1F,QAAlB,EAA4Bl1F,GAA5B,EAAmC;;AAElCkqC,UAAQ3qC,IAAR,CAAcS,CAAd,EAAiBA,IAAI,CAArB,EAAwB,CAAxB;AAEA;;AAED;;AAEA,MAAKqyC,QAAL,CAAenI,OAAf;AACA,MAAKoI,YAAL,CAAmB,UAAnB,EAA+B,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAA/B;AACA,MAAKgpB,YAAL,CAAmB,QAAnB,EAA6B,IAAIpB,sBAAJ,CAA4B9G,OAA5B,EAAqC,CAArC,CAA7B;AACA,MAAKkI,YAAL,CAAmB,IAAnB,EAAyB,IAAIpB,sBAAJ,CAA4B7G,GAA5B,EAAiC,CAAjC,CAAzB;AAEA;;AAEDgtD,qBAAqBt5F,SAArB,GAAiCC,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAAjC;AACAs5F,qBAAqBt5F,SAArB,CAA+B0O,WAA/B,GAA6C4qF,oBAA7C;;AAIA,IAAIC,aAAat5F,OAAOu5F,MAAP,CAAc;AAC9BlT,oBAAmBA,iBADW;AAE9BK,qBAAoBA,kBAFU;AAG9BI,2BAA0BA,wBAHI;AAI9ByB,sBAAqBA,mBAJS;AAK9BC,4BAA2BA,yBALG;AAM9BC,qBAAoBA,kBANU;AAO9BC,2BAA0BA,wBAPI;AAQ9BC,sBAAqBA,mBARS;AAS9BC,4BAA2BA,yBATG;AAU9BC,uBAAsBA,oBAVQ;AAW9BC,6BAA4BA,0BAXE;AAY9B5B,qBAAoBA,kBAZU;AAa9BE,2BAA0BA,wBAbI;AAc9B2B,eAAcA,YAdgB;AAe9BM,qBAAoBA,kBAfU;AAgB9BY,oBAAmBA,iBAhBW;AAiB9BG,0BAAyBA,uBAjBK;AAkB9BS,gBAAeA,aAlBe;AAmB9BE,sBAAqBA,mBAnBS;AAoB9B0K,eAAcA,YApBgB;AAqB9BE,qBAAoBA,kBArBU;AAsB9BI,iBAAgBA,cAtBc;AAuB9BK,uBAAsBA,oBAvBQ;AAwB9BI,eAAcA,YAxBgB;AAyB9BK,qBAAoBA,kBAzBU;AA0B9Bt/C,gBAAeA,aA1Be;AA2B9BC,sBAAqBA,mBA3BS;AA4B9By/C,gBAAeA,aA5Be;AA6B9BE,sBAAqBA,mBA7BS;AA8B9BK,gBAAeA,aA9Be;AA+B9BC,sBAAqBA,mBA/BS;AAgC9B3H,kBAAiBA,eAhCa;AAiC9BC,wBAAuBA,qBAjCO;AAkC9B+H,gBAAeA,aAlCe;AAmC9BoB,eAAcA,YAnCgB;AAoC9BC,qBAAoBA,kBApCU;AAqC9Bf,mBAAkBA,gBArCY;AAsC9BI,yBAAwBA,sBAtCM;AAuC9BY,iBAAgBA,cAvCc;AAwC9BC,uBAAsBA,oBAxCQ;AAyC9BnjD,cAAaA,WAzCiB;AA0C9BI,oBAAmBA;AA1CW,CAAd,CAAjB;;AA6CA;;;;;;;;AAQA,SAASghB,cAAT,CAAyB5uB,UAAzB,EAAsC;;AAErCoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,gBAAZ;;AAEA,MAAK44B,KAAL,GAAa,IAAIZ,KAAJ,CAAW,QAAX,CAAb;AACA,MAAKgf,WAAL,GAAmB,IAAnB;;AAEA,MAAKwB,SAAL,CAAgBhR,UAAhB;AAEA;;AAED4uB,eAAev3D,SAAf,GAA2BC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAA3B;AACAu3D,eAAev3D,SAAf,CAAyB0O,WAAzB,GAAuC6oD,cAAvC;;AAEAA,eAAev3D,SAAf,CAAyBugF,gBAAzB,GAA4C,IAA5C;;AAEAhpB,eAAev3D,SAAf,CAAyB2O,IAAzB,GAAgC,UAAW9N,MAAX,EAAoB;;AAEnDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAKk5B,KAAL,CAAWprB,IAAX,CAAiB9N,OAAOk5B,KAAxB;;AAEA,QAAO,IAAP;AAEA,CARD;;AAUA;;;;AAIA,SAAS0/D,iBAAT,CAA4B9wD,UAA5B,EAAyC;;AAExCkS,gBAAe75C,IAAf,CAAqB,IAArB,EAA2B2nC,UAA3B;;AAEA,MAAKxnC,IAAL,GAAY,mBAAZ;AAEA;;AAEDs4F,kBAAkBz5F,SAAlB,GAA8BC,OAAO8lB,MAAP,CAAe80B,eAAe76C,SAA9B,CAA9B;AACAy5F,kBAAkBz5F,SAAlB,CAA4B0O,WAA5B,GAA0C+qF,iBAA1C;;AAEAA,kBAAkBz5F,SAAlB,CAA4Bg0D,mBAA5B,GAAkD,IAAlD;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDA,SAASkD,oBAAT,CAA+BvuB,UAA/B,EAA4C;;AAE3CoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAK85C,OAAL,GAAe,EAAE,YAAY,EAAd,EAAf;;AAEA,MAAK35C,IAAL,GAAY,sBAAZ;;AAEA,MAAK44B,KAAL,GAAa,IAAIZ,KAAJ,CAAW,QAAX,CAAb,CAR2C,CAQP;AACpC,MAAKgH,SAAL,GAAiB,GAAjB;AACA,MAAKC,SAAL,GAAiB,GAAjB;;AAEA,MAAK5E,GAAL,GAAW,IAAX;;AAEA,MAAKe,QAAL,GAAgB,IAAhB;AACA,MAAKC,iBAAL,GAAyB,GAAzB;;AAEA,MAAKJ,KAAL,GAAa,IAAb;AACA,MAAKC,cAAL,GAAsB,GAAtB;;AAEA,MAAKyD,QAAL,GAAgB,IAAI3G,KAAJ,CAAW,QAAX,CAAhB;AACA,MAAK4gB,iBAAL,GAAyB,GAAzB;AACA,MAAKrd,WAAL,GAAmB,IAAnB;;AAEA,MAAKE,OAAL,GAAe,IAAf;AACA,MAAKC,SAAL,GAAiB,CAAjB;;AAEA,MAAKE,SAAL,GAAiB,IAAjB;AACA,MAAKC,WAAL,GAAmB,IAAIlvB,OAAJ,CAAa,CAAb,EAAgB,CAAhB,CAAnB;;AAEA,MAAKovB,eAAL,GAAuB,IAAvB;AACA,MAAKC,iBAAL,GAAyB,CAAzB;AACA,MAAKC,gBAAL,GAAwB,CAAxB;;AAEA,MAAKE,YAAL,GAAoB,IAApB;;AAEA,MAAKE,YAAL,GAAoB,IAApB;;AAEA,MAAK9B,QAAL,GAAgB,IAAhB;;AAEA,MAAKI,MAAL,GAAc,IAAd;AACA,MAAKuE,eAAL,GAAuB,GAAvB;;AAEA,MAAKpE,eAAL,GAAuB,IAAvB;;AAEA,MAAKke,SAAL,GAAiB,KAAjB;AACA,MAAKC,kBAAL,GAA0B,CAA1B;AACA,MAAKC,gBAAL,GAAwB,OAAxB;AACA,MAAKC,iBAAL,GAAyB,OAAzB;;AAEA,MAAKC,QAAL,GAAgB,KAAhB;AACA,MAAKvP,YAAL,GAAoB,KAApB;AACA,MAAKC,YAAL,GAAoB,KAApB;;AAEA,MAAK0O,SAAL,CAAgBhR,UAAhB;AAEA;;AAEDuuB,qBAAqBl3D,SAArB,GAAiCC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAAjC;AACAk3D,qBAAqBl3D,SAArB,CAA+B0O,WAA/B,GAA6CwoD,oBAA7C;;AAEAA,qBAAqBl3D,SAArB,CAA+B86E,sBAA/B,GAAwD,IAAxD;;AAEA5jB,qBAAqBl3D,SAArB,CAA+B2O,IAA/B,GAAsC,UAAW9N,MAAX,EAAoB;;AAEzDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAKi6C,OAAL,GAAe,EAAE,YAAY,EAAd,EAAf;;AAEA,MAAK/gB,KAAL,CAAWprB,IAAX,CAAiB9N,OAAOk5B,KAAxB;AACA,MAAKoG,SAAL,GAAiBt/B,OAAOs/B,SAAxB;AACA,MAAKC,SAAL,GAAiBv/B,OAAOu/B,SAAxB;;AAEA,MAAK5E,GAAL,GAAW36B,OAAO26B,GAAlB;;AAEA,MAAKe,QAAL,GAAgB17B,OAAO07B,QAAvB;AACA,MAAKC,iBAAL,GAAyB37B,OAAO27B,iBAAhC;;AAEA,MAAKJ,KAAL,GAAav7B,OAAOu7B,KAApB;AACA,MAAKC,cAAL,GAAsBx7B,OAAOw7B,cAA7B;;AAEA,MAAKyD,QAAL,CAAcnxB,IAAd,CAAoB9N,OAAOi/B,QAA3B;AACA,MAAKpD,WAAL,GAAmB77B,OAAO67B,WAA1B;AACA,MAAKqd,iBAAL,GAAyBl5C,OAAOk5C,iBAAhC;;AAEA,MAAKnd,OAAL,GAAe/7B,OAAO+7B,OAAtB;AACA,MAAKC,SAAL,GAAiBh8B,OAAOg8B,SAAxB;;AAEA,MAAKE,SAAL,GAAiBl8B,OAAOk8B,SAAxB;AACA,MAAKC,WAAL,CAAiBruB,IAAjB,CAAuB9N,OAAOm8B,WAA9B;;AAEA,MAAKE,eAAL,GAAuBr8B,OAAOq8B,eAA9B;AACA,MAAKC,iBAAL,GAAyBt8B,OAAOs8B,iBAAhC;AACA,MAAKC,gBAAL,GAAwBv8B,OAAOu8B,gBAA/B;;AAEA,MAAKE,YAAL,GAAoBz8B,OAAOy8B,YAA3B;;AAEA,MAAKE,YAAL,GAAoB38B,OAAO28B,YAA3B;;AAEA,MAAK9B,QAAL,GAAgB76B,OAAO66B,QAAvB;;AAEA,MAAKI,MAAL,GAAcj7B,OAAOi7B,MAArB;AACA,MAAKuE,eAAL,GAAuBx/B,OAAOw/B,eAA9B;;AAEA,MAAKpE,eAAL,GAAuBp7B,OAAOo7B,eAA9B;;AAEA,MAAKke,SAAL,GAAiBt5C,OAAOs5C,SAAxB;AACA,MAAKC,kBAAL,GAA0Bv5C,OAAOu5C,kBAAjC;AACA,MAAKC,gBAAL,GAAwBx5C,OAAOw5C,gBAA/B;AACA,MAAKC,iBAAL,GAAyBz5C,OAAOy5C,iBAAhC;;AAEA,MAAKC,QAAL,GAAgB15C,OAAO05C,QAAvB;AACA,MAAKvP,YAAL,GAAoBnqC,OAAOmqC,YAA3B;AACA,MAAKC,YAAL,GAAoBpqC,OAAOoqC,YAA3B;;AAEA,QAAO,IAAP;AAEA,CAtDD;;AAwDA;;;;;;;;AAQA,SAASksB,oBAAT,CAA+BxuB,UAA/B,EAA4C;;AAE3CuuB,sBAAqBl2D,IAArB,CAA2B,IAA3B;;AAEA,MAAK85C,OAAL,GAAe,EAAE,YAAY,EAAd,EAAf;;AAEA,MAAK35C,IAAL,GAAY,sBAAZ;;AAEA,MAAK66B,YAAL,GAAoB,GAApB,CAR2C,CAQlB;;AAEzB,MAAKoF,SAAL,GAAiB,GAAjB;AACA,MAAKC,kBAAL,GAA0B,GAA1B;;AAEA,MAAKsY,SAAL,CAAgBhR,UAAhB;AAEA;;AAEDwuB,qBAAqBn3D,SAArB,GAAiCC,OAAO8lB,MAAP,CAAemxC,qBAAqBl3D,SAApC,CAAjC;AACAm3D,qBAAqBn3D,SAArB,CAA+B0O,WAA/B,GAA6CyoD,oBAA7C;;AAEAA,qBAAqBn3D,SAArB,CAA+B2/E,sBAA/B,GAAwD,IAAxD;;AAEAxoB,qBAAqBn3D,SAArB,CAA+B2O,IAA/B,GAAsC,UAAW9N,MAAX,EAAoB;;AAEzDq2D,sBAAqBl3D,SAArB,CAA+B2O,IAA/B,CAAoC3N,IAApC,CAA0C,IAA1C,EAAgDH,MAAhD;;AAEA,MAAKi6C,OAAL,GAAe,EAAE,YAAY,EAAd,EAAf;;AAEA,MAAK9e,YAAL,GAAoBn7B,OAAOm7B,YAA3B;;AAEA,MAAKoF,SAAL,GAAiBvgC,OAAOugC,SAAxB;AACA,MAAKC,kBAAL,GAA0BxgC,OAAOwgC,kBAAjC;;AAEA,QAAO,IAAP;AAEA,CAbD;;AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,SAAS21B,iBAAT,CAA4BruB,UAA5B,EAAyC;;AAExCoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,mBAAZ;;AAEA,MAAK44B,KAAL,GAAa,IAAIZ,KAAJ,CAAW,QAAX,CAAb,CANwC,CAMJ;AACpC,MAAK6G,QAAL,GAAgB,IAAI7G,KAAJ,CAAW,QAAX,CAAhB;AACA,MAAK8G,SAAL,GAAiB,EAAjB;;AAEA,MAAKzE,GAAL,GAAW,IAAX;;AAEA,MAAKe,QAAL,GAAgB,IAAhB;AACA,MAAKC,iBAAL,GAAyB,GAAzB;;AAEA,MAAKJ,KAAL,GAAa,IAAb;AACA,MAAKC,cAAL,GAAsB,GAAtB;;AAEA,MAAKyD,QAAL,GAAgB,IAAI3G,KAAJ,CAAW,QAAX,CAAhB;AACA,MAAK4gB,iBAAL,GAAyB,GAAzB;AACA,MAAKrd,WAAL,GAAmB,IAAnB;;AAEA,MAAKE,OAAL,GAAe,IAAf;AACA,MAAKC,SAAL,GAAiB,CAAjB;;AAEA,MAAKE,SAAL,GAAiB,IAAjB;AACA,MAAKC,WAAL,GAAmB,IAAIlvB,OAAJ,CAAa,CAAb,EAAgB,CAAhB,CAAnB;;AAEA,MAAKovB,eAAL,GAAuB,IAAvB;AACA,MAAKC,iBAAL,GAAyB,CAAzB;AACA,MAAKC,gBAAL,GAAwB,CAAxB;;AAEA,MAAKxB,WAAL,GAAmB,IAAnB;;AAEA,MAAKF,QAAL,GAAgB,IAAhB;;AAEA,MAAKI,MAAL,GAAc,IAAd;AACA,MAAK6e,OAAL,GAAep1C,iBAAf;AACA,MAAKy2B,YAAL,GAAoB,CAApB;AACA,MAAKC,eAAL,GAAuB,IAAvB;;AAEA,MAAKke,SAAL,GAAiB,KAAjB;AACA,MAAKC,kBAAL,GAA0B,CAA1B;AACA,MAAKC,gBAAL,GAAwB,OAAxB;AACA,MAAKC,iBAAL,GAAyB,OAAzB;;AAEA,MAAKC,QAAL,GAAgB,KAAhB;AACA,MAAKvP,YAAL,GAAoB,KAApB;AACA,MAAKC,YAAL,GAAoB,KAApB;;AAEA,MAAK0O,SAAL,CAAgBhR,UAAhB;AAEA;;AAEDquB,kBAAkBh3D,SAAlB,GAA8BC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAA9B;AACAg3D,kBAAkBh3D,SAAlB,CAA4B0O,WAA5B,GAA0CsoD,iBAA1C;;AAEAA,kBAAkBh3D,SAAlB,CAA4B66E,mBAA5B,GAAkD,IAAlD;;AAEA7jB,kBAAkBh3D,SAAlB,CAA4B2O,IAA5B,GAAmC,UAAW9N,MAAX,EAAoB;;AAEtDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAKk5B,KAAL,CAAWprB,IAAX,CAAiB9N,OAAOk5B,KAAxB;AACA,MAAKiG,QAAL,CAAcrxB,IAAd,CAAoB9N,OAAOm/B,QAA3B;AACA,MAAKC,SAAL,GAAiBp/B,OAAOo/B,SAAxB;;AAEA,MAAKzE,GAAL,GAAW36B,OAAO26B,GAAlB;;AAEA,MAAKe,QAAL,GAAgB17B,OAAO07B,QAAvB;AACA,MAAKC,iBAAL,GAAyB37B,OAAO27B,iBAAhC;;AAEA,MAAKJ,KAAL,GAAav7B,OAAOu7B,KAApB;AACA,MAAKC,cAAL,GAAsBx7B,OAAOw7B,cAA7B;;AAEA,MAAKyD,QAAL,CAAcnxB,IAAd,CAAoB9N,OAAOi/B,QAA3B;AACA,MAAKpD,WAAL,GAAmB77B,OAAO67B,WAA1B;AACA,MAAKqd,iBAAL,GAAyBl5C,OAAOk5C,iBAAhC;;AAEA,MAAKnd,OAAL,GAAe/7B,OAAO+7B,OAAtB;AACA,MAAKC,SAAL,GAAiBh8B,OAAOg8B,SAAxB;;AAEA,MAAKE,SAAL,GAAiBl8B,OAAOk8B,SAAxB;AACA,MAAKC,WAAL,CAAiBruB,IAAjB,CAAuB9N,OAAOm8B,WAA9B;;AAEA,MAAKE,eAAL,GAAuBr8B,OAAOq8B,eAA9B;AACA,MAAKC,iBAAL,GAAyBt8B,OAAOs8B,iBAAhC;AACA,MAAKC,gBAAL,GAAwBv8B,OAAOu8B,gBAA/B;;AAEA,MAAKxB,WAAL,GAAmB/6B,OAAO+6B,WAA1B;;AAEA,MAAKF,QAAL,GAAgB76B,OAAO66B,QAAvB;;AAEA,MAAKI,MAAL,GAAcj7B,OAAOi7B,MAArB;AACA,MAAK6e,OAAL,GAAe95C,OAAO85C,OAAtB;AACA,MAAK3e,YAAL,GAAoBn7B,OAAOm7B,YAA3B;AACA,MAAKC,eAAL,GAAuBp7B,OAAOo7B,eAA9B;;AAEA,MAAKke,SAAL,GAAiBt5C,OAAOs5C,SAAxB;AACA,MAAKC,kBAAL,GAA0Bv5C,OAAOu5C,kBAAjC;AACA,MAAKC,gBAAL,GAAwBx5C,OAAOw5C,gBAA/B;AACA,MAAKC,iBAAL,GAAyBz5C,OAAOy5C,iBAAhC;;AAEA,MAAKC,QAAL,GAAgB15C,OAAO05C,QAAvB;AACA,MAAKvP,YAAL,GAAoBnqC,OAAOmqC,YAA3B;AACA,MAAKC,YAAL,GAAoBpqC,OAAOoqC,YAA3B;;AAEA,QAAO,IAAP;AAEA,CAlDD;;AAoDA;;;;;;;;AAQA,SAASgsB,gBAAT,CAA2BtuB,UAA3B,EAAwC;;AAEvCquB,mBAAkBh2D,IAAlB,CAAwB,IAAxB;;AAEA,MAAK85C,OAAL,GAAe,EAAE,QAAQ,EAAV,EAAf;;AAEA,MAAK35C,IAAL,GAAY,kBAAZ;;AAEA,MAAKu8B,WAAL,GAAmB,IAAnB;;AAEA,MAAKic,SAAL,CAAgBhR,UAAhB;AAEA;;AAEDsuB,iBAAiBj3D,SAAjB,GAA6BC,OAAO8lB,MAAP,CAAeixC,kBAAkBh3D,SAAjC,CAA7B;AACAi3D,iBAAiBj3D,SAAjB,CAA2B0O,WAA3B,GAAyCuoD,gBAAzC;;AAEAA,iBAAiBj3D,SAAjB,CAA2Bw/E,kBAA3B,GAAgD,IAAhD;;AAEAvoB,iBAAiBj3D,SAAjB,CAA2B2O,IAA3B,GAAkC,UAAW9N,MAAX,EAAoB;;AAErDm2D,mBAAkBh3D,SAAlB,CAA4B2O,IAA5B,CAAiC3N,IAAjC,CAAuC,IAAvC,EAA6CH,MAA7C;;AAEA,MAAK68B,WAAL,GAAmB78B,OAAO68B,WAA1B;;AAEA,QAAO,IAAP;AAEA,CARD;;AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAASo5B,kBAAT,CAA6BnuB,UAA7B,EAA0C;;AAEzCoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,oBAAZ;;AAEA,MAAKy7B,OAAL,GAAe,IAAf;AACA,MAAKC,SAAL,GAAiB,CAAjB;;AAEA,MAAKE,SAAL,GAAiB,IAAjB;AACA,MAAKC,WAAL,GAAmB,IAAIlvB,OAAJ,CAAa,CAAb,EAAgB,CAAhB,CAAnB;;AAEA,MAAKovB,eAAL,GAAuB,IAAvB;AACA,MAAKC,iBAAL,GAAyB,CAAzB;AACA,MAAKC,gBAAL,GAAwB,CAAxB;;AAEA,MAAK+c,SAAL,GAAiB,KAAjB;AACA,MAAKC,kBAAL,GAA0B,CAA1B;;AAEA,MAAKzc,GAAL,GAAW,KAAX;AACA,MAAKK,MAAL,GAAc,KAAd;;AAEA,MAAKuc,QAAL,GAAgB,KAAhB;AACA,MAAKvP,YAAL,GAAoB,KAApB;AACA,MAAKC,YAAL,GAAoB,KAApB;;AAEA,MAAK0O,SAAL,CAAgBhR,UAAhB;AAEA;;AAEDmuB,mBAAmB92D,SAAnB,GAA+BC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAA/B;AACA82D,mBAAmB92D,SAAnB,CAA6B0O,WAA7B,GAA2CooD,kBAA3C;;AAEAA,mBAAmB92D,SAAnB,CAA6B+6E,oBAA7B,GAAoD,IAApD;;AAEAjkB,mBAAmB92D,SAAnB,CAA6B2O,IAA7B,GAAoC,UAAW9N,MAAX,EAAoB;;AAEvDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAK+7B,OAAL,GAAe/7B,OAAO+7B,OAAtB;AACA,MAAKC,SAAL,GAAiBh8B,OAAOg8B,SAAxB;;AAEA,MAAKE,SAAL,GAAiBl8B,OAAOk8B,SAAxB;AACA,MAAKC,WAAL,CAAiBruB,IAAjB,CAAuB9N,OAAOm8B,WAA9B;;AAEA,MAAKE,eAAL,GAAuBr8B,OAAOq8B,eAA9B;AACA,MAAKC,iBAAL,GAAyBt8B,OAAOs8B,iBAAhC;AACA,MAAKC,gBAAL,GAAwBv8B,OAAOu8B,gBAA/B;;AAEA,MAAK+c,SAAL,GAAiBt5C,OAAOs5C,SAAxB;AACA,MAAKC,kBAAL,GAA0Bv5C,OAAOu5C,kBAAjC;;AAEA,MAAKG,QAAL,GAAgB15C,OAAO05C,QAAvB;AACA,MAAKvP,YAAL,GAAoBnqC,OAAOmqC,YAA3B;AACA,MAAKC,YAAL,GAAoBpqC,OAAOoqC,YAA3B;;AAEA,QAAO,IAAP;AAEA,CAvBD;;AAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,SAAS8rB,mBAAT,CAA8BpuB,UAA9B,EAA2C;;AAE1CoP,UAAS/2C,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,qBAAZ;;AAEA,MAAK44B,KAAL,GAAa,IAAIZ,KAAJ,CAAW,QAAX,CAAb,CAN0C,CAMN;;AAEpC,MAAKqC,GAAL,GAAW,IAAX;;AAEA,MAAKe,QAAL,GAAgB,IAAhB;AACA,MAAKC,iBAAL,GAAyB,GAAzB;;AAEA,MAAKJ,KAAL,GAAa,IAAb;AACA,MAAKC,cAAL,GAAsB,GAAtB;;AAEA,MAAKyD,QAAL,GAAgB,IAAI3G,KAAJ,CAAW,QAAX,CAAhB;AACA,MAAK4gB,iBAAL,GAAyB,GAAzB;AACA,MAAKrd,WAAL,GAAmB,IAAnB;;AAEA,MAAKd,WAAL,GAAmB,IAAnB;;AAEA,MAAKF,QAAL,GAAgB,IAAhB;;AAEA,MAAKI,MAAL,GAAc,IAAd;AACA,MAAK6e,OAAL,GAAep1C,iBAAf;AACA,MAAKy2B,YAAL,GAAoB,CAApB;AACA,MAAKC,eAAL,GAAuB,IAAvB;;AAEA,MAAKke,SAAL,GAAiB,KAAjB;AACA,MAAKC,kBAAL,GAA0B,CAA1B;AACA,MAAKC,gBAAL,GAAwB,OAAxB;AACA,MAAKC,iBAAL,GAAyB,OAAzB;;AAEA,MAAKC,QAAL,GAAgB,KAAhB;AACA,MAAKvP,YAAL,GAAoB,KAApB;AACA,MAAKC,YAAL,GAAoB,KAApB;;AAEA,MAAK0O,SAAL,CAAgBhR,UAAhB;AAEA;;AAEDouB,oBAAoB/2D,SAApB,GAAgCC,OAAO8lB,MAAP,CAAegyB,SAAS/3C,SAAxB,CAAhC;AACA+2D,oBAAoB/2D,SAApB,CAA8B0O,WAA9B,GAA4CqoD,mBAA5C;;AAEAA,oBAAoB/2D,SAApB,CAA8Bg/E,qBAA9B,GAAsD,IAAtD;;AAEAjoB,oBAAoB/2D,SAApB,CAA8B2O,IAA9B,GAAqC,UAAW9N,MAAX,EAAoB;;AAExDk3C,UAAS/3C,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,MAAKk5B,KAAL,CAAWprB,IAAX,CAAiB9N,OAAOk5B,KAAxB;;AAEA,MAAKyB,GAAL,GAAW36B,OAAO26B,GAAlB;;AAEA,MAAKe,QAAL,GAAgB17B,OAAO07B,QAAvB;AACA,MAAKC,iBAAL,GAAyB37B,OAAO27B,iBAAhC;;AAEA,MAAKJ,KAAL,GAAav7B,OAAOu7B,KAApB;AACA,MAAKC,cAAL,GAAsBx7B,OAAOw7B,cAA7B;;AAEA,MAAKyD,QAAL,CAAcnxB,IAAd,CAAoB9N,OAAOi/B,QAA3B;AACA,MAAKpD,WAAL,GAAmB77B,OAAO67B,WAA1B;AACA,MAAKqd,iBAAL,GAAyBl5C,OAAOk5C,iBAAhC;;AAEA,MAAKne,WAAL,GAAmB/6B,OAAO+6B,WAA1B;;AAEA,MAAKF,QAAL,GAAgB76B,OAAO66B,QAAvB;;AAEA,MAAKI,MAAL,GAAcj7B,OAAOi7B,MAArB;AACA,MAAK6e,OAAL,GAAe95C,OAAO85C,OAAtB;AACA,MAAK3e,YAAL,GAAoBn7B,OAAOm7B,YAA3B;AACA,MAAKC,eAAL,GAAuBp7B,OAAOo7B,eAA9B;;AAEA,MAAKke,SAAL,GAAiBt5C,OAAOs5C,SAAxB;AACA,MAAKC,kBAAL,GAA0Bv5C,OAAOu5C,kBAAjC;AACA,MAAKC,gBAAL,GAAwBx5C,OAAOw5C,gBAA/B;AACA,MAAKC,iBAAL,GAAyBz5C,OAAOy5C,iBAAhC;;AAEA,MAAKC,QAAL,GAAgB15C,OAAO05C,QAAvB;AACA,MAAKvP,YAAL,GAAoBnqC,OAAOmqC,YAA3B;AACA,MAAKC,YAAL,GAAoBpqC,OAAOoqC,YAA3B;;AAEA,QAAO,IAAP;AAEA,CAtCD;;AAwCA;;;;;;;;;;;;;;;AAeA,SAASosB,kBAAT,CAA6B1uB,UAA7B,EAA0C;;AAEzCyuB,mBAAkBp2D,IAAlB,CAAwB,IAAxB;;AAEA,MAAKG,IAAL,GAAY,oBAAZ;;AAEA,MAAKmZ,KAAL,GAAa,CAAb;AACA,MAAKimB,QAAL,GAAgB,CAAhB;AACA,MAAK2Z,OAAL,GAAe,CAAf;;AAEA,MAAKP,SAAL,CAAgBhR,UAAhB;AAEA;;AAED0uB,mBAAmBr3D,SAAnB,GAA+BC,OAAO8lB,MAAP,CAAeqxC,kBAAkBp3D,SAAjC,CAA/B;AACAq3D,mBAAmBr3D,SAAnB,CAA6B0O,WAA7B,GAA2C2oD,kBAA3C;;AAEAA,mBAAmBr3D,SAAnB,CAA6BmgF,oBAA7B,GAAoD,IAApD;;AAEA9oB,mBAAmBr3D,SAAnB,CAA6B2O,IAA7B,GAAoC,UAAW9N,MAAX,EAAoB;;AAEvDu2D,mBAAkBp3D,SAAlB,CAA4B2O,IAA5B,CAAiC3N,IAAjC,CAAuC,IAAvC,EAA6CH,MAA7C;;AAEA,MAAKyZ,KAAL,GAAazZ,OAAOyZ,KAApB;AACA,MAAKimB,QAAL,GAAgB1/B,OAAO0/B,QAAvB;AACA,MAAK2Z,OAAL,GAAer5C,OAAOq5C,OAAtB;;AAEA,QAAO,IAAP;AAEA,CAVD;;AAcA,IAAIw/C,YAAYz5F,OAAOu5F,MAAP,CAAc;AAC7BjiC,iBAAgBA,cADa;AAE7B4qB,iBAAgBA,cAFa;AAG7BsX,oBAAmBA,iBAHU;AAI7B5+C,iBAAgBA,cAJa;AAK7Byc,iBAAgBA,cALa;AAM7BH,uBAAsBA,oBANO;AAO7BD,uBAAsBA,oBAPO;AAQ7BF,oBAAmBA,iBARU;AAS7BC,mBAAkBA,gBATW;AAU7BH,qBAAoBA,kBAVS;AAW7BC,sBAAqBA,mBAXQ;AAY7BH,oBAAmBA,iBAZU;AAa7BC,uBAAsBA,oBAbO;AAc7Bnc,oBAAmBA,iBAdU;AAe7B2c,qBAAoBA,kBAfS;AAgB7BD,oBAAmBA,iBAhBU;AAiB7Brf,WAAUA;AAjBmB,CAAd,CAAhB;;AAoBA;;;;AAIA,IAAI4hD,QAAQ;;AAEX5vD,UAAS,KAFE;;AAIX6vD,QAAO,EAJI;;AAMX/qF,MAAK,UAAWq6B,GAAX,EAAgB2wD,IAAhB,EAAuB;;AAE3B,MAAK,KAAK9vD,OAAL,KAAiB,KAAtB,EAA8B;;AAE9B;;AAEA,OAAK6vD,KAAL,CAAY1wD,GAAZ,IAAoB2wD,IAApB;AAEA,EAdU;;AAgBX15F,MAAK,UAAW+oC,GAAX,EAAiB;;AAErB,MAAK,KAAKa,OAAL,KAAiB,KAAtB,EAA8B;;AAE9B;;AAEA,SAAO,KAAK6vD,KAAL,CAAY1wD,GAAZ,CAAP;AAEA,EAxBU;;AA0BXxF,SAAQ,UAAWwF,GAAX,EAAiB;;AAExB,SAAO,KAAK0wD,KAAL,CAAY1wD,GAAZ,CAAP;AAEA,EA9BU;;AAgCXwa,QAAO,YAAY;;AAElB,OAAKk2C,KAAL,GAAa,EAAb;AAEA;;AApCU,CAAZ;;AAwCA;;;;AAIA,SAASE,cAAT,CAAyBC,MAAzB,EAAiCC,UAAjC,EAA6CC,OAA7C,EAAuD;;AAEtD,KAAI/uE,QAAQ,IAAZ;;AAEA,KAAIgvE,YAAY,KAAhB;AACA,KAAIC,cAAc,CAAlB;AACA,KAAIC,aAAa,CAAjB;AACA,KAAIC,cAAc/6F,SAAlB;;AAEA,MAAKg7F,OAAL,GAAeh7F,SAAf;AACA,MAAKy6F,MAAL,GAAcA,MAAd;AACA,MAAKC,UAAL,GAAkBA,UAAlB;AACA,MAAKC,OAAL,GAAeA,OAAf;;AAEA,MAAKM,SAAL,GAAiB,UAAWhzE,GAAX,EAAiB;;AAEjC6yE;;AAEA,MAAKF,cAAc,KAAnB,EAA2B;;AAE1B,OAAKhvE,MAAMovE,OAAN,KAAkBh7F,SAAvB,EAAmC;;AAElC4rB,UAAMovE,OAAN,CAAe/yE,GAAf,EAAoB4yE,WAApB,EAAiCC,UAAjC;AAEA;AAED;;AAEDF,cAAY,IAAZ;AAEA,EAhBD;;AAkBA,MAAKM,OAAL,GAAe,UAAWjzE,GAAX,EAAiB;;AAE/B4yE;;AAEA,MAAKjvE,MAAM8uE,UAAN,KAAqB16F,SAA1B,EAAsC;;AAErC4rB,SAAM8uE,UAAN,CAAkBzyE,GAAlB,EAAuB4yE,WAAvB,EAAoCC,UAApC;AAEA;;AAED,MAAKD,gBAAgBC,UAArB,EAAkC;;AAEjCF,eAAY,KAAZ;;AAEA,OAAKhvE,MAAM6uE,MAAN,KAAiBz6F,SAAtB,EAAkC;;AAEjC4rB,UAAM6uE,MAAN;AAEA;AAED;AAED,EAtBD;;AAwBA,MAAKU,SAAL,GAAiB,UAAWlzE,GAAX,EAAiB;;AAEjC,MAAK2D,MAAM+uE,OAAN,KAAkB36F,SAAvB,EAAmC;;AAElC4rB,SAAM+uE,OAAN,CAAe1yE,GAAf;AAEA;AAED,EARD;;AAUA,MAAKmzE,UAAL,GAAkB,UAAWnzE,GAAX,EAAiB;;AAElC,MAAK8yE,WAAL,EAAmB;;AAElB,UAAOA,YAAa9yE,GAAb,CAAP;AAEA;;AAED,SAAOA,GAAP;AAEA,EAVD;;AAYA,MAAKozE,cAAL,GAAsB,UAAWC,SAAX,EAAuB;;AAE5CP,gBAAcO,SAAd;AACA,SAAO,IAAP;AAEA,EALD;AAOA;;AAED,IAAIC,wBAAwB,IAAIf,cAAJ,EAA5B;;AAEA;;;;AAIA,IAAIgB,UAAU,EAAd;;AAEA,SAASC,UAAT,CAAqBC,OAArB,EAA+B;;AAE9B,MAAKA,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;AAEA;;AAED56F,OAAOK,MAAP,CAAey6F,WAAW/6F,SAA1B,EAAqC;;AAEpCi7F,OAAM,UAAW1zE,GAAX,EAAgBwyE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA8C;;AAEnD,MAAK1yE,QAAQjoB,SAAb,EAAyBioB,MAAM,EAAN;;AAEzB,MAAK,KAAK+nC,IAAL,KAAchwD,SAAnB,EAA+BioB,MAAM,KAAK+nC,IAAL,GAAY/nC,GAAlB;;AAE/BA,QAAM,KAAKyzE,OAAL,CAAaN,UAAb,CAAyBnzE,GAAzB,CAAN;;AAEA,MAAI2D,QAAQ,IAAZ;;AAEA,MAAIgwE,SAASvB,MAAMx5F,GAAN,CAAWonB,GAAX,CAAb;;AAEA,MAAK2zE,WAAW57F,SAAhB,EAA4B;;AAE3B4rB,SAAM8vE,OAAN,CAAcT,SAAd,CAAyBhzE,GAAzB;;AAEA4zE,cAAY,YAAY;;AAEvB,QAAKpB,MAAL,EAAcA,OAAQmB,MAAR;;AAEdhwE,UAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AAEA,IAND,EAMG,CANH;;AAQA,UAAO2zE,MAAP;AAEA;;AAED;;AAEA,MAAKJ,QAASvzE,GAAT,MAAmBjoB,SAAxB,EAAoC;;AAEnCw7F,WAASvzE,GAAT,EAAe/lB,IAAf,CAAqB;;AAEpBu4F,YAAQA,MAFY;AAGpBC,gBAAYA,UAHQ;AAIpBC,aAASA;;AAJW,IAArB;;AAQA;AAEA;;AAED;AACA,MAAImB,eAAe,6BAAnB;AACA,MAAIC,qBAAqB9zE,IAAIlnB,KAAJ,CAAW+6F,YAAX,CAAzB;;AAEA;AACA,MAAKC,kBAAL,EAA0B;;AAEzB,OAAIC,WAAWD,mBAAoB,CAApB,CAAf;AACA,OAAIE,WAAW,CAAC,CAAEF,mBAAoB,CAApB,CAAlB;AACA,OAAIlyE,OAAOkyE,mBAAoB,CAApB,CAAX;;AAEAlyE,UAAO4pD,OAAOyoB,kBAAP,CAA2BryE,IAA3B,CAAP;;AAEA,OAAKoyE,QAAL,EAAgBpyE,OAAO4pD,OAAO0oB,IAAP,CAAatyE,IAAb,CAAP;;AAEhB,OAAI;;AAEH,QAAIuyE,QAAJ;AACA,QAAIC,eAAe,CAAE,KAAKA,YAAL,IAAqB,EAAvB,EAA4BC,WAA5B,EAAnB;;AAEA,YAASD,YAAT;;AAEC,UAAK,aAAL;AACA,UAAK,MAAL;;AAEC,UAAIlyD,OAAO,IAAIxG,UAAJ,CAAgB9Z,KAAKvoB,MAArB,CAAX;;AAEA,WAAM,IAAIqB,IAAI,CAAd,EAAiBA,IAAIknB,KAAKvoB,MAA1B,EAAkCqB,GAAlC,EAAyC;;AAExCwnC,YAAMxnC,CAAN,IAAYknB,KAAK0yE,UAAL,CAAiB55F,CAAjB,CAAZ;AAEA;;AAED,UAAK05F,iBAAiB,MAAtB,EAA+B;;AAE9BD,kBAAW,IAAII,IAAJ,CAAU,CAAEryD,KAAKzH,MAAP,CAAV,EAA2B,EAAE7gC,MAAMm6F,QAAR,EAA3B,CAAX;AAEA,OAJD,MAIO;;AAENI,kBAAWjyD,KAAKzH,MAAhB;AAEA;;AAED;;AAED,UAAK,UAAL;;AAEC,UAAI+5D,SAAS,IAAIC,SAAJ,EAAb;AACAN,iBAAWK,OAAOE,eAAP,CAAwB9yE,IAAxB,EAA8BmyE,QAA9B,CAAX;;AAEA;;AAED,UAAK,MAAL;;AAECI,iBAAWpzD,KAAKc,KAAL,CAAYjgB,IAAZ,CAAX;;AAEA;;AAED;AAAS;;AAERuyE,iBAAWvyE,IAAX;;AAEA;;AA1CF;;AA8CA;AACA4pD,WAAOooB,UAAP,CAAmB,YAAY;;AAE9B,SAAKpB,MAAL,EAAcA,OAAQ2B,QAAR;;AAEdxwE,WAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AAEA,KAND,EAMG,CANH;AAQA,IA5DD,CA4DE,OAAQ/U,KAAR,EAAgB;;AAEjB;AACAugE,WAAOooB,UAAP,CAAmB,YAAY;;AAE9B,SAAKlB,OAAL,EAAeA,QAASznF,KAAT;;AAEf0Y,WAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AACA2D,WAAM8vE,OAAN,CAAcP,SAAd,CAAyBlzE,GAAzB;AAEA,KAPD,EAOG,CAPH;AASA;AAED,GApFD,MAoFO;;AAEN;;AAEAuzE,WAASvzE,GAAT,IAAiB,EAAjB;;AAEAuzE,WAASvzE,GAAT,EAAe/lB,IAAf,CAAqB;;AAEpBu4F,YAAQA,MAFY;AAGpBC,gBAAYA,UAHQ;AAIpBC,aAASA;;AAJW,IAArB;;AAQA,OAAIiC,UAAU,IAAIC,cAAJ,EAAd;;AAEAD,WAAQE,IAAR,CAAc,KAAd,EAAqB70E,GAArB,EAA0B,IAA1B;;AAEA20E,WAAQh7F,gBAAR,CAA0B,MAA1B,EAAkC,UAAWY,KAAX,EAAmB;;AAEpD,QAAI45F,WAAW,KAAKA,QAApB;;AAEA/B,UAAM9qF,GAAN,CAAW0Y,GAAX,EAAgBm0E,QAAhB;;AAEA,QAAIW,YAAYvB,QAASvzE,GAAT,CAAhB;;AAEA,WAAOuzE,QAASvzE,GAAT,CAAP;;AAEA,QAAK,KAAK+0E,MAAL,KAAgB,GAArB,EAA2B;;AAE1B,UAAM,IAAIr6F,IAAI,CAAR,EAAWkoB,KAAKkyE,UAAUz7F,MAAhC,EAAwCqB,IAAIkoB,EAA5C,EAAgDloB,GAAhD,EAAuD;;AAEtD,UAAI+e,WAAWq7E,UAAWp6F,CAAX,CAAf;AACA,UAAK+e,SAAS+4E,MAAd,EAAuB/4E,SAAS+4E,MAAT,CAAiB2B,QAAjB;AAEvB;;AAEDxwE,WAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AAEA,KAXD,MAWO,IAAK,KAAK+0E,MAAL,KAAgB,CAArB,EAAyB;;AAE/B;AACA;;AAEAvtF,aAAQC,IAAR,CAAc,2CAAd;;AAEA,UAAM,IAAI/M,IAAI,CAAR,EAAWkoB,KAAKkyE,UAAUz7F,MAAhC,EAAwCqB,IAAIkoB,EAA5C,EAAgDloB,GAAhD,EAAuD;;AAEtD,UAAI+e,WAAWq7E,UAAWp6F,CAAX,CAAf;AACA,UAAK+e,SAAS+4E,MAAd,EAAuB/4E,SAAS+4E,MAAT,CAAiB2B,QAAjB;AAEvB;;AAEDxwE,WAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AAEA,KAhBM,MAgBA;;AAEN,UAAM,IAAItlB,IAAI,CAAR,EAAWkoB,KAAKkyE,UAAUz7F,MAAhC,EAAwCqB,IAAIkoB,EAA5C,EAAgDloB,GAAhD,EAAuD;;AAEtD,UAAI+e,WAAWq7E,UAAWp6F,CAAX,CAAf;AACA,UAAK+e,SAASi5E,OAAd,EAAwBj5E,SAASi5E,OAAT,CAAkBn4F,KAAlB;AAExB;;AAEDopB,WAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AACA2D,WAAM8vE,OAAN,CAAcP,SAAd,CAAyBlzE,GAAzB;AAEA;AAED,IAnDD,EAmDG,KAnDH;;AAqDA20E,WAAQh7F,gBAAR,CAA0B,UAA1B,EAAsC,UAAWY,KAAX,EAAmB;;AAExD,QAAIu6F,YAAYvB,QAASvzE,GAAT,CAAhB;;AAEA,SAAM,IAAItlB,IAAI,CAAR,EAAWkoB,KAAKkyE,UAAUz7F,MAAhC,EAAwCqB,IAAIkoB,EAA5C,EAAgDloB,GAAhD,EAAuD;;AAEtD,SAAI+e,WAAWq7E,UAAWp6F,CAAX,CAAf;AACA,SAAK+e,SAASg5E,UAAd,EAA2Bh5E,SAASg5E,UAAT,CAAqBl4F,KAArB;AAE3B;AAED,IAXD,EAWG,KAXH;;AAaAo6F,WAAQh7F,gBAAR,CAA0B,OAA1B,EAAmC,UAAWY,KAAX,EAAmB;;AAErD,QAAIu6F,YAAYvB,QAASvzE,GAAT,CAAhB;;AAEA,WAAOuzE,QAASvzE,GAAT,CAAP;;AAEA,SAAM,IAAItlB,IAAI,CAAR,EAAWkoB,KAAKkyE,UAAUz7F,MAAhC,EAAwCqB,IAAIkoB,EAA5C,EAAgDloB,GAAhD,EAAuD;;AAEtD,SAAI+e,WAAWq7E,UAAWp6F,CAAX,CAAf;AACA,SAAK+e,SAASi5E,OAAd,EAAwBj5E,SAASi5E,OAAT,CAAkBn4F,KAAlB;AAExB;;AAEDopB,UAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AACA2D,UAAM8vE,OAAN,CAAcP,SAAd,CAAyBlzE,GAAzB;AAEA,IAhBD,EAgBG,KAhBH;;AAkBA,OAAK,KAAKo0E,YAAL,KAAsBr8F,SAA3B,EAAuC48F,QAAQP,YAAR,GAAuB,KAAKA,YAA5B;AACvC,OAAK,KAAKY,eAAL,KAAyBj9F,SAA9B,EAA0C48F,QAAQK,eAAR,GAA0B,KAAKA,eAA/B;;AAE1C,OAAKL,QAAQM,gBAAb,EAAgCN,QAAQM,gBAAR,CAA0B,KAAKlB,QAAL,KAAkBh8F,SAAlB,GAA8B,KAAKg8F,QAAnC,GAA8C,YAAxE;;AAEhC,QAAM,IAAImB,MAAV,IAAoB,KAAKC,aAAzB,EAAyC;;AAExCR,YAAQS,gBAAR,CAA0BF,MAA1B,EAAkC,KAAKC,aAAL,CAAoBD,MAApB,CAAlC;AAEA;;AAEDP,WAAQU,IAAR,CAAc,IAAd;AAEA;;AAED1xE,QAAM8vE,OAAN,CAAcT,SAAd,CAAyBhzE,GAAzB;;AAEA,SAAO20E,OAAP;AAEA,EAhQmC;;AAkQpCW,UAAS,UAAWn9F,KAAX,EAAmB;;AAE3B,OAAK4vD,IAAL,GAAY5vD,KAAZ;AACA,SAAO,IAAP;AAEA,EAvQmC;;AAyQpCo9F,kBAAiB,UAAWp9F,KAAX,EAAmB;;AAEnC,OAAKi8F,YAAL,GAAoBj8F,KAApB;AACA,SAAO,IAAP;AAEA,EA9QmC;;AAgRpCq9F,qBAAoB,UAAWr9F,KAAX,EAAmB;;AAEtC,OAAK68F,eAAL,GAAuB78F,KAAvB;AACA,SAAO,IAAP;AAEA,EArRmC;;AAuRpCs9F,cAAa,UAAWt9F,KAAX,EAAmB;;AAE/B,OAAK47F,QAAL,GAAgB57F,KAAhB;AACA,SAAO,IAAP;AAEA,EA5RmC;;AA8RpCi9F,mBAAkB,UAAWj9F,KAAX,EAAmB;;AAEpC,OAAKg9F,aAAL,GAAqBh9F,KAArB;AACA,SAAO,IAAP;AAEA;;AAnSmC,CAArC;;AAuSA;;;;;;AAMA,SAASu9F,uBAAT,CAAkCjC,OAAlC,EAA4C;;AAE3C,MAAKA,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;;AAEA;AACA,MAAKqC,OAAL,GAAe,IAAf;AAEA;;AAEDj9F,OAAOK,MAAP,CAAe28F,wBAAwBj9F,SAAvC,EAAkD;;AAEjDi7F,OAAM,UAAW1zE,GAAX,EAAgBwyE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA8C;;AAEnD,MAAI/uE,QAAQ,IAAZ;;AAEA,MAAI5D,SAAS,EAAb;;AAEA,MAAIkB,UAAU,IAAI49D,iBAAJ,EAAd;AACA59D,UAAQ9D,KAAR,GAAgB4C,MAAhB;;AAEA,MAAI61E,SAAS,IAAIpC,UAAJ,CAAgB,KAAKC,OAArB,CAAb;AACAmC,SAAON,OAAP,CAAgB,KAAKvtC,IAArB;AACA6tC,SAAOL,eAAP,CAAwB,aAAxB;;AAEA,WAASM,WAAT,CAAsBn7F,CAAtB,EAA0B;;AAEzBk7F,UAAOlC,IAAP,CAAa1zE,IAAKtlB,CAAL,CAAb,EAAuB,UAAW+/B,MAAX,EAAoB;;AAE1C,QAAIq7D,WAAWnyE,MAAMgyE,OAAN,CAAel7D,MAAf,EAAuB,IAAvB,CAAf;;AAEA1a,WAAQrlB,CAAR,IAAc;AACb0kB,YAAO02E,SAAS12E,KADH;AAEbC,aAAQy2E,SAASz2E,MAFJ;AAGb5B,aAAQq4E,SAASr4E,MAHJ;AAIbK,cAASg4E,SAASh4E;AAJL,KAAd;;AAOAi4E,cAAU,CAAV;;AAEA,QAAKA,WAAW,CAAhB,EAAoB;;AAEnB,SAAKD,SAASE,WAAT,KAAyB,CAA9B,EACC/0E,QAAQzD,SAAR,GAAoBle,YAApB;;AAED2hB,aAAQxD,MAAR,GAAiBq4E,SAASr4E,MAA1B;AACAwD,aAAQqsB,WAAR,GAAsB,IAAtB;;AAEA,SAAKklD,MAAL,EAAcA,OAAQvxE,OAAR;AAEd;AAED,IAzBD,EAyBGwxE,UAzBH,EAyBeC,OAzBf;AA2BA;;AAED,MAAKjhE,MAAMC,OAAN,CAAe1R,GAAf,CAAL,EAA4B;;AAE3B,OAAI+1E,SAAS,CAAb;;AAEA,QAAM,IAAIr7F,IAAI,CAAR,EAAWkoB,KAAK5C,IAAI3mB,MAA1B,EAAkCqB,IAAIkoB,EAAtC,EAA0C,EAAGloB,CAA7C,EAAiD;;AAEhDm7F,gBAAan7F,CAAb;AAEA;AAED,GAVD,MAUO;;AAEN;;AAEAk7F,UAAOlC,IAAP,CAAa1zE,GAAb,EAAkB,UAAWya,MAAX,EAAoB;;AAErC,QAAIq7D,WAAWnyE,MAAMgyE,OAAN,CAAel7D,MAAf,EAAuB,IAAvB,CAAf;;AAEA,QAAKq7D,SAASG,SAAd,EAA0B;;AAEzB,SAAI1yD,QAAQuyD,SAASh4E,OAAT,CAAiBzkB,MAAjB,GAA0By8F,SAASE,WAA/C;;AAEA,UAAM,IAAIzoF,IAAI,CAAd,EAAiBA,IAAIg2B,KAArB,EAA4Bh2B,GAA5B,EAAmC;;AAElCwS,aAAQxS,CAAR,IAAc,EAAEuQ,SAAS,EAAX,EAAd;;AAEA,WAAM,IAAIpjB,IAAI,CAAd,EAAiBA,IAAIo7F,SAASE,WAA9B,EAA2Ct7F,GAA3C,EAAkD;;AAEjDqlB,cAAQxS,CAAR,EAAYuQ,OAAZ,CAAoB7jB,IAApB,CAA0B67F,SAASh4E,OAAT,CAAkBvQ,IAAIuoF,SAASE,WAAb,GAA2Bt7F,CAA7C,CAA1B;AACAqlB,cAAQxS,CAAR,EAAYkQ,MAAZ,GAAqBq4E,SAASr4E,MAA9B;AACAsC,cAAQxS,CAAR,EAAY6R,KAAZ,GAAoB02E,SAAS12E,KAA7B;AACAW,cAAQxS,CAAR,EAAY8R,MAAZ,GAAqBy2E,SAASz2E,MAA9B;AAEA;AAED;AAED,KAnBD,MAmBO;;AAEN4B,aAAQ9D,KAAR,CAAciC,KAAd,GAAsB02E,SAAS12E,KAA/B;AACA6B,aAAQ9D,KAAR,CAAckC,MAAd,GAAuBy2E,SAASz2E,MAAhC;AACA4B,aAAQnD,OAAR,GAAkBg4E,SAASh4E,OAA3B;AAEA;;AAED,QAAKg4E,SAASE,WAAT,KAAyB,CAA9B,EAAkC;;AAEjC/0E,aAAQzD,SAAR,GAAoBle,YAApB;AAEA;;AAED2hB,YAAQxD,MAAR,GAAiBq4E,SAASr4E,MAA1B;AACAwD,YAAQqsB,WAAR,GAAsB,IAAtB;;AAEA,QAAKklD,MAAL,EAAcA,OAAQvxE,OAAR;AAEd,IA1CD,EA0CGwxE,UA1CH,EA0CeC,OA1Cf;AA4CA;;AAED,SAAOzxE,OAAP;AAEA,EA5GgD;;AA8GjDq0E,UAAS,UAAWn9F,KAAX,EAAmB;;AAE3B,OAAK4vD,IAAL,GAAY5vD,KAAZ;AACA,SAAO,IAAP;AAEA;;AAnHgD,CAAlD;;AAuHA;;;;;;AAMA,SAAS+9F,iBAAT,CAA4BzC,OAA5B,EAAsC;;AAErC,MAAKA,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;;AAEA;AACA,MAAKqC,OAAL,GAAe,IAAf;AAEA;;AAEDj9F,OAAOK,MAAP,CAAem9F,kBAAkBz9F,SAAjC,EAA4C;;AAE3Ci7F,OAAM,UAAW1zE,GAAX,EAAgBwyE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA8C;;AAEnD,MAAI/uE,QAAQ,IAAZ;;AAEA,MAAI1C,UAAU,IAAIU,WAAJ,EAAd;;AAEA,MAAIi0E,SAAS,IAAIpC,UAAJ,CAAgB,KAAKC,OAArB,CAAb;AACAmC,SAAOL,eAAP,CAAwB,aAAxB;;AAEAK,SAAOlC,IAAP,CAAa1zE,GAAb,EAAkB,UAAWya,MAAX,EAAoB;;AAErC,OAAI07D,UAAUxyE,MAAMgyE,OAAN,CAAel7D,MAAf,CAAd;;AAEA,OAAK,CAAE07D,OAAP,EAAiB;;AAEjB,OAAKp+F,cAAco+F,QAAQh5E,KAA3B,EAAmC;;AAElC8D,YAAQ9D,KAAR,GAAgBg5E,QAAQh5E,KAAxB;AAEA,IAJD,MAIO,IAAKplB,cAAco+F,QAAQv0E,IAA3B,EAAkC;;AAExCX,YAAQ9D,KAAR,CAAciC,KAAd,GAAsB+2E,QAAQ/2E,KAA9B;AACA6B,YAAQ9D,KAAR,CAAckC,MAAd,GAAuB82E,QAAQ92E,MAA/B;AACA4B,YAAQ9D,KAAR,CAAcyE,IAAd,GAAqBu0E,QAAQv0E,IAA7B;AAEA;;AAEDX,WAAQ5D,KAAR,GAAgBtlB,cAAco+F,QAAQ94E,KAAtB,GAA8B84E,QAAQ94E,KAAtC,GAA8Cpe,mBAA9D;AACAgiB,WAAQ3D,KAAR,GAAgBvlB,cAAco+F,QAAQ74E,KAAtB,GAA8B64E,QAAQ74E,KAAtC,GAA8Cre,mBAA9D;;AAEAgiB,WAAQ1D,SAAR,GAAoBxlB,cAAco+F,QAAQ54E,SAAtB,GAAkC44E,QAAQ54E,SAA1C,GAAsDje,YAA1E;AACA2hB,WAAQzD,SAAR,GAAoBzlB,cAAco+F,QAAQ34E,SAAtB,GAAkC24E,QAAQ34E,SAA1C,GAAsDhe,wBAA1E;;AAEAyhB,WAAQvD,UAAR,GAAqB3lB,cAAco+F,QAAQz4E,UAAtB,GAAmCy4E,QAAQz4E,UAA3C,GAAwD,CAA7E;;AAEA,OAAK3lB,cAAco+F,QAAQ14E,MAA3B,EAAoC;;AAEnCwD,YAAQxD,MAAR,GAAiB04E,QAAQ14E,MAAzB;AAEA;AACD,OAAK1lB,cAAco+F,QAAQv8F,IAA3B,EAAkC;;AAEjCqnB,YAAQrnB,IAAR,GAAeu8F,QAAQv8F,IAAvB;AAEA;;AAED,OAAK7B,cAAco+F,QAAQr4E,OAA3B,EAAqC;;AAEpCmD,YAAQnD,OAAR,GAAkBq4E,QAAQr4E,OAA1B;AAEA;;AAED,OAAK,MAAMq4E,QAAQH,WAAnB,EAAiC;;AAEhC/0E,YAAQzD,SAAR,GAAoBle,YAApB;AAEA;;AAED2hB,WAAQqsB,WAAR,GAAsB,IAAtB;;AAEA,OAAKklD,MAAL,EAAcA,OAAQvxE,OAAR,EAAiBk1E,OAAjB;AAEd,GArDD,EAqDG1D,UArDH,EAqDeC,OArDf;;AAwDA,SAAOzxE,OAAP;AAEA;;AArE0C,CAA5C;;AAyEA;;;;AAIA,SAASm1E,WAAT,CAAsB3C,OAAtB,EAAgC;;AAE/B,MAAKA,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;AAEA;;AAED56F,OAAOK,MAAP,CAAeq9F,YAAY39F,SAA3B,EAAsC;;AAErC49F,cAAa,WAFwB;;AAIrC3C,OAAM,UAAW1zE,GAAX,EAAgBwyE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA8C;;AAEnD,MAAK1yE,QAAQjoB,SAAb,EAAyBioB,MAAM,EAAN;;AAEzB,MAAK,KAAK+nC,IAAL,KAAchwD,SAAnB,EAA+BioB,MAAM,KAAK+nC,IAAL,GAAY/nC,GAAlB;;AAE/BA,QAAM,KAAKyzE,OAAL,CAAaN,UAAb,CAAyBnzE,GAAzB,CAAN;;AAEA,MAAI2D,QAAQ,IAAZ;;AAEA,MAAIgwE,SAASvB,MAAMx5F,GAAN,CAAWonB,GAAX,CAAb;;AAEA,MAAK2zE,WAAW57F,SAAhB,EAA4B;;AAE3B4rB,SAAM8vE,OAAN,CAAcT,SAAd,CAAyBhzE,GAAzB;;AAEA4zE,cAAY,YAAY;;AAEvB,QAAKpB,MAAL,EAAcA,OAAQmB,MAAR;;AAEdhwE,UAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AAEA,IAND,EAMG,CANH;;AAQA,UAAO2zE,MAAP;AAEA;;AAED,MAAIx2E,QAAQ+B,SAASC,eAAT,CAA0B,8BAA1B,EAA0D,KAA1D,CAAZ;;AAEAhC,QAAMxjB,gBAAN,CAAwB,MAAxB,EAAgC,YAAY;;AAE3Cy4F,SAAM9qF,GAAN,CAAW0Y,GAAX,EAAgB,IAAhB;;AAEA,OAAKwyE,MAAL,EAAcA,OAAQ,IAAR;;AAEd7uE,SAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AAEA,GARD,EAQG,KARH;;AAUA;;;;;;AAQA7C,QAAMxjB,gBAAN,CAAwB,OAAxB,EAAiC,UAAWY,KAAX,EAAmB;;AAEnD,OAAKm4F,OAAL,EAAeA,QAASn4F,KAAT;;AAEfopB,SAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AACA2D,SAAM8vE,OAAN,CAAcP,SAAd,CAAyBlzE,GAAzB;AAEA,GAPD,EAOG,KAPH;;AASA,MAAKA,IAAIs2E,MAAJ,CAAY,CAAZ,EAAe,CAAf,MAAuB,OAA5B,EAAsC;;AAErC,OAAK,KAAKD,WAAL,KAAqBt+F,SAA1B,EAAsColB,MAAMk5E,WAAN,GAAoB,KAAKA,WAAzB;AAEtC;;AAED1yE,QAAM8vE,OAAN,CAAcT,SAAd,CAAyBhzE,GAAzB;;AAEA7C,QAAMo5E,GAAN,GAAYv2E,GAAZ;;AAEA,SAAO7C,KAAP;AAEA,EAzEoC;;AA2ErCq5E,iBAAgB,UAAWr+F,KAAX,EAAmB;;AAElC,OAAKk+F,WAAL,GAAmBl+F,KAAnB;AACA,SAAO,IAAP;AAEA,EAhFoC;;AAkFrCm9F,UAAS,UAAWn9F,KAAX,EAAmB;;AAE3B,OAAK4vD,IAAL,GAAY5vD,KAAZ;AACA,SAAO,IAAP;AAEA;;AAvFoC,CAAtC;;AA2FA;;;;AAIA,SAASs+F,iBAAT,CAA4BhD,OAA5B,EAAsC;;AAErC,MAAKA,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;AAEA;;AAED56F,OAAOK,MAAP,CAAe09F,kBAAkBh+F,SAAjC,EAA4C;;AAE3C49F,cAAa,WAF8B;;AAI3C3C,OAAM,UAAWgD,IAAX,EAAiBlE,MAAjB,EAAyBC,UAAzB,EAAqCC,OAArC,EAA+C;;AAEpD,MAAIzxE,UAAU,IAAIwiC,WAAJ,EAAd;;AAEA,MAAImyC,SAAS,IAAIQ,WAAJ,CAAiB,KAAK3C,OAAtB,CAAb;AACAmC,SAAOY,cAAP,CAAuB,KAAKH,WAA5B;AACAT,SAAON,OAAP,CAAgB,KAAKvtC,IAArB;;AAEA,MAAIguC,SAAS,CAAb;;AAEA,WAASF,WAAT,CAAsBn7F,CAAtB,EAA0B;;AAEzBk7F,UAAOlC,IAAP,CAAagD,KAAMh8F,CAAN,CAAb,EAAwB,UAAWyiB,KAAX,EAAmB;;AAE1C8D,YAAQlB,MAAR,CAAgBrlB,CAAhB,IAAsByiB,KAAtB;;AAEA44E;;AAEA,QAAKA,WAAW,CAAhB,EAAoB;;AAEnB90E,aAAQqsB,WAAR,GAAsB,IAAtB;;AAEA,SAAKklD,MAAL,EAAcA,OAAQvxE,OAAR;AAEd;AAED,IAdD,EAcGlpB,SAdH,EAcc26F,OAdd;AAgBA;;AAED,OAAM,IAAIh4F,IAAI,CAAd,EAAiBA,IAAIg8F,KAAKr9F,MAA1B,EAAkC,EAAGqB,CAArC,EAAyC;;AAExCm7F,eAAan7F,CAAb;AAEA;;AAED,SAAOumB,OAAP;AAEA,EA1C0C;;AA4C3Cu1E,iBAAgB,UAAWr+F,KAAX,EAAmB;;AAElC,OAAKk+F,WAAL,GAAmBl+F,KAAnB;AACA,SAAO,IAAP;AAEA,EAjD0C;;AAmD3Cm9F,UAAS,UAAWn9F,KAAX,EAAmB;;AAE3B,OAAK4vD,IAAL,GAAY5vD,KAAZ;AACA,SAAO,IAAP;AAEA;;AAxD0C,CAA5C;;AA4DA;;;;AAIA,SAASw+F,aAAT,CAAwBlD,OAAxB,EAAkC;;AAEjC,MAAKA,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;AAEA;;AAED56F,OAAOK,MAAP,CAAe49F,cAAcl+F,SAA7B,EAAwC;;AAEvC49F,cAAa,WAF0B;;AAIvC3C,OAAM,UAAW1zE,GAAX,EAAgBwyE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA8C;;AAEnD,MAAIzxE,UAAU,IAAI/D,OAAJ,EAAd;;AAEA,MAAI04E,SAAS,IAAIQ,WAAJ,CAAiB,KAAK3C,OAAtB,CAAb;AACAmC,SAAOY,cAAP,CAAuB,KAAKH,WAA5B;AACAT,SAAON,OAAP,CAAgB,KAAKvtC,IAArB;;AAEA6tC,SAAOlC,IAAP,CAAa1zE,GAAb,EAAkB,UAAW7C,KAAX,EAAmB;;AAEpC8D,WAAQ9D,KAAR,GAAgBA,KAAhB;;AAEA;AACA,OAAIy5E,SAAS52E,IAAI62E,MAAJ,CAAY,eAAZ,IAAgC,CAAhC,IAAqC72E,IAAI62E,MAAJ,CAAY,oBAAZ,MAAuC,CAAzF;;AAEA51E,WAAQxD,MAAR,GAAiBm5E,SAASt2F,SAAT,GAAqBC,UAAtC;AACA0gB,WAAQqsB,WAAR,GAAsB,IAAtB;;AAEA,OAAKklD,WAAWz6F,SAAhB,EAA4B;;AAE3By6F,WAAQvxE,OAAR;AAEA;AAED,GAhBD,EAgBGwxE,UAhBH,EAgBeC,OAhBf;;AAkBA,SAAOzxE,OAAP;AAEA,EAhCsC;;AAkCvCu1E,iBAAgB,UAAWr+F,KAAX,EAAmB;;AAElC,OAAKk+F,WAAL,GAAmBl+F,KAAnB;AACA,SAAO,IAAP;AAEA,EAvCsC;;AAyCvCm9F,UAAS,UAAWn9F,KAAX,EAAmB;;AAE3B,OAAK4vD,IAAL,GAAY5vD,KAAZ;AACA,SAAO,IAAP;AAEA;;AA9CsC,CAAxC;;AAkDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA;;;;AAIA,SAAS2+F,KAAT,GAAiB;;AAEhB,MAAKl9F,IAAL,GAAY,OAAZ;;AAEA,MAAKm9F,kBAAL,GAA0B,GAA1B;AAEA;;AAEDr+F,OAAOK,MAAP,CAAe+9F,MAAMr+F,SAArB,EAAgC;;AAE/B;AACA;;AAEAu+F,WAAU,YAAW,uBAA0B;;AAE9CxvF,UAAQC,IAAR,CAAc,2CAAd;AACA,SAAO,IAAP;AAEA,EAV8B;;AAY/B;AACA;;AAEA+6E,aAAY,UAAWpxD,CAAX,EAAc6lE,cAAd,EAA+B;;AAE1C,MAAI7xF,IAAI,KAAK8xF,cAAL,CAAqB9lE,CAArB,CAAR;AACA,SAAO,KAAK4lE,QAAL,CAAe5xF,CAAf,EAAkB6xF,cAAlB,CAAP;AAEA,EApB8B;;AAsB/B;;AAEAE,YAAW,UAAWC,SAAX,EAAuB;;AAEjC,MAAKA,cAAcr/F,SAAnB,EAA+Bq/F,YAAY,CAAZ;;AAE/B,MAAI10E,SAAS,EAAb;;AAEA,OAAM,IAAIpV,IAAI,CAAd,EAAiBA,KAAK8pF,SAAtB,EAAiC9pF,GAAjC,EAAwC;;AAEvCoV,UAAOzoB,IAAP,CAAa,KAAK+8F,QAAL,CAAe1pF,IAAI8pF,SAAnB,CAAb;AAEA;;AAED,SAAO10E,MAAP;AAEA,EAtC8B;;AAwC/B;;AAEAmnE,kBAAiB,UAAWuN,SAAX,EAAuB;;AAEvC,MAAKA,cAAcr/F,SAAnB,EAA+Bq/F,YAAY,CAAZ;;AAE/B,MAAI10E,SAAS,EAAb;;AAEA,OAAM,IAAIpV,IAAI,CAAd,EAAiBA,KAAK8pF,SAAtB,EAAiC9pF,GAAjC,EAAwC;;AAEvCoV,UAAOzoB,IAAP,CAAa,KAAKuoF,UAAL,CAAiBl1E,IAAI8pF,SAArB,CAAb;AAEA;;AAED,SAAO10E,MAAP;AAEA,EAxD8B;;AA0D/B;;AAEA20E,YAAW,YAAY;;AAEtB,MAAIC,UAAU,KAAKC,UAAL,EAAd;AACA,SAAOD,QAASA,QAAQj+F,MAAR,GAAiB,CAA1B,CAAP;AAEA,EAjE8B;;AAmE/B;;AAEAk+F,aAAY,UAAWH,SAAX,EAAuB;;AAElC,MAAKA,cAAcr/F,SAAnB,EAA+Bq/F,YAAY,KAAKL,kBAAjB;;AAE/B,MAAK,KAAKS,eAAL,IACF,KAAKA,eAAL,CAAqBn+F,MAArB,KAAgC+9F,YAAY,CAD1C,IAEJ,CAAE,KAAK9pD,WAFR,EAEsB;;AAErB,UAAO,KAAKkqD,eAAZ;AAEA;;AAED,OAAKlqD,WAAL,GAAmB,KAAnB;;AAEA,MAAI7L,QAAQ,EAAZ;AACA,MAAIg2D,OAAJ;AAAA,MAAanT,OAAO,KAAK0S,QAAL,CAAe,CAAf,CAApB;AACA,MAAI3hF,CAAJ;AAAA,MAAOwyE,MAAM,CAAb;;AAEApmD,QAAMxnC,IAAN,CAAY,CAAZ;;AAEA,OAAMob,IAAI,CAAV,EAAaA,KAAK+hF,SAAlB,EAA6B/hF,GAA7B,EAAoC;;AAEnCoiF,aAAU,KAAKT,QAAL,CAAe3hF,IAAI+hF,SAAnB,CAAV;AACAvP,UAAO4P,QAAQhuF,UAAR,CAAoB66E,IAApB,CAAP;AACA7iD,SAAMxnC,IAAN,CAAY4tF,GAAZ;AACAvD,UAAOmT,OAAP;AAEA;;AAED,OAAKD,eAAL,GAAuB/1D,KAAvB;;AAEA,SAAOA,KAAP,CA/BkC,CA+BpB;AAEd,EAtG8B;;AAwG/Bi2D,mBAAkB,YAAY;;AAE7B,OAAKpqD,WAAL,GAAmB,IAAnB;AACA,OAAKiqD,UAAL;AAEA,EA7G8B;;AA+G/B;;AAEAL,iBAAgB,UAAW9lE,CAAX,EAAcvH,QAAd,EAAyB;;AAExC,MAAI8tE,aAAa,KAAKJ,UAAL,EAAjB;;AAEA,MAAI78F,IAAI,CAAR;AAAA,MAAWkoB,KAAK+0E,WAAWt+F,MAA3B;;AAEA,MAAIu+F,eAAJ,CANwC,CAMnB;;AAErB,MAAK/tE,QAAL,EAAgB;;AAEf+tE,qBAAkB/tE,QAAlB;AAEA,GAJD,MAIO;;AAEN+tE,qBAAkBxmE,IAAIumE,WAAY/0E,KAAK,CAAjB,CAAtB;AAEA;;AAED;;AAEA,MAAIpd,MAAM,CAAV;AAAA,MAAaC,OAAOmd,KAAK,CAAzB;AAAA,MAA4Bi1E,UAA5B;;AAEA,SAAQryF,OAAOC,IAAf,EAAsB;;AAErB/K,OAAI1C,KAAKK,KAAL,CAAYmN,MAAM,CAAEC,OAAOD,GAAT,IAAiB,CAAnC,CAAJ,CAFqB,CAEuB;;AAE5CqyF,gBAAaF,WAAYj9F,CAAZ,IAAkBk9F,eAA/B;;AAEA,OAAKC,aAAa,CAAlB,EAAsB;;AAErBryF,UAAM9K,IAAI,CAAV;AAEA,IAJD,MAIO,IAAKm9F,aAAa,CAAlB,EAAsB;;AAE5BpyF,WAAO/K,IAAI,CAAX;AAEA,IAJM,MAIA;;AAEN+K,WAAO/K,CAAP;AACA;;AAEA;AAEA;AAED;;AAEDA,MAAI+K,IAAJ;;AAEA,MAAKkyF,WAAYj9F,CAAZ,MAAoBk9F,eAAzB,EAA2C;;AAE1C,UAAOl9F,KAAMkoB,KAAK,CAAX,CAAP;AAEA;;AAED;;AAEA,MAAIk1E,eAAeH,WAAYj9F,CAAZ,CAAnB;AACA,MAAIq9F,cAAcJ,WAAYj9F,IAAI,CAAhB,CAAlB;;AAEA,MAAIs9F,gBAAgBD,cAAcD,YAAlC;;AAEA;;AAEA,MAAIG,kBAAkB,CAAEL,kBAAkBE,YAApB,IAAqCE,aAA3D;;AAEA;;AAEA,MAAI5yF,IAAI,CAAE1K,IAAIu9F,eAAN,KAA4Br1E,KAAK,CAAjC,CAAR;;AAEA,SAAOxd,CAAP;AAEA,EAzL8B;;AA2L/B;AACA;AACA;AACA;;AAEA8yF,aAAY,UAAW9yF,CAAX,EAAe;;AAE1B,MAAIgiB,QAAQ,MAAZ;AACA,MAAIuuB,KAAKvwC,IAAIgiB,KAAb;AACA,MAAI+wE,KAAK/yF,IAAIgiB,KAAb;;AAEA;;AAEA,MAAKuuB,KAAK,CAAV,EAAcA,KAAK,CAAL;AACd,MAAKwiD,KAAK,CAAV,EAAcA,KAAK,CAAL;;AAEd,MAAIC,MAAM,KAAKpB,QAAL,CAAerhD,EAAf,CAAV;AACA,MAAI0iD,MAAM,KAAKrB,QAAL,CAAemB,EAAf,CAAV;;AAEA,MAAItb,MAAMwb,IAAInxF,KAAJ,GAAYc,GAAZ,CAAiBowF,GAAjB,CAAV;AACA,SAAOvb,IAAIvzE,SAAJ,EAAP;AAEA,EAjN8B;;AAmN/BgvF,eAAc,UAAWlnE,CAAX,EAAe;;AAE5B,MAAIhsB,IAAI,KAAK8xF,cAAL,CAAqB9lE,CAArB,CAAR;AACA,SAAO,KAAK8mE,UAAL,CAAiB9yF,CAAjB,CAAP;AAEA,EAxN8B;;AA0N/B+8E,sBAAqB,UAAWyN,QAAX,EAAqBhO,MAArB,EAA8B;;AAElD;;AAEA,MAAInmE,SAAS,IAAI1O,OAAJ,EAAb;;AAEA,MAAIi1E,WAAW,EAAf;AACA,MAAIl9C,UAAU,EAAd;AACA,MAAIm9C,YAAY,EAAhB;;AAEA,MAAIpF,MAAM,IAAI9vE,OAAJ,EAAV;AACA,MAAIwrF,MAAM,IAAIvtF,OAAJ,EAAV;;AAEA,MAAItQ,CAAJ,EAAO02B,CAAP,EAAU9d,KAAV;;AAEA;;AAEA,OAAM5Y,IAAI,CAAV,EAAaA,KAAKk1F,QAAlB,EAA4Bl1F,GAA5B,EAAmC;;AAElC02B,OAAI12B,IAAIk1F,QAAR;;AAEA5N,YAAUtnF,CAAV,IAAgB,KAAK49F,YAAL,CAAmBlnE,CAAnB,CAAhB;AACA4wD,YAAUtnF,CAAV,EAAc4O,SAAd;AAEA;;AAED;AACA;;AAEAw7B,UAAS,CAAT,IAAe,IAAI/3B,OAAJ,EAAf;AACAk1E,YAAW,CAAX,IAAiB,IAAIl1E,OAAJ,EAAjB;AACA,MAAIvI,MAAM3M,OAAO2gG,SAAjB;AACA,MAAI7kF,KAAK3b,KAAKqR,GAAL,CAAU24E,SAAU,CAAV,EAAczpF,CAAxB,CAAT;AACA,MAAIqb,KAAK5b,KAAKqR,GAAL,CAAU24E,SAAU,CAAV,EAAc78E,CAAxB,CAAT;AACA,MAAIszF,KAAKzgG,KAAKqR,GAAL,CAAU24E,SAAU,CAAV,EAAcn1E,CAAxB,CAAT;;AAEA,MAAK8G,MAAMnP,GAAX,EAAiB;;AAEhBA,SAAMmP,EAAN;AACA8H,UAAOhV,GAAP,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB;AAEA;;AAED,MAAKmN,MAAMpP,GAAX,EAAiB;;AAEhBA,SAAMoP,EAAN;AACA6H,UAAOhV,GAAP,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB;AAEA;;AAED,MAAKgyF,MAAMj0F,GAAX,EAAiB;;AAEhBiX,UAAOhV,GAAP,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB;AAEA;;AAEDo2E,MAAIntE,YAAJ,CAAkBsyE,SAAU,CAAV,CAAlB,EAAiCvmE,MAAjC,EAA0CnS,SAA1C;;AAEAw7B,UAAS,CAAT,EAAap1B,YAAb,CAA2BsyE,SAAU,CAAV,CAA3B,EAA0CnF,GAA1C;AACAoF,YAAW,CAAX,EAAevyE,YAAf,CAA6BsyE,SAAU,CAAV,CAA7B,EAA4Cl9C,QAAS,CAAT,CAA5C;;AAGA;;AAEA,OAAMpqC,IAAI,CAAV,EAAaA,KAAKk1F,QAAlB,EAA4Bl1F,GAA5B,EAAmC;;AAElCoqC,WAASpqC,CAAT,IAAeoqC,QAASpqC,IAAI,CAAb,EAAiBwM,KAAjB,EAAf;;AAEA+6E,aAAWvnF,CAAX,IAAiBunF,UAAWvnF,IAAI,CAAf,EAAmBwM,KAAnB,EAAjB;;AAEA21E,OAAIntE,YAAJ,CAAkBsyE,SAAUtnF,IAAI,CAAd,CAAlB,EAAqCsnF,SAAUtnF,CAAV,CAArC;;AAEA,OAAKmiF,IAAIxjF,MAAJ,KAAexB,OAAOC,OAA3B,EAAqC;;AAEpC+kF,QAAIvzE,SAAJ;;AAEAgK,YAAQtb,KAAK2jB,IAAL,CAAWjY,MAAMa,KAAN,CAAay9E,SAAUtnF,IAAI,CAAd,EAAkBuO,GAAlB,CAAuB+4E,SAAUtnF,CAAV,CAAvB,CAAb,EAAqD,CAAE,CAAvD,EAA0D,CAA1D,CAAX,CAAR,CAJoC,CAIgD;;AAEpFoqC,YAASpqC,CAAT,EAAasX,YAAb,CAA2BumF,IAAI9kF,gBAAJ,CAAsBopE,GAAtB,EAA2BvpE,KAA3B,CAA3B;AAEA;;AAED2uE,aAAWvnF,CAAX,EAAegV,YAAf,CAA6BsyE,SAAUtnF,CAAV,CAA7B,EAA4CoqC,QAASpqC,CAAT,CAA5C;AAEA;;AAED;;AAEA,MAAKknF,WAAW,IAAhB,EAAuB;;AAEtBtuE,WAAQtb,KAAK2jB,IAAL,CAAWjY,MAAMa,KAAN,CAAaugC,QAAS,CAAT,EAAa77B,GAAb,CAAkB67B,QAAS8qD,QAAT,CAAlB,CAAb,EAAsD,CAAE,CAAxD,EAA2D,CAA3D,CAAX,CAAR;AACAt8E,YAASs8E,QAAT;;AAEA,OAAK5N,SAAU,CAAV,EAAc/4E,GAAd,CAAmB4zE,IAAIntE,YAAJ,CAAkBo1B,QAAS,CAAT,CAAlB,EAAgCA,QAAS8qD,QAAT,CAAhC,CAAnB,IAA6E,CAAlF,EAAsF;;AAErFt8E,YAAQ,CAAEA,KAAV;AAEA;;AAED,QAAM5Y,IAAI,CAAV,EAAaA,KAAKk1F,QAAlB,EAA4Bl1F,GAA5B,EAAmC;;AAElC;AACAoqC,YAASpqC,CAAT,EAAasX,YAAb,CAA2BumF,IAAI9kF,gBAAJ,CAAsBuuE,SAAUtnF,CAAV,CAAtB,EAAqC4Y,QAAQ5Y,CAA7C,CAA3B;AACAunF,cAAWvnF,CAAX,EAAegV,YAAf,CAA6BsyE,SAAUtnF,CAAV,CAA7B,EAA4CoqC,QAASpqC,CAAT,CAA5C;AAEA;AAED;;AAED,SAAO;AACNsnF,aAAUA,QADJ;AAENl9C,YAASA,OAFH;AAGNm9C,cAAWA;AAHL,GAAP;AAMA,EA7U8B;;AA+U/B/6E,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EAnV8B;;AAqV/BA,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB,OAAKy9F,kBAAL,GAA0Bz9F,OAAOy9F,kBAAjC;;AAEA,SAAO,IAAP;AAEA,EA3V8B;;AA6V/Bp4E,SAAQ,YAAY;;AAEnB,MAAIiD,OAAO;AACVhC,aAAU;AACTtB,aAAS,GADA;AAET1kB,UAAM,OAFG;AAGTimB,eAAW;AAHF;AADA,GAAX;;AAQA+B,OAAKm1E,kBAAL,GAA0B,KAAKA,kBAA/B;AACAn1E,OAAKhoB,IAAL,GAAY,KAAKA,IAAjB;;AAEA,SAAOgoB,IAAP;AAEA,EA5W8B;;AA8W/B82E,WAAU,UAAWC,IAAX,EAAkB;;AAE3B,OAAK5B,kBAAL,GAA0B4B,KAAK5B,kBAA/B;;AAEA,SAAO,IAAP;AAEA;;AApX8B,CAAhC;;AAwXA,SAAS6B,YAAT,CAAuBC,EAAvB,EAA2BC,EAA3B,EAA+BC,OAA/B,EAAwCC,OAAxC,EAAiDC,WAAjD,EAA8DC,SAA9D,EAAyEC,UAAzE,EAAqFC,SAArF,EAAiG;;AAEhGtC,OAAMr9F,IAAN,CAAY,IAAZ;;AAEA,MAAKG,IAAL,GAAY,cAAZ;;AAEA,MAAKi/F,EAAL,GAAUA,MAAM,CAAhB;AACA,MAAKC,EAAL,GAAUA,MAAM,CAAhB;;AAEA,MAAKC,OAAL,GAAeA,WAAW,CAA1B;AACA,MAAKC,OAAL,GAAeA,WAAW,CAA1B;;AAEA,MAAKC,WAAL,GAAmBA,eAAe,CAAlC;AACA,MAAKC,SAAL,GAAiBA,aAAa,IAAIlhG,KAAK4L,EAAvC;;AAEA,MAAKu1F,UAAL,GAAkBA,cAAc,KAAhC;;AAEA,MAAKC,SAAL,GAAiBA,aAAa,CAA9B;AAEA;;AAEDR,aAAangG,SAAb,GAAyBC,OAAO8lB,MAAP,CAAes4E,MAAMr+F,SAArB,CAAzB;AACAmgG,aAAangG,SAAb,CAAuB0O,WAAvB,GAAqCyxF,YAArC;;AAEAA,aAAangG,SAAb,CAAuB4gG,cAAvB,GAAwC,IAAxC;;AAEAT,aAAangG,SAAb,CAAuBu+F,QAAvB,GAAkC,UAAW5xF,CAAX,EAAc6xF,cAAd,EAA+B;;AAEhE,KAAIzzE,QAAQyzE,kBAAkB,IAAI1wF,OAAJ,EAA9B;;AAEA,KAAI+yF,QAAQthG,KAAK4L,EAAL,GAAU,CAAtB;AACA,KAAI21F,aAAa,KAAKL,SAAL,GAAiB,KAAKD,WAAvC;AACA,KAAIO,aAAaxhG,KAAKqR,GAAL,CAAUkwF,UAAV,IAAyB1hG,OAAOC,OAAjD;;AAEA;AACA,QAAQyhG,aAAa,CAArB,EAAyBA,cAAcD,KAAd;AACzB,QAAQC,aAAaD,KAArB,EAA6BC,cAAcD,KAAd;;AAE7B,KAAKC,aAAa1hG,OAAOC,OAAzB,EAAmC;;AAElC,MAAK0hG,UAAL,EAAkB;;AAEjBD,gBAAa,CAAb;AAEA,GAJD,MAIO;;AAENA,gBAAaD,KAAb;AAEA;AAED;;AAED,KAAK,KAAKH,UAAL,KAAoB,IAApB,IAA4B,CAAEK,UAAnC,EAAgD;;AAE/C,MAAKD,eAAeD,KAApB,EAA4B;;AAE3BC,gBAAa,CAAED,KAAf;AAEA,GAJD,MAIO;;AAENC,gBAAaA,aAAaD,KAA1B;AAEA;AAED;;AAED,KAAI/vF,QAAQ,KAAK0vF,WAAL,GAAmB7zF,IAAIm0F,UAAnC;AACA,KAAIhhG,IAAI,KAAKsgG,EAAL,GAAU,KAAKE,OAAL,GAAe/gG,KAAK8S,GAAL,CAAUvB,KAAV,CAAjC;AACA,KAAIpE,IAAI,KAAK2zF,EAAL,GAAU,KAAKE,OAAL,GAAehhG,KAAK+S,GAAL,CAAUxB,KAAV,CAAjC;;AAEA,KAAK,KAAK6vF,SAAL,KAAmB,CAAxB,EAA4B;;AAE3B,MAAItuF,MAAM9S,KAAK8S,GAAL,CAAU,KAAKsuF,SAAf,CAAV;AACA,MAAIruF,MAAM/S,KAAK+S,GAAL,CAAU,KAAKquF,SAAf,CAAV;;AAEA,MAAIzlF,KAAKpb,IAAI,KAAKsgG,EAAlB;AACA,MAAIjlF,KAAKzO,IAAI,KAAK2zF,EAAlB;;AAEA;AACAvgG,MAAIob,KAAK7I,GAAL,GAAW8I,KAAK7I,GAAhB,GAAsB,KAAK8tF,EAA/B;AACA1zF,MAAIwO,KAAK5I,GAAL,GAAW6I,KAAK9I,GAAhB,GAAsB,KAAKguF,EAA/B;AAEA;;AAED,QAAOt1E,MAAM/c,GAAN,CAAWlO,CAAX,EAAc4M,CAAd,CAAP;AAEA,CA5DD;;AA8DAyzF,aAAangG,SAAb,CAAuB2O,IAAvB,GAA8B,UAAW9N,MAAX,EAAoB;;AAEjDw9F,OAAMr+F,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,MAAKu/F,EAAL,GAAUv/F,OAAOu/F,EAAjB;AACA,MAAKC,EAAL,GAAUx/F,OAAOw/F,EAAjB;;AAEA,MAAKC,OAAL,GAAez/F,OAAOy/F,OAAtB;AACA,MAAKC,OAAL,GAAe1/F,OAAO0/F,OAAtB;;AAEA,MAAKC,WAAL,GAAmB3/F,OAAO2/F,WAA1B;AACA,MAAKC,SAAL,GAAiB5/F,OAAO4/F,SAAxB;;AAEA,MAAKC,UAAL,GAAkB7/F,OAAO6/F,UAAzB;;AAEA,MAAKC,SAAL,GAAiB9/F,OAAO8/F,SAAxB;;AAEA,QAAO,IAAP;AAEA,CAnBD;;AAsBAR,aAAangG,SAAb,CAAuBkmB,MAAvB,GAAgC,YAAY;;AAE3C,KAAIiD,OAAOk1E,MAAMr+F,SAAN,CAAgBkmB,MAAhB,CAAuBllB,IAAvB,CAA6B,IAA7B,CAAX;;AAEAmoB,MAAKi3E,EAAL,GAAU,KAAKA,EAAf;AACAj3E,MAAKk3E,EAAL,GAAU,KAAKA,EAAf;;AAEAl3E,MAAKm3E,OAAL,GAAe,KAAKA,OAApB;AACAn3E,MAAKo3E,OAAL,GAAe,KAAKA,OAApB;;AAEAp3E,MAAKq3E,WAAL,GAAmB,KAAKA,WAAxB;AACAr3E,MAAKs3E,SAAL,GAAiB,KAAKA,SAAtB;;AAEAt3E,MAAKu3E,UAAL,GAAkB,KAAKA,UAAvB;;AAEAv3E,MAAKw3E,SAAL,GAAiB,KAAKA,SAAtB;;AAEA,QAAOx3E,IAAP;AAEA,CAnBD;;AAqBAg3E,aAAangG,SAAb,CAAuBigG,QAAvB,GAAkC,UAAWC,IAAX,EAAkB;;AAEnD7B,OAAMr+F,SAAN,CAAgBigG,QAAhB,CAAyBj/F,IAAzB,CAA+B,IAA/B,EAAqCk/F,IAArC;;AAEA,MAAKE,EAAL,GAAUF,KAAKE,EAAf;AACA,MAAKC,EAAL,GAAUH,KAAKG,EAAf;;AAEA,MAAKC,OAAL,GAAeJ,KAAKI,OAApB;AACA,MAAKC,OAAL,GAAeL,KAAKK,OAApB;;AAEA,MAAKC,WAAL,GAAmBN,KAAKM,WAAxB;AACA,MAAKC,SAAL,GAAiBP,KAAKO,SAAtB;;AAEA,MAAKC,UAAL,GAAkBR,KAAKQ,UAAvB;;AAEA,MAAKC,SAAL,GAAiBT,KAAKS,SAAtB;;AAEA,QAAO,IAAP;AAEA,CAnBD;;AAqBA,SAASK,QAAT,CAAmBZ,EAAnB,EAAuBC,EAAvB,EAA2BY,OAA3B,EAAoCT,WAApC,EAAiDC,SAAjD,EAA4DC,UAA5D,EAAyE;;AAExEP,cAAan/F,IAAb,CAAmB,IAAnB,EAAyBo/F,EAAzB,EAA6BC,EAA7B,EAAiCY,OAAjC,EAA0CA,OAA1C,EAAmDT,WAAnD,EAAgEC,SAAhE,EAA2EC,UAA3E;;AAEA,MAAKv/F,IAAL,GAAY,UAAZ;AAEA;;AAED6/F,SAAShhG,SAAT,GAAqBC,OAAO8lB,MAAP,CAAeo6E,aAAangG,SAA5B,CAArB;AACAghG,SAAShhG,SAAT,CAAmB0O,WAAnB,GAAiCsyF,QAAjC;;AAEAA,SAAShhG,SAAT,CAAmBkhG,UAAnB,GAAgC,IAAhC;;AAEA;;;;;;;;;;;AAYA;;;;;;;;;;AAUA,SAASC,SAAT,GAAqB;;AAEpB,KAAIC,KAAK,CAAT;AAAA,KAAY5iF,KAAK,CAAjB;AAAA,KAAoBC,KAAK,CAAzB;AAAA,KAA4BC,KAAK,CAAjC;;AAEA;;;;;;;;AAQA,UAAS2oC,IAAT,CAAe5pC,EAAf,EAAmBI,EAAnB,EAAuBo/B,EAAvB,EAA2BC,EAA3B,EAAgC;;AAE/BkkD,OAAK3jF,EAAL;AACAe,OAAKy+B,EAAL;AACAx+B,OAAK,CAAE,CAAF,GAAMhB,EAAN,GAAW,IAAII,EAAf,GAAoB,IAAIo/B,EAAxB,GAA6BC,EAAlC;AACAx+B,OAAK,IAAIjB,EAAJ,GAAS,IAAII,EAAb,GAAkBo/B,EAAlB,GAAuBC,EAA5B;AAEA;;AAED,QAAO;;AAENmkD,kBAAgB,UAAW5jF,EAAX,EAAeI,EAAf,EAAmB3H,EAAnB,EAAuBorF,EAAvB,EAA2BC,OAA3B,EAAqC;;AAEpDl6C,QAAMxpC,EAAN,EAAU3H,EAAV,EAAcqrF,WAAYrrF,KAAKuH,EAAjB,CAAd,EAAqC8jF,WAAYD,KAAKzjF,EAAjB,CAArC;AAEA,GANK;;AAQN2jF,4BAA0B,UAAW/jF,EAAX,EAAeI,EAAf,EAAmB3H,EAAnB,EAAuBorF,EAAvB,EAA2BG,GAA3B,EAAgCC,GAAhC,EAAqCC,GAArC,EAA2C;;AAEpE;AACA,OAAIzkD,KAAK,CAAEr/B,KAAKJ,EAAP,IAAcgkF,GAAd,GAAoB,CAAEvrF,KAAKuH,EAAP,KAAgBgkF,MAAMC,GAAtB,CAApB,GAAkD,CAAExrF,KAAK2H,EAAP,IAAc6jF,GAAzE;AACA,OAAIhC,KAAK,CAAExpF,KAAK2H,EAAP,IAAc6jF,GAAd,GAAoB,CAAEJ,KAAKzjF,EAAP,KAAgB6jF,MAAMC,GAAtB,CAApB,GAAkD,CAAEL,KAAKprF,EAAP,IAAcyrF,GAAzE;;AAEA;AACAzkD,SAAMwkD,GAAN;AACAhC,SAAMgC,GAAN;;AAEAr6C,QAAMxpC,EAAN,EAAU3H,EAAV,EAAcgnC,EAAd,EAAkBwiD,EAAlB;AAEA,GApBK;;AAsBNkC,QAAM,UAAWj1F,CAAX,EAAe;;AAEpB,OAAI+yF,KAAK/yF,IAAIA,CAAb;AACA,OAAIk1F,KAAKnC,KAAK/yF,CAAd;AACA,UAAOy0F,KAAK5iF,KAAK7R,CAAV,GAAc8R,KAAKihF,EAAnB,GAAwBhhF,KAAKmjF,EAApC;AAEA;;AA5BK,EAAP;AAgCA;;AAED;;AAEA,IAAIloF,MAAM,IAAIrF,OAAJ,EAAV;AACA,IAAIq6E,KAAK,IAAIwS,SAAJ,EAAT;AACA,IAAIvS,KAAK,IAAIuS,SAAJ,EAAT;AACA,IAAIW,KAAK,IAAIX,SAAJ,EAAT;;AAEA,SAASY,gBAAT,CAA2B93E,MAA3B,EAAmCk/D,MAAnC,EAA2C6Y,SAA3C,EAAsDT,OAAtD,EAAgE;;AAE/DlD,OAAMr9F,IAAN,CAAY,IAAZ;;AAEA,MAAKG,IAAL,GAAY,kBAAZ;;AAEA,MAAK8oB,MAAL,GAAcA,UAAU,EAAxB;AACA,MAAKk/D,MAAL,GAAcA,UAAU,KAAxB;AACA,MAAK6Y,SAAL,GAAiBA,aAAa,aAA9B;AACA,MAAKT,OAAL,GAAeA,WAAW,GAA1B;AAEA;;AAEDQ,iBAAiB/hG,SAAjB,GAA6BC,OAAO8lB,MAAP,CAAes4E,MAAMr+F,SAArB,CAA7B;AACA+hG,iBAAiB/hG,SAAjB,CAA2B0O,WAA3B,GAAyCqzF,gBAAzC;;AAEAA,iBAAiB/hG,SAAjB,CAA2BiiG,kBAA3B,GAAgD,IAAhD;;AAEAF,iBAAiB/hG,SAAjB,CAA2Bu+F,QAA3B,GAAsC,UAAW5xF,CAAX,EAAc6xF,cAAd,EAA+B;;AAEpE,KAAIzzE,QAAQyzE,kBAAkB,IAAIlqF,OAAJ,EAA9B;;AAEA,KAAI2V,SAAS,KAAKA,MAAlB;AACA,KAAI/nB,IAAI+nB,OAAOrpB,MAAf;;AAEA,KAAIgc,IAAI,CAAE1a,KAAM,KAAKinF,MAAL,GAAc,CAAd,GAAkB,CAAxB,CAAF,IAAkCx8E,CAA1C;AACA,KAAIu1F,WAAW3iG,KAAKK,KAAL,CAAYgd,CAAZ,CAAf;AACA,KAAIulF,SAASvlF,IAAIslF,QAAjB;;AAEA,KAAK,KAAK/Y,MAAV,EAAmB;;AAElB+Y,cAAYA,WAAW,CAAX,GAAe,CAAf,GAAmB,CAAE3iG,KAAKK,KAAL,CAAYL,KAAKqR,GAAL,CAAUsxF,QAAV,IAAuBhgG,CAAnC,IAAyC,CAA3C,IAAiDA,CAAhF;AAEA,EAJD,MAIO,IAAKigG,WAAW,CAAX,IAAgBD,aAAahgG,IAAI,CAAtC,EAA0C;;AAEhDggG,aAAWhgG,IAAI,CAAf;AACAigG,WAAS,CAAT;AAEA;;AAED,KAAIl1E,EAAJ,EAAQC,EAAR,EAAYC,EAAZ,EAAgBqC,EAAhB,CAtBoE,CAsBhD;;AAEpB,KAAK,KAAK25D,MAAL,IAAe+Y,WAAW,CAA/B,EAAmC;;AAElCj1E,OAAKhD,OAAQ,CAAEi4E,WAAW,CAAb,IAAmBhgG,CAA3B,CAAL;AAEA,EAJD,MAIO;;AAEN;AACAyX,MAAInK,UAAJ,CAAgBya,OAAQ,CAAR,CAAhB,EAA6BA,OAAQ,CAAR,CAA7B,EAA2Cpb,GAA3C,CAAgDob,OAAQ,CAAR,CAAhD;AACAgD,OAAKtT,GAAL;AAEA;;AAEDuT,MAAKjD,OAAQi4E,WAAWhgG,CAAnB,CAAL;AACAirB,MAAKlD,OAAQ,CAAEi4E,WAAW,CAAb,IAAmBhgG,CAA3B,CAAL;;AAEA,KAAK,KAAKinF,MAAL,IAAe+Y,WAAW,CAAX,GAAehgG,CAAnC,EAAuC;;AAEtCstB,OAAKvF,OAAQ,CAAEi4E,WAAW,CAAb,IAAmBhgG,CAA3B,CAAL;AAEA,EAJD,MAIO;;AAEN;AACAyX,MAAInK,UAAJ,CAAgBya,OAAQ/nB,IAAI,CAAZ,CAAhB,EAAiC+nB,OAAQ/nB,IAAI,CAAZ,CAAjC,EAAmD2M,GAAnD,CAAwDob,OAAQ/nB,IAAI,CAAZ,CAAxD;AACAstB,OAAK7V,GAAL;AAEA;;AAED,KAAK,KAAKqoF,SAAL,KAAmB,aAAnB,IAAoC,KAAKA,SAAL,KAAmB,SAA5D,EAAwE;;AAEvE;AACA,MAAIxiG,MAAM,KAAKwiG,SAAL,KAAmB,SAAnB,GAA+B,GAA/B,GAAqC,IAA/C;AACA,MAAIP,MAAMliG,KAAKC,GAAL,CAAUytB,GAAGhc,iBAAH,CAAsBic,EAAtB,CAAV,EAAsC1tB,GAAtC,CAAV;AACA,MAAIkiG,MAAMniG,KAAKC,GAAL,CAAU0tB,GAAGjc,iBAAH,CAAsBkc,EAAtB,CAAV,EAAsC3tB,GAAtC,CAAV;AACA,MAAImiG,MAAMpiG,KAAKC,GAAL,CAAU2tB,GAAGlc,iBAAH,CAAsBue,EAAtB,CAAV,EAAsChwB,GAAtC,CAAV;;AAEA;AACA,MAAKkiG,MAAM,IAAX,EAAkBA,MAAM,GAAN;AAClB,MAAKD,MAAM,IAAX,EAAkBA,MAAMC,GAAN;AAClB,MAAKC,MAAM,IAAX,EAAkBA,MAAMD,GAAN;;AAElB/S,KAAG6S,wBAAH,CAA6Bv0E,GAAGntB,CAAhC,EAAmCotB,GAAGptB,CAAtC,EAAyCqtB,GAAGrtB,CAA5C,EAA+C0vB,GAAG1vB,CAAlD,EAAqD2hG,GAArD,EAA0DC,GAA1D,EAA+DC,GAA/D;AACA/S,KAAG4S,wBAAH,CAA6Bv0E,GAAGvgB,CAAhC,EAAmCwgB,GAAGxgB,CAAtC,EAAyCygB,GAAGzgB,CAA5C,EAA+C8iB,GAAG9iB,CAAlD,EAAqD+0F,GAArD,EAA0DC,GAA1D,EAA+DC,GAA/D;AACAG,KAAGN,wBAAH,CAA6Bv0E,GAAG7Y,CAAhC,EAAmC8Y,GAAG9Y,CAAtC,EAAyC+Y,GAAG/Y,CAA5C,EAA+Cob,GAAGpb,CAAlD,EAAqDqtF,GAArD,EAA0DC,GAA1D,EAA+DC,GAA/D;AAEA,EAjBD,MAiBO,IAAK,KAAKK,SAAL,KAAmB,YAAxB,EAAuC;;AAE7CrT,KAAG0S,cAAH,CAAmBp0E,GAAGntB,CAAtB,EAAyBotB,GAAGptB,CAA5B,EAA+BqtB,GAAGrtB,CAAlC,EAAqC0vB,GAAG1vB,CAAxC,EAA2C,KAAKyhG,OAAhD;AACA3S,KAAGyS,cAAH,CAAmBp0E,GAAGvgB,CAAtB,EAAyBwgB,GAAGxgB,CAA5B,EAA+BygB,GAAGzgB,CAAlC,EAAqC8iB,GAAG9iB,CAAxC,EAA2C,KAAK60F,OAAhD;AACAO,KAAGT,cAAH,CAAmBp0E,GAAG7Y,CAAtB,EAAyB8Y,GAAG9Y,CAA5B,EAA+B+Y,GAAG/Y,CAAlC,EAAqCob,GAAGpb,CAAxC,EAA2C,KAAKmtF,OAAhD;AAEA;;AAEDx2E,OAAM/c,GAAN,CACC2gF,GAAGiT,IAAH,CAASO,MAAT,CADD,EAECvT,GAAGgT,IAAH,CAASO,MAAT,CAFD,EAGCL,GAAGF,IAAH,CAASO,MAAT,CAHD;;AAMA,QAAOp3E,KAAP;AAEA,CApFD;;AAsFAg3E,iBAAiB/hG,SAAjB,CAA2B2O,IAA3B,GAAkC,UAAW9N,MAAX,EAAoB;;AAErDw9F,OAAMr+F,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,MAAKopB,MAAL,GAAc,EAAd;;AAEA,MAAM,IAAIhoB,IAAI,CAAR,EAAWC,IAAIrB,OAAOopB,MAAP,CAAcrpB,MAAnC,EAA2CqB,IAAIC,CAA/C,EAAkDD,GAAlD,EAAyD;;AAExD,MAAI8oB,QAAQlqB,OAAOopB,MAAP,CAAehoB,CAAf,CAAZ;;AAEA,OAAKgoB,MAAL,CAAYzoB,IAAZ,CAAkBupB,MAAMtc,KAAN,EAAlB;AAEA;;AAED,MAAK06E,MAAL,GAActoF,OAAOsoF,MAArB;AACA,MAAK6Y,SAAL,GAAiBnhG,OAAOmhG,SAAxB;AACA,MAAKT,OAAL,GAAe1gG,OAAO0gG,OAAtB;;AAEA,QAAO,IAAP;AAEA,CApBD;;AAsBAQ,iBAAiB/hG,SAAjB,CAA2BkmB,MAA3B,GAAoC,YAAY;;AAE/C,KAAIiD,OAAOk1E,MAAMr+F,SAAN,CAAgBkmB,MAAhB,CAAuBllB,IAAvB,CAA6B,IAA7B,CAAX;;AAEAmoB,MAAKc,MAAL,GAAc,EAAd;;AAEA,MAAM,IAAIhoB,IAAI,CAAR,EAAWC,IAAI,KAAK+nB,MAAL,CAAYrpB,MAAjC,EAAyCqB,IAAIC,CAA7C,EAAgDD,GAAhD,EAAuD;;AAEtD,MAAI8oB,QAAQ,KAAKd,MAAL,CAAahoB,CAAb,CAAZ;AACAknB,OAAKc,MAAL,CAAYzoB,IAAZ,CAAkBupB,MAAMlZ,OAAN,EAAlB;AAEA;;AAEDsX,MAAKggE,MAAL,GAAc,KAAKA,MAAnB;AACAhgE,MAAK64E,SAAL,GAAiB,KAAKA,SAAtB;AACA74E,MAAKo4E,OAAL,GAAe,KAAKA,OAApB;;AAEA,QAAOp4E,IAAP;AAEA,CAnBD;;AAqBA44E,iBAAiB/hG,SAAjB,CAA2BigG,QAA3B,GAAsC,UAAWC,IAAX,EAAkB;;AAEvD7B,OAAMr+F,SAAN,CAAgBigG,QAAhB,CAAyBj/F,IAAzB,CAA+B,IAA/B,EAAqCk/F,IAArC;;AAEA,MAAKj2E,MAAL,GAAc,EAAd;;AAEA,MAAM,IAAIhoB,IAAI,CAAR,EAAWC,IAAIg+F,KAAKj2E,MAAL,CAAYrpB,MAAjC,EAAyCqB,IAAIC,CAA7C,EAAgDD,GAAhD,EAAuD;;AAEtD,MAAI8oB,QAAQm1E,KAAKj2E,MAAL,CAAahoB,CAAb,CAAZ;AACA,OAAKgoB,MAAL,CAAYzoB,IAAZ,CAAkB,IAAI8S,OAAJ,GAAc3C,SAAd,CAAyBoZ,KAAzB,CAAlB;AAEA;;AAED,MAAKo+D,MAAL,GAAc+W,KAAK/W,MAAnB;AACA,MAAK6Y,SAAL,GAAiB9B,KAAK8B,SAAtB;AACA,MAAKT,OAAL,GAAerB,KAAKqB,OAApB;;AAEA,QAAO,IAAP;AAEA,CAnBD;;AAqBA;;;;;;;AAOA,SAASa,UAAT,CAAqBz1F,CAArB,EAAwBsgB,EAAxB,EAA4BC,EAA5B,EAAgCC,EAAhC,EAAoCqC,EAApC,EAAyC;;AAExC,KAAIjD,KAAK,CAAEY,KAAKF,EAAP,IAAc,GAAvB;AACA,KAAIzb,KAAK,CAAEge,KAAKtC,EAAP,IAAc,GAAvB;AACA,KAAIwyE,KAAK/yF,IAAIA,CAAb;AACA,KAAIk1F,KAAKl1F,IAAI+yF,EAAb;AACA,QAAO,CAAE,IAAIxyE,EAAJ,GAAS,IAAIC,EAAb,GAAkBZ,EAAlB,GAAuB/a,EAAzB,IAAgCqwF,EAAhC,GAAqC,CAAE,CAAE,CAAF,GAAM30E,EAAN,GAAW,IAAIC,EAAf,GAAoB,IAAIZ,EAAxB,GAA6B/a,EAA/B,IAAsCkuF,EAA3E,GAAgFnzE,KAAK5f,CAArF,GAAyFugB,EAAhG;AAEA;;AAED;;AAEA,SAASm1E,iBAAT,CAA4B11F,CAA5B,EAA+BiQ,CAA/B,EAAmC;;AAElC,KAAIs0B,IAAI,IAAIvkC,CAAZ;AACA,QAAOukC,IAAIA,CAAJ,GAAQt0B,CAAf;AAEA;;AAED,SAAS0lF,iBAAT,CAA4B31F,CAA5B,EAA+BiQ,CAA/B,EAAmC;;AAElC,QAAO,KAAM,IAAIjQ,CAAV,IAAgBA,CAAhB,GAAoBiQ,CAA3B;AAEA;;AAED,SAAS2lF,iBAAT,CAA4B51F,CAA5B,EAA+BiQ,CAA/B,EAAmC;;AAElC,QAAOjQ,IAAIA,CAAJ,GAAQiQ,CAAf;AAEA;;AAED,SAAS4lF,eAAT,CAA0B71F,CAA1B,EAA6BsgB,EAA7B,EAAiCC,EAAjC,EAAqCC,EAArC,EAA0C;;AAEzC,QAAOk1E,kBAAmB11F,CAAnB,EAAsBsgB,EAAtB,IAA6Bq1E,kBAAmB31F,CAAnB,EAAsBugB,EAAtB,CAA7B,GACNq1E,kBAAmB51F,CAAnB,EAAsBwgB,EAAtB,CADD;AAGA;;AAED;;AAEA,SAASs1E,aAAT,CAAwB91F,CAAxB,EAA2BiQ,CAA3B,EAA+B;;AAE9B,KAAIs0B,IAAI,IAAIvkC,CAAZ;AACA,QAAOukC,IAAIA,CAAJ,GAAQA,CAAR,GAAYt0B,CAAnB;AAEA;;AAED,SAAS8lF,aAAT,CAAwB/1F,CAAxB,EAA2BiQ,CAA3B,EAA+B;;AAE9B,KAAIs0B,IAAI,IAAIvkC,CAAZ;AACA,QAAO,IAAIukC,CAAJ,GAAQA,CAAR,GAAYvkC,CAAZ,GAAgBiQ,CAAvB;AAEA;;AAED,SAAS+lF,aAAT,CAAwBh2F,CAAxB,EAA2BiQ,CAA3B,EAA+B;;AAE9B,QAAO,KAAM,IAAIjQ,CAAV,IAAgBA,CAAhB,GAAoBA,CAApB,GAAwBiQ,CAA/B;AAEA;;AAED,SAASgmF,aAAT,CAAwBj2F,CAAxB,EAA2BiQ,CAA3B,EAA+B;;AAE9B,QAAOjQ,IAAIA,CAAJ,GAAQA,CAAR,GAAYiQ,CAAnB;AAEA;;AAED,SAASimF,WAAT,CAAsBl2F,CAAtB,EAAyBsgB,EAAzB,EAA6BC,EAA7B,EAAiCC,EAAjC,EAAqCqC,EAArC,EAA0C;;AAEzC,QAAOizE,cAAe91F,CAAf,EAAkBsgB,EAAlB,IAAyBy1E,cAAe/1F,CAAf,EAAkBugB,EAAlB,CAAzB,GAAkDy1E,cAAeh2F,CAAf,EAAkBwgB,EAAlB,CAAlD,GACNy1E,cAAej2F,CAAf,EAAkB6iB,EAAlB,CADD;AAGA;;AAED,SAASszE,gBAAT,CAA2Bv2E,EAA3B,EAA+B/a,EAA/B,EAAmCC,EAAnC,EAAuCsxF,EAAvC,EAA4C;;AAE3C1E,OAAMr9F,IAAN,CAAY,IAAZ;;AAEA,MAAKG,IAAL,GAAY,kBAAZ;;AAEA,MAAKorB,EAAL,GAAUA,MAAM,IAAIze,OAAJ,EAAhB;AACA,MAAK0D,EAAL,GAAUA,MAAM,IAAI1D,OAAJ,EAAhB;AACA,MAAK2D,EAAL,GAAUA,MAAM,IAAI3D,OAAJ,EAAhB;AACA,MAAKi1F,EAAL,GAAUA,MAAM,IAAIj1F,OAAJ,EAAhB;AAEA;;AAEDg1F,iBAAiB9iG,SAAjB,GAA6BC,OAAO8lB,MAAP,CAAes4E,MAAMr+F,SAArB,CAA7B;AACA8iG,iBAAiB9iG,SAAjB,CAA2B0O,WAA3B,GAAyCo0F,gBAAzC;;AAEAA,iBAAiB9iG,SAAjB,CAA2BgjG,kBAA3B,GAAgD,IAAhD;;AAEAF,iBAAiB9iG,SAAjB,CAA2Bu+F,QAA3B,GAAsC,UAAW5xF,CAAX,EAAc6xF,cAAd,EAA+B;;AAEpE,KAAIzzE,QAAQyzE,kBAAkB,IAAI1wF,OAAJ,EAA9B;;AAEA,KAAIye,KAAK,KAAKA,EAAd;AAAA,KAAkB/a,KAAK,KAAKA,EAA5B;AAAA,KAAgCC,KAAK,KAAKA,EAA1C;AAAA,KAA8CsxF,KAAK,KAAKA,EAAxD;;AAEAh4E,OAAM/c,GAAN,CACC60F,YAAal2F,CAAb,EAAgB4f,GAAGzsB,CAAnB,EAAsB0R,GAAG1R,CAAzB,EAA4B2R,GAAG3R,CAA/B,EAAkCijG,GAAGjjG,CAArC,CADD,EAEC+iG,YAAal2F,CAAb,EAAgB4f,GAAG7f,CAAnB,EAAsB8E,GAAG9E,CAAzB,EAA4B+E,GAAG/E,CAA/B,EAAkCq2F,GAAGr2F,CAArC,CAFD;;AAKA,QAAOqe,KAAP;AAEA,CAbD;;AAeA+3E,iBAAiB9iG,SAAjB,CAA2B2O,IAA3B,GAAkC,UAAW9N,MAAX,EAAoB;;AAErDw9F,OAAMr+F,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,MAAK0rB,EAAL,CAAQ5d,IAAR,CAAc9N,OAAO0rB,EAArB;AACA,MAAK/a,EAAL,CAAQ7C,IAAR,CAAc9N,OAAO2Q,EAArB;AACA,MAAKC,EAAL,CAAQ9C,IAAR,CAAc9N,OAAO4Q,EAArB;AACA,MAAKsxF,EAAL,CAAQp0F,IAAR,CAAc9N,OAAOkiG,EAArB;;AAEA,QAAO,IAAP;AAEA,CAXD;;AAaAD,iBAAiB9iG,SAAjB,CAA2BkmB,MAA3B,GAAoC,YAAY;;AAE/C,KAAIiD,OAAOk1E,MAAMr+F,SAAN,CAAgBkmB,MAAhB,CAAuBllB,IAAvB,CAA6B,IAA7B,CAAX;;AAEAmoB,MAAKoD,EAAL,GAAU,KAAKA,EAAL,CAAQ1a,OAAR,EAAV;AACAsX,MAAK3X,EAAL,GAAU,KAAKA,EAAL,CAAQK,OAAR,EAAV;AACAsX,MAAK1X,EAAL,GAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV;AACAsX,MAAK45E,EAAL,GAAU,KAAKA,EAAL,CAAQlxF,OAAR,EAAV;;AAEA,QAAOsX,IAAP;AAEA,CAXD;;AAaA25E,iBAAiB9iG,SAAjB,CAA2BigG,QAA3B,GAAsC,UAAWC,IAAX,EAAkB;;AAEvD7B,OAAMr+F,SAAN,CAAgBigG,QAAhB,CAAyBj/F,IAAzB,CAA+B,IAA/B,EAAqCk/F,IAArC;;AAEA,MAAK3zE,EAAL,CAAQ5a,SAAR,CAAmBuuF,KAAK3zE,EAAxB;AACA,MAAK/a,EAAL,CAAQG,SAAR,CAAmBuuF,KAAK1uF,EAAxB;AACA,MAAKC,EAAL,CAAQE,SAAR,CAAmBuuF,KAAKzuF,EAAxB;AACA,MAAKsxF,EAAL,CAAQpxF,SAAR,CAAmBuuF,KAAK6C,EAAxB;;AAEA,QAAO,IAAP;AAEA,CAXD;;AAaA,SAASE,iBAAT,CAA4B12E,EAA5B,EAAgC/a,EAAhC,EAAoCC,EAApC,EAAwCsxF,EAAxC,EAA6C;;AAE5C1E,OAAMr9F,IAAN,CAAY,IAAZ;;AAEA,MAAKG,IAAL,GAAY,mBAAZ;;AAEA,MAAKorB,EAAL,GAAUA,MAAM,IAAIjY,OAAJ,EAAhB;AACA,MAAK9C,EAAL,GAAUA,MAAM,IAAI8C,OAAJ,EAAhB;AACA,MAAK7C,EAAL,GAAUA,MAAM,IAAI6C,OAAJ,EAAhB;AACA,MAAKyuF,EAAL,GAAUA,MAAM,IAAIzuF,OAAJ,EAAhB;AAEA;;AAED2uF,kBAAkBjjG,SAAlB,GAA8BC,OAAO8lB,MAAP,CAAes4E,MAAMr+F,SAArB,CAA9B;AACAijG,kBAAkBjjG,SAAlB,CAA4B0O,WAA5B,GAA0Cu0F,iBAA1C;;AAEAA,kBAAkBjjG,SAAlB,CAA4BkjG,mBAA5B,GAAkD,IAAlD;;AAEAD,kBAAkBjjG,SAAlB,CAA4Bu+F,QAA5B,GAAuC,UAAW5xF,CAAX,EAAc6xF,cAAd,EAA+B;;AAErE,KAAIzzE,QAAQyzE,kBAAkB,IAAIlqF,OAAJ,EAA9B;;AAEA,KAAIiY,KAAK,KAAKA,EAAd;AAAA,KAAkB/a,KAAK,KAAKA,EAA5B;AAAA,KAAgCC,KAAK,KAAKA,EAA1C;AAAA,KAA8CsxF,KAAK,KAAKA,EAAxD;;AAEAh4E,OAAM/c,GAAN,CACC60F,YAAal2F,CAAb,EAAgB4f,GAAGzsB,CAAnB,EAAsB0R,GAAG1R,CAAzB,EAA4B2R,GAAG3R,CAA/B,EAAkCijG,GAAGjjG,CAArC,CADD,EAEC+iG,YAAal2F,CAAb,EAAgB4f,GAAG7f,CAAnB,EAAsB8E,GAAG9E,CAAzB,EAA4B+E,GAAG/E,CAA/B,EAAkCq2F,GAAGr2F,CAArC,CAFD,EAGCm2F,YAAal2F,CAAb,EAAgB4f,GAAGnY,CAAnB,EAAsB5C,GAAG4C,CAAzB,EAA4B3C,GAAG2C,CAA/B,EAAkC2uF,GAAG3uF,CAArC,CAHD;;AAMA,QAAO2W,KAAP;AAEA,CAdD;;AAgBAk4E,kBAAkBjjG,SAAlB,CAA4B2O,IAA5B,GAAmC,UAAW9N,MAAX,EAAoB;;AAEtDw9F,OAAMr+F,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,MAAK0rB,EAAL,CAAQ5d,IAAR,CAAc9N,OAAO0rB,EAArB;AACA,MAAK/a,EAAL,CAAQ7C,IAAR,CAAc9N,OAAO2Q,EAArB;AACA,MAAKC,EAAL,CAAQ9C,IAAR,CAAc9N,OAAO4Q,EAArB;AACA,MAAKsxF,EAAL,CAAQp0F,IAAR,CAAc9N,OAAOkiG,EAArB;;AAEA,QAAO,IAAP;AAEA,CAXD;;AAaAE,kBAAkBjjG,SAAlB,CAA4BkmB,MAA5B,GAAqC,YAAY;;AAEhD,KAAIiD,OAAOk1E,MAAMr+F,SAAN,CAAgBkmB,MAAhB,CAAuBllB,IAAvB,CAA6B,IAA7B,CAAX;;AAEAmoB,MAAKoD,EAAL,GAAU,KAAKA,EAAL,CAAQ1a,OAAR,EAAV;AACAsX,MAAK3X,EAAL,GAAU,KAAKA,EAAL,CAAQK,OAAR,EAAV;AACAsX,MAAK1X,EAAL,GAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV;AACAsX,MAAK45E,EAAL,GAAU,KAAKA,EAAL,CAAQlxF,OAAR,EAAV;;AAEA,QAAOsX,IAAP;AAEA,CAXD;;AAaA85E,kBAAkBjjG,SAAlB,CAA4BigG,QAA5B,GAAuC,UAAWC,IAAX,EAAkB;;AAExD7B,OAAMr+F,SAAN,CAAgBigG,QAAhB,CAAyBj/F,IAAzB,CAA+B,IAA/B,EAAqCk/F,IAArC;;AAEA,MAAK3zE,EAAL,CAAQ5a,SAAR,CAAmBuuF,KAAK3zE,EAAxB;AACA,MAAK/a,EAAL,CAAQG,SAAR,CAAmBuuF,KAAK1uF,EAAxB;AACA,MAAKC,EAAL,CAAQE,SAAR,CAAmBuuF,KAAKzuF,EAAxB;AACA,MAAKsxF,EAAL,CAAQpxF,SAAR,CAAmBuuF,KAAK6C,EAAxB;;AAEA,QAAO,IAAP;AAEA,CAXD;;AAaA,SAASI,SAAT,CAAoB3xF,EAApB,EAAwBC,EAAxB,EAA6B;;AAE5B4sF,OAAMr9F,IAAN,CAAY,IAAZ;;AAEA,MAAKG,IAAL,GAAY,WAAZ;;AAEA,MAAKqQ,EAAL,GAAUA,MAAM,IAAI1D,OAAJ,EAAhB;AACA,MAAK2D,EAAL,GAAUA,MAAM,IAAI3D,OAAJ,EAAhB;AAEA;;AAEDq1F,UAAUnjG,SAAV,GAAsBC,OAAO8lB,MAAP,CAAes4E,MAAMr+F,SAArB,CAAtB;AACAmjG,UAAUnjG,SAAV,CAAoB0O,WAApB,GAAkCy0F,SAAlC;;AAEAA,UAAUnjG,SAAV,CAAoBojG,WAApB,GAAkC,IAAlC;;AAEAD,UAAUnjG,SAAV,CAAoBu+F,QAApB,GAA+B,UAAW5xF,CAAX,EAAc6xF,cAAd,EAA+B;;AAE7D,KAAIzzE,QAAQyzE,kBAAkB,IAAI1wF,OAAJ,EAA9B;;AAEA,KAAKnB,MAAM,CAAX,EAAe;;AAEdoe,QAAMpc,IAAN,CAAY,KAAK8C,EAAjB;AAEA,EAJD,MAIO;;AAENsZ,QAAMpc,IAAN,CAAY,KAAK8C,EAAjB,EAAsBlC,GAAtB,CAA2B,KAAKiC,EAAhC;AACAuZ,QAAMpb,cAAN,CAAsBhD,CAAtB,EAA0BkC,GAA1B,CAA+B,KAAK2C,EAApC;AAEA;;AAED,QAAOuZ,KAAP;AAEA,CAjBD;;AAmBA;;AAEAo4E,UAAUnjG,SAAV,CAAoB+pF,UAApB,GAAiC,UAAWpxD,CAAX,EAAc6lE,cAAd,EAA+B;;AAE/D,QAAO,KAAKD,QAAL,CAAe5lE,CAAf,EAAkB6lE,cAAlB,CAAP;AAEA,CAJD;;AAMA2E,UAAUnjG,SAAV,CAAoBy/F,UAApB,GAAiC,YAAW,OAAU;;AAErD,KAAI4D,UAAU,KAAK5xF,EAAL,CAAQhD,KAAR,GAAgBc,GAAhB,CAAqB,KAAKiC,EAA1B,CAAd;;AAEA,QAAO6xF,QAAQxyF,SAAR,EAAP;AAEA,CAND;;AAQAsyF,UAAUnjG,SAAV,CAAoB2O,IAApB,GAA2B,UAAW9N,MAAX,EAAoB;;AAE9Cw9F,OAAMr+F,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,MAAK2Q,EAAL,CAAQ7C,IAAR,CAAc9N,OAAO2Q,EAArB;AACA,MAAKC,EAAL,CAAQ9C,IAAR,CAAc9N,OAAO4Q,EAArB;;AAEA,QAAO,IAAP;AAEA,CATD;;AAWA0xF,UAAUnjG,SAAV,CAAoBkmB,MAApB,GAA6B,YAAY;;AAExC,KAAIiD,OAAOk1E,MAAMr+F,SAAN,CAAgBkmB,MAAhB,CAAuBllB,IAAvB,CAA6B,IAA7B,CAAX;;AAEAmoB,MAAK3X,EAAL,GAAU,KAAKA,EAAL,CAAQK,OAAR,EAAV;AACAsX,MAAK1X,EAAL,GAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV;;AAEA,QAAOsX,IAAP;AAEA,CATD;;AAWAg6E,UAAUnjG,SAAV,CAAoBigG,QAApB,GAA+B,UAAWC,IAAX,EAAkB;;AAEhD7B,OAAMr+F,SAAN,CAAgBigG,QAAhB,CAAyBj/F,IAAzB,CAA+B,IAA/B,EAAqCk/F,IAArC;;AAEA,MAAK1uF,EAAL,CAAQG,SAAR,CAAmBuuF,KAAK1uF,EAAxB;AACA,MAAKC,EAAL,CAAQE,SAAR,CAAmBuuF,KAAKzuF,EAAxB;;AAEA,QAAO,IAAP;AAEA,CATD;;AAWA,SAAS6xF,UAAT,CAAqB9xF,EAArB,EAAyBC,EAAzB,EAA8B;;AAE7B4sF,OAAMr9F,IAAN,CAAY,IAAZ;;AAEA,MAAKG,IAAL,GAAY,YAAZ;;AAEA,MAAKqQ,EAAL,GAAUA,MAAM,IAAI8C,OAAJ,EAAhB;AACA,MAAK7C,EAAL,GAAUA,MAAM,IAAI6C,OAAJ,EAAhB;AAEA;;AAEDgvF,WAAWtjG,SAAX,GAAuBC,OAAO8lB,MAAP,CAAes4E,MAAMr+F,SAArB,CAAvB;AACAsjG,WAAWtjG,SAAX,CAAqB0O,WAArB,GAAmC40F,UAAnC;;AAEAA,WAAWtjG,SAAX,CAAqBujG,YAArB,GAAoC,IAApC;;AAEAD,WAAWtjG,SAAX,CAAqBu+F,QAArB,GAAgC,UAAW5xF,CAAX,EAAc6xF,cAAd,EAA+B;;AAE9D,KAAIzzE,QAAQyzE,kBAAkB,IAAIlqF,OAAJ,EAA9B;;AAEA,KAAK3H,MAAM,CAAX,EAAe;;AAEdoe,QAAMpc,IAAN,CAAY,KAAK8C,EAAjB;AAEA,EAJD,MAIO;;AAENsZ,QAAMpc,IAAN,CAAY,KAAK8C,EAAjB,EAAsBlC,GAAtB,CAA2B,KAAKiC,EAAhC;AACAuZ,QAAMpb,cAAN,CAAsBhD,CAAtB,EAA0BkC,GAA1B,CAA+B,KAAK2C,EAApC;AAEA;;AAED,QAAOuZ,KAAP;AAEA,CAjBD;;AAmBA;;AAEAu4E,WAAWtjG,SAAX,CAAqB+pF,UAArB,GAAkC,UAAWpxD,CAAX,EAAc6lE,cAAd,EAA+B;;AAEhE,QAAO,KAAKD,QAAL,CAAe5lE,CAAf,EAAkB6lE,cAAlB,CAAP;AAEA,CAJD;;AAMA8E,WAAWtjG,SAAX,CAAqB2O,IAArB,GAA4B,UAAW9N,MAAX,EAAoB;;AAE/Cw9F,OAAMr+F,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,MAAK2Q,EAAL,CAAQ7C,IAAR,CAAc9N,OAAO2Q,EAArB;AACA,MAAKC,EAAL,CAAQ9C,IAAR,CAAc9N,OAAO4Q,EAArB;;AAEA,QAAO,IAAP;AAEA,CATD;;AAWA6xF,WAAWtjG,SAAX,CAAqBkmB,MAArB,GAA8B,YAAY;;AAEzC,KAAIiD,OAAOk1E,MAAMr+F,SAAN,CAAgBkmB,MAAhB,CAAuBllB,IAAvB,CAA6B,IAA7B,CAAX;;AAEAmoB,MAAK3X,EAAL,GAAU,KAAKA,EAAL,CAAQK,OAAR,EAAV;AACAsX,MAAK1X,EAAL,GAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV;;AAEA,QAAOsX,IAAP;AAEA,CATD;;AAWAm6E,WAAWtjG,SAAX,CAAqBigG,QAArB,GAAgC,UAAWC,IAAX,EAAkB;;AAEjD7B,OAAMr+F,SAAN,CAAgBigG,QAAhB,CAAyBj/F,IAAzB,CAA+B,IAA/B,EAAqCk/F,IAArC;;AAEA,MAAK1uF,EAAL,CAAQG,SAAR,CAAmBuuF,KAAK1uF,EAAxB;AACA,MAAKC,EAAL,CAAQE,SAAR,CAAmBuuF,KAAKzuF,EAAxB;;AAEA,QAAO,IAAP;AAEA,CATD;;AAWA,SAAS+xF,oBAAT,CAA+Bj3E,EAA/B,EAAmC/a,EAAnC,EAAuCC,EAAvC,EAA4C;;AAE3C4sF,OAAMr9F,IAAN,CAAY,IAAZ;;AAEA,MAAKG,IAAL,GAAY,sBAAZ;;AAEA,MAAKorB,EAAL,GAAUA,MAAM,IAAIze,OAAJ,EAAhB;AACA,MAAK0D,EAAL,GAAUA,MAAM,IAAI1D,OAAJ,EAAhB;AACA,MAAK2D,EAAL,GAAUA,MAAM,IAAI3D,OAAJ,EAAhB;AAEA;;AAED01F,qBAAqBxjG,SAArB,GAAiCC,OAAO8lB,MAAP,CAAes4E,MAAMr+F,SAArB,CAAjC;AACAwjG,qBAAqBxjG,SAArB,CAA+B0O,WAA/B,GAA6C80F,oBAA7C;;AAEAA,qBAAqBxjG,SAArB,CAA+ByjG,sBAA/B,GAAwD,IAAxD;;AAEAD,qBAAqBxjG,SAArB,CAA+Bu+F,QAA/B,GAA0C,UAAW5xF,CAAX,EAAc6xF,cAAd,EAA+B;;AAExE,KAAIzzE,QAAQyzE,kBAAkB,IAAI1wF,OAAJ,EAA9B;;AAEA,KAAIye,KAAK,KAAKA,EAAd;AAAA,KAAkB/a,KAAK,KAAKA,EAA5B;AAAA,KAAgCC,KAAK,KAAKA,EAA1C;;AAEAsZ,OAAM/c,GAAN,CACCw0F,gBAAiB71F,CAAjB,EAAoB4f,GAAGzsB,CAAvB,EAA0B0R,GAAG1R,CAA7B,EAAgC2R,GAAG3R,CAAnC,CADD,EAEC0iG,gBAAiB71F,CAAjB,EAAoB4f,GAAG7f,CAAvB,EAA0B8E,GAAG9E,CAA7B,EAAgC+E,GAAG/E,CAAnC,CAFD;;AAKA,QAAOqe,KAAP;AAEA,CAbD;;AAeAy4E,qBAAqBxjG,SAArB,CAA+B2O,IAA/B,GAAsC,UAAW9N,MAAX,EAAoB;;AAEzDw9F,OAAMr+F,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,MAAK0rB,EAAL,CAAQ5d,IAAR,CAAc9N,OAAO0rB,EAArB;AACA,MAAK/a,EAAL,CAAQ7C,IAAR,CAAc9N,OAAO2Q,EAArB;AACA,MAAKC,EAAL,CAAQ9C,IAAR,CAAc9N,OAAO4Q,EAArB;;AAEA,QAAO,IAAP;AAEA,CAVD;;AAYA+xF,qBAAqBxjG,SAArB,CAA+BkmB,MAA/B,GAAwC,YAAY;;AAEnD,KAAIiD,OAAOk1E,MAAMr+F,SAAN,CAAgBkmB,MAAhB,CAAuBllB,IAAvB,CAA6B,IAA7B,CAAX;;AAEAmoB,MAAKoD,EAAL,GAAU,KAAKA,EAAL,CAAQ1a,OAAR,EAAV;AACAsX,MAAK3X,EAAL,GAAU,KAAKA,EAAL,CAAQK,OAAR,EAAV;AACAsX,MAAK1X,EAAL,GAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV;;AAEA,QAAOsX,IAAP;AAEA,CAVD;;AAYAq6E,qBAAqBxjG,SAArB,CAA+BigG,QAA/B,GAA0C,UAAWC,IAAX,EAAkB;;AAE3D7B,OAAMr+F,SAAN,CAAgBigG,QAAhB,CAAyBj/F,IAAzB,CAA+B,IAA/B,EAAqCk/F,IAArC;;AAEA,MAAK3zE,EAAL,CAAQ5a,SAAR,CAAmBuuF,KAAK3zE,EAAxB;AACA,MAAK/a,EAAL,CAAQG,SAAR,CAAmBuuF,KAAK1uF,EAAxB;AACA,MAAKC,EAAL,CAAQE,SAAR,CAAmBuuF,KAAKzuF,EAAxB;;AAEA,QAAO,IAAP;AAEA,CAVD;;AAYA,SAASiyF,qBAAT,CAAgCn3E,EAAhC,EAAoC/a,EAApC,EAAwCC,EAAxC,EAA6C;;AAE5C4sF,OAAMr9F,IAAN,CAAY,IAAZ;;AAEA,MAAKG,IAAL,GAAY,uBAAZ;;AAEA,MAAKorB,EAAL,GAAUA,MAAM,IAAIjY,OAAJ,EAAhB;AACA,MAAK9C,EAAL,GAAUA,MAAM,IAAI8C,OAAJ,EAAhB;AACA,MAAK7C,EAAL,GAAUA,MAAM,IAAI6C,OAAJ,EAAhB;AAEA;;AAEDovF,sBAAsB1jG,SAAtB,GAAkCC,OAAO8lB,MAAP,CAAes4E,MAAMr+F,SAArB,CAAlC;AACA0jG,sBAAsB1jG,SAAtB,CAAgC0O,WAAhC,GAA8Cg1F,qBAA9C;;AAEAA,sBAAsB1jG,SAAtB,CAAgC2jG,uBAAhC,GAA0D,IAA1D;;AAEAD,sBAAsB1jG,SAAtB,CAAgCu+F,QAAhC,GAA2C,UAAW5xF,CAAX,EAAc6xF,cAAd,EAA+B;;AAEzE,KAAIzzE,QAAQyzE,kBAAkB,IAAIlqF,OAAJ,EAA9B;;AAEA,KAAIiY,KAAK,KAAKA,EAAd;AAAA,KAAkB/a,KAAK,KAAKA,EAA5B;AAAA,KAAgCC,KAAK,KAAKA,EAA1C;;AAEAsZ,OAAM/c,GAAN,CACCw0F,gBAAiB71F,CAAjB,EAAoB4f,GAAGzsB,CAAvB,EAA0B0R,GAAG1R,CAA7B,EAAgC2R,GAAG3R,CAAnC,CADD,EAEC0iG,gBAAiB71F,CAAjB,EAAoB4f,GAAG7f,CAAvB,EAA0B8E,GAAG9E,CAA7B,EAAgC+E,GAAG/E,CAAnC,CAFD,EAGC81F,gBAAiB71F,CAAjB,EAAoB4f,GAAGnY,CAAvB,EAA0B5C,GAAG4C,CAA7B,EAAgC3C,GAAG2C,CAAnC,CAHD;;AAMA,QAAO2W,KAAP;AAEA,CAdD;;AAgBA24E,sBAAsB1jG,SAAtB,CAAgC2O,IAAhC,GAAuC,UAAW9N,MAAX,EAAoB;;AAE1Dw9F,OAAMr+F,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,MAAK0rB,EAAL,CAAQ5d,IAAR,CAAc9N,OAAO0rB,EAArB;AACA,MAAK/a,EAAL,CAAQ7C,IAAR,CAAc9N,OAAO2Q,EAArB;AACA,MAAKC,EAAL,CAAQ9C,IAAR,CAAc9N,OAAO4Q,EAArB;;AAEA,QAAO,IAAP;AAEA,CAVD;;AAYAiyF,sBAAsB1jG,SAAtB,CAAgCkmB,MAAhC,GAAyC,YAAY;;AAEpD,KAAIiD,OAAOk1E,MAAMr+F,SAAN,CAAgBkmB,MAAhB,CAAuBllB,IAAvB,CAA6B,IAA7B,CAAX;;AAEAmoB,MAAKoD,EAAL,GAAU,KAAKA,EAAL,CAAQ1a,OAAR,EAAV;AACAsX,MAAK3X,EAAL,GAAU,KAAKA,EAAL,CAAQK,OAAR,EAAV;AACAsX,MAAK1X,EAAL,GAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV;;AAEA,QAAOsX,IAAP;AAEA,CAVD;;AAYAu6E,sBAAsB1jG,SAAtB,CAAgCigG,QAAhC,GAA2C,UAAWC,IAAX,EAAkB;;AAE5D7B,OAAMr+F,SAAN,CAAgBigG,QAAhB,CAAyBj/F,IAAzB,CAA+B,IAA/B,EAAqCk/F,IAArC;;AAEA,MAAK3zE,EAAL,CAAQ5a,SAAR,CAAmBuuF,KAAK3zE,EAAxB;AACA,MAAK/a,EAAL,CAAQG,SAAR,CAAmBuuF,KAAK1uF,EAAxB;AACA,MAAKC,EAAL,CAAQE,SAAR,CAAmBuuF,KAAKzuF,EAAxB;;AAEA,QAAO,IAAP;AAEA,CAVD;;AAYA,SAASmyF,WAAT,CAAsB35E,MAAtB,CAA6B,sBAA7B,EAAsD;;AAErDo0E,OAAMr9F,IAAN,CAAY,IAAZ;;AAEA,MAAKG,IAAL,GAAY,aAAZ;;AAEA,MAAK8oB,MAAL,GAAcA,UAAU,EAAxB;AAEA;;AAED25E,YAAY5jG,SAAZ,GAAwBC,OAAO8lB,MAAP,CAAes4E,MAAMr+F,SAArB,CAAxB;AACA4jG,YAAY5jG,SAAZ,CAAsB0O,WAAtB,GAAoCk1F,WAApC;;AAEAA,YAAY5jG,SAAZ,CAAsB6jG,aAAtB,GAAsC,IAAtC;;AAEAD,YAAY5jG,SAAZ,CAAsBu+F,QAAtB,GAAiC,UAAW5xF,CAAX,EAAc6xF,cAAd,EAA+B;;AAE/D,KAAIzzE,QAAQyzE,kBAAkB,IAAI1wF,OAAJ,EAA9B;;AAEA,KAAImc,SAAS,KAAKA,MAAlB;AACA,KAAIrN,IAAI,CAAEqN,OAAOrpB,MAAP,GAAgB,CAAlB,IAAwB+L,CAAhC;;AAEA,KAAIu1F,WAAW3iG,KAAKK,KAAL,CAAYgd,CAAZ,CAAf;AACA,KAAIulF,SAASvlF,IAAIslF,QAAjB;;AAEA,KAAIj1E,KAAKhD,OAAQi4E,aAAa,CAAb,GAAiBA,QAAjB,GAA4BA,WAAW,CAA/C,CAAT;AACA,KAAIh1E,KAAKjD,OAAQi4E,QAAR,CAAT;AACA,KAAI/0E,KAAKlD,OAAQi4E,WAAWj4E,OAAOrpB,MAAP,GAAgB,CAA3B,GAA+BqpB,OAAOrpB,MAAP,GAAgB,CAA/C,GAAmDshG,WAAW,CAAtE,CAAT;AACA,KAAI1yE,KAAKvF,OAAQi4E,WAAWj4E,OAAOrpB,MAAP,GAAgB,CAA3B,GAA+BqpB,OAAOrpB,MAAP,GAAgB,CAA/C,GAAmDshG,WAAW,CAAtE,CAAT;;AAEAn3E,OAAM/c,GAAN,CACCo0F,WAAYD,MAAZ,EAAoBl1E,GAAGntB,CAAvB,EAA0BotB,GAAGptB,CAA7B,EAAgCqtB,GAAGrtB,CAAnC,EAAsC0vB,GAAG1vB,CAAzC,CADD,EAECsiG,WAAYD,MAAZ,EAAoBl1E,GAAGvgB,CAAvB,EAA0BwgB,GAAGxgB,CAA7B,EAAgCygB,GAAGzgB,CAAnC,EAAsC8iB,GAAG9iB,CAAzC,CAFD;;AAKA,QAAOqe,KAAP;AAEA,CAtBD;;AAwBA64E,YAAY5jG,SAAZ,CAAsB2O,IAAtB,GAA6B,UAAW9N,MAAX,EAAoB;;AAEhDw9F,OAAMr+F,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,MAAKopB,MAAL,GAAc,EAAd;;AAEA,MAAM,IAAIhoB,IAAI,CAAR,EAAWC,IAAIrB,OAAOopB,MAAP,CAAcrpB,MAAnC,EAA2CqB,IAAIC,CAA/C,EAAkDD,GAAlD,EAAyD;;AAExD,MAAI8oB,QAAQlqB,OAAOopB,MAAP,CAAehoB,CAAf,CAAZ;;AAEA,OAAKgoB,MAAL,CAAYzoB,IAAZ,CAAkBupB,MAAMtc,KAAN,EAAlB;AAEA;;AAED,QAAO,IAAP;AAEA,CAhBD;;AAkBAm1F,YAAY5jG,SAAZ,CAAsBkmB,MAAtB,GAA+B,YAAY;;AAE1C,KAAIiD,OAAOk1E,MAAMr+F,SAAN,CAAgBkmB,MAAhB,CAAuBllB,IAAvB,CAA6B,IAA7B,CAAX;;AAEAmoB,MAAKc,MAAL,GAAc,EAAd;;AAEA,MAAM,IAAIhoB,IAAI,CAAR,EAAWC,IAAI,KAAK+nB,MAAL,CAAYrpB,MAAjC,EAAyCqB,IAAIC,CAA7C,EAAgDD,GAAhD,EAAuD;;AAEtD,MAAI8oB,QAAQ,KAAKd,MAAL,CAAahoB,CAAb,CAAZ;AACAknB,OAAKc,MAAL,CAAYzoB,IAAZ,CAAkBupB,MAAMlZ,OAAN,EAAlB;AAEA;;AAED,QAAOsX,IAAP;AAEA,CAfD;;AAiBAy6E,YAAY5jG,SAAZ,CAAsBigG,QAAtB,GAAiC,UAAWC,IAAX,EAAkB;;AAElD7B,OAAMr+F,SAAN,CAAgBigG,QAAhB,CAAyBj/F,IAAzB,CAA+B,IAA/B,EAAqCk/F,IAArC;;AAEA,MAAKj2E,MAAL,GAAc,EAAd;;AAEA,MAAM,IAAIhoB,IAAI,CAAR,EAAWC,IAAIg+F,KAAKj2E,MAAL,CAAYrpB,MAAjC,EAAyCqB,IAAIC,CAA7C,EAAgDD,GAAhD,EAAuD;;AAEtD,MAAI8oB,QAAQm1E,KAAKj2E,MAAL,CAAahoB,CAAb,CAAZ;AACA,OAAKgoB,MAAL,CAAYzoB,IAAZ,CAAkB,IAAIsM,OAAJ,GAAc6D,SAAd,CAAyBoZ,KAAzB,CAAlB;AAEA;;AAED,QAAO,IAAP;AAEA,CAfD;;AAmBA,IAAI+4E,SAAS7jG,OAAOu5F,MAAP,CAAc;AAC1BwH,WAAUA,QADgB;AAE1Be,mBAAkBA,gBAFQ;AAG1Be,mBAAkBA,gBAHQ;AAI1BG,oBAAmBA,iBAJO;AAK1B9C,eAAcA,YALY;AAM1BgD,YAAWA,SANe;AAO1BG,aAAYA,UAPc;AAQ1BE,uBAAsBA,oBARI;AAS1BE,wBAAuBA,qBATG;AAU1BE,cAAaA;AAVa,CAAd,CAAb;;AAaA;;;;;AAKA;;;;;AAKA,SAASG,SAAT,GAAqB;;AAEpB1F,OAAMr9F,IAAN,CAAY,IAAZ;;AAEA,MAAKG,IAAL,GAAY,WAAZ;;AAEA,MAAK6iG,MAAL,GAAc,EAAd;AACA,MAAKC,SAAL,GAAiB,KAAjB,CAPoB,CAOI;AAExB;;AAEDF,UAAU/jG,SAAV,GAAsBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAes4E,MAAMr+F,SAArB,CAAf,EAAiD;;AAEtE0O,cAAaq1F,SAFyD;;AAItEl1F,MAAK,UAAWq1F,KAAX,EAAmB;;AAEvB,OAAKF,MAAL,CAAYxiG,IAAZ,CAAkB0iG,KAAlB;AAEA,EARqE;;AAUtEC,YAAW,YAAY;;AAEtB;AACA,MAAIC,aAAa,KAAKJ,MAAL,CAAa,CAAb,EAAiBzF,QAAjB,CAA2B,CAA3B,CAAjB;AACA,MAAI8F,WAAW,KAAKL,MAAL,CAAa,KAAKA,MAAL,CAAYpjG,MAAZ,GAAqB,CAAlC,EAAsC29F,QAAtC,CAAgD,CAAhD,CAAf;;AAEA,MAAK,CAAE6F,WAAW1yF,MAAX,CAAmB2yF,QAAnB,CAAP,EAAuC;;AAEtC,QAAKL,MAAL,CAAYxiG,IAAZ,CAAkB,IAAI2hG,SAAJ,CAAekB,QAAf,EAAyBD,UAAzB,CAAlB;AAEA;AAED,EAtBqE;;AAwBtE;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA7F,WAAU,UAAW5xF,CAAX,EAAe;;AAExB,MAAIkI,IAAIlI,IAAI,KAAKiyF,SAAL,EAAZ;AACA,MAAI0F,eAAe,KAAKC,eAAL,EAAnB;AACA,MAAItiG,IAAI,CAAR;;AAEA;;AAEA,SAAQA,IAAIqiG,aAAa1jG,MAAzB,EAAkC;;AAEjC,OAAK0jG,aAAcriG,CAAd,KAAqB4S,CAA1B,EAA8B;;AAE7B,QAAI86B,OAAO20D,aAAcriG,CAAd,IAAoB4S,CAA/B;AACA,QAAIqvF,QAAQ,KAAKF,MAAL,CAAa/hG,CAAb,CAAZ;;AAEA,QAAIs9F,gBAAgB2E,MAAMtF,SAAN,EAApB;AACA,QAAIjmE,IAAI4mE,kBAAkB,CAAlB,GAAsB,CAAtB,GAA0B,IAAI5vD,OAAO4vD,aAA7C;;AAEA,WAAO2E,MAAMna,UAAN,CAAkBpxD,CAAlB,CAAP;AAEA;;AAED12B;AAEA;;AAED,SAAO,IAAP;;AAEA;AAEA,EA/DqE;;AAiEtE;AACA;AACA;;AAEA28F,YAAW,YAAY;;AAEtB,MAAI4F,OAAO,KAAKD,eAAL,EAAX;AACA,SAAOC,KAAMA,KAAK5jG,MAAL,GAAc,CAApB,CAAP;AAEA,EA1EqE;;AA4EtE;AACAq+F,mBAAkB,YAAY;;AAE7B,OAAKpqD,WAAL,GAAmB,IAAnB;AACA,OAAK4vD,YAAL,GAAoB,IAApB;AACA,OAAKF,eAAL;AAEA,EAnFqE;;AAqFtE;AACA;;AAEAA,kBAAiB,YAAY;;AAE5B;;AAEA,MAAK,KAAKE,YAAL,IAAqB,KAAKA,YAAL,CAAkB7jG,MAAlB,KAA6B,KAAKojG,MAAL,CAAYpjG,MAAnE,EAA4E;;AAE3E,UAAO,KAAK6jG,YAAZ;AAEA;;AAED;AACA;;AAEA,MAAI5F,UAAU,EAAd;AAAA,MAAkB6F,OAAO,CAAzB;;AAEA,OAAM,IAAIziG,IAAI,CAAR,EAAWC,IAAI,KAAK8hG,MAAL,CAAYpjG,MAAjC,EAAyCqB,IAAIC,CAA7C,EAAgDD,GAAhD,EAAuD;;AAEtDyiG,WAAQ,KAAKV,MAAL,CAAa/hG,CAAb,EAAiB28F,SAAjB,EAAR;AACAC,WAAQr9F,IAAR,CAAckjG,IAAd;AAEA;;AAED,OAAKD,YAAL,GAAoB5F,OAApB;;AAEA,SAAOA,OAAP;AAEA,EAlHqE;;AAoHtEzN,kBAAiB,UAAWuN,SAAX,EAAuB;;AAEvC,MAAKA,cAAcr/F,SAAnB,EAA+Bq/F,YAAY,EAAZ;;AAE/B,MAAI10E,SAAS,EAAb;;AAEA,OAAM,IAAIhoB,IAAI,CAAd,EAAiBA,KAAK08F,SAAtB,EAAiC18F,GAAjC,EAAwC;;AAEvCgoB,UAAOzoB,IAAP,CAAa,KAAK+8F,QAAL,CAAet8F,IAAI08F,SAAnB,CAAb;AAEA;;AAED,MAAK,KAAKsF,SAAV,EAAsB;;AAErBh6E,UAAOzoB,IAAP,CAAayoB,OAAQ,CAAR,CAAb;AAEA;;AAED,SAAOA,MAAP;AAEA,EAxIqE;;AA0ItEy0E,YAAW,UAAWC,SAAX,EAAuB;;AAEjCA,cAAYA,aAAa,EAAzB;;AAEA,MAAI10E,SAAS,EAAb;AAAA,MAAiB4hE,IAAjB;;AAEA,OAAM,IAAI5pF,IAAI,CAAR,EAAW+hG,SAAS,KAAKA,MAA/B,EAAuC/hG,IAAI+hG,OAAOpjG,MAAlD,EAA0DqB,GAA1D,EAAiE;;AAEhE,OAAIiiG,QAAQF,OAAQ/hG,CAAR,CAAZ;AACA,OAAI0iG,aAAeT,SAASA,MAAMtD,cAAjB,GAAoCjC,YAAY,CAAhD,GACZuF,SAASA,MAAMd,WAAjB,GAAiC,CAAjC,GACGc,SAASA,MAAML,aAAjB,GAAmClF,YAAYuF,MAAMj6E,MAAN,CAAarpB,MAA5D,GACC+9F,SAHL;;AAKA,OAAInP,MAAM0U,MAAMxF,SAAN,CAAiBiG,UAAjB,CAAV;;AAEA,QAAM,IAAI33E,IAAI,CAAd,EAAiBA,IAAIwiE,IAAI5uF,MAAzB,EAAiCosB,GAAjC,EAAwC;;AAEvC,QAAIjC,QAAQykE,IAAKxiE,CAAL,CAAZ;;AAEA,QAAK6+D,QAAQA,KAAKn6E,MAAL,CAAaqZ,KAAb,CAAb,EAAoC,SAJG,CAIO;;AAE9Cd,WAAOzoB,IAAP,CAAaupB,KAAb;AACA8gE,WAAO9gE,KAAP;AAEA;AAED;;AAED,MAAK,KAAKk5E,SAAL,IAAkBh6E,OAAOrpB,MAAP,GAAgB,CAAlC,IAAuC,CAAEqpB,OAAQA,OAAOrpB,MAAP,GAAgB,CAAxB,EAA4B8Q,MAA5B,CAAoCuY,OAAQ,CAAR,CAApC,CAA9C,EAAkG;;AAEjGA,UAAOzoB,IAAP,CAAayoB,OAAQ,CAAR,CAAb;AAEA;;AAED,SAAOA,MAAP;AAEA,EA/KqE;;AAiLtEtb,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBw9F,QAAMr+F,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,OAAKmjG,MAAL,GAAc,EAAd;;AAEA,OAAM,IAAI/hG,IAAI,CAAR,EAAWC,IAAIrB,OAAOmjG,MAAP,CAAcpjG,MAAnC,EAA2CqB,IAAIC,CAA/C,EAAkDD,GAAlD,EAAyD;;AAExD,OAAIiiG,QAAQrjG,OAAOmjG,MAAP,CAAe/hG,CAAf,CAAZ;;AAEA,QAAK+hG,MAAL,CAAYxiG,IAAZ,CAAkB0iG,MAAMz1F,KAAN,EAAlB;AAEA;;AAED,OAAKw1F,SAAL,GAAiBpjG,OAAOojG,SAAxB;;AAEA,SAAO,IAAP;AAEA,EAnMqE;;AAqMtE/9E,SAAQ,YAAY;;AAEnB,MAAIiD,OAAOk1E,MAAMr+F,SAAN,CAAgBkmB,MAAhB,CAAuBllB,IAAvB,CAA6B,IAA7B,CAAX;;AAEAmoB,OAAK86E,SAAL,GAAiB,KAAKA,SAAtB;AACA96E,OAAK66E,MAAL,GAAc,EAAd;;AAEA,OAAM,IAAI/hG,IAAI,CAAR,EAAWC,IAAI,KAAK8hG,MAAL,CAAYpjG,MAAjC,EAAyCqB,IAAIC,CAA7C,EAAgDD,GAAhD,EAAuD;;AAEtD,OAAIiiG,QAAQ,KAAKF,MAAL,CAAa/hG,CAAb,CAAZ;AACAknB,QAAK66E,MAAL,CAAYxiG,IAAZ,CAAkB0iG,MAAMh+E,MAAN,EAAlB;AAEA;;AAED,SAAOiD,IAAP;AAEA,EArNqE;;AAuNtE82E,WAAU,UAAWC,IAAX,EAAkB;;AAE3B7B,QAAMr+F,SAAN,CAAgBigG,QAAhB,CAAyBj/F,IAAzB,CAA+B,IAA/B,EAAqCk/F,IAArC;;AAEA,OAAK+D,SAAL,GAAiB/D,KAAK+D,SAAtB;AACA,OAAKD,MAAL,GAAc,EAAd;;AAEA,OAAM,IAAI/hG,IAAI,CAAR,EAAWC,IAAIg+F,KAAK8D,MAAL,CAAYpjG,MAAjC,EAAyCqB,IAAIC,CAA7C,EAAgDD,GAAhD,EAAuD;;AAEtD,OAAIiiG,QAAQhE,KAAK8D,MAAL,CAAa/hG,CAAb,CAAZ;AACA,QAAK+hG,MAAL,CAAYxiG,IAAZ,CAAkB,IAAIsiG,OAAQI,MAAM/iG,IAAd,CAAJ,GAA2B8+F,QAA3B,CAAqCiE,KAArC,CAAlB;AAEA;;AAED,SAAO,IAAP;AAEA;;AAvOqE,CAAjD,CAAtB;;AA2OA;;;;;AAKA,SAASU,IAAT,CAAe36E,MAAf,EAAwB;;AAEvB85E,WAAU/iG,IAAV,CAAgB,IAAhB;;AAEA,MAAKG,IAAL,GAAY,MAAZ;;AAEA,MAAK0jG,YAAL,GAAoB,IAAI/2F,OAAJ,EAApB;;AAEA,KAAKmc,MAAL,EAAc;;AAEb,OAAKD,aAAL,CAAoBC,MAApB;AAEA;AAED;;AAED26E,KAAK5kG,SAAL,GAAiBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAeg+E,UAAU/jG,SAAzB,CAAf,EAAqD;;AAErE0O,cAAak2F,IAFwD;;AAIrE56E,gBAAe,UAAWC,MAAX,EAAoB;;AAElC,OAAK66E,MAAL,CAAa76E,OAAQ,CAAR,EAAYnqB,CAAzB,EAA4BmqB,OAAQ,CAAR,EAAYvd,CAAxC;;AAEA,OAAM,IAAIzK,IAAI,CAAR,EAAWC,IAAI+nB,OAAOrpB,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,QAAK8iG,MAAL,CAAa96E,OAAQhoB,CAAR,EAAYnC,CAAzB,EAA4BmqB,OAAQhoB,CAAR,EAAYyK,CAAxC;AAEA;AAED,EAdoE;;AAgBrEo4F,SAAQ,UAAWhlG,CAAX,EAAc4M,CAAd,EAAkB;;AAEzB,OAAKm4F,YAAL,CAAkB72F,GAAlB,CAAuBlO,CAAvB,EAA0B4M,CAA1B,EAFyB,CAEM;AAE/B,EApBoE;;AAsBrEq4F,SAAQ,UAAWjlG,CAAX,EAAc4M,CAAd,EAAkB;;AAEzB,MAAIw3F,QAAQ,IAAIf,SAAJ,CAAe,KAAK0B,YAAL,CAAkBp2F,KAAlB,EAAf,EAA0C,IAAIX,OAAJ,CAAahO,CAAb,EAAgB4M,CAAhB,CAA1C,CAAZ;AACA,OAAKs3F,MAAL,CAAYxiG,IAAZ,CAAkB0iG,KAAlB;;AAEA,OAAKW,YAAL,CAAkB72F,GAAlB,CAAuBlO,CAAvB,EAA0B4M,CAA1B;AAEA,EA7BoE;;AA+BrEs4F,mBAAkB,UAAWC,IAAX,EAAiBC,IAAjB,EAAuB9E,EAAvB,EAA2BC,EAA3B,EAAgC;;AAEjD,MAAI6D,QAAQ,IAAIV,oBAAJ,CACX,KAAKqB,YAAL,CAAkBp2F,KAAlB,EADW,EAEX,IAAIX,OAAJ,CAAam3F,IAAb,EAAmBC,IAAnB,CAFW,EAGX,IAAIp3F,OAAJ,CAAasyF,EAAb,EAAiBC,EAAjB,CAHW,CAAZ;;AAMA,OAAK2D,MAAL,CAAYxiG,IAAZ,CAAkB0iG,KAAlB;;AAEA,OAAKW,YAAL,CAAkB72F,GAAlB,CAAuBoyF,EAAvB,EAA2BC,EAA3B;AAEA,EA3CoE;;AA6CrE8E,gBAAe,UAAWC,KAAX,EAAkBC,KAAlB,EAAyBC,KAAzB,EAAgCC,KAAhC,EAAuCnF,EAAvC,EAA2CC,EAA3C,EAAgD;;AAE9D,MAAI6D,QAAQ,IAAIpB,gBAAJ,CACX,KAAK+B,YAAL,CAAkBp2F,KAAlB,EADW,EAEX,IAAIX,OAAJ,CAAas3F,KAAb,EAAoBC,KAApB,CAFW,EAGX,IAAIv3F,OAAJ,CAAaw3F,KAAb,EAAoBC,KAApB,CAHW,EAIX,IAAIz3F,OAAJ,CAAasyF,EAAb,EAAiBC,EAAjB,CAJW,CAAZ;;AAOA,OAAK2D,MAAL,CAAYxiG,IAAZ,CAAkB0iG,KAAlB;;AAEA,OAAKW,YAAL,CAAkB72F,GAAlB,CAAuBoyF,EAAvB,EAA2BC,EAA3B;AAEA,EA1DoE;;AA4DrEmF,aAAY,UAAWhW,GAAX,CAAe,mBAAf,EAAqC;;AAEhD,MAAIiW,OAAO,CAAE,KAAKZ,YAAL,CAAkBp2F,KAAlB,EAAF,EAA8BijF,MAA9B,CAAsClC,GAAtC,CAAX;;AAEA,MAAI0U,QAAQ,IAAIN,WAAJ,CAAiB6B,IAAjB,CAAZ;AACA,OAAKzB,MAAL,CAAYxiG,IAAZ,CAAkB0iG,KAAlB;;AAEA,OAAKW,YAAL,CAAkBl2F,IAAlB,CAAwB6gF,IAAKA,IAAI5uF,MAAJ,GAAa,CAAlB,CAAxB;AAEA,EArEoE;;AAuErEmqF,MAAK,UAAWqV,EAAX,EAAeC,EAAf,EAAmBY,OAAnB,EAA4BT,WAA5B,EAAyCC,SAAzC,EAAoDC,UAApD,EAAiE;;AAErE,MAAIjjF,KAAK,KAAKonF,YAAL,CAAkB/kG,CAA3B;AACA,MAAI4d,KAAK,KAAKmnF,YAAL,CAAkBn4F,CAA3B;;AAEA,OAAKg5F,MAAL,CAAatF,KAAK3iF,EAAlB,EAAsB4iF,KAAK3iF,EAA3B,EAA+BujF,OAA/B,EACCT,WADD,EACcC,SADd,EACyBC,UADzB;AAGA,EA/EoE;;AAiFrEgF,SAAQ,UAAWtF,EAAX,EAAeC,EAAf,EAAmBY,OAAnB,EAA4BT,WAA5B,EAAyCC,SAAzC,EAAoDC,UAApD,EAAiE;;AAExE,OAAKiF,UAAL,CAAiBvF,EAAjB,EAAqBC,EAArB,EAAyBY,OAAzB,EAAkCA,OAAlC,EAA2CT,WAA3C,EAAwDC,SAAxD,EAAmEC,UAAnE;AAEA,EArFoE;;AAuFrEkF,UAAS,UAAWxF,EAAX,EAAeC,EAAf,EAAmBC,OAAnB,EAA4BC,OAA5B,EAAqCC,WAArC,EAAkDC,SAAlD,EAA6DC,UAA7D,EAAyEC,SAAzE,EAAqF;;AAE7F,MAAIljF,KAAK,KAAKonF,YAAL,CAAkB/kG,CAA3B;AACA,MAAI4d,KAAK,KAAKmnF,YAAL,CAAkBn4F,CAA3B;;AAEA,OAAKi5F,UAAL,CAAiBvF,KAAK3iF,EAAtB,EAA0B4iF,KAAK3iF,EAA/B,EAAmC4iF,OAAnC,EAA4CC,OAA5C,EAAqDC,WAArD,EAAkEC,SAAlE,EAA6EC,UAA7E,EAAyFC,SAAzF;AAEA,EA9FoE;;AAgGrEgF,aAAY,UAAWvF,EAAX,EAAeC,EAAf,EAAmBC,OAAnB,EAA4BC,OAA5B,EAAqCC,WAArC,EAAkDC,SAAlD,EAA6DC,UAA7D,EAAyEC,SAAzE,EAAqF;;AAEhG,MAAIuD,QAAQ,IAAI/D,YAAJ,CAAkBC,EAAlB,EAAsBC,EAAtB,EAA0BC,OAA1B,EAAmCC,OAAnC,EAA4CC,WAA5C,EAAyDC,SAAzD,EAAoEC,UAApE,EAAgFC,SAAhF,CAAZ;;AAEA,MAAK,KAAKqD,MAAL,CAAYpjG,MAAZ,GAAqB,CAA1B,EAA8B;;AAE7B;AACA,OAAIilG,aAAa3B,MAAM3F,QAAN,CAAgB,CAAhB,CAAjB;;AAEA,OAAK,CAAEsH,WAAWn0F,MAAX,CAAmB,KAAKmzF,YAAxB,CAAP,EAAgD;;AAE/C,SAAKE,MAAL,CAAac,WAAW/lG,CAAxB,EAA2B+lG,WAAWn5F,CAAtC;AAEA;AAED;;AAED,OAAKs3F,MAAL,CAAYxiG,IAAZ,CAAkB0iG,KAAlB;;AAEA,MAAI4B,YAAY5B,MAAM3F,QAAN,CAAgB,CAAhB,CAAhB;AACA,OAAKsG,YAAL,CAAkBl2F,IAAlB,CAAwBm3F,SAAxB;AAEA,EAtHoE;;AAwHrEn3F,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBkjG,YAAU/jG,SAAV,CAAoB2O,IAApB,CAAyB3N,IAAzB,CAA+B,IAA/B,EAAqCH,MAArC;;AAEA,OAAKgkG,YAAL,CAAkBl2F,IAAlB,CAAwB9N,OAAOgkG,YAA/B;;AAEA,SAAO,IAAP;AAEA,EAhIoE;;AAkIrE3+E,SAAQ,YAAY;;AAEnB,MAAIiD,OAAO46E,UAAU/jG,SAAV,CAAoBkmB,MAApB,CAA2BllB,IAA3B,CAAiC,IAAjC,CAAX;;AAEAmoB,OAAK07E,YAAL,GAAoB,KAAKA,YAAL,CAAkBhzF,OAAlB,EAApB;;AAEA,SAAOsX,IAAP;AAEA,EA1IoE;;AA4IrE82E,WAAU,UAAWC,IAAX,EAAkB;;AAE3B6D,YAAU/jG,SAAV,CAAoBigG,QAApB,CAA6Bj/F,IAA7B,CAAmC,IAAnC,EAAyCk/F,IAAzC;;AAEA,OAAK2E,YAAL,CAAkBlzF,SAAlB,CAA6BuuF,KAAK2E,YAAlC;;AAEA,SAAO,IAAP;AAEA;;AApJoE,CAArD,CAAjB;;AAwJA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA,SAASkB,KAAT,CAAgB97E,MAAhB,EAAyB;;AAExB26E,MAAK5jG,IAAL,CAAW,IAAX,EAAiBipB,MAAjB;;AAEA,MAAKre,IAAL,GAAYX,MAAMI,YAAN,EAAZ;;AAEA,MAAKlK,IAAL,GAAY,OAAZ;;AAEA,MAAKuuF,KAAL,GAAa,EAAb;AAEA;;AAEDqW,MAAM/lG,SAAN,GAAkBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAe6+E,KAAK5kG,SAApB,CAAf,EAAgD;;AAEjE0O,cAAaq3F,KAFoD;;AAIjEC,iBAAgB,UAAWrH,SAAX,EAAuB;;AAEtC,MAAIsH,WAAW,EAAf;;AAEA,OAAM,IAAIhkG,IAAI,CAAR,EAAWC,IAAI,KAAKwtF,KAAL,CAAW9uF,MAAhC,EAAwCqB,IAAIC,CAA5C,EAA+CD,GAA/C,EAAsD;;AAErDgkG,YAAUhkG,CAAV,IAAgB,KAAKytF,KAAL,CAAYztF,CAAZ,EAAgBy8F,SAAhB,CAA2BC,SAA3B,CAAhB;AAEA;;AAED,SAAOsH,QAAP;AAEA,EAhBgE;;AAkBjE;;AAEAzU,gBAAe,UAAWmN,SAAX,EAAuB;;AAErC,SAAO;;AAEN/1D,UAAO,KAAK81D,SAAL,CAAgBC,SAAhB,CAFD;AAGNjP,UAAO,KAAKsW,cAAL,CAAqBrH,SAArB;;AAHD,GAAP;AAOA,EA7BgE;;AA+BjEhwF,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB+jG,OAAK5kG,SAAL,CAAe2O,IAAf,CAAoB3N,IAApB,CAA0B,IAA1B,EAAgCH,MAAhC;;AAEA,OAAK6uF,KAAL,GAAa,EAAb;;AAEA,OAAM,IAAIztF,IAAI,CAAR,EAAWC,IAAIrB,OAAO6uF,KAAP,CAAa9uF,MAAlC,EAA0CqB,IAAIC,CAA9C,EAAiDD,GAAjD,EAAwD;;AAEvD,OAAI4rF,OAAOhtF,OAAO6uF,KAAP,CAAcztF,CAAd,CAAX;;AAEA,QAAKytF,KAAL,CAAWluF,IAAX,CAAiBqsF,KAAKp/E,KAAL,EAAjB;AAEA;;AAED,SAAO,IAAP;AAEA,EA/CgE;;AAiDjEyX,SAAQ,YAAY;;AAEnB,MAAIiD,OAAOy7E,KAAK5kG,SAAL,CAAekmB,MAAf,CAAsBllB,IAAtB,CAA4B,IAA5B,CAAX;;AAEAmoB,OAAKvd,IAAL,GAAY,KAAKA,IAAjB;AACAud,OAAKumE,KAAL,GAAa,EAAb;;AAEA,OAAM,IAAIztF,IAAI,CAAR,EAAWC,IAAI,KAAKwtF,KAAL,CAAW9uF,MAAhC,EAAwCqB,IAAIC,CAA5C,EAA+CD,GAA/C,EAAsD;;AAErD,OAAI4rF,OAAO,KAAK6B,KAAL,CAAYztF,CAAZ,CAAX;AACAknB,QAAKumE,KAAL,CAAWluF,IAAX,CAAiBqsF,KAAK3nE,MAAL,EAAjB;AAEA;;AAED,SAAOiD,IAAP;AAEA,EAjEgE;;AAmEjE82E,WAAU,UAAWC,IAAX,EAAkB;;AAE3B0E,OAAK5kG,SAAL,CAAeigG,QAAf,CAAwBj/F,IAAxB,CAA8B,IAA9B,EAAoCk/F,IAApC;;AAEA,OAAKt0F,IAAL,GAAYs0F,KAAKt0F,IAAjB;AACA,OAAK8jF,KAAL,GAAa,EAAb;;AAEA,OAAM,IAAIztF,IAAI,CAAR,EAAWC,IAAIg+F,KAAKxQ,KAAL,CAAW9uF,MAAhC,EAAwCqB,IAAIC,CAA5C,EAA+CD,GAA/C,EAAsD;;AAErD,OAAI4rF,OAAOqS,KAAKxQ,KAAL,CAAYztF,CAAZ,CAAX;AACA,QAAKytF,KAAL,CAAWluF,IAAX,CAAiB,IAAIojG,IAAJ,GAAW3E,QAAX,CAAqBpS,IAArB,CAAjB;AAEA;;AAED,SAAO,IAAP;AAEA;;AAnFgE,CAAhD,CAAlB;;AAuFA;;;;;AAKA,SAASqY,KAAT,CAAgBnsE,KAAhB,EAAuBmhC,SAAvB,EAAmC;;AAElCj2B,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,OAAZ;;AAEA,MAAK44B,KAAL,GAAa,IAAIZ,KAAJ,CAAWY,KAAX,CAAb;AACA,MAAKmhC,SAAL,GAAiBA,cAAc57D,SAAd,GAA0B47D,SAA1B,GAAsC,CAAvD;;AAEA,MAAKr1B,aAAL,GAAqBvmC,SAArB;AAEA;;AAED4mG,MAAMlmG,SAAN,GAAkBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAErE0O,cAAaw3F,KAFwD;;AAIrEnpB,UAAS,IAJ4D;;AAMrEpuE,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBokC,WAASjlC,SAAT,CAAmB2O,IAAnB,CAAwB3N,IAAxB,CAA8B,IAA9B,EAAoCH,MAApC;;AAEA,OAAKk5B,KAAL,CAAWprB,IAAX,CAAiB9N,OAAOk5B,KAAxB;AACA,OAAKmhC,SAAL,GAAiBr6D,OAAOq6D,SAAxB;;AAEA,SAAO,IAAP;AAEA,EAfoE;;AAiBrEh1C,SAAQ,UAAWC,IAAX,EAAkB;;AAEzB,MAAIgD,OAAO8b,SAASjlC,SAAT,CAAmBkmB,MAAnB,CAA0BllB,IAA1B,CAAgC,IAAhC,EAAsCmlB,IAAtC,CAAX;;AAEAgD,OAAKsB,MAAL,CAAYsP,KAAZ,GAAoB,KAAKA,KAAL,CAAWU,MAAX,EAApB;AACAtR,OAAKsB,MAAL,CAAYywC,SAAZ,GAAwB,KAAKA,SAA7B;;AAEA,MAAK,KAAK37B,WAAL,KAAqBjgC,SAA1B,EAAsC6pB,KAAKsB,MAAL,CAAY8U,WAAZ,GAA0B,KAAKA,WAAL,CAAiB9E,MAAjB,EAA1B;;AAEtC,MAAK,KAAKrJ,QAAL,KAAkB9xB,SAAvB,EAAmC6pB,KAAKsB,MAAL,CAAY2G,QAAZ,GAAuB,KAAKA,QAA5B;AACnC,MAAK,KAAKtgB,KAAL,KAAexR,SAApB,EAAgC6pB,KAAKsB,MAAL,CAAY3Z,KAAZ,GAAoB,KAAKA,KAAzB;AAChC,MAAK,KAAK+tB,KAAL,KAAev/B,SAApB,EAAgC6pB,KAAKsB,MAAL,CAAYoU,KAAZ,GAAoB,KAAKA,KAAzB;AAChC,MAAK,KAAK28B,QAAL,KAAkBl8D,SAAvB,EAAmC6pB,KAAKsB,MAAL,CAAY+wC,QAAZ,GAAuB,KAAKA,QAA5B;;AAEnC,MAAK,KAAKp9B,MAAL,KAAgB9+B,SAArB,EAAiC6pB,KAAKsB,MAAL,CAAY2T,MAAZ,GAAqB,KAAKA,MAAL,CAAYlY,MAAZ,EAArB;;AAEjC,SAAOiD,IAAP;AAEA;;AAnCoE,CAApD,CAAlB;;AAuCA;;;;AAIA,SAASg9E,eAAT,CAA0B7mE,QAA1B,EAAoCC,WAApC,EAAiD27B,SAAjD,EAA6D;;AAE5DgrC,OAAMllG,IAAN,CAAY,IAAZ,EAAkBs+B,QAAlB,EAA4B47B,SAA5B;;AAEA,MAAK/5D,IAAL,GAAY,iBAAZ;;AAEA,MAAKykC,UAAL,GAAkBtmC,SAAlB;;AAEA,MAAKic,QAAL,CAAc5M,IAAd,CAAoBs2B,SAASG,SAA7B;AACA,MAAKnf,YAAL;;AAEA,MAAKsZ,WAAL,GAAmB,IAAIpG,KAAJ,CAAWoG,WAAX,CAAnB;AAEA;;AAED4mE,gBAAgBnmG,SAAhB,GAA4BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAemgF,MAAMlmG,SAArB,CAAf,EAAiD;;AAE5E0O,cAAay3F,eAF+D;;AAI5ExqC,oBAAmB,IAJyD;;AAM5EhtD,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBqlG,QAAMlmG,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,OAAK0+B,WAAL,CAAiB5wB,IAAjB,CAAuB9N,OAAO0+B,WAA9B;;AAEA,SAAO,IAAP;AAEA;;AAd2E,CAAjD,CAA5B;;AAkBA;;;;AAIA,SAAS6mE,WAAT,CAAsBpkF,MAAtB,EAA+B;;AAE9B,MAAKA,MAAL,GAAcA,MAAd;;AAEA,MAAKq5C,IAAL,GAAY,CAAZ;AACA,MAAK93C,MAAL,GAAc,CAAd;;AAEA,MAAK+3C,OAAL,GAAe,IAAIxtD,OAAJ,CAAa,GAAb,EAAkB,GAAlB,CAAf;;AAEA,MAAK0tB,GAAL,GAAW,IAAX;AACA,MAAK7f,MAAL,GAAc,IAAIpJ,OAAJ,EAAd;AAEA;;AAEDtS,OAAOK,MAAP,CAAe8lG,YAAYpmG,SAA3B,EAAsC;;AAErC2O,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB,OAAKmhB,MAAL,GAAcnhB,OAAOmhB,MAAP,CAAcvT,KAAd,EAAd;;AAEA,OAAK4sD,IAAL,GAAYx6D,OAAOw6D,IAAnB;AACA,OAAK93C,MAAL,GAAc1iB,OAAO0iB,MAArB;;AAEA,OAAK+3C,OAAL,CAAa3sD,IAAb,CAAmB9N,OAAOy6D,OAA1B;;AAEA,SAAO,IAAP;AAEA,EAboC;;AAerC7sD,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EAnBoC;;AAqBrCuX,SAAQ,YAAY;;AAEnB,MAAIuE,SAAS,EAAb;;AAEA,MAAK,KAAK4wC,IAAL,KAAc,CAAnB,EAAuB5wC,OAAO4wC,IAAP,GAAc,KAAKA,IAAnB;AACvB,MAAK,KAAK93C,MAAL,KAAgB,CAArB,EAAyBkH,OAAOlH,MAAP,GAAgB,KAAKA,MAArB;AACzB,MAAK,KAAK+3C,OAAL,CAAax7D,CAAb,KAAmB,GAAnB,IAA0B,KAAKw7D,OAAL,CAAa5uD,CAAb,KAAmB,GAAlD,EAAwD+d,OAAO6wC,OAAP,GAAiB,KAAKA,OAAL,CAAazpD,OAAb,EAAjB;;AAExD4Y,SAAOzI,MAAP,GAAgB,KAAKA,MAAL,CAAYkE,MAAZ,CAAoB,KAApB,EAA4BuE,MAA5C;AACA,SAAOA,OAAOzI,MAAP,CAAcrG,MAArB;;AAEA,SAAO8O,MAAP;AAEA;;AAlCoC,CAAtC;;AAsCA;;;;AAIA,SAAS47E,eAAT,GAA2B;;AAE1BD,aAAYplG,IAAZ,CAAkB,IAAlB,EAAwB,IAAIqwE,iBAAJ,CAAuB,EAAvB,EAA2B,CAA3B,EAA8B,GAA9B,EAAmC,GAAnC,CAAxB;AAEA;;AAEDg1B,gBAAgBrmG,SAAhB,GAA4BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAeqgF,YAAYpmG,SAA3B,CAAf,EAAuD;;AAElF0O,cAAa23F,eAFqE;;AAIlF1nC,oBAAmB,IAJ+D;;AAMlFpgD,SAAQ,UAAW87C,KAAX,EAAmB;;AAE1B,MAAIr4C,SAAS,KAAKA,MAAlB;;AAEA,MAAIsvD,MAAMrmE,MAAMG,OAAN,GAAgB,CAAhB,GAAoBivD,MAAMvpD,KAApC;AACA,MAAIygE,SAAS,KAAKjW,OAAL,CAAa30C,KAAb,GAAqB,KAAK20C,OAAL,CAAa10C,MAA/C;AACA,MAAInK,MAAM49C,MAAMjpC,QAAN,IAAkBpP,OAAOvF,GAAnC;;AAEA,MAAK60D,QAAQtvD,OAAOsvD,GAAf,IAAsBC,WAAWvvD,OAAOuvD,MAAxC,IAAkD90D,QAAQuF,OAAOvF,GAAtE,EAA4E;;AAE3EuF,UAAOsvD,GAAP,GAAaA,GAAb;AACAtvD,UAAOuvD,MAAP,GAAgBA,MAAhB;AACAvvD,UAAOvF,GAAP,GAAaA,GAAb;AACAuF,UAAO0nB,sBAAP;AAEA;AAED;;AAvBiF,CAAvD,CAA5B;;AA2BA;;;;AAIA,SAAS48D,SAAT,CAAoBvsE,KAApB,EAA2BmhC,SAA3B,EAAsC9pC,QAAtC,EAAgDtgB,KAAhD,EAAuD0qD,QAAvD,EAAiE38B,KAAjE,EAAyE;;AAExEqnE,OAAMllG,IAAN,CAAY,IAAZ,EAAkB+4B,KAAlB,EAAyBmhC,SAAzB;;AAEA,MAAK/5D,IAAL,GAAY,WAAZ;;AAEA,MAAKoa,QAAL,CAAc5M,IAAd,CAAoBs2B,SAASG,SAA7B;AACA,MAAKnf,YAAL;;AAEA,MAAK1lB,MAAL,GAAc,IAAI0kC,QAAJ,EAAd;;AAEAhlC,QAAOC,cAAP,CAAuB,IAAvB,EAA6B,OAA7B,EAAsC;AACrCC,OAAK,YAAY;;AAEhB;AACA;AACA,UAAO,KAAK+6D,SAAL,GAAiB37D,KAAK4L,EAA7B;AAEA,GAPoC;AAQrC6C,OAAK,UAAWu4F,KAAX,EAAmB;;AAEvB;AACA;AACA,QAAKrrC,SAAL,GAAiBqrC,QAAQhnG,KAAK4L,EAA9B;AAEA;AAdoC,EAAtC;;AAiBA,MAAKimB,QAAL,GAAkBA,aAAa9xB,SAAf,GAA6B8xB,QAA7B,GAAwC,CAAxD;AACA,MAAKtgB,KAAL,GAAeA,UAAUxR,SAAZ,GAA0BwR,KAA1B,GAAkCvR,KAAK4L,EAAL,GAAU,CAAzD;AACA,MAAKqwD,QAAL,GAAkBA,aAAal8D,SAAf,GAA6Bk8D,QAA7B,GAAwC,CAAxD;AACA,MAAK38B,KAAL,GAAeA,UAAUv/B,SAAZ,GAA0Bu/B,KAA1B,GAAkC,CAA/C,CA/BwE,CA+BtB;;AAElD,MAAKT,MAAL,GAAc,IAAIioE,eAAJ,EAAd;AAEA;;AAEDC,UAAUtmG,SAAV,GAAsBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAemgF,MAAMlmG,SAArB,CAAf,EAAiD;;AAEtE0O,cAAa43F,SAFyD;;AAItE/qC,cAAa,IAJyD;;AAMtE5sD,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBqlG,QAAMlmG,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,OAAKuwB,QAAL,GAAgBvwB,OAAOuwB,QAAvB;AACA,OAAKtgB,KAAL,GAAajQ,OAAOiQ,KAApB;AACA,OAAK0qD,QAAL,GAAgB36D,OAAO26D,QAAvB;AACA,OAAK38B,KAAL,GAAah+B,OAAOg+B,KAApB;;AAEA,OAAKt+B,MAAL,GAAcM,OAAON,MAAP,CAAckO,KAAd,EAAd;;AAEA,OAAK2vB,MAAL,GAAcv9B,OAAOu9B,MAAP,CAAc3vB,KAAd,EAAd;;AAEA,SAAO,IAAP;AAEA;;AArBqE,CAAjD,CAAtB;;AAyBA;;;;AAKA,SAAS+3F,UAAT,CAAqBzsE,KAArB,EAA4BmhC,SAA5B,EAAuC9pC,QAAvC,EAAiDyN,KAAjD,EAAyD;;AAExDqnE,OAAMllG,IAAN,CAAY,IAAZ,EAAkB+4B,KAAlB,EAAyBmhC,SAAzB;;AAEA,MAAK/5D,IAAL,GAAY,YAAZ;;AAEAlB,QAAOC,cAAP,CAAuB,IAAvB,EAA6B,OAA7B,EAAsC;AACrCC,OAAK,YAAY;;AAEhB;AACA;AACA,UAAO,KAAK+6D,SAAL,GAAiB,CAAjB,GAAqB37D,KAAK4L,EAAjC;AAEA,GAPoC;AAQrC6C,OAAK,UAAWu4F,KAAX,EAAmB;;AAEvB;AACA;AACA,QAAKrrC,SAAL,GAAiBqrC,SAAU,IAAIhnG,KAAK4L,EAAnB,CAAjB;AAEA;AAdoC,EAAtC;;AAiBA,MAAKimB,QAAL,GAAkBA,aAAa9xB,SAAf,GAA6B8xB,QAA7B,GAAwC,CAAxD;AACA,MAAKyN,KAAL,GAAeA,UAAUv/B,SAAZ,GAA0Bu/B,KAA1B,GAAkC,CAA/C,CAxBwD,CAwBN;;AAElD,MAAKT,MAAL,GAAc,IAAIgoE,WAAJ,CAAiB,IAAI/0B,iBAAJ,CAAuB,EAAvB,EAA2B,CAA3B,EAA8B,GAA9B,EAAmC,GAAnC,CAAjB,CAAd;AAEA;;AAEDm1B,WAAWxmG,SAAX,GAAuBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAemgF,MAAMlmG,SAArB,CAAf,EAAiD;;AAEvE0O,cAAa83F,UAF0D;;AAIvE9qC,eAAc,IAJyD;;AAMvE/sD,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBqlG,QAAMlmG,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,OAAKuwB,QAAL,GAAgBvwB,OAAOuwB,QAAvB;AACA,OAAKyN,KAAL,GAAah+B,OAAOg+B,KAApB;;AAEA,OAAKT,MAAL,GAAcv9B,OAAOu9B,MAAP,CAAc3vB,KAAd,EAAd;;AAEA,SAAO,IAAP;AAEA;;AAjBsE,CAAjD,CAAvB;;AAqBA;;;;AAIA,SAASg4F,sBAAT,GAAmC;;AAElCL,aAAYplG,IAAZ,CAAkB,IAAlB,EAAwB,IAAIuoC,kBAAJ,CAAwB,CAAE,CAA1B,EAA6B,CAA7B,EAAgC,CAAhC,EAAmC,CAAE,CAArC,EAAwC,GAAxC,EAA6C,GAA7C,CAAxB;AAEA;;AAEDk9D,uBAAuBzmG,SAAvB,GAAmCC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAeqgF,YAAYpmG,SAA3B,CAAf,EAAuD;;AAEzF0O,cAAa+3F;;AAF4E,CAAvD,CAAnC;;AAMA;;;;;AAKA,SAASC,gBAAT,CAA2B3sE,KAA3B,EAAkCmhC,SAAlC,EAA8C;;AAE7CgrC,OAAMllG,IAAN,CAAY,IAAZ,EAAkB+4B,KAAlB,EAAyBmhC,SAAzB;;AAEA,MAAK/5D,IAAL,GAAY,kBAAZ;;AAEA,MAAKoa,QAAL,CAAc5M,IAAd,CAAoBs2B,SAASG,SAA7B;AACA,MAAKnf,YAAL;;AAEA,MAAK1lB,MAAL,GAAc,IAAI0kC,QAAJ,EAAd;;AAEA,MAAK7G,MAAL,GAAc,IAAIqoE,sBAAJ,EAAd;AAEA;;AAEDC,iBAAiB1mG,SAAjB,GAA6BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAemgF,MAAMlmG,SAArB,CAAf,EAAiD;;AAE7E0O,cAAag4F,gBAFgE;;AAI7EtrC,qBAAoB,IAJyD;;AAM7EzsD,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBqlG,QAAMlmG,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,OAAKN,MAAL,GAAcM,OAAON,MAAP,CAAckO,KAAd,EAAd;;AAEA,OAAK2vB,MAAL,GAAcv9B,OAAOu9B,MAAP,CAAc3vB,KAAd,EAAd;;AAEA,SAAO,IAAP;AAEA;;AAhB4E,CAAjD,CAA7B;;AAoBA;;;;AAIA,SAASk4F,YAAT,CAAuB5sE,KAAvB,EAA8BmhC,SAA9B,EAA0C;;AAEzCgrC,OAAMllG,IAAN,CAAY,IAAZ,EAAkB+4B,KAAlB,EAAyBmhC,SAAzB;;AAEA,MAAK/5D,IAAL,GAAY,cAAZ;;AAEA,MAAKykC,UAAL,GAAkBtmC,SAAlB;AAEA;;AAEDqnG,aAAa3mG,SAAb,GAAyBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAemgF,MAAMlmG,SAArB,CAAf,EAAiD;;AAEzE0O,cAAai4F,YAF4D;;AAIzExrC,iBAAgB;;AAJyD,CAAjD,CAAzB;;AAQA;;;;AAIA,SAASyrC,aAAT,CAAwB7sE,KAAxB,EAA+BmhC,SAA/B,EAA0Cv0C,KAA1C,EAAiDC,MAAjD,EAA0D;;AAEzDs/E,OAAMllG,IAAN,CAAY,IAAZ,EAAkB+4B,KAAlB,EAAyBmhC,SAAzB;;AAEA,MAAK/5D,IAAL,GAAY,eAAZ;;AAEA,MAAKwlB,KAAL,GAAeA,UAAUrnB,SAAZ,GAA0BqnB,KAA1B,GAAkC,EAA/C;AACA,MAAKC,MAAL,GAAgBA,WAAWtnB,SAAb,GAA2BsnB,MAA3B,GAAoC,EAAlD;AAEA;;AAEDggF,cAAc5mG,SAAd,GAA0BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAemgF,MAAMlmG,SAArB,CAAf,EAAiD;;AAE1E0O,cAAak4F,aAF6D;;AAI1EnrC,kBAAiB,IAJyD;;AAM1E9sD,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBqlG,QAAMlmG,SAAN,CAAgB2O,IAAhB,CAAqB3N,IAArB,CAA2B,IAA3B,EAAiCH,MAAjC;;AAEA,OAAK8lB,KAAL,GAAa9lB,OAAO8lB,KAApB;AACA,OAAKC,MAAL,GAAc/lB,OAAO+lB,MAArB;;AAEA,SAAO,IAAP;AAEA,EAfyE;;AAiB1EV,SAAQ,UAAWC,IAAX,EAAkB;;AAEzB,MAAIgD,OAAO+8E,MAAMlmG,SAAN,CAAgBkmB,MAAhB,CAAuBllB,IAAvB,CAA6B,IAA7B,EAAmCmlB,IAAnC,CAAX;;AAEAgD,OAAKsB,MAAL,CAAY9D,KAAZ,GAAoB,KAAKA,KAAzB;AACAwC,OAAKsB,MAAL,CAAY7D,MAAZ,GAAqB,KAAKA,MAA1B;;AAEA,SAAOuC,IAAP;AAEA;;AA1ByE,CAAjD,CAA1B;;AA8BA;;;;;;;;;;AAUA,SAAS09E,mBAAT,CAA8B1hF,IAA9B,EAAoC2hF,KAApC,EAA2C79D,MAA3C,EAAmD89D,aAAnD,EAAmE;;AAElEC,eAAchmG,IAAd,CAAoB,IAApB,EAA0BmkB,IAA1B,EAAgC2hF,KAAhC,EAAuC79D,MAAvC,EAA+C89D,aAA/C;AAEA;;AAEDF,oBAAoB7mG,SAApB,GAAgCC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAeihF,cAAchnG,SAA7B,CAAf,EAAyD;;AAExF0O,cAAam4F,mBAF2E;;AAIxFI,gBAAe,QAJyE;AAKxFC,kBAAiBluE,KALuE;;AAOxFmuE,uBAAsBr9F,mBAPkE;;AASxFs9F,iCAAgC9nG,SATwD;;AAWxF+nG,iCAAgC/nG;;AAXwD,CAAzD,CAAhC;;AAeA;;;;;;;;;;AAUA,SAASgoG,oBAAT,CAA+BniF,IAA/B,EAAqC2hF,KAArC,EAA4C79D,MAA5C,EAAqD;;AAEpD+9D,eAAchmG,IAAd,CAAoB,IAApB,EAA0BmkB,IAA1B,EAAgC2hF,KAAhC,EAAuC79D,MAAvC;AAEA;;AAEDq+D,qBAAqBtnG,SAArB,GAAiCC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAeihF,cAAchnG,SAA7B,CAAf,EAAyD;;AAEzF0O,cAAa44F,oBAF4E;;AAIzFL,gBAAe,MAJ0E;AAKzFC,kBAAiBluE,KALwE;;AAOzFmuE,uBAAsBr9F,mBAPmE;;AASzFs9F,iCAAgC9nG,SATyD;AAUzF+nG,iCAAgC/nG;;AAEhC;AACA;AACA;;AAdyF,CAAzD,CAAjC;;AAkBA;;;;;;;;;;;;;;;;;;;;;;AAsBA,SAASioG,WAAT,CAAsBC,kBAAtB,EAA0CC,YAA1C,EAAwDC,UAAxD,EAAoEC,YAApE,EAAmF;;AAElF,MAAKH,kBAAL,GAA0BA,kBAA1B;AACA,MAAKI,YAAL,GAAoB,CAApB;;AAEA,MAAKD,YAAL,GAAoBA,iBAAiBroG,SAAjB,GACnBqoG,YADmB,GACJ,IAAIF,aAAa/4F,WAAjB,CAA8Bg5F,UAA9B,CADhB;AAEA,MAAKD,YAAL,GAAoBA,YAApB;AACA,MAAKI,SAAL,GAAiBH,UAAjB;AAEA;;AAEDznG,OAAOK,MAAP,CAAeinG,YAAYvnG,SAA3B,EAAsC;;AAErC8nG,WAAU,UAAWn7F,CAAX,EAAe;;AAExB,MAAIo7F,KAAK,KAAKP,kBAAd;AAAA,MACC3nD,KAAK,KAAK+nD,YADX;AAAA,MAGC1qD,KAAK6qD,GAAIloD,EAAJ,CAHN;AAAA,MAIC5C,KAAK8qD,GAAIloD,KAAK,CAAT,CAJN;;AAMAmoD,qBAAmB;;AAElBC,SAAM;;AAEL,QAAI5rF,KAAJ;;AAEA6rF,iBAAa;;AAEZ;AACA;AACA;AACA;AACAC,mBAAc,IAAK,EAAIx7F,IAAIuwC,EAAR,CAAL,EAAoB;;AAEjC,WAAM,IAAIkrD,WAAWvoD,KAAK,CAA1B,IAAiC;;AAEhC,WAAK3C,OAAO59C,SAAZ,EAAwB;;AAEvB,YAAKqN,IAAIswC,EAAT,EAAc,MAAMkrD,YAAN;;AAEd;;AAEAtoD,aAAKkoD,GAAGnnG,MAAR;AACA,aAAKgnG,YAAL,GAAoB/nD,EAApB;AACA,eAAO,KAAKwoD,SAAL,CAAgBxoD,KAAK,CAArB,EAAwBlzC,CAAxB,EAA2BswC,EAA3B,CAAP;AAEA;;AAED,WAAK4C,OAAOuoD,QAAZ,EAAuB,MAdS,CAcF;;AAE9BnrD,YAAKC,EAAL;AACAA,YAAK6qD,GAAI,EAAGloD,EAAP,CAAL;;AAEA,WAAKlzC,IAAIuwC,EAAT,EAAc;;AAEb;AACA,cAAM+qD,IAAN;AAEA;AAED;;AAED;AACA5rF,cAAQ0rF,GAAGnnG,MAAX;AACA,YAAMsnG,WAAN;AAEA;;AAED;AACA;AACA,SAAK,EAAIv7F,KAAKswC,EAAT,CAAL,EAAqB;;AAEpB;;AAEA,UAAIqrD,WAAWP,GAAI,CAAJ,CAAf;;AAEA,UAAKp7F,IAAI27F,QAAT,EAAoB;;AAEnBzoD,YAAK,CAAL,CAFmB,CAEX;AACR5C,YAAKqrD,QAAL;AAEA;;AAED;;AAEA,WAAM,IAAIF,WAAWvoD,KAAK,CAA1B,IAAiC;;AAEhC,WAAK5C,OAAO39C,SAAZ,EAAwB;;AAEvB;;AAEA,aAAKsoG,YAAL,GAAoB,CAApB;AACA,eAAO,KAAKW,YAAL,CAAmB,CAAnB,EAAsB57F,CAAtB,EAAyBuwC,EAAzB,CAAP;AAEA;;AAED,WAAK2C,OAAOuoD,QAAZ,EAAuB,MAXS,CAWF;;AAE9BlrD,YAAKD,EAAL;AACAA,YAAK8qD,GAAI,EAAGloD,EAAH,GAAQ,CAAZ,CAAL;;AAEA,WAAKlzC,KAAKswC,EAAV,EAAe;;AAEd;AACA,cAAMgrD,IAAN;AAEA;AAED;;AAED;AACA5rF,cAAQwjC,EAAR;AACAA,WAAK,CAAL;AACA,YAAMqoD,WAAN;AAEA;;AAED;;AAEA,WAAMF,iBAAN;AAEA,KAnGI,CAmGH;;AAEF;;AAEA,WAAQnoD,KAAKxjC,KAAb,EAAqB;;AAEpB,SAAImsF,MAAQ3oD,KAAKxjC,KAAP,KAAmB,CAA7B;;AAEA,SAAK1P,IAAIo7F,GAAIS,GAAJ,CAAT,EAAqB;;AAEpBnsF,cAAQmsF,GAAR;AAEA,MAJD,MAIO;;AAEN3oD,WAAK2oD,MAAM,CAAX;AAEA;AAED;;AAEDtrD,SAAK6qD,GAAIloD,EAAJ,CAAL;AACA5C,SAAK8qD,GAAIloD,KAAK,CAAT,CAAL;;AAEA;;AAEA,QAAK5C,OAAO39C,SAAZ,EAAwB;;AAEvB,UAAKsoG,YAAL,GAAoB,CAApB;AACA,YAAO,KAAKW,YAAL,CAAmB,CAAnB,EAAsB57F,CAAtB,EAAyBuwC,EAAzB,CAAP;AAEA;;AAED,QAAKA,OAAO59C,SAAZ,EAAwB;;AAEvBugD,UAAKkoD,GAAGnnG,MAAR;AACA,UAAKgnG,YAAL,GAAoB/nD,EAApB;AACA,YAAO,KAAKwoD,SAAL,CAAgBxoD,KAAK,CAArB,EAAwB5C,EAAxB,EAA4BtwC,CAA5B,CAAP;AAEA;AAED,IA7IiB,CA6IhB;;AAEF,QAAKi7F,YAAL,GAAoB/nD,EAApB;;AAEA,QAAK4oD,gBAAL,CAAuB5oD,EAAvB,EAA2B5C,EAA3B,EAA+BC,EAA/B;AAEA,GA3JuB,CA2JtB;;AAEF,SAAO,KAAKwrD,YAAL,CAAmB7oD,EAAnB,EAAuB5C,EAAvB,EAA2BtwC,CAA3B,EAA8BuwC,EAA9B,CAAP;AAEA,EAjKoC;;AAmKrCyrD,WAAU,IAnK2B,EAmKrB;AAChB;;AAEA;;AAEAC,mBAAkB,EAxKmB;;AA0KrCC,eAAc,YAAY;;AAEzB,SAAO,KAAKF,QAAL,IAAiB,KAAKC,gBAA7B;AAEA,EA9KoC;;AAgLrCE,mBAAkB,UAAWpoG,KAAX,EAAmB;;AAEpC;;AAEA,MAAIw+D,SAAS,KAAKyoC,YAAlB;AAAA,MACC1+D,SAAS,KAAKw+D,YADf;AAAA,MAEClrB,SAAS,KAAKsrB,SAFf;AAAA,MAGCj2F,SAASlR,QAAQ67E,MAHlB;;AAKA,OAAM,IAAIt6E,IAAI,CAAd,EAAiBA,MAAMs6E,MAAvB,EAA+B,EAAGt6E,CAAlC,EAAsC;;AAErCi9D,UAAQj9D,CAAR,IAAcgnC,OAAQr3B,SAAS3P,CAAjB,CAAd;AAEA;;AAED,SAAOi9D,MAAP;AAEA,EAjMoC;;AAmMrC;;AAEAwpC,eAAc,YAAW,mBAAsB;;AAE9C,QAAM,IAAIn6F,KAAJ,CAAW,yBAAX,CAAN;AACA;AAEA,EA1MoC;;AA4MrCk6F,mBAAkB,YAAW,gBAAmB;;AAE/C;;AAEA;;AAhNoC,CAAtC;;AAoNA;AACAxoG,OAAOK,MAAP,CAAeinG,YAAYvnG,SAA3B,EAAsC;;AAErC;AACAuoG,eAAchB,YAAYvnG,SAAZ,CAAsB8oG,gBAHC;;AAKrC;AACAT,YAAWd,YAAYvnG,SAAZ,CAAsB8oG;;AANI,CAAtC;;AAUA;;;;;;AAMA,SAASC,2BAAT,CAAsCvB,kBAAtC,EAA0DC,YAA1D,EAAwEC,UAAxE,EAAoFC,YAApF,EAAmG;;AAElGJ,aAAYvmG,IAAZ,CAAkB,IAAlB,EAAwBwmG,kBAAxB,EAA4CC,YAA5C,EAA0DC,UAA1D,EAAsEC,YAAtE;AAEA;;AAEDoB,4BAA4B/oG,SAA5B,GAAwCC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAewhF,YAAYvnG,SAA3B,CAAf,EAAuD;;AAE9F0O,cAAaq6F,2BAFiF;;AAI9FL,eAAc,UAAW7oD,EAAX,EAAe5C,EAAf,EAAmBtwC,CAAnB,EAAsBuwC,EAAtB,EAA2B;;AAExC,MAAIgiB,SAAS,KAAKyoC,YAAlB;AAAA,MACC1+D,SAAS,KAAKw+D,YADf;AAAA,MAEClrB,SAAS,KAAKsrB,SAFf;AAAA,MAICj2F,SAASiuC,KAAK08B,MAJf;AAAA,MAMCjrE,QAAQ,CAAE3E,IAAIswC,EAAN,KAAeC,KAAKD,EAApB,CANT;;AAQA,OAAM,IAAIhuB,MAAMrd,SAAS2qE,MAAzB,EAAiC3qE,WAAWqd,GAA5C,EAAiDrd,UAAU,CAA3D,EAA+D;;AAE9DiL,cAAWK,SAAX,CAAsBgiD,MAAtB,EAA8B,CAA9B,EAAiCj2B,MAAjC,EAAyCr3B,SAAS2qE,MAAlD,EAA0DtzC,MAA1D,EAAkEr3B,MAAlE,EAA0EN,KAA1E;AAEA;;AAED,SAAO4tD,MAAP;AAEA;;AAtB6F,CAAvD,CAAxC;;AA0BA;;;;;;;;;AASA,SAAS8pC,uBAAT,CAAkC7jF,IAAlC,EAAwC2hF,KAAxC,EAA+C79D,MAA/C,EAAuD89D,aAAvD,EAAuE;;AAEtEC,eAAchmG,IAAd,CAAoB,IAApB,EAA0BmkB,IAA1B,EAAgC2hF,KAAhC,EAAuC79D,MAAvC,EAA+C89D,aAA/C;AAEA;;AAEDiC,wBAAwBhpG,SAAxB,GAAoCC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAeihF,cAAchnG,SAA7B,CAAf,EAAyD;;AAE5F0O,cAAas6F,uBAF+E;;AAI5F/B,gBAAe,YAJ6E;;AAM5F;;AAEAE,uBAAsBp9F,iBARsE;;AAU5Fq9F,iCAAgC,UAAWloC,MAAX,EAAoB;;AAEnD,SAAO,IAAI6pC,2BAAJ,CAAiC,KAAKjC,KAAtC,EAA6C,KAAK79D,MAAlD,EAA0D,KAAKggE,YAAL,EAA1D,EAA+E/pC,MAA/E,CAAP;AAEA,EAd2F;;AAgB5FmoC,iCAAgC/nG,SAhB4D,CAgBlD;;AAhBkD,CAAzD,CAApC;;AAoBA;;;;;;;;;;AAUA,SAAS4pG,kBAAT,CAA6B/jF,IAA7B,EAAmC2hF,KAAnC,EAA0C79D,MAA1C,EAAkD89D,aAAlD,EAAkE;;AAEjEC,eAAchmG,IAAd,CAAoB,IAApB,EAA0BmkB,IAA1B,EAAgC2hF,KAAhC,EAAuC79D,MAAvC,EAA+C89D,aAA/C;AAEA;;AAEDmC,mBAAmBlpG,SAAnB,GAA+BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAeihF,cAAchnG,SAA7B,CAAf,EAAyD;;AAEvF0O,cAAaw6F,kBAF0E;;AAIvFjC,gBAAe;;AAEf;;AAEA;;AAEA;AACA;;AAXuF,CAAzD,CAA/B;;AAeA;;;;;;;;;AASA,SAASkC,mBAAT,CAA8BhkF,IAA9B,EAAoC2hF,KAApC,EAA2C79D,MAA3C,EAAmD89D,aAAnD,EAAmE;;AAElEC,eAAchmG,IAAd,CAAoB,IAApB,EAA0BmkB,IAA1B,EAAgC2hF,KAAhC,EAAuC79D,MAAvC,EAA+C89D,aAA/C;AAEA;;AAEDoC,oBAAoBnpG,SAApB,GAAgCC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAeihF,cAAchnG,SAA7B,CAAf,EAAyD;;AAExF0O,cAAay6F,mBAF2E;;AAIxFlC,gBAAe;;AAEf;;AAEA;;AARwF,CAAzD,CAAhC;;AAYA;;;;;;;;;;AAUA,SAASmC,gBAAT,CAA2B5B,kBAA3B,EAA+CC,YAA/C,EAA6DC,UAA7D,EAAyEC,YAAzE,EAAwF;;AAEvFJ,aAAYvmG,IAAZ,CAAkB,IAAlB,EAAwBwmG,kBAAxB,EAA4CC,YAA5C,EAA0DC,UAA1D,EAAsEC,YAAtE;;AAEA,MAAK0B,WAAL,GAAmB,CAAE,CAArB;AACA,MAAKC,WAAL,GAAmB,CAAE,CAArB;AACA,MAAKC,WAAL,GAAmB,CAAE,CAArB;AACA,MAAKC,WAAL,GAAmB,CAAE,CAArB;AAEA;;AAEDJ,iBAAiBppG,SAAjB,GAA6BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAewhF,YAAYvnG,SAA3B,CAAf,EAAuD;;AAEnF0O,cAAa06F,gBAFsE;;AAInFR,mBAAkB;;AAEjBa,eAAax/F,mBAFI;AAGjBy/F,aAAWz/F;;AAHM,EAJiE;;AAWnFw+F,mBAAkB,UAAW5oD,EAAX,EAAe5C,EAAf,EAAmBC,EAAnB,EAAwB;;AAEzC,MAAI6qD,KAAK,KAAKP,kBAAd;AAAA,MACCmC,QAAQ9pD,KAAK,CADd;AAAA,MAEC+pD,QAAQ/pD,KAAK,CAFd;AAAA,MAICgqD,QAAQ9B,GAAI4B,KAAJ,CAJT;AAAA,MAKCG,QAAQ/B,GAAI6B,KAAJ,CALT;;AAOA,MAAKC,UAAUvqG,SAAf,EAA2B;;AAE1B,WAAS,KAAKupG,YAAL,GAAoBY,WAA7B;;AAEC,SAAKv/F,eAAL;;AAEC;AACAy/F,aAAQ9pD,EAAR;AACAgqD,aAAQ,IAAI5sD,EAAJ,GAASC,EAAjB;;AAEA;;AAED,SAAK/yC,gBAAL;;AAEC;AACAw/F,aAAQ5B,GAAGnnG,MAAH,GAAY,CAApB;AACAipG,aAAQ5sD,KAAK8qD,GAAI4B,KAAJ,CAAL,GAAmB5B,GAAI4B,QAAQ,CAAZ,CAA3B;;AAEA;;AAED;AAAS;;AAER;AACAA,aAAQ9pD,EAAR;AACAgqD,aAAQ3sD,EAAR;;AAtBF;AA0BA;;AAED,MAAK4sD,UAAUxqG,SAAf,EAA2B;;AAE1B,WAAS,KAAKupG,YAAL,GAAoBa,SAA7B;;AAEC,SAAKx/F,eAAL;;AAEC;AACA0/F,aAAQ/pD,EAAR;AACAiqD,aAAQ,IAAI5sD,EAAJ,GAASD,EAAjB;;AAEA;;AAED,SAAK9yC,gBAAL;;AAEC;AACAy/F,aAAQ,CAAR;AACAE,aAAQ5sD,KAAK6qD,GAAI,CAAJ,CAAL,GAAeA,GAAI,CAAJ,CAAvB;;AAEA;;AAED;AAAS;;AAER;AACA6B,aAAQ/pD,KAAK,CAAb;AACAiqD,aAAQ7sD,EAAR;;AAtBF;AA0BA;;AAED,MAAI8sD,SAAS,CAAE7sD,KAAKD,EAAP,IAAc,GAA3B;AAAA,MACCs/B,SAAS,KAAKsrB,SADf;;AAGA,OAAKwB,WAAL,GAAmBU,UAAW9sD,KAAK4sD,KAAhB,CAAnB;AACA,OAAKN,WAAL,GAAmBQ,UAAWD,QAAQ5sD,EAAnB,CAAnB;AACA,OAAKosD,WAAL,GAAmBK,QAAQptB,MAA3B;AACA,OAAKitB,WAAL,GAAmBI,QAAQrtB,MAA3B;AAEA,EAxFkF;;AA0FnFmsB,eAAc,UAAW7oD,EAAX,EAAe5C,EAAf,EAAmBtwC,CAAnB,EAAsBuwC,EAAtB,EAA2B;;AAExC,MAAIgiB,SAAS,KAAKyoC,YAAlB;AAAA,MACC1+D,SAAS,KAAKw+D,YADf;AAAA,MAEClrB,SAAS,KAAKsrB,SAFf;AAAA,MAICmC,KAAKnqD,KAAK08B,MAJX;AAAA,MAIoB0tB,KAAKD,KAAKztB,MAJ9B;AAAA,MAKC2tB,KAAK,KAAKZ,WALX;AAAA,MAKyBa,KAAK,KAAKX,WALnC;AAAA,MAMCY,KAAK,KAAKf,WANX;AAAA,MAMwBgB,KAAK,KAAKd,WANlC;AAAA,MAQC3sF,IAAI,CAAEjQ,IAAIswC,EAAN,KAAeC,KAAKD,EAApB,CARL;AAAA,MASC8qD,KAAKnrF,IAAIA,CATV;AAAA,MAUC0tF,MAAMvC,KAAKnrF,CAVZ;;AAYA;;AAEA,MAAI2tF,KAAK,CAAEH,EAAF,GAAOE,GAAP,GAAa,IAAIF,EAAJ,GAASrC,EAAtB,GAA2BqC,KAAKxtF,CAAzC;AACA,MAAI6/B,KAAK,CAAE,IAAI2tD,EAAN,IAAaE,GAAb,GAAmB,CAAE,CAAE,GAAF,GAAQ,IAAIF,EAAd,IAAqBrC,EAAxC,GAA6C,CAAE,CAAE,GAAF,GAAQqC,EAAV,IAAiBxtF,CAA9D,GAAkE,CAA3E;AACA,MAAI+B,KAAK,CAAE,CAAE,CAAF,GAAM0rF,EAAR,IAAeC,GAAf,GAAqB,CAAE,MAAMD,EAAR,IAAetC,EAApC,GAAyC,MAAMnrF,CAAxD;AACA,MAAI4tF,KAAKH,KAAKC,GAAL,GAAWD,KAAKtC,EAAzB;;AAEA;;AAEA,OAAM,IAAI9lG,IAAI,CAAd,EAAiBA,MAAMs6E,MAAvB,EAA+B,EAAGt6E,CAAlC,EAAsC;;AAErCi9D,UAAQj9D,CAAR,IACEsoG,KAAKthE,OAAQihE,KAAKjoG,CAAb,CAAL,GACAw6C,KAAKxT,OAAQghE,KAAKhoG,CAAb,CADL,GAEA0c,KAAKsqB,OAAQ+gE,KAAK/nG,CAAb,CAFL,GAGAuoG,KAAKvhE,OAAQkhE,KAAKloG,CAAb,CAJP;AAMA;;AAED,SAAOi9D,MAAP;AAEA;;AA7HkF,CAAvD,CAA7B;;AAiIA;;;;AAIA,SAASurC,iBAAT,CAA4BjD,kBAA5B,EAAgDC,YAAhD,EAA8DC,UAA9D,EAA0EC,YAA1E,EAAyF;;AAExFJ,aAAYvmG,IAAZ,CAAkB,IAAlB,EAAwBwmG,kBAAxB,EAA4CC,YAA5C,EAA0DC,UAA1D,EAAsEC,YAAtE;AAEA;;AAED8C,kBAAkBzqG,SAAlB,GAA8BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAewhF,YAAYvnG,SAA3B,CAAf,EAAuD;;AAEpF0O,cAAa+7F,iBAFuE;;AAIpF/B,eAAc,UAAW7oD,EAAX,EAAe5C,EAAf,EAAmBtwC,CAAnB,EAAsBuwC,EAAtB,EAA2B;;AAExC,MAAIgiB,SAAS,KAAKyoC,YAAlB;AAAA,MACC1+D,SAAS,KAAKw+D,YADf;AAAA,MAEClrB,SAAS,KAAKsrB,SAFf;AAAA,MAIC6C,UAAU7qD,KAAK08B,MAJhB;AAAA,MAKCouB,UAAUD,UAAUnuB,MALrB;AAAA,MAOCquB,UAAU,CAAEj+F,IAAIswC,EAAN,KAAeC,KAAKD,EAApB,CAPX;AAAA,MAQC4tD,UAAU,IAAID,OARf;;AAUA,OAAM,IAAI3oG,IAAI,CAAd,EAAiBA,MAAMs6E,MAAvB,EAA+B,EAAGt6E,CAAlC,EAAsC;;AAErCi9D,UAAQj9D,CAAR,IACEgnC,OAAQ0hE,UAAU1oG,CAAlB,IAAwB4oG,OAAxB,GACA5hE,OAAQyhE,UAAUzoG,CAAlB,IAAwB2oG,OAF1B;AAIA;;AAED,SAAO1rC,MAAP;AAEA;;AA1BmF,CAAvD,CAA9B;;AA8BA;;;;;;;;AAQA,SAAS4rC,mBAAT,CAA8BtD,kBAA9B,EAAkDC,YAAlD,EAAgEC,UAAhE,EAA4EC,YAA5E,EAA2F;;AAE1FJ,aAAYvmG,IAAZ,CAAkB,IAAlB,EAAwBwmG,kBAAxB,EAA4CC,YAA5C,EAA0DC,UAA1D,EAAsEC,YAAtE;AAEA;;AAEDmD,oBAAoB9qG,SAApB,GAAgCC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAewhF,YAAYvnG,SAA3B,CAAf,EAAuD;;AAEtF0O,cAAao8F,mBAFyE;;AAItFpC,eAAc,UAAW7oD,EAAX,CAAc,gBAAd,EAAiC;;AAE9C,SAAO,KAAKipD,gBAAL,CAAuBjpD,KAAK,CAA5B,CAAP;AAEA;;AARqF,CAAvD,CAAhC;;AAYA;;;;;;AAMA,IAAIkrD,iBAAiB;;AAEpB;AACAC,aAAY,UAAWjpG,KAAX,EAAkBkpG,IAAlB,EAAwBC,EAAxB,EAA6B;;AAExC,MAAKH,eAAeI,YAAf,CAA6BppG,KAA7B,CAAL,EAA4C;;AAE3C;AACA;AACA,UAAO,IAAIA,MAAM2M,WAAV,CAAuB3M,MAAMyhC,QAAN,CAAgBynE,IAAhB,EAAsBC,OAAO5rG,SAAP,GAAmB4rG,EAAnB,GAAwBnpG,MAAMnB,MAApD,CAAvB,CAAP;AAEA;;AAED,SAAOmB,MAAMC,KAAN,CAAaipG,IAAb,EAAmBC,EAAnB,CAAP;AAEA,EAfmB;;AAiBpB;AACAE,eAAc,UAAWrpG,KAAX,EAAkBZ,IAAlB,EAAwBkqG,UAAxB,EAAqC;;AAElD,MAAK,CAAEtpG,KAAF,IAAW;AACd,GAAEspG,UAAF,IAAgBtpG,MAAM2M,WAAN,KAAsBvN,IADxC,EAC+C,OAAOY,KAAP;;AAE/C,MAAK,OAAOZ,KAAKiiC,iBAAZ,KAAkC,QAAvC,EAAkD;;AAEjD,UAAO,IAAIjiC,IAAJ,CAAUY,KAAV,CAAP,CAFiD,CAEvB;AAE1B;;AAED,SAAOi3B,MAAMh5B,SAAN,CAAgBgC,KAAhB,CAAsBhB,IAAtB,CAA4Be,KAA5B,CAAP,CAXkD,CAWN;AAE5C,EA/BmB;;AAiCpBopG,eAAc,UAAW1gF,MAAX,EAAoB;;AAEjC,SAAO6gF,YAAYC,MAAZ,CAAoB9gF,MAApB,KACL,EAAIA,kBAAkB+gF,QAAtB,CADF;AAGA,EAtCmB;;AAwCpB;AACAC,mBAAkB,UAAW3E,KAAX,EAAmB;;AAEpC,WAAS4E,WAAT,CAAsBzpG,CAAtB,EAAyB+qB,CAAzB,EAA6B;;AAE5B,UAAO85E,MAAO7kG,CAAP,IAAa6kG,MAAO95E,CAAP,CAApB;AAEA;;AAED,MAAI9gB,IAAI46F,MAAMlmG,MAAd;AACA,MAAIs+D,SAAS,IAAIlmC,KAAJ,CAAW9sB,CAAX,CAAb;AACA,OAAM,IAAIjK,IAAI,CAAd,EAAiBA,MAAMiK,CAAvB,EAA0B,EAAGjK,CAA7B,EAAiCi9D,OAAQj9D,CAAR,IAAcA,CAAd;;AAEjCi9D,SAAOnvB,IAAP,CAAa27D,WAAb;;AAEA,SAAOxsC,MAAP;AAEA,EAzDmB;;AA2DpB;AACAysC,cAAa,UAAW1iE,MAAX,EAAmBszC,MAAnB,EAA2BxnE,KAA3B,EAAmC;;AAE/C,MAAI62F,UAAU3iE,OAAOroC,MAArB;AACA,MAAIs+D,SAAS,IAAIj2B,OAAOv6B,WAAX,CAAwBk9F,OAAxB,CAAb;;AAEA,OAAM,IAAI3pG,IAAI,CAAR,EAAWmb,YAAY,CAA7B,EAAgCA,cAAcwuF,OAA9C,EAAuD,EAAG3pG,CAA1D,EAA8D;;AAE7D,OAAI4pG,YAAY92F,MAAO9S,CAAP,IAAas6E,MAA7B;;AAEA,QAAM,IAAIvvD,IAAI,CAAd,EAAiBA,MAAMuvD,MAAvB,EAA+B,EAAGvvD,CAAlC,EAAsC;;AAErCkyC,WAAQ9hD,WAAR,IAAyB6rB,OAAQ4iE,YAAY7+E,CAApB,CAAzB;AAEA;AAED;;AAED,SAAOkyC,MAAP;AAEA,EA/EmB;;AAiFpB;AACA4sC,cAAa,UAAWC,QAAX,EAAqBjF,KAArB,EAA4B79D,MAA5B,EAAoC+iE,iBAApC,EAAwD;;AAEpE,MAAI/pG,IAAI,CAAR;AAAA,MAAWinC,MAAM6iE,SAAU,CAAV,CAAjB;;AAEA,SAAQ7iE,QAAQ5pC,SAAR,IAAqB4pC,IAAK8iE,iBAAL,MAA6B1sG,SAA1D,EAAsE;;AAErE4pC,SAAM6iE,SAAU9pG,GAAV,CAAN;AAEA;;AAED,MAAKinC,QAAQ5pC,SAAb,EAAyB,OAV2C,CAUnC;;AAEjC,MAAII,QAAQwpC,IAAK8iE,iBAAL,CAAZ;AACA,MAAKtsG,UAAUJ,SAAf,EAA2B,OAbyC,CAajC;;AAEnC,MAAK05B,MAAMC,OAAN,CAAev5B,KAAf,CAAL,EAA8B;;AAE7B,MAAG;;AAEFA,YAAQwpC,IAAK8iE,iBAAL,CAAR;;AAEA,QAAKtsG,UAAUJ,SAAf,EAA2B;;AAE1BwnG,WAAMtlG,IAAN,CAAY0nC,IAAIq0C,IAAhB;AACAt0C,YAAOznC,IAAP,CAAYgoE,KAAZ,CAAmBvgC,MAAnB,EAA2BvpC,KAA3B,EAH0B,CAGU;AAEpC;;AAEDwpC,UAAM6iE,SAAU9pG,GAAV,CAAN;AAEA,IAbD,QAaUinC,QAAQ5pC,SAblB;AAeA,GAjBD,MAiBO,IAAKI,MAAMmS,OAAN,KAAkBvS,SAAvB,EAAmC;;AAEzC;;AAEA,MAAG;;AAEFI,YAAQwpC,IAAK8iE,iBAAL,CAAR;;AAEA,QAAKtsG,UAAUJ,SAAf,EAA2B;;AAE1BwnG,WAAMtlG,IAAN,CAAY0nC,IAAIq0C,IAAhB;AACA79E,WAAMmS,OAAN,CAAeo3B,MAAf,EAAuBA,OAAOroC,MAA9B;AAEA;;AAEDsoC,UAAM6iE,SAAU9pG,GAAV,CAAN;AAEA,IAbD,QAaUinC,QAAQ5pC,SAblB;AAeA,GAnBM,MAmBA;;AAEN;;AAEA,MAAG;;AAEFI,YAAQwpC,IAAK8iE,iBAAL,CAAR;;AAEA,QAAKtsG,UAAUJ,SAAf,EAA2B;;AAE1BwnG,WAAMtlG,IAAN,CAAY0nC,IAAIq0C,IAAhB;AACAt0C,YAAOznC,IAAP,CAAa9B,KAAb;AAEA;;AAEDwpC,UAAM6iE,SAAU9pG,GAAV,CAAN;AAEA,IAbD,QAaUinC,QAAQ5pC,SAblB;AAeA;AAED;;AA1JmB,CAArB;;AA8JA;;;;;;;;;;AAUA,SAAS0nG,aAAT,CAAwB7hF,IAAxB,EAA8B2hF,KAA9B,EAAqC79D,MAArC,EAA6C89D,aAA7C,EAA6D;;AAE5D,KAAK5hF,SAAS7lB,SAAd,EAA0B,MAAM,IAAIiP,KAAJ,CAAW,8CAAX,CAAN;AAC1B,KAAKu4F,UAAUxnG,SAAV,IAAuBwnG,MAAMlmG,MAAN,KAAiB,CAA7C,EAAiD,MAAM,IAAI2N,KAAJ,CAAW,sDAAsD4W,IAAjE,CAAN;;AAEjD,MAAKA,IAAL,GAAYA,IAAZ;;AAEA,MAAK2hF,KAAL,GAAaiE,eAAeK,YAAf,CAA6BtE,KAA7B,EAAoC,KAAKmF,cAAzC,CAAb;AACA,MAAKhjE,MAAL,GAAc8hE,eAAeK,YAAf,CAA6BniE,MAA7B,EAAqC,KAAKi+D,eAA1C,CAAd;;AAEA,MAAKgF,gBAAL,CAAuBnF,iBAAiB,KAAKI,oBAA7C;;AAEA,MAAKgF,QAAL;AACA,MAAKC,QAAL;AAEA;;AAED;;AAEAnsG,OAAOK,MAAP,CAAe0mG,aAAf,EAA8B;;AAE7B;AACA;;AAEA59D,QAAO,UAAW82D,IAAX,EAAkB;;AAExB,MAAKA,KAAK/+F,IAAL,KAAc7B,SAAnB,EAA+B;;AAE9B,SAAM,IAAIiP,KAAJ,CAAW,0DAAX,CAAN;AAEA;;AAED,MAAI89F,YAAYrF,cAAcsF,6BAAd,CAA6CpM,KAAK/+F,IAAlD,CAAhB;;AAEA,MAAK++F,KAAK4G,KAAL,KAAexnG,SAApB,EAAgC;;AAE/B,OAAIwnG,QAAQ,EAAZ;AAAA,OAAgB79D,SAAS,EAAzB;;AAEA8hE,kBAAee,WAAf,CAA4B5L,KAAKt/C,IAAjC,EAAuCkmD,KAAvC,EAA8C79D,MAA9C,EAAsD,OAAtD;;AAEAi3D,QAAK4G,KAAL,GAAaA,KAAb;AACA5G,QAAKj3D,MAAL,GAAcA,MAAd;AAEA;;AAED;AACA,MAAKojE,UAAUjjE,KAAV,KAAoB9pC,SAAzB,EAAqC;;AAEpC,UAAO+sG,UAAUjjE,KAAV,CAAiB82D,IAAjB,CAAP;AAEA,GAJD,MAIO;;AAEN;AACA,UAAO,IAAImM,SAAJ,CAAenM,KAAK/6E,IAApB,EAA0B+6E,KAAK4G,KAA/B,EAAsC5G,KAAKj3D,MAA3C,EAAmDi3D,KAAK6G,aAAxD,CAAP;AAEA;AAED,EAtC4B;;AAwC7B7gF,SAAQ,UAAWqmF,KAAX,EAAmB;;AAE1B,MAAIF,YAAYE,MAAM79F,WAAtB;;AAEA,MAAIwxF,IAAJ;;AAEA;AACA,MAAKmM,UAAUnmF,MAAV,KAAqB5mB,SAA1B,EAAsC;;AAErC4gG,UAAOmM,UAAUnmF,MAAV,CAAkBqmF,KAAlB,CAAP;AAEA,GAJD,MAIO;;AAEN;AACArM,UAAO;;AAEN,YAAQqM,MAAMpnF,IAFR;AAGN,aAAS4lF,eAAeK,YAAf,CAA6BmB,MAAMzF,KAAnC,EAA0C9tE,KAA1C,CAHH;AAIN,cAAU+xE,eAAeK,YAAf,CAA6BmB,MAAMtjE,MAAnC,EAA2CjQ,KAA3C;;AAJJ,IAAP;;AAQA,OAAI+tE,gBAAgBwF,MAAMC,gBAAN,EAApB;;AAEA,OAAKzF,kBAAkBwF,MAAMpF,oBAA7B,EAAoD;;AAEnDjH,SAAK6G,aAAL,GAAqBA,aAArB;AAEA;AAED;;AAED7G,OAAK/+F,IAAL,GAAYorG,MAAMtF,aAAlB,CAhC0B,CAgCO;;AAEjC,SAAO/G,IAAP;AAEA,EA5E4B;;AA8E7BoM,gCAA+B,UAAWG,QAAX,EAAsB;;AAEpD,UAASA,SAAS7Q,WAAT,EAAT;;AAEC,QAAK,QAAL;AACA,QAAK,QAAL;AACA,QAAK,OAAL;AACA,QAAK,QAAL;AACA,QAAK,SAAL;;AAEC,WAAOuN,mBAAP;;AAED,QAAK,QAAL;AACA,QAAK,SAAL;AACA,QAAK,SAAL;AACA,QAAK,SAAL;;AAEC,WAAOuD,mBAAP;;AAED,QAAK,OAAL;;AAEC,WAAOxD,kBAAP;;AAED,QAAK,YAAL;;AAEC,WAAOF,uBAAP;;AAED,QAAK,MAAL;AACA,QAAK,SAAL;;AAEC,WAAO1B,oBAAP;;AAED,QAAK,QAAL;;AAEC,WAAOT,mBAAP;;AAhCF;;AAoCA,QAAM,IAAIt4F,KAAJ,CAAW,gDAAgDk+F,QAA3D,CAAN;AAEA;;AAtH4B,CAA9B;;AA0HAxsG,OAAOK,MAAP,CAAe0mG,cAAchnG,SAA7B,EAAwC;;AAEvC0O,cAAas4F,aAF0B;;AAIvCiF,iBAAgB5pE,YAJuB;;AAMvC6kE,kBAAiB7kE,YANsB;;AAQvC8kE,uBAAsBp9F,iBARiB;;AAUvC4iG,mCAAkC,UAAWztC,MAAX,EAAoB;;AAErD,SAAO,IAAI4rC,mBAAJ,CAAyB,KAAKhE,KAA9B,EAAqC,KAAK79D,MAA1C,EAAkD,KAAKggE,YAAL,EAAlD,EAAuE/pC,MAAvE,CAAP;AAEA,EAdsC;;AAgBvCkoC,iCAAgC,UAAWloC,MAAX,EAAoB;;AAEnD,SAAO,IAAIurC,iBAAJ,CAAuB,KAAK3D,KAA5B,EAAmC,KAAK79D,MAAxC,EAAgD,KAAKggE,YAAL,EAAhD,EAAqE/pC,MAArE,CAAP;AAEA,EApBsC;;AAsBvCmoC,iCAAgC,UAAWnoC,MAAX,EAAoB;;AAEnD,SAAO,IAAIkqC,gBAAJ,CAAsB,KAAKtC,KAA3B,EAAkC,KAAK79D,MAAvC,EAA+C,KAAKggE,YAAL,EAA/C,EAAoE/pC,MAApE,CAAP;AAEA,EA1BsC;;AA4BvCgtC,mBAAkB,UAAWnF,aAAX,EAA2B;;AAE5C,MAAI6F,aAAJ;;AAEA,UAAS7F,aAAT;;AAEC,QAAKj9F,mBAAL;;AAEC8iG,oBAAgB,KAAKD,gCAArB;;AAEA;;AAED,QAAK5iG,iBAAL;;AAEC6iG,oBAAgB,KAAKxF,8BAArB;;AAEA;;AAED,QAAKp9F,iBAAL;;AAEC4iG,oBAAgB,KAAKvF,8BAArB;;AAEA;;AAlBF;;AAsBA,MAAKuF,kBAAkBttG,SAAvB,EAAmC;;AAElC,OAAI84E,UAAU,mCACb,KAAK6uB,aADQ,GACQ,wBADR,GACmC,KAAK9hF,IADtD;;AAGA,OAAK,KAAK0nF,iBAAL,KAA2BvtG,SAAhC,EAA4C;;AAE3C;AACA,QAAKynG,kBAAkB,KAAKI,oBAA5B,EAAmD;;AAElD,UAAK+E,gBAAL,CAAuB,KAAK/E,oBAA5B;AAEA,KAJD,MAIO;;AAEN,WAAM,IAAI54F,KAAJ,CAAW6pE,OAAX,CAAN,CAFM,CAEsB;AAE5B;AAED;;AAEDrpE,WAAQC,IAAR,CAAc,sBAAd,EAAsCopE,OAAtC;AACA;AAEA;;AAED,OAAKy0B,iBAAL,GAAyBD,aAAzB;AAEA,EAjFsC;;AAmFvCJ,mBAAkB,YAAY;;AAE7B,UAAS,KAAKK,iBAAd;;AAEC,QAAK,KAAKF,gCAAV;;AAEC,WAAO7iG,mBAAP;;AAED,QAAK,KAAKs9F,8BAAV;;AAEC,WAAOr9F,iBAAP;;AAED,QAAK,KAAKs9F,8BAAV;;AAEC,WAAOr9F,iBAAP;;AAZF;AAgBA,EArGsC;;AAuGvCi/F,eAAc,YAAY;;AAEzB,SAAO,KAAKhgE,MAAL,CAAYroC,MAAZ,GAAqB,KAAKkmG,KAAL,CAAWlmG,MAAvC;AAEA,EA3GsC;;AA6GvC;AACAksG,QAAO,UAAWC,UAAX,EAAwB;;AAE9B,MAAKA,eAAe,GAApB,EAA0B;;AAEzB,OAAIjG,QAAQ,KAAKA,KAAjB;;AAEA,QAAM,IAAI7kG,IAAI,CAAR,EAAWiK,IAAI46F,MAAMlmG,MAA3B,EAAmCqB,MAAMiK,CAAzC,EAA4C,EAAGjK,CAA/C,EAAmD;;AAElD6kG,UAAO7kG,CAAP,KAAc8qG,UAAd;AAEA;AAED;;AAED,SAAO,IAAP;AAEA,EA9HsC;;AAgIvC;AACAzyF,QAAO,UAAW0yF,SAAX,EAAuB;;AAE7B,MAAKA,cAAc,GAAnB,EAAyB;;AAExB,OAAIlG,QAAQ,KAAKA,KAAjB;;AAEA,QAAM,IAAI7kG,IAAI,CAAR,EAAWiK,IAAI46F,MAAMlmG,MAA3B,EAAmCqB,MAAMiK,CAAzC,EAA4C,EAAGjK,CAA/C,EAAmD;;AAElD6kG,UAAO7kG,CAAP,KAAc+qG,SAAd;AAEA;AAED;;AAED,SAAO,IAAP;AAEA,EAjJsC;;AAmJvC;AACA;AACAx3C,OAAM,UAAWy3C,SAAX,EAAsBC,OAAtB,EAAgC;;AAErC,MAAIpG,QAAQ,KAAKA,KAAjB;AAAA,MACCqG,QAAQrG,MAAMlmG,MADf;AAAA,MAECqqG,OAAO,CAFR;AAAA,MAGCC,KAAKiC,QAAQ,CAHd;;AAKA,SAAQlC,SAASkC,KAAT,IAAkBrG,MAAOmE,IAAP,IAAgBgC,SAA1C,EAAsD;;AAErD,KAAGhC,IAAH;AAEA;;AAED,SAAQC,OAAO,CAAE,CAAT,IAAcpE,MAAOoE,EAAP,IAAcgC,OAApC,EAA8C;;AAE7C,KAAGhC,EAAH;AAEA;;AAED,IAAGA,EAAH,CAnBqC,CAmB9B;;AAEP,MAAKD,SAAS,CAAT,IAAcC,OAAOiC,KAA1B,EAAkC;;AAEjC;AACA,OAAKlC,QAAQC,EAAb,EAAkBA,KAAK3rG,KAAKyM,GAAL,CAAUk/F,EAAV,EAAc,CAAd,CAAL,EAAwBD,OAAOC,KAAK,CAApC;;AAElB,OAAI3uB,SAAS,KAAK0sB,YAAL,EAAb;AACA,QAAKnC,KAAL,GAAaiE,eAAeC,UAAf,CAA2BlE,KAA3B,EAAkCmE,IAAlC,EAAwCC,EAAxC,CAAb;AACA,QAAKjiE,MAAL,GAAc8hE,eAAeC,UAAf,CAA2B,KAAK/hE,MAAhC,EAAwCgiE,OAAO1uB,MAA/C,EAAuD2uB,KAAK3uB,MAA5D,CAAd;AAEA;;AAED,SAAO,IAAP;AAEA,EAvLsC;;AAyLvC;AACA4vB,WAAU,YAAY;;AAErB,MAAIiB,QAAQ,IAAZ;;AAEA,MAAIvF,YAAY,KAAKoB,YAAL,EAAhB;AACA,MAAKpB,YAAYtoG,KAAKK,KAAL,CAAYioG,SAAZ,CAAZ,KAAwC,CAA7C,EAAiD;;AAEhD94F,WAAQyD,KAAR,CAAe,mDAAf,EAAoE,IAApE;AACA46F,WAAQ,KAAR;AAEA;;AAED,MAAItG,QAAQ,KAAKA,KAAjB;AAAA,MACC79D,SAAS,KAAKA,MADf;AAAA,MAGCkkE,QAAQrG,MAAMlmG,MAHf;;AAKA,MAAKusG,UAAU,CAAf,EAAmB;;AAElBp+F,WAAQyD,KAAR,CAAe,sCAAf,EAAuD,IAAvD;AACA46F,WAAQ,KAAR;AAEA;;AAED,MAAIC,WAAW,IAAf;;AAEA,OAAM,IAAIprG,IAAI,CAAd,EAAiBA,MAAMkrG,KAAvB,EAA8BlrG,GAA9B,EAAqC;;AAEpC,OAAIqrG,WAAWxG,MAAO7kG,CAAP,CAAf;;AAEA,OAAK,OAAOqrG,QAAP,KAAoB,QAApB,IAAgCj4D,MAAOi4D,QAAP,CAArC,EAAyD;;AAExDv+F,YAAQyD,KAAR,CAAe,kDAAf,EAAmE,IAAnE,EAAyEvQ,CAAzE,EAA4EqrG,QAA5E;AACAF,YAAQ,KAAR;AACA;AAEA;;AAED,OAAKC,aAAa,IAAb,IAAqBA,WAAWC,QAArC,EAAgD;;AAE/Cv+F,YAAQyD,KAAR,CAAe,yCAAf,EAA0D,IAA1D,EAAgEvQ,CAAhE,EAAmEqrG,QAAnE,EAA6ED,QAA7E;AACAD,YAAQ,KAAR;AACA;AAEA;;AAEDC,cAAWC,QAAX;AAEA;;AAED,MAAKrkE,WAAW3pC,SAAhB,EAA4B;;AAE3B,OAAKyrG,eAAeI,YAAf,CAA6BliE,MAA7B,CAAL,EAA6C;;AAE5C,SAAM,IAAIhnC,IAAI,CAAR,EAAWiK,IAAI+8B,OAAOroC,MAA5B,EAAoCqB,MAAMiK,CAA1C,EAA6C,EAAGjK,CAAhD,EAAoD;;AAEnD,SAAIvC,QAAQupC,OAAQhnC,CAAR,CAAZ;;AAEA,SAAKozC,MAAO31C,KAAP,CAAL,EAAsB;;AAErBqP,cAAQyD,KAAR,CAAe,mDAAf,EAAoE,IAApE,EAA0EvQ,CAA1E,EAA6EvC,KAA7E;AACA0tG,cAAQ,KAAR;AACA;AAEA;AAED;AAED;AAED;;AAED,SAAOA,KAAP;AAEA,EApQsC;;AAsQvC;AACA;AACAhB,WAAU,YAAY;;AAErB,MAAItF,QAAQ,KAAKA,KAAjB;AAAA,MACC79D,SAAS,KAAKA,MADf;AAAA,MAECszC,SAAS,KAAK0sB,YAAL,EAFV;AAAA,MAICsE,sBAAsB,KAAKf,gBAAL,OAA4BxiG,iBAJnD;AAAA,MAMCwjG,aAAa,CANd;AAAA,MAOCh+C,YAAYs3C,MAAMlmG,MAAN,GAAe,CAP5B;;AASA,OAAM,IAAIqB,IAAI,CAAd,EAAiBA,IAAIutD,SAArB,EAAgC,EAAGvtD,CAAnC,EAAuC;;AAEtC,OAAIwrG,OAAO,KAAX;;AAEA,OAAIlwB,OAAOupB,MAAO7kG,CAAP,CAAX;AACA,OAAIyrG,WAAW5G,MAAO7kG,IAAI,CAAX,CAAf;;AAEA;;AAEA,OAAKs7E,SAASmwB,QAAT,KAAuBzrG,MAAM,CAAN,IAAWs7E,SAASA,KAAM,CAAN,CAA3C,CAAL,EAA8D;;AAE7D,QAAK,CAAEgwB,mBAAP,EAA6B;;AAE5B;;AAEA,SAAI37F,SAAS3P,IAAIs6E,MAAjB;AAAA,SACCoxB,UAAU/7F,SAAS2qE,MADpB;AAAA,SAECqxB,UAAUh8F,SAAS2qE,MAFpB;;AAIA,UAAM,IAAIvvD,IAAI,CAAd,EAAiBA,MAAMuvD,MAAvB,EAA+B,EAAGvvD,CAAlC,EAAsC;;AAErC,UAAIttB,QAAQupC,OAAQr3B,SAASob,CAAjB,CAAZ;;AAEA,UAAKttB,UAAUupC,OAAQ0kE,UAAU3gF,CAAlB,CAAV,IACJttB,UAAUupC,OAAQ2kE,UAAU5gF,CAAlB,CADX,EACmC;;AAElCygF,cAAO,IAAP;AACA;AAEA;AAED;AAED,KAtBD,MAsBO;;AAENA,YAAO,IAAP;AAEA;AAED;;AAED;;AAEA,OAAKA,IAAL,EAAY;;AAEX,QAAKxrG,MAAMurG,UAAX,EAAwB;;AAEvB1G,WAAO0G,UAAP,IAAsB1G,MAAO7kG,CAAP,CAAtB;;AAEA,SAAI4rG,aAAa5rG,IAAIs6E,MAArB;AAAA,SACCuxB,cAAcN,aAAajxB,MAD5B;;AAGA,UAAM,IAAIvvD,IAAI,CAAd,EAAiBA,MAAMuvD,MAAvB,EAA+B,EAAGvvD,CAAlC,EAAsC;;AAErCic,aAAQ6kE,cAAc9gF,CAAtB,IAA4Bic,OAAQ4kE,aAAa7gF,CAArB,CAA5B;AAEA;AAED;;AAED,MAAGwgF,UAAH;AAEA;AAED;;AAED;;AAEA,MAAKh+C,YAAY,CAAjB,EAAqB;;AAEpBs3C,SAAO0G,UAAP,IAAsB1G,MAAOt3C,SAAP,CAAtB;;AAEA,QAAM,IAAIq+C,aAAar+C,YAAY+sB,MAA7B,EAAqCuxB,cAAcN,aAAajxB,MAAhE,EAAwEvvD,IAAI,CAAlF,EAAqFA,MAAMuvD,MAA3F,EAAmG,EAAGvvD,CAAtG,EAA0G;;AAEzGic,WAAQ6kE,cAAc9gF,CAAtB,IAA4Bic,OAAQ4kE,aAAa7gF,CAArB,CAA5B;AAEA;;AAED,KAAGwgF,UAAH;AAEA;;AAED,MAAKA,eAAe1G,MAAMlmG,MAA1B,EAAmC;;AAElC,QAAKkmG,KAAL,GAAaiE,eAAeC,UAAf,CAA2BlE,KAA3B,EAAkC,CAAlC,EAAqC0G,UAArC,CAAb;AACA,QAAKvkE,MAAL,GAAc8hE,eAAeC,UAAf,CAA2B/hE,MAA3B,EAAmC,CAAnC,EAAsCukE,aAAajxB,MAAnD,CAAd;AAEA;;AAED,SAAO,IAAP;AAEA;;AA9WsC,CAAxC;;AAkXA;;;;;;;;;;AAUA,SAASmwB,mBAAT,CAA8BvnF,IAA9B,EAAoC2hF,KAApC,EAA2C79D,MAA3C,EAAmD89D,aAAnD,EAAmE;;AAElEC,eAAchmG,IAAd,CAAoB,IAApB,EAA0BmkB,IAA1B,EAAgC2hF,KAAhC,EAAuC79D,MAAvC,EAA+C89D,aAA/C;AAEA;;AAED2F,oBAAoB1sG,SAApB,GAAgCC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAeihF,cAAchnG,SAA7B,CAAf,EAAyD;;AAExF0O,cAAag+F,mBAF2E;;AAIxFzF,gBAAe;;AAEf;;AAEA;;AARwF,CAAzD,CAAhC;;AAYA;;;;;;;;AAQA,SAAS8G,aAAT,CAAwB5oF,IAAxB,EAA8B6oF,QAA9B,EAAwCC,MAAxC,EAAiD;;AAEhD,MAAK9oF,IAAL,GAAYA,IAAZ;AACA,MAAK8oF,MAAL,GAAcA,MAAd;AACA,MAAKD,QAAL,GAAkBA,aAAa1uG,SAAf,GAA6B0uG,QAA7B,GAAwC,CAAE,CAA1D;;AAEA,MAAKpiG,IAAL,GAAYX,MAAMI,YAAN,EAAZ;;AAEA;AACA,KAAK,KAAK2iG,QAAL,GAAgB,CAArB,EAAyB;;AAExB,OAAKE,aAAL;AAEA;;AAED,MAAK9B,QAAL;AAEA;;AAEDnsG,OAAOK,MAAP,CAAeytG,aAAf,EAA8B;;AAE7B3kE,QAAO,UAAW82D,IAAX,EAAkB;;AAExB,MAAI+N,SAAS,EAAb;AAAA,MACCE,aAAajO,KAAK+N,MADnB;AAAA,MAECG,YAAY,OAAQlO,KAAKmO,GAAL,IAAY,GAApB,CAFb;;AAIA,OAAM,IAAIpsG,IAAI,CAAR,EAAWiK,IAAIiiG,WAAWvtG,MAAhC,EAAwCqB,MAAMiK,CAA9C,EAAiD,EAAGjK,CAApD,EAAwD;;AAEvDgsG,UAAOzsG,IAAP,CAAawlG,cAAc59D,KAAd,CAAqB+kE,WAAYlsG,CAAZ,CAArB,EAAuCqY,KAAvC,CAA8C8zF,SAA9C,CAAb;AAEA;;AAED,SAAO,IAAIL,aAAJ,CAAmB7N,KAAK/6E,IAAxB,EAA8B+6E,KAAK8N,QAAnC,EAA6CC,MAA7C,CAAP;AAEA,EAhB4B;;AAkB7B/nF,SAAQ,UAAWooF,IAAX,EAAkB;;AAEzB,MAAIL,SAAS,EAAb;AAAA,MACCM,aAAaD,KAAKL,MADnB;;AAGA,MAAI/N,OAAO;;AAEV,WAAQoO,KAAKnpF,IAFH;AAGV,eAAYmpF,KAAKN,QAHP;AAIV,aAAUC;;AAJA,GAAX;;AAQA,OAAM,IAAIhsG,IAAI,CAAR,EAAWiK,IAAIqiG,WAAW3tG,MAAhC,EAAwCqB,MAAMiK,CAA9C,EAAiD,EAAGjK,CAApD,EAAwD;;AAEvDgsG,UAAOzsG,IAAP,CAAawlG,cAAc9gF,MAAd,CAAsBqoF,WAAYtsG,CAAZ,CAAtB,CAAb;AAEA;;AAED,SAAOi+F,IAAP;AAEA,EAvC4B;;AAyC7BsO,gCAA+B,UAAWrpF,IAAX,EAAiBspF,mBAAjB,EAAsCJ,GAAtC,EAA2CK,MAA3C,EAAoD;;AAElF,MAAIC,kBAAkBF,oBAAoB7tG,MAA1C;AACA,MAAIqtG,SAAS,EAAb;;AAEA,OAAM,IAAIhsG,IAAI,CAAd,EAAiBA,IAAI0sG,eAArB,EAAsC1sG,GAAtC,EAA6C;;AAE5C,OAAI6kG,QAAQ,EAAZ;AACA,OAAI79D,SAAS,EAAb;;AAEA69D,SAAMtlG,IAAN,CACC,CAAES,IAAI0sG,eAAJ,GAAsB,CAAxB,IAA8BA,eAD/B,EAEC1sG,CAFD,EAGC,CAAEA,IAAI,CAAN,IAAY0sG,eAHb;;AAKA1lE,UAAOznC,IAAP,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB;;AAEA,OAAIuT,QAAQg2F,eAAeU,gBAAf,CAAiC3E,KAAjC,CAAZ;AACAA,WAAQiE,eAAeY,WAAf,CAA4B7E,KAA5B,EAAmC,CAAnC,EAAsC/xF,KAAtC,CAAR;AACAk0B,YAAS8hE,eAAeY,WAAf,CAA4B1iE,MAA5B,EAAoC,CAApC,EAAuCl0B,KAAvC,CAAT;;AAEA;AACA;AACA,OAAK,CAAE25F,MAAF,IAAY5H,MAAO,CAAP,MAAe,CAAhC,EAAoC;;AAEnCA,UAAMtlG,IAAN,CAAYmtG,eAAZ;AACA1lE,WAAOznC,IAAP,CAAaynC,OAAQ,CAAR,CAAb;AAEA;;AAEDglE,UAAOzsG,IAAP,CACC,IAAI2nG,mBAAJ,CACC,4BAA4BsF,oBAAqBxsG,CAArB,EAAyBkjB,IAArD,GAA4D,GAD7D,EAEC2hF,KAFD,EAEQ79D,MAFR,EAGE3uB,KAHF,CAGS,MAAM+zF,GAHf,CADD;AAMA;;AAED,SAAO,IAAIN,aAAJ,CAAmB5oF,IAAnB,EAAyB,CAAE,CAA3B,EAA8B8oF,MAA9B,CAAP;AAEA,EAjF4B;;AAmF7BW,aAAY,UAAWC,iBAAX,EAA8B1pF,IAA9B,EAAqC;;AAEhD,MAAI2pF,YAAYD,iBAAhB;;AAEA,MAAK,CAAE71E,MAAMC,OAAN,CAAe41E,iBAAf,CAAP,EAA4C;;AAE3C,OAAItoB,IAAIsoB,iBAAR;AACAC,eAAYvoB,EAAEl7D,QAAF,IAAck7D,EAAEl7D,QAAF,CAAW0jF,UAAzB,IAAuCxoB,EAAEwoB,UAArD;AAEA;;AAED,OAAM,IAAI9sG,IAAI,CAAd,EAAiBA,IAAI6sG,UAAUluG,MAA/B,EAAuCqB,GAAvC,EAA8C;;AAE7C,OAAK6sG,UAAW7sG,CAAX,EAAekjB,IAAf,KAAwBA,IAA7B,EAAoC;;AAEnC,WAAO2pF,UAAW7sG,CAAX,CAAP;AAEA;AAED;;AAED,SAAO,IAAP;AAEA,EA1G4B;;AA4G7B+sG,sCAAqC,UAAWhkE,YAAX,EAAyBqjE,GAAzB,EAA8BK,MAA9B,EAAuC;;AAE3E,MAAIO,0BAA0B,EAA9B;;AAEA;AACA;AACA,MAAIn8C,UAAU,oBAAd;;AAEA;AACA;AACA,OAAM,IAAI7wD,IAAI,CAAR,EAAWkoB,KAAK6gB,aAAapqC,MAAnC,EAA2CqB,IAAIkoB,EAA/C,EAAmDloB,GAAnD,EAA0D;;AAEzD,OAAIovC,cAAcrG,aAAc/oC,CAAd,CAAlB;AACA,OAAIitG,QAAQ79D,YAAYlsB,IAAZ,CAAiB9kB,KAAjB,CAAwByyD,OAAxB,CAAZ;;AAEA,OAAKo8C,SAASA,MAAMtuG,MAAN,GAAe,CAA7B,EAAiC;;AAEhC,QAAIukB,OAAO+pF,MAAO,CAAP,CAAX;;AAEA,QAAIC,wBAAwBF,wBAAyB9pF,IAAzB,CAA5B;AACA,QAAK,CAAEgqF,qBAAP,EAA+B;;AAE9BF,6BAAyB9pF,IAAzB,IAAkCgqF,wBAAwB,EAA1D;AAEA;;AAEDA,0BAAsB3tG,IAAtB,CAA4B6vC,WAA5B;AAEA;AAED;;AAED,MAAI+9D,QAAQ,EAAZ;;AAEA,OAAM,IAAIjqF,IAAV,IAAkB8pF,uBAAlB,EAA4C;;AAE3CG,SAAM5tG,IAAN,CAAYusG,cAAcS,6BAAd,CAA6CrpF,IAA7C,EAAmD8pF,wBAAyB9pF,IAAzB,CAAnD,EAAoFkpF,GAApF,EAAyFK,MAAzF,CAAZ;AAEA;;AAED,SAAOU,KAAP;AAEA,EAtJ4B;;AAwJ7B;AACAC,iBAAgB,UAAWC,SAAX,EAAsB33C,KAAtB,EAA8B;;AAE7C,MAAK,CAAE23C,SAAP,EAAmB;;AAElBvgG,WAAQyD,KAAR,CAAe,uDAAf;AACA,UAAO,IAAP;AAEA;;AAED,MAAI+8F,mBAAmB,UAAWlD,SAAX,EAAsBmD,SAAtB,EAAiCC,aAAjC,EAAgDC,YAAhD,EAA8DC,UAA9D,EAA2E;;AAEjG;AACA,OAAKF,cAAc7uG,MAAd,KAAyB,CAA9B,EAAkC;;AAEjC,QAAIkmG,QAAQ,EAAZ;AACA,QAAI79D,SAAS,EAAb;;AAEA8hE,mBAAee,WAAf,CAA4B2D,aAA5B,EAA2C3I,KAA3C,EAAkD79D,MAAlD,EAA0DymE,YAA1D;;AAEA;AACA,QAAK5I,MAAMlmG,MAAN,KAAiB,CAAtB,EAA0B;;AAEzB+uG,gBAAWnuG,IAAX,CAAiB,IAAI6qG,SAAJ,CAAemD,SAAf,EAA0B1I,KAA1B,EAAiC79D,MAAjC,CAAjB;AAEA;AAED;AAED,GAnBD;;AAqBA,MAAIglE,SAAS,EAAb;;AAEA,MAAI2B,WAAWN,UAAUnqF,IAAV,IAAkB,SAAjC;AACA;AACA,MAAI6oF,WAAWsB,UAAU1uG,MAAV,IAAoB,CAAE,CAArC;AACA,MAAIytG,MAAMiB,UAAUjB,GAAV,IAAiB,EAA3B;;AAEA,MAAIwB,kBAAkBP,UAAUQ,SAAV,IAAuB,EAA7C;;AAEA,OAAM,IAAInzF,IAAI,CAAd,EAAiBA,IAAIkzF,gBAAgBjvG,MAArC,EAA6C+b,GAA7C,EAAoD;;AAEnD,OAAI8yF,gBAAgBI,gBAAiBlzF,CAAjB,EAAqBikC,IAAzC;;AAEA;AACA,OAAK,CAAE6uD,aAAF,IAAmBA,cAAc7uG,MAAd,KAAyB,CAAjD,EAAqD;;AAErD;AACA,OAAK6uG,cAAe,CAAf,EAAmBzkE,YAAxB,EAAuC;;AAEtC;AACA,QAAI+kE,mBAAmB,EAAvB;;AAEA,SAAM,IAAI7+D,IAAI,CAAd,EAAiBA,IAAIu+D,cAAc7uG,MAAnC,EAA2CswC,GAA3C,EAAkD;;AAEjD,SAAKu+D,cAAev+D,CAAf,EAAmBlG,YAAxB,EAAuC;;AAEtC,WAAM,IAAI7+B,IAAI,CAAd,EAAiBA,IAAIsjG,cAAev+D,CAAf,EAAmBlG,YAAnB,CAAgCpqC,MAArD,EAA6DuL,GAA7D,EAAoE;;AAEnE4jG,wBAAkBN,cAAev+D,CAAf,EAAmBlG,YAAnB,CAAiC7+B,CAAjC,CAAlB,IAA2D,CAAE,CAA7D;AAEA;AAED;AAED;;AAED;AACA;AACA;AACA,SAAM,IAAI6jG,eAAV,IAA6BD,gBAA7B,EAAgD;;AAE/C,SAAIjJ,QAAQ,EAAZ;AACA,SAAI79D,SAAS,EAAb;;AAEA,UAAM,IAAI98B,IAAI,CAAd,EAAiBA,MAAMsjG,cAAev+D,CAAf,EAAmBlG,YAAnB,CAAgCpqC,MAAvD,EAA+D,EAAGuL,CAAlE,EAAsE;;AAErE,UAAI8jG,eAAeR,cAAev+D,CAAf,CAAnB;;AAEA41D,YAAMtlG,IAAN,CAAYyuG,aAAa1yB,IAAzB;AACAt0C,aAAOznC,IAAP,CAAeyuG,aAAa5+D,WAAb,KAA6B2+D,eAA/B,GAAmD,CAAnD,GAAuD,CAApE;AAEA;;AAED/B,YAAOzsG,IAAP,CAAa,IAAI2nG,mBAAJ,CAAyB,2BAA2B6G,eAA3B,GAA6C,GAAtE,EAA2ElJ,KAA3E,EAAkF79D,MAAlF,CAAb;AAEA;;AAED+kE,eAAW+B,iBAAiBnvG,MAAjB,IAA4BytG,OAAO,GAAnC,CAAX;AAEA,IA1CD,MA0CO;;AAEN;;AAEA,QAAI6B,WAAW,YAAYv4C,MAAOh7C,CAAP,EAAWwI,IAAvB,GAA8B,GAA7C;;AAEAoqF,qBACC7C,mBADD,EACsBwD,WAAW,WADjC,EAECT,aAFD,EAEgB,KAFhB,EAEuBxB,MAFvB;;AAIAsB,qBACCvG,uBADD,EAC0BkH,WAAW,aADrC,EAECT,aAFD,EAEgB,KAFhB,EAEuBxB,MAFvB;;AAIAsB,qBACC7C,mBADD,EACsBwD,WAAW,QADjC,EAECT,aAFD,EAEgB,KAFhB,EAEuBxB,MAFvB;AAIA;AAED;;AAED,MAAKA,OAAOrtG,MAAP,KAAkB,CAAvB,EAA2B;;AAE1B,UAAO,IAAP;AAEA;;AAED,MAAI0tG,OAAO,IAAIP,aAAJ,CAAmB6B,QAAnB,EAA6B5B,QAA7B,EAAuCC,MAAvC,CAAX;;AAEA,SAAOK,IAAP;AAEA;;AAlR4B,CAA9B;;AAsRAruG,OAAOK,MAAP,CAAeytG,cAAc/tG,SAA7B,EAAwC;;AAEvCkuG,gBAAe,YAAY;;AAE1B,MAAID,SAAS,KAAKA,MAAlB;AAAA,MAA0BD,WAAW,CAArC;;AAEA,OAAM,IAAI/rG,IAAI,CAAR,EAAWiK,IAAI+hG,OAAOrtG,MAA5B,EAAoCqB,MAAMiK,CAA1C,EAA6C,EAAGjK,CAAhD,EAAoD;;AAEnD,OAAIsqG,QAAQ,KAAK0B,MAAL,CAAahsG,CAAb,CAAZ;;AAEA+rG,cAAWzuG,KAAKyM,GAAL,CAAUgiG,QAAV,EAAoBzB,MAAMzF,KAAN,CAAayF,MAAMzF,KAAN,CAAYlmG,MAAZ,GAAqB,CAAlC,CAApB,CAAX;AAEA;;AAED,OAAKotG,QAAL,GAAgBA,QAAhB;AAEA,EAhBsC;;AAkBvCx4C,OAAM,YAAY;;AAEjB,OAAM,IAAIvzD,IAAI,CAAd,EAAiBA,IAAI,KAAKgsG,MAAL,CAAYrtG,MAAjC,EAAyCqB,GAAzC,EAAgD;;AAE/C,QAAKgsG,MAAL,CAAahsG,CAAb,EAAiBuzD,IAAjB,CAAuB,CAAvB,EAA0B,KAAKw4C,QAA/B;AAEA;;AAED,SAAO,IAAP;AAEA,EA5BsC;;AA8BvC5B,WAAU,YAAY;;AAErB,OAAM,IAAInqG,IAAI,CAAd,EAAiBA,IAAI,KAAKgsG,MAAL,CAAYrtG,MAAjC,EAAyCqB,GAAzC,EAAgD;;AAE/C,QAAKgsG,MAAL,CAAahsG,CAAb,EAAiBmqG,QAAjB;AAEA;;AAED,SAAO,IAAP;AAEA;;AAxCsC,CAAxC;;AA4CA;;;;AAIA,SAAS+D,cAAT,CAAyBnV,OAAzB,EAAmC;;AAElC,MAAKA,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;AACA,MAAKx0E,QAAL,GAAgB,EAAhB;AAEA;;AAEDpmB,OAAOK,MAAP,CAAe6vG,eAAenwG,SAA9B,EAAyC;;AAExCi7F,OAAM,UAAW1zE,GAAX,EAAgBwyE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA8C;;AAEnD,MAAI/uE,QAAQ,IAAZ;;AAEA,MAAIiyE,SAAS,IAAIpC,UAAJ,CAAgB7vE,MAAM8vE,OAAtB,CAAb;AACAmC,SAAOlC,IAAP,CAAa1zE,GAAb,EAAkB,UAAWouE,IAAX,EAAkB;;AAEnCoE,UAAQ7uE,MAAMke,KAAN,CAAad,KAAKc,KAAL,CAAYusD,IAAZ,CAAb,CAAR;AAEA,GAJD,EAIGqE,UAJH,EAIeC,OAJf;AAMA,EAbuC;;AAexCmW,cAAa,UAAW1wG,KAAX,EAAmB;;AAE/B,OAAK2mB,QAAL,GAAgB3mB,KAAhB;AAEA,EAnBuC;;AAqBxC0pC,QAAO,UAAW82D,IAAX,EAAkB;;AAExB,MAAI75E,WAAW,KAAKA,QAApB;;AAEA,WAASgqF,UAAT,CAAqBlrF,IAArB,EAA4B;;AAE3B,OAAKkB,SAAUlB,IAAV,MAAqB7lB,SAA1B,EAAsC;;AAErCyP,YAAQC,IAAR,CAAc,yCAAd,EAAyDmW,IAAzD;AAEA;;AAED,UAAOkB,SAAUlB,IAAV,CAAP;AAEA;;AAED,MAAI0jB,WAAW,IAAI6wD,UAAWwG,KAAK/+F,IAAhB,CAAJ,EAAf;;AAEA,MAAK++F,KAAKt0F,IAAL,KAActM,SAAnB,EAA+BupC,SAASj9B,IAAT,GAAgBs0F,KAAKt0F,IAArB;AAC/B,MAAKs0F,KAAK/6E,IAAL,KAAc7lB,SAAnB,EAA+BupC,SAAS1jB,IAAT,GAAgB+6E,KAAK/6E,IAArB;AAC/B,MAAK+6E,KAAKnmE,KAAL,KAAez6B,SAApB,EAAgCupC,SAAS9O,KAAT,CAAeV,MAAf,CAAuB6mE,KAAKnmE,KAA5B;AAChC,MAAKmmE,KAAK//D,SAAL,KAAmB7gC,SAAxB,EAAoCupC,SAAS1I,SAAT,GAAqB+/D,KAAK//D,SAA1B;AACpC,MAAK+/D,KAAK9/D,SAAL,KAAmB9gC,SAAxB,EAAoCupC,SAASzI,SAAT,GAAqB8/D,KAAK9/D,SAA1B;AACpC,MAAK8/D,KAAKpgE,QAAL,KAAkBxgC,SAAvB,EAAmCupC,SAAS/I,QAAT,CAAkBzG,MAAlB,CAA0B6mE,KAAKpgE,QAA/B;AACnC,MAAKogE,KAAKlgE,QAAL,KAAkB1gC,SAAvB,EAAmCupC,SAAS7I,QAAT,CAAkB3G,MAAlB,CAA0B6mE,KAAKlgE,QAA/B;AACnC,MAAKkgE,KAAKjgE,SAAL,KAAmB3gC,SAAxB,EAAoCupC,SAAS5I,SAAT,GAAqBigE,KAAKjgE,SAA1B;AACpC,MAAKigE,KAAK9+D,SAAL,KAAmB9hC,SAAxB,EAAoCupC,SAASzH,SAAT,GAAqB8+D,KAAK9+D,SAA1B;AACpC,MAAK8+D,KAAK7+D,kBAAL,KAA4B/hC,SAAjC,EAA6CupC,SAASxH,kBAAT,GAA8B6+D,KAAK7+D,kBAAnC;AAC7C,MAAK6+D,KAAKznE,QAAL,KAAkBn5B,SAAvB,EAAmCupC,SAASpQ,QAAT,GAAoBynE,KAAKznE,QAAzB;AACnC,MAAKynE,KAAKvgE,YAAL,KAAsBrgC,SAA3B,EAAuCupC,SAASlJ,YAAT,GAAwBugE,KAAKvgE,YAA7B;AACvC,MAAKugE,KAAKtgE,cAAL,KAAwBtgC,SAA7B,EAAyCupC,SAASjJ,cAAT,GAA0BsgE,KAAKtgE,cAA/B;AACzC,MAAKsgE,KAAKx1D,YAAL,KAAsBprC,SAA3B,EAAuCupC,SAAS6B,YAAT,GAAwBw1D,KAAKx1D,YAA7B;AACvC,MAAKw1D,KAAKviE,GAAL,KAAar+B,SAAlB,EAA8BupC,SAASlL,GAAT,GAAeuiE,KAAKviE,GAApB;AAC9B,MAAKuiE,KAAKhoD,WAAL,KAAqB54C,SAA1B,EAAsCupC,SAASqP,WAAT,GAAuBgoD,KAAKhoD,WAA5B;AACtC,MAAKgoD,KAAKloD,QAAL,KAAkB14C,SAAvB,EAAmCupC,SAASmP,QAAT,GAAoBkoD,KAAKloD,QAAzB;AACnC,MAAKkoD,KAAKjoD,IAAL,KAAc34C,SAAnB,EAA+BupC,SAASoP,IAAT,GAAgBioD,KAAKjoD,IAArB;AAC/B,MAAKioD,KAAK3kE,OAAL,KAAiBj8B,SAAtB,EAAkCupC,SAAStN,OAAT,GAAmB2kE,KAAK3kE,OAAxB;AAClC,MAAK2kE,KAAK/nD,WAAL,KAAqB74C,SAA1B,EAAsCupC,SAASsP,WAAT,GAAuB+nD,KAAK/nD,WAA5B;AACtC,MAAK+nD,KAAK5mD,SAAL,KAAmBh6C,SAAxB,EAAoCupC,SAASyQ,SAAT,GAAqB4mD,KAAK5mD,SAA1B;AACpC,MAAK4mD,KAAKvnD,SAAL,KAAmBr5C,SAAxB,EAAoCupC,SAAS8P,SAAT,GAAqBunD,KAAKvnD,SAA1B;AACpC,MAAKunD,KAAKtnD,UAAL,KAAoBt5C,SAAzB,EAAqCupC,SAAS+P,UAAT,GAAsBsnD,KAAKtnD,UAA3B;AACrC,MAAKsnD,KAAKjnD,UAAL,KAAoB35C,SAAzB,EAAqCupC,SAASoQ,UAAT,GAAsBinD,KAAKjnD,UAA3B;AACrC,MAAKinD,KAAK/lD,SAAL,KAAmB76C,SAAxB,EAAoCupC,SAASsR,SAAT,GAAqB+lD,KAAK/lD,SAA1B;AACpC,MAAK+lD,KAAK9lD,kBAAL,KAA4B96C,SAAjC,EAA6CupC,SAASuR,kBAAT,GAA8B8lD,KAAK9lD,kBAAnC;AAC7C,MAAK8lD,KAAK7lD,gBAAL,KAA0B/6C,SAA/B,EAA2CupC,SAASwR,gBAAT,GAA4B6lD,KAAK7lD,gBAAjC;AAC3C,MAAK6lD,KAAK5lD,iBAAL,KAA2Bh7C,SAAhC,EAA4CupC,SAASyR,iBAAT,GAA6B4lD,KAAK5lD,iBAAlC;;AAE5C,MAAK4lD,KAAK/7E,QAAL,KAAkB7kB,SAAvB,EAAmCupC,SAAS1kB,QAAT,GAAoB+7E,KAAK/7E,QAAzB;;AAEnC,MAAK+7E,KAAKjmD,SAAL,KAAmB,CAAxB,EAA4BpR,SAASoR,SAAT,GAAqBimD,KAAKjmD,SAA1B;AAC5B,MAAKimD,KAAK3/D,QAAL,KAAkBjhC,SAAvB,EAAmCupC,SAAStI,QAAT,GAAoB2/D,KAAK3/D,QAAzB;AACnC,MAAK2/D,KAAKhmD,OAAL,KAAiB56C,SAAtB,EAAkCupC,SAASqR,OAAT,GAAmBgmD,KAAKhmD,OAAxB;AAClC,MAAKgmD,KAAK5lF,KAAL,KAAehb,SAApB,EAAgCupC,SAASvuB,KAAT,GAAiB4lF,KAAK5lF,KAAtB;;AAEhC,MAAK4lF,KAAKhnD,aAAL,KAAuB55C,SAA5B,EAAwCupC,SAASqQ,aAAT,GAAyBgnD,KAAKhnD,aAA9B;AACxC,MAAKgnD,KAAK/mD,mBAAL,KAA6B75C,SAAlC,EAA8CupC,SAASsQ,mBAAT,GAA+B+mD,KAAK/mD,mBAApC;AAC9C,MAAK+mD,KAAK9mD,kBAAL,KAA4B95C,SAAjC,EAA6CupC,SAASuQ,kBAAT,GAA8B8mD,KAAK9mD,kBAAnC;;AAE7C,MAAK8mD,KAAK3lD,QAAL,KAAkBj7C,SAAvB,EAAmCupC,SAAS0R,QAAT,GAAoB2lD,KAAK3lD,QAAzB;AACnC,MAAK2lD,KAAKl1D,YAAL,KAAsB1rC,SAA3B,EAAuCupC,SAASmC,YAAT,GAAwBk1D,KAAKl1D,YAA7B;AACvC,MAAKk1D,KAAK7mD,SAAL,KAAmB/5C,SAAxB,EAAoCupC,SAASwQ,SAAT,GAAqB6mD,KAAK7mD,SAA1B;;AAEpC,MAAK6mD,KAAKv6D,OAAL,KAAiBrmC,SAAtB,EAAkCupC,SAASlD,OAAT,GAAmBu6D,KAAKv6D,OAAxB;AAClC,MAAKu6D,KAAKl6D,QAAL,KAAkB1mC,SAAvB,EAAmCupC,SAAS7C,QAAT,GAAoBk6D,KAAKl6D,QAAzB;;AAEnC;;AAEA,MAAKk6D,KAAKoQ,OAAL,KAAiBhxG,SAAtB,EAAkCupC,SAASqP,WAAT,GAAuBgoD,KAAKoQ,OAAL,KAAiB,CAAxC,CAnEV,CAmEqD;;AAE7E;;AAEA,MAAKpQ,KAAK51E,IAAL,KAAchrB,SAAnB,EAA+BupC,SAASve,IAAT,GAAgB41E,KAAK51E,IAArB;AAC/B,MAAK41E,KAAKlmD,eAAL,KAAyB16C,SAA9B,EAA0CupC,SAASmR,eAAT,GAA2BkmD,KAAKlmD,eAAhC;;AAE1C;;AAEA,MAAKkmD,KAAK1kE,GAAL,KAAal8B,SAAlB,EAA8BupC,SAASrN,GAAT,GAAe60E,WAAYnQ,KAAK1kE,GAAjB,CAAf;;AAE9B,MAAK0kE,KAAKxkE,QAAL,KAAkBp8B,SAAvB,EAAmC;;AAElCupC,YAASnN,QAAT,GAAoB20E,WAAYnQ,KAAKxkE,QAAjB,CAApB;AACAmN,YAASsP,WAAT,GAAuB,IAAvB;AAEA;;AAED,MAAK+nD,KAAKtjE,OAAL,KAAiBt9B,SAAtB,EAAkCupC,SAASjM,OAAT,GAAmByzE,WAAYnQ,KAAKtjE,OAAjB,CAAnB;AAClC,MAAKsjE,KAAKrjE,SAAL,KAAmBv9B,SAAxB,EAAoCupC,SAAShM,SAAT,GAAqBqjE,KAAKrjE,SAA1B;;AAEpC,MAAKqjE,KAAKnjE,SAAL,KAAmBz9B,SAAxB,EAAoCupC,SAAS9L,SAAT,GAAqBszE,WAAYnQ,KAAKnjE,SAAjB,CAArB;AACpC,MAAKmjE,KAAKljE,WAAL,KAAqB19B,SAA1B,EAAsC;;AAErC,OAAI09B,cAAckjE,KAAKljE,WAAvB;;AAEA,OAAKhE,MAAMC,OAAN,CAAe+D,WAAf,MAAiC,KAAtC,EAA8C;;AAE7C;;AAEAA,kBAAc,CAAEA,WAAF,EAAeA,WAAf,CAAd;AAEA;;AAED6L,YAAS7L,WAAT,GAAuB,IAAIlvB,OAAJ,GAAc6D,SAAd,CAAyBqrB,WAAzB,CAAvB;AAEA;;AAED,MAAKkjE,KAAKhjE,eAAL,KAAyB59B,SAA9B,EAA0CupC,SAAS3L,eAAT,GAA2BmzE,WAAYnQ,KAAKhjE,eAAjB,CAA3B;AAC1C,MAAKgjE,KAAK/iE,iBAAL,KAA2B79B,SAAhC,EAA4CupC,SAAS1L,iBAAT,GAA6B+iE,KAAK/iE,iBAAlC;AAC5C,MAAK+iE,KAAK9iE,gBAAL,KAA0B99B,SAA/B,EAA2CupC,SAASzL,gBAAT,GAA4B8iE,KAAK9iE,gBAAjC;;AAE3C,MAAK8iE,KAAK5iE,YAAL,KAAsBh+B,SAA3B,EAAuCupC,SAASvL,YAAT,GAAwB+yE,WAAYnQ,KAAK5iE,YAAjB,CAAxB;AACvC,MAAK4iE,KAAK1iE,YAAL,KAAsBl+B,SAA3B,EAAuCupC,SAASrL,YAAT,GAAwB6yE,WAAYnQ,KAAK1iE,YAAjB,CAAxB;;AAEvC,MAAK0iE,KAAKxjE,WAAL,KAAqBp9B,SAA1B,EAAsCupC,SAASnM,WAAT,GAAuB2zE,WAAYnQ,KAAKxjE,WAAjB,CAAvB;AACtC,MAAKwjE,KAAKnmD,iBAAL,KAA2Bz6C,SAAhC,EAA4CupC,SAASkR,iBAAT,GAA6BmmD,KAAKnmD,iBAAlC;;AAE5C,MAAKmmD,KAAKtkE,WAAL,KAAqBt8B,SAA1B,EAAsCupC,SAASjN,WAAT,GAAuBy0E,WAAYnQ,KAAKtkE,WAAjB,CAAvB;;AAEtC,MAAKskE,KAAKpkE,MAAL,KAAgBx8B,SAArB,EAAiCupC,SAAS/M,MAAT,GAAkBu0E,WAAYnQ,KAAKpkE,MAAjB,CAAlB;;AAEjC,MAAKokE,KAAKlkE,YAAL,KAAsB18B,SAA3B,EAAuCupC,SAAS7M,YAAT,GAAwBkkE,KAAKlkE,YAA7B;;AAEvC,MAAKkkE,KAAK3jE,QAAL,KAAkBj9B,SAAvB,EAAmCupC,SAAStM,QAAT,GAAoB8zE,WAAYnQ,KAAK3jE,QAAjB,CAApB;AACnC,MAAK2jE,KAAK1jE,iBAAL,KAA2Bl9B,SAAhC,EAA4CupC,SAASrM,iBAAT,GAA6B0jE,KAAK1jE,iBAAlC;;AAE5C,MAAK0jE,KAAK9jE,KAAL,KAAe98B,SAApB,EAAgCupC,SAASzM,KAAT,GAAiBi0E,WAAYnQ,KAAK9jE,KAAjB,CAAjB;AAChC,MAAK8jE,KAAK7jE,cAAL,KAAwB/8B,SAA7B,EAAyCupC,SAASxM,cAAT,GAA0B6jE,KAAK7jE,cAA/B;;AAEzC,MAAK6jE,KAAKxiE,WAAL,KAAqBp+B,SAA1B,EAAsCupC,SAASnL,WAAT,GAAuB2yE,WAAYnQ,KAAKxiE,WAAjB,CAAvB;;AAEtC,SAAOmL,QAAP;AAEA;;AAxJuC,CAAzC;;AA4JA;;;;AAIA,SAAS0nE,oBAAT,CAA+BvV,OAA/B,EAAyC;;AAExC,MAAKA,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;AAEA;;AAED56F,OAAOK,MAAP,CAAeiwG,qBAAqBvwG,SAApC,EAA+C;;AAE9Ci7F,OAAM,UAAW1zE,GAAX,EAAgBwyE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA8C;;AAEnD,MAAI/uE,QAAQ,IAAZ;;AAEA,MAAIiyE,SAAS,IAAIpC,UAAJ,CAAgB7vE,MAAM8vE,OAAtB,CAAb;AACAmC,SAAOlC,IAAP,CAAa1zE,GAAb,EAAkB,UAAWouE,IAAX,EAAkB;;AAEnCoE,UAAQ7uE,MAAMke,KAAN,CAAad,KAAKc,KAAL,CAAYusD,IAAZ,CAAb,CAAR;AAEA,GAJD,EAIGqE,UAJH,EAIeC,OAJf;AAMA,EAb6C;;AAe9C7wD,QAAO,UAAW82D,IAAX,EAAkB;;AAExB,MAAI70E,WAAW,IAAI6oB,cAAJ,EAAf;;AAEA,MAAIxzC,QAAQw/F,KAAK/2E,IAAL,CAAUzoB,KAAtB;;AAEA,MAAKA,UAAUpB,SAAf,EAA2B;;AAE1B,OAAIkxG,aAAa,IAAIC,aAAc/vG,MAAMS,IAApB,CAAJ,CAAgCT,MAAMqB,KAAtC,CAAjB;AACAspB,YAASipB,QAAT,CAAmB,IAAI7C,eAAJ,CAAqB++D,UAArB,EAAiC,CAAjC,CAAnB;AAEA;;AAED,MAAI/kF,aAAay0E,KAAK/2E,IAAL,CAAUsC,UAA3B;;AAEA,OAAM,IAAIyd,GAAV,IAAiBzd,UAAjB,EAA8B;;AAE7B,OAAI1Z,YAAY0Z,WAAYyd,GAAZ,CAAhB;AACA,OAAIsnE,aAAa,IAAIC,aAAc1+F,UAAU5Q,IAAxB,CAAJ,CAAoC4Q,UAAUhQ,KAA9C,CAAjB;;AAEAspB,YAASkpB,YAAT,CAAuBrL,GAAvB,EAA4B,IAAIuI,eAAJ,CAAqB++D,UAArB,EAAiCz+F,UAAU2/B,QAA3C,EAAqD3/B,UAAU4/B,UAA/D,CAA5B;AAEA;;AAED,MAAI9E,SAASqzD,KAAK/2E,IAAL,CAAU0jB,MAAV,IAAoBqzD,KAAK/2E,IAAL,CAAUunF,SAA9B,IAA2CxQ,KAAK/2E,IAAL,CAAUwnF,OAAlE;;AAEA,MAAK9jE,WAAWvtC,SAAhB,EAA4B;;AAE3B,QAAM,IAAI2C,IAAI,CAAR,EAAWiK,IAAI2gC,OAAOjsC,MAA5B,EAAoCqB,MAAMiK,CAA1C,EAA6C,EAAGjK,CAAhD,EAAoD;;AAEnD,QAAI6qC,QAAQD,OAAQ5qC,CAAR,CAAZ;;AAEAopB,aAASqpB,QAAT,CAAmB5H,MAAMje,KAAzB,EAAgCie,MAAMzzB,KAAtC,EAA6CyzB,MAAMtC,aAAnD;AAEA;AAED;;AAED,MAAIzZ,iBAAiBmvE,KAAK/2E,IAAL,CAAU4H,cAA/B;;AAEA,MAAKA,mBAAmBzxB,SAAxB,EAAoC;;AAEnC,OAAI6S,SAAS,IAAImC,OAAJ,EAAb;;AAEA,OAAKyc,eAAe5e,MAAf,KAA0B7S,SAA/B,EAA2C;;AAE1C6S,WAAOR,SAAP,CAAkBof,eAAe5e,MAAjC;AAEA;;AAEDkZ,YAAS0F,cAAT,GAA0B,IAAIvD,MAAJ,CAAYrb,MAAZ,EAAoB4e,eAAexN,MAAnC,CAA1B;AAEA;;AAED,SAAO8H,QAAP;AAEA;;AAvE6C,CAA/C;;AA2EA,IAAIolF,eAAe;AAClB1tE,YAAWA,SADO;AAElBE,aAAYA,UAFM;AAGlB;AACA6P,oBAAmB,OAAOA,iBAAP,KAA6B,WAA7B,GAA2CA,iBAA3C,GAA+D7P,UAJhE;AAKlBR,aAAYA,UALM;AAMlBF,cAAaA,WANK;AAOlBM,aAAYA,UAPM;AAQlBF,cAAaA,WARK;AASlBN,eAAcA,YATI;AAUlBC,eAAcA;AAVI,CAAnB;;AAaA;;;;AAIA,SAASsuE,MAAT,GAAkB,CAAE;;AAEpBA,OAAOC,QAAP,GAAkB;;AAEjBC,WAAU,EAFO;;AAIjBjiG,MAAK,UAAWkiG,KAAX,EAAkB5T,MAAlB,EAA2B;;AAE/B,OAAK2T,QAAL,CAActvG,IAAd,CAAoBuvG,KAApB,EAA2B5T,MAA3B;AAEA,EARgB;;AAUjBh9F,MAAK,UAAW05F,IAAX,EAAkB;;AAEtB,MAAIiX,WAAW,KAAKA,QAApB;;AAEA,OAAM,IAAI7uG,IAAI,CAAR,EAAWC,IAAI4uG,SAASlwG,MAA9B,EAAsCqB,IAAIC,CAA1C,EAA6CD,KAAK,CAAlD,EAAsD;;AAErD,OAAI8uG,QAAQD,SAAU7uG,CAAV,CAAZ;AACA,OAAIk7F,SAAS2T,SAAU7uG,IAAI,CAAd,CAAb;;AAEA,OAAK8uG,MAAMjsE,IAAN,CAAY+0D,IAAZ,CAAL,EAA0B;;AAEzB,WAAOsD,MAAP;AAEA;AAED;;AAED,SAAO,IAAP;AAEA;;AA7BgB,CAAlB;;AAiCAl9F,OAAOK,MAAP,CAAeswG,OAAO5wG,SAAtB,EAAiC;;AAEhC49F,cAAat+F,SAFmB;;AAIhC0xG,cAAa,YAAY,CAAE,CAJK;;AAMhCC,iBAAgB,YAAY,CAAE,CANE;;AAQhCC,iBAAgB,YAAY,CAAE,CARE;;AAUhCC,gBAAe,UAAW/oE,SAAX,EAAsBgpE,WAAtB,EAAmCxT,WAAnC,EAAiD;;AAE/D,MAAI77F,QAAQ,EAAZ;;AAEA,OAAM,IAAIE,IAAI,CAAd,EAAiBA,IAAImmC,UAAUxnC,MAA/B,EAAuC,EAAGqB,CAA1C,EAA8C;;AAE7CF,SAAOE,CAAP,IAAa,KAAKovG,cAAL,CAAqBjpE,UAAWnmC,CAAX,CAArB,EAAqCmvG,WAArC,EAAkDxT,WAAlD,CAAb;AAEA;;AAED,SAAO77F,KAAP;AAEA,EAtB+B;;AAwBhCsvG,iBAAkB,YAAY;;AAE7B,MAAIC,eAAe;AAClB7tG,eAAYA,UADM;AAElBC,mBAAgBA,cAFE;AAGlBC,qBAAkBA,gBAHA;AAIlBC,wBAAqBA,mBAJH;AAKlBC,qBAAkBA,gBALA;AAMlBC,mBAAgBA;AANE,GAAnB;;AASA,MAAIi2B,QAAQ,IAAIZ,KAAJ,EAAZ;AACA,MAAIo4E,gBAAgB,IAAIrT,aAAJ,EAApB;AACA,MAAIsT,iBAAiB,IAAIrB,cAAJ,EAArB;;AAEA,SAAO,SAASkB,cAAT,CAAyBllG,CAAzB,EAA4BilG,WAA5B,EAAyCxT,WAAzC,EAAuD;;AAE7D;;AAEA,OAAIv3E,WAAW,EAAf;;AAEA,YAAS+2E,WAAT,CAAsB9tC,IAAtB,EAA4B/pC,MAA5B,EAAoC3T,MAApC,EAA4CyV,IAA5C,EAAkDpC,UAAlD,EAA+D;;AAE9D,QAAIwsF,WAAWL,cAAc9hD,IAA7B;AACA,QAAI6tC,SAASyT,OAAOC,QAAP,CAAgB1wG,GAAhB,CAAqBsxG,QAArB,CAAb;;AAEA,QAAIjpF,OAAJ;;AAEA,QAAK20E,WAAW,IAAhB,EAAuB;;AAEtB30E,eAAU20E,OAAOlC,IAAP,CAAawW,QAAb,CAAV;AAEA,KAJD,MAIO;;AAENF,mBAAcxT,cAAd,CAA8BH,WAA9B;AACAp1E,eAAU+oF,cAActW,IAAd,CAAoBwW,QAApB,CAAV;AAEA;;AAED,QAAKlsF,WAAWjmB,SAAhB,EAA4B;;AAE3BkpB,aAAQjD,MAAR,CAAe5T,SAAf,CAA0B4T,MAA1B;;AAEA,SAAKA,OAAQ,CAAR,MAAgB,CAArB,EAAyBiD,QAAQ5D,KAAR,GAAgBre,cAAhB;AACzB,SAAKgf,OAAQ,CAAR,MAAgB,CAArB,EAAyBiD,QAAQ3D,KAAR,GAAgBte,cAAhB;AAEzB;;AAED,QAAKqL,WAAWtS,SAAhB,EAA4B;;AAE3BkpB,aAAQ5W,MAAR,CAAeD,SAAf,CAA0BC,MAA1B;AAEA;;AAED,QAAKyV,SAAS/nB,SAAd,EAA0B;;AAEzB,SAAK+nB,KAAM,CAAN,MAAc,QAAnB,EAA8BmB,QAAQ5D,KAAR,GAAgBre,cAAhB;AAC9B,SAAK8gB,KAAM,CAAN,MAAc,QAAnB,EAA8BmB,QAAQ5D,KAAR,GAAgBne,sBAAhB;;AAE9B,SAAK4gB,KAAM,CAAN,MAAc,QAAnB,EAA8BmB,QAAQ3D,KAAR,GAAgBte,cAAhB;AAC9B,SAAK8gB,KAAM,CAAN,MAAc,QAAnB,EAA8BmB,QAAQ3D,KAAR,GAAgBpe,sBAAhB;AAE9B;;AAED,QAAKwe,eAAe3lB,SAApB,EAAgC;;AAE/BkpB,aAAQvD,UAAR,GAAqBA,UAArB;AAEA;;AAED,QAAIrZ,OAAOX,MAAMI,YAAN,EAAX;;AAEAgb,aAAUza,IAAV,IAAmB4c,OAAnB;;AAEA,WAAO5c,IAAP;AAEA;;AAED;;AAEA,OAAIs0F,OAAO;AACVt0F,UAAMX,MAAMI,YAAN,EADI;AAEVlK,UAAM;AAFI,IAAX;;AAKA,QAAM,IAAIgkB,IAAV,IAAkBhZ,CAAlB,EAAsB;;AAErB,QAAIzM,QAAQyM,EAAGgZ,IAAH,CAAZ;;AAEA,YAASA,IAAT;;AAEC,UAAK,UAAL;AACA,UAAK,UAAL;AACA,UAAK,gBAAL;AACA,UAAK,cAAL;AACC;AACD,UAAK,SAAL;AACC+6E,WAAK/6E,IAAL,GAAYzlB,KAAZ;AACA;AACD,UAAK,UAAL;AACCwgG,WAAKloD,QAAL,GAAgBs5D,aAAc5xG,KAAd,CAAhB;AACA;AACD,UAAK,cAAL;AACA,UAAK,YAAL;AACCqP,cAAQC,IAAR,CAAc,8BAAd,EAA8CmW,IAA9C,EAAoD,yBAApD;AACA;AACD,UAAK,cAAL;AACC+6E,WAAKnmE,KAAL,GAAaA,MAAMpoB,SAAN,CAAiBjS,KAAjB,EAAyB+6B,MAAzB,EAAb;AACA;AACD,UAAK,eAAL;AACCylE,WAAKlgE,QAAL,GAAgBjG,MAAMpoB,SAAN,CAAiBjS,KAAjB,EAAyB+6B,MAAzB,EAAhB;AACA;AACD,UAAK,eAAL;AACCylE,WAAKpgE,QAAL,GAAgB/F,MAAMpoB,SAAN,CAAiBjS,KAAjB,EAAyB+6B,MAAzB,EAAhB;AACA;AACD,UAAK,cAAL;AACCylE,WAAKjgE,SAAL,GAAiBvgC,KAAjB;AACA;AACD,UAAK,SAAL;AACC,UAAKA,MAAMk8F,WAAN,OAAwB,OAA7B,EAAuCsE,KAAK/+F,IAAL,GAAY,mBAAZ;AACvC,UAAKzB,MAAMk8F,WAAN,OAAwB,OAA7B,EAAuCsE,KAAK/+F,IAAL,GAAY,mBAAZ;AACvC,UAAKzB,MAAMk8F,WAAN,OAAwB,UAA7B,EAA0CsE,KAAK/+F,IAAL,GAAY,sBAAZ;AAC1C;AACD,UAAK,YAAL;AACC++F,WAAK1kE,GAAL,GAAW4hE,YAAa19F,KAAb,EAAoByM,EAAEulG,gBAAtB,EAAwCvlG,EAAEwlG,gBAA1C,EAA4DxlG,EAAEylG,cAA9D,EAA8EzlG,EAAE0lG,oBAAhF,CAAX;AACA;AACD,UAAK,kBAAL;AACA,UAAK,kBAAL;AACA,UAAK,gBAAL;AACA,UAAK,sBAAL;AACC;AACD,UAAK,aAAL;AACC3R,WAAKxjE,WAAL,GAAmB0gE,YAAa19F,KAAb,EAAoByM,EAAE2lG,iBAAtB,EAAyC3lG,EAAE4lG,iBAA3C,EAA8D5lG,EAAE6lG,eAAhE,EAAiF7lG,EAAE8lG,qBAAnF,CAAnB;AACA;AACD,UAAK,mBAAL;AACA,UAAK,mBAAL;AACA,UAAK,iBAAL;AACA,UAAK,uBAAL;AACC;AACD,UAAK,UAAL;AACC/R,WAAK3jE,QAAL,GAAgB6gE,YAAa19F,KAAb,EAAoByM,EAAE+lG,cAAtB,EAAsC/lG,EAAEgmG,cAAxC,EAAwDhmG,EAAEimG,YAA1D,EAAwEjmG,EAAEkmG,kBAA1E,CAAhB;AACA;AACD,UAAK,gBAAL;AACA,UAAK,gBAAL;AACA,UAAK,cAAL;AACA,UAAK,oBAAL;AACC;AACD,UAAK,OAAL;AACCnS,WAAK9jE,KAAL,GAAaghE,YAAa19F,KAAb,EAAoByM,EAAEmmG,WAAtB,EAAmCnmG,EAAEomG,WAArC,EAAkDpmG,EAAEqmG,SAApD,EAA+DrmG,EAAEsmG,eAAjE,CAAb;AACA;AACD,UAAK,aAAL;AACA,UAAK,aAAL;AACA,UAAK,WAAL;AACA,UAAK,iBAAL;AACC;AACD,UAAK,SAAL;AACCvS,WAAKtjE,OAAL,GAAewgE,YAAa19F,KAAb,EAAoByM,EAAEumG,aAAtB,EAAqCvmG,EAAEwmG,aAAvC,EAAsDxmG,EAAEymG,WAAxD,EAAqEzmG,EAAE0mG,iBAAvE,CAAf;AACA;AACD,UAAK,cAAL;AACC3S,WAAKrjE,SAAL,GAAiBn9B,KAAjB;AACA;AACD,UAAK,eAAL;AACA,UAAK,eAAL;AACA,UAAK,aAAL;AACA,UAAK,mBAAL;AACC;AACD,UAAK,WAAL;AACCwgG,WAAKnjE,SAAL,GAAiBqgE,YAAa19F,KAAb,EAAoByM,EAAE2mG,eAAtB,EAAuC3mG,EAAE4mG,eAAzC,EAA0D5mG,EAAE6mG,aAA5D,EAA2E7mG,EAAE8mG,mBAA7E,CAAjB;AACA;AACD,UAAK,iBAAL;AACC/S,WAAKljE,WAAL,GAAmBt9B,KAAnB;AACA;AACD,UAAK,iBAAL;AACA,UAAK,iBAAL;AACA,UAAK,eAAL;AACA,UAAK,qBAAL;AACC;AACD,UAAK,aAAL;AACCwgG,WAAKtkE,WAAL,GAAmBwhE,YAAa19F,KAAb,EAAoByM,EAAE+mG,iBAAtB,EAAyC/mG,EAAEgnG,iBAA3C,EAA8DhnG,EAAEinG,eAAhE,EAAiFjnG,EAAEknG,qBAAnF,CAAnB;AACA;AACD,UAAK,mBAAL;AACA,UAAK,mBAAL;AACA,UAAK,iBAAL;AACA,UAAK,uBAAL;AACC;AACD,UAAK,cAAL;AACCnT,WAAK1iE,YAAL,GAAoB4/D,YAAa19F,KAAb,EAAoByM,EAAEmnG,kBAAtB,EAA0CnnG,EAAEonG,kBAA5C,EAAgEpnG,EAAEqnG,gBAAlE,EAAoFrnG,EAAEsnG,sBAAtF,CAApB;AACA;AACD,UAAK,oBAAL;AACA,UAAK,oBAAL;AACA,UAAK,kBAAL;AACA,UAAK,wBAAL;AACC;AACD,UAAK,cAAL;AACCvT,WAAK5iE,YAAL,GAAoB8/D,YAAa19F,KAAb,EAAoByM,EAAEunG,kBAAtB,EAA0CvnG,EAAEwnG,kBAA5C,EAAgExnG,EAAEynG,gBAAlE,EAAoFznG,EAAE0nG,sBAAtF,CAApB;AACA;AACD,UAAK,oBAAL;AACA,UAAK,oBAAL;AACA,UAAK,kBAAL;AACA,UAAK,wBAAL;AACC;AACD,UAAK,UAAL;AACC3T,WAAKxkE,QAAL,GAAgB0hE,YAAa19F,KAAb,EAAoByM,EAAE2nG,cAAtB,EAAsC3nG,EAAE4nG,cAAxC,EAAwD5nG,EAAE6nG,YAA1D,EAAwE7nG,EAAE8nG,kBAA1E,CAAhB;AACA;AACD,UAAK,gBAAL;AACA,UAAK,gBAAL;AACA,UAAK,cAAL;AACA,UAAK,oBAAL;AACC;AACD,UAAK,WAAL;AACC/T,WAAKjoD,IAAL,GAAY/0C,QAAZ;AACA;AACD,UAAK,aAAL;AACCg9F,WAAKjoD,IAAL,GAAY90C,UAAZ;AACA;AACD,UAAK,cAAL;AACC4L,cAAQC,IAAR,CAAc,uEAAd;AACAkxF,WAAK3kE,OAAL,GAAe77B,KAAf;AACA;AACD,UAAK,WAAL;AACA,UAAK,YAAL;AACA,UAAK,YAAL;AACA,UAAK,SAAL;AACA,UAAK,cAAL;AACA,UAAK,aAAL;AACA,UAAK,SAAL;AACA,UAAK,WAAL;AACCwgG,WAAM/6E,IAAN,IAAezlB,KAAf;AACA;AACD,UAAK,cAAL;AACC,UAAKA,UAAU,IAAf,EAAsBwgG,KAAKx1D,YAAL,GAAoBlnC,YAApB;AACtB,UAAK9D,UAAU,MAAf,EAAwBwgG,KAAKx1D,YAAL,GAAoBnnC,UAApB;AACxB;AACD;AACCwL,cAAQyD,KAAR,CAAe,0CAAf,EAA2D2S,IAA3D,EAAiEzlB,KAAjE;AACA;;AAlJF;AAsJA;;AAED,OAAKwgG,KAAK/+F,IAAL,KAAc,mBAAnB,EAAyC,OAAO++F,KAAKpgE,QAAZ;AACzC,OAAKogE,KAAK/+F,IAAL,KAAc,mBAAnB,EAAyC,OAAO++F,KAAKlgE,QAAZ;;AAEzC,OAAKkgE,KAAK3kE,OAAL,GAAe,CAApB,EAAwB2kE,KAAK/nD,WAAL,GAAmB,IAAnB;;AAExBq5D,kBAAepB,WAAf,CAA4B/pF,QAA5B;;AAEA,UAAOmrF,eAAepoE,KAAf,CAAsB82D,IAAtB,CAAP;AAEA,GA3OD;AA6OA,EA5Pe;;AAxBgB,CAAjC;;AAwRA;;;;AAIA,IAAIgU,cAAc;;AAEjBC,aAAY,UAAWpyG,KAAX,EAAmB;;AAE9B,MAAK,OAAOqyG,WAAP,KAAuB,WAA5B,EAA0C;;AAEzC,UAAO,IAAIA,WAAJ,GAAkBC,MAAlB,CAA0BtyG,KAA1B,CAAP;AAEA;;AAED;AACA;;AAEA,MAAIoN,IAAI,EAAR;;AAEA,OAAM,IAAIlN,IAAI,CAAR,EAAWkoB,KAAKpoB,MAAMnB,MAA5B,EAAoCqB,IAAIkoB,EAAxC,EAA4CloB,GAA5C,EAAmD;;AAElD;AACAkN,QAAK0xC,OAAOyzD,YAAP,CAAqBvyG,MAAOE,CAAP,CAArB,CAAL;AAEA;;AAED;AACA,SAAOu5F,mBAAoB+Y,OAAQplG,CAAR,CAApB,CAAP;AAEA,EAzBgB;;AA2BjBqlG,iBAAgB,UAAWjtF,GAAX,EAAiB;;AAEhC,MAAI7mB,QAAQ6mB,IAAIktF,WAAJ,CAAiB,GAAjB,CAAZ;;AAEA,MAAK/zG,UAAU,CAAE,CAAjB,EAAqB,OAAO,IAAP;;AAErB,SAAO6mB,IAAIs2E,MAAJ,CAAY,CAAZ,EAAen9F,QAAQ,CAAvB,CAAP;AAEA;;AAnCgB,CAAlB;;AAuCA;;;;;AAKA,SAASg0G,UAAT,CAAqB1Z,OAArB,EAA+B;;AAE9B,KAAK,OAAOA,OAAP,KAAmB,SAAxB,EAAoC;;AAEnCjsF,UAAQC,IAAR,CAAc,2EAAd;AACAgsF,YAAU17F,SAAV;AAEA;;AAED,MAAK07F,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;;AAEA,MAAK0B,eAAL,GAAuB,KAAvB;AAEA;;AAEDt8F,OAAOK,MAAP,CAAeo0G,WAAW10G,SAA1B,EAAqC;;AAEpCi7F,OAAM,UAAW1zE,GAAX,EAAgBwyE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA8C;;AAEnD,MAAI/uE,QAAQ,IAAZ;;AAEA,MAAIkmF,cAAc,KAAKA,WAAL,IAAsB,OAAO,KAAKA,WAAZ,KAA4B,QAAlD,GAA+D,KAAKA,WAApE,GAAkF8C,YAAYM,cAAZ,CAA4BjtF,GAA5B,CAApG;;AAEA,MAAI41E,SAAS,IAAIpC,UAAJ,CAAgB,KAAKC,OAArB,CAAb;AACAmC,SAAOJ,kBAAP,CAA2B,KAAKR,eAAhC;AACAY,SAAOlC,IAAP,CAAa1zE,GAAb,EAAkB,UAAWouE,IAAX,EAAkB;;AAEnC,OAAIuK,OAAO53D,KAAKc,KAAL,CAAYusD,IAAZ,CAAX;AACA,OAAIxuE,WAAW+4E,KAAK/4E,QAApB;;AAEA,OAAKA,aAAa7nB,SAAlB,EAA8B;;AAE7B,QAAI6B,OAAOgmB,SAAShmB,IAApB;;AAEA,QAAKA,SAAS7B,SAAd,EAA0B;;AAEzB,SAAK6B,KAAKy6F,WAAL,OAAuB,QAA5B,EAAuC;;AAEtC7sF,cAAQyD,KAAR,CAAe,uBAAuB+U,GAAvB,GAA6B,oDAA5C;AACA;AAEA;AAED;AAED;;AAED,OAAIkD,SAASS,MAAMke,KAAN,CAAa82D,IAAb,EAAmBkR,WAAnB,CAAb;AACArX,UAAQtvE,OAAOY,QAAf,EAAyBZ,OAAO2d,SAAhC;AAEA,GAzBD,EAyBG4xD,UAzBH,EAyBeC,OAzBf;AA2BA,EArCmC;;AAuCpC0a,iBAAgB,UAAWj1G,KAAX,EAAmB;;AAElC,OAAK0xG,WAAL,GAAmB1xG,KAAnB;AAEA,EA3CmC;;AA6CpC0pC,QAAS,YAAY;;AAEpB,WAASwrE,UAAT,CAAqB1U,IAArB,EAA2B70E,QAA3B,EAAsC;;AAErC,YAASwpF,QAAT,CAAmBn1G,KAAnB,EAA0B6b,QAA1B,EAAqC;;AAEpC,WAAO7b,QAAU,KAAK6b,QAAtB;AAEA;;AAED,OAAItZ,CAAJ;AAAA,OAAO+qB,CAAP;AAAA,OAAU8nF,EAAV;AAAA,OAECljG,MAFD;AAAA,OAESmjG,OAFT;AAAA,OAICC,UAJD;AAAA,OAIaC,WAJb;AAAA,OAI0BC,OAJ1B;AAAA,OAImC1qE,aAJnC;AAAA,OAMCrpC,IAND;AAAA,OAOCg0G,MAPD;AAAA,OAQC9kE,WARD;AAAA,OASCE,eATD;AAAA,OAUCC,aAVD;AAAA,OAUgBC,mBAVhB;AAAA,OAWCC,YAXD;AAAA,OAWeC,kBAXf;AAAA,OAaC9E,MAbD;AAAA,OAaSC,IAbT;AAAA,OAaespE,KAbf;AAAA,OAasBC,KAbtB;AAAA,OAa6B97E,GAb7B;AAAA,OAakCvW,MAblC;AAAA,OAeCsyF,OAfD;AAAA,OAeU5tF,EAfV;AAAA,OAeciR,CAfd;AAAA,OAeiB/pB,CAfjB;AAAA,OAiBCk8B,QAAQo1D,KAAKp1D,KAjBd;AAAA,OAkBCvf,WAAW20E,KAAK30E,QAlBjB;AAAA,OAmBC8gB,UAAU6zD,KAAK7zD,OAnBhB;AAAA,OAoBCxB,SAASq1D,KAAKr1D,MApBf;AAAA,OAsBCvwB,QAAQ4lF,KAAK5lF,KAtBd;AAAA,OAwBCi7F,YAAY,CAxBb;;AA2BA,OAAKrV,KAAK5zD,GAAL,KAAahtC,SAAlB,EAA8B;;AAE7B;;AAEA,SAAM2C,IAAI,CAAV,EAAaA,IAAIi+F,KAAK5zD,GAAL,CAAS1rC,MAA1B,EAAkCqB,GAAlC,EAAyC;;AAExC,SAAKi+F,KAAK5zD,GAAL,CAAUrqC,CAAV,EAAcrB,MAAnB,EAA4B20G;AAE5B;;AAED,SAAMtzG,IAAI,CAAV,EAAaA,IAAIszG,SAAjB,EAA4BtzG,GAA5B,EAAmC;;AAElCopB,cAAS0f,aAAT,CAAwB9oC,CAAxB,IAA8B,EAA9B;AAEA;AAED;;AAED2P,YAAS,CAAT;AACAmjG,aAAUxpF,SAAS3qB,MAAnB;;AAEA,UAAQgR,SAASmjG,OAAjB,EAA2B;;AAE1BlpE,aAAS,IAAIv3B,OAAJ,EAAT;;AAEAu3B,WAAO/rC,CAAP,GAAWyrB,SAAU3Z,QAAV,IAAwB0I,KAAnC;AACAuxB,WAAOn/B,CAAP,GAAW6e,SAAU3Z,QAAV,IAAwB0I,KAAnC;AACAuxB,WAAOz3B,CAAP,GAAWmX,SAAU3Z,QAAV,IAAwB0I,KAAnC;;AAEA+Q,aAASE,QAAT,CAAkB/pB,IAAlB,CAAwBqqC,MAAxB;AAEA;;AAEDj6B,YAAS,CAAT;AACAmjG,aAAUjqE,MAAMlqC,MAAhB;;AAEA,UAAQgR,SAASmjG,OAAjB,EAA2B;;AAE1B5zG,WAAO2pC,MAAOl5B,QAAP,CAAP;;AAEAujG,aAASN,SAAU1zG,IAAV,EAAgB,CAAhB,CAAT;AACAkvC,kBAAcwkE,SAAU1zG,IAAV,EAAgB,CAAhB,CAAd;AACAovC,sBAAkBskE,SAAU1zG,IAAV,EAAgB,CAAhB,CAAlB;AACAqvC,oBAAgBqkE,SAAU1zG,IAAV,EAAgB,CAAhB,CAAhB;AACAsvC,0BAAsBokE,SAAU1zG,IAAV,EAAgB,CAAhB,CAAtB;AACAuvC,mBAAemkE,SAAU1zG,IAAV,EAAgB,CAAhB,CAAf;AACAwvC,yBAAqBkkE,SAAU1zG,IAAV,EAAgB,CAAhB,CAArB;;AAEA;;AAEA,QAAKg0G,MAAL,EAAc;;AAEbC,aAAQ,IAAI7qE,KAAJ,EAAR;AACA6qE,WAAMhmG,CAAN,GAAU07B,MAAOl5B,MAAP,CAAV;AACAwjG,WAAM/lG,CAAN,GAAUy7B,MAAOl5B,SAAS,CAAhB,CAAV;AACAwjG,WAAMhjG,CAAN,GAAU04B,MAAOl5B,SAAS,CAAhB,CAAV;;AAEAyjG,aAAQ,IAAI9qE,KAAJ,EAAR;AACA8qE,WAAMjmG,CAAN,GAAU07B,MAAOl5B,SAAS,CAAhB,CAAV;AACAyjG,WAAMhmG,CAAN,GAAUy7B,MAAOl5B,SAAS,CAAhB,CAAV;AACAyjG,WAAMjjG,CAAN,GAAU04B,MAAOl5B,SAAS,CAAhB,CAAV;;AAEAA,eAAU,CAAV;;AAEA,SAAKy+B,WAAL,EAAmB;;AAElB7F,sBAAgBM,MAAOl5B,QAAP,CAAhB;AACAwjG,YAAM5qE,aAAN,GAAsBA,aAAtB;AACA6qE,YAAM7qE,aAAN,GAAsBA,aAAtB;AAEA;;AAED;;AAEAsqE,UAAKzpF,SAASyf,KAAT,CAAelqC,MAApB;;AAEA,SAAK2vC,eAAL,EAAuB;;AAEtB,WAAMtuC,IAAI,CAAV,EAAaA,IAAIszG,SAAjB,EAA4BtzG,GAA5B,EAAmC;;AAElCqzG,iBAAUpV,KAAK5zD,GAAL,CAAUrqC,CAAV,CAAV;;AAEAopB,gBAAS0f,aAAT,CAAwB9oC,CAAxB,EAA6B6yG,EAA7B,IAAoC,EAApC;AACAzpF,gBAAS0f,aAAT,CAAwB9oC,CAAxB,EAA6B6yG,KAAK,CAAlC,IAAwC,EAAxC;;AAEA,YAAM9nF,IAAI,CAAV,EAAaA,IAAI,CAAjB,EAAoBA,GAApB,EAA2B;;AAE1BkoF,kBAAUpqE,MAAOl5B,QAAP,CAAV;;AAEA+mB,YAAI28E,QAASJ,UAAU,CAAnB,CAAJ;AACAtmG,YAAI0mG,QAASJ,UAAU,CAAV,GAAc,CAAvB,CAAJ;;AAEAxtF,aAAK,IAAI5Z,OAAJ,CAAa6qB,CAAb,EAAgB/pB,CAAhB,CAAL;;AAEA,YAAKoe,MAAM,CAAX,EAAe3B,SAAS0f,aAAT,CAAwB9oC,CAAxB,EAA6B6yG,EAA7B,EAAkCtzG,IAAlC,CAAwCkmB,EAAxC;AACf,YAAKsF,MAAM,CAAX,EAAe3B,SAAS0f,aAAT,CAAwB9oC,CAAxB,EAA6B6yG,KAAK,CAAlC,EAAsCtzG,IAAtC,CAA4CkmB,EAA5C;AAEf;AAED;AAED;;AAED,SAAK8oB,aAAL,EAAqB;;AAEpBykE,oBAAcnqE,MAAOl5B,QAAP,IAAqB,CAAnC;;AAEAwjG,YAAMpyF,MAAN,CAAahV,GAAb,CACCq+B,QAAS4oE,aAAT,CADD,EAEC5oE,QAAS4oE,aAAT,CAFD,EAGC5oE,QAAS4oE,WAAT,CAHD;;AAMAI,YAAMryF,MAAN,CAAarU,IAAb,CAAmBymG,MAAMpyF,MAAzB;AAEA;;AAED,SAAKytB,mBAAL,EAA2B;;AAE1B,WAAMxuC,IAAI,CAAV,EAAaA,IAAI,CAAjB,EAAoBA,GAApB,EAA2B;;AAE1BgzG,qBAAcnqE,MAAOl5B,QAAP,IAAqB,CAAnC;;AAEAoR,gBAAS,IAAI1O,OAAJ,CACR+3B,QAAS4oE,aAAT,CADQ,EAER5oE,QAAS4oE,aAAT,CAFQ,EAGR5oE,QAAS4oE,WAAT,CAHQ,CAAT;;AAOA,WAAKhzG,MAAM,CAAX,EAAemzG,MAAM3qE,aAAN,CAAoBjpC,IAApB,CAA0BwhB,MAA1B;AACf,WAAK/gB,MAAM,CAAX,EAAeozG,MAAM5qE,aAAN,CAAoBjpC,IAApB,CAA0BwhB,MAA1B;AAEf;AAED;;AAGD,SAAK0tB,YAAL,EAAoB;;AAEnBskE,mBAAalqE,MAAOl5B,QAAP,CAAb;AACA2nB,YAAMsR,OAAQmqE,UAAR,CAAN;;AAEAI,YAAMr7E,KAAN,CAAYV,MAAZ,CAAoBE,GAApB;AACA87E,YAAMt7E,KAAN,CAAYV,MAAZ,CAAoBE,GAApB;AAEA;;AAGD,SAAKoX,kBAAL,EAA0B;;AAEzB,WAAM1uC,IAAI,CAAV,EAAaA,IAAI,CAAjB,EAAoBA,GAApB,EAA2B;;AAE1B+yG,oBAAalqE,MAAOl5B,QAAP,CAAb;AACA2nB,aAAMsR,OAAQmqE,UAAR,CAAN;;AAEA,WAAK/yG,MAAM,CAAX,EAAemzG,MAAM1qE,YAAN,CAAmBlpC,IAAnB,CAAyB,IAAI23B,KAAJ,CAAWI,GAAX,CAAzB;AACf,WAAKt3B,MAAM,CAAX,EAAeozG,MAAM3qE,YAAN,CAAmBlpC,IAAnB,CAAyB,IAAI23B,KAAJ,CAAWI,GAAX,CAAzB;AAEf;AAED;;AAEDlO,cAASyf,KAAT,CAAetpC,IAAf,CAAqB4zG,KAArB;AACA/pF,cAASyf,KAAT,CAAetpC,IAAf,CAAqB6zG,KAArB;AAEA,KApHD,MAoHO;;AAENvpE,YAAO,IAAIvB,KAAJ,EAAP;AACAuB,UAAK18B,CAAL,GAAS07B,MAAOl5B,QAAP,CAAT;AACAk6B,UAAKz8B,CAAL,GAASy7B,MAAOl5B,QAAP,CAAT;AACAk6B,UAAK15B,CAAL,GAAS04B,MAAOl5B,QAAP,CAAT;;AAEA,SAAKy+B,WAAL,EAAmB;;AAElB7F,sBAAgBM,MAAOl5B,QAAP,CAAhB;AACAk6B,WAAKtB,aAAL,GAAqBA,aAArB;AAEA;;AAED;;AAEAsqE,UAAKzpF,SAASyf,KAAT,CAAelqC,MAApB;;AAEA,SAAK2vC,eAAL,EAAuB;;AAEtB,WAAMtuC,IAAI,CAAV,EAAaA,IAAIszG,SAAjB,EAA4BtzG,GAA5B,EAAmC;;AAElCqzG,iBAAUpV,KAAK5zD,GAAL,CAAUrqC,CAAV,CAAV;;AAEAopB,gBAAS0f,aAAT,CAAwB9oC,CAAxB,EAA6B6yG,EAA7B,IAAoC,EAApC;;AAEA,YAAM9nF,IAAI,CAAV,EAAaA,IAAI,CAAjB,EAAoBA,GAApB,EAA2B;;AAE1BkoF,kBAAUpqE,MAAOl5B,QAAP,CAAV;;AAEA+mB,YAAI28E,QAASJ,UAAU,CAAnB,CAAJ;AACAtmG,YAAI0mG,QAASJ,UAAU,CAAV,GAAc,CAAvB,CAAJ;;AAEAxtF,aAAK,IAAI5Z,OAAJ,CAAa6qB,CAAb,EAAgB/pB,CAAhB,CAAL;;AAEAyc,iBAAS0f,aAAT,CAAwB9oC,CAAxB,EAA6B6yG,EAA7B,EAAkCtzG,IAAlC,CAAwCkmB,EAAxC;AAEA;AAED;AAED;;AAED,SAAK8oB,aAAL,EAAqB;;AAEpBykE,oBAAcnqE,MAAOl5B,QAAP,IAAqB,CAAnC;;AAEAk6B,WAAK9oB,MAAL,CAAYhV,GAAZ,CACCq+B,QAAS4oE,aAAT,CADD,EAEC5oE,QAAS4oE,aAAT,CAFD,EAGC5oE,QAAS4oE,WAAT,CAHD;AAMA;;AAED,SAAKxkE,mBAAL,EAA2B;;AAE1B,WAAMxuC,IAAI,CAAV,EAAaA,IAAI,CAAjB,EAAoBA,GAApB,EAA2B;;AAE1BgzG,qBAAcnqE,MAAOl5B,QAAP,IAAqB,CAAnC;;AAEAoR,gBAAS,IAAI1O,OAAJ,CACR+3B,QAAS4oE,aAAT,CADQ,EAER5oE,QAAS4oE,aAAT,CAFQ,EAGR5oE,QAAS4oE,WAAT,CAHQ,CAAT;;AAMAnpE,YAAKrB,aAAL,CAAmBjpC,IAAnB,CAAyBwhB,MAAzB;AAEA;AAED;;AAGD,SAAK0tB,YAAL,EAAoB;;AAEnBskE,mBAAalqE,MAAOl5B,QAAP,CAAb;AACAk6B,WAAK/R,KAAL,CAAWV,MAAX,CAAmBwR,OAAQmqE,UAAR,CAAnB;AAEA;;AAGD,SAAKrkE,kBAAL,EAA0B;;AAEzB,WAAM1uC,IAAI,CAAV,EAAaA,IAAI,CAAjB,EAAoBA,GAApB,EAA2B;;AAE1B+yG,oBAAalqE,MAAOl5B,QAAP,CAAb;AACAk6B,YAAKpB,YAAL,CAAkBlpC,IAAlB,CAAwB,IAAI23B,KAAJ,CAAW0R,OAAQmqE,UAAR,CAAX,CAAxB;AAEA;AAED;;AAED3pF,cAASyf,KAAT,CAAetpC,IAAf,CAAqBsqC,IAArB;AAEA;AAED;AAED;;AAED,WAAS0pE,SAAT,CAAoBtV,IAApB,EAA0B70E,QAA1B,EAAqC;;AAEpC,OAAIoqF,sBAAwBvV,KAAKuV,mBAAL,KAA6Bn2G,SAA/B,GAA6C4gG,KAAKuV,mBAAlD,GAAwE,CAAlG;;AAEA,OAAKvV,KAAKh1D,WAAV,EAAwB;;AAEvB,SAAM,IAAIjpC,IAAI,CAAR,EAAWC,IAAIg+F,KAAKh1D,WAAL,CAAiBtqC,MAAtC,EAA8CqB,IAAIC,CAAlD,EAAqDD,KAAKwzG,mBAA1D,EAAgF;;AAE/E,SAAI31G,IAAIogG,KAAKh1D,WAAL,CAAkBjpC,CAAlB,CAAR;AACA,SAAIyK,IAAM+oG,sBAAsB,CAAxB,GAA8BvV,KAAKh1D,WAAL,CAAkBjpC,IAAI,CAAtB,CAA9B,GAA0D,CAAlE;AACA,SAAImS,IAAMqhG,sBAAsB,CAAxB,GAA8BvV,KAAKh1D,WAAL,CAAkBjpC,IAAI,CAAtB,CAA9B,GAA0D,CAAlE;AACA,SAAI6M,IAAM2mG,sBAAsB,CAAxB,GAA8BvV,KAAKh1D,WAAL,CAAkBjpC,IAAI,CAAtB,CAA9B,GAA0D,CAAlE;;AAEAopB,cAAS6f,WAAT,CAAqB1pC,IAArB,CAA2B,IAAImmB,OAAJ,CAAa7nB,CAAb,EAAgB4M,CAAhB,EAAmB0H,CAAnB,EAAsBtF,CAAtB,CAA3B;AAEA;AAED;;AAED,OAAKoxF,KAAK/0D,WAAV,EAAwB;;AAEvB,SAAM,IAAIlpC,IAAI,CAAR,EAAWC,IAAIg+F,KAAK/0D,WAAL,CAAiBvqC,MAAtC,EAA8CqB,IAAIC,CAAlD,EAAqDD,KAAKwzG,mBAA1D,EAAgF;;AAE/E,SAAIrmG,IAAI8wF,KAAK/0D,WAAL,CAAkBlpC,CAAlB,CAAR;AACA,SAAIoN,IAAMomG,sBAAsB,CAAxB,GAA8BvV,KAAK/0D,WAAL,CAAkBlpC,IAAI,CAAtB,CAA9B,GAA0D,CAAlE;AACA,SAAImQ,IAAMqjG,sBAAsB,CAAxB,GAA8BvV,KAAK/0D,WAAL,CAAkBlpC,IAAI,CAAtB,CAA9B,GAA0D,CAAlE;AACA,SAAI4S,IAAM4gG,sBAAsB,CAAxB,GAA8BvV,KAAK/0D,WAAL,CAAkBlpC,IAAI,CAAtB,CAA9B,GAA0D,CAAlE;;AAEAopB,cAAS8f,WAAT,CAAqB3pC,IAArB,CAA2B,IAAImmB,OAAJ,CAAavY,CAAb,EAAgBC,CAAhB,EAAmB+C,CAAnB,EAAsByC,CAAtB,CAA3B;AAEA;AAED;;AAEDwW,YAASssC,KAAT,GAAiBuoC,KAAKvoC,KAAtB;;AAEA,OAAKtsC,SAASssC,KAAT,IAAkBtsC,SAASssC,KAAT,CAAe/2D,MAAf,GAAwB,CAA1C,KAAiDyqB,SAAS6f,WAAT,CAAqBtqC,MAArB,KAAgCyqB,SAAS8f,WAAT,CAAqBvqC,MAArD,IAA+DyqB,SAAS8f,WAAT,CAAqBvqC,MAArB,KAAgCyqB,SAASE,QAAT,CAAkB3qB,MAAlK,CAAL,EAAkL;;AAEjLmO,YAAQC,IAAR,CAAc,wCAAwCqc,SAASE,QAAT,CAAkB3qB,MAA1D,GAAmE,kBAAnE,GACbyqB,SAAS8f,WAAT,CAAqBvqC,MADR,GACiB,sBADjB,GAC0CyqB,SAAS6f,WAAT,CAAqBtqC,MAD/D,GACwE,iBADtF;AAGA;AAED;;AAED,WAAS80G,aAAT,CAAwBxV,IAAxB,EAA8B70E,QAA9B,EAAyC;;AAExC,OAAI/Q,QAAQ4lF,KAAK5lF,KAAjB;;AAEA,OAAK4lF,KAAKl1D,YAAL,KAAsB1rC,SAA3B,EAAuC;;AAEtC,SAAM,IAAI2C,IAAI,CAAR,EAAWC,IAAIg+F,KAAKl1D,YAAL,CAAkBpqC,MAAvC,EAA+CqB,IAAIC,CAAnD,EAAsDD,GAAtD,EAA6D;;AAE5DopB,cAAS2f,YAAT,CAAuB/oC,CAAvB,IAA6B,EAA7B;AACAopB,cAAS2f,YAAT,CAAuB/oC,CAAvB,EAA2BkjB,IAA3B,GAAkC+6E,KAAKl1D,YAAL,CAAmB/oC,CAAnB,EAAuBkjB,IAAzD;AACAkG,cAAS2f,YAAT,CAAuB/oC,CAAvB,EAA2BspB,QAA3B,GAAsC,EAAtC;;AAEA,SAAIoqF,cAActqF,SAAS2f,YAAT,CAAuB/oC,CAAvB,EAA2BspB,QAA7C;AACA,SAAIqqF,cAAc1V,KAAKl1D,YAAL,CAAmB/oC,CAAnB,EAAuBspB,QAAzC;;AAEA,UAAM,IAAI3c,IAAI,CAAR,EAAW4+B,KAAKooE,YAAYh1G,MAAlC,EAA0CgO,IAAI4+B,EAA9C,EAAkD5+B,KAAK,CAAvD,EAA2D;;AAE1D,UAAIi9B,SAAS,IAAIv3B,OAAJ,EAAb;AACAu3B,aAAO/rC,CAAP,GAAW81G,YAAahnG,CAAb,IAAmB0L,KAA9B;AACAuxB,aAAOn/B,CAAP,GAAWkpG,YAAahnG,IAAI,CAAjB,IAAuB0L,KAAlC;AACAuxB,aAAOz3B,CAAP,GAAWwhG,YAAahnG,IAAI,CAAjB,IAAuB0L,KAAlC;;AAEAq7F,kBAAYn0G,IAAZ,CAAkBqqC,MAAlB;AAEA;AAED;AAED;;AAED,OAAKq0D,KAAK2V,WAAL,KAAqBv2G,SAArB,IAAkC4gG,KAAK2V,WAAL,CAAiBj1G,MAAjB,GAA0B,CAAjE,EAAqE;;AAEpEmO,YAAQC,IAAR,CAAc,iFAAd;;AAEA,QAAI87B,QAAQzf,SAASyf,KAArB;AACA,QAAI+qE,cAAc3V,KAAK2V,WAAL,CAAkB,CAAlB,EAAsBhrE,MAAxC;;AAEA,SAAM,IAAI5oC,IAAI,CAAR,EAAWC,IAAI4oC,MAAMlqC,MAA3B,EAAmCqB,IAAIC,CAAvC,EAA0CD,GAA1C,EAAiD;;AAEhD6oC,WAAO7oC,CAAP,EAAW83B,KAAX,CAAiBpoB,SAAjB,CAA4BkkG,WAA5B,EAAyC5zG,IAAI,CAA7C;AAEA;AAED;AAED;;AAED,WAAS6zG,eAAT,CAA0B5V,IAA1B,EAAgC70E,QAAhC,EAA2C;;AAE1C,OAAI0qF,mBAAmB,EAAvB;;AAEA;AACA,OAAIhH,aAAa,EAAjB;;AAEA,OAAK7O,KAAKoP,SAAL,KAAmBhwG,SAAxB,EAAoC;;AAEnCyvG,eAAWvtG,IAAX,CAAiB0+F,KAAKoP,SAAtB;AAEA;;AAED,OAAKpP,KAAK6O,UAAL,KAAoBzvG,SAAzB,EAAqC;;AAEpC,QAAK4gG,KAAK6O,UAAL,CAAgBnuG,MAArB,EAA8B;;AAE7BmuG,kBAAaA,WAAWrd,MAAX,CAAmBwO,KAAK6O,UAAxB,CAAb;AAEA,KAJD,MAIO;;AAENA,gBAAWvtG,IAAX,CAAiB0+F,KAAK6O,UAAtB;AAEA;AAED;;AAED,QAAM,IAAI9sG,IAAI,CAAd,EAAiBA,IAAI8sG,WAAWnuG,MAAhC,EAAwCqB,GAAxC,EAA+C;;AAE9C,QAAIqsG,OAAOP,cAAcsB,cAAd,CAA8BN,WAAY9sG,CAAZ,CAA9B,EAA+CopB,SAASssC,KAAxD,CAAX;AACA,QAAK22C,IAAL,EAAYyH,iBAAiBv0G,IAAjB,CAAuB8sG,IAAvB;AAEZ;;AAED;AACA,OAAKjjF,SAAS2f,YAAd,EAA6B;;AAE5B;AACA,QAAIgrE,sBAAsBjI,cAAciB,mCAAd,CAAmD3jF,SAAS2f,YAA5D,EAA0E,EAA1E,CAA1B;AACA+qE,uBAAmBA,iBAAiBrkB,MAAjB,CAAyBskB,mBAAzB,CAAnB;AAEA;;AAED,OAAKD,iBAAiBn1G,MAAjB,GAA0B,CAA/B,EAAmCyqB,SAAS0jF,UAAT,GAAsBgH,gBAAtB;AAEnC;;AAED,SAAO,SAAS3sE,KAAT,CAAgB82D,IAAhB,EAAsBkR,WAAtB,EAAoC;;AAE1C,OAAKlR,KAAK/2E,IAAL,KAAc7pB,SAAnB,EAA+B;;AAE9B;AACA4gG,WAAOA,KAAK/2E,IAAZ;AAEA;;AAED,OAAK+2E,KAAK5lF,KAAL,KAAehb,SAApB,EAAgC;;AAE/B4gG,SAAK5lF,KAAL,GAAa,MAAM4lF,KAAK5lF,KAAxB;AAEA,IAJD,MAIO;;AAEN4lF,SAAK5lF,KAAL,GAAa,GAAb;AAEA;;AAED,OAAI+Q,WAAW,IAAIuf,QAAJ,EAAf;;AAEAgqE,cAAY1U,IAAZ,EAAkB70E,QAAlB;AACAmqF,aAAWtV,IAAX,EAAiB70E,QAAjB;AACAqqF,iBAAexV,IAAf,EAAqB70E,QAArB;AACAyqF,mBAAiB5V,IAAjB,EAAuB70E,QAAvB;;AAEAA,YAAS0hB,kBAAT;AACA1hB,YAAS2F,qBAAT;;AAEA,OAAKkvE,KAAK93D,SAAL,KAAmB9oC,SAAnB,IAAgC4gG,KAAK93D,SAAL,CAAexnC,MAAf,KAA0B,CAA/D,EAAmE;;AAElE,WAAO,EAAEyqB,UAAUA,QAAZ,EAAP;AAEA,IAJD,MAIO;;AAEN,QAAI+c,YAAYwoE,OAAO5wG,SAAP,CAAiBmxG,aAAjB,CAAgCjR,KAAK93D,SAArC,EAAgDgpE,WAAhD,EAA6D,KAAKxT,WAAlE,CAAhB;;AAEA,WAAO,EAAEvyE,UAAUA,QAAZ,EAAsB+c,WAAWA,SAAjC,EAAP;AAEA;AAED,GAzCD;AA2CA,EAteM;;AA7C6B,CAArC;;AAuhBA;;;;AAIA,SAAS6tE,YAAT,CAAuBjb,OAAvB,EAAiC;;AAEhC,MAAKA,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;AACA,MAAKuW,WAAL,GAAmB,EAAnB;AAEA;;AAEDnxG,OAAOK,MAAP,CAAe21G,aAAaj2G,SAA5B,EAAuC;;AAEtCi7F,OAAM,UAAW1zE,GAAX,EAAgBwyE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA8C;;AAEnD,MAAK,KAAKmX,WAAL,KAAqB,EAA1B,EAA+B;;AAE9B,QAAKA,WAAL,GAAmB7pF,IAAI2uF,SAAJ,CAAe,CAAf,EAAkB3uF,IAAIktF,WAAJ,CAAiB,GAAjB,IAAyB,CAA3C,CAAnB;AAEA;;AAED,MAAIvpF,QAAQ,IAAZ;;AAEA,MAAIiyE,SAAS,IAAIpC,UAAJ,CAAgB7vE,MAAM8vE,OAAtB,CAAb;AACAmC,SAAOlC,IAAP,CAAa1zE,GAAb,EAAkB,UAAWouE,IAAX,EAAkB;;AAEnC,OAAIuK,OAAO,IAAX;;AAEA,OAAI;;AAEHA,WAAO53D,KAAKc,KAAL,CAAYusD,IAAZ,CAAP;AAEA,IAJD,CAIE,OAAQnjF,KAAR,EAAgB;;AAEjB,QAAKynF,YAAY36F,SAAjB,EAA6B26F,QAASznF,KAAT;;AAE7BzD,YAAQyD,KAAR,CAAe,sCAAsC+U,GAAtC,GAA4C,GAA3D,EAAgE/U,MAAM4lE,OAAtE;;AAEA;AAEA;;AAED,OAAIjxD,WAAW+4E,KAAK/4E,QAApB;;AAEA,OAAKA,aAAa7nB,SAAb,IAA0B6nB,SAAShmB,IAAT,KAAkB7B,SAA5C,IAAyD6nB,SAAShmB,IAAT,CAAcy6F,WAAd,OAAgC,UAA9F,EAA2G;;AAE1G7sF,YAAQyD,KAAR,CAAe,qCAAqC+U,GAArC,GAA2C,iCAA1D;AACA;AAEA;;AAED2D,SAAMke,KAAN,CAAa82D,IAAb,EAAmBnG,MAAnB;AAEA,GA7BD,EA6BGC,UA7BH,EA6BeC,OA7Bf;AA+BA,EA5CqC;;AA8CtC0a,iBAAgB,UAAWj1G,KAAX,EAAmB;;AAElC,OAAK0xG,WAAL,GAAmB1xG,KAAnB;AAEA,EAlDqC;;AAoDtCq+F,iBAAgB,UAAWr+F,KAAX,EAAmB;;AAElC,OAAKk+F,WAAL,GAAmBl+F,KAAnB;AAEA,EAxDqC;;AA0DtC0pC,QAAO,UAAW82D,IAAX,EAAiBnG,MAAjB,EAA0B;;AAEhC,MAAI1xD,SAAS,KAAK8tE,UAAL,CAAiBjW,KAAK73D,MAAtB,CAAb;AACA,MAAIF,aAAa,KAAKiuE,eAAL,CAAsBlW,KAAK/3D,UAA3B,EAAuCE,MAAvC,CAAjB;;AAEA,MAAI/gB,SAAS,KAAK+uF,WAAL,CAAkBnW,KAAK54E,MAAvB,EAA+B,YAAY;;AAEvD,OAAKyyE,WAAWz6F,SAAhB,EAA4By6F,OAAQtvE,MAAR;AAE5B,GAJY,CAAb;;AAMA,MAAIpE,WAAW,KAAKiwF,aAAL,CAAoBpW,KAAK75E,QAAzB,EAAmCiB,MAAnC,CAAf;AACA,MAAI8gB,YAAY,KAAKmuE,cAAL,CAAqBrW,KAAK93D,SAA1B,EAAqC/hB,QAArC,CAAhB;;AAEA,MAAIoE,SAAS,KAAK+rF,WAAL,CAAkBtW,KAAKz1E,MAAvB,EAA+B0d,UAA/B,EAA2CC,SAA3C,CAAb;;AAEA,MAAK83D,KAAK6O,UAAV,EAAuB;;AAEtBtkF,UAAOskF,UAAP,GAAoB,KAAK+G,eAAL,CAAsB5V,KAAK6O,UAA3B,CAApB;AAEA;;AAED,MAAK7O,KAAK54E,MAAL,KAAgBhoB,SAAhB,IAA6B4gG,KAAK54E,MAAL,CAAY1mB,MAAZ,KAAuB,CAAzD,EAA6D;;AAE5D,OAAKm5F,WAAWz6F,SAAhB,EAA4By6F,OAAQtvE,MAAR;AAE5B;;AAED,SAAOA,MAAP;AAEA,EAxFqC;;AA0FtC0rF,aAAY,UAAWjW,IAAX,EAAkB;;AAE7B,MAAI73D,SAAS,EAAb;;AAEA,MAAK63D,SAAS5gG,SAAd,EAA0B;;AAEzB,QAAM,IAAI2C,IAAI,CAAR,EAAWC,IAAIg+F,KAAKt/F,MAA1B,EAAkCqB,IAAIC,CAAtC,EAAyCD,GAAzC,EAAgD;;AAE/C,QAAI2mC,QAAQ,IAAIm9D,KAAJ,GAAY9F,QAAZ,CAAsBC,KAAMj+F,CAAN,CAAtB,CAAZ;;AAEAomC,WAAQO,MAAMh9B,IAAd,IAAuBg9B,KAAvB;AAEA;AAED;;AAED,SAAOP,MAAP;AAEA,EA5GqC;;AA8GtC+tE,kBAAiB,UAAWlW,IAAX,EAAiB73D,MAAjB,EAA0B;;AAE1C,MAAIF,aAAa,EAAjB;;AAEA,MAAK+3D,SAAS5gG,SAAd,EAA0B;;AAEzB,OAAIm3G,iBAAiB,IAAI/B,UAAJ,EAArB;AACA,OAAIgC,uBAAuB,IAAInG,oBAAJ,EAA3B;;AAEA,QAAM,IAAItuG,IAAI,CAAR,EAAWC,IAAIg+F,KAAKt/F,MAA1B,EAAkCqB,IAAIC,CAAtC,EAAyCD,GAAzC,EAAgD;;AAE/C,QAAIopB,QAAJ;AACA,QAAIlC,OAAO+2E,KAAMj+F,CAAN,CAAX;;AAEA,YAASknB,KAAKhoB,IAAd;;AAEC,UAAK,eAAL;AACA,UAAK,qBAAL;;AAECkqB,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAKxC,KADK,EAEVwC,KAAKvC,MAFK,EAGVuC,KAAKitB,aAHK,EAIVjtB,KAAKktB,cAJK,CAAX;;AAOA;;AAED,UAAK,aAAL;AACA,UAAK,mBAAL;AACA,UAAK,cAAL;AAAqB;;AAEpBhrB,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAKxC,KADK,EAEVwC,KAAKvC,MAFK,EAGVuC,KAAKsX,KAHK,EAIVtX,KAAKitB,aAJK,EAKVjtB,KAAKktB,cALK,EAMVltB,KAAKmtB,aANK,CAAX;;AASA;;AAED,UAAK,gBAAL;AACA,UAAK,sBAAL;;AAECjrB,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAK5F,MADK,EAEV4F,KAAKguE,QAFK,EAGVhuE,KAAKgtE,UAHK,EAIVhtE,KAAKitE,WAJK,CAAX;;AAOA;;AAED,UAAK,kBAAL;AACA,UAAK,wBAAL;;AAEC/qE,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAKmvE,SADK,EAEVnvE,KAAKovE,YAFK,EAGVpvE,KAAKvC,MAHK,EAIVuC,KAAK+/D,cAJK,EAKV//D,KAAKktB,cALK,EAMVltB,KAAKqvE,SANK,EAOVrvE,KAAKgtE,UAPK,EAQVhtE,KAAKitE,WARK,CAAX;;AAWA;;AAED,UAAK,cAAL;AACA,UAAK,oBAAL;;AAEC/qE,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAK5F,MADK,EAEV4F,KAAKvC,MAFK,EAGVuC,KAAK+/D,cAHK,EAIV//D,KAAKktB,cAJK,EAKVltB,KAAKqvE,SALK,EAMVrvE,KAAKgtE,UANK,EAOVhtE,KAAKitE,WAPK,CAAX;;AAUA;;AAED,UAAK,gBAAL;AACA,UAAK,sBAAL;;AAEC/qE,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAK5F,MADK,EAEV4F,KAAKitB,aAFK,EAGVjtB,KAAKktB,cAHK,EAIVltB,KAAK8sE,QAJK,EAKV9sE,KAAK+sE,SALK,EAMV/sE,KAAKgtE,UANK,EAOVhtE,KAAKitE,WAPK,CAAX;;AAUA;;AAED,UAAK,sBAAL;AACA,UAAK,4BAAL;AACA,UAAK,qBAAL;AACA,UAAK,2BAAL;AACA,UAAK,oBAAL;AACA,UAAK,0BAAL;AACA,UAAK,qBAAL;AACA,UAAK,2BAAL;;AAEC/qE,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAK5F,MADK,EAEV4F,KAAKi+D,MAFK,CAAX;;AAKA;;AAED,UAAK,cAAL;AACA,UAAK,oBAAL;;AAEC/7D,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAKutE,WADK,EAEVvtE,KAAKwtE,WAFK,EAGVxtE,KAAKytE,aAHK,EAIVztE,KAAK0tE,WAJK,EAKV1tE,KAAKgtE,UALK,EAMVhtE,KAAKitE,WANK,CAAX;;AASA;;AAED,UAAK,eAAL;AACA,UAAK,qBAAL;;AAEC/qE,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAK5F,MADK,EAEV4F,KAAKghE,IAFK,EAGVhhE,KAAK+/D,cAHK,EAIV//D,KAAK8/D,eAJK,EAKV9/D,KAAK4hE,GALK,CAAX;;AAQA;;AAED,UAAK,mBAAL;AACA,UAAK,yBAAL;;AAEC1/D,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAK5F,MADK,EAEV4F,KAAKghE,IAFK,EAGVhhE,KAAK8/D,eAHK,EAIV9/D,KAAK+/D,cAJK,EAKV//D,KAAKvM,CALK,EAMVuM,KAAKtT,CANK,CAAX;;AASA;;AAED,UAAK,eAAL;AACA,UAAK,qBAAL;;AAECwV,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAKc,MADK,EAEVd,KAAKguE,QAFK,EAGVhuE,KAAK8sE,QAHK,EAIV9sE,KAAK+sE,SAJK,CAAX;;AAOA;;AAED,UAAK,oBAAL;AACA,UAAK,0BAAL;;AAEC7qE,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVgoB,KAAKoC,QADK,EAEVpC,KAAKgjB,OAFK,EAGVhjB,KAAK5F,MAHK,EAIV4F,KAAKwtF,OAJK,CAAX;;AAOA;;AAED,UAAK,eAAL;AACA,UAAK,qBAAL;;AAEC,UAAIC,iBAAiB,EAArB;;AAEA,WAAM,IAAI5pF,IAAI,CAAR,EAAW+e,KAAK5iB,KAAKkf,MAAL,CAAYznC,MAAlC,EAA0CosB,IAAI+e,EAA9C,EAAkD/e,GAAlD,EAAyD;;AAExD,WAAI4b,QAAQP,OAAQlf,KAAKkf,MAAL,CAAarb,CAAb,CAAR,CAAZ;;AAEA4pF,sBAAep1G,IAAf,CAAqBonC,KAArB;AAEA;;AAEDvd,iBAAW,IAAIkuE,WAAYpwE,KAAKhoB,IAAjB,CAAJ,CACVy1G,cADU,EAEVztF,KAAKinE,aAFK,CAAX;;AAKA;;AAED,UAAK,gBAAL;;AAEC/kE,iBAAWqrF,qBAAqBttE,KAArB,CAA4BjgB,IAA5B,CAAX;;AAEA;;AAED,UAAK,UAAL;;AAECkC,iBAAWorF,eAAertE,KAAf,CAAsBjgB,IAAtB,EAA4B,KAAKioF,WAAjC,EAA+C/lF,QAA1D;;AAEA;;AAED;;AAECtc,cAAQC,IAAR,CAAc,oDAAoDma,KAAKhoB,IAAzD,GAAgE,GAA9E;;AAEA;;AA5MF;;AAgNAkqB,aAASzf,IAAT,GAAgBud,KAAKvd,IAArB;;AAEA,QAAKud,KAAKhE,IAAL,KAAc7lB,SAAnB,EAA+B+rB,SAASlG,IAAT,GAAgBgE,KAAKhE,IAArB;;AAE/BgjB,eAAYhf,KAAKvd,IAAjB,IAA0Byf,QAA1B;AAEA;AAED;;AAED,SAAO8c,UAAP;AAEA,EAxVqC;;AA0VtCouE,iBAAgB,UAAWrW,IAAX,EAAiB75E,QAAjB,EAA4B;;AAE3C,MAAI+hB,YAAY,EAAhB;;AAEA,MAAK83D,SAAS5gG,SAAd,EAA0B;;AAEzB,OAAI69F,SAAS,IAAIgT,cAAJ,EAAb;AACAhT,UAAOiT,WAAP,CAAoB/pF,QAApB;;AAEA,QAAM,IAAIpkB,IAAI,CAAR,EAAWC,IAAIg+F,KAAKt/F,MAA1B,EAAkCqB,IAAIC,CAAtC,EAAyCD,GAAzC,EAAgD;;AAE/C,QAAIknB,OAAO+2E,KAAMj+F,CAAN,CAAX;;AAEA,QAAKknB,KAAKhoB,IAAL,KAAc,eAAnB,EAAqC;;AAEpC;;AAEA,SAAIY,QAAQ,EAAZ;;AAEA,UAAM,IAAIirB,IAAI,CAAd,EAAiBA,IAAI7D,KAAKif,SAAL,CAAexnC,MAApC,EAA4CosB,GAA5C,EAAmD;;AAElDjrB,YAAMP,IAAN,CAAY27F,OAAO/zD,KAAP,CAAcjgB,KAAKif,SAAL,CAAgBpb,CAAhB,CAAd,CAAZ;AAEA;;AAEDob,eAAWjf,KAAKvd,IAAhB,IAAyB7J,KAAzB;AAEA,KAdD,MAcO;;AAENqmC,eAAWjf,KAAKvd,IAAhB,IAAyBuxF,OAAO/zD,KAAP,CAAcjgB,IAAd,CAAzB;AAEA;AAED;AAED;;AAED,SAAOif,SAAP;AAEA,EAjYqC;;AAmYtC0tE,kBAAiB,UAAW5V,IAAX,EAAkB;;AAElC,MAAI6O,aAAa,EAAjB;;AAEA,OAAM,IAAI9sG,IAAI,CAAd,EAAiBA,IAAIi+F,KAAKt/F,MAA1B,EAAkCqB,GAAlC,EAAyC;;AAExC,OAAIqsG,OAAOP,cAAc3kE,KAAd,CAAqB82D,KAAMj+F,CAAN,CAArB,CAAX;;AAEA8sG,cAAWvtG,IAAX,CAAiB8sG,IAAjB;AAEA;;AAED,SAAOS,UAAP;AAEA,EAjZqC;;AAmZtCsH,cAAa,UAAWnW,IAAX,EAAiBnG,MAAjB,EAA0B;;AAEtC,MAAI7uE,QAAQ,IAAZ;AACA,MAAI5D,SAAS,EAAb;;AAEA,WAASuvF,SAAT,CAAoBtvF,GAApB,EAA0B;;AAEzB2D,SAAM8vE,OAAN,CAAcT,SAAd,CAAyBhzE,GAAzB;;AAEA,UAAO41E,OAAOlC,IAAP,CAAa1zE,GAAb,EAAkB,YAAY;;AAEpC2D,UAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AAEA,IAJM,EAIJjoB,SAJI,EAIO,YAAY;;AAEzB4rB,UAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AACA2D,UAAM8vE,OAAN,CAAcP,SAAd,CAAyBlzE,GAAzB;AAEA,IATM,CAAP;AAWA;;AAED,MAAK24E,SAAS5gG,SAAT,IAAsB4gG,KAAKt/F,MAAL,GAAc,CAAzC,EAA6C;;AAE5C,OAAIo6F,UAAU,IAAIlB,cAAJ,CAAoBC,MAApB,CAAd;;AAEA,OAAIoD,SAAS,IAAIQ,WAAJ,CAAiB3C,OAAjB,CAAb;AACAmC,UAAOY,cAAP,CAAuB,KAAKH,WAA5B;;AAEA,QAAM,IAAI37F,IAAI,CAAR,EAAWC,IAAIg+F,KAAKt/F,MAA1B,EAAkCqB,IAAIC,CAAtC,EAAyCD,GAAzC,EAAgD;;AAE/C,QAAIyiB,QAAQw7E,KAAMj+F,CAAN,CAAZ;AACA,QAAIqtD,OAAO,4BAA4BxqB,IAA5B,CAAkCpgB,MAAM6C,GAAxC,IAAgD7C,MAAM6C,GAAtD,GAA4D2D,MAAMkmF,WAAN,GAAoB1sF,MAAM6C,GAAjG;;AAEAD,WAAQ5C,MAAM9Y,IAAd,IAAuBirG,UAAWvnD,IAAX,CAAvB;AAEA;AAED;;AAED,SAAOhoC,MAAP;AAEA,EA7bqC;;AA+btCgvF,gBAAe,UAAWpW,IAAX,EAAiB54E,MAAjB,EAA0B;;AAExC,WAASwvF,aAAT,CAAwBp3G,KAAxB,EAA+ByB,IAA/B,EAAsC;;AAErC,OAAK,OAAOzB,KAAP,KAAiB,QAAtB,EAAiC,OAAOA,KAAP;;AAEjCqP,WAAQC,IAAR,CAAc,sEAAd,EAAsFtP,KAAtF;;AAEA,UAAOyB,KAAMzB,KAAN,CAAP;AAEA;;AAED,MAAI2mB,WAAW,EAAf;;AAEA,MAAK65E,SAAS5gG,SAAd,EAA0B;;AAEzB,QAAM,IAAI2C,IAAI,CAAR,EAAWC,IAAIg+F,KAAKt/F,MAA1B,EAAkCqB,IAAIC,CAAtC,EAAyCD,GAAzC,EAAgD;;AAE/C,QAAIknB,OAAO+2E,KAAMj+F,CAAN,CAAX;;AAEA,QAAKknB,KAAKzE,KAAL,KAAeplB,SAApB,EAAgC;;AAE/ByP,aAAQC,IAAR,CAAc,8CAAd,EAA8Dma,KAAKvd,IAAnE;AAEA;;AAED,QAAK0b,OAAQ6B,KAAKzE,KAAb,MAAyBplB,SAA9B,EAA0C;;AAEzCyP,aAAQC,IAAR,CAAc,qCAAd,EAAqDma,KAAKzE,KAA1D;AAEA;;AAED,QAAI8D,UAAU,IAAI/D,OAAJ,CAAa6C,OAAQ6B,KAAKzE,KAAb,CAAb,CAAd;AACA8D,YAAQqsB,WAAR,GAAsB,IAAtB;;AAEArsB,YAAQ5c,IAAR,GAAeud,KAAKvd,IAApB;;AAEA,QAAKud,KAAKhE,IAAL,KAAc7lB,SAAnB,EAA+BkpB,QAAQrD,IAAR,GAAegE,KAAKhE,IAApB;;AAE/B,QAAKgE,KAAKxE,OAAL,KAAiBrlB,SAAtB,EAAkCkpB,QAAQ7D,OAAR,GAAkBmyF,cAAe3tF,KAAKxE,OAApB,EAA6BoyF,eAA7B,CAAlB;;AAElC,QAAK5tF,KAAKvX,MAAL,KAAgBtS,SAArB,EAAiCkpB,QAAQ5W,MAAR,CAAeD,SAAf,CAA0BwX,KAAKvX,MAA/B;AACjC,QAAKuX,KAAK5D,MAAL,KAAgBjmB,SAArB,EAAiCkpB,QAAQjD,MAAR,CAAe5T,SAAf,CAA0BwX,KAAK5D,MAA/B;AACjC,QAAK4D,KAAKhX,MAAL,KAAgB7S,SAArB,EAAiCkpB,QAAQrW,MAAR,CAAeR,SAAf,CAA0BwX,KAAKhX,MAA/B;AACjC,QAAKgX,KAAKhF,QAAL,KAAkB7kB,SAAvB,EAAmCkpB,QAAQrE,QAAR,GAAmBgF,KAAKhF,QAAxB;;AAEnC,QAAKgF,KAAK9B,IAAL,KAAc/nB,SAAnB,EAA+B;;AAE9BkpB,aAAQ5D,KAAR,GAAgBkyF,cAAe3tF,KAAK9B,IAAL,CAAW,CAAX,CAAf,EAA+B2vF,gBAA/B,CAAhB;AACAxuF,aAAQ3D,KAAR,GAAgBiyF,cAAe3tF,KAAK9B,IAAL,CAAW,CAAX,CAAf,EAA+B2vF,gBAA/B,CAAhB;AAEA;;AAED,QAAK7tF,KAAKnE,MAAL,KAAgB1lB,SAArB,EAAiCkpB,QAAQxD,MAAR,GAAiBmE,KAAKnE,MAAtB;;AAEjC,QAAKmE,KAAKpE,SAAL,KAAmBzlB,SAAxB,EAAoCkpB,QAAQzD,SAAR,GAAoB+xF,cAAe3tF,KAAKpE,SAApB,EAA+BkyF,cAA/B,CAApB;AACpC,QAAK9tF,KAAKrE,SAAL,KAAmBxlB,SAAxB,EAAoCkpB,QAAQ1D,SAAR,GAAoBgyF,cAAe3tF,KAAKrE,SAApB,EAA+BmyF,cAA/B,CAApB;AACpC,QAAK9tF,KAAKlE,UAAL,KAAoB3lB,SAAzB,EAAqCkpB,QAAQvD,UAAR,GAAqBkE,KAAKlE,UAA1B;;AAErC,QAAKkE,KAAKxD,KAAL,KAAermB,SAApB,EAAgCkpB,QAAQ7C,KAAR,GAAgBwD,KAAKxD,KAArB;;AAEhCU,aAAU8C,KAAKvd,IAAf,IAAwB4c,OAAxB;AAEA;AAED;;AAED,SAAOnC,QAAP;AAEA,EApgBqC;;AAsgBtCmwF,cAAa,UAAWrtF,IAAX,EAAiBgf,UAAjB,EAA6BC,SAA7B,EAAyC;;AAErD,MAAI3d,MAAJ;;AAEA,WAASysF,WAAT,CAAsB/xF,IAAtB,EAA6B;;AAE5B,OAAKgjB,WAAYhjB,IAAZ,MAAuB7lB,SAA5B,EAAwC;;AAEvCyP,YAAQC,IAAR,CAAc,wCAAd,EAAwDmW,IAAxD;AAEA;;AAED,UAAOgjB,WAAYhjB,IAAZ,CAAP;AAEA;;AAED,WAASgyF,WAAT,CAAsBhyF,IAAtB,EAA6B;;AAE5B,OAAKA,SAAS7lB,SAAd,EAA0B,OAAOA,SAAP;;AAE1B,OAAK05B,MAAMC,OAAN,CAAe9T,IAAf,CAAL,EAA6B;;AAE5B,QAAIpjB,QAAQ,EAAZ;;AAEA,SAAM,IAAIE,IAAI,CAAR,EAAWC,IAAIijB,KAAKvkB,MAA1B,EAAkCqB,IAAIC,CAAtC,EAAyCD,GAAzC,EAAgD;;AAE/C,SAAI2J,OAAOuZ,KAAMljB,CAAN,CAAX;;AAEA,SAAKmmC,UAAWx8B,IAAX,MAAsBtM,SAA3B,EAAuC;;AAEtCyP,cAAQC,IAAR,CAAc,wCAAd,EAAwDpD,IAAxD;AAEA;;AAED7J,WAAMP,IAAN,CAAY4mC,UAAWx8B,IAAX,CAAZ;AAEA;;AAED,WAAO7J,KAAP;AAEA;;AAED,OAAKqmC,UAAWjjB,IAAX,MAAsB7lB,SAA3B,EAAuC;;AAEtCyP,YAAQC,IAAR,CAAc,wCAAd,EAAwDmW,IAAxD;AAEA;;AAED,UAAOijB,UAAWjjB,IAAX,CAAP;AAEA;;AAED,UAASgE,KAAKhoB,IAAd;;AAEC,QAAK,OAAL;;AAECspB,aAAS,IAAIy3D,KAAJ,EAAT;;AAEA,QAAK/4D,KAAKo6B,UAAL,KAAoBjkD,SAAzB,EAAqC;;AAEpC,SAAKF,OAAOK,SAAP,CAAkB0pB,KAAKo6B,UAAvB,CAAL,EAA2C;;AAE1C94B,aAAO84B,UAAP,GAAoB,IAAIpqB,KAAJ,CAAWhQ,KAAKo6B,UAAhB,CAApB;AAEA;AAED;;AAED,QAAKp6B,KAAKwU,GAAL,KAAar+B,SAAlB,EAA8B;;AAE7B,SAAK6pB,KAAKwU,GAAL,CAASx8B,IAAT,KAAkB,KAAvB,EAA+B;;AAE9BspB,aAAOkT,GAAP,GAAa,IAAIskD,GAAJ,CAAS94D,KAAKwU,GAAL,CAAS5D,KAAlB,EAAyB5Q,KAAKwU,GAAL,CAASnhB,IAAlC,EAAwC2M,KAAKwU,GAAL,CAASlhB,GAAjD,CAAb;AAEA,MAJD,MAIO,IAAK0M,KAAKwU,GAAL,CAASx8B,IAAT,KAAkB,SAAvB,EAAmC;;AAEzCspB,aAAOkT,GAAP,GAAa,IAAIqkD,OAAJ,CAAa74D,KAAKwU,GAAL,CAAS5D,KAAtB,EAA6B5Q,KAAKwU,GAAL,CAAS2jC,OAAtC,CAAb;AAEA;AAED;;AAED;;AAED,QAAK,mBAAL;;AAEC72C,aAAS,IAAI4mD,iBAAJ,CAAuBloD,KAAKmoD,GAA5B,EAAiCnoD,KAAKooD,MAAtC,EAA8CpoD,KAAK3M,IAAnD,EAAyD2M,KAAK1M,GAA9D,CAAT;;AAEA,QAAK0M,KAAKqoD,KAAL,KAAelyE,SAApB,EAAgCmrB,OAAO+mD,KAAP,GAAeroD,KAAKqoD,KAApB;AAChC,QAAKroD,KAAKqgB,IAAL,KAAclqC,SAAnB,EAA+BmrB,OAAO+e,IAAP,GAAcrgB,KAAKqgB,IAAnB;AAC/B,QAAKrgB,KAAKsoD,SAAL,KAAmBnyE,SAAxB,EAAoCmrB,OAAOgnD,SAAP,GAAmBtoD,KAAKsoD,SAAxB;AACpC,QAAKtoD,KAAKuoD,UAAL,KAAoBpyE,SAAzB,EAAqCmrB,OAAOinD,UAAP,GAAoBvoD,KAAKuoD,UAAzB;AACrC,QAAKvoD,KAAKsgB,IAAL,KAAcnqC,SAAnB,EAA+BmrB,OAAOgf,IAAP,GAAcxpC,OAAOK,MAAP,CAAe,EAAf,EAAmB6oB,KAAKsgB,IAAxB,CAAd;;AAE/B;;AAED,QAAK,oBAAL;;AAEChf,aAAS,IAAI8e,kBAAJ,CAAwBpgB,KAAK/M,IAA7B,EAAmC+M,KAAK9M,KAAxC,EAA+C8M,KAAK7M,GAApD,EAAyD6M,KAAK5M,MAA9D,EAAsE4M,KAAK3M,IAA3E,EAAiF2M,KAAK1M,GAAtF,CAAT;;AAEA,QAAK0M,KAAKqgB,IAAL,KAAclqC,SAAnB,EAA+BmrB,OAAO+e,IAAP,GAAcrgB,KAAKqgB,IAAnB;AAC/B,QAAKrgB,KAAKsgB,IAAL,KAAcnqC,SAAnB,EAA+BmrB,OAAOgf,IAAP,GAAcxpC,OAAOK,MAAP,CAAe,EAAf,EAAmB6oB,KAAKsgB,IAAxB,CAAd;;AAE/B;;AAED,QAAK,cAAL;;AAEChf,aAAS,IAAIk8E,YAAJ,CAAkBx9E,KAAK4Q,KAAvB,EAA8B5Q,KAAK+xC,SAAnC,CAAT;;AAEA;;AAED,QAAK,kBAAL;;AAECzwC,aAAS,IAAIi8E,gBAAJ,CAAsBv9E,KAAK4Q,KAA3B,EAAkC5Q,KAAK+xC,SAAvC,CAAT;;AAEA;;AAED,QAAK,YAAL;;AAECzwC,aAAS,IAAI+7E,UAAJ,CAAgBr9E,KAAK4Q,KAArB,EAA4B5Q,KAAK+xC,SAAjC,EAA4C/xC,KAAKiI,QAAjD,EAA2DjI,KAAK0V,KAAhE,CAAT;;AAEA;;AAED,QAAK,eAAL;;AAECpU,aAAS,IAAIm8E,aAAJ,CAAmBz9E,KAAK4Q,KAAxB,EAA+B5Q,KAAK+xC,SAApC,EAA+C/xC,KAAKxC,KAApD,EAA2DwC,KAAKvC,MAAhE,CAAT;;AAEA;;AAED,QAAK,WAAL;;AAEC6D,aAAS,IAAI67E,SAAJ,CAAen9E,KAAK4Q,KAApB,EAA2B5Q,KAAK+xC,SAAhC,EAA2C/xC,KAAKiI,QAAhD,EAA0DjI,KAAKrY,KAA/D,EAAsEqY,KAAKqyC,QAA3E,EAAqFryC,KAAK0V,KAA1F,CAAT;;AAEA;;AAED,QAAK,iBAAL;;AAECpU,aAAS,IAAI07E,eAAJ,CAAqBh9E,KAAK4Q,KAA1B,EAAiC5Q,KAAKoW,WAAtC,EAAmDpW,KAAK+xC,SAAxD,CAAT;;AAEA;;AAED,QAAK,aAAL;;AAECnsD,YAAQC,IAAR,CAAc,oEAAd;;AAED,QAAK,MAAL;;AAEC,QAAIqc,WAAW6rF,YAAa/tF,KAAKkC,QAAlB,CAAf;AACA,QAAIwd,WAAWsuE,YAAahuF,KAAK0f,QAAlB,CAAf;;AAEA,QAAKxd,SAASssC,KAAT,IAAkBtsC,SAASssC,KAAT,CAAe/2D,MAAf,GAAwB,CAA/C,EAAmD;;AAElD6pB,cAAS,IAAI+4D,WAAJ,CAAiBn4D,QAAjB,EAA2Bwd,QAA3B,CAAT;AAEA,KAJD,MAIO;;AAENpe,cAAS,IAAI41B,IAAJ,CAAUh1B,QAAV,EAAoBwd,QAApB,CAAT;AAEA;;AAED;;AAED,QAAK,KAAL;;AAECpe,aAAS,IAAIi4D,GAAJ,EAAT;;AAEA;;AAED,QAAK,MAAL;;AAECj4D,aAAS,IAAI+5D,IAAJ,CAAU0yB,YAAa/tF,KAAKkC,QAAlB,CAAV,EAAwC8rF,YAAahuF,KAAK0f,QAAlB,CAAxC,EAAsE1f,KAAKm7B,IAA3E,CAAT;;AAEA;;AAED,QAAK,UAAL;;AAEC75B,aAAS,IAAI46D,QAAJ,CAAc6xB,YAAa/tF,KAAKkC,QAAlB,CAAd,EAA4C8rF,YAAahuF,KAAK0f,QAAlB,CAA5C,CAAT;;AAEA;;AAED,QAAK,cAAL;;AAECpe,aAAS,IAAIg6D,YAAJ,CAAkByyB,YAAa/tF,KAAKkC,QAAlB,CAAlB,EAAgD8rF,YAAahuF,KAAK0f,QAAlB,CAAhD,CAAT;;AAEA;;AAED,QAAK,YAAL;AACA,QAAK,QAAL;;AAECpe,aAAS,IAAI66D,MAAJ,CAAY4xB,YAAa/tF,KAAKkC,QAAlB,CAAZ,EAA0C8rF,YAAahuF,KAAK0f,QAAlB,CAA1C,CAAT;;AAEA;;AAED,QAAK,QAAL;;AAECpe,aAAS,IAAI43D,MAAJ,CAAY80B,YAAahuF,KAAK0f,QAAlB,CAAZ,CAAT;;AAEA;;AAED,QAAK,OAAL;;AAECpe,aAAS,IAAIq7D,KAAJ,EAAT;;AAEA;;AAED;;AAECr7D,aAAS,IAAIwa,QAAJ,EAAT;;AA3JF;;AA+JAxa,SAAO7e,IAAP,GAAcud,KAAKvd,IAAnB;;AAEA,MAAKud,KAAKhE,IAAL,KAAc7lB,SAAnB,EAA+BmrB,OAAOtF,IAAP,GAAcgE,KAAKhE,IAAnB;;AAE/B,MAAKgE,KAAKxN,MAAL,KAAgBrc,SAArB,EAAiC;;AAEhCmrB,UAAO9O,MAAP,CAAchK,SAAd,CAAyBwX,KAAKxN,MAA9B;;AAEA,OAAKwN,KAAK3D,gBAAL,KAA0BlmB,SAA/B,EAA2CmrB,OAAOjF,gBAAP,GAA0B2D,KAAK3D,gBAA/B;AAC3C,OAAKiF,OAAOjF,gBAAZ,EAA+BiF,OAAO9O,MAAP,CAAcF,SAAd,CAAyBgP,OAAOlP,QAAhC,EAA0CkP,OAAOjP,UAAjD,EAA6DiP,OAAOnQ,KAApE;AAE/B,GAPD,MAOO;;AAEN,OAAK6O,KAAK5N,QAAL,KAAkBjc,SAAvB,EAAmCmrB,OAAOlP,QAAP,CAAgB5J,SAAhB,CAA2BwX,KAAK5N,QAAhC;AACnC,OAAK4N,KAAKhF,QAAL,KAAkB7kB,SAAvB,EAAmCmrB,OAAOtG,QAAP,CAAgBxS,SAAhB,CAA2BwX,KAAKhF,QAAhC;AACnC,OAAKgF,KAAK3N,UAAL,KAAoBlc,SAAzB,EAAqCmrB,OAAOjP,UAAP,CAAkB7J,SAAlB,CAA6BwX,KAAK3N,UAAlC;AACrC,OAAK2N,KAAK7O,KAAL,KAAehb,SAApB,EAAgCmrB,OAAOnQ,KAAP,CAAa3I,SAAb,CAAwBwX,KAAK7O,KAA7B;AAEhC;;AAED,MAAK6O,KAAKyc,UAAL,KAAoBtmC,SAAzB,EAAqCmrB,OAAOmb,UAAP,GAAoBzc,KAAKyc,UAAzB;AACrC,MAAKzc,KAAK0c,aAAL,KAAuBvmC,SAA5B,EAAwCmrB,OAAOob,aAAP,GAAuB1c,KAAK0c,aAA5B;;AAExC,MAAK1c,KAAKiV,MAAV,EAAmB;;AAElB,OAAKjV,KAAKiV,MAAL,CAAYi9B,IAAZ,KAAqB/7D,SAA1B,EAAsCmrB,OAAO2T,MAAP,CAAci9B,IAAd,GAAqBlyC,KAAKiV,MAAL,CAAYi9B,IAAjC;AACtC,OAAKlyC,KAAKiV,MAAL,CAAY7a,MAAZ,KAAuBjkB,SAA5B,EAAwCmrB,OAAO2T,MAAP,CAAc7a,MAAd,GAAuB4F,KAAKiV,MAAL,CAAY7a,MAAnC;AACxC,OAAK4F,KAAKiV,MAAL,CAAYk9B,OAAZ,KAAwBh8D,SAA7B,EAAyCmrB,OAAO2T,MAAP,CAAck9B,OAAd,CAAsB3pD,SAAtB,CAAiCwX,KAAKiV,MAAL,CAAYk9B,OAA7C;AACzC,OAAKnyC,KAAKiV,MAAL,CAAYpc,MAAZ,KAAuB1iB,SAA5B,EAAwCmrB,OAAO2T,MAAP,CAAcpc,MAAd,GAAuB,KAAKw0F,WAAL,CAAkBrtF,KAAKiV,MAAL,CAAYpc,MAA9B,CAAvB;AAExC;;AAED,MAAKmH,KAAKwc,OAAL,KAAiBrmC,SAAtB,EAAkCmrB,OAAOkb,OAAP,GAAiBxc,KAAKwc,OAAtB;AAClC,MAAKxc,KAAK2c,aAAL,KAAuBxmC,SAA5B,EAAwCmrB,OAAOqb,aAAP,GAAuB3c,KAAK2c,aAA5B;AACxC,MAAK3c,KAAK4c,WAAL,KAAqBzmC,SAA1B,EAAsCmrB,OAAOsb,WAAP,GAAqB5c,KAAK4c,WAA1B;AACtC,MAAK5c,KAAK6c,QAAL,KAAkB1mC,SAAvB,EAAmCmrB,OAAOub,QAAP,GAAkB7c,KAAK6c,QAAvB;;AAEnC,MAAK7c,KAAKgc,QAAL,KAAkB7lC,SAAvB,EAAmC;;AAElC,OAAI6lC,WAAWhc,KAAKgc,QAApB;;AAEA,QAAM,IAAIljC,IAAI,CAAd,EAAiBA,IAAIkjC,SAASvkC,MAA9B,EAAsCqB,GAAtC,EAA6C;;AAE5CwoB,WAAO5b,GAAP,CAAY,KAAK2nG,WAAL,CAAkBrxE,SAAUljC,CAAV,CAAlB,EAAiCkmC,UAAjC,EAA6CC,SAA7C,CAAZ;AAEA;AAED;;AAED,MAAKjf,KAAKhoB,IAAL,KAAc,KAAnB,EAA2B;;AAE1B,OAAIwhF,SAASx5D,KAAKw5D,MAAlB;;AAEA,QAAM,IAAIzgF,IAAI,CAAd,EAAiBA,IAAIygF,OAAO/hF,MAA5B,EAAoCsB,GAApC,EAA2C;;AAE1C,QAAIu/E,QAAQkB,OAAQzgF,CAAR,CAAZ;AACA,QAAIwlC,QAAQjd,OAAO+c,mBAAP,CAA4B,MAA5B,EAAoCi6C,MAAMh3D,MAA1C,CAAZ;;AAEA,QAAKid,UAAUpoC,SAAf,EAA2B;;AAE1BmrB,YAAOm4D,QAAP,CAAiBl7C,KAAjB,EAAwB+5C,MAAMrwD,QAA9B;AAEA;AAED;AAED;;AAED,SAAO3G,MAAP;AAEA;;AA/xBqC,CAAvC;;AAmyBA,IAAIssF,kBAAkB;AACrBhxG,YAAWA,SADU;AAErBC,wBAAuBA,qBAFF;AAGrBC,wBAAuBA,qBAHF;AAIrBC,mCAAkCA,gCAJb;AAKrBC,mCAAkCA,gCALb;AAMrBC,6BAA4BA,0BANP;AAOrBC,0BAAyBA,uBAPJ;AAQrBC,0BAAyBA;AARJ,CAAtB;;AAWA,IAAI0wG,mBAAmB;AACtBzwG,iBAAgBA,cADM;AAEtBC,sBAAqBA,mBAFC;AAGtBC,yBAAwBA;AAHF,CAAvB;;AAMA,IAAIwwG,iBAAiB;AACpBvwG,gBAAeA,aADK;AAEpBC,6BAA4BA,0BAFR;AAGpBC,4BAA2BA,yBAHP;AAIpBC,eAAcA,YAJM;AAKpBC,4BAA2BA,yBALP;AAMpBC,2BAA0BA;AANN,CAArB;;AASA;;;;AAIA,SAASqwG,iBAAT,CAA4Bpc,OAA5B,EAAsC;;AAErC,KAAK,OAAOqc,iBAAP,KAA6B,WAAlC,EAAgD;;AAE/CtoG,UAAQC,IAAR,CAAc,6DAAd;AAEA;;AAED,KAAK,OAAOsoG,KAAP,KAAiB,WAAtB,EAAoC;;AAEnCvoG,UAAQC,IAAR,CAAc,iDAAd;AAEA;;AAED,MAAKgsF,OAAL,GAAeA,YAAY17F,SAAZ,GAAwB07F,OAAxB,GAAkCH,qBAAjD;AACA,MAAKzyE,OAAL,GAAe9oB,SAAf;AAEA;;AAED83G,kBAAkBp3G,SAAlB,GAA8B;;AAE7B0O,cAAa0oG,iBAFgB;;AAI7BG,aAAY,SAASA,UAAT,CAAqBnvF,OAArB,EAA+B;;AAE1C,OAAKA,OAAL,GAAeA,OAAf;;AAEA,SAAO,IAAP;AAEA,EAV4B;;AAY7B6yE,OAAM,SAASA,IAAT,CAAe1zE,GAAf,EAAoBwyE,MAApB,EAA4BC,UAA5B,EAAwCC,OAAxC,EAAkD;;AAEvD,MAAK1yE,QAAQjoB,SAAb,EAAyBioB,MAAM,EAAN;;AAEzB,MAAK,KAAK+nC,IAAL,KAAchwD,SAAnB,EAA+BioB,MAAM,KAAK+nC,IAAL,GAAY/nC,GAAlB;;AAE/B,MAAI2D,QAAQ,IAAZ;;AAEA,MAAIgwE,SAASvB,MAAMx5F,GAAN,CAAWonB,GAAX,CAAb;;AAEA,MAAK2zE,WAAW57F,SAAhB,EAA4B;;AAE3B4rB,SAAM8vE,OAAN,CAAcT,SAAd,CAAyBhzE,GAAzB;;AAEA4zE,cAAY,YAAY;;AAEvB,QAAKpB,MAAL,EAAcA,OAAQmB,MAAR;;AAEdhwE,UAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AAEA,IAND,EAMG,CANH;;AAQA,UAAO2zE,MAAP;AAEA;;AAEDoc,QAAO/vF,GAAP,EAAaiwF,IAAb,CAAmB,UAAWC,GAAX,EAAiB;;AAEnC,UAAOA,IAAIC,IAAJ,EAAP;AAEA,GAJD,EAIIF,IAJJ,CAIU,UAAWE,IAAX,EAAkB;;AAE3B,UAAOL,kBAAmBK,IAAnB,EAAyBxsF,MAAM9C,OAA/B,CAAP;AAEA,GARD,EAQIovF,IARJ,CAQU,UAAWG,WAAX,EAAyB;;AAElChe,SAAM9qF,GAAN,CAAW0Y,GAAX,EAAgBowF,WAAhB;;AAEA,OAAK5d,MAAL,EAAcA,OAAQ4d,WAAR;;AAEdzsF,SAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AAEA,GAhBD,EAgBIqwF,KAhBJ,CAgBW,UAAW7nG,CAAX,EAAe;;AAEzB,OAAKkqF,OAAL,EAAeA,QAASlqF,CAAT;;AAEfmb,SAAM8vE,OAAN,CAAcR,OAAd,CAAuBjzE,GAAvB;AACA2D,SAAM8vE,OAAN,CAAcP,SAAd,CAAyBlzE,GAAzB;AAEA,GAvBD;AAyBA,EA/D4B;;AAiE7Bw2E,iBAAgB,YAAW,WAAc;;AAExC,SAAO,IAAP;AAEA,EArE4B;;AAuE7BlB,UAAS,UAAWn9F,KAAX,EAAmB;;AAE3B,OAAK4vD,IAAL,GAAY5vD,KAAZ;AACA,SAAO,IAAP;AAEA;;AA5E4B,CAA9B;;AAgFA;;;;;AAKA,SAASm4G,SAAT,GAAqB;;AAEpB,MAAK12G,IAAL,GAAY,WAAZ;;AAEA,MAAK44B,KAAL,GAAa,IAAIZ,KAAJ,EAAb;;AAEA,MAAK2+E,QAAL,GAAgB,EAAhB;AACA,MAAKC,WAAL,GAAmB,IAAnB;AAEA;;AAED93G,OAAOK,MAAP,CAAeu3G,UAAU73G,SAAzB,EAAoC;;AAEnC8kG,SAAQ,UAAWhlG,CAAX,EAAc4M,CAAd,EAAkB;;AAEzB,OAAKqrG,WAAL,GAAmB,IAAInT,IAAJ,EAAnB;AACA,OAAKkT,QAAL,CAAct2G,IAAd,CAAoB,KAAKu2G,WAAzB;AACA,OAAKA,WAAL,CAAiBjT,MAAjB,CAAyBhlG,CAAzB,EAA4B4M,CAA5B;AAEA,EARkC;;AAUnCq4F,SAAQ,UAAWjlG,CAAX,EAAc4M,CAAd,EAAkB;;AAEzB,OAAKqrG,WAAL,CAAiBhT,MAAjB,CAAyBjlG,CAAzB,EAA4B4M,CAA5B;AAEA,EAdkC;;AAgBnCs4F,mBAAkB,UAAWC,IAAX,EAAiBC,IAAjB,EAAuB9E,EAAvB,EAA2BC,EAA3B,EAAgC;;AAEjD,OAAK0X,WAAL,CAAiB/S,gBAAjB,CAAmCC,IAAnC,EAAyCC,IAAzC,EAA+C9E,EAA/C,EAAmDC,EAAnD;AAEA,EApBkC;;AAsBnC8E,gBAAe,UAAWC,KAAX,EAAkBC,KAAlB,EAAyBC,KAAzB,EAAgCC,KAAhC,EAAuCnF,EAAvC,EAA2CC,EAA3C,EAAgD;;AAE9D,OAAK0X,WAAL,CAAiB5S,aAAjB,CAAgCC,KAAhC,EAAuCC,KAAvC,EAA8CC,KAA9C,EAAqDC,KAArD,EAA4DnF,EAA5D,EAAgEC,EAAhE;AAEA,EA1BkC;;AA4BnCmF,aAAY,UAAWhW,GAAX,EAAiB;;AAE5B,OAAKuoB,WAAL,CAAiBvS,UAAjB,CAA6BhW,GAA7B;AAEA,EAhCkC;;AAkCnCwoB,WAAU,UAAWC,KAAX,EAAkBC,OAAlB,EAA4B;;AAErC,WAASC,eAAT,CAA0BC,UAA1B,EAAuC;;AAEtC,OAAI/vE,SAAS,EAAb;;AAEA,QAAM,IAAIpmC,IAAI,CAAR,EAAWC,IAAIk2G,WAAWx3G,MAAhC,EAAwCqB,IAAIC,CAA5C,EAA+CD,GAA/C,EAAsD;;AAErD,QAAIo2G,UAAUD,WAAYn2G,CAAZ,CAAd;;AAEA,QAAIq2G,WAAW,IAAIvS,KAAJ,EAAf;AACAuS,aAAStU,MAAT,GAAkBqU,QAAQrU,MAA1B;;AAEA37D,WAAO7mC,IAAP,CAAa82G,QAAb;AAEA;;AAED,UAAOjwE,MAAP;AAEA;;AAED,WAASkwE,oBAAT,CAA+BrmB,IAA/B,EAAqCsmB,SAArC,EAAiD;;AAEhD,OAAIC,UAAUD,UAAU53G,MAAxB;;AAEA;AACA;AACA;AACA;AACA,OAAIouF,SAAS,KAAb;AACA,QAAM,IAAIpyE,IAAI67F,UAAU,CAAlB,EAAqB5iG,IAAI,CAA/B,EAAkCA,IAAI4iG,OAAtC,EAA+C77F,IAAI/G,GAAnD,EAA0D;;AAEzD,QAAI6iG,YAAYF,UAAW57F,CAAX,CAAhB;AACA,QAAI+7F,aAAaH,UAAW3iG,CAAX,CAAjB;;AAEA,QAAI+iG,SAASD,WAAW74G,CAAX,GAAe44G,UAAU54G,CAAtC;AACA,QAAI+4G,SAASF,WAAWjsG,CAAX,GAAegsG,UAAUhsG,CAAtC;;AAEA,QAAKnN,KAAKqR,GAAL,CAAUioG,MAAV,IAAqBz5G,OAAOC,OAAjC,EAA2C;;AAE1C;AACA,SAAKw5G,SAAS,CAAd,EAAkB;;AAEjBH,kBAAYF,UAAW3iG,CAAX,CAAZ,CAA4B+iG,SAAS,CAAEA,MAAX;AAC5BD,mBAAaH,UAAW57F,CAAX,CAAb,CAA6Bi8F,SAAS,CAAEA,MAAX;AAE7B;AACD,SAAO3mB,KAAKxlF,CAAL,GAASgsG,UAAUhsG,CAArB,IAA8BwlF,KAAKxlF,CAAL,GAASisG,WAAWjsG,CAAvD,EAA+D;;AAE/D,SAAKwlF,KAAKxlF,CAAL,KAAWgsG,UAAUhsG,CAA1B,EAA8B;;AAE7B,UAAKwlF,KAAKpyF,CAAL,KAAW44G,UAAU54G,CAA1B,EAA+B,OAAO,IAAP,CAFF,CAEgB;AAC7C;AAEA,MALD,MAKO;;AAEN,UAAIg5G,WAAWD,UAAW3mB,KAAKpyF,CAAL,GAAS44G,UAAU54G,CAA9B,IAAoC84G,UAAW1mB,KAAKxlF,CAAL,GAASgsG,UAAUhsG,CAA9B,CAAnD;AACA,UAAKosG,aAAa,CAAlB,EAAyB,OAAO,IAAP,CAHnB,CAGiC;AACvC,UAAKA,WAAW,CAAhB,EAAwB;AACxB9pB,eAAS,CAAEA,MAAX,CALM,CAKc;AAEpB;AAED,KAzBD,MAyBO;;AAEN;AACA,SAAKkD,KAAKxlF,CAAL,KAAWgsG,UAAUhsG,CAA1B,EAAgC,SAH1B,CAGsC;AAC5C;AACA,SAASisG,WAAW74G,CAAX,IAAgBoyF,KAAKpyF,CAAvB,IAAgCoyF,KAAKpyF,CAAL,IAAU44G,UAAU54G,CAAtD,IACC44G,UAAU54G,CAAV,IAAeoyF,KAAKpyF,CAAtB,IAA+BoyF,KAAKpyF,CAAL,IAAU64G,WAAW74G,CADxD,EACiE,OAAO,IAAP,CAN3D,CAMwE;AAC9E;AAEA;AAED;;AAED,UAAOkvF,MAAP;AAEA;;AAED,MAAIO,cAAcF,WAAWE,WAA7B;;AAEA,MAAIuoB,WAAW,KAAKA,QAApB;AACA,MAAKA,SAASl3G,MAAT,KAAoB,CAAzB,EAA6B,OAAO,EAAP;;AAE7B,MAAKs3G,YAAY,IAAjB,EAAwB,OAAOC,gBAAiBL,QAAjB,CAAP;;AAGxB,MAAIiB,KAAJ;AAAA,MAAWV,OAAX;AAAA,MAAoBC,QAApB;AAAA,MAA8BjwE,SAAS,EAAvC;;AAEA,MAAKyvE,SAASl3G,MAAT,KAAoB,CAAzB,EAA6B;;AAE5By3G,aAAUP,SAAU,CAAV,CAAV;AACAQ,cAAW,IAAIvS,KAAJ,EAAX;AACAuS,YAAStU,MAAT,GAAkBqU,QAAQrU,MAA1B;AACA37D,UAAO7mC,IAAP,CAAa82G,QAAb;AACA,UAAOjwE,MAAP;AAEA;;AAED,MAAI2wE,aAAa,CAAEzpB,YAAauoB,SAAU,CAAV,EAAcpZ,SAAd,EAAb,CAAnB;AACAsa,eAAaf,QAAQ,CAAEe,UAAV,GAAuBA,UAApC;;AAEA;;AAEA,MAAIC,mBAAmB,EAAvB;AACA,MAAIC,YAAY,EAAhB;AACA,MAAIC,gBAAgB,EAApB;AACA,MAAIC,UAAU,CAAd;AACA,MAAIC,SAAJ;;AAEAH,YAAWE,OAAX,IAAuB95G,SAAvB;AACA65G,gBAAeC,OAAf,IAA2B,EAA3B;;AAEA,OAAM,IAAIn3G,IAAI,CAAR,EAAWC,IAAI41G,SAASl3G,MAA9B,EAAsCqB,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;;AAEnDo2G,aAAUP,SAAU71G,CAAV,CAAV;AACAo3G,eAAYhB,QAAQ3Z,SAAR,EAAZ;AACAqa,WAAQxpB,YAAa8pB,SAAb,CAAR;AACAN,WAAQd,QAAQ,CAAEc,KAAV,GAAkBA,KAA1B;;AAEA,OAAKA,KAAL,EAAa;;AAEZ,QAAO,CAAEC,UAAJ,IAAsBE,UAAWE,OAAX,CAA3B,EAAoDA;;AAEpDF,cAAWE,OAAX,IAAuB,EAAEjqG,GAAG,IAAI42F,KAAJ,EAAL,EAAkBnpF,GAAGy8F,SAArB,EAAvB;AACAH,cAAWE,OAAX,EAAqBjqG,CAArB,CAAuB60F,MAAvB,GAAgCqU,QAAQrU,MAAxC;;AAEA,QAAKgV,UAAL,EAAkBI;AAClBD,kBAAeC,OAAf,IAA2B,EAA3B;;AAEA;AAEA,IAZD,MAYO;;AAEND,kBAAeC,OAAf,EAAyB53G,IAAzB,CAA+B,EAAEmb,GAAG07F,OAAL,EAAcz7F,GAAGy8F,UAAW,CAAX,CAAjB,EAA/B;;AAEA;AAEA;AAED;;AAED;AACA,MAAK,CAAEH,UAAW,CAAX,CAAP,EAAwB,OAAOf,gBAAiBL,QAAjB,CAAP;;AAGxB,MAAKoB,UAAUt4G,MAAV,GAAmB,CAAxB,EAA4B;;AAE3B,OAAI04G,YAAY,KAAhB;AACA,OAAIC,WAAW,EAAf;;AAEA,QAAM,IAAIC,OAAO,CAAX,EAAcC,OAAOP,UAAUt4G,MAArC,EAA6C44G,OAAOC,IAApD,EAA0DD,MAA1D,EAAoE;;AAEnEP,qBAAkBO,IAAlB,IAA2B,EAA3B;AAEA;;AAED,QAAM,IAAIA,OAAO,CAAX,EAAcC,OAAOP,UAAUt4G,MAArC,EAA6C44G,OAAOC,IAApD,EAA0DD,MAA1D,EAAoE;;AAEnE,QAAIE,MAAMP,cAAeK,IAAf,CAAV;;AAEA,SAAM,IAAIG,OAAO,CAAjB,EAAoBA,OAAOD,IAAI94G,MAA/B,EAAuC+4G,MAAvC,EAAiD;;AAEhD,SAAIC,KAAKF,IAAKC,IAAL,CAAT;AACA,SAAIE,kBAAkB,IAAtB;;AAEA,UAAM,IAAIC,QAAQ,CAAlB,EAAqBA,QAAQZ,UAAUt4G,MAAvC,EAA+Ck5G,OAA/C,EAA0D;;AAEzD,UAAKvB,qBAAsBqB,GAAGh9F,CAAzB,EAA4Bs8F,UAAWY,KAAX,EAAmBl9F,CAA/C,CAAL,EAA0D;;AAEzD,WAAK48F,SAASM,KAAd,EAAsBP,SAAS/3G,IAAT,CAAe,EAAEu4G,OAAOP,IAAT,EAAeQ,KAAKF,KAApB,EAA2BjsB,MAAM8rB,IAAjC,EAAf;AACtB,WAAKE,eAAL,EAAuB;;AAEtBA,0BAAkB,KAAlB;AACAZ,yBAAkBa,KAAlB,EAA0Bt4G,IAA1B,CAAgCo4G,EAAhC;AAEA,QALD,MAKO;;AAENN,oBAAY,IAAZ;AAEA;AAED;AAED;AACD,SAAKO,eAAL,EAAuB;;AAEtBZ,uBAAkBO,IAAlB,EAAyBh4G,IAAzB,CAA+Bo4G,EAA/B;AAEA;AAED;AAED;AACD;AACA,OAAKL,SAAS34G,MAAT,GAAkB,CAAvB,EAA2B;;AAE1B;AACA,QAAK,CAAE04G,SAAP,EAAmBH,gBAAgBF,gBAAhB;AAEnB;AAED;;AAED,MAAIgB,QAAJ;;AAEA,OAAM,IAAIh4G,IAAI,CAAR,EAAWkoB,KAAK+uF,UAAUt4G,MAAhC,EAAwCqB,IAAIkoB,EAA5C,EAAgDloB,GAAhD,EAAuD;;AAEtDq2G,cAAWY,UAAWj3G,CAAX,EAAekN,CAA1B;AACAk5B,UAAO7mC,IAAP,CAAa82G,QAAb;AACA2B,cAAWd,cAAel3G,CAAf,CAAX;;AAEA,QAAM,IAAI+qB,IAAI,CAAR,EAAW+e,KAAKkuE,SAASr5G,MAA/B,EAAuCosB,IAAI+e,EAA3C,EAA+C/e,GAA/C,EAAsD;;AAErDsrF,aAAS5oB,KAAT,CAAeluF,IAAf,CAAqBy4G,SAAUjtF,CAAV,EAAcrQ,CAAnC;AAEA;AAED;;AAED;;AAEA,SAAO0rB,MAAP;AAEA;;AAnQkC,CAApC;;AAuQA;;;;;AAKA,SAAS6xE,IAAT,CAAe/wF,IAAf,EAAsB;;AAErB,MAAKhoB,IAAL,GAAY,MAAZ;;AAEA,MAAKgoB,IAAL,GAAYA,IAAZ;AAEA;;AAEDlpB,OAAOK,MAAP,CAAe45G,KAAKl6G,SAApB,EAA+B;;AAE9B81F,SAAQ,IAFsB;;AAI9BC,iBAAgB,UAAWJ,IAAX,EAAiBrrE,IAAjB,EAAuBq0E,SAAvB,EAAmC;;AAElD,MAAKr0E,SAAShrB,SAAd,EAA0BgrB,OAAO,GAAP;AAC1B,MAAKq0E,cAAcr/F,SAAnB,EAA+Bq/F,YAAY,CAAZ;;AAE/B,MAAIt2D,SAAS,EAAb;AACA,MAAI8xE,QAAQC,YAAazkB,IAAb,EAAmBrrE,IAAnB,EAAyBq0E,SAAzB,EAAoC,KAAKx1E,IAAzC,CAAZ;;AAEA,OAAM,IAAIvM,IAAI,CAAR,EAAWy8C,KAAK8gD,MAAMv5G,MAA5B,EAAoCgc,IAAIy8C,EAAxC,EAA4Cz8C,GAA5C,EAAmD;;AAElDoc,SAAMh5B,SAAN,CAAgBwB,IAAhB,CAAqBgoE,KAArB,CAA4BnhC,MAA5B,EAAoC8xE,MAAOv9F,CAAP,EAAWo7F,QAAX,EAApC;AAEA;;AAED,SAAO3vE,MAAP;AAEA;;AApB6B,CAA/B;;AAwBA,SAAS+xE,WAAT,CAAsBzkB,IAAtB,EAA4BrrE,IAA5B,EAAkCq0E,SAAlC,EAA6Cx1E,IAA7C,EAAoD;;AAEnD,KAAIkxF,QAAQx5D,OAAQ80C,IAAR,EAAerlC,KAAf,CAAsB,EAAtB,CAAZ;AACA,KAAIh2C,QAAQgQ,OAAOnB,KAAKw7E,UAAxB;AACA,KAAI2V,cAAc,CAAEnxF,KAAKkiB,WAAL,CAAiBkvE,IAAjB,GAAwBpxF,KAAKkiB,WAAL,CAAiBmvE,IAAzC,GAAgDrxF,KAAKsxF,kBAAvD,IAA8EngG,KAAhG;;AAEA,KAAI6/F,QAAQ,EAAZ;;AAEA,KAAInwE,UAAU,CAAd;AAAA,KAAiBC,UAAU,CAA3B;;AAEA,MAAM,IAAIhoC,IAAI,CAAd,EAAiBA,IAAIo4G,MAAMz5G,MAA3B,EAAmCqB,GAAnC,EAA0C;;AAEzC,MAAIy4G,OAAOL,MAAOp4G,CAAP,CAAX;;AAEA,MAAKy4G,SAAS,IAAd,EAAqB;;AAEpB1wE,aAAU,CAAV;AACAC,cAAWqwE,WAAX;AAEA,GALD,MAKO;;AAEN,OAAIK,MAAMC,WAAYF,IAAZ,EAAkB/b,SAAlB,EAA6BrkF,KAA7B,EAAoC0vB,OAApC,EAA6CC,OAA7C,EAAsD9gB,IAAtD,CAAV;AACA6gB,cAAW2wE,IAAI3wE,OAAf;AACAmwE,SAAM34G,IAAN,CAAYm5G,IAAIrrD,IAAhB;AAEA;AAED;;AAED,QAAO6qD,KAAP;AAEA;;AAED,SAASS,UAAT,CAAqBF,IAArB,EAA2B/b,SAA3B,EAAsCrkF,KAAtC,EAA6C0vB,OAA7C,EAAsDC,OAAtD,EAA+D9gB,IAA/D,EAAsE;;AAErE,KAAI0xF,QAAQ1xF,KAAK2xF,MAAL,CAAaJ,IAAb,KAAuBvxF,KAAK2xF,MAAL,CAAa,GAAb,CAAnC;;AAEA,KAAK,CAAED,KAAP,EAAe;;AAEf,KAAIvrD,OAAO,IAAIuoD,SAAJ,EAAX;;AAEA,KAAI/3G,CAAJ,EAAO4M,CAAP,EAAUquG,GAAV,EAAeC,GAAf,EAAoBC,IAApB,EAA0BC,IAA1B,EAAgCC,IAAhC,EAAsCC,IAAtC;;AAEA,KAAKP,MAAMt0B,CAAX,EAAe;;AAEd,MAAI80B,UAAUR,MAAMS,cAAN,KAA0BT,MAAMS,cAAN,GAAuBT,MAAMt0B,CAAN,CAAQj2B,KAAR,CAAe,GAAf,CAAjD,CAAd;;AAEA,OAAM,IAAIruD,IAAI,CAAR,EAAWC,IAAIm5G,QAAQz6G,MAA7B,EAAqCqB,IAAIC,CAAzC,GAA8C;;AAE7C,OAAIq5G,SAASF,QAASp5G,GAAT,CAAb;;AAEA,WAASs5G,MAAT;;AAEC,SAAK,GAAL;AAAU;;AAETz7G,SAAIu7G,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B0vB,OAA9B;AACAt9B,SAAI2uG,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B2vB,OAA9B;;AAEAqlB,UAAKw1C,MAAL,CAAahlG,CAAb,EAAgB4M,CAAhB;;AAEA;;AAED,SAAK,GAAL;AAAU;;AAET5M,SAAIu7G,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B0vB,OAA9B;AACAt9B,SAAI2uG,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B2vB,OAA9B;;AAEAqlB,UAAKy1C,MAAL,CAAajlG,CAAb,EAAgB4M,CAAhB;;AAEA;;AAED,SAAK,GAAL;AAAU;;AAETquG,WAAMM,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B0vB,OAAhC;AACAgxE,WAAMK,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B2vB,OAAhC;AACAgxE,YAAOI,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B0vB,OAAjC;AACAkxE,YAAOG,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B2vB,OAAjC;;AAEAqlB,UAAK01C,gBAAL,CAAuBiW,IAAvB,EAA6BC,IAA7B,EAAmCH,GAAnC,EAAwCC,GAAxC;;AAEA;;AAED,SAAK,GAAL;AAAU;;AAETD,WAAMM,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B0vB,OAAhC;AACAgxE,WAAMK,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B2vB,OAAhC;AACAgxE,YAAOI,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B0vB,OAAjC;AACAkxE,YAAOG,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B2vB,OAAjC;AACAkxE,YAAOE,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B0vB,OAAjC;AACAoxE,YAAOC,QAASp5G,GAAT,IAAkBqY,KAAlB,GAA0B2vB,OAAjC;;AAEAqlB,UAAK61C,aAAL,CAAoB8V,IAApB,EAA0BC,IAA1B,EAAgCC,IAAhC,EAAsCC,IAAtC,EAA4CL,GAA5C,EAAiDC,GAAjD;;AAEA;;AA1CF;AA8CA;AAED;;AAED,QAAO,EAAEhxE,SAAS6wE,MAAMW,EAAN,GAAWlhG,KAAtB,EAA6Bg1C,MAAMA,IAAnC,EAAP;AAEA;;AAED;;;;AAIA,SAASmsD,UAAT,CAAqBzgB,OAArB,EAA+B;;AAE9B,MAAKA,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;AAEA;;AAED56F,OAAOK,MAAP,CAAem7G,WAAWz7G,SAA1B,EAAqC;;AAEpCi7F,OAAM,UAAW1zE,GAAX,EAAgBwyE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA8C;;AAEnD,MAAI/uE,QAAQ,IAAZ;;AAEA,MAAIiyE,SAAS,IAAIpC,UAAJ,CAAgB,KAAKC,OAArB,CAAb;AACAmC,SAAON,OAAP,CAAgB,KAAKvtC,IAArB;AACA6tC,SAAOlC,IAAP,CAAa1zE,GAAb,EAAkB,UAAWouE,IAAX,EAAkB;;AAEnC,OAAIuK,IAAJ;;AAEA,OAAI;;AAEHA,WAAO53D,KAAKc,KAAL,CAAYusD,IAAZ,CAAP;AAEA,IAJD,CAIE,OAAQ5lF,CAAR,EAAY;;AAEbhB,YAAQC,IAAR,CAAc,uFAAd;AACAkxF,WAAO53D,KAAKc,KAAL,CAAYusD,KAAKugB,SAAL,CAAgB,EAAhB,EAAoBvgB,KAAK/0F,MAAL,GAAc,CAAlC,CAAZ,CAAP;AAEA;;AAED,OAAIi1F,OAAO3qE,MAAMke,KAAN,CAAa82D,IAAb,CAAX;;AAEA,OAAKnG,MAAL,EAAcA,OAAQlE,IAAR;AAEd,GAnBD,EAmBGmE,UAnBH,EAmBeC,OAnBf;AAqBA,EA7BmC;;AA+BpC7wD,QAAO,UAAW82D,IAAX,EAAkB;;AAExB,SAAO,IAAIga,IAAJ,CAAUha,IAAV,CAAP;AAEA,EAnCmC;;AAqCpCrD,UAAS,UAAWn9F,KAAX,EAAmB;;AAE3B,OAAK4vD,IAAL,GAAY5vD,KAAZ;AACA,SAAO,IAAP;AAEA;;AA1CmC,CAArC;;AA8CA;;;;AAIA,IAAImnB,OAAJ;;AAEA,IAAI60F,eAAe;;AAElB50F,aAAY,YAAY;;AAEvB,MAAKD,YAAYvnB,SAAjB,EAA6B;;AAE5BunB,aAAU,KAAMksD,OAAO2oC,YAAP,IAAuB3oC,OAAO4oC,kBAApC,GAAV;AAEA;;AAED,SAAO90F,OAAP;AAEA,EAZiB;;AAclB+0F,aAAY,UAAWl8G,KAAX,EAAmB;;AAE9BmnB,YAAUnnB,KAAV;AAEA;;AAlBiB,CAAnB;;AAsBA;;;;AAIA,SAASm8G,WAAT,CAAsB7gB,OAAtB,EAAgC;;AAE/B,MAAKA,OAAL,GAAiBA,YAAY17F,SAAd,GAA4B07F,OAA5B,GAAsCH,qBAArD;AAEA;;AAED56F,OAAOK,MAAP,CAAeu7G,YAAY77G,SAA3B,EAAsC;;AAErCi7F,OAAM,UAAW1zE,GAAX,EAAgBwyE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA8C;;AAEnD,MAAIkD,SAAS,IAAIpC,UAAJ,CAAgB,KAAKC,OAArB,CAAb;AACAmC,SAAOL,eAAP,CAAwB,aAAxB;AACAK,SAAOlC,IAAP,CAAa1zE,GAAb,EAAkB,UAAWya,MAAX,EAAoB;;AAErC,OAAInb,UAAU60F,aAAa50F,UAAb,EAAd;;AAEAD,WAAQi1F,eAAR,CAAyB95E,MAAzB,EAAiC,UAAW+5E,WAAX,EAAyB;;AAEzDhiB,WAAQgiB,WAAR;AAEA,IAJD;AAMA,GAVD,EAUG/hB,UAVH,EAUeC,OAVf;AAYA;;AAlBoC,CAAtC;;AAsBA;;;;AAIA,SAAS+hB,YAAT,GAAwB;;AAEvB,MAAK76G,IAAL,GAAY,cAAZ;;AAEA,MAAKowE,MAAL,GAAc,CAAd;;AAEA,MAAK0qC,MAAL,GAAc,KAAd;;AAEA,MAAK7oC,OAAL,GAAe,IAAI/B,iBAAJ,EAAf;AACA,MAAK+B,OAAL,CAAaruC,MAAb,CAAoBJ,MAApB,CAA4B,CAA5B;AACA,MAAKyuC,OAAL,CAAa5tD,gBAAb,GAAgC,KAAhC;;AAEA,MAAK8tD,OAAL,GAAe,IAAIjC,iBAAJ,EAAf;AACA,MAAKiC,OAAL,CAAavuC,MAAb,CAAoBJ,MAApB,CAA4B,CAA5B;AACA,MAAK2uC,OAAL,CAAa9tD,gBAAb,GAAgC,KAAhC;AAEA;;AAEDvlB,OAAOK,MAAP,CAAe07G,aAAah8G,SAA5B,EAAuC;;AAEtCue,SAAU,YAAY;;AAErB,MAAI29F,QAAJ,EAAc1qC,KAAd,EAAqBF,GAArB,EAA0BC,MAA1B,EAAkC/0D,IAAlC,EAAwCC,GAAxC,EAA6C+sB,IAA7C,EAAmDyyE,MAAnD;;AAEA,MAAIE,WAAW,IAAI5pG,OAAJ,EAAf;AACA,MAAI6pG,UAAU,IAAI7pG,OAAJ,EAAd;;AAEA,SAAO,SAASgM,MAAT,CAAiByD,MAAjB,EAA0B;;AAEhC,OAAI6yB,cAAcqnE,aAAa,IAAb,IAAqB1qC,UAAUxvD,OAAOwvD,KAAtC,IAA+CF,QAAQtvD,OAAOsvD,GAA9D,IACTC,WAAWvvD,OAAOuvD,MAAP,GAAgB,KAAKA,MADvB,IACiC/0D,SAASwF,OAAOxF,IADjD,IAETC,QAAQuF,OAAOvF,GAFN,IAEa+sB,SAASxnB,OAAOwnB,IAF7B,IAEqCyyE,WAAW,KAAKA,MAFvE;;AAIA,OAAKpnE,WAAL,EAAmB;;AAElBqnE,eAAW,IAAX;AACA1qC,YAAQxvD,OAAOwvD,KAAf;AACAF,UAAMtvD,OAAOsvD,GAAb;AACAC,aAASvvD,OAAOuvD,MAAP,GAAgB,KAAKA,MAA9B;AACA/0D,WAAOwF,OAAOxF,IAAd;AACAC,UAAMuF,OAAOvF,GAAb;AACA+sB,WAAOxnB,OAAOwnB,IAAd;;AAEA;AACA;;AAEA,QAAIvnB,mBAAmBD,OAAOC,gBAAP,CAAwBxT,KAAxB,EAAvB;AACAwtG,aAAS,KAAKA,MAAL,GAAc,CAAvB;AACA,QAAII,qBAAqBJ,SAASz/F,IAAT,GAAgBg1D,KAAzC;AACA,QAAI8qC,OAAS9/F,OAAOjd,KAAK2yE,GAAL,CAAUjnE,MAAMC,OAAN,GAAgBomE,GAAhB,GAAsB,GAAhC,CAAT,GAAmD9nC,IAA9D;AACA,QAAI+yE,IAAJ,EAAUC,IAAV;;AAEA;;AAEAJ,YAAQpsG,QAAR,CAAkB,EAAlB,IAAyB,CAAEisG,MAA3B;AACAE,aAASnsG,QAAT,CAAmB,EAAnB,IAA0BisG,MAA1B;;AAEA;;AAEAM,WAAO,CAAED,IAAF,GAAS/qC,MAAT,GAAkB8qC,kBAAzB;AACAG,WAAOF,OAAO/qC,MAAP,GAAgB8qC,kBAAvB;;AAEAp6F,qBAAiBjS,QAAjB,CAA2B,CAA3B,IAAiC,IAAIwM,IAAJ,IAAaggG,OAAOD,IAApB,CAAjC;AACAt6F,qBAAiBjS,QAAjB,CAA2B,CAA3B,IAAiC,CAAEwsG,OAAOD,IAAT,KAAoBC,OAAOD,IAA3B,CAAjC;;AAEA,SAAKnpC,OAAL,CAAanxD,gBAAb,CAA8BtT,IAA9B,CAAoCsT,gBAApC;;AAEA;;AAEAs6F,WAAO,CAAED,IAAF,GAAS/qC,MAAT,GAAkB8qC,kBAAzB;AACAG,WAAOF,OAAO/qC,MAAP,GAAgB8qC,kBAAvB;;AAEAp6F,qBAAiBjS,QAAjB,CAA2B,CAA3B,IAAiC,IAAIwM,IAAJ,IAAaggG,OAAOD,IAApB,CAAjC;AACAt6F,qBAAiBjS,QAAjB,CAA2B,CAA3B,IAAiC,CAAEwsG,OAAOD,IAAT,KAAoBC,OAAOD,IAA3B,CAAjC;;AAEA,SAAKjpC,OAAL,CAAarxD,gBAAb,CAA8BtT,IAA9B,CAAoCsT,gBAApC;AAEA;;AAED,QAAKmxD,OAAL,CAAalxD,WAAb,CAAyBvT,IAAzB,CAA+BqT,OAAOE,WAAtC,EAAoDxS,QAApD,CAA8D0sG,OAA9D;AACA,QAAK9oC,OAAL,CAAapxD,WAAb,CAAyBvT,IAAzB,CAA+BqT,OAAOE,WAAtC,EAAoDxS,QAApD,CAA8DysG,QAA9D;AAEA,GAvDD;AAyDA,EAhEO;;AAF8B,CAAvC;;AAsEA;;;;;;;AAOA,SAASM,UAAT,CAAqBjgG,IAArB,EAA2BC,GAA3B,EAAgCigG,cAAhC,EAAiD;;AAEhDz3E,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,YAAZ;;AAEA,KAAImwE,MAAM,EAAV;AAAA,KAAcC,SAAS,CAAvB;;AAEA,KAAIorC,WAAW,IAAItrC,iBAAJ,CAAuBC,GAAvB,EAA4BC,MAA5B,EAAoC/0D,IAApC,EAA0CC,GAA1C,CAAf;AACAkgG,UAAS3lG,EAAT,CAAYhJ,GAAZ,CAAiB,CAAjB,EAAoB,CAAE,CAAtB,EAAyB,CAAzB;AACA2uG,UAAS7lG,MAAT,CAAiB,IAAIxC,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAjB;AACA,MAAKzF,GAAL,CAAU8tG,QAAV;;AAEA,KAAIC,WAAW,IAAIvrC,iBAAJ,CAAuBC,GAAvB,EAA4BC,MAA5B,EAAoC/0D,IAApC,EAA0CC,GAA1C,CAAf;AACAmgG,UAAS5lG,EAAT,CAAYhJ,GAAZ,CAAiB,CAAjB,EAAoB,CAAE,CAAtB,EAAyB,CAAzB;AACA4uG,UAAS9lG,MAAT,CAAiB,IAAIxC,OAAJ,CAAa,CAAE,CAAf,EAAkB,CAAlB,EAAqB,CAArB,CAAjB;AACA,MAAKzF,GAAL,CAAU+tG,QAAV;;AAEA,KAAIC,WAAW,IAAIxrC,iBAAJ,CAAuBC,GAAvB,EAA4BC,MAA5B,EAAoC/0D,IAApC,EAA0CC,GAA1C,CAAf;AACAogG,UAAS7lG,EAAT,CAAYhJ,GAAZ,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACA6uG,UAAS/lG,MAAT,CAAiB,IAAIxC,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAjB;AACA,MAAKzF,GAAL,CAAUguG,QAAV;;AAEA,KAAIC,WAAW,IAAIzrC,iBAAJ,CAAuBC,GAAvB,EAA4BC,MAA5B,EAAoC/0D,IAApC,EAA0CC,GAA1C,CAAf;AACAqgG,UAAS9lG,EAAT,CAAYhJ,GAAZ,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAE,CAAzB;AACA8uG,UAAShmG,MAAT,CAAiB,IAAIxC,OAAJ,CAAa,CAAb,EAAgB,CAAE,CAAlB,EAAqB,CAArB,CAAjB;AACA,MAAKzF,GAAL,CAAUiuG,QAAV;;AAEA,KAAIC,WAAW,IAAI1rC,iBAAJ,CAAuBC,GAAvB,EAA4BC,MAA5B,EAAoC/0D,IAApC,EAA0CC,GAA1C,CAAf;AACAsgG,UAAS/lG,EAAT,CAAYhJ,GAAZ,CAAiB,CAAjB,EAAoB,CAAE,CAAtB,EAAyB,CAAzB;AACA+uG,UAASjmG,MAAT,CAAiB,IAAIxC,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,CAAjB;AACA,MAAKzF,GAAL,CAAUkuG,QAAV;;AAEA,KAAIC,WAAW,IAAI3rC,iBAAJ,CAAuBC,GAAvB,EAA4BC,MAA5B,EAAoC/0D,IAApC,EAA0CC,GAA1C,CAAf;AACAugG,UAAShmG,EAAT,CAAYhJ,GAAZ,CAAiB,CAAjB,EAAoB,CAAE,CAAtB,EAAyB,CAAzB;AACAgvG,UAASlmG,MAAT,CAAiB,IAAIxC,OAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAE,CAArB,CAAjB;AACA,MAAKzF,GAAL,CAAUmuG,QAAV;;AAEA,KAAI50F,UAAU,EAAEpD,QAAQnd,SAAV,EAAqBid,WAAWje,YAAhC,EAA8Cke,WAAWle,YAAzD,EAAd;;AAEA,MAAKkkE,YAAL,GAAoB,IAAIjiD,qBAAJ,CAA2B4zF,cAA3B,EAA2CA,cAA3C,EAA2Dt0F,OAA3D,CAApB;AACA,MAAK2iD,YAAL,CAAkBviD,OAAlB,CAA0BrD,IAA1B,GAAiC,YAAjC;;AAEA,MAAK5G,MAAL,GAAc,UAAWqkC,QAAX,EAAqBS,KAArB,EAA6B;;AAE1C,MAAK,KAAKne,MAAL,KAAgB,IAArB,EAA4B,KAAKxZ,iBAAL;;AAE5B,MAAIq/C,eAAe,KAAKA,YAAxB;AACA,MAAItlD,kBAAkBslD,aAAaviD,OAAb,CAAqB/C,eAA3C;;AAEAslD,eAAaviD,OAAb,CAAqB/C,eAArB,GAAuC,KAAvC;;AAEAslD,eAAahiD,cAAb,GAA8B,CAA9B;AACA65B,WAASO,MAAT,CAAiBE,KAAjB,EAAwBs5D,QAAxB,EAAkC5xC,YAAlC;;AAEAA,eAAahiD,cAAb,GAA8B,CAA9B;AACA65B,WAASO,MAAT,CAAiBE,KAAjB,EAAwBu5D,QAAxB,EAAkC7xC,YAAlC;;AAEAA,eAAahiD,cAAb,GAA8B,CAA9B;AACA65B,WAASO,MAAT,CAAiBE,KAAjB,EAAwBw5D,QAAxB,EAAkC9xC,YAAlC;;AAEAA,eAAahiD,cAAb,GAA8B,CAA9B;AACA65B,WAASO,MAAT,CAAiBE,KAAjB,EAAwBy5D,QAAxB,EAAkC/xC,YAAlC;;AAEAA,eAAahiD,cAAb,GAA8B,CAA9B;AACA65B,WAASO,MAAT,CAAiBE,KAAjB,EAAwB05D,QAAxB,EAAkChyC,YAAlC;;AAEAA,eAAaviD,OAAb,CAAqB/C,eAArB,GAAuCA,eAAvC;;AAEAslD,eAAahiD,cAAb,GAA8B,CAA9B;AACA65B,WAASO,MAAT,CAAiBE,KAAjB,EAAwB25D,QAAxB,EAAkCjyC,YAAlC;;AAEAnoB,WAASic,eAAT,CAA0B,IAA1B;AAEA,EA/BD;;AAiCA,MAAKnb,KAAL,GAAa,UAAWd,QAAX,EAAqB7oB,KAArB,EAA4B0G,KAA5B,EAAmC4jC,OAAnC,EAA6C;;AAEzD,MAAI0G,eAAe,KAAKA,YAAxB;;AAEA,OAAM,IAAI9oE,IAAI,CAAd,EAAiBA,IAAI,CAArB,EAAwBA,GAAxB,EAA+B;;AAE9B8oE,gBAAahiD,cAAb,GAA8B9mB,CAA9B;AACA2gD,YAASic,eAAT,CAA0BkM,YAA1B;;AAEAnoB,YAASc,KAAT,CAAgB3pB,KAAhB,EAAuB0G,KAAvB,EAA8B4jC,OAA9B;AAEA;;AAEDzhB,WAASic,eAAT,CAA0B,IAA1B;AAEA,EAfD;AAiBA;;AAED49C,WAAWz8G,SAAX,GAAuBC,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAvB;AACAy8G,WAAWz8G,SAAX,CAAqB0O,WAArB,GAAmC+tG,UAAnC;;AAEA;;;;AAIA,SAASQ,aAAT,GAAyB;;AAExBh4E,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,eAAZ;;AAEA,MAAK0lB,OAAL,GAAe60F,aAAa50F,UAAb,EAAf;;AAEA,MAAKo2F,IAAL,GAAY,KAAKr2F,OAAL,CAAas2F,UAAb,EAAZ;AACA,MAAKD,IAAL,CAAUE,OAAV,CAAmB,KAAKv2F,OAAL,CAAaw2F,WAAhC;;AAEA,MAAKzrD,MAAL,GAAc,IAAd;AAEA;;AAEDqrD,cAAcj9G,SAAd,GAA0BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAE7E0O,cAAauuG,aAFgE;;AAI7EK,WAAU,YAAY;;AAErB,SAAO,KAAKJ,IAAZ;AAEA,EAR4E;;AAU7EK,eAAc,YAAa;;AAE1B,MAAK,KAAK3rD,MAAL,KAAgB,IAArB,EAA4B;;AAE3B,QAAKsrD,IAAL,CAAUM,UAAV,CAAsB,KAAK5rD,MAA3B;AACA,QAAKA,MAAL,CAAY4rD,UAAZ,CAAwB,KAAK32F,OAAL,CAAaw2F,WAArC;AACA,QAAKH,IAAL,CAAUE,OAAV,CAAmB,KAAKv2F,OAAL,CAAaw2F,WAAhC;AACA,QAAKzrD,MAAL,GAAc,IAAd;AAEA;AAED,EArB4E;;AAuB7E6rD,YAAW,YAAY;;AAEtB,SAAO,KAAK7rD,MAAZ;AAEA,EA3B4E;;AA6B7E8rD,YAAW,UAAWh+G,KAAX,EAAmB;;AAE7B,MAAK,KAAKkyD,MAAL,KAAgB,IAArB,EAA4B;;AAE3B,QAAKsrD,IAAL,CAAUM,UAAV,CAAsB,KAAK5rD,MAA3B;AACA,QAAKA,MAAL,CAAY4rD,UAAZ,CAAwB,KAAK32F,OAAL,CAAaw2F,WAArC;AAEA,GALD,MAKO;;AAEN,QAAKH,IAAL,CAAUM,UAAV,CAAsB,KAAK32F,OAAL,CAAaw2F,WAAnC;AAEA;;AAED,OAAKzrD,MAAL,GAAclyD,KAAd;AACA,OAAKw9G,IAAL,CAAUE,OAAV,CAAmB,KAAKxrD,MAAxB;AACA,OAAKA,MAAL,CAAYwrD,OAAZ,CAAqB,KAAKv2F,OAAL,CAAaw2F,WAAlC;AAEA,EA9C4E;;AAgD7EM,kBAAiB,YAAY;;AAE5B,SAAO,KAAKT,IAAL,CAAUA,IAAV,CAAex9G,KAAtB;AAEA,EApD4E;;AAsD7Ek+G,kBAAiB,UAAWl+G,KAAX,EAAmB;;AAEnC,OAAKw9G,IAAL,CAAUA,IAAV,CAAeW,eAAf,CAAgCn+G,KAAhC,EAAuC,KAAKmnB,OAAL,CAAai3F,WAApD,EAAiE,IAAjE;AAEA,EA1D4E;;AA4D7EpyF,oBAAqB,YAAY;;AAEhC,MAAInQ,WAAW,IAAIjH,OAAJ,EAAf;AACA,MAAIkH,aAAa,IAAIqB,UAAJ,EAAjB;AACA,MAAIvC,QAAQ,IAAIhG,OAAJ,EAAZ;;AAEA,MAAIugE,cAAc,IAAIvgE,OAAJ,EAAlB;;AAEA,SAAO,SAASoX,iBAAT,CAA4Bwc,KAA5B,EAAoC;;AAE1CjD,YAASjlC,SAAT,CAAmB0rB,iBAAnB,CAAqC1qB,IAArC,CAA2C,IAA3C,EAAiDknC,KAAjD;;AAEA,OAAI9mC,WAAW,KAAKylB,OAAL,CAAazlB,QAA5B;AACA,OAAI4V,KAAK,KAAKA,EAAd;;AAEA,QAAKkL,WAAL,CAAiBzG,SAAjB,CAA4BF,QAA5B,EAAsCC,UAAtC,EAAkDlB,KAAlD;;AAEAu6D,eAAY7mE,GAAZ,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAE,CAAzB,EAA6BqT,eAA7B,CAA8C7F,UAA9C;;AAEA,OAAKpa,SAAS28G,SAAd,EAA0B;;AAEzB38G,aAAS28G,SAAT,CAAmBC,cAAnB,CAAmCziG,SAASzb,CAA5C,EAA+C,KAAK+mB,OAAL,CAAai3F,WAA5D;AACA18G,aAAS68G,SAAT,CAAmBD,cAAnB,CAAmCziG,SAAS7O,CAA5C,EAA+C,KAAKma,OAAL,CAAai3F,WAA5D;AACA18G,aAAS88G,SAAT,CAAmBF,cAAnB,CAAmCziG,SAASnH,CAA5C,EAA+C,KAAKyS,OAAL,CAAai3F,WAA5D;AACA18G,aAAS+8G,QAAT,CAAkBH,cAAlB,CAAkCnpC,YAAY/0E,CAA9C,EAAiD,KAAK+mB,OAAL,CAAai3F,WAA9D;AACA18G,aAASg9G,QAAT,CAAkBJ,cAAlB,CAAkCnpC,YAAYnoE,CAA9C,EAAiD,KAAKma,OAAL,CAAai3F,WAA9D;AACA18G,aAASi9G,QAAT,CAAkBL,cAAlB,CAAkCnpC,YAAYzgE,CAA9C,EAAiD,KAAKyS,OAAL,CAAai3F,WAA9D;AACA18G,aAASk9G,GAAT,CAAaN,cAAb,CAA6BhnG,GAAGlX,CAAhC,EAAmC,KAAK+mB,OAAL,CAAai3F,WAAhD;AACA18G,aAASm9G,GAAT,CAAaP,cAAb,CAA6BhnG,GAAGtK,CAAhC,EAAmC,KAAKma,OAAL,CAAai3F,WAAhD;AACA18G,aAASo9G,GAAT,CAAaR,cAAb,CAA6BhnG,GAAG5C,CAAhC,EAAmC,KAAKyS,OAAL,CAAai3F,WAAhD;AAEA,IAZD,MAYO;;AAEN18G,aAASwY,WAAT,CAAsB2B,SAASzb,CAA/B,EAAkCyb,SAAS7O,CAA3C,EAA8C6O,SAASnH,CAAvD;AACAhT,aAASq9G,cAAT,CAAyB5pC,YAAY/0E,CAArC,EAAwC+0E,YAAYnoE,CAApD,EAAuDmoE,YAAYzgE,CAAnE,EAAsE4C,GAAGlX,CAAzE,EAA4EkX,GAAGtK,CAA/E,EAAkFsK,GAAG5C,CAArF;AAEA;AAED,GA9BD;AAgCA,EAxCkB;;AA5D0D,CAApD,CAA1B;;AAwGA;;;;;AAKA,SAASsqG,KAAT,CAAgBt9G,QAAhB,EAA2B;;AAE1B6jC,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKG,IAAL,GAAY,OAAZ;;AAEA,MAAK0lB,OAAL,GAAezlB,SAASylB,OAAxB;;AAEA,MAAKq2F,IAAL,GAAY,KAAKr2F,OAAL,CAAas2F,UAAb,EAAZ;AACA,MAAKD,IAAL,CAAUE,OAAV,CAAmBh8G,SAASk8G,QAAT,EAAnB;;AAEA,MAAKqB,QAAL,GAAgB,KAAhB;;AAEA,MAAK38E,MAAL,GAAc,IAAd;AACA,MAAK48E,IAAL,GAAY,KAAZ;AACA,MAAK3R,SAAL,GAAiB,CAAjB;AACA,MAAKr7F,MAAL,GAAc,CAAd;AACA,MAAKitG,YAAL,GAAoB,CAApB;AACA,MAAKC,SAAL,GAAiB,KAAjB;AACA,MAAKC,kBAAL,GAA0B,IAA1B;AACA,MAAKC,UAAL,GAAkB,OAAlB;;AAEA,MAAKC,OAAL,GAAe,EAAf;AAEA;;AAEDP,MAAM1+G,SAAN,GAAkBC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAf,EAAoD;;AAErE0O,cAAagwG,KAFwD;;AAIrEQ,YAAW,YAAY;;AAEtB,SAAO,KAAKhC,IAAZ;AAEA,EARoE;;AAUrEiC,gBAAe,UAAWC,SAAX,EAAuB;;AAErC,OAAKL,kBAAL,GAA0B,KAA1B;AACA,OAAKC,UAAL,GAAkB,WAAlB;AACA,OAAKn+G,MAAL,GAAcu+G,SAAd;AACA,OAAKhC,OAAL;;AAEA,SAAO,IAAP;AAEA,EAnBoE;;AAqBrEiC,YAAW,UAAWtD,WAAX,EAAyB;;AAEnC,OAAK/5E,MAAL,GAAc+5E,WAAd;AACA,OAAKiD,UAAL,GAAkB,QAAlB;;AAEA,MAAK,KAAKL,QAAV,EAAqB,KAAKW,IAAL;;AAErB,SAAO,IAAP;AAEA,EA9BoE;;AAgCrEA,OAAM,YAAY;;AAEjB,MAAK,KAAKR,SAAL,KAAmB,IAAxB,EAA+B;;AAE9B/vG,WAAQC,IAAR,CAAc,wCAAd;AACA;AAEA;;AAED,MAAK,KAAK+vG,kBAAL,KAA4B,KAAjC,EAAyC;;AAExChwG,WAAQC,IAAR,CAAc,kDAAd;AACA;AAEA;;AAED,MAAInO,SAAS,KAAKgmB,OAAL,CAAa04F,kBAAb,EAAb;;AAEA1+G,SAAOmhC,MAAP,GAAgB,KAAKA,MAArB;AACAnhC,SAAO+9G,IAAP,GAAc,KAAKA,IAAnB;AACA/9G,SAAO2+G,OAAP,GAAiB,KAAKC,OAAL,CAAa57B,IAAb,CAAmB,IAAnB,CAAjB;AACAhjF,SAAOg+G,YAAP,CAAoBb,cAApB,CAAoC,KAAKa,YAAzC,EAAuD,KAAK5R,SAA5D;AACA,OAAKA,SAAL,GAAiB,KAAKpmF,OAAL,CAAai3F,WAA9B;AACAj9G,SAAOguB,KAAP,CAAc,KAAKo+E,SAAnB,EAA8B,KAAKr7F,MAAnC;;AAEA,OAAKktG,SAAL,GAAiB,IAAjB;;AAEA,OAAKj+G,MAAL,GAAcA,MAAd;;AAEA,SAAO,KAAKu8G,OAAL,EAAP;AAEA,EA/DoE;;AAiErEsC,QAAO,YAAY;;AAElB,MAAK,KAAKX,kBAAL,KAA4B,KAAjC,EAAyC;;AAExChwG,WAAQC,IAAR,CAAc,kDAAd;AACA;AAEA;;AAED,MAAK,KAAK8vG,SAAL,KAAmB,IAAxB,EAA+B;;AAE9B,QAAKj+G,MAAL,CAAY4rF,IAAZ;AACA,QAAK76E,MAAL,IAAe,CAAE,KAAKiV,OAAL,CAAai3F,WAAb,GAA2B,KAAK7Q,SAAlC,IAAgD,KAAK4R,YAApE;AACA,QAAKC,SAAL,GAAiB,KAAjB;AAEA;;AAED,SAAO,IAAP;AAEA,EApFoE;;AAsFrEryB,OAAM,YAAY;;AAEjB,MAAK,KAAKsyB,kBAAL,KAA4B,KAAjC,EAAyC;;AAExChwG,WAAQC,IAAR,CAAc,kDAAd;AACA;AAEA;;AAED,OAAKnO,MAAL,CAAY4rF,IAAZ;AACA,OAAK76E,MAAL,GAAc,CAAd;AACA,OAAKktG,SAAL,GAAiB,KAAjB;;AAEA,SAAO,IAAP;AAEA,EArGoE;;AAuGrE1B,UAAS,YAAY;;AAEpB,MAAK,KAAK6B,OAAL,CAAar+G,MAAb,GAAsB,CAA3B,EAA+B;;AAE9B,QAAKC,MAAL,CAAYu8G,OAAZ,CAAqB,KAAK6B,OAAL,CAAc,CAAd,CAArB;;AAEA,QAAM,IAAIh9G,IAAI,CAAR,EAAWC,IAAI,KAAK+8G,OAAL,CAAar+G,MAAlC,EAA0CqB,IAAIC,CAA9C,EAAiDD,GAAjD,EAAwD;;AAEvD,SAAKg9G,OAAL,CAAch9G,IAAI,CAAlB,EAAsBm7G,OAAtB,CAA+B,KAAK6B,OAAL,CAAch9G,CAAd,CAA/B;AAEA;;AAED,QAAKg9G,OAAL,CAAc,KAAKA,OAAL,CAAar+G,MAAb,GAAsB,CAApC,EAAwCw8G,OAAxC,CAAiD,KAAK8B,SAAL,EAAjD;AAEA,GAZD,MAYO;;AAEN,QAAKr+G,MAAL,CAAYu8G,OAAZ,CAAqB,KAAK8B,SAAL,EAArB;AAEA;;AAED,SAAO,IAAP;AAEA,EA7HoE;;AA+HrE1B,aAAY,YAAY;;AAEvB,MAAK,KAAKyB,OAAL,CAAar+G,MAAb,GAAsB,CAA3B,EAA+B;;AAE9B,QAAKC,MAAL,CAAY28G,UAAZ,CAAwB,KAAKyB,OAAL,CAAc,CAAd,CAAxB;;AAEA,QAAM,IAAIh9G,IAAI,CAAR,EAAWC,IAAI,KAAK+8G,OAAL,CAAar+G,MAAlC,EAA0CqB,IAAIC,CAA9C,EAAiDD,GAAjD,EAAwD;;AAEvD,SAAKg9G,OAAL,CAAch9G,IAAI,CAAlB,EAAsBu7G,UAAtB,CAAkC,KAAKyB,OAAL,CAAch9G,CAAd,CAAlC;AAEA;;AAED,QAAKg9G,OAAL,CAAc,KAAKA,OAAL,CAAar+G,MAAb,GAAsB,CAApC,EAAwC48G,UAAxC,CAAoD,KAAK0B,SAAL,EAApD;AAEA,GAZD,MAYO;;AAEN,QAAKr+G,MAAL,CAAY28G,UAAZ,CAAwB,KAAK0B,SAAL,EAAxB;AAEA;;AAED,SAAO,IAAP;AAEA,EArJoE;;AAuJrES,aAAY,YAAY;;AAEvB,SAAO,KAAKV,OAAZ;AAEA,EA3JoE;;AA6JrEW,aAAY,UAAWlgH,KAAX,EAAmB;;AAE9B,MAAK,CAAEA,KAAP,EAAeA,QAAQ,EAAR;;AAEf,MAAK,KAAKo/G,SAAL,KAAmB,IAAxB,EAA+B;;AAE9B,QAAKtB,UAAL;AACA,QAAKyB,OAAL,GAAev/G,KAAf;AACA,QAAK09G,OAAL;AAEA,GAND,MAMO;;AAEN,QAAK6B,OAAL,GAAev/G,KAAf;AAEA;;AAED,SAAO,IAAP;AAEA,EA/KoE;;AAiLrE+9G,YAAW,YAAY;;AAEtB,SAAO,KAAKkC,UAAL,GAAmB,CAAnB,CAAP;AAEA,EArLoE;;AAuLrEjC,YAAW,UAAW9rD,MAAX,EAAoB;;AAE9B,SAAO,KAAKguD,UAAL,CAAiBhuD,SAAS,CAAEA,MAAF,CAAT,GAAsB,EAAvC,CAAP;AAEA,EA3LoE;;AA6LrEiuD,kBAAiB,UAAWngH,KAAX,EAAmB;;AAEnC,MAAK,KAAKq/G,kBAAL,KAA4B,KAAjC,EAAyC;;AAExChwG,WAAQC,IAAR,CAAc,kDAAd;AACA;AAEA;;AAED,OAAK6vG,YAAL,GAAoBn/G,KAApB;;AAEA,MAAK,KAAKo/G,SAAL,KAAmB,IAAxB,EAA+B;;AAE9B,QAAKj+G,MAAL,CAAYg+G,YAAZ,CAAyBb,cAAzB,CAAyC,KAAKa,YAA9C,EAA4D,KAAKh4F,OAAL,CAAai3F,WAAzE;AAEA;;AAED,SAAO,IAAP;AAEA,EAhNoE;;AAkNrEgC,kBAAiB,YAAY;;AAE5B,SAAO,KAAKjB,YAAZ;AAEA,EAtNoE;;AAwNrEY,UAAS,YAAY;;AAEpB,OAAKX,SAAL,GAAiB,KAAjB;AAEA,EA5NoE;;AA8NrEiB,UAAS,YAAY;;AAEpB,MAAK,KAAKhB,kBAAL,KAA4B,KAAjC,EAAyC;;AAExChwG,WAAQC,IAAR,CAAc,kDAAd;AACA,UAAO,KAAP;AAEA;;AAED,SAAO,KAAK4vG,IAAZ;AAEA,EAzOoE;;AA2OrEoB,UAAS,UAAWtgH,KAAX,EAAmB;;AAE3B,MAAK,KAAKq/G,kBAAL,KAA4B,KAAjC,EAAyC;;AAExChwG,WAAQC,IAAR,CAAc,kDAAd;AACA;AAEA;;AAED,OAAK4vG,IAAL,GAAYl/G,KAAZ;;AAEA,MAAK,KAAKo/G,SAAL,KAAmB,IAAxB,EAA+B;;AAE9B,QAAKj+G,MAAL,CAAY+9G,IAAZ,GAAmB,KAAKA,IAAxB;AAEA;;AAED,SAAO,IAAP;AAEA,EA9PoE;;AAgQrEqB,YAAW,YAAY;;AAEtB,SAAO,KAAK/C,IAAL,CAAUA,IAAV,CAAex9G,KAAtB;AAEA,EApQoE;;AAsQrEwgH,YAAW,UAAWxgH,KAAX,EAAmB;;AAE7B,OAAKw9G,IAAL,CAAUA,IAAV,CAAeW,eAAf,CAAgCn+G,KAAhC,EAAuC,KAAKmnB,OAAL,CAAai3F,WAApD,EAAiE,IAAjE;;AAEA,SAAO,IAAP;AAEA;;AA5QoE,CAApD,CAAlB;;AAgRA;;;;AAIA,SAASqC,eAAT,CAA0B/+G,QAA1B,EAAqC;;AAEpCs9G,OAAM19G,IAAN,CAAY,IAAZ,EAAkBI,QAAlB;;AAEA,MAAKg/G,MAAL,GAAc,KAAKv5F,OAAL,CAAaw5F,YAAb,EAAd;AACA,MAAKD,MAAL,CAAYhD,OAAZ,CAAqB,KAAKF,IAA1B;AAEA;;AAEDiD,gBAAgBngH,SAAhB,GAA4BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAe24F,MAAM1+G,SAArB,CAAf,EAAiD;;AAE5E0O,cAAayxG,eAF+D;;AAI5EjB,YAAW,YAAY;;AAEtB,SAAO,KAAKkB,MAAZ;AAEA,EAR2E;;AAU5EE,iBAAgB,YAAY;;AAE3B,SAAO,KAAKF,MAAL,CAAYG,WAAnB;AAEA,EAd2E;;AAgB5EC,iBAAgB,UAAW9gH,KAAX,EAAmB;;AAElC,OAAK0gH,MAAL,CAAYG,WAAZ,GAA0B7gH,KAA1B;AAEA,EApB2E;;AAsB5E+gH,mBAAkB,YAAY;;AAE7B,SAAO,KAAKL,MAAL,CAAYM,aAAnB;AAEA,EA1B2E;;AA4B5EC,mBAAkB,UAAWjhH,KAAX,EAAmB;;AAEpC,OAAK0gH,MAAL,CAAYM,aAAZ,GAA4BhhH,KAA5B;AAEA,EAhC2E;;AAkC5EkhH,mBAAkB,YAAY;;AAE7B,SAAO,KAAKR,MAAL,CAAYS,aAAnB;AAEA,EAtC2E;;AAwC5EC,mBAAkB,UAAWphH,KAAX,EAAmB;;AAEpC,OAAK0gH,MAAL,CAAYS,aAAZ,GAA4BnhH,KAA5B;AAEA,EA5C2E;;AA8C5EqhH,iBAAgB,YAAY;;AAE3B,SAAO,KAAKX,MAAL,CAAYY,WAAnB;AAEA,EAlD2E;;AAoD5EC,iBAAgB,UAAWvhH,KAAX,EAAmB;;AAElC,OAAK0gH,MAAL,CAAYY,WAAZ,GAA0BthH,KAA1B;AAEA,EAxD2E;;AA0D5EgsB,oBAAqB,YAAY;;AAEhC,MAAInQ,WAAW,IAAIjH,OAAJ,EAAf;;AAEA,SAAO,SAASoX,iBAAT,CAA4Bwc,KAA5B,EAAoC;;AAE1CjD,YAASjlC,SAAT,CAAmB0rB,iBAAnB,CAAqC1qB,IAArC,CAA2C,IAA3C,EAAiDknC,KAAjD;;AAEA3sB,YAASkI,qBAAT,CAAgC,KAAKvB,WAArC;;AAEA,QAAKk+F,MAAL,CAAYxmG,WAAZ,CAAyB2B,SAASzb,CAAlC,EAAqCyb,SAAS7O,CAA9C,EAAiD6O,SAASnH,CAA1D;AAEA,GARD;AAUA,EAdkB;;AA1DyD,CAAjD,CAA5B;;AA6EA;;;;AAIA,SAAS8sG,aAAT,CAAwBC,KAAxB,EAA+BC,OAA/B,EAAyC;;AAExC,MAAKC,QAAL,GAAgBF,MAAMt6F,OAAN,CAAcy6F,cAAd,EAAhB;AACA,MAAKD,QAAL,CAAcD,OAAd,GAAwBA,YAAY9hH,SAAZ,GAAwB8hH,OAAxB,GAAkC,IAA1D;;AAEA,MAAKj4F,IAAL,GAAY,IAAI8Z,UAAJ,CAAgB,KAAKo+E,QAAL,CAAcE,iBAA9B,CAAZ;;AAEAJ,OAAMjC,SAAN,GAAkB9B,OAAlB,CAA2B,KAAKiE,QAAhC;AAEA;;AAEDphH,OAAOK,MAAP,CAAe4gH,cAAclhH,SAA7B,EAAwC;;AAEvCwhH,mBAAkB,YAAY;;AAE7B,OAAKH,QAAL,CAAcI,oBAAd,CAAoC,KAAKt4F,IAAzC;;AAEA,SAAO,KAAKA,IAAZ;AAEA,EARsC;;AAUvCu4F,sBAAqB,YAAY;;AAEhC,MAAIhiH,QAAQ,CAAZ;AAAA,MAAeypB,OAAO,KAAKq4F,gBAAL,EAAtB;;AAEA,OAAM,IAAIv/G,IAAI,CAAd,EAAiBA,IAAIknB,KAAKvoB,MAA1B,EAAkCqB,GAAlC,EAAyC;;AAExCvC,YAASypB,KAAMlnB,CAAN,CAAT;AAEA;;AAED,SAAOvC,QAAQypB,KAAKvoB,MAApB;AAEA;;AAtBsC,CAAxC;;AA0BA;;;;;;;;;;AAUA,SAAS+gH,aAAT,CAAwBC,OAAxB,EAAiCnV,QAAjC,EAA2C5E,SAA3C,EAAuD;;AAEtD,MAAK+Z,OAAL,GAAeA,OAAf;AACA,MAAK/Z,SAAL,GAAiBA,SAAjB;;AAEA,KAAIlmE,aAAaW,YAAjB;AAAA,KACCu/E,WADD;;AAGA,SAASpV,QAAT;;AAEC,OAAK,YAAL;AACCoV,iBAAc,KAAKC,MAAnB;AACA;;AAED,OAAK,QAAL;AACA,OAAK,MAAL;AACCngF,gBAAa3I,KAAb;AACA6oF,iBAAc,KAAKE,OAAnB;AACA;;AAED;AACCF,iBAAc,KAAKG,KAAnB;;AAbF;;AAiBA,MAAKhgF,MAAL,GAAc,IAAIL,UAAJ,CAAgBkmE,YAAY,CAA5B,CAAd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAKoa,gBAAL,GAAwBJ,WAAxB;;AAEA,MAAKK,gBAAL,GAAwB,CAAxB;;AAEA,MAAKC,QAAL,GAAgB,CAAhB;AACA,MAAKC,cAAL,GAAsB,CAAtB;AAEA;;AAEDniH,OAAOK,MAAP,CAAeqhH,cAAc3hH,SAA7B,EAAwC;;AAEvC;AACAqiH,aAAY,UAAWC,SAAX,EAAsBngB,MAAtB,EAA+B;;AAE1C;AACA;;AAEA,MAAIngE,SAAS,KAAKA,MAAlB;AAAA,MACCu6C,SAAS,KAAKsrB,SADf;AAAA,MAECj2F,SAAS0wG,YAAY/lC,MAAZ,GAAqBA,MAF/B;AAAA,MAICgmC,gBAAgB,KAAKL,gBAJtB;;AAMA,MAAKK,kBAAkB,CAAvB,EAA2B;;AAE1B;;AAEA,QAAM,IAAItgH,IAAI,CAAd,EAAiBA,MAAMs6E,MAAvB,EAA+B,EAAGt6E,CAAlC,EAAsC;;AAErC+/B,WAAQpwB,SAAS3P,CAAjB,IAAuB+/B,OAAQ//B,CAAR,CAAvB;AAEA;;AAEDsgH,mBAAgBpgB,MAAhB;AAEA,GAZD,MAYO;;AAEN;;AAEAogB,oBAAiBpgB,MAAjB;AACA,OAAIqgB,MAAMrgB,SAASogB,aAAnB;AACA,QAAKN,gBAAL,CAAuBjgF,MAAvB,EAA+BpwB,MAA/B,EAAuC,CAAvC,EAA0C4wG,GAA1C,EAA+CjmC,MAA/C;AAEA;;AAED,OAAK2lC,gBAAL,GAAwBK,aAAxB;AAEA,EAtCsC;;AAwCvC;AACA/4C,QAAO,UAAW84C,SAAX,EAAuB;;AAE7B,MAAI/lC,SAAS,KAAKsrB,SAAlB;AAAA,MACC7lE,SAAS,KAAKA,MADf;AAAA,MAECpwB,SAAS0wG,YAAY/lC,MAAZ,GAAqBA,MAF/B;AAAA,MAIC4lB,SAAS,KAAK+f,gBAJf;AAAA,MAMCN,UAAU,KAAKA,OANhB;;AAQA,OAAKM,gBAAL,GAAwB,CAAxB;;AAEA,MAAK/f,SAAS,CAAd,EAAkB;;AAEjB;;AAEA,OAAIsgB,sBAAsBlmC,SAAS,CAAnC;;AAEA,QAAK0lC,gBAAL,CACCjgF,MADD,EACSpwB,MADT,EACiB6wG,mBADjB,EACsC,IAAItgB,MAD1C,EACkD5lB,MADlD;AAGA;;AAED,OAAM,IAAIt6E,IAAIs6E,MAAR,EAAgBxsE,IAAIwsE,SAASA,MAAnC,EAA2Ct6E,MAAM8N,CAAjD,EAAoD,EAAG9N,CAAvD,EAA2D;;AAE1D,OAAK+/B,OAAQ//B,CAAR,MAAgB+/B,OAAQ//B,IAAIs6E,MAAZ,CAArB,EAA4C;;AAE3C;;AAEAqlC,YAAQ/2D,QAAR,CAAkB7oB,MAAlB,EAA0BpwB,MAA1B;AACA;AAEA;AAED;AAED,EA7EsC;;AA+EvC;AACA8wG,oBAAmB,YAAY;;AAE9B,MAAId,UAAU,KAAKA,OAAnB;;AAEA,MAAI5/E,SAAS,KAAKA,MAAlB;AAAA,MACCu6C,SAAS,KAAKsrB,SADf;AAAA,MAGC4a,sBAAsBlmC,SAAS,CAHhC;;AAKAqlC,UAAQe,QAAR,CAAkB3gF,MAAlB,EAA0BygF,mBAA1B;;AAEA;AACA,OAAM,IAAIxgH,IAAIs6E,MAAR,EAAgBxsE,IAAI0yG,mBAA1B,EAA+CxgH,MAAM8N,CAArD,EAAwD,EAAG9N,CAA3D,EAA+D;;AAE9D+/B,UAAQ//B,CAAR,IAAc+/B,OAAQygF,sBAAwBxgH,IAAIs6E,MAApC,CAAd;AAEA;;AAED,OAAK2lC,gBAAL,GAAwB,CAAxB;AAEA,EApGsC;;AAsGvC;AACAU,uBAAsB,YAAY;;AAEjC,MAAIH,sBAAsB,KAAK5a,SAAL,GAAiB,CAA3C;AACA,OAAK+Z,OAAL,CAAa/2D,QAAb,CAAuB,KAAK7oB,MAA5B,EAAoCygF,mBAApC;AAEA,EA5GsC;;AA+GvC;;AAEAV,UAAS,UAAW//E,MAAX,EAAmB5kB,SAAnB,EAA8ByuF,SAA9B,EAAyCl/F,CAAzC,EAA4C4vE,MAA5C,EAAqD;;AAE7D,MAAK5vE,KAAK,GAAV,EAAgB;;AAEf,QAAM,IAAI1K,IAAI,CAAd,EAAiBA,MAAMs6E,MAAvB,EAA+B,EAAGt6E,CAAlC,EAAsC;;AAErC+/B,WAAQ5kB,YAAYnb,CAApB,IAA0B+/B,OAAQ6pE,YAAY5pG,CAApB,CAA1B;AAEA;AAED;AAED,EA7HsC;;AA+HvC6/G,SAAQ,UAAW9/E,MAAX,EAAmB5kB,SAAnB,EAA8ByuF,SAA9B,EAAyCl/F,CAAzC,EAA6C;;AAEpDkQ,aAAWK,SAAX,CAAsB8kB,MAAtB,EAA8B5kB,SAA9B,EAAyC4kB,MAAzC,EAAiD5kB,SAAjD,EAA4D4kB,MAA5D,EAAoE6pE,SAApE,EAA+El/F,CAA/E;AAEA,EAnIsC;;AAqIvCq1G,QAAO,UAAWhgF,MAAX,EAAmB5kB,SAAnB,EAA8ByuF,SAA9B,EAAyCl/F,CAAzC,EAA4C4vE,MAA5C,EAAqD;;AAE3D,MAAIptE,IAAI,IAAIxC,CAAZ;;AAEA,OAAM,IAAI1K,IAAI,CAAd,EAAiBA,MAAMs6E,MAAvB,EAA+B,EAAGt6E,CAAlC,EAAsC;;AAErC,OAAI+qB,IAAI5P,YAAYnb,CAApB;;AAEA+/B,UAAQhV,CAAR,IAAcgV,OAAQhV,CAAR,IAAc7d,CAAd,GAAkB6yB,OAAQ6pE,YAAY5pG,CAApB,IAA0B0K,CAA1D;AAEA;AAED;;AAjJsC,CAAxC;;AAqJA;;;;;;;;;;AAUA;AACA,IAAIk2G,oBAAoB,eAAxB;;AAEA,SAASC,SAAT,CAAoBC,WAApB,EAAiCzzD,IAAjC,EAAuC0zD,kBAAvC,EAA4D;;AAE3D,KAAIC,aAAaD,sBAAsBE,gBAAgBC,cAAhB,CAAgC7zD,IAAhC,CAAvC;;AAEA,MAAK8zD,YAAL,GAAoBL,WAApB;AACA,MAAKM,SAAL,GAAiBN,YAAYO,UAAZ,CAAwBh0D,IAAxB,EAA8B2zD,UAA9B,CAAjB;AAEA;;AAEDhjH,OAAOK,MAAP,CAAewiH,UAAU9iH,SAAzB,EAAoC;;AAEnC2iH,WAAU,UAAW5gH,KAAX,EAAkB6P,MAAlB,EAA2B;;AAEpC,OAAKiyE,IAAL,GAFoC,CAEvB;;AAEb,MAAI0/B,kBAAkB,KAAKH,YAAL,CAAkBI,eAAxC;AAAA,MACC5B,UAAU,KAAKyB,SAAL,CAAgBE,eAAhB,CADX;;AAGA;AACA,MAAK3B,YAAYtiH,SAAjB,EAA6BsiH,QAAQe,QAAR,CAAkB5gH,KAAlB,EAAyB6P,MAAzB;AAE7B,EAZkC;;AAcnCi5C,WAAU,UAAW9oD,KAAX,EAAkB6P,MAAlB,EAA2B;;AAEpC,MAAI6xG,WAAW,KAAKJ,SAApB;;AAEA,OAAM,IAAIphH,IAAI,KAAKmhH,YAAL,CAAkBI,eAA1B,EACFt3G,IAAIu3G,SAAS7iH,MADjB,EACyBqB,MAAMiK,CAD/B,EACkC,EAAGjK,CADrC,EACyC;;AAExCwhH,YAAUxhH,CAAV,EAAc4oD,QAAd,CAAwB9oD,KAAxB,EAA+B6P,MAA/B;AAEA;AAED,EAzBkC;;AA2BnCiyE,OAAM,YAAY;;AAEjB,MAAI4/B,WAAW,KAAKJ,SAApB;;AAEA,OAAM,IAAIphH,IAAI,KAAKmhH,YAAL,CAAkBI,eAA1B,EACFt3G,IAAIu3G,SAAS7iH,MADjB,EACyBqB,MAAMiK,CAD/B,EACkC,EAAGjK,CADrC,EACyC;;AAExCwhH,YAAUxhH,CAAV,EAAc4hF,IAAd;AAEA;AAED,EAtCkC;;AAwCnC6/B,SAAQ,YAAY;;AAEnB,MAAID,WAAW,KAAKJ,SAApB;;AAEA,OAAM,IAAIphH,IAAI,KAAKmhH,YAAL,CAAkBI,eAA1B,EACFt3G,IAAIu3G,SAAS7iH,MADjB,EACyBqB,MAAMiK,CAD/B,EACkC,EAAGjK,CADrC,EACyC;;AAExCwhH,YAAUxhH,CAAV,EAAcyhH,MAAd;AAEA;AAED;;AAnDkC,CAApC;;AAwDA,SAASR,eAAT,CAA0BS,QAA1B,EAAoCr0D,IAApC,EAA0C2zD,UAA1C,EAAuD;;AAEtD,MAAK3zD,IAAL,GAAYA,IAAZ;AACA,MAAK2zD,UAAL,GAAkBA,cAAcC,gBAAgBC,cAAhB,CAAgC7zD,IAAhC,CAAhC;;AAEA,MAAKlkC,IAAL,GAAY83F,gBAAgBU,QAAhB,CAA0BD,QAA1B,EAAoC,KAAKV,UAAL,CAAgBY,QAApD,KAAkEF,QAA9E;;AAEA,MAAKA,QAAL,GAAgBA,QAAhB;AAEA;;AAED1jH,OAAOK,MAAP,CAAe4iH,eAAf,EAAgC;;AAE/BJ,YAAWA,SAFoB;;AAI/B/8F,SAAQ,UAAW+9F,IAAX,EAAiBx0D,IAAjB,EAAuB2zD,UAAvB,EAAoC;;AAE3C,MAAK,EAAIa,QAAQA,KAAKC,sBAAjB,CAAL,EAAiD;;AAEhD,UAAO,IAAIb,eAAJ,CAAqBY,IAArB,EAA2Bx0D,IAA3B,EAAiC2zD,UAAjC,CAAP;AAEA,GAJD,MAIO;;AAEN,UAAO,IAAIC,gBAAgBJ,SAApB,CAA+BgB,IAA/B,EAAqCx0D,IAArC,EAA2C2zD,UAA3C,CAAP;AAEA;AAED,EAhB8B;;AAkB/B;;;;;;;AAOAe,mBAAoB,YAAY;;AAE/B,MAAIC,aAAa,IAAIC,MAAJ,CAAY,MAAMrB,iBAAN,GAA0B,GAAtC,EAA2C,GAA3C,CAAjB;;AAEA,SAAO,SAASmB,gBAAT,CAA2B7+F,IAA3B,EAAkC;;AAExC,UAAOA,KAAKitC,OAAL,CAAc,KAAd,EAAqB,GAArB,EAA2BA,OAA3B,CAAoC6xD,UAApC,EAAgD,EAAhD,CAAP;AAEA,GAJD;AAMA,EAVmB,EAzBW;;AAqC/Bd,iBAAgB,YAAY;;AAE3B;AACA;AACA;AACA,MAAIgB,WAAW,OAAOtB,iBAAP,GAA2B,GAA1C;AACA,MAAIuB,gBAAgB,OAAOvB,kBAAkBzwD,OAAlB,CAA2B,KAA3B,EAAkC,EAAlC,CAAP,GAAgD,GAApE;;AAEA;AACA;AACA,MAAIiyD,cAAc,kBAAkBxjH,MAAlB,CAAyBuxD,OAAzB,CAAkC,IAAlC,EAAwC+xD,QAAxC,CAAlB;;AAEA;AACA,MAAIG,SAAS,WAAWzjH,MAAX,CAAkBuxD,OAAlB,CAA2B,MAA3B,EAAmCgyD,aAAnC,CAAb;;AAEA;AACA;AACA,MAAIG,WAAW,4BAA4B1jH,MAA5B,CAAmCuxD,OAAnC,CAA4C,IAA5C,EAAkD+xD,QAAlD,CAAf;;AAEA;AACA;AACA,MAAIK,aAAa,uBAAuB3jH,MAAvB,CAA8BuxD,OAA9B,CAAuC,IAAvC,EAA6C+xD,QAA7C,CAAjB;;AAEA,MAAIM,UAAU,IAAIP,MAAJ,CAAY,KACvB,GADuB,GAEvBG,WAFuB,GAGvBC,MAHuB,GAIvBC,QAJuB,GAKvBC,UALuB,GAMvB,GANW,CAAd;;AASA,MAAIE,uBAAuB,CAAE,UAAF,EAAc,WAAd,EAA2B,OAA3B,CAA3B;;AAEA,SAAO,SAASvB,cAAT,CAAyB3T,SAAzB,EAAqC;;AAE3C,OAAImV,UAAUF,QAAQ3qF,IAAR,CAAc01E,SAAd,CAAd;;AAEA,OAAK,CAAEmV,OAAP,EAAiB;;AAEhB,UAAM,IAAIp2G,KAAJ,CAAW,8CAA8CihG,SAAzD,CAAN;AAEA;;AAED,OAAIoV,UAAU;AACb;AACAf,cAAUc,QAAS,CAAT,CAFG;AAGbE,gBAAYF,QAAS,CAAT,CAHC;AAIbG,iBAAaH,QAAS,CAAT,CAJA;AAKbjV,kBAAciV,QAAS,CAAT,CALD,EAKe;AAC5BI,mBAAeJ,QAAS,CAAT;AANF,IAAd;;AASA,OAAIK,UAAUJ,QAAQf,QAAR,IAAoBe,QAAQf,QAAR,CAAiBpP,WAAjB,CAA8B,GAA9B,CAAlC;;AAEA,OAAKuQ,YAAY1lH,SAAZ,IAAyB0lH,YAAY,CAAE,CAA5C,EAAgD;;AAE/C,QAAIH,aAAaD,QAAQf,QAAR,CAAiB3N,SAAjB,CAA4B8O,UAAU,CAAtC,CAAjB;;AAEA;AACA;AACA;AACA;AACA,QAAKN,qBAAqBnjH,OAArB,CAA8BsjH,UAA9B,MAA+C,CAAE,CAAtD,EAA0D;;AAEzDD,aAAQf,QAAR,GAAmBe,QAAQf,QAAR,CAAiB3N,SAAjB,CAA4B,CAA5B,EAA+B8O,OAA/B,CAAnB;AACAJ,aAAQC,UAAR,GAAqBA,UAArB;AAEA;AAED;;AAED,OAAKD,QAAQlV,YAAR,KAAyB,IAAzB,IAAiCkV,QAAQlV,YAAR,CAAqB9uG,MAArB,KAAgC,CAAtE,EAA0E;;AAEzE,UAAM,IAAI2N,KAAJ,CAAW,iEAAiEihG,SAA5E,CAAN;AAEA;;AAED,UAAOoV,OAAP;AAEA,GA9CD;AAgDA,EAlFe,EArCe;;AAyH/BhB,WAAU,UAAWE,IAAX,EAAiBD,QAAjB,EAA4B;;AAErC,MAAK,CAAEA,QAAF,IAAcA,aAAa,EAA3B,IAAiCA,aAAa,MAA9C,IAAwDA,aAAa,GAArE,IAA4EA,aAAa,CAAE,CAA3F,IAAgGA,aAAaC,KAAK3+F,IAAlH,IAA0H0+F,aAAaC,KAAKl4G,IAAjJ,EAAwJ;;AAEvJ,UAAOk4G,IAAP;AAEA;;AAED;AACA,MAAKA,KAAKpsD,QAAV,EAAqB;;AAEpB,OAAIwrB,OAAO4gC,KAAKpsD,QAAL,CAAc4rB,aAAd,CAA6BugC,QAA7B,CAAX;;AAEA,OAAK3gC,SAAS5jF,SAAd,EAA0B;;AAEzB,WAAO4jF,IAAP;AAEA;AAED;;AAED;AACA,MAAK4gC,KAAK3+E,QAAV,EAAqB;;AAEpB,OAAI8/E,oBAAoB,UAAW9/E,QAAX,EAAsB;;AAE7C,SAAM,IAAIljC,IAAI,CAAd,EAAiBA,IAAIkjC,SAASvkC,MAA9B,EAAsCqB,GAAtC,EAA6C;;AAE5C,SAAIijH,YAAY//E,SAAUljC,CAAV,CAAhB;;AAEA,SAAKijH,UAAU//F,IAAV,KAAmB0+F,QAAnB,IAA+BqB,UAAUt5G,IAAV,KAAmBi4G,QAAvD,EAAkE;;AAEjE,aAAOqB,SAAP;AAEA;;AAED,SAAIhmD,SAAS+lD,kBAAmBC,UAAU//E,QAA7B,CAAb;;AAEA,SAAK+5B,MAAL,EAAc,OAAOA,MAAP;AAEd;;AAED,WAAO,IAAP;AAEA,IApBD;;AAsBA,OAAIimD,cAAcF,kBAAmBnB,KAAK3+E,QAAxB,CAAlB;;AAEA,OAAKggF,WAAL,EAAmB;;AAElB,WAAOA,WAAP;AAEA;AAED;;AAED,SAAO,IAAP;AAEA;;AAnL8B,CAAhC;;AAuLAllH,OAAOK,MAAP,CAAe4iH,gBAAgBljH,SAA/B,EAA0C,EAAE;;AAE3C;AACAolH,wBAAuB,YAAY,CAAE,CAHI;AAIzCC,wBAAuB,YAAY,CAAE,CAJI;;AAMzCC,cAAa;AACZC,UAAQ,CADI;AAEZC,eAAa,CAFD;AAGZC,gBAAc,CAHF;AAIZC,kBAAgB;AAJJ,EAN4B;;AAazCC,aAAY;AACXC,QAAM,CADK;AAEXC,eAAa,CAFF;AAGXC,0BAAwB;AAHb,EAb6B;;AAmBzCC,sBAAqB,CAEpB,SAASC,eAAT,CAA0BhkF,MAA1B,EAAkCpwB,MAAlC,EAA2C;;AAE1CowB,SAAQpwB,MAAR,IAAmB,KAAKwZ,IAAL,CAAW,KAAKskF,YAAhB,CAAnB;AAEA,EANmB,EAQpB,SAASuW,cAAT,CAAyBjkF,MAAzB,EAAiCpwB,MAAjC,EAA0C;;AAEzC,MAAI/Q,SAAS,KAAKqlH,gBAAlB;;AAEA,OAAM,IAAIjkH,IAAI,CAAR,EAAWiK,IAAIrL,OAAOD,MAA5B,EAAoCqB,MAAMiK,CAA1C,EAA6C,EAAGjK,CAAhD,EAAoD;;AAEnD+/B,UAAQpwB,QAAR,IAAsB/Q,OAAQoB,CAAR,CAAtB;AAEA;AAED,EAlBmB,EAoBpB,SAASkkH,qBAAT,CAAgCnkF,MAAhC,EAAwCpwB,MAAxC,EAAiD;;AAEhDowB,SAAQpwB,MAAR,IAAmB,KAAKs0G,gBAAL,CAAuB,KAAKnB,aAA5B,CAAnB;AAEA,EAxBmB,EA0BpB,SAASqB,gBAAT,CAA2BpkF,MAA3B,EAAmCpwB,MAAnC,EAA4C;;AAE3C,OAAKs0G,gBAAL,CAAsBr0G,OAAtB,CAA+BmwB,MAA/B,EAAuCpwB,MAAvC;AAEA,EA9BmB,CAnBoB;;AAqDzCy0G,mCAAkC,CAEjC;AACC;;AAEA,UAASC,eAAT,CAA0BtkF,MAA1B,EAAkCpwB,MAAlC,EAA2C;;AAE1C,OAAK20G,YAAL,CAAmB,KAAK7W,YAAxB,IAAyC1tE,OAAQpwB,MAAR,CAAzC;AAEA,EAPF,EASC,SAAS40G,8BAAT,CAAyCxkF,MAAzC,EAAiDpwB,MAAjD,EAA0D;;AAEzD,OAAK20G,YAAL,CAAmB,KAAK7W,YAAxB,IAAyC1tE,OAAQpwB,MAAR,CAAzC;AACA,OAAK20G,YAAL,CAAkB1xE,WAAlB,GAAgC,IAAhC;AAEA,EAdF,EAgBC,SAAS4xE,yCAAT,CAAoDzkF,MAApD,EAA4DpwB,MAA5D,EAAqE;;AAEpE,OAAK20G,YAAL,CAAmB,KAAK7W,YAAxB,IAAyC1tE,OAAQpwB,MAAR,CAAzC;AACA,OAAK20G,YAAL,CAAkB7gF,sBAAlB,GAA2C,IAA3C;AAEA,EArBF,CAFiC,EAyB9B;;AAEF;;AAEA,UAASghF,cAAT,CAAyB1kF,MAAzB,EAAiCpwB,MAAjC,EAA0C;;AAEzC,MAAI+0G,OAAO,KAAKT,gBAAhB;;AAEA,OAAM,IAAIjkH,IAAI,CAAR,EAAWiK,IAAIy6G,KAAK/lH,MAA1B,EAAkCqB,MAAMiK,CAAxC,EAA2C,EAAGjK,CAA9C,EAAkD;;AAEjD0kH,QAAM1kH,CAAN,IAAY+/B,OAAQpwB,QAAR,CAAZ;AAEA;AAED,EAdC,EAgBF,SAASg1G,6BAAT,CAAwC5kF,MAAxC,EAAgDpwB,MAAhD,EAAyD;;AAExD,MAAI+0G,OAAO,KAAKT,gBAAhB;;AAEA,OAAM,IAAIjkH,IAAI,CAAR,EAAWiK,IAAIy6G,KAAK/lH,MAA1B,EAAkCqB,MAAMiK,CAAxC,EAA2C,EAAGjK,CAA9C,EAAkD;;AAEjD0kH,QAAM1kH,CAAN,IAAY+/B,OAAQpwB,QAAR,CAAZ;AAEA;;AAED,OAAK20G,YAAL,CAAkB1xE,WAAlB,GAAgC,IAAhC;AAEA,EA5BC,EA8BF,SAASgyE,wCAAT,CAAmD7kF,MAAnD,EAA2DpwB,MAA3D,EAAoE;;AAEnE,MAAI+0G,OAAO,KAAKT,gBAAhB;;AAEA,OAAM,IAAIjkH,IAAI,CAAR,EAAWiK,IAAIy6G,KAAK/lH,MAA1B,EAAkCqB,MAAMiK,CAAxC,EAA2C,EAAGjK,CAA9C,EAAkD;;AAEjD0kH,QAAM1kH,CAAN,IAAY+/B,OAAQpwB,QAAR,CAAZ;AAEA;;AAED,OAAK20G,YAAL,CAAkB7gF,sBAAlB,GAA2C,IAA3C;AAEA,EA1CC,CAzB8B,EAqE9B;;AAEF;;AAEA,UAASohF,qBAAT,CAAgC9kF,MAAhC,EAAwCpwB,MAAxC,EAAiD;;AAEhD,OAAKs0G,gBAAL,CAAuB,KAAKnB,aAA5B,IAA8C/iF,OAAQpwB,MAAR,CAA9C;AAEA,EARC,EAUF,SAASm1G,oCAAT,CAA+C/kF,MAA/C,EAAuDpwB,MAAvD,EAAgE;;AAE/D,OAAKs0G,gBAAL,CAAuB,KAAKnB,aAA5B,IAA8C/iF,OAAQpwB,MAAR,CAA9C;AACA,OAAK20G,YAAL,CAAkB1xE,WAAlB,GAAgC,IAAhC;AAEA,EAfC,EAiBF,SAASmyE,+CAAT,CAA0DhlF,MAA1D,EAAkEpwB,MAAlE,EAA2E;;AAE1E,OAAKs0G,gBAAL,CAAuB,KAAKnB,aAA5B,IAA8C/iF,OAAQpwB,MAAR,CAA9C;AACA,OAAK20G,YAAL,CAAkB7gF,sBAAlB,GAA2C,IAA3C;AAEA,EAtBC,CArE8B,EA6F9B;;AAEF;;AAEA,UAASuhF,kBAAT,CAA6BjlF,MAA7B,EAAqCpwB,MAArC,EAA8C;;AAE7C,OAAKs0G,gBAAL,CAAsBv0G,SAAtB,CAAiCqwB,MAAjC,EAAyCpwB,MAAzC;AAEA,EARC,EAUF,SAASs1G,iCAAT,CAA4CllF,MAA5C,EAAoDpwB,MAApD,EAA6D;;AAE5D,OAAKs0G,gBAAL,CAAsBv0G,SAAtB,CAAiCqwB,MAAjC,EAAyCpwB,MAAzC;AACA,OAAK20G,YAAL,CAAkB1xE,WAAlB,GAAgC,IAAhC;AAEA,EAfC,EAiBF,SAASsyE,4CAAT,CAAuDnlF,MAAvD,EAA+DpwB,MAA/D,EAAwE;;AAEvE,OAAKs0G,gBAAL,CAAsBv0G,SAAtB,CAAiCqwB,MAAjC,EAAyCpwB,MAAzC;AACA,OAAK20G,YAAL,CAAkB7gF,sBAAlB,GAA2C,IAA3C;AAEA,EAtBC,CA7F8B,CArDO;;AA8KzCi9E,WAAU,SAASyE,gBAAT,CAA2BC,WAA3B,EAAwCz1G,MAAxC,EAAiD;;AAE1D,OAAKiyE,IAAL;AACA,OAAK8+B,QAAL,CAAe0E,WAAf,EAA4Bz1G,MAA5B;;AAEA;AACA;AACA;AACA;AACA;AAEA,EAzLwC;;AA2LzCi5C,WAAU,SAASu8D,gBAAT,CAA2BE,WAA3B,EAAwC11G,MAAxC,EAAiD;;AAE1D,OAAKiyE,IAAL;AACA,OAAKh5B,QAAL,CAAey8D,WAAf,EAA4B11G,MAA5B;AAEA,EAhMwC;;AAkMzC;AACAiyE,OAAM,YAAY;;AAEjB,MAAI0iC,eAAe,KAAKn7F,IAAxB;AAAA,MACC63F,aAAa,KAAKA,UADnB;AAAA,MAGC4B,aAAa5B,WAAW4B,UAHzB;AAAA,MAICnV,eAAeuT,WAAWvT,YAJ3B;AAAA,MAKCqV,gBAAgB9B,WAAW8B,aAL5B;;AAOA,MAAK,CAAEwB,YAAP,EAAsB;;AAErBA,kBAAerD,gBAAgBU,QAAhB,CAA0B,KAAKD,QAA/B,EAAyCV,WAAWY,QAApD,KAAkE,KAAKF,QAAtF;;AAEA,QAAKv4F,IAAL,GAAYm7F,YAAZ;AAEA;;AAED;AACA,OAAK5D,QAAL,GAAgB,KAAKyC,qBAArB;AACA,OAAKv6D,QAAL,GAAgB,KAAKw6D,qBAArB;;AAEA;AACA,MAAK,CAAEkB,YAAP,EAAsB;;AAErBx3G,WAAQyD,KAAR,CAAe,6DAA6D,KAAK88C,IAAlE,GAAyE,wBAAxF;AACA;AAEA;;AAED,MAAKu1D,UAAL,EAAkB;;AAEjB,OAAIC,cAAc7B,WAAW6B,WAA7B;;AAEA;AACA,WAASD,UAAT;;AAEC,SAAK,WAAL;;AAEC,SAAK,CAAE0B,aAAa19E,QAApB,EAA+B;;AAE9B95B,cAAQyD,KAAR,CAAe,mFAAf,EAAoG,IAApG;AACA;AAEA;;AAED,SAAK,CAAE+zG,aAAa19E,QAAb,CAAsBT,SAA7B,EAAyC;;AAExCr5B,cAAQyD,KAAR,CAAe,6GAAf,EAA8H,IAA9H;AACA;AAEA;;AAED+zG,oBAAeA,aAAa19E,QAAb,CAAsBT,SAArC;;AAEA;;AAED,SAAK,OAAL;;AAEC,SAAK,CAAEm+E,aAAa7uD,QAApB,EAA+B;;AAE9B3oD,cAAQyD,KAAR,CAAe,gFAAf,EAAiG,IAAjG;AACA;AAEA;;AAED;AACA;;AAEA+zG,oBAAeA,aAAa7uD,QAAb,CAAsBC,KAArC;;AAEA;AACA,UAAM,IAAI11D,IAAI,CAAd,EAAiBA,IAAIskH,aAAa3lH,MAAlC,EAA0CqB,GAA1C,EAAiD;;AAEhD,UAAKskH,aAActkH,CAAd,EAAkBkjB,IAAlB,KAA2B2/F,WAAhC,EAA8C;;AAE7CA,qBAAc7iH,CAAd;AACA;AAEA;AAED;;AAED;;AAED;;AAEC,SAAKskH,aAAc1B,UAAd,MAA+BvlH,SAApC,EAAgD;;AAE/CyP,cAAQyD,KAAR,CAAe,sEAAf,EAAuF,IAAvF;AACA;AAEA;;AAED+zG,oBAAeA,aAAc1B,UAAd,CAAf;;AA3DF;;AAgEA,OAAKC,gBAAgBxlH,SAArB,EAAiC;;AAEhC,QAAKinH,aAAczB,WAAd,MAAgCxlH,SAArC,EAAiD;;AAEhDyP,aAAQyD,KAAR,CAAe,uFAAf,EAAwG,IAAxG,EAA8G+zG,YAA9G;AACA;AAEA;;AAEDA,mBAAeA,aAAczB,WAAd,CAAf;AAEA;AAED;;AAED;AACA,MAAIyC,eAAehB,aAAc7W,YAAd,CAAnB;;AAEA,MAAK6X,iBAAiBjoH,SAAtB,EAAkC;;AAEjC,OAAIukH,WAAWZ,WAAWY,QAA1B;;AAEA90G,WAAQyD,KAAR,CAAe,iEAAiEqxG,QAAjE,GACd,GADc,GACRnU,YADQ,GACO,wBADtB,EACgD6W,YADhD;AAEA;AAEA;;AAED;AACA,MAAIiB,aAAa,KAAK7B,UAAL,CAAgBC,IAAjC;;AAEA,MAAKW,aAAa1xE,WAAb,KAA6Bv1C,SAAlC,EAA8C;AAAE;;AAE/CkoH,gBAAa,KAAK7B,UAAL,CAAgBE,WAA7B;AACA,QAAKU,YAAL,GAAoBA,YAApB;AAEA,GALD,MAKO,IAAKA,aAAa7gF,sBAAb,KAAwCpmC,SAA7C,EAAyD;AAAE;;AAEjEkoH,gBAAa,KAAK7B,UAAL,CAAgBG,sBAA7B;AACA,QAAKS,YAAL,GAAoBA,YAApB;AAEA;;AAED;AACA,MAAIkB,cAAc,KAAKnC,WAAL,CAAiBC,MAAnC;;AAEA,MAAKR,kBAAkBzlH,SAAvB,EAAmC;;AAElC;;AAEA,OAAKowG,iBAAiB,uBAAtB,EAAgD;;AAE/C;;AAEA;AACA,QAAK,CAAE6W,aAAal7F,QAApB,EAA+B;;AAE9Btc,aAAQyD,KAAR,CAAe,qGAAf,EAAsH,IAAtH;AACA;AAEA;;AAED,QAAK+zG,aAAal7F,QAAb,CAAsBG,gBAA3B,EAA8C;;AAE7C,SAAK,CAAE+6F,aAAal7F,QAAb,CAAsB8oB,eAA7B,EAA+C;;AAE9CplC,cAAQyD,KAAR,CAAe,qHAAf,EAAsI,IAAtI;AACA;AAEA;;AAED,UAAM,IAAIvQ,IAAI,CAAd,EAAiBA,IAAI,KAAKmpB,IAAL,CAAUC,QAAV,CAAmB8oB,eAAnB,CAAmC54B,QAAnC,CAA4C3a,MAAjE,EAAyEqB,GAAzE,EAAgF;;AAE/E,UAAKskH,aAAal7F,QAAb,CAAsB8oB,eAAtB,CAAsC54B,QAAtC,CAAgDtZ,CAAhD,EAAoDkjB,IAApD,KAA6D4/F,aAAlE,EAAkF;;AAEjFA,uBAAgB9iH,CAAhB;AACA;AAEA;AAED;AAGD,KArBD,MAqBO;;AAEN,SAAK,CAAEskH,aAAal7F,QAAb,CAAsB2f,YAA7B,EAA4C;;AAE3Cj8B,cAAQyD,KAAR,CAAe,kHAAf,EAAmI,IAAnI;AACA;AAEA;;AAED,UAAM,IAAIvQ,IAAI,CAAd,EAAiBA,IAAI,KAAKmpB,IAAL,CAAUC,QAAV,CAAmB2f,YAAnB,CAAgCpqC,MAArD,EAA6DqB,GAA7D,EAAoE;;AAEnE,UAAKskH,aAAal7F,QAAb,CAAsB2f,YAAtB,CAAoC/oC,CAApC,EAAwCkjB,IAAxC,KAAiD4/F,aAAtD,EAAsE;;AAErEA,uBAAgB9iH,CAAhB;AACA;AAEA;AAED;AAED;AAED;;AAEDwlH,iBAAc,KAAKnC,WAAL,CAAiBG,YAA/B;;AAEA,QAAKS,gBAAL,GAAwBqB,YAAxB;AACA,QAAKxC,aAAL,GAAqBA,aAArB;AAEA,GAlED,MAkEO,IAAKwC,aAAa51G,SAAb,KAA2BrS,SAA3B,IAAwCioH,aAAa11G,OAAb,KAAyBvS,SAAtE,EAAkF;;AAExF;;AAEAmoH,iBAAc,KAAKnC,WAAL,CAAiBI,cAA/B;;AAEA,QAAKQ,gBAAL,GAAwBqB,YAAxB;AAEA,GARM,MAQA,IAAKvuF,MAAMC,OAAN,CAAesuF,YAAf,CAAL,EAAqC;;AAE3CE,iBAAc,KAAKnC,WAAL,CAAiBE,WAA/B;;AAEA,QAAKU,gBAAL,GAAwBqB,YAAxB;AAEA,GANM,MAMA;;AAEN,QAAK7X,YAAL,GAAoBA,YAApB;AAEA;;AAED;AACA,OAAKiT,QAAL,GAAgB,KAAKoD,mBAAL,CAA0B0B,WAA1B,CAAhB;AACA,OAAK58D,QAAL,GAAgB,KAAKw7D,gCAAL,CAAuCoB,WAAvC,EAAsDD,UAAtD,CAAhB;AAEA,EA7awC;;AA+azC9D,SAAQ,YAAY;;AAEnB,OAAKt4F,IAAL,GAAY,IAAZ;;AAEA;AACA;AACA,OAAKu3F,QAAL,GAAgB,KAAK+E,iBAArB;AACA,OAAK78D,QAAL,GAAgB,KAAK88D,iBAArB;AAEA;;AAxbwC,CAA1C;;AA4bA;AACA1nH,OAAOK,MAAP,CAAe4iH,gBAAgBljH,SAA/B,EAA0C;;AAEzC;AACA0nH,oBAAmBxE,gBAAgBljH,SAAhB,CAA0B2iH,QAHJ;AAIzCgF,oBAAmBzE,gBAAgBljH,SAAhB,CAA0B6qD;;AAJJ,CAA1C;;AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,SAAS+8D,oBAAT,GAAgC;;AAE/B,MAAKh8G,IAAL,GAAYX,MAAMI,YAAN,EAAZ;;AAEA;AACA,MAAKuxD,QAAL,GAAgB5jC,MAAMh5B,SAAN,CAAgBgC,KAAhB,CAAsBhB,IAAtB,CAA4BL,SAA5B,CAAhB;;AAEA,MAAK6iH,eAAL,GAAuB,CAAvB,CAP+B,CAOH;AAC5B;;AAEA,KAAIr3E,UAAU,EAAd;AACA,MAAK07E,cAAL,GAAsB17E,OAAtB,CAX+B,CAWC;;AAEhC,MAAM,IAAIlqC,IAAI,CAAR,EAAWiK,IAAIvL,UAAUC,MAA/B,EAAuCqB,MAAMiK,CAA7C,EAAgD,EAAGjK,CAAnD,EAAuD;;AAEtDkqC,UAASxrC,UAAWsB,CAAX,EAAe2J,IAAxB,IAAiC3J,CAAjC;AAEA;;AAED,MAAK6lH,MAAL,GAAc,EAAd,CAnB+B,CAmBT;AACtB,MAAKC,YAAL,GAAoB,EAApB,CApB+B,CAoBJ;AAC3B,MAAK1E,SAAL,GAAiB,EAAjB,CArB+B,CAqBN;AACzB,MAAK2E,sBAAL,GAA8B,EAA9B,CAtB+B,CAsBI;;AAEnC,KAAI98F,QAAQ,IAAZ;;AAEA,MAAK+8F,KAAL,GAAa;;AAEZ5vC,WAAS;AACR,OAAI6vC,KAAJ,GAAY;;AAEX,WAAOh9F,MAAM0xC,QAAN,CAAeh8D,MAAtB;AAEA,IALO;AAMR,OAAIunH,KAAJ,GAAY;;AAEX,WAAO,KAAKD,KAAL,GAAah9F,MAAMs4F,eAA1B;AAEA;AAVO,GAFG;AAcZ,MAAI4E,iBAAJ,GAAwB;;AAEvB,UAAOl9F,MAAMm4F,SAAN,CAAgBziH,MAAvB;AAEA;;AAlBW,EAAb;AAsBA;;AAEDX,OAAOK,MAAP,CAAesnH,qBAAqB5nH,SAApC,EAA+C;;AAE9C+jH,yBAAwB,IAFsB;;AAI9Cl1G,MAAK,YAAY;;AAEhB,MAAIwpE,UAAU,KAAKzb,QAAnB;AAAA,MACCyrD,WAAWhwC,QAAQz3E,MADpB;AAAA,MAEC0nH,iBAAiB,KAAK9E,eAFvB;AAAA,MAGC+E,gBAAgB,KAAKV,cAHtB;AAAA,MAIC1N,QAAQ,KAAK2N,MAJd;AAAA,MAKCU,cAAc,KAAKT,YALpB;AAAA,MAMCtE,WAAW,KAAKJ,SANjB;AAAA,MAOCoF,YAAYhF,SAAS7iH,MAPtB;AAAA,MAQC8nH,cAAcppH,SARf;;AAUA,OAAM,IAAI2C,IAAI,CAAR,EAAWiK,IAAIvL,UAAUC,MAA/B,EAAuCqB,MAAMiK,CAA7C,EAAgD,EAAGjK,CAAnD,EAAuD;;AAEtD,OAAIwoB,SAAS9pB,UAAWsB,CAAX,CAAb;AAAA,OACC2J,OAAO6e,OAAO7e,IADf;AAAA,OAEClL,QAAQ6nH,cAAe38G,IAAf,CAFT;;AAIA,OAAKlL,UAAUpB,SAAf,EAA2B;;AAE1B;;AAEAoB,YAAQ2nH,UAAR;AACAE,kBAAe38G,IAAf,IAAwBlL,KAAxB;AACA23E,YAAQ72E,IAAR,CAAcipB,MAAd;;AAEA;;AAEA,SAAM,IAAIuC,IAAI,CAAR,EAAW7gB,IAAIs8G,SAArB,EAAgCz7F,MAAM7gB,CAAtC,EAAyC,EAAG6gB,CAA5C,EAAgD;;AAE/Cy2F,cAAUz2F,CAAV,EAAcxrB,IAAd,CAAoB,IAAI0hH,eAAJ,CAAqBz4F,MAArB,EAA6B0vF,MAAOntF,CAAP,CAA7B,EAAyCw7F,YAAax7F,CAAb,CAAzC,CAApB;AAEA;AAED,IAhBD,MAgBO,IAAKtsB,QAAQ4nH,cAAb,EAA8B;;AAEpCI,kBAAcrwC,QAAS33E,KAAT,CAAd;;AAEA;;AAEA,QAAIioH,mBAAmB,EAAGL,cAA1B;AAAA,QACCM,mBAAmBvwC,QAASswC,gBAAT,CADpB;;AAGAJ,kBAAeK,iBAAiBh9G,IAAhC,IAAyClL,KAAzC;AACA23E,YAAS33E,KAAT,IAAmBkoH,gBAAnB;;AAEAL,kBAAe38G,IAAf,IAAwB+8G,gBAAxB;AACAtwC,YAASswC,gBAAT,IAA8Bl+F,MAA9B;;AAEA;;AAEA,SAAM,IAAIuC,IAAI,CAAR,EAAW7gB,IAAIs8G,SAArB,EAAgCz7F,MAAM7gB,CAAtC,EAAyC,EAAG6gB,CAA5C,EAAgD;;AAE/C,SAAI67F,kBAAkBpF,SAAUz2F,CAAV,CAAtB;AAAA,SACC87F,aAAaD,gBAAiBF,gBAAjB,CADd;AAAA,SAEC/G,UAAUiH,gBAAiBnoH,KAAjB,CAFX;;AAIAmoH,qBAAiBnoH,KAAjB,IAA2BooH,UAA3B;;AAEA,SAAKlH,YAAYtiH,SAAjB,EAA6B;;AAE5B;AACA;AACA;;AAEAsiH,gBAAU,IAAIsB,eAAJ,CAAqBz4F,MAArB,EAA6B0vF,MAAOntF,CAAP,CAA7B,EAAyCw7F,YAAax7F,CAAb,CAAzC,CAAV;AAEA;;AAED67F,qBAAiBF,gBAAjB,IAAsC/G,OAAtC;AAEA;AAED,IAvCM,MAuCA,IAAKvpC,QAAS33E,KAAT,MAAqBgoH,WAA1B,EAAwC;;AAE9C35G,YAAQyD,KAAR,CAAe,sEACb,mFADF;AAGA,IAlEqD,CAkEpD;AAEF,GAhFe,CAgFd;;AAEF,OAAKgxG,eAAL,GAAuB8E,cAAvB;AAEA,EAxF6C;;AA0F9C5kF,SAAQ,YAAY;;AAEnB,MAAI20C,UAAU,KAAKzb,QAAnB;AAAA,MACC0rD,iBAAiB,KAAK9E,eADvB;AAAA,MAEC+E,gBAAgB,KAAKV,cAFtB;AAAA,MAGCpE,WAAW,KAAKJ,SAHjB;AAAA,MAICoF,YAAYhF,SAAS7iH,MAJtB;;AAMA,OAAM,IAAIqB,IAAI,CAAR,EAAWiK,IAAIvL,UAAUC,MAA/B,EAAuCqB,MAAMiK,CAA7C,EAAgD,EAAGjK,CAAnD,EAAuD;;AAEtD,OAAIwoB,SAAS9pB,UAAWsB,CAAX,CAAb;AAAA,OACC2J,OAAO6e,OAAO7e,IADf;AAAA,OAEClL,QAAQ6nH,cAAe38G,IAAf,CAFT;;AAIA,OAAKlL,UAAUpB,SAAV,IAAuBoB,SAAS4nH,cAArC,EAAsD;;AAErD;;AAEA,QAAIS,kBAAkBT,gBAAtB;AAAA,QACCU,oBAAoB3wC,QAAS0wC,eAAT,CADrB;;AAGAR,kBAAeS,kBAAkBp9G,IAAjC,IAA0ClL,KAA1C;AACA23E,YAAS33E,KAAT,IAAmBsoH,iBAAnB;;AAEAT,kBAAe38G,IAAf,IAAwBm9G,eAAxB;AACA1wC,YAAS0wC,eAAT,IAA6Bt+F,MAA7B;;AAEA;;AAEA,SAAM,IAAIuC,IAAI,CAAR,EAAW7gB,IAAIs8G,SAArB,EAAgCz7F,MAAM7gB,CAAtC,EAAyC,EAAG6gB,CAA5C,EAAgD;;AAE/C,SAAI67F,kBAAkBpF,SAAUz2F,CAAV,CAAtB;AAAA,SACCi8F,cAAcJ,gBAAiBE,eAAjB,CADf;AAAA,SAECnH,UAAUiH,gBAAiBnoH,KAAjB,CAFX;;AAIAmoH,qBAAiBnoH,KAAjB,IAA2BuoH,WAA3B;AACAJ,qBAAiBE,eAAjB,IAAqCnH,OAArC;AAEA;AAED;AAED,GA1CkB,CA0CjB;;AAEF,OAAK4B,eAAL,GAAuB8E,cAAvB;AAEA,EAxI6C;;AA0I9C;AACAY,UAAS,YAAY;;AAEpB,MAAI7wC,UAAU,KAAKzb,QAAnB;AAAA,MACCyrD,WAAWhwC,QAAQz3E,MADpB;AAAA,MAEC0nH,iBAAiB,KAAK9E,eAFvB;AAAA,MAGC+E,gBAAgB,KAAKV,cAHtB;AAAA,MAICpE,WAAW,KAAKJ,SAJjB;AAAA,MAKCoF,YAAYhF,SAAS7iH,MALtB;;AAOA,OAAM,IAAIqB,IAAI,CAAR,EAAWiK,IAAIvL,UAAUC,MAA/B,EAAuCqB,MAAMiK,CAA7C,EAAgD,EAAGjK,CAAnD,EAAuD;;AAEtD,OAAIwoB,SAAS9pB,UAAWsB,CAAX,CAAb;AAAA,OACC2J,OAAO6e,OAAO7e,IADf;AAAA,OAEClL,QAAQ6nH,cAAe38G,IAAf,CAFT;;AAIA,OAAKlL,UAAUpB,SAAf,EAA2B;;AAE1B,WAAOipH,cAAe38G,IAAf,CAAP;;AAEA,QAAKlL,QAAQ4nH,cAAb,EAA8B;;AAE7B;;AAEA,SAAIK,mBAAmB,EAAGL,cAA1B;AAAA,SACCM,mBAAmBvwC,QAASswC,gBAAT,CADpB;AAAA,SAECn5D,YAAY,EAAG64D,QAFhB;AAAA,SAGCc,aAAa9wC,QAAS7oB,SAAT,CAHd;;AAKA;AACA+4D,mBAAeK,iBAAiBh9G,IAAhC,IAAyClL,KAAzC;AACA23E,aAAS33E,KAAT,IAAmBkoH,gBAAnB;;AAEA;AACAL,mBAAeY,WAAWv9G,IAA1B,IAAmC+8G,gBAAnC;AACAtwC,aAASswC,gBAAT,IAA8BQ,UAA9B;AACA9wC,aAAQ7e,GAAR;;AAEA;;AAEA,UAAM,IAAIxsC,IAAI,CAAR,EAAW7gB,IAAIs8G,SAArB,EAAgCz7F,MAAM7gB,CAAtC,EAAyC,EAAG6gB,CAA5C,EAAgD;;AAE/C,UAAI67F,kBAAkBpF,SAAUz2F,CAAV,CAAtB;AAAA,UACC87F,aAAaD,gBAAiBF,gBAAjB,CADd;AAAA,UAEC98B,OAAOg9B,gBAAiBr5D,SAAjB,CAFR;;AAIAq5D,sBAAiBnoH,KAAjB,IAA2BooH,UAA3B;AACAD,sBAAiBF,gBAAjB,IAAsC98B,IAAtC;AACAg9B,sBAAgBrvD,GAAhB;AAEA;AAED,KAhCD,MAgCO;;AAEN;;AAEA,SAAIhK,YAAY,EAAG64D,QAAnB;AAAA,SACCc,aAAa9wC,QAAS7oB,SAAT,CADd;;AAGA+4D,mBAAeY,WAAWv9G,IAA1B,IAAmClL,KAAnC;AACA23E,aAAS33E,KAAT,IAAmByoH,UAAnB;AACA9wC,aAAQ7e,GAAR;;AAEA;;AAEA,UAAM,IAAIxsC,IAAI,CAAR,EAAW7gB,IAAIs8G,SAArB,EAAgCz7F,MAAM7gB,CAAtC,EAAyC,EAAG6gB,CAA5C,EAAgD;;AAE/C,UAAI67F,kBAAkBpF,SAAUz2F,CAAV,CAAtB;;AAEA67F,sBAAiBnoH,KAAjB,IAA2BmoH,gBAAiBr5D,SAAjB,CAA3B;AACAq5D,sBAAgBrvD,GAAhB;AAEA;AAED,KA1DyB,CA0DxB;AAEF,IAlEqD,CAkEpD;AAEF,GA7EmB,CA6ElB;;AAEF,OAAKgqD,eAAL,GAAuB8E,cAAvB;AAEA,EA5N6C;;AA8N9C;;AAEAhF,aAAY,UAAWh0D,IAAX,EAAiB2zD,UAAjB,EAA8B;;AAEzC;AACA;;AAEA,MAAImG,gBAAgB,KAAKpB,sBAAzB;AAAA,MACCtnH,QAAQ0oH,cAAe95D,IAAf,CADT;AAAA,MAECm0D,WAAW,KAAKJ,SAFjB;;AAIA,MAAK3iH,UAAUpB,SAAf,EAA2B,OAAOmkH,SAAU/iH,KAAV,CAAP;;AAE3B,MAAIy5G,QAAQ,KAAK2N,MAAjB;AAAA,MACCU,cAAc,KAAKT,YADpB;AAAA,MAEC1vC,UAAU,KAAKzb,QAFhB;AAAA,MAGCyrD,WAAWhwC,QAAQz3E,MAHpB;AAAA,MAIC0nH,iBAAiB,KAAK9E,eAJvB;AAAA,MAKCqF,kBAAkB,IAAI7vF,KAAJ,CAAWqvF,QAAX,CALnB;;AAOA3nH,UAAQ+iH,SAAS7iH,MAAjB;;AAEAwoH,gBAAe95D,IAAf,IAAwB5uD,KAAxB;;AAEAy5G,QAAM34G,IAAN,CAAY8tD,IAAZ;AACAk5D,cAAYhnH,IAAZ,CAAkByhH,UAAlB;AACAQ,WAASjiH,IAAT,CAAeqnH,eAAf;;AAEA,OAAM,IAAI5mH,IAAIqmH,cAAR,EAAwBp8G,IAAImsE,QAAQz3E,MAA1C,EAAkDqB,MAAMiK,CAAxD,EAA2D,EAAGjK,CAA9D,EAAkE;;AAEjE,OAAIwoB,SAAS4tD,QAASp2E,CAAT,CAAb;AACA4mH,mBAAiB5mH,CAAjB,IAAuB,IAAIihH,eAAJ,CAAqBz4F,MAArB,EAA6B6kC,IAA7B,EAAmC2zD,UAAnC,CAAvB;AAEA;;AAED,SAAO4F,eAAP;AAEA,EAnQ6C;;AAqQ9CQ,eAAc,UAAW/5D,IAAX,EAAkB;;AAE/B;AACA;;AAEA,MAAI85D,gBAAgB,KAAKpB,sBAAzB;AAAA,MACCtnH,QAAQ0oH,cAAe95D,IAAf,CADT;;AAGA,MAAK5uD,UAAUpB,SAAf,EAA2B;;AAE1B,OAAI66G,QAAQ,KAAK2N,MAAjB;AAAA,OACCU,cAAc,KAAKT,YADpB;AAAA,OAECtE,WAAW,KAAKJ,SAFjB;AAAA,OAGCiG,oBAAoB7F,SAAS7iH,MAAT,GAAkB,CAHvC;AAAA,OAIC2oH,eAAe9F,SAAU6F,iBAAV,CAJhB;AAAA,OAKCE,mBAAmBl6D,KAAMg6D,iBAAN,CALpB;;AAOAF,iBAAeI,gBAAf,IAAoC9oH,KAApC;;AAEA+iH,YAAU/iH,KAAV,IAAoB6oH,YAApB;AACA9F,YAASjqD,GAAT;;AAEAgvD,eAAa9nH,KAAb,IAAuB8nH,YAAac,iBAAb,CAAvB;AACAd,eAAYhvD,GAAZ;;AAEA2gD,SAAOz5G,KAAP,IAAiBy5G,MAAOmP,iBAAP,CAAjB;AACAnP,SAAM3gD,GAAN;AAEA;AAED;;AAnS6C,CAA/C;;AAuSA;;;;;;;;;;;AAWA,SAASiwD,eAAT,CAA0BC,KAA1B,EAAiCpb,IAAjC,EAAuCqb,SAAvC,EAAmD;;AAElD,MAAKC,MAAL,GAAcF,KAAd;AACA,MAAKG,KAAL,GAAavb,IAAb;AACA,MAAKwb,UAAL,GAAkBH,aAAa,IAA/B;;AAEA,KAAI1b,SAASK,KAAKL,MAAlB;AAAA,KACC8b,UAAU9b,OAAOrtG,MADlB;AAAA,KAECopH,eAAe,IAAIhxF,KAAJ,CAAW+wF,OAAX,CAFhB;;AAIA,KAAIE,sBAAsB;AACzBxgB,eAAax/F,mBADY;AAEzBy/F,aAAWz/F;AAFc,EAA1B;;AAKA,MAAM,IAAIhI,IAAI,CAAd,EAAiBA,MAAM8nH,OAAvB,EAAgC,EAAG9nH,CAAnC,EAAuC;;AAEtC,MAAIioH,cAAcjc,OAAQhsG,CAAR,EAAY4qG,iBAAZ,CAA+B,IAA/B,CAAlB;AACAmd,eAAc/nH,CAAd,IAAoBioH,WAApB;AACAA,cAAYvhB,QAAZ,GAAuBshB,mBAAvB;AAEA;;AAED,MAAKE,oBAAL,GAA4BF,mBAA5B;;AAEA,MAAKG,aAAL,GAAqBJ,YAArB,CAzBkD,CAyBf;;AAEnC;AACA,MAAKK,iBAAL,GAAyB,IAAIrxF,KAAJ,CAAW+wF,OAAX,CAAzB;;AAEA,MAAKO,WAAL,GAAmB,IAAnB,CA9BkD,CA8BvB;AAC3B,MAAKC,iBAAL,GAAyB,IAAzB,CA/BkD,CA+BlB;;AAEhC,MAAKC,qBAAL,GAA6B,IAA7B;AACA,MAAKC,kBAAL,GAA0B,IAA1B;;AAEA,MAAK7L,IAAL,GAAYh1G,UAAZ;AACA,MAAK8gH,UAAL,GAAkB,CAAE,CAApB;;AAEA;AACA;AACA,MAAKC,UAAL,GAAkB,IAAlB;;AAEA;AACA;AACA,MAAKptC,IAAL,GAAY,CAAZ;;AAEA,MAAKyvB,SAAL,GAAiB,CAAjB;AACA,MAAK4d,mBAAL,GAA2B,CAA3B;;AAEA,MAAKzoB,MAAL,GAAc,CAAd;AACA,MAAK0oB,gBAAL,GAAwB,CAAxB;;AAEA,MAAKC,WAAL,GAAmBxhG,QAAnB,CArDkD,CAqDnB;;AAE/B,MAAKyhG,MAAL,GAAc,KAAd,CAvDkD,CAuD1B;AACxB,MAAKhhF,OAAL,GAAe,IAAf,CAxDkD,CAwD1B;;AAExB,MAAKihF,iBAAL,GAA0B,KAA1B,CA1DkD,CA0DjB;;AAEjC,MAAKC,gBAAL,GAAyB,IAAzB,CA5DkD,CA4DlB;AAChC,MAAKC,cAAL,GAAuB,IAAvB,CA7DkD,CA6DpB;AAE9B;;AAEDjrH,OAAOK,MAAP,CAAempH,gBAAgBzpH,SAA/B,EAA0C;;AAEzC;;AAEAs/G,OAAM,YAAY;;AAEjB,OAAKsK,MAAL,CAAYuB,eAAZ,CAA6B,IAA7B;;AAEA,SAAO,IAAP;AAEA,EAVwC;;AAYzC1+B,OAAM,YAAY;;AAEjB,OAAKm9B,MAAL,CAAYwB,iBAAZ,CAA+B,IAA/B;;AAEA,SAAO,KAAKjhE,KAAL,EAAP;AAEA,EAlBwC;;AAoBzCA,QAAO,YAAY;;AAElB,OAAK4gE,MAAL,GAAc,KAAd;AACA,OAAKhhF,OAAL,GAAe,IAAf;;AAEA,OAAKwzC,IAAL,GAAY,CAAZ,CALkB,CAKD;AACjB,OAAKmtC,UAAL,GAAkB,CAAE,CAApB,CANkB,CAMK;AACvB,OAAKC,UAAL,GAAkB,IAAlB,CAPkB,CAOM;;AAExB,SAAO,KAAKU,UAAL,GAAkBC,WAAlB,EAAP;AAEA,EA/BwC;;AAiCzCC,YAAW,YAAY;;AAEtB,SAAO,KAAKxhF,OAAL,IAAgB,CAAE,KAAKghF,MAAvB,IAAiC,KAAK/d,SAAL,KAAmB,CAApD,IACL,KAAK2d,UAAL,KAAoB,IADf,IACuB,KAAKf,MAAL,CAAY4B,eAAZ,CAA6B,IAA7B,CAD9B;AAGA,EAtCwC;;AAwCzC;AACAC,cAAa,YAAY;;AAExB,SAAO,KAAK7B,MAAL,CAAY4B,eAAZ,CAA6B,IAA7B,CAAP;AAEA,EA7CwC;;AA+CzCE,UAAS,UAAWnuC,IAAX,EAAkB;;AAE1B,OAAKotC,UAAL,GAAkBptC,IAAlB;;AAEA,SAAO,IAAP;AAEA,EArDwC;;AAuDzCyiC,UAAS,UAAW17D,IAAX,EAAiBwmE,WAAjB,EAA+B;;AAEvC,OAAKlM,IAAL,GAAYt6D,IAAZ;AACA,OAAKwmE,WAAL,GAAmBA,WAAnB;;AAEA,SAAO,IAAP;AAEA,EA9DwC;;AAgEzC;;AAEA;AACA;AACA;AACAa,qBAAoB,UAAWxpB,MAAX,EAAoB;;AAEvC,OAAKA,MAAL,GAAcA,MAAd;;AAEA;AACA,OAAK0oB,gBAAL,GAAwB,KAAK9gF,OAAL,GAAeo4D,MAAf,GAAwB,CAAhD;;AAEA,SAAO,KAAKkpB,UAAL,EAAP;AAEA,EA9EwC;;AAgFzC;AACAO,qBAAoB,YAAY;;AAE/B,SAAO,KAAKf,gBAAZ;AAEA,EArFwC;;AAuFzCgB,SAAQ,UAAW7d,QAAX,EAAsB;;AAE7B,SAAO,KAAK8d,eAAL,CAAsB9d,QAAtB,EAAgC,CAAhC,EAAmC,CAAnC,CAAP;AAEA,EA3FwC;;AA6FzC+d,UAAS,UAAW/d,QAAX,EAAsB;;AAE9B,SAAO,KAAK8d,eAAL,CAAsB9d,QAAtB,EAAgC,CAAhC,EAAmC,CAAnC,CAAP;AAEA,EAjGwC;;AAmGzCge,gBAAe,UAAWC,aAAX,EAA0Bje,QAA1B,EAAoCke,IAApC,EAA2C;;AAEzDD,gBAAcF,OAAd,CAAuB/d,QAAvB;AACA,OAAK6d,MAAL,CAAa7d,QAAb;;AAEA,MAAKke,IAAL,EAAY;;AAEX,OAAIC,iBAAiB,KAAKtC,KAAL,CAAW7b,QAAhC;AAAA,OACCoe,kBAAkBH,cAAcpC,KAAd,CAAoB7b,QADvC;AAAA,OAGCqe,gBAAgBD,kBAAkBD,cAHnC;AAAA,OAICG,gBAAgBH,iBAAiBC,eAJlC;;AAMAH,iBAAcC,IAAd,CAAoB,GAApB,EAAyBG,aAAzB,EAAwCre,QAAxC;AACA,QAAKke,IAAL,CAAWI,aAAX,EAA0B,GAA1B,EAA+Bte,QAA/B;AAEA;;AAED,SAAO,IAAP;AAEA,EAvHwC;;AAyHzCue,cAAa,UAAWC,YAAX,EAAyBxe,QAAzB,EAAmCke,IAAnC,EAA0C;;AAEtD,SAAOM,aAAaR,aAAb,CAA4B,IAA5B,EAAkChe,QAAlC,EAA4Cke,IAA5C,CAAP;AAEA,EA7HwC;;AA+HzCb,aAAY,YAAY;;AAEvB,MAAIoB,oBAAoB,KAAKhC,kBAA7B;;AAEA,MAAKgC,sBAAsB,IAA3B,EAAkC;;AAEjC,QAAKhC,kBAAL,GAA0B,IAA1B;AACA,QAAKb,MAAL,CAAY8C,2BAAZ,CAAyCD,iBAAzC;AAEA;;AAED,SAAO,IAAP;AAEA,EA5IwC;;AA8IzC;;AAEA;AACA;AACA;AACAE,wBAAuB,UAAW3f,SAAX,EAAuB;;AAE7C,OAAKA,SAAL,GAAiBA,SAAjB;AACA,OAAK4d,mBAAL,GAA2B,KAAKG,MAAL,GAAc,CAAd,GAAkB/d,SAA7C;;AAEA,SAAO,KAAKse,WAAL,EAAP;AAEA,EA1JwC;;AA4JzC;AACAsB,wBAAuB,YAAY;;AAElC,SAAO,KAAKhC,mBAAZ;AAEA,EAjKwC;;AAmKzCiC,cAAa,UAAW7e,QAAX,EAAsB;;AAElC,OAAKhB,SAAL,GAAiB,KAAK6c,KAAL,CAAW7b,QAAX,GAAsBA,QAAvC;;AAEA,SAAO,KAAKsd,WAAL,EAAP;AAEA,EAzKwC;;AA2KzCwB,WAAU,UAAWvR,MAAX,EAAoB;;AAE7B,OAAKh+B,IAAL,GAAYg+B,OAAOh+B,IAAnB;AACA,OAAKyvB,SAAL,GAAiBuO,OAAOvO,SAAxB;;AAEA,SAAO,KAAKse,WAAL,EAAP;AAEA,EAlLwC;;AAoLzCyB,OAAM,UAAW/e,QAAX,EAAsB;;AAE3B,SAAO,KAAKke,IAAL,CAAW,KAAKtB,mBAAhB,EAAqC,CAArC,EAAwC5c,QAAxC,CAAP;AAEA,EAxLwC;;AA0LzCke,OAAM,UAAWc,cAAX,EAA2BC,YAA3B,EAAyCjf,QAAzC,EAAoD;;AAEzD,MAAI0b,QAAQ,KAAKE,MAAjB;AAAA,MAAyBsD,MAAMxD,MAAMnsC,IAArC;AAAA,MACC2sC,cAAc,KAAKM,qBADpB;AAAA,MAGCxd,YAAY,KAAKA,SAHlB;;AAKA,MAAKkd,gBAAgB,IAArB,EAA4B;;AAE3BA,iBAAcR,MAAMyD,uBAAN,EAAd;AACA,QAAK3C,qBAAL,GAA6BN,WAA7B;AAEA;;AAED,MAAIpjB,QAAQojB,YAAY1iB,kBAAxB;AAAA,MACCv+D,SAASihF,YAAYziB,YADtB;;AAGAX,QAAO,CAAP,IAAaomB,GAAb;AACApmB,QAAO,CAAP,IAAaomB,MAAMlf,QAAnB;;AAEA/kE,SAAQ,CAAR,IAAc+jF,iBAAiBhgB,SAA/B;AACA/jE,SAAQ,CAAR,IAAcgkF,eAAejgB,SAA7B;;AAEA,SAAO,IAAP;AAEA,EAnNwC;;AAqNzCse,cAAa,YAAY;;AAExB,MAAI8B,uBAAuB,KAAK5C,qBAAhC;;AAEA,MAAK4C,yBAAyB,IAA9B,EAAqC;;AAEpC,QAAK5C,qBAAL,GAA6B,IAA7B;AACA,QAAKZ,MAAL,CAAY8C,2BAAZ,CAAyCU,oBAAzC;AAEA;;AAED,SAAO,IAAP;AAEA,EAlOwC;;AAoOzC;;AAEAC,WAAU,YAAY;;AAErB,SAAO,KAAKzD,MAAZ;AAEA,EA1OwC;;AA4OzC0D,UAAS,YAAY;;AAEpB,SAAO,KAAKzD,KAAZ;AAEA,EAhPwC;;AAkPzC0D,UAAS,YAAY;;AAEpB,SAAO,KAAKzD,UAAL,IAAmB,KAAKF,MAAL,CAAY4D,KAAtC;AAEA,EAtPwC;;AAwPzC;;AAEAC,UAAS,UAAWlwC,IAAX,EAAiBmwC,SAAjB,EAA4BC,aAA5B,EAA2CrL,SAA3C,EAAuD;;AAE/D;;AAEA,MAAK,CAAE,KAAKv4E,OAAZ,EAAsB;;AAErB;;AAEA,QAAK6jF,aAAL,CAAoBrwC,IAApB;AACA;AAEA;;AAED,MAAI0vB,YAAY,KAAK0d,UAArB;;AAEA,MAAK1d,cAAc,IAAnB,EAA0B;;AAEzB;;AAEA,OAAI4gB,cAAc,CAAEtwC,OAAO0vB,SAAT,IAAuB0gB,aAAzC;AACA,OAAKE,cAAc,CAAd,IAAmBF,kBAAkB,CAA1C,EAA8C;;AAE7C,WAF6C,CAErC;AAER;;AAED;;AAEA,QAAKhD,UAAL,GAAkB,IAAlB,CAbyB,CAaD;AACxB+C,eAAYC,gBAAgBE,WAA5B;AAEA;;AAED;;AAEAH,eAAa,KAAKI,gBAAL,CAAuBvwC,IAAvB,CAAb;AACA,MAAIwwC,WAAW,KAAKC,WAAL,CAAkBN,SAAlB,CAAf;;AAEA;AACA;;AAEA,MAAIvrB,SAAS,KAAKyrB,aAAL,CAAoBrwC,IAApB,CAAb;;AAEA,MAAK4kB,SAAS,CAAd,EAAkB;;AAEjB,OAAI6nB,eAAe,KAAKI,aAAxB;AACA,OAAI6D,iBAAiB,KAAK5D,iBAA1B;;AAEA,QAAM,IAAIr9F,IAAI,CAAR,EAAW7gB,IAAI69G,aAAappH,MAAlC,EAA0CosB,MAAM7gB,CAAhD,EAAmD,EAAG6gB,CAAtD,EAA0D;;AAEzDg9F,iBAAch9F,CAAd,EAAkB86E,QAAlB,CAA4BimB,QAA5B;AACAE,mBAAgBjhG,CAAhB,EAAoBq1F,UAApB,CAAgCC,SAAhC,EAA2CngB,MAA3C;AAEA;AAED;AAED,EAnTwC;;AAqTzCyrB,gBAAe,UAAWrwC,IAAX,EAAkB;;AAEhC,MAAI4kB,SAAS,CAAb;;AAEA,MAAK,KAAKp4D,OAAV,EAAoB;;AAEnBo4D,YAAS,KAAKA,MAAd;AACA,OAAI+nB,cAAc,KAAKO,kBAAvB;;AAEA,OAAKP,gBAAgB,IAArB,EAA4B;;AAE3B,QAAIgE,mBAAmBhE,YAAYpiB,QAAZ,CAAsBvqB,IAAtB,EAA8B,CAA9B,CAAvB;;AAEA4kB,cAAU+rB,gBAAV;;AAEA,QAAK3wC,OAAO2sC,YAAY1iB,kBAAZ,CAAgC,CAAhC,CAAZ,EAAkD;;AAEjD,UAAK6jB,UAAL;;AAEA,SAAK6C,qBAAqB,CAA1B,EAA8B;;AAE7B;AACA,WAAKnkF,OAAL,GAAe,KAAf;AAEA;AAED;AAED;AAED;;AAED,OAAK8gF,gBAAL,GAAwB1oB,MAAxB;AACA,SAAOA,MAAP;AAEA,EAxVwC;;AA0VzC2rB,mBAAkB,UAAWvwC,IAAX,EAAkB;;AAEnC,MAAIyvB,YAAY,CAAhB;;AAEA,MAAK,CAAE,KAAK+d,MAAZ,EAAqB;;AAEpB/d,eAAY,KAAKA,SAAjB;;AAEA,OAAIkd,cAAc,KAAKM,qBAAvB;;AAEA,OAAKN,gBAAgB,IAArB,EAA4B;;AAE3B,QAAIgE,mBAAmBhE,YAAYpiB,QAAZ,CAAsBvqB,IAAtB,EAA8B,CAA9B,CAAvB;;AAEAyvB,iBAAakhB,gBAAb;;AAEA,QAAK3wC,OAAO2sC,YAAY1iB,kBAAZ,CAAgC,CAAhC,CAAZ,EAAkD;;AAEjD,UAAK8jB,WAAL;;AAEA,SAAKte,cAAc,CAAnB,EAAuB;;AAEtB;AACA,WAAK+d,MAAL,GAAc,IAAd;AAEA,MALD,MAKO;;AAEN;AACA,WAAK/d,SAAL,GAAiBA,SAAjB;AAEA;AAED;AAED;AAED;;AAED,OAAK4d,mBAAL,GAA2B5d,SAA3B;AACA,SAAOA,SAAP;AAEA,EAnYwC;;AAqYzCghB,cAAa,UAAWN,SAAX,EAAuB;;AAEnC,MAAInwC,OAAO,KAAKA,IAAL,GAAYmwC,SAAvB;;AAEA,MAAKA,cAAc,CAAnB,EAAuB,OAAOnwC,IAAP;;AAEvB,MAAIywB,WAAW,KAAK6b,KAAL,CAAW7b,QAA1B;AAAA,MAEC4Q,OAAO,KAAKA,IAFb;AAAA,MAGCuP,YAAY,KAAKzD,UAHlB;;AAKA,MAAK9L,SAASj1G,QAAd,EAAyB;;AAExB,OAAKwkH,cAAc,CAAE,CAArB,EAAyB;;AAExB;;AAEA,SAAKzD,UAAL,GAAkB,CAAlB;AACA,SAAK0D,WAAL,CAAkB,IAAlB,EAAwB,IAAxB,EAA8B,KAA9B;AAEA;;AAEDC,gBAAa;;AAEZ,QAAK9wC,QAAQywB,QAAb,EAAwB;;AAEvBzwB,YAAOywB,QAAP;AAEA,KAJD,MAIO,IAAKzwB,OAAO,CAAZ,EAAgB;;AAEtBA,YAAO,CAAP;AAEA,KAJM,MAIA,MAAM8wC,WAAN;;AAEP,QAAK,KAAKrD,iBAAV,EAA8B,KAAKD,MAAL,GAAc,IAAd,CAA9B,KACK,KAAKhhF,OAAL,GAAe,KAAf;;AAEL,SAAK6/E,MAAL,CAAY/nH,aAAZ,CAA2B;AAC1BV,WAAM,UADoB,EACRo6G,QAAQ,IADA;AAE1B7sF,gBAAWg/F,YAAY,CAAZ,GAAgB,CAAE,CAAlB,GAAsB;AAFP,KAA3B;AAKA;AAED,GAjCD,MAiCO;AAAE;;AAER,OAAIY,WAAa1P,SAAS/0G,YAA1B;;AAEA,OAAKskH,cAAc,CAAE,CAArB,EAAyB;;AAExB;;AAEA,QAAKT,aAAa,CAAlB,EAAsB;;AAErBS,iBAAY,CAAZ;;AAEA,UAAKC,WAAL,CAAkB,IAAlB,EAAwB,KAAKtD,WAAL,KAAqB,CAA7C,EAAgDwD,QAAhD;AAEA,KAND,MAMO;;AAEN;AACA;AACA;;AAEA,UAAKF,WAAL,CAAkB,KAAKtD,WAAL,KAAqB,CAAvC,EAA0C,IAA1C,EAAgDwD,QAAhD;AAEA;AAED;;AAED,OAAK/wC,QAAQywB,QAAR,IAAoBzwB,OAAO,CAAhC,EAAoC;;AAEnC;;AAEA,QAAIgxC,YAAYhvH,KAAKK,KAAL,CAAY29E,OAAOywB,QAAnB,CAAhB,CAJmC,CAIY;AAC/CzwB,YAAQywB,WAAWugB,SAAnB;;AAEAJ,iBAAa5uH,KAAKqR,GAAL,CAAU29G,SAAV,CAAb;;AAEA,QAAIC,UAAU,KAAK1D,WAAL,GAAmBqD,SAAjC;;AAEA,QAAKK,WAAW,CAAhB,EAAoB;;AAEnB;;AAEA,SAAK,KAAKxD,iBAAV,EAA8B,KAAKD,MAAL,GAAc,IAAd,CAA9B,KACK,KAAKhhF,OAAL,GAAe,KAAf;;AAELwzC,YAAOmwC,YAAY,CAAZ,GAAgB1f,QAAhB,GAA2B,CAAlC;;AAEA,UAAK4b,MAAL,CAAY/nH,aAAZ,CAA2B;AAC1BV,YAAM,UADoB,EACRo6G,QAAQ,IADA;AAE1B7sF,iBAAWg/F,YAAY,CAAZ,GAAgB,CAAhB,GAAoB,CAAE;AAFP,MAA3B;AAKA,KAdD,MAcO;;AAEN;;AAEA,SAAKc,YAAY,CAAjB,EAAqB;;AAEpB;;AAEA,UAAIC,UAAUf,YAAY,CAA1B;AACA,WAAKU,WAAL,CAAkBK,OAAlB,EAA2B,CAAEA,OAA7B,EAAsCH,QAAtC;AAEA,MAPD,MAOO;;AAEN,WAAKF,WAAL,CAAkB,KAAlB,EAAyB,KAAzB,EAAgCE,QAAhC;AAEA;;AAED,UAAK5D,UAAL,GAAkByD,SAAlB;;AAEA,UAAKvE,MAAL,CAAY/nH,aAAZ,CAA2B;AAC1BV,YAAM,MADoB,EACZo6G,QAAQ,IADI,EACEgT,WAAWA;AADb,MAA3B;AAIA;AAED;;AAED,OAAKD,YAAY,CAAEH,YAAY,CAAd,MAAsB,CAAvC,EAA2C;;AAE1C;;AAEA,SAAK5wC,IAAL,GAAYA,IAAZ;AACA,WAAOywB,WAAWzwB,IAAlB;AAEA;AAED;;AAED,OAAKA,IAAL,GAAYA,IAAZ;AACA,SAAOA,IAAP;AAEA,EA7gBwC;;AA+gBzC6wC,cAAa,UAAWK,OAAX,EAAoBC,KAApB,EAA2BJ,QAA3B,EAAsC;;AAElD,MAAI3lB,WAAW,KAAKwhB,oBAApB;;AAEA,MAAKmE,QAAL,EAAgB;;AAEf3lB,YAASc,WAAT,GAAwBv/F,eAAxB;AACAy+F,YAASe,SAAT,GAAsBx/F,eAAtB;AAEA,GALD,MAKO;;AAEN;;AAEA,OAAKukH,OAAL,EAAe;;AAEd9lB,aAASc,WAAT,GAAuB,KAAKwhB,gBAAL,GAAwB/gH,eAAxB,GAA0CD,mBAAjE;AAEA,IAJD,MAIO;;AAEN0+F,aAASc,WAAT,GAAuBt/F,gBAAvB;AAEA;;AAED,OAAKukH,KAAL,EAAa;;AAEZ/lB,aAASe,SAAT,GAAqB,KAAKwhB,cAAL,GAAsBhhH,eAAtB,GAAwCD,mBAA7D;AAEA,IAJD,MAIO;;AAEN0+F,aAASe,SAAT,GAAuBv/F,gBAAvB;AAEA;AAED;AAED,EAljBwC;;AAojBzC2hH,kBAAiB,UAAW9d,QAAX,EAAqB2gB,SAArB,EAAgCC,UAAhC,EAA6C;;AAE7D,MAAIlF,QAAQ,KAAKE,MAAjB;AAAA,MAAyBsD,MAAMxD,MAAMnsC,IAArC;AAAA,MACC2sC,cAAc,KAAKO,kBADpB;;AAGA,MAAKP,gBAAgB,IAArB,EAA4B;;AAE3BA,iBAAcR,MAAMyD,uBAAN,EAAd;AACA,QAAK1C,kBAAL,GAA0BP,WAA1B;AAEA;;AAED,MAAIpjB,QAAQojB,YAAY1iB,kBAAxB;AAAA,MACCv+D,SAASihF,YAAYziB,YADtB;;AAGAX,QAAO,CAAP,IAAaomB,GAAb,CAAsBjkF,OAAQ,CAAR,IAAc0lF,SAAd;AACtB7nB,QAAO,CAAP,IAAaomB,MAAMlf,QAAnB,CAA6B/kE,OAAQ,CAAR,IAAc2lF,UAAd;;AAE7B,SAAO,IAAP;AAEA;;AAxkBwC,CAA1C;;AA4kBA;;;;;;;;;;AAUA,SAASC,cAAT,CAAyB/K,IAAzB,EAAgC;;AAE/B,MAAK0J,KAAL,GAAa1J,IAAb;AACA,MAAKgL,kBAAL;AACA,MAAKC,UAAL,GAAkB,CAAlB;;AAEA,MAAKxxC,IAAL,GAAY,CAAZ;;AAEA,MAAKyvB,SAAL,GAAiB,GAAjB;AAEA;;AAED6hB,eAAe7uH,SAAf,GAA2BC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAe9kB,gBAAgBjB,SAA/B,CAAf,EAA2D;;AAErF0O,cAAamgH,cAFwE;;AAIrFG,cAAa,UAAWzT,MAAX,EAAmB0T,eAAnB,EAAqC;;AAEjD,MAAInL,OAAOvI,OAAOuO,UAAP,IAAqB,KAAK0D,KAArC;AAAA,MACCvf,SAASsN,OAAOsO,KAAP,CAAa5b,MADvB;AAAA,MAEC8b,UAAU9b,OAAOrtG,MAFlB;AAAA,MAGC6iH,WAAWlI,OAAO8O,iBAHnB;AAAA,MAICL,eAAezO,OAAO6O,aAJvB;AAAA,MAKC8E,WAAWpL,KAAKl4G,IALjB;AAAA,MAMCujH,iBAAiB,KAAKC,sBANvB;AAAA,MAOCC,iBAAiBF,eAAgBD,QAAhB,CAPlB;;AASA,MAAKG,mBAAmB/vH,SAAxB,EAAoC;;AAEnC+vH,oBAAiB,EAAjB;AACAF,kBAAgBD,QAAhB,IAA6BG,cAA7B;AAEA;;AAED,OAAM,IAAIptH,IAAI,CAAd,EAAiBA,MAAM8nH,OAAvB,EAAgC,EAAG9nH,CAAnC,EAAuC;;AAEtC,OAAIsqG,QAAQ0B,OAAQhsG,CAAR,CAAZ;AAAA,OACCutG,YAAYjD,MAAMpnF,IADnB;AAAA,OAECy8F,UAAUyN,eAAgB7f,SAAhB,CAFX;;AAIA,OAAKoS,YAAYtiH,SAAjB,EAA6B;;AAE5BmkH,aAAUxhH,CAAV,IAAgB2/G,OAAhB;AAEA,IAJD,MAIO;;AAENA,cAAU6B,SAAUxhH,CAAV,CAAV;;AAEA,QAAK2/G,YAAYtiH,SAAjB,EAA6B;;AAE5B;;AAEA,SAAKsiH,QAAQ0I,WAAR,KAAwB,IAA7B,EAAoC;;AAEnC,QAAG1I,QAAQQ,cAAX;AACA,WAAKkN,mBAAL,CAA0B1N,OAA1B,EAAmCsN,QAAnC,EAA6C1f,SAA7C;AAEA;;AAED;AAEA;;AAED,QAAIlgD,OAAO2/D,mBAAmBA,gBAC7B5E,iBAD6B,CACVpoH,CADU,EACN2/G,OADM,CACEqB,UADhC;;AAGArB,cAAU,IAAID,aAAJ,CACTuB,gBAAgBn9F,MAAhB,CAAwB+9F,IAAxB,EAA8BtU,SAA9B,EAAyClgD,IAAzC,CADS,EAETi9C,MAAMtF,aAFG,EAEYsF,MAAMtD,YAAN,EAFZ,CAAV;;AAIA,MAAG2Y,QAAQQ,cAAX;AACA,SAAKkN,mBAAL,CAA0B1N,OAA1B,EAAmCsN,QAAnC,EAA6C1f,SAA7C;;AAEAiU,aAAUxhH,CAAV,IAAgB2/G,OAAhB;AAEA;;AAEDoI,gBAAc/nH,CAAd,EAAkB0lG,YAAlB,GAAiCia,QAAQ5/E,MAAzC;AAEA;AAED,EArEoF;;AAuErFmpF,kBAAiB,UAAW5P,MAAX,EAAoB;;AAEpC,MAAK,CAAE,KAAKiQ,eAAL,CAAsBjQ,MAAtB,CAAP,EAAwC;;AAEvC,OAAKA,OAAO+O,WAAP,KAAuB,IAA5B,EAAmC;;AAElC;AACA;;AAEA,QAAI4E,WAAW,CAAE3T,OAAOuO,UAAP,IAAqB,KAAK0D,KAA5B,EAAoC5hH,IAAnD;AAAA,QACC2jH,WAAWhU,OAAOsO,KAAP,CAAaj+G,IADzB;AAAA,QAEC4jH,iBAAiB,KAAKC,cAAL,CAAqBF,QAArB,CAFlB;;AAIA,SAAKP,WAAL,CAAkBzT,MAAlB,EACCiU,kBAAkBA,eAAeE,YAAf,CAA6B,CAA7B,CADnB;;AAGA,SAAKC,kBAAL,CAAyBpU,MAAzB,EAAiCgU,QAAjC,EAA2CL,QAA3C;AAEA;;AAED,OAAIzL,WAAWlI,OAAO8O,iBAAtB;;AAEA;AACA,QAAM,IAAIpoH,IAAI,CAAR,EAAWiK,IAAIu3G,SAAS7iH,MAA9B,EAAsCqB,MAAMiK,CAA5C,EAA+C,EAAGjK,CAAlD,EAAsD;;AAErD,QAAI2/G,UAAU6B,SAAUxhH,CAAV,CAAd;;AAEA,QAAK2/G,QAAQO,QAAR,OAAwB,CAA7B,EAAiC;;AAEhC,UAAKyN,YAAL,CAAmBhO,OAAnB;AACAA,aAAQc,iBAAR;AAEA;AAED;;AAED,QAAKmN,WAAL,CAAkBtU,MAAlB;AAEA;AAED,EA/GoF;;AAiHrF6P,oBAAmB,UAAW7P,MAAX,EAAoB;;AAEtC,MAAK,KAAKiQ,eAAL,CAAsBjQ,MAAtB,CAAL,EAAsC;;AAErC,OAAIkI,WAAWlI,OAAO8O,iBAAtB;;AAEA;AACA,QAAM,IAAIpoH,IAAI,CAAR,EAAWiK,IAAIu3G,SAAS7iH,MAA9B,EAAsCqB,MAAMiK,CAA5C,EAA+C,EAAGjK,CAAlD,EAAsD;;AAErD,QAAI2/G,UAAU6B,SAAUxhH,CAAV,CAAd;;AAEA,QAAK,EAAG2/G,QAAQO,QAAX,KAAwB,CAA7B,EAAiC;;AAEhCP,aAAQgB,oBAAR;AACA,UAAKkN,gBAAL,CAAuBlO,OAAvB;AAEA;AAED;;AAED,QAAKmO,eAAL,CAAsBxU,MAAtB;AAEA;AAED,EAzIoF;;AA2IrF;;AAEAuT,qBAAoB,YAAY;;AAE/B,OAAKkB,QAAL,GAAgB,EAAhB,CAF+B,CAEX;AACpB,OAAKC,eAAL,GAAuB,CAAvB;;AAEA,OAAKR,cAAL,GAAsB,EAAtB;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAKpM,SAAL,GAAiB,EAAjB,CAb+B,CAaV;AACrB,OAAK6M,gBAAL,GAAwB,CAAxB;;AAEA,OAAKd,sBAAL,GAA8B,EAA9B,CAhB+B,CAgBG;;;AAGlC,OAAKe,oBAAL,GAA4B,EAA5B,CAnB+B,CAmBC;AAChC,OAAKC,2BAAL,GAAmC,CAAnC;;AAEA,MAAIllG,QAAQ,IAAZ;;AAEA,OAAK+8F,KAAL,GAAa;;AAEZoI,YAAS;AACR,QAAInI,KAAJ,GAAY;;AAEX,YAAOh9F,MAAM8kG,QAAN,CAAepvH,MAAtB;AAEA,KALO;AAMR,QAAIunH,KAAJ,GAAY;;AAEX,YAAOj9F,MAAM+kG,eAAb;AAEA;AAVO,IAFG;AAcZxM,aAAU;AACT,QAAIyE,KAAJ,GAAY;;AAEX,YAAOh9F,MAAMm4F,SAAN,CAAgBziH,MAAvB;AAEA,KALQ;AAMT,QAAIunH,KAAJ,GAAY;;AAEX,YAAOj9F,MAAMglG,gBAAb;AAEA;AAVQ,IAdE;AA0BZI,wBAAqB;AACpB,QAAIpI,KAAJ,GAAY;;AAEX,YAAOh9F,MAAMilG,oBAAN,CAA2BvvH,MAAlC;AAEA,KALmB;AAMpB,QAAIunH,KAAJ,GAAY;;AAEX,YAAOj9F,MAAMklG,2BAAb;AAEA;AAVmB;;AA1BT,GAAb;AAyCA,EA9MoF;;AAgNrF;;AAEA5E,kBAAiB,UAAWjQ,MAAX,EAAoB;;AAEpC,MAAI76G,QAAQ66G,OAAO+O,WAAnB;AACA,SAAO5pH,UAAU,IAAV,IAAkBA,QAAQ,KAAKuvH,eAAtC;AAEA,EAvNoF;;AAyNrFN,qBAAoB,UAAWpU,MAAX,EAAmBgU,QAAnB,EAA6BL,QAA7B,EAAwC;;AAE3D,MAAImB,UAAU,KAAKL,QAAnB;AAAA,MACCO,gBAAgB,KAAKd,cADtB;AAAA,MAECD,iBAAiBe,cAAehB,QAAf,CAFlB;;AAIA,MAAKC,mBAAmBlwH,SAAxB,EAAoC;;AAEnCkwH,oBAAiB;;AAEhBE,kBAAc,CAAEnU,MAAF,CAFE;AAGhBiV,kBAAc;;AAHE,IAAjB;;AAOAjV,UAAOgP,iBAAP,GAA2B,CAA3B;;AAEAgG,iBAAehB,QAAf,IAA4BC,cAA5B;AAEA,GAbD,MAaO;;AAEN,OAAIE,eAAeF,eAAeE,YAAlC;;AAEAnU,UAAOgP,iBAAP,GAA2BmF,aAAa9uH,MAAxC;AACA8uH,gBAAaluH,IAAb,CAAmB+5G,MAAnB;AAEA;;AAEDA,SAAO+O,WAAP,GAAqB+F,QAAQzvH,MAA7B;AACAyvH,UAAQ7uH,IAAR,CAAc+5G,MAAd;;AAEAiU,iBAAegB,YAAf,CAA6BtB,QAA7B,IAA0C3T,MAA1C;AAEA,EA1PoF;;AA4PrFkV,wBAAuB,UAAWlV,MAAX,EAAoB;;AAE1C,MAAI8U,UAAU,KAAKL,QAAnB;AAAA,MACCU,qBAAqBL,QAASA,QAAQzvH,MAAR,GAAiB,CAA1B,CADtB;AAAA,MAEC+vH,aAAapV,OAAO+O,WAFrB;;AAIAoG,qBAAmBpG,WAAnB,GAAiCqG,UAAjC;AACAN,UAASM,UAAT,IAAwBD,kBAAxB;AACAL,UAAQ72D,GAAR;;AAEA+hD,SAAO+O,WAAP,GAAqB,IAArB;;AAGA,MAAIiF,WAAWhU,OAAOsO,KAAP,CAAaj+G,IAA5B;AAAA,MACC2kH,gBAAgB,KAAKd,cADtB;AAAA,MAECD,iBAAiBe,cAAehB,QAAf,CAFlB;AAAA,MAGCqB,sBAAsBpB,eAAeE,YAHtC;AAAA,MAKCmB,kBACCD,oBAAqBA,oBAAoBhwH,MAApB,GAA6B,CAAlD,CANF;AAAA,MAQCkwH,mBAAmBvV,OAAOgP,iBAR3B;;AAUAsG,kBAAgBtG,iBAAhB,GAAoCuG,gBAApC;AACAF,sBAAqBE,gBAArB,IAA0CD,eAA1C;AACAD,sBAAoBp3D,GAApB;;AAEA+hD,SAAOgP,iBAAP,GAA2B,IAA3B;;AAGA,MAAIiG,eAAehB,eAAegB,YAAlC;AAAA,MACCtB,WAAW,CAAE3T,OAAOuO,UAAP,IAAqB,KAAK0D,KAA5B,EAAoC5hH,IADhD;;AAGA,SAAO4kH,aAActB,QAAd,CAAP;;AAEA,MAAK0B,oBAAoBhwH,MAApB,KAA+B,CAApC,EAAwC;;AAEvC,UAAO2vH,cAAehB,QAAf,CAAP;AAEA;;AAED,OAAKwB,gCAAL,CAAuCxV,MAAvC;AAEA,EAvSoF;;AAySrFwV,mCAAkC,UAAWxV,MAAX,EAAoB;;AAErD,MAAIkI,WAAWlI,OAAO8O,iBAAtB;AACA,OAAM,IAAIpoH,IAAI,CAAR,EAAWiK,IAAIu3G,SAAS7iH,MAA9B,EAAsCqB,MAAMiK,CAA5C,EAA+C,EAAGjK,CAAlD,EAAsD;;AAErD,OAAI2/G,UAAU6B,SAAUxhH,CAAV,CAAd;;AAEA,OAAK,EAAG2/G,QAAQQ,cAAX,KAA8B,CAAnC,EAAuC;;AAEtC,SAAK4O,sBAAL,CAA6BpP,OAA7B;AAEA;AAED;AAED,EAxToF;;AA0TrFiO,cAAa,UAAWtU,MAAX,EAAoB;;AAEhC;AACA;AACA;AACA;AACA;;AAEA,MAAI8U,UAAU,KAAKL,QAAnB;AAAA,MACCiB,YAAY1V,OAAO+O,WADpB;AAAA,MAGC4G,kBAAkB,KAAKjB,eAAL,EAHnB;AAAA,MAKCkB,sBAAsBd,QAASa,eAAT,CALvB;;AAOA3V,SAAO+O,WAAP,GAAqB4G,eAArB;AACAb,UAASa,eAAT,IAA6B3V,MAA7B;;AAEA4V,sBAAoB7G,WAApB,GAAkC2G,SAAlC;AACAZ,UAASY,SAAT,IAAuBE,mBAAvB;AAEA,EA/UoF;;AAiVrFpB,kBAAiB,UAAWxU,MAAX,EAAoB;;AAEpC;AACA;AACA;AACA;AACA;;AAEA,MAAI8U,UAAU,KAAKL,QAAnB;AAAA,MACCiB,YAAY1V,OAAO+O,WADpB;AAAA,MAGC8G,qBAAqB,EAAG,KAAKnB,eAH9B;AAAA,MAKCoB,mBAAmBhB,QAASe,kBAAT,CALpB;;AAOA7V,SAAO+O,WAAP,GAAqB8G,kBAArB;AACAf,UAASe,kBAAT,IAAgC7V,MAAhC;;AAEA8V,mBAAiB/G,WAAjB,GAA+B2G,SAA/B;AACAZ,UAASY,SAAT,IAAuBI,gBAAvB;AAEA,EAtWoF;;AAwWrF;;AAEA/B,sBAAqB,UAAW1N,OAAX,EAAoBsN,QAApB,EAA8B1f,SAA9B,EAA0C;;AAE9D,MAAI2f,iBAAiB,KAAKC,sBAA1B;AAAA,MACCkC,gBAAgBnC,eAAgBD,QAAhB,CADjB;AAAA,MAGCzL,WAAW,KAAKJ,SAHjB;;AAKA,MAAKiO,kBAAkBhyH,SAAvB,EAAmC;;AAElCgyH,mBAAgB,EAAhB;AACAnC,kBAAgBD,QAAhB,IAA6BoC,aAA7B;AAEA;;AAEDA,gBAAe9hB,SAAf,IAA6BoS,OAA7B;;AAEAA,UAAQ0I,WAAR,GAAsB7G,SAAS7iH,MAA/B;AACA6iH,WAASjiH,IAAT,CAAeogH,OAAf;AAEA,EA7XoF;;AA+XrFoP,yBAAwB,UAAWpP,OAAX,EAAqB;;AAE5C,MAAI6B,WAAW,KAAKJ,SAApB;AAAA,MACCkO,cAAc3P,QAAQA,OADvB;AAAA,MAECsN,WAAWqC,YAAY5N,QAAZ,CAAqB/3G,IAFjC;AAAA,MAGC4jG,YAAY+hB,YAAYjiE,IAHzB;AAAA,MAIC6/D,iBAAiB,KAAKC,sBAJvB;AAAA,MAKCkC,gBAAgBnC,eAAgBD,QAAhB,CALjB;AAAA,MAOCsC,sBAAsB/N,SAAUA,SAAS7iH,MAAT,GAAkB,CAA5B,CAPvB;AAAA,MAQC+vH,aAAa/O,QAAQ0I,WARtB;;AAUAkH,sBAAoBlH,WAApB,GAAkCqG,UAAlC;AACAlN,WAAUkN,UAAV,IAAyBa,mBAAzB;AACA/N,WAASjqD,GAAT;;AAEA,SAAO83D,cAAe9hB,SAAf,CAAP;;AAEAiiB,oBAAkB;;AAEjB,QAAM,IAAIC,CAAV,IAAeJ,aAAf,EAA+B,MAAMG,gBAAN,CAFd,CAEsC;;AAEvD,UAAOtC,eAAgBD,QAAhB,CAAP;AAEA;AAED,EAzZoF;;AA2ZrFU,eAAc,UAAWhO,OAAX,EAAqB;;AAElC,MAAI6B,WAAW,KAAKJ,SAApB;AAAA,MACC4N,YAAYrP,QAAQ0I,WADrB;AAAA,MAGC4G,kBAAkB,KAAKhB,gBAAL,EAHnB;AAAA,MAKCyB,uBAAuBlO,SAAUyN,eAAV,CALxB;;AAOAtP,UAAQ0I,WAAR,GAAsB4G,eAAtB;AACAzN,WAAUyN,eAAV,IAA8BtP,OAA9B;;AAEA+P,uBAAqBrH,WAArB,GAAmC2G,SAAnC;AACAxN,WAAUwN,SAAV,IAAwBU,oBAAxB;AAEA,EA1aoF;;AA4arF7B,mBAAkB,UAAWlO,OAAX,EAAqB;;AAEtC,MAAI6B,WAAW,KAAKJ,SAApB;AAAA,MACC4N,YAAYrP,QAAQ0I,WADrB;AAAA,MAGC8G,qBAAqB,EAAG,KAAKlB,gBAH9B;AAAA,MAKC0B,oBAAoBnO,SAAU2N,kBAAV,CALrB;;AAOAxP,UAAQ0I,WAAR,GAAsB8G,kBAAtB;AACA3N,WAAU2N,kBAAV,IAAiCxP,OAAjC;;AAEAgQ,oBAAkBtH,WAAlB,GAAgC2G,SAAhC;AACAxN,WAAUwN,SAAV,IAAwBW,iBAAxB;AAEA,EA3boF;;AA8brF;;AAEAzE,0BAAyB,YAAY;;AAEpC,MAAInD,eAAe,KAAKmG,oBAAxB;AAAA,MACCe,kBAAkB,KAAKd,2BAAL,EADnB;AAAA,MAEClG,cAAcF,aAAckH,eAAd,CAFf;;AAIA,MAAKhH,gBAAgB5qH,SAArB,EAAiC;;AAEhC4qH,iBAAc,IAAIzf,iBAAJ,CACb,IAAIpoE,YAAJ,CAAkB,CAAlB,CADa,EACU,IAAIA,YAAJ,CAAkB,CAAlB,CADV,EAEb,CAFa,EAEV,KAAKwvF,gCAFK,CAAd;;AAIA3H,eAAY4H,YAAZ,GAA2BZ,eAA3B;AACAlH,gBAAckH,eAAd,IAAkChH,WAAlC;AAEA;;AAED,SAAOA,WAAP;AAEA,EAndoF;;AAqdrFwC,8BAA6B,UAAWxC,WAAX,EAAyB;;AAErD,MAAIF,eAAe,KAAKmG,oBAAxB;AAAA,MACCc,YAAY/G,YAAY4H,YADzB;AAAA,MAGCV,qBAAqB,EAAG,KAAKhB,2BAH9B;AAAA,MAKC2B,wBAAwB/H,aAAcoH,kBAAd,CALzB;;AAOAlH,cAAY4H,YAAZ,GAA2BV,kBAA3B;AACApH,eAAcoH,kBAAd,IAAqClH,WAArC;;AAEA6H,wBAAsBD,YAAtB,GAAqCb,SAArC;AACAjH,eAAciH,SAAd,IAA4Bc,qBAA5B;AAEA,EApeoF;;AAserFF,mCAAkC,IAAIxvF,YAAJ,CAAkB,CAAlB,CAtemD;;AAwerF;AACA;AACA;AACA2vF,aAAY,UAAW1jB,IAAX,EAAiB2jB,YAAjB,EAAgC;;AAE3C,MAAInO,OAAOmO,gBAAgB,KAAKzE,KAAhC;AAAA,MACC0B,WAAWpL,KAAKl4G,IADjB;AAAA,MAGCsmH,aAAa,OAAO5jB,IAAP,KAAgB,QAAhB,GACZP,cAAca,UAAd,CAA0BkV,IAA1B,EAAgCxV,IAAhC,CADY,GAC6BA,IAJ3C;AAAA,MAMCihB,WAAW2C,eAAe,IAAf,GAAsBA,WAAWtmH,IAAjC,GAAwC0iG,IANpD;AAAA,MAQCkhB,iBAAiB,KAAKC,cAAL,CAAqBF,QAArB,CARlB;AAAA,MASCN,kBAAkB,IATnB;;AAWA,MAAKO,mBAAmBlwH,SAAxB,EAAoC;;AAEnC,OAAI6yH,iBACF3C,eAAegB,YAAf,CAA6BtB,QAA7B,CADF;;AAGA,OAAKiD,mBAAmB7yH,SAAxB,EAAoC;;AAEnC,WAAO6yH,cAAP;AAEA;;AAED;AACA;AACAlD,qBAAkBO,eAAeE,YAAf,CAA6B,CAA7B,CAAlB;;AAEA;AACA,OAAKwC,eAAe,IAApB,EACCA,aAAajD,gBAAgBpF,KAA7B;AAED;;AAED;AACA,MAAKqI,eAAe,IAApB,EAA2B,OAAO,IAAP;;AAE3B;AACA,MAAIE,YAAY,IAAI3I,eAAJ,CAAqB,IAArB,EAA2ByI,UAA3B,EAAuCD,YAAvC,CAAhB;;AAEA,OAAKjD,WAAL,CAAkBoD,SAAlB,EAA6BnD,eAA7B;;AAEA;AACA,OAAKU,kBAAL,CAAyByC,SAAzB,EAAoC7C,QAApC,EAA8CL,QAA9C;;AAEA,SAAOkD,SAAP;AAEA,EA1hBoF;;AA4hBrF;AACAD,iBAAgB,UAAW7jB,IAAX,EAAiB2jB,YAAjB,EAAgC;;AAE/C,MAAInO,OAAOmO,gBAAgB,KAAKzE,KAAhC;AAAA,MACC0B,WAAWpL,KAAKl4G,IADjB;AAAA,MAGCsmH,aAAa,OAAO5jB,IAAP,KAAgB,QAAhB,GACZP,cAAca,UAAd,CAA0BkV,IAA1B,EAAgCxV,IAAhC,CADY,GAC6BA,IAJ3C;AAAA,MAMCihB,WAAW2C,aAAaA,WAAWtmH,IAAxB,GAA+B0iG,IAN3C;AAAA,MAQCkhB,iBAAiB,KAAKC,cAAL,CAAqBF,QAArB,CARlB;;AAUA,MAAKC,mBAAmBlwH,SAAxB,EAAoC;;AAEnC,UAAOkwH,eAAegB,YAAf,CAA6BtB,QAA7B,KAA2C,IAAlD;AAEA;;AAED,SAAO,IAAP;AAEA,EAjjBoF;;AAmjBrF;AACAmD,gBAAe,YAAY;;AAE1B,MAAIhC,UAAU,KAAKL,QAAnB;AAAA,MACCsC,WAAW,KAAKrC,eADjB;AAAA,MAECxM,WAAW,KAAKJ,SAFjB;AAAA,MAGCoF,YAAY,KAAKyH,gBAHlB;;AAKA,OAAKD,eAAL,GAAuB,CAAvB;AACA,OAAKC,gBAAL,GAAwB,CAAxB;;AAEA,OAAM,IAAIjuH,IAAI,CAAd,EAAiBA,MAAMqwH,QAAvB,EAAiC,EAAGrwH,CAApC,EAAwC;;AAEvCouH,WAASpuH,CAAT,EAAakoD,KAAb;AAEA;;AAED,OAAM,IAAIloD,IAAI,CAAd,EAAiBA,MAAMwmH,SAAvB,EAAkC,EAAGxmH,CAArC,EAAyC;;AAExCwhH,YAAUxhH,CAAV,EAAckgH,QAAd,GAAyB,CAAzB;AAEA;;AAED,SAAO,IAAP;AAEA,EA5kBoF;;AA8kBrF;AACA5jG,SAAQ,UAAWmvG,SAAX,EAAuB;;AAE9BA,eAAa,KAAK1gB,SAAlB;;AAEA,MAAIqjB,UAAU,KAAKL,QAAnB;AAAA,MACCsC,WAAW,KAAKrC,eADjB;AAAA,MAGC1yC,OAAO,KAAKA,IAAL,IAAamwC,SAHrB;AAAA,MAICC,gBAAgBpuH,KAAKM,IAAL,CAAW6tH,SAAX,CAJjB;AAAA,MAMCpL,YAAY,KAAKyM,UAAL,IAAmB,CANhC;;AAQA;;AAEA,OAAM,IAAI9sH,IAAI,CAAd,EAAiBA,MAAMqwH,QAAvB,EAAiC,EAAGrwH,CAApC,EAAwC;;AAEvC,OAAIs5G,SAAS8U,QAASpuH,CAAT,CAAb;;AAEAs5G,UAAOkS,OAAP,CAAgBlwC,IAAhB,EAAsBmwC,SAAtB,EAAiCC,aAAjC,EAAgDrL,SAAhD;AAEA;;AAED;;AAEA,MAAImB,WAAW,KAAKJ,SAApB;AAAA,MACCoF,YAAY,KAAKyH,gBADlB;;AAGA,OAAM,IAAIjuH,IAAI,CAAd,EAAiBA,MAAMwmH,SAAvB,EAAkC,EAAGxmH,CAArC,EAAyC;;AAExCwhH,YAAUxhH,CAAV,EAAcunE,KAAd,CAAqB84C,SAArB;AAEA;;AAED,SAAO,IAAP;AAEA,EAlnBoF;;AAonBrF;AACAiL,UAAS,YAAY;;AAEpB,SAAO,KAAKC,KAAZ;AAEA,EAznBoF;;AA2nBrF;AACA+E,cAAa,UAAWjkB,IAAX,EAAkB;;AAE9B,MAAI+hB,UAAU,KAAKL,QAAnB;AAAA,MACCT,WAAWjhB,KAAK1iG,IADjB;AAAA,MAEC2kH,gBAAgB,KAAKd,cAFtB;AAAA,MAGCD,iBAAiBe,cAAehB,QAAf,CAHlB;;AAKA,MAAKC,mBAAmBlwH,SAAxB,EAAoC;;AAEnC;AACA;AACA;;AAEA,OAAIkzH,kBAAkBhD,eAAeE,YAArC;;AAEA,QAAM,IAAIztH,IAAI,CAAR,EAAWiK,IAAIsmH,gBAAgB5xH,MAArC,EAA6CqB,MAAMiK,CAAnD,EAAsD,EAAGjK,CAAzD,EAA6D;;AAE5D,QAAIs5G,SAASiX,gBAAiBvwH,CAAjB,CAAb;;AAEA,SAAKmpH,iBAAL,CAAwB7P,MAAxB;;AAEA,QAAIoV,aAAapV,OAAO+O,WAAxB;AAAA,QACCoG,qBAAqBL,QAASA,QAAQzvH,MAAR,GAAiB,CAA1B,CADtB;;AAGA26G,WAAO+O,WAAP,GAAqB,IAArB;AACA/O,WAAOgP,iBAAP,GAA2B,IAA3B;;AAEAmG,uBAAmBpG,WAAnB,GAAiCqG,UAAjC;AACAN,YAASM,UAAT,IAAwBD,kBAAxB;AACAL,YAAQ72D,GAAR;;AAEA,SAAKu3D,gCAAL,CAAuCxV,MAAvC;AAEA;;AAED,UAAOgV,cAAehB,QAAf,CAAP;AAEA;AAED,EAnqBoF;;AAqqBrF;AACAkD,cAAa,UAAW3O,IAAX,EAAkB;;AAE9B,MAAIoL,WAAWpL,KAAKl4G,IAApB;AAAA,MACC2kH,gBAAgB,KAAKd,cADtB;;AAGA,OAAM,IAAIF,QAAV,IAAsBgB,aAAtB,EAAsC;;AAErC,OAAIC,eAAeD,cAAehB,QAAf,EAA0BiB,YAA7C;AAAA,OACCjV,SAASiV,aAActB,QAAd,CADV;;AAGA,OAAK3T,WAAWj8G,SAAhB,EAA4B;;AAE3B,SAAK8rH,iBAAL,CAAwB7P,MAAxB;AACA,SAAKkV,qBAAL,CAA4BlV,MAA5B;AAEA;AAED;;AAED,MAAI4T,iBAAiB,KAAKC,sBAA1B;AAAA,MACCkC,gBAAgBnC,eAAgBD,QAAhB,CADjB;;AAGA,MAAKoC,kBAAkBhyH,SAAvB,EAAmC;;AAElC,QAAM,IAAIkwG,SAAV,IAAuB8hB,aAAvB,EAAuC;;AAEtC,QAAI1P,UAAU0P,cAAe9hB,SAAf,CAAd;AACAoS,YAAQgB,oBAAR;AACA,SAAKoO,sBAAL,CAA6BpP,OAA7B;AAEA;AAED;AAED,EAxsBoF;;AA0sBrF;AACA8Q,gBAAe,UAAWpkB,IAAX,EAAiB2jB,YAAjB,EAAgC;;AAE9C,MAAI1W,SAAS,KAAK4W,cAAL,CAAqB7jB,IAArB,EAA2B2jB,YAA3B,CAAb;;AAEA,MAAK1W,WAAW,IAAhB,EAAuB;;AAEtB,QAAK6P,iBAAL,CAAwB7P,MAAxB;AACA,QAAKkV,qBAAL,CAA4BlV,MAA5B;AAEA;AAED;;AAttBoF,CAA3D,CAA3B;;AA0tBA;;;;AAIA,SAASoX,OAAT,CAAkBjzH,KAAlB,EAA0B;;AAEzB,KAAK,OAAOA,KAAP,KAAiB,QAAtB,EAAiC;;AAEhCqP,UAAQC,IAAR,CAAc,oDAAd;AACAtP,UAAQiB,UAAW,CAAX,CAAR;AAEA;;AAED,MAAKjB,KAAL,GAAaA,KAAb;AAEA;;AAEDizH,QAAQ3yH,SAAR,CAAkByO,KAAlB,GAA0B,YAAY;;AAErC,QAAO,IAAIkkH,OAAJ,CAAa,KAAKjzH,KAAL,CAAW+O,KAAX,KAAqBnP,SAArB,GAAiC,KAAKI,KAAtC,GAA8C,KAAKA,KAAL,CAAW+O,KAAX,EAA3D,CAAP;AAEA,CAJD;;AAMA;;;;AAIA,SAASmkH,uBAAT,GAAmC;;AAElC1+E,gBAAelzC,IAAf,CAAqB,IAArB;;AAEA,MAAKG,IAAL,GAAY,yBAAZ;AACA,MAAKyjD,iBAAL,GAAyBtlD,SAAzB;AAEA;;AAEDszH,wBAAwB5yH,SAAxB,GAAoCC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAemuB,eAAel0C,SAA9B,CAAf,EAA0D;;AAE7F0O,cAAakkH,uBAFgF;;AAI7Fz2C,4BAA2B,IAJkE;;AAM7FxtE,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBqzC,iBAAel0C,SAAf,CAAyB2O,IAAzB,CAA8B3N,IAA9B,CAAoC,IAApC,EAA0CH,MAA1C;;AAEA,OAAK+jD,iBAAL,GAAyB/jD,OAAO+jD,iBAAhC;;AAEA,SAAO,IAAP;AAEA,EAd4F;;AAgB7Fn2C,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA;;AApB4F,CAA1D,CAApC;;AAwBA;;;;AAIA,SAASkkH,0BAAT,CAAqCC,iBAArC,EAAwDphF,QAAxD,EAAkE9/B,MAAlE,EAA0E+/B,UAA1E,EAAuF;;AAEtF,MAAKxoB,IAAL,GAAY2pG,iBAAZ;AACA,MAAKphF,QAAL,GAAgBA,QAAhB;AACA,MAAK9/B,MAAL,GAAcA,MAAd;;AAEA,MAAK+/B,UAAL,GAAkBA,eAAe,IAAjC;AAEA;;AAED1xC,OAAO8N,gBAAP,CAAyB8kH,2BAA2B7yH,SAApD,EAA+D;;AAE9DqZ,QAAO;;AAENlZ,OAAK,YAAY;;AAEhB,UAAO,KAAKgpB,IAAL,CAAU9P,KAAjB;AAEA;;AANK,EAFuD;;AAY9DtX,QAAO;;AAEN5B,OAAK,YAAY;;AAEhB,UAAO,KAAKgpB,IAAL,CAAUpnB,KAAjB;AAEA;;AANK;;AAZuD,CAA/D;;AAwBA9B,OAAOK,MAAP,CAAeuyH,2BAA2B7yH,SAA1C,EAAqD;;AAEpDyjC,+BAA8B,IAFsB;;AAIpDr1B,OAAM,UAAW1N,KAAX,EAAkBZ,CAAlB,EAAsB;;AAE3B,OAAKqpB,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,KAAKyoB,IAAL,CAAUozD,MAAlB,GAA2B,KAAK3qE,MAAjD,IAA4D9R,CAA5D;;AAEA,SAAO,IAAP;AAEA,EAVmD;;AAYpDuO,OAAM,UAAW3N,KAAX,EAAkBgM,CAAlB,EAAsB;;AAE3B,OAAKyc,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,KAAKyoB,IAAL,CAAUozD,MAAlB,GAA2B,KAAK3qE,MAAhC,GAAyC,CAA1D,IAAgElF,CAAhE;;AAEA,SAAO,IAAP;AAEA,EAlBmD;;AAoBpDwU,OAAM,UAAWxgB,KAAX,EAAkB0T,CAAlB,EAAsB;;AAE3B,OAAK+U,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,KAAKyoB,IAAL,CAAUozD,MAAlB,GAA2B,KAAK3qE,MAAhC,GAAyC,CAA1D,IAAgEwC,CAAhE;;AAEA,SAAO,IAAP;AAEA,EA1BmD;;AA4BpDyT,OAAM,UAAWnnB,KAAX,EAAkBoO,CAAlB,EAAsB;;AAE3B,OAAKqa,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,KAAKyoB,IAAL,CAAUozD,MAAlB,GAA2B,KAAK3qE,MAAhC,GAAyC,CAA1D,IAAgE9C,CAAhE;;AAEA,SAAO,IAAP;AAEA,EAlCmD;;AAoCpDkD,OAAM,UAAWtR,KAAX,EAAmB;;AAExB,SAAO,KAAKyoB,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,KAAKyoB,IAAL,CAAUozD,MAAlB,GAA2B,KAAK3qE,MAAjD,CAAP;AAEA,EAxCmD;;AA0CpDK,OAAM,UAAWvR,KAAX,EAAmB;;AAExB,SAAO,KAAKyoB,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,KAAKyoB,IAAL,CAAUozD,MAAlB,GAA2B,KAAK3qE,MAAhC,GAAyC,CAA1D,CAAP;AAEA,EA9CmD;;AAgDpD0H,OAAM,UAAW5Y,KAAX,EAAmB;;AAExB,SAAO,KAAKyoB,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,KAAKyoB,IAAL,CAAUozD,MAAlB,GAA2B,KAAK3qE,MAAhC,GAAyC,CAA1D,CAAP;AAEA,EApDmD;;AAsDpDsW,OAAM,UAAWxnB,KAAX,EAAmB;;AAExB,SAAO,KAAKyoB,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,KAAKyoB,IAAL,CAAUozD,MAAlB,GAA2B,KAAK3qE,MAAhC,GAAyC,CAA1D,CAAP;AAEA,EA1DmD;;AA4DpD4gC,QAAO,UAAW9xC,KAAX,EAAkBZ,CAAlB,EAAqB4M,CAArB,EAAyB;;AAE/BhM,UAAQA,QAAQ,KAAKyoB,IAAL,CAAUozD,MAAlB,GAA2B,KAAK3qE,MAAxC;;AAEA,OAAKuX,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,CAAzB,IAA+BZ,CAA/B;AACA,OAAKqpB,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,CAAzB,IAA+BgM,CAA/B;;AAEA,SAAO,IAAP;AAEA,EArEmD;;AAuEpD8M,SAAQ,UAAW9Y,KAAX,EAAkBZ,CAAlB,EAAqB4M,CAArB,EAAwB0H,CAAxB,EAA4B;;AAEnC1T,UAAQA,QAAQ,KAAKyoB,IAAL,CAAUozD,MAAlB,GAA2B,KAAK3qE,MAAxC;;AAEA,OAAKuX,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,CAAzB,IAA+BZ,CAA/B;AACA,OAAKqpB,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,CAAzB,IAA+BgM,CAA/B;AACA,OAAKyc,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,CAAzB,IAA+B0T,CAA/B;;AAEA,SAAO,IAAP;AAEA,EAjFmD;;AAmFpDq+B,UAAS,UAAW/xC,KAAX,EAAkBZ,CAAlB,EAAqB4M,CAArB,EAAwB0H,CAAxB,EAA2BtF,CAA3B,EAA+B;;AAEvCpO,UAAQA,QAAQ,KAAKyoB,IAAL,CAAUozD,MAAlB,GAA2B,KAAK3qE,MAAxC;;AAEA,OAAKuX,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,CAAzB,IAA+BZ,CAA/B;AACA,OAAKqpB,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,CAAzB,IAA+BgM,CAA/B;AACA,OAAKyc,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,CAAzB,IAA+B0T,CAA/B;AACA,OAAK+U,IAAL,CAAUpnB,KAAV,CAAiBrB,QAAQ,CAAzB,IAA+BoO,CAA/B;;AAEA,SAAO,IAAP;AAEA;;AA9FmD,CAArD;;AAkGA;;;;AAIA,SAASikH,iBAAT,CAA4BhxH,KAA5B,EAAmCw6E,MAAnC,EAA4C;;AAE3C,MAAKx6E,KAAL,GAAaA,KAAb;AACA,MAAKw6E,MAAL,GAAcA,MAAd;AACA,MAAKljE,KAAL,GAAatX,UAAUzC,SAAV,GAAsByC,MAAMnB,MAAN,GAAe27E,MAArC,GAA8C,CAA3D;;AAEA,MAAK16C,OAAL,GAAe,KAAf;AACA,MAAKyB,WAAL,GAAmB,EAAE1xB,QAAQ,CAAV,EAAayH,OAAO,CAAE,CAAtB,EAAnB;;AAEA,MAAKwM,OAAL,GAAe,CAAf;AAEA;;AAED5lB,OAAOC,cAAP,CAAuB6yH,kBAAkB/yH,SAAzC,EAAoD,aAApD,EAAmE;;AAElEgO,MAAK,UAAWtO,KAAX,EAAmB;;AAEvB,MAAKA,UAAU,IAAf,EAAsB,KAAKmmB,OAAL;AAEtB;;AANiE,CAAnE;;AAUA5lB,OAAOK,MAAP,CAAeyyH,kBAAkB/yH,SAAjC,EAA4C;;AAE3CgzH,sBAAqB,IAFsB;;AAI3C7wF,mBAAkB,YAAY,CAAE,CAJW;;AAM3C0P,WAAU,UAAW9vC,KAAX,EAAmB;;AAE5B,MAAKi3B,MAAMC,OAAN,CAAel3B,KAAf,CAAL,EAA8B;;AAE7B,SAAM,IAAIvB,SAAJ,CAAe,uDAAf,CAAN;AAEA;;AAED,OAAK6Y,KAAL,GAAatX,UAAUzC,SAAV,GAAsByC,MAAMnB,MAAN,GAAe,KAAK27E,MAA1C,GAAmD,CAAhE;AACA,OAAKx6E,KAAL,GAAaA,KAAb;;AAEA,SAAO,IAAP;AAEA,EAnB0C;;AAqB3C+vC,aAAY,UAAWpyC,KAAX,EAAmB;;AAE9B,OAAKmiC,OAAL,GAAeniC,KAAf;;AAEA,SAAO,IAAP;AAEA,EA3B0C;;AA6B3CiP,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB,OAAKkB,KAAL,GAAa,IAAIlB,OAAOkB,KAAP,CAAa2M,WAAjB,CAA8B7N,OAAOkB,KAArC,CAAb;AACA,OAAKsX,KAAL,GAAaxY,OAAOwY,KAApB;AACA,OAAKkjE,MAAL,GAAc17E,OAAO07E,MAArB;AACA,OAAK16C,OAAL,GAAehhC,OAAOghC,OAAtB;;AAEA,SAAO,IAAP;AAEA,EAtC0C;;AAwC3CkQ,SAAQ,UAAWC,MAAX,EAAmBjgC,SAAnB,EAA8BkgC,MAA9B,EAAuC;;AAE9CD,YAAU,KAAKuqC,MAAf;AACAtqC,YAAUlgC,UAAUwqE,MAApB;;AAEA,OAAM,IAAIt6E,IAAI,CAAR,EAAWC,IAAI,KAAKq6E,MAA1B,EAAkCt6E,IAAIC,CAAtC,EAAyCD,GAAzC,EAAgD;;AAE/C,QAAKF,KAAL,CAAYiwC,SAAS/vC,CAArB,IAA2B8P,UAAUhQ,KAAV,CAAiBkwC,SAAShwC,CAA1B,CAA3B;AAEA;;AAED,SAAO,IAAP;AAEA,EArD0C;;AAuD3C+L,MAAK,UAAWtO,KAAX,EAAkBkS,MAAlB,EAA2B;;AAE/B,MAAKA,WAAWtS,SAAhB,EAA4BsS,SAAS,CAAT;;AAE5B,OAAK7P,KAAL,CAAWiM,GAAX,CAAgBtO,KAAhB,EAAuBkS,MAAvB;;AAEA,SAAO,IAAP;AAEA,EA/D0C;;AAiE3CnD,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EArE0C;;AAuE3C+jC,WAAU,UAAW1xB,QAAX,EAAsB;;AAE/B,OAAKmhB,gBAAL,GAAwBnhB,QAAxB;;AAEA,SAAO,IAAP;AAEA;;AA7E0C,CAA5C;;AAiFA;;;;AAIA,SAASiyG,0BAAT,CAAqClxH,KAArC,EAA4Cw6E,MAA5C,EAAoDnV,gBAApD,EAAuE;;AAEtE2rD,mBAAkB/xH,IAAlB,CAAwB,IAAxB,EAA8Be,KAA9B,EAAqCw6E,MAArC;;AAEA,MAAKnV,gBAAL,GAAwBA,oBAAoB,CAA5C;AAEA;;AAED6rD,2BAA2BjzH,SAA3B,GAAuCC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAegtG,kBAAkB/yH,SAAjC,CAAf,EAA6D;;AAEnG0O,cAAaukH,0BAFsF;;AAInGz2C,+BAA8B,IAJqE;;AAMnG7tE,OAAM,UAAW9N,MAAX,EAAoB;;AAEzBkyH,oBAAkB/yH,SAAlB,CAA4B2O,IAA5B,CAAiC3N,IAAjC,CAAuC,IAAvC,EAA6CH,MAA7C;;AAEA,OAAKumE,gBAAL,GAAwBvmE,OAAOumE,gBAA/B;;AAEA,SAAO,IAAP;AAEA;;AAdkG,CAA7D,CAAvC;;AAkBA;;;;AAIA,SAAS8rD,wBAAT,CAAmCnxH,KAAnC,EAA0C2vC,QAA1C,EAAoD01B,gBAApD,EAAuE;;AAEtE31B,iBAAgBzwC,IAAhB,CAAsB,IAAtB,EAA4Be,KAA5B,EAAmC2vC,QAAnC;;AAEA,MAAK01B,gBAAL,GAAwBA,oBAAoB,CAA5C;AAEA;;AAED8rD,yBAAyBlzH,SAAzB,GAAqCC,OAAOK,MAAP,CAAeL,OAAO8lB,MAAP,CAAe0rB,gBAAgBzxC,SAA/B,CAAf,EAA2D;;AAE/F0O,cAAawkH,wBAFkF;;AAI/Fz2C,6BAA4B,IAJmE;;AAM/F9tE,OAAM,UAAW9N,MAAX,EAAoB;;AAEzB4wC,kBAAgBzxC,SAAhB,CAA0B2O,IAA1B,CAA+B3N,IAA/B,CAAqC,IAArC,EAA2CH,MAA3C;;AAEA,OAAKumE,gBAAL,GAAwBvmE,OAAOumE,gBAA/B;;AAEA,SAAO,IAAP;AAEA;;AAd8F,CAA3D,CAArC;;AAkBA;;;;;;AAMA,SAAS+rD,SAAT,CAAoBz3E,MAApB,EAA4BhtB,SAA5B,EAAuClS,IAAvC,EAA6CC,GAA7C,EAAmD;;AAElD,MAAKk/B,GAAL,GAAW,IAAIF,GAAJ,CAASC,MAAT,EAAiBhtB,SAAjB,CAAX;AACA;;AAEA,MAAKlS,IAAL,GAAYA,QAAQ,CAApB;AACA,MAAKC,GAAL,GAAWA,OAAO6M,QAAlB;;AAEA,MAAKk8D,MAAL,GAAc;AACbnlC,QAAM,EADO;AAEbmkC,QAAM,EAFO;AAGb9B,OAAK,EAHQ;AAIb4C,UAAQ,EAAEC,WAAW,CAAb,EAJK;AAKblD,UAAQ;AALK,EAAd;;AAQApiF,QAAO8N,gBAAP,CAAyB,KAAKy3E,MAA9B,EAAsC;AACrC4tC,cAAY;AACXjzH,QAAK,YAAY;;AAEhB4O,YAAQC,IAAR,CAAc,uEAAd;AACA,WAAO,KAAKs2E,MAAZ;AAEA;AANU;AADyB,EAAtC;AAWA;;AAED,SAAS+tC,OAAT,CAAkBjkH,CAAlB,EAAqBC,CAArB,EAAyB;;AAExB,QAAOD,EAAEgiB,QAAF,GAAa/hB,EAAE+hB,QAAtB;AAEA;;AAED,SAASkiG,eAAT,CAA0B7oG,MAA1B,EAAkCm3B,SAAlC,EAA6CI,UAA7C,EAAyD7Y,SAAzD,EAAqE;;AAEpE,KAAK1e,OAAOkb,OAAP,KAAmB,KAAxB,EAAgC;;AAEhClb,QAAOsd,OAAP,CAAgB6Z,SAAhB,EAA2BI,UAA3B;;AAEA,KAAK7Y,cAAc,IAAnB,EAA0B;;AAEzB,MAAIhE,WAAW1a,OAAO0a,QAAtB;;AAEA,OAAM,IAAIljC,IAAI,CAAR,EAAWC,IAAIijC,SAASvkC,MAA9B,EAAsCqB,IAAIC,CAA1C,EAA6CD,GAA7C,EAAoD;;AAEnDqxH,mBAAiBnuF,SAAUljC,CAAV,CAAjB,EAAgC2/C,SAAhC,EAA2CI,UAA3C,EAAuD,IAAvD;AAEA;AAED;AAED;;AAED/hD,OAAOK,MAAP,CAAe6yH,UAAUnzH,SAAzB,EAAoC;;AAEnC4kF,gBAAe,CAFoB;;AAInC52E,MAAK,UAAW0tC,MAAX,EAAmBhtB,SAAnB,EAA+B;;AAEnC;;AAEA,OAAKitB,GAAL,CAAS3tC,GAAT,CAAc0tC,MAAd,EAAsBhtB,SAAtB;AAEA,EAVkC;;AAYnC6kG,gBAAe,UAAWC,MAAX,EAAmBxxG,MAAnB,EAA4B;;AAE1C,MAAOA,UAAUA,OAAO2vD,mBAAxB,EAAgD;;AAE/C,QAAKh2B,GAAL,CAASD,MAAT,CAAgBj4B,qBAAhB,CAAuCzB,OAAOE,WAA9C;AACA,QAAKy5B,GAAL,CAASjtB,SAAT,CAAmB1gB,GAAnB,CAAwBwlH,OAAO1zH,CAA/B,EAAkC0zH,OAAO9mH,CAAzC,EAA4C,GAA5C,EAAkDyV,SAAlD,CAA6DH,MAA7D,EAAsEzS,GAAtE,CAA2E,KAAKosC,GAAL,CAASD,MAApF,EAA6F7qC,SAA7F;AAEA,GALD,MAKO,IAAOmR,UAAUA,OAAO2nB,oBAAxB,EAAiD;;AAEvD,QAAKgS,GAAL,CAASD,MAAT,CAAgB1tC,GAAhB,CAAqBwlH,OAAO1zH,CAA5B,EAA+B0zH,OAAO9mH,CAAtC,EAAyC,CAAEsV,OAAOxF,IAAP,GAAcwF,OAAOvF,GAAvB,KAAiCuF,OAAOxF,IAAP,GAAcwF,OAAOvF,GAAtD,CAAzC,EAAuG0F,SAAvG,CAAkHH,MAAlH,EAFuD,CAEqE;AAC5H,QAAK25B,GAAL,CAASjtB,SAAT,CAAmB1gB,GAAnB,CAAwB,CAAxB,EAA2B,CAA3B,EAA8B,CAAE,CAAhC,EAAoCoU,kBAApC,CAAwDJ,OAAOE,WAA/D;AAEA,GALM,MAKA;;AAENnT,WAAQyD,KAAR,CAAe,2CAAf;AAEA;AAED,EA9BkC;;AAgCnC8gH,kBAAiB,UAAW7oG,MAAX,EAAmB0e,SAAnB,EAA8Bq1D,cAA9B,EAA+C;;AAE/D,MAAIx8C,aAAaw8C,kBAAkB,EAAnC;;AAEA80B,kBAAiB7oG,MAAjB,EAAyB,IAAzB,EAA+Bu3B,UAA/B,EAA2C7Y,SAA3C;;AAEA6Y,aAAWjS,IAAX,CAAiBsjF,OAAjB;;AAEA,SAAOrxE,UAAP;AAEA,EA1CkC;;AA4CnCyxE,mBAAkB,UAAWp7C,OAAX,EAAoBlvC,SAApB,EAA+Bq1D,cAA/B,EAAgD;;AAEjE,MAAIx8C,aAAaw8C,kBAAkB,EAAnC;;AAEA,MAAKxlE,MAAMC,OAAN,CAAeo/C,OAAf,MAA6B,KAAlC,EAA0C;;AAEzCtpE,WAAQC,IAAR,CAAc,4DAAd;AACA,UAAOgzC,UAAP;AAEA;;AAED,OAAM,IAAI//C,IAAI,CAAR,EAAWC,IAAIm2E,QAAQz3E,MAA7B,EAAqCqB,IAAIC,CAAzC,EAA4CD,GAA5C,EAAmD;;AAElDqxH,mBAAiBj7C,QAASp2E,CAAT,CAAjB,EAA+B,IAA/B,EAAqC+/C,UAArC,EAAiD7Y,SAAjD;AAEA;;AAED6Y,aAAWjS,IAAX,CAAiBsjF,OAAjB;;AAEA,SAAOrxE,UAAP;AAEA;;AAjEkC,CAApC;;AAqEA;;;;AAIA,SAAS0xE,KAAT,CAAgBC,SAAhB,EAA4B;;AAE3B,MAAKA,SAAL,GAAmBA,cAAcr0H,SAAhB,GAA8Bq0H,SAA9B,GAA0C,IAA3D;;AAEA,MAAK1mB,SAAL,GAAiB,CAAjB;AACA,MAAK2mB,OAAL,GAAe,CAAf;AACA,MAAKC,WAAL,GAAmB,CAAnB;;AAEA,MAAKC,OAAL,GAAe,KAAf;AAEA;;AAED7zH,OAAOK,MAAP,CAAeozH,MAAM1zH,SAArB,EAAgC;;AAE/B6uB,QAAO,YAAY;;AAElB,OAAKo+E,SAAL,GAAiB,CAAE,OAAO8mB,WAAP,KAAuB,WAAvB,GAAqCC,IAArC,GAA4CD,WAA9C,EAA4D7G,GAA5D,EAAjB,CAFkB,CAEkE;;AAEpF,OAAK0G,OAAL,GAAe,KAAK3mB,SAApB;AACA,OAAK4mB,WAAL,GAAmB,CAAnB;AACA,OAAKC,OAAL,GAAe,IAAf;AAEA,EAV8B;;AAY/BrnC,OAAM,YAAY;;AAEjB,OAAKwnC,cAAL;AACA,OAAKH,OAAL,GAAe,KAAf;AACA,OAAKH,SAAL,GAAiB,KAAjB;AAEA,EAlB8B;;AAoB/BM,iBAAgB,YAAY;;AAE3B,OAAKC,QAAL;AACA,SAAO,KAAKL,WAAZ;AAEA,EAzB8B;;AA2B/BK,WAAU,YAAY;;AAErB,MAAIvkF,OAAO,CAAX;;AAEA,MAAK,KAAKgkF,SAAL,IAAkB,CAAE,KAAKG,OAA9B,EAAwC;;AAEvC,QAAKjlG,KAAL;AACA,UAAO,CAAP;AAEA;;AAED,MAAK,KAAKilG,OAAV,EAAoB;;AAEnB,OAAIK,UAAU,CAAE,OAAOJ,WAAP,KAAuB,WAAvB,GAAqCC,IAArC,GAA4CD,WAA9C,EAA4D7G,GAA5D,EAAd;;AAEAv9E,UAAO,CAAEwkF,UAAU,KAAKP,OAAjB,IAA6B,IAApC;AACA,QAAKA,OAAL,GAAeO,OAAf;;AAEA,QAAKN,WAAL,IAAoBlkF,IAApB;AAEA;;AAED,SAAOA,IAAP;AAEA;;AAnD8B,CAAhC;;AAuDA;;;;;;;;;;AAUA,SAASykF,SAAT,CAAoB7wG,MAApB,EAA4BD,GAA5B,EAAiCzI,KAAjC,EAAyC;;AAExC,MAAK0I,MAAL,GAAgBA,WAAWjkB,SAAb,GAA2BikB,MAA3B,GAAoC,GAAlD;AACA,MAAKD,GAAL,GAAaA,QAAQhkB,SAAV,GAAwBgkB,GAAxB,GAA8B,CAAzC,CAHwC,CAGI;AAC5C,MAAKzI,KAAL,GAAeA,UAAUvb,SAAZ,GAA0Bub,KAA1B,GAAkC,CAA/C,CAJwC,CAIU;;AAElD,QAAO,IAAP;AAEA;;AAED5a,OAAOK,MAAP,CAAe8zH,UAAUp0H,SAAzB,EAAoC;;AAEnCgO,MAAK,UAAWuV,MAAX,EAAmBD,GAAnB,EAAwBzI,KAAxB,EAAgC;;AAEpC,OAAK0I,MAAL,GAAcA,MAAd;AACA,OAAKD,GAAL,GAAWA,GAAX;AACA,OAAKzI,KAAL,GAAaA,KAAb;;AAEA,SAAO,IAAP;AAEA,EAVkC;;AAYnCpM,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EAhBkC;;AAkBnCA,OAAM,UAAW0lH,KAAX,EAAmB;;AAExB,OAAK9wG,MAAL,GAAc8wG,MAAM9wG,MAApB;AACA,OAAKD,GAAL,GAAW+wG,MAAM/wG,GAAjB;AACA,OAAKzI,KAAL,GAAaw5G,MAAMx5G,KAAnB;;AAEA,SAAO,IAAP;AAEA,EA1BkC;;AA4BnC;AACAy5G,WAAU,YAAY;;AAErB,MAAI10G,MAAM,QAAV;AACA,OAAK0D,GAAL,GAAW/jB,KAAKyM,GAAL,CAAU4T,GAAV,EAAergB,KAAKwM,GAAL,CAAUxM,KAAK4L,EAAL,GAAUyU,GAApB,EAAyB,KAAK0D,GAA9B,CAAf,CAAX;;AAEA,SAAO,IAAP;AAEA,EApCkC;;AAsCnC6gB,iBAAgB,UAAWowF,IAAX,EAAkB;;AAEjC,OAAKhxG,MAAL,GAAcgxG,KAAK3zH,MAAL,EAAd;;AAEA,MAAK,KAAK2iB,MAAL,KAAgB,CAArB,EAAyB;;AAExB,QAAK1I,KAAL,GAAa,CAAb;AACA,QAAKyI,GAAL,GAAW,CAAX;AAEA,GALD,MAKO;;AAEN,QAAKzI,KAAL,GAAatb,KAAKwR,KAAL,CAAYwjH,KAAKz0H,CAAjB,EAAoBy0H,KAAKngH,CAAzB,CAAb,CAFM,CAEqC;AAC3C,QAAKkP,GAAL,GAAW/jB,KAAK2jB,IAAL,CAAWjY,MAAMa,KAAN,CAAayoH,KAAK7nH,CAAL,GAAS,KAAK6W,MAA3B,EAAmC,CAAE,CAArC,EAAwC,CAAxC,CAAX,CAAX,CAHM,CAG+D;AAErE;;AAED,SAAO,IAAP;AAEA;;AAxDkC,CAApC;;AA4DA;;;;;;;AAOA,SAASixG,WAAT,CAAsBjxG,MAAtB,EAA8B1I,KAA9B,EAAqCnO,CAArC,EAAyC;;AAExC,MAAK6W,MAAL,GAAgBA,WAAWjkB,SAAb,GAA2BikB,MAA3B,GAAoC,GAAlD,CAFwC,CAEe;AACvD,MAAK1I,KAAL,GAAeA,UAAUvb,SAAZ,GAA0Bub,KAA1B,GAAkC,CAA/C,CAHwC,CAGU;AAClD,MAAKnO,CAAL,GAAWA,MAAMpN,SAAR,GAAsBoN,CAAtB,GAA0B,CAAnC,CAJwC,CAIF;;AAEtC,QAAO,IAAP;AAEA;;AAEDzM,OAAOK,MAAP,CAAek0H,YAAYx0H,SAA3B,EAAsC;;AAErCgO,MAAK,UAAWuV,MAAX,EAAmB1I,KAAnB,EAA0BnO,CAA1B,EAA8B;;AAElC,OAAK6W,MAAL,GAAcA,MAAd;AACA,OAAK1I,KAAL,GAAaA,KAAb;AACA,OAAKnO,CAAL,GAASA,CAAT;;AAEA,SAAO,IAAP;AAEA,EAVoC;;AAYrC+B,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EAhBoC;;AAkBrCA,OAAM,UAAW0lH,KAAX,EAAmB;;AAExB,OAAK9wG,MAAL,GAAc8wG,MAAM9wG,MAApB;AACA,OAAK1I,KAAL,GAAaw5G,MAAMx5G,KAAnB;AACA,OAAKnO,CAAL,GAAS2nH,MAAM3nH,CAAf;;AAEA,SAAO,IAAP;AAEA,EA1BoC;;AA4BrCy3B,iBAAgB,UAAWowF,IAAX,EAAkB;;AAEjC,OAAKhxG,MAAL,GAAchkB,KAAKmR,IAAL,CAAW6jH,KAAKz0H,CAAL,GAASy0H,KAAKz0H,CAAd,GAAkBy0H,KAAKngH,CAAL,GAASmgH,KAAKngH,CAA3C,CAAd;AACA,OAAKyG,KAAL,GAAatb,KAAKwR,KAAL,CAAYwjH,KAAKz0H,CAAjB,EAAoBy0H,KAAKngH,CAAzB,CAAb;AACA,OAAK1H,CAAL,GAAS6nH,KAAK7nH,CAAd;;AAEA,SAAO,IAAP;AAEA;;AApCoC,CAAtC;;AAwCA;;;;AAIA,SAAS+nH,IAAT,CAAe1oH,GAAf,EAAoBC,GAApB,EAA0B;;AAEzB,MAAKD,GAAL,GAAaA,QAAQzM,SAAV,GAAwByM,GAAxB,GAA8B,IAAI+B,OAAJ,CAAa,CAAEwb,QAAf,EAAyB,CAAEA,QAA3B,CAAzC;AACA,MAAKtd,GAAL,GAAaA,QAAQ1M,SAAV,GAAwB0M,GAAxB,GAA8B,IAAI8B,OAAJ,CAAa,CAAEwb,QAAf,EAAyB,CAAEA,QAA3B,CAAzC;AAEA;;AAEDrpB,OAAOK,MAAP,CAAem0H,KAAKz0H,SAApB,EAA+B;;AAE9BgO,MAAK,UAAWjC,GAAX,EAAgBC,GAAhB,EAAsB;;AAE1B,OAAKD,GAAL,CAAS4C,IAAT,CAAe5C,GAAf;AACA,OAAKC,GAAL,CAAS2C,IAAT,CAAe3C,GAAf;;AAEA,SAAO,IAAP;AAEA,EAT6B;;AAW9Bge,gBAAe,UAAWC,MAAX,EAAoB;;AAElC,OAAKC,SAAL;;AAEA,OAAM,IAAIjoB,IAAI,CAAR,EAAWkoB,KAAKF,OAAOrpB,MAA7B,EAAqCqB,IAAIkoB,EAAzC,EAA6CloB,GAA7C,EAAoD;;AAEnD,QAAKmoB,aAAL,CAAoBH,OAAQhoB,CAAR,CAApB;AAEA;;AAED,SAAO,IAAP;AAEA,EAvB6B;;AAyB9BooB,uBAAsB,YAAY;;AAEjC,MAAI7Y,KAAK,IAAI1D,OAAJ,EAAT;;AAEA,SAAO,SAASuc,oBAAT,CAA+BlY,MAA/B,EAAuCmY,IAAvC,EAA8C;;AAEpD,OAAIC,WAAW/Y,GAAG7C,IAAH,CAAS2b,IAAT,EAAgB3a,cAAhB,CAAgC,GAAhC,CAAf;AACA,QAAK5D,GAAL,CAAS4C,IAAT,CAAewD,MAAf,EAAwB5C,GAAxB,CAA6Bgb,QAA7B;AACA,QAAKve,GAAL,CAAS2C,IAAT,CAAewD,MAAf,EAAwBtD,GAAxB,CAA6B0b,QAA7B;;AAEA,UAAO,IAAP;AAEA,GARD;AAUA,EAdqB,EAzBQ;;AAyC9B9b,QAAO,YAAY;;AAElB,SAAO,IAAI,KAAKC,WAAT,GAAuBC,IAAvB,CAA6B,IAA7B,CAAP;AAEA,EA7C6B;;AA+C9BA,OAAM,UAAWgc,GAAX,EAAiB;;AAEtB,OAAK5e,GAAL,CAAS4C,IAAT,CAAegc,IAAI5e,GAAnB;AACA,OAAKC,GAAL,CAAS2C,IAAT,CAAegc,IAAI3e,GAAnB;;AAEA,SAAO,IAAP;AAEA,EAtD6B;;AAwD9Bke,YAAW,YAAY;;AAEtB,OAAKne,GAAL,CAASjM,CAAT,GAAa,KAAKiM,GAAL,CAASW,CAAT,GAAa,CAAE4c,QAA5B;AACA,OAAKtd,GAAL,CAASlM,CAAT,GAAa,KAAKkM,GAAL,CAASU,CAAT,GAAa,CAAE4c,QAA5B;;AAEA,SAAO,IAAP;AAEA,EA/D6B;;AAiE9BsB,UAAS,YAAY;;AAEpB;;AAEA,SAAS,KAAK5e,GAAL,CAASlM,CAAT,GAAa,KAAKiM,GAAL,CAASjM,CAAxB,IAAiC,KAAKkM,GAAL,CAASU,CAAT,GAAa,KAAKX,GAAL,CAASW,CAA9D;AAEA,EAvE6B;;AAyE9Bme,YAAW,UAAWtqB,MAAX,EAAoB;;AAE9B,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,iDAAd;AACAzO,YAAS,IAAIuN,OAAJ,EAAT;AAEA;;AAED,SAAO,KAAK8c,OAAL,KAAiBrqB,OAAOyN,GAAP,CAAY,CAAZ,EAAe,CAAf,CAAjB,GAAsCzN,OAAO0O,UAAP,CAAmB,KAAKlD,GAAxB,EAA6B,KAAKC,GAAlC,EAAwC2D,cAAxC,CAAwD,GAAxD,CAA7C;AAEA,EApF6B;;AAsF9Bmb,UAAS,UAAWvqB,MAAX,EAAoB;;AAE5B,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,+CAAd;AACAzO,YAAS,IAAIuN,OAAJ,EAAT;AAEA;;AAED,SAAO,KAAK8c,OAAL,KAAiBrqB,OAAOyN,GAAP,CAAY,CAAZ,EAAe,CAAf,CAAjB,GAAsCzN,OAAOiP,UAAP,CAAmB,KAAKxD,GAAxB,EAA6B,KAAKD,GAAlC,CAA7C;AAEA,EAjG6B;;AAmG9Bqe,gBAAe,UAAWW,KAAX,EAAmB;;AAEjC,OAAKhf,GAAL,CAASA,GAAT,CAAcgf,KAAd;AACA,OAAK/e,GAAL,CAASA,GAAT,CAAc+e,KAAd;;AAEA,SAAO,IAAP;AAEA,EA1G6B;;AA4G9BC,iBAAgB,UAAWtP,MAAX,EAAoB;;AAEnC,OAAK3P,GAAL,CAASwD,GAAT,CAAcmM,MAAd;AACA,OAAK1P,GAAL,CAAS6C,GAAT,CAAc6M,MAAd;;AAEA,SAAO,IAAP;AAEA,EAnH6B;;AAqH9BuP,iBAAgB,UAAW9c,MAAX,EAAoB;;AAEnC,OAAKpC,GAAL,CAASmD,SAAT,CAAoB,CAAEf,MAAtB;AACA,OAAKnC,GAAL,CAASkD,SAAT,CAAoBf,MAApB;;AAEA,SAAO,IAAP;AAEA,EA5H6B;;AA8H9Bwd,gBAAe,UAAWZ,KAAX,EAAmB;;AAEjC,SAAOA,MAAMjrB,CAAN,GAAU,KAAKiM,GAAL,CAASjM,CAAnB,IAAwBirB,MAAMjrB,CAAN,GAAU,KAAKkM,GAAL,CAASlM,CAA3C,IACNirB,MAAMre,CAAN,GAAU,KAAKX,GAAL,CAASW,CADb,IACkBqe,MAAMre,CAAN,GAAU,KAAKV,GAAL,CAASU,CADrC,GACyC,KADzC,GACiD,IADxD;AAGA,EAnI6B;;AAqI9Bkf,cAAa,UAAWjB,GAAX,EAAiB;;AAE7B,SAAO,KAAK5e,GAAL,CAASjM,CAAT,IAAc6qB,IAAI5e,GAAJ,CAAQjM,CAAtB,IAA2B6qB,IAAI3e,GAAJ,CAAQlM,CAAR,IAAa,KAAKkM,GAAL,CAASlM,CAAjD,IACN,KAAKiM,GAAL,CAASW,CAAT,IAAcie,IAAI5e,GAAJ,CAAQW,CADhB,IACqBie,IAAI3e,GAAJ,CAAQU,CAAR,IAAa,KAAKV,GAAL,CAASU,CADlD;AAGA,EA1I6B;;AA4I9Bmf,eAAc,UAAWd,KAAX,EAAkBxqB,MAAlB,EAA2B;;AAExC;AACA;;AAEA,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,oDAAd;AACAzO,YAAS,IAAIuN,OAAJ,EAAT;AAEA;;AAED,SAAOvN,OAAOyN,GAAP,CACN,CAAE+c,MAAMjrB,CAAN,GAAU,KAAKiM,GAAL,CAASjM,CAArB,KAA6B,KAAKkM,GAAL,CAASlM,CAAT,GAAa,KAAKiM,GAAL,CAASjM,CAAnD,CADM,EAEN,CAAEirB,MAAMre,CAAN,GAAU,KAAKX,GAAL,CAASW,CAArB,KAA6B,KAAKV,GAAL,CAASU,CAAT,GAAa,KAAKX,GAAL,CAASW,CAAnD,CAFM,CAAP;AAKA,EA7J6B;;AA+J9Bof,gBAAe,UAAWnB,GAAX,EAAiB;;AAE/B;;AAEA,SAAOA,IAAI3e,GAAJ,CAAQlM,CAAR,GAAY,KAAKiM,GAAL,CAASjM,CAArB,IAA0B6qB,IAAI5e,GAAJ,CAAQjM,CAAR,GAAY,KAAKkM,GAAL,CAASlM,CAA/C,IACN6qB,IAAI3e,GAAJ,CAAQU,CAAR,GAAY,KAAKX,GAAL,CAASW,CADf,IACoBie,IAAI5e,GAAJ,CAAQW,CAAR,GAAY,KAAKV,GAAL,CAASU,CADzC,GAC6C,KAD7C,GACqD,IAD5D;AAGA,EAtK6B;;AAwK9Bwf,aAAY,UAAWnB,KAAX,EAAkBxqB,MAAlB,EAA2B;;AAEtC,MAAKA,WAAWjB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,kDAAd;AACAzO,YAAS,IAAIuN,OAAJ,EAAT;AAEA;;AAED,SAAOvN,OAAOoO,IAAP,CAAaoc,KAAb,EAAqBjf,KAArB,CAA4B,KAAKC,GAAjC,EAAsC,KAAKC,GAA3C,CAAP;AAEA,EAnL6B;;AAqL9BqhB,kBAAiB,YAAY;;AAE5B,MAAI7b,KAAK,IAAI1D,OAAJ,EAAT;;AAEA,SAAO,SAASuf,eAAT,CAA0BtC,KAA1B,EAAkC;;AAExC,OAAIuC,eAAe9b,GAAG7C,IAAH,CAASoc,KAAT,EAAiBjf,KAAjB,CAAwB,KAAKC,GAA7B,EAAkC,KAAKC,GAAvC,CAAnB;AACA,UAAOshB,aAAa/d,GAAb,CAAkBwb,KAAlB,EAA0BnqB,MAA1B,EAAP;AAEA,GALD;AAOA,EAXgB,EArLa;;AAkM9B6sB,YAAW,UAAW9C,GAAX,EAAiB;;AAE3B,OAAK5e,GAAL,CAASC,GAAT,CAAc2e,IAAI5e,GAAlB;AACA,OAAKC,GAAL,CAASD,GAAT,CAAc4e,IAAI3e,GAAlB;;AAEA,SAAO,IAAP;AAEA,EAzM6B;;AA2M9B0hB,QAAO,UAAW/C,GAAX,EAAiB;;AAEvB,OAAK5e,GAAL,CAASA,GAAT,CAAc4e,IAAI5e,GAAlB;AACA,OAAKC,GAAL,CAASA,GAAT,CAAc2e,IAAI3e,GAAlB;;AAEA,SAAO,IAAP;AAEA,EAlN6B;;AAoN9BuY,YAAW,UAAW3S,MAAX,EAAoB;;AAE9B,OAAK7F,GAAL,CAAS8C,GAAT,CAAc+C,MAAd;AACA,OAAK5F,GAAL,CAAS6C,GAAT,CAAc+C,MAAd;;AAEA,SAAO,IAAP;AAEA,EA3N6B;;AA6N9BF,SAAQ,UAAWiZ,GAAX,EAAiB;;AAExB,SAAOA,IAAI5e,GAAJ,CAAQ2F,MAAR,CAAgB,KAAK3F,GAArB,KAA8B4e,IAAI3e,GAAJ,CAAQ0F,MAAR,CAAgB,KAAK1F,GAArB,CAArC;AAEA;;AAjO6B,CAA/B;;AAqOA;;;;AAIA,SAAS0oH,qBAAT,CAAgC7rF,QAAhC,EAA2C;;AAE1C5D,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAK6nC,QAAL,GAAgBA,QAAhB;AACA,MAAKsa,MAAL,GAAc,YAAW,oBAAuB,CAAE,CAAlD;AAEA;;AAEDuxE,sBAAsB10H,SAAtB,GAAkCC,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAlC;AACA00H,sBAAsB10H,SAAtB,CAAgC0O,WAAhC,GAA8CgmH,qBAA9C;;AAEAA,sBAAsB10H,SAAtB,CAAgC+9E,uBAAhC,GAA0D,IAA1D;;AAEA;;;;;AAKA,SAAS42C,mBAAT,CAA8BlqG,MAA9B,EAAsCH,IAAtC,EAA4CiP,GAA5C,EAAiD0gB,SAAjD,EAA6D;;AAE5D,MAAKxvB,MAAL,GAAcA,MAAd;;AAEA,MAAKH,IAAL,GAAcA,SAAShrB,SAAX,GAAyBgrB,IAAzB,GAAgC,CAA5C;;AAEA,KAAIyP,QAAUR,QAAQj6B,SAAV,GAAwBi6B,GAAxB,GAA8B,QAA1C;;AAEA,KAAI5S,QAAUszB,cAAc36C,SAAhB,GAA8B26C,SAA9B,GAA0C,CAAtD;;AAEA;;AAEA,KAAI26E,WAAW,CAAf;;AAEA,KAAIC,cAAc,KAAKpqG,MAAL,CAAYY,QAA9B;;AAEA,KAAKwpG,eAAeA,YAAYvpG,UAAhC,EAA6C;;AAE5CspG,aAAWC,YAAY/pF,KAAZ,CAAkBlqC,MAAlB,GAA2B,CAAtC;AAEA,EAJD,MAIO,IAAKi0H,eAAeA,YAAYrpG,gBAAhC,EAAmD;;AAEzDopG,aAAWC,YAAYppG,UAAZ,CAAuBzI,MAAvB,CAA8B3J,KAAzC;AAEA;;AAED;;AAEA,KAAIgS,WAAW,IAAI6oB,cAAJ,EAAf;;AAEA,KAAI9H,YAAY,IAAI+G,sBAAJ,CAA4ByhF,WAAW,CAAX,GAAe,CAA3C,EAA8C,CAA9C,CAAhB;;AAEAvpG,UAASkpB,YAAT,CAAuB,UAAvB,EAAmCnI,SAAnC;;AAEAq4C,cAAazjF,IAAb,CAAmB,IAAnB,EAAyBqqB,QAAzB,EAAmC,IAAI+rC,iBAAJ,CAAuB,EAAEr9B,OAAOA,KAAT,EAAgBkgB,WAAWtzB,KAA3B,EAAvB,CAAnC;;AAEA;;AAEA,MAAKnB,gBAAL,GAAwB,KAAxB;;AAEA,MAAKjH,MAAL;AAEA;;AAEDo2G,oBAAoB30H,SAApB,GAAgCC,OAAO8lB,MAAP,CAAe0+D,aAAazkF,SAA5B,CAAhC;AACA20H,oBAAoB30H,SAApB,CAA8B0O,WAA9B,GAA4CimH,mBAA5C;;AAEAA,oBAAoB30H,SAApB,CAA8Bue,MAA9B,GAAyC,YAAY;;AAEpD,KAAI/M,KAAK,IAAI8C,OAAJ,EAAT;AACA,KAAI7C,KAAK,IAAI6C,OAAJ,EAAT;AACA,KAAI+a,eAAe,IAAI1L,OAAJ,EAAnB;;AAEA,QAAO,SAASpF,MAAT,GAAkB;;AAExB,MAAIqiC,OAAO,CAAE,GAAF,EAAO,GAAP,EAAY,GAAZ,CAAX;;AAEA,OAAKn2B,MAAL,CAAYiB,iBAAZ,CAA+B,IAA/B;;AAEA2D,eAAatL,eAAb,CAA8B,KAAK0G,MAAL,CAAYvI,WAA1C;;AAEA,MAAIA,cAAc,KAAKuI,MAAL,CAAYvI,WAA9B;;AAEA,MAAI3G,WAAW,KAAK8P,QAAL,CAAcI,UAAd,CAAyBlQ,QAAxC;;AAEA;;AAEA,MAAIs5G,cAAc,KAAKpqG,MAAL,CAAYY,QAA9B;;AAEA,MAAKwpG,eAAeA,YAAYvpG,UAAhC,EAA6C;;AAE5C,OAAIC,WAAWspG,YAAYtpG,QAA3B;;AAEA,OAAIuf,QAAQ+pF,YAAY/pF,KAAxB;;AAEA,OAAI4E,MAAM,CAAV;;AAEA,QAAM,IAAIztC,IAAI,CAAR,EAAWC,IAAI4oC,MAAMlqC,MAA3B,EAAmCqB,IAAIC,CAAvC,EAA0CD,GAA1C,EAAiD;;AAEhD,QAAI6pC,OAAOhB,MAAO7oC,CAAP,CAAX;;AAEA,SAAM,IAAI+qB,IAAI,CAAR,EAAW+e,KAAKD,KAAKrB,aAAL,CAAmB7pC,MAAzC,EAAiDosB,IAAI+e,EAArD,EAAyD/e,GAAzD,EAAgE;;AAE/D,SAAI6e,SAAStgB,SAAUugB,KAAM8U,KAAM5zB,CAAN,CAAN,CAAV,CAAb;;AAEA,SAAIhK,SAAS8oB,KAAKrB,aAAL,CAAoBzd,CAApB,CAAb;;AAEAxb,QAAG7C,IAAH,CAASk9B,MAAT,EAAkBtyB,YAAlB,CAAgC2I,WAAhC;;AAEAzQ,QAAG9C,IAAH,CAASqU,MAAT,EAAkBlT,YAAlB,CAAgCuf,YAAhC,EAA+Cxe,SAA/C,GAA2DlB,cAA3D,CAA2E,KAAK2a,IAAhF,EAAuFzb,GAAvF,CAA4F2C,EAA5F;;AAEA+J,cAAS/B,MAAT,CAAiBk2B,GAAjB,EAAsBl+B,GAAG1R,CAAzB,EAA4B0R,GAAG9E,CAA/B,EAAkC8E,GAAG4C,CAArC;;AAEAs7B,WAAMA,MAAM,CAAZ;;AAEAn0B,cAAS/B,MAAT,CAAiBk2B,GAAjB,EAAsBj+B,GAAG3R,CAAzB,EAA4B2R,GAAG/E,CAA/B,EAAkC+E,GAAG2C,CAArC;;AAEAs7B,WAAMA,MAAM,CAAZ;AAEA;AAED;AAED,GAlCD,MAkCO,IAAKmlF,eAAeA,YAAYrpG,gBAAhC,EAAmD;;AAEzD,OAAIspG,SAASD,YAAYppG,UAAZ,CAAuBlQ,QAApC;;AAEA,OAAIw5G,UAAUF,YAAYppG,UAAZ,CAAuBzI,MAArC;;AAEA,OAAI0sB,MAAM,CAAV;;AAEA;;AAEA,QAAM,IAAI1iB,IAAI,CAAR,EAAW+e,KAAK+oF,OAAOz7G,KAA7B,EAAoC2T,IAAI+e,EAAxC,EAA4C/e,GAA5C,EAAmD;;AAElDxb,OAAGxD,GAAH,CAAQ8mH,OAAO9iH,IAAP,CAAagb,CAAb,CAAR,EAA0B8nG,OAAO7iH,IAAP,CAAa+a,CAAb,CAA1B,EAA4C8nG,OAAOx7G,IAAP,CAAa0T,CAAb,CAA5C,EAA+DzT,YAA/D,CAA6E2I,WAA7E;;AAEAzQ,OAAGzD,GAAH,CAAQ+mH,QAAQ/iH,IAAR,CAAcgb,CAAd,CAAR,EAA2B+nG,QAAQ9iH,IAAR,CAAc+a,CAAd,CAA3B,EAA8C+nG,QAAQz7G,IAAR,CAAc0T,CAAd,CAA9C;;AAEAvb,OAAG3B,YAAH,CAAiBuf,YAAjB,EAAgCxe,SAAhC,GAA4ClB,cAA5C,CAA4D,KAAK2a,IAAjE,EAAwEzb,GAAxE,CAA6E2C,EAA7E;;AAEA+J,aAAS/B,MAAT,CAAiBk2B,GAAjB,EAAsBl+B,GAAG1R,CAAzB,EAA4B0R,GAAG9E,CAA/B,EAAkC8E,GAAG4C,CAArC;;AAEAs7B,UAAMA,MAAM,CAAZ;;AAEAn0B,aAAS/B,MAAT,CAAiBk2B,GAAjB,EAAsBj+B,GAAG3R,CAAzB,EAA4B2R,GAAG/E,CAA/B,EAAkC+E,GAAG2C,CAArC;;AAEAs7B,UAAMA,MAAM,CAAZ;AAEA;AAED;;AAEDn0B,WAASs5B,WAAT,GAAuB,IAAvB;AAEA,EAlFD;AAoFA,CA1FwC,EAAzC;;AA4FA;;;;;;AAMA,SAASmgF,eAAT,CAA0B36D,KAA1B,EAAiCtgC,KAAjC,EAAyC;;AAExCkL,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKq5D,KAAL,GAAaA,KAAb;AACA,MAAKA,KAAL,CAAW3uC,iBAAX;;AAEA,MAAK/P,MAAL,GAAc0+C,MAAMn4C,WAApB;AACA,MAAKsD,gBAAL,GAAwB,KAAxB;;AAEA,MAAKuU,KAAL,GAAaA,KAAb;;AAEA,KAAI1O,WAAW,IAAI6oB,cAAJ,EAAf;;AAEA,KAAI9H,YAAY,CACf,CADe,EACZ,CADY,EACT,CADS,EACL,CADK,EACF,CADE,EACC,CADD,EAEf,CAFe,EAEZ,CAFY,EAET,CAFS,EAEL,CAFK,EAEF,CAFE,EAEC,CAFD,EAGf,CAHe,EAGZ,CAHY,EAGT,CAHS,EAGN,CAAE,CAHI,EAGD,CAHC,EAGE,CAHF,EAIf,CAJe,EAIZ,CAJY,EAIT,CAJS,EAIL,CAJK,EAIF,CAJE,EAIC,CAJD,EAKf,CALe,EAKZ,CALY,EAKT,CALS,EAKL,CALK,EAKF,CAAE,CALA,EAKG,CALH,CAAhB;;AAQA,MAAM,IAAInqC,IAAI,CAAR,EAAW+qB,IAAI,CAAf,EAAkB9qB,IAAI,EAA5B,EAAgCD,IAAIC,CAApC,EAAuCD,KAAM+qB,GAA7C,EAAoD;;AAEnD,MAAIE,KAAOjrB,IAAIC,CAAN,GAAY3C,KAAK4L,EAAjB,GAAsB,CAA/B;AACA,MAAIgiB,KAAOH,IAAI9qB,CAAN,GAAY3C,KAAK4L,EAAjB,GAAsB,CAA/B;;AAEAihC,YAAU5qC,IAAV,CACCjC,KAAK8S,GAAL,CAAU6a,EAAV,CADD,EACiB3tB,KAAK+S,GAAL,CAAU4a,EAAV,CADjB,EACiC,CADjC,EAEC3tB,KAAK8S,GAAL,CAAU8a,EAAV,CAFD,EAEiB5tB,KAAK+S,GAAL,CAAU6a,EAAV,CAFjB,EAEiC,CAFjC;AAKA;;AAED9B,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAIpB,sBAAJ,CAA4B/G,SAA5B,EAAuC,CAAvC,CAAnC;;AAEA,KAAIvD,WAAW,IAAIuuB,iBAAJ,CAAuB,EAAEz5B,KAAK,KAAP,EAAvB,CAAf;;AAEA,MAAKs3F,IAAL,GAAY,IAAIxwC,YAAJ,CAAkBp5D,QAAlB,EAA4Bwd,QAA5B,CAAZ;AACA,MAAKh6B,GAAL,CAAU,KAAKomH,IAAf;;AAEA,MAAK12G,MAAL;AAEA;;AAEDy2G,gBAAgBh1H,SAAhB,GAA4BC,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAA5B;AACAg1H,gBAAgBh1H,SAAhB,CAA0B0O,WAA1B,GAAwCsmH,eAAxC;;AAEAA,gBAAgBh1H,SAAhB,CAA0BwnB,OAA1B,GAAoC,YAAY;;AAE/C,MAAKytG,IAAL,CAAU5pG,QAAV,CAAmB7D,OAAnB;AACA,MAAKytG,IAAL,CAAUpsF,QAAV,CAAmBrhB,OAAnB;AAEA,CALD;;AAOAwtG,gBAAgBh1H,SAAhB,CAA0Bue,MAA1B,GAAmC,YAAY;;AAE9C,KAAI7C,SAAS,IAAIpH,OAAJ,EAAb;AACA,KAAImgF,UAAU,IAAIngF,OAAJ,EAAd;;AAEA,QAAO,SAASiK,MAAT,GAAkB;;AAExB,OAAK87C,KAAL,CAAW3uC,iBAAX;;AAEA,MAAIwpG,aAAa,KAAK76D,KAAL,CAAWjpC,QAAX,GAAsB,KAAKipC,KAAL,CAAWjpC,QAAjC,GAA4C,IAA7D;AACA,MAAI+jG,YAAYD,aAAa31H,KAAK2yE,GAAL,CAAU,KAAK7X,KAAL,CAAWvpD,KAArB,CAA7B;;AAEA,OAAKmkH,IAAL,CAAU36G,KAAV,CAAgBtM,GAAhB,CAAqBmnH,SAArB,EAAgCA,SAAhC,EAA2CD,UAA3C;;AAEAx5G,SAAO+H,qBAAP,CAA8B,KAAK42C,KAAL,CAAWn4C,WAAzC;AACAuyE,UAAQhxE,qBAAR,CAA+B,KAAK42C,KAAL,CAAW95D,MAAX,CAAkB2hB,WAAjD;;AAEA,OAAK+yG,IAAL,CAAUn+G,MAAV,CAAkB29E,QAAQllF,GAAR,CAAamM,MAAb,CAAlB;;AAEA,MAAK,KAAKqe,KAAL,KAAez6B,SAApB,EAAgC;;AAE/B,QAAK21H,IAAL,CAAUpsF,QAAV,CAAmB9O,KAAnB,CAAyB/rB,GAAzB,CAA8B,KAAK+rB,KAAnC;AAEA,GAJD,MAIO;;AAEN,QAAKk7F,IAAL,CAAUpsF,QAAV,CAAmB9O,KAAnB,CAAyBprB,IAAzB,CAA+B,KAAK0rD,KAAL,CAAWtgC,KAA1C;AAEA;AAED,EAxBD;AA0BA,CA/BkC,EAAnC;;AAiCA;;;;;;;;AAQA,SAASq7F,WAAT,CAAsB3qG,MAAtB,EAA+B;;AAE9B,KAAI4qG,WAAW,EAAf;;AAEA,KAAK5qG,UAAUA,OAAO04D,MAAtB,EAA+B;;AAE9BkyC,WAAS7zH,IAAT,CAAeipB,MAAf;AAEA;;AAED,MAAM,IAAIxoB,IAAI,CAAd,EAAiBA,IAAIwoB,OAAO0a,QAAP,CAAgBvkC,MAArC,EAA6CqB,GAA7C,EAAoD;;AAEnDozH,WAAS7zH,IAAT,CAAcgoE,KAAd,CAAqB6rD,QAArB,EAA+BD,YAAa3qG,OAAO0a,QAAP,CAAiBljC,CAAjB,CAAb,CAA/B;AAEA;;AAED,QAAOozH,QAAP;AAEA;;AAED,SAASC,cAAT,CAAyB7qG,MAAzB,EAAkC;;AAEjC,KAAIktC,QAAQy9D,YAAa3qG,MAAb,CAAZ;;AAEA,KAAIY,WAAW,IAAI6oB,cAAJ,EAAf;;AAEA,KAAI3oB,WAAW,EAAf;AACA,KAAIsf,SAAS,EAAb;;AAEA,KAAI1P,SAAS,IAAIhC,KAAJ,CAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,CAAb;AACA,KAAIiC,SAAS,IAAIjC,KAAJ,CAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,CAAb;;AAEA,MAAM,IAAIl3B,IAAI,CAAd,EAAiBA,IAAI01D,MAAM/2D,MAA3B,EAAmCqB,GAAnC,EAA0C;;AAEzC,MAAIihF,OAAOvrB,MAAO11D,CAAP,CAAX;;AAEA,MAAKihF,KAAKh+C,MAAL,IAAeg+C,KAAKh+C,MAAL,CAAYi+C,MAAhC,EAAyC;;AAExC53D,YAAS/pB,IAAT,CAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB;AACA+pB,YAAS/pB,IAAT,CAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB;AACAqpC,UAAOrpC,IAAP,CAAa25B,OAAOxb,CAApB,EAAuBwb,OAAOrX,CAA9B,EAAiCqX,OAAO9rB,CAAxC;AACAw7B,UAAOrpC,IAAP,CAAa45B,OAAOzb,CAApB,EAAuByb,OAAOtX,CAA9B,EAAiCsX,OAAO/rB,CAAxC;AAEA;AAED;;AAEDgc,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAAnC;AACAF,UAASkpB,YAAT,CAAuB,OAAvB,EAAgC,IAAIpB,sBAAJ,CAA4BtI,MAA5B,EAAoC,CAApC,CAAhC;;AAEA,KAAIhC,WAAW,IAAIuuB,iBAAJ,CAAuB,EAAE1sB,cAAclnC,YAAhB,EAA8Bm1C,WAAW,KAAzC,EAAgDC,YAAY,KAA5D,EAAmET,aAAa,IAAhF,EAAvB,CAAf;;AAEAssC,cAAazjF,IAAb,CAAmB,IAAnB,EAAyBqqB,QAAzB,EAAmCwd,QAAnC;;AAEA,MAAKi7E,IAAL,GAAYr5F,MAAZ;AACA,MAAKktC,KAAL,GAAaA,KAAb;;AAEA,MAAKh8C,MAAL,GAAc8O,OAAOvI,WAArB;AACA,MAAKsD,gBAAL,GAAwB,KAAxB;AAEA;;AAED8vG,eAAet1H,SAAf,GAA2BC,OAAO8lB,MAAP,CAAe0+D,aAAazkF,SAA5B,CAA3B;AACAs1H,eAAet1H,SAAf,CAAyB0O,WAAzB,GAAuC4mH,cAAvC;;AAEAA,eAAet1H,SAAf,CAAyB0rB,iBAAzB,GAA6C,YAAY;;AAExD,KAAIhQ,SAAS,IAAIpH,OAAJ,EAAb;;AAEA,KAAIihH,aAAa,IAAIhjH,OAAJ,EAAjB;AACA,KAAIijH,iBAAiB,IAAIjjH,OAAJ,EAArB;;AAEA,QAAO,SAASmZ,iBAAT,CAA4Bwc,KAA5B,EAAoC;;AAE1C,MAAIyvB,QAAQ,KAAKA,KAAjB;;AAEA,MAAItsC,WAAW,KAAKA,QAApB;AACA,MAAI9P,WAAW8P,SAASmpB,YAAT,CAAuB,UAAvB,CAAf;;AAEAghF,iBAAe37G,UAAf,CAA2B,KAAKiqG,IAAL,CAAU5hG,WAArC;;AAEA,OAAM,IAAIjgB,IAAI,CAAR,EAAW+qB,IAAI,CAArB,EAAwB/qB,IAAI01D,MAAM/2D,MAAlC,EAA0CqB,GAA1C,EAAiD;;AAEhD,OAAIihF,OAAOvrB,MAAO11D,CAAP,CAAX;;AAEA,OAAKihF,KAAKh+C,MAAL,IAAeg+C,KAAKh+C,MAAL,CAAYi+C,MAAhC,EAAyC;;AAExCoyC,eAAWr+G,gBAAX,CAA6Bs+G,cAA7B,EAA6CtyC,KAAKhhE,WAAlD;AACAxG,WAAO+H,qBAAP,CAA8B8xG,UAA9B;AACAh6G,aAAS/B,MAAT,CAAiBwT,CAAjB,EAAoBtR,OAAO5b,CAA3B,EAA8B4b,OAAOhP,CAArC,EAAwCgP,OAAOtH,CAA/C;;AAEAmhH,eAAWr+G,gBAAX,CAA6Bs+G,cAA7B,EAA6CtyC,KAAKh+C,MAAL,CAAYhjB,WAAzD;AACAxG,WAAO+H,qBAAP,CAA8B8xG,UAA9B;AACAh6G,aAAS/B,MAAT,CAAiBwT,IAAI,CAArB,EAAwBtR,OAAO5b,CAA/B,EAAkC4b,OAAOhP,CAAzC,EAA4CgP,OAAOtH,CAAnD;;AAEA4Y,SAAK,CAAL;AAEA;AAED;;AAED3B,WAASmpB,YAAT,CAAuB,UAAvB,EAAoCK,WAApC,GAAkD,IAAlD;;AAEA5P,WAASjlC,SAAT,CAAmB0rB,iBAAnB,CAAqC1qB,IAArC,CAA2C,IAA3C,EAAiDknC,KAAjD;AAEA,EAjCD;AAmCA,CA1C4C,EAA7C;;AA4CA;;;;;AAKA,SAASutF,gBAAT,CAA2Bp7D,KAA3B,EAAkCq7D,UAAlC,EAA8C37F,KAA9C,EAAsD;;AAErD,MAAKsgC,KAAL,GAAaA,KAAb;AACA,MAAKA,KAAL,CAAW3uC,iBAAX;;AAEA,MAAKqO,KAAL,GAAaA,KAAb;;AAEA,KAAI1O,WAAW,IAAIgrE,oBAAJ,CAA0Bq/B,UAA1B,EAAsC,CAAtC,EAAyC,CAAzC,CAAf;AACA,KAAI7sF,WAAW,IAAI6R,iBAAJ,CAAuB,EAAEP,WAAW,IAAb,EAAmBxc,KAAK,KAAxB,EAAvB,CAAf;;AAEA0iB,MAAKr/C,IAAL,CAAW,IAAX,EAAiBqqB,QAAjB,EAA2Bwd,QAA3B;;AAEA,MAAKltB,MAAL,GAAc,KAAK0+C,KAAL,CAAWn4C,WAAzB;AACA,MAAKsD,gBAAL,GAAwB,KAAxB;;AAEA,MAAKjH,MAAL;;AAGA;;;;;;;;;;;;;AAsBA;;AAEDk3G,iBAAiBz1H,SAAjB,GAA6BC,OAAO8lB,MAAP,CAAes6B,KAAKrgD,SAApB,CAA7B;AACAy1H,iBAAiBz1H,SAAjB,CAA2B0O,WAA3B,GAAyC+mH,gBAAzC;;AAEAA,iBAAiBz1H,SAAjB,CAA2BwnB,OAA3B,GAAqC,YAAY;;AAEhD,MAAK6D,QAAL,CAAc7D,OAAd;AACA,MAAKqhB,QAAL,CAAcrhB,OAAd;AAEA,CALD;;AAOAiuG,iBAAiBz1H,SAAjB,CAA2Bue,MAA3B,GAAoC,YAAY;;AAE/C,KAAK,KAAKwb,KAAL,KAAez6B,SAApB,EAAgC;;AAE/B,OAAKupC,QAAL,CAAc9O,KAAd,CAAoB/rB,GAApB,CAAyB,KAAK+rB,KAA9B;AAEA,EAJD,MAIO;;AAEN,OAAK8O,QAAL,CAAc9O,KAAd,CAAoBprB,IAApB,CAA0B,KAAK0rD,KAAL,CAAWtgC,KAArC;AAEA;;AAED;;;;;;;;;AAeA,CA3BD;;AA6BA;;;;;;AAMA,SAAS47F,mBAAT,CAA8Bt7D,KAA9B,EAAqCtgC,KAArC,EAA6C;;AAE5CkL,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKq5D,KAAL,GAAaA,KAAb;AACA,MAAKA,KAAL,CAAW3uC,iBAAX;;AAEA,MAAK/P,MAAL,GAAc0+C,MAAMn4C,WAApB;AACA,MAAKsD,gBAAL,GAAwB,KAAxB;;AAEA,MAAKuU,KAAL,GAAaA,KAAb;;AAEA,KAAI8O,WAAW,IAAIuuB,iBAAJ,CAAuB,EAAEz5B,KAAK,KAAP,EAAvB,CAAf;;AAEA,KAAItS,WAAW,IAAI6oB,cAAJ,EAAf;;AAEA7oB,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAI9C,eAAJ,CAAqB,IAAIpP,YAAJ,CAAkB,IAAI,CAAtB,CAArB,EAAgD,CAAhD,CAAnC;;AAEA,MAAK5T,IAAL,GAAY,IAAI+1D,IAAJ,CAAUn5D,QAAV,EAAoBwd,QAApB,CAAZ;AACA,MAAKh6B,GAAL,CAAU,KAAK4f,IAAf;;AAGA,MAAKlQ,MAAL;AAEA;;AAEDo3G,oBAAoB31H,SAApB,GAAgCC,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAhC;AACA21H,oBAAoB31H,SAApB,CAA8B0O,WAA9B,GAA4CinH,mBAA5C;;AAEAA,oBAAoB31H,SAApB,CAA8BwnB,OAA9B,GAAwC,YAAY;;AAEnD,MAAK2d,QAAL,CAAe,CAAf,EAAmB9Z,QAAnB,CAA4B7D,OAA5B;AACA,MAAK2d,QAAL,CAAe,CAAf,EAAmB0D,QAAnB,CAA4BrhB,OAA5B;AAEA,CALD;;AAOAmuG,oBAAoB31H,SAApB,CAA8Bue,MAA9B,GAAuC,YAAY;;AAElD;;AAEA,KAAIwvE,KAAK,KAAK1zB,KAAL,CAAW1zC,KAAX,GAAmB,GAA5B;AACA,KAAIqnE,KAAK,KAAK3zB,KAAL,CAAWzzC,MAAX,GAAoB,GAA7B;;AAEA,KAAIrL,WAAW,KAAKkT,IAAL,CAAUpD,QAAV,CAAmBI,UAAnB,CAA8BlQ,QAA7C;AACA,KAAIxZ,QAAQwZ,SAASxZ,KAArB;;AAEA;;AAEAA,OAAO,CAAP,IAAagsF,EAAb,CAAiBhsF,MAAO,CAAP,IAAa,CAAEisF,EAAf,CAAmBjsF,MAAO,CAAP,IAAa,CAAb;AACpCA,OAAO,CAAP,IAAagsF,EAAb,CAAiBhsF,MAAO,CAAP,IAAaisF,EAAb,CAAiBjsF,MAAO,CAAP,IAAa,CAAb;AAClCA,OAAO,CAAP,IAAa,CAAEgsF,EAAf,CAAmBhsF,MAAO,CAAP,IAAaisF,EAAb,CAAiBjsF,MAAO,CAAP,IAAa,CAAb;AACpCA,OAAO,CAAP,IAAa,CAAEgsF,EAAf,CAAmBhsF,MAAO,EAAP,IAAc,CAAEisF,EAAhB,CAAoBjsF,MAAO,EAAP,IAAc,CAAd;AACvCA,OAAO,EAAP,IAAcgsF,EAAd,CAAkBhsF,MAAO,EAAP,IAAc,CAAEisF,EAAhB,CAAoBjsF,MAAO,EAAP,IAAc,CAAd;;AAEtCwZ,UAASs5B,WAAT,GAAuB,IAAvB;;AAEA,KAAK,KAAK9a,KAAL,KAAez6B,SAApB,EAAgC;;AAE/B,OAAKmvB,IAAL,CAAUoa,QAAV,CAAmB9O,KAAnB,CAAyB/rB,GAAzB,CAA8B,KAAK+rB,KAAnC;AAEA,EAJD,MAIO;;AAEN,OAAKtL,IAAL,CAAUoa,QAAV,CAAmB9O,KAAnB,CAAyBprB,IAAzB,CAA+B,KAAK0rD,KAAL,CAAWtgC,KAA1C;AAEA;AAED,CA9BD;;AAgCA;;;;;;AAMA,SAAS67F,qBAAT,CAAgCv7D,KAAhC,EAAuC/vC,IAAvC,EAA6CyP,KAA7C,EAAqD;;AAEpDkL,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKq5D,KAAL,GAAaA,KAAb;AACA,MAAKA,KAAL,CAAW3uC,iBAAX;;AAEA,MAAK/P,MAAL,GAAc0+C,MAAMn4C,WAApB;AACA,MAAKsD,gBAAL,GAAwB,KAAxB;;AAEA,MAAKuU,KAAL,GAAaA,KAAb;;AAEA,KAAI1O,WAAW,IAAIs9D,wBAAJ,CAA8Br+D,IAA9B,CAAf;AACAe,UAASwb,OAAT,CAAkBtnC,KAAK4L,EAAL,GAAU,GAA5B;;AAEA,MAAK09B,QAAL,GAAgB,IAAI6R,iBAAJ,CAAuB,EAAEP,WAAW,IAAb,EAAmBxc,KAAK,KAAxB,EAAvB,CAAhB;AACA,KAAK,KAAK5D,KAAL,KAAez6B,SAApB,EAAgC,KAAKupC,QAAL,CAAc6B,YAAd,GAA6BlnC,YAA7B;;AAEhC,KAAI+X,WAAW8P,SAASmpB,YAAT,CAAuB,UAAvB,CAAf;AACA,KAAI3J,SAAS,IAAIxI,YAAJ,CAAkB9mB,SAASlC,KAAT,GAAiB,CAAnC,CAAb;;AAEAgS,UAASkpB,YAAT,CAAuB,OAAvB,EAAgC,IAAI9C,eAAJ,CAAqB5G,MAArB,EAA6B,CAA7B,CAAhC;;AAEA,MAAKh8B,GAAL,CAAU,IAAIwxC,IAAJ,CAAUh1B,QAAV,EAAoB,KAAKwd,QAAzB,CAAV;;AAEA,MAAKtqB,MAAL;AAEA;;AAEDq3G,sBAAsB51H,SAAtB,GAAkCC,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAlC;AACA41H,sBAAsB51H,SAAtB,CAAgC0O,WAAhC,GAA8CknH,qBAA9C;;AAEAA,sBAAsB51H,SAAtB,CAAgCwnB,OAAhC,GAA0C,YAAY;;AAErD,MAAK2d,QAAL,CAAe,CAAf,EAAmB9Z,QAAnB,CAA4B7D,OAA5B;AACA,MAAK2d,QAAL,CAAe,CAAf,EAAmB0D,QAAnB,CAA4BrhB,OAA5B;AAEA,CALD;;AAOAouG,sBAAsB51H,SAAtB,CAAgCue,MAAhC,GAAyC,YAAY;;AAEpD,KAAI7C,SAAS,IAAIpH,OAAJ,EAAb;;AAEA,KAAI6mB,SAAS,IAAIhC,KAAJ,EAAb;AACA,KAAIiC,SAAS,IAAIjC,KAAJ,EAAb;;AAEA,QAAO,SAAS5a,MAAT,GAAkB;;AAExB,MAAI0wB,OAAO,KAAK9J,QAAL,CAAe,CAAf,CAAX;;AAEA,MAAK,KAAKpL,KAAL,KAAez6B,SAApB,EAAgC;;AAE/B,QAAKupC,QAAL,CAAc9O,KAAd,CAAoB/rB,GAApB,CAAyB,KAAK+rB,KAA9B;AAEA,GAJD,MAIO;;AAEN,OAAI8Q,SAASoE,KAAK5jB,QAAL,CAAcmpB,YAAd,CAA4B,OAA5B,CAAb;;AAEArZ,UAAOxsB,IAAP,CAAa,KAAK0rD,KAAL,CAAWtgC,KAAxB;AACAqB,UAAOzsB,IAAP,CAAa,KAAK0rD,KAAL,CAAW96B,WAAxB;;AAEA,QAAM,IAAIt9B,IAAI,CAAR,EAAWC,IAAI2oC,OAAOxxB,KAA5B,EAAmCpX,IAAIC,CAAvC,EAA0CD,GAA1C,EAAiD;;AAEhD,QAAI83B,QAAU93B,IAAMC,IAAI,CAAZ,GAAoBi5B,MAApB,GAA6BC,MAAzC;;AAEAyP,WAAOrxB,MAAP,CAAevX,CAAf,EAAkB83B,MAAMpa,CAAxB,EAA2Boa,MAAMjW,CAAjC,EAAoCiW,MAAM1qB,CAA1C;AAEA;;AAEDw7B,UAAOgK,WAAP,GAAqB,IAArB;AAEA;;AAED5F,OAAKn4B,MAAL,CAAa4E,OAAO+H,qBAAP,CAA8B,KAAK42C,KAAL,CAAWn4C,WAAzC,EAAuD3R,MAAvD,EAAb;AAEA,EA7BD;AA+BA,CAtCwC,EAAzC;;AAwCA;;;;AAIA,SAASslH,UAAT,CAAqBvrG,IAArB,EAA2Bq0E,SAA3B,EAAsCxjE,MAAtC,EAA8CC,MAA9C,EAAuD;;AAEtD9Q,QAAOA,QAAQ,EAAf;AACAq0E,aAAYA,aAAa,EAAzB;AACAxjE,UAAS,IAAIhC,KAAJ,CAAWgC,WAAW77B,SAAX,GAAuB67B,MAAvB,GAAgC,QAA3C,CAAT;AACAC,UAAS,IAAIjC,KAAJ,CAAWiC,WAAW97B,SAAX,GAAuB87B,MAAvB,GAAgC,QAA3C,CAAT;;AAEA,KAAIjpB,SAASwsF,YAAY,CAAzB;AACA,KAAIzZ,OAAO56D,OAAOq0E,SAAlB;AACA,KAAIp0E,WAAWD,OAAO,CAAtB;;AAEA,KAAIiB,WAAW,EAAf;AAAA,KAAmBsf,SAAS,EAA5B;;AAEA,MAAM,IAAI5oC,IAAI,CAAR,EAAW+qB,IAAI,CAAf,EAAkBkkB,IAAI,CAAE3mB,QAA9B,EAAwCtoB,KAAK08F,SAA7C,EAAwD18F,KAAMivC,KAAKg0C,IAAnE,EAA0E;;AAEzE35D,WAAS/pB,IAAT,CAAe,CAAE+oB,QAAjB,EAA2B,CAA3B,EAA8B2mB,CAA9B,EAAiC3mB,QAAjC,EAA2C,CAA3C,EAA8C2mB,CAA9C;AACA3lB,WAAS/pB,IAAT,CAAe0vC,CAAf,EAAkB,CAAlB,EAAqB,CAAE3mB,QAAvB,EAAiC2mB,CAAjC,EAAoC,CAApC,EAAuC3mB,QAAvC;;AAEA,MAAIwP,QAAQ93B,MAAMkQ,MAAN,GAAegpB,MAAf,GAAwBC,MAApC;;AAEArB,QAAMloB,OAAN,CAAeg5B,MAAf,EAAuB7d,CAAvB,EAA4BA,KAAK,CAAL;AAC5B+M,QAAMloB,OAAN,CAAeg5B,MAAf,EAAuB7d,CAAvB,EAA4BA,KAAK,CAAL;AAC5B+M,QAAMloB,OAAN,CAAeg5B,MAAf,EAAuB7d,CAAvB,EAA4BA,KAAK,CAAL;AAC5B+M,QAAMloB,OAAN,CAAeg5B,MAAf,EAAuB7d,CAAvB,EAA4BA,KAAK,CAAL;AAE5B;;AAED,KAAI3B,WAAW,IAAI6oB,cAAJ,EAAf;AACA7oB,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAAnC;AACAF,UAASkpB,YAAT,CAAuB,OAAvB,EAAgC,IAAIpB,sBAAJ,CAA4BtI,MAA5B,EAAoC,CAApC,CAAhC;;AAEA,KAAIhC,WAAW,IAAIuuB,iBAAJ,CAAuB,EAAE1sB,cAAclnC,YAAhB,EAAvB,CAAf;;AAEAihF,cAAazjF,IAAb,CAAmB,IAAnB,EAAyBqqB,QAAzB,EAAmCwd,QAAnC;AAEA;;AAEDgtF,WAAW71H,SAAX,GAAuBC,OAAO8lB,MAAP,CAAe0+D,aAAazkF,SAA5B,CAAvB;AACA61H,WAAW71H,SAAX,CAAqB0O,WAArB,GAAmCmnH,UAAnC;;AAEA;;;;;;AAMA,SAASC,eAAT,CAA0BvyG,MAA1B,EAAkCwyG,OAAlC,EAA2CC,OAA3C,EAAoDr3B,SAApD,EAA+DxjE,MAA/D,EAAuEC,MAAvE,EAAgF;;AAE/E7X,UAASA,UAAU,EAAnB;AACAwyG,WAAUA,WAAW,EAArB;AACAC,WAAUA,WAAW,CAArB;AACAr3B,aAAYA,aAAa,EAAzB;AACAxjE,UAAS,IAAIhC,KAAJ,CAAWgC,WAAW77B,SAAX,GAAuB67B,MAAvB,GAAgC,QAA3C,CAAT;AACAC,UAAS,IAAIjC,KAAJ,CAAWiC,WAAW97B,SAAX,GAAuB87B,MAAvB,GAAgC,QAA3C,CAAT;;AAEA,KAAI7P,WAAW,EAAf;AACA,KAAIsf,SAAS,EAAb;;AAEA,KAAI/qC,CAAJ,EAAOsU,CAAP;AACA,KAAIxF,CAAJ,EAAO3M,CAAP,EAAU+qB,CAAV,EAAarN,CAAb,EAAgBoa,KAAhB;;AAEA;;AAEA,MAAM93B,IAAI,CAAV,EAAaA,KAAK8zH,OAAlB,EAA2B9zH,GAA3B,EAAkC;;AAEjC2M,MAAM3M,IAAI8zH,OAAN,IAAoBx2H,KAAK4L,EAAL,GAAU,CAA9B,CAAJ;;AAEArL,MAAIP,KAAK+S,GAAL,CAAU1D,CAAV,IAAgB2U,MAApB;AACAnP,MAAI7U,KAAK8S,GAAL,CAAUzD,CAAV,IAAgB2U,MAApB;;AAEAgI,WAAS/pB,IAAT,CAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB;AACA+pB,WAAS/pB,IAAT,CAAe1B,CAAf,EAAkB,CAAlB,EAAqBsU,CAArB;;AAEA2lB,UAAU93B,IAAI,CAAN,GAAYk5B,MAAZ,GAAqBC,MAA7B;;AAEAyP,SAAOrpC,IAAP,CAAau4B,MAAMpa,CAAnB,EAAsBoa,MAAMjW,CAA5B,EAA+BiW,MAAM1qB,CAArC;AACAw7B,SAAOrpC,IAAP,CAAau4B,MAAMpa,CAAnB,EAAsBoa,MAAMjW,CAA5B,EAA+BiW,MAAM1qB,CAArC;AAEA;;AAED;;AAEA,MAAMpN,IAAI,CAAV,EAAaA,KAAK+zH,OAAlB,EAA2B/zH,GAA3B,EAAkC;;AAEjC83B,UAAU93B,IAAI,CAAN,GAAYk5B,MAAZ,GAAqBC,MAA7B;;AAEAzb,MAAI4D,SAAWA,SAASyyG,OAAT,GAAmB/zH,CAAlC;;AAEA,OAAM+qB,IAAI,CAAV,EAAaA,IAAI2xE,SAAjB,EAA4B3xE,GAA5B,EAAmC;;AAElC;;AAEApe,OAAMoe,IAAI2xE,SAAN,IAAsBp/F,KAAK4L,EAAL,GAAU,CAAhC,CAAJ;;AAEArL,OAAIP,KAAK+S,GAAL,CAAU1D,CAAV,IAAgB+Q,CAApB;AACAvL,OAAI7U,KAAK8S,GAAL,CAAUzD,CAAV,IAAgB+Q,CAApB;;AAEA4L,YAAS/pB,IAAT,CAAe1B,CAAf,EAAkB,CAAlB,EAAqBsU,CAArB;AACAy2B,UAAOrpC,IAAP,CAAau4B,MAAMpa,CAAnB,EAAsBoa,MAAMjW,CAA5B,EAA+BiW,MAAM1qB,CAArC;;AAEA;;AAEAT,OAAM,CAAEoe,IAAI,CAAN,IAAY2xE,SAAd,IAA8Bp/F,KAAK4L,EAAL,GAAU,CAAxC,CAAJ;;AAEArL,OAAIP,KAAK+S,GAAL,CAAU1D,CAAV,IAAgB+Q,CAApB;AACAvL,OAAI7U,KAAK8S,GAAL,CAAUzD,CAAV,IAAgB+Q,CAApB;;AAEA4L,YAAS/pB,IAAT,CAAe1B,CAAf,EAAkB,CAAlB,EAAqBsU,CAArB;AACAy2B,UAAOrpC,IAAP,CAAau4B,MAAMpa,CAAnB,EAAsBoa,MAAMjW,CAA5B,EAA+BiW,MAAM1qB,CAArC;AAEA;AAED;;AAED,KAAIgc,WAAW,IAAI6oB,cAAJ,EAAf;AACA7oB,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAAnC;AACAF,UAASkpB,YAAT,CAAuB,OAAvB,EAAgC,IAAIpB,sBAAJ,CAA4BtI,MAA5B,EAAoC,CAApC,CAAhC;;AAEA,KAAIhC,WAAW,IAAIuuB,iBAAJ,CAAuB,EAAE1sB,cAAclnC,YAAhB,EAAvB,CAAf;;AAEAihF,cAAazjF,IAAb,CAAmB,IAAnB,EAAyBqqB,QAAzB,EAAmCwd,QAAnC;AAEA;;AAEDitF,gBAAgB91H,SAAhB,GAA4BC,OAAO8lB,MAAP,CAAe0+D,aAAazkF,SAA5B,CAA5B;AACA81H,gBAAgB91H,SAAhB,CAA0B0O,WAA1B,GAAwConH,eAAxC;;AAEA;;;;;AAKA,SAASG,iBAAT,CAA4BxrG,MAA5B,EAAoCH,IAApC,EAA0CiP,GAA1C,EAA+C0gB,SAA/C,EAA2D;;AAE1D;;AAEA,MAAKxvB,MAAL,GAAcA,MAAd;;AAEA,MAAKH,IAAL,GAAcA,SAAShrB,SAAX,GAAyBgrB,IAAzB,GAAgC,CAA5C;;AAEA,KAAIyP,QAAUR,QAAQj6B,SAAV,GAAwBi6B,GAAxB,GAA8B,QAA1C;;AAEA,KAAI5S,QAAUszB,cAAc36C,SAAhB,GAA8B26C,SAA9B,GAA0C,CAAtD;;AAEA;;AAEA,KAAI26E,WAAW,CAAf;;AAEA,KAAIC,cAAc,KAAKpqG,MAAL,CAAYY,QAA9B;;AAEA,KAAKwpG,eAAeA,YAAYvpG,UAAhC,EAA6C;;AAE5CspG,aAAWC,YAAY/pF,KAAZ,CAAkBlqC,MAA7B;AAEA,EAJD,MAIO;;AAENmO,UAAQC,IAAR,CAAc,oGAAd;AAEA;;AAED;;AAEA,KAAIqc,WAAW,IAAI6oB,cAAJ,EAAf;;AAEA,KAAI9H,YAAY,IAAI+G,sBAAJ,CAA4ByhF,WAAW,CAAX,GAAe,CAA3C,EAA8C,CAA9C,CAAhB;;AAEAvpG,UAASkpB,YAAT,CAAuB,UAAvB,EAAmCnI,SAAnC;;AAEAq4C,cAAazjF,IAAb,CAAmB,IAAnB,EAAyBqqB,QAAzB,EAAmC,IAAI+rC,iBAAJ,CAAuB,EAAEr9B,OAAOA,KAAT,EAAgBkgB,WAAWtzB,KAA3B,EAAvB,CAAnC;;AAEA;;AAEA,MAAKnB,gBAAL,GAAwB,KAAxB;AACA,MAAKjH,MAAL;AAEA;;AAED03G,kBAAkBj2H,SAAlB,GAA8BC,OAAO8lB,MAAP,CAAe0+D,aAAazkF,SAA5B,CAA9B;AACAi2H,kBAAkBj2H,SAAlB,CAA4B0O,WAA5B,GAA0CunH,iBAA1C;;AAEAA,kBAAkBj2H,SAAlB,CAA4Bue,MAA5B,GAAuC,YAAY;;AAElD,KAAI/M,KAAK,IAAI8C,OAAJ,EAAT;AACA,KAAI7C,KAAK,IAAI6C,OAAJ,EAAT;AACA,KAAI+a,eAAe,IAAI1L,OAAJ,EAAnB;;AAEA,QAAO,SAASpF,MAAT,GAAkB;;AAExB,OAAKkM,MAAL,CAAYiB,iBAAZ,CAA+B,IAA/B;;AAEA2D,eAAatL,eAAb,CAA8B,KAAK0G,MAAL,CAAYvI,WAA1C;;AAEA,MAAIA,cAAc,KAAKuI,MAAL,CAAYvI,WAA9B;;AAEA,MAAI3G,WAAW,KAAK8P,QAAL,CAAcI,UAAd,CAAyBlQ,QAAxC;;AAEA;;AAEA,MAAIs5G,cAAc,KAAKpqG,MAAL,CAAYY,QAA9B;;AAEA,MAAIE,WAAWspG,YAAYtpG,QAA3B;;AAEA,MAAIuf,QAAQ+pF,YAAY/pF,KAAxB;;AAEA,MAAI4E,MAAM,CAAV;;AAEA,OAAM,IAAIztC,IAAI,CAAR,EAAWC,IAAI4oC,MAAMlqC,MAA3B,EAAmCqB,IAAIC,CAAvC,EAA0CD,GAA1C,EAAiD;;AAEhD,OAAI6pC,OAAOhB,MAAO7oC,CAAP,CAAX;;AAEA,OAAI+gB,SAAS8oB,KAAK9oB,MAAlB;;AAEAxR,MAAG7C,IAAH,CAAS4c,SAAUugB,KAAK18B,CAAf,CAAT,EACEP,GADF,CACO0c,SAAUugB,KAAKz8B,CAAf,CADP,EAEER,GAFF,CAEO0c,SAAUugB,KAAK15B,CAAf,CAFP,EAGEvC,YAHF,CAGgB,CAHhB,EAIE0J,YAJF,CAIgB2I,WAJhB;;AAMAzQ,MAAG9C,IAAH,CAASqU,MAAT,EAAkBlT,YAAlB,CAAgCuf,YAAhC,EAA+Cxe,SAA/C,GAA2DlB,cAA3D,CAA2E,KAAK2a,IAAhF,EAAuFzb,GAAvF,CAA4F2C,EAA5F;;AAEA+J,YAAS/B,MAAT,CAAiBk2B,GAAjB,EAAsBl+B,GAAG1R,CAAzB,EAA4B0R,GAAG9E,CAA/B,EAAkC8E,GAAG4C,CAArC;;AAEAs7B,SAAMA,MAAM,CAAZ;;AAEAn0B,YAAS/B,MAAT,CAAiBk2B,GAAjB,EAAsBj+B,GAAG3R,CAAzB,EAA4B2R,GAAG/E,CAA/B,EAAkC+E,GAAG2C,CAArC;;AAEAs7B,SAAMA,MAAM,CAAZ;AAEA;;AAEDn0B,WAASs5B,WAAT,GAAuB,IAAvB;AAEA,EA9CD;AAgDA,CAtDsC,EAAvC;;AAwDA;;;;;;AAMA,SAASqhF,sBAAT,CAAiC77D,KAAjC,EAAwC/vC,IAAxC,EAA8CyP,KAA9C,EAAsD;;AAErDkL,UAASjkC,IAAT,CAAe,IAAf;;AAEA,MAAKq5D,KAAL,GAAaA,KAAb;AACA,MAAKA,KAAL,CAAW3uC,iBAAX;;AAEA,MAAK/P,MAAL,GAAc0+C,MAAMn4C,WAApB;AACA,MAAKsD,gBAAL,GAAwB,KAAxB;;AAEA,MAAKuU,KAAL,GAAaA,KAAb;;AAEA,KAAKzP,SAAShrB,SAAd,EAA0BgrB,OAAO,CAAP;;AAE1B,KAAIe,WAAW,IAAI6oB,cAAJ,EAAf;AACA7oB,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAIpB,sBAAJ,CAA4B,CAC9D,CAAE7oB,IAD4D,EACtDA,IADsD,EAChD,CADgD,EAE9DA,IAF8D,EAExDA,IAFwD,EAElD,CAFkD,EAG9DA,IAH8D,EAGxD,CAAEA,IAHsD,EAGhD,CAHgD,EAI9D,CAAEA,IAJ4D,EAItD,CAAEA,IAJoD,EAI9C,CAJ8C,EAK9D,CAAEA,IAL4D,EAKtDA,IALsD,EAKhD,CALgD,CAA5B,EAMhC,CANgC,CAAnC;;AAQA,KAAIue,WAAW,IAAIuuB,iBAAJ,CAAuB,EAAEz5B,KAAK,KAAP,EAAvB,CAAf;;AAEA,MAAKw4F,UAAL,GAAkB,IAAI3xC,IAAJ,CAAUn5D,QAAV,EAAoBwd,QAApB,CAAlB;AACA,MAAKh6B,GAAL,CAAU,KAAKsnH,UAAf;;AAEA9qG,YAAW,IAAI6oB,cAAJ,EAAX;AACA7oB,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAIpB,sBAAJ,CAA4B,CAAE,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,CAA5B,EAAkD,CAAlD,CAAnC;;AAEA,MAAKijF,UAAL,GAAkB,IAAI5xC,IAAJ,CAAUn5D,QAAV,EAAoBwd,QAApB,CAAlB;AACA,MAAKh6B,GAAL,CAAU,KAAKunH,UAAf;;AAEA,MAAK73G,MAAL;AAEA;;AAED23G,uBAAuBl2H,SAAvB,GAAmCC,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAnC;AACAk2H,uBAAuBl2H,SAAvB,CAAiC0O,WAAjC,GAA+CwnH,sBAA/C;;AAEAA,uBAAuBl2H,SAAvB,CAAiCwnB,OAAjC,GAA2C,YAAY;;AAEtD,MAAK2uG,UAAL,CAAgB9qG,QAAhB,CAAyB7D,OAAzB;AACA,MAAK2uG,UAAL,CAAgBttF,QAAhB,CAAyBrhB,OAAzB;AACA,MAAK4uG,UAAL,CAAgB/qG,QAAhB,CAAyB7D,OAAzB;AACA,MAAK4uG,UAAL,CAAgBvtF,QAAhB,CAAyBrhB,OAAzB;AAEA,CAPD;;AASA0uG,uBAAuBl2H,SAAvB,CAAiCue,MAAjC,GAA0C,YAAY;;AAErD,KAAI/M,KAAK,IAAI8C,OAAJ,EAAT;AACA,KAAI7C,KAAK,IAAI6C,OAAJ,EAAT;AACA,KAAIyuF,KAAK,IAAIzuF,OAAJ,EAAT;;AAEA,QAAO,SAASiK,MAAT,GAAkB;;AAExB/M,KAAGiS,qBAAH,CAA0B,KAAK42C,KAAL,CAAWn4C,WAArC;AACAzQ,KAAGgS,qBAAH,CAA0B,KAAK42C,KAAL,CAAW95D,MAAX,CAAkB2hB,WAA5C;AACA6gF,KAAGvzF,UAAH,CAAeiC,EAAf,EAAmBD,EAAnB;;AAEA,OAAK2kH,UAAL,CAAgBr/G,MAAhB,CAAwBisF,EAAxB;;AAEA,MAAK,KAAKhpE,KAAL,KAAez6B,SAApB,EAAgC;;AAE/B,QAAK62H,UAAL,CAAgBttF,QAAhB,CAAyB9O,KAAzB,CAA+B/rB,GAA/B,CAAoC,KAAK+rB,KAAzC;AACA,QAAKq8F,UAAL,CAAgBvtF,QAAhB,CAAyB9O,KAAzB,CAA+B/rB,GAA/B,CAAoC,KAAK+rB,KAAzC;AAEA,GALD,MAKO;;AAEN,QAAKo8F,UAAL,CAAgBttF,QAAhB,CAAyB9O,KAAzB,CAA+BprB,IAA/B,CAAqC,KAAK0rD,KAAL,CAAWtgC,KAAhD;AACA,QAAKq8F,UAAL,CAAgBvtF,QAAhB,CAAyB9O,KAAzB,CAA+BprB,IAA/B,CAAqC,KAAK0rD,KAAL,CAAWtgC,KAAhD;AAEA;;AAED,OAAKq8F,UAAL,CAAgBt/G,MAAhB,CAAwBisF,EAAxB;AACA,OAAKqzB,UAAL,CAAgB97G,KAAhB,CAAsBlG,CAAtB,GAA0B2uF,GAAGniG,MAAH,EAA1B;AAEA,EAvBD;AAyBA,CA/ByC,EAA1C;;AAiCA;;;;;;;;;;AAUA,SAASy1H,YAAT,CAAuBr0G,MAAvB,EAAgC;;AAE/B,KAAIqJ,WAAW,IAAI6oB,cAAJ,EAAf;AACA,KAAIrL,WAAW,IAAIuuB,iBAAJ,CAAuB,EAAEr9B,OAAO,QAAT,EAAmB2Q,cAAcnnC,UAAjC,EAAvB,CAAf;;AAEA,KAAIgoB,WAAW,EAAf;AACA,KAAIsf,SAAS,EAAb;;AAEA,KAAIyrF,WAAW,EAAf;;AAEA;;AAEA,KAAIC,eAAe,IAAIp9F,KAAJ,CAAW,QAAX,CAAnB;AACA,KAAIq9F,YAAY,IAAIr9F,KAAJ,CAAW,QAAX,CAAhB;AACA,KAAIs9F,UAAU,IAAIt9F,KAAJ,CAAW,QAAX,CAAd;AACA,KAAIu9F,cAAc,IAAIv9F,KAAJ,CAAW,QAAX,CAAlB;AACA,KAAIw9F,aAAa,IAAIx9F,KAAJ,CAAW,QAAX,CAAjB;;AAEA;;AAEAy9F,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;AACAK,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;AACAK,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;AACAK,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;;AAEA;;AAEAK,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;AACAK,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;AACAK,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;AACAK,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;;AAEA;;AAEAK,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;AACAK,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;AACAK,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;AACAK,SAAS,IAAT,EAAe,IAAf,EAAqBL,YAArB;;AAEA;;AAEAK,SAAS,GAAT,EAAc,IAAd,EAAoBJ,SAApB;AACAI,SAAS,GAAT,EAAc,IAAd,EAAoBJ,SAApB;AACAI,SAAS,GAAT,EAAc,IAAd,EAAoBJ,SAApB;AACAI,SAAS,GAAT,EAAc,IAAd,EAAoBJ,SAApB;;AAEA;;AAEAI,SAAS,IAAT,EAAe,IAAf,EAAqBH,OAArB;AACAG,SAAS,IAAT,EAAe,IAAf,EAAqBH,OAArB;AACAG,SAAS,IAAT,EAAe,IAAf,EAAqBH,OAArB;;AAEA;;AAEAG,SAAS,GAAT,EAAc,GAAd,EAAmBF,WAAnB;AACAE,SAAS,GAAT,EAAc,GAAd,EAAmBD,UAAnB;;AAEA;;AAEAC,SAAS,KAAT,EAAgB,KAAhB,EAAuBD,UAAvB;AACAC,SAAS,KAAT,EAAgB,KAAhB,EAAuBD,UAAvB;;AAEAC,SAAS,KAAT,EAAgB,KAAhB,EAAuBD,UAAvB;AACAC,SAAS,KAAT,EAAgB,KAAhB,EAAuBD,UAAvB;;AAEA,UAASC,OAAT,CAAkBxnH,CAAlB,EAAqBC,CAArB,EAAwB0qB,KAAxB,EAAgC;;AAE/B88F,WAAUznH,CAAV,EAAa2qB,KAAb;AACA88F,WAAUxnH,CAAV,EAAa0qB,KAAb;AAEA;;AAED,UAAS88F,QAAT,CAAmBtvF,EAAnB,EAAuBxN,KAAvB,EAA+B;;AAE9BxO,WAAS/pB,IAAT,CAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB;AACAqpC,SAAOrpC,IAAP,CAAau4B,MAAMpa,CAAnB,EAAsBoa,MAAMjW,CAA5B,EAA+BiW,MAAM1qB,CAArC;;AAEA,MAAKinH,SAAU/uF,EAAV,MAAmBjoC,SAAxB,EAAoC;;AAEnCg3H,YAAU/uF,EAAV,IAAiB,EAAjB;AAEA;;AAED+uF,WAAU/uF,EAAV,EAAe/lC,IAAf,CAAuB+pB,SAAS3qB,MAAT,GAAkB,CAApB,GAA0B,CAA/C;AAEA;;AAEDyqB,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAAnC;AACAF,UAASkpB,YAAT,CAAuB,OAAvB,EAAgC,IAAIpB,sBAAJ,CAA4BtI,MAA5B,EAAoC,CAApC,CAAhC;;AAEA45C,cAAazjF,IAAb,CAAmB,IAAnB,EAAyBqqB,QAAzB,EAAmCwd,QAAnC;;AAEA,MAAK7mB,MAAL,GAAcA,MAAd;AACA,KAAK,KAAKA,MAAL,CAAY0nB,sBAAjB,EAA0C,KAAK1nB,MAAL,CAAY0nB,sBAAZ;;AAE1C,MAAK/tB,MAAL,GAAcqG,OAAOE,WAArB;AACA,MAAKsD,gBAAL,GAAwB,KAAxB;;AAEA,MAAK8wG,QAAL,GAAgBA,QAAhB;;AAEA,MAAK/3G,MAAL;AAEA;;AAED83G,aAAar2H,SAAb,GAAyBC,OAAO8lB,MAAP,CAAe0+D,aAAazkF,SAA5B,CAAzB;AACAq2H,aAAar2H,SAAb,CAAuB0O,WAAvB,GAAqC2nH,YAArC;;AAEAA,aAAar2H,SAAb,CAAuBue,MAAvB,GAAgC,YAAY;;AAE3C,KAAI8M,QAAJ,EAAcirG,QAAd;;AAEA,KAAI56G,SAAS,IAAIpH,OAAJ,EAAb;AACA,KAAI0N,SAAS,IAAIqnB,MAAJ,EAAb;;AAEA,UAASytF,QAAT,CAAmB/rG,KAAnB,EAA0BjrB,CAA1B,EAA6B4M,CAA7B,EAAgC0H,CAAhC,EAAoC;;AAEnCsH,SAAO1N,GAAP,CAAYlO,CAAZ,EAAe4M,CAAf,EAAkB0H,CAAlB,EAAsB+N,SAAtB,CAAiCH,MAAjC;;AAEA,MAAIiI,SAASqsG,SAAUvrG,KAAV,CAAb;;AAEA,MAAKd,WAAW3qB,SAAhB,EAA4B;;AAE3B,OAAIic,WAAW8P,SAASmpB,YAAT,CAAuB,UAAvB,CAAf;;AAEA,QAAM,IAAIvyC,IAAI,CAAR,EAAWC,IAAI+nB,OAAOrpB,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjDsZ,aAAS/B,MAAT,CAAiByQ,OAAQhoB,CAAR,CAAjB,EAA8ByZ,OAAO5b,CAArC,EAAwC4b,OAAOhP,CAA/C,EAAkDgP,OAAOtH,CAAzD;AAEA;AAED;AAED;;AAED,QAAO,SAASmK,MAAT,GAAkB;;AAExB8M,aAAW,KAAKA,QAAhB;AACAirG,aAAW,KAAKA,QAAhB;;AAEA,MAAIxnH,IAAI,CAAR;AAAA,MAAW6N,IAAI,CAAf;;AAEA;AACA;;AAEAqF,SAAOC,gBAAP,CAAwBtT,IAAxB,CAA8B,KAAKqT,MAAL,CAAYC,gBAA1C;;AAEA;;AAEA60G,WAAU,GAAV,EAAe,CAAf,EAAkB,CAAlB,EAAqB,CAAE,CAAvB;AACAA,WAAU,GAAV,EAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB;;AAEA;;AAEAA,WAAU,IAAV,EAAgB,CAAEhoH,CAAlB,EAAqB,CAAE6N,CAAvB,EAA0B,CAAE,CAA5B;AACAm6G,WAAU,IAAV,EAAgBhoH,CAAhB,EAAmB,CAAE6N,CAArB,EAAwB,CAAE,CAA1B;AACAm6G,WAAU,IAAV,EAAgB,CAAEhoH,CAAlB,EAAqB6N,CAArB,EAAwB,CAAE,CAA1B;AACAm6G,WAAU,IAAV,EAAgBhoH,CAAhB,EAAmB6N,CAAnB,EAAsB,CAAE,CAAxB;;AAEA;;AAEAm6G,WAAU,IAAV,EAAgB,CAAEhoH,CAAlB,EAAqB,CAAE6N,CAAvB,EAA0B,CAA1B;AACAm6G,WAAU,IAAV,EAAgBhoH,CAAhB,EAAmB,CAAE6N,CAArB,EAAwB,CAAxB;AACAm6G,WAAU,IAAV,EAAgB,CAAEhoH,CAAlB,EAAqB6N,CAArB,EAAwB,CAAxB;AACAm6G,WAAU,IAAV,EAAgBhoH,CAAhB,EAAmB6N,CAAnB,EAAsB,CAAtB;;AAEA;;AAEAm6G,WAAU,IAAV,EAAgBhoH,IAAI,GAApB,EAAyB6N,IAAI,GAA7B,EAAkC,CAAE,CAApC;AACAm6G,WAAU,IAAV,EAAgB,CAAEhoH,CAAF,GAAM,GAAtB,EAA2B6N,IAAI,GAA/B,EAAoC,CAAE,CAAtC;AACAm6G,WAAU,IAAV,EAAgB,CAAhB,EAAmBn6G,IAAI,CAAvB,EAA0B,CAAE,CAA5B;;AAEA;;AAEAm6G,WAAU,KAAV,EAAiB,CAAEhoH,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB;AACAgoH,WAAU,KAAV,EAAiBhoH,CAAjB,EAAoB,CAApB,EAAuB,CAAvB;AACAgoH,WAAU,KAAV,EAAiB,CAAjB,EAAoB,CAAEn6G,CAAtB,EAAyB,CAAzB;AACAm6G,WAAU,KAAV,EAAiB,CAAjB,EAAoBn6G,CAApB,EAAuB,CAAvB;;AAEAm6G,WAAU,KAAV,EAAiB,CAAEhoH,CAAnB,EAAsB,CAAtB,EAAyB,CAAE,CAA3B;AACAgoH,WAAU,KAAV,EAAiBhoH,CAAjB,EAAoB,CAApB,EAAuB,CAAE,CAAzB;AACAgoH,WAAU,KAAV,EAAiB,CAAjB,EAAoB,CAAEn6G,CAAtB,EAAyB,CAAE,CAA3B;AACAm6G,WAAU,KAAV,EAAiB,CAAjB,EAAoBn6G,CAApB,EAAuB,CAAE,CAAzB;;AAEA0O,WAASmpB,YAAT,CAAuB,UAAvB,EAAoCK,WAApC,GAAkD,IAAlD;AAEA,EAnDD;AAqDA,CAhF+B,EAAhC;;AAkFA;;;;;AAKA,SAASkiF,SAAT,CAAoBtsG,MAApB,EAA4BsP,KAA5B,EAAoC;;AAEnC,MAAKtP,MAAL,GAAcA,MAAd;;AAEA,KAAKsP,UAAUz6B,SAAf,EAA2By6B,QAAQ,QAAR;;AAE3B,KAAIoS,UAAU,IAAI5J,WAAJ,CAAiB,CAAE,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgC,CAAhC,EAAmC,CAAnC,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,EAA+C,CAA/C,EAAkD,CAAlD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,EAA8D,CAA9D,EAAiE,CAAjE,EAAoE,CAApE,EAAuE,CAAvE,CAAjB,CAAd;AACA,KAAI6J,YAAY,IAAI/J,YAAJ,CAAkB,IAAI,CAAtB,CAAhB;;AAEA,KAAIhX,WAAW,IAAI6oB,cAAJ,EAAf;AACA7oB,UAASipB,QAAT,CAAmB,IAAI7C,eAAJ,CAAqBtF,OAArB,EAA8B,CAA9B,CAAnB;AACA9gB,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAI9C,eAAJ,CAAqBrF,SAArB,EAAgC,CAAhC,CAAnC;;AAEAq4C,cAAazjF,IAAb,CAAmB,IAAnB,EAAyBqqB,QAAzB,EAAmC,IAAI+rC,iBAAJ,CAAuB,EAAEr9B,OAAOA,KAAT,EAAvB,CAAnC;;AAEA,MAAKvU,gBAAL,GAAwB,KAAxB;;AAEA,MAAKjH,MAAL;AAEA;;AAEDw4G,UAAU/2H,SAAV,GAAsBC,OAAO8lB,MAAP,CAAe0+D,aAAazkF,SAA5B,CAAtB;AACA+2H,UAAU/2H,SAAV,CAAoB0O,WAApB,GAAkCqoH,SAAlC;;AAEAA,UAAU/2H,SAAV,CAAoBue,MAApB,GAA+B,YAAY;;AAE1C,KAAIoM,MAAM,IAAItB,IAAJ,EAAV;;AAEA,QAAO,SAAS9K,MAAT,CAAiBkM,MAAjB,EAA0B;;AAEhC,MAAKA,WAAWnrB,SAAhB,EAA4B;;AAE3ByP,WAAQC,IAAR,CAAc,qDAAd;AAEA;;AAED,MAAK,KAAKyb,MAAL,KAAgBnrB,SAArB,EAAiC;;AAEhCqrB,OAAIH,aAAJ,CAAmB,KAAKC,MAAxB;AAEA;;AAED,MAAKE,IAAIC,OAAJ,EAAL,EAAqB;;AAErB,MAAI7e,MAAM4e,IAAI5e,GAAd;AACA,MAAIC,MAAM2e,IAAI3e,GAAd;;AAEA;;;;;;;;;;;;;;;AAgBA,MAAIuP,WAAW,KAAK8P,QAAL,CAAcI,UAAd,CAAyBlQ,QAAxC;AACA,MAAIxZ,QAAQwZ,SAASxZ,KAArB;;AAEAA,QAAO,CAAP,IAAaiK,IAAIlM,CAAjB,CAAoBiC,MAAO,CAAP,IAAaiK,IAAIU,CAAjB,CAAoB3K,MAAO,CAAP,IAAaiK,IAAIoI,CAAjB;AACxCrS,QAAO,CAAP,IAAagK,IAAIjM,CAAjB,CAAoBiC,MAAO,CAAP,IAAaiK,IAAIU,CAAjB,CAAoB3K,MAAO,CAAP,IAAaiK,IAAIoI,CAAjB;AACxCrS,QAAO,CAAP,IAAagK,IAAIjM,CAAjB,CAAoBiC,MAAO,CAAP,IAAagK,IAAIW,CAAjB,CAAoB3K,MAAO,CAAP,IAAaiK,IAAIoI,CAAjB;AACxCrS,QAAO,CAAP,IAAaiK,IAAIlM,CAAjB,CAAoBiC,MAAO,EAAP,IAAcgK,IAAIW,CAAlB,CAAqB3K,MAAO,EAAP,IAAciK,IAAIoI,CAAlB;AACzCrS,QAAO,EAAP,IAAciK,IAAIlM,CAAlB,CAAqBiC,MAAO,EAAP,IAAciK,IAAIU,CAAlB,CAAqB3K,MAAO,EAAP,IAAcgK,IAAIqI,CAAlB;AAC1CrS,QAAO,EAAP,IAAcgK,IAAIjM,CAAlB,CAAqBiC,MAAO,EAAP,IAAciK,IAAIU,CAAlB,CAAqB3K,MAAO,EAAP,IAAcgK,IAAIqI,CAAlB;AAC1CrS,QAAO,EAAP,IAAcgK,IAAIjM,CAAlB,CAAqBiC,MAAO,EAAP,IAAcgK,IAAIW,CAAlB,CAAqB3K,MAAO,EAAP,IAAcgK,IAAIqI,CAAlB;AAC1CrS,QAAO,EAAP,IAAciK,IAAIlM,CAAlB,CAAqBiC,MAAO,EAAP,IAAcgK,IAAIW,CAAlB,CAAqB3K,MAAO,EAAP,IAAcgK,IAAIqI,CAAlB;;AAE1CmH,WAASs5B,WAAT,GAAuB,IAAvB;;AAEA,OAAKxpB,QAAL,CAAc2F,qBAAd;AAEA,EAnDD;AAqDA,CAzD4B,EAA7B;;AA2DA+lG,UAAU/2H,SAAV,CAAoBwqB,aAApB,GAAoC,UAAWC,MAAX,EAAoB;;AAEvD,MAAKA,MAAL,GAAcA,MAAd;AACA,MAAKlM,MAAL;;AAEA,QAAO,IAAP;AAEA,CAPD;;AASA;;;;AAIA,SAASy4G,UAAT,CAAqBrsG,GAArB,EAA0B4O,GAA1B,EAAgC;;AAE/B,MAAKp4B,IAAL,GAAY,YAAZ;;AAEA,MAAKwpB,GAAL,GAAWA,GAAX;;AAEA,KAAIoP,QAAUR,QAAQj6B,SAAV,GAAwBi6B,GAAxB,GAA8B,QAA1C;;AAEA,KAAI4S,UAAU,IAAI5J,WAAJ,CAAiB,CAAE,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgC,CAAhC,EAAmC,CAAnC,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,EAA+C,CAA/C,EAAkD,CAAlD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,EAA8D,CAA9D,EAAiE,CAAjE,EAAoE,CAApE,EAAuE,CAAvE,CAAjB,CAAd;;AAEA,KAAI6J,YAAY,CAAE,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAE,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAE,CAAxB,EAA2B,CAAE,CAA7B,EAAgC,CAAhC,EAAmC,CAAnC,EAAsC,CAAE,CAAxC,EAA2C,CAA3C,EAA8C,CAA9C,EAAiD,CAAjD,EAAoD,CAAE,CAAtD,EAAyD,CAAE,CAA3D,EAA8D,CAA9D,EAAiE,CAAE,CAAnE,EAAsE,CAAE,CAAxE,EAA2E,CAAE,CAA7E,EAAgF,CAAE,CAAlF,EAAqF,CAArF,EAAwF,CAAE,CAA1F,EAA6F,CAAE,CAA/F,CAAhB;;AAEA,KAAI/gB,WAAW,IAAI6oB,cAAJ,EAAf;;AAEA7oB,UAASipB,QAAT,CAAmB,IAAI7C,eAAJ,CAAqBtF,OAArB,EAA8B,CAA9B,CAAnB;;AAEA9gB,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAIpB,sBAAJ,CAA4B/G,SAA5B,EAAuC,CAAvC,CAAnC;;AAEAq4C,cAAazjF,IAAb,CAAmB,IAAnB,EAAyBqqB,QAAzB,EAAmC,IAAI+rC,iBAAJ,CAAuB,EAAEr9B,OAAOA,KAAT,EAAvB,CAAnC;;AAEA,MAAK1O,QAAL,CAAc2F,qBAAd;AAEA;;AAEDgmG,WAAWh3H,SAAX,GAAuBC,OAAO8lB,MAAP,CAAe0+D,aAAazkF,SAA5B,CAAvB;AACAg3H,WAAWh3H,SAAX,CAAqB0O,WAArB,GAAmCsoH,UAAnC;;AAEAA,WAAWh3H,SAAX,CAAqB0rB,iBAArB,GAAyC,UAAWwc,KAAX,EAAmB;;AAE3D,KAAIvd,MAAM,KAAKA,GAAf;;AAEA,KAAKA,IAAIC,OAAJ,EAAL,EAAqB;;AAErBD,KAAIE,SAAJ,CAAe,KAAKtP,QAApB;;AAEAoP,KAAIG,OAAJ,CAAa,KAAKxQ,KAAlB;;AAEA,MAAKA,KAAL,CAAW3K,cAAX,CAA2B,GAA3B;;AAEAs1B,UAASjlC,SAAT,CAAmB0rB,iBAAnB,CAAqC1qB,IAArC,CAA2C,IAA3C,EAAiDknC,KAAjD;AAEA,CAdD;;AAgBA;;;;AAIA,SAAS+uF,WAAT,CAAsB7qG,KAAtB,EAA6B9B,IAA7B,EAAmCiP,GAAnC,EAAyC;;AAExC,MAAKp4B,IAAL,GAAY,aAAZ;;AAEA,MAAKirB,KAAL,GAAaA,KAAb;;AAEA,MAAK9B,IAAL,GAAcA,SAAShrB,SAAX,GAAyB,CAAzB,GAA6BgrB,IAAzC;;AAEA,KAAIyP,QAAUR,QAAQj6B,SAAV,GAAwBi6B,GAAxB,GAA8B,QAA1C;;AAEA,KAAI6S,YAAY,CAAE,CAAF,EAAK,CAAE,CAAP,EAAU,CAAV,EAAa,CAAE,CAAf,EAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAE,CAA1B,EAA6B,CAAE,CAA/B,EAAkC,CAAlC,EAAqC,CAArC,EAAwC,CAAxC,EAA2C,CAA3C,EAA8C,CAAE,CAAhD,EAAmD,CAAnD,EAAsD,CAAtD,EAAyD,CAAE,CAA3D,EAA8D,CAAE,CAAhE,EAAmE,CAAnE,EAAsE,CAAtE,EAAyE,CAAE,CAA3E,EAA8E,CAA9E,EAAiF,CAAjF,EAAoF,CAApF,EAAuF,CAAvF,EAA0F,CAA1F,EAA6F,CAA7F,EAAgG,CAAhG,EAAmG,CAAnG,EAAsG,CAAtG,EAAyG,CAAzG,CAAhB;;AAEA,KAAI/gB,WAAW,IAAI6oB,cAAJ,EAAf;AACA7oB,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAIpB,sBAAJ,CAA4B/G,SAA5B,EAAuC,CAAvC,CAAnC;AACA/gB,UAAS2F,qBAAT;;AAEAwzD,MAAKxjF,IAAL,CAAW,IAAX,EAAiBqqB,QAAjB,EAA2B,IAAI+rC,iBAAJ,CAAuB,EAAEr9B,OAAOA,KAAT,EAAvB,CAA3B;;AAEA;;AAEA,KAAIm9F,aAAa,CAAE,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAE,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAE,CAAxB,EAA2B,CAAE,CAA7B,EAAgC,CAAhC,EAAmC,CAAnC,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAAE,CAA9C,EAAiD,CAAE,CAAnD,EAAsD,CAAtD,EAAyD,CAAzD,EAA4D,CAAE,CAA9D,EAAiE,CAAjE,CAAjB;;AAEA,KAAIlhF,YAAY,IAAI9B,cAAJ,EAAhB;AACA8B,WAAUzB,YAAV,CAAwB,UAAxB,EAAoC,IAAIpB,sBAAJ,CAA4B+jF,UAA5B,EAAwC,CAAxC,CAApC;AACAlhF,WAAUhlB,qBAAV;;AAEA,MAAKniB,GAAL,CAAU,IAAIwxC,IAAJ,CAAUrK,SAAV,EAAqB,IAAI0E,iBAAJ,CAAuB,EAAE3gB,OAAOA,KAAT,EAAgBwB,SAAS,GAAzB,EAA8B4c,aAAa,IAA3C,EAAiDS,YAAY,KAA7D,EAAvB,CAArB,CAAV;AAEA;;AAEDq+E,YAAYj3H,SAAZ,GAAwBC,OAAO8lB,MAAP,CAAey+D,KAAKxkF,SAApB,CAAxB;AACAi3H,YAAYj3H,SAAZ,CAAsB0O,WAAtB,GAAoCuoH,WAApC;;AAEAA,YAAYj3H,SAAZ,CAAsB0rB,iBAAtB,GAA0C,UAAWwc,KAAX,EAAmB;;AAE5D,KAAI5tB,QAAQ,CAAE,KAAK8R,KAAL,CAAWC,QAAzB;;AAEA,KAAK9sB,KAAKqR,GAAL,CAAU0J,KAAV,IAAoB,IAAzB,EAAgCA,QAAQ,IAAR,CAJ4B,CAId;;AAE9C,MAAKA,KAAL,CAAWtM,GAAX,CAAgB,MAAM,KAAKsc,IAA3B,EAAiC,MAAM,KAAKA,IAA5C,EAAkDhQ,KAAlD;;AAEA,MAAKxD,MAAL,CAAa,KAAKsV,KAAL,CAAWpJ,MAAxB;;AAEAiiB,UAASjlC,SAAT,CAAmB0rB,iBAAnB,CAAqC1qB,IAArC,CAA2C,IAA3C,EAAiDknC,KAAjD;AAEA,CAZD;;AAcA;;;;;;;;;;;;;;;;AAgBA,IAAIivF,YAAJ;AACA,IAAIC,YAAJ;;AAEA,SAASC,WAAT,CAAsBp5G,GAAtB,EAA2By9B,MAA3B,EAAmC96C,MAAnC,EAA2Cm5B,KAA3C,EAAkDu9F,UAAlD,EAA8DC,SAA9D,EAA0E;;AAEzE;;AAEAtyF,UAASjkC,IAAT,CAAe,IAAf;;AAEA,KAAK+4B,UAAUz6B,SAAf,EAA2By6B,QAAQ,QAAR;AAC3B,KAAKn5B,WAAWtB,SAAhB,EAA4BsB,SAAS,CAAT;AAC5B,KAAK02H,eAAeh4H,SAApB,EAAgCg4H,aAAa,MAAM12H,MAAnB;AAChC,KAAK22H,cAAcj4H,SAAnB,EAA+Bi4H,YAAY,MAAMD,UAAlB;;AAE/B,KAAKH,iBAAiB73H,SAAtB,EAAkC;;AAEjC63H,iBAAe,IAAIjjF,cAAJ,EAAf;AACAijF,eAAa5iF,YAAb,CAA2B,UAA3B,EAAuC,IAAIpB,sBAAJ,CAA4B,CAAE,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,CAA5B,EAAkD,CAAlD,CAAvC;;AAEAikF,iBAAe,IAAI3+B,sBAAJ,CAA4B,CAA5B,EAA+B,GAA/B,EAAoC,CAApC,EAAuC,CAAvC,EAA0C,CAA1C,CAAf;AACA2+B,eAAa7yG,SAAb,CAAwB,CAAxB,EAA2B,CAAE,GAA7B,EAAkC,CAAlC;AAEA;;AAED,MAAKhJ,QAAL,CAAc5M,IAAd,CAAoB+sC,MAApB;;AAEA,MAAKjtB,IAAL,GAAY,IAAI+1D,IAAJ,CAAU2yC,YAAV,EAAwB,IAAI//D,iBAAJ,CAAuB,EAAEr9B,OAAOA,KAAT,EAAvB,CAAxB,CAAZ;AACA,MAAKtL,IAAL,CAAUjJ,gBAAV,GAA6B,KAA7B;AACA,MAAK3W,GAAL,CAAU,KAAK4f,IAAf;;AAEA,MAAKwmG,IAAL,GAAY,IAAI50E,IAAJ,CAAU+2E,YAAV,EAAwB,IAAI18E,iBAAJ,CAAuB,EAAE3gB,OAAOA,KAAT,EAAvB,CAAxB,CAAZ;AACA,MAAKk7F,IAAL,CAAUzvG,gBAAV,GAA6B,KAA7B;AACA,MAAK3W,GAAL,CAAU,KAAKomH,IAAf;;AAEA,MAAKuC,YAAL,CAAmBv5G,GAAnB;AACA,MAAK5M,SAAL,CAAgBzQ,MAAhB,EAAwB02H,UAAxB,EAAoCC,SAApC;AAEA;;AAEDF,YAAYr3H,SAAZ,GAAwBC,OAAO8lB,MAAP,CAAekf,SAASjlC,SAAxB,CAAxB;AACAq3H,YAAYr3H,SAAZ,CAAsB0O,WAAtB,GAAoC2oH,WAApC;;AAEAA,YAAYr3H,SAAZ,CAAsBw3H,YAAtB,GAAuC,YAAY;;AAElD,KAAIv8G,OAAO,IAAI3G,OAAJ,EAAX;AACA,KAAI/G,OAAJ;;AAEA,QAAO,SAASiqH,YAAT,CAAuBv5G,GAAvB,EAA6B;;AAEnC;;AAEA,MAAKA,IAAIvR,CAAJ,GAAQ,OAAb,EAAuB;;AAEtB,QAAK8O,UAAL,CAAgBxN,GAAhB,CAAqB,CAArB,EAAwB,CAAxB,EAA2B,CAA3B,EAA8B,CAA9B;AAEA,GAJD,MAIO,IAAKiQ,IAAIvR,CAAJ,GAAQ,CAAE,OAAf,EAAyB;;AAE/B,QAAK8O,UAAL,CAAgBxN,GAAhB,CAAqB,CAArB,EAAwB,CAAxB,EAA2B,CAA3B,EAA8B,CAA9B;AAEA,GAJM,MAIA;;AAENiN,QAAKjN,GAAL,CAAUiQ,IAAI7J,CAAd,EAAiB,CAAjB,EAAoB,CAAE6J,IAAIne,CAA1B,EAA8B+Q,SAA9B;;AAEAtD,aAAUhO,KAAK2jB,IAAL,CAAWjF,IAAIvR,CAAf,CAAV;;AAEA,QAAK8O,UAAL,CAAgBsD,gBAAhB,CAAkC7D,IAAlC,EAAwC1N,OAAxC;AAEA;AAED,EAtBD;AAwBA,CA7BsC,EAAvC;;AA+BA8pH,YAAYr3H,SAAZ,CAAsBqR,SAAtB,GAAkC,UAAWzQ,MAAX,EAAmB02H,UAAnB,EAA+BC,SAA/B,EAA2C;;AAE5E,KAAKD,eAAeh4H,SAApB,EAAgCg4H,aAAa,MAAM12H,MAAnB;AAChC,KAAK22H,cAAcj4H,SAAnB,EAA+Bi4H,YAAY,MAAMD,UAAlB;;AAE/B,MAAK7oG,IAAL,CAAUnU,KAAV,CAAgBtM,GAAhB,CAAqB,CAArB,EAAwBzO,KAAKyM,GAAL,CAAU,CAAV,EAAapL,SAAS02H,UAAtB,CAAxB,EAA4D,CAA5D;AACA,MAAK7oG,IAAL,CAAUxI,YAAV;;AAEA,MAAKgvG,IAAL,CAAU36G,KAAV,CAAgBtM,GAAhB,CAAqBupH,SAArB,EAAgCD,UAAhC,EAA4CC,SAA5C;AACA,MAAKtC,IAAL,CAAU15G,QAAV,CAAmB7O,CAAnB,GAAuB9L,MAAvB;AACA,MAAKq0H,IAAL,CAAUhvG,YAAV;AAEA,CAZD;;AAcAoxG,YAAYr3H,SAAZ,CAAsBy3H,QAAtB,GAAiC,UAAW19F,KAAX,EAAmB;;AAEnD,MAAKtL,IAAL,CAAUoa,QAAV,CAAmB9O,KAAnB,CAAyBprB,IAAzB,CAA+BorB,KAA/B;AACA,MAAKk7F,IAAL,CAAUpsF,QAAV,CAAmB9O,KAAnB,CAAyBprB,IAAzB,CAA+BorB,KAA/B;AAEA,CALD;;AAOA;;;;;AAKA,SAAS29F,UAAT,CAAqBptG,IAArB,EAA4B;;AAE3BA,QAAOA,QAAQ,CAAf;;AAEA,KAAIiB,WAAW,CACd,CADc,EACX,CADW,EACR,CADQ,EACLjB,IADK,EACC,CADD,EACI,CADJ,EAEd,CAFc,EAEX,CAFW,EAER,CAFQ,EAEL,CAFK,EAEFA,IAFE,EAEI,CAFJ,EAGd,CAHc,EAGX,CAHW,EAGR,CAHQ,EAGL,CAHK,EAGF,CAHE,EAGCA,IAHD,CAAf;;AAMA,KAAIugB,SAAS,CACZ,CADY,EACT,CADS,EACN,CADM,EACH,CADG,EACA,GADA,EACK,CADL,EAEZ,CAFY,EAET,CAFS,EAEN,CAFM,EAEH,GAFG,EAEE,CAFF,EAEK,CAFL,EAGZ,CAHY,EAGT,CAHS,EAGN,CAHM,EAGH,CAHG,EAGA,GAHA,EAGK,CAHL,CAAb;;AAMA,KAAIxf,WAAW,IAAI6oB,cAAJ,EAAf;AACA7oB,UAASkpB,YAAT,CAAuB,UAAvB,EAAmC,IAAIpB,sBAAJ,CAA4B5nB,QAA5B,EAAsC,CAAtC,CAAnC;AACAF,UAASkpB,YAAT,CAAuB,OAAvB,EAAgC,IAAIpB,sBAAJ,CAA4BtI,MAA5B,EAAoC,CAApC,CAAhC;;AAEA,KAAIhC,WAAW,IAAIuuB,iBAAJ,CAAuB,EAAE1sB,cAAclnC,YAAhB,EAAvB,CAAf;;AAEAihF,cAAazjF,IAAb,CAAmB,IAAnB,EAAyBqqB,QAAzB,EAAmCwd,QAAnC;AAEA;;AAED6uF,WAAW13H,SAAX,GAAuBC,OAAO8lB,MAAP,CAAe0+D,aAAazkF,SAA5B,CAAvB;AACA03H,WAAW13H,SAAX,CAAqB0O,WAArB,GAAmCgpH,UAAnC;;AAEA;;;;AAIA,SAASC,KAAT,CAAgBvoH,CAAhB,EAAmBC,CAAnB,EAAsB+C,CAAtB,EAAyByC,CAAzB,EAA4BmO,MAA5B,EAAoC+W,KAApC,EAA2CyQ,aAA3C,EAA2D;;AAE1Dz7B,SAAQC,IAAR,CAAc,sEAAd;AACA,QAAO,IAAIu7B,KAAJ,CAAWn7B,CAAX,EAAcC,CAAd,EAAiB+C,CAAjB,EAAoB4Q,MAApB,EAA4B+W,KAA5B,EAAmCyQ,aAAnC,CAAP;AAEA;;AAED,IAAIotF,YAAY,CAAhB;;AAEA,IAAIC,aAAa,CAAjB;;AAEA,SAASC,gBAAT,CAA2B1vF,SAA3B,EAAuC;;AAEtCr5B,SAAQC,IAAR,CAAc,gEAAd;AACA,QAAOo5B,SAAP;AAEA;;AAED,SAAS2vF,aAAT,CAAwB3vF,SAAxB,EAAoC;;AAEnC,KAAKA,cAAc9oC,SAAnB,EAA+B8oC,YAAY,EAAZ;;AAE/Br5B,SAAQC,IAAR,CAAc,6DAAd;AACAo5B,WAAUga,eAAV,GAA4B,IAA5B;AACAha,WAAUA,SAAV,GAAsBA,SAAtB;AACAA,WAAU35B,KAAV,GAAkB,YAAY;;AAE7B,SAAO25B,UAAUpmC,KAAV,EAAP;AAEA,EAJD;AAKA,QAAOomC,SAAP;AAEA;;AAED,SAASgrF,UAAT,CAAqB/nG,QAArB,EAA+Bwd,QAA/B,EAA0C;;AAEzC95B,SAAQC,IAAR,CAAc,oDAAd;AACA,QAAO,IAAIs2E,MAAJ,CAAYj6D,QAAZ,EAAsBwd,QAAtB,CAAP;AAEA;;AAED,SAASmvF,QAAT,CAAmBnvF,QAAnB,EAA8B;;AAE7B95B,SAAQC,IAAR,CAAc,kDAAd;AACA,QAAO,IAAIqzE,MAAJ,CAAYx5C,QAAZ,CAAP;AAEA;;AAED,SAASovF,cAAT,CAAyB5sG,QAAzB,EAAmCwd,QAAnC,EAA8C;;AAE7C95B,SAAQC,IAAR,CAAc,wDAAd;AACA,QAAO,IAAIs2E,MAAJ,CAAYj6D,QAAZ,EAAsBwd,QAAtB,CAAP;AAEA;;AAED,SAASqvF,kBAAT,CAA6BvvF,UAA7B,EAA0C;;AAEzC55B,SAAQC,IAAR,CAAc,oEAAd;AACA,QAAO,IAAIsoD,cAAJ,CAAoB3uB,UAApB,CAAP;AAEA;;AAED,SAASwvF,qBAAT,CAAgCxvF,UAAhC,EAA6C;;AAE5C55B,SAAQC,IAAR,CAAc,uEAAd;AACA,QAAO,IAAIsoD,cAAJ,CAAoB3uB,UAApB,CAAP;AAEA;;AAED,SAASyvF,sBAAT,CAAiCzvF,UAAjC,EAA8C;;AAE7C55B,SAAQC,IAAR,CAAc,wEAAd;AACA,QAAO,IAAIsoD,cAAJ,CAAoB3uB,UAApB,CAAP;AAEA;;AAED,SAAS0vF,MAAT,CAAiBv4H,CAAjB,EAAoB4M,CAApB,EAAuB0H,CAAvB,EAA2B;;AAE1BrF,SAAQC,IAAR,CAAc,2DAAd;AACA,QAAO,IAAIsF,OAAJ,CAAaxU,CAAb,EAAgB4M,CAAhB,EAAmB0H,CAAnB,CAAP;AAEA;;AAED;;AAEA,SAASkkH,sBAAT,CAAiCv2H,KAAjC,EAAwC2vC,QAAxC,EAAmD;;AAElD3iC,SAAQC,IAAR,CAAc,4GAAd;AACA,QAAO,IAAIyiC,eAAJ,CAAqB1vC,KAArB,EAA4B2vC,QAA5B,EAAuCI,UAAvC,CAAmD,IAAnD,CAAP;AAEA;;AAED,SAASymF,aAAT,CAAwBx2H,KAAxB,EAA+B2vC,QAA/B,EAA0C;;AAEzC3iC,SAAQC,IAAR,CAAc,oFAAd;AACA,QAAO,IAAI2jC,mBAAJ,CAAyB5wC,KAAzB,EAAgC2vC,QAAhC,CAAP;AAEA;;AAED,SAAS8mF,cAAT,CAAyBz2H,KAAzB,EAAgC2vC,QAAhC,EAA2C;;AAE1C3iC,SAAQC,IAAR,CAAc,sFAAd;AACA,QAAO,IAAI4jC,oBAAJ,CAA0B7wC,KAA1B,EAAiC2vC,QAAjC,CAAP;AAEA;;AAED,SAAS+mF,qBAAT,CAAgC12H,KAAhC,EAAuC2vC,QAAvC,EAAkD;;AAEjD3iC,SAAQC,IAAR,CAAc,oGAAd;AACA,QAAO,IAAI6jC,2BAAJ,CAAiC9wC,KAAjC,EAAwC2vC,QAAxC,CAAP;AAEA;;AAED,SAASgnF,cAAT,CAAyB32H,KAAzB,EAAgC2vC,QAAhC,EAA2C;;AAE1C3iC,SAAQC,IAAR,CAAc,sFAAd;AACA,QAAO,IAAI+jC,oBAAJ,CAA0BhxC,KAA1B,EAAiC2vC,QAAjC,CAAP;AAEA;;AAED,SAASinF,eAAT,CAA0B52H,KAA1B,EAAiC2vC,QAAjC,EAA4C;;AAE3C3iC,SAAQC,IAAR,CAAc,wFAAd;AACA,QAAO,IAAIgkC,qBAAJ,CAA2BjxC,KAA3B,EAAkC2vC,QAAlC,CAAP;AAEA;;AAED,SAASknF,cAAT,CAAyB72H,KAAzB,EAAgC2vC,QAAhC,EAA2C;;AAE1C3iC,SAAQC,IAAR,CAAc,sFAAd;AACA,QAAO,IAAIikC,oBAAJ,CAA0BlxC,KAA1B,EAAiC2vC,QAAjC,CAAP;AAEA;;AAED,SAASmnF,eAAT,CAA0B92H,KAA1B,EAAiC2vC,QAAjC,EAA4C;;AAE3C3iC,SAAQC,IAAR,CAAc,wFAAd;AACA,QAAO,IAAIkkC,qBAAJ,CAA2BnxC,KAA3B,EAAkC2vC,QAAlC,CAAP;AAEA;;AAED,SAASonF,gBAAT,CAA2B/2H,KAA3B,EAAkC2vC,QAAlC,EAA6C;;AAE5C3iC,SAAQC,IAAR,CAAc,0FAAd;AACA,QAAO,IAAImkC,sBAAJ,CAA4BpxC,KAA5B,EAAmC2vC,QAAnC,CAAP;AAEA;;AAED,SAASqnF,gBAAT,CAA2Bh3H,KAA3B,EAAkC2vC,QAAlC,EAA6C;;AAE5C3iC,SAAQC,IAAR,CAAc,0FAAd;AACA,QAAO,IAAIokC,sBAAJ,CAA4BrxC,KAA5B,EAAmC2vC,QAAnC,CAAP;AAEA;;AAED;;AAEA2sD,MAAMt4E,MAAN,GAAe,UAAWizG,SAAX,EAAsBz6B,QAAtB,EAAiC;;AAE/CxvF,SAAQpB,GAAR,CAAa,0CAAb;;AAEAqrH,WAAUh5H,SAAV,GAAsBC,OAAO8lB,MAAP,CAAes4E,MAAMr+F,SAArB,CAAtB;AACAg5H,WAAUh5H,SAAV,CAAoB0O,WAApB,GAAkCsqH,SAAlC;AACAA,WAAUh5H,SAAV,CAAoBu+F,QAApB,GAA+BA,QAA/B;;AAEA,QAAOy6B,SAAP;AAEA,CAVD;;AAYA;;AAEA/4H,OAAOK,MAAP,CAAeyjG,UAAU/jG,SAAzB,EAAoC;;AAEnCi5H,uBAAsB,UAAWt6B,SAAX,EAAuB;;AAE5C5vF,UAAQC,IAAR,CAAc,sHAAd;;AAEA;;AAEA,MAAIwgF,MAAM,KAAKkP,SAAL,CAAgBC,SAAhB,CAAV;AACA,SAAO,KAAKu6B,cAAL,CAAqB1pC,GAArB,CAAP;AAEA,EAXkC;;AAanC2pC,6BAA4B,UAAWx6B,SAAX,EAAuB;;AAElD5vF,UAAQC,IAAR,CAAc,4HAAd;;AAEA;;AAEA,MAAIwgF,MAAM,KAAK4B,eAAL,CAAsBuN,SAAtB,CAAV;AACA,SAAO,KAAKu6B,cAAL,CAAqB1pC,GAArB,CAAP;AAEA,EAtBkC;;AAwBnC0pC,iBAAgB,UAAWjvG,MAAX,EAAoB;;AAEnClb,UAAQC,IAAR,CAAc,gHAAd;;AAEA,MAAIqc,WAAW,IAAIuf,QAAJ,EAAf;;AAEA,OAAM,IAAI3oC,IAAI,CAAR,EAAWC,IAAI+nB,OAAOrpB,MAA5B,EAAoCqB,IAAIC,CAAxC,EAA2CD,GAA3C,EAAkD;;AAEjD,OAAI8oB,QAAQd,OAAQhoB,CAAR,CAAZ;AACAopB,YAASE,QAAT,CAAkB/pB,IAAlB,CAAwB,IAAI8S,OAAJ,CAAayW,MAAMjrB,CAAnB,EAAsBirB,MAAMre,CAA5B,EAA+Bqe,MAAM3W,CAAN,IAAW,CAA1C,CAAxB;AAEA;;AAED,SAAOiX,QAAP;AAEA;;AAvCkC,CAApC;;AA2CA;;AAEAprB,OAAOK,MAAP,CAAeskG,KAAK5kG,SAApB,EAA+B;;AAE9Bo5H,aAAY,UAAWnvG,MAAX,EAAoB;;AAE/Blb,UAAQC,IAAR,CAAc,iEAAd;AACA,OAAKgb,aAAL,CAAoBC,MAApB;AAEA;;AAP6B,CAA/B;;AAWA;;AAEA,SAASovG,kBAAT,CAA6BpvG,MAA7B,EAAsC;;AAErClb,SAAQC,IAAR,CAAc,mFAAd;;AAEA+yF,kBAAiB/gG,IAAjB,CAAuB,IAAvB,EAA6BipB,MAA7B;AACA,MAAK9oB,IAAL,GAAY,YAAZ;AACA,MAAKgoF,MAAL,GAAc,IAAd;AAEA;;AAEDkwC,mBAAmBr5H,SAAnB,GAA+BC,OAAO8lB,MAAP,CAAeg8E,iBAAiB/hG,SAAhC,CAA/B;;AAEA;;AAEA,SAASs5H,YAAT,CAAuBrvG,MAAvB,EAAgC;;AAE/Blb,SAAQC,IAAR,CAAc,6EAAd;;AAEA+yF,kBAAiB/gG,IAAjB,CAAuB,IAAvB,EAA6BipB,MAA7B;AACA,MAAK9oB,IAAL,GAAY,YAAZ;AAEA;;AAEDm4H,aAAat5H,SAAb,GAAyBC,OAAO8lB,MAAP,CAAeg8E,iBAAiB/hG,SAAhC,CAAzB;;AAEA;;AAEA,SAASu5H,MAAT,CAAiBtvG,MAAjB,EAA0B;;AAEzBlb,SAAQC,IAAR,CAAc,oEAAd;;AAEA+yF,kBAAiB/gG,IAAjB,CAAuB,IAAvB,EAA6BipB,MAA7B;AACA,MAAK9oB,IAAL,GAAY,YAAZ;AAEA;;AAEDo4H,OAAOv5H,SAAP,GAAmBC,OAAO8lB,MAAP,CAAeg8E,iBAAiB/hG,SAAhC,CAAnB;;AAEAC,OAAOK,MAAP,CAAei5H,OAAOv5H,SAAtB,EAAiC;;AAEhCw5H,gBAAe,YAAW,OAAU;;AAEnCzqH,UAAQyD,KAAR,CAAe,kDAAf;AAEA,EAN+B;AAOhCinH,wBAAuB,YAAW,oBAAuB;;AAExD1qH,UAAQyD,KAAR,CAAe,0DAAf;AAEA,EAX+B;AAYhCknH,2BAA0B,YAAW,kBAAqB;;AAEzD3qH,UAAQyD,KAAR,CAAe,6DAAf;AAEA;;AAhB+B,CAAjC;;AAoBA;;AAEA,SAASmnH,UAAT,CAAqBrvG,IAArB,EAA4B;;AAE3Bvb,SAAQC,IAAR,CAAc,wDAAd;AACA,QAAO,IAAI0oH,UAAJ,CAAgBptG,IAAhB,CAAP;AAEA;;AAED,SAASsvG,iBAAT,CAA4BnvG,MAA5B,EAAoCsP,KAApC,EAA4C;;AAE3ChrB,SAAQC,IAAR,CAAc,kFAAd;AACA,QAAO,IAAI+nH,SAAJ,CAAetsG,MAAf,EAAuBsP,KAAvB,CAAP;AAEA;;AAED,SAAS8/F,WAAT,CAAsBpvG,MAAtB,EAA8B8O,GAA9B,EAAoC;;AAEnCxqB,SAAQC,IAAR,CAAc,sEAAd;AACA,QAAO,IAAIy1E,YAAJ,CAAkB,IAAIsT,aAAJ,CAAmBttE,OAAOY,QAA1B,CAAlB,EAAwD,IAAI+rC,iBAAJ,CAAuB,EAAEr9B,OAAOR,QAAQj6B,SAAR,GAAoBi6B,GAApB,GAA0B,QAAnC,EAAvB,CAAxD,CAAP;AAEA;;AAEDs8F,WAAW71H,SAAX,CAAqB85H,SAArB,GAAiC,YAAY;;AAE5C/qH,SAAQyD,KAAR,CAAe,0FAAf;AAEA,CAJD;;AAMA8iH,eAAet1H,SAAf,CAAyBue,MAAzB,GAAkC,YAAY;;AAE7CxP,SAAQyD,KAAR,CAAe,8DAAf;AAEA,CAJD;;AAMA,SAASunH,eAAT,CAA0BtvG,MAA1B,EAAkC8O,GAAlC,EAAwC;;AAEvCxqB,SAAQC,IAAR,CAAc,8EAAd;AACA,QAAO,IAAIy1E,YAAJ,CAAkB,IAAI6B,iBAAJ,CAAuB77D,OAAOY,QAA9B,CAAlB,EAA4D,IAAI+rC,iBAAJ,CAAuB,EAAEr9B,OAAOR,QAAQj6B,SAAR,GAAoBi6B,GAApB,GAA0B,QAAnC,EAAvB,CAA5D,CAAP;AAEA;;AAED;;AAEAt5B,OAAOK,MAAP,CAAeswG,OAAO5wG,SAAtB,EAAiC;;AAEhCw0G,iBAAgB,UAAWjtF,GAAX,EAAiB;;AAEhCxY,UAAQC,IAAR,CAAc,sGAAd;AACA,SAAOklG,YAAYM,cAAZ,CAA4BjtF,GAA5B,CAAP;AAEA;;AAP+B,CAAjC;;AAWA,SAASyyG,SAAT,CAAoBh/B,OAApB,EAA8B;;AAE7BjsF,SAAQC,IAAR,CAAc,uDAAd;AACA,QAAO,IAAI+rF,UAAJ,CAAgBC,OAAhB,CAAP;AAEA;;AAED,SAASi/B,mBAAT,CAA8Bj/B,OAA9B,EAAwC;;AAEvCjsF,SAAQC,IAAR,CAAc,wEAAd;AACA,QAAO,IAAIyuF,iBAAJ,CAAuBzC,OAAvB,CAAP;AAEA;;AAED;;AAEA/6F,OAAOK,MAAP,CAAem0H,KAAKz0H,SAApB,EAA+B;;AAE9BmS,SAAQ,UAAWqsF,cAAX,EAA4B;;AAEnCzvF,UAAQC,IAAR,CAAc,yDAAd;AACA,SAAO,KAAK6b,SAAL,CAAgB2zE,cAAhB,CAAP;AAEA,EAP6B;AAQ9B3wE,QAAO,YAAY;;AAElB9e,UAAQC,IAAR,CAAc,sDAAd;AACA,SAAO,KAAK4b,OAAL,EAAP;AAEA,EAb6B;AAc9BsvG,oBAAmB,UAAWvvG,GAAX,EAAiB;;AAEnC5b,UAAQC,IAAR,CAAc,wEAAd;AACA,SAAO,KAAK8c,aAAL,CAAoBnB,GAApB,CAAP;AAEA,EAnB6B;AAoB9BL,OAAM,UAAWk0E,cAAX,EAA4B;;AAEjCzvF,UAAQC,IAAR,CAAc,qDAAd;AACA,SAAO,KAAK8b,OAAL,CAAc0zE,cAAd,CAAP;AAEA;AAzB6B,CAA/B;;AA4BAv+F,OAAOK,MAAP,CAAe+oB,KAAKrpB,SAApB,EAA+B;;AAE9BmS,SAAQ,UAAWqsF,cAAX,EAA4B;;AAEnCzvF,UAAQC,IAAR,CAAc,yDAAd;AACA,SAAO,KAAK6b,SAAL,CAAgB2zE,cAAhB,CAAP;AAEA,EAP6B;AAQ9B3wE,QAAO,YAAY;;AAElB9e,UAAQC,IAAR,CAAc,sDAAd;AACA,SAAO,KAAK4b,OAAL,EAAP;AAEA,EAb6B;AAc9BsvG,oBAAmB,UAAWvvG,GAAX,EAAiB;;AAEnC5b,UAAQC,IAAR,CAAc,wEAAd;AACA,SAAO,KAAK8c,aAAL,CAAoBnB,GAApB,CAAP;AAEA,EAnB6B;AAoB9BwvG,uBAAsB,UAAWluG,MAAX,EAAoB;;AAEzCld,UAAQC,IAAR,CAAc,8EAAd;AACA,SAAO,KAAK+c,gBAAL,CAAuBE,MAAvB,CAAP;AAEA,EAzB6B;AA0B9B3B,OAAM,UAAWk0E,cAAX,EAA4B;;AAEjCzvF,UAAQC,IAAR,CAAc,qDAAd;AACA,SAAO,KAAK8b,OAAL,CAAc0zE,cAAd,CAAP;AAEA;AA/B6B,CAA/B;;AAkCAhgD,MAAMx+C,SAAN,CAAgBmS,MAAhB,GAAyB,UAAWqsF,cAAX,EAA4B;;AAEpDzvF,SAAQC,IAAR,CAAc,0DAAd;AACA,QAAO,KAAK6b,SAAL,CAAgB2zE,cAAhB,CAAP;AAEA,CALD;;AAOAv+F,OAAOK,MAAP,CAAe2K,KAAf,EAAsB;;AAErBmvH,WAAU,YAAY;;AAErBrrH,UAAQC,IAAR,CAAc,yEAAd;AACA,SAAOzP,KAAKiM,MAAL,EAAP;AAEA,EAPoB;;AASrB6uH,oBAAmB,UAAW36H,KAAX,EAAmB;;AAErCqP,UAAQC,IAAR,CAAc,0EAAd;AACA,SAAO/D,MAAM4C,eAAN,CAAuBnO,KAAvB,CAAP;AAEA,EAdoB;;AAgBrB46H,iBAAgB,UAAW56H,KAAX,EAAmB;;AAElCqP,UAAQC,IAAR,CAAc,sEAAd;AACA,SAAO/D,MAAMwC,cAAN,CAAsB/N,KAAtB,CAAP;AAEA;;AArBoB,CAAtB;;AAyBAO,OAAOK,MAAP,CAAeqjB,QAAQ3jB,SAAvB,EAAkC;;AAEjCu6H,uBAAsB,UAAWx4H,KAAX,EAAkB6P,MAAlB,EAA2B;;AAEhD7C,UAAQC,IAAR,CAAc,qFAAd;AACA,SAAO,KAAK6C,OAAL,CAAc9P,KAAd,EAAqB6P,MAArB,CAAP;AAEA,EAPgC;AAQjC4oH,kBAAiB,UAAW9+G,MAAX,EAAoB;;AAEpC3M,UAAQC,IAAR,CAAc,gGAAd;AACA,SAAO0M,OAAO5L,YAAP,CAAqB,IAArB,CAAP;AAEA,EAbgC;AAcjC2qH,uBAAsB,YAAW,OAAU;;AAE1C1rH,UAAQyD,KAAR,CAAe,0DAAf;AAEA,EAlBgC;AAmBjCkoH,gBAAe,UAAW14F,MAAX,CAAkB,qBAAlB,EAA0C;;AAExDjzB,UAAQC,IAAR,CAAc,2GAAd;AACA,SAAO,KAAKoK,sBAAL,CAA6B4oB,MAA7B,CAAP;AAEA,EAxBgC;AAyBjC24F,sBAAqB,YAAW,2BAA8B;;AAE7D5rH,UAAQyD,KAAR,CAAe,yDAAf;AAEA;;AA7BgC,CAAlC;;AAiCAvS,OAAOK,MAAP,CAAeiS,QAAQvS,SAAvB,EAAkC;;AAEjC46H,kBAAiB,UAAWzuH,CAAX,EAAe;;AAE/B4C,UAAQC,IAAR,CAAc,wEAAd;AACA,SAAO,KAAK6E,YAAL,CAAmB1H,CAAnB,CAAP;AAEA,EAPgC;AAQjCouH,uBAAsB,UAAWx4H,KAAX,EAAkB6P,MAAlB,EAA2B;;AAEhD7C,UAAQC,IAAR,CAAc,qFAAd;AACA,SAAO,KAAK6C,OAAL,CAAc9P,KAAd,EAAqB6P,MAArB,CAAP;AAEA,EAbgC;AAcjCipH,cAAa,YAAY;;AAExB,MAAIrpH,EAAJ;;AAEA,SAAO,SAASqpH,WAAT,GAAuB;;AAE7B,OAAKrpH,OAAOlS,SAAZ,EAAwBkS,KAAK,IAAI8C,OAAJ,EAAL;AACxBvF,WAAQC,IAAR,CAAc,sGAAd;AACA,UAAOwC,GAAG0C,mBAAH,CAAwB,IAAxB,EAA8B,CAA9B,CAAP;AAEA,GAND;AAQA,EAZY,EAdoB;AA2BjCsyB,4BAA2B,UAAW3wB,CAAX,EAAe;;AAEzC9G,UAAQC,IAAR,CAAc,gGAAd;AACA,SAAO,KAAK4G,0BAAL,CAAiCC,CAAjC,CAAP;AAEA,EAhCgC;AAiCjCilH,kBAAiB,YAAY;;AAE5B/rH,UAAQC,IAAR,CAAc,qDAAd;AAEA,EArCgC;AAsCjCwrH,kBAAiB,UAAW9+G,MAAX,EAAoB;;AAEpC3M,UAAQC,IAAR,CAAc,gGAAd;AACA,SAAO0M,OAAOnC,YAAP,CAAqB,IAArB,CAAP;AAEA,EA3CgC;AA4CjCwhH,kBAAiB,UAAWr/G,MAAX,EAAoB;;AAEpC3M,UAAQC,IAAR,CAAc,gGAAd;AACA,SAAO0M,OAAOnC,YAAP,CAAqB,IAArB,CAAP;AAEA,EAjDgC;AAkDjCkhH,uBAAsB,YAAW,OAAU;;AAE1C1rH,UAAQyD,KAAR,CAAe,0DAAf;AAEA,EAtDgC;AAuDjCwoH,aAAY,UAAWpsH,CAAX,EAAe;;AAE1BG,UAAQC,IAAR,CAAc,kGAAd;AACAJ,IAAEwT,kBAAF,CAAsB,IAAtB;AAEA,EA5DgC;AA6DjC64G,cAAa,UAAWv/G,MAAX,EAAoB;;AAEhC3M,UAAQC,IAAR,CAAc,4FAAd;AACA,SAAO0M,OAAOnC,YAAP,CAAqB,IAArB,CAAP;AAEA,EAlEgC;AAmEjCgL,YAAW,YAAY;;AAEtBxV,UAAQyD,KAAR,CAAe,+CAAf;AAEA,EAvEgC;AAwEjCo0B,UAAS,YAAY;;AAEpB73B,UAAQyD,KAAR,CAAe,6CAAf;AAEA,EA5EgC;AA6EjCq0B,UAAS,YAAY;;AAEpB93B,UAAQyD,KAAR,CAAe,6CAAf;AAEA,EAjFgC;AAkFjCs0B,UAAS,YAAY;;AAEpB/3B,UAAQyD,KAAR,CAAe,6CAAf;AAEA,EAtFgC;AAuFjC0oH,eAAc,YAAY;;AAEzBnsH,UAAQyD,KAAR,CAAe,kDAAf;AAEA,EA3FgC;AA4FjCkoH,gBAAe,UAAW14F,MAAX,CAAkB,qBAAlB,EAA0C;;AAExDjzB,UAAQC,IAAR,CAAc,2GAAd;AACA,SAAO,KAAKoK,sBAAL,CAA6B4oB,MAA7B,CAAP;AAEA,EAjGgC;AAkGjC24F,sBAAqB,YAAW,2BAA8B;;AAE7D5rH,UAAQyD,KAAR,CAAe,yDAAf;AAEA,EAtGgC;AAuGjC2oH,cAAa,UAAW/+G,IAAX,EAAiBC,KAAjB,EAAwBE,MAAxB,EAAgCD,GAAhC,EAAqCE,IAArC,EAA2CC,GAA3C,EAAiD;;AAE7D1N,UAAQC,IAAR,CAAc,sHAAd;AACA,SAAO,KAAKmN,eAAL,CAAsBC,IAAtB,EAA4BC,KAA5B,EAAmCC,GAAnC,EAAwCC,MAAxC,EAAgDC,IAAhD,EAAsDC,GAAtD,CAAP;AAEA;;AA5GgC,CAAlC;;AAgHAwR,MAAMjuB,SAAN,CAAgBo7H,kBAAhB,GAAqC,UAAW3sG,IAAX,EAAkB;;AAEtD1f,SAAQC,IAAR,CAAc,2EAAd;AACA,QAAO,KAAK8f,cAAL,CAAqBL,IAArB,CAAP;AAEA,CALD;;AAOA5R,WAAW7c,SAAX,CAAqBw6H,eAArB,GAAuC,UAAW9+G,MAAX,EAAoB;;AAE1D3M,SAAQC,IAAR,CAAc,iHAAd;AACA,QAAO0M,OAAO2F,eAAP,CAAwB,IAAxB,CAAP;AAEA,CALD;;AAOAphB,OAAOK,MAAP,CAAem7C,IAAIz7C,SAAnB,EAA8B;;AAE7Bk6H,oBAAmB,UAAWvvG,GAAX,EAAiB;;AAEnC5b,UAAQC,IAAR,CAAc,uEAAd;AACA,SAAO,KAAK8c,aAAL,CAAoBnB,GAApB,CAAP;AAEA,EAP4B;AAQ7B0wG,sBAAqB,UAAWjvG,KAAX,EAAmB;;AAEvCrd,UAAQC,IAAR,CAAc,2EAAd;AACA,SAAO,KAAKmd,eAAL,CAAsBC,KAAtB,CAAP;AAEA,EAb4B;AAc7B+tG,uBAAsB,UAAWluG,MAAX,EAAoB;;AAEzCld,UAAQC,IAAR,CAAc,6EAAd;AACA,SAAO,KAAK+c,gBAAL,CAAuBE,MAAvB,CAAP;AAEA;;AAnB4B,CAA9B;;AAuBAhsB,OAAOK,MAAP,CAAe0+C,SAASh/C,SAAxB,EAAmC;;AAElCosF,OAAM,YAAY;;AAEjBr9E,UAAQC,IAAR,CAAc,yDAAd;AACA,SAAO,KAAK+wC,OAAL,EAAP;AAEA,EAPiC;AAQlCu7E,qBAAoB,UAAWvwG,KAAX,EAAkBxqB,MAAlB,EAA2B;;AAE9CwO,UAAQC,IAAR,CAAc,4EAAd;AACA,SAAO,KAAKmwC,YAAL,CAAmBp0B,KAAnB,EAA0BxqB,MAA1B,CAAP;AAEA,EAbiC;AAclCg7H,WAAU,UAAWh7H,MAAX,EAAoB;;AAE7BwO,UAAQC,IAAR,CAAc,iEAAd;AACA,SAAO,KAAKgxC,WAAL,CAAkBz/C,MAAlB,CAAP;AAEA,EAnBiC;AAoBlCyiB,SAAQ,UAAWziB,MAAX,EAAoB;;AAE3BwO,UAAQC,IAAR,CAAc,6DAAd;AACA,SAAO,KAAKiwC,SAAL,CAAgB1+C,MAAhB,CAAP;AAEA,EAzBiC;AA0BlC6rB,QAAO,UAAW7rB,MAAX,EAAoB;;AAE1BwO,UAAQC,IAAR,CAAc,2DAAd;AACA,SAAO,KAAKixC,QAAL,CAAe1/C,MAAf,CAAP;AAEA;;AA/BiC,CAAnC;;AAmCAN,OAAOK,MAAP,CAAe0+C,QAAf,EAAyB;;AAExBs8E,qBAAoB,UAAWvwG,KAAX,EAAkB3b,CAAlB,EAAqBC,CAArB,EAAwB+C,CAAxB,EAA2B7R,MAA3B,EAAoC;;AAEvDwO,UAAQC,IAAR,CAAc,4EAAd;AACA,SAAOgwC,SAASG,YAAT,CAAuBp0B,KAAvB,EAA8B3b,CAA9B,EAAiCC,CAAjC,EAAoC+C,CAApC,EAAuC7R,MAAvC,CAAP;AAEA,EAPuB;AAQxByiB,SAAQ,UAAW5T,CAAX,EAAcC,CAAd,EAAiB+C,CAAjB,EAAoB7R,MAApB,EAA6B;;AAEpCwO,UAAQC,IAAR,CAAc,6DAAd;AACA,SAAOgwC,SAASC,SAAT,CAAoB7vC,CAApB,EAAuBC,CAAvB,EAA0B+C,CAA1B,EAA6B7R,MAA7B,CAAP;AAEA;;AAbuB,CAAzB;;AAiBAN,OAAOK,MAAP,CAAeylG,MAAM/lG,SAArB,EAAgC;;AAE/Bw7H,mBAAkB,UAAW78B,SAAX,EAAuB;;AAExC5vF,UAAQC,IAAR,CAAc,kFAAd;AACA,SAAO,KAAKwiF,aAAL,CAAoBmN,SAApB,CAAP;AAEA,EAP8B;AAQ/B88B,UAAS,UAAWrzG,OAAX,EAAqB;;AAE7BrZ,UAAQC,IAAR,CAAc,0EAAd;AACA,SAAO,IAAI+gF,eAAJ,CAAqB,IAArB,EAA2B3nE,OAA3B,CAAP;AAEA,EAb8B;AAc/BszG,eAAc,UAAWtzG,OAAX,EAAqB;;AAElCrZ,UAAQC,IAAR,CAAc,6EAAd;AACA,SAAO,IAAIyoF,aAAJ,CAAmB,IAAnB,EAAyBrvE,OAAzB,CAAP;AAEA;;AAnB8B,CAAhC;;AAuBAnoB,OAAOK,MAAP,CAAewN,QAAQ9N,SAAvB,EAAkC;;AAEjC27H,gBAAe,UAAW5pH,SAAX,EAAsBrR,KAAtB,EAA6BkR,MAA7B,EAAsC;;AAEpD7C,UAAQC,IAAR,CAAc,6EAAd;AACA,SAAO,KAAK8C,mBAAL,CAA0BC,SAA1B,EAAqCrR,KAArC,EAA4CkR,MAA5C,CAAP;AAEA,EAPgC;AAQjCgqH,sBAAqB,UAAWhtH,CAAX,EAAe;;AAEnCG,UAAQC,IAAR,CAAc,mFAAd;AACA,SAAO,KAAKoC,mBAAL,CAA0BxC,CAA1B,CAAP;AAEA,EAbgC;AAcjCitH,kBAAiB,YAAY;;AAE5B9sH,UAAQC,IAAR,CAAc,2EAAd;AACA,SAAO,KAAK2B,eAAL,EAAP;AAEA;;AAnBgC,CAAlC;;AAuBA1Q,OAAOK,MAAP,CAAegU,QAAQtU,SAAvB,EAAkC;;AAEjC87H,6BAA4B,YAAY;;AAEvC/sH,UAAQyD,KAAR,CAAe,2GAAf;AAEA,EANgC;AAOjCupH,yBAAwB,YAAY;;AAEnChtH,UAAQyD,KAAR,CAAe,mGAAf;AAEA,EAXgC;AAYjCwpH,wBAAuB,UAAW7vH,CAAX,EAAe;;AAErC4C,UAAQC,IAAR,CAAc,uFAAd;AACA,SAAO,KAAKyU,qBAAL,CAA4BtX,CAA5B,CAAP;AAEA,EAjBgC;AAkBjC8vH,qBAAoB,UAAW9vH,CAAX,EAAe;;AAElC4C,UAAQC,IAAR,CAAc,iFAAd;AACA,SAAO,KAAK0U,kBAAL,CAAyBvX,CAAzB,CAAP;AAEA,EAvBgC;AAwBjC+vH,sBAAqB,UAAWx7H,KAAX,EAAkBib,MAAlB,EAA2B;;AAE/C5M,UAAQC,IAAR,CAAc,mFAAd;AACA,SAAO,KAAKkF,mBAAL,CAA0ByH,MAA1B,EAAkCjb,KAAlC,CAAP;AAEA,EA7BgC;AA8BjCy7H,kBAAiB,UAAWhwH,CAAX,EAAe;;AAE/B4C,UAAQC,IAAR,CAAc,qFAAd;AACA,SAAO,KAAKuK,YAAL,CAAmBpN,CAAnB,CAAP;AAEA,EAnCgC;AAoCjCwvH,gBAAe,UAAW5pH,SAAX,EAAsBrR,KAAtB,EAA6BkR,MAA7B,EAAsC;;AAEpD7C,UAAQC,IAAR,CAAc,6EAAd;AACA,SAAO,KAAK8C,mBAAL,CAA0BC,SAA1B,EAAqCrR,KAArC,EAA4CkR,MAA5C,CAAP;AAEA,EAzCgC;AA0CjCgqH,sBAAqB,UAAWhtH,CAAX,EAAe;;AAEnCG,UAAQC,IAAR,CAAc,mFAAd;AACA,SAAO,KAAKoC,mBAAL,CAA0BxC,CAA1B,CAAP;AAEA,EA/CgC;AAgDjCitH,kBAAiB,YAAY;;AAE5B9sH,UAAQC,IAAR,CAAc,2EAAd;AACA,SAAO,KAAK2B,eAAL,EAAP;AAEA;;AArDgC,CAAlC;;AAyDA1Q,OAAOK,MAAP,CAAeqnB,QAAQ3nB,SAAvB,EAAkC;;AAEjC27H,gBAAe,UAAW5pH,SAAX,EAAsBrR,KAAtB,EAA6BkR,MAA7B,EAAsC;;AAEpD7C,UAAQC,IAAR,CAAc,6EAAd;AACA,SAAO,KAAK8C,mBAAL,CAA0BC,SAA1B,EAAqCrR,KAArC,EAA4CkR,MAA5C,CAAP;AAEA,EAPgC;AAQjCiqH,kBAAiB,YAAY;;AAE5B9sH,UAAQC,IAAR,CAAc,2EAAd;AACA,SAAO,KAAK2B,eAAL,EAAP;AAEA;;AAbgC,CAAlC;;AAiBA;;AAEA1Q,OAAOK,MAAP,CAAesqC,SAAS5qC,SAAxB,EAAmC;;AAElCo8H,kBAAiB,YAAY;;AAE5BrtH,UAAQyD,KAAR,CAAe,sDAAf;AAEA,EANiC;AAOlCkyE,uBAAsB,YAAY;;AAEjC31E,UAAQyD,KAAR,CAAe,0GAAf;AAEA;;AAXiC,CAAnC;;AAeAvS,OAAOK,MAAP,CAAe2kC,SAASjlC,SAAxB,EAAmC;;AAElCq8H,iBAAgB,UAAWl3G,IAAX,EAAkB;;AAEjCpW,UAAQC,IAAR,CAAc,2EAAd;AACA,SAAO,KAAKy4B,eAAL,CAAsBtiB,IAAtB,CAAP;AAEA,EAPiC;AAQlCm3G,cAAa,YAAY;;AAExBvtH,UAAQC,IAAR,CAAc,2EAAd;AAEA,EAZiC;AAalCuV,YAAW,UAAW6M,QAAX,EAAqBnW,IAArB,EAA4B;;AAEtClM,UAAQC,IAAR,CAAc,gGAAd;AACA,SAAO,KAAK+3B,eAAL,CAAsB9rB,IAAtB,EAA4BmW,QAA5B,CAAP;AAEA,EAlBiC;AAmBlCmrG,mBAAkB,YAAY;;AAE7BxtH,UAAQyD,KAAR,CAAe,gHAAf;AAEA;;AAvBiC,CAAnC;;AA2BAvS,OAAO8N,gBAAP,CAAyBk3B,SAASjlC,SAAlC,EAA6C;;AAE5Cw8H,aAAY;AACXr8H,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,qDAAd;AACA,UAAO,KAAKmV,QAAL,CAAcpP,KAArB;AAEA,GANU;AAOX/G,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,qDAAd;AACA,QAAKmV,QAAL,CAAcpP,KAAd,GAAsBrV,KAAtB;AAEA;AAZU,EAFgC;AAgB5C+8H,gBAAe;AACdt8H,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,+FAAd;AAEA,GALa;AAMdhB,OAAK,YAAY;;AAEhBe,WAAQC,IAAR,CAAc,+FAAd;AAEA;AAVa;;AAhB6B,CAA7C;;AA+BA/O,OAAO8N,gBAAP,CAAyB20E,IAAI1iF,SAA7B,EAAwC;;AAEvCq4E,UAAS;AACRl4E,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,kDAAd;AACA,UAAO,KAAK2zE,MAAZ;AAEA;AANO;;AAF8B,CAAxC;;AAaA1iF,OAAOC,cAAP,CAAuB6iF,SAAS/iF,SAAhC,EAA2C,kBAA3C,EAA+D;;AAE9DG,MAAK,YAAY;;AAEhB4O,UAAQC,IAAR,CAAc,oDAAd;AAEA,EAN6D;AAO9DhB,MAAK,YAAY;;AAEhBe,UAAQC,IAAR,CAAc,oDAAd;AAEA;;AAX6D,CAA/D;;AAeA/O,OAAOC,cAAP,CAAuBm+F,MAAMr+F,SAA7B,EAAwC,sBAAxC,EAAgE;;AAE/DG,MAAK,YAAY;;AAEhB4O,UAAQC,IAAR,CAAc,gEAAd;AACA,SAAO,KAAKsvF,kBAAZ;AAEA,EAP8D;AAQ/DtwF,MAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,UAAQC,IAAR,CAAc,gEAAd;AACA,OAAKsvF,kBAAL,GAA0B5+F,KAA1B;AAEA;;AAb8D,CAAhE;;AAiBA;;AAEA2xE,kBAAkBrxE,SAAlB,CAA4B08H,OAA5B,GAAsC,UAAW7qD,WAAX,EAAwBJ,SAAxB,EAAoC;;AAEzE1iE,SAAQC,IAAR,CAAc,oDACZ,8DADF;;AAGA,KAAKyiE,cAAcnyE,SAAnB,EAA+B,KAAKmyE,SAAL,GAAiBA,SAAjB;AAC/B,MAAKG,cAAL,CAAqBC,WAArB;AAEA,CARD;;AAUA;;AAEA5xE,OAAO8N,gBAAP,CAAyBm4F,MAAMlmG,SAA/B,EAA0C;AACzC28H,aAAY;AACX3uH,OAAK,YAAY;;AAEhBe,WAAQC,IAAR,CAAc,4CAAd;AAEA;AALU,EAD6B;AAQzC4tH,kBAAiB;AAChB5uH,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,0DAAd;AACA,QAAKovB,MAAL,CAAYpc,MAAZ,CAAmBsvD,GAAnB,GAAyB5xE,KAAzB;AAEA;AANe,EARwB;AAgBzCm9H,mBAAkB;AACjB7uH,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,4DAAd;AACA,QAAKovB,MAAL,CAAYpc,MAAZ,CAAmB5F,IAAnB,GAA0B1c,KAA1B;AAEA;AANgB,EAhBuB;AAwBzCo9H,oBAAmB;AAClB9uH,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,8DAAd;AACA,QAAKovB,MAAL,CAAYpc,MAAZ,CAAmB3F,KAAnB,GAA2B3c,KAA3B;AAEA;AANiB,EAxBsB;AAgCzCq9H,kBAAiB;AAChB/uH,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,0DAAd;AACA,QAAKovB,MAAL,CAAYpc,MAAZ,CAAmB1F,GAAnB,GAAyB5c,KAAzB;AAEA;AANe,EAhCwB;AAwCzCs9H,qBAAoB;AACnBhvH,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,gEAAd;AACA,QAAKovB,MAAL,CAAYpc,MAAZ,CAAmBzF,MAAnB,GAA4B7c,KAA5B;AAEA;AANkB,EAxCqB;AAgDzCu/B,mBAAkB;AACjBjxB,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,4DAAd;AACA,QAAKovB,MAAL,CAAYpc,MAAZ,CAAmBxF,IAAnB,GAA0B9c,KAA1B;AAEA;AANgB,EAhDuB;AAwDzCw/B,kBAAiB;AAChBlxB,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,0DAAd;AACA,QAAKovB,MAAL,CAAYpc,MAAZ,CAAmBvF,GAAnB,GAAyB/c,KAAzB;AAEA;AANe,EAxDwB;AAgEzCu9H,sBAAqB;AACpBjvH,OAAK,YAAY;;AAEhBe,WAAQC,IAAR,CAAc,gHAAd;AAEA;AALmB,EAhEoB;AAuEzCqvB,aAAY;AACXrwB,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,+CAAd;AACA,QAAKovB,MAAL,CAAYi9B,IAAZ,GAAmB37D,KAAnB;AAEA;AANU,EAvE6B;AA+EzCw9H,iBAAgB;AACflvH,OAAK,YAAY;;AAEhBe,WAAQC,IAAR,CAAc,gDAAd;AAEA;AALc,EA/EyB;AAsFzCmuH,iBAAgB;AACfnvH,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,4DAAd;AACA,QAAKovB,MAAL,CAAYk9B,OAAZ,CAAoB30C,KAApB,GAA4BjnB,KAA5B;AAEA;AANc,EAtFyB;AA8FzC09H,kBAAiB;AAChBpvH,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,8DAAd;AACA,QAAKovB,MAAL,CAAYk9B,OAAZ,CAAoB10C,MAApB,GAA6BlnB,KAA7B;AAEA;AANe;AA9FwB,CAA1C;;AAwGA;;AAEAO,OAAO8N,gBAAP,CAAyB0jC,gBAAgBzxC,SAAzC,EAAoD;;AAEnDY,SAAQ;AACPT,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,yEAAd;AACA,UAAO,KAAKjN,KAAL,CAAWnB,MAAlB;AAEA;AANM,EAF2C;AAUnDy8H,mBAAkB,YAAW,aAAgB;;AAE5CtuH,UAAQyD,KAAR,CAAe,8DAAf;AAEA;;AAdkD,CAApD;;AAkBAvS,OAAOK,MAAP,CAAe4zC,eAAel0C,SAA9B,EAAyC;;AAExCs9H,WAAU,UAAW58H,KAAX,EAAmB;;AAE5BqO,UAAQC,IAAR,CAAc,oEAAd;AACA,OAAKslC,QAAL,CAAe5zC,KAAf;AAEA,EAPuC;AAQxC68H,cAAa,UAAW1uG,KAAX,EAAkBxV,KAAlB,EAAyBu+E,WAAzB,EAAuC;;AAEnD,MAAKA,gBAAgBt4F,SAArB,EAAiC;;AAEhCyP,WAAQC,IAAR,CAAc,sEAAd;AAEA;AACDD,UAAQC,IAAR,CAAc,0DAAd;AACA,OAAK0lC,QAAL,CAAe7lB,KAAf,EAAsBxV,KAAtB;AAEA,EAlBuC;AAmBxCmkH,iBAAgB,YAAY;;AAE3BzuH,UAAQC,IAAR,CAAc,gEAAd;AACA,OAAK2lC,WAAL;AAEA,EAxBuC;AAyBxCynF,kBAAiB,YAAY;;AAE5BrtH,UAAQC,IAAR,CAAc,4DAAd;AAEA,EA7BuC;AA8BxCyuH,iBAAgB,YAAY;;AAE3B1uH,UAAQC,IAAR,CAAc,2DAAd;AAEA;;AAlCuC,CAAzC;;AAsCA/O,OAAO8N,gBAAP,CAAyBmmC,eAAel0C,SAAxC,EAAmD;;AAElD0wG,YAAW;AACVvwG,OAAK,YAAY;;AAEhB4O,WAAQyD,KAAR,CAAe,+DAAf;AACA,UAAO,KAAKq6B,MAAZ;AAEA;AANS,EAFuC;AAUlD8jE,UAAS;AACRxwG,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,6DAAd;AACA,UAAO,KAAK69B,MAAZ;AAEA;AANO;;AAVyC,CAAnD;;AAqBA;;AAEA5sC,OAAOK,MAAP,CAAe0vF,sBAAsBhwF,SAArC,EAAgD;;AAE/C09H,YAAW,YAAY;;AAEtB3uH,UAAQyD,KAAR,CAAe,6DAAf;AAEA,EAN8C;;AAQ/CmrH,eAAc,YAAY;;AAEzB5uH,UAAQyD,KAAR,CAAe,gEAAf;AAEA,EAZ8C;;AAc/C09E,WAAU,YAAY;;AAErBnhF,UAAQyD,KAAR,CAAe,4DAAf;AAEA;;AAlB8C,CAAhD;;AAsBA;;AAEAvS,OAAO8N,gBAAP,CAAyB4kH,QAAQ3yH,SAAjC,EAA4C;;AAE3C6hC,UAAS;AACR7zB,OAAK,YAAY;;AAEhBe,WAAQC,IAAR,CAAc,gFAAd;AAEA;AALO,EAFkC;AAS3C8W,WAAU;AACTpmB,SAAO,YAAY;;AAElBqP,WAAQC,IAAR,CAAc,mFAAd;AACA,UAAO,IAAP;AAEA;AANQ;;AATiC,CAA5C;;AAoBA;;AAEA/O,OAAO8N,gBAAP,CAAyBgqC,SAAS/3C,SAAlC,EAA6C;;AAE5C49H,aAAY;AACXz9H,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,+CAAd;AAEA,GALU;AAMXhB,OAAK,YAAY;;AAEhBe,WAAQC,IAAR,CAAc,+CAAd;AAEA;AAVU,EAFgC;AAc5C6uH,UAAS;AACR19H,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,4CAAd;AACA,UAAO,IAAImqB,KAAJ,EAAP;AAEA;AANO,EAdmC;;AAuB5Cm3E,UAAS;AACRnwG,OAAK,YAAY;;AAEhB4O,WAAQyD,KAAR,CAAe,WAAW,KAAKrR,IAAhB,GAAuB,oEAAtC;AAEA,GALO;AAMR6M,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,WAAW,KAAK7N,IAAhB,GAAuB,oEAArC;AACA,QAAK+2C,WAAL,GAAqBx4C,UAAU0D,WAA/B;AAEA;AAXO;;AAvBmC,CAA7C;;AAuCAnD,OAAO8N,gBAAP,CAAyBipD,kBAAkBh3D,SAA3C,EAAsD;;AAErD89H,QAAO;AACN39H,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,2FAAd;AACA,UAAO,KAAP;AAEA,GANK;AAONhB,OAAK,YAAY;;AAEhBe,WAAQC,IAAR,CAAc,0FAAd;AAEA;AAXK;;AAF8C,CAAtD;;AAkBA/O,OAAO8N,gBAAP,CAAyB8sC,eAAe76C,SAAxC,EAAmD;;AAElDi7C,cAAa;AACZ96C,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,+EAAd;AACA,UAAO,KAAKgsC,UAAL,CAAgBC,WAAvB;AAEA,GANW;AAOZjtC,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,gFAAd;AACA,QAAKgsC,UAAL,CAAgBC,WAAhB,GAA8Bv7C,KAA9B;AAEA;AAZW;;AAFqC,CAAnD;;AAmBA;;AAEAO,OAAOK,MAAP,CAAek1E,cAAcx1E,SAA7B,EAAwC;;AAEvC+9H,yBAAwB,YAAY;;AAEnChvH,UAAQC,IAAR,CAAc,2EAAd;AACA,SAAO,KAAKupD,eAAL,EAAP;AAEA,EAPsC;;AASvCxT,mBAAkB,YAAY;;AAE7Bh2C,UAAQC,IAAR,CAAc,mFAAd;AACA,SAAO,KAAK0nD,YAAL,CAAkB3R,gBAAlB,EAAP;AAEA,EAdsC;;AAgBvCi5E,eAAc,YAAY;;AAEzBjvH,UAAQC,IAAR,CAAc,sEAAd;AACA,SAAO,KAAK0nD,YAAL,CAAkBlnB,SAAzB;AAEA,EArBsC;;AAuBvCyuF,eAAc,YAAY;;AAEzBlvH,UAAQC,IAAR,CAAc,6DAAd;AACA,SAAO,KAAK6zC,KAAL,CAAWsH,KAAX,EAAP;AAEA,EA5BsC;;AA8BvC+zE,wBAAuB,YAAY;;AAElCnvH,UAAQC,IAAR,CAAc,gGAAd;AACA,SAAO,KAAKgsC,UAAL,CAAgB76C,GAAhB,CAAqB,mBAArB,CAAP;AAEA,EAnCsC;AAoCvCg+H,4BAA2B,YAAY;;AAEtCpvH,UAAQC,IAAR,CAAc,yGAAd;AACA,SAAO,KAAKgsC,UAAL,CAAgB76C,GAAhB,CAAqB,wBAArB,CAAP;AAEA,EAzCsC;AA0CvCi+H,8BAA6B,YAAY;;AAExCrvH,UAAQC,IAAR,CAAc,6GAAd;AACA,SAAO,KAAKgsC,UAAL,CAAgB76C,GAAhB,CAAqB,0BAArB,CAAP;AAEA,EA/CsC;AAgDvCk+H,gCAA+B,YAAY;;AAE1CtvH,UAAQC,IAAR,CAAc,oHAAd;AACA,SAAO,KAAKgsC,UAAL,CAAgB76C,GAAhB,CAAqB,+BAArB,CAAP;AAEA,EArDsC;AAsDvCm+H,iCAAgC,YAAY;;AAE3CvvH,UAAQC,IAAR,CAAc,sHAAd;AACA,SAAO,KAAKgsC,UAAL,CAAgB76C,GAAhB,CAAqB,gCAArB,CAAP;AAEA,EA3DsC;AA4DvCo+H,sBAAqB,YAAY;;AAEhCxvH,UAAQC,IAAR,CAAc,6FAAd;AACA,SAAO,KAAKgsC,UAAL,CAAgB76C,GAAhB,CAAqB,kBAArB,CAAP;AAEA,EAjEsC;AAkEvC8zD,yBAAwB,YAAY;;AAEnCllD,UAAQC,IAAR,CAAc,qFAAd;AACA,SAAO,KAAK0nD,YAAL,CAAkBjQ,cAAzB;AAEA,EAvEsC;AAwEvC+3E,0BAAyB,YAAY;;AAEpCzvH,UAAQC,IAAR,CAAc,uGAAd;AACA,SAAO,KAAKgsC,UAAL,CAAgB76C,GAAhB,CAAqB,wBAArB,CAAP;AAEA,EA7EsC;AA8EvCs+H,oBAAmB,UAAW/kD,OAAX,EAAqB;;AAEvC3qE,UAAQC,IAAR,CAAc,qEAAd;AACA,OAAKqvD,cAAL,CAAqBqb,OAArB;AAEA,EAnFsC;AAoFvCsD,eAAc,YAAY;;AAEzBjuE,UAAQC,IAAR,CAAc,wDAAd;AAEA,EAxFsC;AAyFvC0vH,eAAc,YAAY;;AAEzB3vH,UAAQC,IAAR,CAAc,wDAAd;AAEA,EA7FsC;AA8FvC2vH,gBAAe,YAAY;;AAE1B5vH,UAAQC,IAAR,CAAc,yDAAd;AAEA,EAlGsC;AAmGvC4vH,kBAAiB,YAAY;;AAE5B7vH,UAAQC,IAAR,CAAc,2DAAd;AAEA,EAvGsC;AAwGvC6vH,iBAAgB,YAAY;;AAE3B9vH,UAAQC,IAAR,CAAc,0DAAd;AAEA;;AA5GsC,CAAxC;;AAgHA/O,OAAO8N,gBAAP,CAAyBynE,cAAcx1E,SAAvC,EAAkD;;AAEjDw0D,mBAAkB;AACjBr0D,OAAK,YAAY;;AAEhB,UAAO,KAAK+4D,SAAL,CAAenvB,OAAtB;AAEA,GALgB;AAMjB/7B,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,mEAAd;AACA,QAAKkqD,SAAL,CAAenvB,OAAf,GAAyBrqC,KAAzB;AAEA;AAXgB,EAF+B;AAejD4zD,gBAAe;AACdnzD,OAAK,YAAY;;AAEhB,UAAO,KAAK+4D,SAAL,CAAe/3D,IAAtB;AAEA,GALa;AAMd6M,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,6DAAd;AACA,QAAKkqD,SAAL,CAAe/3D,IAAf,GAAsBzB,KAAtB;AAEA;AAXa,EAfkC;AA4BjDo/H,oBAAmB;AAClB3+H,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,4FAAd;AACA,UAAO1P,SAAP;AAEA,GANiB;AAOlB0O,OAAK,YAAW,WAAc;;AAE7Be,WAAQC,IAAR,CAAc,4FAAd;AAEA;AAXiB;AA5B8B,CAAlD;;AA2CA/O,OAAO8N,gBAAP,CAAyB2uD,eAAe18D,SAAxC,EAAmD;;AAElD0oE,WAAU;AACTvoE,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,6FAAd;AACA,UAAO1P,SAAP;AAEA,GANQ;AAOT0O,OAAK,YAAW,cAAiB;;AAEhCe,WAAQC,IAAR,CAAc,6FAAd;AAEA;AAXQ,EAFwC;AAelD+vH,qBAAoB;AACnB5+H,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,uGAAd;AACA,UAAO1P,SAAP;AAEA,GANkB;AAOnB0O,OAAK,YAAY;;AAEhBe,WAAQC,IAAR,CAAc,uGAAd;AAEA;AAXkB,EAf8B;AA4BlDgwH,oBAAmB;AAClB7+H,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,sGAAd;AACA,UAAO1P,SAAP;AAEA,GANiB;AAOlB0O,OAAK,YAAY;;AAEhBe,WAAQC,IAAR,CAAc,sGAAd;AAEA;AAXiB;;AA5B+B,CAAnD;;AA4CA;;AAEA/O,OAAO8N,gBAAP,CAAyBoa,kBAAkBnoB,SAA3C,EAAsD;;AAErD4kB,QAAO;AACNzkB,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,wDAAd;AACA,UAAO,KAAKwZ,OAAL,CAAa5D,KAApB;AAEA,GANK;AAON5W,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,wDAAd;AACA,QAAKwZ,OAAL,CAAa5D,KAAb,GAAqBllB,KAArB;AAEA;AAZK,EAF8C;AAgBrDmlB,QAAO;AACN1kB,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,wDAAd;AACA,UAAO,KAAKwZ,OAAL,CAAa3D,KAApB;AAEA,GANK;AAON7W,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,wDAAd;AACA,QAAKwZ,OAAL,CAAa3D,KAAb,GAAqBnlB,KAArB;AAEA;AAZK,EAhB8C;AA8BrDolB,YAAW;AACV3kB,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,gEAAd;AACA,UAAO,KAAKwZ,OAAL,CAAa1D,SAApB;AAEA,GANS;AAOV9W,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,gEAAd;AACA,QAAKwZ,OAAL,CAAa1D,SAAb,GAAyBplB,KAAzB;AAEA;AAZS,EA9B0C;AA4CrDqlB,YAAW;AACV5kB,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,gEAAd;AACA,UAAO,KAAKwZ,OAAL,CAAazD,SAApB;AAEA,GANS;AAOV/W,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,gEAAd;AACA,QAAKwZ,OAAL,CAAazD,SAAb,GAAyBrlB,KAAzB;AAEA;AAZS,EA5C0C;AA0DrDulB,aAAY;AACX9kB,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,kEAAd;AACA,UAAO,KAAKwZ,OAAL,CAAavD,UAApB;AAEA,GANU;AAOXjX,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,kEAAd;AACA,QAAKwZ,OAAL,CAAavD,UAAb,GAA0BvlB,KAA1B;AAEA;AAZU,EA1DyC;AAwErDkS,SAAQ;AACPzR,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,0DAAd;AACA,UAAO,KAAKwZ,OAAL,CAAa5W,MAApB;AAEA,GANM;AAOP5D,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,0DAAd;AACA,QAAKwZ,OAAL,CAAa5W,MAAb,GAAsBlS,KAAtB;AAEA;AAZM,EAxE6C;AAsFrD6lB,SAAQ;AACPplB,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,0DAAd;AACA,UAAO,KAAKwZ,OAAL,CAAajD,MAApB;AAEA,GANM;AAOPvX,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,0DAAd;AACA,QAAKwZ,OAAL,CAAajD,MAAb,GAAsB7lB,KAAtB;AAEA;AAZM,EAtF6C;AAoGrDslB,SAAQ;AACP7kB,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,0DAAd;AACA,UAAO,KAAKwZ,OAAL,CAAaxD,MAApB;AAEA,GANM;AAOPhX,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,0DAAd;AACA,QAAKwZ,OAAL,CAAaxD,MAAb,GAAsBtlB,KAAtB;AAEA;AAZM,EApG6C;AAkHrDyB,OAAM;AACLhB,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,sDAAd;AACA,UAAO,KAAKwZ,OAAL,CAAarnB,IAApB;AAEA,GANI;AAOL6M,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,sDAAd;AACA,QAAKwZ,OAAL,CAAarnB,IAAb,GAAoBzB,KAApB;AAEA;AAZI,EAlH+C;AAgIrD+lB,kBAAiB;AAChBtlB,OAAK,YAAY;;AAEhB4O,WAAQC,IAAR,CAAc,4EAAd;AACA,UAAO,KAAKwZ,OAAL,CAAa/C,eAApB;AAEA,GANe;AAOhBzX,OAAK,UAAWtO,KAAX,EAAmB;;AAEvBqP,WAAQC,IAAR,CAAc,4EAAd;AACA,QAAKwZ,OAAL,CAAa/C,eAAb,GAA+B/lB,KAA/B;AAEA;AAZe;;AAhIoC,CAAtD;;AAiJA;;AAEAO,OAAO8N,gBAAP,CAAyB0kE,aAAazyE,SAAtC,EAAiD;;AAEhDi/H,WAAU;AACTjxH,OAAK,YAAW,WAAc;;AAE7Be,WAAQC,IAAR,CAAc,iDAAd;AAEA;AALQ;;AAFsC,CAAjD;;AAYA;;AAEA0vG,MAAM1+G,SAAN,CAAgBi7F,IAAhB,GAAuB,UAAWpB,IAAX,EAAkB;;AAExC9qF,SAAQC,IAAR,CAAc,wEAAd;AACA,KAAIkc,QAAQ,IAAZ;AACA,KAAIg0G,cAAc,IAAIrjB,WAAJ,EAAlB;AACAqjB,aAAYjkC,IAAZ,CAAkBpB,IAAlB,EAAwB,UAAW73D,MAAX,EAAoB;;AAE3C9W,QAAMm0F,SAAN,CAAiBr9E,MAAjB;AAEA,EAJD;AAKA,QAAO,IAAP;AAEA,CAZD;;AAcAk/E,cAAclhH,SAAd,CAAwBm/H,OAAxB,GAAkC,YAAY;;AAE7CpwH,SAAQC,IAAR,CAAc,6DAAd;AACA,QAAO,KAAKwyG,gBAAL,EAAP;AAEA,CALD;;AAOA;;AAEA/E,WAAWz8G,SAAX,CAAqBo/H,aAArB,GAAqC,UAAWx8E,QAAX,EAAqBS,KAArB,EAA6B;;AAEjEt0C,SAAQC,IAAR,CAAc,sDAAd;AACA,QAAO,KAAKuP,MAAL,CAAaqkC,QAAb,EAAuBS,KAAvB,CAAP;AAEA,CALD;;AAOA;;AAEA,IAAIg8E,gBAAgB;;AAEnB7mG,QAAO,UAAW8mG,SAAX,EAAsBtpF,SAAtB,EAAiC9H,mBAAjC,EAAuD;;AAE7Dn/B,UAAQC,IAAR,CAAc,iIAAd;AACA,MAAI2M,MAAJ;;AAEA,MAAKq6B,UAAU9G,MAAf,EAAwB;;AAEvB8G,aAAUxwB,gBAAV,IAA8BwwB,UAAU/vB,YAAV,EAA9B;;AAEAtK,YAASq6B,UAAUr6B,MAAnB;AACAq6B,eAAYA,UAAU3qB,QAAtB;AAEA;;AAEDi0G,YAAU9mG,KAAV,CAAiBwd,SAAjB,EAA4Br6B,MAA5B,EAAoCuyB,mBAApC;AAEA,EAlBkB;;AAoBnB/7B,SAAQ,UAAWkZ,QAAX,EAAsB;;AAE7Btc,UAAQC,IAAR,CAAc,2FAAd;AACA,SAAOqc,SAASlZ,MAAT,EAAP;AAEA;;AAzBkB,CAApB;;AA6BA,IAAIotH,aAAa;;AAEhB3hC,cAAat+F,SAFG;;AAIhB89F,cAAa,UAAW71E,GAAX,EAAgB5C,OAAhB,EAAyBo1E,MAAzB,EAAiCE,OAAjC,EAA2C;;AAEvDlrF,UAAQC,IAAR,CAAc,sFAAd;;AAEA,MAAImuF,SAAS,IAAIe,aAAJ,EAAb;AACAf,SAAOY,cAAP,CAAuB,KAAKH,WAA5B;;AAEA,MAAIp1E,UAAU20E,OAAOlC,IAAP,CAAa1zE,GAAb,EAAkBwyE,MAAlB,EAA0Bz6F,SAA1B,EAAqC26F,OAArC,CAAd;;AAEA,MAAKt1E,OAAL,EAAe6D,QAAQ7D,OAAR,GAAkBA,OAAlB;;AAEf,SAAO6D,OAAP;AAEA,EAjBe;;AAmBhBg3G,kBAAiB,UAAWvhC,IAAX,EAAiBt5E,OAAjB,EAA0Bo1E,MAA1B,EAAkCE,OAAlC,EAA4C;;AAE5DlrF,UAAQC,IAAR,CAAc,8FAAd;;AAEA,MAAImuF,SAAS,IAAIa,iBAAJ,EAAb;AACAb,SAAOY,cAAP,CAAuB,KAAKH,WAA5B;;AAEA,MAAIp1E,UAAU20E,OAAOlC,IAAP,CAAagD,IAAb,EAAmBlE,MAAnB,EAA2Bz6F,SAA3B,EAAsC26F,OAAtC,CAAd;;AAEA,MAAKt1E,OAAL,EAAe6D,QAAQ7D,OAAR,GAAkBA,OAAlB;;AAEf,SAAO6D,OAAP;AAEA,EAhCe;;AAkChBi3G,wBAAuB,YAAY;;AAElC1wH,UAAQyD,KAAR,CAAe,uFAAf;AAEA,EAtCe;;AAwChBktH,4BAA2B,YAAY;;AAEtC3wH,UAAQyD,KAAR,CAAe,2FAAf;AAEA;;AA5Ce,CAAjB;;AAgDA;;AAEA,SAASmtH,SAAT,GAAqB;;AAEpB5wH,SAAQyD,KAAR,CAAe,wEAAf;;AAEA,MAAKotH,aAAL,GAAqB,UAAWlkH,MAAX,EAAmBsG,MAAnB,EAA4B;;AAEhDjT,UAAQC,IAAR,CAAc,4DAAd;AACA0M,SAAOqG,OAAP,CAAgBC,MAAhB;AAEA,EALD;;AAOA,MAAK69G,eAAL,GAAuB,UAAWnkH,MAAX,EAAmBsG,MAAnB,EAA4B;;AAElDjT,UAAQC,IAAR,CAAc,gEAAd;AACA0M,SAAOyG,SAAP,CAAkBH,MAAlB;AAEA,EALD;;AAOA,MAAK89G,UAAL,GAAkB,YAAY;;AAE7B/wH,UAAQyD,KAAR,CAAe,kEAAf;AAEA,EAJD;AAMA;;AAED;;AAEA,SAASutH,cAAT,GAA0B;;AAEzBhxH,SAAQyD,KAAR,CAAe,iFAAf;;AAEA,MAAK8jE,UAAL,GAAkB7vD,SAASC,eAAT,CAA0B,8BAA1B,EAA0D,QAA1D,CAAlB;AACA,MAAKg9B,KAAL,GAAa,YAAY,CAAE,CAA3B;AACA,MAAKP,MAAL,GAAc,YAAY,CAAE,CAA5B;AACA,MAAKc,aAAL,GAAqB,YAAY,CAAE,CAAnC;AACA,MAAKp7B,OAAL,GAAe,YAAY,CAAE,CAA7B;AAEA;;AAED;;AAEA,IAAIm3G,aAAa;;AAEhBC,4BAA2B,YAAW,yBAA4B;;AAEjElxH,UAAQyD,KAAR,CAAe,qEAAf;AAEA,EANe;;AAQhB0tH,SAAQ,YAAW,0BAA6B;;AAE/CnxH,UAAQyD,KAAR,CAAe,qEAAf;AAEA,EAZe;;AAchB2tH,SAAQ,YAAW,0BAA6B;;AAE/CpxH,UAAQyD,KAAR,CAAe,qEAAf;AAEA;;AAlBe,CAAjB;;AAsBA;;AAEA,SAAS4tH,SAAT,GAAqB;;AAEpBrxH,SAAQyD,KAAR,CAAe,qEAAf;AAEA;;QAEQsW,wBAAAA;QAAuBX,oBAAAA;QAAmBqtD,gBAAAA;QAAe/1C,YAAAA;QAAWpE,cAAAA;QAAa9C,gBAAAA;QAAeD,cAAAA;QAAa0pD,UAAAA;QAASC,MAAAA;QAAKC,QAAAA;QAAOG,SAAAA;QAAQK,MAAAA;QAAKc,cAAAA;QAAaT,WAAAA;QAAUQ,OAAAA;QAAMljC,OAAAA;QAAMokC,eAAAA;QAAcY,WAAAA;QAAUb,OAAAA;QAAMc,SAAAA;QAAQQ,QAAAA;QAAOE,eAAAA;QAAc98D,cAAAA;QAAak9D,oBAAAA;QAAmBp7B,cAAAA;QAAa6U,gBAAAA;QAAewmB,eAAAA;QAAc5hE,UAAAA;QAASw4E,0BAAAA;QAAyBQ,oBAAAA;QAAmBO,oBAAAA;QAAmBE,gBAAAA;QAAe+X,eAAAA;QAAc9F,iBAAAA;QAAgBI,uBAAAA;QAAsB1V,wBAAAA;QAAuBf,iBAAAA;QAAgB4a,aAAAA;QAAY/W,cAAAA;QAAayZ,oBAAAA;QAAmBqE,aAAAA;QAAY1gB,aAAAA;QAAY6V,SAAAA;QAAQsD,cAAAA;QAAava,QAAAA;QAAOkiB,cAAAA;QAAaxV,kBAAAA;QAAiBC,YAAAA;QAAWE,aAAAA;QAAYI,gBAAAA;QAAeT,kBAAAA;QAAiBM,yBAAAA;QAAwBC,mBAAAA;QAAkBC,eAAAA;QAAcP,cAAAA;QAAaF,QAAAA;QAAO8V,eAAAA;QAAc3qC,oBAAAA;QAAmB9nC,qBAAAA;QAAoBkzE,aAAAA;QAAYnqC,cAAAA;QAAajpC,SAAAA;QAAQ4zE,gBAAAA;QAAekD,kBAAAA;QAAiBzE,eAAAA;QAAcwF,gBAAAA;QAAexC,QAAAA;QAAOhS,sBAAAA;QAAqB7F,sBAAAA;QAAqBmC,0BAAAA;QAAyBG,sBAAAA;QAAqBD,qBAAAA;QAAoB5B,uBAAAA;QAAsBqa,gBAAAA;QAAeuB,kBAAAA;QAAiBlc,gBAAAA;QAAe+D,iBAAAA;QAAgB6c,uBAAAA;QAAsBiH,iBAAAA;QAAgB9gB,gBAAAA;QAAe4kB,UAAAA;QAASC,0BAAAA;QAAyB1+E,iBAAAA;QAAgBtJ,WAAAA;QAAUioF,6BAAAA;QAA4BI,6BAAAA;QAA4BF,oBAAAA;QAAmBG,2BAAAA;QAA0B3oF,QAAAA;QAAOtF,WAAAA;QAAUkuF,YAAAA;QAAW3uF,SAAAA;QAAQvjC,kBAAAA;QAAiByyH,QAAAA;QAAO3qB,8BAAAA;QAA6B0B,oBAAAA;QAAmBK,sBAAAA;QAAqB1B,mBAAAA;QAAkB7B,cAAAA;QAAavoD,WAAAA;QAAmBz/C,OAAT0L;QAAempH,YAAAA;QAAWI,cAAAA;QAAavmG,QAAAA;QAAOsB,UAAAA;QAAS/B,SAAAA;QAAQiuB,MAAAA;QAAKlpC,UAAAA;QAASoR,UAAAA;QAAS0F,OAAAA;QAAMorG,OAAAA;QAAMj2E,QAAAA;QAAO3a,QAAAA;QAAOlc,UAAAA;QAASrT,UAAAA;QAASxG,UAAAA;QAAS+O,aAAAA;QAAYsc,QAAAA;QAAOu7F,wBAAAA;QAAuBC,sBAAAA;QAAqBK,kBAAAA;QAAiBM,iBAAAA;QAAgBG,mBAAAA;QAAkBE,sBAAAA;QAAqBC,wBAAAA;QAAuBC,aAAAA;QAAYC,kBAAAA;QAAiBG,oBAAAA;QAAmBC,yBAAAA;QAAwBG,eAAAA;QAAcU,YAAAA;QAAWC,aAAAA;QAAYC,cAAAA;QAAaI,cAAAA;QAAaK,aAAAA;QAAY3xB,QAAAA;QAAOnB,OAAAA;QAAMiT,YAAAA;QAAWqC,OAAAA;QAAMnW,YAAAA;QAAW1F,QAAAA;QAAOhP,aAAAA;QAAYlgB,aAAAA;QAAYmX,oBAAAA;QAAmBK,qBAAAA;QAAoBI,2BAAAA;QAA0ByB,sBAAAA;QAAqBC,4BAAAA;QAA2BC,qBAAAA;QAAoBC,2BAAAA;QAA0BC,sBAAAA;QAAqBC,4BAAAA;QAA2BC,uBAAAA;QAAsBC,6BAAAA;QAA4B5B,qBAAAA;QAAoBE,2BAAAA;QAA0B2B,eAAAA;QAAcM,qBAAAA;QAAoBY,oBAAAA;QAAmBG,0BAAAA;QAAyBS,gBAAAA;QAAeE,sBAAAA;QAAqB0K,eAAAA;QAAcE,qBAAAA;QAAoBI,iBAAAA;QAAgBK,uBAAAA;QAAsBI,eAAAA;QAAcK,qBAAAA;QAAoBt/C,gBAAAA;QAAeC,sBAAAA;QAAqBy/C,gBAAAA;QAAeE,sBAAAA;QAAqBK,gBAAAA;QAAeC,sBAAAA;QAAqB3H,kBAAAA;QAAiBC,wBAAAA;QAAuB+H,gBAAAA;QAAeoB,eAAAA;QAAcC,qBAAAA;QAAoBf,mBAAAA;QAAkBI,yBAAAA;QAAwBY,iBAAAA;QAAgBC,uBAAAA;QAAsBnjD,cAAAA;QAAaI,oBAAAA;QAAmBghB,iBAAAA;QAAgB4qB,iBAAAA;QAAgBsX,oBAAAA;QAAmB5+C,iBAAAA;QAAgByc,iBAAAA;QAAgBH,uBAAAA;QAAsBD,uBAAAA;QAAsBF,oBAAAA;QAAmBC,mBAAAA;QAAkBH,qBAAAA;QAAoBC,sBAAAA;QAAqBH,oBAAAA;QAAmBC,uBAAAA;QAAsBnc,oBAAAA;QAAmB2c,qBAAAA;QAAoBD,oBAAAA;QAAmBrf,WAAAA;QAAU3E,yBAAAA;QAAwBD,yBAAAA;QAAwBD,wBAAAA;QAAuBD,uBAAAA;QAAsBD,wBAAAA;QAAuBD,uBAAAA;QAAsBF,8BAAAA;QAA6BD,uBAAAA;QAAsBD,sBAAAA;QAAqBlB,kBAAAA;QAAiBuvD,WAAAA;QAAUe,mBAAAA;QAAkBe,mBAAAA;QAAkBG,oBAAAA;QAAmB9C,eAAAA;QAAcgD,YAAAA;QAAWG,aAAAA;QAAYE,uBAAAA;QAAsBE,wBAAAA;QAAuBE,cAAAA;QAAazhG,WAAAA;QAAUC,QAAAA;QAAOI,eAAAA;QAAcC,eAAAA;QAAcC,gBAAAA;QAAeC,oBAAAA;QAAmBC,uBAAAA;QAAsBC,wBAAAA;QAAuBC,iBAAAA;QAAgBC,eAAAA;QAAcC,mBAAAA;QAAkBC,YAAAA;QAAWC,WAAAA;QAAUC,aAAAA;QAAYC,cAAAA;QAAaC,gBAAAA;QAAeC,WAAAA;QAAUC,aAAAA;QAAYC,eAAAA;QAAcC,aAAAA;QAAYC,iBAAAA;QAAgBC,mBAAAA;QAAkBC,sBAAAA;QAAqBC,mBAAAA;QAAkBC,iBAAAA;QAAgBC,cAAAA;QAAaC,mBAAAA;QAAkBC,0BAAAA;QAAyBC,cAAAA;QAAaC,cAAAA;QAAaC,aAAAA;QAAYC,YAAAA;QAAWC,iBAAAA;QAAgBC,yBAAAA;QAAwBC,iBAAAA;QAAgBC,yBAAAA;QAAwBC,iBAAAA;QAAgBC,yBAAAA;QAAwBC,iBAAAA;QAAgBC,yBAAAA;QAAwBC,yBAAAA;QAAwBC,aAAAA;QAAYC,cAAAA;QAAaC,YAAAA;QAAWC,iBAAAA;QAAgBC,aAAAA;QAAYC,oBAAAA;QAAmBC,eAAAA;QAAcC,gBAAAA;QAAeC,oBAAAA;QAAmBC,eAAAA;QAAcC,eAAAA;QAAcC,gBAAAA;QAAeC,oBAAAA;QAAmBC,sBAAAA;QAAqBC,wBAAAA;QAAuBC,oBAAAA;QAAmBC,YAAAA;QAAWC,wBAAAA;QAAuBC,wBAAAA;QAAuBC,mCAAAA;QAAkCC,mCAAAA;QAAkCC,6BAAAA;QAA4BC,0BAAAA;QAAyBC,0BAAAA;QAAyBC,iBAAAA;QAAgBC,sBAAAA;QAAqBC,yBAAAA;QAAwBC,gBAAAA;QAAeC,6BAAAA;QAA4BC,4BAAAA;QAA2BC,eAAAA;QAAcC,4BAAAA;QAA2BC,2BAAAA;QAA0BC,mBAAAA;QAAkBC,WAAAA;QAAUC,YAAAA;QAAWC,oBAAAA;QAAmBC,UAAAA;QAASC,kBAAAA;QAAiBC,YAAAA;QAAWC,gBAAAA;QAAeC,wBAAAA;QAAuBC,wBAAAA;QAAuBC,uBAAAA;QAAsBC,qBAAAA;QAAoBC,cAAAA;QAAaC,YAAAA;QAAWC,aAAAA;QAAYC,kBAAAA;QAAiBC,uBAAAA;QAAsBC,aAAAA;QAAYC,cAAAA;QAAaC,qBAAAA;QAAoBC,uBAAAA;QAAsBC,wBAAAA;QAAuBC,wBAAAA;QAAuBC,wBAAAA;QAAuBC,0BAAAA;QAAyBC,0BAAAA;QAAyBC,2BAAAA;QAA0BC,2BAAAA;QAA0BC,kBAAAA;QAAiBC,uBAAAA;QAAsBC,uBAAAA;QAAsBC,uBAAAA;QAAsBC,uBAAAA;QAAsBC,uBAAAA;QAAsBC,uBAAAA;QAAsBC,uBAAAA;QAAsBC,uBAAAA;QAAsBC,wBAAAA;QAAuBC,wBAAAA;QAAuBC,wBAAAA;QAAuBC,yBAAAA;QAAwBC,yBAAAA;QAAwBC,yBAAAA;QAAwBC,WAAAA;QAAUC,aAAAA;QAAYC,eAAAA;QAAcC,sBAAAA;QAAqBC,oBAAAA;QAAmBC,oBAAAA;QAAmBC,sBAAAA;QAAqBC,kBAAAA;QAAiBC,mBAAAA;QAAkBC,oBAAAA;QAAmBC,wBAAAA;QAAuBC,sBAAAA;QAAqBC,iBAAAA;QAAgBC,eAAAA;QAAcC,gBAAAA;QAAeC,eAAAA;QAAcC,iBAAAA;QAAgBC,gBAAAA;QAAeC,iBAAAA;QAAgBC,eAAAA;QAAcC,oBAAAA;QAAmBC,mBAAAA;QAAiCq1H,eAAflqF;QAA6BwhF,QAAAA;QAAOC,YAAAA;QAAWC,aAAAA;QAAYC,mBAAAA;QAAkBC,gBAAAA;QAAe3E,aAAAA;QAAY4E,WAAAA;QAAUC,iBAAAA;QAAgBC,qBAAAA;QAAoBC,wBAAAA;QAAuBC,yBAAAA;QAAwBC,SAAAA;QAAQC,yBAAAA;QAAwBC,gBAAAA;QAAeC,iBAAAA;QAAgBC,wBAAAA;QAAuBC,iBAAAA;QAAgBC,kBAAAA;QAAiBC,iBAAAA;QAAgBC,kBAAAA;QAAiBC,mBAAAA;QAAkBC,mBAAAA;QAAkBM,qBAAAA;QAAoBC,eAAAA;QAAcC,SAAAA;QAAQI,aAAAA;QAAYC,oBAAAA;QAAmBC,cAAAA;QAAaE,kBAAAA;QAAiBC,YAAAA;QAAWC,sBAAAA;QAAqBoF,gBAAAA;QAAeE,aAAAA;QAAYI,YAAAA;QAAWI,iBAAAA;QAAgBC,aAAAA;QAAYI,YAAAA","file":"js.faa513a6.map","sourceRoot":"../app/html","sourcesContent":["// Polyfills\n\nif ( Number.EPSILON === undefined ) {\n\n\tNumber.EPSILON = Math.pow( 2, - 52 );\n\n}\n\nif ( Number.isInteger === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n\n\tNumber.isInteger = function ( value ) {\n\n\t\treturn typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value;\n\n\t};\n\n}\n\n//\n\nif ( Math.sign === undefined ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign\n\n\tMath.sign = function ( x ) {\n\n\t\treturn ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x;\n\n\t};\n\n}\n\nif ( 'name' in Function.prototype === false ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n\n\tObject.defineProperty( Function.prototype, 'name', {\n\n\t\tget: function () {\n\n\t\t\treturn this.toString().match( /^\\s*function\\s*([^\\(\\s]*)/ )[ 1 ];\n\n\t\t}\n\n\t} );\n\n}\n\nif ( Object.assign === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n\n\t( function () {\n\n\t\tObject.assign = function ( target ) {\n\n\t\t\tif ( target === undefined || target === null ) {\n\n\t\t\t\tthrow new TypeError( 'Cannot convert undefined or null to object' );\n\n\t\t\t}\n\n\t\t\tvar output = Object( target );\n\n\t\t\tfor ( var index = 1; index < arguments.length; index ++ ) {\n\n\t\t\t\tvar source = arguments[ index ];\n\n\t\t\t\tif ( source !== undefined && source !== null ) {\n\n\t\t\t\t\tfor ( var nextKey in source ) {\n\n\t\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\n\n\t\t\t\t\t\t\toutput[ nextKey ] = source[ nextKey ];\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\treturn output;\n\n\t\t};\n\n\t} )();\n\n}\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nfunction EventDispatcher() {}\n\nObject.assign( EventDispatcher.prototype, {\n\n\taddEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tvar listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t},\n\n\thasEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tvar listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t},\n\n\tremoveEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tvar index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\tvar array = listenerArray.slice( 0 );\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nvar REVISION = '92';\nvar MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\nvar CullFaceNone = 0;\nvar CullFaceBack = 1;\nvar CullFaceFront = 2;\nvar CullFaceFrontBack = 3;\nvar FrontFaceDirectionCW = 0;\nvar FrontFaceDirectionCCW = 1;\nvar BasicShadowMap = 0;\nvar PCFShadowMap = 1;\nvar PCFSoftShadowMap = 2;\nvar FrontSide = 0;\nvar BackSide = 1;\nvar DoubleSide = 2;\nvar FlatShading = 1;\nvar SmoothShading = 2;\nvar NoColors = 0;\nvar FaceColors = 1;\nvar VertexColors = 2;\nvar NoBlending = 0;\nvar NormalBlending = 1;\nvar AdditiveBlending = 2;\nvar SubtractiveBlending = 3;\nvar MultiplyBlending = 4;\nvar CustomBlending = 5;\nvar AddEquation = 100;\nvar SubtractEquation = 101;\nvar ReverseSubtractEquation = 102;\nvar MinEquation = 103;\nvar MaxEquation = 104;\nvar ZeroFactor = 200;\nvar OneFactor = 201;\nvar SrcColorFactor = 202;\nvar OneMinusSrcColorFactor = 203;\nvar SrcAlphaFactor = 204;\nvar OneMinusSrcAlphaFactor = 205;\nvar DstAlphaFactor = 206;\nvar OneMinusDstAlphaFactor = 207;\nvar DstColorFactor = 208;\nvar OneMinusDstColorFactor = 209;\nvar SrcAlphaSaturateFactor = 210;\nvar NeverDepth = 0;\nvar AlwaysDepth = 1;\nvar LessDepth = 2;\nvar LessEqualDepth = 3;\nvar EqualDepth = 4;\nvar GreaterEqualDepth = 5;\nvar GreaterDepth = 6;\nvar NotEqualDepth = 7;\nvar MultiplyOperation = 0;\nvar MixOperation = 1;\nvar AddOperation = 2;\nvar NoToneMapping = 0;\nvar LinearToneMapping = 1;\nvar ReinhardToneMapping = 2;\nvar Uncharted2ToneMapping = 3;\nvar CineonToneMapping = 4;\nvar UVMapping = 300;\nvar CubeReflectionMapping = 301;\nvar CubeRefractionMapping = 302;\nvar EquirectangularReflectionMapping = 303;\nvar EquirectangularRefractionMapping = 304;\nvar SphericalReflectionMapping = 305;\nvar CubeUVReflectionMapping = 306;\nvar CubeUVRefractionMapping = 307;\nvar RepeatWrapping = 1000;\nvar ClampToEdgeWrapping = 1001;\nvar MirroredRepeatWrapping = 1002;\nvar NearestFilter = 1003;\nvar NearestMipMapNearestFilter = 1004;\nvar NearestMipMapLinearFilter = 1005;\nvar LinearFilter = 1006;\nvar LinearMipMapNearestFilter = 1007;\nvar LinearMipMapLinearFilter = 1008;\nvar UnsignedByteType = 1009;\nvar ByteType = 1010;\nvar ShortType = 1011;\nvar UnsignedShortType = 1012;\nvar IntType = 1013;\nvar UnsignedIntType = 1014;\nvar FloatType = 1015;\nvar HalfFloatType = 1016;\nvar UnsignedShort4444Type = 1017;\nvar UnsignedShort5551Type = 1018;\nvar UnsignedShort565Type = 1019;\nvar UnsignedInt248Type = 1020;\nvar AlphaFormat = 1021;\nvar RGBFormat = 1022;\nvar RGBAFormat = 1023;\nvar LuminanceFormat = 1024;\nvar LuminanceAlphaFormat = 1025;\nvar RGBEFormat = RGBAFormat;\nvar DepthFormat = 1026;\nvar DepthStencilFormat = 1027;\nvar RGB_S3TC_DXT1_Format = 33776;\nvar RGBA_S3TC_DXT1_Format = 33777;\nvar RGBA_S3TC_DXT3_Format = 33778;\nvar RGBA_S3TC_DXT5_Format = 33779;\nvar RGB_PVRTC_4BPPV1_Format = 35840;\nvar RGB_PVRTC_2BPPV1_Format = 35841;\nvar RGBA_PVRTC_4BPPV1_Format = 35842;\nvar RGBA_PVRTC_2BPPV1_Format = 35843;\nvar RGB_ETC1_Format = 36196;\nvar RGBA_ASTC_4x4_Format = 37808;\nvar RGBA_ASTC_5x4_Format = 37809;\nvar RGBA_ASTC_5x5_Format = 37810;\nvar RGBA_ASTC_6x5_Format = 37811;\nvar RGBA_ASTC_6x6_Format = 37812;\nvar RGBA_ASTC_8x5_Format = 37813;\nvar RGBA_ASTC_8x6_Format = 37814;\nvar RGBA_ASTC_8x8_Format = 37815;\nvar RGBA_ASTC_10x5_Format = 37816;\nvar RGBA_ASTC_10x6_Format = 37817;\nvar RGBA_ASTC_10x8_Format = 37818;\nvar RGBA_ASTC_10x10_Format = 37819;\nvar RGBA_ASTC_12x10_Format = 37820;\nvar RGBA_ASTC_12x12_Format = 37821;\nvar LoopOnce = 2200;\nvar LoopRepeat = 2201;\nvar LoopPingPong = 2202;\nvar InterpolateDiscrete = 2300;\nvar InterpolateLinear = 2301;\nvar InterpolateSmooth = 2302;\nvar ZeroCurvatureEnding = 2400;\nvar ZeroSlopeEnding = 2401;\nvar WrapAroundEnding = 2402;\nvar TrianglesDrawMode = 0;\nvar TriangleStripDrawMode = 1;\nvar TriangleFanDrawMode = 2;\nvar LinearEncoding = 3000;\nvar sRGBEncoding = 3001;\nvar GammaEncoding = 3007;\nvar RGBEEncoding = 3002;\nvar LogLuvEncoding = 3003;\nvar RGBM7Encoding = 3004;\nvar RGBM16Encoding = 3005;\nvar RGBDEncoding = 3006;\nvar BasicDepthPacking = 3200;\nvar RGBADepthPacking = 3201;\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar _Math = {\n\n\tDEG2RAD: Math.PI / 180,\n\tRAD2DEG: 180 / Math.PI,\n\n\tgenerateUUID: ( function () {\n\n\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\tvar lut = [];\n\n\t\tfor ( var i = 0; i < 256; i ++ ) {\n\n\t\t\tlut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n\t\t}\n\n\t\treturn function generateUUID() {\n\n\t\t\tvar d0 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d1 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d2 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d3 = Math.random() * 0xffffffff | 0;\n\t\t\tvar uuid = lut[ d0 & 0xff ] + lut[ d0 >> 8 & 0xff ] + lut[ d0 >> 16 & 0xff ] + lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d1 & 0xff ] + lut[ d1 >> 8 & 0xff ] + '-' + lut[ d1 >> 16 & 0x0f | 0x40 ] + lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d2 & 0x3f | 0x80 ] + lut[ d2 >> 8 & 0xff ] + '-' + lut[ d2 >> 16 & 0xff ] + lut[ d2 >> 24 & 0xff ] +\n\t\t\t\tlut[ d3 & 0xff ] + lut[ d3 >> 8 & 0xff ] + lut[ d3 >> 16 & 0xff ] + lut[ d3 >> 24 & 0xff ];\n\n\t\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\t\treturn uuid.toUpperCase();\n\n\t\t};\n\n\t} )(),\n\n\tclamp: function ( value, min, max ) {\n\n\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t},\n\n\t// compute euclidian modulo of m % n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\teuclideanModulo: function ( n, m ) {\n\n\t\treturn ( ( n % m ) + m ) % m;\n\n\t},\n\n\t// Linear mapping from range <a1, a2> to range <b1, b2>\n\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t},\n\n\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\tlerp: function ( x, y, t ) {\n\n\t\treturn ( 1 - t ) * x + t * y;\n\n\t},\n\n\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\tsmoothstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t},\n\n\tsmootherstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t},\n\n\t// Random integer from <low, high> interval\n\n\trandInt: function ( low, high ) {\n\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t},\n\n\t// Random float from <low, high> interval\n\n\trandFloat: function ( low, high ) {\n\n\t\treturn low + Math.random() * ( high - low );\n\n\t},\n\n\t// Random float from <-range/2, range/2> interval\n\n\trandFloatSpread: function ( range ) {\n\n\t\treturn range * ( 0.5 - Math.random() );\n\n\t},\n\n\tdegToRad: function ( degrees ) {\n\n\t\treturn degrees * _Math.DEG2RAD;\n\n\t},\n\n\tradToDeg: function ( radians ) {\n\n\t\treturn radians * _Math.RAD2DEG;\n\n\t},\n\n\tisPowerOfTwo: function ( value ) {\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t},\n\n\tceilPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tfloorPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author philogb / http://blog.thejit.org/\n * @author egraether / http://egraether.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nfunction Vector2( x, y ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\n}\n\nObject.defineProperties( Vector2.prototype, {\n\n\t\"width\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.x = value;\n\n\t\t}\n\n\t},\n\n\t\"height\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.y = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tisVector2: true,\n\n\tset: function ( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector2();\n\t\tvar max = new Vector2();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tangle: function () {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tvar angle = Math.atan2( this.y, this.x );\n\n\t\tif ( angle < 0 ) angle += 2 * Math.PI;\n\n\t\treturn angle;\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t},\n\n\trotateAround: function ( center, angle ) {\n\n\t\tvar c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tvar x = this.x - center.x;\n\t\tvar y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author jordi_ros / http://plattsoft.com\n * @author D1plo1d / http://github.com/D1plo1d\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author timknip / http://www.floorplanner.com/\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Matrix4() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0, 0,\n\t\t0, 1, 0, 0,\n\t\t0, 0, 1, 0,\n\t\t0, 0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix4.prototype, {\n\n\tisMatrix4: true,\n\n\tset: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t},\n\n\tcopyPosition: function ( m ) {\n\n\t\tvar te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\textractBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmakeBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\textractRotation: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function extractRotation( m ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tvar scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length();\n\t\t\tvar scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length();\n\t\t\tvar scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\n\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\n\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakeRotationFromEuler: function ( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\n\t\tvar x = euler.x, y = euler.y, z = euler.z;\n\t\tvar a = Math.cos( x ), b = Math.sin( x );\n\t\tvar c = Math.cos( y ), d = Math.sin( y );\n\t\tvar e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// last column\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// bottom row\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationFromQuaternion: function ( q ) {\n\n\t\tvar te = this.elements;\n\n\t\tvar x = q._x, y = q._y, z = q._z, w = q._w;\n\t\tvar x2 = x + x, y2 = y + y, z2 = z + z;\n\t\tvar xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tvar yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tvar wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tte[ 0 ] = 1 - ( yy + zz );\n\t\tte[ 4 ] = xy - wz;\n\t\tte[ 8 ] = xz + wy;\n\n\t\tte[ 1 ] = xy + wz;\n\t\tte[ 5 ] = 1 - ( xx + zz );\n\t\tte[ 9 ] = yz - wx;\n\n\t\tte[ 2 ] = xz - wy;\n\t\tte[ 6 ] = yz + wx;\n\t\tte[ 10 ] = 1 - ( xx + yy );\n\n\t\t// last column\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// bottom row\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function () {\n\n\t\tvar x = new Vector3();\n\t\tvar y = new Vector3();\n\t\tvar z = new Vector3();\n\n\t\treturn function lookAt( eye, target, up ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tz.subVectors( eye, target );\n\n\t\t\tif ( z.lengthSq() === 0 ) {\n\n\t\t\t\t// eye and target are in the same position\n\n\t\t\t\tz.z = 1;\n\n\t\t\t}\n\n\t\t\tz.normalize();\n\t\t\tx.crossVectors( up, z );\n\n\t\t\tif ( x.lengthSq() === 0 ) {\n\n\t\t\t\t// up and z are parallel\n\n\t\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t\tz.x += 0.0001;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz.z += 0.0001;\n\n\t\t\t\t}\n\n\t\t\t\tz.normalize();\n\t\t\t\tx.crossVectors( up, z );\n\n\t\t\t}\n\n\t\t\tx.normalize();\n\t\t\ty.crossVectors( z, x );\n\n\t\t\tte[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x;\n\t\t\tte[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y;\n\t\t\tte[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tvar a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tvar b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix4( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tvar n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tvar n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tvar n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar te = this.elements;\n\t\tvar tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tsetPosition: function ( v ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 12 ] = v.x;\n\t\tte[ 13 ] = v.y;\n\t\tte[ 14 ] = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tgetInverse: function ( m, throwOnDegenerate ) {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tvar te = this.elements,\n\t\t\tme = m.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ],\n\t\t\tn12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ],\n\t\t\tn13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ],\n\t\t\tn14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tvar det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( v ) {\n\n\t\tvar te = this.elements;\n\t\tvar x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t},\n\n\tgetMaxScaleOnAxis: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tvar scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tvar scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t},\n\n\tmakeTranslation: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationX: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationY: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationZ: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationAxis: function ( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tvar c = Math.cos( angle );\n\t\tvar s = Math.sin( angle );\n\t\tvar t = 1 - c;\n\t\tvar x = axis.x, y = axis.y, z = axis.z;\n\t\tvar tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\t return this;\n\n\t},\n\n\tmakeScale: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeShear: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, y, z, 0,\n\t\t\tx, 1, z, 0,\n\t\t\tx, y, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tcompose: function ( position, quaternion, scale ) {\n\n\t\tthis.makeRotationFromQuaternion( quaternion );\n\t\tthis.scale( scale );\n\t\tthis.setPosition( position );\n\n\t\treturn this;\n\n\t},\n\n\tdecompose: function () {\n\n\t\tvar vector = new Vector3();\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function decompose( position, quaternion, scale ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\t\tvar sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\t\tvar sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t\t// if determine is negative, we need to invert one scale\n\t\t\tvar det = this.determinant();\n\t\t\tif ( det < 0 ) sx = - sx;\n\n\t\t\tposition.x = te[ 12 ];\n\t\t\tposition.y = te[ 13 ];\n\t\t\tposition.z = te[ 14 ];\n\n\t\t\t// scale the rotation part\n\t\t\tmatrix.copy( this );\n\n\t\t\tvar invSX = 1 / sx;\n\t\t\tvar invSY = 1 / sy;\n\t\t\tvar invSZ = 1 / sz;\n\n\t\t\tmatrix.elements[ 0 ] *= invSX;\n\t\t\tmatrix.elements[ 1 ] *= invSX;\n\t\t\tmatrix.elements[ 2 ] *= invSX;\n\n\t\t\tmatrix.elements[ 4 ] *= invSY;\n\t\t\tmatrix.elements[ 5 ] *= invSY;\n\t\t\tmatrix.elements[ 6 ] *= invSY;\n\n\t\t\tmatrix.elements[ 8 ] *= invSZ;\n\t\t\tmatrix.elements[ 9 ] *= invSZ;\n\t\t\tmatrix.elements[ 10 ] *= invSZ;\n\n\t\t\tquaternion.setFromRotationMatrix( matrix );\n\n\t\t\tscale.x = sx;\n\t\t\tscale.y = sy;\n\t\t\tscale.z = sz;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakePerspective: function ( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\t\tvar x = 2 * near / ( right - left );\n\t\tvar y = 2 * near / ( top - bottom );\n\n\t\tvar a = ( right + left ) / ( right - left );\n\t\tvar b = ( top + bottom ) / ( top - bottom );\n\t\tvar c = - ( far + near ) / ( far - near );\n\t\tvar d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t},\n\n\tmakeOrthographic: function ( left, right, top, bottom, near, far ) {\n\n\t\tvar te = this.elements;\n\t\tvar w = 1.0 / ( right - left );\n\t\tvar h = 1.0 / ( top - bottom );\n\t\tvar p = 1.0 / ( far - near );\n\n\t\tvar x = ( right + left ) * w;\n\t\tvar y = ( top + bottom ) * h;\n\t\tvar z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nfunction Quaternion( x, y, z, w ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Quaternion, {\n\n\tslerp: function ( qa, qb, qm, t ) {\n\n\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t},\n\n\tslerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tvar x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ],\n\n\t\t\tx1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tvar s = 1 - t,\n\n\t\t\t\tcos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tvar sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tvar tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tvar f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n} );\n\nObject.defineProperties( Quaternion.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tw: {\n\n\t\tget: function () {\n\n\t\t\treturn this._w;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._w = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Quaternion.prototype, {\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t},\n\n\tcopy: function ( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromEuler: function ( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar x = euler._x, y = euler._y, z = euler._z, order = euler.order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tvar cos = Math.cos;\n\t\tvar sin = Math.sin;\n\n\t\tvar c1 = cos( x / 2 );\n\t\tvar c2 = cos( y / 2 );\n\t\tvar c3 = cos( z / 2 );\n\n\t\tvar s1 = sin( x / 2 );\n\t\tvar s2 = sin( y / 2 );\n\t\tvar s3 = sin( z / 2 );\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t}\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromAxisAngle: function ( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tvar halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33,\n\t\t\ts;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\ts = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromUnitVectors: function () {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tvar v1 = new Vector3();\n\t\tvar r;\n\n\t\tvar EPS = 0.000001;\n\n\t\treturn function setFromUnitVectors( vFrom, vTo ) {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\n\t\t\tr = vFrom.dot( vTo ) + 1;\n\n\t\t\tif ( r < EPS ) {\n\n\t\t\t\tr = 0;\n\n\t\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\t\tv1.set( - vFrom.y, vFrom.x, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv1.set( 0, - vFrom.z, vFrom.y );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tv1.crossVectors( vFrom, vTo );\n\n\t\t\t}\n\n\t\t\tthis._x = v1.x;\n\t\t\tthis._y = v1.y;\n\t\t\tthis._z = v1.z;\n\t\t\tthis._w = r;\n\n\t\t\treturn this.normalize();\n\n\t\t};\n\n\t}(),\n\n\tinverse: function () {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t},\n\n\tconjugate: function () {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\tvar l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t},\n\n\tpremultiply: function ( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t},\n\n\tmultiplyQuaternions: function ( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tvar qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tvar qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tslerp: function ( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tvar x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta );\n\n\t\tif ( Math.abs( sinHalfTheta ) < 0.001 ) {\n\n\t\t\tthis._w = 0.5 * ( w + this._w );\n\t\t\tthis._x = 0.5 * ( x + this._x );\n\t\t\tthis._y = 0.5 * ( y + this._y );\n\t\t\tthis._z = 0.5 * ( z + this._z );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tvar ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector3( x, y, z ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\n}\n\nObject.assign( Vector3.prototype, {\n\n\tisVector3: true,\n\n\tset: function ( x, y, z ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyVectors: function ( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyEuler: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyEuler( euler ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromEuler( euler ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyAxisAngle: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyAxisAngle( axis, angle ) {\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tvar w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tvar ix = qw * x + qy * z - qz * y;\n\t\tvar iy = qw * y + qz * x - qx * z;\n\t\tvar iz = qw * z + qx * y - qy * x;\n\t\tvar iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t},\n\n\tproject: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function project( camera ) {\n\n\t\t\tmatrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t};\n\n\t}(),\n\n\tunproject: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function unproject( camera ) {\n\n\t\t\tmatrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t};\n\n\t}(),\n\n\ttransformDirection: function ( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector3();\n\t\tvar max = new Vector3();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t},\n\n\t// TODO lengthSquared?\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tcross: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t},\n\n\tcrossVectors: function ( a, b ) {\n\n\t\tvar ax = a.x, ay = a.y, az = a.z;\n\t\tvar bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t},\n\n\tprojectOnVector: function ( vector ) {\n\n\t\tvar scalar = vector.dot( this ) / vector.lengthSq();\n\n\t\treturn this.copy( vector ).multiplyScalar( scalar );\n\n\t},\n\n\tprojectOnPlane: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function projectOnPlane( planeNormal ) {\n\n\t\t\tv1.copy( this ).projectOnVector( planeNormal );\n\n\t\t\treturn this.sub( v1 );\n\n\t\t};\n\n\t}(),\n\n\treflect: function () {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function reflect( normal ) {\n\n\t\t\treturn this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t\t};\n\n\t}(),\n\n\tangleTo: function ( v ) {\n\n\t\tvar theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) );\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( _Math.clamp( theta, - 1, 1 ) );\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t},\n\n\tsetFromSpherical: function ( s ) {\n\n\t\tvar sinPhiRadius = Math.sin( s.phi ) * s.radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( s.theta );\n\t\tthis.y = Math.cos( s.phi ) * s.radius;\n\t\tthis.z = sinPhiRadius * Math.cos( s.theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCylindrical: function ( c ) {\n\n\t\tthis.x = c.radius * Math.sin( c.theta );\n\t\tthis.y = c.y;\n\t\tthis.z = c.radius * Math.cos( c.theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixPosition: function ( m ) {\n\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixScale: function ( m ) {\n\n\t\tvar sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tvar sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tvar sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixColumn: function ( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n * @author tschw\n */\n\nfunction Matrix3() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0,\n\t\t0, 1, 0,\n\t\t0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix3.prototype, {\n\n\tisMatrix3: true,\n\n\tset: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrix4: function ( m ) {\n\n\t\tvar me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix3( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t},\n\n\tgetInverse: function ( matrix, throwOnDegenerate ) {\n\n\t\tif ( matrix && matrix.isMatrix4 ) {\n\n\t\t\tconsole.error( \"THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.\" );\n\n\t\t}\n\n\t\tvar me = matrix.elements,\n\t\t\tte = this.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ],\n\t\t\tn12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ],\n\t\t\tn13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar tmp, m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tgetNormalMatrix: function ( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).getInverse( this ).transpose();\n\n\t},\n\n\ttransposeIntoArray: function ( r ) {\n\n\t\tvar m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetUvTransform: function ( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tvar c = Math.cos( rotation );\n\t\tvar s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t},\n\n\tscale: function ( sx, sy ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t},\n\n\trotate: function ( theta ) {\n\n\t\tvar c = Math.cos( theta );\n\t\tvar s = Math.sin( theta );\n\n\t\tvar te = this.elements;\n\n\t\tvar a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tvar a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( tx, ty ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author szimek / https://github.com/szimek/\n */\n\nvar textureId = 0;\n\nfunction Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\n\tthis.image = image !== undefined ? image : Texture.DEFAULT_IMAGE;\n\tthis.mipmaps = [];\n\n\tthis.mapping = mapping !== undefined ? mapping : Texture.DEFAULT_MAPPING;\n\n\tthis.wrapS = wrapS !== undefined ? wrapS : ClampToEdgeWrapping;\n\tthis.wrapT = wrapT !== undefined ? wrapT : ClampToEdgeWrapping;\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : LinearMipMapLinearFilter;\n\n\tthis.anisotropy = anisotropy !== undefined ? anisotropy : 1;\n\n\tthis.format = format !== undefined ? format : RGBAFormat;\n\tthis.type = type !== undefined ? type : UnsignedByteType;\n\n\tthis.offset = new Vector2( 0, 0 );\n\tthis.repeat = new Vector2( 1, 1 );\n\tthis.center = new Vector2( 0, 0 );\n\tthis.rotation = 0;\n\n\tthis.matrixAutoUpdate = true;\n\tthis.matrix = new Matrix3();\n\n\tthis.generateMipmaps = true;\n\tthis.premultiplyAlpha = false;\n\tthis.flipY = true;\n\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t//\n\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t// update.  You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\tthis.encoding = encoding !== undefined ? encoding : LinearEncoding;\n\n\tthis.version = 0;\n\tthis.onUpdate = null;\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Texture,\n\n\tisTexture: true,\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.image = source.image;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tfunction getDataURL( image ) {\n\n\t\t\tvar canvas;\n\n\t\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\t\tcanvas = image;\n\n\t\t\t} else {\n\n\t\t\t\tcanvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\t\tcanvas.width = image.width;\n\t\t\t\tcanvas.height = image.height;\n\n\t\t\t\tvar context = canvas.getContext( '2d' );\n\n\t\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t\t} else {\n\n\t\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY\n\n\t\t};\n\n\t\tif ( this.image !== undefined ) {\n\n\t\t\t// TODO: Move to THREE.Image\n\n\t\t\tvar image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = _Math.generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: getDataURL( image )\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\toutput.image = image.uuid;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t},\n\n\ttransformUv: function ( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.defineProperty( Texture.prototype, \"needsUpdate\", {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\n/**\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector4( x, y, z, w ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\tthis.w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Vector4.prototype, {\n\n\tisVector4: true,\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tsetAxisAngleFromQuaternion: function ( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tvar s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetAxisAngleFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar angle, x, y, z,\t\t// variables for result\n\t\t\tepsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t     ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t     ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tvar xx = ( m11 + 1 ) / 2;\n\t\t\tvar yy = ( m22 + 1 ) / 2;\n\t\t\tvar zz = ( m33 + 1 ) / 2;\n\t\t\tvar xy = ( m12 + m21 ) / 4;\n\t\t\tvar xz = ( m13 + m31 ) / 4;\n\t\t\tvar yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tvar s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t                   ( m13 - m31 ) * ( m13 - m31 ) +\n\t\t                   ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min, max;\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tif ( min === undefined ) {\n\n\t\t\t\tmin = new Vector4();\n\t\t\t\tmax = new Vector4();\n\n\t\t\t}\n\n\t\t\tmin.set( minVal, minVal, minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal, maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author szimek / https://github.com/szimek/\n * @author alteredq / http://alteredqualia.com/\n * @author Marius Kintel / https://github.com/kintel\n */\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nfunction WebGLRenderTarget( width, height, options ) {\n\n\tthis.width = width;\n\tthis.height = height;\n\n\tthis.scissor = new Vector4( 0, 0, width, height );\n\tthis.scissorTest = false;\n\n\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\toptions = options || {};\n\n\tif ( options.minFilter === undefined ) options.minFilter = LinearFilter;\n\n\tthis.texture = new Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true;\n\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n}\n\nWebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: WebGLRenderTarget,\n\n\tisWebGLRenderTarget: true,\n\n\tsetSize: function ( width, height ) {\n\n\t\tif ( this.width !== width || this.height !== height ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com\n */\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tWebGLRenderTarget.call( this, width, height, options );\n\n\tthis.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5\n\tthis.activeMipMapLevel = 0;\n\n}\n\nWebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype );\nWebGLRenderTargetCube.prototype.constructor = WebGLRenderTargetCube;\n\nWebGLRenderTargetCube.prototype.isWebGLRenderTargetCube = true;\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { data: data, width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\tthis.unpackAlignment = 1;\n\n}\n\nDataTexture.prototype = Object.create( Texture.prototype );\nDataTexture.prototype.constructor = DataTexture;\n\nDataTexture.prototype.isDataTexture = true;\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n}\n\nObject.assign( Box3.prototype, {\n\n\tisBox3: true,\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromArray: function ( array ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tvar x = array[ i ];\n\t\t\tvar y = array[ i + 1 ];\n\t\t\tvar z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromBufferAttribute: function ( attribute ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tvar x = attribute.getX( i );\n\t\t\tvar y = attribute.getY( i );\n\t\t\tvar z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\texpandByObject: function () {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tvar scope, i, l;\n\n\t\tvar v1 = new Vector3();\n\n\t\tfunction traverse( node ) {\n\n\t\t\tvar geometry = node.geometry;\n\n\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\t\tfor ( i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tv1.copy( vertices[ i ] );\n\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar attribute = geometry.attributes.position;\n\n\t\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\t\tfor ( i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tv1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\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\treturn function expandByObject( object ) {\n\n\t\t\tscope = this;\n\n\t\t\tobject.updateMatrixWorld( true );\n\n\t\t\tobject.traverse( traverse );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t},\n\n\tintersectsSphere: ( function () {\n\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function intersectsSphere( sphere ) {\n\n\t\t\t// Find the point on the AABB closest to the sphere center.\n\t\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t\t};\n\n\t} )(),\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tvar min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= plane.constant && max >= plane.constant );\n\n\t},\n\n\tintersectsTriangle: ( function () {\n\n\t\t// triangle centered vertices\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\t// triangle edge vectors\n\t\tvar f0 = new Vector3();\n\t\tvar f1 = new Vector3();\n\t\tvar f2 = new Vector3();\n\n\t\tvar testAxis = new Vector3();\n\n\t\tvar center = new Vector3();\n\t\tvar extents = new Vector3();\n\n\t\tvar triangleNormal = new Vector3();\n\n\t\tfunction satForAxes( axes ) {\n\n\t\t\tvar i, j;\n\n\t\t\tfor ( i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t\t\ttestAxis.fromArray( axes, i );\n\t\t\t\t// project the aabb onto the seperating axis\n\t\t\t\tvar r = extents.x * Math.abs( testAxis.x ) + extents.y * Math.abs( testAxis.y ) + extents.z * Math.abs( testAxis.z );\n\t\t\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\t\t\tvar p0 = v0.dot( testAxis );\n\t\t\t\tvar p1 = v1.dot( testAxis );\n\t\t\t\tvar p2 = v2.dot( testAxis );\n\t\t\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\t\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t\t\t// the axis is seperating and we can exit\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn function intersectsTriangle( triangle ) {\n\n\t\t\tif ( this.isEmpty() ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// compute box center and extents\n\t\t\tthis.getCenter( center );\n\t\t\textents.subVectors( this.max, center );\n\n\t\t\t// translate triangle to aabb origin\n\t\t\tv0.subVectors( triangle.a, center );\n\t\t\tv1.subVectors( triangle.b, center );\n\t\t\tv2.subVectors( triangle.c, center );\n\n\t\t\t// compute edge vectors for triangle\n\t\t\tf0.subVectors( v1, v0 );\n\t\t\tf1.subVectors( v2, v1 );\n\t\t\tf2.subVectors( v0, v2 );\n\n\t\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\t\tvar axes = [\n\t\t\t\t0, - f0.z, f0.y, 0, - f1.z, f1.y, 0, - f2.z, f2.y,\n\t\t\t\tf0.z, 0, - f0.x, f1.z, 0, - f1.x, f2.z, 0, - f2.x,\n\t\t\t\t- f0.y, f0.x, 0, - f1.y, f1.x, 0, - f2.y, f2.x, 0\n\t\t\t];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// test 3 face normals from the aabb\n\t\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// finally testing the face normal of the triangle\n\t\t\t// use already existing triangle edge vectors here\n\t\t\ttriangleNormal.crossVectors( f0, f1 );\n\t\t\taxes = [ triangleNormal.x, triangleNormal.y, triangleNormal.z ];\n\t\t\treturn satForAxes( axes );\n\n\t\t};\n\n\t} )(),\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tgetBoundingSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getBoundingSphere( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t\ttarget = new Sphere();\n\n\t\t\t}\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( v1 ).length() * 0.5;\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function () {\n\n\t\tvar points = [\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3()\n\t\t];\n\n\t\treturn function applyMatrix4( matrix ) {\n\n\t\t\t// transform of empty box is an empty box.\n\t\t\tif ( this.isEmpty() ) return this;\n\n\t\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t\tpoints[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t\tpoints[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t\tpoints[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t\tpoints[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t\tpoints[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t\tpoints[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t\tpoints[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t\tpoints[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix );\t// 111\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Sphere( center, radius ) {\n\n\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\tthis.radius = ( radius !== undefined ) ? radius : 0;\n\n}\n\nObject.assign( Sphere.prototype, {\n\n\tset: function ( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function () {\n\n\t\tvar box = new Box3();\n\n\t\treturn function setFromPoints( points, optionalCenter ) {\n\n\t\t\tvar center = this.center;\n\n\t\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\t\tcenter.copy( optionalCenter );\n\n\t\t\t} else {\n\n\t\t\t\tbox.setFromPoints( points ).getCenter( center );\n\n\t\t\t}\n\n\t\t\tvar maxRadiusSq = 0;\n\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t\t}\n\n\t\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t},\n\n\tempty: function () {\n\n\t\treturn ( this.radius <= 0 );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tvar radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t},\n\n\tclampPoint: function ( point, target ) {\n\n\t\tvar deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t},\n\n\tgetBoundingBox: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\ttarget = new Box3();\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Plane( normal, constant ) {\n\n\t// normal is assumed to be normalized\n\n\tthis.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 );\n\tthis.constant = ( constant !== undefined ) ? constant : 0;\n\n}\n\nObject.assign( Plane.prototype, {\n\n\tset: function ( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponents: function ( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromNormalAndCoplanarPoint: function ( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCoplanarPoints: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function setFromCoplanarPoints( a, b, c ) {\n\n\t\t\tvar normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize();\n\n\t\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tvar inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t},\n\n\tdistanceToSphere: function ( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t},\n\n\tprojectPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .projectPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t},\n\n\tintersectLine: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectLine( line, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar direction = line.delta( v1 );\n\n\t\t\tvar denominator = this.normal.dot( direction );\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\t// line is coplanar, return origin\n\t\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\t\treturn target.copy( line.start );\n\n\t\t\t\t}\n\n\t\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\tvar t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t\t};\n\n\t}(),\n\n\tintersectsLine: function ( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tvar startSign = this.distanceToPoint( line.start );\n\t\tvar endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t},\n\n\tcoplanarPoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .coplanarPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t},\n\n\tapplyMatrix4: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar m1 = new Matrix3();\n\n\t\treturn function applyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\t\tvar normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix );\n\n\t\t\tvar referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix );\n\n\t\t\tvar normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author bhouston / http://clara.io\n */\n\nfunction Frustum( p0, p1, p2, p3, p4, p5 ) {\n\n\tthis.planes = [\n\n\t\t( p0 !== undefined ) ? p0 : new Plane(),\n\t\t( p1 !== undefined ) ? p1 : new Plane(),\n\t\t( p2 !== undefined ) ? p2 : new Plane(),\n\t\t( p3 !== undefined ) ? p3 : new Plane(),\n\t\t( p4 !== undefined ) ? p4 : new Plane(),\n\t\t( p5 !== undefined ) ? p5 : new Plane()\n\n\t];\n\n}\n\nObject.assign( Frustum.prototype, {\n\n\tset: function ( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tvar planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( frustum ) {\n\n\t\tvar planes = this.planes;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrix: function ( m ) {\n\n\t\tvar planes = this.planes;\n\t\tvar me = m.elements;\n\t\tvar me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tvar me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tvar me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tvar me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\tintersectsObject: function () {\n\n\t\tvar sphere = new Sphere();\n\n\t\treturn function intersectsObject( object ) {\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null )\n\t\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere )\n\t\t\t\t.applyMatrix4( object.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSprite: function () {\n\n\t\tvar sphere = new Sphere();\n\n\t\treturn function intersectsSprite( sprite ) {\n\n\t\t\tsphere.center.set( 0, 0, 0 );\n\t\t\tsphere.radius = 0.7071067811865476;\n\t\t\tsphere.applyMatrix4( sprite.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tvar planes = this.planes;\n\t\tvar center = sphere.center;\n\t\tvar negRadius = - sphere.radius;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tvar distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tintersectsBox: function () {\n\n\t\tvar p1 = new Vector3(),\n\t\t\tp2 = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tvar plane = planes[ i ];\n\n\t\t\t\tp1.x = plane.normal.x > 0 ? box.min.x : box.max.x;\n\t\t\t\tp2.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t\tp1.y = plane.normal.y > 0 ? box.min.y : box.max.y;\n\t\t\t\tp2.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t\tp1.z = plane.normal.z > 0 ? box.min.z : box.max.z;\n\t\t\t\tp2.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\t\tvar d1 = plane.distanceToPoint( p1 );\n\t\t\t\tvar d2 = plane.distanceToPoint( p2 );\n\n\t\t\t\t// if both outside plane, no intersection\n\n\t\t\t\tif ( d1 < 0 && d2 < 0 ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\tvar planes = this.planes;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n} );\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\\n\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\\n\";\n\nvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\\n\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\\n\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"\\nvec3 transformed = vec3( position );\\n\";\n\nvar beginnormal_vertex = \"\\nvec3 objectNormal = vec3( normal );\\n\";\n\nvar bsdfs = \"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tif( decayExponent > 0.0 ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\treturn distanceFalloff * maxDistanceCutoffFactor;\\n#else\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n#endif\\n\\t}\\n\\treturn 1.0;\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE  = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS  = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\\n\\treturn specularColor * AB.x + AB.y;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 );\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\\n\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\\n\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\t\\tvarying vec3 vViewPosition;\\n\\t#endif\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\\n\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n\";\n\nvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\\n\";\n\nvar color_pars_vertex = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#ifdef USE_COLOR\\n\\tvColor.xyz = color.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.14159265359\\n#define PI2 6.28318530718\\n#define PI_HALF 1.5707963267949\\n#define RECIPROCAL_PI 0.31830988618\\n#define RECIPROCAL_PI2 0.15915494\\n#define LOG2 1.442695\\n#define EPSILON 1e-6\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract(sin(sn) * c);\\n}\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\n}\\n\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n#define cubeUV_textureSize (1024.0)\\nint getFaceFromDirection(vec3 direction) {\\n\\tvec3 absDirection = abs(direction);\\n\\tint face = -1;\\n\\tif( absDirection.x > absDirection.z ) {\\n\\t\\tif(absDirection.x > absDirection.y )\\n\\t\\t\\tface = direction.x > 0.0 ? 0 : 3;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\telse {\\n\\t\\tif(absDirection.z > absDirection.y )\\n\\t\\t\\tface = direction.z > 0.0 ? 2 : 5;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\treturn face;\\n}\\n#define cubeUV_maxLods1  (log2(cubeUV_textureSize*0.25) - 1.0)\\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\\n\\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\\n\\tfloat dxRoughness = dFdx(roughness);\\n\\tfloat dyRoughness = dFdy(roughness);\\n\\tvec3 dx = dFdx( vec * scale * dxRoughness );\\n\\tvec3 dy = dFdy( vec * scale * dyRoughness );\\n\\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\\n\\td = clamp(d, 1.0, cubeUV_rangeClamp);\\n\\tfloat mipLevel = 0.5 * log2(d);\\n\\treturn vec2(floor(mipLevel), fract(mipLevel));\\n}\\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\\n\\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\\n\\tfloat a = 16.0 * cubeUV_rcpTextureSize;\\n\\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\\n\\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\\n\\tfloat powScale = exp2_packed.x * exp2_packed.y;\\n\\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\\n\\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\\n\\tbool bRes = mipLevel == 0.0;\\n\\tscale =  bRes && (scale < a) ? a : scale;\\n\\tvec3 r;\\n\\tvec2 offset;\\n\\tint face = getFaceFromDirection(direction);\\n\\tfloat rcpPowScale = 1.0 / powScale;\\n\\tif( face == 0) {\\n\\t\\tr = vec3(direction.x, -direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 1) {\\n\\t\\tr = vec3(direction.y, direction.x, direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 2) {\\n\\t\\tr = vec3(direction.z, direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 3) {\\n\\t\\tr = vec3(direction.x, direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\telse if( face == 4) {\\n\\t\\tr = vec3(direction.y, direction.x, -direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\telse {\\n\\t\\tr = vec3(direction.z, -direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\tr = normalize(r);\\n\\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\\n\\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\\n\\tvec2 base = offset + vec2( texelOffset );\\n\\treturn base + s * ( scale - 2.0 * texelOffset );\\n}\\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\\n\\tfloat roughnessVal = roughness* cubeUV_maxLods3;\\n\\tfloat r1 = floor(roughnessVal);\\n\\tfloat r2 = r1 + 1.0;\\n\\tfloat t = fract(roughnessVal);\\n\\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\\n\\tfloat s = mipInfo.y;\\n\\tfloat level0 = mipInfo.x;\\n\\tfloat level1 = level0 + 1.0;\\n\\tlevel1 = level1 > 5.0 ? 5.0 : level1;\\n\\tlevel0 += min( floor( s + 0.5 ), 5.0 );\\n\\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\\n\\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\\n\\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\\n\\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\\n\\tvec4 result = mix(color10, color20, t);\\n\\treturn vec4(result.rgb, 1.0);\\n}\\n#endif\\n\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = normalMatrix * objectNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\\n\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\\n#endif\\n\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\\n\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\\n\";\n\nvar encodings_fragment = \"  gl_FragColor = linearToOutputTexel( gl_FragColor );\\n\";\n\nvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat M      = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM            = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat D      = max( maxRange / maxRGB, 1.0 );\\n\\tD            = min( floor( D ) / 255.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value )  {\\n\\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\\n\\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract(Le);\\n\\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\\n\\treturn vec4( max(vRGB, 0.0), 1.0 );\\n}\\n\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\tvec2 sampleUV;\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\tvec4 envColor = texture2D( envMap, sampleUV );\\n\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\\n\\t\\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\\n\";\n\nvar envmap_pars_fragment = \"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\\n\\tuniform float reflectivity;\\n\\tuniform float envMapIntensity;\\n#endif\\n#ifdef USE_ENVMAP\\n\\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\\n\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\\n\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\n\";\n\nvar fog_vertex = \"\\n#ifdef USE_FOG\\nfogDepth = -mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n  varying float fogDepth;\\n#endif\\n\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\\n\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\\n\";\n\nvar gradientmap_pars_fragment = \"#ifdef TOON\\n\\tuniform sampler2D gradientMap;\\n\\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\t\\tfloat dotNL = dot( normal, lightDirection );\\n\\t\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t\\t#ifdef USE_GRADIENTMAP\\n\\t\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n#endif\\n\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\nvar lights_pars_begin = \"uniform vec3 ambientLightColor;\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t\\tfloat shadowCameraNear;\\n\\t\\tfloat shadowCameraFar;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight  ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\\n\";\n\nvar lights_pars_maps = \"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\\n\\t\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\t\\tvec2 sampleUV;\\n\\t\\t\\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\\n\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\\n\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tvec3\\tspecularColor;\\n\\tfloat\\tspecularShininess;\\n\\tfloat\\tspecularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifdef TOON\\n\\t\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#else\\n\\t\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\t\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#endif\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\\n\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\\n#ifdef STANDARD\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.clearCoat = saturate( clearCoat );\\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\\n#endif\\n\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tfloat\\tspecularRoughness;\\n\\tvec3\\tspecularColor;\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoat;\\n\\t\\tfloat clearCoatRoughness;\\n\\t#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.specularRoughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3(    0, 1,    0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\\n\\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifndef STANDARD\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\tfloat dotNL = dotNV;\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\n#define Material_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.specularRoughness )\\n#define Material_ClearCoat_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\\n\";\n\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = normalize( vViewPosition );\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearCoatRadiance = vec3( 0.0 );\\n#endif\\n\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#ifndef STANDARD\\n\\t\\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#endif\\n#endif\\n\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\\n#endif\\n\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#ifdef USE_LOGDEPTHBUF\\n\\tuniform float logDepthBufFC;\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n#endif\\n\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n\\tuniform float logDepthBufFC;\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t#else\\n\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\tgl_Position.z *= gl_Position.w;\\n\\t#endif\\n#endif\\n\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\\n\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\nvar map_particle_fragment = \"#ifdef USE_MAP\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n\";\n\nvar map_particle_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform mat3 uvTransform;\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\\n\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\\n#endif\\n\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_MORPHNORMALS\\n\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\\n\\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\\n\\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\\n\\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\\n\\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\\n\\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\\n\\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\\n\";\n\nvar normal_fragment_begin = \"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n#endif\\n\";\n\nvar normal_fragment_maps = \"#ifdef USE_NORMALMAP\\n\\tnormal = perturbNormal2Arb( -vViewPosition, normal );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\\n\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\\t\\tscale *= float( gl_FrontFacing ) * 2.0 - 1.0;\\n\\t\\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\\n\\t\\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t\\tmapN.xy = normalScale * mapN.xy;\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\\n\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256.,  256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\\n\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\\n\";\n\nvar project_vertex = \"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\ngl_Position = projectionMatrix * mvPosition;\\n\";\n\nvar dithering_fragment = \"#if defined( DITHERING )\\n  gl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\\n\";\n\nvar dithering_pars_fragment = \"#if defined( DITHERING )\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\\n\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\\n\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\\n\\t\\tconst vec2 offset = vec2( 0.0, 1.0 );\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / size;\\n\\t\\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\\n\\t\\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\\n\\t\\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\\n\\t\\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\\n\\t\\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\\n\\t\\tvec2 f = fract( uv * size + 0.5 );\\n\\t\\tfloat a = mix( lb, lt, f.y );\\n\\t\\tfloat b = mix( rb, rt, f.y );\\n\\t\\tfloat c = mix( a, b, f.x );\\n\\t\\treturn c;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\nvar shadowmap_pars_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n#endif\\n\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n#endif\\n\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\tDirectionalLight directionalLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\tSpotLight spotLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\tPointLight pointLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\\n\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\\n\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\\n\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix  = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n#endif\\n\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n  gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\\n\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n\\t#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nuniform float toneMappingWhitePoint;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\\nvec3 Uncharted2ToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\n\";\n\nvar uv_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\n\";\n\nvar uv_vertex = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = uv2;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\n#endif\\n\";\n\nvar cube_frag = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldPosition;\\nvoid main() {\\n\\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\\n\\tgl_FragColor.a *= opacity;\\n}\\n\";\n\nvar cube_vert = \"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}\\n\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\\n\\t#endif\\n}\\n\";\n\nvar depth_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n}\\n\";\n\nvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\\n\";\n\nvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition.xyz;\\n}\\n\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldPosition );\\n\\tvec2 sampleUV;\\n\\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n}\\n\";\n\nvar equirect_vert = \"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\\n\";\n\nvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\tvLineDistance = scale * lineDistance;\\n\\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar meshbasic_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_ENVMAP\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_pars_maps>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\n\\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\\n\\t#include <lightmap_fragment>\\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_pars_maps>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_pars_maps>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshphysical_frag = \"#define PHYSICAL\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifndef STANDARD\\n\\tuniform float clearCoat;\\n\\tuniform float clearCoatRoughness;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <cube_uv_reflection_fragment>\\n#include <lights_pars_begin>\\n#include <lights_pars_maps>\\n#include <lights_physical_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshphysical_vert = \"#define PHYSICAL\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\nvoid main() {\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\\n\";\n\nvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\\n\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tgl_PointSize = size * ( scale / - mvPosition.z );\\n\\t#else\\n\\t\\tgl_PointSize = size;\\n\\t#endif\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar shadow_vert = \"#include <fog_pars_vertex>\\n#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_vertex: lights_lambert_vertex,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_pars_maps: lights_pars_maps,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tcube_frag: cube_frag,\n\tcube_vert: cube_vert,\n\tdepth_frag: depth_frag,\n\tdepth_vert: depth_vert,\n\tdistanceRGBA_frag: distanceRGBA_frag,\n\tdistanceRGBA_vert: distanceRGBA_vert,\n\tequirect_frag: equirect_frag,\n\tequirect_vert: equirect_vert,\n\tlinedashed_frag: linedashed_frag,\n\tlinedashed_vert: linedashed_vert,\n\tmeshbasic_frag: meshbasic_frag,\n\tmeshbasic_vert: meshbasic_vert,\n\tmeshlambert_frag: meshlambert_frag,\n\tmeshlambert_vert: meshlambert_vert,\n\tmeshphong_frag: meshphong_frag,\n\tmeshphong_vert: meshphong_vert,\n\tmeshphysical_frag: meshphysical_frag,\n\tmeshphysical_vert: meshphysical_vert,\n\tnormal_frag: normal_frag,\n\tnormal_vert: normal_vert,\n\tpoints_frag: points_frag,\n\tpoints_vert: points_vert,\n\tshadow_frag: shadow_frag,\n\tshadow_vert: shadow_vert\n};\n\n/**\n * Uniform Utilities\n */\n\nvar UniformsUtils = {\n\n\tmerge: function ( uniforms ) {\n\n\t\tvar merged = {};\n\n\t\tfor ( var u = 0; u < uniforms.length; u ++ ) {\n\n\t\t\tvar tmp = this.clone( uniforms[ u ] );\n\n\t\t\tfor ( var p in tmp ) {\n\n\t\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn merged;\n\n\t},\n\n\tclone: function ( uniforms_src ) {\n\n\t\tvar uniforms_dst = {};\n\n\t\tfor ( var u in uniforms_src ) {\n\n\t\t\tuniforms_dst[ u ] = {};\n\n\t\t\tfor ( var p in uniforms_src[ u ] ) {\n\n\t\t\t\tvar parameter_src = uniforms_src[ u ][ p ];\n\n\t\t\t\tif ( parameter_src && ( parameter_src.isColor ||\n\t\t\t\t\tparameter_src.isMatrix3 || parameter_src.isMatrix4 ||\n\t\t\t\t\tparameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 ||\n\t\t\t\t\tparameter_src.isTexture ) ) {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.clone();\n\n\t\t\t\t} else if ( Array.isArray( parameter_src ) ) {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.slice();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn uniforms_dst;\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nfunction Color( r, g, b ) {\n\n\tif ( g === undefined && b === undefined ) {\n\n\t\t// r is THREE.Color, hex or string\n\t\treturn this.set( r );\n\n\t}\n\n\treturn this.setRGB( r, g, b );\n\n}\n\nObject.assign( Color.prototype, {\n\n\tisColor: true,\n\n\tr: 1, g: 1, b: 1,\n\n\tset: function ( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetHex: function ( hex ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\treturn this;\n\n\t},\n\n\tsetRGB: function ( r, g, b ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\treturn this;\n\n\t},\n\n\tsetHSL: function () {\n\n\t\tfunction hue2rgb( p, q, t ) {\n\n\t\t\tif ( t < 0 ) t += 1;\n\t\t\tif ( t > 1 ) t -= 1;\n\t\t\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\t\t\tif ( t < 1 / 2 ) return q;\n\t\t\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\t\t\treturn p;\n\n\t\t}\n\n\t\treturn function setHSL( h, s, l ) {\n\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\t\th = _Math.euclideanModulo( h, 1 );\n\t\t\ts = _Math.clamp( s, 0, 1 );\n\t\t\tl = _Math.clamp( l, 0, 1 );\n\n\t\t\tif ( s === 0 ) {\n\n\t\t\t\tthis.r = this.g = this.b = l;\n\n\t\t\t} else {\n\n\t\t\t\tvar p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\t\tvar q = ( 2 * l ) - p;\n\n\t\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetStyle: function ( style ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tvar m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tvar color;\n\t\t\tvar name = m[ 1 ];\n\t\t\tvar components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tvar h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tvar s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tvar l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f0-9]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tvar hex = m[ 1 ];\n\t\t\tvar size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\t// color keywords\n\t\t\tvar hex = ColorKeywords[ style ];\n\n\t\t\tif ( hex !== undefined ) {\n\n\t\t\t\t// red\n\t\t\t\tthis.setHex( hex );\n\n\t\t\t} else {\n\n\t\t\t\t// unknown color\n\t\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t},\n\n\tcopy: function ( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t},\n\n\tcopyGammaToLinear: function ( color, gammaFactor ) {\n\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\treturn this;\n\n\t},\n\n\tcopyLinearToGamma: function ( color, gammaFactor ) {\n\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\tvar safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\treturn this;\n\n\t},\n\n\tconvertGammaToLinear: function () {\n\n\t\tvar r = this.r, g = this.g, b = this.b;\n\n\t\tthis.r = r * r;\n\t\tthis.g = g * g;\n\t\tthis.b = b * b;\n\n\t\treturn this;\n\n\t},\n\n\tconvertLinearToGamma: function () {\n\n\t\tthis.r = Math.sqrt( this.r );\n\t\tthis.g = Math.sqrt( this.g );\n\t\tthis.b = Math.sqrt( this.b );\n\n\t\treturn this;\n\n\t},\n\n\tgetHex: function () {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t},\n\n\tgetHexString: function () {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t},\n\n\tgetHSL: function ( target ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Color: .getHSL() target is now required' );\n\t\t\ttarget = { h: 0, s: 0, l: 0 };\n\n\t\t}\n\n\t\tvar r = this.r, g = this.g, b = this.b;\n\n\t\tvar max = Math.max( r, g, b );\n\t\tvar min = Math.min( r, g, b );\n\n\t\tvar hue, saturation;\n\t\tvar lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tvar delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t},\n\n\tgetStyle: function () {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t},\n\n\toffsetHSL: function () {\n\n\t\tvar hsl = {};\n\n\t\treturn function ( h, s, l ) {\n\n\t\t\tthis.getHSL( hsl );\n\n\t\t\thsl.h += h; hsl.s += s; hsl.l += l;\n\n\t\t\tthis.setHSL( hsl.h, hsl.s, hsl.l );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tadd: function ( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t},\n\n\taddColors: function ( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t},\n\n\tlerp: function ( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn this.getHex();\n\n\t}\n\n} );\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nvar UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() },\n\n\t\talphaMap: { value: null },\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 },\n\t\trefractionRatio: { value: 0.98 },\n\t\tmaxMipLevel: { value: 0 }\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotShadowMap: { value: [] },\n\t\tspotShadowMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n */\n\nvar ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 0.5 },\n\t\t\t\tmetalness: { value: 0.5 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.normal_vert,\n\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t},\n\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearCoat: { value: 0 },\n\t\t\tclearCoatRoughness: { value: 0 }\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLAttributes( gl ) {\n\n\tvar buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar usage = attribute.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW;\n\n\t\tvar buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tvar type = gl.FLOAT;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( attribute.dynamic === false ) {\n\n\t\t\tgl.bufferData( bufferType, array, gl.STATIC_DRAW );\n\n\t\t} else if ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else if ( updateRange.count === 0 ) {\n\n\t\t\tconsole.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' );\n\n\t\t} else {\n\n\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nfunction Euler( x, y, z, order ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._order = order || Euler.DefaultOrder;\n\n}\n\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nEuler.DefaultOrder = 'XYZ';\n\nObject.defineProperties( Euler.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\torder: {\n\n\t\tget: function () {\n\n\t\t\treturn this._order;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._order = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Euler.prototype, {\n\n\tisEuler: true,\n\n\tset: function ( x, y, z, order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order || this._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t},\n\n\tcopy: function ( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m, order, update ) {\n\n\t\tvar clamp = _Math.clamp;\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements;\n\t\tvar m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tvar m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tvar m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m13 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m23 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m32 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = 0;\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m31 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m21 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m12 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._y = 0;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromQuaternion: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function setFromQuaternion( q, order, update ) {\n\n\t\t\tmatrix.makeRotationFromQuaternion( q );\n\n\t\t\treturn this.setFromRotationMatrix( matrix, order, update );\n\n\t\t};\n\n\t}(),\n\n\tsetFromVector3: function ( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t},\n\n\treorder: function () {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\tvar q = new Quaternion();\n\n\t\treturn function reorder( newOrder ) {\n\n\t\t\tq.setFromEuler( this );\n\n\t\t\treturn this.setFromQuaternion( q, newOrder );\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t},\n\n\tfromArray: function ( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t},\n\n\ttoVector3: function ( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Layers() {\n\n\tthis.mask = 1 | 0;\n\n}\n\nObject.assign( Layers.prototype, {\n\n\tset: function ( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t},\n\n\tenable: function ( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t},\n\n\ttoggle: function ( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t},\n\n\tdisable: function ( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t},\n\n\ttest: function ( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author elephantatwork / www.elephantatwork.ch\n */\n\nvar object3DId = 0;\n\nfunction Object3D() {\n\n\tObject.defineProperty( this, 'id', { value: object3DId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Object3D';\n\n\tthis.parent = null;\n\tthis.children = [];\n\n\tthis.up = Object3D.DefaultUp.clone();\n\n\tvar position = new Vector3();\n\tvar rotation = new Euler();\n\tvar quaternion = new Quaternion();\n\tvar scale = new Vector3( 1, 1, 1 );\n\n\tfunction onRotationChange() {\n\n\t\tquaternion.setFromEuler( rotation, false );\n\n\t}\n\n\tfunction onQuaternionChange() {\n\n\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t}\n\n\trotation.onChange( onRotationChange );\n\tquaternion.onChange( onQuaternionChange );\n\n\tObject.defineProperties( this, {\n\t\tposition: {\n\t\t\tenumerable: true,\n\t\t\tvalue: position\n\t\t},\n\t\trotation: {\n\t\t\tenumerable: true,\n\t\t\tvalue: rotation\n\t\t},\n\t\tquaternion: {\n\t\t\tenumerable: true,\n\t\t\tvalue: quaternion\n\t\t},\n\t\tscale: {\n\t\t\tenumerable: true,\n\t\t\tvalue: scale\n\t\t},\n\t\tmodelViewMatrix: {\n\t\t\tvalue: new Matrix4()\n\t\t},\n\t\tnormalMatrix: {\n\t\t\tvalue: new Matrix3()\n\t\t}\n\t} );\n\n\tthis.matrix = new Matrix4();\n\tthis.matrixWorld = new Matrix4();\n\n\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\tthis.matrixWorldNeedsUpdate = false;\n\n\tthis.layers = new Layers();\n\tthis.visible = true;\n\n\tthis.castShadow = false;\n\tthis.receiveShadow = false;\n\n\tthis.frustumCulled = true;\n\tthis.renderOrder = 0;\n\n\tthis.userData = {};\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Object3D,\n\n\tisObject3D: true,\n\n\tonBeforeRender: function () {},\n\tonAfterRender: function () {},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tthis.matrix.multiplyMatrices( matrix, this.matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t},\n\n\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t},\n\n\tsetRotationFromEuler: function ( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t},\n\n\tsetRotationFromMatrix: function ( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t},\n\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t},\n\n\trotateOnAxis: function () {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.multiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateOnWorldAxis: function () {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnWorldAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.premultiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\ttranslateOnAxis: function () {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function translateOnAxis( axis, distance ) {\n\n\t\t\tv1.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\t\tthis.position.add( v1.multiplyScalar( distance ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function translateX( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function translateY( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function translateZ( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\tlocalToWorld: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t},\n\n\tworldToLocal: function () {\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function worldToLocal( vector ) {\n\n\t\t\treturn vector.applyMatrix4( m1.getInverse( this.matrixWorld ) );\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\t// This method does not support objects with rotated and/or translated parent(s)\n\n\t\tvar m1 = new Matrix4();\n\t\tvar vector = new Vector3();\n\n\t\treturn function lookAt( x, y, z ) {\n\n\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\tvector.copy( x );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( x, y, z );\n\n\t\t\t}\n\n\t\t\tif ( this.isCamera ) {\n\n\t\t\t\tm1.lookAt( this.position, vector, this.up );\n\n\t\t\t} else {\n\n\t\t\t\tm1.lookAt( vector, this.position, this.up );\n\n\t\t\t}\n\n\t\t\tthis.quaternion.setFromRotationMatrix( m1 );\n\n\t\t};\n\n\t}(),\n\n\tadd: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object can't be added as a child of itself.\", object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( ( object && object.isObject3D ) ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tobject.dispatchEvent( { type: 'added' } );\n\n\t\t\tthis.children.push( object );\n\n\t\t} else {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object not an instance of THREE.Object3D.\", object );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tremove: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( { type: 'removed' } );\n\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetObjectById: function ( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t},\n\n\tgetObjectByName: function ( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t},\n\n\tgetObjectByProperty: function ( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tvar child = this.children[ i ];\n\t\t\tvar object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t},\n\n\tgetWorldPosition: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldPosition() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t},\n\n\tgetWorldQuaternion: function () {\n\n\t\tvar position = new Vector3();\n\t\tvar scale = new Vector3();\n\n\t\treturn function getWorldQuaternion( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\t\ttarget = new Quaternion();\n\n\t\t\t}\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.matrixWorld.decompose( position, target, scale );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tgetWorldScale: function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldScale( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.matrixWorld.decompose( position, quaternion, target );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tgetWorldDirection: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldDirection( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\treturn target.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t};\n\n\t}(),\n\n\traycast: function () {},\n\n\ttraverse: function ( callback ) {\n\n\t\tcallback( this );\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseVisible: function ( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseAncestors: function ( callback ) {\n\n\t\tvar parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t},\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tvar output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tvar object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.geometry !== undefined ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tvar parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tvar shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvar shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tvar uuids = [];\n\n\t\t\t\tfor ( var i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( var i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tvar geometries = extractFromCache( meta.geometries );\n\t\t\tvar materials = extractFromCache( meta.materials );\n\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\tvar images = extractFromCache( meta.images );\n\t\t\tvar shapes = extractFromCache( meta.shapes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tvar values = [];\n\t\t\tfor ( var key in cache ) {\n\n\t\t\t\tvar data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\t\t\treturn values;\n\n\t\t}\n\n\t},\n\n\tclone: function ( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t},\n\n\tcopy: function ( source, recursive ) {\n\n\t\tif ( recursive === undefined ) recursive = true;\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( var i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tvar child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n * @author WestLangley / http://github.com/WestLangley\n*/\n\nfunction Camera() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Camera';\n\n\tthis.matrixWorldInverse = new Matrix4();\n\tthis.projectionMatrix = new Matrix4();\n\n}\n\nCamera.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Camera,\n\n\tisCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\n\t\treturn this;\n\n\t},\n\n\tgetWorldDirection: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldDirection( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\treturn target.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t};\n\n\t}(),\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tthis.matrixWorldInverse.getInverse( this.matrixWorld );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author arose / http://github.com/arose\n */\n\nfunction OrthographicCamera( left, right, top, bottom, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'OrthographicCamera';\n\n\tthis.zoom = 1;\n\tthis.view = null;\n\n\tthis.left = left;\n\tthis.right = right;\n\tthis.top = top;\n\tthis.bottom = bottom;\n\n\tthis.near = ( near !== undefined ) ? near : 0.1;\n\tthis.far = ( far !== undefined ) ? far : 2000;\n\n\tthis.updateProjectionMatrix();\n\n}\n\nOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: OrthographicCamera,\n\n\tisOrthographicCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t},\n\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tvar dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tvar dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tvar cx = ( this.right + this.left ) / 2;\n\t\tvar cy = ( this.top + this.bottom ) / 2;\n\n\t\tvar left = cx - dx;\n\t\tvar right = cx + dx;\n\t\tvar top = cy + dy;\n\t\tvar bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tvar zoomW = this.zoom / ( this.view.width / this.view.fullWidth );\n\t\t\tvar zoomH = this.zoom / ( this.view.height / this.view.fullHeight );\n\t\t\tvar scaleW = ( this.right - this.left ) / this.view.width;\n\t\t\tvar scaleH = ( this.top - this.bottom ) / this.view.height;\n\n\t\t\tleft += scaleW * ( this.view.offsetX / zoomW );\n\t\t\tright = left + scaleW * ( this.view.width / zoomW );\n\t\t\ttop -= scaleH * ( this.view.offsetY / zoomH );\n\t\t\tbottom = top - scaleH * ( this.view.height / zoomH );\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Face3( a, b, c, normal, color, materialIndex ) {\n\n\tthis.a = a;\n\tthis.b = b;\n\tthis.c = c;\n\n\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\tthis.color = ( color && color.isColor ) ? color : new Color();\n\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\tthis.materialIndex = materialIndex !== undefined ? materialIndex : 0;\n\n}\n\nObject.assign( Face3.prototype, {\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author bhouston / http://clara.io\n */\n\nvar geometryId = 0; // Geometry uses even numbers as Id\n\nfunction Geometry() {\n\n\tObject.defineProperty( this, 'id', { value: geometryId += 2 } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( var i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( var i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function () {\n\n\t\t// rotate geometry around world x-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\tm1.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\t// rotate geometry around world y-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\tm1.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\t// rotate geometry around world z-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\tm1.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function () {\n\n\t\t// translate geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function translate( x, y, z ) {\n\n\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tscale: function () {\n\n\t\t// scale geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function scale( x, y, z ) {\n\n\t\t\tm1.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar obj = new Object3D();\n\n\t\treturn function lookAt( vector ) {\n\n\t\t\tobj.lookAt( vector );\n\n\t\t\tobj.updateMatrix();\n\n\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t};\n\n\t}(),\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tvar scope = this;\n\n\t\tvar indices = geometry.index !== null ? geometry.index.array : undefined;\n\t\tvar attributes = geometry.attributes;\n\n\t\tvar positions = attributes.position.array;\n\t\tvar normals = attributes.normal !== undefined ? attributes.normal.array : undefined;\n\t\tvar colors = attributes.color !== undefined ? attributes.color.array : undefined;\n\t\tvar uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;\n\t\tvar uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined;\n\n\t\tif ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tvar tempNormals = [];\n\t\tvar tempUVs = [];\n\t\tvar tempUVs2 = [];\n\n\t\tfor ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\n\n\t\t\tscope.vertices.push( new Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) );\n\n\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\ttempNormals.push( new Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\ttempUVs.push( new Vector2( uvs[ j ], uvs[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\ttempUVs2.push( new Vector2( uvs2[ j ], uvs2[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tvar vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];\n\t\t\tvar vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];\n\n\t\t\tvar face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( var i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tvar start = group.start;\n\t\t\t\tvar count = group.count;\n\n\t\t\t\tfor ( var j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\t\t\taddFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\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\tif ( indices !== undefined ) {\n\n\t\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\taddFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( var i = 0; i < positions.length / 3; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function center() {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tvar center = this.boundingSphere.center;\n\t\tvar radius = this.boundingSphere.radius;\n\n\t\tvar s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tvar matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( var f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tvar face = this.faces[ f ];\n\n\t\t\tvar vA = this.vertices[ face.a ];\n\t\t\tvar vB = this.vertices[ face.b ];\n\t\t\tvar vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted ) {\n\n\t\tif ( areaWeighted === undefined ) areaWeighted = true;\n\n\t\tvar v, vl, f, fl, face, vertices;\n\n\t\tvertices = new Array( this.vertices.length );\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tvar vA, vB, vC;\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvA = this.vertices[ face.a ];\n\t\t\t\tvB = this.vertices[ face.b ];\n\t\t\t\tvC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tvar f, fl, face;\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\tvar i, il, f, fl, face;\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t//   otherwise just copy (for faster repeated calls)\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tvar tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tvar dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tvar dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tfaceNormal = new Vector3();\n\t\t\t\t\tvertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t// store morph normals\n\n\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tfaceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tvertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar normalMatrix,\n\t\t\tvertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tuvs1 = this.faceVertexUvs[ 0 ],\n\t\t\tuvs2 = geometry.faceVertexUvs[ 0 ],\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( materialIndexOffset === undefined ) materialIndexOffset = 0;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( var i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = vertices2[ i ];\n\n\t\t\tvar vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( var i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tvar face = faces2[ i ], faceCopy, normal, color,\n\t\t\t\tfaceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tfaceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( i = 0, il = uvs2.length; i < il; i ++ ) {\n\n\t\t\tvar uv = uvs2[ i ], uvCopy = [];\n\n\t\t\tif ( uv === undefined ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = uv.length; j < jl; j ++ ) {\n\n\t\t\t\tuvCopy.push( uv[ j ].clone() );\n\n\t\t\t}\n\n\t\t\tuvs1.push( uvCopy );\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function () {\n\n\t\tvar verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tvar unique = [], changes = [];\n\n\t\tvar v, key;\n\t\tvar precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n\t\tvar precision = Math.pow( 10, precisionPoints );\n\t\tvar i, il, face;\n\t\tvar indices, j, jl;\n\n\t\tfor ( i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tv = this.vertices[ i ];\n\t\t\tkey = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tvar faceIndicesToRemove = [];\n\n\t\tfor ( i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tface = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tindices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( var n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tvar idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tvar diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tvar faces = this.faces;\n\t\tvar length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tvar uvs1 = this.faceVertexUvs[ 0 ];\n\t\tvar uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tvar newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tvar vertices = [];\n\n\t\tfor ( var i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tvar faces = [];\n\t\tvar normals = [];\n\t\tvar normalsHash = {};\n\t\tvar colors = [];\n\t\tvar colorsHash = {};\n\t\tvar uvs = [];\n\t\tvar uvsHash = {};\n\n\t\tfor ( var i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\n\t\t\tvar hasMaterial = true;\n\t\t\tvar hasFaceUv = false; // deprecated\n\t\t\tvar hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tvar hasFaceNormal = face.normal.length() > 0;\n\t\t\tvar hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tvar hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tvar hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tvar faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tvar faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tvar hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tvar hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tvar hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar i, il, j, jl, k, kl;\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tvar vertices = source.vertices;\n\n\t\tfor ( i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tvar colors = source.colors;\n\n\t\tfor ( i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tvar faces = source.faces;\n\n\t\tfor ( i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tvar faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tvar uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tvar uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphTargets = source.morphTargets;\n\n\t\tfor ( i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tvar morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tvar morphNormals = source.morphNormals;\n\n\t\tfor ( i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tvar morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tvar destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tvar skinWeights = source.skinWeights;\n\n\t\tfor ( i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tvar skinIndices = source.skinIndices;\n\n\t\tfor ( i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tvar lineDistances = source.lineDistances;\n\n\t\tfor ( i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferAttribute( array, itemSize, normalized ) {\n\n\tif ( Array.isArray( array ) ) {\n\n\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t}\n\n\tthis.name = '';\n\n\tthis.array = array;\n\tthis.itemSize = itemSize;\n\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\tthis.normalized = normalized === true;\n\n\tthis.dynamic = false;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\n\tisBufferAttribute: true,\n\n\tonUploadCallback: function () {},\n\n\tsetArray: function ( array ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.count = array !== undefined ? array.length / this.itemSize : 0;\n\t\tthis.array = array;\n\n\t\treturn this;\n\n\t},\n\n\tsetDynamic: function ( value ) {\n\n\t\tthis.dynamic = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.dynamic = source.dynamic;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( var i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyArray: function ( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t},\n\n\tcopyColorsArray: function ( colors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tvar color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector2sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector3sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector4sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n} );\n\n//\n\nfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n}\n\nInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\nfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n}\n\nUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\nfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n}\n\nUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\nfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n}\n\nInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\nfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\nfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n}\n\nInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\nfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n}\n\nUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\n\nfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n}\n\nFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\nfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n}\n\nFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction DirectGeometry() {\n\n\tthis.vertices = [];\n\tthis.normals = [];\n\tthis.colors = [];\n\tthis.uvs = [];\n\tthis.uvs2 = [];\n\n\tthis.groups = [];\n\n\tthis.morphTargets = {};\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\t// this.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.verticesNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nObject.assign( DirectGeometry.prototype, {\n\n\tcomputeGroups: function ( geometry ) {\n\n\t\tvar group;\n\t\tvar groups = [];\n\t\tvar materialIndex = undefined;\n\n\t\tvar faces = geometry.faces;\n\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tvar faces = geometry.faces;\n\t\tvar vertices = geometry.vertices;\n\t\tvar faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tvar hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tvar hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tvar morphTargets = geometry.morphTargets;\n\t\tvar morphTargetsLength = morphTargets.length;\n\n\t\tvar morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( var i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = [];\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tvar morphNormals = geometry.morphNormals;\n\t\tvar morphNormalsLength = morphNormals.length;\n\n\t\tvar morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( var i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = [];\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tvar skinIndices = geometry.skinIndices;\n\t\tvar skinWeights = geometry.skinWeights;\n\n\t\tvar hasSkinIndices = skinIndices.length === vertices.length;\n\t\tvar hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tvar normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tvar color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( var j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tvar morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tvar max = array[ 0 ];\n\n\tfor ( var i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\nfunction BufferGeometry() {\n\n\tObject.defineProperty( this, 'id', { value: bufferGeometryId += 2 } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'BufferGeometry';\n\n\tthis.index = null;\n\tthis.attributes = {};\n\n\tthis.morphAttributes = {};\n\n\tthis.groups = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\tthis.drawRange = { start: 0, count: Infinity };\n\n}\n\nBufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: BufferGeometry,\n\n\tisBufferGeometry: true,\n\n\tgetIndex: function () {\n\n\t\treturn this.index;\n\n\t},\n\n\tsetIndex: function ( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t},\n\n\taddAttribute: function ( name, attribute ) {\n\n\t\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\t\tthis.addAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( name === 'index' ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\t\tthis.setIndex( attribute );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t},\n\n\tgetAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t},\n\n\tremoveAttribute: function ( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t},\n\n\taddGroup: function ( start, count, materialIndex ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex !== undefined ? materialIndex : 0\n\n\t\t} );\n\n\t},\n\n\tclearGroups: function () {\n\n\t\tthis.groups = [];\n\n\t},\n\n\tsetDrawRange: function ( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tmatrix.applyToBufferAttribute( position );\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tvar normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormalMatrix.applyToBufferAttribute( normal );\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function () {\n\n\t\t// rotate geometry around world x-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\tm1.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\t// rotate geometry around world y-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\tm1.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\t// rotate geometry around world z-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\tm1.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function () {\n\n\t\t// translate geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function translate( x, y, z ) {\n\n\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tscale: function () {\n\n\t\t// scale geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function scale( x, y, z ) {\n\n\t\t\tm1.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar obj = new Object3D();\n\n\t\treturn function lookAt( vector ) {\n\n\t\t\tobj.lookAt( vector );\n\n\t\t\tobj.updateMatrix();\n\n\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t};\n\n\t}(),\n\n\tcenter: function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function center() {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\tvar positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\tvar colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\tthis.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\tthis.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\tvar lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\tthis.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t} else if ( object.isMesh ) {\n\n\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\tthis.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tvar position = [];\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t},\n\n\tupdateFromObject: function ( object ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tvar direct = geometry.__directGeometry;\n\n\t\t\tif ( geometry.elementsNeedUpdate === true ) {\n\n\t\t\t\tdirect = undefined;\n\t\t\t\tgeometry.elementsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( direct === undefined ) {\n\n\t\t\t\treturn this.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\tgeometry = direct;\n\n\t\t}\n\n\t\tvar attribute;\n\n\t\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.position;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.normalsNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.normal;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.normals );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.normalsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.colorsNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.color;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyColorsArray( geometry.colors );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.colorsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.uvsNeedUpdate ) {\n\n\t\t\tattribute = this.attributes.uv;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.uvsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.lineDistancesNeedUpdate ) {\n\n\t\t\tattribute = this.attributes.lineDistance;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyArray( geometry.lineDistances );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.groupsNeedUpdate ) {\n\n\t\t\tgeometry.computeGroups( object.geometry );\n\t\t\tthis.groups = geometry.groups;\n\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry( geometry );\n\n\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\n\n\t},\n\n\tfromDirectGeometry: function ( geometry ) {\n\n\t\tvar positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tthis.addAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tvar normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tthis.addAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tvar colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tthis.addAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tvar uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tthis.addAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tvar uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tthis.addAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tthis.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( var name in geometry.morphTargets ) {\n\n\t\t\tvar array = [];\n\t\t\tvar morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( var i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ i ];\n\n\t\t\t\tvar attribute = new Float32BufferAttribute( morphTarget.length * 3, 3 );\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tvar skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tthis.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tvar skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tthis.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tvar position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tvar box = new Box3();\n\t\tvar vector = new Vector3();\n\n\t\treturn function computeBoundingSphere() {\n\n\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t}\n\n\t\t\tvar position = this.attributes.position;\n\n\t\t\tif ( position ) {\n\n\t\t\t\tvar center = this.boundingSphere.center;\n\n\t\t\t\tbox.setFromBufferAttribute( position );\n\t\t\t\tbox.getCenter( center );\n\n\t\t\t\t// hoping to find a boundingSphere with a radius smaller than the\n\t\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\tfor ( var i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t\tvector.x = position.getX( i );\n\t\t\t\t\tvector.y = position.getY( i );\n\t\t\t\t\tvector.z = position.getZ( i );\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\tcomputeFaceNormals: function () {\n\n\t\t// backwards compatibility\n\n\t},\n\n\tcomputeVertexNormals: function () {\n\n\t\tvar index = this.index;\n\t\tvar attributes = this.attributes;\n\t\tvar groups = this.groups;\n\n\t\tif ( attributes.position ) {\n\n\t\t\tvar positions = attributes.position.array;\n\n\t\t\tif ( attributes.normal === undefined ) {\n\n\t\t\t\tthis.addAttribute( 'normal', new BufferAttribute( new Float32Array( positions.length ), 3 ) );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tvar array = attributes.normal.array;\n\n\t\t\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\t\tarray[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar normals = attributes.normal.array;\n\n\t\t\tvar vA, vB, vC;\n\t\t\tvar pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tvar indices = index.array;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tthis.addGroup( 0, indices.length );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = groups.length; j < jl; ++ j ) {\n\n\t\t\t\t\tvar group = groups[ j ];\n\n\t\t\t\t\tvar start = group.start;\n\t\t\t\t\tvar count = group.count;\n\n\t\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\n\n\t\t\t\t\t\tvA = indices[ i + 0 ] * 3;\n\t\t\t\t\t\tvB = indices[ i + 1 ] * 3;\n\t\t\t\t\t\tvC = indices[ i + 2 ] * 3;\n\n\t\t\t\t\t\tpA.fromArray( positions, vA );\n\t\t\t\t\t\tpB.fromArray( positions, vB );\n\t\t\t\t\t\tpC.fromArray( positions, vC );\n\n\t\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\t\tnormals[ vA ] += cb.x;\n\t\t\t\t\t\tnormals[ vA + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vA + 2 ] += cb.z;\n\n\t\t\t\t\t\tnormals[ vB ] += cb.x;\n\t\t\t\t\t\tnormals[ vB + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vB + 2 ] += cb.z;\n\n\t\t\t\t\t\tnormals[ vC ] += cb.x;\n\t\t\t\t\t\tnormals[ vC + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vC + 2 ] += cb.z;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 9 ) {\n\n\t\t\t\t\tpA.fromArray( positions, i );\n\t\t\t\t\tpB.fromArray( positions, i + 3 );\n\t\t\t\t\tpC.fromArray( positions, i + 6 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormals[ i ] = cb.x;\n\t\t\t\t\tnormals[ i + 1 ] = cb.y;\n\t\t\t\t\tnormals[ i + 2 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 3 ] = cb.x;\n\t\t\t\t\tnormals[ i + 4 ] = cb.y;\n\t\t\t\t\tnormals[ i + 5 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 6 ] = cb.x;\n\t\t\t\t\tnormals[ i + 7 ] = cb.y;\n\t\t\t\t\tnormals[ i + 8 ] = cb.z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tattributes.normal.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tmerge: function ( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tvar attribute1 = attributes[ key ];\n\t\t\tvar attributeArray1 = attribute1.array;\n\n\t\t\tvar attribute2 = geometry.attributes[ key ];\n\t\t\tvar attributeArray2 = attribute2.array;\n\n\t\t\tvar attributeSize = attribute2.itemSize;\n\n\t\t\tfor ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tnormalizeNormals: function () {\n\n\t\tvar vector = new Vector3();\n\n\t\treturn function normalizeNormals() {\n\n\t\t\tvar normals = this.attributes.normal;\n\n\t\t\tfor ( var i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t\tvector.x = normals.getX( i );\n\t\t\t\tvector.y = normals.getY( i );\n\t\t\t\tvector.z = normals.getZ( i );\n\n\t\t\t\tvector.normalize();\n\n\t\t\t\tnormals.setXYZ( i, vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoNonIndexed: function () {\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar geometry2 = new BufferGeometry();\n\n\t\tvar indices = this.index.array;\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\n\t\t\tvar array = attribute.array;\n\t\t\tvar itemSize = attribute.itemSize;\n\n\t\t\tvar array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tvar index = 0, index2 = 0;\n\n\t\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( var j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) );\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tdata.data = { attributes: {} };\n\n\t\tvar index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tvar array = Array.prototype.slice.call( index.array );\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: array\n\t\t\t};\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\n\t\t\tvar array = Array.prototype.slice.call( attribute.array );\n\n\t\t\tdata.data.attributes[ key ] = {\n\t\t\t\titemSize: attribute.itemSize,\n\t\t\t\ttype: attribute.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: attribute.normalized\n\t\t\t};\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tvar boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new BufferGeometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar name, i, l;\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tvar index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone() );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tvar attributes = source.attributes;\n\n\t\tfor ( name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\t\t\tthis.addAttribute( name, attribute.clone() );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tvar morphAttributes = source.morphAttributes;\n\n\t\tfor ( name in morphAttributes ) {\n\n\t\t\tvar array = [];\n\t\t\tvar morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone() );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// groups\n\n\t\tvar groups = source.groups;\n\n\t\tfor ( i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// BoxGeometry\n\nfunction BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'BoxGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\tthis.mergeVertices();\n\n}\n\nBoxGeometry.prototype = Object.create( Geometry.prototype );\nBoxGeometry.prototype.constructor = BoxGeometry;\n\n// BoxBufferGeometry\n\nfunction BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'BoxBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tvar scope = this;\n\n\twidth = width || 1;\n\theight = height || 1;\n\tdepth = depth || 1;\n\n\t// segments\n\n\twidthSegments = Math.floor( widthSegments ) || 1;\n\theightSegments = Math.floor( heightSegments ) || 1;\n\tdepthSegments = Math.floor( depthSegments ) || 1;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar numberOfVertices = 0;\n\tvar groupStart = 0;\n\n\t// build each side of the box geometry\n\n\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\tvar segmentWidth = width / gridX;\n\t\tvar segmentHeight = height / gridY;\n\n\t\tvar widthHalf = width / 2;\n\t\tvar heightHalf = height / 2;\n\t\tvar depthHalf = depth / 2;\n\n\t\tvar gridX1 = gridX + 1;\n\t\tvar gridY1 = gridY + 1;\n\n\t\tvar vertexCounter = 0;\n\t\tvar groupCount = 0;\n\n\t\tvar ix, iy;\n\n\t\tvar vector = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tvar y = iy * segmentHeight - heightHalf;\n\n\t\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tvar x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = 0;\n\t\t\t\tvector[ v ] = 0;\n\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// uvs\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t// counters\n\n\t\t\t\tvertexCounter += 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\t// 1. you need three indices to draw a single face\n\t\t// 2. a single segment consists of two faces\n\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tvar a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\tvar b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\tvar c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tvar d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t// increase counter\n\n\t\t\t\tgroupCount += 6;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t\t// update total number of vertices\n\n\t\tnumberOfVertices += vertexCounter;\n\n\t}\n\n}\n\nBoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nBoxBufferGeometry.prototype.constructor = BoxBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// PlaneGeometry\n\nfunction PlaneGeometry( width, height, widthSegments, heightSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'PlaneGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\tthis.mergeVertices();\n\n}\n\nPlaneGeometry.prototype = Object.create( Geometry.prototype );\nPlaneGeometry.prototype.constructor = PlaneGeometry;\n\n// PlaneBufferGeometry\n\nfunction PlaneBufferGeometry( width, height, widthSegments, heightSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'PlaneBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\twidth = width || 1;\n\theight = height || 1;\n\n\tvar width_half = width / 2;\n\tvar height_half = height / 2;\n\n\tvar gridX = Math.floor( widthSegments ) || 1;\n\tvar gridY = Math.floor( heightSegments ) || 1;\n\n\tvar gridX1 = gridX + 1;\n\tvar gridY1 = gridY + 1;\n\n\tvar segment_width = width / gridX;\n\tvar segment_height = height / gridY;\n\n\tvar ix, iy;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\tvar y = iy * segment_height - height_half;\n\n\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\tvar x = ix * segment_width - width_half;\n\n\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\tuvs.push( ix / gridX );\n\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\tvar a = ix + gridX1 * iy;\n\t\t\tvar b = ix + gridX1 * ( iy + 1 );\n\t\t\tvar c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\tvar d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nPlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nvar materialId = 0;\n\nfunction Material() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Material';\n\n\tthis.fog = true;\n\tthis.lights = true;\n\n\tthis.blending = NormalBlending;\n\tthis.side = FrontSide;\n\tthis.flatShading = false;\n\tthis.vertexColors = NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors\n\n\tthis.opacity = 1;\n\tthis.transparent = false;\n\n\tthis.blendSrc = SrcAlphaFactor;\n\tthis.blendDst = OneMinusSrcAlphaFactor;\n\tthis.blendEquation = AddEquation;\n\tthis.blendSrcAlpha = null;\n\tthis.blendDstAlpha = null;\n\tthis.blendEquationAlpha = null;\n\n\tthis.depthFunc = LessEqualDepth;\n\tthis.depthTest = true;\n\tthis.depthWrite = true;\n\n\tthis.clippingPlanes = null;\n\tthis.clipIntersection = false;\n\tthis.clipShadows = false;\n\n\tthis.shadowSide = null;\n\n\tthis.colorWrite = true;\n\n\tthis.precision = null; // override the renderer's default precision for this material\n\n\tthis.polygonOffset = false;\n\tthis.polygonOffsetFactor = 0;\n\tthis.polygonOffsetUnits = 0;\n\n\tthis.dithering = false;\n\n\tthis.alphaTest = 0;\n\tthis.premultipliedAlpha = false;\n\n\tthis.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer\n\n\tthis.visible = true;\n\n\tthis.userData = {};\n\n\tthis.needsUpdate = true;\n\n}\n\nMaterial.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Material,\n\n\tisMaterial: true,\n\n\tonBeforeCompile: function () {},\n\n\tsetValues: function ( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( var key in values ) {\n\n\t\t\tvar newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.\" + this.type + \": '\" + key + \"' is not a property of this material.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else if ( key === 'overdraw' ) {\n\n\t\t\t\t// ensure overdraw is backwards-compatible with legacy boolean type\n\t\t\t\tthis[ key ] = Number( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearCoat !== undefined ) data.clearCoat = this.clearCoat;\n\t\tif ( this.clearCoatRoughness !== undefined ) data.clearCoatRoughness = this.clearCoatRoughness;\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\n\t\t}\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors !== NoColors ) data.vertexColors = this.vertexColors;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tvar values = [];\n\n\t\t\tfor ( var key in cache ) {\n\n\t\t\t\tvar data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\tvar images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.flatShading = source.flatShading;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.overdraw = source.overdraw;\n\n\t\tthis.visible = source.visible;\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.clipShadows = source.clipShadows;\n\t\tthis.clipIntersection = source.clipIntersection;\n\n\t\tvar srcPlanes = source.clippingPlanes,\n\t\t\tdstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tvar n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( var i = 0; i !== n; ++ i )\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.Multiply,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  depthTest: <bool>,\n *  depthWrite: <bool>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>\n * }\n */\n\nfunction MeshBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshBasicMaterial';\n\n\tthis.color = new Color( 0xffffff ); // emissive\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshBasicMaterial.prototype = Object.create( Material.prototype );\nMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nMeshBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  defines: { \"label\" : \"value\" },\n *  uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n *  fragmentShader: <string>,\n *  vertexShader: <string>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  lights: <bool>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction ShaderMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShaderMaterial';\n\n\tthis.defines = {};\n\tthis.uniforms = {};\n\n\tthis.vertexShader = 'void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}';\n\tthis.fragmentShader = 'void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}';\n\n\tthis.linewidth = 1;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false; // set to use scene fog\n\tthis.lights = false; // set to use scene lights\n\tthis.clipping = false; // set to use user-defined clipping planes\n\n\tthis.skinning = false; // set to use skinning attribute streams\n\tthis.morphTargets = false; // set to use morph targets\n\tthis.morphNormals = false; // set to use morph normals\n\n\tthis.extensions = {\n\t\tderivatives: false, // set to use derivatives\n\t\tfragDepth: false, // set to use fragment depth values\n\t\tdrawBuffers: false, // set to use draw buffers\n\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t};\n\n\t// When rendered geometry doesn't include these attributes but the material does,\n\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\tthis.defaultAttributeValues = {\n\t\t'color': [ 1, 1, 1 ],\n\t\t'uv': [ 0, 0 ],\n\t\t'uv2': [ 0, 0 ]\n\t};\n\n\tthis.index0AttributeName = undefined;\n\tthis.uniformsNeedUpdate = false;\n\n\tif ( parameters !== undefined ) {\n\n\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nShaderMaterial.prototype = Object.create( Material.prototype );\nShaderMaterial.prototype.constructor = ShaderMaterial;\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nShaderMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.fragmentShader = source.fragmentShader;\n\tthis.vertexShader = source.vertexShader;\n\n\tthis.uniforms = UniformsUtils.clone( source.uniforms );\n\n\tthis.defines = Object.assign( {}, source.defines );\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.lights = source.lights;\n\tthis.clipping = source.clipping;\n\n\tthis.skinning = source.skinning;\n\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\tthis.extensions = source.extensions;\n\n\treturn this;\n\n};\n\nShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\tvar data = Material.prototype.toJSON.call( this, meta );\n\n\tdata.uniforms = this.uniforms;\n\tdata.vertexShader = this.vertexShader;\n\tdata.fragmentShader = this.fragmentShader;\n\n\treturn data;\n\n};\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Ray( origin, direction ) {\n\n\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\tthis.direction = ( direction !== undefined ) ? direction : new Vector3();\n\n}\n\nObject.assign( Ray.prototype, {\n\n\tset: function ( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t},\n\n\tlookAt: function ( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\trecast: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function recast( t ) {\n\n\t\t\tthis.origin.copy( this.at( t, v1 ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tvar directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t},\n\n\tdistanceSqToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceSqToPoint( point ) {\n\n\t\t\tvar directionDistance = v1.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t\t// point behind the ray\n\n\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t\t}\n\n\t\t\tv1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t\treturn v1.distanceToSquared( point );\n\n\t\t};\n\n\t}(),\n\n\tdistanceSqToSegment: function () {\n\n\t\tvar segCenter = new Vector3();\n\t\tvar segDir = new Vector3();\n\t\tvar diff = new Vector3();\n\n\t\treturn function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t\t// It returns the min distance between the ray and the segment\n\t\t\t// defined by v0 and v1\n\t\t\t// It can also set two optional targets :\n\t\t\t// - The closest point on the ray\n\t\t\t// - The closest point on the segment\n\n\t\t\tsegCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t\tsegDir.copy( v1 ).sub( v0 ).normalize();\n\t\t\tdiff.copy( this.origin ).sub( segCenter );\n\n\t\t\tvar segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\t\tvar a01 = - this.direction.dot( segDir );\n\t\t\tvar b0 = diff.dot( this.direction );\n\t\t\tvar b1 = - diff.dot( segDir );\n\t\t\tvar c = diff.lengthSq();\n\t\t\tvar det = Math.abs( 1 - a01 * a01 );\n\t\t\tvar s0, s1, sqrDist, extDet;\n\n\t\t\tif ( det > 0 ) {\n\n\t\t\t\t// The ray and segment are not parallel.\n\n\t\t\t\ts0 = a01 * b1 - b0;\n\t\t\t\ts1 = a01 * b0 - b1;\n\t\t\t\textDet = segExtent * det;\n\n\t\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\t\tvar invDet = 1 / det;\n\t\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 5\n\n\t\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t\t// region 4\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 3\n\n\t\t\t\t\t\ts0 = 0;\n\t\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 2\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Ray and segment are parallel.\n\n\t\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnRay ) {\n\n\t\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnSegment ) {\n\n\t\t\t\toptionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter );\n\n\t\t\t}\n\n\t\t\treturn sqrDist;\n\n\t\t};\n\n\t}(),\n\n\tintersectSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectSphere( sphere, target ) {\n\n\t\t\tv1.subVectors( sphere.center, this.origin );\n\t\t\tvar tca = v1.dot( this.direction );\n\t\t\tvar d2 = v1.dot( v1 ) - tca * tca;\n\t\t\tvar radius2 = sphere.radius * sphere.radius;\n\n\t\t\tif ( d2 > radius2 ) return null;\n\n\t\t\tvar thc = Math.sqrt( radius2 - d2 );\n\n\t\t\t// t0 = first intersect point - entrance on front of sphere\n\t\t\tvar t0 = tca - thc;\n\n\t\t\t// t1 = second intersect point - exit point on back of sphere\n\t\t\tvar t1 = tca + thc;\n\n\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t\t// test to see if t0 is behind the ray:\n\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t\t// in order to always return an intersect point that is in front of the ray.\n\t\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\t\treturn this.at( t0, target );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) <= sphere.radius;\n\n\t},\n\n\tdistanceToPlane: function ( plane ) {\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t},\n\n\tintersectPlane: function ( plane, target ) {\n\n\t\tvar t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tvar distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t},\n\n\tintersectBox: function ( box, target ) {\n\n\t\tvar tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tvar invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tvar origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t},\n\n\tintersectsBox: ( function () {\n\n\t\tvar v = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\treturn this.intersectBox( box, v ) !== null;\n\n\t\t};\n\n\t} )(),\n\n\tintersectTriangle: function () {\n\n\t\t// Compute the offset origin, edges, and normal.\n\t\tvar diff = new Vector3();\n\t\tvar edge1 = new Vector3();\n\t\tvar edge2 = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\treturn function intersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t\tedge1.subVectors( b, a );\n\t\t\tedge2.subVectors( c, a );\n\t\t\tnormal.crossVectors( edge1, edge2 );\n\n\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t\t//   |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t\t//   |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t\t//   |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\t\tvar DdN = this.direction.dot( normal );\n\t\t\tvar sign;\n\n\t\t\tif ( DdN > 0 ) {\n\n\t\t\t\tif ( backfaceCulling ) return null;\n\t\t\t\tsign = 1;\n\n\t\t\t} else if ( DdN < 0 ) {\n\n\t\t\t\tsign = - 1;\n\t\t\t\tDdN = - DdN;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tdiff.subVectors( this.origin, a );\n\t\t\tvar DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) );\n\n\t\t\t// b1 < 0, no intersection\n\t\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) );\n\n\t\t\t// b2 < 0, no intersection\n\t\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// b1+b2 > 1, no intersection\n\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Line intersects triangle, check if ray does.\n\t\t\tvar QdN = - sign * diff.dot( normal );\n\n\t\t\t// t < 0, no intersection\n\t\t\tif ( QdN < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Ray intersects triangle.\n\t\t\treturn this.at( QdN / DdN, target );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix4: function ( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Line3( start, end ) {\n\n\tthis.start = ( start !== undefined ) ? start : new Vector3();\n\tthis.end = ( end !== undefined ) ? end : new Vector3();\n\n}\n\nObject.assign( Line3.prototype, {\n\n\tset: function ( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t},\n\n\tdelta: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t},\n\n\tdistanceSq: function () {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t},\n\n\tdistance: function () {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t},\n\n\tclosestPointToPointParameter: function () {\n\n\t\tvar startP = new Vector3();\n\t\tvar startEnd = new Vector3();\n\n\t\treturn function closestPointToPointParameter( point, clampToLine ) {\n\n\t\t\tstartP.subVectors( point, this.start );\n\t\t\tstartEnd.subVectors( this.end, this.start );\n\n\t\t\tvar startEnd2 = startEnd.dot( startEnd );\n\t\t\tvar startEnd_startP = startEnd.dot( startP );\n\n\t\t\tvar t = startEnd_startP / startEnd2;\n\n\t\t\tif ( clampToLine ) {\n\n\t\t\t\tt = _Math.clamp( t, 0, 1 );\n\n\t\t\t}\n\n\t\t\treturn t;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, clampToLine, target ) {\n\n\t\tvar t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Triangle( a, b, c ) {\n\n\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n}\n\nObject.assign( Triangle, {\n\n\tgetNormal: function () {\n\n\t\tvar v0 = new Vector3();\n\n\t\treturn function getNormal( a, b, c, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.subVectors( c, b );\n\t\t\tv0.subVectors( a, b );\n\t\t\ttarget.cross( v0 );\n\n\t\t\tvar targetLengthSq = target.lengthSq();\n\t\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t\t}\n\n\t\t\treturn target.set( 0, 0, 0 );\n\n\t\t};\n\n\t}(),\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tgetBarycoord: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function getBarycoord( point, a, b, c, target ) {\n\n\t\t\tv0.subVectors( c, a );\n\t\t\tv1.subVectors( b, a );\n\t\t\tv2.subVectors( point, a );\n\n\t\t\tvar dot00 = v0.dot( v0 );\n\t\t\tvar dot01 = v0.dot( v1 );\n\t\t\tvar dot02 = v0.dot( v2 );\n\t\t\tvar dot11 = v1.dot( v1 );\n\t\t\tvar dot12 = v1.dot( v2 );\n\n\t\t\tvar denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\t// collinear or singular triangle\n\t\t\tif ( denom === 0 ) {\n\n\t\t\t\t// arbitrary location outside of triangle?\n\t\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t\t}\n\n\t\t\tvar invDenom = 1 / denom;\n\t\t\tvar u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\t\tvar v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t\t// barycentric coordinates must always sum to 1\n\t\t\treturn target.set( 1 - u - v, v, u );\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function containsPoint( point, a, b, c ) {\n\n\t\t\tTriangle.getBarycoord( point, a, b, c, v1 );\n\n\t\t\treturn ( v1.x >= 0 ) && ( v1.y >= 0 ) && ( ( v1.x + v1.y ) <= 1 );\n\n\t\t};\n\n\t}()\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tset: function ( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPointsAndIndices: function ( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t},\n\n\tgetArea: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getArea() {\n\n\t\t\tv0.subVectors( this.c, this.b );\n\t\t\tv1.subVectors( this.a, this.b );\n\n\t\t\treturn v0.cross( v1 ).length() * 0.5;\n\n\t\t};\n\n\t}(),\n\n\tgetMidpoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t},\n\n\tgetNormal: function ( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t},\n\n\tgetPlane: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t},\n\n\tgetBarycoord: function ( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t},\n\n\tclosestPointToPoint: function () {\n\n\t\tvar plane = new Plane();\n\t\tvar edgeList = [ new Line3(), new Line3(), new Line3() ];\n\t\tvar projectedPoint = new Vector3();\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function closestPointToPoint( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar minDistance = Infinity;\n\n\t\t\t// project the point onto the plane of the triangle\n\n\t\t\tplane.setFromCoplanarPoints( this.a, this.b, this.c );\n\t\t\tplane.projectPoint( point, projectedPoint );\n\n\t\t\t// check if the projection lies within the triangle\n\n\t\t\tif ( this.containsPoint( projectedPoint ) === true ) {\n\n\t\t\t\t// if so, this is the closest point\n\n\t\t\t\ttarget.copy( projectedPoint );\n\n\t\t\t} else {\n\n\t\t\t\t// if not, the point falls outside the triangle. the target is the closest point to the triangle's edges or vertices\n\n\t\t\t\tedgeList[ 0 ].set( this.a, this.b );\n\t\t\t\tedgeList[ 1 ].set( this.b, this.c );\n\t\t\t\tedgeList[ 2 ].set( this.c, this.a );\n\n\t\t\t\tfor ( var i = 0; i < edgeList.length; i ++ ) {\n\n\t\t\t\t\tedgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint );\n\n\t\t\t\t\tvar distance = projectedPoint.distanceToSquared( closestPoint );\n\n\t\t\t\t\tif ( distance < minDistance ) {\n\n\t\t\t\t\t\tminDistance = distance;\n\n\t\t\t\t\t\ttarget.copy( closestPoint );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author jonobr1 / http://jonobr1.com/\n */\n\nfunction Mesh( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Mesh';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new MeshBasicMaterial( { color: Math.random() * 0xffffff } );\n\n\tthis.drawMode = TrianglesDrawMode;\n\n\tthis.updateMorphTargets();\n\n}\n\nMesh.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Mesh,\n\n\tisMesh: true,\n\n\tsetDrawMode: function ( value ) {\n\n\t\tthis.drawMode = value;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.drawMode = source.drawMode;\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tvar geometry = this.geometry;\n\t\tvar m, ml, name;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tvar morphAttributes = geometry.morphAttributes;\n\t\t\tvar keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tvar morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tname = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\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\tvar morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( m = 0, ml = morphTargets.length; m < ml; m ++ ) {\n\n\t\t\t\t\tname = morphTargets[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\tvar vA = new Vector3();\n\t\tvar vB = new Vector3();\n\t\tvar vC = new Vector3();\n\n\t\tvar tempA = new Vector3();\n\t\tvar tempB = new Vector3();\n\t\tvar tempC = new Vector3();\n\n\t\tvar uvA = new Vector2();\n\t\tvar uvB = new Vector2();\n\t\tvar uvC = new Vector2();\n\n\t\tvar barycoord = new Vector3();\n\n\t\tvar intersectionPoint = new Vector3();\n\t\tvar intersectionPointWorld = new Vector3();\n\n\t\tfunction uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) {\n\n\t\t\tTriangle.getBarycoord( point, p1, p2, p3, barycoord );\n\n\t\t\tuv1.multiplyScalar( barycoord.x );\n\t\t\tuv2.multiplyScalar( barycoord.y );\n\t\t\tuv3.multiplyScalar( barycoord.z );\n\n\t\t\tuv1.add( uv2 ).add( uv3 );\n\n\t\t\treturn uv1.clone();\n\n\t\t}\n\n\t\tfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\t\t\tvar intersect;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t\t\t} else {\n\n\t\t\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t\t\t}\n\n\t\t\tif ( intersect === null ) return null;\n\n\t\t\tintersectionPointWorld.copy( point );\n\t\t\tintersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectionPointWorld );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\t\t\treturn {\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: intersectionPointWorld.clone(),\n\t\t\t\tobject: object\n\t\t\t};\n\n\t\t}\n\n\t\tfunction checkBufferGeometryIntersection( object, raycaster, ray, position, uv, a, b, c ) {\n\n\t\t\tvA.fromBufferAttribute( position, a );\n\t\t\tvB.fromBufferAttribute( position, b );\n\t\t\tvC.fromBufferAttribute( position, c );\n\n\t\t\tvar intersection = checkIntersection( object, object.material, raycaster, ray, vA, vB, vC, intersectionPoint );\n\n\t\t\tif ( intersection ) {\n\n\t\t\t\tif ( uv ) {\n\n\t\t\t\t\tuvA.fromBufferAttribute( uv, a );\n\t\t\t\t\tuvB.fromBufferAttribute( uv, b );\n\t\t\t\t\tuvC.fromBufferAttribute( uv, c );\n\n\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC );\n\n\t\t\t\t}\n\n\t\t\t\tvar face = new Face3( a, b, c );\n\t\t\t\tTriangle.getNormal( vA, vB, vC, face.normal );\n\n\t\t\t\tintersection.face = face;\n\t\t\t\tintersection.faceIndex = a;\n\n\t\t\t}\n\n\t\t\treturn intersection;\n\n\t\t}\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar material = this.material;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\tif ( material === undefined ) return;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\t// Check boundingBox before continuing\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tif ( ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t\t}\n\n\t\t\tvar intersection;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar a, b, c;\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar position = geometry.attributes.position;\n\t\t\t\tvar uv = geometry.attributes.uv;\n\t\t\t\tvar i, l;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t// indexed buffer geometry\n\n\t\t\t\t\tfor ( i = 0, l = index.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\ta = index.getX( i );\n\t\t\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indices buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\t\tfor ( i = 0, l = position.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\ta = i;\n\t\t\t\t\t\tb = i + 1;\n\t\t\t\t\t\tc = i + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) intersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar fvA, fvB, fvC;\n\t\t\t\tvar isMultiMaterial = Array.isArray( material );\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar faces = geometry.faces;\n\t\t\t\tvar uvs;\n\n\t\t\t\tvar faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\t\tfor ( var f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tvar face = faces[ f ];\n\t\t\t\t\tvar faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\t\tfvA = vertices[ face.a ];\n\t\t\t\t\tfvB = vertices[ face.b ];\n\t\t\t\t\tfvC = vertices[ face.c ];\n\n\t\t\t\t\tif ( faceMaterial.morphTargets === true ) {\n\n\t\t\t\t\t\tvar morphTargets = geometry.morphTargets;\n\t\t\t\t\t\tvar morphInfluences = this.morphTargetInfluences;\n\n\t\t\t\t\t\tvA.set( 0, 0, 0 );\n\t\t\t\t\t\tvB.set( 0, 0, 0 );\n\t\t\t\t\t\tvC.set( 0, 0, 0 );\n\n\t\t\t\t\t\tfor ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\tvar influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\tvar targets = morphTargets[ t ].vertices;\n\n\t\t\t\t\t\t\tvA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence );\n\t\t\t\t\t\t\tvB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence );\n\t\t\t\t\t\t\tvC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvA.add( fvA );\n\t\t\t\t\t\tvB.add( fvB );\n\t\t\t\t\t\tvC.add( fvC );\n\n\t\t\t\t\t\tfvA = vA;\n\t\t\t\t\t\tfvB = vB;\n\t\t\t\t\t\tfvC = vC;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, ray, fvA, fvB, fvC, intersectionPoint );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\t\tvar uvs_f = uvs[ f ];\n\t\t\t\t\t\t\tuvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t\tuvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t\tuvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tintersection.face = face;\n\t\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\t\tintersects.push( intersection );\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\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLBackground( renderer, state, geometries, premultipliedAlpha ) {\n\n\tvar clearColor = new Color( 0x000000 );\n\tvar clearAlpha = 0;\n\n\tvar planeCamera, planeMesh;\n\tvar boxMesh;\n\n\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\tvar background = scene.background;\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && background.isCubeTexture ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tuniforms: ShaderLib.cube.uniforms,\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: true,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.removeAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.removeAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\tgeometries.update( boxMesh.geometry );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.tCube.value = background;\n\n\t\t\trenderList.push( boxMesh, boxMesh.geometry, boxMesh.material, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeCamera === undefined ) {\n\n\t\t\t\tplaneCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\tnew MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } )\n\t\t\t\t);\n\n\t\t\t\tgeometries.update( planeMesh.geometry );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.map = background;\n\n\t\t\t// TODO Push this to renderList\n\n\t\t\trenderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha !== undefined ? alpha : 1;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLBufferRenderer( gl, extensions, info ) {\n\n\tvar mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode );\n\n\t}\n\n\tfunction renderInstances( geometry, start, count ) {\n\n\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar position = geometry.attributes.position;\n\n\t\tif ( position.isInterleavedBufferAttribute ) {\n\n\t\t\tcount = position.data.count;\n\n\t\t\textension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount );\n\n\t\t} else {\n\n\t\t\textension.drawArraysInstancedANGLE( mode, start, count, geometry.maxInstancedCount );\n\n\t\t}\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tvar maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tvar extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t     gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t     gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tvar precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tvar maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tvar logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tvar maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tvar maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tvar maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tvar maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tvar maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tvar maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tvar vertexTextures = maxVertexTextures > 0;\n\tvar floatFragmentTextures = !! extensions.get( 'OES_texture_float' );\n\tvar floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\treturn {\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures\n\n\t};\n\n}\n\n/**\n * @author tschw\n */\n\nfunction WebGLClipping() {\n\n\tvar scope = this,\n\n\t\tglobalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false,\n\n\t\tplane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tvar enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( planes, clipIntersection, clipShadows, camera, cache, fromCache ) {\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4,\n\n\t\t\t\tdstArray = cache.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, fromCache );\n\n\t\t\tfor ( var i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tcache.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tvar nPlanes = planes !== null ? planes.length : 0,\n\t\t\tdstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tvar flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLExtensions( gl ) {\n\n\tvar extensions = {};\n\n\treturn {\n\n\t\tget: function ( name ) {\n\n\t\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\t\treturn extensions[ name ];\n\n\t\t\t}\n\n\t\t\tvar extension;\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\textension = gl.getExtension( name );\n\n\t\t\t}\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\textensions[ name ] = extension;\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLGeometries( gl, attributes, info ) {\n\n\tvar geometries = {};\n\tvar wireframeAttributes = {};\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tvar geometry = event.target;\n\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t}\n\n\t\tfor ( var name in buffergeometry.attributes ) {\n\n\t\t\tattributes.remove( buffergeometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\t// TODO Remove duplicate code\n\n\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\tdelete wireframeAttributes[ geometry.id ];\n\n\t\t}\n\n\t\tattribute = wireframeAttributes[ buffergeometry.id ];\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\tdelete wireframeAttributes[ buffergeometry.id ];\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tbuffergeometry = geometry;\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t}\n\n\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t}\n\n\t\tgeometries[ geometry.id ] = buffergeometry;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tvar index = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tfor ( var name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( var name in morphAttributes ) {\n\n\t\t\tvar array = morphAttributes[ name ];\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\tif ( attribute ) return attribute;\n\n\t\tvar indices = [];\n\n\t\tvar geometryIndex = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t// console.time( 'wireframe' );\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tvar array = geometryIndex.array;\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tvar a = array[ i + 0 ];\n\t\t\t\tvar b = array[ i + 1 ];\n\t\t\t\tvar c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar array = geometryAttributes.position.array;\n\n\t\t\tfor ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tvar a = i + 0;\n\t\t\t\tvar b = i + 1;\n\t\t\t\tvar c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// console.timeEnd( 'wireframe' );\n\n\t\tattribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\n\t\tattributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\twireframeAttributes[ geometry.id ] = attribute;\n\n\t\treturn attribute;\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\n\n\tvar mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tvar type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode );\n\n\t}\n\n\tfunction renderInstances( geometry, start, count ) {\n\n\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\textension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WebGLInfo( gl ) {\n\n\tvar memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tvar render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\tinstanceCount = instanceCount || 1;\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.TRIANGLE_STRIP:\n\t\t\tcase gl.TRIANGLE_FAN:\n\t\t\t\trender.triangles += instanceCount * ( count - 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl ) {\n\n\tvar influencesList = {};\n\tvar morphInfluences = new Float32Array( 8 );\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tvar objectInfluences = object.morphTargetInfluences;\n\n\t\tvar length = objectInfluences.length;\n\n\t\tvar influences = influencesList[ geometry.id ];\n\n\t\tif ( influences === undefined ) {\n\n\t\t\t// initialise list\n\n\t\t\tinfluences = [];\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t}\n\n\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t}\n\n\t\tvar morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tvar morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\t// Remove current morphAttributes\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence[ 1 ] !== 0 ) {\n\n\t\t\t\tif ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );\n\t\t\t\tif ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Collect influences\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tinfluence[ 0 ] = i;\n\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t}\n\n\t\tinfluences.sort( absNumericalSort );\n\n\t\t// Add morphAttributes\n\n\t\tfor ( var i = 0; i < 8; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence ) {\n\n\t\t\t\tvar index = influence[ 0 ];\n\t\t\t\tvar value = influence[ 1 ];\n\n\t\t\t\tif ( value ) {\n\n\t\t\t\t\tif ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\t\t\t\t\tif ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLObjects( geometries, info ) {\n\n\tvar updateList = {};\n\n\tfunction update( object ) {\n\n\t\tvar frame = info.render.frame;\n\n\t\tvar geometry = object.geometry;\n\t\tvar buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateList[ buffergeometry.id ] !== frame ) {\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t}\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateList[ buffergeometry.id ] = frame;\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\timages = images !== undefined ? images : [];\n\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.flipY = false;\n\n}\n\nCubeTexture.prototype = Object.create( Texture.prototype );\nCubeTexture.prototype.constructor = CubeTexture;\n\nCubeTexture.prototype.isCubeTexture = true;\n\nObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\tget: function () {\n\n\t\treturn this.image;\n\n\t},\n\n\tset: function ( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n} );\n\n/**\n * @author tschw\n *\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program, renderer )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [renderer] )\n *\n * \t\tuploads a uniform value(s)\n *  \tthe 'renderer' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (renderer factorizations):\n *\n * .upload( gl, seq, values, renderer )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (renderer factorizations):\n *\n * .setValue( gl, name, value )\n *\n * \t\tsets uniform with  name 'name' to 'value'\n *\n * .set( gl, obj, prop )\n *\n * \t\tsets uniform from object and property with same name than uniform\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nvar emptyTexture = new Texture();\nvar emptyCubeTexture = new CubeTexture();\n\n// --- Base for inner nodes (including the root) ---\n\nfunction UniformContainer() {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nvar arrayCacheF32 = [];\nvar arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nvar mat4array = new Float32Array( 16 );\nvar mat3array = new Float32Array( 9 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tvar firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tvar n = nBlocks * blockSize,\n\t\tr = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( var i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( renderer, n ) {\n\n\tvar r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( var i = 0; i !== n; ++ i )\n\t\tr[ i ] = renderer.allocTextureUnit();\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValue1f( gl, v ) {\n\n\tgl.uniform1f( this.addr, v );\n\n}\n\nfunction setValue1i( gl, v ) {\n\n\tgl.uniform1i( this.addr, v );\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValue2fv( gl, v ) {\n\n\tif ( v.x === undefined ) {\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t} else {\n\n\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t}\n\n}\n\nfunction setValue3fv( gl, v ) {\n\n\tif ( v.x !== undefined ) {\n\n\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t} else {\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t}\n\n}\n\nfunction setValue4fv( gl, v ) {\n\n\tif ( v.x === undefined ) {\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t} else {\n\n\t\t gl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t}\n\n}\n\n// Single matrix (from flat array or MatrixN)\n\nfunction setValue2fm( gl, v ) {\n\n\tgl.uniformMatrix2fv( this.addr, false, v.elements || v );\n\n}\n\nfunction setValue3fm( gl, v ) {\n\n\tif ( v.elements === undefined ) {\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t} else {\n\n\t\tmat3array.set( v.elements );\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t}\n\n}\n\nfunction setValue4fm( gl, v ) {\n\n\tif ( v.elements === undefined ) {\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t} else {\n\n\t\tmat4array.set( v.elements );\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t}\n\n}\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, renderer ) {\n\n\tvar unit = renderer.allocTextureUnit();\n\tgl.uniform1i( this.addr, unit );\n\trenderer.setTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, renderer ) {\n\n\tvar unit = renderer.allocTextureUnit();\n\tgl.uniform1i( this.addr, unit );\n\trenderer.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\nfunction setValue2iv( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValue3iv( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValue4iv( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValue1f; // FLOAT\n\t\tcase 0x8b50: return setValue2fv; // _VEC2\n\t\tcase 0x8b51: return setValue3fv; // _VEC3\n\t\tcase 0x8b52: return setValue4fv; // _VEC4\n\n\t\tcase 0x8b5a: return setValue2fm; // _MAT2\n\t\tcase 0x8b5b: return setValue3fm; // _MAT3\n\t\tcase 0x8b5c: return setValue4fm; // _MAT4\n\n\t\tcase 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES\n\t\tcase 0x8b60: return setValueT6; // SAMPLER_CUBE\n\n\t\tcase 0x1404: case 0x8b56: return setValue1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t}\n\n}\n\n// Array of scalars\n\nfunction setValue1fv( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\nfunction setValue1iv( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of vectors (flat or from THREE classes)\n\nfunction setValueV2a( gl, v ) {\n\n\tgl.uniform2fv( this.addr, flatten( v, this.size, 2 ) );\n\n}\n\nfunction setValueV3a( gl, v ) {\n\n\tgl.uniform3fv( this.addr, flatten( v, this.size, 3 ) );\n\n}\n\nfunction setValueV4a( gl, v ) {\n\n\tgl.uniform4fv( this.addr, flatten( v, this.size, 4 ) );\n\n}\n\n// Array of matrices (flat or from THREE clases)\n\nfunction setValueM2a( gl, v ) {\n\n\tgl.uniformMatrix2fv( this.addr, false, flatten( v, this.size, 4 ) );\n\n}\n\nfunction setValueM3a( gl, v ) {\n\n\tgl.uniformMatrix3fv( this.addr, false, flatten( v, this.size, 9 ) );\n\n}\n\nfunction setValueM4a( gl, v ) {\n\n\tgl.uniformMatrix4fv( this.addr, false, flatten( v, this.size, 16 ) );\n\n}\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1a( gl, v, renderer ) {\n\n\tvar n = v.length,\n\t\tunits = allocTexUnits( renderer, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\trenderer.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6a( gl, v, renderer ) {\n\n\tvar n = v.length,\n\t\tunits = allocTexUnits( renderer, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\trenderer.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValue1fv; // FLOAT\n\t\tcase 0x8b50: return setValueV2a; // _VEC2\n\t\tcase 0x8b51: return setValueV3a; // _VEC3\n\t\tcase 0x8b52: return setValueV4a; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2a; // _MAT2\n\t\tcase 0x8b5b: return setValueM3a; // _MAT3\n\t\tcase 0x8b5c: return setValueM4a; // _MAT4\n\n\t\tcase 0x8b5e: return setValueT1a; // SAMPLER_2D\n\t\tcase 0x8b60: return setValueT6a; // SAMPLER_CUBE\n\n\t\tcase 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nfunction SingleUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tUniformContainer.call( this ); // mix-in\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value ) {\n\n\t// Note: Don't need an extra 'renderer' parameter, since samplers\n\t// are not allowed in structured uniforms.\n\n\tvar seq = this.seq;\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ] );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nvar RePathPart = /([\\w\\d_]+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n//  - followed by an optional right bracket (found when array index)\n//  - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tvar path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\tfor ( ; ; ) {\n\n\t\tvar match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex,\n\n\t\t\tid = match[ 1 ],\n\t\t\tidIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tvar map = container.map, next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program, renderer ) {\n\n\tUniformContainer.call( this );\n\n\tthis.renderer = renderer;\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\tfor ( var i = 0; i < n; ++ i ) {\n\n\t\tvar info = gl.getActiveUniform( program, i ),\n\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value ) {\n\n\tvar u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, this.renderer );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tvar v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, renderer ) {\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, renderer );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tvar r = [];\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction addLineNumbers( string ) {\n\n\tvar lines = string.split( '\\n' );\n\n\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tvar shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\tif ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {\n\n\t\tconsole.error( 'THREE.WebGLShader: Shader couldn\\'t compile.' );\n\n\t}\n\n\tif ( gl.getShaderInfoLog( shader ) !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );\n\n\t}\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\treturn shader;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar programIdCount = 0;\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported encoding: ' + encoding );\n\n\t}\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tvar toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase Uncharted2ToneMapping:\n\t\t\ttoneMappingName = 'Uncharted2';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported toneMapping: ' + toneMapping );\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( extensions, parameters, rendererExtensions ) {\n\n\textensions = extensions || {};\n\n\tvar chunks = [\n\t\t( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.normalMap || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tvar chunks = [];\n\n\tfor ( var name in defines ) {\n\n\t\tvar value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tvar attributes = {};\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( var i = 0; i < n; i ++ ) {\n\n\t\tvar info = gl.getActiveAttrib( program, i );\n\t\tvar name = info.name;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\nfunction parseIncludes( string ) {\n\n\tvar pattern = /^[ \\t]*#include +<([\\w\\d.]+)>/gm;\n\n\tfunction replace( match, include ) {\n\n\t\tvar replace = ShaderChunk[ include ];\n\n\t\tif ( replace === undefined ) {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t\treturn parseIncludes( replace );\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction unrollLoops( string ) {\n\n\tvar pattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\n\n\tfunction replace( match, start, end, snippet ) {\n\n\t\tvar unroll = '';\n\n\t\tfor ( var i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\t\tunroll += snippet.replace( /\\[ i \\]/g, '[ ' + i + ' ]' );\n\n\t\t}\n\n\t\treturn unroll;\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction WebGLProgram( renderer, extensions, code, material, shader, parameters ) {\n\n\tvar gl = renderer.context;\n\n\tvar defines = material.defines;\n\n\tvar vertexShader = shader.vertexShader;\n\tvar fragmentShader = shader.fragmentShader;\n\n\tvar shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t}\n\n\tvar envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\tvar envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\tvar envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t\tcase EquirectangularReflectionMapping:\n\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_EQUIREC';\n\t\t\t\tbreak;\n\n\t\t\tcase SphericalReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_SPHERE';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tswitch ( material.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tvar gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\t// console.log( 'building new program ' );\n\n\t//\n\n\tvar customExtensions = generateExtensions( material.extensions, parameters, extensions );\n\n\tvar customDefines = generateDefines( defines );\n\n\t//\n\n\tvar program = gl.createProgram();\n\n\tvar prefixVertex, prefixFragment;\n\n\tif ( material.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_COLOR',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\tparameters.envMap && extensions.get( 'EXT_shader_texture_lod' ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\t( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.outputEncoding ? getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ) : '',\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + material.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = parseIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = parseIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tvar vertexGlsl = prefixVertex + vertexShader;\n\tvar fragmentGlsl = prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tvar glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tvar glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( material.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, material.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tvar programLog = gl.getProgramInfoLog( program ).trim();\n\tvar vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\tvar fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\tvar runnable = true;\n\tvar haveDiagnostics = true;\n\n\t// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );\n\t// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );\n\n\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\trunnable = false;\n\n\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );\n\n\t} else if ( programLog !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\thaveDiagnostics = false;\n\n\t}\n\n\tif ( haveDiagnostics ) {\n\n\t\tthis.diagnostics = {\n\n\t\t\trunnable: runnable,\n\t\t\tmaterial: material,\n\n\t\t\tprogramLog: programLog,\n\n\t\t\tvertexShader: {\n\n\t\t\t\tlog: vertexLog,\n\t\t\t\tprefix: prefixVertex\n\n\t\t\t},\n\n\t\t\tfragmentShader: {\n\n\t\t\t\tlog: fragmentLog,\n\t\t\t\tprefix: prefixFragment\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// clean up\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tvar cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program, renderer );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tvar cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t// DEPRECATED\n\n\tObject.defineProperties( this, {\n\n\t\tuniforms: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' );\n\t\t\t\treturn this.getUniforms();\n\n\t\t\t}\n\t\t},\n\n\t\tattributes: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' );\n\t\t\t\treturn this.getAttributes();\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\n\t//\n\n\tthis.name = shader.name;\n\tthis.id = programIdCount ++;\n\tthis.code = code;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLPrograms( renderer, extensions, capabilities ) {\n\n\tvar programs = [];\n\n\tvar shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'phong',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow'\n\t};\n\n\tvar parameterNames = [\n\t\t\"precision\", \"supportsVertexTextures\", \"map\", \"mapEncoding\", \"envMap\", \"envMapMode\", \"envMapEncoding\",\n\t\t\"lightMap\", \"aoMap\", \"emissiveMap\", \"emissiveMapEncoding\", \"bumpMap\", \"normalMap\", \"displacementMap\", \"specularMap\",\n\t\t\"roughnessMap\", \"metalnessMap\", \"gradientMap\",\n\t\t\"alphaMap\", \"combine\", \"vertexColors\", \"fog\", \"useFog\", \"fogExp\",\n\t\t\"flatShading\", \"sizeAttenuation\", \"logarithmicDepthBuffer\", \"skinning\",\n\t\t\"maxBones\", \"useVertexTexture\", \"morphTargets\", \"morphNormals\",\n\t\t\"maxMorphTargets\", \"maxMorphNormals\", \"premultipliedAlpha\",\n\t\t\"numDirLights\", \"numPointLights\", \"numSpotLights\", \"numHemiLights\", \"numRectAreaLights\",\n\t\t\"shadowMapEnabled\", \"shadowMapType\", \"toneMapping\", 'physicallyCorrectLights',\n\t\t\"alphaTest\", \"doubleSided\", \"flipSided\", \"numClippingPlanes\", \"numClipIntersection\", \"depthPacking\", \"dithering\"\n\t];\n\n\n\tfunction allocateBones( object ) {\n\n\t\tvar skeleton = object.skeleton;\n\t\tvar bones = skeleton.bones;\n\n\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\treturn 1024;\n\n\t\t} else {\n\n\t\t\t// default for when object is not specified\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t//\n\t\t\t//  - leave some extra space for other uniforms\n\t\t\t//  - limit here is ANGLE's 254 max uniform vectors\n\t\t\t//    (up to 54 should be safe)\n\n\t\t\tvar nVertexUniforms = capabilities.maxVertexUniforms;\n\t\t\tvar nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tvar maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\treturn maxBones;\n\n\t\t}\n\n\t}\n\n\tfunction getTextureEncodingFromMap( map, gammaOverrideLinear ) {\n\n\t\tvar encoding;\n\n\t\tif ( ! map ) {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t} else if ( map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map.isWebGLRenderTarget ) {\n\n\t\t\tconsole.warn( \"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\tencoding = map.texture.encoding;\n\n\t\t}\n\n\t\t// add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point.\n\t\tif ( encoding === LinearEncoding && gammaOverrideLinear ) {\n\n\t\t\tencoding = GammaEncoding;\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tthis.getParameters = function ( material, lights, shadows, fog, nClipPlanes, nClipIntersection, object ) {\n\n\t\tvar shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tvar maxBones = object.isSkinnedMesh ? allocateBones( object ) : 0;\n\t\tvar precision = capabilities.precision;\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar currentRenderTarget = renderer.getRenderTarget();\n\n\t\tvar parameters = {\n\n\t\t\tshaderID: shaderID,\n\n\t\t\tprecision: precision,\n\t\t\tsupportsVertexTextures: capabilities.vertexTextures,\n\t\t\toutputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ),\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ),\n\t\t\tenvMap: !! material.envMap,\n\t\t\tenvMapMode: material.envMap && material.envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ),\n\t\t\tenvMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === CubeUVReflectionMapping ) || ( material.envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexColors: material.vertexColors,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: capabilities.logarithmicDepthBuffer,\n\n\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: capabilities.floatVertexTextures,\n\n\t\t\tmorphTargets: material.morphTargets,\n\t\t\tmorphNormals: material.morphNormals,\n\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumClippingPlanes: nClipPlanes,\n\t\t\tnumClipIntersection: nClipIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: renderer.toneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\talphaTest: material.alphaTest,\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false\n\n\t\t};\n\n\t\treturn parameters;\n\n\t};\n\n\tthis.getProgramCode = function ( material, parameters ) {\n\n\t\tvar array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( material.fragmentShader );\n\t\t\tarray.push( material.vertexShader );\n\n\t\t}\n\n\t\tif ( material.defines !== undefined ) {\n\n\t\t\tfor ( var name in material.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( material.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t}\n\n\t\tarray.push( material.onBeforeCompile.toString() );\n\n\t\tarray.push( renderer.gammaOutput );\n\n\t\treturn array.join();\n\n\t};\n\n\tthis.acquireProgram = function ( material, shader, parameters, code ) {\n\n\t\tvar program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( var p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tvar programInfo = programs[ p ];\n\n\t\t\tif ( programInfo.code === code ) {\n\n\t\t\t\tprogram = programInfo;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, extensions, code, material, shader, parameters );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t};\n\n\tthis.releaseProgram = function ( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tvar i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t};\n\n\t// Exposed for resource monitoring & error feedback via renderer.info:\n\tthis.programs = programs;\n\n}\n\n/**\n * @author fordacious / fordacious.github.io\n */\n\nfunction WebGLProperties() {\n\n\tvar properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tvar map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.program && b.program && a.program !== b.program ) {\n\n\t\treturn a.program.id - b.program.id;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction WebGLRenderList() {\n\n\tvar renderItems = [];\n\tvar renderItemsIndex = 0;\n\n\tvar opaque = [];\n\tvar transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction push( object, geometry, material, z, group ) {\n\n\t\tvar renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tprogram: material.program,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.program = material.program;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t\trenderItemsIndex ++;\n\n\t}\n\n\tfunction sort() {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( painterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( reversePainterSortStable );\n\n\t}\n\n\treturn {\n\t\topaque: opaque,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tvar lists = {};\n\n\tfunction get( scene, camera ) {\n\n\t\tvar hash = scene.id + ',' + camera.id;\n\t\tvar list = lists[ hash ];\n\n\t\tif ( list === undefined ) {\n\n\t\t\t// console.log( 'THREE.WebGLRenderLists:', hash );\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists[ hash ] = list;\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = {};\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction UniformsCache() {\n\n\tvar lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tvar uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nvar count = 0;\n\nfunction WebGLLights() {\n\n\tvar cache = new UniformsCache();\n\n\tvar state = {\n\n\t\tid: count ++,\n\n\t\thash: '',\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tdirectional: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\tpoint: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tvar vector3 = new Vector3();\n\tvar matrix4 = new Matrix4();\n\tvar matrix42 = new Matrix4();\n\n\tfunction setup( lights, shadows, camera ) {\n\n\t\tvar r = 0, g = 0, b = 0;\n\n\t\tvar directionalLength = 0;\n\t\tvar pointLength = 0;\n\t\tvar spotLength = 0;\n\t\tvar rectAreaLength = 0;\n\t\tvar hemiLength = 0;\n\n\t\tvar viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( var i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tvar light = lights[ i ];\n\n\t\t\tvar color = light.color;\n\t\t\tvar intensity = light.intensity;\n\t\t\tvar distance = light.distance;\n\n\t\t\tvar shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\t// TODO (abelnation): RectAreaLight distance?\n\t\t\t\t// uniforms.distance = distance;\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tuniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tuniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t}\n\n\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tstate.directional.length = directionalLength;\n\t\tstate.spot.length = spotLength;\n\t\tstate.rectArea.length = rectAreaLength;\n\t\tstate.point.length = pointLength;\n\t\tstate.hemi.length = hemiLength;\n\n\t\tstate.hash = state.id + ',' + directionalLength + ',' + pointLength + ',' + spotLength + ',' + rectAreaLength + ',' + hemiLength + ',' + shadows.length;\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tstate: state\n\t};\n\n}\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WebGLRenderState() {\n\n\tvar lights = new WebGLLights();\n\n\tvar lightsArray = [];\n\tvar shadowsArray = [];\n\tvar spritesArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\t\tspritesArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction pushSprite( shadowLight ) {\n\n\t\tspritesArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights( camera ) {\n\n\t\tlights.setup( lightsArray, shadowsArray, camera );\n\n\t}\n\n\tvar state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\t\tspritesArray: spritesArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow,\n\t\tpushSprite: pushSprite\n\t};\n\n}\n\nfunction WebGLRenderStates() {\n\n\tvar renderStates = {};\n\n\tfunction get( scene, camera ) {\n\n\t\tvar hash = scene.id + ',' + camera.id;\n\n\t\tvar renderState = renderStates[ hash ];\n\n\t\tif ( renderState === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState();\n\t\t\trenderStates[ hash ] = renderState;\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = {};\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author bhouston / https://clara.io\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>\n * }\n */\n\nfunction MeshDepthMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDepthMaterial';\n\n\tthis.depthPacking = BasicDepthPacking;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDepthMaterial.prototype = Object.create( Material.prototype );\nMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\nMeshDepthMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.depthPacking = source.depthPacking;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *\n *  referencePosition: <float>,\n *  nearDistance: <float>,\n *  farDistance: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>\n *\n * }\n */\n\nfunction MeshDistanceMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDistanceMaterial';\n\n\tthis.referencePosition = new Vector3();\n\tthis.nearDistance = 1;\n\tthis.farDistance = 1000;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDistanceMaterial.prototype = Object.create( Material.prototype );\nMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.referencePosition.copy( source.referencePosition );\n\tthis.nearDistance = source.nearDistance;\n\tthis.farDistance = source.farDistance;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\tvar _frustum = new Frustum(),\n\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t_shadowMapSize = new Vector2(),\n\t\t_maxShadowMapSize = new Vector2( maxTextureSize, maxTextureSize ),\n\n\t\t_lookTarget = new Vector3(),\n\t\t_lightPositionWorld = new Vector3(),\n\n\t\t_MorphingFlag = 1,\n\t\t_SkinningFlag = 2,\n\n\t\t_NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1,\n\n\t\t_depthMaterials = new Array( _NumberOfMaterialVariants ),\n\t\t_distanceMaterials = new Array( _NumberOfMaterialVariants ),\n\n\t\t_materialCache = {};\n\n\tvar shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tvar cubeDirections = [\n\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t];\n\n\tvar cubeUps = [\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t];\n\n\tvar cube2DViewPorts = [\n\t\tnew Vector4(), new Vector4(), new Vector4(),\n\t\tnew Vector4(), new Vector4(), new Vector4()\n\t];\n\n\t// init\n\n\tfor ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) {\n\n\t\tvar useMorphing = ( i & _MorphingFlag ) !== 0;\n\t\tvar useSkinning = ( i & _SkinningFlag ) !== 0;\n\n\t\tvar depthMaterial = new MeshDepthMaterial( {\n\n\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_depthMaterials[ i ] = depthMaterial;\n\n\t\t//\n\n\t\tvar distanceMaterial = new MeshDistanceMaterial( {\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_distanceMaterials[ i ] = distanceMaterial;\n\n\t}\n\n\t//\n\n\tvar scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\t// TODO Clean up (needed in case of contextlost)\n\t\tvar _gl = _renderer.context;\n\t\tvar _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.disable( _gl.BLEND );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tvar faceCount;\n\n\t\tfor ( var i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tvar light = lights[ i ];\n\t\t\tvar shadow = light.shadow;\n\t\t\tvar isPointLight = light && light.isPointLight;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar shadowCamera = shadow.camera;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\t\t\t_shadowMapSize.min( _maxShadowMapSize );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tvar vpWidth = _shadowMapSize.x;\n\t\t\t\tvar vpHeight = _shadowMapSize.y;\n\n\t\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t\t// following orientation:\n\t\t\t\t//\n\t\t\t\t//  xzXZ\n\t\t\t\t//   y Y\n\t\t\t\t//\n\t\t\t\t// X - Positive x direction\n\t\t\t\t// x - Negative x direction\n\t\t\t\t// Y - Positive y direction\n\t\t\t\t// y - Negative y direction\n\t\t\t\t// Z - Positive z direction\n\t\t\t\t// z - Negative z direction\n\n\t\t\t\t// positive X\n\t\t\t\tcube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative X\n\t\t\t\tcube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Z\n\t\t\t\tcube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative Z\n\t\t\t\tcube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Y\n\t\t\t\tcube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight );\n\t\t\t\t// negative Y\n\t\t\t\tcube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight );\n\n\t\t\t\t_shadowMapSize.x *= 4.0;\n\t\t\t\t_shadowMapSize.y *= 2.0;\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tvar pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\tshadowCamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.isSpotLightShadow ) {\n\n\t\t\t\tshadow.update( light );\n\n\t\t\t}\n\n\t\t\tvar shadowMap = shadow.map;\n\t\t\tvar shadowMatrix = shadow.matrix;\n\n\t\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\tshadowCamera.position.copy( _lightPositionWorld );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tfaceCount = 6;\n\n\t\t\t\t// for point lights we set the shadow matrix to be a translation-only matrix\n\t\t\t\t// equal to inverse of the light's position\n\n\t\t\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t\t} else {\n\n\t\t\t\tfaceCount = 1;\n\n\t\t\t\t_lookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t// compute shadow matrix\n\n\t\t\t\tshadowMatrix.set(\n\t\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t\t);\n\n\t\t\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\t\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadowMap );\n\t\t\t_renderer.clear();\n\n\t\t\t// render shadow map for each cube face (if omni-directional) or\n\t\t\t// run a single pass if not\n\n\t\t\tfor ( var face = 0; face < faceCount; face ++ ) {\n\n\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\t_lookTarget.copy( shadowCamera.position );\n\t\t\t\t\t_lookTarget.add( cubeDirections[ face ] );\n\t\t\t\t\tshadowCamera.up.copy( cubeUps[ face ] );\n\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t\tvar vpDimensions = cube2DViewPorts[ face ];\n\t\t\t\t\t_state.viewport( vpDimensions );\n\n\t\t\t\t}\n\n\t\t\t\t// update camera matrices and frustum\n\n\t\t\t\t_projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t\t\t// set object matrices & frustum culling\n\n\t\t\t\trenderObject( scene, camera, shadowCamera, isPointLight );\n\n\t\t\t}\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t};\n\n\tfunction getDepthMaterial( object, material, isPointLight, lightPositionWorld, shadowCameraNear, shadowCameraFar ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tvar result = null;\n\n\t\tvar materialVariants = _depthMaterials;\n\t\tvar customMaterial = object.customDepthMaterial;\n\n\t\tif ( isPointLight ) {\n\n\t\t\tmaterialVariants = _distanceMaterials;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( ! customMaterial ) {\n\n\t\t\tvar useMorphing = false;\n\n\t\t\tif ( material.morphTargets ) {\n\n\t\t\t\tif ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t\t} else if ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphTargets && geometry.morphTargets.length > 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isSkinnedMesh && material.skinning === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t}\n\n\t\t\tvar useSkinning = object.isSkinnedMesh && material.skinning;\n\n\t\t\tvar variantIndex = 0;\n\n\t\t\tif ( useMorphing ) variantIndex |= _MorphingFlag;\n\t\t\tif ( useSkinning ) variantIndex |= _SkinningFlag;\n\n\t\t\tresult = materialVariants[ variantIndex ];\n\n\t\t} else {\n\n\t\t\tresult = customMaterial;\n\n\t\t}\n\n\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tvar keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tvar materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tvar cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tresult.side = ( material.shadowSide != null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( isPointLight && result.isMeshDistanceMaterial ) {\n\n\t\t\tresult.referencePosition.copy( lightPositionWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, isPointLight ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( object.castShadow && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tvar geometry = _objects.update( object );\n\t\t\t\tvar material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\tfor ( var k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tvar group = groups[ k ];\n\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, isPointLight );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.needsUpdate = true;\n\n}\n\nCanvasTexture.prototype = Object.create( Texture.prototype );\nCanvasTexture.prototype.constructor = CanvasTexture;\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction WebGLSpriteRenderer( renderer, gl, state, textures, capabilities ) {\n\n\tvar vertexBuffer, elementBuffer;\n\tvar program, attributes, uniforms;\n\n\tvar texture;\n\n\t// decompose matrixWorld\n\n\tvar spritePosition = new Vector3();\n\tvar spriteRotation = new Quaternion();\n\tvar spriteScale = new Vector3();\n\n\tfunction init() {\n\n\t\tvar vertices = new Float32Array( [\n\t\t\t- 0.5, - 0.5, 0, 0,\n\t\t\t  0.5, - 0.5, 1, 0,\n\t\t\t  0.5, 0.5, 1, 1,\n\t\t\t- 0.5, 0.5, 0, 1\n\t\t] );\n\n\t\tvar faces = new Uint16Array( [\n\t\t\t0, 1, 2,\n\t\t\t0, 2, 3\n\t\t] );\n\n\t\tvertexBuffer = gl.createBuffer();\n\t\telementBuffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\n\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\n\n\t\tprogram = createProgram();\n\n\t\tattributes = {\n\t\t\tposition: gl.getAttribLocation( program, 'position' ),\n\t\t\tuv: gl.getAttribLocation( program, 'uv' )\n\t\t};\n\n\t\tuniforms = {\n\t\t\tuvOffset: gl.getUniformLocation( program, 'uvOffset' ),\n\t\t\tuvScale: gl.getUniformLocation( program, 'uvScale' ),\n\n\t\t\trotation: gl.getUniformLocation( program, 'rotation' ),\n\t\t\tcenter: gl.getUniformLocation( program, 'center' ),\n\t\t\tscale: gl.getUniformLocation( program, 'scale' ),\n\n\t\t\tcolor: gl.getUniformLocation( program, 'color' ),\n\t\t\tmap: gl.getUniformLocation( program, 'map' ),\n\t\t\topacity: gl.getUniformLocation( program, 'opacity' ),\n\n\t\t\tmodelViewMatrix: gl.getUniformLocation( program, 'modelViewMatrix' ),\n\t\t\tprojectionMatrix: gl.getUniformLocation( program, 'projectionMatrix' ),\n\n\t\t\tfogType: gl.getUniformLocation( program, 'fogType' ),\n\t\t\tfogDensity: gl.getUniformLocation( program, 'fogDensity' ),\n\t\t\tfogNear: gl.getUniformLocation( program, 'fogNear' ),\n\t\t\tfogFar: gl.getUniformLocation( program, 'fogFar' ),\n\t\t\tfogColor: gl.getUniformLocation( program, 'fogColor' ),\n\t\t\tfogDepth: gl.getUniformLocation( program, 'fogDepth' ),\n\n\t\t\talphaTest: gl.getUniformLocation( program, 'alphaTest' )\n\t\t};\n\n\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\tcanvas.width = 8;\n\t\tcanvas.height = 8;\n\n\t\tvar context = canvas.getContext( '2d' );\n\t\tcontext.fillStyle = 'white';\n\t\tcontext.fillRect( 0, 0, 8, 8 );\n\n\t\ttexture = new CanvasTexture( canvas );\n\n\t}\n\n\tthis.render = function ( sprites, scene, camera ) {\n\n\t\tif ( sprites.length === 0 ) return;\n\n\t\t// setup gl\n\n\t\tif ( program === undefined ) {\n\n\t\t\tinit();\n\n\t\t}\n\n\t\tstate.useProgram( program );\n\n\t\tstate.initAttributes();\n\t\tstate.enableAttribute( attributes.position );\n\t\tstate.enableAttribute( attributes.uv );\n\t\tstate.disableUnusedAttributes();\n\n\t\tstate.disable( gl.CULL_FACE );\n\t\tstate.enable( gl.BLEND );\n\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\tgl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 );\n\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\n\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\n\t\tgl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements );\n\n\t\tstate.activeTexture( gl.TEXTURE0 );\n\t\tgl.uniform1i( uniforms.map, 0 );\n\n\t\tvar oldFogType = 0;\n\t\tvar sceneFogType = 0;\n\t\tvar fog = scene.fog;\n\n\t\tif ( fog ) {\n\n\t\t\tgl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );\n\n\t\t\tif ( fog.isFog ) {\n\n\t\t\t\tgl.uniform1f( uniforms.fogNear, fog.near );\n\t\t\t\tgl.uniform1f( uniforms.fogFar, fog.far );\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 1 );\n\t\t\t\toldFogType = 1;\n\t\t\t\tsceneFogType = 1;\n\n\t\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\t\tgl.uniform1f( uniforms.fogDensity, fog.density );\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 2 );\n\t\t\t\toldFogType = 2;\n\t\t\t\tsceneFogType = 2;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tgl.uniform1i( uniforms.fogType, 0 );\n\t\t\toldFogType = 0;\n\t\t\tsceneFogType = 0;\n\n\t\t}\n\n\n\t\t// update positions and sort\n\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\tvar sprite = sprites[ i ];\n\n\t\t\tsprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld );\n\t\t\tsprite.z = - sprite.modelViewMatrix.elements[ 14 ];\n\n\t\t}\n\n\t\tsprites.sort( painterSortStable );\n\n\t\t// render all sprites\n\n\t\tvar scale = [];\n\t\tvar center = [];\n\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\tvar sprite = sprites[ i ];\n\t\t\tvar material = sprite.material;\n\n\t\t\tif ( material.visible === false ) continue;\n\n\t\t\tsprite.onBeforeRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t\tgl.uniform1f( uniforms.alphaTest, material.alphaTest );\n\t\t\tgl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements );\n\n\t\t\tsprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale );\n\n\t\t\tscale[ 0 ] = spriteScale.x;\n\t\t\tscale[ 1 ] = spriteScale.y;\n\n\t\t\tcenter[ 0 ] = sprite.center.x - 0.5;\n\t\t\tcenter[ 1 ] = sprite.center.y - 0.5;\n\n\t\t\tvar fogType = 0;\n\n\t\t\tif ( scene.fog && material.fog ) {\n\n\t\t\t\tfogType = sceneFogType;\n\n\t\t\t}\n\n\t\t\tif ( oldFogType !== fogType ) {\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, fogType );\n\t\t\t\toldFogType = fogType;\n\n\t\t\t}\n\n\t\t\tif ( material.map !== null ) {\n\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y );\n\t\t\t\tgl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y );\n\n\t\t\t} else {\n\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, 0, 0 );\n\t\t\t\tgl.uniform2f( uniforms.uvScale, 1, 1 );\n\n\t\t\t}\n\n\t\t\tgl.uniform1f( uniforms.opacity, material.opacity );\n\t\t\tgl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b );\n\n\t\t\tgl.uniform1f( uniforms.rotation, material.rotation );\n\t\t\tgl.uniform2fv( uniforms.center, center );\n\t\t\tgl.uniform2fv( uniforms.scale, scale );\n\n\t\t\tstate.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\t\t\tstate.buffers.depth.setTest( material.depthTest );\n\t\t\tstate.buffers.depth.setMask( material.depthWrite );\n\t\t\tstate.buffers.color.setMask( material.colorWrite );\n\n\t\t\ttextures.setTexture2D( material.map || texture, 0 );\n\n\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\n\n\t\t\tsprite.onAfterRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t}\n\n\t\t// restore gl\n\n\t\tstate.enable( gl.CULL_FACE );\n\n\t\tstate.reset();\n\n\t};\n\n\tfunction createProgram() {\n\n\t\tvar program = gl.createProgram();\n\n\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\n\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\n\n\t\tgl.shaderSource( vertexShader, [\n\n\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform float rotation;',\n\t\t\t'uniform vec2 center;',\n\t\t\t'uniform vec2 scale;',\n\t\t\t'uniform vec2 uvOffset;',\n\t\t\t'uniform vec2 uvScale;',\n\n\t\t\t'attribute vec2 position;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'varying vec2 vUV;',\n\t\t\t'varying float fogDepth;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\tvUV = uvOffset + uv * uvScale;',\n\n\t\t\t'\tvec2 alignedPosition = ( position - center ) * scale;',\n\n\t\t\t'\tvec2 rotatedPosition;',\n\t\t\t'\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;',\n\t\t\t'\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;',\n\n\t\t\t'\tvec4 mvPosition;',\n\n\t\t\t'\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );',\n\t\t\t'\tmvPosition.xy += rotatedPosition;',\n\n\t\t\t'\tgl_Position = projectionMatrix * mvPosition;',\n\n\t\t\t'\tfogDepth = - mvPosition.z;',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' ) );\n\n\t\tgl.shaderSource( fragmentShader, [\n\n\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t'uniform vec3 color;',\n\t\t\t'uniform sampler2D map;',\n\t\t\t'uniform float opacity;',\n\n\t\t\t'uniform int fogType;',\n\t\t\t'uniform vec3 fogColor;',\n\t\t\t'uniform float fogDensity;',\n\t\t\t'uniform float fogNear;',\n\t\t\t'uniform float fogFar;',\n\t\t\t'uniform float alphaTest;',\n\n\t\t\t'varying vec2 vUV;',\n\t\t\t'varying float fogDepth;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\tvec4 texture = texture2D( map, vUV );',\n\n\t\t\t'\tgl_FragColor = vec4( color * texture.xyz, texture.a * opacity );',\n\n\t\t\t'\tif ( gl_FragColor.a < alphaTest ) discard;',\n\n\t\t\t'\tif ( fogType > 0 ) {',\n\n\t\t\t'\t\tfloat fogFactor = 0.0;',\n\n\t\t\t'\t\tif ( fogType == 1 ) {',\n\n\t\t\t'\t\t\tfogFactor = smoothstep( fogNear, fogFar, fogDepth );',\n\n\t\t\t'\t\t} else {',\n\n\t\t\t'\t\t\tconst float LOG2 = 1.442695;',\n\t\t\t'\t\t\tfogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );',\n\t\t\t'\t\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );',\n\n\t\t\t'\t\t}',\n\n\t\t\t'\t\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );',\n\n\t\t\t'\t}',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' ) );\n\n\t\tgl.compileShader( vertexShader );\n\t\tgl.compileShader( fragmentShader );\n\n\t\tgl.attachShader( program, vertexShader );\n\t\tgl.attachShader( program, fragmentShader );\n\n\t\tgl.linkProgram( program );\n\n\t\treturn program;\n\n\t}\n\n\tfunction painterSortStable( a, b ) {\n\n\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} else if ( a.z !== b.z ) {\n\n\t\t\treturn b.z - a.z;\n\n\t\t} else {\n\n\t\t\treturn b.id - a.id;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLState( gl, extensions, utils ) {\n\n\tfunction ColorBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar color = new Vector4();\n\t\tvar currentColorMask = null;\n\t\tvar currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentDepthMask = null;\n\t\tvar currentDepthFunc = null;\n\t\tvar currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentStencilMask = null;\n\t\tvar currentStencilFunc = null;\n\t\tvar currentStencilRef = null;\n\t\tvar currentStencilFuncMask = null;\n\t\tvar currentStencilFail = null;\n\t\tvar currentStencilZFail = null;\n\t\tvar currentStencilZPass = null;\n\t\tvar currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t     currentStencilRef \t!== stencilRef \t||\n\t\t\t\t     currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail\t !== stencilFail \t||\n\t\t\t\t     currentStencilZFail !== stencilZFail ||\n\t\t\t\t     currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tvar colorBuffer = new ColorBuffer();\n\tvar depthBuffer = new DepthBuffer();\n\tvar stencilBuffer = new StencilBuffer();\n\n\tvar maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar newAttributes = new Uint8Array( maxVertexAttributes );\n\tvar enabledAttributes = new Uint8Array( maxVertexAttributes );\n\tvar attributeDivisors = new Uint8Array( maxVertexAttributes );\n\n\tvar capabilities = {};\n\n\tvar compressedTextureFormats = null;\n\n\tvar currentProgram = null;\n\n\tvar currentBlending = null;\n\tvar currentBlendEquation = null;\n\tvar currentBlendSrc = null;\n\tvar currentBlendDst = null;\n\tvar currentBlendEquationAlpha = null;\n\tvar currentBlendSrcAlpha = null;\n\tvar currentBlendDstAlpha = null;\n\tvar currentPremultipledAlpha = false;\n\n\tvar currentFlipSided = null;\n\tvar currentCullFace = null;\n\n\tvar currentLineWidth = null;\n\n\tvar currentPolygonOffsetFactor = null;\n\tvar currentPolygonOffsetUnits = null;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tvar lineWidthAvailable = false;\n\tvar version = 0;\n\tvar glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL\\ ES\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tvar currentTextureSlot = null;\n\tvar currentBoundTextures = {};\n\n\tvar currentScissor = new Vector4();\n\tvar currentViewport = new Vector4();\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tvar data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tvar texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( var i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tvar emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tenable( gl.BLEND );\n\tsetBlending( NormalBlending );\n\n\t//\n\n\tfunction initAttributes() {\n\n\t\tfor ( var i = 0, l = newAttributes.length; i < l; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== 0 ) {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension.vertexAttribDivisorANGLE( attribute, 0 );\n\t\t\tattributeDivisors[ attribute ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension.vertexAttribDivisorANGLE( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tfor ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction enable( id ) {\n\n\t\tif ( capabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tcapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( capabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tcapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction getCompressedTextureFormats() {\n\n\t\tif ( compressedTextureFormats === null ) {\n\n\t\t\tcompressedTextureFormats = [];\n\n\t\t\tif ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) ||\n\t\t\t     extensions.get( 'WEBGL_compressed_texture_s3tc' ) ||\n\t\t\t     extensions.get( 'WEBGL_compressed_texture_etc1' ) ||\n\t\t\t     extensions.get( 'WEBGL_compressed_texture_astc' ) ) {\n\n\t\t\t\tvar formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS );\n\n\t\t\t\tfor ( var i = 0; i < formats.length; i ++ ) {\n\n\t\t\t\t\tcompressedTextureFormats.push( formats[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn compressedTextureFormats;\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending !== NoBlending ) {\n\n\t\t\tenable( gl.BLEND );\n\n\t\t} else {\n\n\t\t\tdisable( gl.BLEND );\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\tcase AdditiveBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase SubtractiveBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MultiplyBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcurrentBlendEquation = null;\n\t\t\tcurrentBlendSrc = null;\n\t\t\tcurrentBlendDst = null;\n\t\t\tcurrentBlendEquationAlpha = null;\n\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t} else {\n\n\t\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\t\tgl.blendEquationSeparate( utils.convert( blendEquation ), utils.convert( blendEquationAlpha ) );\n\n\t\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t\t}\n\n\t\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\t\tgl.blendFuncSeparate( utils.convert( blendSrc ), utils.convert( blendDst ), utils.convert( blendSrcAlpha ), utils.convert( blendDstAlpha ) );\n\n\t\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\t\tcurrentBlendDst = blendDst;\n\t\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tvar flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\tmaterial.transparent === true\n\t\t\t? setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha )\n\t\t\t: setBlending( NoBlending );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tvar boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\tfor ( var i = 0; i < enabledAttributes.length; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] === 1 ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcapabilities = {};\n\n\t\tcompressedTextureFormats = null;\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlending = null;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tenableAttributeAndDivisor: enableAttributeAndDivisor,\n\t\tdisableUnusedAttributes: disableUnusedAttributes,\n\t\tenable: enable,\n\t\tdisable: disable,\n\t\tgetCompressedTextureFormats: getCompressedTextureFormats,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tvar _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext ); /* global WebGL2RenderingContext */\n\tvar _videoTextures = {};\n\tvar _canvas;\n\n\t//\n\n\tfunction clampToMaxSize( image, maxSize ) {\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tif ( 'data' in image ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// Warning: Scaling through the canvas will only work with images that use\n\t\t\t// premultiplied alpha.\n\n\t\t\tvar scale = maxSize / Math.max( image.width, image.height );\n\n\t\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\tcanvas.width = Math.floor( image.width * scale );\n\t\t\tcanvas.height = Math.floor( image.height * scale );\n\n\t\t\tvar context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height );\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image );\n\n\t\t\treturn canvas;\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo( image ) {\n\n\t\treturn _Math.isPowerOfTwo( image.width ) && _Math.isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction makePowerOfTwo( image ) {\n\n\t\tif ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement || image instanceof ImageBitmap ) {\n\n\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t_canvas.width = _Math.floorPowerOfTwo( image.width );\n\t\t\t_canvas.height = _Math.floorPowerOfTwo( image.height );\n\n\t\t\tvar context = _canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, _canvas.width, _canvas.height );\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is not power of two (' + image.width + 'x' + image.height + '). Resized to ' + _canvas.width + 'x' + _canvas.height, image );\n\n\t\t\treturn _canvas;\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, isPowerOfTwo ) {\n\n\t\treturn texture.generateMipmaps && isPowerOfTwo &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target, texture, width, height ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\t// Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11\n\t\ttextureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E;\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipMapNearestFilter || f === NearestMipMapLinearFilter ) {\n\n\t\t\treturn _gl.NEAREST;\n\n\t\t}\n\n\t\treturn _gl.LINEAR;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tvar texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\tdelete _videoTextures[ texture.id ];\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tvar renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image && textureProperties.__image__webglTextureCube ) {\n\n\t\t\t// cube texture\n\n\t\t\t_gl.deleteTexture( textureProperties.__image__webglTextureCube );\n\n\t\t} else {\n\n\t\t\t// 2D texture\n\n\t\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\t// remove all webgl properties\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget.texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tvar image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete', texture );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image.length === 6 ) {\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tif ( ! textureProperties.__image__webglTextureCube ) {\n\n\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\ttextureProperties.__image__webglTextureCube = _gl.createTexture();\n\n\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\n\t\t\t\tvar isCompressed = ( texture && texture.isCompressedTexture );\n\t\t\t\tvar isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\t\tvar cubeImage = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\t\tcubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar image = cubeImage[ 0 ],\n\t\t\t\t\tisPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage );\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar mipmap, mipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\t\tfor ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tmipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\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\tif ( ! isCompressed ) {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, texture, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t\t} else {\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction setTextureCubeDynamic( texture, slot ) {\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture );\n\n\t}\n\n\tfunction setTextureParameters( textureType, texture, isPowerOfTwoImage ) {\n\n\t\tvar extension;\n\n\t\tif ( isPowerOfTwoImage ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, utils.convert( texture.wrapS ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, utils.convert( texture.wrapT ) );\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, utils.convert( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, utils.convert( texture.minFilter ) );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', texture );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', texture );\n\n\t\t\t}\n\n\t\t}\n\n\t\textension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension ) {\n\n\t\t\tif ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\n\t\t\tif ( texture.type === HalfFloatType && extensions.get( 'OES_texture_half_float_linear' ) === null ) return;\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\n\t\tvar image = clampToMaxSize( texture.image, capabilities.maxTextureSize );\n\n\t\tif ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) {\n\n\t\t\timage = makePowerOfTwo( image );\n\n\t\t}\n\n\t\tvar isPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type );\n\n\t\tsetTextureParameters( _gl.TEXTURE_2D, texture, isPowerOfTwoImage );\n\n\t\tvar mipmap, mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tvar internalFormat = _gl.DEPTH_COMPONENT;\n\n\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\tif ( ! _isWebGL2 ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' );\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( _isWebGL2 ) {\n\n\t\t\t\t// WebGL 2.0 requires signed internalformat for glTexImage2D\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthFormat && internalFormat === _gl.DEPTH_COMPONENT ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\tif ( texture.format === DepthStencilFormat ) {\n\n\t\t\t\tinternalFormat = _gl.DEPTH_STENCIL;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\tgenerateMipmap( _gl.TEXTURE_2D, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\tvar glFormat = utils.convert( renderTarget.texture.format );\n\t\tvar glType = utils.convert( renderTarget.texture.type );\n\t\tstate.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\t// FIXME: We don't support !depth !stencil\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height );\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tvar isCube = ( renderTarget && renderTarget.isWebGLRenderTargetCube );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tvar webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\tinfo.memory.textures ++;\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo );\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, null );\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, null );\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tvar texture = renderTarget.texture;\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isTargetPowerOfTwo ) ) {\n\n\t\t\tvar target = renderTarget.isWebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\tvar webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\tstate.bindTexture( target, null );\n\n\t\t}\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tvar id = texture.id;\n\t\tvar frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures[ id ] !== frame ) {\n\n\t\t\t_videoTextures[ id ] = frame;\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setTextureCubeDynamic = setTextureCubeDynamic;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\n}\n\n/**\n * @author thespite / http://www.twitter.com/thespite\n */\n\nfunction WebGLUtils( gl, extensions ) {\n\n\tfunction convert( p ) {\n\n\t\tvar extension;\n\n\t\tif ( p === RepeatWrapping ) return gl.REPEAT;\n\t\tif ( p === ClampToEdgeWrapping ) return gl.CLAMP_TO_EDGE;\n\t\tif ( p === MirroredRepeatWrapping ) return gl.MIRRORED_REPEAT;\n\n\t\tif ( p === NearestFilter ) return gl.NEAREST;\n\t\tif ( p === NearestMipMapNearestFilter ) return gl.NEAREST_MIPMAP_NEAREST;\n\t\tif ( p === NearestMipMapLinearFilter ) return gl.NEAREST_MIPMAP_LINEAR;\n\n\t\tif ( p === LinearFilter ) return gl.LINEAR;\n\t\tif ( p === LinearMipMapNearestFilter ) return gl.LINEAR_MIPMAP_NEAREST;\n\t\tif ( p === LinearMipMapLinearFilter ) return gl.LINEAR_MIPMAP_LINEAR;\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedShort565Type ) return gl.UNSIGNED_SHORT_5_6_5;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) return extension.HALF_FLOAT_OES;\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\tif ( p === AddEquation ) return gl.FUNC_ADD;\n\t\tif ( p === SubtractEquation ) return gl.FUNC_SUBTRACT;\n\t\tif ( p === ReverseSubtractEquation ) return gl.FUNC_REVERSE_SUBTRACT;\n\n\t\tif ( p === ZeroFactor ) return gl.ZERO;\n\t\tif ( p === OneFactor ) return gl.ONE;\n\t\tif ( p === SrcColorFactor ) return gl.SRC_COLOR;\n\t\tif ( p === OneMinusSrcColorFactor ) return gl.ONE_MINUS_SRC_COLOR;\n\t\tif ( p === SrcAlphaFactor ) return gl.SRC_ALPHA;\n\t\tif ( p === OneMinusSrcAlphaFactor ) return gl.ONE_MINUS_SRC_ALPHA;\n\t\tif ( p === DstAlphaFactor ) return gl.DST_ALPHA;\n\t\tif ( p === OneMinusDstAlphaFactor ) return gl.ONE_MINUS_DST_ALPHA;\n\n\t\tif ( p === DstColorFactor ) return gl.DST_COLOR;\n\t\tif ( p === OneMinusDstColorFactor ) return gl.ONE_MINUS_DST_COLOR;\n\t\tif ( p === SrcAlphaSaturateFactor ) return gl.SRC_ALPHA_SATURATE;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) return extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn p;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === MinEquation || p === MaxEquation ) {\n\n\t\t\textension = extensions.get( 'EXT_blend_minmax' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === MinEquation ) return extension.MIN_EXT;\n\t\t\t\tif ( p === MaxEquation ) return extension.MAX_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) return extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t}\n\n\t\treturn 0;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author greggman / http://games.greggman.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author tschw\n */\n\nfunction PerspectiveCamera( fov, aspect, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'PerspectiveCamera';\n\n\tthis.fov = fov !== undefined ? fov : 50;\n\tthis.zoom = 1;\n\n\tthis.near = near !== undefined ? near : 0.1;\n\tthis.far = far !== undefined ? far : 2000;\n\tthis.focus = 10;\n\n\tthis.aspect = aspect !== undefined ? aspect : 1;\n\tthis.view = null;\n\n\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\tthis.updateProjectionMatrix();\n\n}\n\nPerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: PerspectiveCamera,\n\n\tisPerspectiveCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength: function ( focalLength ) {\n\n\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\tvar vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = _Math.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength: function () {\n\n\t\tvar vExtentSlope = Math.tan( _Math.DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t},\n\n\tgetEffectiveFOV: function () {\n\n\t\treturn _Math.RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t},\n\n\tgetFilmWidth: function () {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t},\n\n\tgetFilmHeight: function () {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t},\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t *   +---+---+---+\n\t *   | A | B | C |\n\t *   +---+---+---+\n\t *   | D | E | F |\n\t *   +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t *   var w = 1920;\n\t *   var h = 1080;\n\t *   var fullWidth = w * 3;\n\t *   var fullHeight = h * 2;\n\t *\n\t *   --A--\n\t *   camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t *   --B--\n\t *   camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t *   --C--\n\t *   camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t *   --D--\n\t *   camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t *   --E--\n\t *   camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t *   --F--\n\t *   camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t *   Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tvar near = this.near,\n\t\t\ttop = near * Math.tan(\n\t\t\t\t_Math.DEG2RAD * 0.5 * this.fov ) / this.zoom,\n\t\t\theight = 2 * top,\n\t\t\twidth = this.aspect * height,\n\t\t\tleft = - 0.5 * width,\n\t\t\tview = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tvar fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tvar skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ArrayCamera( array ) {\n\n\tPerspectiveCamera.call( this );\n\n\tthis.cameras = array || [];\n\n}\n\nArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\tconstructor: ArrayCamera,\n\n\tisArrayCamera: true\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebVRManager( renderer ) {\n\n\tvar scope = this;\n\n\tvar device = null;\n\tvar frameData = null;\n\n\tvar poseTarget = null;\n\n\tvar standingMatrix = new Matrix4();\n\tvar standingMatrixInverse = new Matrix4();\n\n\tif ( typeof window !== 'undefined' && 'VRFrameData' in window ) {\n\n\t\tframeData = new window.VRFrameData();\n\t\twindow.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false );\n\n\t}\n\n\tvar matrixWorldInverse = new Matrix4();\n\tvar tempQuaternion = new Quaternion();\n\tvar tempPosition = new Vector3();\n\n\tvar cameraL = new PerspectiveCamera();\n\tcameraL.bounds = new Vector4( 0.0, 0.0, 0.5, 1.0 );\n\tcameraL.layers.enable( 1 );\n\n\tvar cameraR = new PerspectiveCamera();\n\tcameraR.bounds = new Vector4( 0.5, 0.0, 0.5, 1.0 );\n\tcameraR.layers.enable( 2 );\n\n\tvar cameraVR = new ArrayCamera( [ cameraL, cameraR ] );\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\t//\n\n\tfunction isPresenting() {\n\n\t\treturn device !== null && device.isPresenting === true;\n\n\t}\n\n\tvar currentSize, currentPixelRatio;\n\n\tfunction onVRDisplayPresentChange() {\n\n\t\tif ( isPresenting() ) {\n\n\t\t\tvar eyeParameters = device.getEyeParameters( 'left' );\n\t\t\tvar renderWidth = eyeParameters.renderWidth;\n\t\t\tvar renderHeight = eyeParameters.renderHeight;\n\n\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\tcurrentSize = renderer.getSize();\n\n\t\t\trenderer.setDrawingBufferSize( renderWidth * 2, renderHeight, 1 );\n\n\t\t} else if ( scope.enabled ) {\n\n\t\t\trenderer.setDrawingBufferSize( currentSize.width, currentSize.height, currentPixelRatio );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.enabled = false;\n\tthis.userHeight = 1.6;\n\n\tthis.getDevice = function () {\n\n\t\treturn device;\n\n\t};\n\n\tthis.setDevice = function ( value ) {\n\n\t\tif ( value !== undefined ) device = value;\n\n\t};\n\n\tthis.setPoseTarget = function ( object ) {\n\n\t\tif ( object !== undefined ) poseTarget = object;\n\n\t};\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tif ( device === null ) return camera;\n\n\t\tdevice.depthNear = camera.near;\n\t\tdevice.depthFar = camera.far;\n\n\t\tdevice.getFrameData( frameData );\n\n\t\t//\n\n\t\tvar stageParameters = device.stageParameters;\n\n\t\tif ( stageParameters ) {\n\n\t\t\tstandingMatrix.fromArray( stageParameters.sittingToStandingTransform );\n\n\t\t} else {\n\n\t\t\tstandingMatrix.makeTranslation( 0, scope.userHeight, 0 );\n\n\t\t}\n\n\n\t\tvar pose = frameData.pose;\n\t\tvar poseObject = poseTarget !== null ? poseTarget : camera;\n\n\t\t// We want to manipulate poseObject by its position and quaternion components since users may rely on them.\n\t\tposeObject.matrix.copy( standingMatrix );\n\t\tposeObject.matrix.decompose( poseObject.position, poseObject.quaternion, poseObject.scale );\n\n\t\tif ( pose.orientation !== null ) {\n\n\t\t\ttempQuaternion.fromArray( pose.orientation );\n\t\t\tposeObject.quaternion.multiply( tempQuaternion );\n\n\t\t}\n\n\t\tif ( pose.position !== null ) {\n\n\t\t\ttempQuaternion.setFromRotationMatrix( standingMatrix );\n\t\t\ttempPosition.fromArray( pose.position );\n\t\t\ttempPosition.applyQuaternion( tempQuaternion );\n\t\t\tposeObject.position.add( tempPosition );\n\n\t\t}\n\n\t\tposeObject.updateMatrixWorld();\n\n\t\tif ( device.isPresenting === false ) return camera;\n\n\t\t//\n\n\t\tcameraL.near = camera.near;\n\t\tcameraR.near = camera.near;\n\n\t\tcameraL.far = camera.far;\n\t\tcameraR.far = camera.far;\n\n\t\tcameraVR.matrixWorld.copy( camera.matrixWorld );\n\t\tcameraVR.matrixWorldInverse.copy( camera.matrixWorldInverse );\n\n\t\tcameraL.matrixWorldInverse.fromArray( frameData.leftViewMatrix );\n\t\tcameraR.matrixWorldInverse.fromArray( frameData.rightViewMatrix );\n\n\t\t// TODO (mrdoob) Double check this code\n\n\t\tstandingMatrixInverse.getInverse( standingMatrix );\n\n\t\tcameraL.matrixWorldInverse.multiply( standingMatrixInverse );\n\t\tcameraR.matrixWorldInverse.multiply( standingMatrixInverse );\n\n\t\tvar parent = poseObject.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tmatrixWorldInverse.getInverse( parent.matrixWorld );\n\n\t\t\tcameraL.matrixWorldInverse.multiply( matrixWorldInverse );\n\t\t\tcameraR.matrixWorldInverse.multiply( matrixWorldInverse );\n\n\t\t}\n\n\t\t// envMap and Mirror needs camera.matrixWorld\n\n\t\tcameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse );\n\t\tcameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse );\n\n\t\tcameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix );\n\t\tcameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix );\n\n\t\t// HACK (mrdoob)\n\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t//\n\n\t\tvar layers = device.getLayers();\n\n\t\tif ( layers.length ) {\n\n\t\t\tvar layer = layers[ 0 ];\n\n\t\t\tif ( layer.leftBounds !== null && layer.leftBounds.length === 4 ) {\n\n\t\t\t\tcameraL.bounds.fromArray( layer.leftBounds );\n\n\t\t\t}\n\n\t\t\tif ( layer.rightBounds !== null && layer.rightBounds.length === 4 ) {\n\n\t\t\t\tcameraR.bounds.fromArray( layer.rightBounds );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn cameraVR;\n\n\t};\n\n\tthis.getStandingMatrix = function () {\n\n\t\treturn standingMatrix;\n\n\t};\n\n\tthis.submitFrame = function () {\n\n\t\tif ( isPresenting() ) device.submitFrame();\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tif ( typeof window !== 'undefined' ) {\n\n\t\t\twindow.removeEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange );\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author szimek / https://github.com/szimek/\n * @author tschw\n */\n\nfunction WebGLRenderer( parameters ) {\n\n\tconsole.log( 'THREE.WebGLRenderer', REVISION );\n\n\tparameters = parameters || {};\n\n\tvar _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default';\n\n\tvar currentRenderList = null;\n\tvar currentRenderState = null;\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\tthis.context = null;\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\tthis.gammaInput = false;\n\tthis.gammaOutput = false;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = LinearToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\tthis.toneMappingWhitePoint = 1.0;\n\n\t// morphs\n\n\tthis.maxMorphTargets = 8;\n\tthis.maxMorphNormals = 4;\n\n\t// internal properties\n\n\tvar _this = this,\n\n\t\t_isContextLost = false,\n\n\t\t// internal state cache\n\n\t\t_currentRenderTarget = null,\n\t\t_currentFramebuffer = null,\n\t\t_currentMaterialId = - 1,\n\t\t_currentGeometryProgram = '',\n\n\t\t_currentCamera = null,\n\t\t_currentArrayCamera = null,\n\n\t\t_currentViewport = new Vector4(),\n\t\t_currentScissor = new Vector4(),\n\t\t_currentScissorTest = null,\n\n\t\t//\n\n\t\t_usedTextureUnits = 0,\n\n\t\t//\n\n\t\t_width = _canvas.width,\n\t\t_height = _canvas.height,\n\n\t\t_pixelRatio = 1,\n\n\t\t_viewport = new Vector4( 0, 0, _width, _height ),\n\t\t_scissor = new Vector4( 0, 0, _width, _height ),\n\t\t_scissorTest = false,\n\n\t\t// frustum\n\n\t\t_frustum = new Frustum(),\n\n\t\t// clipping\n\n\t\t_clipping = new WebGLClipping(),\n\t\t_clippingEnabled = false,\n\t\t_localClippingEnabled = false,\n\n\t\t// camera matrices cache\n\n\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t_vector3 = new Vector3();\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tvar _gl;\n\n\ttry {\n\n\t\tvar contextAttributes = {\n\t\t\talpha: _alpha,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference\n\t\t};\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\t_gl = _context || _canvas.getContext( 'webgl', contextAttributes ) || _canvas.getContext( 'experimental-webgl', contextAttributes );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tif ( _canvas.getContext( 'webgl' ) !== null ) {\n\n\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\n\t}\n\n\tvar extensions, capabilities, state, info;\n\tvar properties, textures, attributes, geometries, objects;\n\tvar programCache, renderLists, renderStates;\n\n\tvar background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\tvar spriteRenderer;\n\n\tvar utils;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\t\textensions.get( 'WEBGL_depth_texture' );\n\t\textensions.get( 'OES_texture_float' );\n\t\textensions.get( 'OES_texture_float_linear' );\n\t\textensions.get( 'OES_texture_half_float' );\n\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\textensions.get( 'OES_standard_derivatives' );\n\t\textensions.get( 'OES_element_index_uint' );\n\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\tstate = new WebGLState( _gl, extensions, utils );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t\tinfo = new WebGLInfo( _gl );\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tattributes = new WebGLAttributes( _gl );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info );\n\t\tobjects = new WebGLObjects( geometries, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\tprogramCache = new WebGLPrograms( _this, extensions, capabilities );\n\t\trenderLists = new WebGLRenderLists();\n\t\trenderStates = new WebGLRenderStates();\n\n\t\tbackground = new WebGLBackground( _this, state, geometries, _premultipliedAlpha );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\tspriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, textures, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.context = _gl;\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// vr\n\n\tvar vr = new WebVRManager( _this );\n\n\tthis.vr = vr;\n\n\t// shadow map\n\n\tvar shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\tthis.shadowMap = shadowMap;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width,\n\t\t\theight: _height\n\t\t};\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tvar device = vr.getDevice();\n\n\t\tif ( device && device.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = width * _pixelRatio;\n\t\t_canvas.height = height * _pixelRatio;\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width * _pixelRatio,\n\t\t\theight: _height * _pixelRatio\n\t\t};\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = width * pixelRatio;\n\t\t_canvas.height = height * pixelRatio;\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function () {\n\n\t\treturn _currentViewport;\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t_viewport.set( x, _height - y - height, width, height );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t_scissor.set( x, _height - y - height, width, height );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function () {\n\n\t\treturn background.getClearColor();\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tvar bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT;\n\t\tif ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\tif ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\tthis.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\t\tthis.setRenderTarget( renderTarget );\n\t\tthis.clear( color, depth, stencil );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tobjects.dispose();\n\n\t\tvr.dispose();\n\n\t\tstopAnimation();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tinitGLContext();\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tvar material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReference( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReference( material ) {\n\n\t\tvar programInfo = properties.get( material ).program;\n\n\t\tmaterial.program = undefined;\n\n\t\tif ( programInfo !== undefined ) {\n\n\t\t\tprogramCache.releaseProgram( programInfo );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tfunction renderObjectImmediate( object, program, material ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program, material );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program, material ) {\n\n\t\tstate.initAttributes();\n\n\t\tvar buffers = properties.get( object );\n\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal );\n\n\t\t\tif ( ! material.isMeshPhongMaterial &&\n\t\t\t\t! material.isMeshStandardMaterial &&\n\t\t\t\t! material.isMeshNormalMaterial &&\n\t\t\t\tmaterial.flatShading === true ) {\n\n\t\t\t\tfor ( var i = 0, l = object.count * 3; i < l; i += 9 ) {\n\n\t\t\t\t\tvar array = object.normalArray;\n\n\t\t\t\t\tvar nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3;\n\t\t\t\t\tvar ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3;\n\t\t\t\t\tvar nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3;\n\n\t\t\t\t\tarray[ i + 0 ] = nx;\n\t\t\t\t\tarray[ i + 1 ] = ny;\n\t\t\t\t\tarray[ i + 2 ] = nz;\n\n\t\t\t\t\tarray[ i + 3 ] = nx;\n\t\t\t\t\tarray[ i + 4 ] = ny;\n\t\t\t\t\tarray[ i + 5 ] = nz;\n\n\t\t\t\t\tarray[ i + 6 ] = nx;\n\t\t\t\t\tarray[ i + 7 ] = ny;\n\t\t\t\t\tarray[ i + 8 ] = nz;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.normal );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs && material.map ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.uv );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors && material.vertexColors !== NoColors ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.color );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( _gl.TRIANGLES, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {\n\n\t\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\tvar program = setProgram( camera, fog, material, object );\n\t\tvar geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true );\n\n\t\tvar updateBuffers = false;\n\n\t\tif ( geometryProgram !== _currentGeometryProgram ) {\n\n\t\t\t_currentGeometryProgram = geometryProgram;\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\t//\n\n\t\tvar index = geometry.index;\n\t\tvar position = geometry.attributes.position;\n\t\tvar rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tvar attribute;\n\t\tvar renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tvar dataCount = Infinity;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdataCount = index.count;\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\tdataCount = position.count;\n\n\t\t}\n\n\t\tvar rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tvar rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tvar groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tvar groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tvar drawStart = Math.max( rangeStart, groupStart );\n\t\tvar drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tvar drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( object.drawMode ) {\n\n\t\t\t\t\tcase TrianglesDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleStripDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_STRIP );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleFanDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_FAN );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tvar lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t}\n\n\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\tif ( geometry.maxInstancedCount > 0 ) {\n\n\t\t\t\trenderer.renderInstances( geometry, drawStart, drawCount );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\tfunction setupVertexAttributes( material, program, geometry ) {\n\n\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.initAttributes();\n\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tvar materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( var name in programAttributes ) {\n\n\t\t\tvar programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tvar geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tvar normalized = geometryAttribute.normalized;\n\t\t\t\t\tvar size = geometryAttribute.itemSize;\n\n\t\t\t\t\tvar attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tvar buffer = attribute.buffer;\n\t\t\t\t\tvar type = attribute.type;\n\t\t\t\t\tvar bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tvar data = geometryAttribute.data;\n\t\t\t\t\t\tvar stride = data.stride;\n\t\t\t\t\t\tvar offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tvar value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib1fv( programAttribute, value );\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\tstate.disableUnusedAttributes();\n\n\t}\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.material ) {\n\n\t\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\t\tfor ( var i = 0; i < object.material.length; i ++ ) {\n\n\t\t\t\t\t\tinitMaterial( object.material[ i ], scene.fog, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinitMaterial( object.material, scene.fog, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t// Animation Loop\n\n\tvar isAnimating = false;\n\tvar onAnimationFrame = null;\n\n\tfunction startAnimation() {\n\n\t\tif ( isAnimating ) return;\n\n\t\trequestAnimationLoopFrame();\n\n\t\tisAnimating = true;\n\n\t}\n\n\tfunction stopAnimation() {\n\n\t\tisAnimating = false;\n\n\t}\n\n\tfunction requestAnimationLoopFrame() {\n\n\t\tvar device = vr.getDevice();\n\n\t\tif ( device && device.isPresenting ) {\n\n\t\t\tdevice.requestAnimationFrame( animationLoop );\n\n\t\t} else {\n\n\t\t\twindow.requestAnimationFrame( animationLoop );\n\n\t\t}\n\n\t}\n\n\tfunction animationLoop( time ) {\n\n\t\tif ( isAnimating === false ) return;\n\n\t\tonAnimationFrame( time );\n\n\t\trequestAnimationLoopFrame();\n\n\t}\n\n\tthis.animate = function ( callback ) {\n\n\t\tonAnimationFrame = callback;\n\t\tonAnimationFrame !== null ? startAnimation() : stopAnimation();\n\n\t};\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera, renderTarget, forceClear ) {\n\n\t\tif ( ! ( camera && camera.isCamera ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost ) return;\n\n\t\t// reset caching for this frame\n\n\t\t_currentGeometryProgram = '';\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\t// update scene graph\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tif ( vr.enabled ) {\n\n\t\t\tcamera = vr.getCamera( camera );\n\n\t\t}\n\n\t\t//\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.onBeforeRender( _this, scene, camera, renderTarget );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, camera );\n\t\tcurrentRenderList.init();\n\n\t\tprojectObject( scene, camera, _this.sortObjects );\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort();\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled ) _clipping.beginShadows();\n\n\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tif ( _clippingEnabled ) _clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset ) this.info.reset();\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\trenderTarget = null;\n\n\t\t}\n\n\t\tthis.setRenderTarget( renderTarget );\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t// render scene\n\n\t\tvar opaqueObjects = currentRenderList.opaque;\n\t\tvar transparentObjects = currentRenderList.transparent;\n\n\t\tif ( scene.overrideMaterial ) {\n\n\t\t\tvar overrideMaterial = scene.overrideMaterial;\n\n\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial );\n\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial );\n\n\t\t} else {\n\n\t\t\t// opaque pass (front-to-back order)\n\n\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera );\n\n\t\t\t// transparent pass (back-to-front order)\n\n\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera );\n\n\t\t}\n\n\t\t// custom renderers\n\n\t\tvar spritesArray = currentRenderState.state.spritesArray;\n\n\t\tspriteRenderer.render( spritesArray, scene, camera );\n\n\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\tif ( renderTarget ) {\n\n\t\t\ttextures.updateRenderTargetMipmap( renderTarget );\n\n\t\t}\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\tscene.onAfterRender( _this, scene, camera );\n\n\t\tif ( vr.enabled ) {\n\n\t\t\tvr.submitFrame();\n\n\t\t}\n\n\t\t// _gl.finish();\n\n\t\tcurrentRenderList = null;\n\t\tcurrentRenderState = null;\n\n\t};\n\n\t/*\n\t// TODO Duplicated code (Frustum)\n\n\tvar _sphere = new Sphere();\n\n\tfunction isObjectViewable( object ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null )\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere ).\n\t\tapplyMatrix4( object.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSpriteViewable( sprite ) {\n\n\t\t_sphere.center.set( 0, 0, 0 );\n\t\t_sphere.radius = 0.7071067811865476;\n\t\t_sphere.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSphereViewable( sphere ) {\n\n\t\tif ( ! _frustum.intersectsSphere( sphere ) ) return false;\n\n\t\tvar numPlanes = _clipping.numPlanes;\n\n\t\tif ( numPlanes === 0 ) return true;\n\n\t\tvar planes = _this.clippingPlanes,\n\n\t\t\tcenter = sphere.center,\n\t\t\tnegRad = - sphere.radius,\n\t\t\ti = 0;\n\n\t\tdo {\n\n\t\t\t// out when deeper than radius in the negative halfspace\n\t\t\tif ( planes[ i ].distanceToPoint( center ) < negRad ) return false;\n\n\t\t} while ( ++ i !== numPlanes );\n\n\t\treturn true;\n\n\t}\n\t*/\n\n\tfunction projectObject( object, camera, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushSprite( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentRenderList.push( object, null, object.material, _vector3.z, null );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\tobject.skeleton.update();\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar geometry = objects.update( object );\n\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar group = groups[ i ];\n\t\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, _vector3.z, null );\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\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera, overrideMaterial ) {\n\n\t\tfor ( var i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tvar renderItem = renderList[ i ];\n\n\t\t\tvar object = renderItem.object;\n\t\t\tvar geometry = renderItem.geometry;\n\t\t\tvar material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;\n\t\t\tvar group = renderItem.group;\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t_currentArrayCamera = camera;\n\n\t\t\t\tvar cameras = camera.cameras;\n\n\t\t\t\tfor ( var j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar camera2 = cameras[ j ];\n\n\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\tvar bounds = camera2.bounds;\n\n\t\t\t\t\t\tvar x = bounds.x * _width;\n\t\t\t\t\t\tvar y = bounds.y * _height;\n\t\t\t\t\t\tvar width = bounds.z * _width;\n\t\t\t\t\t\tvar height = bounds.w * _height;\n\n\t\t\t\t\t\tstate.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) );\n\n\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_currentArrayCamera = null;\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\tvar program = setProgram( camera, scene.fog, material, object );\n\n\t\t\t_currentGeometryProgram = '';\n\n\t\t\trenderObjectImmediate( object, program, material );\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene.fog, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t}\n\n\tfunction initMaterial( material, fog, object ) {\n\n\t\tvar materialProperties = properties.get( material );\n\n\t\tvar lights = currentRenderState.state.lights;\n\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tvar parameters = programCache.getParameters(\n\t\t\tmaterial, lights.state, shadowsArray, fog, _clipping.numPlanes, _clipping.numIntersection, object );\n\n\t\tvar code = programCache.getProgramCode( material, parameters );\n\n\t\tvar program = materialProperties.program;\n\t\tvar programChange = true;\n\n\t\tif ( program === undefined ) {\n\n\t\t\t// new material\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t} else if ( program.code !== code ) {\n\n\t\t\t// changed glsl or parameters\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t} else if ( materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\tproperties.update( material, 'lightsHash', lights.state.hash );\n\t\t\tprogramChange = false;\n\n\t\t} else if ( parameters.shaderID !== undefined ) {\n\n\t\t\t// same glsl and uniform list\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// only rebuild uniform list\n\t\t\tprogramChange = false;\n\n\t\t}\n\n\t\tif ( programChange ) {\n\n\t\t\tif ( parameters.shaderID ) {\n\n\t\t\t\tvar shader = ShaderLib[ parameters.shaderID ];\n\n\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\tname: material.type,\n\t\t\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\t\tfragmentShader: shader.fragmentShader\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\tname: material.type,\n\t\t\t\t\tuniforms: material.uniforms,\n\t\t\t\t\tvertexShader: material.vertexShader,\n\t\t\t\t\tfragmentShader: material.fragmentShader\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tmaterial.onBeforeCompile( materialProperties.shader, _this );\n\n\t\t\tprogram = programCache.acquireProgram( material, materialProperties.shader, parameters, code );\n\n\t\t\tmaterialProperties.program = program;\n\t\t\tmaterial.program = program;\n\n\t\t}\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tif ( material.morphTargets ) {\n\n\t\t\tmaterial.numSupportedMorphTargets = 0;\n\n\t\t\tfor ( var i = 0; i < _this.maxMorphTargets; i ++ ) {\n\n\t\t\t\tif ( programAttributes[ 'morphTarget' + i ] >= 0 ) {\n\n\t\t\t\t\tmaterial.numSupportedMorphTargets ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.morphNormals ) {\n\n\t\t\tmaterial.numSupportedMorphNormals = 0;\n\n\t\t\tfor ( var i = 0; i < _this.maxMorphNormals; i ++ ) {\n\n\t\t\t\tif ( programAttributes[ 'morphNormal' + i ] >= 0 ) {\n\n\t\t\t\t\tmaterial.numSupportedMorphNormals ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar uniforms = materialProperties.shader.uniforms;\n\n\t\tif ( ! material.isShaderMaterial &&\n\t\t\t! material.isRawShaderMaterial ||\n\t\t\tmaterial.clipping === true ) {\n\n\t\t\tmaterialProperties.numClippingPlanes = _clipping.numPlanes;\n\t\t\tmaterialProperties.numIntersection = _clipping.numIntersection;\n\t\t\tuniforms.clippingPlanes = _clipping.uniform;\n\n\t\t}\n\n\t\tmaterialProperties.fog = fog;\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.lightsHash = lights.state.hash;\n\n\t\tif ( material.lights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tvar progUniforms = materialProperties.program.getUniforms(),\n\t\t\tuniformsList =\n\t\t\t\tWebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t}\n\n\tfunction setProgram( camera, fog, material, object ) {\n\n\t\t_usedTextureUnits = 0;\n\n\t\tvar materialProperties = properties.get( material );\n\t\tvar lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled ) {\n\n\t\t\tif ( _localClippingEnabled || camera !== _currentCamera ) {\n\n\t\t\t\tvar useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\t_clipping.setState(\n\t\t\t\t\tmaterial.clippingPlanes, material.clipIntersection, material.clipShadows,\n\t\t\t\t\tcamera, materialProperties, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.needsUpdate === false ) {\n\n\t\t\tif ( materialProperties.program === undefined ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( material.lights && materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== _clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== _clipping.numIntersection ) ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.needsUpdate ) {\n\n\t\t\tinitMaterial( material, fog, object );\n\t\t\tmaterial.needsUpdate = false;\n\n\t\t}\n\n\t\tvar refreshProgram = false;\n\t\tvar refreshMaterial = false;\n\t\tvar refreshLights = false;\n\n\t\tvar program = materialProperties.program,\n\t\t\tp_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.shader.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || camera !== _currentCamera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\t// Avoid unneeded uniform updates per ArrayCamera's sub-camera\n\n\t\t\tif ( _currentCamera !== ( _currentArrayCamera || camera ) ) {\n\n\t\t\t\t_currentCamera = ( _currentArrayCamera || camera );\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tvar uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.skinning ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t// not sure why, but otherwise weird things happen\n\n\t\tif ( material.skinning ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tvar skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tvar bones = skeleton.bones;\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === undefined ) {\n\n\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t//      RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t//  with  8x8  pixel texture max   16 bones * 4 pixels =  (8 * 8)\n\t\t\t\t\t\t//       16x16 pixel texture max   64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t//       32x32 pixel texture max  256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t//       64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\n\t\t\t\t\t\tvar size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\tsize = _Math.ceilPowerOfTwo( size );\n\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\tvar boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\t\t\t\t\tboneMatrices.set( skeleton.boneMatrices ); // copy current values\n\n\t\t\t\t\t\tvar boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\t\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingWhitePoint', _this.toneMappingWhitePoint );\n\n\t\t\tif ( material.lights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\trefreshUniformsFog( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsLambert( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\tif ( material.isMeshToonMaterial ) {\n\n\t\t\t\t\trefreshUniformsToon( m_uniforms, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trefreshUniformsPhong( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\t\trefreshUniformsPhysical( m_uniforms, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trefreshUniformsStandard( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsDepth( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsDistance( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsNormal( m_uniforms, material );\n\n\t\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\t\trefreshUniformsLine( m_uniforms, material );\n\n\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\trefreshUniformsDash( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\t\trefreshUniformsPoints( m_uniforms, material );\n\n\t\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\t\tm_uniforms.color.value = material.color;\n\t\t\t\tm_uniforms.opacity.value = material.opacity;\n\n\t\t\t}\n\n\t\t\t// RectAreaLight Texture\n\t\t\t// TODO (mrdoob): Find a nicer implementation\n\n\t\t\tif ( m_uniforms.ltc_1 !== undefined ) m_uniforms.ltc_1.value = UniformsLib.LTC_1;\n\t\t\tif ( m_uniforms.ltc_2 !== undefined ) m_uniforms.ltc_2.value = UniformsLib.LTC_2;\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\treturn program;\n\n\t}\n\n\t// Uniforms (refresh uniforms objects)\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value = material.color;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\tuniforms.envMap.value = material.envMap;\n\n\t\t\t// don't flip CubeTexture envMaps, flip everything else:\n\t\t\t//  WebGLRenderTargetCube will be flipped for backwards compatibility\n\t\t\t//  WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture\n\t\t\t// this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future\n\t\t\tuniforms.flipEnvMap.value = ( ! ( material.envMap && material.envMap.isCubeTexture ) ) ? 1 : - 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tuniforms.maxMipLevel.value = properties.get( material.envMap ).__maxMipLevel;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. normal map\n\t\t// 4. bump map\n\t\t// 5. alpha map\n\t\t// 6. emissive map\n\n\t\tvar uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value = material.color;\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material ) {\n\n\t\tuniforms.diffuse.value = material.color;\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * _pixelRatio;\n\t\tuniforms.scale.value = _height * 0.5;\n\n\t\tuniforms.map.value = material.map;\n\n\t\tif ( material.map !== null ) {\n\n\t\t\tif ( material.map.matrixAutoUpdate === true ) {\n\n\t\t\t\tmaterial.map.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( material.map.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsFog( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value = fog.color;\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value = material.specular;\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\trefreshUniformsPhong( uniforms, material );\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\tuniforms.clearCoat.value = material.clearCoat;\n\t\tuniforms.clearCoatRoughness.value = material.clearCoatRoughness;\n\n\t\trefreshUniformsStandard( uniforms, material );\n\n\t}\n\n\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\t// Textures\n\n\tfunction allocTextureUnit() {\n\n\t\tvar textureUnit = _usedTextureUnits;\n\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t}\n\n\t\t_usedTextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tthis.allocTextureUnit = allocTextureUnit;\n\n\t// this.setTexture2D = setTexture2D;\n\tthis.setTexture2D = ( function () {\n\n\t\tvar warned = false;\n\n\t\t// backwards compatibility: peel texture.texture\n\t\treturn function setTexture2D( texture, slot ) {\n\n\t\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTexture = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTexture( texture, slot ) {\n\n\t\t\tif ( ! warned ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.\" );\n\t\t\t\twarned = true;\n\n\t\t\t}\n\n\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTextureCube = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTextureCube( texture, slot ) {\n\n\t\t\t// backwards compatibility: peel texture.texture\n\t\t\tif ( texture && texture.isWebGLRenderTargetCube ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\t// currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture\n\t\t\t// TODO: unify these code paths\n\t\t\tif ( ( texture && texture.isCubeTexture ) ||\n\t\t\t\t( Array.isArray( texture.image ) && texture.image.length === 6 ) ) {\n\n\t\t\t\t// CompressedTexture can have Array in image :/\n\n\t\t\t\t// this function alone should take care of cube textures\n\t\t\t\ttextures.setTextureCube( texture, slot );\n\n\t\t\t} else {\n\n\t\t\t\t// assumed: texture property of THREE.WebGLRenderTargetCube\n\n\t\t\t\ttextures.setTextureCubeDynamic( texture, slot );\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tvar framebuffer = null;\n\t\tvar isCube = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tvar __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( framebuffer ) {\n\n\t\t\tvar restore = false;\n\n\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\trestore = true;\n\n\t\t\t}\n\n\t\t\ttry {\n\n\t\t\t\tvar texture = renderTarget.texture;\n\t\t\t\tvar textureFormat = texture.format;\n\t\t\t\tvar textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! ( textureType === HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level ) {\n\n\t\tvar width = texture.image.width;\n\t\tvar height = texture.image.height;\n\t\tvar glFormat = utils.convert( texture.format );\n\n\t\tthis.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( _gl.TEXTURE_2D, level || 0, glFormat, position.x, position.y, width, height, 0 );\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level ) {\n\n\t\tvar width = srcTexture.image.width;\n\t\tvar height = srcTexture.image.height;\n\t\tvar glFormat = utils.convert( dstTexture.format );\n\t\tvar glType = utils.convert( dstTexture.type );\n\t\tvar pixels = srcTexture.isDataTexture ? srcTexture.image.data : srcTexture.image;\n\n\t\tthis.setTexture2D( dstTexture, 0 );\n\n\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level || 0, position.x, position.y, width, height, glFormat, glType, pixels );\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction FogExp2( color, density ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n}\n\nFogExp2.prototype.isFogExp2 = true;\n\nFogExp2.prototype.clone = function () {\n\n\treturn new FogExp2( this.color.getHex(), this.density );\n\n};\n\nFogExp2.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'FogExp2',\n\t\tcolor: this.color.getHex(),\n\t\tdensity: this.density\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Fog( color, near, far ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\n\tthis.near = ( near !== undefined ) ? near : 1;\n\tthis.far = ( far !== undefined ) ? far : 1000;\n\n}\n\nFog.prototype.isFog = true;\n\nFog.prototype.clone = function () {\n\n\treturn new Fog( this.color.getHex(), this.near, this.far );\n\n};\n\nFog.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'Fog',\n\t\tcolor: this.color.getHex(),\n\t\tnear: this.near,\n\t\tfar: this.far\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Scene() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Scene';\n\n\tthis.background = null;\n\tthis.fog = null;\n\tthis.overrideMaterial = null;\n\n\tthis.autoUpdate = true; // checked by the renderer\n\n}\n\nScene.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Scene,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *  map: new THREE.Texture( <Image> ),\n *\n *\tuvOffset: new THREE.Vector2(),\n *\tuvScale: new THREE.Vector2()\n * }\n */\n\nfunction SpriteMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'SpriteMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\tthis.map = null;\n\n\tthis.rotation = 0;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nSpriteMaterial.prototype = Object.create( Material.prototype );\nSpriteMaterial.prototype.constructor = SpriteMaterial;\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nSpriteMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.map = source.map;\n\n\tthis.rotation = source.rotation;\n\n\treturn this;\n\n};\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Sprite( material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Sprite';\n\n\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\tthis.center = new Vector2( 0.5, 0.5 );\n\n}\n\nSprite.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Sprite,\n\n\tisSprite: true,\n\n\traycast: ( function () {\n\n\t\tvar intersectPoint = new Vector3();\n\t\tvar worldPosition = new Vector3();\n\t\tvar worldScale = new Vector3();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tworldPosition.setFromMatrixPosition( this.matrixWorld );\n\t\t\traycaster.ray.closestPointToPoint( worldPosition, intersectPoint );\n\n\t\t\tworldScale.setFromMatrixScale( this.matrixWorld );\n\t\t\tvar guessSizeSq = worldScale.x * worldScale.y / 4;\n\n\t\t\tif ( worldPosition.distanceToSquared( intersectPoint ) > guessSizeSq ) return;\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\tintersects.push( {\n\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\tface: null,\n\t\t\t\tobject: this\n\n\t\t\t} );\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.material ).copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\treturn this;\n\n\t}\n\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LOD() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'LOD';\n\n\tObject.defineProperties( this, {\n\t\tlevels: {\n\t\t\tenumerable: true,\n\t\t\tvalue: []\n\t\t}\n\t} );\n\n}\n\nLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: LOD,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\tvar levels = source.levels;\n\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tvar level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\taddLevel: function ( object, distance ) {\n\n\t\tif ( distance === undefined ) distance = 0;\n\n\t\tdistance = Math.abs( distance );\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t},\n\n\tgetObjectForDistance: function ( distance ) {\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn levels[ i - 1 ].object;\n\n\t},\n\n\traycast: ( function () {\n\n\t\tvar matrixPosition = new Vector3();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tmatrixPosition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( matrixPosition );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t};\n\n\t}() ),\n\n\tupdate: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function update( camera ) {\n\n\t\t\tvar levels = this.levels;\n\n\t\t\tif ( levels.length > 1 ) {\n\n\t\t\t\tv1.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t\tv2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\tvar distance = v1.distanceTo( v2 );\n\n\t\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.levels = [];\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tvar level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author michael guerrero / http://realitymeltdown.com\n * @author ikerr / http://verold.com\n */\n\nfunction Skeleton( bones, boneInverses ) {\n\n\t// copy the bone array\n\n\tbones = bones || [];\n\n\tthis.bones = bones.slice( 0 );\n\tthis.boneMatrices = new Float32Array( this.bones.length * 16 );\n\n\t// use the supplied bone inverses or calculate the inverses\n\n\tif ( boneInverses === undefined ) {\n\n\t\tthis.calculateInverses();\n\n\t} else {\n\n\t\tif ( this.bones.length === boneInverses.length ) {\n\n\t\t\tthis.boneInverses = boneInverses.slice( 0 );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Skeleton boneInverses is the wrong length.' );\n\n\t\t\tthis.boneInverses = [];\n\n\t\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Skeleton.prototype, {\n\n\tcalculateInverses: function () {\n\n\t\tthis.boneInverses = [];\n\n\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tvar inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.getInverse( this.bones[ i ].matrixWorld );\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t},\n\n\tpose: function () {\n\n\t\tvar bone, i, il;\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tbone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.getInverse( this.boneInverses[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tbone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.getInverse( bone.parent.matrixWorld );\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdate: ( function () {\n\n\t\tvar offsetMatrix = new Matrix4();\n\t\tvar identityMatrix = new Matrix4();\n\n\t\treturn function update() {\n\n\t\t\tvar bones = this.bones;\n\t\t\tvar boneInverses = this.boneInverses;\n\t\t\tvar boneMatrices = this.boneMatrices;\n\t\t\tvar boneTexture = this.boneTexture;\n\n\t\t\t// flatten bone matrices to array\n\n\t\t\tfor ( var i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t\t// compute the offset between the current and the original transform\n\n\t\t\t\tvar matrix = bones[ i ] ? bones[ i ].matrixWorld : identityMatrix;\n\n\t\t\t\toffsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t\toffsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t\t}\n\n\t\t\tif ( boneTexture !== undefined ) {\n\n\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t}\n\n\t\t};\n\n\t} )(),\n\n\tclone: function () {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t},\n\n\tgetBoneByName: function ( name ) {\n\n\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tvar bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author ikerr / http://verold.com\n */\n\nfunction Bone() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Bone';\n\n}\n\nBone.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Bone,\n\n\tisBone: true\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author ikerr / http://verold.com\n */\n\nfunction SkinnedMesh( geometry, material ) {\n\n\tMesh.call( this, geometry, material );\n\n\tthis.type = 'SkinnedMesh';\n\n\tthis.bindMode = 'attached';\n\tthis.bindMatrix = new Matrix4();\n\tthis.bindMatrixInverse = new Matrix4();\n\n\tvar bones = this.initBones();\n\tvar skeleton = new Skeleton( bones );\n\n\tthis.bind( skeleton, this.matrixWorld );\n\n\tthis.normalizeSkinWeights();\n\n}\n\nSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: SkinnedMesh,\n\n\tisSkinnedMesh: true,\n\n\tinitBones: function () {\n\n\t\tvar bones = [], bone, gbone;\n\t\tvar i, il;\n\n\t\tif ( this.geometry && this.geometry.bones !== undefined ) {\n\n\t\t\t// first, create array of 'Bone' objects from geometry data\n\n\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\t// create new 'Bone' object\n\n\t\t\t\tbone = new Bone();\n\t\t\t\tbones.push( bone );\n\n\t\t\t\t// apply values\n\n\t\t\t\tbone.name = gbone.name;\n\t\t\t\tbone.position.fromArray( gbone.pos );\n\t\t\t\tbone.quaternion.fromArray( gbone.rotq );\n\t\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\n\n\t\t\t}\n\n\t\t\t// second, create bone hierarchy\n\n\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\tif ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) {\n\n\t\t\t\t\t// subsequent bones in the hierarchy\n\n\t\t\t\t\tbones[ gbone.parent ].add( bones[ i ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// topmost bone, immediate child of the skinned mesh\n\n\t\t\t\t\tthis.add( bones[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// now the bones are part of the scene graph and children of the skinned mesh.\n\t\t// let's update the corresponding matrices\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\treturn bones;\n\n\t},\n\n\tbind: function ( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.getInverse( bindMatrix );\n\n\t},\n\n\tpose: function () {\n\n\t\tthis.skeleton.pose();\n\n\t},\n\n\tnormalizeSkinWeights: function () {\n\n\t\tvar scale, i;\n\n\t\tif ( this.geometry && this.geometry.isGeometry ) {\n\n\t\t\tfor ( i = 0; i < this.geometry.skinWeights.length; i ++ ) {\n\n\t\t\t\tvar sw = this.geometry.skinWeights[ i ];\n\n\t\t\t\tscale = 1.0 / sw.manhattanLength();\n\n\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\tsw.multiplyScalar( scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsw.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( this.geometry && this.geometry.isBufferGeometry ) {\n\n\t\t\tvar vec = new Vector4();\n\n\t\t\tvar skinWeight = this.geometry.attributes.skinWeight;\n\n\t\t\tfor ( i = 0; i < skinWeight.count; i ++ ) {\n\n\t\t\t\tvec.x = skinWeight.getX( i );\n\t\t\t\tvec.y = skinWeight.getY( i );\n\t\t\t\tvec.z = skinWeight.getZ( i );\n\t\t\t\tvec.w = skinWeight.getW( i );\n\n\t\t\t\tscale = 1.0 / vec.manhattanLength();\n\n\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\tvec.multiplyScalar( scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvec.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t}\n\n\t\t\t\tskinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tMesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.getInverse( this.matrixWorld );\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.getInverse( this.bindMatrix );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  linewidth: <float>,\n *  linecap: \"round\",\n *  linejoin: \"round\"\n * }\n */\n\nfunction LineBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'LineBasicMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.linewidth = 1;\n\tthis.linecap = 'round';\n\tthis.linejoin = 'round';\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nLineBasicMaterial.prototype = Object.create( Material.prototype );\nLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nLineBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.linewidth = source.linewidth;\n\tthis.linecap = source.linecap;\n\tthis.linejoin = source.linejoin;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Line( geometry, material, mode ) {\n\n\tif ( mode === 1 ) {\n\n\t\tconsole.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' );\n\t\treturn new LineSegments( geometry, material );\n\n\t}\n\n\tObject3D.call( this );\n\n\tthis.type = 'Line';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new LineBasicMaterial( { color: Math.random() * 0xffffff } );\n\n}\n\nLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Line,\n\n\tisLine: true,\n\n\tcomputeLineDistances: ( function () {\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [ 0 ];\n\n\t\t\t\t\tfor ( var i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i ] += start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\tlineDistances[ 0 ] = 0;\n\n\t\t\t\tfor ( var i = 1, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() ),\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar precision = raycaster.linePrecision;\n\t\t\tvar precisionSq = precision * precision;\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\tvar vStart = new Vector3();\n\t\t\tvar vEnd = new Vector3();\n\t\t\tvar interSegment = new Vector3();\n\t\t\tvar interRay = new Vector3();\n\t\t\tvar step = ( this && this.isLineSegments ) ? 2 : 1;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor ( var i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tvar a = indices[ i ];\n\t\t\t\t\t\tvar b = indices[ i + 1 ];\n\n\t\t\t\t\t\tvStart.fromArray( positions, a * 3 );\n\t\t\t\t\t\tvEnd.fromArray( positions, b * 3 );\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tvStart.fromArray( positions, 3 * i );\n\t\t\t\t\t\tvEnd.fromArray( positions, 3 * i + 3 );\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\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} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar nbVertices = vertices.length;\n\n\t\t\t\tfor ( var i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\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\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LineSegments( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineSegments';\n\n}\n\nLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineSegments,\n\n\tisLineSegments: true,\n\n\tcomputeLineDistances: ( function () {\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [];\n\n\t\t\t\t\tfor ( var i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t\tstart.copy( vertices[ i ] );\n\t\t\t\t\tend.copy( vertices[ i + 1 ] );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() )\n\n} );\n\n/**\n * @author mgreter / http://github.com/mgreter\n */\n\nfunction LineLoop( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineLoop';\n\n}\n\nLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineLoop,\n\n\tisLineLoop: true,\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *  map: new THREE.Texture( <Image> ),\n *\n *  size: <float>,\n *  sizeAttenuation: <bool>\n * }\n */\n\nfunction PointsMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'PointsMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.size = 1;\n\tthis.sizeAttenuation = true;\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nPointsMaterial.prototype = Object.create( Material.prototype );\nPointsMaterial.prototype.constructor = PointsMaterial;\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nPointsMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.size = source.size;\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Points( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Points';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new PointsMaterial( { color: Math.random() * 0xffffff } );\n\n}\n\nPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Points,\n\n\tisPoints: true,\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar object = this;\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\tvar threshold = raycaster.params.Points.threshold;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\t\t\tsphere.radius += threshold;\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\tvar localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\t\tvar localThresholdSq = localThreshold * localThreshold;\n\t\t\tvar position = new Vector3();\n\t\t\tvar intersectPoint = new Vector3();\n\n\t\t\tfunction testPoint( point, index ) {\n\n\t\t\t\tvar rayPointDistanceSq = ray.distanceSqToPoint( point );\n\n\t\t\t\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\t\t\t\tray.closestPointToPoint( point, intersectPoint );\n\t\t\t\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tobject: object\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor ( var i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar a = indices[ i ];\n\n\t\t\t\t\t\tposition.fromArray( positions, a * 3 );\n\n\t\t\t\t\t\ttestPoint( position, a );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3; i < l; i ++ ) {\n\n\t\t\t\t\t\tposition.fromArray( positions, i * 3 );\n\n\t\t\t\t\t\ttestPoint( position, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\ttestPoint( vertices[ i ], i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Group() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Group';\n\n}\n\nGroup.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Group,\n\n\tisGroup: true\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.generateMipmaps = false;\n\n}\n\nVideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), {\n\n\tconstructor: VideoTexture,\n\n\tisVideoTexture: true,\n\n\tupdate: function () {\n\n\t\tvar video = this.image;\n\n\t\tif ( video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { width: width, height: height };\n\tthis.mipmaps = mipmaps;\n\n\t// no flipping for cube textures\n\t// (also flipping doesn't work for compressed textures )\n\n\tthis.flipY = false;\n\n\t// can't generate mipmaps for compressed textures\n\t// mips must be embedded in DDS files\n\n\tthis.generateMipmaps = false;\n\n}\n\nCompressedTexture.prototype = Object.create( Texture.prototype );\nCompressedTexture.prototype.constructor = CompressedTexture;\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\n/**\n * @author Matt DesLauriers / @mattdesl\n * @author atix / arthursilber.de\n */\n\nfunction DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\tformat = format !== undefined ? format : DepthFormat;\n\n\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t}\n\n\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.image = { width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.flipY = false;\n\tthis.generateMipmaps\t= false;\n\n}\n\nDepthTexture.prototype = Object.create( Texture.prototype );\nDepthTexture.prototype.constructor = DepthTexture;\nDepthTexture.prototype.isDepthTexture = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WireframeGeometry( geometry ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'WireframeGeometry';\n\n\t// buffer\n\n\tvar vertices = [];\n\n\t// helper variables\n\n\tvar i, j, l, o, ol;\n\tvar edge = [ 0, 0 ], edges = {}, e, edge1, edge2;\n\tvar key, keys = [ 'a', 'b', 'c' ];\n\tvar vertex;\n\n\t// different logic for Geometry and BufferGeometry\n\n\tif ( geometry && geometry.isGeometry ) {\n\n\t\t// create a data structure that contains all edges without duplicates\n\n\t\tvar faces = geometry.faces;\n\n\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices\n\n\t\tfor ( key in edges ) {\n\n\t\t\te = edges[ key ];\n\n\t\t\tvertex = geometry.vertices[ e.index1 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\tvertex = geometry.vertices[ e.index2 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t} else if ( geometry && geometry.isBufferGeometry ) {\n\n\t\tvar position, indices, groups;\n\t\tvar group, start, count;\n\t\tvar index1, index2;\n\n\t\tvertex = new Vector3();\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\t// indexed BufferGeometry\n\n\t\t\tposition = geometry.attributes.position;\n\t\t\tindices = geometry.index;\n\t\t\tgroups = geometry.groups;\n\n\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t}\n\n\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\tfor ( o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\tgroup = groups[ o ];\n\n\t\t\t\tstart = group.start;\n\t\t\t\tcount = group.count;\n\n\t\t\t\tfor ( i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\tedge1 = indices.getX( i + j );\n\t\t\t\t\t\tedge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\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\t// generate vertices\n\n\t\t\tfor ( key in edges ) {\n\n\t\t\t\te = edges[ key ];\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// non-indexed BufferGeometry\n\n\t\t\tposition = geometry.attributes.position;\n\n\t\t\tfor ( i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\tindex1 = 3 * i + j;\n\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tindex2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nWireframeGeometry.prototype = Object.create( BufferGeometry.prototype );\nWireframeGeometry.prototype.constructor = WireframeGeometry;\n\n/**\n * @author zz85 / https://github.com/zz85\n * @author Mugen87 / https://github.com/Mugen87\n *\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout http://prideout.net/blog/?p=44\n */\n\n// ParametricGeometry\n\nfunction ParametricGeometry( func, slices, stacks ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ParametricGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\tthis.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );\n\tthis.mergeVertices();\n\n}\n\nParametricGeometry.prototype = Object.create( Geometry.prototype );\nParametricGeometry.prototype.constructor = ParametricGeometry;\n\n// ParametricBufferGeometry\n\nfunction ParametricBufferGeometry( func, slices, stacks ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ParametricBufferGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\tvar EPS = 0.00001;\n\n\tvar normal = new Vector3();\n\n\tvar p0 = new Vector3(), p1 = new Vector3();\n\tvar pu = new Vector3(), pv = new Vector3();\n\n\tvar i, j;\n\n\t// generate vertices, normals and uvs\n\n\tvar sliceCount = slices + 1;\n\n\tfor ( i = 0; i <= stacks; i ++ ) {\n\n\t\tvar v = i / stacks;\n\n\t\tfor ( j = 0; j <= slices; j ++ ) {\n\n\t\t\tvar u = j / slices;\n\n\t\t\t// vertex\n\n\t\t\tfunc( u, v, p0 );\n\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t// normal\n\n\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, v );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( i = 0; i < stacks; i ++ ) {\n\n\t\tfor ( j = 0; j < slices; j ++ ) {\n\n\t\t\tvar a = i * sliceCount + j;\n\t\t\tvar b = i * sliceCount + j + 1;\n\t\t\tvar c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\tvar d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t// faces one and two\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n/**\n * @author clockworkgeek / https://github.com/clockworkgeek\n * @author timothypratley / https://github.com/timothypratley\n * @author WestLangley / http://github.com/WestLangley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// PolyhedronGeometry\n\nfunction PolyhedronGeometry( vertices, indices, radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'PolyhedronGeometry';\n\n\tthis.parameters = {\n\t\tvertices: vertices,\n\t\tindices: indices,\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nPolyhedronGeometry.prototype = Object.create( Geometry.prototype );\nPolyhedronGeometry.prototype.constructor = PolyhedronGeometry;\n\n// PolyhedronBufferGeometry\n\nfunction PolyhedronBufferGeometry( vertices, indices, radius, detail ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'PolyhedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tvertices: vertices,\n\t\tindices: indices,\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tradius = radius || 1;\n\tdetail = detail || 0;\n\n\t// default buffer data\n\n\tvar vertexBuffer = [];\n\tvar uvBuffer = [];\n\n\t// the subdivision creates the vertex buffer data\n\n\tsubdivide( detail );\n\n\t// all vertices should lie on a conceptual sphere with a given radius\n\n\tappplyRadius( radius );\n\n\t// finally, create the uv data\n\n\tgenerateUVs();\n\n\t// build non-indexed geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\tif ( detail === 0 ) {\n\n\t\tthis.computeVertexNormals(); // flat normals\n\n\t} else {\n\n\t\tthis.normalizeNormals(); // smooth normals\n\n\t}\n\n\t// helper functions\n\n\tfunction subdivide( detail ) {\n\n\t\tvar a = new Vector3();\n\t\tvar b = new Vector3();\n\t\tvar c = new Vector3();\n\n\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t// get the vertices of the face\n\n\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t// perform subdivision\n\n\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t}\n\n\t}\n\n\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\tvar cols = Math.pow( 2, detail );\n\n\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\tvar v = [];\n\n\t\tvar i, j;\n\n\t\t// construct all of the vertices for this subdivision\n\n\t\tfor ( i = 0; i <= cols; i ++ ) {\n\n\t\t\tv[ i ] = [];\n\n\t\t\tvar aj = a.clone().lerp( c, i / cols );\n\t\t\tvar bj = b.clone().lerp( c, i / cols );\n\n\t\t\tvar rows = cols - i;\n\n\t\t\tfor ( j = 0; j <= rows; j ++ ) {\n\n\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// construct all of the faces\n\n\t\tfor ( i = 0; i < cols; i ++ ) {\n\n\t\t\tfor ( j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\tvar k = Math.floor( j / 2 );\n\n\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction appplyRadius( radius ) {\n\n\t\tvar vertex = new Vector3();\n\n\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t}\n\n\t}\n\n\tfunction generateUVs() {\n\n\t\tvar vertex = new Vector3();\n\n\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\tvar u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\tvar v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t}\n\n\t\tcorrectUVs();\n\n\t\tcorrectSeam();\n\n\t}\n\n\tfunction correctSeam() {\n\n\t\t// handle case when face straddles the seam, see #3269\n\n\t\tfor ( var i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t// uv data of a single face\n\n\t\t\tvar x0 = uvBuffer[ i + 0 ];\n\t\t\tvar x1 = uvBuffer[ i + 2 ];\n\t\t\tvar x2 = uvBuffer[ i + 4 ];\n\n\t\t\tvar max = Math.max( x0, x1, x2 );\n\t\t\tvar min = Math.min( x0, x1, x2 );\n\n\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction pushVertex( vertex ) {\n\n\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t}\n\n\tfunction getVertexByIndex( index, vertex ) {\n\n\t\tvar stride = index * 3;\n\n\t\tvertex.x = vertices[ stride + 0 ];\n\t\tvertex.y = vertices[ stride + 1 ];\n\t\tvertex.z = vertices[ stride + 2 ];\n\n\t}\n\n\tfunction correctUVs() {\n\n\t\tvar a = new Vector3();\n\t\tvar b = new Vector3();\n\t\tvar c = new Vector3();\n\n\t\tvar centroid = new Vector3();\n\n\t\tvar uvA = new Vector2();\n\t\tvar uvB = new Vector2();\n\t\tvar uvC = new Vector2();\n\n\t\tfor ( var i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\tvar azi = azimuth( centroid );\n\n\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t}\n\n\t}\n\n\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t}\n\n\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t}\n\n\t}\n\n\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\tfunction azimuth( vector ) {\n\n\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t}\n\n\n\t// Angle above the XZ plane.\n\n\tfunction inclination( vector ) {\n\n\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t}\n\n}\n\nPolyhedronBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPolyhedronBufferGeometry.prototype.constructor = PolyhedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// TetrahedronGeometry\n\nfunction TetrahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TetrahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nTetrahedronGeometry.prototype = Object.create( Geometry.prototype );\nTetrahedronGeometry.prototype.constructor = TetrahedronGeometry;\n\n// TetrahedronBufferGeometry\n\nfunction TetrahedronBufferGeometry( radius, detail ) {\n\n\tvar vertices = [\n\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t];\n\n\tvar indices = [\n\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'TetrahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nTetrahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nTetrahedronBufferGeometry.prototype.constructor = TetrahedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// OctahedronGeometry\n\nfunction OctahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'OctahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nOctahedronGeometry.prototype = Object.create( Geometry.prototype );\nOctahedronGeometry.prototype.constructor = OctahedronGeometry;\n\n// OctahedronBufferGeometry\n\nfunction OctahedronBufferGeometry( radius, detail ) {\n\n\tvar vertices = [\n\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t];\n\n\tvar indices = [\n\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t1, 3, 4,\t1, 4, 2\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'OctahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nOctahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nOctahedronBufferGeometry.prototype.constructor = OctahedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// IcosahedronGeometry\n\nfunction IcosahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'IcosahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nIcosahedronGeometry.prototype = Object.create( Geometry.prototype );\nIcosahedronGeometry.prototype.constructor = IcosahedronGeometry;\n\n// IcosahedronBufferGeometry\n\nfunction IcosahedronBufferGeometry( radius, detail ) {\n\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\tvar vertices = [\n\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t 0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t t, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t];\n\n\tvar indices = [\n\t\t 0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t 1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t 3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t 4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'IcosahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nIcosahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nIcosahedronBufferGeometry.prototype.constructor = IcosahedronBufferGeometry;\n\n/**\n * @author Abe Pazos / https://hamoid.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// DodecahedronGeometry\n\nfunction DodecahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'DodecahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nDodecahedronGeometry.prototype = Object.create( Geometry.prototype );\nDodecahedronGeometry.prototype.constructor = DodecahedronGeometry;\n\n// DodecahedronBufferGeometry\n\nfunction DodecahedronBufferGeometry( radius, detail ) {\n\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\tvar r = 1 / t;\n\n\tvar vertices = [\n\n\t\t// (±1, ±1, ±1)\n\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t// (0, ±1/φ, ±φ)\n\t\t 0, - r, - t, 0, - r, t,\n\t\t 0, r, - t, 0, r, t,\n\n\t\t// (±1/φ, ±φ, 0)\n\t\t- r, - t, 0, - r, t, 0,\n\t\t r, - t, 0, r, t, 0,\n\n\t\t// (±φ, 0, ±1/φ)\n\t\t- t, 0, - r, t, 0, - r,\n\t\t- t, 0, r, t, 0, r\n\t];\n\n\tvar indices = [\n\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'DodecahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nDodecahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nDodecahedronBufferGeometry.prototype.constructor = DodecahedronBufferGeometry;\n\n/**\n * @author oosmoxiecode / https://github.com/oosmoxiecode\n * @author WestLangley / https://github.com/WestLangley\n * @author zz85 / https://github.com/zz85\n * @author miningold / https://github.com/miningold\n * @author jonobr1 / https://github.com/jonobr1\n * @author Mugen87 / https://github.com/Mugen87\n *\n */\n\n// TubeGeometry\n\nfunction TubeGeometry( path, tubularSegments, radius, radialSegments, closed, taper ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TubeGeometry';\n\n\tthis.parameters = {\n\t\tpath: path,\n\t\ttubularSegments: tubularSegments,\n\t\tradius: radius,\n\t\tradialSegments: radialSegments,\n\t\tclosed: closed\n\t};\n\n\tif ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' );\n\n\tvar bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed );\n\n\t// expose internals\n\n\tthis.tangents = bufferGeometry.tangents;\n\tthis.normals = bufferGeometry.normals;\n\tthis.binormals = bufferGeometry.binormals;\n\n\t// create geometry\n\n\tthis.fromBufferGeometry( bufferGeometry );\n\tthis.mergeVertices();\n\n}\n\nTubeGeometry.prototype = Object.create( Geometry.prototype );\nTubeGeometry.prototype.constructor = TubeGeometry;\n\n// TubeBufferGeometry\n\nfunction TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TubeBufferGeometry';\n\n\tthis.parameters = {\n\t\tpath: path,\n\t\ttubularSegments: tubularSegments,\n\t\tradius: radius,\n\t\tradialSegments: radialSegments,\n\t\tclosed: closed\n\t};\n\n\ttubularSegments = tubularSegments || 64;\n\tradius = radius || 1;\n\tradialSegments = radialSegments || 8;\n\tclosed = closed || false;\n\n\tvar frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t// expose internals\n\n\tthis.tangents = frames.tangents;\n\tthis.normals = frames.normals;\n\tthis.binormals = frames.binormals;\n\n\t// helper variables\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\tvar uv = new Vector2();\n\tvar P = new Vector3();\n\n\tvar i, j;\n\n\t// buffer\n\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\tvar indices = [];\n\n\t// create buffer data\n\n\tgenerateBufferData();\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// functions\n\n\tfunction generateBufferData() {\n\n\t\tfor ( i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\tgenerateSegment( i );\n\n\t\t}\n\n\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t// at the regular position on the given path\n\t\t//\n\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t// uvs are generated in a separate function.\n\t\t// this makes it easy compute correct values for closed geometries\n\n\t\tgenerateUVs();\n\n\t\t// finally create faces\n\n\t\tgenerateIndices();\n\n\t}\n\n\tfunction generateSegment( i ) {\n\n\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t// retrieve corresponding normal and binormal\n\n\t\tvar N = frames.normals[ i ];\n\t\tvar B = frames.binormals[ i ];\n\n\t\t// generate normals and vertices for the current segment\n\n\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\tvar sin = Math.sin( v );\n\t\t\tvar cos = - Math.cos( v );\n\n\t\t\t// normal\n\n\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\tnormal.normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t}\n\n\tfunction generateIndices() {\n\n\t\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction generateUVs() {\n\n\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nTubeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTubeBufferGeometry.prototype.constructor = TubeBufferGeometry;\n\n/**\n * @author oosmoxiecode\n * @author Mugen87 / https://github.com/Mugen87\n *\n * based on http://www.blackpawn.com/texts/pqtorus/\n */\n\n// TorusKnotGeometry\n\nfunction TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TorusKnotGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\ttubularSegments: tubularSegments,\n\t\tradialSegments: radialSegments,\n\t\tp: p,\n\t\tq: q\n\t};\n\n\tif ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\n\n\tthis.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\n\tthis.mergeVertices();\n\n}\n\nTorusKnotGeometry.prototype = Object.create( Geometry.prototype );\nTorusKnotGeometry.prototype.constructor = TorusKnotGeometry;\n\n// TorusKnotBufferGeometry\n\nfunction TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TorusKnotBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\ttubularSegments: tubularSegments,\n\t\tradialSegments: radialSegments,\n\t\tp: p,\n\t\tq: q\n\t};\n\n\tradius = radius || 1;\n\ttube = tube || 0.4;\n\ttubularSegments = Math.floor( tubularSegments ) || 64;\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\tp = p || 2;\n\tq = q || 3;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar i, j;\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\tvar P1 = new Vector3();\n\tvar P2 = new Vector3();\n\n\tvar B = new Vector3();\n\tvar T = new Vector3();\n\tvar N = new Vector3();\n\n\t// generate vertices, normals and uvs\n\n\tfor ( i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\tvar u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t// calculate orthonormal basis\n\n\t\tT.subVectors( P2, P1 );\n\t\tN.addVectors( P2, P1 );\n\t\tB.crossVectors( T, N );\n\t\tN.crossVectors( B, T );\n\n\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\tB.normalize();\n\t\tN.normalize();\n\n\t\tfor ( j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\t\t\tvar cx = - tube * Math.cos( v );\n\t\t\tvar cy = tube * Math.sin( v );\n\n\t\t\t// now calculate the final vertex position.\n\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( i / tubularSegments );\n\t\t\tuvs.push( j / radialSegments );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// this function calculates the current position on the torus curve\n\n\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\tvar cu = Math.cos( u );\n\t\tvar su = Math.sin( u );\n\t\tvar quOverP = q / p * u;\n\t\tvar cs = Math.cos( quOverP );\n\n\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t}\n\n}\n\nTorusKnotBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTorusKnotBufferGeometry.prototype.constructor = TorusKnotBufferGeometry;\n\n/**\n * @author oosmoxiecode\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// TorusGeometry\n\nfunction TorusGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TorusGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\tradialSegments: radialSegments,\n\t\ttubularSegments: tubularSegments,\n\t\tarc: arc\n\t};\n\n\tthis.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\n\tthis.mergeVertices();\n\n}\n\nTorusGeometry.prototype = Object.create( Geometry.prototype );\nTorusGeometry.prototype.constructor = TorusGeometry;\n\n// TorusBufferGeometry\n\nfunction TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TorusBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\tradialSegments: radialSegments,\n\t\ttubularSegments: tubularSegments,\n\t\tarc: arc\n\t};\n\n\tradius = radius || 1;\n\ttube = tube || 0.4;\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\ttubularSegments = Math.floor( tubularSegments ) || 6;\n\tarc = arc || Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar center = new Vector3();\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\tvar j, i;\n\n\t// generate vertices, normals and uvs\n\n\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tvar u = i / tubularSegments * arc;\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( i / tubularSegments );\n\t\t\tuvs.push( j / radialSegments );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( j = 1; j <= radialSegments; j ++ ) {\n\n\t\tfor ( i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tvar a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\tvar b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\tvar c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\tvar d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nTorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTorusBufferGeometry.prototype.constructor = TorusBufferGeometry;\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n * Port from https://github.com/mapbox/earcut (v2.1.2)\n */\n\nvar Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\tdim = dim || 2;\n\n\t\tvar hasHoles = holeIndices && holeIndices.length,\n\t\t\touterLen = hasHoles ? holeIndices[ 0 ] * dim : data.length,\n\t\t\touterNode = linkedList( data, 0, outerLen, dim, true ),\n\t\t\ttriangles = [];\n\n\t\tif ( ! outerNode ) return triangles;\n\n\t\tvar minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( var i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\n\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tvar i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\n\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tvar p = start, again;\n\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\n\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tvar stop = ear, prev, next;\n\n\t// iterate through ears, slicing them one by one\n\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertice leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( ear, triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\n\nfunction isEar( ear ) {\n\n\tvar a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tvar p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tvar a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\n\tvar minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\n\tvar minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\t// first look for points inside the triangle in increasing z-order\n\n\tvar p = ear.nextZ;\n\n\twhile ( p && p.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.nextZ;\n\n\t}\n\n\t// then look for points in decreasing z-order\n\n\tp = ear.prevZ;\n\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\n\t\tp = p.prevZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\n\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tvar p = start;\n\n\tdo {\n\n\t\tvar a = p.prev, b = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn p;\n\n}\n\n// try splitting polygon into two and triangulate them independently\n\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\n\tvar a = start;\n\n\tdo {\n\n\t\tvar b = a.next.next;\n\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\n\t\t\t\tvar c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\n\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tvar queue = [], i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\n\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\n\tif ( outerNode ) {\n\n\t\tvar b = splitPolygon( outerNode, hole );\n\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\n\nfunction findHoleBridge( hole, outerNode ) {\n\n\tvar p = outerNode,\n\t\thx = hole.x,\n\t\thy = hole.y,\n\t\tqx = - Infinity,\n\t\tm;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tvar x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m.prev; // hole touches outer segment; pick lower endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tvar stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y,\n\t\ttanMin = Infinity,\n\t\ttan;\n\n\tp = m.next;\n\n\twhile ( p !== stop ) {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( ( tan < tanMin || ( tan === tanMin && p.x > m.x ) ) && locallyInside( p, hole ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t}\n\n\treturn m;\n\n}\n\n// interlink polygon nodes in z-order\n\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tvar p = start;\n\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\n\nfunction sortLinked( list ) {\n\n\tvar i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\n\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\n\nfunction getLeftmost( start ) {\n\n\tvar p = start, leftmost = start;\n\n\tdo {\n\n\t\tif ( p.x < leftmost.x ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\n\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\n\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) &&\n\t\tlocallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b );\n\n}\n\n// signed area of a triangle\n\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\n\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\n\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tif ( ( equals( p1, q1 ) && equals( p2, q2 ) ) ||\n\t\t\t( equals( p1, q2 ) && equals( p2, q1 ) ) ) return true;\n\n\treturn area( p1, q1, p2 ) > 0 !== area( p1, q1, q2 ) > 0 &&\n\t\t\t\t area( p2, q2, p1 ) > 0 !== area( p2, q2, q1 ) > 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\n\nfunction intersectsPolygon( a, b ) {\n\n\tvar p = a;\n\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\t\t\tintersects( p, p.next, a, b ) ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\n\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\n\nfunction middleInside( a, b ) {\n\n\tvar p = a,\n\t\tinside = false,\n\t\tpx = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) {\n\n\t\t\tinside = ! inside;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\n\nfunction splitPolygon( a, b ) {\n\n\tvar a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\n\nfunction insertNode( i, x, y, last ) {\n\n\tvar p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertice index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertice nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tvar sum = 0;\n\n\tfor ( var i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nvar ShapeUtils = {\n\n\t// calculate area of the contour polygon\n\n\tarea: function ( contour ) {\n\n\t\tvar n = contour.length;\n\t\tvar a = 0.0;\n\n\t\tfor ( var p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t},\n\n\tisClockWise: function ( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t},\n\n\ttriangulateShape: function ( contour, holes ) {\n\n\t\tvar vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tvar holeIndices = []; // array of hole indices\n\t\tvar faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tvar holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( var i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tvar triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( var i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n};\n\nfunction removeDupEndPts( points ) {\n\n\tvar l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( var i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n *  curveSegments: <int>, // number of points on the curves\n *  steps: <int>, // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n *  amount: <int>, // Depth to extrude the shape\n *\n *  bevelEnabled: <bool>, // turn on bevel\n *  bevelThickness: <float>, // how deep into the original shape bevel goes\n *  bevelSize: <float>, // how far from shape outline is bevel\n *  bevelSegments: <int>, // number of bevel layers\n *\n *  extrudePath: <THREE.Curve> // curve to extrude shape along\n *\n *  UVGenerator: <Object> // object that provides UV generator functions\n *\n * }\n */\n\n// ExtrudeGeometry\n\nfunction ExtrudeGeometry( shapes, options ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ExtrudeGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\toptions: options\n\t};\n\n\tthis.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) );\n\tthis.mergeVertices();\n\n}\n\nExtrudeGeometry.prototype = Object.create( Geometry.prototype );\nExtrudeGeometry.prototype.constructor = ExtrudeGeometry;\n\n// ExtrudeBufferGeometry\n\nfunction ExtrudeBufferGeometry( shapes, options ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ExtrudeBufferGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\toptions: options\n\t};\n\n\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\tvar scope = this;\n\n\tvar verticesArray = [];\n\tvar uvArray = [];\n\n\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\tvar shape = shapes[ i ];\n\t\taddShape( shape, options );\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\tthis.computeVertexNormals();\n\n\t// functions\n\n\tfunction addShape( shape ) {\n\n\t\tvar placeholder = [];\n\n\t\t// options\n\n\t\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\tvar steps = options.steps !== undefined ? options.steps : 1;\n\t\tvar amount = options.amount !== undefined ? options.amount : 100;\n\n\t\tvar bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\tvar bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\tvar bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\tvar bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\tvar extrudePath = options.extrudePath;\n\n\t\tvar uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t//\n\n\t\tvar extrudePts, extrudeByPath = false;\n\t\tvar splineTube, binormal, normal, position2;\n\n\t\tif ( extrudePath ) {\n\n\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\textrudeByPath = true;\n\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t// SETUP TNB variables\n\n\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\tbinormal = new Vector3();\n\t\t\tnormal = new Vector3();\n\t\t\tposition2 = new Vector3();\n\n\t\t}\n\n\t\t// Safeguards if bevels are not enabled\n\n\t\tif ( ! bevelEnabled ) {\n\n\t\t\tbevelSegments = 0;\n\t\t\tbevelThickness = 0;\n\t\t\tbevelSize = 0;\n\n\t\t}\n\n\t\t// Variables initialization\n\n\t\tvar ahole, h, hl; // looping of holes\n\n\t\tvar shapePoints = shape.extractPoints( curveSegments );\n\n\t\tvar vertices = shapePoints.shape;\n\t\tvar holes = shapePoints.holes;\n\n\t\tvar reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\tif ( reverse ) {\n\n\t\t\tvertices = vertices.reverse();\n\n\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tvar faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t/* Vertices */\n\n\t\tvar contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\n\t\t\tvertices = vertices.concat( ahole );\n\n\t\t}\n\n\n\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\tif ( ! vec ) console.error( \"THREE.ExtrudeGeometry: vec does not exist\" );\n\n\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t}\n\n\t\tvar b, bs, t, z,\n\t\t\tvert, vlen = vertices.length,\n\t\t\tface, flen = faces.length;\n\n\n\t\t// Find directions for point movement\n\n\n\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t//   shifted by 1 unit (length of normalized vector) to the left\n\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t//\n\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t//  adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\tvar v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\tvar v_prev_x = inPt.x - inPrev.x,\n\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\tvar v_next_x = inNext.x - inPt.x,\n\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\tvar v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t// check for collinear edges\n\t\t\tvar collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t// not collinear\n\n\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\tvar v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\tvar v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\tvar ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\tvar ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\tvar ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\tvar ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\tvar sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t//  but prevent crazy spikes\n\t\t\t\tvar v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\tvar direction_eq = false; // assumes: opposite\n\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\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\tif ( direction_eq ) {\n\n\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t}\n\n\n\t\tvar contourMovements = [];\n\n\t\tfor ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\tif ( j === il ) j = 0;\n\t\t\tif ( k === il ) k = 0;\n\n\t\t\t//  (j)---(i)---(k)\n\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t}\n\n\t\tvar holesMovements = [],\n\t\t\toneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\n\t\t\toneHoleMovements = [];\n\n\t\t\tfor ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t//  (j)---(i)---(k)\n\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t}\n\n\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t}\n\n\n\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\tfor ( b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\tt = b / bevelSegments;\n\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t// contract shape\n\n\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t}\n\n\t\t\t// expand holes\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tbs = bevelSize;\n\n\t\t// Back facing vertices\n\n\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t} else {\n\n\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add stepped vertices...\n\t\t// Including front facing vertices\n\n\t\tvar s;\n\n\t\tfor ( s = 1; s <= steps; s ++ ) {\n\n\t\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, amount / steps * s );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// Add bevel segments planes\n\n\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\tfor ( b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\tt = b / bevelSegments;\n\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t// contract shape\n\n\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\tv( vert.x, vert.y, amount + z );\n\n\t\t\t}\n\n\t\t\t// expand holes\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, amount + z );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\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\t/* Faces */\n\n\t\t// Top and bottom faces\n\n\t\tbuildLidFaces();\n\n\t\t// Sides faces\n\n\t\tbuildSideFaces();\n\n\n\t\t/////  Internal functions\n\n\t\tfunction buildLidFaces() {\n\n\t\t\tvar start = verticesArray.length / 3;\n\n\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\tvar layer = 0; // steps + 1\n\t\t\t\tvar offset = vlen * layer;\n\n\t\t\t\t// Bottom faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t}\n\n\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t// Top faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Bottom faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t}\n\n\t\t\t\t// Top faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t}\n\n\t\t// Create faces for the z-sides of the shape\n\n\t\tfunction buildSideFaces() {\n\n\t\t\tvar start = verticesArray.length / 3;\n\t\t\tvar layeroffset = 0;\n\t\t\tsidewalls( contour, layeroffset );\n\t\t\tlayeroffset += contour.length;\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t//, true\n\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t}\n\n\n\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t}\n\n\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\tvar j, k;\n\t\t\ti = contour.length;\n\n\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\tj = i;\n\t\t\t\tk = i - 1;\n\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\tvar s = 0,\n\t\t\t\t\tsl = steps + bevelSegments * 2;\n\n\t\t\t\tfor ( s = 0; s < sl; s ++ ) {\n\n\t\t\t\t\tvar slen1 = vlen * s;\n\t\t\t\t\tvar slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\tvar a = layeroffset + j + slen1,\n\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction v( x, y, z ) {\n\n\t\t\tplaceholder.push( x );\n\t\t\tplaceholder.push( y );\n\t\t\tplaceholder.push( z );\n\n\t\t}\n\n\n\t\tfunction f3( a, b, c ) {\n\n\t\t\taddVertex( a );\n\t\t\taddVertex( b );\n\t\t\taddVertex( c );\n\n\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\tvar uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\taddUV( uvs[ 0 ] );\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 2 ] );\n\n\t\t}\n\n\t\tfunction f4( a, b, c, d ) {\n\n\t\t\taddVertex( a );\n\t\t\taddVertex( b );\n\t\t\taddVertex( d );\n\n\t\t\taddVertex( b );\n\t\t\taddVertex( c );\n\t\t\taddVertex( d );\n\n\n\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\tvar uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\taddUV( uvs[ 0 ] );\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 2 ] );\n\t\t\taddUV( uvs[ 3 ] );\n\n\t\t}\n\n\t\tfunction addVertex( index ) {\n\n\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t}\n\n\n\t\tfunction addUV( vector2 ) {\n\n\t\t\tuvArray.push( vector2.x );\n\t\t\tuvArray.push( vector2.y );\n\n\t\t}\n\n\t}\n\n}\n\nExtrudeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nExtrudeBufferGeometry.prototype.constructor = ExtrudeBufferGeometry;\n\nvar WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tvar a_x = vertices[ indexA * 3 ];\n\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\tvar b_x = vertices[ indexB * 3 ];\n\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\tvar c_x = vertices[ indexC * 3 ];\n\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tvar a_x = vertices[ indexA * 3 ];\n\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\tvar a_z = vertices[ indexA * 3 + 2 ];\n\t\tvar b_x = vertices[ indexB * 3 ];\n\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\tvar b_z = vertices[ indexB * 3 + 2 ];\n\t\tvar c_x = vertices[ indexC * 3 ];\n\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\t\tvar c_z = vertices[ indexC * 3 + 2 ];\n\t\tvar d_x = vertices[ indexD * 3 ];\n\t\tvar d_y = vertices[ indexD * 3 + 1 ];\n\t\tvar d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author alteredq / http://alteredqualia.com/\n *\n * Text = 3D Text\n *\n * parameters = {\n *  font: <THREE.Font>, // font\n *\n *  size: <float>, // size of the text\n *  height: <float>, // thickness to extrude text\n *  curveSegments: <int>, // number of points on the curves\n *\n *  bevelEnabled: <bool>, // turn on bevel\n *  bevelThickness: <float>, // how deep into text bevel goes\n *  bevelSize: <float> // how far from text outline is bevel\n * }\n */\n\n// TextGeometry\n\nfunction TextGeometry( text, parameters ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TextGeometry';\n\n\tthis.parameters = {\n\t\ttext: text,\n\t\tparameters: parameters\n\t};\n\n\tthis.fromBufferGeometry( new TextBufferGeometry( text, parameters ) );\n\tthis.mergeVertices();\n\n}\n\nTextGeometry.prototype = Object.create( Geometry.prototype );\nTextGeometry.prototype.constructor = TextGeometry;\n\n// TextBufferGeometry\n\nfunction TextBufferGeometry( text, parameters ) {\n\n\tparameters = parameters || {};\n\n\tvar font = parameters.font;\n\n\tif ( ! ( font && font.isFont ) ) {\n\n\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\treturn new Geometry();\n\n\t}\n\n\tvar shapes = font.generateShapes( text, parameters.size, parameters.curveSegments );\n\n\t// translate parameters to ExtrudeGeometry API\n\n\tparameters.amount = parameters.height !== undefined ? parameters.height : 50;\n\n\t// defaults\n\n\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\tExtrudeBufferGeometry.call( this, shapes, parameters );\n\n\tthis.type = 'TextBufferGeometry';\n\n}\n\nTextBufferGeometry.prototype = Object.create( ExtrudeBufferGeometry.prototype );\nTextBufferGeometry.prototype.constructor = TextBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author benaadams / https://twitter.com/ben_a_adams\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// SphereGeometry\n\nfunction SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'SphereGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nSphereGeometry.prototype = Object.create( Geometry.prototype );\nSphereGeometry.prototype.constructor = SphereGeometry;\n\n// SphereBufferGeometry\n\nfunction SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'SphereBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tradius = radius || 1;\n\n\twidthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 );\n\theightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 );\n\n\tphiStart = phiStart !== undefined ? phiStart : 0;\n\tphiLength = phiLength !== undefined ? phiLength : Math.PI * 2;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI;\n\n\tvar thetaEnd = thetaStart + thetaLength;\n\n\tvar ix, iy;\n\n\tvar index = 0;\n\tvar grid = [];\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\tvar verticesRow = [];\n\n\t\tvar v = iy / heightSegments;\n\n\t\tfor ( ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\tvar u = ix / widthSegments;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormal.set( vertex.x, vertex.y, vertex.z ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, 1 - v );\n\n\t\t\tverticesRow.push( index ++ );\n\n\t\t}\n\n\t\tgrid.push( verticesRow );\n\n\t}\n\n\t// indices\n\n\tfor ( iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\tfor ( ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\tvar a = grid[ iy ][ ix + 1 ];\n\t\t\tvar b = grid[ iy ][ ix ];\n\t\t\tvar c = grid[ iy + 1 ][ ix ];\n\t\t\tvar d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nSphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nSphereBufferGeometry.prototype.constructor = SphereBufferGeometry;\n\n/**\n * @author Kaleb Murphy\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// RingGeometry\n\nfunction RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'RingGeometry';\n\n\tthis.parameters = {\n\t\tinnerRadius: innerRadius,\n\t\touterRadius: outerRadius,\n\t\tthetaSegments: thetaSegments,\n\t\tphiSegments: phiSegments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nRingGeometry.prototype = Object.create( Geometry.prototype );\nRingGeometry.prototype.constructor = RingGeometry;\n\n// RingBufferGeometry\n\nfunction RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'RingBufferGeometry';\n\n\tthis.parameters = {\n\t\tinnerRadius: innerRadius,\n\t\touterRadius: outerRadius,\n\t\tthetaSegments: thetaSegments,\n\t\tphiSegments: phiSegments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tinnerRadius = innerRadius || 0.5;\n\touterRadius = outerRadius || 1;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\tthetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8;\n\tphiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// some helper variables\n\n\tvar segment;\n\tvar radius = innerRadius;\n\tvar radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\tvar j, i;\n\n\t// generate vertices, normals and uvs\n\n\tfor ( j = 0; j <= phiSegments; j ++ ) {\n\n\t\tfor ( i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\tsegment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uv\n\n\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// increase the radius for next row of vertices\n\n\t\tradius += radiusStep;\n\n\t}\n\n\t// indices\n\n\tfor ( j = 0; j < phiSegments; j ++ ) {\n\n\t\tvar thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\tfor ( i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\tsegment = i + thetaSegmentLevel;\n\n\t\t\tvar a = segment;\n\t\t\tvar b = segment + thetaSegments + 1;\n\t\t\tvar c = segment + thetaSegments + 2;\n\t\t\tvar d = segment + 1;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nRingBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nRingBufferGeometry.prototype.constructor = RingBufferGeometry;\n\n/**\n * @author astrodud / http://astrodud.isgreat.org/\n * @author zz85 / https://github.com/zz85\n * @author bhouston / http://clara.io\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// LatheGeometry\n\nfunction LatheGeometry( points, segments, phiStart, phiLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'LatheGeometry';\n\n\tthis.parameters = {\n\t\tpoints: points,\n\t\tsegments: segments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength\n\t};\n\n\tthis.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) );\n\tthis.mergeVertices();\n\n}\n\nLatheGeometry.prototype = Object.create( Geometry.prototype );\nLatheGeometry.prototype.constructor = LatheGeometry;\n\n// LatheBufferGeometry\n\nfunction LatheBufferGeometry( points, segments, phiStart, phiLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'LatheBufferGeometry';\n\n\tthis.parameters = {\n\t\tpoints: points,\n\t\tsegments: segments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength\n\t};\n\n\tsegments = Math.floor( segments ) || 12;\n\tphiStart = phiStart || 0;\n\tphiLength = phiLength || Math.PI * 2;\n\n\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\tphiLength = _Math.clamp( phiLength, 0, Math.PI * 2 );\n\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar base;\n\tvar inverseSegments = 1.0 / segments;\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\tvar i, j;\n\n\t// generate vertices and uvs\n\n\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\tvar phi = phiStart + i * inverseSegments * phiLength;\n\n\t\tvar sin = Math.sin( phi );\n\t\tvar cos = Math.cos( phi );\n\n\t\tfor ( j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\tvertex.y = points[ j ].y;\n\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// uv\n\n\t\t\tuv.x = i / segments;\n\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tfor ( i = 0; i < segments; i ++ ) {\n\n\t\tfor ( j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\tbase = j + i * points.length;\n\n\t\t\tvar a = base;\n\t\t\tvar b = base + points.length;\n\t\t\tvar c = base + points.length + 1;\n\t\t\tvar d = base + 1;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// generate normals\n\n\tthis.computeVertexNormals();\n\n\t// if the geometry is closed, we need to average the normals along the seam.\n\t// because the corresponding vertices are identical (but still have different UVs).\n\n\tif ( phiLength === Math.PI * 2 ) {\n\n\t\tvar normals = this.attributes.normal.array;\n\t\tvar n1 = new Vector3();\n\t\tvar n2 = new Vector3();\n\t\tvar n = new Vector3();\n\n\t\t// this is the buffer offset for the last line of vertices\n\n\t\tbase = segments * points.length * 3;\n\n\t\tfor ( i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t// select the normal of the vertex in the first line\n\n\t\t\tn1.x = normals[ j + 0 ];\n\t\t\tn1.y = normals[ j + 1 ];\n\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t// select the normal of the vertex in the last line\n\n\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t// average normals\n\n\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t// assign the new values to both normals\n\n\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t}\n\n\t}\n\n}\n\nLatheBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nLatheBufferGeometry.prototype.constructor = LatheBufferGeometry;\n\n/**\n * @author jonobr1 / http://jonobr1.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// ShapeGeometry\n\nfunction ShapeGeometry( shapes, curveSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ShapeGeometry';\n\n\tif ( typeof curveSegments === 'object' ) {\n\n\t\tconsole.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' );\n\n\t\tcurveSegments = curveSegments.curveSegments;\n\n\t}\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\tcurveSegments: curveSegments\n\t};\n\n\tthis.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) );\n\tthis.mergeVertices();\n\n}\n\nShapeGeometry.prototype = Object.create( Geometry.prototype );\nShapeGeometry.prototype.constructor = ShapeGeometry;\n\nShapeGeometry.prototype.toJSON = function () {\n\n\tvar data = Geometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\n\treturn toJSON( shapes, data );\n\n};\n\n// ShapeBufferGeometry\n\nfunction ShapeBufferGeometry( shapes, curveSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ShapeBufferGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\tcurveSegments: curveSegments\n\t};\n\n\tcurveSegments = curveSegments || 12;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar groupStart = 0;\n\tvar groupCount = 0;\n\n\t// allow single and array values for \"shapes\" parameter\n\n\tif ( Array.isArray( shapes ) === false ) {\n\n\t\taddShape( shapes );\n\n\t} else {\n\n\t\tfor ( var i = 0; i < shapes.length; i ++ ) {\n\n\t\t\taddShape( shapes[ i ] );\n\n\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\tgroupStart += groupCount;\n\t\t\tgroupCount = 0;\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t// helper functions\n\n\tfunction addShape( shape ) {\n\n\t\tvar i, l, shapeHole;\n\n\t\tvar indexOffset = vertices.length / 3;\n\t\tvar points = shape.extractPoints( curveSegments );\n\n\t\tvar shapeVertices = points.shape;\n\t\tvar shapeHoles = points.holes;\n\n\t\t// check direction of vertices\n\n\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t// also check if holes are in the opposite direction\n\n\t\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tshapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t// join vertices of inner and outer paths to a single array\n\n\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\tshapeHole = shapeHoles[ i ];\n\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t}\n\n\t\t// vertices, normals, uvs\n\n\t\tfor ( i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\tvar vertex = shapeVertices[ i ];\n\n\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\tnormals.push( 0, 0, 1 );\n\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t}\n\n\t\t// incides\n\n\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tvar a = face[ 0 ] + indexOffset;\n\t\t\tvar b = face[ 1 ] + indexOffset;\n\t\t\tvar c = face[ 2 ] + indexOffset;\n\n\t\t\tindices.push( a, b, c );\n\t\t\tgroupCount += 3;\n\n\t\t}\n\n\t}\n\n}\n\nShapeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nShapeBufferGeometry.prototype.constructor = ShapeBufferGeometry;\n\nShapeBufferGeometry.prototype.toJSON = function () {\n\n\tvar data = BufferGeometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\n\treturn toJSON( shapes, data );\n\n};\n\n//\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tvar shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction EdgesGeometry( geometry, thresholdAngle ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'EdgesGeometry';\n\n\tthis.parameters = {\n\t\tthresholdAngle: thresholdAngle\n\t};\n\n\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t// buffer\n\n\tvar vertices = [];\n\n\t// helper variables\n\n\tvar thresholdDot = Math.cos( _Math.DEG2RAD * thresholdAngle );\n\tvar edge = [ 0, 0 ], edges = {}, edge1, edge2;\n\tvar key, keys = [ 'a', 'b', 'c' ];\n\n\t// prepare source geometry\n\n\tvar geometry2;\n\n\tif ( geometry.isBufferGeometry ) {\n\n\t\tgeometry2 = new Geometry();\n\t\tgeometry2.fromBufferGeometry( geometry );\n\n\t} else {\n\n\t\tgeometry2 = geometry.clone();\n\n\t}\n\n\tgeometry2.mergeVertices();\n\tgeometry2.computeFaceNormals();\n\n\tvar sourceVertices = geometry2.vertices;\n\tvar faces = geometry2.faces;\n\n\t// now create a data structure where each entry represents an edge with its adjoining faces\n\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tvar face = faces[ i ];\n\n\t\tfor ( var j = 0; j < 3; j ++ ) {\n\n\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\tedge[ 0 ] = Math.min( edge1, edge2 );\n\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined };\n\n\t\t\t} else {\n\n\t\t\t\tedges[ key ].face2 = i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// generate vertices\n\n\tfor ( key in edges ) {\n\n\t\tvar e = edges[ key ];\n\n\t\t// an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree.\n\n\t\tif ( e.face2 === undefined || faces[ e.face1 ].normal.dot( faces[ e.face2 ].normal ) <= thresholdDot ) {\n\n\t\t\tvar vertex = sourceVertices[ e.index1 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\tvertex = sourceVertices[ e.index2 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nEdgesGeometry.prototype = Object.create( BufferGeometry.prototype );\nEdgesGeometry.prototype.constructor = EdgesGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// CylinderGeometry\n\nfunction CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'CylinderGeometry';\n\n\tthis.parameters = {\n\t\tradiusTop: radiusTop,\n\t\tradiusBottom: radiusBottom,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nCylinderGeometry.prototype = Object.create( Geometry.prototype );\nCylinderGeometry.prototype.constructor = CylinderGeometry;\n\n// CylinderBufferGeometry\n\nfunction CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'CylinderBufferGeometry';\n\n\tthis.parameters = {\n\t\tradiusTop: radiusTop,\n\t\tradiusBottom: radiusBottom,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tvar scope = this;\n\n\tradiusTop = radiusTop !== undefined ? radiusTop : 1;\n\tradiusBottom = radiusBottom !== undefined ? radiusBottom : 1;\n\theight = height || 1;\n\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\theightSegments = Math.floor( heightSegments ) || 1;\n\n\topenEnded = openEnded !== undefined ? openEnded : false;\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0.0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar index = 0;\n\tvar indexArray = [];\n\tvar halfHeight = height / 2;\n\tvar groupStart = 0;\n\n\t// generate geometry\n\n\tgenerateTorso();\n\n\tif ( openEnded === false ) {\n\n\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction generateTorso() {\n\n\t\tvar x, y;\n\t\tvar normal = new Vector3();\n\t\tvar vertex = new Vector3();\n\n\t\tvar groupCount = 0;\n\n\t\t// this will be used to calculate the normal\n\t\tvar slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\tvar indexRow = [];\n\n\t\t\tvar v = y / heightSegments;\n\n\t\t\t// calculate the radius of the current row\n\n\t\t\tvar radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tvar u = x / radialSegments;\n\n\t\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\t\tvar sinTheta = Math.sin( theta );\n\t\t\t\tvar cosTheta = Math.cos( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\t// now save vertices of the row in our index array\n\n\t\t\tindexArray.push( indexRow );\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tfor ( y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\tvar a = indexArray[ y ][ x ];\n\t\t\t\tvar b = indexArray[ y + 1 ][ x ];\n\t\t\t\tvar c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\tvar d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t// update group counter\n\n\t\t\t\tgroupCount += 6;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t}\n\n\tfunction generateCap( top ) {\n\n\t\tvar x, centerIndexStart, centerIndexEnd;\n\n\t\tvar uv = new Vector2();\n\t\tvar vertex = new Vector3();\n\n\t\tvar groupCount = 0;\n\n\t\tvar radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\tvar sign = ( top === true ) ? 1 : - 1;\n\n\t\t// save the index of the first center vertex\n\t\tcenterIndexStart = index;\n\n\t\t// first we generate the center vertex data of the cap.\n\t\t// because the geometry needs one set of uvs per face,\n\t\t// we must generate a center vertex per face/segment\n\n\t\tfor ( x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t// vertex\n\n\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t// increase index\n\n\t\t\tindex ++;\n\n\t\t}\n\n\t\t// save the index of the last center vertex\n\n\t\tcenterIndexEnd = index;\n\n\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\tvar u = x / radialSegments;\n\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\tvar cosTheta = Math.cos( theta );\n\t\t\tvar sinTheta = Math.sin( theta );\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * sinTheta;\n\t\t\tvertex.y = halfHeight * sign;\n\t\t\tvertex.z = radius * cosTheta;\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t// uv\n\n\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t// increase index\n\n\t\t\tindex ++;\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tvar c = centerIndexStart + x;\n\t\t\tvar i = centerIndexEnd + x;\n\n\t\t\tif ( top === true ) {\n\n\t\t\t\t// face top\n\n\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t} else {\n\n\t\t\t\t// face bottom\n\n\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t}\n\n\t\t\tgroupCount += 3;\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t}\n\n}\n\nCylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nCylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry;\n\n/**\n * @author abelnation / http://github.com/abelnation\n */\n\n// ConeGeometry\n\nfunction ConeGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tCylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\tthis.type = 'ConeGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n}\n\nConeGeometry.prototype = Object.create( CylinderGeometry.prototype );\nConeGeometry.prototype.constructor = ConeGeometry;\n\n// ConeBufferGeometry\n\nfunction ConeBufferGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tCylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\tthis.type = 'ConeBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n}\n\nConeBufferGeometry.prototype = Object.create( CylinderBufferGeometry.prototype );\nConeBufferGeometry.prototype.constructor = ConeBufferGeometry;\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n * @author Mugen87 / https://github.com/Mugen87\n * @author hughes\n */\n\n// CircleGeometry\n\nfunction CircleGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'CircleGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tsegments: segments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nCircleGeometry.prototype = Object.create( Geometry.prototype );\nCircleGeometry.prototype.constructor = CircleGeometry;\n\n// CircleBufferGeometry\n\nfunction CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'CircleBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tsegments: segments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tradius = radius || 1;\n\tsegments = segments !== undefined ? Math.max( 3, segments ) : 8;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar i, s;\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\n\t// center point\n\n\tvertices.push( 0, 0, 0 );\n\tnormals.push( 0, 0, 1 );\n\tuvs.push( 0.5, 0.5 );\n\n\tfor ( s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\tvar segment = thetaStart + s / segments * thetaLength;\n\n\t\t// vertex\n\n\t\tvertex.x = radius * Math.cos( segment );\n\t\tvertex.y = radius * Math.sin( segment );\n\n\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t// normal\n\n\t\tnormals.push( 0, 0, 1 );\n\n\t\t// uvs\n\n\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\tuvs.push( uv.x, uv.y );\n\n\t}\n\n\t// indices\n\n\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\tindices.push( i, i + 1, 0 );\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nCircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nCircleBufferGeometry.prototype.constructor = CircleBufferGeometry;\n\n\n\nvar Geometries = Object.freeze({\n\tWireframeGeometry: WireframeGeometry,\n\tParametricGeometry: ParametricGeometry,\n\tParametricBufferGeometry: ParametricBufferGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeBufferGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusBufferGeometry,\n\tTextGeometry: TextGeometry,\n\tTextBufferGeometry: TextBufferGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereBufferGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingBufferGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneBufferGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheBufferGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeBufferGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeBufferGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderBufferGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleBufferGeometry,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxBufferGeometry\n});\n\n/**\n * @author mrdoob / http://mrdoob.com/\n *\n * parameters = {\n *  color: <THREE.Color>\n * }\n */\n\nfunction ShadowMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShadowMaterial';\n\n\tthis.color = new Color( 0x000000 );\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nShadowMaterial.prototype = Object.create( Material.prototype );\nShadowMaterial.prototype.constructor = ShadowMaterial;\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\nShadowMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction RawShaderMaterial( parameters ) {\n\n\tShaderMaterial.call( this, parameters );\n\n\tthis.type = 'RawShaderMaterial';\n\n}\n\nRawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );\nRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *  color: <hex>,\n *  roughness: <float>,\n *  metalness: <float>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  roughnessMap: new THREE.Texture( <Image> ),\n *\n *  metalnessMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  envMapIntensity: <float>\n *\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction MeshStandardMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.type = 'MeshStandardMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.roughness = 0.5;\n\tthis.metalness = 0.5;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.roughnessMap = null;\n\n\tthis.metalnessMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.envMapIntensity = 1.0;\n\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshStandardMaterial.prototype = Object.create( Material.prototype );\nMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\nMeshStandardMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.color.copy( source.color );\n\tthis.roughness = source.roughness;\n\tthis.metalness = source.metalness;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.roughnessMap = source.roughnessMap;\n\n\tthis.metalnessMap = source.metalnessMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.envMapIntensity = source.envMapIntensity;\n\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *  reflectivity: <float>\n * }\n */\n\nfunction MeshPhysicalMaterial( parameters ) {\n\n\tMeshStandardMaterial.call( this );\n\n\tthis.defines = { 'PHYSICAL': '' };\n\n\tthis.type = 'MeshPhysicalMaterial';\n\n\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\tthis.clearCoat = 0.0;\n\tthis.clearCoatRoughness = 0.0;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\nMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\nMeshPhysicalMaterial.prototype.copy = function ( source ) {\n\n\tMeshStandardMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'PHYSICAL': '' };\n\n\tthis.reflectivity = source.reflectivity;\n\n\tthis.clearCoat = source.clearCoat;\n\tthis.clearCoatRoughness = source.clearCoatRoughness;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  color: <hex>,\n *  specular: <hex>,\n *  shininess: <float>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.Multiply,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction MeshPhongMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshPhongMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.specular = new Color( 0x111111 );\n\tthis.shininess = 30;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhongMaterial.prototype = Object.create( Material.prototype );\nMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\nMeshPhongMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.specular.copy( source.specular );\n\tthis.shininess = source.shininess;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author takahirox / http://github.com/takahirox\n *\n * parameters = {\n *  gradientMap: new THREE.Texture( <Image> )\n * }\n */\n\nfunction MeshToonMaterial( parameters ) {\n\n\tMeshPhongMaterial.call( this );\n\n\tthis.defines = { 'TOON': '' };\n\n\tthis.type = 'MeshToonMaterial';\n\n\tthis.gradientMap = null;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshToonMaterial.prototype = Object.create( MeshPhongMaterial.prototype );\nMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\nMeshToonMaterial.prototype.copy = function ( source ) {\n\n\tMeshPhongMaterial.prototype.copy.call( this, source );\n\n\tthis.gradientMap = source.gradientMap;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *  opacity: <float>,\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction MeshNormalMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshNormalMaterial';\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshNormalMaterial.prototype = Object.create( Material.prototype );\nMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\nMeshNormalMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.Multiply,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction MeshLambertMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshLambertMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshLambertMaterial.prototype = Object.create( Material.prototype );\nMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\nMeshLambertMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  linewidth: <float>,\n *\n *  scale: <float>,\n *  dashSize: <float>,\n *  gapSize: <float>\n * }\n */\n\nfunction LineDashedMaterial( parameters ) {\n\n\tLineBasicMaterial.call( this );\n\n\tthis.type = 'LineDashedMaterial';\n\n\tthis.scale = 1;\n\tthis.dashSize = 3;\n\tthis.gapSize = 1;\n\n\tthis.setValues( parameters );\n\n}\n\nLineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );\nLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\nLineDashedMaterial.prototype.copy = function ( source ) {\n\n\tLineBasicMaterial.prototype.copy.call( this, source );\n\n\tthis.scale = source.scale;\n\tthis.dashSize = source.dashSize;\n\tthis.gapSize = source.gapSize;\n\n\treturn this;\n\n};\n\n\n\nvar Materials = Object.freeze({\n\tShadowMaterial: ShadowMaterial,\n\tSpriteMaterial: SpriteMaterial,\n\tRawShaderMaterial: RawShaderMaterial,\n\tShaderMaterial: ShaderMaterial,\n\tPointsMaterial: PointsMaterial,\n\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\tMeshStandardMaterial: MeshStandardMaterial,\n\tMeshPhongMaterial: MeshPhongMaterial,\n\tMeshToonMaterial: MeshToonMaterial,\n\tMeshNormalMaterial: MeshNormalMaterial,\n\tMeshLambertMaterial: MeshLambertMaterial,\n\tMeshDepthMaterial: MeshDepthMaterial,\n\tMeshDistanceMaterial: MeshDistanceMaterial,\n\tMeshBasicMaterial: MeshBasicMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\tvar scope = this;\n\n\tvar isLoading = false;\n\tvar itemsLoaded = 0;\n\tvar itemsTotal = 0;\n\tvar urlModifier = undefined;\n\n\tthis.onStart = undefined;\n\tthis.onLoad = onLoad;\n\tthis.onProgress = onProgress;\n\tthis.onError = onError;\n\n\tthis.itemStart = function ( url ) {\n\n\t\titemsTotal ++;\n\n\t\tif ( isLoading === false ) {\n\n\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tisLoading = true;\n\n\t};\n\n\tthis.itemEnd = function ( url ) {\n\n\t\titemsLoaded ++;\n\n\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t}\n\n\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\tisLoading = false;\n\n\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\tscope.onLoad();\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.itemError = function ( url ) {\n\n\t\tif ( scope.onError !== undefined ) {\n\n\t\t\tscope.onError( url );\n\n\t\t}\n\n\t};\n\n\tthis.resolveURL = function ( url ) {\n\n\t\tif ( urlModifier ) {\n\n\t\t\treturn urlModifier( url );\n\n\t\t}\n\n\t\treturn url;\n\n\t};\n\n\tthis.setURLModifier = function ( transform ) {\n\n\t\turlModifier = transform;\n\t\treturn this;\n\n\t};\n\n}\n\nvar DefaultLoadingManager = new LoadingManager();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar loading = {};\n\nfunction FileLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FileLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tvar dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tvar dataUriRegexResult = url.match( dataUriRegex );\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tvar mimeType = dataUriRegexResult[ 1 ];\n\t\t\tvar isBase64 = !! dataUriRegexResult[ 2 ];\n\t\t\tvar data = dataUriRegexResult[ 3 ];\n\n\t\t\tdata = window.decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = window.atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tvar response;\n\t\t\t\tvar responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tvar view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tvar parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\tvar request = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tvar response = this.response;\n\n\t\t\t\tCache.add( url, response );\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 ) {\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else if ( this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( var header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t},\n\n\tsetResponseType: function ( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t},\n\n\tsetWithCredentials: function ( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t},\n\n\tsetMimeType: function ( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t},\n\n\tsetRequestHeader: function ( value ) {\n\n\t\tthis.requestHeader = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n *\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n */\n\nfunction CompressedTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( CompressedTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar images = [];\n\n\t\tvar texture = new CompressedTexture();\n\t\ttexture.image = images;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 )\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tvar loaded = 0;\n\n\t\t\tfor ( var i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tvar faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( var f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( var i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author Nikos M. / https://github.com/foo123/\n *\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n */\n\nfunction DataTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( DataTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texture = new DataTexture();\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tvar texData = scope._parser( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( undefined !== texData.image ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( undefined !== texData.data ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter;\n\n\t\t\ttexture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1;\n\n\t\t\tif ( undefined !== texData.format ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\t\t\tif ( undefined !== texData.type ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( undefined !== texData.mipmaps ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\n\t\t\t}\n\n\t\t\tif ( 1 === texData.mipmapCount ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ImageLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( ImageLoader.prototype, {\n\n\tcrossOrigin: 'Anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tvar image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\timage.addEventListener( 'load', function () {\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}, false );\n\n\t\t/*\n\t\timage.addEventListener( 'progress', function ( event ) {\n\n\t\t\tif ( onProgress ) onProgress( event );\n\n\t\t}, false );\n\t\t*/\n\n\t\timage.addEventListener( 'error', function ( event ) {\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t}, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CubeTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( CubeTextureLoader.prototype, {\n\n\tcrossOrigin: 'Anonymous',\n\n\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new CubeTexture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tvar loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction TextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( TextureLoader.prototype, {\n\n\tcrossOrigin: 'Anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new Texture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\n\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\tvar isJPEG = url.search( /\\.(jpg|jpeg)$/ ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Extensible curve object\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\n/**************************************************************\n *\tAbstract Curve base class\n **************************************************************/\n\nfunction Curve() {\n\n\tthis.type = 'Curve';\n\n\tthis.arcLengthDivisions = 200;\n\n}\n\nObject.assign( Curve.prototype, {\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t},\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\tvar t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t},\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\tvar points = [];\n\n\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\tvar points = [];\n\n\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get total curve arc length\n\n\tgetLength: function () {\n\n\t\tvar lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t},\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tvar cache = [];\n\t\tvar current, last = this.getPoint( 0 );\n\t\tvar p, sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t},\n\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t},\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping: function ( u, distance ) {\n\n\t\tvar arcLengths = this.getLengths();\n\n\t\tvar i = 0, il = arcLengths.length;\n\n\t\tvar targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tvar low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tvar lengthBefore = arcLengths[ i ];\n\t\tvar lengthAfter = arcLengths[ i + 1 ];\n\n\t\tvar segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tvar segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tvar t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t},\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent: function ( t ) {\n\n\t\tvar delta = 0.0001;\n\t\tvar t1 = t - delta;\n\t\tvar t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tvar pt1 = this.getPoint( t1 );\n\t\tvar pt2 = this.getPoint( t2 );\n\n\t\tvar vec = pt2.clone().sub( pt1 );\n\t\treturn vec.normalize();\n\n\t},\n\n\tgetTangentAt: function ( u ) {\n\n\t\tvar t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t );\n\n\t},\n\n\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tvar normal = new Vector3();\n\n\t\tvar tangents = [];\n\t\tvar normals = [];\n\t\tvar binormals = [];\n\n\t\tvar vec = new Vector3();\n\t\tvar mat = new Matrix4();\n\n\t\tvar i, u, theta;\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\t\tu = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u );\n\t\t\ttangents[ i ].normalize();\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tvar min = Number.MAX_VALUE;\n\t\tvar tx = Math.abs( tangents[ 0 ].x );\n\t\tvar ty = Math.abs( tangents[ 0 ].y );\n\t\tvar tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\ttheta = Math.acos( _Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\ttheta = Math.acos( _Math.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'EllipseCurve';\n\n\tthis.aX = aX || 0;\n\tthis.aY = aY || 0;\n\n\tthis.xRadius = xRadius || 1;\n\tthis.yRadius = yRadius || 1;\n\n\tthis.aStartAngle = aStartAngle || 0;\n\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\n\tthis.aClockwise = aClockwise || false;\n\n\tthis.aRotation = aRotation || 0;\n\n}\n\nEllipseCurve.prototype = Object.create( Curve.prototype );\nEllipseCurve.prototype.constructor = EllipseCurve;\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nEllipseCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar twoPi = Math.PI * 2;\n\tvar deltaAngle = this.aEndAngle - this.aStartAngle;\n\tvar samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t// ensures that deltaAngle is 0 .. 2 PI\n\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\tif ( samePoints ) {\n\n\t\t\tdeltaAngle = 0;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = twoPi;\n\n\t\t}\n\n\t}\n\n\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\tdeltaAngle = - twoPi;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t}\n\n\t}\n\n\tvar angle = this.aStartAngle + t * deltaAngle;\n\tvar x = this.aX + this.xRadius * Math.cos( angle );\n\tvar y = this.aY + this.yRadius * Math.sin( angle );\n\n\tif ( this.aRotation !== 0 ) {\n\n\t\tvar cos = Math.cos( this.aRotation );\n\t\tvar sin = Math.sin( this.aRotation );\n\n\t\tvar tx = x - this.aX;\n\t\tvar ty = y - this.aY;\n\n\t\t// Rotate the point about the center of the ellipse.\n\t\tx = tx * cos - ty * sin + this.aX;\n\t\ty = tx * sin + ty * cos + this.aY;\n\n\t}\n\n\treturn point.set( x, y );\n\n};\n\nEllipseCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.aX = source.aX;\n\tthis.aY = source.aY;\n\n\tthis.xRadius = source.xRadius;\n\tthis.yRadius = source.yRadius;\n\n\tthis.aStartAngle = source.aStartAngle;\n\tthis.aEndAngle = source.aEndAngle;\n\n\tthis.aClockwise = source.aClockwise;\n\n\tthis.aRotation = source.aRotation;\n\n\treturn this;\n\n};\n\n\nEllipseCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.aX = this.aX;\n\tdata.aY = this.aY;\n\n\tdata.xRadius = this.xRadius;\n\tdata.yRadius = this.yRadius;\n\n\tdata.aStartAngle = this.aStartAngle;\n\tdata.aEndAngle = this.aEndAngle;\n\n\tdata.aClockwise = this.aClockwise;\n\n\tdata.aRotation = this.aRotation;\n\n\treturn data;\n\n};\n\nEllipseCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.aX = json.aX;\n\tthis.aY = json.aY;\n\n\tthis.xRadius = json.xRadius;\n\tthis.yRadius = json.yRadius;\n\n\tthis.aStartAngle = json.aStartAngle;\n\tthis.aEndAngle = json.aEndAngle;\n\n\tthis.aClockwise = json.aClockwise;\n\n\tthis.aRotation = json.aRotation;\n\n\treturn this;\n\n};\n\nfunction ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\tEllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\tthis.type = 'ArcCurve';\n\n}\n\nArcCurve.prototype = Object.create( EllipseCurve.prototype );\nArcCurve.prototype.constructor = ArcCurve;\n\nArcCurve.prototype.isArcCurve = true;\n\n/**\n * @author zz85 https://github.com/zz85\n *\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tvar c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t *   p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t *   p(0) = x0, p(1) = x1\n\t *  and\n\t *   p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tvar t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tvar t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nvar tmp = new Vector3();\nvar px = new CubicPoly();\nvar py = new CubicPoly();\nvar pz = new CubicPoly();\n\nfunction CatmullRomCurve3( points, closed, curveType, tension ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CatmullRomCurve3';\n\n\tthis.points = points || [];\n\tthis.closed = closed || false;\n\tthis.curveType = curveType || 'centripetal';\n\tthis.tension = tension || 0.5;\n\n}\n\nCatmullRomCurve3.prototype = Object.create( Curve.prototype );\nCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\nCatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar points = this.points;\n\tvar l = points.length;\n\n\tvar p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\tvar intPoint = Math.floor( p );\n\tvar weight = p - intPoint;\n\n\tif ( this.closed ) {\n\n\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\tintPoint = l - 2;\n\t\tweight = 1;\n\n\t}\n\n\tvar p0, p1, p2, p3; // 4 points\n\n\tif ( this.closed || intPoint > 0 ) {\n\n\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate first point\n\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\tp0 = tmp;\n\n\t}\n\n\tp1 = points[ intPoint % l ];\n\tp2 = points[ ( intPoint + 1 ) % l ];\n\n\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate last point\n\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\tp3 = tmp;\n\n\t}\n\n\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t// init Centripetal / Chordal Catmull-Rom\n\t\tvar pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\tvar dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\tvar dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\tvar dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t// safety check for repeated points\n\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t}\n\n\tpoint.set(\n\t\tpx.calc( weight ),\n\t\tpy.calc( weight ),\n\t\tpz.calc( weight )\n\t);\n\n\treturn point;\n\n};\n\nCatmullRomCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tvar point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\tthis.closed = source.closed;\n\tthis.curveType = source.curveType;\n\tthis.tension = source.tension;\n\n\treturn this;\n\n};\n\nCatmullRomCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tvar point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\tdata.closed = this.closed;\n\tdata.curveType = this.curveType;\n\tdata.tension = this.tension;\n\n\treturn data;\n\n};\n\nCatmullRomCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tvar point = json.points[ i ];\n\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t}\n\n\tthis.closed = json.closed;\n\tthis.curveType = json.curveType;\n\tthis.tension = json.tension;\n\n\treturn this;\n\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tvar v0 = ( p2 - p0 ) * 0.5;\n\tvar v1 = ( p3 - p1 ) * 0.5;\n\tvar t2 = t * t;\n\tvar t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tvar k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tvar k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tvar k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nfunction CubicBezierCurve( v0, v1, v2, v3 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve';\n\n\tthis.v0 = v0 || new Vector2();\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\tthis.v3 = v3 || new Vector2();\n\n}\n\nCubicBezierCurve.prototype = Object.create( Curve.prototype );\nCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nCubicBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction CubicBezierCurve3( v0, v1, v2, v3 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve3';\n\n\tthis.v0 = v0 || new Vector3();\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\tthis.v3 = v3 || new Vector3();\n\n}\n\nCubicBezierCurve3.prototype = Object.create( Curve.prototype );\nCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nCubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction LineCurve( v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve';\n\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\n}\n\nLineCurve.prototype = Object.create( Curve.prototype );\nLineCurve.prototype.constructor = LineCurve;\n\nLineCurve.prototype.isLineCurve = true;\n\nLineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve.prototype.getTangent = function ( /* t */ ) {\n\n\tvar tangent = this.v2.clone().sub( this.v1 );\n\n\treturn tangent.normalize();\n\n};\n\nLineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction LineCurve3( v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve3';\n\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\n}\n\nLineCurve3.prototype = Object.create( Curve.prototype );\nLineCurve3.prototype.constructor = LineCurve3;\n\nLineCurve3.prototype.isLineCurve3 = true;\n\nLineCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve3.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve( v0, v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve';\n\n\tthis.v0 = v0 || new Vector2();\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\n}\n\nQuadraticBezierCurve.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nQuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve3( v0, v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve3';\n\n\tthis.v0 = v0 || new Vector3();\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\n}\n\nQuadraticBezierCurve3.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nQuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction SplineCurve( points /* array of Vector2 */ ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'SplineCurve';\n\n\tthis.points = points || [];\n\n}\n\nSplineCurve.prototype = Object.create( Curve.prototype );\nSplineCurve.prototype.constructor = SplineCurve;\n\nSplineCurve.prototype.isSplineCurve = true;\n\nSplineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar points = this.points;\n\tvar p = ( points.length - 1 ) * t;\n\n\tvar intPoint = Math.floor( p );\n\tvar weight = p - intPoint;\n\n\tvar p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\tvar p1 = points[ intPoint ];\n\tvar p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\tvar p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\tpoint.set(\n\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t);\n\n\treturn point;\n\n};\n\nSplineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tvar point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\treturn this;\n\n};\n\nSplineCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tvar point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\treturn data;\n\n};\n\nSplineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tvar point = json.points[ i ];\n\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t}\n\n\treturn this;\n\n};\n\n\n\nvar Curves = Object.freeze({\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n **/\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n *  curves, but retains the api of a curve\n **************************************************************/\n\nfunction CurvePath() {\n\n\tCurve.call( this );\n\n\tthis.type = 'CurvePath';\n\n\tthis.curves = [];\n\tthis.autoClose = false; // Automatically closes the path\n\n}\n\nCurvePath.prototype = Object.assign( Object.create( Curve.prototype ), {\n\n\tconstructor: CurvePath,\n\n\tadd: function ( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t},\n\n\tclosePath: function () {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tvar startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tvar endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t},\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint: function ( t ) {\n\n\t\tvar d = t * this.getLength();\n\t\tvar curveLengths = this.getCurveLengths();\n\t\tvar i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tvar diff = curveLengths[ i ] - d;\n\t\t\t\tvar curve = this.curves[ i ];\n\n\t\t\t\tvar segmentLength = curve.getLength();\n\t\t\t\tvar u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 <d\n\n\t},\n\n\t// We cannot use the default THREE.Curve getPoint() with getLength() because in\n\t// THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath\n\t// getPoint() depends on getLength\n\n\tgetLength: function () {\n\n\t\tvar lens = this.getCurveLengths();\n\t\treturn lens[ lens.length - 1 ];\n\n\t},\n\n\t// cacheLengths must be recalculated.\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.cacheLengths = null;\n\t\tthis.getCurveLengths();\n\n\t},\n\n\t// Compute lengths and cache them\n\t// We cannot overwrite getLengths() because UtoT mapping uses it.\n\n\tgetCurveLengths: function () {\n\n\t\t// We use cache values if curves and cache array are same length\n\n\t\tif ( this.cacheLengths && this.cacheLengths.length === this.curves.length ) {\n\n\t\t\treturn this.cacheLengths;\n\n\t\t}\n\n\t\t// Get length of sub-curve\n\t\t// Push sums into cached array\n\n\t\tvar lengths = [], sums = 0;\n\n\t\tfor ( var i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tsums += this.curves[ i ].getLength();\n\t\t\tlengths.push( sums );\n\n\t\t}\n\n\t\tthis.cacheLengths = lengths;\n\n\t\treturn lengths;\n\n\t},\n\n\tgetSpacedPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 40;\n\n\t\tvar points = [];\n\n\t\tfor ( var i = 0; i <= divisions; i ++ ) {\n\n\t\t\tpoints.push( this.getPoint( i / divisions ) );\n\n\t\t}\n\n\t\tif ( this.autoClose ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tgetPoints: function ( divisions ) {\n\n\t\tdivisions = divisions || 12;\n\n\t\tvar points = [], last;\n\n\t\tfor ( var i = 0, curves = this.curves; i < curves.length; i ++ ) {\n\n\t\t\tvar curve = curves[ i ];\n\t\t\tvar resolution = ( curve && curve.isEllipseCurve ) ? divisions * 2\n\t\t\t\t: ( curve && curve.isLineCurve ) ? 1\n\t\t\t\t\t: ( curve && curve.isSplineCurve ) ? divisions * curve.points.length\n\t\t\t\t\t\t: divisions;\n\n\t\t\tvar pts = curve.getPoints( resolution );\n\n\t\t\tfor ( var j = 0; j < pts.length; j ++ ) {\n\n\t\t\t\tvar point = pts[ j ];\n\n\t\t\t\tif ( last && last.equals( point ) ) continue; // ensures no consecutive points are duplicates\n\n\t\t\t\tpoints.push( point );\n\t\t\t\tlast = point;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.autoClose && points.length > 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( var i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( var i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( var i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Creates free form 2d path using series of points, lines or curves.\n **/\n\nfunction Path( points ) {\n\n\tCurvePath.call( this );\n\n\tthis.type = 'Path';\n\n\tthis.currentPoint = new Vector2();\n\n\tif ( points ) {\n\n\t\tthis.setFromPoints( points );\n\n\t}\n\n}\n\nPath.prototype = Object.assign( Object.create( CurvePath.prototype ), {\n\n\tconstructor: Path,\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( var i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t},\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tvar curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tvar curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tvar curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t},\n\n\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\tvar npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tvar curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t},\n\n\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tvar x0 = this.currentPoint.x;\n\t\tvar y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t},\n\n\tabsarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t},\n\n\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tvar x0 = this.currentPoint.x;\n\t\tvar y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t},\n\n\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tvar curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tvar firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tvar lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurvePath.prototype.copy.call( this, source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = CurvePath.prototype.toJSON.call( this );\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurvePath.prototype.fromJSON.call( this, json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Defines a 2d shape plane using paths.\n **/\n\n// STEP 1 Create a path.\n// STEP 2 Turn path into shape.\n// STEP 3 ExtrudeGeometry takes in Shape/Shapes\n// STEP 3a - Extract points from each shape, turn to vertices\n// STEP 3b - Triangulate each shape, add faces.\n\nfunction Shape( points ) {\n\n\tPath.call( this, points );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.type = 'Shape';\n\n\tthis.holes = [];\n\n}\n\nShape.prototype = Object.assign( Object.create( Path.prototype ), {\n\n\tconstructor: Shape,\n\n\tgetPointsHoles: function ( divisions ) {\n\n\t\tvar holesPts = [];\n\n\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t},\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints: function ( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tPath.prototype.copy.call( this, source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( var i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = Path.prototype.toJSON.call( this );\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tPath.prototype.fromJSON.call( this, json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( var i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Light( color, intensity ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Light';\n\n\tthis.color = new Color( color );\n\tthis.intensity = intensity !== undefined ? intensity : 1;\n\n\tthis.receiveShadow = undefined;\n\n}\n\nLight.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Light,\n\n\tisLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction HemisphereLight( skyColor, groundColor, intensity ) {\n\n\tLight.call( this, skyColor, intensity );\n\n\tthis.type = 'HemisphereLight';\n\n\tthis.castShadow = undefined;\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.groundColor = new Color( groundColor );\n\n}\n\nHemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: HemisphereLight,\n\n\tisHemisphereLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LightShadow( camera ) {\n\n\tthis.camera = camera;\n\n\tthis.bias = 0;\n\tthis.radius = 1;\n\n\tthis.mapSize = new Vector2( 512, 512 );\n\n\tthis.map = null;\n\tthis.matrix = new Matrix4();\n\n}\n\nObject.assign( LightShadow.prototype, {\n\n\tcopy: function ( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction SpotLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n}\n\nSpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: SpotLightShadow,\n\n\tisSpotLightShadow: true,\n\n\tupdate: function ( light ) {\n\n\t\tvar camera = this.camera;\n\n\t\tvar fov = _Math.RAD2DEG * 2 * light.angle;\n\t\tvar aspect = this.mapSize.width / this.mapSize.height;\n\t\tvar far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction SpotLight( color, intensity, distance, angle, penumbra, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'SpotLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / Math.PI;\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\n\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new SpotLightShadow();\n\n}\n\nSpotLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: SpotLight,\n\n\tisSpotLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction PointLight( color, intensity, distance, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'PointLight';\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * 4 * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new LightShadow( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n}\n\nPointLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: PointLight,\n\n\tisPointLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction DirectionalLightShadow( ) {\n\n\tLightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n}\n\nDirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: DirectionalLightShadow\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction DirectionalLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'DirectionalLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tthis.shadow = new DirectionalLightShadow();\n\n}\n\nDirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: DirectionalLight,\n\n\tisDirectionalLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AmbientLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'AmbientLight';\n\n\tthis.castShadow = undefined;\n\n}\n\nAmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: AmbientLight,\n\n\tisAmbientLight: true\n\n} );\n\n/**\n * @author abelnation / http://github.com/abelnation\n */\n\nfunction RectAreaLight( color, intensity, width, height ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'RectAreaLight';\n\n\tthis.width = ( width !== undefined ) ? width : 10;\n\tthis.height = ( height !== undefined ) ? height : 10;\n\n}\n\nRectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: RectAreaLight,\n\n\tisRectAreaLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n *\n * A Track that interpolates Strings\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction StringKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nStringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: StringKeyframeTrack,\n\n\tValueTypeName: 'string',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\n\tInterpolantFactoryMethodSmooth: undefined\n\n} );\n\n/**\n *\n * A Track of Boolean keyframe values.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction BooleanKeyframeTrack( name, times, values ) {\n\n\tKeyframeTrack.call( this, name, times, values );\n\n}\n\nBooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: BooleanKeyframeTrack,\n\n\tValueTypeName: 'bool',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\tInterpolantFactoryMethodSmooth: undefined\n\n\t// Note: Actually this track could have a optimized / compressed\n\t// representation of a single value and a custom interpolant that\n\t// computes \"firstValue ^ isOdd( index )\".\n\n} );\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n * @author tschw\n */\n\nfunction Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tthis.parameterPositions = parameterPositions;\n\tthis._cachedIndex = 0;\n\n\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\tthis.sampleValues = sampleValues;\n\tthis.valueSize = sampleSize;\n\n}\n\nObject.assign( Interpolant.prototype, {\n\n\tevaluate: function ( t ) {\n\n\t\tvar pp = this.parameterPositions,\n\t\t\ti1 = this._cachedIndex,\n\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tvar right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( var giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tvar t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( var giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tvar mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t},\n\n\tsettings: null, // optional, subclass-specific settings structure\n\t// Note: The indirection allows central control of many interpolants.\n\n\t// --- Protected interface\n\n\tDefaultSettings_: {},\n\n\tgetSettings_: function () {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t},\n\n\tcopySampleValue_: function ( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// Template methods for derived classes:\n\n\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t},\n\n\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n} );\n\n//!\\ DECLARE ALIAS AFTER assign prototype !\nObject.assign( Interpolant.prototype, {\n\n\t//( 0, t, t0 ), returns this.resultBuffer\n\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t//( N-1, tN-1, t ), returns this.resultBuffer\n\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n} );\n\n/**\n * Spherical linear unit quaternion interpolant.\n *\n * @author tschw\n */\n\nfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nQuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: QuaternionLinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset = i1 * stride,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tfor ( var end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * A Track of quaternion keyframe values.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction QuaternionKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nQuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: QuaternionKeyframeTrack,\n\n\tValueTypeName: 'quaternion',\n\n\t// ValueBufferType is inherited\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n} );\n\n/**\n *\n * A Track of keyframe values that represent color.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction ColorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: ColorKeyframeTrack,\n\n\tValueTypeName: 'color'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n\t// Note: Very basic implementation and nothing special yet.\n\t// However, this is the place for color space parameterization.\n\n} );\n\n/**\n *\n * A Track of numeric keyframe values.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction NumberKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nNumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: NumberKeyframeTrack,\n\n\tValueTypeName: 'number'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n *\n * @author tschw\n */\n\nfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\tthis._weightPrev = - 0;\n\tthis._offsetPrev = - 0;\n\tthis._weightNext = - 0;\n\tthis._offsetNext = - 0;\n\n}\n\nCubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: CubicInterpolant,\n\n\tDefaultSettings_: {\n\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\n\t},\n\n\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\tvar pp = this.parameterPositions,\n\t\t\tiPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t},\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tvar sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tvar s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tvar s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tvar sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n * @author tschw\n */\n\nfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: LinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n *\n * @author tschw\n */\n\nfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nDiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: DiscreteInterpolant,\n\n\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n} );\n\n/**\n * @author tschw\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n */\n\nvar AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tvar n = times.length;\n\t\tvar result = new Array( n );\n\t\tfor ( var i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tvar nValues = values.length;\n\t\tvar result = new values.constructor( nValues );\n\n\t\tfor ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tvar srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tvar i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tvar value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t}\n\n};\n\n/**\n *\n * A timed sequence of keyframes for a specific property.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction KeyframeTrack( name, times, values, interpolation ) {\n\n\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\tthis.name = name;\n\n\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\tthis.validate();\n\tthis.optimize();\n\n}\n\n// Static methods:\n\nObject.assign( KeyframeTrack, {\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tparse: function ( json ) {\n\n\t\tif ( json.type === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t\t}\n\n\t\tvar trackType = KeyframeTrack._getTrackTypeForValueTypeName( json.type );\n\n\t\tif ( json.times === undefined ) {\n\n\t\t\tvar times = [], values = [];\n\n\t\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\t\tjson.times = times;\n\t\t\tjson.values = values;\n\n\t\t}\n\n\t\t// derived classes can define a static parse method\n\t\tif ( trackType.parse !== undefined ) {\n\n\t\t\treturn trackType.parse( json );\n\n\t\t} else {\n\n\t\t\t// by default, we assume a constructor compatible with the base\n\t\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( track ) {\n\n\t\tvar trackType = track.constructor;\n\n\t\tvar json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== undefined ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tvar interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t},\n\n\t_getTrackTypeForValueTypeName: function ( typeName ) {\n\n\t\tswitch ( typeName.toLowerCase() ) {\n\n\t\t\tcase 'scalar':\n\t\t\tcase 'double':\n\t\t\tcase 'float':\n\t\t\tcase 'number':\n\t\t\tcase 'integer':\n\n\t\t\t\treturn NumberKeyframeTrack;\n\n\t\t\tcase 'vector':\n\t\t\tcase 'vector2':\n\t\t\tcase 'vector3':\n\t\t\tcase 'vector4':\n\n\t\t\t\treturn VectorKeyframeTrack;\n\n\t\t\tcase 'color':\n\n\t\t\t\treturn ColorKeyframeTrack;\n\n\t\t\tcase 'quaternion':\n\n\t\t\t\treturn QuaternionKeyframeTrack;\n\n\t\t\tcase 'bool':\n\t\t\tcase 'boolean':\n\n\t\t\t\treturn BooleanKeyframeTrack;\n\n\t\t\tcase 'string':\n\n\t\t\t\treturn StringKeyframeTrack;\n\n\t\t}\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n\t}\n\n} );\n\nObject.assign( KeyframeTrack.prototype, {\n\n\tconstructor: KeyframeTrack,\n\n\tTimeBufferType: Float32Array,\n\n\tValueBufferType: Float32Array,\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodDiscrete: function ( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: function ( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tsetInterpolation: function ( interpolation ) {\n\n\t\tvar factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tvar message = \"unsupported interpolation for \" +\n\t\t\t\tthis.ValueTypeName + \" keyframe track named \" + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t},\n\n\tgetInterpolation: function () {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t},\n\n\tgetValueSize: function () {\n\n\t\treturn this.values.length / this.times.length;\n\n\t},\n\n\t// move all keyframes either forwards or backwards in time\n\tshift: function ( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tvar times = this.times;\n\n\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale: function ( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tvar times = this.times;\n\n\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim: function ( startTime, endTime ) {\n\n\t\tvar times = this.times,\n\t\t\tnKeys = times.length,\n\t\t\tfrom = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) to = Math.max( to, 1 ), from = to - 1;\n\n\t\t\tvar stride = this.getValueSize();\n\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate: function () {\n\n\t\tvar valid = true;\n\n\t\tvar valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tvar times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tvar prevTime = null;\n\n\t\tfor ( var i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tvar currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( var i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\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\treturn valid;\n\n\t},\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize: function () {\n\n\t\tvar times = this.times,\n\t\t\tvalues = this.values,\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\twriteIndex = 1,\n\t\t\tlastIndex = times.length - 1;\n\n\t\tfor ( var i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tvar keep = false;\n\n\t\t\tvar time = times[ i ];\n\t\t\tvar timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tvar offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvar value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tvar readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( var readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n *\n * A Track of vectored keyframe values.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction VectorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nVectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: VectorKeyframeTrack,\n\n\tValueTypeName: 'vector'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n *\n * Reusable set of Tracks that represent an animation.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n */\n\nfunction AnimationClip( name, duration, tracks ) {\n\n\tthis.name = name;\n\tthis.tracks = tracks;\n\tthis.duration = ( duration !== undefined ) ? duration : - 1;\n\n\tthis.uuid = _Math.generateUUID();\n\n\t// this means it should figure out its duration by scanning the tracks\n\tif ( this.duration < 0 ) {\n\n\t\tthis.resetDuration();\n\n\t}\n\n\tthis.optimize();\n\n}\n\nObject.assign( AnimationClip, {\n\n\tparse: function ( json ) {\n\n\t\tvar tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.parse( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( json.name, json.duration, tracks );\n\n\t},\n\n\ttoJSON: function ( clip ) {\n\n\t\tvar tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tvar json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks\n\n\t\t};\n\n\t\tfor ( var i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t},\n\n\tCreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tvar numMorphTargets = morphTargetSequence.length;\n\t\tvar tracks = [];\n\n\t\tfor ( var i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tvar times = [];\n\t\t\tvar values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tvar order = AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( name, - 1, tracks );\n\n\t},\n\n\tfindByName: function ( objectOrClipArray, name ) {\n\n\t\tvar clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tvar o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( var i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\tCreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) {\n\n\t\tvar animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tvar pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( var i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tvar morphTarget = morphTargets[ i ];\n\t\t\tvar parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tvar name = parts[ 1 ];\n\n\t\t\t\tvar animationMorphTargets = animationToMorphTargets[ name ];\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar clips = [];\n\n\t\tfor ( var name in animationToMorphTargets ) {\n\n\t\t\tclips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t},\n\n\t// parse the animation.hierarchy format\n\tparseAnimation: function ( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tvar times = [];\n\t\t\t\tvar values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tvar tracks = [];\n\n\t\tvar clipName = animation.name || 'default';\n\t\t// automatic length determination in AnimationClip.\n\t\tvar duration = animation.length || - 1;\n\t\tvar fps = animation.fps || 30;\n\n\t\tvar hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( var h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tvar animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tvar morphTargetNames = {};\n\n\t\t\t\tfor ( var k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( var m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\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\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( var morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tvar times = [];\n\t\t\t\t\tvar values = [];\n\n\t\t\t\t\tfor ( var m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tvar animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tvar boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar clip = new AnimationClip( clipName, duration, tracks );\n\n\t\treturn clip;\n\n\t}\n\n} );\n\nObject.assign( AnimationClip.prototype, {\n\n\tresetDuration: function () {\n\n\t\tvar tracks = this.tracks, duration = 0;\n\n\t\tfor ( var i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tvar track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t},\n\n\ttrim: function () {\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\toptimize: function () {\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction MaterialLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.textures = {};\n\n}\n\nObject.assign( MaterialLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTextures: function ( value ) {\n\n\t\tthis.textures = value;\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tvar material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearCoat !== undefined ) material.clearCoat = json.clearCoat;\n\t\tif ( json.clearCoatRoughness !== undefined ) material.clearCoatRoughness = json.clearCoatRoughness;\n\t\tif ( json.uniforms !== undefined ) material.uniforms = json.uniforms;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\n\t\tif ( json.alphaMap !== undefined ) {\n\n\t\t\tmaterial.alphaMap = getTexture( json.alphaMap );\n\t\t\tmaterial.transparent = true;\n\n\t\t}\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tvar normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\treturn material;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferGeometryLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( BufferGeometryLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tvar typedArray = new TYPED_ARRAYS[ index.type ]( index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tvar attributes = json.data.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\t\t\tvar typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array );\n\n\t\t\tgeometry.addAttribute( key, new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) );\n\n\t\t}\n\n\t\tvar groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( var i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tvar center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\nvar TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\t// Workaround for IE11 pre KB2929437. See #11440\n\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: undefined,\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = _Math.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: _Math.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author Don McCurdy / https://www.donmccurdy.com\n */\n\nvar LoaderUtils = {\n\n\tdecodeText: function ( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tvar s = '';\n\n\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\t// Merges multi-byte utf-8 characters.\n\t\treturn decodeURIComponent( escape( s ) );\n\n\t},\n\n\textractUrlBase: function ( url ) {\n\n\t\tvar index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = JSON.parse( text );\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar object = scope.parse( json, texturePath );\n\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\toffset += 4;\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface = new Face3();\n\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.bones = json.bones;\n\n\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\n\n\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\tvar scale = json.scale;\n\n\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphColors !== undefined && json.morphColors.length > 0 ) {\n\n\t\t\t\tconsole.warn( 'THREE.JSONLoader: \"morphColors\" no longer supported. Using them as face colors.' );\n\n\t\t\t\tvar faces = geometry.faces;\n\t\t\t\tvar morphColors = json.morphColors[ 0 ].colors;\n\n\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tfaces[ i ].color.fromArray( morphColors, i * 3 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\n\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\n\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, texturePath ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, this.crossOrigin );\n\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ObjectLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.texturePath = '';\n\n}\n\nObject.assign( ObjectLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.texturePath === '' ) {\n\n\t\t\tthis.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 );\n\n\t\t}\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url + '. Use THREE.JSONLoader instead.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\n\t},\n\n\tparse: function ( json, onLoad ) {\n\n\t\tvar shapes = this.parseShape( json.shapes );\n\t\tvar geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tvar images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tvar textures = this.parseTextures( json.textures, images );\n\t\tvar materials = this.parseMaterials( json.materials, textures );\n\n\t\tvar object = this.parseObject( json.object, geometries, materials );\n\n\t\tif ( json.animations ) {\n\n\t\t\tobject.animations = this.parseAnimations( json.animations );\n\n\t\t}\n\n\t\tif ( json.images === undefined || json.images.length === 0 ) {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t},\n\n\tparseShape: function ( json ) {\n\n\t\tvar shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t},\n\n\tparseGeometries: function ( json, shapes ) {\n\n\t\tvar geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar geometryLoader = new JSONLoader();\n\t\t\tvar bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar geometry;\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\tvar geometryShapes = [];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tgeometry = geometryLoader.parse( data, this.texturePath ).geometry;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t},\n\n\tparseMaterials: function ( json, textures ) {\n\n\t\tvar materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tvar array = [];\n\n\t\t\t\t\tfor ( var j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tarray.push( loader.parse( data.materials[ j ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterials[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t},\n\n\tparseAnimations: function ( json ) {\n\n\t\tvar animations = [];\n\n\t\tfor ( var i = 0; i < json.length; i ++ ) {\n\n\t\t\tvar clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t},\n\n\tparseImages: function ( json, onLoad ) {\n\n\t\tvar scope = this;\n\t\tvar images = {};\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tvar manager = new LoadingManager( onLoad );\n\n\t\t\tvar loader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar image = json[ i ];\n\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url;\n\n\t\t\t\timages[ image.uuid ] = loadImage( path );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t},\n\n\tparseTextures: function ( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tvar textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tvar texture = new Texture( images[ data.image ] );\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t},\n\n\tparseObject: function ( data, geometries, materials ) {\n\n\t\tvar object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor ( var i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' );\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tvar geometry = getGeometry( data.geometry );\n\t\t\t\tvar material = getMaterial( data.material );\n\n\t\t\t\tif ( geometry.bones && geometry.bones.length > 0 ) {\n\n\t\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tvar children = data.children;\n\n\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tvar levels = data.levels;\n\n\t\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tvar level = levels[ l ];\n\t\t\t\tvar child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n} );\n\nvar TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tSphericalReflectionMapping: SphericalReflectionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nvar TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nvar TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipMapNearestFilter: NearestMipMapNearestFilter,\n\tNearestMipMapLinearFilter: NearestMipMapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipMapNearestFilter: LinearMipMapNearestFilter,\n\tLinearMipMapLinearFilter: LinearMipMapLinearFilter\n};\n\n/**\n * @author thespite / http://clicktorelease.com/\n */\n\nfunction ImageBitmapLoader( manager ) {\n\n\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t}\n\n\tif ( typeof fetch === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t}\n\n\tthis.manager = manager !== undefined ? manager : DefaultLoadingManager;\n\tthis.options = undefined;\n\n}\n\nImageBitmapLoader.prototype = {\n\n\tconstructor: ImageBitmapLoader,\n\n\tsetOptions: function setOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t},\n\n\tload: function load( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tfetch( url ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, scope.options );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t} );\n\n\t},\n\n\tsetCrossOrigin: function ( /* value */ ) {\n\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * minimal class for proxing functions to Path. Replaces old \"extractSubpaths()\"\n **/\n\nfunction ShapePath() {\n\n\tthis.type = 'ShapePath';\n\n\tthis.color = new Color();\n\n\tthis.subPaths = [];\n\tthis.currentPath = null;\n\n}\n\nObject.assign( ShapePath.prototype, {\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t},\n\n\tsplineThru: function ( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t},\n\n\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tvar shapes = [];\n\n\t\t\tfor ( var i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tvar tmpPath = inSubpaths[ i ];\n\n\t\t\t\tvar tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tvar polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success    or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t//  with the horizontal line through inPt, left of inPt\n\t\t\t//  not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tvar inside = false;\n\t\t\tfor ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tvar edgeLowPt = inPolygon[ p ];\n\t\t\t\tvar edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tvar edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tvar edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tvar isClockWise = ShapeUtils.isClockWise;\n\n\t\tvar subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tvar solid, tmpPath, tmpShape, shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tvar holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tvar betterShapeHoles = [];\n\t\tvar newShapes = [];\n\t\tvar newShapeHoles = [];\n\t\tvar mainIdx = 0;\n\t\tvar tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( var i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tvar ambiguous = false;\n\t\t\tvar toChange = [];\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tvar sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tvar ho = sho[ hIdx ];\n\t\t\t\t\tvar hole_unassigned = true;\n\n\t\t\t\t\tfor ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar tmpHoles;\n\n\t\tfor ( var i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Font( data ) {\n\n\tthis.type = 'Font';\n\n\tthis.data = data;\n\n}\n\nObject.assign( Font.prototype, {\n\n\tisFont: true,\n\n\tgenerateShapes: function ( text, size, divisions ) {\n\n\t\tif ( size === undefined ) size = 100;\n\t\tif ( divisions === undefined ) divisions = 4;\n\n\t\tvar shapes = [];\n\t\tvar paths = createPaths( text, size, divisions, this.data );\n\n\t\tfor ( var p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction createPaths( text, size, divisions, data ) {\n\n\tvar chars = String( text ).split( '' );\n\tvar scale = size / data.resolution;\n\tvar line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tvar paths = [];\n\n\tvar offsetX = 0, offsetY = 0;\n\n\tfor ( var i = 0; i < chars.length; i ++ ) {\n\n\t\tvar char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tvar ret = createPath( char, divisions, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, divisions, scale, offsetX, offsetY, data ) {\n\n\tvar glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) return;\n\n\tvar path = new ShapePath();\n\n\tvar x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tvar outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( var i = 0, l = outline.length; i < l; ) {\n\n\t\t\tvar action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction FontLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FontLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t}\n\n\t\t\tvar font = scope.parse( json );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\treturn new Font( json );\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar context;\n\nvar AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( context === undefined ) {\n\n\t\t\tcontext = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\tcontext = value;\n\n\t}\n\n};\n\n/**\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction AudioLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( AudioLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tvar context = AudioContext.getContext();\n\n\t\t\tcontext.decodeAudioData( buffer, function ( audioBuffer ) {\n\n\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t} );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction StereoCamera() {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.eyeSep = 0.064;\n\n\tthis.cameraL = new PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n}\n\nObject.assign( StereoCamera.prototype, {\n\n\tupdate: ( function () {\n\n\t\tvar instance, focus, fov, aspect, near, far, zoom, eyeSep;\n\n\t\tvar eyeRight = new Matrix4();\n\t\tvar eyeLeft = new Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tvar needsUpdate = instance !== this || focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom || eyeSep !== this.eyeSep;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tinstance = this;\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tvar projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\teyeSep = this.eyeSep / 2;\n\t\t\t\tvar eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tvar ymax = ( near * Math.tan( _Math.DEG2RAD * fov * 0.5 ) ) / zoom;\n\t\t\t\tvar xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * Camera for rendering cube maps\n *\t- renders scene into axis-aligned cube\n *\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction CubeCamera( near, far, cubeResolution ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'CubeCamera';\n\n\tvar fov = 90, aspect = 1;\n\n\tvar cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPX.up.set( 0, - 1, 0 );\n\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\tthis.add( cameraPX );\n\n\tvar cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNX.up.set( 0, - 1, 0 );\n\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\tthis.add( cameraNX );\n\n\tvar cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPY.up.set( 0, 0, 1 );\n\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\tthis.add( cameraPY );\n\n\tvar cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNY.up.set( 0, 0, - 1 );\n\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\tthis.add( cameraNY );\n\n\tvar cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPZ.up.set( 0, - 1, 0 );\n\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\tthis.add( cameraPZ );\n\n\tvar cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNZ.up.set( 0, - 1, 0 );\n\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\tthis.add( cameraNZ );\n\n\tvar options = { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter };\n\n\tthis.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options );\n\tthis.renderTarget.texture.name = \"CubeCamera\";\n\n\tthis.update = function ( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tvar renderTarget = this.renderTarget;\n\t\tvar generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderTarget.activeCubeFace = 0;\n\t\trenderer.render( scene, cameraPX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 1;\n\t\trenderer.render( scene, cameraNX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 2;\n\t\trenderer.render( scene, cameraPY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 3;\n\t\trenderer.render( scene, cameraNY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 4;\n\t\trenderer.render( scene, cameraPZ, renderTarget );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderTarget.activeCubeFace = 5;\n\t\trenderer.render( scene, cameraNZ, renderTarget );\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n\tthis.clear = function ( renderer, color, depth, stencil ) {\n\n\t\tvar renderTarget = this.renderTarget;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\trenderTarget.activeCubeFace = i;\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n}\n\nCubeCamera.prototype = Object.create( Object3D.prototype );\nCubeCamera.prototype.constructor = CubeCamera;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioListener() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'AudioListener';\n\n\tthis.context = AudioContext.getContext();\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( this.context.destination );\n\n\tthis.filter = null;\n\n}\n\nAudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: AudioListener,\n\n\tgetInput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tremoveFilter: function ( ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.filter;\n\n\t},\n\n\tsetFilter: function ( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t},\n\n\tgetMasterVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetMasterVolume: function ( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\t\tvar scale = new Vector3();\n\n\t\tvar orientation = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tvar listener = this.context.listener;\n\t\t\tvar up = this.up;\n\n\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\n\n\t\t\torientation.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\tif ( listener.positionX ) {\n\n\t\t\t\tlistener.positionX.setValueAtTime( position.x, this.context.currentTime );\n\t\t\t\tlistener.positionY.setValueAtTime( position.y, this.context.currentTime );\n\t\t\t\tlistener.positionZ.setValueAtTime( position.z, this.context.currentTime );\n\t\t\t\tlistener.forwardX.setValueAtTime( orientation.x, this.context.currentTime );\n\t\t\t\tlistener.forwardY.setValueAtTime( orientation.y, this.context.currentTime );\n\t\t\t\tlistener.forwardZ.setValueAtTime( orientation.z, this.context.currentTime );\n\t\t\t\tlistener.upX.setValueAtTime( up.x, this.context.currentTime );\n\t\t\t\tlistener.upY.setValueAtTime( up.y, this.context.currentTime );\n\t\t\t\tlistener.upZ.setValueAtTime( up.z, this.context.currentTime );\n\n\t\t\t} else {\n\n\t\t\t\tlistener.setPosition( position.x, position.y, position.z );\n\t\t\t\tlistener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z );\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction Audio( listener ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Audio';\n\n\tthis.context = listener.context;\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( listener.getInput() );\n\n\tthis.autoplay = false;\n\n\tthis.buffer = null;\n\tthis.loop = false;\n\tthis.startTime = 0;\n\tthis.offset = 0;\n\tthis.playbackRate = 1;\n\tthis.isPlaying = false;\n\tthis.hasPlaybackControl = true;\n\tthis.sourceType = 'empty';\n\n\tthis.filters = [];\n\n}\n\nAudio.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Audio,\n\n\tgetOutput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tsetNodeSource: function ( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t},\n\n\tsetBuffer: function ( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t},\n\n\tplay: function () {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar source = this.context.createBufferSource();\n\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.playbackRate.setValueAtTime( this.playbackRate, this.startTime );\n\t\tthis.startTime = this.context.currentTime;\n\t\tsource.start( this.startTime, this.offset );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\treturn this.connect();\n\n\t},\n\n\tpause: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.stop();\n\t\t\tthis.offset += ( this.context.currentTime - this.startTime ) * this.playbackRate;\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.source.stop();\n\t\tthis.offset = 0;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t},\n\n\tconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tdisconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilters: function () {\n\n\t\treturn this.filters;\n\n\t},\n\n\tsetFilters: function ( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value;\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t},\n\n\tsetFilter: function ( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t},\n\n\tsetPlaybackRate: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setValueAtTime( this.playbackRate, this.context.currentTime );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetPlaybackRate: function () {\n\n\t\treturn this.playbackRate;\n\n\t},\n\n\tonEnded: function () {\n\n\t\tthis.isPlaying = false;\n\n\t},\n\n\tgetLoop: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t},\n\n\tsetLoop: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetVolume: function ( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PositionalAudio( listener ) {\n\n\tAudio.call( this, listener );\n\n\tthis.panner = this.context.createPanner();\n\tthis.panner.connect( this.gain );\n\n}\n\nPositionalAudio.prototype = Object.assign( Object.create( Audio.prototype ), {\n\n\tconstructor: PositionalAudio,\n\n\tgetOutput: function () {\n\n\t\treturn this.panner;\n\n\t},\n\n\tgetRefDistance: function () {\n\n\t\treturn this.panner.refDistance;\n\n\t},\n\n\tsetRefDistance: function ( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t},\n\n\tgetRolloffFactor: function () {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t},\n\n\tsetRolloffFactor: function ( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t},\n\n\tgetDistanceModel: function () {\n\n\t\treturn this.panner.distanceModel;\n\n\t},\n\n\tsetDistanceModel: function ( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t},\n\n\tgetMaxDistance: function () {\n\n\t\treturn this.panner.maxDistance;\n\n\t},\n\n\tsetMaxDistance: function ( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tposition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tthis.panner.setPosition( position.x, position.y, position.z );\n\n\t\t};\n\n\t} )()\n\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioAnalyser( audio, fftSize ) {\n\n\tthis.analyser = audio.context.createAnalyser();\n\tthis.analyser.fftSize = fftSize !== undefined ? fftSize : 2048;\n\n\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\taudio.getOutput().connect( this.analyser );\n\n}\n\nObject.assign( AudioAnalyser.prototype, {\n\n\tgetFrequencyData: function () {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t},\n\n\tgetAverageFrequency: function () {\n\n\t\tvar value = 0, data = this.getFrequencyData();\n\n\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n} );\n\n/**\n *\n * Buffered scene graph property that allows weighted accumulation.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\tthis.binding = binding;\n\tthis.valueSize = valueSize;\n\n\tvar bufferType = Float64Array,\n\t\tmixFunction;\n\n\tswitch ( typeName ) {\n\n\t\tcase 'quaternion':\n\t\t\tmixFunction = this._slerp;\n\t\t\tbreak;\n\n\t\tcase 'string':\n\t\tcase 'bool':\n\t\t\tbufferType = Array;\n\t\t\tmixFunction = this._select;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmixFunction = this._lerp;\n\n\t}\n\n\tthis.buffer = new bufferType( valueSize * 4 );\n\t// layout: [ incoming | accu0 | accu1 | orig ]\n\t//\n\t// interpolators can use .buffer as their .result\n\t// the data then goes to 'incoming'\n\t//\n\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t// the cumulative result and are compared to detect\n\t// changes\n\t//\n\t// 'orig' stores the original state of the property\n\n\tthis._mixBufferRegion = mixFunction;\n\n\tthis.cumulativeWeight = 0;\n\n\tthis.useCount = 0;\n\tthis.referenceCount = 0;\n\n}\n\nObject.assign( PropertyMixer.prototype, {\n\n\t// accumulate data in the 'incoming' region into 'accu<i>'\n\taccumulate: function ( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tvar buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tcurrentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tvar mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t},\n\n\t// apply the state of 'accu<i>' to the binding when accus differ\n\tapply: function ( accuIndex ) {\n\n\t\tvar stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tvar originalValueOffset = stride * 3;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tfor ( var i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState: function () {\n\n\t\tvar binding = this.binding;\n\n\t\tvar buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * 3;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( var i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\tthis.cumulativeWeight = 0;\n\n\t},\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState: function () {\n\n\t\tvar originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t},\n\n\n\t// mix functions\n\n\t_select: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_slerp: function ( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t},\n\n\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tvar s = 1 - t;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tvar j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n *\n * A reference to a real property in the scene graph.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\n// Characters [].:/ are reserved for track binding syntax.\nvar RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\n\nfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\tvar parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis._targetGroup = targetGroup;\n\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n}\n\nObject.assign( Composite.prototype, {\n\n\tgetValue: function ( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tvar firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t},\n\n\tsetValue: function ( array, offset ) {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t  n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t},\n\n\tbind: function () {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t  n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t},\n\n\tunbind: function () {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t  n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n} );\n\n\nfunction PropertyBinding( rootNode, path, parsedPath ) {\n\n\tthis.path = path;\n\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\tthis.rootNode = rootNode;\n\n}\n\nObject.assign( PropertyBinding, {\n\n\tComposite: Composite,\n\n\tcreate: function ( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param  {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tsanitizeNodeName: ( function () {\n\n\t\tvar reservedRe = new RegExp( '[' + RESERVED_CHARS_RE + ']', 'g' );\n\n\t\treturn function sanitizeNodeName( name ) {\n\n\t\t\treturn name.replace( /\\s/g, '_' ).replace( reservedRe, '' );\n\n\t\t};\n\n\t}() ),\n\n\tparseTrackName: function () {\n\n\t\t// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n\t\t// only latin characters, and the unicode \\p{L} is not yet supported. So\n\t\t// instead, we exclude reserved characters and match everything else.\n\t\tvar wordChar = '[^' + RESERVED_CHARS_RE + ']';\n\t\tvar wordCharOrDot = '[^' + RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n\t\t// Parent directories, delimited by '/' or ':'. Currently unused, but must\n\t\t// be matched to parse the rest of the track name.\n\t\tvar directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', wordChar );\n\n\t\t// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\n\t\tvar nodeRe = /(WCOD+)?/.source.replace( 'WCOD', wordCharOrDot );\n\n\t\t// Object on target node, and accessor. May not contain reserved\n\t\t// characters. Accessor may contain any character except closing bracket.\n\t\tvar objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', wordChar );\n\n\t\t// Property and accessor. May not contain reserved characters. Accessor may\n\t\t// contain any non-bracket characters.\n\t\tvar propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', wordChar );\n\n\t\tvar trackRe = new RegExp( ''\n\t\t\t+ '^'\n\t\t\t+ directoryRe\n\t\t\t+ nodeRe\n\t\t\t+ objectRe\n\t\t\t+ propertyRe\n\t\t\t+ '$'\n\t\t);\n\n\t\tvar supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\n\t\treturn function parseTrackName( trackName ) {\n\n\t\t\tvar matches = trackRe.exec( trackName );\n\n\t\t\tif ( ! matches ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\tvar results = {\n\t\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\t\tnodeName: matches[ 2 ],\n\t\t\t\tobjectName: matches[ 3 ],\n\t\t\t\tobjectIndex: matches[ 4 ],\n\t\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\t\tpropertyIndex: matches[ 6 ]\n\t\t\t};\n\n\t\t\tvar lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\t\tvar objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t\t// Object names must be checked against a whitelist. Otherwise, there\n\t\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t\t// include '.' characters).\n\t\t\t\tif ( supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\t\tresults.objectName = objectName;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\treturn results;\n\n\t\t};\n\n\t}(),\n\n\tfindNode: function ( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === \"\" || nodeName === \"root\" || nodeName === \".\" || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tvar bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tvar searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tvar childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tvar subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n} );\n\nObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable: function () {},\n\t_setValue_unavailable: function () {},\n\n\tBindingType: {\n\t\tDirect: 0,\n\t\tEntireArray: 1,\n\t\tArrayElement: 2,\n\t\tHasFromToArray: 3\n\t},\n\n\tVersioning: {\n\t\tNone: 0,\n\t\tNeedsUpdate: 1,\n\t\tMatrixWorldNeedsUpdate: 2\n\t},\n\n\tGetterByBindingType: [\n\n\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t},\n\n\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\tvar source = this.resolvedProperty;\n\n\t\t\tfor ( var i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t}\n\n\t\t},\n\n\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t},\n\n\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t}\n\n\t],\n\n\tSetterByBindingTypeAndVersioning: [\n\n\t\t[\n\t\t\t// Direct\n\n\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// EntireArray\n\n\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// ArrayElement\n\n\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// HasToFromArray\n\n\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t]\n\n\t],\n\n\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t// prototype version of these methods with one that represents\n\t\t// the bound state. When the property is not found, the methods\n\t\t// become no-ops.\n\n\t},\n\n\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t},\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind: function () {\n\n\t\tvar targetObject = this.node,\n\t\t\tparsedPath = this.parsedPath,\n\n\t\t\tobjectName = parsedPath.objectName,\n\t\t\tpropertyName = parsedPath.propertyName,\n\t\t\tpropertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tvar objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( var i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tvar nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tvar nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tvar versioning = this.Versioning.None;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\t\t\tthis.targetObject = targetObject;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\t\t\tthis.targetObject = targetObject;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tvar bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === \"morphTargetInfluences\" ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphAttributes.position.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject.geometry.morphAttributes.position[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphTargets ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\tbreak;\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\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t},\n\n\tunbind: function () {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n} );\n\n//!\\ DECLARE ALIAS AFTER assign prototype !\nObject.assign( PropertyBinding.prototype, {\n\n\t// initial state of these methods that calls 'bind'\n\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n} );\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * \t-\tAdd objects you would otherwise pass as 'root' to the\n * \t\tconstructor or the .clipAction method of AnimationMixer.\n *\n * \t-\tInstead pass this object as 'root'.\n *\n * \t-\tYou can also add and remove objects later when the mixer\n * \t\tis running.\n *\n * Note:\n *\n *  \tObjects of this class appear as one object to the mixer,\n *  \tso cache control of the individual objects must be done\n *  \ton the group.\n *\n * Limitation:\n *\n * \t- \tThe animated properties must be compatible among the\n * \t\tall objects in the group.\n *\n *  -\tA single property can either be controlled through a\n *  \ttarget group or directly, but not both.\n *\n * @author tschw\n */\n\nfunction AnimationObjectGroup() {\n\n\tthis.uuid = _Math.generateUUID();\n\n\t// cached objects followed by the active ones\n\tthis._objects = Array.prototype.slice.call( arguments );\n\n\tthis.nCachedObjects_ = 0;\t\t\t// threshold\n\t// note: read by PropertyBinding.Composite\n\n\tvar indices = {};\n\tthis._indicesByUUID = indices;\t\t// for bookkeeping\n\n\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t}\n\n\tthis._paths = [];\t\t\t\t\t// inside: string\n\tthis._parsedPaths = [];\t\t\t\t// inside: { we don't care, here }\n\tthis._bindings = []; \t\t\t\t// inside: Array< PropertyBinding >\n\tthis._bindingsIndicesByPath = {}; \t// inside: indices in these arrays\n\n\tvar scope = this;\n\n\tthis.stats = {\n\n\t\tobjects: {\n\t\t\tget total() {\n\n\t\t\t\treturn scope._objects.length;\n\n\t\t\t},\n\t\t\tget inUse() {\n\n\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t}\n\t\t},\n\t\tget bindingsPerObject() {\n\n\t\t\treturn scope._bindings.length;\n\n\t\t}\n\n\t};\n\n}\n\nObject.assign( AnimationObjectGroup.prototype, {\n\n\tisAnimationObjectGroup: true,\n\n\tadd: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length,\n\t\t\tknownObject = undefined;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\tremove: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tvar lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// remove & forget\n\tuncache: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tvar lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_: function ( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ],\n\t\t\tbindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tvar paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tvar object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t},\n\n\tunsubscribe_: function ( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tvar paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n *\n * Action provided by AnimationMixer for scheduling clip playback on specific\n * objects.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n *\n */\n\nfunction AnimationAction( mixer, clip, localRoot ) {\n\n\tthis._mixer = mixer;\n\tthis._clip = clip;\n\tthis._localRoot = localRoot || null;\n\n\tvar tracks = clip.tracks,\n\t\tnTracks = tracks.length,\n\t\tinterpolants = new Array( nTracks );\n\n\tvar interpolantSettings = {\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\t};\n\n\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\tvar interpolant = tracks[ i ].createInterpolant( null );\n\t\tinterpolants[ i ] = interpolant;\n\t\tinterpolant.settings = interpolantSettings;\n\n\t}\n\n\tthis._interpolantSettings = interpolantSettings;\n\n\tthis._interpolants = interpolants;\t// bound by the mixer\n\n\t// inside: PropertyMixer (managed by the mixer)\n\tthis._propertyBindings = new Array( nTracks );\n\n\tthis._cacheIndex = null;\t\t\t// for the memory manager\n\tthis._byClipCacheIndex = null;\t\t// for the memory manager\n\n\tthis._timeScaleInterpolant = null;\n\tthis._weightInterpolant = null;\n\n\tthis.loop = LoopRepeat;\n\tthis._loopCount = - 1;\n\n\t// global mixer time when the action is to be started\n\t// it's set back to 'null' upon start of the action\n\tthis._startTime = null;\n\n\t// scaled local time of the action\n\t// gets clamped or wrapped to 0..clip.duration according to loop\n\tthis.time = 0;\n\n\tthis.timeScale = 1;\n\tthis._effectiveTimeScale = 1;\n\n\tthis.weight = 1;\n\tthis._effectiveWeight = 1;\n\n\tthis.repetitions = Infinity; \t\t// no. of repetitions when looping\n\n\tthis.paused = false;\t\t\t\t// true -> zero effective time scale\n\tthis.enabled = true;\t\t\t\t// false -> zero effective weight\n\n\tthis.clampWhenFinished \t= false;\t// keep feeding the last frame?\n\n\tthis.zeroSlopeAtStart \t= true;\t\t// for smooth interpolation w/o separate\n\tthis.zeroSlopeAtEnd\t\t= true;\t\t// clips for start, loop and end\n\n}\n\nObject.assign( AnimationAction.prototype, {\n\n\t// State & Scheduling\n\n\tplay: function () {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t},\n\n\treset: function () {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0;\t\t\t// restart clip\n\t\tthis._loopCount = - 1;\t// forget previous loops\n\t\tthis._startTime = null;\t// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t},\n\n\tisRunning: function () {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t},\n\n\t// return true when play has been called\n\tisScheduled: function () {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t},\n\n\tstartAt: function ( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t},\n\n\tsetLoop: function ( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t},\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight: function ( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t},\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight: function () {\n\n\t\treturn this._effectiveWeight;\n\n\t},\n\n\tfadeIn: function ( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t},\n\n\tfadeOut: function ( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t},\n\n\tcrossFadeFrom: function ( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tvar fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcrossFadeTo: function ( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t},\n\n\tstopFading: function () {\n\n\t\tvar weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale: function ( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale: function () {\n\n\t\treturn this._effectiveTimeScale;\n\n\t},\n\n\tsetDuration: function ( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\tsyncWith: function ( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\thalt: function ( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t},\n\n\twarp: function ( startTimeScale, endTimeScale, duration ) {\n\n\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\tinterpolant = this._timeScaleInterpolant,\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tvar times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t},\n\n\tstopWarping: function () {\n\n\t\tvar timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Object Accessors\n\n\tgetMixer: function () {\n\n\t\treturn this._mixer;\n\n\t},\n\n\tgetClip: function () {\n\n\t\treturn this._clip;\n\n\t},\n\n\tgetRoot: function () {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t},\n\n\t// Interna\n\n\t_update: function ( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tvar timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tvar clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tvar weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tvar interpolants = this._interpolants;\n\t\t\tvar propertyMixers = this._propertyBindings;\n\n\t\t\tfor ( var j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_updateWeight: function ( time ) {\n\n\t\tvar weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tvar interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\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\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t},\n\n\t_updateTimeScale: function ( time ) {\n\n\t\tvar timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tvar interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\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\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t},\n\n\t_updateTime: function ( deltaTime ) {\n\n\t\tvar time = this.time + deltaTime;\n\n\t\tif ( deltaTime === 0 ) return time;\n\n\t\tvar duration = this._clip.duration,\n\n\t\t\tloop = this.loop,\n\t\t\tloopCount = this._loopCount;\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else break handle_stop;\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tvar pingPong = ( loop === LoopPingPong );\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tvar loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tvar pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tvar atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\tthis.time = time;\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.time = time;\n\t\treturn time;\n\n\t},\n\n\t_setEndings: function ( atStart, atEnd, pingPong ) {\n\n\t\tvar settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart \t= ZeroSlopeEnding;\n\t\t\tsettings.endingEnd\t\t= ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_scheduleFading: function ( duration, weightNow, weightThen ) {\n\n\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\tinterpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tvar times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now; \t\t\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n *\n * Player for AnimationClips.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction AnimationMixer( root ) {\n\n\tthis._root = root;\n\tthis._initMemoryManager();\n\tthis._accuIndex = 0;\n\n\tthis.time = 0;\n\n\tthis.timeScale = 1.0;\n\n}\n\nAnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: AnimationMixer,\n\n\t_bindAction: function ( action, prototypeAction ) {\n\n\t\tvar root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tvar track = tracks[ i ],\n\t\t\t\ttrackName = track.name,\n\t\t\t\tbinding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tvar path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t},\n\n\t_activateAction: function ( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tvar rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t},\n\n\t_deactivateAction: function ( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t},\n\n\t// Memory manager\n\n\t_initMemoryManager: function () {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \t\tknownActions: Array< AnimationAction >\t- used as prototypes\n\t\t// \t\tactionByRoot: AnimationAction\t\t\t- lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tvar scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t},\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction: function ( action ) {\n\n\t\tvar index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t},\n\n\t_addInactiveAction: function ( action, clipUuid, rootUuid ) {\n\n\t\tvar actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tvar knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t},\n\n\t_removeInactiveAction: function ( action ) {\n\n\t\tvar actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tvar clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tvar actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t},\n\n\t_removeInactiveBindingsForAction: function ( action ) {\n\n\t\tvar bindings = action._propertyBindings;\n\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tvar binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_lendAction: function ( action ) {\n\n\t\t// [ active actions |  inactive actions  ]\n\t\t// [  active actions >| inactive actions ]\n\t\t//                 s        a\n\t\t//                  <-swap->\n\t\t//                 a        s\n\n\t\tvar actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t},\n\n\t_takeBackAction: function ( action ) {\n\n\t\t// [  active actions  | inactive actions ]\n\t\t// [ active actions |< inactive actions  ]\n\t\t//        a        s\n\t\t//         <-swap->\n\t\t//        s        a\n\n\t\tvar actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t},\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding: function ( binding, rootUuid, trackName ) {\n\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tbindings = this._bindings;\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t},\n\n\t_removeInactiveBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tremove_empty_map: {\n\n\t\t\tfor ( var _ in bindingByName ) break remove_empty_map; // eslint-disable-line no-unused-vars\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t},\n\n\t_lendBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t},\n\n\t_takeBackBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t},\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant: function () {\n\n\t\tvar interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++,\n\t\t\tinterpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t},\n\n\t_takeBackControlInterpolant: function ( interpolant ) {\n\n\t\tvar interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t},\n\n\t_controlInterpolantsResultBuffer: new Float32Array( 1 ),\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction: function ( clip, optionalRoot ) {\n\n\t\tvar root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject !== null ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ],\n\t\t\tprototypeAction = null;\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tvar existingAction =\n\t\t\t\t\tactionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tvar newAction = new AnimationAction( this, clipObject, optionalRoot );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t},\n\n\t// get an existing action\n\texistingAction: function ( clip, optionalRoot ) {\n\n\t\tvar root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction: function () {\n\n\t\tvar actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tthis._nActiveActions = 0;\n\t\tthis._nActiveBindings = 0;\n\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\tactions[ i ].reset();\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].useCount = 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// advance the time and update apply the animation\n\tupdate: function ( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tvar actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\tvar action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tvar bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// return this mixer's root target object\n\tgetRoot: function () {\n\n\t\treturn this._root;\n\n\t},\n\n\t// free all resources specific to a particular clip\n\tuncacheClip: function ( clip ) {\n\n\t\tvar actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tvar actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tvar action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tvar cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t},\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot: function ( root ) {\n\n\t\tvar rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( var clipUuid in actionsByClip ) {\n\n\t\t\tvar actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( var trackName in bindingByName ) {\n\n\t\t\t\tvar binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remove a targeted clip from the cache\n\tuncacheAction: function ( clip, optionalRoot ) {\n\n\t\tvar action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Uniform( value ) {\n\n\tif ( typeof value === 'string' ) {\n\n\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\tvalue = arguments[ 1 ];\n\n\t}\n\n\tthis.value = value;\n\n}\n\nUniform.prototype.clone = function () {\n\n\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n};\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedBufferGeometry() {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'InstancedBufferGeometry';\n\tthis.maxInstancedCount = undefined;\n\n}\n\nInstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {\n\n\tconstructor: InstancedBufferGeometry,\n\n\tisInstancedBufferGeometry: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferGeometry.prototype.copy.call( this, source );\n\n\t\tthis.maxInstancedCount = source.maxInstancedCount;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\tthis.data = interleavedBuffer;\n\tthis.itemSize = itemSize;\n\tthis.offset = offset;\n\n\tthis.normalized = normalized === true;\n\n}\n\nObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\tcount: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.count;\n\n\t\t}\n\n\t},\n\n\tarray: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.array;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( InterleavedBufferAttribute.prototype, {\n\n\tisInterleavedBufferAttribute: true,\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InterleavedBuffer( array, stride ) {\n\n\tthis.array = array;\n\tthis.stride = stride;\n\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\tthis.dynamic = false;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\n\tisInterleavedBuffer: true,\n\n\tonUploadCallback: function () {},\n\n\tsetArray: function ( array ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.count = array !== undefined ? array.length / this.stride : 0;\n\t\tthis.array = array;\n\n\t\treturn this;\n\n\t},\n\n\tsetDynamic: function ( value ) {\n\n\t\tthis.dynamic = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.dynamic = source.dynamic;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( var i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\tInterleavedBuffer.call( this, array, stride );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {\n\n\tconstructor: InstancedInterleavedBuffer,\n\n\tisInstancedInterleavedBuffer: true,\n\n\tcopy: function ( source ) {\n\n\t\tInterleavedBuffer.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedBufferAttribute( array, itemSize, meshPerAttribute ) {\n\n\tBufferAttribute.call( this, array, itemSize );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\tconstructor: InstancedBufferAttribute,\n\n\tisInstancedBufferAttribute: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author bhouston / http://clara.io/\n * @author stephomi / http://stephaneginier.com/\n */\n\nfunction Raycaster( origin, direction, near, far ) {\n\n\tthis.ray = new Ray( origin, direction );\n\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\tthis.near = near || 0;\n\tthis.far = far || Infinity;\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: {},\n\t\tLOD: {},\n\t\tPoints: { threshold: 1 },\n\t\tSprite: {}\n\t};\n\n\tObject.defineProperties( this.params, {\n\t\tPointCloud: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\treturn this.Points;\n\n\t\t\t}\n\t\t}\n\t} );\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.visible === false ) return;\n\n\tobject.raycast( raycaster, intersects );\n\n\tif ( recursive === true ) {\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Raycaster.prototype, {\n\n\tlinePrecision: 1,\n\n\tset: function ( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t},\n\n\tsetFromCamera: function ( coords, camera ) {\n\n\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\n\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t}\n\n\t},\n\n\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t},\n\n\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\treturn intersects;\n\n\t\t}\n\n\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Clock( autoStart ) {\n\n\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\tthis.startTime = 0;\n\tthis.oldTime = 0;\n\tthis.elapsedTime = 0;\n\n\tthis.running = false;\n\n}\n\nObject.assign( Clock.prototype, {\n\n\tstart: function () {\n\n\t\tthis.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t},\n\n\tstop: function () {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t},\n\n\tgetElapsedTime: function () {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t},\n\n\tgetDelta: function () {\n\n\t\tvar diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tvar newTime = ( typeof performance === 'undefined' ? Date : performance ).now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n *\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The poles (phi) are at the positive and negative y axis.\n * The equator starts at positive z.\n */\n\nfunction Spherical( radius, phi, theta ) {\n\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0;\n\tthis.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere\n\n\treturn this;\n\n}\n\nObject.assign( Spherical.prototype, {\n\n\tset: function ( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t},\n\n\t// restrict phi to be betwee EPS and PI-EPS\n\tmakeSafe: function () {\n\n\t\tvar EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromVector3: function ( vec3 ) {\n\n\t\tthis.radius = vec3.length();\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( vec3.x, vec3.z ); // equator angle around y-up axis\n\t\t\tthis.phi = Math.acos( _Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n *\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n *\n */\n\nfunction Cylindrical( radius, theta, y ) {\n\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\tthis.y = ( y !== undefined ) ? y : 0; // height above the x-z plane\n\n\treturn this;\n\n}\n\nObject.assign( Cylindrical.prototype, {\n\n\tset: function ( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromVector3: function ( vec3 ) {\n\n\t\tthis.radius = Math.sqrt( vec3.x * vec3.x + vec3.z * vec3.z );\n\t\tthis.theta = Math.atan2( vec3.x, vec3.z );\n\t\tthis.y = vec3.y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Box2( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity );\n\n}\n\nObject.assign( Box2.prototype, {\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector2();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t},\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector2();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction ImmediateRenderObject( material ) {\n\n\tObject3D.call( this );\n\n\tthis.material = material;\n\tthis.render = function ( /* renderCallback */ ) {};\n\n}\n\nImmediateRenderObject.prototype = Object.create( Object3D.prototype );\nImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction VertexNormalsHelper( object, size, hex, linewidth ) {\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xff0000;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length * 3;\n\n\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\tnNormals = objGeometry.attributes.normal.count;\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nVertexNormalsHelper.prototype = Object.create( LineSegments.prototype );\nVertexNormalsHelper.prototype.constructor = VertexNormalsHelper;\n\nVertexNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tvar keys = [ 'a', 'b', 'c' ];\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\tvar vertices = objGeometry.vertices;\n\n\t\t\tvar faces = objGeometry.faces;\n\n\t\t\tvar idx = 0;\n\n\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar vertex = vertices[ face[ keys[ j ] ] ];\n\n\t\t\t\t\tvar normal = face.vertexNormals[ j ];\n\n\t\t\t\t\tv1.copy( vertex ).applyMatrix4( matrixWorld );\n\n\t\t\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\t\tvar objPos = objGeometry.attributes.position;\n\n\t\t\tvar objNorm = objGeometry.attributes.normal;\n\n\t\t\tvar idx = 0;\n\n\t\t\t// for simplicity, ignore index and drawcalls, and render every normal\n\n\t\t\tfor ( var j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t\tv1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld );\n\n\t\t\t\tv2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) );\n\n\t\t\t\tv2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction SpotLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = [\n\t\t0, 0, 0, \t0, 0, 1,\n\t\t0, 0, 0, \t1, 0, 1,\n\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t0, 0, 0, \t0, 1, 1,\n\t\t0, 0, 0, \t0, - 1, 1\n\t];\n\n\tfor ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\tvar p1 = ( i / l ) * Math.PI * 2;\n\t\tvar p2 = ( j / l ) * Math.PI * 2;\n\n\t\tpositions.push(\n\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t);\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.cone = new LineSegments( geometry, material );\n\tthis.add( this.cone );\n\n\tthis.update();\n\n}\n\nSpotLightHelper.prototype = Object.create( Object3D.prototype );\nSpotLightHelper.prototype.constructor = SpotLightHelper;\n\nSpotLightHelper.prototype.dispose = function () {\n\n\tthis.cone.geometry.dispose();\n\tthis.cone.material.dispose();\n\n};\n\nSpotLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\tvar vector2 = new Vector3();\n\n\treturn function update() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tvar coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tvar coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\tvector.setFromMatrixPosition( this.light.matrixWorld );\n\t\tvector2.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( vector2.sub( vector ) );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t};\n\n}();\n\n/**\n * @author Sean Griffin / http://twitter.com/sgrif\n * @author Michael Guerrero / http://realitymeltdown.com\n * @author mrdoob / http://mrdoob.com/\n * @author ikerr / http://verold.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction getBoneList( object ) {\n\n\tvar boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( var i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nfunction SkeletonHelper( object ) {\n\n\tvar bones = getBoneList( object );\n\n\tvar geometry = new BufferGeometry();\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar color1 = new Color( 0, 0, 1 );\n\tvar color2 = new Color( 0, 1, 0 );\n\n\tfor ( var i = 0; i < bones.length; i ++ ) {\n\n\t\tvar bone = bones[ i ];\n\n\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t}\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.root = object;\n\tthis.bones = bones;\n\n\tthis.matrix = object.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n}\n\nSkeletonHelper.prototype = Object.create( LineSegments.prototype );\nSkeletonHelper.prototype.constructor = SkeletonHelper;\n\nSkeletonHelper.prototype.updateMatrixWorld = function () {\n\n\tvar vector = new Vector3();\n\n\tvar boneMatrix = new Matrix4();\n\tvar matrixWorldInv = new Matrix4();\n\n\treturn function updateMatrixWorld( force ) {\n\n\t\tvar bones = this.bones;\n\n\t\tvar geometry = this.geometry;\n\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\tmatrixWorldInv.getInverse( this.root.matrixWorld );\n\n\t\tfor ( var i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tvar bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j, vector.x, vector.y, vector.z );\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, vector.x, vector.y, vector.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PointLightHelper( light, sphereSize, color ) {\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.color = color;\n\n\tvar geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\tvar material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\n\tMesh.call( this, geometry, material );\n\n\tthis.matrix = this.light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n\n\t/*\n\tvar distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tvar distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tvar d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n}\n\nPointLightHelper.prototype = Object.create( Mesh.prototype );\nPointLightHelper.prototype.constructor = PointLightHelper;\n\nPointLightHelper.prototype.dispose = function () {\n\n\tthis.geometry.dispose();\n\tthis.material.dispose();\n\n};\n\nPointLightHelper.prototype.update = function () {\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.material.color.copy( this.light.color );\n\n\t}\n\n\t/*\n\tvar d = this.light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.visible = true;\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\t*/\n\n};\n\n/**\n * @author abelnation / http://github.com/abelnation\n * @author Mugen87 / http://github.com/Mugen87\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction RectAreaLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 5 * 3 ), 3 ) );\n\n\tthis.line = new Line( geometry, material );\n\tthis.add( this.line );\n\n\n\tthis.update();\n\n}\n\nRectAreaLightHelper.prototype = Object.create( Object3D.prototype );\nRectAreaLightHelper.prototype.constructor = RectAreaLightHelper;\n\nRectAreaLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nRectAreaLightHelper.prototype.update = function () {\n\n\t// calculate new dimensions of the helper\n\n\tvar hx = this.light.width * 0.5;\n\tvar hy = this.light.height * 0.5;\n\n\tvar position = this.line.geometry.attributes.position;\n\tvar array = position.array;\n\n\t// update vertices\n\n\tarray[ 0 ] = hx; array[ 1 ] = - hy; array[ 2 ] = 0;\n\tarray[ 3 ] = hx; array[ 4 ] = hy; array[ 5 ] = 0;\n\tarray[ 6 ] = - hx; array[ 7 ] = hy; array[ 8 ] = 0;\n\tarray[ 9 ] = - hx; array[ 10 ] = - hy; array[ 11 ] = 0;\n\tarray[ 12 ] = hx; array[ 13 ] = - hy; array[ 14 ] = 0;\n\n\tposition.needsUpdate = true;\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.line.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.line.material.color.copy( this.light.color );\n\n\t}\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction HemisphereLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new OctahedronBufferGeometry( size );\n\tgeometry.rotateY( Math.PI * 0.5 );\n\n\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\tif ( this.color === undefined ) this.material.vertexColors = VertexColors;\n\n\tvar position = geometry.getAttribute( 'position' );\n\tvar colors = new Float32Array( position.count * 3 );\n\n\tgeometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\tthis.add( new Mesh( geometry, this.material ) );\n\n\tthis.update();\n\n}\n\nHemisphereLightHelper.prototype = Object.create( Object3D.prototype );\nHemisphereLightHelper.prototype.constructor = HemisphereLightHelper;\n\nHemisphereLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nHemisphereLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\n\tvar color1 = new Color();\n\tvar color2 = new Color();\n\n\treturn function update() {\n\n\t\tvar mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tvar colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\tcolor1.copy( this.light.color );\n\t\t\tcolor2.copy( this.light.groundColor );\n\n\t\t\tfor ( var i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tvar color = ( i < ( l / 2 ) ) ? color1 : color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction GridHelper( size, divisions, color1, color2 ) {\n\n\tsize = size || 10;\n\tdivisions = divisions || 10;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar center = divisions / 2;\n\tvar step = size / divisions;\n\tvar halfSize = size / 2;\n\n\tvar vertices = [], colors = [];\n\n\tfor ( var i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\tvar color = i === center ? color1 : color2;\n\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nGridHelper.prototype = Object.create( LineSegments.prototype );\nGridHelper.prototype.constructor = GridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n * @author Hectate / http://www.github.com/Hectate\n */\n\nfunction PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) {\n\n\tradius = radius || 10;\n\tradials = radials || 16;\n\tcircles = circles || 8;\n\tdivisions = divisions || 64;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar x, z;\n\tvar v, i, j, r, color;\n\n\t// create the radials\n\n\tfor ( i = 0; i <= radials; i ++ ) {\n\n\t\tv = ( i / radials ) * ( Math.PI * 2 );\n\n\t\tx = Math.sin( v ) * radius;\n\t\tz = Math.cos( v ) * radius;\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tvertices.push( x, 0, z );\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tcolors.push( color.r, color.g, color.b );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t}\n\n\t// create the circles\n\n\tfor ( i = 0; i <= circles; i ++ ) {\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tr = radius - ( radius / circles * i );\n\n\t\tfor ( j = 0; j < divisions; j ++ ) {\n\n\t\t\t// first vertex\n\n\t\t\tv = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t// second vertex\n\n\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nPolarGridHelper.prototype = Object.create( LineSegments.prototype );\nPolarGridHelper.prototype.constructor = PolarGridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction FaceNormalsHelper( object, size, hex, linewidth ) {\n\n\t// FaceNormalsHelper only supports THREE.Geometry\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length;\n\n\t} else {\n\n\t\tconsole.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' );\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\tthis.update();\n\n}\n\nFaceNormalsHelper.prototype = Object.create( LineSegments.prototype );\nFaceNormalsHelper.prototype.constructor = FaceNormalsHelper;\n\nFaceNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tvar vertices = objGeometry.vertices;\n\n\t\tvar faces = objGeometry.faces;\n\n\t\tvar idx = 0;\n\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tvar normal = face.normal;\n\n\t\t\tv1.copy( vertices[ face.a ] )\n\t\t\t\t.add( vertices[ face.b ] )\n\t\t\t\t.add( vertices[ face.c ] )\n\t\t\t\t.divideScalar( 3 )\n\t\t\t\t.applyMatrix4( matrixWorld );\n\n\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction DirectionalLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tif ( size === undefined ) size = 1;\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [\n\t\t- size, size, 0,\n\t\tsize, size, 0,\n\t\tsize, - size, 0,\n\t\t- size, - size, 0,\n\t\t- size, size, 0\n\t], 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.lightPlane = new Line( geometry, material );\n\tthis.add( this.lightPlane );\n\n\tgeometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\tthis.targetLine = new Line( geometry, material );\n\tthis.add( this.targetLine );\n\n\tthis.update();\n\n}\n\nDirectionalLightHelper.prototype = Object.create( Object3D.prototype );\nDirectionalLightHelper.prototype.constructor = DirectionalLightHelper;\n\nDirectionalLightHelper.prototype.dispose = function () {\n\n\tthis.lightPlane.geometry.dispose();\n\tthis.lightPlane.material.dispose();\n\tthis.targetLine.geometry.dispose();\n\tthis.targetLine.material.dispose();\n\n};\n\nDirectionalLightHelper.prototype.update = function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar v3 = new Vector3();\n\n\treturn function update() {\n\n\t\tv1.setFromMatrixPosition( this.light.matrixWorld );\n\t\tv2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\tv3.subVectors( v2, v1 );\n\n\t\tthis.lightPlane.lookAt( v3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( v3 );\n\t\tthis.targetLine.scale.z = v3.length();\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author Mugen87 / https://github.com/Mugen87\n *\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nfunction CameraHelper( camera ) {\n\n\tvar geometry = new BufferGeometry();\n\tvar material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar pointMap = {};\n\n\t// colors\n\n\tvar colorFrustum = new Color( 0xffaa00 );\n\tvar colorCone = new Color( 0xff0000 );\n\tvar colorUp = new Color( 0x00aaff );\n\tvar colorTarget = new Color( 0xffffff );\n\tvar colorCross = new Color( 0x333333 );\n\n\t// near\n\n\taddLine( 'n1', 'n2', colorFrustum );\n\taddLine( 'n2', 'n4', colorFrustum );\n\taddLine( 'n4', 'n3', colorFrustum );\n\taddLine( 'n3', 'n1', colorFrustum );\n\n\t// far\n\n\taddLine( 'f1', 'f2', colorFrustum );\n\taddLine( 'f2', 'f4', colorFrustum );\n\taddLine( 'f4', 'f3', colorFrustum );\n\taddLine( 'f3', 'f1', colorFrustum );\n\n\t// sides\n\n\taddLine( 'n1', 'f1', colorFrustum );\n\taddLine( 'n2', 'f2', colorFrustum );\n\taddLine( 'n3', 'f3', colorFrustum );\n\taddLine( 'n4', 'f4', colorFrustum );\n\n\t// cone\n\n\taddLine( 'p', 'n1', colorCone );\n\taddLine( 'p', 'n2', colorCone );\n\taddLine( 'p', 'n3', colorCone );\n\taddLine( 'p', 'n4', colorCone );\n\n\t// up\n\n\taddLine( 'u1', 'u2', colorUp );\n\taddLine( 'u2', 'u3', colorUp );\n\taddLine( 'u3', 'u1', colorUp );\n\n\t// target\n\n\taddLine( 'c', 't', colorTarget );\n\taddLine( 'p', 'c', colorCross );\n\n\t// cross\n\n\taddLine( 'cn1', 'cn2', colorCross );\n\taddLine( 'cn3', 'cn4', colorCross );\n\n\taddLine( 'cf1', 'cf2', colorCross );\n\taddLine( 'cf3', 'cf4', colorCross );\n\n\tfunction addLine( a, b, color ) {\n\n\t\taddPoint( a, color );\n\t\taddPoint( b, color );\n\n\t}\n\n\tfunction addPoint( id, color ) {\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\tpointMap[ id ] = [];\n\n\t\t}\n\n\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.camera = camera;\n\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\tthis.matrix = camera.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.pointMap = pointMap;\n\n\tthis.update();\n\n}\n\nCameraHelper.prototype = Object.create( LineSegments.prototype );\nCameraHelper.prototype.constructor = CameraHelper;\n\nCameraHelper.prototype.update = function () {\n\n\tvar geometry, pointMap;\n\n\tvar vector = new Vector3();\n\tvar camera = new Camera();\n\n\tfunction setPoint( point, x, y, z ) {\n\n\t\tvector.set( x, y, z ).unproject( camera );\n\n\t\tvar points = pointMap[ point ];\n\n\t\tif ( points !== undefined ) {\n\n\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tposition.setXYZ( points[ i ], vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn function update() {\n\n\t\tgeometry = this.geometry;\n\t\tpointMap = this.pointMap;\n\n\t\tvar w = 1, h = 1;\n\n\t\t// we need just camera projection matrix\n\t\t// world matrix must be identity\n\n\t\tcamera.projectionMatrix.copy( this.camera.projectionMatrix );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', 0, 0, - 1 );\n\t\tsetPoint( 't', 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', - w, - h, - 1 );\n\t\tsetPoint( 'n2', w, - h, - 1 );\n\t\tsetPoint( 'n3', - w, h, - 1 );\n\t\tsetPoint( 'n4', w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', - w, - h, 1 );\n\t\tsetPoint( 'f2', w, - h, 1 );\n\t\tsetPoint( 'f3', - w, h, 1 );\n\t\tsetPoint( 'f4', w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', - w, 0, 1 );\n\t\tsetPoint( 'cf2', w, 0, 1 );\n\t\tsetPoint( 'cf3', 0, - h, 1 );\n\t\tsetPoint( 'cf4', 0, h, 1 );\n\n\t\tsetPoint( 'cn1', - w, 0, - 1 );\n\t\tsetPoint( 'cn2', w, 0, - 1 );\n\t\tsetPoint( 'cn3', 0, - h, - 1 );\n\t\tsetPoint( 'cn4', 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n */\n\nfunction BoxHelper( object, color ) {\n\n\tthis.object = object;\n\n\tif ( color === undefined ) color = 0xffff00;\n\n\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\tvar positions = new Float32Array( 8 * 3 );\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\tgeometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nBoxHelper.prototype = Object.create( LineSegments.prototype );\nBoxHelper.prototype.constructor = BoxHelper;\n\nBoxHelper.prototype.update = ( function () {\n\n\tvar box = new Box3();\n\n\treturn function update( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\tbox.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tvar min = box.min;\n\t\tvar max = box.max;\n\n\t\t/*\n\t\t  5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tvar position = this.geometry.attributes.position;\n\t\tvar array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t};\n\n} )();\n\nBoxHelper.prototype.setFromObject = function ( object ) {\n\n\tthis.object = object;\n\tthis.update();\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3Helper( box, hex ) {\n\n\tthis.type = 'Box3Helper';\n\n\tthis.box = box;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\tvar positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.geometry.computeBoundingSphere();\n\n}\n\nBox3Helper.prototype = Object.create( LineSegments.prototype );\nBox3Helper.prototype.constructor = Box3Helper;\n\nBox3Helper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar box = this.box;\n\n\tif ( box.isEmpty() ) return;\n\n\tbox.getCenter( this.position );\n\n\tbox.getSize( this.scale );\n\n\tthis.scale.multiplyScalar( 0.5 );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction PlaneHelper( plane, size, hex ) {\n\n\tthis.type = 'PlaneHelper';\n\n\tthis.plane = plane;\n\n\tthis.size = ( size === undefined ) ? 1 : size;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\tgeometry.computeBoundingSphere();\n\n\tLine.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t//\n\n\tvar positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\tvar geometry2 = new BufferGeometry();\n\tgeometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\tgeometry2.computeBoundingSphere();\n\n\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false } ) ) );\n\n}\n\nPlaneHelper.prototype = Object.create( Line.prototype );\nPlaneHelper.prototype.constructor = PlaneHelper;\n\nPlaneHelper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar scale = - this.plane.constant;\n\n\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\tthis.lookAt( this.plane.normal );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n * @author zz85 / http://github.com/zz85\n * @author bhouston / http://clara.io\n *\n * Creates an arrow for visualizing directions\n *\n * Parameters:\n *  dir - Vector3\n *  origin - Vector3\n *  length - Number\n *  color - color in hex value\n *  headLength - Number\n *  headWidth - Number\n */\n\nvar lineGeometry;\nvar coneGeometry;\n\nfunction ArrowHelper( dir, origin, length, color, headLength, headWidth ) {\n\n\t// dir is assumed to be normalized\n\n\tObject3D.call( this );\n\n\tif ( color === undefined ) color = 0xffff00;\n\tif ( length === undefined ) length = 1;\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tif ( lineGeometry === undefined ) {\n\n\t\tlineGeometry = new BufferGeometry();\n\t\tlineGeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\tconeGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\tconeGeometry.translate( 0, - 0.5, 0 );\n\n\t}\n\n\tthis.position.copy( origin );\n\n\tthis.line = new Line( lineGeometry, new LineBasicMaterial( { color: color } ) );\n\tthis.line.matrixAutoUpdate = false;\n\tthis.add( this.line );\n\n\tthis.cone = new Mesh( coneGeometry, new MeshBasicMaterial( { color: color } ) );\n\tthis.cone.matrixAutoUpdate = false;\n\tthis.add( this.cone );\n\n\tthis.setDirection( dir );\n\tthis.setLength( length, headLength, headWidth );\n\n}\n\nArrowHelper.prototype = Object.create( Object3D.prototype );\nArrowHelper.prototype.constructor = ArrowHelper;\n\nArrowHelper.prototype.setDirection = ( function () {\n\n\tvar axis = new Vector3();\n\tvar radians;\n\n\treturn function setDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\taxis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tradians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( axis, radians );\n\n\t\t}\n\n\t};\n\n}() );\n\nArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) {\n\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tthis.line.scale.set( 1, Math.max( 0, length - headLength ), 1 );\n\tthis.line.updateMatrix();\n\n\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\tthis.cone.position.y = length;\n\tthis.cone.updateMatrix();\n\n};\n\nArrowHelper.prototype.setColor = function ( color ) {\n\n\tthis.line.material.color.copy( color );\n\tthis.cone.material.color.copy( color );\n\n};\n\n/**\n * @author sroucheray / http://sroucheray.org/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AxesHelper( size ) {\n\n\tsize = size || 1;\n\n\tvar vertices = [\n\t\t0, 0, 0,\tsize, 0, 0,\n\t\t0, 0, 0,\t0, size, 0,\n\t\t0, 0, 0,\t0, 0, size\n\t];\n\n\tvar colors = [\n\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t0, 0, 1,\t0, 0.6, 1\n\t];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nAxesHelper.prototype = Object.create( LineSegments.prototype );\nAxesHelper.prototype.constructor = AxesHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n}\n\nvar LineStrip = 0;\n\nvar LinePieces = 1;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials ) {\n\n\tif ( materials === undefined ) materials = [];\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setDynamic( true );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nObject.assign( CurvePath.prototype, {\n\n\tcreatePointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\tvar pts = this.getPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from equidistant sampling along the path\n\n\t\tvar pts = this.getSpacedPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateGeometry: function ( points ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\tvar geometry = new Geometry();\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\n//\n\nObject.assign( Path.prototype, {\n\n\tfromPoints: function ( points ) {\n\n\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\tthis.setFromPoints( points );\n\n\t}\n\n} );\n\n//\n\nfunction ClosedSplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\tthis.closed = true;\n\n}\n\nClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction SplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction Spline( points ) {\n\n\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\nObject.assign( Spline.prototype, {\n\n\tinitFromArray: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t},\n\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t},\n\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nObject.assign( Loader.prototype, {\n\n\textractUrlBase: function ( url ) {\n\n\t\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\t\treturn LoaderUtils.extractUrlBase( url );\n\n\t}\n\n} );\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\n//\n\nObject.assign( Box2.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Box3.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nObject.assign( _Math, {\n\n\trandom16: function () {\n\n\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\treturn Math.random();\n\n\t},\n\n\tnearestPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\treturn _Math.floorPowerOfTwo( value );\n\n\t},\n\n\tnextPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\treturn _Math.ceilPowerOfTwo( value );\n\n\t}\n\n} );\n\nObject.assign( Matrix3.prototype, {\n\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\treturn vector.applyMatrix3( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( Matrix4.prototype, {\n\n\textractPosition: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\treturn this.copyPosition( m );\n\n\t},\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tgetPosition: function () {\n\n\t\tvar v1;\n\n\t\treturn function getPosition() {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\t\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\t\treturn v1.setFromMatrixColumn( this, 3 );\n\n\t\t};\n\n\t}(),\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\treturn this.makeRotationFromQuaternion( q );\n\n\t},\n\tmultiplyToArray: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector4: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t},\n\trotateAxis: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\tv.transformDirection( this );\n\n\t},\n\tcrossVector: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\ttranslate: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t},\n\trotateX: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t},\n\trotateY: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t},\n\trotateZ: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t},\n\trotateByAxis: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t},\n\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t}\n\n} );\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\nQuaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\treturn vector.applyQuaternion( this );\n\n};\n\nObject.assign( Ray.prototype, {\n\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionPlane: function ( plane ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\treturn this.intersectsPlane( plane );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t}\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tarea: function () {\n\n\t\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\t\treturn this.getArea();\n\n\t},\n\tbarycoordFromPoint: function ( point, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn this.getBarycoord( point, target );\n\n\t},\n\tmidpoint: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\t\treturn this.getMidpoint( target );\n\n\t},\n\tnormal: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn this.getNormal( target );\n\n\t},\n\tplane: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\t\treturn this.getPlane( target );\n\n\t}\n\n} );\n\nObject.assign( Triangle, {\n\n\tbarycoordFromPoint: function ( point, a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n\t},\n\tnormal: function ( a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn Triangle.getNormal( a, b, c, target );\n\n\t}\n\n} );\n\nObject.assign( Shape.prototype, {\n\n\textractAllPoints: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\treturn this.extractPoints( divisions );\n\n\t},\n\textrude: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\treturn new ExtrudeGeometry( this, options );\n\n\t},\n\tmakeGeometry: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\treturn new ShapeGeometry( this, options );\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector3.prototype, {\n\n\tsetEulerFromRotationMatrix: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t},\n\tsetEulerFromQuaternion: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t},\n\tgetPositionFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\treturn this.setFromMatrixPosition( m );\n\n\t},\n\tgetScaleFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\treturn this.setFromMatrixScale( m );\n\n\t},\n\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t},\n\tapplyProjection: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\treturn this.applyMatrix4( m );\n\n\t},\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector4.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\n//\n\nObject.assign( Geometry.prototype, {\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t}\n\n} );\n\nObject.assign( Object3D.prototype, {\n\n\tgetChildByName: function ( name ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\treturn this.getObjectByName( name );\n\n\t},\n\trenderDepth: function () {\n\n\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t},\n\ttranslate: function ( distance, axis ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\treturn this.translateOnAxis( axis, distance );\n\n\t},\n\tgetWorldRotation: function () {\n\n\t\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n\t}\n\n} );\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( LOD.prototype, {\n\n\tobjects: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\treturn this.levels;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t},\n\tset: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\treturn this.arcLengthDivisions;\n\n\t},\n\tset: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\tthis.arcLengthDivisions = value;\n\n\t}\n\n} );\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( \"THREE.PerspectiveCamera.setLens is deprecated. \" +\n\t\t\t\"Use .setFocalLength and .filmGauge for a photographic setup.\" );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( BufferGeometry.prototype, {\n\n\taddIndex: function ( index ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\tthis.setIndex( index );\n\n\t},\n\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\tif ( indexOffset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t}\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\tthis.addGroup( start, count );\n\n\t},\n\tclearDrawCalls: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\tthis.clearGroups();\n\n\t},\n\tcomputeTangents: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeOffsets: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( ExtrudeBufferGeometry.prototype, {\n\n\tgetArrays: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' );\n\n\t},\n\n\taddShapeList: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' );\n\n\t},\n\n\taddShape: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Uniform.prototype, {\n\n\tdynamic: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t}\n\t},\n\tonUpdate: {\n\t\tvalue: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\treturn this;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\tmetal: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( WebGLRenderer.prototype, {\n\n\tgetCurrentRenderTarget: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\treturn this.getRenderTarget();\n\n\t},\n\n\tgetMaxAnisotropy: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\t\treturn this.capabilities.getMaxAnisotropy();\n\n\t},\n\n\tgetPrecision: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\treturn this.capabilities.precision;\n\n\t},\n\n\tresetGLState: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\t\treturn this.state.reset();\n\n\t},\n\n\tsupportsFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_float' );\n\n\t},\n\tsupportsHalfFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_half_float' );\n\n\t},\n\tsupportsStandardDerivatives: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\t\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n\t},\n\tsupportsCompressedTextureS3TC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t},\n\tsupportsCompressedTexturePVRTC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t},\n\tsupportsBlendMinMax: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\t\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n\t},\n\tsupportsVertexTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\t\treturn this.capabilities.vertexTextures;\n\n\t},\n\tsupportsInstancedArrays: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n\t},\n\tenableScissorTest: function ( boolean ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\t\tthis.setScissorTest( boolean );\n\n\t},\n\tinitMaterial: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n\t},\n\taddPrePlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n\t},\n\taddPostPlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n\t},\n\tupdateShadowMap: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n\t},\n\tsetFaceCulling: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n} );\n\nObject.defineProperties( WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( WebVRManager.prototype, {\n\n\tstanding: {\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebVRManager: .standing has been removed.' );\n\n\t\t}\n\t}\n\n} );\n\n//\n\nAudio.prototype.load = function ( file ) {\n\n\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\tvar scope = this;\n\tvar audioLoader = new AudioLoader();\n\taudioLoader.load( file, function ( buffer ) {\n\n\t\tscope.setBuffer( buffer );\n\n\t} );\n\treturn this;\n\n};\n\nAudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\nCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\n//\n\nvar GeometryUtils = {\n\n\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\n\t\tvar matrix;\n\n\t\tif ( geometry2.isMesh ) {\n\n\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\n\t\t\tmatrix = geometry2.matrix;\n\t\t\tgeometry2 = geometry2.geometry;\n\n\t\t}\n\n\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\n\n\t},\n\n\tcenter: function ( geometry ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\n\t\treturn geometry.center();\n\n\t}\n\n};\n\nvar ImageUtils = {\n\n\tcrossOrigin: undefined,\n\n\tloadTexture: function ( url, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\t\tvar loader = new TextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tvar texture = loader.load( url, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t},\n\n\tloadTextureCube: function ( urls, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\t\tvar loader = new CubeTextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tvar texture = loader.load( urls, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t},\n\n\tloadCompressedTexture: function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n\t},\n\n\tloadCompressedTextureCube: function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n\t}\n\n};\n\n//\n\nfunction Projector() {\n\n\tconsole.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' );\n\n\tthis.projectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\n\t\tvector.project( camera );\n\n\t};\n\n\tthis.unprojectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\n\t\tvector.unproject( camera );\n\n\t};\n\n\tthis.pickingRay = function () {\n\n\t\tconsole.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' );\n\n\t};\n\n}\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' );\n\n\tthis.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tthis.clear = function () {};\n\tthis.render = function () {};\n\tthis.setClearColor = function () {};\n\tthis.setSize = function () {};\n\n}\n\n//\n\nvar SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/js/objects/Lensflare.js' );\n\n}\n\nexport { WebGLRenderTargetCube, WebGLRenderTarget, WebGLRenderer, ShaderLib, UniformsLib, UniformsUtils, ShaderChunk, FogExp2, Fog, Scene, Sprite, LOD, SkinnedMesh, Skeleton, Bone, Mesh, LineSegments, LineLoop, Line, Points, Group, VideoTexture, DataTexture, CompressedTexture, CubeTexture, CanvasTexture, DepthTexture, Texture, CompressedTextureLoader, DataTextureLoader, CubeTextureLoader, TextureLoader, ObjectLoader, MaterialLoader, BufferGeometryLoader, DefaultLoadingManager, LoadingManager, JSONLoader, ImageLoader, ImageBitmapLoader, FontLoader, FileLoader, Loader, LoaderUtils, Cache, AudioLoader, SpotLightShadow, SpotLight, PointLight, RectAreaLight, HemisphereLight, DirectionalLightShadow, DirectionalLight, AmbientLight, LightShadow, Light, StereoCamera, PerspectiveCamera, OrthographicCamera, CubeCamera, ArrayCamera, Camera, AudioListener, PositionalAudio, AudioContext, AudioAnalyser, Audio, VectorKeyframeTrack, StringKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack, ColorKeyframeTrack, BooleanKeyframeTrack, PropertyMixer, PropertyBinding, KeyframeTrack, AnimationUtils, AnimationObjectGroup, AnimationMixer, AnimationClip, Uniform, InstancedBufferGeometry, BufferGeometry, Geometry, InterleavedBufferAttribute, InstancedInterleavedBuffer, InterleavedBuffer, InstancedBufferAttribute, Face3, Object3D, Raycaster, Layers, EventDispatcher, Clock, QuaternionLinearInterpolant, LinearInterpolant, DiscreteInterpolant, CubicInterpolant, Interpolant, Triangle, _Math as Math, Spherical, Cylindrical, Plane, Frustum, Sphere, Ray, Matrix4, Matrix3, Box3, Box2, Line3, Euler, Vector4, Vector3, Vector2, Quaternion, Color, ImmediateRenderObject, VertexNormalsHelper, SpotLightHelper, SkeletonHelper, PointLightHelper, RectAreaLightHelper, HemisphereLightHelper, GridHelper, PolarGridHelper, FaceNormalsHelper, DirectionalLightHelper, CameraHelper, BoxHelper, Box3Helper, PlaneHelper, ArrowHelper, AxesHelper, Shape, Path, ShapePath, Font, CurvePath, Curve, ShapeUtils, WebGLUtils, WireframeGeometry, ParametricGeometry, ParametricBufferGeometry, TetrahedronGeometry, TetrahedronBufferGeometry, OctahedronGeometry, OctahedronBufferGeometry, IcosahedronGeometry, IcosahedronBufferGeometry, DodecahedronGeometry, DodecahedronBufferGeometry, PolyhedronGeometry, PolyhedronBufferGeometry, TubeGeometry, TubeBufferGeometry, TorusKnotGeometry, TorusKnotBufferGeometry, TorusGeometry, TorusBufferGeometry, TextGeometry, TextBufferGeometry, SphereGeometry, SphereBufferGeometry, RingGeometry, RingBufferGeometry, PlaneGeometry, PlaneBufferGeometry, LatheGeometry, LatheBufferGeometry, ShapeGeometry, ShapeBufferGeometry, ExtrudeGeometry, ExtrudeBufferGeometry, EdgesGeometry, ConeGeometry, ConeBufferGeometry, CylinderGeometry, CylinderBufferGeometry, CircleGeometry, CircleBufferGeometry, BoxGeometry, BoxBufferGeometry, ShadowMaterial, SpriteMaterial, RawShaderMaterial, ShaderMaterial, PointsMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshPhongMaterial, MeshToonMaterial, MeshNormalMaterial, MeshLambertMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshBasicMaterial, LineDashedMaterial, LineBasicMaterial, Material, Float64BufferAttribute, Float32BufferAttribute, Uint32BufferAttribute, Int32BufferAttribute, Uint16BufferAttribute, Int16BufferAttribute, Uint8ClampedBufferAttribute, Uint8BufferAttribute, Int8BufferAttribute, BufferAttribute, ArcCurve, CatmullRomCurve3, CubicBezierCurve, CubicBezierCurve3, EllipseCurve, LineCurve, LineCurve3, QuadraticBezierCurve, QuadraticBezierCurve3, SplineCurve, REVISION, MOUSE, CullFaceNone, CullFaceBack, CullFaceFront, CullFaceFrontBack, FrontFaceDirectionCW, FrontFaceDirectionCCW, BasicShadowMap, PCFShadowMap, PCFSoftShadowMap, FrontSide, BackSide, DoubleSide, FlatShading, SmoothShading, NoColors, FaceColors, VertexColors, NoBlending, NormalBlending, AdditiveBlending, SubtractiveBlending, MultiplyBlending, CustomBlending, AddEquation, SubtractEquation, ReverseSubtractEquation, MinEquation, MaxEquation, ZeroFactor, OneFactor, SrcColorFactor, OneMinusSrcColorFactor, SrcAlphaFactor, OneMinusSrcAlphaFactor, DstAlphaFactor, OneMinusDstAlphaFactor, DstColorFactor, OneMinusDstColorFactor, SrcAlphaSaturateFactor, NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth, MultiplyOperation, MixOperation, AddOperation, NoToneMapping, LinearToneMapping, ReinhardToneMapping, Uncharted2ToneMapping, CineonToneMapping, UVMapping, CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping, SphericalReflectionMapping, CubeUVReflectionMapping, CubeUVRefractionMapping, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, NearestFilter, NearestMipMapNearestFilter, NearestMipMapLinearFilter, LinearFilter, LinearMipMapNearestFilter, LinearMipMapLinearFilter, UnsignedByteType, ByteType, ShortType, UnsignedShortType, IntType, UnsignedIntType, FloatType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedInt248Type, AlphaFormat, RGBFormat, RGBAFormat, LuminanceFormat, LuminanceAlphaFormat, RGBEFormat, DepthFormat, DepthStencilFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, LoopOnce, LoopRepeat, LoopPingPong, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, ZeroCurvatureEnding, ZeroSlopeEnding, WrapAroundEnding, TrianglesDrawMode, TriangleStripDrawMode, TriangleFanDrawMode, LinearEncoding, sRGBEncoding, GammaEncoding, RGBEEncoding, LogLuvEncoding, RGBM7Encoding, RGBM16Encoding, RGBDEncoding, BasicDepthPacking, RGBADepthPacking, BoxGeometry as CubeGeometry, Face4, LineStrip, LinePieces, MeshFaceMaterial, MultiMaterial, PointCloud, Particle, ParticleSystem, PointCloudMaterial, ParticleBasicMaterial, ParticleSystemMaterial, Vertex, DynamicBufferAttribute, Int8Attribute, Uint8Attribute, Uint8ClampedAttribute, Int16Attribute, Uint16Attribute, Int32Attribute, Uint32Attribute, Float32Attribute, Float64Attribute, ClosedSplineCurve3, SplineCurve3, Spline, AxisHelper, BoundingBoxHelper, EdgesHelper, WireframeHelper, XHRLoader, BinaryTextureLoader, GeometryUtils, ImageUtils, Projector, CanvasRenderer, SceneUtils, LensFlare };\n","/**\n * dat-gui JavaScript Controller Library\n * http://code.google.com/p/dat-gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n  if (!css) {\n    return;\n  }\n  if (typeof window === 'undefined') {\n    return;\n  }\n\n  var style = document.createElement('style');\n\n  style.setAttribute('type', 'text/css');\n  style.innerHTML = css;\n  document.head.appendChild(style);\n\n  return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n  var colorFormat = color.__state.conversionName.toString();\n  var r = Math.round(color.r);\n  var g = Math.round(color.g);\n  var b = Math.round(color.b);\n  var a = color.a;\n  var h = Math.round(color.h);\n  var s = color.s.toFixed(1);\n  var v = color.v.toFixed(1);\n  if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n    var str = color.hex.toString(16);\n    while (str.length < 6) {\n      str = '0' + str;\n    }\n    return '#' + str;\n  } else if (colorFormat === 'CSS_RGB') {\n    return 'rgb(' + r + ',' + g + ',' + b + ')';\n  } else if (colorFormat === 'CSS_RGBA') {\n    return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n  } else if (colorFormat === 'HEX') {\n    return '0x' + color.hex.toString(16);\n  } else if (colorFormat === 'RGB_ARRAY') {\n    return '[' + r + ',' + g + ',' + b + ']';\n  } else if (colorFormat === 'RGBA_ARRAY') {\n    return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n  } else if (colorFormat === 'RGB_OBJ') {\n    return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n  } else if (colorFormat === 'RGBA_OBJ') {\n    return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n  } else if (colorFormat === 'HSV_OBJ') {\n    return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n  } else if (colorFormat === 'HSVA_OBJ') {\n    return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n  }\n  return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n  BREAK: {},\n  extend: function extend(target) {\n    this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n      var keys = this.isObject(obj) ? Object.keys(obj) : [];\n      keys.forEach(function (key) {\n        if (!this.isUndefined(obj[key])) {\n          target[key] = obj[key];\n        }\n      }.bind(this));\n    }, this);\n    return target;\n  },\n  defaults: function defaults(target) {\n    this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n      var keys = this.isObject(obj) ? Object.keys(obj) : [];\n      keys.forEach(function (key) {\n        if (this.isUndefined(target[key])) {\n          target[key] = obj[key];\n        }\n      }.bind(this));\n    }, this);\n    return target;\n  },\n  compose: function compose() {\n    var toCall = ARR_SLICE.call(arguments);\n    return function () {\n      var args = ARR_SLICE.call(arguments);\n      for (var i = toCall.length - 1; i >= 0; i--) {\n        args = [toCall[i].apply(this, args)];\n      }\n      return args[0];\n    };\n  },\n  each: function each(obj, itr, scope) {\n    if (!obj) {\n      return;\n    }\n    if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n      obj.forEach(itr, scope);\n    } else if (obj.length === obj.length + 0) {\n      var key = void 0;\n      var l = void 0;\n      for (key = 0, l = obj.length; key < l; key++) {\n        if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n          return;\n        }\n      }\n    } else {\n      for (var _key in obj) {\n        if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n          return;\n        }\n      }\n    }\n  },\n  defer: function defer(fnc) {\n    setTimeout(fnc, 0);\n  },\n  debounce: function debounce(func, threshold, callImmediately) {\n    var timeout = void 0;\n    return function () {\n      var obj = this;\n      var args = arguments;\n      function delayed() {\n        timeout = null;\n        if (!callImmediately) func.apply(obj, args);\n      }\n      var callNow = callImmediately || !timeout;\n      clearTimeout(timeout);\n      timeout = setTimeout(delayed, threshold);\n      if (callNow) {\n        func.apply(obj, args);\n      }\n    };\n  },\n  toArray: function toArray(obj) {\n    if (obj.toArray) return obj.toArray();\n    return ARR_SLICE.call(obj);\n  },\n  isUndefined: function isUndefined(obj) {\n    return obj === undefined;\n  },\n  isNull: function isNull(obj) {\n    return obj === null;\n  },\n  isNaN: function (_isNaN) {\n    function isNaN(_x) {\n      return _isNaN.apply(this, arguments);\n    }\n    isNaN.toString = function () {\n      return _isNaN.toString();\n    };\n    return isNaN;\n  }(function (obj) {\n    return isNaN(obj);\n  }),\n  isArray: Array.isArray || function (obj) {\n    return obj.constructor === Array;\n  },\n  isObject: function isObject(obj) {\n    return obj === Object(obj);\n  },\n  isNumber: function isNumber(obj) {\n    return obj === obj + 0;\n  },\n  isString: function isString(obj) {\n    return obj === obj + '';\n  },\n  isBoolean: function isBoolean(obj) {\n    return obj === false || obj === true;\n  },\n  isFunction: function isFunction(obj) {\n    return Object.prototype.toString.call(obj) === '[object Function]';\n  }\n};\n\nvar INTERPRETATIONS = [\n{\n  litmus: Common.isString,\n  conversions: {\n    THREE_CHAR_HEX: {\n      read: function read(original) {\n        var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n        if (test === null) {\n          return false;\n        }\n        return {\n          space: 'HEX',\n          hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n        };\n      },\n      write: colorToString\n    },\n    SIX_CHAR_HEX: {\n      read: function read(original) {\n        var test = original.match(/^#([A-F0-9]{6})$/i);\n        if (test === null) {\n          return false;\n        }\n        return {\n          space: 'HEX',\n          hex: parseInt('0x' + test[1].toString(), 0)\n        };\n      },\n      write: colorToString\n    },\n    CSS_RGB: {\n      read: function read(original) {\n        var test = original.match(/^rgb\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);\n        if (test === null) {\n          return false;\n        }\n        return {\n          space: 'RGB',\n          r: parseFloat(test[1]),\n          g: parseFloat(test[2]),\n          b: parseFloat(test[3])\n        };\n      },\n      write: colorToString\n    },\n    CSS_RGBA: {\n      read: function read(original) {\n        var test = original.match(/^rgba\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);\n        if (test === null) {\n          return false;\n        }\n        return {\n          space: 'RGB',\n          r: parseFloat(test[1]),\n          g: parseFloat(test[2]),\n          b: parseFloat(test[3]),\n          a: parseFloat(test[4])\n        };\n      },\n      write: colorToString\n    }\n  }\n},\n{\n  litmus: Common.isNumber,\n  conversions: {\n    HEX: {\n      read: function read(original) {\n        return {\n          space: 'HEX',\n          hex: original,\n          conversionName: 'HEX'\n        };\n      },\n      write: function write(color) {\n        return color.hex;\n      }\n    }\n  }\n},\n{\n  litmus: Common.isArray,\n  conversions: {\n    RGB_ARRAY: {\n      read: function read(original) {\n        if (original.length !== 3) {\n          return false;\n        }\n        return {\n          space: 'RGB',\n          r: original[0],\n          g: original[1],\n          b: original[2]\n        };\n      },\n      write: function write(color) {\n        return [color.r, color.g, color.b];\n      }\n    },\n    RGBA_ARRAY: {\n      read: function read(original) {\n        if (original.length !== 4) return false;\n        return {\n          space: 'RGB',\n          r: original[0],\n          g: original[1],\n          b: original[2],\n          a: original[3]\n        };\n      },\n      write: function write(color) {\n        return [color.r, color.g, color.b, color.a];\n      }\n    }\n  }\n},\n{\n  litmus: Common.isObject,\n  conversions: {\n    RGBA_OBJ: {\n      read: function read(original) {\n        if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n          return {\n            space: 'RGB',\n            r: original.r,\n            g: original.g,\n            b: original.b,\n            a: original.a\n          };\n        }\n        return false;\n      },\n      write: function write(color) {\n        return {\n          r: color.r,\n          g: color.g,\n          b: color.b,\n          a: color.a\n        };\n      }\n    },\n    RGB_OBJ: {\n      read: function read(original) {\n        if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n          return {\n            space: 'RGB',\n            r: original.r,\n            g: original.g,\n            b: original.b\n          };\n        }\n        return false;\n      },\n      write: function write(color) {\n        return {\n          r: color.r,\n          g: color.g,\n          b: color.b\n        };\n      }\n    },\n    HSVA_OBJ: {\n      read: function read(original) {\n        if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n          return {\n            space: 'HSV',\n            h: original.h,\n            s: original.s,\n            v: original.v,\n            a: original.a\n          };\n        }\n        return false;\n      },\n      write: function write(color) {\n        return {\n          h: color.h,\n          s: color.s,\n          v: color.v,\n          a: color.a\n        };\n      }\n    },\n    HSV_OBJ: {\n      read: function read(original) {\n        if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n          return {\n            space: 'HSV',\n            h: original.h,\n            s: original.s,\n            v: original.v\n          };\n        }\n        return false;\n      },\n      write: function write(color) {\n        return {\n          h: color.h,\n          s: color.s,\n          v: color.v\n        };\n      }\n    }\n  }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n  toReturn = false;\n  var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n  Common.each(INTERPRETATIONS, function (family) {\n    if (family.litmus(original)) {\n      Common.each(family.conversions, function (conversion, conversionName) {\n        result = conversion.read(original);\n        if (toReturn === false && result !== false) {\n          toReturn = result;\n          result.conversionName = conversionName;\n          result.conversion = conversion;\n          return Common.BREAK;\n        }\n      });\n      return Common.BREAK;\n    }\n  });\n  return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n  hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n    var hi = Math.floor(h / 60) % 6;\n    var f = h / 60 - Math.floor(h / 60);\n    var p = v * (1.0 - s);\n    var q = v * (1.0 - f * s);\n    var t = v * (1.0 - (1.0 - f) * s);\n    var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n    return {\n      r: c[0] * 255,\n      g: c[1] * 255,\n      b: c[2] * 255\n    };\n  },\n  rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n    var min = Math.min(r, g, b);\n    var max = Math.max(r, g, b);\n    var delta = max - min;\n    var h = void 0;\n    var s = void 0;\n    if (max !== 0) {\n      s = delta / max;\n    } else {\n      return {\n        h: NaN,\n        s: 0,\n        v: 0\n      };\n    }\n    if (r === max) {\n      h = (g - b) / delta;\n    } else if (g === max) {\n      h = 2 + (b - r) / delta;\n    } else {\n      h = 4 + (r - g) / delta;\n    }\n    h /= 6;\n    if (h < 0) {\n      h += 1;\n    }\n    return {\n      h: h * 360,\n      s: s,\n      v: max / 255\n    };\n  },\n  rgb_to_hex: function rgb_to_hex(r, g, b) {\n    var hex = this.hex_with_component(0, 2, r);\n    hex = this.hex_with_component(hex, 1, g);\n    hex = this.hex_with_component(hex, 0, b);\n    return hex;\n  },\n  component_from_hex: function component_from_hex(hex, componentIndex) {\n    return hex >> componentIndex * 8 & 0xFF;\n  },\n  hex_with_component: function hex_with_component(hex, componentIndex, value) {\n    return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n  }\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n  if (object === null) object = Function.prototype;\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent === null) {\n      return undefined;\n    } else {\n      return get(parent, property, receiver);\n    }\n  } else if (\"value\" in desc) {\n    return desc.value;\n  } else {\n    var getter = desc.get;\n\n    if (getter === undefined) {\n      return undefined;\n    }\n\n    return getter.call(receiver);\n  }\n};\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Color = function () {\n  function Color() {\n    classCallCheck(this, Color);\n    this.__state = interpret.apply(this, arguments);\n    if (this.__state === false) {\n      throw new Error('Failed to interpret color arguments');\n    }\n    this.__state.a = this.__state.a || 1;\n  }\n  createClass(Color, [{\n    key: 'toString',\n    value: function toString() {\n      return colorToString(this);\n    }\n  }, {\n    key: 'toHexString',\n    value: function toHexString() {\n      return colorToString(this, true);\n    }\n  }, {\n    key: 'toOriginal',\n    value: function toOriginal() {\n      return this.__state.conversion.write(this);\n    }\n  }]);\n  return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n  Object.defineProperty(target, component, {\n    get: function get$$1() {\n      if (this.__state.space === 'RGB') {\n        return this.__state[component];\n      }\n      Color.recalculateRGB(this, component, componentHexIndex);\n      return this.__state[component];\n    },\n    set: function set$$1(v) {\n      if (this.__state.space !== 'RGB') {\n        Color.recalculateRGB(this, component, componentHexIndex);\n        this.__state.space = 'RGB';\n      }\n      this.__state[component] = v;\n    }\n  });\n}\nfunction defineHSVComponent(target, component) {\n  Object.defineProperty(target, component, {\n    get: function get$$1() {\n      if (this.__state.space === 'HSV') {\n        return this.__state[component];\n      }\n      Color.recalculateHSV(this);\n      return this.__state[component];\n    },\n    set: function set$$1(v) {\n      if (this.__state.space !== 'HSV') {\n        Color.recalculateHSV(this);\n        this.__state.space = 'HSV';\n      }\n      this.__state[component] = v;\n    }\n  });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n  if (color.__state.space === 'HEX') {\n    color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n  } else if (color.__state.space === 'HSV') {\n    Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n  } else {\n    throw new Error('Corrupted color state');\n  }\n};\nColor.recalculateHSV = function (color) {\n  var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n  Common.extend(color.__state, {\n    s: result.s,\n    v: result.v\n  });\n  if (!Common.isNaN(result.h)) {\n    color.__state.h = result.h;\n  } else if (Common.isUndefined(color.__state.h)) {\n    color.__state.h = 0;\n  }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n  get: function get$$1() {\n    return this.__state.a;\n  },\n  set: function set$$1(v) {\n    this.__state.a = v;\n  }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n  get: function get$$1() {\n    if (!this.__state.space !== 'HEX') {\n      this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n    }\n    return this.__state.hex;\n  },\n  set: function set$$1(v) {\n    this.__state.space = 'HEX';\n    this.__state.hex = v;\n  }\n});\n\nvar Controller = function () {\n  function Controller(object, property) {\n    classCallCheck(this, Controller);\n    this.initialValue = object[property];\n    this.domElement = document.createElement('div');\n    this.object = object;\n    this.property = property;\n    this.__onChange = undefined;\n    this.__onFinishChange = undefined;\n  }\n  createClass(Controller, [{\n    key: 'onChange',\n    value: function onChange(fnc) {\n      this.__onChange = fnc;\n      return this;\n    }\n  }, {\n    key: 'onFinishChange',\n    value: function onFinishChange(fnc) {\n      this.__onFinishChange = fnc;\n      return this;\n    }\n  }, {\n    key: 'setValue',\n    value: function setValue(newValue) {\n      this.object[this.property] = newValue;\n      if (this.__onChange) {\n        this.__onChange.call(this, newValue);\n      }\n      this.updateDisplay();\n      return this;\n    }\n  }, {\n    key: 'getValue',\n    value: function getValue() {\n      return this.object[this.property];\n    }\n  }, {\n    key: 'updateDisplay',\n    value: function updateDisplay() {\n      return this;\n    }\n  }, {\n    key: 'isModified',\n    value: function isModified() {\n      return this.initialValue !== this.getValue();\n    }\n  }]);\n  return Controller;\n}();\n\nvar EVENT_MAP = {\n  HTMLEvents: ['change'],\n  MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n  KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n  Common.each(v, function (e) {\n    EVENT_MAP_INV[e] = k;\n  });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n  if (val === '0' || Common.isUndefined(val)) {\n    return 0;\n  }\n  var match = val.match(CSS_VALUE_PIXELS);\n  if (!Common.isNull(match)) {\n    return parseFloat(match[1]);\n  }\n  return 0;\n}\nvar dom = {\n  makeSelectable: function makeSelectable(elem, selectable) {\n    if (elem === undefined || elem.style === undefined) return;\n    elem.onselectstart = selectable ? function () {\n      return false;\n    } : function () {};\n    elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n    elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n    elem.unselectable = selectable ? 'on' : 'off';\n  },\n  makeFullscreen: function makeFullscreen(elem, hor, vert) {\n    var vertical = vert;\n    var horizontal = hor;\n    if (Common.isUndefined(horizontal)) {\n      horizontal = true;\n    }\n    if (Common.isUndefined(vertical)) {\n      vertical = true;\n    }\n    elem.style.position = 'absolute';\n    if (horizontal) {\n      elem.style.left = 0;\n      elem.style.right = 0;\n    }\n    if (vertical) {\n      elem.style.top = 0;\n      elem.style.bottom = 0;\n    }\n  },\n  fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n    var params = pars || {};\n    var className = EVENT_MAP_INV[eventType];\n    if (!className) {\n      throw new Error('Event type ' + eventType + ' not supported.');\n    }\n    var evt = document.createEvent(className);\n    switch (className) {\n      case 'MouseEvents':\n        {\n          var clientX = params.x || params.clientX || 0;\n          var clientY = params.y || params.clientY || 0;\n          evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n          0,\n          clientX,\n          clientY,\n          false, false, false, false, 0, null);\n          break;\n        }\n      case 'KeyboardEvents':\n        {\n          var init = evt.initKeyboardEvent || evt.initKeyEvent;\n          Common.defaults(params, {\n            cancelable: true,\n            ctrlKey: false,\n            altKey: false,\n            shiftKey: false,\n            metaKey: false,\n            keyCode: undefined,\n            charCode: undefined\n          });\n          init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n          break;\n        }\n      default:\n        {\n          evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n          break;\n        }\n    }\n    Common.defaults(evt, aux);\n    elem.dispatchEvent(evt);\n  },\n  bind: function bind(elem, event, func, newBool) {\n    var bool = newBool || false;\n    if (elem.addEventListener) {\n      elem.addEventListener(event, func, bool);\n    } else if (elem.attachEvent) {\n      elem.attachEvent('on' + event, func);\n    }\n    return dom;\n  },\n  unbind: function unbind(elem, event, func, newBool) {\n    var bool = newBool || false;\n    if (elem.removeEventListener) {\n      elem.removeEventListener(event, func, bool);\n    } else if (elem.detachEvent) {\n      elem.detachEvent('on' + event, func);\n    }\n    return dom;\n  },\n  addClass: function addClass(elem, className) {\n    if (elem.className === undefined) {\n      elem.className = className;\n    } else if (elem.className !== className) {\n      var classes = elem.className.split(/ +/);\n      if (classes.indexOf(className) === -1) {\n        classes.push(className);\n        elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n      }\n    }\n    return dom;\n  },\n  removeClass: function removeClass(elem, className) {\n    if (className) {\n      if (elem.className === className) {\n        elem.removeAttribute('class');\n      } else {\n        var classes = elem.className.split(/ +/);\n        var index = classes.indexOf(className);\n        if (index !== -1) {\n          classes.splice(index, 1);\n          elem.className = classes.join(' ');\n        }\n      }\n    } else {\n      elem.className = undefined;\n    }\n    return dom;\n  },\n  hasClass: function hasClass(elem, className) {\n    return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n  },\n  getWidth: function getWidth(elem) {\n    var style = getComputedStyle(elem);\n    return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n  },\n  getHeight: function getHeight(elem) {\n    var style = getComputedStyle(elem);\n    return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n  },\n  getOffset: function getOffset(el) {\n    var elem = el;\n    var offset = { left: 0, top: 0 };\n    if (elem.offsetParent) {\n      do {\n        offset.left += elem.offsetLeft;\n        offset.top += elem.offsetTop;\n        elem = elem.offsetParent;\n      } while (elem);\n    }\n    return offset;\n  },\n  isActive: function isActive(elem) {\n    return elem === document.activeElement && (elem.type || elem.href);\n  }\n};\n\nvar BooleanController = function (_Controller) {\n  inherits(BooleanController, _Controller);\n  function BooleanController(object, property) {\n    classCallCheck(this, BooleanController);\n    var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n    var _this = _this2;\n    _this2.__prev = _this2.getValue();\n    _this2.__checkbox = document.createElement('input');\n    _this2.__checkbox.setAttribute('type', 'checkbox');\n    function onChange() {\n      _this.setValue(!_this.__prev);\n    }\n    dom.bind(_this2.__checkbox, 'change', onChange, false);\n    _this2.domElement.appendChild(_this2.__checkbox);\n    _this2.updateDisplay();\n    return _this2;\n  }\n  createClass(BooleanController, [{\n    key: 'setValue',\n    value: function setValue(v) {\n      var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n      if (this.__onFinishChange) {\n        this.__onFinishChange.call(this, this.getValue());\n      }\n      this.__prev = this.getValue();\n      return toReturn;\n    }\n  }, {\n    key: 'updateDisplay',\n    value: function updateDisplay() {\n      if (this.getValue() === true) {\n        this.__checkbox.setAttribute('checked', 'checked');\n        this.__checkbox.checked = true;\n        this.__prev = true;\n      } else {\n        this.__checkbox.checked = false;\n        this.__prev = false;\n      }\n      return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n    }\n  }]);\n  return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n  inherits(OptionController, _Controller);\n  function OptionController(object, property, opts) {\n    classCallCheck(this, OptionController);\n    var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n    var options = opts;\n    var _this = _this2;\n    _this2.__select = document.createElement('select');\n    if (Common.isArray(options)) {\n      var map = {};\n      Common.each(options, function (element) {\n        map[element] = element;\n      });\n      options = map;\n    }\n    Common.each(options, function (value, key) {\n      var opt = document.createElement('option');\n      opt.innerHTML = key;\n      opt.setAttribute('value', value);\n      _this.__select.appendChild(opt);\n    });\n    _this2.updateDisplay();\n    dom.bind(_this2.__select, 'change', function () {\n      var desiredValue = this.options[this.selectedIndex].value;\n      _this.setValue(desiredValue);\n    });\n    _this2.domElement.appendChild(_this2.__select);\n    return _this2;\n  }\n  createClass(OptionController, [{\n    key: 'setValue',\n    value: function setValue(v) {\n      var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n      if (this.__onFinishChange) {\n        this.__onFinishChange.call(this, this.getValue());\n      }\n      return toReturn;\n    }\n  }, {\n    key: 'updateDisplay',\n    value: function updateDisplay() {\n      if (dom.isActive(this.__select)) return this;\n      this.__select.value = this.getValue();\n      return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n    }\n  }]);\n  return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n  inherits(StringController, _Controller);\n  function StringController(object, property) {\n    classCallCheck(this, StringController);\n    var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n    var _this = _this2;\n    function onChange() {\n      _this.setValue(_this.__input.value);\n    }\n    function onBlur() {\n      if (_this.__onFinishChange) {\n        _this.__onFinishChange.call(_this, _this.getValue());\n      }\n    }\n    _this2.__input = document.createElement('input');\n    _this2.__input.setAttribute('type', 'text');\n    dom.bind(_this2.__input, 'keyup', onChange);\n    dom.bind(_this2.__input, 'change', onChange);\n    dom.bind(_this2.__input, 'blur', onBlur);\n    dom.bind(_this2.__input, 'keydown', function (e) {\n      if (e.keyCode === 13) {\n        this.blur();\n      }\n    });\n    _this2.updateDisplay();\n    _this2.domElement.appendChild(_this2.__input);\n    return _this2;\n  }\n  createClass(StringController, [{\n    key: 'updateDisplay',\n    value: function updateDisplay() {\n      if (!dom.isActive(this.__input)) {\n        this.__input.value = this.getValue();\n      }\n      return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n    }\n  }]);\n  return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n  var _x = x.toString();\n  if (_x.indexOf('.') > -1) {\n    return _x.length - _x.indexOf('.') - 1;\n  }\n  return 0;\n}\nvar NumberController = function (_Controller) {\n  inherits(NumberController, _Controller);\n  function NumberController(object, property, params) {\n    classCallCheck(this, NumberController);\n    var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n    var _params = params || {};\n    _this.__min = _params.min;\n    _this.__max = _params.max;\n    _this.__step = _params.step;\n    if (Common.isUndefined(_this.__step)) {\n      if (_this.initialValue === 0) {\n        _this.__impliedStep = 1;\n      } else {\n        _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n      }\n    } else {\n      _this.__impliedStep = _this.__step;\n    }\n    _this.__precision = numDecimals(_this.__impliedStep);\n    return _this;\n  }\n  createClass(NumberController, [{\n    key: 'setValue',\n    value: function setValue(v) {\n      var _v = v;\n      if (this.__min !== undefined && _v < this.__min) {\n        _v = this.__min;\n      } else if (this.__max !== undefined && _v > this.__max) {\n        _v = this.__max;\n      }\n      if (this.__step !== undefined && _v % this.__step !== 0) {\n        _v = Math.round(_v / this.__step) * this.__step;\n      }\n      return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n    }\n  }, {\n    key: 'min',\n    value: function min(minValue) {\n      this.__min = minValue;\n      return this;\n    }\n  }, {\n    key: 'max',\n    value: function max(maxValue) {\n      this.__max = maxValue;\n      return this;\n    }\n  }, {\n    key: 'step',\n    value: function step(stepValue) {\n      this.__step = stepValue;\n      this.__impliedStep = stepValue;\n      this.__precision = numDecimals(stepValue);\n      return this;\n    }\n  }]);\n  return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n  var tenTo = Math.pow(10, decimals);\n  return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n  inherits(NumberControllerBox, _NumberController);\n  function NumberControllerBox(object, property, params) {\n    classCallCheck(this, NumberControllerBox);\n    var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n    _this2.__truncationSuspended = false;\n    var _this = _this2;\n    var prevY = void 0;\n    function onChange() {\n      var attempted = parseFloat(_this.__input.value);\n      if (!Common.isNaN(attempted)) {\n        _this.setValue(attempted);\n      }\n    }\n    function onFinish() {\n      if (_this.__onFinishChange) {\n        _this.__onFinishChange.call(_this, _this.getValue());\n      }\n    }\n    function onBlur() {\n      onFinish();\n    }\n    function onMouseDrag(e) {\n      var diff = prevY - e.clientY;\n      _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n      prevY = e.clientY;\n    }\n    function onMouseUp() {\n      dom.unbind(window, 'mousemove', onMouseDrag);\n      dom.unbind(window, 'mouseup', onMouseUp);\n      onFinish();\n    }\n    function onMouseDown(e) {\n      dom.bind(window, 'mousemove', onMouseDrag);\n      dom.bind(window, 'mouseup', onMouseUp);\n      prevY = e.clientY;\n    }\n    _this2.__input = document.createElement('input');\n    _this2.__input.setAttribute('type', 'text');\n    dom.bind(_this2.__input, 'change', onChange);\n    dom.bind(_this2.__input, 'blur', onBlur);\n    dom.bind(_this2.__input, 'mousedown', onMouseDown);\n    dom.bind(_this2.__input, 'keydown', function (e) {\n      if (e.keyCode === 13) {\n        _this.__truncationSuspended = true;\n        this.blur();\n        _this.__truncationSuspended = false;\n        onFinish();\n      }\n    });\n    _this2.updateDisplay();\n    _this2.domElement.appendChild(_this2.__input);\n    return _this2;\n  }\n  createClass(NumberControllerBox, [{\n    key: 'updateDisplay',\n    value: function updateDisplay() {\n      this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n      return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n    }\n  }]);\n  return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n  return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n  inherits(NumberControllerSlider, _NumberController);\n  function NumberControllerSlider(object, property, min, max, step) {\n    classCallCheck(this, NumberControllerSlider);\n    var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n    var _this = _this2;\n    _this2.__background = document.createElement('div');\n    _this2.__foreground = document.createElement('div');\n    dom.bind(_this2.__background, 'mousedown', onMouseDown);\n    dom.bind(_this2.__background, 'touchstart', onTouchStart);\n    dom.addClass(_this2.__background, 'slider');\n    dom.addClass(_this2.__foreground, 'slider-fg');\n    function onMouseDown(e) {\n      document.activeElement.blur();\n      dom.bind(window, 'mousemove', onMouseDrag);\n      dom.bind(window, 'mouseup', onMouseUp);\n      onMouseDrag(e);\n    }\n    function onMouseDrag(e) {\n      e.preventDefault();\n      var bgRect = _this.__background.getBoundingClientRect();\n      _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n      return false;\n    }\n    function onMouseUp() {\n      dom.unbind(window, 'mousemove', onMouseDrag);\n      dom.unbind(window, 'mouseup', onMouseUp);\n      if (_this.__onFinishChange) {\n        _this.__onFinishChange.call(_this, _this.getValue());\n      }\n    }\n    function onTouchStart(e) {\n      if (e.touches.length !== 1) {\n        return;\n      }\n      dom.bind(window, 'touchmove', onTouchMove);\n      dom.bind(window, 'touchend', onTouchEnd);\n      onTouchMove(e);\n    }\n    function onTouchMove(e) {\n      var clientX = e.touches[0].clientX;\n      var bgRect = _this.__background.getBoundingClientRect();\n      _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n    }\n    function onTouchEnd() {\n      dom.unbind(window, 'touchmove', onTouchMove);\n      dom.unbind(window, 'touchend', onTouchEnd);\n      if (_this.__onFinishChange) {\n        _this.__onFinishChange.call(_this, _this.getValue());\n      }\n    }\n    _this2.updateDisplay();\n    _this2.__background.appendChild(_this2.__foreground);\n    _this2.domElement.appendChild(_this2.__background);\n    return _this2;\n  }\n  createClass(NumberControllerSlider, [{\n    key: 'updateDisplay',\n    value: function updateDisplay() {\n      var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n      this.__foreground.style.width = pct * 100 + '%';\n      return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n    }\n  }]);\n  return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n  inherits(FunctionController, _Controller);\n  function FunctionController(object, property, text) {\n    classCallCheck(this, FunctionController);\n    var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n    var _this = _this2;\n    _this2.__button = document.createElement('div');\n    _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n    dom.bind(_this2.__button, 'click', function (e) {\n      e.preventDefault();\n      _this.fire();\n      return false;\n    });\n    dom.addClass(_this2.__button, 'button');\n    _this2.domElement.appendChild(_this2.__button);\n    return _this2;\n  }\n  createClass(FunctionController, [{\n    key: 'fire',\n    value: function fire() {\n      if (this.__onChange) {\n        this.__onChange.call(this);\n      }\n      this.getValue().call(this.object);\n      if (this.__onFinishChange) {\n        this.__onFinishChange.call(this, this.getValue());\n      }\n    }\n  }]);\n  return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n  inherits(ColorController, _Controller);\n  function ColorController(object, property) {\n    classCallCheck(this, ColorController);\n    var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n    _this2.__color = new Color(_this2.getValue());\n    _this2.__temp = new Color(0);\n    var _this = _this2;\n    _this2.domElement = document.createElement('div');\n    dom.makeSelectable(_this2.domElement, false);\n    _this2.__selector = document.createElement('div');\n    _this2.__selector.className = 'selector';\n    _this2.__saturation_field = document.createElement('div');\n    _this2.__saturation_field.className = 'saturation-field';\n    _this2.__field_knob = document.createElement('div');\n    _this2.__field_knob.className = 'field-knob';\n    _this2.__field_knob_border = '2px solid ';\n    _this2.__hue_knob = document.createElement('div');\n    _this2.__hue_knob.className = 'hue-knob';\n    _this2.__hue_field = document.createElement('div');\n    _this2.__hue_field.className = 'hue-field';\n    _this2.__input = document.createElement('input');\n    _this2.__input.type = 'text';\n    _this2.__input_textShadow = '0 1px 1px ';\n    dom.bind(_this2.__input, 'keydown', function (e) {\n      if (e.keyCode === 13) {\n        onBlur.call(this);\n      }\n    });\n    dom.bind(_this2.__input, 'blur', onBlur);\n    dom.bind(_this2.__selector, 'mousedown', function ()        {\n      dom.addClass(this, 'drag').bind(window, 'mouseup', function ()        {\n        dom.removeClass(_this.__selector, 'drag');\n      });\n    });\n    dom.bind(_this2.__selector, 'touchstart', function ()        {\n      dom.addClass(this, 'drag').bind(window, 'touchend', function ()        {\n        dom.removeClass(_this.__selector, 'drag');\n      });\n    });\n    var valueField = document.createElement('div');\n    Common.extend(_this2.__selector.style, {\n      width: '122px',\n      height: '102px',\n      padding: '3px',\n      backgroundColor: '#222',\n      boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n    });\n    Common.extend(_this2.__field_knob.style, {\n      position: 'absolute',\n      width: '12px',\n      height: '12px',\n      border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n      boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n      borderRadius: '12px',\n      zIndex: 1\n    });\n    Common.extend(_this2.__hue_knob.style, {\n      position: 'absolute',\n      width: '15px',\n      height: '2px',\n      borderRight: '4px solid #fff',\n      zIndex: 1\n    });\n    Common.extend(_this2.__saturation_field.style, {\n      width: '100px',\n      height: '100px',\n      border: '1px solid #555',\n      marginRight: '3px',\n      display: 'inline-block',\n      cursor: 'pointer'\n    });\n    Common.extend(valueField.style, {\n      width: '100%',\n      height: '100%',\n      background: 'none'\n    });\n    linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n    Common.extend(_this2.__hue_field.style, {\n      width: '15px',\n      height: '100px',\n      border: '1px solid #555',\n      cursor: 'ns-resize',\n      position: 'absolute',\n      top: '3px',\n      right: '3px'\n    });\n    hueGradient(_this2.__hue_field);\n    Common.extend(_this2.__input.style, {\n      outline: 'none',\n      textAlign: 'center',\n      color: '#fff',\n      border: 0,\n      fontWeight: 'bold',\n      textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n    });\n    dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n    dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n    dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n    dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n    dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n    dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n    function fieldDown(e) {\n      setSV(e);\n      dom.bind(window, 'mousemove', setSV);\n      dom.bind(window, 'touchmove', setSV);\n      dom.bind(window, 'mouseup', fieldUpSV);\n      dom.bind(window, 'touchend', fieldUpSV);\n    }\n    function fieldDownH(e) {\n      setH(e);\n      dom.bind(window, 'mousemove', setH);\n      dom.bind(window, 'touchmove', setH);\n      dom.bind(window, 'mouseup', fieldUpH);\n      dom.bind(window, 'touchend', fieldUpH);\n    }\n    function fieldUpSV() {\n      dom.unbind(window, 'mousemove', setSV);\n      dom.unbind(window, 'touchmove', setSV);\n      dom.unbind(window, 'mouseup', fieldUpSV);\n      dom.unbind(window, 'touchend', fieldUpSV);\n      onFinish();\n    }\n    function fieldUpH() {\n      dom.unbind(window, 'mousemove', setH);\n      dom.unbind(window, 'touchmove', setH);\n      dom.unbind(window, 'mouseup', fieldUpH);\n      dom.unbind(window, 'touchend', fieldUpH);\n      onFinish();\n    }\n    function onBlur() {\n      var i = interpret(this.value);\n      if (i !== false) {\n        _this.__color.__state = i;\n        _this.setValue(_this.__color.toOriginal());\n      } else {\n        this.value = _this.__color.toString();\n      }\n    }\n    function onFinish() {\n      if (_this.__onFinishChange) {\n        _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n      }\n    }\n    _this2.__saturation_field.appendChild(valueField);\n    _this2.__selector.appendChild(_this2.__field_knob);\n    _this2.__selector.appendChild(_this2.__saturation_field);\n    _this2.__selector.appendChild(_this2.__hue_field);\n    _this2.__hue_field.appendChild(_this2.__hue_knob);\n    _this2.domElement.appendChild(_this2.__input);\n    _this2.domElement.appendChild(_this2.__selector);\n    _this2.updateDisplay();\n    function setSV(e) {\n      if (e.type.indexOf('touch') === -1) {\n        e.preventDefault();\n      }\n      var fieldRect = _this.__saturation_field.getBoundingClientRect();\n      var _ref = e.touches && e.touches[0] || e,\n          clientX = _ref.clientX,\n          clientY = _ref.clientY;\n      var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n      var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n      if (v > 1) {\n        v = 1;\n      } else if (v < 0) {\n        v = 0;\n      }\n      if (s > 1) {\n        s = 1;\n      } else if (s < 0) {\n        s = 0;\n      }\n      _this.__color.v = v;\n      _this.__color.s = s;\n      _this.setValue(_this.__color.toOriginal());\n      return false;\n    }\n    function setH(e) {\n      if (e.type.indexOf('touch') === -1) {\n        e.preventDefault();\n      }\n      var fieldRect = _this.__hue_field.getBoundingClientRect();\n      var _ref2 = e.touches && e.touches[0] || e,\n          clientY = _ref2.clientY;\n      var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n      if (h > 1) {\n        h = 1;\n      } else if (h < 0) {\n        h = 0;\n      }\n      _this.__color.h = h * 360;\n      _this.setValue(_this.__color.toOriginal());\n      return false;\n    }\n    return _this2;\n  }\n  createClass(ColorController, [{\n    key: 'updateDisplay',\n    value: function updateDisplay() {\n      var i = interpret(this.getValue());\n      if (i !== false) {\n        var mismatch = false;\n        Common.each(Color.COMPONENTS, function (component) {\n          if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n            mismatch = true;\n            return {};\n          }\n        }, this);\n        if (mismatch) {\n          Common.extend(this.__color.__state, i);\n        }\n      }\n      Common.extend(this.__temp.__state, this.__color.__state);\n      this.__temp.a = 1;\n      var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n      var _flip = 255 - flip;\n      Common.extend(this.__field_knob.style, {\n        marginLeft: 100 * this.__color.s - 7 + 'px',\n        marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n        backgroundColor: this.__temp.toHexString(),\n        border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n      });\n      this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n      this.__temp.s = 1;\n      this.__temp.v = 1;\n      linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n      this.__input.value = this.__color.toString();\n      Common.extend(this.__input.style, {\n        backgroundColor: this.__color.toHexString(),\n        color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n        textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n      });\n    }\n  }]);\n  return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n  elem.style.background = '';\n  Common.each(vendors, function (vendor) {\n    elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n  });\n}\nfunction hueGradient(elem) {\n  elem.style.background = '';\n  elem.style.cssText += 'background: -moz-linear-gradient(top,  #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n  elem.style.cssText += 'background: -webkit-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n  elem.style.cssText += 'background: -o-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n  elem.style.cssText += 'background: -ms-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n  elem.style.cssText += 'background: linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n  load: function load(url, indoc) {\n    var doc = indoc || document;\n    var link = doc.createElement('link');\n    link.type = 'text/css';\n    link.rel = 'stylesheet';\n    link.href = url;\n    doc.getElementsByTagName('head')[0].appendChild(link);\n  },\n  inject: function inject(cssContent, indoc) {\n    var doc = indoc || document;\n    var injected = document.createElement('style');\n    injected.type = 'text/css';\n    injected.innerHTML = cssContent;\n    var head = doc.getElementsByTagName('head')[0];\n    try {\n      head.appendChild(injected);\n    } catch (e) {\n    }\n  }\n};\n\nvar saveDialogContents = \"<div id=\\\"dg-save\\\" class=\\\"dg dialogue\\\">\\n\\n  Here's the new load parameter for your <code>GUI</code>'s constructor:\\n\\n  <textarea id=\\\"dg-new-constructor\\\"></textarea>\\n\\n  <div id=\\\"dg-save-locally\\\">\\n\\n    <input id=\\\"dg-local-storage\\\" type=\\\"checkbox\\\"/> Automatically save\\n    values to <code>localStorage</code> on exit.\\n\\n    <div id=\\\"dg-local-explain\\\">The values saved to <code>localStorage</code> will\\n      override those passed to <code>dat.GUI</code>'s constructor. This makes it\\n      easier to work incrementally, but <code>localStorage</code> is fragile,\\n      and your friends may not see the same values you do.\\n\\n    </div>\\n\\n  </div>\\n\\n</div>\";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n  var initialValue = object[property];\n  if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n    return new OptionController(object, property, arguments[2]);\n  }\n  if (Common.isNumber(initialValue)) {\n    if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n      if (Common.isNumber(arguments[4])) {\n        return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n      }\n      return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n    }\n    if (Common.isNumber(arguments[4])) {\n      return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n    }\n    return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n  }\n  if (Common.isString(initialValue)) {\n    return new StringController(object, property);\n  }\n  if (Common.isFunction(initialValue)) {\n    return new FunctionController(object, property, '');\n  }\n  if (Common.isBoolean(initialValue)) {\n    return new BooleanController(object, property);\n  }\n  return null;\n};\n\nfunction requestAnimationFrame(callback) {\n  setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n  function CenteredDiv() {\n    classCallCheck(this, CenteredDiv);\n    this.backgroundElement = document.createElement('div');\n    Common.extend(this.backgroundElement.style, {\n      backgroundColor: 'rgba(0,0,0,0.8)',\n      top: 0,\n      left: 0,\n      display: 'none',\n      zIndex: '1000',\n      opacity: 0,\n      WebkitTransition: 'opacity 0.2s linear',\n      transition: 'opacity 0.2s linear'\n    });\n    dom.makeFullscreen(this.backgroundElement);\n    this.backgroundElement.style.position = 'fixed';\n    this.domElement = document.createElement('div');\n    Common.extend(this.domElement.style, {\n      position: 'fixed',\n      display: 'none',\n      zIndex: '1001',\n      opacity: 0,\n      WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n      transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n    });\n    document.body.appendChild(this.backgroundElement);\n    document.body.appendChild(this.domElement);\n    var _this = this;\n    dom.bind(this.backgroundElement, 'click', function () {\n      _this.hide();\n    });\n  }\n  createClass(CenteredDiv, [{\n    key: 'show',\n    value: function show() {\n      var _this = this;\n      this.backgroundElement.style.display = 'block';\n      this.domElement.style.display = 'block';\n      this.domElement.style.opacity = 0;\n      this.domElement.style.webkitTransform = 'scale(1.1)';\n      this.layout();\n      Common.defer(function () {\n        _this.backgroundElement.style.opacity = 1;\n        _this.domElement.style.opacity = 1;\n        _this.domElement.style.webkitTransform = 'scale(1)';\n      });\n    }\n  }, {\n    key: 'hide',\n    value: function hide() {\n      var _this = this;\n      var hide = function hide() {\n        _this.domElement.style.display = 'none';\n        _this.backgroundElement.style.display = 'none';\n        dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n        dom.unbind(_this.domElement, 'transitionend', hide);\n        dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n      };\n      dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n      dom.bind(this.domElement, 'transitionend', hide);\n      dom.bind(this.domElement, 'oTransitionEnd', hide);\n      this.backgroundElement.style.opacity = 0;\n      this.domElement.style.opacity = 0;\n      this.domElement.style.webkitTransform = 'scale(1.1)';\n    }\n  }, {\n    key: 'layout',\n    value: function layout() {\n      this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n      this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n    }\n  }]);\n  return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n  try {\n    return !!window.localStorage;\n  } catch (e) {\n    return false;\n  }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n  var _this = this;\n  var params = pars || {};\n  this.domElement = document.createElement('div');\n  this.__ul = document.createElement('ul');\n  this.domElement.appendChild(this.__ul);\n  dom.addClass(this.domElement, CSS_NAMESPACE);\n  this.__folders = {};\n  this.__controllers = [];\n  this.__rememberedObjects = [];\n  this.__rememberedObjectIndecesToControllers = [];\n  this.__listening = [];\n  params = Common.defaults(params, {\n    closeOnTop: false,\n    autoPlace: true,\n    width: GUI.DEFAULT_WIDTH\n  });\n  params = Common.defaults(params, {\n    resizable: params.autoPlace,\n    hideable: params.autoPlace\n  });\n  if (!Common.isUndefined(params.load)) {\n    if (params.preset) {\n      params.load.preset = params.preset;\n    }\n  } else {\n    params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n  }\n  if (Common.isUndefined(params.parent) && params.hideable) {\n    hideableGuis.push(this);\n  }\n  params.resizable = Common.isUndefined(params.parent) && params.resizable;\n  if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n    params.scrollable = true;\n  }\n  var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n  var saveToLocalStorage = void 0;\n  Object.defineProperties(this,\n  {\n    parent: {\n      get: function get$$1() {\n        return params.parent;\n      }\n    },\n    scrollable: {\n      get: function get$$1() {\n        return params.scrollable;\n      }\n    },\n    autoPlace: {\n      get: function get$$1() {\n        return params.autoPlace;\n      }\n    },\n    closeOnTop: {\n      get: function get$$1() {\n        return params.closeOnTop;\n      }\n    },\n    preset: {\n      get: function get$$1() {\n        if (_this.parent) {\n          return _this.getRoot().preset;\n        }\n        return params.load.preset;\n      },\n      set: function set$$1(v) {\n        if (_this.parent) {\n          _this.getRoot().preset = v;\n        } else {\n          params.load.preset = v;\n        }\n        setPresetSelectIndex(this);\n        _this.revert();\n      }\n    },\n    width: {\n      get: function get$$1() {\n        return params.width;\n      },\n      set: function set$$1(v) {\n        params.width = v;\n        setWidth(_this, v);\n      }\n    },\n    name: {\n      get: function get$$1() {\n        return params.name;\n      },\n      set: function set$$1(v) {\n        params.name = v;\n        if (titleRowName) {\n          titleRowName.innerHTML = params.name;\n        }\n      }\n    },\n    closed: {\n      get: function get$$1() {\n        return params.closed;\n      },\n      set: function set$$1(v) {\n        params.closed = v;\n        if (params.closed) {\n          dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n        } else {\n          dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n        }\n        this.onResize();\n        if (_this.__closeButton) {\n          _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n        }\n      }\n    },\n    load: {\n      get: function get$$1() {\n        return params.load;\n      }\n    },\n    useLocalStorage: {\n      get: function get$$1() {\n        return useLocalStorage;\n      },\n      set: function set$$1(bool) {\n        if (SUPPORTS_LOCAL_STORAGE) {\n          useLocalStorage = bool;\n          if (bool) {\n            dom.bind(window, 'unload', saveToLocalStorage);\n          } else {\n            dom.unbind(window, 'unload', saveToLocalStorage);\n          }\n          localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n        }\n      }\n    }\n  });\n  if (Common.isUndefined(params.parent)) {\n    params.closed = false;\n    dom.addClass(this.domElement, GUI.CLASS_MAIN);\n    dom.makeSelectable(this.domElement, false);\n    if (SUPPORTS_LOCAL_STORAGE) {\n      if (useLocalStorage) {\n        _this.useLocalStorage = true;\n        var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n        if (savedGui) {\n          params.load = JSON.parse(savedGui);\n        }\n      }\n    }\n    this.__closeButton = document.createElement('div');\n    this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n    dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n    if (params.closeOnTop) {\n      dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n      this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n    } else {\n      dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n      this.domElement.appendChild(this.__closeButton);\n    }\n    dom.bind(this.__closeButton, 'click', function () {\n      _this.closed = !_this.closed;\n    });\n  } else {\n    if (params.closed === undefined) {\n      params.closed = true;\n    }\n    var _titleRowName = document.createTextNode(params.name);\n    dom.addClass(_titleRowName, 'controller-name');\n    var titleRow = addRow(_this, _titleRowName);\n    var onClickTitle = function onClickTitle(e) {\n      e.preventDefault();\n      _this.closed = !_this.closed;\n      return false;\n    };\n    dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n    dom.addClass(titleRow, 'title');\n    dom.bind(titleRow, 'click', onClickTitle);\n    if (!params.closed) {\n      this.closed = false;\n    }\n  }\n  if (params.autoPlace) {\n    if (Common.isUndefined(params.parent)) {\n      if (autoPlaceVirgin) {\n        autoPlaceContainer = document.createElement('div');\n        dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n        dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n        document.body.appendChild(autoPlaceContainer);\n        autoPlaceVirgin = false;\n      }\n      autoPlaceContainer.appendChild(this.domElement);\n      dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n    }\n    if (!this.parent) {\n      setWidth(_this, params.width);\n    }\n  }\n  this.__resizeHandler = function () {\n    _this.onResizeDebounced();\n  };\n  dom.bind(window, 'resize', this.__resizeHandler);\n  dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n  dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n  dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n  this.onResize();\n  if (params.resizable) {\n    addResizeHandle(this);\n  }\n  saveToLocalStorage = function saveToLocalStorage() {\n    if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n      localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n    }\n  };\n  this.saveToLocalStorageIfPossible = saveToLocalStorage;\n  function resetWidth() {\n    var root = _this.getRoot();\n    root.width += 1;\n    Common.defer(function () {\n      root.width -= 1;\n    });\n  }\n  if (!params.parent) {\n    resetWidth();\n  }\n};\nGUI.toggleHide = function () {\n  hide = !hide;\n  Common.each(hideableGuis, function (gui) {\n    gui.domElement.style.display = hide ? 'none' : '';\n  });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n  if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n    GUI.toggleHide();\n  }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n  add: function add(object, property) {\n    return _add(this, object, property, {\n      factoryArgs: Array.prototype.slice.call(arguments, 2)\n    });\n  },\n  addColor: function addColor(object, property) {\n    return _add(this, object, property, {\n      color: true\n    });\n  },\n  remove: function remove(controller) {\n    this.__ul.removeChild(controller.__li);\n    this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n    var _this = this;\n    Common.defer(function () {\n      _this.onResize();\n    });\n  },\n  destroy: function destroy() {\n    if (this.parent) {\n      throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n    }\n    if (this.autoPlace) {\n      autoPlaceContainer.removeChild(this.domElement);\n    }\n    var _this = this;\n    Common.each(this.__folders, function (subfolder) {\n      _this.removeFolder(subfolder);\n    });\n    dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n    removeListeners(this);\n  },\n  addFolder: function addFolder(name) {\n    if (this.__folders[name] !== undefined) {\n      throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n    }\n    var newGuiParams = { name: name, parent: this };\n    newGuiParams.autoPlace = this.autoPlace;\n    if (this.load &&\n    this.load.folders &&\n    this.load.folders[name]) {\n      newGuiParams.closed = this.load.folders[name].closed;\n      newGuiParams.load = this.load.folders[name];\n    }\n    var gui = new GUI(newGuiParams);\n    this.__folders[name] = gui;\n    var li = addRow(this, gui.domElement);\n    dom.addClass(li, 'folder');\n    return gui;\n  },\n  removeFolder: function removeFolder(folder) {\n    this.__ul.removeChild(folder.domElement.parentElement);\n    delete this.__folders[folder.name];\n    if (this.load &&\n    this.load.folders &&\n    this.load.folders[folder.name]) {\n      delete this.load.folders[folder.name];\n    }\n    removeListeners(folder);\n    var _this = this;\n    Common.each(folder.__folders, function (subfolder) {\n      folder.removeFolder(subfolder);\n    });\n    Common.defer(function () {\n      _this.onResize();\n    });\n  },\n  open: function open() {\n    this.closed = false;\n  },\n  close: function close() {\n    this.closed = true;\n  },\n  onResize: function onResize() {\n    var root = this.getRoot();\n    if (root.scrollable) {\n      var top = dom.getOffset(root.__ul).top;\n      var h = 0;\n      Common.each(root.__ul.childNodes, function (node) {\n        if (!(root.autoPlace && node === root.__save_row)) {\n          h += dom.getHeight(node);\n        }\n      });\n      if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n        dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n        root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n      } else {\n        dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n        root.__ul.style.height = 'auto';\n      }\n    }\n    if (root.__resize_handle) {\n      Common.defer(function () {\n        root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n      });\n    }\n    if (root.__closeButton) {\n      root.__closeButton.style.width = root.width + 'px';\n    }\n  },\n  onResizeDebounced: Common.debounce(function () {\n    this.onResize();\n  }, 50),\n  remember: function remember() {\n    if (Common.isUndefined(SAVE_DIALOGUE)) {\n      SAVE_DIALOGUE = new CenteredDiv();\n      SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n    }\n    if (this.parent) {\n      throw new Error('You can only call remember on a top level GUI.');\n    }\n    var _this = this;\n    Common.each(Array.prototype.slice.call(arguments), function (object) {\n      if (_this.__rememberedObjects.length === 0) {\n        addSaveMenu(_this);\n      }\n      if (_this.__rememberedObjects.indexOf(object) === -1) {\n        _this.__rememberedObjects.push(object);\n      }\n    });\n    if (this.autoPlace) {\n      setWidth(this, this.width);\n    }\n  },\n  getRoot: function getRoot() {\n    var gui = this;\n    while (gui.parent) {\n      gui = gui.parent;\n    }\n    return gui;\n  },\n  getSaveObject: function getSaveObject() {\n    var toReturn = this.load;\n    toReturn.closed = this.closed;\n    if (this.__rememberedObjects.length > 0) {\n      toReturn.preset = this.preset;\n      if (!toReturn.remembered) {\n        toReturn.remembered = {};\n      }\n      toReturn.remembered[this.preset] = getCurrentPreset(this);\n    }\n    toReturn.folders = {};\n    Common.each(this.__folders, function (element, key) {\n      toReturn.folders[key] = element.getSaveObject();\n    });\n    return toReturn;\n  },\n  save: function save() {\n    if (!this.load.remembered) {\n      this.load.remembered = {};\n    }\n    this.load.remembered[this.preset] = getCurrentPreset(this);\n    markPresetModified(this, false);\n    this.saveToLocalStorageIfPossible();\n  },\n  saveAs: function saveAs(presetName) {\n    if (!this.load.remembered) {\n      this.load.remembered = {};\n      this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n    }\n    this.load.remembered[presetName] = getCurrentPreset(this);\n    this.preset = presetName;\n    addPresetOption(this, presetName, true);\n    this.saveToLocalStorageIfPossible();\n  },\n  revert: function revert(gui) {\n    Common.each(this.__controllers, function (controller) {\n      if (!this.getRoot().load.remembered) {\n        controller.setValue(controller.initialValue);\n      } else {\n        recallSavedValue(gui || this.getRoot(), controller);\n      }\n      if (controller.__onFinishChange) {\n        controller.__onFinishChange.call(controller, controller.getValue());\n      }\n    }, this);\n    Common.each(this.__folders, function (folder) {\n      folder.revert(folder);\n    });\n    if (!gui) {\n      markPresetModified(this.getRoot(), false);\n    }\n  },\n  listen: function listen(controller) {\n    var init = this.__listening.length === 0;\n    this.__listening.push(controller);\n    if (init) {\n      updateDisplays(this.__listening);\n    }\n  },\n  updateDisplay: function updateDisplay() {\n    Common.each(this.__controllers, function (controller) {\n      controller.updateDisplay();\n    });\n    Common.each(this.__folders, function (folder) {\n      folder.updateDisplay();\n    });\n  }\n});\nfunction addRow(gui, newDom, liBefore) {\n  var li = document.createElement('li');\n  if (newDom) {\n    li.appendChild(newDom);\n  }\n  if (liBefore) {\n    gui.__ul.insertBefore(li, liBefore);\n  } else {\n    gui.__ul.appendChild(li);\n  }\n  gui.onResize();\n  return li;\n}\nfunction removeListeners(gui) {\n  dom.unbind(window, 'resize', gui.__resizeHandler);\n  if (gui.saveToLocalStorageIfPossible) {\n    dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n  }\n}\nfunction markPresetModified(gui, modified) {\n  var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n  if (modified) {\n    opt.innerHTML = opt.value + '*';\n  } else {\n    opt.innerHTML = opt.value;\n  }\n}\nfunction augmentController(gui, li, controller) {\n  controller.__li = li;\n  controller.__gui = gui;\n  Common.extend(controller,                                   {\n    options: function options(_options) {\n      if (arguments.length > 1) {\n        var nextSibling = controller.__li.nextElementSibling;\n        controller.remove();\n        return _add(gui, controller.object, controller.property, {\n          before: nextSibling,\n          factoryArgs: [Common.toArray(arguments)]\n        });\n      }\n      if (Common.isArray(_options) || Common.isObject(_options)) {\n        var _nextSibling = controller.__li.nextElementSibling;\n        controller.remove();\n        return _add(gui, controller.object, controller.property, {\n          before: _nextSibling,\n          factoryArgs: [_options]\n        });\n      }\n    },\n    name: function name(_name) {\n      controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n      return controller;\n    },\n    listen: function listen() {\n      controller.__gui.listen(controller);\n      return controller;\n    },\n    remove: function remove() {\n      controller.__gui.remove(controller);\n      return controller;\n    }\n  });\n  if (controller instanceof NumberControllerSlider) {\n    var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n    Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step'], function (method) {\n      var pc = controller[method];\n      var pb = box[method];\n      controller[method] = box[method] = function () {\n        var args = Array.prototype.slice.call(arguments);\n        pb.apply(box, args);\n        return pc.apply(controller, args);\n      };\n    });\n    dom.addClass(li, 'has-slider');\n    controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n  } else if (controller instanceof NumberControllerBox) {\n    var r = function r(returned) {\n      if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n        var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n        var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n        controller.remove();\n        var newController = _add(gui, controller.object, controller.property, {\n          before: controller.__li.nextElementSibling,\n          factoryArgs: [controller.__min, controller.__max, controller.__step]\n        });\n        newController.name(oldName);\n        if (wasListening) newController.listen();\n        return newController;\n      }\n      return returned;\n    };\n    controller.min = Common.compose(r, controller.min);\n    controller.max = Common.compose(r, controller.max);\n  } else if (controller instanceof BooleanController) {\n    dom.bind(li, 'click', function () {\n      dom.fakeEvent(controller.__checkbox, 'click');\n    });\n    dom.bind(controller.__checkbox, 'click', function (e) {\n      e.stopPropagation();\n    });\n  } else if (controller instanceof FunctionController) {\n    dom.bind(li, 'click', function () {\n      dom.fakeEvent(controller.__button, 'click');\n    });\n    dom.bind(li, 'mouseover', function () {\n      dom.addClass(controller.__button, 'hover');\n    });\n    dom.bind(li, 'mouseout', function () {\n      dom.removeClass(controller.__button, 'hover');\n    });\n  } else if (controller instanceof ColorController) {\n    dom.addClass(li, 'color');\n    controller.updateDisplay = Common.compose(function (val) {\n      li.style.borderLeftColor = controller.__color.toString();\n      return val;\n    }, controller.updateDisplay);\n    controller.updateDisplay();\n  }\n  controller.setValue = Common.compose(function (val) {\n    if (gui.getRoot().__preset_select && controller.isModified()) {\n      markPresetModified(gui.getRoot(), true);\n    }\n    return val;\n  }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n  var root = gui.getRoot();\n  var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n  if (matchedIndex !== -1) {\n    var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n    if (controllerMap === undefined) {\n      controllerMap = {};\n      root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n    }\n    controllerMap[controller.property] = controller;\n    if (root.load && root.load.remembered) {\n      var presetMap = root.load.remembered;\n      var preset = void 0;\n      if (presetMap[gui.preset]) {\n        preset = presetMap[gui.preset];\n      } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n        preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n      } else {\n        return;\n      }\n      if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n        var value = preset[matchedIndex][controller.property];\n        controller.initialValue = value;\n        controller.setValue(value);\n      }\n    }\n  }\n}\nfunction _add(gui, object, property, params) {\n  if (object[property] === undefined) {\n    throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n  }\n  var controller = void 0;\n  if (params.color) {\n    controller = new ColorController(object, property);\n  } else {\n    var factoryArgs = [object, property].concat(params.factoryArgs);\n    controller = ControllerFactory.apply(gui, factoryArgs);\n  }\n  if (params.before instanceof Controller) {\n    params.before = params.before.__li;\n  }\n  recallSavedValue(gui, controller);\n  dom.addClass(controller.domElement, 'c');\n  var name = document.createElement('span');\n  dom.addClass(name, 'property-name');\n  name.innerHTML = controller.property;\n  var container = document.createElement('div');\n  container.appendChild(name);\n  container.appendChild(controller.domElement);\n  var li = addRow(gui, container, params.before);\n  dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n  if (controller instanceof ColorController) {\n    dom.addClass(li, 'color');\n  } else {\n    dom.addClass(li, _typeof(controller.getValue()));\n  }\n  augmentController(gui, li, controller);\n  gui.__controllers.push(controller);\n  return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n  return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n  var opt = document.createElement('option');\n  opt.innerHTML = name;\n  opt.value = name;\n  gui.__preset_select.appendChild(opt);\n  if (setSelected) {\n    gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n  }\n}\nfunction showHideExplain(gui, explain) {\n  explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n  var div = gui.__save_row = document.createElement('li');\n  dom.addClass(gui.domElement, 'has-save');\n  gui.__ul.insertBefore(div, gui.__ul.firstChild);\n  dom.addClass(div, 'save-row');\n  var gears = document.createElement('span');\n  gears.innerHTML = '&nbsp;';\n  dom.addClass(gears, 'button gears');\n  var button = document.createElement('span');\n  button.innerHTML = 'Save';\n  dom.addClass(button, 'button');\n  dom.addClass(button, 'save');\n  var button2 = document.createElement('span');\n  button2.innerHTML = 'New';\n  dom.addClass(button2, 'button');\n  dom.addClass(button2, 'save-as');\n  var button3 = document.createElement('span');\n  button3.innerHTML = 'Revert';\n  dom.addClass(button3, 'button');\n  dom.addClass(button3, 'revert');\n  var select = gui.__preset_select = document.createElement('select');\n  if (gui.load && gui.load.remembered) {\n    Common.each(gui.load.remembered, function (value, key) {\n      addPresetOption(gui, key, key === gui.preset);\n    });\n  } else {\n    addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n  }\n  dom.bind(select, 'change', function () {\n    for (var index = 0; index < gui.__preset_select.length; index++) {\n      gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n    }\n    gui.preset = this.value;\n  });\n  div.appendChild(select);\n  div.appendChild(gears);\n  div.appendChild(button);\n  div.appendChild(button2);\n  div.appendChild(button3);\n  if (SUPPORTS_LOCAL_STORAGE) {\n    var explain = document.getElementById('dg-local-explain');\n    var localStorageCheckBox = document.getElementById('dg-local-storage');\n    var saveLocally = document.getElementById('dg-save-locally');\n    saveLocally.style.display = 'block';\n    if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n      localStorageCheckBox.setAttribute('checked', 'checked');\n    }\n    showHideExplain(gui, explain);\n    dom.bind(localStorageCheckBox, 'change', function () {\n      gui.useLocalStorage = !gui.useLocalStorage;\n      showHideExplain(gui, explain);\n    });\n  }\n  var newConstructorTextArea = document.getElementById('dg-new-constructor');\n  dom.bind(newConstructorTextArea, 'keydown', function (e) {\n    if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n      SAVE_DIALOGUE.hide();\n    }\n  });\n  dom.bind(gears, 'click', function () {\n    newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n    SAVE_DIALOGUE.show();\n    newConstructorTextArea.focus();\n    newConstructorTextArea.select();\n  });\n  dom.bind(button, 'click', function () {\n    gui.save();\n  });\n  dom.bind(button2, 'click', function () {\n    var presetName = prompt('Enter a new preset name.');\n    if (presetName) {\n      gui.saveAs(presetName);\n    }\n  });\n  dom.bind(button3, 'click', function () {\n    gui.revert();\n  });\n}\nfunction addResizeHandle(gui) {\n  var pmouseX = void 0;\n  gui.__resize_handle = document.createElement('div');\n  Common.extend(gui.__resize_handle.style, {\n    width: '6px',\n    marginLeft: '-3px',\n    height: '200px',\n    cursor: 'ew-resize',\n    position: 'absolute'\n  });\n  function drag(e) {\n    e.preventDefault();\n    gui.width += pmouseX - e.clientX;\n    gui.onResize();\n    pmouseX = e.clientX;\n    return false;\n  }\n  function dragStop() {\n    dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n    dom.unbind(window, 'mousemove', drag);\n    dom.unbind(window, 'mouseup', dragStop);\n  }\n  function dragStart(e) {\n    e.preventDefault();\n    pmouseX = e.clientX;\n    dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n    dom.bind(window, 'mousemove', drag);\n    dom.bind(window, 'mouseup', dragStop);\n    return false;\n  }\n  dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n  dom.bind(gui.__closeButton, 'mousedown', dragStart);\n  gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n  gui.domElement.style.width = w + 'px';\n  if (gui.__save_row && gui.autoPlace) {\n    gui.__save_row.style.width = w + 'px';\n  }\n  if (gui.__closeButton) {\n    gui.__closeButton.style.width = w + 'px';\n  }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n  var toReturn = {};\n  Common.each(gui.__rememberedObjects, function (val, index) {\n    var savedValues = {};\n    var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n    Common.each(controllerMap, function (controller, property) {\n      savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n    });\n    toReturn[index] = savedValues;\n  });\n  return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n  for (var index = 0; index < gui.__preset_select.length; index++) {\n    if (gui.__preset_select[index].value === gui.preset) {\n      gui.__preset_select.selectedIndex = index;\n    }\n  }\n}\nfunction updateDisplays(controllerArray) {\n  if (controllerArray.length !== 0) {\n    requestAnimationFrame$1.call(window, function () {\n      updateDisplays(controllerArray);\n    });\n  }\n  Common.each(controllerArray, function (c) {\n    c.updateDisplay();\n  });\n}\n\nvar color = {\n  Color: Color,\n  math: ColorMath,\n  interpret: interpret\n};\nvar controllers = {\n  Controller: Controller,\n  BooleanController: BooleanController,\n  OptionController: OptionController,\n  StringController: StringController,\n  NumberController: NumberController,\n  NumberControllerBox: NumberControllerBox,\n  NumberControllerSlider: NumberControllerSlider,\n  FunctionController: FunctionController,\n  ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n  color: color,\n  controllers: controllers,\n  dom: dom$1,\n  gui: gui,\n  GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n//# sourceMappingURL=dat.gui.module.js.map\n","var THREE = require('three')\n\n/**\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n */\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n//    Orbit - left mouse / touch: one-finger move\n//    Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n//    Pan - right mouse, or arrow keys / touch: two-finger move\n\nTHREE.OrbitControls = function ( object, domElement ) {\n\n\tthis.object = object;\n\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\n\t// Set to false to disable this control\n\tthis.enabled = true;\n\n\t// \"target\" sets the location of focus, where the object orbits around\n\tthis.target = new THREE.Vector3();\n\n\t// How far you can dolly in and out ( PerspectiveCamera only )\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\t// How far you can zoom in and out ( OrthographicCamera only )\n\tthis.minZoom = 0;\n\tthis.maxZoom = Infinity;\n\n\t// How far you can orbit vertically, upper and lower limits.\n\t// Range is 0 to Math.PI radians.\n\tthis.minPolarAngle = 0; // radians\n\tthis.maxPolarAngle = Math.PI; // radians\n\n\t// How far you can orbit horizontally, upper and lower limits.\n\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\tthis.minAzimuthAngle = - Infinity; // radians\n\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t// Set to true to enable damping (inertia)\n\t// If damping is enabled, you must call controls.update() in your animation loop\n\tthis.enableDamping = false;\n\tthis.dampingFactor = 0.25;\n\n\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t// Set to false to disable zooming\n\tthis.enableZoom = true;\n\tthis.zoomSpeed = 1.0;\n\n\t// Set to false to disable rotating\n\tthis.enableRotate = true;\n\tthis.rotateSpeed = 1.0;\n\n\t// Set to false to disable panning\n\tthis.enablePan = true;\n\tthis.panSpeed = 1.0;\n\tthis.screenSpacePanning = false; // if true, pan in screen-space\n\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t// Set to true to automatically rotate around the target\n\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\tthis.autoRotate = false;\n\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t// Set to false to disable use of the keys\n\tthis.enableKeys = true;\n\n\t// The four arrow keys\n\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t// Mouse buttons\n\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n\t// for reset\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t//\n\t// public methods\n\t//\n\n\tthis.getPolarAngle = function () {\n\n\t\treturn spherical.phi;\n\n\t};\n\n\tthis.getAzimuthalAngle = function () {\n\n\t\treturn spherical.theta;\n\n\t};\n\n\tthis.saveState = function () {\n\n\t\tscope.target0.copy( scope.target );\n\t\tscope.position0.copy( scope.object.position );\n\t\tscope.zoom0 = scope.object.zoom;\n\n\t};\n\n\tthis.reset = function () {\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tscope.update();\n\n\t\tstate = STATE.NONE;\n\n\t};\n\n\t// this method is exposed, but perhaps it would be better if we can make it private...\n\tthis.update = function () {\n\n\t\tvar offset = new THREE.Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tvar quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) );\n\t\tvar quatInverse = quat.clone().inverse();\n\n\t\tvar lastPosition = new THREE.Vector3();\n\t\tvar lastQuaternion = new THREE.Quaternion();\n\n\t\treturn function update() {\n\n\t\t\tvar position = scope.object.position;\n\n\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t// angle from z-axis around y-axis\n\t\t\tspherical.setFromVector3( offset );\n\n\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\trotateLeft( getAutoRotationAngle() );\n\n\t\t\t}\n\n\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t// restrict theta to be between desired limits\n\t\t\tspherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) );\n\n\t\t\t// restrict phi to be between desired limits\n\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\tspherical.makeSafe();\n\n\n\t\t\tspherical.radius *= scale;\n\n\t\t\t// restrict radius to be between desired limits\n\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n\t\t\t// move target to panned location\n\t\t\tscope.target.add( panOffset );\n\n\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\tscale = 1;\n\n\t\t\t// update condition is:\n\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\tif ( zoomChanged ||\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tzoomChanged = false;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t};\n\n\t}();\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );\n\t\tscope.domElement.removeEventListener( 'mousedown', onMouseDown, false );\n\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel, false );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart, false );\n\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd, false );\n\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove, false );\n\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\twindow.removeEventListener( 'keydown', onKeyDown, false );\n\n\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t};\n\n\t//\n\t// internals\n\t//\n\n\tvar scope = this;\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\tvar STATE = { NONE: - 1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY_PAN: 4 };\n\n\tvar state = STATE.NONE;\n\n\tvar EPS = 0.000001;\n\n\t// current position in spherical coordinates\n\tvar spherical = new THREE.Spherical();\n\tvar sphericalDelta = new THREE.Spherical();\n\n\tvar scale = 1;\n\tvar panOffset = new THREE.Vector3();\n\tvar zoomChanged = false;\n\n\tvar rotateStart = new THREE.Vector2();\n\tvar rotateEnd = new THREE.Vector2();\n\tvar rotateDelta = new THREE.Vector2();\n\n\tvar panStart = new THREE.Vector2();\n\tvar panEnd = new THREE.Vector2();\n\tvar panDelta = new THREE.Vector2();\n\n\tvar dollyStart = new THREE.Vector2();\n\tvar dollyEnd = new THREE.Vector2();\n\tvar dollyDelta = new THREE.Vector2();\n\n\tfunction getAutoRotationAngle() {\n\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t}\n\n\tfunction getZoomScale() {\n\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t}\n\n\tfunction rotateLeft( angle ) {\n\n\t\tsphericalDelta.theta -= angle;\n\n\t}\n\n\tfunction rotateUp( angle ) {\n\n\t\tsphericalDelta.phi -= angle;\n\n\t}\n\n\tvar panLeft = function () {\n\n\t\tvar v = new THREE.Vector3();\n\n\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\tv.multiplyScalar( - distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\tvar panUp = function () {\n\n\t\tvar v = new THREE.Vector3();\n\n\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t}\n\n\t\t\tv.multiplyScalar( distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\tvar pan = function () {\n\n\t\tvar offset = new THREE.Vector3();\n\n\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t// perspective\n\t\t\t\tvar position = scope.object.position;\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\tvar targetDistance = offset.length();\n\n\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t// orthographic\n\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else {\n\n\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\tscope.enablePan = false;\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\tfunction dollyIn( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale /= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\tfunction dollyOut( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale *= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\tfunction handleMouseDownRotate( event ) {\n\n\t\t//console.log( 'handleMouseDownRotate' );\n\n\t\trotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownDolly( event ) {\n\n\t\t//console.log( 'handleMouseDownDolly' );\n\n\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownPan( event ) {\n\n\t\t//console.log( 'handleMouseDownPan' );\n\n\t\tpanStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseMoveRotate( event ) {\n\n\t\t//console.log( 'handleMouseMoveRotate' );\n\n\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\t// rotating across whole screen goes 360 degrees around\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth );\n\n\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMoveDolly( event ) {\n\n\t\t//console.log( 'handleMouseMoveDolly' );\n\n\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t}\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMovePan( event ) {\n\n\t\t//console.log( 'handleMouseMovePan' );\n\n\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseUp( event ) {\n\n\t\t// console.log( 'handleMouseUp' );\n\n\t}\n\n\tfunction handleMouseWheel( event ) {\n\n\t\t// console.log( 'handleMouseWheel' );\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleKeyDown( event ) {\n\n\t\t//console.log( 'handleKeyDown' );\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase scope.keys.UP:\n\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.LEFT:\n\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.RIGHT:\n\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartRotate( event ) {\n\n\t\t//console.log( 'handleTouchStartRotate' );\n\n\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t}\n\n\tfunction handleTouchStartDollyPan( event ) {\n\n\t\t//console.log( 'handleTouchStartDollyPan' );\n\n\t\tif ( scope.enableZoom ) {\n\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyStart.set( 0, distance );\n\n\t\t}\n\n\t\tif ( scope.enablePan ) {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchMoveRotate( event ) {\n\n\t\t//console.log( 'handleTouchMoveRotate' );\n\n\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\t// rotating across whole screen goes 360 degrees around\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth );\n\n\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\t//console.log( 'handleTouchMoveDollyPan' );\n\n\t\tif ( scope.enableZoom ) {\n\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyEnd.set( 0, distance );\n\n\t\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\t\tdollyIn( dollyDelta.y );\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t}\n\n\t\tif ( scope.enablePan ) {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanEnd.set( x, y );\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleTouchEnd( event ) {\n\n\t\t//console.log( 'handleTouchEnd' );\n\n\t}\n\n\t//\n\t// event handlers - FSM: listen for events and reset state\n\t//\n\n\tfunction onMouseDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.button ) {\n\n\t\t\tcase scope.mouseButtons.ORBIT:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\tbreak;\n\n\t\t\tcase scope.mouseButtons.ZOOM:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\tbreak;\n\n\t\t\tcase scope.mouseButtons.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tdocument.addEventListener( 'mousemove', onMouseMove, false );\n\t\t\tdocument.addEventListener( 'mouseup', onMouseUp, false );\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleMouseUp( event );\n\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onMouseWheel( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t\thandleMouseWheel( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction onKeyDown( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\n\n\t\thandleKeyDown( event );\n\n\t}\n\n\tfunction onTouchStart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\t// one-fingered touch: rotate\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\t// two-fingered touch: dolly-pan\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onTouchMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1: // one-fingered touch: rotate\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\t\t\t\tif ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?\n\n\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2: // two-fingered touch: dolly-pan\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\t\t\t\tif ( state !== STATE.TOUCH_DOLLY_PAN ) return; // is this needed?\n\n\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t}\n\n\tfunction onTouchEnd( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleTouchEnd( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onContextMenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\t//\n\n\tscope.domElement.addEventListener( 'contextmenu', onContextMenu, false );\n\n\tscope.domElement.addEventListener( 'mousedown', onMouseDown, false );\n\tscope.domElement.addEventListener( 'wheel', onMouseWheel, false );\n\n\tscope.domElement.addEventListener( 'touchstart', onTouchStart, false );\n\tscope.domElement.addEventListener( 'touchend', onTouchEnd, false );\n\tscope.domElement.addEventListener( 'touchmove', onTouchMove, false );\n\n\twindow.addEventListener( 'keydown', onKeyDown, false );\n\n\t// force an update at start\n\n\tthis.update();\n\n};\n\nTHREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );\nTHREE.OrbitControls.prototype.constructor = THREE.OrbitControls;\n\nObject.defineProperties( THREE.OrbitControls.prototype, {\n\n\tcenter: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .center has been renamed to .target' );\n\t\t\treturn this.target;\n\n\t\t}\n\n\t},\n\n\t// backward compatibility\n\n\tnoZoom: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n\t\t\treturn ! this.enableZoom;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n\t\t\tthis.enableZoom = ! value;\n\n\t\t}\n\n\t},\n\n\tnoRotate: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n\t\t\treturn ! this.enableRotate;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n\t\t\tthis.enableRotate = ! value;\n\n\t\t}\n\n\t},\n\n\tnoPan: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n\t\t\treturn ! this.enablePan;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n\t\t\tthis.enablePan = ! value;\n\n\t\t}\n\n\t},\n\n\tnoKeys: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n\t\t\treturn ! this.enableKeys;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n\t\t\tthis.enableKeys = ! value;\n\n\t\t}\n\n\t},\n\n\tstaticMoving: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n\t\t\treturn ! this.enableDamping;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n\t\t\tthis.enableDamping = ! value;\n\n\t\t}\n\n\t},\n\n\tdynamicDampingFactor: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n\t\t\treturn this.dampingFactor;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n\t\t\tthis.dampingFactor = value;\n\n\t\t}\n\n\t}\n\n} );\n\nmodule.exports = exports.default = THREE.OrbitControls\n","import '../css/index.css';\nimport * as THREE from \"three\";\nimport dat from \"dat.gui\"; //a library that is a controller so you can tumble, pan etc.\nimport OrbitControls from \"three-orbitcontrols\";\n// import imageURL from './grassDiff.jpg';\nimport grassDiffTexture from '../textures/grassDiff.jpg';\nimport grassBmpTexture from '../textures/grassBump.png';\nimport grassAOTexture from '../textures/grassAO.jpg';\nimport skydomeTexture from '../textures/daytonight.png'\nconst treeGeo = require('../models/tree.obj');\n\n\nconst colours = {  //global variables\n\tblue01: 0x97b5e6,\n  blue02: 0x78afc4,\n  blue03: 0xb8ccd7,\n  green01: 0x424f23,\n  green02: 0x88842b,\n  green03: 0xb2b854,\n\tgreen04: 0x277c5c,\n  brown01: 0x9b4d26,\n  brown02: 0x804e45,\n\tbrown03: 0xad7d67,\n  red01: 0xa54338,\n  orange01: 0x9b4d26,\n  orange02: 0xad5b29,\n  white01: 0xfff6e2,\n  white02: 0xffdecf,\n\tgrey01: 0x9d8c72,\n\tgrey02: 0x9a9693\n};\n\n/// Light config stuff\nlet shadowConfig = {\n\tshadowCameraVisible: false,\n\tshadowCameraNear: 750,\n\tshadowCameraFar: 4000,\n\tshadowCameraFov: 30,\n\tshadowBias: -0.0002\n};\n\nlet scene, camera, fieldOfView, aspectRatio, nearPlane, farPlane, HEIGHT, WIDTH, renderer, container, controls;  //global variables\n\nlet world, sky, ground, clouds, trees, rocks, mountain, camtree; //(global variable)\n\n\n///// CREATE SCENE, CAMERA, RENDERER ///////\n\nconst createScene = () => {\n  //Get the width and the height of the screen,\n  //Use them to set up the aspect ratio of the camera\n  //and the size of the render.\n  HEIGHT = window.innerHeight;\n  WIDTH = window.innerWidth;\n\n  // Create the SCENE\n  scene = new THREE.Scene();\n\n  // Add a fog effect to the scene, same colour as the background colour\n  scene.fog = new THREE.Fog(colours.blue03, 10, 2500);\n\n\n  // Create the CAMERA\n  aspectRatio = WIDTH / HEIGHT; //set up aspect ratio with WIDTH + HEIGHT\n  fieldOfView = 60;\n  nearPlane = 0.1;\n  farPlane = 100000;\n\n  camera = new THREE.PerspectiveCamera(\n    fieldOfView,\n    aspectRatio,\n    nearPlane,\n    farPlane\n  );\n\tcamera.position.x = 0;\n\tcamera.position.y = 325;\n\tcamera.position.z = 400;\n\tcamera.lookAt({x: 0, y: 300.00000000000001, z: 450})\n\tcamera.setFocalLength(70); // default at 35\n\n//Create the RENDERER\nrenderer = new THREE.WebGLRenderer({\n  // Allow transparency to show the gradient background we defined in css.\n  alpha: true,\n  //Activate anti-aliasing, this is less performant, but as the project is low poly, should be fine.\n  antialias: true\n});\n// Define size of renderer, in this case it will fill the entire screen.\nrenderer.setSize(WIDTH, HEIGHT);\n//Enable shadow rendering\nrenderer.setPixelRatio(window.devicePixelRation ||  1); //setting it to the pixel ratio settings of your pc or 1 if it's not defined.\nrenderer.shadowMap.enabled = true;\nrenderer.shadowMap.type = THREE.PCFSoftShadowMap;\n\n// Add the DOM element of the renderer to the container we created in the HTML.\ncontainer = document.getElementById('world');\ncontainer.appendChild(renderer.domElement);\n}\n\n/////// CREATE LIGHTS /////////\n\nlet hemisphereLight, backLight, ambientLight, pointLight, sunLight; //global variables\n\nconst createLights = () => {\n  // A hemisphere Light is a gradient coloured light;\n  //First param is the sky colour, second param is the ground colour, third param is the intensity of the light.\n  hemisphereLight = new THREE.HemisphereLight(0xaaaaaa,0x000000, .0);\n\n  // A directional light shines from a specific direction.\n  //Acts like the sun, means all the rays produced are parallel.\n  backLight = new THREE.DirectionalLight(0xffffff, .9);\n  //Set the direction of the direcitonal light\n  backLight.position.set(-500, -700, -400); //150, 350, 350\n\tbackLight.rotation.set(0, 0, 0)\n  //Allow directional light to cast shadows\n  backLight.castShadow = false;\n\t// backLight.shadowCameraVisible = true;\n  //Define the visible area of the projected shadow\n  backLight.shadow.camera.left = - 400;\n  backLight.shadow.camera.right = 400;\n  backLight.shadow.camera.top = 400;\n  backLight.shadow.camera.bottom = - 400;\n  backLight.shadow.camera.near = 1;\n  backLight.shadow.camera.far = - 1000;\n  // Define the resolution of the shadow, the higher the better but also more expensive and less performant\n\n\n\n\n\n\tambientLight = new THREE.AmbientLight( 0x3f2806 );\n\tpointLight = new THREE.PointLight( 0xffc95c, 1, 5000 );   //0xffaa00\n\tpointLight.position.set(0, 500, 0);\n\tsunLight = new THREE.SpotLight( 0xffffff, 0.3, 0, Math.PI/2 );\n\tsunLight.position.set( 1000, 2000, 1000 ); //1k, 2k, 1k\n\tsunLight.castShadow = true;\n\tsunLight.shadow = new THREE.LightShadow( new THREE.PerspectiveCamera( shadowConfig.shadowCameraFov, 1, shadowConfig.shadowCameraNear, shadowConfig.shadowCameraFar ) );\n\tsunLight.shadow.bias = shadowConfig.shadowBias;\n  // To activate the lights, just add them to the\n\t\tscene.add( ambientLight );\n\t\tscene.add( pointLight );\n\t\tscene.add( sunLight );\n  // scene.add(hemisphereLight);\n  scene.add(backLight);\n\n}\n\n////////// SUNLIGHT ANIM BULLSHIT //////\n\nvar angle = 0;\nvar position = 0;\n\n// direction vector for movement\nvar direction = new THREE.Vector3(1, 0, 0);\nvar up = new THREE.Vector3(0, 0, 1);\nvar axis = new THREE.Vector3();\n// scalar to simulate speed\nvar speed = 0.5\nlet path;\nvar radius = 2000; //1100\nvar degreesStart = 360;  //75\nvar degreesEnd = 1; //30\nvar radiansStart = (degreesStart * Math.PI) / 180;\nvar radiansEnd = ((degreesEnd) * Math.PI) / 180;\n\n// the path\n  // path = new THREE.Path([\n  //   new THREE.Vector2(-70, -70), //-50, -50\n  //   new THREE.Vector2(-70, -70),\n\t// \t]);\n\t\tpath = new THREE.EllipseCurve(0, 0, radius, radius, radiansStart, radiansEnd, true);\n\n  // var arcRadius = 50;\n\t// path.set\n  // path.moveTo(0, 0 - arcRadius);\n  // path.absarc(0, 0, arcRadius, -Math.PI / 2, 0, false);\n  // path.lineTo(50, 50);\n\n\n  // Start angle and point\n  let previousAngle = getAngle( position );\n  let previousPoint = path.getPointAt( position );\n\n\nfunction drawPath() {\n  var vertices = path.getSpacedPoints(20);\n\n  // Change 2D points to 3D points\n  for (var i = 0; i < vertices.length; i++) {\n\t\tlet point = vertices[i]\n    vertices[i] = new THREE.Vector3(point.x, point.y, 0);\n  }\n  var lineGeometry = new THREE.Geometry();\n  lineGeometry.vertices = vertices;\n  var lineMaterial = new THREE.LineBasicMaterial({\n    color: 0xf7f052\n  });\n  var line = new THREE.Line(lineGeometry, lineMaterial)\n  scene.add(line);\n}\n\nfunction move() {\n\n  // add up to position for movement\n  position += 0.001;\n\n  // get the point at position\n  var point = path.getPointAt(position);\n  sunLight.position.x = point.x;\n  sunLight.position.y = point.y;\n\n  var angle = getAngle(position);\n  // set the quaternion\n  sunLight.quaternion.setFromAxisAngle( up, angle );\n\n  sunLight.position.x += ( point.x - previousPoint.x );\n  sunLight.position.y += ( point.y - previousPoint.y );\n\n  // set the quaternion\n  sunLight.rotation.z += ( angle - previousAngle );\n\n  previousPoint = point;\n  previousAngle = angle;\n\n}\n\nfunction getAngle( position ){\n// get the 2Dtangent to the curve\n  var tangent = path.getTangent(position).normalize();\n\n  // change tangent to 3D\n  angle = - Math.atan( tangent.x / tangent.y);\n\n  return angle;\n}\n\n////////////////////////////////////////////////\n\n\nTHREE.ImageUtils.crossOrigin = ''; //Allow CORS\n\n////// DEFINING A GROUND /////////////\n// This function is defining what a sea would look like\nconst defineGround = function() { //(global variable)\n  \tlet geo = new THREE.SphereGeometry(300, 30, 30);\n\n\t\tlet grassDiffuse = new THREE.TextureLoader().load(grassDiffTexture);\n\t\tgrassDiffuse.repeat.set(20,20)\n\t\tgrassDiffuse.wrapS = grassDiffuse.wrapT = THREE.RepeatWrapping;\n\t\tgrassDiffuse.anisotropy = 16;\n\t\t// grassDiffuse.needsUpdate = true;\n\n\t\tlet grassBump = THREE.ImageUtils.loadTexture(grassBmpTexture);\n\t\tgrassBump.repeat.set(20, 20);\n\t\tgrassBump.wrapS = grassBump.wrapT = \tTHREE.RepeatWrapping;\n\t\tgrassBump.anisotropy = 16;\n\t\t// grassBump.needsUpdate = true;\n\n\t\tlet grassAO = THREE.ImageUtils.loadTexture(grassAOTexture);\n\t\tconsole.log('AO', grassAO);\n\t\tgrassAO.repeat.set(20, 20);\n\t\tgrassAO.wrapS = grassBump.wrapT = \tTHREE.RepeatWrapping;\n\t\tgrassAO.anisotropy = 16;\n\t\t// grassAO.needsUpdate = true;\n\n  \tlet mat = new THREE.MeshPhongMaterial( {\n\t\t\tflatShading: false,\n\t\t\tmap: grassDiffuse,\n\t\t\tbumpMap: grassBump,\n\t\t\tbumpScale: .8,\n\t\t\taoMap: grassAO,\n\t\t\tmetalness: 0.0,\n\t\t\treflectivity: 0.0,\n\t\t\tshininess: 0.0,\n\t\t\twireframe: false\n\t\t} )\n\t\tconsole.log(mat);\n  this.mesh = new THREE.Mesh( geo, mat );\n  \tthis.mesh.receiveShadow = true;\n  \tthis.mesh.castShadow= false;\n  \tthis.mesh.rotation.z= - Math.PI/2;\n  };\n\n\n\n//////// DEFINING A CLOUD //////////\n\nconst defineCloud = function() {\n  // Create an empty container that will hold the different parts of the cloud\n  this.mesh = new THREE.Object3D();\n\n  //Create a cube geometry;\n  //this shape will be duplicated to create the cloud\n  let geo = new THREE.IcosahedronGeometry(15); //30, 30, 30\n\n  //Create a material; a simple white material\n  let mat = new THREE.MeshStandardMaterial({\n    color:colours.white02,\n\t\topacity: .5\n  })\n\n  // Duplicate the geometry a random number of times\n  let numOfBlocs = 3+Math.floor(Math.random()*3);\n  //Loop to create duplicates\n  for (let i = 0; i < numOfBlocs; i++){\n    //Create the mesh with the geometry + material\n    let blocs = new THREE.Mesh(geo, mat);\n    //Set the position and rotation of each cube randomly\n    blocs.position.x = i*15;\n    blocs.position.y = Math.random()*10;\n    blocs.position.z = Math.random()*10;\n    blocs.rotation.z = Math.random()*Math.PI*2;\n    blocs.rotation.y = Math.random()*Math.PI*2;\n    //Set the size of the cube randomly\n    let size = .1 + Math.random()*.9;\n    blocs.scale.set(size,size,size);\n\n    //Alow each cube to cast and receive shadows\n    blocs.castShadow = true;\n    blocs.receiveShadow = true;\n\n    // Add the cube to the container we created at the beginning.\n    this.mesh.add(blocs);\n  }\n}\n\n///// DEFINING A CLOUD GROUP WITH OUR CLOUDS //////////\nconst defineCloudRing = function() { //(global variable)\n  //Create an empty container\n  this.mesh = new THREE.Object3D();\n  //Choose a number of clouds to be scattered in the sky\n  this.numOfClouds = 20;\n  //To distribute the clouds consistently, need to place according to a uniform angle\n  let stepAngle = Math.PI*2 / this.numOfClouds;\n\n  //////////CREATE CLOUD INSTANCES INSIDE SKY OBJECT  //////////\n  for (let i = 0; i < this.numOfClouds; i++) {\n    let cloud = new defineCloud();\n    // Set the rotation and position of each cloud using some trigonometry\n    let a = stepAngle*i; //final angle of cloud group.\n    let h = 750 + Math.random()*200; //this is the distance between the centre of the axis and the cloud itself\n    //Trigonometry: Converting polar coordinates(angle, distance) into Cartesian coordinates(x, y)\n    cloud.mesh.position.y = Math.sin(a)*h;\n    cloud.mesh.position.x = Math.cos(a)*h;\n    //Rotate the cloud according to it's position\n    // cloud.mesh.rotation.z = a + Math.PI/2;\n    //For a better result we position the clouds at random depths inside the scene using the z (depth) axis.\n    // cloud.mesh.position.z = - 600;\n    //Also setting a random scale for each cloud\n    let size = 1 + Math.random()*3;\n    cloud.mesh.scale.set(size,size,size);\n\n    //Finally, adding the cloud to the scene\n    this.mesh.add(cloud.mesh);\n  }\n};\n\n////////////// TREE 1: DEFINE PINE TREE /////////////////\nconst definePineTree = function() {\n\tthis.mesh = new THREE.Object3D();\n\tlet pineTrunkGeo = new THREE.BoxGeometry(2, 13, 2);\n\tlet pineTrunkMat = new THREE.MeshStandardMaterial({\n\t\tcolor: colours.brown01,\n\t\tflatShading: true,\n\t\tmetalness: 0.0,\n\t\treflectivity: 0.0,\n\t\tshininess: 0.0});\n\tlet pineTrunk = new THREE.Mesh(pineTrunkGeo, pineTrunkMat);\n\tpineTrunk.castShadow = true;\n\tpineTrunk.receiveShadow = true;\n\tpineTrunk.scale.set(1.5,1.5,1.5);\n\tthis.mesh.add(pineTrunk);\n\tlet pineTopGeo = new THREE.ConeGeometry( 6, 14, 8 );\n\tlet pineTopMat = new THREE.MeshStandardMaterial({\n\t\tcolor:colours.green04,\n\t\tflatShading:true,\n\t\tmetalness: 0.0,\n\t\treflectivity: 0.0,\n\t\tshininess: 0.0})\n\tlet pineTreeTop = new THREE.Mesh(pineTopGeo, pineTopMat);\n\tpineTreeTop.castShadow = true;\n\tpineTreeTop.receiveShadow = true;\n\tpineTreeTop.position.y = 10;\n\tpineTreeTop.scale.set(1.5,1.5,1.5);\n\tthis.mesh.add(pineTreeTop);\n}\n\n////////////// TREE 2: DEFINE ROUND TREE /////////////\nconst defineRoundTree = function() {\n\tthis.mesh = new THREE.Object3D();\n\tlet roundTrunkGeo = new THREE.BoxGeometry(2, 20, 2);\n\tlet roundTrunkMat = new THREE.MeshStandardMaterial({\n\t\tcolor: colours.brown02,\n\t\t flatShading: true,\n\t\t metalness: 0.0,\n\t\t reflectivity: 0.0,\n\t\t shininess: 0.0});\n\tlet roundTrunk = new THREE.Mesh(roundTrunkGeo, roundTrunkMat);\n\troundTrunk.castShadow = true;\n\troundTrunk.receiveShadow = true;\n\troundTrunk.scale.set(1.5,1.5,1.5);\n\tthis.mesh.add(roundTrunk);\n\n\n\tlet roundTopGeo = new THREE.SphereGeometry( 7, 7, 8 );\n\tlet roundTopMat = new THREE.MeshStandardMaterial({\n\t\tcolor:colours.green03,\n\t\tflatShading:true,\n\t\tmetalness: 0.0,\n\t\treflectivity: 0.0,\n\t\tshininess: 0.0})\n\tlet roundTreeTop = new THREE.Mesh(roundTopGeo, roundTopMat);\n\troundTreeTop.castShadow = true;\n\troundTreeTop.receiveShadow = true;\n\troundTreeTop.position.y = 10;\n\troundTreeTop.scale.set(1.5,1.5,1.5);\n\tthis.mesh.add(roundTreeTop);\n}\n\n////////// DEFINE APPLE TREETOP ////////////\nconst defineAppleTreeTop = function() {\n  // Create an empty container that will hold the blocks of the tree top\n  this.mesh = new THREE.Object3D();\n\tthis.mesh.scale.set(1.5, 1.5, 1.5);\n\n  //Create a cube geometry;\n  //this shape will be duplicated to create the cloud\n  let appleTreeTopGeo = new THREE.BoxGeometry(2, 2, 2); //30, 30, 30\n\n  //Create a material; a simple white material\n  let appleTreeTopMat = new THREE.MeshPhongMaterial({\n    color:colours.green01,\n\t\tflatShading: true,\n\t\tmetalness: 0.0,\n\t\treflectivity: 0.0,\n\t\tshininess: 0.0\n  })\n\n  // Duplicate the geometry a random number of times\n  let numOfBlocs = 30+Math.floor(Math.random()*3);\n  //Loop to create duplicates\n  for (let i = 0; i < numOfBlocs; i++){\n    //Create the mesh with the geometry + material\n    let blocs = new THREE.Mesh(appleTreeTopGeo, appleTreeTopMat);\n    //Set the position and rotation of each cube randomly\n    blocs.position.x = i*.5;\n    blocs.position.y = Math.random()*10;\n    blocs.position.z = Math.random()*10;\n    blocs.rotation.z = Math.random()*Math.PI*2;\n    blocs.rotation.y = Math.random()*Math.PI*2;\n    //Set the size of the cube randomly\n    let size = .7 + Math.random()*2;\n    blocs.scale.set(size,size,size);\n\n    //Alow each cube to cast and receive shadows\n    blocs.castShadow = true;\n    blocs.receiveShadow = true;\n    // Add the cube to the container we created at the beginning.\n    this.mesh.add(blocs);\n  }\n}\n///////////// TREE 3: DEFINE APPLE TREE //////////////\nconst defineAppleTree = function() {\n\tthis.mesh = new THREE.Object3D();\n\tlet appleTreeTrunkGeo = new THREE.BoxGeometry(2, 20, 2);\n\tlet appleTreeTrunkMat = new THREE.MeshStandardMaterial({\n\t\tcolor: colours.brown03,\n\t\tflatShading: true,\n\t\tmetalness: 0.0,\n\t\treflectivity: 0.0,\n\t\tshininess: 0.0});\n\tlet appleTreeTrunk = new THREE.Mesh(appleTreeTrunkGeo, appleTreeTrunkMat);\n\tappleTreeTrunk.castShadow = true;\n\tappleTreeTrunk.receiveShadow = true;\n\tthis.mesh.add(appleTreeTrunk);\n\n\tlet appleTreeTop = new defineAppleTreeTop();\n\t// appleTreeTop.mesh.position.x = - 10;\n\t// appleTreeTop.mesh.position.y = 5;\n\tappleTreeTop.mesh.position.set(-10, 5, -5);\n\tthis.mesh.add(appleTreeTop.mesh);\n}\n\n///////// DEFINE SPOTTY TREETOP ////////////\nconst defineSpottyTreeTop = function() {\n  // Create an empty container that will hold the blocks of the tree top\n  this.mesh = new THREE.Object3D();\n\tthis.mesh.scale.set(1.5, 1.5, 1.5);\n\n  //Create a cube geometry;\n  //this shape will be duplicated to create the cloud\n  let spottyTreeTopGeo = new THREE.SphereGeometry(2, 6, 6); //30, 30, 30\n\n  //Create a material; a simple white material\n  let spottyTreeTopMat = new THREE.MeshPhongMaterial({\n    color:colours.green02,\n\t\tflatShading: true,\n\t\tmetalness: 0.0,\n\t\treflectivity: 0.0,\n\t\tshininess: 0.0});\n\n  // Duplicate the geometry a random number of times\n  let numOfBlocs = 15+Math.floor(Math.random()*3);\n  //Loop to create duplicates\n  for (let i = 0; i < numOfBlocs; i++){\n    //Create the mesh with the geometry + material\n    let blocs = new THREE.Mesh(spottyTreeTopGeo, spottyTreeTopMat);\n    //Set the position and rotation of each cube randomly\n    blocs.position.x = i*.5;\n    blocs.position.y = Math.random()*10;\n    blocs.position.z = Math.random()*10;\n    blocs.rotation.z = Math.random()*Math.PI*2;\n    blocs.rotation.y = Math.random()*Math.PI*2;\n    //Set the size of the cube randomly\n    let size = .7 + Math.random()*2;\n    blocs.scale.set(size,size,size);\n\n    //Alow each cube to cast and receive shadows\n    blocs.castShadow = true;\n    blocs.receiveShadow = true;\n    // Add the cube to the container we created at the beginning.\n    this.mesh.add(blocs);\n  }\n}\n/////////////TREE 4: DEFINE SPOTTY TREE //////////////\nconst defineSpottyTree = function() {\n\tthis.mesh = new THREE.Object3D();\n\tlet spottyTreeTrunkGeo = new THREE.BoxGeometry(4, 20, 4);\n\tlet spottyTreeTrunkMat = new THREE.MeshStandardMaterial({\n\t\tcolor: colours.orange01,\n\t\t flatShading: true,\n\t\t metalness: 0.0,\n\t\t reflectivity: 0.0,\n\t\t shininess: 0.0});\n\tlet spottyTreeTrunk = new THREE.Mesh(spottyTreeTrunkGeo, spottyTreeTrunkMat);\n\tspottyTreeTrunk.castShadow = true;\n\tspottyTreeTrunk.receiveShadow = true;\n\tthis.mesh.add(spottyTreeTrunk);\n\n\tlet spottyTreeTop = new defineSpottyTreeTop();\n\tspottyTreeTop.mesh.position.set(-8, 6, -5);\n\tthis.mesh.add(spottyTreeTop.mesh);\n}\n\n\n////// DEFINE ROCK //////////////\nconst defineRock = function () {\n\tthis.mesh = new THREE.Object3D();\n\tlet rockGeo = new THREE.BoxGeometry(3, 3, 3);\n\tlet rockMat = new THREE.MeshStandardMaterial({\n\t\tcolor:colours.grey02,\n\t\t flatShading:true,\n\t\t metalness: 0.0,\n\t\t reflectivity: 0.0,\n\t\t shininess: 0.0});\n\tlet numOfBlocs = Math.floor(Math.random()*3);\n\t// Loop to create duplicates, 0-3 duplicates.\n\tfor (let i = 1; i < numOfBlocs; i++){\n\tlet blocs = new THREE.Mesh(rockGeo, rockMat);\n\t//Set the position and rotation of each cube randomly\n\tblocs.position.x = i*3;\n\tblocs.position.y = Math.random()*2;\n\tblocs.position.z = Math.random()*10;\n\tblocs.rotation.z = Math.random()*Math.PI*2;\n\tblocs.rotation.y = Math.random()*Math.PI*2;\n\t//Set the size of the cube randomly\n\tlet size = 1 + Math.random()*2;\n\tblocs.scale.set(size,size,size);\n\tblocs.castShadow = true;\n\tblocs.receiveShadow = true;\n\tthis.mesh.add(blocs);\n\t}\n}\n\n\n///// Random Lat Long Function /////\n\nfunction getRandomInRange(from, to, fixed) {\n    return (Math.random() * (to - from) + from).toFixed(fixed) * 1;\n    // .toFixed() returns string, so ' * 1' is a trick to convert to number\n}\n\n\n//////// DEFINE WORLD //////////\nconst defineWorld = function(){\n\tthis.mesh = new THREE.Object3D();\n\n////////// CREATING AN INSTANCE OF GROUND /////////////\n\tground = new defineGround();\n\tground.mesh.position.y= 0; // -150\n\tground.mesh.position.z= 0; //150\n\t// Add the mesh of the sea to the scene\n\tthis.mesh.add(ground.mesh);\n\n////// CREATE CAMERA TREE ////////\n\n\tcamtree = new definePineTree();\n\tcamtree.mesh.position.y = 305;\n\tcamera.lookAt(camtree.mesh.position);\n\n/////////////////// CREATE RANDOM FUCKING TREES ///////////////////\n\nfor (let i = 0; i < 100; i++) {\n        let pineTree = new definePineTree();\n        let roundTree = new defineRoundTree();\n        let appleTree = new defineAppleTree();\n        let spottyTree = new defineSpottyTree();\n        let treesArray = [pineTree, roundTree, appleTree, spottyTree];\n        trees = treesArray[i % treesArray.length];\n\n        // generate random lat long coordinates\n        let lat = getRandomInRange(-180, 180, 3)\n        let long = getRandomInRange(-180, 180, 3)\n\n        let latRad = lat * (Math.PI / 180);\n        let longRad = -long * (Math.PI / 180);\n\n        trees.mesh.position.x = 304 * Math.cos(latRad) * Math.cos(longRad);\n        trees.mesh.position.y = 304 * Math.sin(latRad);\n        trees.mesh.position.z = 304 * Math.cos(latRad) * Math.sin(longRad);\n\n        trees.mesh.rotation.set(0.0, -longRad, latRad - Math.PI * 0.5);\n\n        this.mesh.add(trees.mesh)\n    }\n\n\n///// CREATE RANDOM ROCKS //////\n\tlet numOfRocks = 500;\n\tfor (let i = 0; i < numOfRocks; i++) {\n\t\trocks = new defineRock();\n\t\tlet theta = (Math.random() - 0.5)*4*Math.PI;\n\t\tlet phi = (Math.random() - 0.5)*2*Math.PI;\n\t\trocks.mesh.position.x = 295 * Math.sin(theta)* Math.cos(phi);\n\t\trocks.mesh.position.y =  295 * Math.sin(theta)* Math.sin(phi);\n\t\trocks.mesh.position.z =  295 * Math.cos(theta) - 5;\n\t\tthis.mesh.add(rocks.mesh);\n\t}\n}\n\n//// DEFINE SKY //////\nconst defineSky = function() {\n\tthis.mesh = new THREE.Object3D();\n\t///////////// CREATE A SKYBOX //////////////\n\n\t    // prepare ShaderMaterial\n\t    let uniforms = {\n\t        texture: { type: 't', value: THREE.ImageUtils.loadTexture(skydomeTexture) }\n\t    };\n\t    let skyMaterial = new THREE.ShaderMaterial( {\n\t        uniforms: uniforms,\n\t        vertexShader: document.getElementById('sky-vertex').textContent, fragmentShader: document.getElementById('sky-fragment').textContent,\n\t\t\t\t\tside: THREE.BackSide\n\t    });\n\t    // create Mesh with sphere geometry and add to the scene\n\t    let skyBox = new THREE.Mesh(new THREE.SphereGeometry(5000, 60, 40), skyMaterial);\n\t    skyBox.scale.set(-1, 1, 1);\n\t    skyBox.rotation.order = 'XZY';\n\t    skyBox.renderDepth = 500.0;\n\t    this.mesh.add(skyBox);\n}\n\n//////// CREATE MULTIPLE INSTANCES OF CLOUDS ///////////\nconst defineCloudGrp = function(){\n\tthis.mesh = new THREE.Object3D();\n\tlet numOfClouds = 200;\n\tfor (let i = 0; i < numOfClouds; i++) {\n\t\tclouds = new defineCloud();\n\t\tlet theta = (Math.random() - 0.5)*4*Math.PI;\n\t\tlet phi = (Math.random() - 0.5)*2*Math.PI;\n\t\tclouds.mesh.position.x = 700 * Math.sin(theta)* Math.cos(phi);\n\t\tclouds.mesh.position.y =  700 * Math.sin(theta)* Math.sin(phi);\n\t\tclouds.mesh.position.z =  700 * Math.cos(theta) - 5;\n\t\tthis.mesh.add(clouds.mesh);\n\t}\n}\n\n//////// DEFINE MOUNTAINS /////\nconst defineMountain = function(){\n\tlet geo = new THREE.CylinderGeometry(300,50,200,40,10);\n\tgeo.applyMatrix(new THREE.Matrix4().makeRotationX(-Math.PI/2));\n\n\t// important: by merging vertices we ensure the continuity of the waves\n\tgeo.mergeVertices();\n\n\t// get the vertices\n\tvar l = geo.vertices.length;\n\n\t// create an array to store new data associated to each vertex\n\tthis.slopes = [];\n\n\tfor (var i=0; i<l; i++){\n\t\t// get each vertex\n\t\tvar v = geo.vertices[i];\n\n\t\t// store some data associated to it\n\t\tthis.slopes.push({y:v.y,\n\t\t\t\t\t\t\t\t\t\t x:v.x,\n\t\t\t\t\t\t\t\t\t\t z:v.z,\n\t\t\t\t\t\t\t\t\t\t // a random angle\n\t\t\t\t\t\t\t\t\t\t ang:Math.random()*Math.PI*2,\n\t\t\t\t\t\t\t\t\t\t // a random distance\n\t\t\t\t\t\t\t\t\t\t amp:10 + Math.random()*15,\n\t\t\t\t\t\t\t\t\t\t});\n\t};\n\tvar mat = new THREE.MeshPhongMaterial({\n\t\tcolor:colours.grey01,\n\t\tflatShading: true\n\t});\n\n\tthis.mesh = new THREE.Mesh(geo, mat);\n\tthis.mesh.receiveShadow = true;\n\tthis.mesh.position.y = 50;\n\tthis.mesh.position.z = - 400;\n}\n////// DEFINE THE SLOPES ON THE MOUNTAIN ///////\ndefineMountain.prototype.createSlopes = function (){\n\n\t// get the vertices\n\tvar verts = this.mesh.geometry.vertices;\n\tvar l = verts.length;\n\n\tfor (var i=0; i<l; i++){\n\t\tvar v = verts[i];\n\n\t\t// get the data associated to it\n\t\tvar vprops = this.slopes[i];\n\n\t\t// update the position of the vertex\n\t\tv.x = vprops.x + Math.cos(vprops.ang)*vprops.amp;\n\t\tv.y = vprops.y + Math.sin(vprops.ang)*vprops.amp;\n\t}\n}\n\n\n\n\n\n// ___________________________________________________\n\n\n\n\n\n/////// CREATING THE ENTIRE WORLD //////////////\n\nfunction createWorld () {\n\tworld = new defineWorld();\n\tscene.add(world.mesh);\n}\n\n////////// CREATING THE SLOPPY MOUNTAIN ////////////\n\n\nfunction createMountain() {\n\tmountain = new defineMountain();\n\tscene.add(mountain.mesh);\n}\n\n\n///// CREATE THE SKY /////////\n\nfunction createSky() {\n\tsky = new defineSky();\n\tscene.add(sky.mesh);\n}\n\n///// CREATE THE CLOUDS //////\nfunction createClouds() {\n\tclouds = new defineCloudGrp();\n\tscene.add(clouds.mesh);\n}\n\n\n//TODO: animate lights day + night, grass? alpha?\n\n\n\n\n\n\n\n\n\n\n\n\n////////// INIT FUNCTION !!!!!!! ////////\nfunction init() {  //add (event) afterwards\n  //Set up the scene, camera and renderer\n  createScene();\n\n\n  //Add Lights\n  createLights();\n\tdrawPath();\n\t// move();\n\n\t//Add World: skybox, ground, clouds, trees, rocks\n\tcreateWorld();\n\tcreateSky();\n\tcreateClouds();\n\tcreateMountain();\n\tmountain.createSlopes();\n\n\n  /// FUCK ORBIT CONTROLS\n  // addHelpers();\n\n\n  // //Add MouseMove Event Listener\n  // document.addEventListener('mousemove', handleMouseMove, false);\n\n  //Start a loop that will update the objects' positions\n  //And render the scene on each frame\n  loop();\n\n}\n\n///////// LOOP ANIMATION ////////////\n\nfunction loop() {\n  //Rotate the ground and the sky\n\tworld.mesh.rotation.x += 0.004;\n\tclouds.mesh.rotation.x += 0.002;\n\tsky.mesh.rotation.x += 0.001;\n\n\n\n  //Render the scene (+ its contents) and the camera. Need to rerender every time the animation changes.\n  renderer.render(scene, camera);\n\n\n  //Call the loop function again.\n  requestAnimationFrame(loop);\n}\n\n\n///// HANDLE RESIZE CALLBACK  ////////\n\nconst handleWindowResize = () => {\n  console.log('resizing renderer!');\n  //update height and width of renderer and camera\n  HEIGHT = window.innerHeight;\n  WIDTH = window.innerWidth;\n  renderer.setSize(WIDTH, HEIGHT);\n  camera.aspect = WIDTH / HEIGHT;\n  camera.updateProjectionMatrix();\n}\n\n//////////////// ORBIT CONTROLS //////////\nfunction addHelpers() {\n\t\t// 1.Orbit Controls\n   controls = new OrbitControls(camera, renderer.domElement); //we want our camera that you want to change the position of, and the second argument is what you want to see.\n\t controls.update();\n\n\t // 2. ArrowHelper\n\t let directionV3 = new THREE.Vector3(1, 0, 1);\n\t let originV3 = new THREE.Vector3(0, 200, 0);\n\t let arrowHelper = new THREE.ArrowHelper(directionV3, \toriginV3, 100, 0xff0000, 20, 10); // 100 is length, 20 \tand 10 are head length and width\n\t scene.add(arrowHelper);\n\n\t //3. Axis Helper\n\t let axes = new THREE.AxesHelper(200);\n\t scene.add(axes);\n\n\t //4. Bounding Box Helper\n\t let bboxHelper = new THREE.BoxHelper(scene, 0x999999); //first argument is what you want bounding box to be around\n\t scene.add(bboxHelper);\n\t bboxHelper.update();\n\n\t //5. Camera Helper\n\t let cameraParObj = new THREE.Object3D();\n\t cameraParObj.position.y = 200;\n\t cameraParObj.position.z = 700;\n\t scene.add(cameraParObj);\n\t cameraParObj.add(camera); //passing in my camera\n\t let cameraHelper = new THREE.CameraHelper(camera); //passing in my camera\n\t scene.add(cameraHelper);\n\t cameraHelper.update();\n\n\t //6. DirectionalLight Helper\n\t let dlightHelper = new THREE.DirectionalLightHelper(backLight, 50); // 50 is helper size, shadowLight is my directional light\n\t scene.add(dlightHelper);\n\t dlightHelper.update();\n\n\t //7. HemisphereLight Helper\n\t let hlightHelper = new THREE.HemisphereLightHelper(hemisphereLight, 50, 300); // 50 is sphere size, 300 is arrow length, hemisphereLight is my light I've passed in.\n\t // scene.add(hlightHelper);\n\n\t //8. Grid Helper\n\t let gridHelper = new THREE.GridHelper(1000, 40, colours.red01); // 500 is grid size, 20 is grid step\n\t scene.add(gridHelper);\n\n\t //9. sunLight Helper\n\t let shadowCameraHelper = new THREE.CameraHelper( sunLight.shadow.camera );\n\t\tshadowCameraHelper.visible;\tshadowConfig.shadowCameraVisible;\n\t\tscene.add( shadowCameraHelper );\n\n\t//10. PointLight Helper\n\tlet pointLightHelper = new THREE.PointLightHelper( pointLight, 10 );\n\tscene.add( pointLightHelper );\n\n\n\n}\n\n\n///// DOM BULLSHIT //////\n\n  ////// INIT CALLBACK FUNCTION ON LOAD /////////\n  window.addEventListener('load', init, false);\n  ////// SCREEN RESIZE CALLBACK ///////\n  window.addEventListener('resize', handleWindowResize, false);\n\n\t///// TRYING TO LOAD SOME OBJ SHIT ////\n\t// let loader = new THREE.OBJLoader();\n\t// loader.load(\n\t// \ttreeGeo,\n\t// \tfunction(object){\n\t// \t\tscene.add(object)\n\t// \t})\n"]}